summaryrefslogtreecommitdiffstats
path: root/t
diff options
context:
space:
mode:
Diffstat (limited to '')
-rw-r--r--t/00-perms.t37
-rw-r--r--t/01-classes.t38
-rw-r--r--t/12-msguntypot.t66
-rw-r--r--t/13-plural.t49
-rw-r--r--t/Testhelper.pm601
-rw-r--r--t/add.t46
-rw-r--r--t/add/list/_output7
-rw-r--r--t/add/list/_output-18
-rw-r--r--t/add/list/_output-12312
-rw-r--r--t/add/list/_output-28
-rw-r--r--t/add/list/_output-38
-rw-r--r--t/add/list/_output-list12
-rw-r--r--t/add/list/add-13
-rw-r--r--t/add/list/add-23
-rw-r--r--t/add/list/add-33
-rw-r--r--t/add/list/add.list3
-rw-r--r--t/add/list/input-16
-rw-r--r--t/add/list/input-26
-rw-r--r--t/add/list/input-36
-rw-r--r--t/add/list/input-46
-rw-r--r--t/add/list/input-56
-rw-r--r--t/add/list/list.pot29
-rw-r--r--t/add/list/po4a.conf10
-rw-r--r--t/add/list/up.po29
-rw-r--r--t/add/modifiers/_output10
-rw-r--r--t/add/modifiers/_with-18
-rw-r--r--t/add/modifiers/_with-78
-rw-r--r--t/add/modifiers/_without-26
-rw-r--r--t/add/modifiers/_without-36
-rw-r--r--t/add/modifiers/_without-46
-rw-r--r--t/add/modifiers/_without-56
-rw-r--r--t/add/modifiers/_without-66
-rw-r--r--t/add/modifiers/_without-86
-rw-r--r--t/add/modifiers/addendum3
-rw-r--r--t/add/modifiers/addendum.list3
-rw-r--r--t/add/modifiers/input-16
-rw-r--r--t/add/modifiers/input-26
-rw-r--r--t/add/modifiers/input-36
-rw-r--r--t/add/modifiers/input-46
-rw-r--r--t/add/modifiers/input-56
-rw-r--r--t/add/modifiers/input-66
-rw-r--r--t/add/modifiers/input-76
-rw-r--r--t/add/modifiers/input-86
-rw-r--r--t/add/modifiers/list.pot29
-rw-r--r--t/add/modifiers/po4a.conf26
-rw-r--r--t/add/modifiers/up.po29
-rw-r--r--t/add/path/_multiple.man.de.112
-rw-r--r--t/add/path/_multiple.man.es.110
-rw-r--r--t/add/path/_multiple.man.fr.112
-rw-r--r--t/add/path/_multiple.man.it.110
-rw-r--r--t/add/path/_output9
-rw-r--r--t/add/path/add.de3
-rw-r--r--t/add/path/add.fr3
-rw-r--r--t/add/path/multiple.de.po39
-rw-r--r--t/add/path/multiple.es.po39
-rw-r--r--t/add/path/multiple.fr.po39
-rw-r--r--t/add/path/multiple.it.po39
-rw-r--r--t/add/path/multiple.man.15
-rw-r--r--t/add/path/multiple.pot39
-rw-r--r--t/add/path/po4a.conf5
-rw-r--r--t/add/positioning/_file-after.pod.fr26
-rw-r--r--t/add/positioning/_file-before.pod.fr26
-rw-r--r--t/add/positioning/_file-eof.pod.fr26
-rw-r--r--t/add/positioning/_file-eofmode.pod.fr26
-rw-r--r--t/add/positioning/_output6
-rw-r--r--t/add/positioning/add-after.fr5
-rw-r--r--t/add/positioning/add-before.fr5
-rw-r--r--t/add/positioning/add-eof.fr5
-rw-r--r--t/add/positioning/add-eofmode.fr5
-rw-r--r--t/add/positioning/fr.po37
-rw-r--r--t/add/positioning/input1.pod7
-rw-r--r--t/add/positioning/input2.pod7
-rw-r--r--t/add/positioning/input3.pod7
-rw-r--r--t/add/positioning/input4.pod7
-rw-r--r--t/add/positioning/positioning.conf9
-rw-r--r--t/add/positioning/positioning.pot37
-rw-r--r--t/cfg-args.t87
-rw-r--r--t/cfg-multi.t107
-rw-r--r--t/cfg-option.t23
-rw-r--r--t/cfg-single.t133
-rw-r--r--t/cfg-split.t108
-rw-r--r--t/cfg/args-alias-redef/_man.de.112
-rw-r--r--t/cfg/args-alias-redef/_man.es.112
-rw-r--r--t/cfg/args-alias-redef/_man.fr.112
-rw-r--r--t/cfg/args-alias-redef/_man.it.112
-rw-r--r--t/cfg/args-alias-redef/_output6
-rw-r--r--t/cfg/args-alias-redef/args.de.po43
-rw-r--r--t/cfg/args-alias-redef/args.es.po43
-rw-r--r--t/cfg/args-alias-redef/args.fr.po43
-rw-r--r--t/cfg/args-alias-redef/args.it.po43
-rw-r--r--t/cfg/args-alias-redef/man.17
-rw-r--r--t/cfg/args-alias-redef/po4a.conf11
-rw-r--r--t/cfg/args-alias/_man.de.112
-rw-r--r--t/cfg/args-alias/_man.es.112
-rw-r--r--t/cfg/args-alias/_man.fr.112
-rw-r--r--t/cfg/args-alias/_man.fr.212
-rw-r--r--t/cfg/args-alias/_man.it.112
-rw-r--r--t/cfg/args-alias/_man.it.212
-rw-r--r--t/cfg/args-alias/_output10
-rw-r--r--t/cfg/args-alias/_output-keep10010
-rw-r--r--t/cfg/args-alias/args.de.po43
-rw-r--r--t/cfg/args-alias/args.es.po43
-rw-r--r--t/cfg/args-alias/args.fr.po43
-rw-r--r--t/cfg/args-alias/args.it.po43
-rw-r--r--t/cfg/args-alias/man.17
-rw-r--r--t/cfg/args-alias/man.27
-rw-r--r--t/cfg/args-alias/po4a.conf7
-rw-r--r--t/cfg/args-global/_man.de.112
-rw-r--r--t/cfg/args-global/_man.es.112
-rw-r--r--t/cfg/args-global/_man.fr.112
-rw-r--r--t/cfg/args-global/_man.it.112
-rw-r--r--t/cfg/args-global/_output6
-rw-r--r--t/cfg/args-global/_output-keep1006
-rw-r--r--t/cfg/args-global/args.de.po43
-rw-r--r--t/cfg/args-global/args.es.po43
-rw-r--r--t/cfg/args-global/args.fr.po43
-rw-r--r--t/cfg/args-global/args.it.po43
-rw-r--r--t/cfg/args-global/man.17
-rw-r--r--t/cfg/args-global/po4a.conf6
-rw-r--r--t/cfg/args-master/_man.de.112
-rw-r--r--t/cfg/args-master/_man.es.112
-rw-r--r--t/cfg/args-master/_man.fr.112
-rw-r--r--t/cfg/args-master/_man.fr.212
-rw-r--r--t/cfg/args-master/_man.it.112
-rw-r--r--t/cfg/args-master/_man.it.212
-rw-r--r--t/cfg/args-master/_output6
-rw-r--r--t/cfg/args-master/_output-keep1006
-rw-r--r--t/cfg/args-master/args.de.po43
-rw-r--r--t/cfg/args-master/args.es.po43
-rw-r--r--t/cfg/args-master/args.fr.po43
-rw-r--r--t/cfg/args-master/args.it.po43
-rw-r--r--t/cfg/args-master/man.17
-rw-r--r--t/cfg/args-master/man.27
-rw-r--r--t/cfg/args-master/po4a.conf5
-rw-r--r--t/cfg/multiple-fuzzied-noup/_multiple.de.po41
-rw-r--r--t/cfg/multiple-fuzzied-noup/_multiple.es.po40
-rw-r--r--t/cfg/multiple-fuzzied-noup/_multiple.fr.po41
-rw-r--r--t/cfg/multiple-fuzzied-noup/_multiple.it.po40
-rw-r--r--t/cfg/multiple-fuzzied-noup/_output6
-rw-r--r--t/cfg/multiple-fuzzied-noup/multiple.de.po39
-rw-r--r--t/cfg/multiple-fuzzied-noup/multiple.es.po39
-rw-r--r--t/cfg/multiple-fuzzied-noup/multiple.fr.po39
-rw-r--r--t/cfg/multiple-fuzzied-noup/multiple.it.po39
-rw-r--r--t/cfg/multiple-fuzzied-noup/multiple.man.15
-rw-r--r--t/cfg/multiple-fuzzied-noup/multiple.man.de.110
-rw-r--r--t/cfg/multiple-fuzzied-noup/multiple.man.es.110
-rw-r--r--t/cfg/multiple-fuzzied-noup/multiple.man.fr.110
-rw-r--r--t/cfg/multiple-fuzzied-noup/multiple.man.it.110
-rw-r--r--t/cfg/multiple-fuzzied-noup/multiple.pot39
-rw-r--r--t/cfg/multiple-fuzzied-noup/po4a.conf5
-rw-r--r--t/cfg/multiple-fuzzied/_multiple.de.po41
-rw-r--r--t/cfg/multiple-fuzzied/_multiple.es.po40
-rw-r--r--t/cfg/multiple-fuzzied/_multiple.fr.po41
-rw-r--r--t/cfg/multiple-fuzzied/_multiple.it.po40
-rw-r--r--t/cfg/multiple-fuzzied/_output9
-rw-r--r--t/cfg/multiple-fuzzied/multiple.de.po39
-rw-r--r--t/cfg/multiple-fuzzied/multiple.es.po39
-rw-r--r--t/cfg/multiple-fuzzied/multiple.fr.po39
-rw-r--r--t/cfg/multiple-fuzzied/multiple.it.po39
-rw-r--r--t/cfg/multiple-fuzzied/multiple.man.15
-rw-r--r--t/cfg/multiple-fuzzied/multiple.man.de.110
-rw-r--r--t/cfg/multiple-fuzzied/multiple.man.es.110
-rw-r--r--t/cfg/multiple-fuzzied/multiple.man.fr.110
-rw-r--r--t/cfg/multiple-fuzzied/multiple.man.it.110
-rw-r--r--t/cfg/multiple-fuzzied/multiple.pot39
-rw-r--r--t/cfg/multiple-fuzzied/po4a.conf5
-rw-r--r--t/cfg/multiple-fuzzy/_output9
-rw-r--r--t/cfg/multiple-fuzzy/multiple.de.po40
-rw-r--r--t/cfg/multiple-fuzzy/multiple.es.po39
-rw-r--r--t/cfg/multiple-fuzzy/multiple.fr.po40
-rw-r--r--t/cfg/multiple-fuzzy/multiple.it.po39
-rw-r--r--t/cfg/multiple-fuzzy/multiple.man.15
-rw-r--r--t/cfg/multiple-fuzzy/multiple.man.de.110
-rw-r--r--t/cfg/multiple-fuzzy/multiple.man.es.110
-rw-r--r--t/cfg/multiple-fuzzy/multiple.man.fr.110
-rw-r--r--t/cfg/multiple-fuzzy/multiple.man.it.110
-rw-r--r--t/cfg/multiple-fuzzy/multiple.pot39
-rw-r--r--t/cfg/multiple-fuzzy/po4a.conf5
-rw-r--r--t/cfg/multiple-newstr/_multiple.de.po45
-rw-r--r--t/cfg/multiple-newstr/_multiple.es.po45
-rw-r--r--t/cfg/multiple-newstr/_multiple.fr.po45
-rw-r--r--t/cfg/multiple-newstr/_multiple.it.po45
-rw-r--r--t/cfg/multiple-newstr/_output9
-rw-r--r--t/cfg/multiple-newstr/multiple.de.po39
-rw-r--r--t/cfg/multiple-newstr/multiple.es.po39
-rw-r--r--t/cfg/multiple-newstr/multiple.fr.po39
-rw-r--r--t/cfg/multiple-newstr/multiple.it.po39
-rw-r--r--t/cfg/multiple-newstr/multiple.man.17
-rw-r--r--t/cfg/multiple-newstr/multiple.man.de.112
-rw-r--r--t/cfg/multiple-newstr/multiple.man.es.112
-rw-r--r--t/cfg/multiple-newstr/multiple.man.fr.112
-rw-r--r--t/cfg/multiple-newstr/multiple.man.it.112
-rw-r--r--t/cfg/multiple-newstr/multiple.pot45
-rw-r--r--t/cfg/multiple-newstr/po4a.conf5
-rw-r--r--t/cfg/multiple-nopo/_multiple.de.po39
-rw-r--r--t/cfg/multiple-nopo/_multiple.es.po39
-rw-r--r--t/cfg/multiple-nopo/_multiple.fr.po39
-rw-r--r--t/cfg/multiple-nopo/_multiple.it.po39
-rw-r--r--t/cfg/multiple-nopo/_output9
-rw-r--r--t/cfg/multiple-nopo/_output-noupdate6
-rw-r--r--t/cfg/multiple-nopo/multiple.man.15
-rw-r--r--t/cfg/multiple-nopo/multiple.pot39
-rw-r--r--t/cfg/multiple-nopo/po4a.conf5
-rw-r--r--t/cfg/multiple-nopotpo/_multiple.de.po39
-rw-r--r--t/cfg/multiple-nopotpo/_multiple.es.po39
-rw-r--r--t/cfg/multiple-nopotpo/_multiple.fr.po39
-rw-r--r--t/cfg/multiple-nopotpo/_multiple.it.po39
-rw-r--r--t/cfg/multiple-nopotpo/_multiple.pot39
-rw-r--r--t/cfg/multiple-nopotpo/_output9
-rw-r--r--t/cfg/multiple-nopotpo/multiple.man.15
-rw-r--r--t/cfg/multiple-nopotpo/po4a.conf5
-rw-r--r--t/cfg/multiple-potin/_multiple.man.de.114
-rw-r--r--t/cfg/multiple-potin/_multiple.man.es.114
-rw-r--r--t/cfg/multiple-potin/_multiple.man.fr.114
-rw-r--r--t/cfg/multiple-potin/_multiple.man.it.114
-rw-r--r--t/cfg/multiple-potin/_output9
-rw-r--r--t/cfg/multiple-potin/multiple-filtered.man.15
-rw-r--r--t/cfg/multiple-potin/multiple.de.po39
-rw-r--r--t/cfg/multiple-potin/multiple.es.po39
-rw-r--r--t/cfg/multiple-potin/multiple.fr.po39
-rw-r--r--t/cfg/multiple-potin/multiple.it.po39
-rw-r--r--t/cfg/multiple-potin/multiple.man.19
-rw-r--r--t/cfg/multiple-potin/multiple.pot39
-rw-r--r--t/cfg/multiple-potin/po4a.conf5
-rw-r--r--t/cfg/multiple-uptodate/_output9
-rw-r--r--t/cfg/multiple-uptodate/_output-only-one4
-rw-r--r--t/cfg/multiple-uptodate/_output-only-two5
-rw-r--r--t/cfg/multiple-uptodate/multiple.de.po39
-rw-r--r--t/cfg/multiple-uptodate/multiple.es.po39
-rw-r--r--t/cfg/multiple-uptodate/multiple.fr.po39
-rw-r--r--t/cfg/multiple-uptodate/multiple.it.po39
-rw-r--r--t/cfg/multiple-uptodate/multiple.man.15
-rw-r--r--t/cfg/multiple-uptodate/multiple.man.de.110
-rw-r--r--t/cfg/multiple-uptodate/multiple.man.es.110
-rw-r--r--t/cfg/multiple-uptodate/multiple.man.fr.110
-rw-r--r--t/cfg/multiple-uptodate/multiple.man.it.110
-rw-r--r--t/cfg/multiple-uptodate/multiple.pot39
-rw-r--r--t/cfg/multiple-uptodate/po4a.conf5
-rw-r--r--t/cfg/multiple/_multiple.man.de.110
-rw-r--r--t/cfg/multiple/_multiple.man.es.110
-rw-r--r--t/cfg/multiple/_multiple.man.fr.110
-rw-r--r--t/cfg/multiple/_multiple.man.it.110
-rw-r--r--t/cfg/multiple/_output9
-rw-r--r--t/cfg/multiple/multiple.de.po39
-rw-r--r--t/cfg/multiple/multiple.es.po39
-rw-r--r--t/cfg/multiple/multiple.fr.po39
-rw-r--r--t/cfg/multiple/multiple.it.po39
-rw-r--r--t/cfg/multiple/multiple.man.15
-rw-r--r--t/cfg/multiple/multiple.pot39
-rw-r--r--t/cfg/multiple/po4a.conf5
-rw-r--r--t/cfg/single-emptypo/_fr.po39
-rw-r--r--t/cfg/single-emptypo/_output3
-rw-r--r--t/cfg/single-emptypo/_single.man.fr.110
-rw-r--r--t/cfg/single-emptypo/fr.po0
-rw-r--r--t/cfg/single-emptypo/po4a.conf5
-rw-r--r--t/cfg/single-emptypo/single.man.15
-rw-r--r--t/cfg/single-emptypo/single.pot39
-rw-r--r--t/cfg/single-fuzzied-noup/_output3
-rw-r--r--t/cfg/single-fuzzied-noup/_single-fuzzied.fr.po40
-rw-r--r--t/cfg/single-fuzzied-noup/po4a.conf5
-rw-r--r--t/cfg/single-fuzzied-noup/single-fuzzied-noup.fr.po39
-rw-r--r--t/cfg/single-fuzzied-noup/single-fuzzied-noup.man.15
-rw-r--r--t/cfg/single-fuzzied-noup/single-fuzzied-noup.pot39
-rw-r--r--t/cfg/single-fuzzied/_output3
-rw-r--r--t/cfg/single-fuzzied/_single-fuzzied.fr.po40
-rw-r--r--t/cfg/single-fuzzied/po4a.conf5
-rw-r--r--t/cfg/single-fuzzied/single-fuzzied.fr.po39
-rw-r--r--t/cfg/single-fuzzied/single-fuzzied.man.15
-rw-r--r--t/cfg/single-fuzzied/single-fuzzied.pot39
-rw-r--r--t/cfg/single-fuzzy/_output3
-rw-r--r--t/cfg/single-fuzzy/po4a.conf5
-rw-r--r--t/cfg/single-fuzzy/single-fuzzy.fr.po39
-rw-r--r--t/cfg/single-fuzzy/single-fuzzy.man.15
-rw-r--r--t/cfg/single-fuzzy/single-fuzzy.pot39
-rw-r--r--t/cfg/single-invalid/_output8
-rw-r--r--t/cfg/single-invalid/po4a.conf5
-rw-r--r--t/cfg/single-invalid/single.fr.po39
-rw-r--r--t/cfg/single-invalid/single.man.15
-rw-r--r--t/cfg/single-invalid/single.man.fr.110
-rw-r--r--t/cfg/single-invalid/single.pot39
-rw-r--r--t/cfg/single-newstr/_output3
-rw-r--r--t/cfg/single-newstr/_single-newstr.fr.po45
-rw-r--r--t/cfg/single-newstr/_single-newstr.man.fr.112
-rw-r--r--t/cfg/single-newstr/_single-newstr.pot45
-rw-r--r--t/cfg/single-newstr/po4a.conf6
-rw-r--r--t/cfg/single-newstr/single-newstr.fr.po39
-rw-r--r--t/cfg/single-newstr/single-newstr.man.17
-rw-r--r--t/cfg/single-newstr/single-newstr.pot39
-rw-r--r--t/cfg/single-nopo/_output3
-rw-r--r--t/cfg/single-nopo/_output-noupdate3
-rw-r--r--t/cfg/single-nopo/_single.fr.po39
-rw-r--r--t/cfg/single-nopo/po4a.conf5
-rw-r--r--t/cfg/single-nopo/single.man.15
-rw-r--r--t/cfg/single-nopo/single.pot39
-rw-r--r--t/cfg/single-nopotpo/_output3
-rw-r--r--t/cfg/single-nopotpo/_single.fr.po39
-rw-r--r--t/cfg/single-nopotpo/_single.pot39
-rw-r--r--t/cfg/single-nopotpo/po4a.conf5
-rw-r--r--t/cfg/single-nopotpo/single.man.15
-rw-r--r--t/cfg/single-podirectory-emptypot-emptypo/_fr.po.expected39
-rw-r--r--t/cfg/single-podirectory-emptypot-emptypo/_output6
-rw-r--r--t/cfg/single-podirectory-emptypot-emptypo/_single.pot.expected39
-rw-r--r--t/cfg/single-podirectory-emptypot-emptypo/fr.po0
-rw-r--r--t/cfg/single-podirectory-emptypot-emptypo/po4a.conf5
-rw-r--r--t/cfg/single-podirectory-emptypot-emptypo/single.man.15
-rw-r--r--t/cfg/single-podirectory-emptypot-emptypo/single.pot0
-rw-r--r--t/cfg/single-podirectory-emptypot/_output6
-rw-r--r--t/cfg/single-podirectory-emptypot/_single.man.fr.110
-rw-r--r--t/cfg/single-podirectory-emptypot/_single.pot39
-rw-r--r--t/cfg/single-podirectory-emptypot/po/fr.po39
-rw-r--r--t/cfg/single-podirectory-emptypot/po/single.pot0
-rw-r--r--t/cfg/single-podirectory-emptypot/po4a.conf5
-rw-r--r--t/cfg/single-podirectory-emptypot/single.man.15
-rw-r--r--t/cfg/single-podirectory/_output6
-rw-r--r--t/cfg/single-podirectory/_single.man.fr.110
-rw-r--r--t/cfg/single-podirectory/po/fr.po39
-rw-r--r--t/cfg/single-podirectory/po/single.pot39
-rw-r--r--t/cfg/single-podirectory/po4a.conf5
-rw-r--r--t/cfg/single-podirectory/single.man.15
-rw-r--r--t/cfg/single-potin/_output3
-rw-r--r--t/cfg/single-potin/_single.man.fr.115
-rw-r--r--t/cfg/single-potin/po4a.conf5
-rw-r--r--t/cfg/single-potin/single-filtered.man.15
-rw-r--r--t/cfg/single-potin/single.fr.po39
-rw-r--r--t/cfg/single-potin/single.man.110
-rw-r--r--t/cfg/single-potin/single.pot39
-rw-r--r--t/cfg/single-uptodate/_output3
-rw-r--r--t/cfg/single-uptodate/single-uptodate.conf5
-rw-r--r--t/cfg/single-uptodate/single-uptodate.fr.po39
-rw-r--r--t/cfg/single-uptodate/single-uptodate.man.15
-rw-r--r--t/cfg/single-uptodate/single-uptodate.man.fr.110
-rw-r--r--t/cfg/single-uptodate/single-uptodate.pot39
-rw-r--r--t/cfg/single/_output3
-rw-r--r--t/cfg/single/_single.man.fr.110
-rw-r--r--t/cfg/single/single-noupdate.output2
-rw-r--r--t/cfg/single/single.conf5
-rw-r--r--t/cfg/single/single.fr.po39
-rw-r--r--t/cfg/single/single.man.15
-rw-r--r--t/cfg/single/single.pot39
-rw-r--r--t/cfg/space-in-option-value/_man.ja.16
-rw-r--r--t/cfg/space-in-option-value/_output3
-rw-r--r--t/cfg/space-in-option-value/man.11
-rw-r--r--t/cfg/space-in-option-value/man.ja.po23
-rw-r--r--t/cfg/space-in-option-value/man.pot23
-rw-r--r--t/cfg/space-in-option-value/po4a.conf7
-rw-r--r--t/cfg/space_in_name/_output3
-rw-r--r--t/cfg/space_in_name/_single.man.fr.110
-rw-r--r--t/cfg/space_in_name/po4a.conf5
-rw-r--r--t/cfg/space_in_name/some directory/some file.man.15
-rw-r--r--t/cfg/space_in_name/space in name.fr.po39
-rw-r--r--t/cfg/space_in_name/space in name.pot39
-rw-r--r--t/cfg/split-fuzzied-noup/_first.man.de.po45
-rw-r--r--t/cfg/split-fuzzied-noup/_first.man.fr.po45
-rw-r--r--t/cfg/split-fuzzied-noup/_output5
-rw-r--r--t/cfg/split-fuzzied-noup/_second.man.de.po45
-rw-r--r--t/cfg/split-fuzzied-noup/_second.man.fr.po45
-rw-r--r--t/cfg/split-fuzzied-noup/diff_output11
-rw-r--r--t/cfg/split-fuzzied-noup/first.man7
-rw-r--r--t/cfg/split-fuzzied-noup/first.man.de12
-rw-r--r--t/cfg/split-fuzzied-noup/first.man.de.po44
-rw-r--r--t/cfg/split-fuzzied-noup/first.man.fr12
-rw-r--r--t/cfg/split-fuzzied-noup/first.man.fr.po44
-rw-r--r--t/cfg/split-fuzzied-noup/first.man.pot44
-rw-r--r--t/cfg/split-fuzzied-noup/po4a.conf6
-rw-r--r--t/cfg/split-fuzzied-noup/second.man8
-rw-r--r--t/cfg/split-fuzzied-noup/second.man.de12
-rw-r--r--t/cfg/split-fuzzied-noup/second.man.de.po44
-rw-r--r--t/cfg/split-fuzzied-noup/second.man.fr12
-rw-r--r--t/cfg/split-fuzzied-noup/second.man.fr.po44
-rw-r--r--t/cfg/split-fuzzied-noup/second.man.pot44
-rw-r--r--t/cfg/split-fuzzied/_first.man.de.po45
-rw-r--r--t/cfg/split-fuzzied/_first.man.fr.po45
-rw-r--r--t/cfg/split-fuzzied/_output7
-rw-r--r--t/cfg/split-fuzzied/_second.man.de.po45
-rw-r--r--t/cfg/split-fuzzied/_second.man.fr.po45
-rw-r--r--t/cfg/split-fuzzied/diff_output11
-rw-r--r--t/cfg/split-fuzzied/first.man7
-rw-r--r--t/cfg/split-fuzzied/first.man.de12
-rw-r--r--t/cfg/split-fuzzied/first.man.de.po44
-rw-r--r--t/cfg/split-fuzzied/first.man.fr12
-rw-r--r--t/cfg/split-fuzzied/first.man.fr.po44
-rw-r--r--t/cfg/split-fuzzied/first.man.pot44
-rw-r--r--t/cfg/split-fuzzied/po4a.conf6
-rw-r--r--t/cfg/split-fuzzied/second.man8
-rw-r--r--t/cfg/split-fuzzied/second.man.de12
-rw-r--r--t/cfg/split-fuzzied/second.man.de.po44
-rw-r--r--t/cfg/split-fuzzied/second.man.fr12
-rw-r--r--t/cfg/split-fuzzied/second.man.fr.po44
-rw-r--r--t/cfg/split-fuzzied/second.man.pot44
-rw-r--r--t/cfg/split-fuzzy/_output7
-rw-r--r--t/cfg/split-fuzzy/diff_output11
-rw-r--r--t/cfg/split-fuzzy/first.man7
-rw-r--r--t/cfg/split-fuzzy/first.man.de12
-rw-r--r--t/cfg/split-fuzzy/first.man.de.po44
-rw-r--r--t/cfg/split-fuzzy/first.man.fr12
-rw-r--r--t/cfg/split-fuzzy/first.man.fr.po44
-rw-r--r--t/cfg/split-fuzzy/first.man.pot44
-rw-r--r--t/cfg/split-fuzzy/po4a.conf6
-rw-r--r--t/cfg/split-fuzzy/second.man8
-rw-r--r--t/cfg/split-fuzzy/second.man.de12
-rw-r--r--t/cfg/split-fuzzy/second.man.de.po44
-rw-r--r--t/cfg/split-fuzzy/second.man.fr12
-rw-r--r--t/cfg/split-fuzzy/second.man.fr.po44
-rw-r--r--t/cfg/split-fuzzy/second.man.pot44
-rw-r--r--t/cfg/split-multimaster/Documentation.de.po64
-rw-r--r--t/cfg/split-multimaster/Documentation.fr.po63
-rw-r--r--t/cfg/split-multimaster/Documentation.pot62
-rw-r--r--t/cfg/split-multimaster/_output9
-rw-r--r--t/cfg/split-multimaster/first.man7
-rw-r--r--t/cfg/split-multimaster/first.man.de12
-rw-r--r--t/cfg/split-multimaster/first.man.fr12
-rw-r--r--t/cfg/split-multimaster/po4a.conf7
-rw-r--r--t/cfg/split-multimaster/second.man8
-rw-r--r--t/cfg/split-multimaster/second.man.de12
-rw-r--r--t/cfg/split-multimaster/second.man.de.po44
-rw-r--r--t/cfg/split-multimaster/second.man.fr12
-rw-r--r--t/cfg/split-multimaster/second.man.fr.po44
-rw-r--r--t/cfg/split-multimaster/second.man.pot44
-rw-r--r--t/cfg/split-multimaster/third.man8
-rw-r--r--t/cfg/split-multimaster/third.man.de13
-rw-r--r--t/cfg/split-multimaster/third.man.fr12
-rw-r--r--t/cfg/split-newstr/_first.man.de14
-rw-r--r--t/cfg/split-newstr/_first.man.de.po49
-rw-r--r--t/cfg/split-newstr/_first.man.fr14
-rw-r--r--t/cfg/split-newstr/_first.man.fr.po49
-rw-r--r--t/cfg/split-newstr/_first.man.pot49
-rw-r--r--t/cfg/split-newstr/_output7
-rw-r--r--t/cfg/split-newstr/_second.man.de14
-rw-r--r--t/cfg/split-newstr/_second.man.de.po49
-rw-r--r--t/cfg/split-newstr/_second.man.fr14
-rw-r--r--t/cfg/split-newstr/_second.man.fr.po49
-rw-r--r--t/cfg/split-newstr/_second.man.pot49
-rw-r--r--t/cfg/split-newstr/diff_output11
-rw-r--r--t/cfg/split-newstr/first.man9
-rw-r--r--t/cfg/split-newstr/first.man.de.po44
-rw-r--r--t/cfg/split-newstr/first.man.fr.po44
-rw-r--r--t/cfg/split-newstr/first.man.pot44
-rw-r--r--t/cfg/split-newstr/po4a.conf6
-rw-r--r--t/cfg/split-newstr/second.man10
-rw-r--r--t/cfg/split-newstr/second.man.de.po44
-rw-r--r--t/cfg/split-newstr/second.man.fr.po44
-rw-r--r--t/cfg/split-newstr/second.man.pot44
-rw-r--r--t/cfg/split-nopo/_first.man.de.po44
-rw-r--r--t/cfg/split-nopo/_first.man.fr.po44
-rw-r--r--t/cfg/split-nopo/_output11
-rw-r--r--t/cfg/split-nopo/_output-noupdate7
-rw-r--r--t/cfg/split-nopo/_second.man.de.po44
-rw-r--r--t/cfg/split-nopo/_second.man.fr.po44
-rw-r--r--t/cfg/split-nopo/diff_output11
-rw-r--r--t/cfg/split-nopo/first.man7
-rw-r--r--t/cfg/split-nopo/first.man.pot44
-rw-r--r--t/cfg/split-nopo/po4a.conf6
-rw-r--r--t/cfg/split-nopo/second.man8
-rw-r--r--t/cfg/split-nopo/second.man.pot44
-rw-r--r--t/cfg/split-nopotpo/_first.man.de.po44
-rw-r--r--t/cfg/split-nopotpo/_first.man.fr.po44
-rw-r--r--t/cfg/split-nopotpo/_first.man.pot44
-rw-r--r--t/cfg/split-nopotpo/_output11
-rw-r--r--t/cfg/split-nopotpo/_second.man.de.po44
-rw-r--r--t/cfg/split-nopotpo/_second.man.fr.po44
-rw-r--r--t/cfg/split-nopotpo/_second.man.pot44
-rw-r--r--t/cfg/split-nopotpo/first.man7
-rw-r--r--t/cfg/split-nopotpo/po4a.conf6
-rw-r--r--t/cfg/split-nopotpo/second.man8
-rw-r--r--t/cfg/split-potin/_first.man.de16
-rw-r--r--t/cfg/split-potin/_first.man.fr16
-rw-r--r--t/cfg/split-potin/_output7
-rw-r--r--t/cfg/split-potin/_second.man.de16
-rw-r--r--t/cfg/split-potin/_second.man.fr16
-rw-r--r--t/cfg/split-potin/diff_output11
-rw-r--r--t/cfg/split-potin/first-filtered.man7
-rw-r--r--t/cfg/split-potin/first.man11
-rw-r--r--t/cfg/split-potin/first.man.de.po44
-rw-r--r--t/cfg/split-potin/first.man.fr.po44
-rw-r--r--t/cfg/split-potin/first.man.pot44
-rw-r--r--t/cfg/split-potin/po4a.conf6
-rw-r--r--t/cfg/split-potin/second-filtered.man8
-rw-r--r--t/cfg/split-potin/second.man12
-rw-r--r--t/cfg/split-potin/second.man.de.po44
-rw-r--r--t/cfg/split-potin/second.man.fr.po44
-rw-r--r--t/cfg/split-potin/second.man.pot44
-rw-r--r--t/cfg/split-uptodate/_output7
-rw-r--r--t/cfg/split-uptodate/diff_output11
-rw-r--r--t/cfg/split-uptodate/first.man7
-rw-r--r--t/cfg/split-uptodate/first.man.de12
-rw-r--r--t/cfg/split-uptodate/first.man.de.po44
-rw-r--r--t/cfg/split-uptodate/first.man.fr12
-rw-r--r--t/cfg/split-uptodate/first.man.fr.po44
-rw-r--r--t/cfg/split-uptodate/first.man.pot44
-rw-r--r--t/cfg/split-uptodate/po4a.conf6
-rw-r--r--t/cfg/split-uptodate/second.man8
-rw-r--r--t/cfg/split-uptodate/second.man.de12
-rw-r--r--t/cfg/split-uptodate/second.man.de.po44
-rw-r--r--t/cfg/split-uptodate/second.man.fr12
-rw-r--r--t/cfg/split-uptodate/second.man.fr.po44
-rw-r--r--t/cfg/split-uptodate/second.man.pot44
-rw-r--r--t/cfg/split-yaml/_index.md3
-rw-r--r--t/cfg/split-yaml/_index.vi.md3
-rw-r--r--t/cfg/split-yaml/_output4
-rw-r--r--t/cfg/split-yaml/content.pot27
-rw-r--r--t/cfg/split-yaml/content.vi.po27
-rw-r--r--t/cfg/split-yaml/en.yaml6
-rw-r--r--t/cfg/split-yaml/i18n.pot35
-rw-r--r--t/cfg/split-yaml/i18n.vi.po35
-rw-r--r--t/cfg/split-yaml/po4a.cfg5
-rw-r--r--t/cfg/split-yaml/vi.yaml7
-rw-r--r--t/cfg/split/_first.man.de12
-rw-r--r--t/cfg/split/_first.man.fr12
-rw-r--r--t/cfg/split/_output7
-rw-r--r--t/cfg/split/_second.man.de12
-rw-r--r--t/cfg/split/_second.man.fr12
-rw-r--r--t/cfg/split/diff_output11
-rw-r--r--t/cfg/split/first.man7
-rw-r--r--t/cfg/split/first.man.de.po44
-rw-r--r--t/cfg/split/first.man.fr.po44
-rw-r--r--t/cfg/split/first.man.pot44
-rw-r--r--t/cfg/split/po4a.conf6
-rw-r--r--t/cfg/split/second.man8
-rw-r--r--t/cfg/split/second.man.de.po44
-rw-r--r--t/cfg/split/second.man.fr.po44
-rw-r--r--t/cfg/split/second.man.pot44
-rw-r--r--t/cfg/windows-CRLF/_output3
-rw-r--r--t/cfg/windows-CRLF/single-uptodate.fr.po39
-rw-r--r--t/cfg/windows-CRLF/single-uptodate.man.15
-rw-r--r--t/cfg/windows-CRLF/single-uptodate.man.fr.110
-rw-r--r--t/cfg/windows-CRLF/single-uptodate.pot39
-rw-r--r--t/cfg/windows-CRLF/windows-CRLF.conf5
-rw-r--r--t/charset.t59
-rw-r--r--t/charset/asciidoc/CharsetLatin1.adoc17
-rw-r--r--t/charset/asciidoc/CharsetLatin1.norm16
-rw-r--r--t/charset/asciidoc/CharsetLatin1.po38
-rw-r--r--t/charset/asciidoc/CharsetLatin1.pot36
-rw-r--r--t/charset/asciidoc/CharsetLatin1.trans16
-rw-r--r--t/charset/asciidoc/CharsetUtf.adoc16
-rw-r--r--t/charset/asciidoc/CharsetUtf.norm16
-rw-r--r--t/charset/asciidoc/CharsetUtf.po34
-rw-r--r--t/charset/asciidoc/CharsetUtf.pot34
-rw-r--r--t/charset/asciidoc/CharsetUtf.trans16
-rw-r--r--t/charset/asciidoc/CharsetUtfBOM.adoc16
-rw-r--r--t/charset/asciidoc/CharsetUtfBOM.po34
-rw-r--r--t/charset/asciidoc/CharsetUtfBOM.pot34
-rw-r--r--t/charset/input-ascii/_ascii.up.pod18
-rw-r--r--t/charset/input-ascii/_output3
-rw-r--r--t/charset/input-ascii/ascii.pod4
-rw-r--r--t/charset/input-ascii/ascii.pot27
-rw-r--r--t/charset/input-ascii/ascii.up.po26
-rw-r--r--t/charset/input-ascii/po4a.conf4
-rw-r--r--t/charset/input-iso8859/_iso8859.up.pod18
-rw-r--r--t/charset/input-iso8859/_output3
-rw-r--r--t/charset/input-iso8859/iso8859.pod4
-rw-r--r--t/charset/input-iso8859/iso8859.pot27
-rw-r--r--t/charset/input-iso8859/iso8859.up.po26
-rw-r--r--t/charset/input-iso8859/po4a.conf4
-rw-r--r--t/charset/input-utf8/_output3
-rw-r--r--t/charset/input-utf8/_utf8.up.pod18
-rw-r--r--t/charset/input-utf8/po4a.conf4
-rw-r--r--t/charset/input-utf8/utf8.pod4
-rw-r--r--t/charset/input-utf8/utf8.pot27
-rw-r--r--t/charset/input-utf8/utf8.up.po26
-rw-r--r--t/charset/yaml/utf8.norm3
-rw-r--r--t/charset/yaml/utf8.po23
-rw-r--r--t/charset/yaml/utf8.pot23
-rw-r--r--t/charset/yaml/utf8.trans3
-rw-r--r--t/charset/yaml/utf8.yaml3
-rw-r--r--t/core-porefs.t61
-rw-r--r--t/core/porefs/_base.po36
-rw-r--r--t/core/porefs/_base.pot37
-rw-r--r--t/core/porefs/_counter.po36
-rw-r--r--t/core/porefs/_counter.pot37
-rw-r--r--t/core/porefs/_file.po32
-rw-r--r--t/core/porefs/_file.pot33
-rw-r--r--t/core/porefs/_none.po26
-rw-r--r--t/core/porefs/_none.pot27
-rw-r--r--t/core/porefs/_output2
-rw-r--r--t/core/porefs/long-filename-of-input-16
-rw-r--r--t/core/porefs/long-filename-of-input-26
-rw-r--r--t/core/porefs/long-filename-of-input-36
-rw-r--r--t/core/porefs/long-filename-of-input-46
-rw-r--r--t/core/porefs/long-filename-of-input-56
-rw-r--r--t/core/porefs/long-filename-of-input-66
-rw-r--r--t/core/porefs/long-filename-of-input-76
-rw-r--r--t/core/porefs/long-filename-of-input-86
-rw-r--r--t/core/porefs/long-filename-of-input-96
-rw-r--r--t/core/porefs/po4a.conf14
-rw-r--r--t/fmt-asciidoc.t68
-rw-r--r--t/fmt-docbook.t39
-rw-r--r--t/fmt-gemtext.t20
-rw-r--r--t/fmt-halibut.t21
-rw-r--r--t/fmt-ini.t21
-rw-r--r--t/fmt-man.t96
-rw-r--r--t/fmt-pod.t22
-rw-r--r--t/fmt-rubydoc.t32
-rw-r--r--t/fmt-sgml.t25
-rw-r--r--t/fmt-tex.t37
-rw-r--r--t/fmt-texinfo.t23
-rw-r--r--t/fmt-txt-fortunes.t24
-rw-r--r--t/fmt-txt-markdown.t84
-rw-r--r--t/fmt-txt.t37
-rw-r--r--t/fmt-wml.t22
-rw-r--r--t/fmt-xhtml.t18
-rw-r--r--t/fmt-xml-dia.t27
-rw-r--r--t/fmt-xml.t30
-rw-r--r--t/fmt-yaml.t66
-rw-r--r--t/fmt/asciidoc/Attributes.adoc36
-rw-r--r--t/fmt/asciidoc/Attributes.norm32
-rw-r--r--t/fmt/asciidoc/Attributes.po72
-rw-r--r--t/fmt/asciidoc/Attributes.pot67
-rw-r--r--t/fmt/asciidoc/Attributes.trans32
-rw-r--r--t/fmt/asciidoc/BlockId.adoc11
-rw-r--r--t/fmt/asciidoc/BlockId.norm10
-rw-r--r--t/fmt/asciidoc/BlockId.po52
-rw-r--r--t/fmt/asciidoc/BlockId.pot48
-rw-r--r--t/fmt/asciidoc/BlockId.trans10
-rw-r--r--t/fmt/asciidoc/BlockTitles.adoc14
-rw-r--r--t/fmt/asciidoc/BlockTitles.norm12
-rw-r--r--t/fmt/asciidoc/BlockTitles.po54
-rw-r--r--t/fmt/asciidoc/BlockTitles.pot52
-rw-r--r--t/fmt/asciidoc/BlockTitles.trans12
-rw-r--r--t/fmt/asciidoc/Callouts.adoc42
-rw-r--r--t/fmt/asciidoc/Callouts.norm42
-rw-r--r--t/fmt/asciidoc/Callouts.po119
-rw-r--r--t/fmt/asciidoc/Callouts.pot95
-rw-r--r--t/fmt/asciidoc/Callouts.trans42
-rw-r--r--t/fmt/asciidoc/CleanSpaces.adoc20
-rw-r--r--t/fmt/asciidoc/CleanSpaces.norm16
-rw-r--r--t/fmt/asciidoc/CleanSpaces.po61
-rw-r--r--t/fmt/asciidoc/CleanSpaces.pot56
-rw-r--r--t/fmt/asciidoc/CleanSpaces.trans16
-rw-r--r--t/fmt/asciidoc/Comments.adoc27
-rw-r--r--t/fmt/asciidoc/Comments.norm23
-rw-r--r--t/fmt/asciidoc/Comments.po82
-rw-r--r--t/fmt/asciidoc/Comments.pot75
-rw-r--r--t/fmt/asciidoc/Comments.trans23
-rw-r--r--t/fmt/asciidoc/DelimitedBlocks.adoc184
-rw-r--r--t/fmt/asciidoc/DelimitedBlocks.norm173
-rw-r--r--t/fmt/asciidoc/DelimitedBlocks.po341
-rw-r--r--t/fmt/asciidoc/DelimitedBlocks.pot305
-rw-r--r--t/fmt/asciidoc/DelimitedBlocks.trans173
-rw-r--r--t/fmt/asciidoc/Footnotes.adoc5
-rw-r--r--t/fmt/asciidoc/Footnotes.norm5
-rw-r--r--t/fmt/asciidoc/Footnotes.po28
-rw-r--r--t/fmt/asciidoc/Footnotes.pot28
-rw-r--r--t/fmt/asciidoc/Footnotes.trans5
-rw-r--r--t/fmt/asciidoc/IndexEntries.adoc18
-rw-r--r--t/fmt/asciidoc/IndexEntries.norm14
-rw-r--r--t/fmt/asciidoc/IndexEntries.po92
-rw-r--r--t/fmt/asciidoc/IndexEntries.pot93
-rw-r--r--t/fmt/asciidoc/IndexEntries.trans14
-rw-r--r--t/fmt/asciidoc/LineBreak.adoc37
-rw-r--r--t/fmt/asciidoc/LineBreak.norm34
-rw-r--r--t/fmt/asciidoc/LineBreak.po112
-rw-r--r--t/fmt/asciidoc/LineBreak.pot97
-rw-r--r--t/fmt/asciidoc/LineBreak.trans34
-rw-r--r--t/fmt/asciidoc/Lists.adoc252
-rw-r--r--t/fmt/asciidoc/Lists.norm230
-rw-r--r--t/fmt/asciidoc/Lists.norm.stderr1
-rw-r--r--t/fmt/asciidoc/Lists.po669
-rw-r--r--t/fmt/asciidoc/Lists.pot624
-rw-r--r--t/fmt/asciidoc/Lists.trans230
-rw-r--r--t/fmt/asciidoc/Lists.trans.stderr1
-rw-r--r--t/fmt/asciidoc/MacroIncludesHugo.adoc31
-rw-r--r--t/fmt/asciidoc/MacroIncludesHugo.norm31
-rw-r--r--t/fmt/asciidoc/MacroIncludesHugo.po119
-rw-r--r--t/fmt/asciidoc/MacroIncludesHugo.pot119
-rw-r--r--t/fmt/asciidoc/MacroIncludesHugo.trans31
-rw-r--r--t/fmt/asciidoc/NoImageTarget.adoc19
-rw-r--r--t/fmt/asciidoc/NoImageTarget.norm19
-rw-r--r--t/fmt/asciidoc/NoImageTarget.po49
-rw-r--r--t/fmt/asciidoc/NoImageTarget.pot49
-rw-r--r--t/fmt/asciidoc/NoImageTarget.trans19
-rw-r--r--t/fmt/asciidoc/Paragraphs.adoc69
-rw-r--r--t/fmt/asciidoc/Paragraphs.norm61
-rw-r--r--t/fmt/asciidoc/Paragraphs.po140
-rw-r--r--t/fmt/asciidoc/Paragraphs.pot134
-rw-r--r--t/fmt/asciidoc/Paragraphs.trans61
-rw-r--r--t/fmt/asciidoc/StrictDelimitedBlocks.adoc194
-rw-r--r--t/fmt/asciidoc/StrictDelimitedBlocks.norm183
-rw-r--r--t/fmt/asciidoc/StrictDelimitedBlocks.po352
-rw-r--r--t/fmt/asciidoc/StrictDelimitedBlocks.pot317
-rw-r--r--t/fmt/asciidoc/StrictDelimitedBlocks.trans183
-rw-r--r--t/fmt/asciidoc/StyleMacro.adoc59
-rw-r--r--t/fmt/asciidoc/StyleMacro.norm52
-rw-r--r--t/fmt/asciidoc/StyleMacro.po194
-rw-r--r--t/fmt/asciidoc/StyleMacro.pot178
-rw-r--r--t/fmt/asciidoc/StyleMacro.trans52
-rw-r--r--t/fmt/asciidoc/Tables.adoc78
-rw-r--r--t/fmt/asciidoc/Tables.norm78
-rw-r--r--t/fmt/asciidoc/Tables.po175
-rw-r--r--t/fmt/asciidoc/Tables.pot156
-rw-r--r--t/fmt/asciidoc/Tables.trans78
-rw-r--r--t/fmt/asciidoc/TablesCells.adoc161
-rw-r--r--t/fmt/asciidoc/TablesCells.norm161
-rw-r--r--t/fmt/asciidoc/TablesCells.norm.stderr1
-rw-r--r--t/fmt/asciidoc/TablesCells.po428
-rw-r--r--t/fmt/asciidoc/TablesCells.pot393
-rw-r--r--t/fmt/asciidoc/TablesCells.trans161
-rw-r--r--t/fmt/asciidoc/TablesCells.trans.stderr1
-rw-r--r--t/fmt/asciidoc/TablesImageText.adoc12
-rw-r--r--t/fmt/asciidoc/TablesImageText.norm12
-rw-r--r--t/fmt/asciidoc/TablesImageText.po63
-rw-r--r--t/fmt/asciidoc/TablesImageText.pot60
-rw-r--r--t/fmt/asciidoc/TablesImageText.trans12
-rw-r--r--t/fmt/asciidoc/Titles.adoc30
-rw-r--r--t/fmt/asciidoc/Titles.norm30
-rw-r--r--t/fmt/asciidoc/Titles.norm.stderr2
-rw-r--r--t/fmt/asciidoc/Titles.po89
-rw-r--r--t/fmt/asciidoc/Titles.pot89
-rw-r--r--t/fmt/asciidoc/Titles.trans30
-rw-r--r--t/fmt/asciidoc/Titles.trans.stderr2
-rw-r--r--t/fmt/asciidoc/YamlFrontMatter.adoc39
-rw-r--r--t/fmt/asciidoc/YamlFrontMatter.norm33
-rw-r--r--t/fmt/asciidoc/YamlFrontMatter.po129
-rw-r--r--t/fmt/asciidoc/YamlFrontMatter.pot126
-rw-r--r--t/fmt/asciidoc/YamlFrontMatter.trans33
-rw-r--r--t/fmt/asciidoc/YamlFrontMatter_KeysPaths.adoc35
-rw-r--r--t/fmt/asciidoc/YamlFrontMatter_KeysPaths.norm34
-rw-r--r--t/fmt/asciidoc/YamlFrontMatter_KeysPaths.po51
-rw-r--r--t/fmt/asciidoc/YamlFrontMatter_KeysPaths.pot51
-rw-r--r--t/fmt/asciidoc/YamlFrontMatter_KeysPaths.trans34
-rw-r--r--t/fmt/asciidoc/YamlFrontMatter_Option.adoc35
-rw-r--r--t/fmt/asciidoc/YamlFrontMatter_Option.norm34
-rw-r--r--t/fmt/asciidoc/YamlFrontMatter_Option.po57
-rw-r--r--t/fmt/asciidoc/YamlFrontMatter_Option.pot57
-rw-r--r--t/fmt/asciidoc/YamlFrontMatter_Option.trans34
-rw-r--r--t/fmt/docbook/PI-break.dbk12
-rw-r--r--t/fmt/docbook/PI-break.norm12
-rw-r--r--t/fmt/docbook/PI-break.po34
-rw-r--r--t/fmt/docbook/PI-break.pot31
-rw-r--r--t/fmt/docbook/PI-break.trans12
-rw-r--r--t/fmt/docbook/PI-inline.dbk12
-rw-r--r--t/fmt/docbook/PI-inline.norm13
-rw-r--r--t/fmt/docbook/PI-inline.po35
-rw-r--r--t/fmt/docbook/PI-inline.pot29
-rw-r--r--t/fmt/docbook/PI-inline.trans13
-rw-r--r--t/fmt/docbook/debian-history.dbk83
-rw-r--r--t/fmt/docbook/debian-history.norm80
-rw-r--r--t/fmt/docbook/debian-history.po75
-rw-r--r--t/fmt/docbook/debian-history.pot72
-rw-r--r--t/fmt/docbook/debian-history.trans80
-rw-r--r--t/fmt/gemtext/basic.gmi21
-rw-r--r--t/fmt/gemtext/basic.norm21
-rw-r--r--t/fmt/gemtext/basic.po83
-rw-r--r--t/fmt/gemtext/basic.pot83
-rw-r--r--t/fmt/gemtext/basic.trans21
-rw-r--r--t/fmt/halibut/basic.but47
-rw-r--r--t/fmt/halibut/basic.norm49
-rw-r--r--t/fmt/halibut/basic.po124
-rw-r--r--t/fmt/halibut/basic.pot121
-rw-r--r--t/fmt/halibut/basic.trans49
-rw-r--r--t/fmt/ini/basic.ini5
-rw-r--r--t/fmt/ini/basic.norm5
-rw-r--r--t/fmt/ini/basic.po35
-rw-r--r--t/fmt/ini/basic.pot35
-rw-r--r--t/fmt/ini/basic.trans5
-rw-r--r--t/fmt/man/dots-errors1.man5
-rw-r--r--t/fmt/man/dots-errors1.norm.stderr2
-rw-r--r--t/fmt/man/dots-errors2.man5
-rw-r--r--t/fmt/man/dots-errors2.norm.stderr2
-rw-r--r--t/fmt/man/dots-errors3.man5
-rw-r--r--t/fmt/man/dots-errors3.norm.stderr2
-rw-r--r--t/fmt/man/dots1.man31
-rw-r--r--t/fmt/man/dots1.norm34
-rw-r--r--t/fmt/man/dots1.po73
-rw-r--r--t/fmt/man/dots1.pot70
-rw-r--r--t/fmt/man/dots1.trans34
-rw-r--r--t/fmt/man/dots2.man6
-rw-r--r--t/fmt/man/dots2.norm11
-rw-r--r--t/fmt/man/dots2.po35
-rw-r--r--t/fmt/man/dots2.pot35
-rw-r--r--t/fmt/man/dots2.trans11
-rw-r--r--t/fmt/man/escapes.man45
-rw-r--r--t/fmt/man/escapes.norm39
-rw-r--r--t/fmt/man/escapes.po111
-rw-r--r--t/fmt/man/escapes.pot107
-rw-r--r--t/fmt/man/escapes.trans39
-rw-r--r--t/fmt/man/fonts.man276
-rw-r--r--t/fmt/man/fonts.norm218
-rw-r--r--t/fmt/man/fonts.po381
-rw-r--r--t/fmt/man/fonts.pot381
-rw-r--r--t/fmt/man/fonts.trans218
-rw-r--r--t/fmt/man/hyphens-translate.man33
-rw-r--r--t/fmt/man/hyphens-translate.norm38
-rw-r--r--t/fmt/man/hyphens-translate.po101
-rw-r--r--t/fmt/man/hyphens-translate.pot97
-rw-r--r--t/fmt/man/hyphens-translate.trans38
-rw-r--r--t/fmt/man/hyphens-verbatim.man33
-rw-r--r--t/fmt/man/hyphens-verbatim.norm38
-rw-r--r--t/fmt/man/hyphens-verbatim.po86
-rw-r--r--t/fmt/man/hyphens-verbatim.pot86
-rw-r--r--t/fmt/man/hyphens-verbatim.trans38
-rw-r--r--t/fmt/man/macro-def.man12
-rw-r--r--t/fmt/man/macro-def.norm17
-rw-r--r--t/fmt/man/macro-def.po23
-rw-r--r--t/fmt/man/macro-def.pot41
-rw-r--r--t/fmt/man/macro-def.stderr-missing-behavior4
-rw-r--r--t/fmt/man/macro-def.trans17
-rw-r--r--t/fmt/man/macro-defuse.man13
-rw-r--r--t/fmt/man/macro-defuse.norm18
-rw-r--r--t/fmt/man/macro-defuse.po23
-rw-r--r--t/fmt/man/macro-defuse.po-noarg23
-rw-r--r--t/fmt/man/macro-defuse.pot41
-rw-r--r--t/fmt/man/macro-defuse.pot-noarg41
-rw-r--r--t/fmt/man/macro-defuse.stderr-missing-behavior7
-rw-r--r--t/fmt/man/macro-defuse.trans18
-rw-r--r--t/fmt/man/macros.man56
-rw-r--r--t/fmt/man/macros.norm57
-rw-r--r--t/fmt/man/macros.po177
-rw-r--r--t/fmt/man/macros.pot165
-rw-r--r--t/fmt/man/macros.trans57
-rw-r--r--t/fmt/man/mdoc.man44
-rw-r--r--t/fmt/man/mdoc.norm49
-rw-r--r--t/fmt/man/mdoc.po133
-rw-r--r--t/fmt/man/mdoc.pot127
-rw-r--r--t/fmt/man/mdoc.trans49
-rw-r--r--t/fmt/man/null.man22
-rw-r--r--t/fmt/man/null.norm26
-rw-r--r--t/fmt/man/null.po55
-rw-r--r--t/fmt/man/null.pot55
-rw-r--r--t/fmt/man/null.trans26
-rw-r--r--t/fmt/man/quoted-comment.man6
-rw-r--r--t/fmt/man/quoted-comment.norm6
-rw-r--r--t/fmt/man/quoted-comment.po18
-rw-r--r--t/fmt/man/quoted-comment.pot18
-rw-r--r--t/fmt/man/quoted-comment.trans6
-rw-r--r--t/fmt/man/quotes.man35
-rw-r--r--t/fmt/man/quotes.norm39
-rw-r--r--t/fmt/man/quotes.po85
-rw-r--r--t/fmt/man/quotes.pot85
-rw-r--r--t/fmt/man/quotes.trans39
-rw-r--r--t/fmt/man/spaces.man16
-rw-r--r--t/fmt/man/spaces.norm21
-rw-r--r--t/fmt/man/spaces.po62
-rw-r--r--t/fmt/man/spaces.pot62
-rw-r--r--t/fmt/man/spaces.trans21
-rw-r--r--t/fmt/man/tbl-mdoc-mixed1.man6
-rw-r--r--t/fmt/man/tbl-mdoc-mixed1.norm10
-rw-r--r--t/fmt/man/tbl-mdoc-mixed1.po46
-rw-r--r--t/fmt/man/tbl-mdoc-mixed1.pot34
-rw-r--r--t/fmt/man/tbl-mdoc-mixed1.trans10
-rw-r--r--t/fmt/man/tbl-mdoc-mixed2.man8
-rw-r--r--t/fmt/man/tbl-mdoc-mixed2.norm13
-rw-r--r--t/fmt/man/tbl-mdoc-mixed2.po52
-rw-r--r--t/fmt/man/tbl-mdoc-mixed2.pot46
-rw-r--r--t/fmt/man/tbl-mdoc-mixed2.trans13
-rw-r--r--t/fmt/man/tbl-mdoc-mixed3.man6
-rw-r--r--t/fmt/man/tbl-mdoc-mixed3.norm10
-rw-r--r--t/fmt/man/tbl-mdoc-mixed3.po46
-rw-r--r--t/fmt/man/tbl-mdoc-mixed3.pot34
-rw-r--r--t/fmt/man/tbl-mdoc-mixed3.trans10
-rw-r--r--t/fmt/man/tbl-mdoc-mixed4.man6
-rw-r--r--t/fmt/man/tbl-mdoc-mixed4.norm10
-rw-r--r--t/fmt/man/tbl-mdoc-mixed4.po46
-rw-r--r--t/fmt/man/tbl-mdoc-mixed4.pot34
-rw-r--r--t/fmt/man/tbl-mdoc-mixed4.trans10
-rw-r--r--t/fmt/man/tbl-option-tab.man20
-rw-r--r--t/fmt/man/tbl-option-tab.norm20
-rw-r--r--t/fmt/man/tbl-option-tab.po113
-rw-r--r--t/fmt/man/tbl-option-tab.pot113
-rw-r--r--t/fmt/man/tbl-option-tab.trans20
-rw-r--r--t/fmt/man/tbl-textblock.man32
-rw-r--r--t/fmt/man/tbl-textblock.norm32
-rw-r--r--t/fmt/man/tbl-textblock.po92
-rw-r--r--t/fmt/man/tbl-textblock.pot88
-rw-r--r--t/fmt/man/tbl-textblock.trans32
-rw-r--r--t/fmt/pod/basic.norm32
-rw-r--r--t/fmt/pod/basic.po71
-rw-r--r--t/fmt/pod/basic.pod22
-rw-r--r--t/fmt/pod/basic.pot59
-rw-r--r--t/fmt/pod/basic.trans33
-rw-r--r--t/fmt/rubydoc/Headlines.norm41
-rw-r--r--t/fmt/rubydoc/Headlines.po81
-rw-r--r--t/fmt/rubydoc/Headlines.pot79
-rw-r--r--t/fmt/rubydoc/Headlines.rd36
-rw-r--r--t/fmt/rubydoc/Headlines.trans41
-rw-r--r--t/fmt/rubydoc/Lists.norm63
-rw-r--r--t/fmt/rubydoc/Lists.po173
-rw-r--r--t/fmt/rubydoc/Lists.pot163
-rw-r--r--t/fmt/rubydoc/Lists.rd58
-rw-r--r--t/fmt/rubydoc/Lists.trans63
-rw-r--r--t/fmt/rubydoc/Verbatim.norm22
-rw-r--r--t/fmt/rubydoc/Verbatim.po56
-rw-r--r--t/fmt/rubydoc/Verbatim.pot50
-rw-r--r--t/fmt/rubydoc/Verbatim.rd12
-rw-r--r--t/fmt/rubydoc/Verbatim.trans22
-rw-r--r--t/fmt/sgml/attributes-order.norm39
-rw-r--r--t/fmt/sgml/attributes-order.po46
-rw-r--r--t/fmt/sgml/attributes-order.pot46
-rw-r--r--t/fmt/sgml/attributes-order.sgml21
-rw-r--r--t/fmt/sgml/attributes-order.trans39
-rw-r--r--t/fmt/sgml/basic.norm50
-rw-r--r--t/fmt/sgml/basic.po114
-rw-r--r--t/fmt/sgml/basic.pot111
-rw-r--r--t/fmt/sgml/basic.sgml51
-rw-r--r--t/fmt/sgml/basic.trans50
-rw-r--r--t/fmt/sgml/entity.pot22
-rw-r--r--t/fmt/tex/basic.norm27
-rw-r--r--t/fmt/tex/basic.norm.stderr1
-rw-r--r--t/fmt/tex/basic.po71
-rw-r--r--t/fmt/tex/basic.pot66
-rw-r--r--t/fmt/tex/basic.tex28
-rw-r--r--t/fmt/tex/basic.trans27
-rw-r--r--t/fmt/tex/basic.trans.stderr1
-rw-r--r--t/fmt/tex/input-in-verbatim.norm11
-rw-r--r--t/fmt/tex/input-in-verbatim.po27
-rw-r--r--t/fmt/tex/input-in-verbatim.pot25
-rw-r--r--t/fmt/tex/input-in-verbatim.stderr-without-ignore1
-rw-r--r--t/fmt/tex/input-in-verbatim.tex9
-rw-r--r--t/fmt/tex/input-in-verbatim.trans11
-rw-r--r--t/fmt/tex/theorem.norm9
-rw-r--r--t/fmt/tex/theorem.po27
-rw-r--r--t/fmt/tex/theorem.pot27
-rw-r--r--t/fmt/tex/theorem.tex7
-rw-r--r--t/fmt/tex/theorem.trans9
-rw-r--r--t/fmt/texinfo/comments.norm22
-rw-r--r--t/fmt/texinfo/comments.po42
-rw-r--r--t/fmt/texinfo/comments.pot42
-rw-r--r--t/fmt/texinfo/comments.texi16
-rw-r--r--t/fmt/texinfo/comments.trans22
-rw-r--r--t/fmt/texinfo/longmenu.norm16
-rw-r--r--t/fmt/texinfo/longmenu.po32
-rw-r--r--t/fmt/texinfo/longmenu.pot30
-rw-r--r--t/fmt/texinfo/longmenu.texi10
-rw-r--r--t/fmt/texinfo/longmenu.trans16
-rw-r--r--t/fmt/texinfo/partialmenus.norm21
-rw-r--r--t/fmt/texinfo/partialmenus.po40
-rw-r--r--t/fmt/texinfo/partialmenus.pot40
-rw-r--r--t/fmt/texinfo/partialmenus.texi14
-rw-r--r--t/fmt/texinfo/partialmenus.trans21
-rw-r--r--t/fmt/texinfo/tindex.norm13
-rw-r--r--t/fmt/texinfo/tindex.po46
-rw-r--r--t/fmt/texinfo/tindex.pot46
-rw-r--r--t/fmt/texinfo/tindex.texi7
-rw-r--r--t/fmt/texinfo/tindex.trans13
-rw-r--r--t/fmt/txt-fortunes/MultipleLines.norm23
-rw-r--r--t/fmt/txt-fortunes/MultipleLines.po87
-rw-r--r--t/fmt/txt-fortunes/MultipleLines.pot73
-rw-r--r--t/fmt/txt-fortunes/MultipleLines.trans23
-rw-r--r--t/fmt/txt-fortunes/MultipleLines.txt23
-rw-r--r--t/fmt/txt-fortunes/SeveralFortunes.norm5
-rw-r--r--t/fmt/txt-fortunes/SeveralFortunes.po35
-rw-r--r--t/fmt/txt-fortunes/SeveralFortunes.pot35
-rw-r--r--t/fmt/txt-fortunes/SeveralFortunes.trans5
-rw-r--r--t/fmt/txt-fortunes/SeveralFortunes.txt5
-rw-r--r--t/fmt/txt-fortunes/SingleFortune.norm1
-rw-r--r--t/fmt/txt-fortunes/SingleFortune.po23
-rw-r--r--t/fmt/txt-fortunes/SingleFortune.pot23
-rw-r--r--t/fmt/txt-fortunes/SingleFortune.trans1
-rw-r--r--t/fmt/txt-fortunes/SingleFortune.txt1
-rw-r--r--t/fmt/txt-markdown/Basic.md24
-rw-r--r--t/fmt/txt-markdown/Basic.norm25
-rw-r--r--t/fmt/txt-markdown/Basic.po97
-rw-r--r--t/fmt/txt-markdown/Basic.pot104
-rw-r--r--t/fmt/txt-markdown/Basic.trans25
-rw-r--r--t/fmt/txt-markdown/NestedLists.md28
-rw-r--r--t/fmt/txt-markdown/NestedLists.norm23
-rw-r--r--t/fmt/txt-markdown/NestedLists.po64
-rw-r--r--t/fmt/txt-markdown/NestedLists.pot71
-rw-r--r--t/fmt/txt-markdown/NestedLists.trans23
-rw-r--r--t/fmt/txt-markdown/NoWrap.md39
-rw-r--r--t/fmt/txt-markdown/NoWrap.norm39
-rw-r--r--t/fmt/txt-markdown/NoWrap.po103
-rw-r--r--t/fmt/txt-markdown/NoWrap.pot72
-rw-r--r--t/fmt/txt-markdown/NoWrap.trans39
-rw-r--r--t/fmt/txt-markdown/PandocFencedCodeBlocks.md68
-rw-r--r--t/fmt/txt-markdown/PandocFencedCodeBlocks.norm68
-rw-r--r--t/fmt/txt-markdown/PandocFencedCodeBlocks.po116
-rw-r--r--t/fmt/txt-markdown/PandocFencedCodeBlocks.pot97
-rw-r--r--t/fmt/txt-markdown/PandocFencedCodeBlocks.trans68
-rw-r--r--t/fmt/txt-markdown/PandocHeaderOnlyAuthor.md4
-rw-r--r--t/fmt/txt-markdown/PandocHeaderOnlyAuthor.norm4
-rw-r--r--t/fmt/txt-markdown/PandocHeaderOnlyAuthor.po28
-rw-r--r--t/fmt/txt-markdown/PandocHeaderOnlyAuthor.pot29
-rw-r--r--t/fmt/txt-markdown/PandocHeaderOnlyAuthor.trans4
-rw-r--r--t/fmt/txt-markdown/PandocHeaderTitle.md3
-rw-r--r--t/fmt/txt-markdown/PandocHeaderTitle.norm3
-rw-r--r--t/fmt/txt-markdown/PandocHeaderTitle.po27
-rw-r--r--t/fmt/txt-markdown/PandocHeaderTitle.pot28
-rw-r--r--t/fmt/txt-markdown/PandocHeaderTitle.trans3
-rw-r--r--t/fmt/txt-markdown/PandocHeaderTitleAuthors.md9
-rw-r--r--t/fmt/txt-markdown/PandocHeaderTitleAuthors.norm6
-rw-r--r--t/fmt/txt-markdown/PandocHeaderTitleAuthors.po45
-rw-r--r--t/fmt/txt-markdown/PandocHeaderTitleAuthors.pot46
-rw-r--r--t/fmt/txt-markdown/PandocHeaderTitleAuthors.trans6
-rw-r--r--t/fmt/txt-markdown/PandocHeaderTitleDate.md5
-rw-r--r--t/fmt/txt-markdown/PandocHeaderTitleDate.norm5
-rw-r--r--t/fmt/txt-markdown/PandocHeaderTitleDate.po33
-rw-r--r--t/fmt/txt-markdown/PandocHeaderTitleDate.pot34
-rw-r--r--t/fmt/txt-markdown/PandocHeaderTitleDate.trans5
-rw-r--r--t/fmt/txt-markdown/PandocHeaderTitleMultilines.md9
-rw-r--r--t/fmt/txt-markdown/PandocHeaderTitleMultilines.norm7
-rw-r--r--t/fmt/txt-markdown/PandocHeaderTitleMultilines.po45
-rw-r--r--t/fmt/txt-markdown/PandocHeaderTitleMultilines.pot43
-rw-r--r--t/fmt/txt-markdown/PandocHeaderTitleMultilines.trans7
-rw-r--r--t/fmt/txt-markdown/PandocHeaderTitleMultipleAuthors.md5
-rw-r--r--t/fmt/txt-markdown/PandocHeaderTitleMultipleAuthors.norm5
-rw-r--r--t/fmt/txt-markdown/PandocHeaderTitleMultipleAuthors.po39
-rw-r--r--t/fmt/txt-markdown/PandocHeaderTitleMultipleAuthors.pot40
-rw-r--r--t/fmt/txt-markdown/PandocHeaderTitleMultipleAuthors.trans5
-rw-r--r--t/fmt/txt-markdown/Rules.md71
-rw-r--r--t/fmt/txt-markdown/Rules.norm71
-rw-r--r--t/fmt/txt-markdown/Rules.po168
-rw-r--r--t/fmt/txt-markdown/Rules.pot177
-rw-r--r--t/fmt/txt-markdown/Rules.trans71
-rw-r--r--t/fmt/txt-markdown/Tables.md11
-rw-r--r--t/fmt/txt-markdown/Tables.norm8
-rw-r--r--t/fmt/txt-markdown/Tables.po45
-rw-r--r--t/fmt/txt-markdown/Tables.pot40
-rw-r--r--t/fmt/txt-markdown/Tables.trans8
-rw-r--r--t/fmt/txt-markdown/Width.md45
-rw-r--r--t/fmt/txt-markdown/Width.norm50
-rw-r--r--t/fmt/txt-markdown/Width.po152
-rw-r--r--t/fmt/txt-markdown/Width.pot144
-rw-r--r--t/fmt/txt-markdown/Width.trans50
-rw-r--r--t/fmt/txt-markdown/YamlFrontMatter.md43
-rw-r--r--t/fmt/txt-markdown/YamlFrontMatter.norm37
-rw-r--r--t/fmt/txt-markdown/YamlFrontMatter.po132
-rw-r--r--t/fmt/txt-markdown/YamlFrontMatter.pot130
-rw-r--r--t/fmt/txt-markdown/YamlFrontMatter.trans37
-rw-r--r--t/fmt/txt-markdown/YamlFrontMatter_KeysPaths.md38
-rw-r--r--t/fmt/txt-markdown/YamlFrontMatter_KeysPaths.norm37
-rw-r--r--t/fmt/txt-markdown/YamlFrontMatter_KeysPaths.po60
-rw-r--r--t/fmt/txt-markdown/YamlFrontMatter_KeysPaths.pot61
-rw-r--r--t/fmt/txt-markdown/YamlFrontMatter_KeysPaths.trans37
-rw-r--r--t/fmt/txt-markdown/YamlFrontMatter_Options.md37
-rw-r--r--t/fmt/txt-markdown/YamlFrontMatter_Options.norm36
-rw-r--r--t/fmt/txt-markdown/YamlFrontMatter_Options.po60
-rw-r--r--t/fmt/txt-markdown/YamlFrontMatter_Options.pot61
-rw-r--r--t/fmt/txt-markdown/YamlFrontMatter_Options.trans36
-rw-r--r--t/fmt/txt-markdown/YamlFrontMatter_fake.md11
-rw-r--r--t/fmt/txt-markdown/YamlFrontMatter_fake.norm13
-rw-r--r--t/fmt/txt-markdown/YamlFrontMatter_fake.norm.stderr2
-rw-r--r--t/fmt/txt-markdown/YamlFrontMatter_fake.po49
-rw-r--r--t/fmt/txt-markdown/YamlFrontMatter_fake.pot45
-rw-r--r--t/fmt/txt-markdown/YamlFrontMatter_fake.trans13
-rw-r--r--t/fmt/txt-markdown/YamlFrontMatter_fake.trans.stderr2
-rw-r--r--t/fmt/txt/KeyValue.norm12
-rw-r--r--t/fmt/txt/KeyValue.po54
-rw-r--r--t/fmt/txt/KeyValue.pot44
-rw-r--r--t/fmt/txt/KeyValue.text13
-rw-r--r--t/fmt/txt/KeyValue.trans12
-rw-r--r--t/fmt/txt/Width-nowrap.norm16
-rw-r--r--t/fmt/txt/Width-nowrap.trans16
-rw-r--r--t/fmt/txt/Width.norm18
-rw-r--r--t/fmt/txt/Width.po52
-rw-r--r--t/fmt/txt/Width.pot48
-rw-r--r--t/fmt/txt/Width.text19
-rw-r--r--t/fmt/txt/Width.trans18
-rw-r--r--t/fmt/wml/basic.norm48
-rw-r--r--t/fmt/wml/basic.po86
-rw-r--r--t/fmt/wml/basic.pot89
-rw-r--r--t/fmt/wml/basic.trans48
-rw-r--r--t/fmt/wml/basic.wml51
-rw-r--r--t/fmt/xhtml/basic.html35
-rw-r--r--t/fmt/xhtml/basic.norm36
-rw-r--r--t/fmt/xhtml/basic.po72
-rw-r--r--t/fmt/xhtml/basic.pot70
-rw-r--r--t/fmt/xhtml/basic.trans36
-rw-r--r--t/fmt/xhtml/closing-tag.html10
-rw-r--r--t/fmt/xhtml/closing-tag.norm10
-rw-r--r--t/fmt/xhtml/closing-tag.po27
-rw-r--r--t/fmt/xhtml/closing-tag.pot27
-rw-r--r--t/fmt/xhtml/closing-tag.trans10
-rw-r--r--t/fmt/xhtml/includessi.desc1
-rw-r--r--t/fmt/xhtml/includessi.html35
-rw-r--r--t/fmt/xhtml/includessi.norm33
-rw-r--r--t/fmt/xhtml/includessi.po84
-rw-r--r--t/fmt/xhtml/includessi.pot78
-rw-r--r--t/fmt/xhtml/includessi.trans33
-rw-r--r--t/fmt/xhtml/table.html21
-rw-r--r--t/fmt/xhtml/table.norm21
-rw-r--r--t/fmt/xhtml/table.po57
-rw-r--r--t/fmt/xhtml/table.pot57
-rw-r--r--t/fmt/xhtml/table.trans21
-rw-r--r--t/fmt/xml-dia/basic.dia3
-rw-r--r--t/fmt/xml-dia/basic.norm3
-rw-r--r--t/fmt/xml-dia/basic.po45
-rw-r--r--t/fmt/xml-dia/basic.pot43
-rw-r--r--t/fmt/xml-dia/basic.trans3
-rw-r--r--t/fmt/xml-dia/transl.dia6
-rw-r--r--t/fmt/xml-dia/transl.norm6
-rw-r--r--t/fmt/xml-dia/transl.po50
-rw-r--r--t/fmt/xml-dia/transl.pot46
-rw-r--r--t/fmt/xml-dia/transl.trans6
-rw-r--r--t/fmt/xml/attribute-novalue.desc2
-rw-r--r--t/fmt/xml/attribute-novalue.norm8
-rw-r--r--t/fmt/xml/attribute-novalue.po22
-rw-r--r--t/fmt/xml/attribute-novalue.pot22
-rw-r--r--t/fmt/xml/attribute-novalue.trans8
-rw-r--r--t/fmt/xml/attribute-novalue.xml6
-rw-r--r--t/fmt/xml/basic.norm96
-rw-r--r--t/fmt/xml/basic.po161
-rw-r--r--t/fmt/xml/basic.pot144
-rw-r--r--t/fmt/xml/basic.trans96
-rw-r--r--t/fmt/xml/basic.xml94
-rw-r--r--t/fmt/xml/cdata.norm9
-rw-r--r--t/fmt/xml/cdata.po39
-rw-r--r--t/fmt/xml/cdata.pot37
-rw-r--r--t/fmt/xml/cdata.trans9
-rw-r--r--t/fmt/xml/cdata.xml9
-rw-r--r--t/fmt/xml/comments.norm21
-rw-r--r--t/fmt/xml/comments.po42
-rw-r--r--t/fmt/xml/comments.pot38
-rw-r--r--t/fmt/xml/comments.trans21
-rw-r--r--t/fmt/xml/comments.xml19
-rw-r--r--t/fmt/xml/inside-foldattribute.norm8
-rw-r--r--t/fmt/xml/inside-foldattribute.po35
-rw-r--r--t/fmt/xml/inside-foldattribute.pot31
-rw-r--r--t/fmt/xml/inside-foldattribute.trans8
-rw-r--r--t/fmt/xml/inside-foldattribute.xml8
-rw-r--r--t/fmt/xml/options.desc1
-rw-r--r--t/fmt/xml/options.norm31
-rw-r--r--t/fmt/xml/options.po82
-rw-r--r--t/fmt/xml/options.pot72
-rw-r--r--t/fmt/xml/options.trans31
-rw-r--r--t/fmt/xml/options.xml31
-rw-r--r--t/fmt/xml/placeholder-empty.norm6
-rw-r--r--t/fmt/xml/placeholder-empty.po35
-rw-r--r--t/fmt/xml/placeholder-empty.pot32
-rw-r--r--t/fmt/xml/placeholder-empty.trans6
-rw-r--r--t/fmt/xml/placeholder-empty.xml6
-rw-r--r--t/fmt/yaml/arraylikestring.norm4
-rw-r--r--t/fmt/yaml/arraylikestring.po29
-rw-r--r--t/fmt/yaml/arraylikestring.pot29
-rw-r--r--t/fmt/yaml/arraylikestring.trans4
-rw-r--r--t/fmt/yaml/arraylikestring.yaml4
-rw-r--r--t/fmt/yaml/basic.norm103
-rw-r--r--t/fmt/yaml/basic.po405
-rw-r--r--t/fmt/yaml/basic.pot403
-rw-r--r--t/fmt/yaml/basic.trans103
-rw-r--r--t/fmt/yaml/basic.yaml107
-rw-r--r--t/fmt/yaml/keysandpaths1.po179
-rw-r--r--t/fmt/yaml/keysandpaths1.pot179
-rw-r--r--t/fmt/yaml/keysandpaths1.trans103
-rw-r--r--t/fmt/yaml/keysoption.norm25
-rw-r--r--t/fmt/yaml/keysoption.yaml25
-rw-r--r--t/fmt/yaml/keysoption1.po267
-rw-r--r--t/fmt/yaml/keysoption1.pot179
-rw-r--r--t/fmt/yaml/keysoption1.trans103
-rw-r--r--t/fmt/yaml/keysoption1.yaml25
-rw-r--r--t/fmt/yaml/keysoption2.po312
-rw-r--r--t/fmt/yaml/keysoption2.pot269
-rw-r--r--t/fmt/yaml/keysoption2.trans103
-rw-r--r--t/fmt/yaml/pathsoption1.po41
-rw-r--r--t/fmt/yaml/pathsoption1.pot41
-rw-r--r--t/fmt/yaml/pathsoption1.trans103
-rw-r--r--t/fmt/yaml/skiparray.norm7
-rw-r--r--t/fmt/yaml/skiparray.po23
-rw-r--r--t/fmt/yaml/skiparray.pot23
-rw-r--r--t/fmt/yaml/skiparray.trans7
-rw-r--r--t/fmt/yaml/skiparray.yaml17
-rw-r--r--t/gettextize.t39
-rw-r--r--t/gettextize/TEST_OK.md5
-rw-r--r--t/gettextize/test_dups.err0
-rw-r--r--t/gettextize/test_dups.md5
-rw-r--r--t/gettextize/test_dups.po30
-rw-r--r--t/gettextize/test_ok.err0
-rw-r--r--t/gettextize/test_ok.md5
-rw-r--r--t/gettextize/test_ok.po35
-rw-r--r--t/pod.t4
-rw-r--r--t/t-12-msguntypot/test1.new.po38
-rw-r--r--t/t-12-msguntypot/test1.new.pot38
-rw-r--r--t/t-12-msguntypot/test1.old.pot38
-rw-r--r--t/t-12-msguntypot/test1.po37
-rw-r--r--t/t-12-msguntypot/test2.new.po39
-rw-r--r--t/t-12-msguntypot/test2.new.pot38
-rw-r--r--t/t-12-msguntypot/test2.old.pot38
-rw-r--r--t/t-12-msguntypot/test2.po38
-rw-r--r--t/t-12-msguntypot/test3.new.po32
-rw-r--r--t/t-12-msguntypot/test3.new.pot38
-rw-r--r--t/t-12-msguntypot/test3.old.pot38
-rw-r--r--t/t-12-msguntypot/test3.po37
-rw-r--r--t/t-12-msguntypot/test4.new.po40
-rw-r--r--t/t-12-msguntypot/test4.new.pot39
-rw-r--r--t/t-12-msguntypot/test4.old.pot39
-rw-r--r--t/t-12-msguntypot/test4.po39
-rw-r--r--t/t-12-msguntypot/test5.new.po40
-rw-r--r--t/t-12-msguntypot/test5.new.pot39
-rw-r--r--t/t-12-msguntypot/test5.old.pot39
-rw-r--r--t/t-12-msguntypot/test5.po39
-rw-r--r--t/t-12-msguntypot/test6.new.po40
-rw-r--r--t/t-12-msguntypot/test6.new.pot39
-rw-r--r--t/t-12-msguntypot/test6.old.pot39
-rw-r--r--t/t-12-msguntypot/test6.po39
-rw-r--r--t/t-12-msguntypot/test7.new.po41
-rw-r--r--t/t-12-msguntypot/test7.new.pot39
-rw-r--r--t/t-12-msguntypot/test7.old.pot39
-rw-r--r--t/t-12-msguntypot/test7.po40
-rw-r--r--t/t-12-msguntypot/test8.new.po41
-rw-r--r--t/t-12-msguntypot/test8.new.pot39
-rw-r--r--t/t-12-msguntypot/test8.old.pot39
-rw-r--r--t/t-12-msguntypot/test8.po40
-rw-r--r--t/t-13-plural/err12
-rw-r--r--t/t-13-plural/pod120
-rw-r--r--t/t-13-plural/pod1.fr31
-rw-r--r--t/t-13-plural/pod1.po73
-rw-r--r--t/t-13-plural/pod222
-rw-r--r--t/t-13-plural/pod2.fr34
-rw-r--r--t/t-13-plural/pod2.po73
-rw-r--r--t/t-13-plural/pod323
-rw-r--r--t/t-13-plural/pod3.fr34
-rw-r--r--t/t-13-plural/pod424
-rw-r--r--t/t-13-plural/pod4.fr36
-rwxr-xr-xtestsuite/check216
-rwxr-xr-xtestsuite/stats.man120
-rwxr-xr-xtestsuite/stats.sh66
-rw-r--r--testsuite/test.man23
-rw-r--r--testsuite/test.man.addendum7
1207 files changed, 46968 insertions, 0 deletions
diff --git a/t/00-perms.t b/t/00-perms.t
new file mode 100644
index 0000000..7488139
--- /dev/null
+++ b/t/00-perms.t
@@ -0,0 +1,37 @@
+#! /usr/bin/perl
+# msguntypot tester.
+
+#########################
+
+use strict;
+use warnings;
+
+use lib q(t);
+
+use Test::More 'no_plan';
+use File::Path qw(make_path remove_tree);
+
+# No need to test uid nor to play with chmod on windows
+unless ( $^O eq 'MSWin32' ) {
+
+ BAIL_OUT("Tests cannot be run as root. Please use a regular user ID instead.\n") if $> == 0;
+
+ my @cmds = (
+ "chmod 755 t/cfg",
+ "find t/add t/cfg t/charset -maxdepth 1 -type d -exec chmod 755 {} \\;",
+ "find t/add t/cfg t/charset -maxdepth 2 -type d -exec chmod 755 {} \\;",
+ "find t/add t/cfg t/charset -type d -exec chmod 755 {} \\;",
+ "find t -type f -exec chmod 644 {} \\;"
+ );
+
+ foreach my $cmd (@cmds) {
+ my $exit_status = system($cmd);
+ if ( $exit_status == 0 ) {
+ pass($cmd);
+ } else {
+ BAIL_OUT( $cmd . " (retcode: $exit_status)" );
+ }
+ }
+}
+
+0;
diff --git a/t/01-classes.t b/t/01-classes.t
new file mode 100644
index 0000000..36fcaaa
--- /dev/null
+++ b/t/01-classes.t
@@ -0,0 +1,38 @@
+# Class tester.
+# Tries to load all modules to check their syntax.
+
+#########################
+
+use strict;
+use warnings;
+use Test::More tests => 24;
+
+note "Core modules";
+
+use_ok "Locale::Po4a::Chooser";
+use_ok "Locale::Po4a::Common";
+use_ok "Locale::Po4a::Po";
+use_ok "Locale::Po4a::TransTractor";
+
+note "File format modules";
+
+use_ok "Locale::Po4a::AsciiDoc";
+use_ok "Locale::Po4a::BibTeX";
+use_ok "Locale::Po4a::Dia";
+use_ok "Locale::Po4a::Docbook";
+use_ok "Locale::Po4a::Guide";
+use_ok "Locale::Po4a::Halibut";
+use_ok "Locale::Po4a::Ini";
+use_ok "Locale::Po4a::KernelHelp";
+use_ok "Locale::Po4a::LaTeX";
+use_ok "Locale::Po4a::Man";
+use_ok "Locale::Po4a::Pod";
+use_ok "Locale::Po4a::RubyDoc";
+use_ok "Locale::Po4a::Sgml";
+use_ok "Locale::Po4a::TeX";
+use_ok "Locale::Po4a::Texinfo";
+use_ok "Locale::Po4a::Text";
+use_ok "Locale::Po4a::Wml";
+use_ok "Locale::Po4a::Xhtml";
+use_ok "Locale::Po4a::Xml";
+use_ok "Locale::Po4a::Yaml";
diff --git a/t/12-msguntypot.t b/t/12-msguntypot.t
new file mode 100644
index 0000000..5360ce3
--- /dev/null
+++ b/t/12-msguntypot.t
@@ -0,0 +1,66 @@
+#! /usr/bin/perl
+# msguntypot tester.
+
+#########################
+
+use strict;
+use warnings;
+
+use lib q(t);
+use Testhelper;
+
+my @tests;
+
+push @tests,
+ {
+ 'run' => 'cp t-12-msguntypot/test1.po tmp && chmod u+w tmp/test1.po '
+ . '&& PATH/msguntypot -o t-12-msguntypot/test1.old.pot -n t-12-msguntypot/test1.new.pot tmp/test1.po > /dev/null',
+ 'tests' => ["PODIFF t-12-msguntypot/test1.new.po tmp/test1.po"],
+ 'doc' => 'nominal test',
+ },
+ {
+ 'run' => 'cp t-12-msguntypot/test2.po tmp && chmod u+w tmp/test2.po'
+ . '&& PATH/msguntypot -o t-12-msguntypot/test2.old.pot -n t-12-msguntypot/test2.new.pot tmp/test2.po > /dev/null',
+ 'tests' => ["PODIFF t-12-msguntypot/test2.new.po tmp/test2.po"],
+ 'doc' => 'fuzzy test',
+ },
+ {
+ 'run' => 'cp t-12-msguntypot/test3.po tmp && chmod u+w tmp/test3.po '
+ . '&& PATH/msguntypot -o t-12-msguntypot/test3.old.pot -n t-12-msguntypot/test3.new.pot tmp/test3.po > /dev/null',
+ 'tests' => ["PODIFF t-12-msguntypot/test3.new.po tmp/test3.po"],
+ 'doc' => 'msg moved test',
+ 'todo' => "Moved strings are not supported. Only typo fixes!",
+ },
+ {
+ 'run' => 'cp t-12-msguntypot/test4.po tmp && chmod u+w tmp/test4.po '
+ . '&& PATH/msguntypot -o t-12-msguntypot/test4.old.pot -n t-12-msguntypot/test4.new.pot tmp/test4.po > /dev/null',
+ 'tests' => ["PODIFF t-12-msguntypot/test4.new.po tmp/test4.po"],
+ 'doc' => 'plural strings (typo in msgid) test',
+ },
+ {
+ 'run' => 'cp t-12-msguntypot/test5.po tmp && chmod u+w tmp/test5.po '
+ . '&& PATH/msguntypot -o t-12-msguntypot/test5.old.pot -n t-12-msguntypot/test5.new.pot tmp/test5.po > /dev/null',
+ 'tests' => ["PODIFF t-12-msguntypot/test5.new.po tmp/test5.po"],
+ 'doc' => 'plural strings (typo in msgid_plural) test',
+ },
+ {
+ 'run' => 'cp t-12-msguntypot/test6.po tmp && chmod u+w tmp/test6.po '
+ . '&& PATH/msguntypot -o t-12-msguntypot/test6.old.pot -n t-12-msguntypot/test6.new.pot tmp/test6.po > /dev/null',
+ 'tests' => ["PODIFF t-12-msguntypot/test6.new.po tmp/test6.po"],
+ 'doc' => 'plural strings (typo in another msgid) test',
+ },
+ {
+ 'run' => 'cp t-12-msguntypot/test7.po tmp && chmod u+w tmp/test7.po '
+ . '&& PATH/msguntypot -o t-12-msguntypot/test7.old.pot -n t-12-msguntypot/test7.new.pot tmp/test7.po > /dev/null',
+ 'tests' => ["PODIFF t-12-msguntypot/test7.new.po tmp/test7.po"],
+ 'doc' => 'plural fuzzy strings (typo in msgid) test',
+ },
+ {
+ 'run' => 'cp t-12-msguntypot/test8.po tmp && chmod u+w tmp/test8.po '
+ . '&& PATH/msguntypot -o t-12-msguntypot/test8.old.pot -n t-12-msguntypot/test8.new.pot tmp/test8.po > /dev/null',
+ 'tests' => ["PODIFF t-12-msguntypot/test8.new.po tmp/test8.po"],
+ 'doc' => 'plural fuzzy strings (typo in msgid_plural) test',
+ };
+
+run_all_tests(@tests);
+0;
diff --git a/t/13-plural.t b/t/13-plural.t
new file mode 100644
index 0000000..9ecce29
--- /dev/null
+++ b/t/13-plural.t
@@ -0,0 +1,49 @@
+#! /usr/bin/perl
+# MAN module tester.
+
+#########################
+
+use strict;
+use warnings;
+
+use lib q(t);
+use Testhelper;
+
+my @tests;
+
+my $diff_pod_flags = " -I 'This file was generated by po4a' ";
+
+push @tests,
+ {
+ 'run' => "PATH/po4a-translate -f pod -k 0 -m t-13-plural/pod1 -p t-13-plural/pod1.po -l tmp/pod1.fr 2> tmp/err",
+ 'tests' => ["diff -u t-13-plural/pod1.fr tmp/pod1.fr $diff_pod_flags"],
+ 'doc' => "Parse plural forms",
+ },
+ {
+ 'run' => "PATH/po4a-translate -f pod -k 0 -m t-13-plural/pod2 -p t-13-plural/pod1.po -l tmp/pod2.fr 2> tmp/err",
+ 'tests' => ["diff -u t-13-plural/pod2.fr tmp/pod2.fr $diff_pod_flags"],
+ 'doc' => "Use singular form",
+ },
+ {
+ 'run' => "PATH/po4a-translate -f pod -k 0 -m t-13-plural/pod3 -p t-13-plural/pod1.po -l tmp/pod3.fr 2> tmp/err",
+ 'tests' => ["diff -u t-13-plural/pod3.fr tmp/pod3.fr $diff_pod_flags"],
+ 'doc' => "Use plural form",
+ },
+ {
+ 'run' => "PATH/po4a-translate -f pod -k 0 -m t-13-plural/pod4 -p t-13-plural/pod1.po -l tmp/pod4.fr 2> tmp/err",
+ 'tests' => ["diff -u t-13-plural/pod4.fr tmp/pod4.fr $diff_pod_flags"],
+ 'doc' => "Use single and plural form",
+ },
+ {
+ 'run' => "PATH/po4a-translate -f pod -k 0 -m t-13-plural/pod4 -p t-13-plural/pod1.po -l tmp/pod4.fr 2> tmp/err",
+ 'tests' => ["diff -u t-13-plural/err1 tmp/err $diff_pod_flags"],
+ 'doc' => "Warn when using plural forms",
+ },
+ {
+ 'run' => "PATH/po4a-translate -f pod -k 0 -m t-13-plural/pod4 -p t-13-plural/pod2.po -l tmp/pod4.fr 2> tmp/err",
+ 'tests' => ["diff -u t-13-plural/pod4.fr tmp/pod4.fr $diff_pod_flags"],
+ 'doc' => "Use single and plural form with multiple plural translations",
+ };
+
+run_all_tests(@tests);
+0;
diff --git a/t/Testhelper.pm b/t/Testhelper.pm
new file mode 100644
index 0000000..272d79a
--- /dev/null
+++ b/t/Testhelper.pm
@@ -0,0 +1,601 @@
+# Provides common test routines to avoid repeating the same code over and over again.
+#
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 2 of the License, or
+# (at your option) any later version.
+#
+# This program 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 General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc.,
+# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+#
+########################################################################
+
+# This accepts several type of tests:
+#
+#
+# * po4a.conf test. List of accepted keys:
+# doc (opt): Free string
+# po4a.conf (req): path to a config file for po4a
+# options (opt): extra parameters to pass to po4a, in addition to "--destdir tmp --verbose" that is unavoidable.
+
+# diff_outfile (opt): Command to use to check that the po4a command produced the right output
+# expected_outfile (opt): Name of the file containing the expected output of the po4a command
+# expected_retcode (opt): Return value expected for po4a (0 by default). Useful to test invalid inputs.
+
+# expected_files (opt): array of file names that are expected after the test execution. If provided:
+# - Any missing or unexpected file is a test failure.
+# - The expected content of $file must be provided in _$file or $file
+# (use _$file for pure output files that are not supposed to be read by po4a).
+# For that, a test is added automatically unless your tests already contain a line matching '$path/$file tmp/$path/$file'.
+# This test is 'PODIFF -I#: $path/$file tmp/$path/$file' if your file is a po/pot file, or 'diff -u $path/$file tmp/$path/$file'
+# tests (opt): array of shell commands to run after the test; any failure is reported as a test failure
+# Automatic substitutions in each command:
+# PATH -> Path to po4a binaries
+# PODIFF -> "diff -u -I'^\"POT-Creation-Date:' -I'^\"PO-Revision-Date:'"
+
+# setup (opt): array of shell commands to run before running the test
+# teardown (opt): array of shell commands to run after running the test
+# closed_path (opt): a shell pattern to pass to chmod to close the other directories.
+# If provided, setup/teardown commands are generated to (unless on windows):
+# - 'chmod 0' the directories marked 'closed_path'
+# - 'chmod +r-w+x' the test directory
+# - 'chmod +r-w' all files in the test directory
+# modes (opt): space separated modes to apply. Valid values:
+# - srcdir: cd tmp/$path ; po4a --srcdir $cwd/$path ; cd $cwd; <all tests>
+# - dstdir: cd $path ; po4a --destdir $cwd/tmp/$path ; cd $cwd: <all tests>
+# - srcdstdir: po4a --srcdir $cwd/$path --destdir $cwd/tmp/$path ; <all tests>
+# - curdir: cp $path/* tmp/$path ; cd tmp/$path ; po4a ; cd $cwd; <all tests but the one checking that only expected files were created>
+# If several values are provided, the tests are run several times. By default: run all modes.
+#
+
+# * 'format' test: modern tests to the formats. This kind of tests are mostly configured through files. Accepted keys
+# - format (req): the module to use
+# - input (req) : input file name (decomposed as $basename.$ext in the following)
+# - norm (default: $basename.norm): expected normalized document (translated with inexistant language)
+# - potfile (default: $basname.pot): expected POT file
+# - pofile (default: $basname.po): PO file used as input
+# All existing 'format' tests use uppercase as a translation language, so that everybody can work on them.
+# f=fmt/asciidoc/TablesCells; msgen $f.pot | msgfilter -o $f.po sed -e 's/./\U&/g' ; msgmerge -U $f.po $f.pot
+# - norm_stderr (optional -- default: $basename.norm.stderr): expected output of the normalization.
+# If the file does not exist, the normalization is expected to not output anything
+# - error (optional boolean -- default: false): whether the normalization is expected to fail
+# If so, the translation is not attempted (and the translation files don't have to exist)
+# - skip (optional): a set of stages that should be skipped, may contain 'normalize', 'translation' or 'updatepo'
+# in any combination
+# - trans (default: $basename.trans): expected translated document (translated with provided PO file)
+# - trans_stderr (optional -- default: $basename.trans.stderr): expected output of the translation
+# If the file does not exist, the normalization is expected to not output anything
+# - options (optional): options to pass to the translation, updatepo and normalization
+#
+# if a file $basename.desc exists, any comment is used as test description while the rest is added to the options
+
+# * 'run' test: ancient, unconverted tests
+
+package Testhelper;
+
+use 5.16.0;
+use strict;
+use warnings;
+use Test::More 'no_plan';
+use File::Path qw(make_path remove_tree);
+use File::Copy;
+use Cwd qw(cwd);
+
+use Exporter qw(import);
+our @EXPORT = qw(run_all_tests);
+
+# Set the right environment variables to normalize the outputs
+$ENV{'LC_ALL'} = "C";
+$ENV{'COLUMNS'} = "80";
+
+# Path to the tested executables. AUTOPKGTEST_TMP is set on salsa CI for Debian packages.
+my $execpath = defined $ENV{AUTOPKGTEST_TMP} ? "/usr/bin" : "perl ..";
+
+# msginit annoyances, see https://github.com/mquinson/po4a/issues/338
+my $PODIFF =
+ "-I'^\"Project-Id-Version:' -I'^\"POT-Creation-Date:' -I'^\"PO-Revision-Date:' "
+ . "-I'^# [^[:blank:]]* translations for ' -I'^# Language [^[:blank:]]* translations for ' -I'Copyright (C) 20.. Free Software Foundation, Inc.' -I'^# This file is distributed under the same license as the' -I'^# Automatically generated, 20...' ";
+
+sub show_files {
+ my $basename = shift;
+ foreach my $file ( glob("${basename}*") ) {
+ if ( -s $file ) {
+ diag("Produced file $file:");
+ open FH, "$file" || die "Cannot open exisiting $file, I'm puzzled";
+ while (<FH>) {
+ diag(" $_");
+ }
+ diag("(end of $file)\n");
+ diag("-------------------------------------------------------------");
+ close(FH);
+ }
+ }
+}
+
+my $root_dir = cwd();
+
+# Returns whether the details should be shown
+sub system_failed {
+ my ( $cmd, $doc, $expected_exit_status ) = @_;
+ $expected_exit_status //= 0;
+ my $exit_status = system($cmd);
+ $cmd =~ s/diff -u $PODIFF /PODIFF/g;
+ $cmd =~ s{$root_dir/}{BUILDPATH/}g;
+ $cmd =~ s{t/../po4a}{po4a};
+
+ if ( $exit_status == $expected_exit_status ) {
+ if ( $doc ne '' ) {
+ pass($doc);
+ pass(" Command: $cmd");
+ } else {
+ pass("$cmd");
+ }
+ return 0;
+ } else {
+ $doc = 'Provided command' unless $doc ne '';
+ fail( $doc . " (retcode: $exit_status)" );
+ note("Expected retcode: $expected_exit_status");
+ note("FAILED command: $cmd");
+ return 1;
+ }
+}
+
+# Remove that directory if it exists, and rebuild it fresh
+sub remake_path {
+ my $path = shift;
+ if ( -e $path ) {
+ remove_tree("$path") || die "Cannot cleanup $path/ on startup: $!";
+ }
+
+ make_path($path) || die "Cannot create $path/: $!";
+}
+
+sub teardown {
+ my $ref = shift;
+ my @cmds = @{$ref};
+
+ foreach my $cmd (@cmds) {
+ if ( system("$cmd 1>&2") ) {
+ diag("Error during teardown: $!");
+ diag(" Command: $cmd");
+ } else {
+ pass("Teardown command: $cmd");
+ }
+ }
+}
+
+sub setup {
+ my $ref = shift;
+ my @cmds = @{$ref};
+
+ foreach my $cmd (@cmds) {
+ if ( system("$cmd 1>&2") ) {
+ diag("Error during setup: $!");
+ diag(" Command: $cmd");
+ return 0;
+ } else {
+ pass("Setup command: $cmd");
+ }
+ }
+ return 1;
+}
+
+sub run_one_po4aconf {
+ my ( $t, $path, $basename, $ext, $mode ) = @_;
+
+ my %valid_options;
+ map { $valid_options{$_} = 1 }
+ qw(po4a.conf todo doc closed_path options setup tests teardown expected_retcode expected_files diff_outfile expected_outfile );
+ map { die "Invalid test " . $t->{'doc'} . ": invalid key '$_'\n" unless exists $valid_options{$_} } ( keys %{$t} );
+
+ my $po4aconf = $t->{'po4a.conf'} || fail("Broken test: po4a.conf must be provided");
+ my $options = "--verbose " . ( $t->{'options'} // "" );
+ my $closed_path = $t->{'closed_path'};
+ my $doc = $t->{'doc'};
+ my $expected_files = $t->{'expected_files'} // "";
+ my $expected_retcode = $t->{'expected_retcode'} // 0;
+
+ fail("Broken test: 'tests' is not an array as expected") if exists $t->{tests} && ref $t->{tests} ne 'ARRAY';
+ my ( @tests, @setup, @teardown ) = ( (), (), () );
+ map { push @tests, $_; } @{ $t->{'tests'} } if exists $t->{'tests'};
+ map { push @setup, $_; } @{ $t->{'setup'} } if exists $t->{'setup'};
+ map { push @teardown, $_; } @{ $t->{'teardown'} } if exists $t->{'teardown'};
+
+ fail("Broken test: path $path does not exist") unless -e $path;
+
+ if ( $closed_path && $^O ne 'MSWin32' ) {
+ push @setup, "chmod -r-w-x " . $closed_path; # Don't even look at the closed path
+ push @teardown, "chmod +r+w+x " . $closed_path; # Restore permissions
+ push @setup, "chmod +r+x $path"; # Look into the path of this test
+ push @setup, "chmod -w -R $path"; # But don't change any file in there
+ push @teardown, "chmod +w -R $path"; # Restore permissions
+ }
+
+ my $cwd = cwd();
+ my $tmppath = "tmp/$path";
+ $execpath = defined $ENV{AUTOPKGTEST_TMP} ? "/usr/bin" : "perl $cwd/..";
+
+ my $run_from = '.';
+ if ( $mode eq 'srcdir' ) {
+ $tmppath .= '-src';
+ $run_from = $tmppath;
+ $options = "--srcdir $cwd/$path $options";
+ } elsif ( $mode eq 'dstdir' ) {
+ $run_from = $path;
+ $options = "--destdir $cwd/$tmppath $options";
+ } elsif ( $mode eq 'srcdstdir' ) {
+ $tmppath .= '-srcdst';
+ $options = "--srcdir $path --destdir $tmppath $options";
+ } elsif ( $mode eq 'curdir' ) {
+ $tmppath .= '-cur';
+ push @setup, "cp -r $path/* $tmppath";
+ push @setup, "chmod +w -R $tmppath" unless $^O eq 'MSWin32';
+ $run_from = $tmppath;
+ } else {
+ die "Malformed test: mode $mode unknown\n";
+ }
+
+ remake_path($tmppath);
+ unless ( setup( \@setup ) ) { # Failed
+ teardown( \@teardown );
+ return;
+ }
+
+ my $cmd = "$execpath/po4a -f $cwd/$po4aconf $options > $cwd/$tmppath/output 2>&1";
+
+ chdir $run_from || fail "Cannot change directory to $run_from: $!";
+ pass("Change directory to $run_from");
+ die "Malformed test: conf file $cwd/$po4aconf does not exist from " . cwd() . " (mode:$mode)\n"
+ unless -e "$cwd/$po4aconf";
+ if ( system_failed( $cmd, "Executing po4a", $expected_retcode ) ) {
+ chdir $cwd || fail "Cannot change directory back to $cwd: $!";
+ note("Produced output:");
+ open FH, "$tmppath/output" || die "Cannot open output file that I just created, I'm puzzled";
+ while (<FH>) {
+ note(" $_");
+ }
+ note("(end of command output)\n");
+
+ teardown( \@teardown );
+
+ # show_files("$tmppath/");
+ return;
+ }
+ chdir $cwd || fail "Cannot change directory back to $cwd: $!";
+ pass("Change directory back to $cwd");
+
+ my $expected_outfile = $t->{'expected_outfile'} // "$path/_output";
+ unless ( -e $expected_outfile ) {
+ $expected_outfile = "$path/$expected_outfile"
+ if ( not -e $expected_outfile ) && ( -e "$path/$expected_outfile" );
+ unless ( -e $expected_outfile ) {
+ teardown( \@teardown );
+ die "Malformed test $path ($doc): no expected output. Please touch $expected_outfile\n";
+ }
+ }
+ my $diff_outfile = $t->{'diff_outfile'}
+ // " sed -e 's|$cwd/||' -e 's|$tmppath/||' -e 's|$path/||' $tmppath/output | " . "diff -u $expected_outfile -";
+ if ( system_failed( "$diff_outfile 2>&1 > $tmppath/diff_output", "Comparing output of po4a" ) ) {
+ note("Output difference:");
+ open FH, "$tmppath/diff_output" || die "Cannot open output file that I just created, I'm puzzled";
+ while (<FH>) {
+ chomp;
+ note(" $_");
+ }
+ note("(end of diff)\n");
+ teardown( \@teardown );
+ show_files("$tmppath/");
+ return;
+ }
+
+ my %expected;
+ map { s/\\ / /g; $expected{$_} = 1 } split /(?<!\\) +/, $expected_files;
+ if ( length $expected_files == 0 ) {
+ note("Expecting no output file.");
+ } else {
+ note( "Expecting " . ( scalar %expected ) . " output files: " . join( ":", keys %expected ) );
+ }
+ $expected{'output'} = 1;
+ $expected{'diff_output'} = 1;
+ FILE: foreach my $file ( glob("$tmppath/*") ) {
+ note("Seen file $file");
+ $file =~ s|$tmppath/||;
+ if ( not $expected{$file} ) {
+ if ( ( $mode eq 'srcdir' || $mode eq 'dstdir' || $mode eq 'srcdstdir' ) ) {
+ teardown( \@teardown );
+ fail "Unexpected file '$file'";
+ }
+ } else {
+ delete $expected{$file};
+ next FILE if $file eq 'output' || $file eq 'diff_output';
+ next FILE if -d "$path/$file";
+ if ( scalar grep { m{$tmppath/$file} } @tests ) {
+ note("Using the provided test to compare the content of $file");
+ } elsif ( -e "$path/_$file" ) {
+ push @tests,
+ ( $file =~ 'pot?$' ? "PODIFF -I#: " : "diff -u --strip-trailing-cr" )
+ . " \"$path/_$file\" \"$tmppath/$file\"";
+ } elsif ( -e "$path/$file" ) {
+ push @tests,
+ ( $file =~ 'pot?$' ? "PODIFF -I#: " : "diff -u --strip-trailing-cr" )
+ . " \"$path/$file\" \"$tmppath/$file\"";
+ } else {
+ teardown( \@teardown );
+ fail("Broken test $path: $path/_$file should be the expected content of produced file $file");
+ }
+ }
+ }
+ foreach my $file ( keys %expected ) {
+ fail "Missing file '$file'";
+ }
+
+ for my $tcmd (@tests) {
+
+ # print STDERR "cmd: $tcmd\n";
+ $tcmd =~ s/PATH/${execpath}/g;
+ $tcmd =~ s/PODIFF/diff -u --strip-trailing-cr $PODIFF /g;
+ $tcmd =~ s/\$tmppath/$tmppath/g;
+ $tcmd =~ s/\$path/$path/g;
+ if ( system_failed( "$tcmd 2>&1 > $tmppath/_cmd_output", "" ) ) {
+ note("Command output:");
+ open FH, "$tmppath/_cmd_output" || die "Cannot open output file that I just created, I'm puzzled";
+ while (<FH>) {
+ chomp;
+ note("| $_");
+ }
+ note("(end of output)\n");
+ teardown( \@teardown );
+ show_files("$tmppath/");
+ return;
+ }
+ unlink("$tmppath/_cmd_output");
+ }
+
+ teardown( \@teardown );
+}
+
+sub run_one_format {
+ my ( $test, $input ) = @_;
+
+ my $doc = $test->{'doc'} // "Format testing '$input'";
+ my $error = $test->{'error'} // 0; # Whether a normalization error is expected to interrupt the test
+
+ my %valid_options;
+ map { $valid_options{$_} = 1 } qw(format input potfile pofile doc options todo
+ norm norm_stderr error skip
+ trans trans_stderr );
+ map { die "Invalid test " . $test->{'doc'} . ": invalid key '$_'\n" unless exists $valid_options{$_} }
+ ( keys %{$test} );
+
+ fail "Broken test: input file $input does not exist or not readable." unless -e $input && -r $input;
+
+ my $format = $test->{'format'} // die "Broken test $input: no format provided\n";
+
+ $input =~ m|^(.*)/([^/]*)\.([^/]*)$| || die "Broken test: input file '$input' is not of form PATH/BASE.EXT";
+ my ( $path, $basename, $ext ) = ( $1, $2, $3 );
+
+ my $output = $test->{'norm'} // "$path/$basename.norm";
+ fail "Broken test $basename: expected normalized file '$output' does not exist" unless -e $output || $error;
+ my $potfile = $test->{'potfile'} // "$path/$basename.pot";
+ fail "Broken test $basename: expected POT file '$potfile' does not exist" unless -e $potfile || $error;
+ my $pofile = $test->{'pofile'} // "$path/$basename.po";
+ fail "Broken test $basename: expected PO file '$pofile' does not exist" unless -e $pofile || $error;
+ my $transfile = $test->{'trans'} // "$path/$basename.trans";
+ fail "Broken test $basename: expected translated file '$transfile' does not exist" unless -e $transfile || $error;
+
+ my $norm_stderr = $test->{'norm_stderr'} // "$path/$basename.norm.stderr"; # this file is optionnal
+ my $trans_stderr = $test->{'trans_stderr'} // "$path/$basename.trans.stderr"; # this file is optionnal
+
+ my $options = $test->{'options'} // "";
+ my (@tests);
+
+ if ( -e "$path/$basename.desc" ) {
+ open FH, "<$path/$basename.desc" || die "Cannot read $path/$basename.desc: $!";
+ while (<FH>) {
+ chomp;
+ s{#(.*)$}{} and $doc = $1;
+ s{^[ \t]+}{};
+ next if m{^$};
+ $options .= "$_ ";
+ }
+ }
+
+ remake_path("tmp/$path");
+ my $tmpbase = "tmp/$path/$basename";
+ my $cwd = cwd();
+ $execpath = defined $ENV{AUTOPKGTEST_TMP} ? "/usr/bin" : "perl $cwd/..";
+
+ unless (exists $test->{'skip'}{'normalize'}) {
+ # Normalize the document
+ my $real_stderr = "$cwd/tmp/$path/$basename.norm.stderr";
+ my $cmd =
+ "${execpath}/po4a-normalize --no-deprecation -f $format --quiet "
+ . "--pot $cwd/${tmpbase}.pot --localized $cwd/${tmpbase}.norm $options $basename.$ext"
+ . " > $real_stderr 2>&1";
+
+ chdir $path || fail "Cannot change directory to $path: $!";
+ note("Change directory to $path");
+ my $exit_status = system($cmd);
+ $cmd =~ s{$root_dir/}{}g;
+ $cmd =~ s{t/../po4a}{po4a};
+
+ if ( $error == 0 && $exit_status == 0 ) {
+ pass("Normalizing $doc");
+ note(" Pass: $cmd (retcode: $exit_status)");
+ } elsif ( $error != 0 && $exit_status != 0 ) {
+ pass("Expected error detected in $doc");
+ note(" Failing as expected: $cmd (retcode: $exit_status)");
+ note("Produced output:");
+ open FH, $real_stderr || die "Cannot open output file that I just created, I'm puzzled";
+ while (<FH>) {
+ note(" $_");
+ }
+ note("(end of command output)\n");
+ } else {
+ fail("Normalizing $doc: $exit_status");
+ note(" FAIL: $cmd");
+ note("Produced output:");
+ open FH, $real_stderr || die "Cannot open output file that I just created, I'm puzzled";
+ while (<FH>) {
+ note(" $_");
+ }
+ note("(end of command output)\n");
+ }
+
+ push @tests, "diff -uNwB $norm_stderr $real_stderr";
+ push @tests, "PODIFF $potfile $tmpbase.pot" unless $error;
+ push @tests, "diff -u $output $tmpbase.norm" unless $error;
+ }
+
+ unless ($error or exists $test->{'skip'}{'traslate'}) {
+ # Translate the document
+ my $cmd =
+ "${execpath}/po4a-translate --no-deprecation -f $format $options --master $basename.$ext"
+ . " --po $cwd/$pofile --localized $cwd/${tmpbase}.trans"
+ . " > $cwd/$tmpbase.trans.stderr 2>&1";
+
+ if ( system_failed( $cmd, "Translating $doc" ) ) {
+ note("Produced output:");
+ open FH, "$cwd/$tmpbase.trans.stderr" || die "Cannot open output file that I just created, I'm puzzled";
+ while (<FH>) {
+ note(" $_");
+ }
+ note("(end of command output)\n");
+ }
+ push @tests, "diff -uNwB $trans_stderr $tmpbase.trans.stderr";
+ push @tests, "diff -uN $transfile $tmpbase.trans";
+ }
+
+ unless ($error or exists $test->{'skip'}{'updatepo'}) {
+ # Update PO
+ copy( "$cwd/$pofile", "$cwd/${tmpbase}.po_updated" ) || fail "Cannot copy $pofile before updating it";
+ my $cmd =
+ "${execpath}/po4a-updatepo --no-deprecation -f $format $options "
+ . "--master $basename.$ext --po $cwd/${tmpbase}.po_updated"
+ . " > $cwd/tmp/$path/update.stderr 2>&1";
+
+ if ( system_failed( $cmd, "" ) ) {
+ note("Produced output:");
+ open FH, "$cwd/tmp/$path/update.stderr" || die "Cannot open output file that I just created, I'm puzzled";
+ while (<FH>) {
+ note(" $_");
+ }
+ note("(end of command output)\n");
+ }
+
+ push @tests, "PODIFF $pofile ${tmpbase}.po_updated";
+ }
+ chdir $cwd || fail "Cannot change directory back to $cwd: $!";
+ note("Change directory back to $cwd");
+
+ # Run all accumulated tests
+ for my $tcmd (@tests) {
+ $tcmd =~ s/PATH/${execpath}/g;
+ $tcmd =~ s/PODIFF/diff -u $PODIFF /g;
+ if ( system_failed( "$tcmd > $tmpbase.cmd_output 2>&1", "" ) ) {
+ note("Command output:");
+ open FH, "$tmpbase.cmd_output" || die "Cannot open output file that I just created, I'm puzzled";
+ while (<FH>) {
+ chomp;
+ note("| $_");
+ }
+ note("(end of output)\n");
+ show_files("tmp/$path");
+ return;
+ }
+ unlink("$tmpbase.cmd_output");
+ }
+}
+
+sub run_all_tests {
+ my @cases = @_;
+
+ # Change into test directory and create a temporary directory
+ chdir "t" or die "Can't chdir to test directory t\n";
+
+ remake_path("tmp");
+
+ TEST: foreach my $test (@cases) {
+ if ( exists $test->{'format'} ) {
+ my $input = $test->{'input'} // die "Broken test: 'format' tests must declare an 'input' key'";
+ $test->{'doc'} = "Format $input" unless exists $test->{'doc'};
+
+ if ( exists $test->{'todo'} ) {
+ TODO: {
+ print STDERR "TODO: " . $test->{doc} . "\n";
+ local our $TODO = $test->{'todo'};
+ subtest $test->{'doc'} => sub { run_one_format( $test, $input ); }
+ }
+ } else {
+ subtest $test->{'doc'} => sub { run_one_format( $test, $input ); }
+ }
+ } elsif ( exists $test->{'po4a.conf'} ) {
+
+ if ( $test->{'po4a.conf'} =~ m|^(.*)/([^/]*)\.([^./]*)$| ) {
+ my ( $path, $basename, $ext ) = ( $1, $2, $3 );
+
+ my @modes;
+ if ( exists $test->{'modes'} ) {
+ push @modes, split( / /, $test->{'modes'} );
+ delete $test->{'modes'};
+ } else {
+ push @modes, (qw(dstdir srcdir srcdstdir curdir));
+ }
+ map {
+ die "Malformed test: mode '$_' invalid."
+ unless $_ eq 'dstdir' || $_ eq 'srcdir' || $_ eq 'srcdstdir' || $_ eq 'curdir';
+ } @modes;
+
+ if ( exists $test->{'todo'} ) {
+ TODO: {
+ local our $TODO = $test->{'todo'};
+ foreach my $mode (@modes) {
+ subtest $test->{'doc'}
+ . " ($mode)" => sub { run_one_po4aconf( $test, $path, $basename, $ext, $mode ); };
+ }
+ }
+ } else {
+ foreach my $mode (@modes) {
+ subtest $test->{'doc'}
+ . " ($mode)" => sub { run_one_po4aconf( $test, $path, $basename, $ext, $mode ); };
+ }
+ }
+ } else {
+ fail "Test " . $test->{'doc'} . " malformed. Cannot parse the conf filename.";
+ }
+
+ } elsif ( exists $test->{'run'} ) {
+
+ my $cmd = $test->{'run'};
+ $cmd =~ s/PATH/${execpath}/;
+ my $exit_status = system($cmd);
+ is( $exit_status, 0, "Executing " . $test->{'doc'} . " -- Command: $cmd" );
+
+ fail "Malformed test " . $test->{'doc'} . ": missing tests." unless scalar $test->{tests};
+ for my $cmd ( @{ $test->{tests} } ) {
+
+ # print STDERR "cmd: $cmd\n";
+ $cmd =~ s/PODIFF/diff -u $PODIFF/g;
+ $exit_status = system( $cmd. ' 1>&2' );
+ $cmd =~
+ s/diff -u -I'Copyright .C. 20.. Free Software Foundation, Inc.' -I'.. Automatically generated, 20...' -I'."POT-Creation-Date:' -I'."PO-Revision-Date:'/PODIFF/g;
+ is( $exit_status, 0, "Test of " . $test->{'doc'} . " -- Command: $cmd" );
+ next TEST unless ( $exit_status == 0 );
+ }
+
+ } else {
+ fail "Test " . $test->{'doc'} . " does not have any 'po4a.conf' nor 'format' nor 'run' field";
+ }
+ }
+
+ chdir ".." or die "Can't chdir back to root directory\n";
+}
+
+1;
diff --git a/t/add.t b/t/add.t
new file mode 100644
index 0000000..dfd80a1
--- /dev/null
+++ b/t/add.t
@@ -0,0 +1,46 @@
+#! /usr/bin/perl
+# Addenda modifiers tester.
+
+#########################
+
+use strict;
+use warnings;
+
+use lib q(t);
+use Testhelper;
+
+my @tests;
+
+push @tests, {
+ 'doc' => 'Several kind of positioning (examples of the doc) POD format',
+ 'po4a.conf' => 'add/positioning/positioning.conf',
+ 'closed_path' => 'add/*/',
+ 'expected_files' =>
+ 'file-before.pod.fr file-after.pod.fr file-eof.pod.fr file-eofmode.pod.fr fr.po positioning.pot',
+
+ },
+ {
+ 'doc' => 'Lists of addendums (asciidoc format)',
+ 'po4a.conf' => 'add/list/po4a.conf',
+ 'closed_path' => 'add/*/',
+ 'expected_files' => 'output-1 output-2 output-3 output-123 output-list up.po list.pot',
+
+ },
+ {
+ 'doc' => 'Modifiers (asciidoc format)',
+ 'po4a.conf' => 'add/modifiers/po4a.conf',
+ 'closed_path' => 'add/*/',
+ 'options' => '--no-update',
+ 'expected_files' => 'with-1 without-2 without-3 without-4 without-5 without-6 with-7 without-8',
+ },
+ {
+ 'doc' => 'Same path to addenda for all languages (and ? modifier)',
+ 'po4a.conf' => 'add/path/po4a.conf',
+ 'closed_path' => 'add/*/',
+ 'expected_files' => 'multiple.de.po multiple.es.po multiple.fr.po multiple.it.po '
+ . 'multiple.man.de.1 multiple.man.es.1 multiple.man.fr.1 multiple.man.it.1 multiple.pot',
+
+ };
+
+run_all_tests(@tests);
+0;
diff --git a/t/add/list/_output b/t/add/list/_output
new file mode 100644
index 0000000..8c11a61
--- /dev/null
+++ b/t/add/list/_output
@@ -0,0 +1,7 @@
+Updating list.pot: (2 entries)
+Updating up.po: 2 translated messages.
+output-1 is 100% translated (2 strings).
+output-2 is 100% translated (2 strings).
+output-3 is 100% translated (2 strings).
+output-123 is 100% translated (2 strings).
+output-list is 100% translated (2 strings).
diff --git a/t/add/list/_output-1 b/t/add/list/_output-1
new file mode 100644
index 0000000..7ec9b9f
--- /dev/null
+++ b/t/add/list/_output-1
@@ -0,0 +1,8 @@
+TRANSLATED TITLE 0
+==================
+
+TRANSLATED TITLE 1
+------------------
+
+= Appendix 1 =
+
diff --git a/t/add/list/_output-123 b/t/add/list/_output-123
new file mode 100644
index 0000000..b364fff
--- /dev/null
+++ b/t/add/list/_output-123
@@ -0,0 +1,12 @@
+TRANSLATED TITLE 0
+==================
+
+TRANSLATED TITLE 1
+------------------
+
+= Appendix 1 =
+
+= Appendix 2 =
+
+= Appendix 3 =
+
diff --git a/t/add/list/_output-2 b/t/add/list/_output-2
new file mode 100644
index 0000000..720b7c6
--- /dev/null
+++ b/t/add/list/_output-2
@@ -0,0 +1,8 @@
+TRANSLATED TITLE 0
+==================
+
+TRANSLATED TITLE 1
+------------------
+
+= Appendix 2 =
+
diff --git a/t/add/list/_output-3 b/t/add/list/_output-3
new file mode 100644
index 0000000..c15e159
--- /dev/null
+++ b/t/add/list/_output-3
@@ -0,0 +1,8 @@
+TRANSLATED TITLE 0
+==================
+
+TRANSLATED TITLE 1
+------------------
+
+= Appendix 3 =
+
diff --git a/t/add/list/_output-list b/t/add/list/_output-list
new file mode 100644
index 0000000..b364fff
--- /dev/null
+++ b/t/add/list/_output-list
@@ -0,0 +1,12 @@
+TRANSLATED TITLE 0
+==================
+
+TRANSLATED TITLE 1
+------------------
+
+= Appendix 1 =
+
+= Appendix 2 =
+
+= Appendix 3 =
+
diff --git a/t/add/list/add-1 b/t/add/list/add-1
new file mode 100644
index 0000000..5702cca
--- /dev/null
+++ b/t/add/list/add-1
@@ -0,0 +1,3 @@
+PO4A-HEADER:mode=after;position=^TRANSLATED TITLE 1;beginboundary=^FakePo4aBoundary
+= Appendix 1 =
+
diff --git a/t/add/list/add-2 b/t/add/list/add-2
new file mode 100644
index 0000000..d9e1cfb
--- /dev/null
+++ b/t/add/list/add-2
@@ -0,0 +1,3 @@
+PO4A-HEADER:mode=after;position=^TRANSLATED TITLE 1;beginboundary=^FakePo4aBoundary
+= Appendix 2 =
+
diff --git a/t/add/list/add-3 b/t/add/list/add-3
new file mode 100644
index 0000000..fddb49e
--- /dev/null
+++ b/t/add/list/add-3
@@ -0,0 +1,3 @@
+PO4A-HEADER:mode=after;position=^TRANSLATED TITLE 1;beginboundary=^FakePo4aBoundary
+= Appendix 3 =
+
diff --git a/t/add/list/add.list b/t/add/list/add.list
new file mode 100644
index 0000000..e81bf78
--- /dev/null
+++ b/t/add/list/add.list
@@ -0,0 +1,3 @@
+add-1
+add-2
+add-3
diff --git a/t/add/list/input-1 b/t/add/list/input-1
new file mode 100644
index 0000000..65893ca
--- /dev/null
+++ b/t/add/list/input-1
@@ -0,0 +1,6 @@
+original title 0
+================
+
+original title 1
+----------------
+
diff --git a/t/add/list/input-2 b/t/add/list/input-2
new file mode 100644
index 0000000..65893ca
--- /dev/null
+++ b/t/add/list/input-2
@@ -0,0 +1,6 @@
+original title 0
+================
+
+original title 1
+----------------
+
diff --git a/t/add/list/input-3 b/t/add/list/input-3
new file mode 100644
index 0000000..65893ca
--- /dev/null
+++ b/t/add/list/input-3
@@ -0,0 +1,6 @@
+original title 0
+================
+
+original title 1
+----------------
+
diff --git a/t/add/list/input-4 b/t/add/list/input-4
new file mode 100644
index 0000000..65893ca
--- /dev/null
+++ b/t/add/list/input-4
@@ -0,0 +1,6 @@
+original title 0
+================
+
+original title 1
+----------------
+
diff --git a/t/add/list/input-5 b/t/add/list/input-5
new file mode 100644
index 0000000..65893ca
--- /dev/null
+++ b/t/add/list/input-5
@@ -0,0 +1,6 @@
+original title 0
+================
+
+original title 1
+----------------
+
diff --git a/t/add/list/list.pot b/t/add/list/list.pot
new file mode 100644
index 0000000..c0a2f7a
--- /dev/null
+++ b/t/add/list/list.pot
@@ -0,0 +1,29 @@
+# SOME DESCRIPTIVE TITLE
+# Copyright (C) YEAR Free Software Foundation, Inc.
+# This file is distributed under the same license as the PACKAGE package.
+# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
+#
+#, fuzzy
+msgid ""
+msgstr ""
+"Project-Id-Version: PACKAGE VERSION\n"
+"POT-Creation-Date: 2020-04-06 01:08+0200\n"
+"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
+"Language-Team: LANGUAGE <LL@li.org>\n"
+"Language: \n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+
+#. type: Title =
+#: add/list/input-1.xml:2
+#, no-wrap
+msgid "original title 0"
+msgstr ""
+
+#. type: Title -
+#: add/list/input-1.xml:3
+#, no-wrap
+msgid "original title 1"
+msgstr ""
diff --git a/t/add/list/po4a.conf b/t/add/list/po4a.conf
new file mode 100644
index 0000000..2d4f120
--- /dev/null
+++ b/t/add/list/po4a.conf
@@ -0,0 +1,10 @@
+[po4a_langs] up
+
+[po4a_paths] list.pot $lang:$lang.po
+[options] opt:"--msgmerge-opt --silent"
+
+[type:asciidoc] input-1 up:output-1 add_up:add-1
+[type:asciidoc] input-2 up:output-2 add_up:add-2
+[type:asciidoc] input-3 up:output-3 add_up:add-3
+[type:asciidoc] input-4 up:output-123 add_up:add-1 add_up:add-2 add_up:add-3
+[type:asciidoc] input-5 up:output-list add_up:@add.list
diff --git a/t/add/list/up.po b/t/add/list/up.po
new file mode 100644
index 0000000..d98e0b9
--- /dev/null
+++ b/t/add/list/up.po
@@ -0,0 +1,29 @@
+# French translations for po package
+# Copyright (C) 2020 Free Software Foundation, Inc.
+# This file is distributed under the same license as the po package.
+# Automatically generated, 2020.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: po 4a\n"
+"POT-Creation-Date: 2020-04-18 22:15+0200\n"
+"PO-Revision-Date: 2020-04-06 00:39+0200\n"
+"Last-Translator: Automatically generated\n"
+"Language-Team: none\n"
+"Language: fr\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=2; plural=(n > 1);\n"
+
+#. type: Title =
+#: input-1:2 input-2:2 input-3:2
+#, no-wrap
+msgid "original title 0"
+msgstr "TRANSLATED TITLE 0"
+
+#. type: Title -
+#: input-1:5 input-2:5 input-3:5
+#, no-wrap
+msgid "original title 1"
+msgstr "TRANSLATED TITLE 1"
diff --git a/t/add/modifiers/_output b/t/add/modifiers/_output
new file mode 100644
index 0000000..a6fcb40
--- /dev/null
+++ b/t/add/modifiers/_output
@@ -0,0 +1,10 @@
+NOT creating modifiers.pot as requested (--no-update).
+NOT updating the POT file modifiers.pot as requested (--no-update).
+with-1 is 100% translated (2 strings).
+without-2 is 100% translated (2 strings).
+without-3 is 100% translated (2 strings).
+without-4 is 100% translated (2 strings).
+without-5 is 100% translated (2 strings).
+without-6 is 100% translated (2 strings).
+with-7 is 100% translated (2 strings).
+without-8 is 100% translated (2 strings).
diff --git a/t/add/modifiers/_with-1 b/t/add/modifiers/_with-1
new file mode 100644
index 0000000..7ec9b9f
--- /dev/null
+++ b/t/add/modifiers/_with-1
@@ -0,0 +1,8 @@
+TRANSLATED TITLE 0
+==================
+
+TRANSLATED TITLE 1
+------------------
+
+= Appendix 1 =
+
diff --git a/t/add/modifiers/_with-7 b/t/add/modifiers/_with-7
new file mode 100644
index 0000000..7ec9b9f
--- /dev/null
+++ b/t/add/modifiers/_with-7
@@ -0,0 +1,8 @@
+TRANSLATED TITLE 0
+==================
+
+TRANSLATED TITLE 1
+------------------
+
+= Appendix 1 =
+
diff --git a/t/add/modifiers/_without-2 b/t/add/modifiers/_without-2
new file mode 100644
index 0000000..8f18f19
--- /dev/null
+++ b/t/add/modifiers/_without-2
@@ -0,0 +1,6 @@
+TRANSLATED TITLE 0
+==================
+
+TRANSLATED TITLE 1
+------------------
+
diff --git a/t/add/modifiers/_without-3 b/t/add/modifiers/_without-3
new file mode 100644
index 0000000..8f18f19
--- /dev/null
+++ b/t/add/modifiers/_without-3
@@ -0,0 +1,6 @@
+TRANSLATED TITLE 0
+==================
+
+TRANSLATED TITLE 1
+------------------
+
diff --git a/t/add/modifiers/_without-4 b/t/add/modifiers/_without-4
new file mode 100644
index 0000000..8f18f19
--- /dev/null
+++ b/t/add/modifiers/_without-4
@@ -0,0 +1,6 @@
+TRANSLATED TITLE 0
+==================
+
+TRANSLATED TITLE 1
+------------------
+
diff --git a/t/add/modifiers/_without-5 b/t/add/modifiers/_without-5
new file mode 100644
index 0000000..8f18f19
--- /dev/null
+++ b/t/add/modifiers/_without-5
@@ -0,0 +1,6 @@
+TRANSLATED TITLE 0
+==================
+
+TRANSLATED TITLE 1
+------------------
+
diff --git a/t/add/modifiers/_without-6 b/t/add/modifiers/_without-6
new file mode 100644
index 0000000..8f18f19
--- /dev/null
+++ b/t/add/modifiers/_without-6
@@ -0,0 +1,6 @@
+TRANSLATED TITLE 0
+==================
+
+TRANSLATED TITLE 1
+------------------
+
diff --git a/t/add/modifiers/_without-8 b/t/add/modifiers/_without-8
new file mode 100644
index 0000000..8f18f19
--- /dev/null
+++ b/t/add/modifiers/_without-8
@@ -0,0 +1,6 @@
+TRANSLATED TITLE 0
+==================
+
+TRANSLATED TITLE 1
+------------------
+
diff --git a/t/add/modifiers/addendum b/t/add/modifiers/addendum
new file mode 100644
index 0000000..5702cca
--- /dev/null
+++ b/t/add/modifiers/addendum
@@ -0,0 +1,3 @@
+PO4A-HEADER:mode=after;position=^TRANSLATED TITLE 1;beginboundary=^FakePo4aBoundary
+= Appendix 1 =
+
diff --git a/t/add/modifiers/addendum.list b/t/add/modifiers/addendum.list
new file mode 100644
index 0000000..ac5f3b5
--- /dev/null
+++ b/t/add/modifiers/addendum.list
@@ -0,0 +1,3 @@
+?addendum
+?not-existing
+!ignored \ No newline at end of file
diff --git a/t/add/modifiers/input-1 b/t/add/modifiers/input-1
new file mode 100644
index 0000000..65893ca
--- /dev/null
+++ b/t/add/modifiers/input-1
@@ -0,0 +1,6 @@
+original title 0
+================
+
+original title 1
+----------------
+
diff --git a/t/add/modifiers/input-2 b/t/add/modifiers/input-2
new file mode 100644
index 0000000..65893ca
--- /dev/null
+++ b/t/add/modifiers/input-2
@@ -0,0 +1,6 @@
+original title 0
+================
+
+original title 1
+----------------
+
diff --git a/t/add/modifiers/input-3 b/t/add/modifiers/input-3
new file mode 100644
index 0000000..65893ca
--- /dev/null
+++ b/t/add/modifiers/input-3
@@ -0,0 +1,6 @@
+original title 0
+================
+
+original title 1
+----------------
+
diff --git a/t/add/modifiers/input-4 b/t/add/modifiers/input-4
new file mode 100644
index 0000000..65893ca
--- /dev/null
+++ b/t/add/modifiers/input-4
@@ -0,0 +1,6 @@
+original title 0
+================
+
+original title 1
+----------------
+
diff --git a/t/add/modifiers/input-5 b/t/add/modifiers/input-5
new file mode 100644
index 0000000..65893ca
--- /dev/null
+++ b/t/add/modifiers/input-5
@@ -0,0 +1,6 @@
+original title 0
+================
+
+original title 1
+----------------
+
diff --git a/t/add/modifiers/input-6 b/t/add/modifiers/input-6
new file mode 100644
index 0000000..65893ca
--- /dev/null
+++ b/t/add/modifiers/input-6
@@ -0,0 +1,6 @@
+original title 0
+================
+
+original title 1
+----------------
+
diff --git a/t/add/modifiers/input-7 b/t/add/modifiers/input-7
new file mode 100644
index 0000000..65893ca
--- /dev/null
+++ b/t/add/modifiers/input-7
@@ -0,0 +1,6 @@
+original title 0
+================
+
+original title 1
+----------------
+
diff --git a/t/add/modifiers/input-8 b/t/add/modifiers/input-8
new file mode 100644
index 0000000..65893ca
--- /dev/null
+++ b/t/add/modifiers/input-8
@@ -0,0 +1,6 @@
+original title 0
+================
+
+original title 1
+----------------
+
diff --git a/t/add/modifiers/list.pot b/t/add/modifiers/list.pot
new file mode 100644
index 0000000..c0a2f7a
--- /dev/null
+++ b/t/add/modifiers/list.pot
@@ -0,0 +1,29 @@
+# SOME DESCRIPTIVE TITLE
+# Copyright (C) YEAR Free Software Foundation, Inc.
+# This file is distributed under the same license as the PACKAGE package.
+# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
+#
+#, fuzzy
+msgid ""
+msgstr ""
+"Project-Id-Version: PACKAGE VERSION\n"
+"POT-Creation-Date: 2020-04-06 01:08+0200\n"
+"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
+"Language-Team: LANGUAGE <LL@li.org>\n"
+"Language: \n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+
+#. type: Title =
+#: add/list/input-1.xml:2
+#, no-wrap
+msgid "original title 0"
+msgstr ""
+
+#. type: Title -
+#: add/list/input-1.xml:3
+#, no-wrap
+msgid "original title 1"
+msgstr ""
diff --git a/t/add/modifiers/po4a.conf b/t/add/modifiers/po4a.conf
new file mode 100644
index 0000000..bf6ec75
--- /dev/null
+++ b/t/add/modifiers/po4a.conf
@@ -0,0 +1,26 @@
+[po4a_langs] up
+
+[po4a_paths] modifiers.pot $lang:$lang.po
+[options] opt:"--msgmerge-opt --silent"
+
+# ? with existing file
+[type:asciidoc] input-1 up:with-1 add_up:?addendum
+# ? with non-existing file
+[type:asciidoc] input-2 up:without-2 add_up:?add-not-existing
+
+# ! with existing file
+[type:asciidoc] input-3 up:without-3 add_up:!addendum
+# ! with non-existing file
+[type:asciidoc] input-4 up:without-4 add_up:!add-not-existing
+
+# ?! with existing file
+[type:asciidoc] input-5 up:without-5 add_up:?!addendum
+# ?! with non-existing file
+[type:asciidoc] input-6 up:without-6 add_up:?!add-not-existing
+
+# @? with existing file
+[type:asciidoc] input-7 up:with-7 add_up:@?addendum.list
+# @? with non-existing file
+[type:asciidoc] input-8 up:without-8 add_up:@?add-not-existing
+
+
diff --git a/t/add/modifiers/up.po b/t/add/modifiers/up.po
new file mode 100644
index 0000000..d98e0b9
--- /dev/null
+++ b/t/add/modifiers/up.po
@@ -0,0 +1,29 @@
+# French translations for po package
+# Copyright (C) 2020 Free Software Foundation, Inc.
+# This file is distributed under the same license as the po package.
+# Automatically generated, 2020.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: po 4a\n"
+"POT-Creation-Date: 2020-04-18 22:15+0200\n"
+"PO-Revision-Date: 2020-04-06 00:39+0200\n"
+"Last-Translator: Automatically generated\n"
+"Language-Team: none\n"
+"Language: fr\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=2; plural=(n > 1);\n"
+
+#. type: Title =
+#: input-1:2 input-2:2 input-3:2
+#, no-wrap
+msgid "original title 0"
+msgstr "TRANSLATED TITLE 0"
+
+#. type: Title -
+#: input-1:5 input-2:5 input-3:5
+#, no-wrap
+msgid "original title 1"
+msgstr "TRANSLATED TITLE 1"
diff --git a/t/add/path/_multiple.man.de.1 b/t/add/path/_multiple.man.de.1
new file mode 100644
index 0000000..0450364
--- /dev/null
+++ b/t/add/path/_multiple.man.de.1
@@ -0,0 +1,12 @@
+.\"*******************************************************************
+.\"
+.\" This file was generated with po4a. Translate the source file.
+.\"
+.\"*******************************************************************
+.TH prüfung1 1
+.SH NAME
+prüfung \- nur ein Prüfung
+
+Hallo
+
+This content was added by the addendum.
diff --git a/t/add/path/_multiple.man.es.1 b/t/add/path/_multiple.man.es.1
new file mode 100644
index 0000000..091ad34
--- /dev/null
+++ b/t/add/path/_multiple.man.es.1
@@ -0,0 +1,10 @@
+.\"*******************************************************************
+.\"
+.\" This file was generated with po4a. Translate the source file.
+.\"
+.\"*******************************************************************
+.TH prueba1 1
+.SH NOMBRE
+prueba \- solo una prueba
+
+Hola
diff --git a/t/add/path/_multiple.man.fr.1 b/t/add/path/_multiple.man.fr.1
new file mode 100644
index 0000000..d12af00
--- /dev/null
+++ b/t/add/path/_multiple.man.fr.1
@@ -0,0 +1,12 @@
+.\"*******************************************************************
+.\"
+.\" This file was generated with po4a. Translate the source file.
+.\"
+.\"*******************************************************************
+.TH test1 1
+.SH NOM
+test \- juste un test
+
+Bonjour
+
+This content was added by the addendum.
diff --git a/t/add/path/_multiple.man.it.1 b/t/add/path/_multiple.man.it.1
new file mode 100644
index 0000000..b2cbe40
--- /dev/null
+++ b/t/add/path/_multiple.man.it.1
@@ -0,0 +1,10 @@
+.\"*******************************************************************
+.\"
+.\" This file was generated with po4a. Translate the source file.
+.\"
+.\"*******************************************************************
+.TH test1 1
+.SH NOME
+test \- solo un test
+
+Ciao
diff --git a/t/add/path/_output b/t/add/path/_output
new file mode 100644
index 0000000..dd735f8
--- /dev/null
+++ b/t/add/path/_output
@@ -0,0 +1,9 @@
+Updating multiple.pot: (4 entries)
+Updating multiple.de.po: 4 translated messages.
+Updating multiple.es.po: 4 translated messages.
+Updating multiple.fr.po: 4 translated messages.
+Updating multiple.it.po: 4 translated messages.
+multiple.man.de.1 is 100% translated (4 strings).
+multiple.man.es.1 is 100% translated (4 strings).
+multiple.man.fr.1 is 100% translated (4 strings).
+multiple.man.it.1 is 100% translated (4 strings).
diff --git a/t/add/path/add.de b/t/add/path/add.de
new file mode 100644
index 0000000..5bc9bd1
--- /dev/null
+++ b/t/add/path/add.de
@@ -0,0 +1,3 @@
+PO4A-HEADER:mode=after;position=Hallo;beginboundary=FakePo4aBoundary
+
+This content was added by the addendum.
diff --git a/t/add/path/add.fr b/t/add/path/add.fr
new file mode 100644
index 0000000..f1b6dbb
--- /dev/null
+++ b/t/add/path/add.fr
@@ -0,0 +1,3 @@
+PO4A-HEADER:mode=after;position=Bonjour;beginboundary=FakePo4aBoundary
+
+This content was added by the addendum.
diff --git a/t/add/path/multiple.de.po b/t/add/path/multiple.de.po
new file mode 100644
index 0000000..5198b30
--- /dev/null
+++ b/t/add/path/multiple.de.po
@@ -0,0 +1,39 @@
+# German translations for po package
+# Copyright (C) 2020 Free Software Foundation, Inc.
+# This file is distributed under the same license as the po package.
+# Automatically generated, 2020.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: po 4a\n"
+"POT-Creation-Date: 2020-04-13 01:07+0200\n"
+"PO-Revision-Date: 2020-04-13 01:07+0200\n"
+"Last-Translator: Automatically generated\n"
+"Language-Team: none\n"
+"Language: de\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+
+#. type: TH
+#: cfg/multiple-nopotpo/multiple.man.1:1
+#, no-wrap
+msgid "test1"
+msgstr "prüfung1"
+
+#. type: SH
+#: cfg/multiple-nopotpo/multiple.man.1:2
+#, no-wrap
+msgid "NAME"
+msgstr "NAME"
+
+#. type: Plain text
+#: cfg/multiple-nopotpo/multiple.man.1:4
+msgid "test - just a test"
+msgstr "prüfung - nur ein Prüfung"
+
+#. type: Plain text
+#: cfg/multiple-nopotpo/multiple.man.1:5
+msgid "Hello"
+msgstr "Hallo"
diff --git a/t/add/path/multiple.es.po b/t/add/path/multiple.es.po
new file mode 100644
index 0000000..19a3bcc
--- /dev/null
+++ b/t/add/path/multiple.es.po
@@ -0,0 +1,39 @@
+# Spanish translations for po package
+# Copyright (C) 2020 Free Software Foundation, Inc.
+# This file is distributed under the same license as the po package.
+# Automatically generated, 2020.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: po 4a\n"
+"POT-Creation-Date: 2020-04-13 01:08+0200\n"
+"PO-Revision-Date: 2020-04-13 01:08+0200\n"
+"Last-Translator: Automatically generated\n"
+"Language-Team: none\n"
+"Language: es\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+
+#. type: TH
+#: cfg/multiple-nopotpo/multiple.man.1:1
+#, no-wrap
+msgid "test1"
+msgstr "prueba1"
+
+#. type: SH
+#: cfg/multiple-nopotpo/multiple.man.1:2
+#, no-wrap
+msgid "NAME"
+msgstr "NOMBRE"
+
+#. type: Plain text
+#: cfg/multiple-nopotpo/multiple.man.1:4
+msgid "test - just a test"
+msgstr "prueba - solo una prueba"
+
+#. type: Plain text
+#: cfg/multiple-nopotpo/multiple.man.1:5
+msgid "Hello"
+msgstr "Hola"
diff --git a/t/add/path/multiple.fr.po b/t/add/path/multiple.fr.po
new file mode 100644
index 0000000..c1e3251
--- /dev/null
+++ b/t/add/path/multiple.fr.po
@@ -0,0 +1,39 @@
+# French translations for po package
+# Copyright (C) 2020 Free Software Foundation, Inc.
+# This file is distributed under the same license as the po package.
+# Automatically generated, 2020.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: po 4a\n"
+"POT-Creation-Date: 2005-04-24 2:54+0200\n"
+"PO-Revision-Date: 2005-04-24 2:54+0200\n"
+"Last-Translator: Automatically generated\n"
+"Language-Team: none\n"
+"Language: fr\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=2; plural=(n > 1);\n"
+
+#. type: TH
+#: t-05-config/test00_man.1:1
+#, no-wrap
+msgid "test1"
+msgstr "test1"
+
+#. type: SH
+#: t-05-config/test00_man.1:2
+#, no-wrap
+msgid "NAME"
+msgstr "NOM"
+
+#. type: Plain text
+#: t-05-config/test00_man.1:4
+msgid "test - just a test"
+msgstr "test - juste un test"
+
+#. type: Plain text
+#: t-05-config/test00_man.1:5
+msgid "Hello"
+msgstr "Bonjour"
diff --git a/t/add/path/multiple.it.po b/t/add/path/multiple.it.po
new file mode 100644
index 0000000..f45e1db
--- /dev/null
+++ b/t/add/path/multiple.it.po
@@ -0,0 +1,39 @@
+# Italian translations for po package
+# Copyright (C) 2020 Free Software Foundation, Inc.
+# This file is distributed under the same license as the po package.
+# Automatically generated, 2020.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: po 4a\n"
+"POT-Creation-Date: 2020-04-13 01:08+0200\n"
+"PO-Revision-Date: 2020-04-13 01:08+0200\n"
+"Last-Translator: Automatically generated\n"
+"Language-Team: none\n"
+"Language: it\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+
+#. type: TH
+#: cfg/multiple-nopotpo/multiple.man.1:1
+#, no-wrap
+msgid "test1"
+msgstr "test1"
+
+#. type: SH
+#: cfg/multiple-nopotpo/multiple.man.1:2
+#, no-wrap
+msgid "NAME"
+msgstr "NOME"
+
+#. type: Plain text
+#: cfg/multiple-nopotpo/multiple.man.1:4
+msgid "test - just a test"
+msgstr "test - solo un test"
+
+#. type: Plain text
+#: cfg/multiple-nopotpo/multiple.man.1:5
+msgid "Hello"
+msgstr "Ciao"
diff --git a/t/add/path/multiple.man.1 b/t/add/path/multiple.man.1
new file mode 100644
index 0000000..2178e17
--- /dev/null
+++ b/t/add/path/multiple.man.1
@@ -0,0 +1,5 @@
+.TH test1 1
+.SH NAME
+test \- just a test
+
+Hello
diff --git a/t/add/path/multiple.pot b/t/add/path/multiple.pot
new file mode 100644
index 0000000..430a879
--- /dev/null
+++ b/t/add/path/multiple.pot
@@ -0,0 +1,39 @@
+# SOME DESCRIPTIVE TITLE
+# Copyright (C) YEAR Free Software Foundation, Inc.
+# This file is distributed under the same license as the PACKAGE package.
+# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
+#
+#, fuzzy
+msgid ""
+msgstr ""
+"Project-Id-Version: PACKAGE VERSION\n"
+"POT-Creation-Date: 2020-04-06 02:01+0200\n"
+"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
+"Language-Team: LANGUAGE <LL@li.org>\n"
+"Language: \n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+
+#. type: TH
+#: cfg/single-nopotpo/single.man.1:1
+#, no-wrap
+msgid "test1"
+msgstr ""
+
+#. type: SH
+#: cfg/single-nopotpo/single.man.1:2
+#, no-wrap
+msgid "NAME"
+msgstr ""
+
+#. type: Plain text
+#: cfg/single-nopotpo/single.man.1:4
+msgid "test - just a test"
+msgstr ""
+
+#. type: Plain text
+#: cfg/single-nopotpo/single.man.1:5
+msgid "Hello"
+msgstr ""
diff --git a/t/add/path/po4a.conf b/t/add/path/po4a.conf
new file mode 100644
index 0000000..c086bb7
--- /dev/null
+++ b/t/add/path/po4a.conf
@@ -0,0 +1,5 @@
+[po4a_langs] fr de es it
+[po4a_paths] multiple.pot $lang:multiple.$lang.po add_$lang:?add.$lang
+[options] opt:"--msgmerge-opt --silent"
+
+[type:man] multiple.man.1 $lang:multiple.man.$lang.1
diff --git a/t/add/positioning/_file-after.pod.fr b/t/add/positioning/_file-after.pod.fr
new file mode 100644
index 0000000..5cb5fc3
--- /dev/null
+++ b/t/add/positioning/_file-after.pod.fr
@@ -0,0 +1,26 @@
+
+ *****************************************************
+ * GENERATED FILE, DO NOT EDIT *
+ * THIS IS NO SOURCE FILE, BUT RESULT OF COMPILATION *
+ *****************************************************
+
+This file was generated by po4a(7). Do not store it (in VCS, for example),
+but store the PO file used as source file by po4a-translate.
+
+In fact, consider this as a binary, and the PO file as a regular .c file:
+If the PO get lost, keeping this translation up-to-date will be harder.
+
+=encoding UTF-8
+
+=head1 NOM
+
+bébête - un programme bébête
+
+=head1 AUTEUR
+
+moi
+
+=head1 TRADUCTEUR
+
+moi
+ \ No newline at end of file
diff --git a/t/add/positioning/_file-before.pod.fr b/t/add/positioning/_file-before.pod.fr
new file mode 100644
index 0000000..2e208f5
--- /dev/null
+++ b/t/add/positioning/_file-before.pod.fr
@@ -0,0 +1,26 @@
+
+ *****************************************************
+ * GENERATED FILE, DO NOT EDIT *
+ * THIS IS NO SOURCE FILE, BUT RESULT OF COMPILATION *
+ *****************************************************
+
+This file was generated by po4a(7). Do not store it (in VCS, for example),
+but store the PO file used as source file by po4a-translate.
+
+In fact, consider this as a binary, and the PO file as a regular .c file:
+If the PO get lost, keeping this translation up-to-date will be harder.
+
+=encoding UTF-8
+
+=head1 NOM
+
+bébête - un programme bébête
+
+=head1 TRADUCTEUR
+
+moi
+
+=head1 AUTEUR
+
+moi
+
diff --git a/t/add/positioning/_file-eof.pod.fr b/t/add/positioning/_file-eof.pod.fr
new file mode 100644
index 0000000..163ae1d
--- /dev/null
+++ b/t/add/positioning/_file-eof.pod.fr
@@ -0,0 +1,26 @@
+
+ *****************************************************
+ * GENERATED FILE, DO NOT EDIT *
+ * THIS IS NO SOURCE FILE, BUT RESULT OF COMPILATION *
+ *****************************************************
+
+This file was generated by po4a(7). Do not store it (in VCS, for example),
+but store the PO file used as source file by po4a-translate.
+
+In fact, consider this as a binary, and the PO file as a regular .c file:
+If the PO get lost, keeping this translation up-to-date will be harder.
+
+=encoding UTF-8
+
+=head1 NOM
+
+bébête - un programme bébête
+
+=head1 AUTEUR
+
+moi
+
+=head1 TRADUCTEUR2
+
+me again
+ \ No newline at end of file
diff --git a/t/add/positioning/_file-eofmode.pod.fr b/t/add/positioning/_file-eofmode.pod.fr
new file mode 100644
index 0000000..163ae1d
--- /dev/null
+++ b/t/add/positioning/_file-eofmode.pod.fr
@@ -0,0 +1,26 @@
+
+ *****************************************************
+ * GENERATED FILE, DO NOT EDIT *
+ * THIS IS NO SOURCE FILE, BUT RESULT OF COMPILATION *
+ *****************************************************
+
+This file was generated by po4a(7). Do not store it (in VCS, for example),
+but store the PO file used as source file by po4a-translate.
+
+In fact, consider this as a binary, and the PO file as a regular .c file:
+If the PO get lost, keeping this translation up-to-date will be harder.
+
+=encoding UTF-8
+
+=head1 NOM
+
+bébête - un programme bébête
+
+=head1 AUTEUR
+
+moi
+
+=head1 TRADUCTEUR2
+
+me again
+ \ No newline at end of file
diff --git a/t/add/positioning/_output b/t/add/positioning/_output
new file mode 100644
index 0000000..669e6a0
--- /dev/null
+++ b/t/add/positioning/_output
@@ -0,0 +1,6 @@
+Updating positioning.pot: (4 entries)
+Updating fr.po: 4 translated messages.
+file-before.pod.fr is 100% translated (4 strings).
+file-after.pod.fr is 100% translated (4 strings).
+file-eof.pod.fr is 100% translated (4 strings).
+file-eofmode.pod.fr is 100% translated (4 strings).
diff --git a/t/add/positioning/add-after.fr b/t/add/positioning/add-after.fr
new file mode 100644
index 0000000..328ee1d
--- /dev/null
+++ b/t/add/positioning/add-after.fr
@@ -0,0 +1,5 @@
+PO4A-HEADER:mode=after;position=AUTEUR;beginboundary=^=head
+=head1 TRADUCTEUR
+
+moi
+ \ No newline at end of file
diff --git a/t/add/positioning/add-before.fr b/t/add/positioning/add-before.fr
new file mode 100644
index 0000000..e08ed03
--- /dev/null
+++ b/t/add/positioning/add-before.fr
@@ -0,0 +1,5 @@
+PO4A-HEADER:mode=before;position=AUTEUR;beginboundary=^=head
+=head1 TRADUCTEUR
+
+moi
+
diff --git a/t/add/positioning/add-eof.fr b/t/add/positioning/add-eof.fr
new file mode 100644
index 0000000..e6f7b2b
--- /dev/null
+++ b/t/add/positioning/add-eof.fr
@@ -0,0 +1,5 @@
+PO4A-HEADER:mode=after;position=AUTEUR;beginboundary=AStringThatDoesNotExistInTheDoc
+=head1 TRADUCTEUR2
+
+me again
+ \ No newline at end of file
diff --git a/t/add/positioning/add-eofmode.fr b/t/add/positioning/add-eofmode.fr
new file mode 100644
index 0000000..4ae2d13
--- /dev/null
+++ b/t/add/positioning/add-eofmode.fr
@@ -0,0 +1,5 @@
+PO4A-HEADER:mode=eof
+=head1 TRADUCTEUR2
+
+me again
+ \ No newline at end of file
diff --git a/t/add/positioning/fr.po b/t/add/positioning/fr.po
new file mode 100644
index 0000000..fc41440
--- /dev/null
+++ b/t/add/positioning/fr.po
@@ -0,0 +1,37 @@
+# SOME DESCRIPTIVE TITLE
+# Copyright (C) YEAR Free Software Foundation, Inc.
+# This file is distributed under the same license as the PACKAGE package.
+# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
+#
+#, fuzzy
+msgid ""
+msgstr ""
+"Project-Id-Version: PACKAGE VERSION\n"
+"POT-Creation-Date: 2020-04-05 23:34+0200\n"
+"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
+"Language-Team: LANGUAGE <LL@li.org>\n"
+"Language: \n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+
+#. type: =head1
+#: add/positioning/input.pod:1
+msgid "NAME"
+msgstr "NOM"
+
+#. type: textblock
+#: add/positioning/input.pod:3
+msgid "dummy - a dummy program"
+msgstr "bébête - un programme bébête"
+
+#. type: =head1
+#: add/positioning/input.pod:5
+msgid "AUTHOR"
+msgstr "AUTEUR"
+
+#. type: textblock
+#: add/positioning/input.pod:7
+msgid "me"
+msgstr "moi"
diff --git a/t/add/positioning/input1.pod b/t/add/positioning/input1.pod
new file mode 100644
index 0000000..e8ff67a
--- /dev/null
+++ b/t/add/positioning/input1.pod
@@ -0,0 +1,7 @@
+=head1 NAME
+
+dummy - a dummy program
+
+=head1 AUTHOR
+
+me
diff --git a/t/add/positioning/input2.pod b/t/add/positioning/input2.pod
new file mode 100644
index 0000000..e8ff67a
--- /dev/null
+++ b/t/add/positioning/input2.pod
@@ -0,0 +1,7 @@
+=head1 NAME
+
+dummy - a dummy program
+
+=head1 AUTHOR
+
+me
diff --git a/t/add/positioning/input3.pod b/t/add/positioning/input3.pod
new file mode 100644
index 0000000..e8ff67a
--- /dev/null
+++ b/t/add/positioning/input3.pod
@@ -0,0 +1,7 @@
+=head1 NAME
+
+dummy - a dummy program
+
+=head1 AUTHOR
+
+me
diff --git a/t/add/positioning/input4.pod b/t/add/positioning/input4.pod
new file mode 100644
index 0000000..e8ff67a
--- /dev/null
+++ b/t/add/positioning/input4.pod
@@ -0,0 +1,7 @@
+=head1 NAME
+
+dummy - a dummy program
+
+=head1 AUTHOR
+
+me
diff --git a/t/add/positioning/positioning.conf b/t/add/positioning/positioning.conf
new file mode 100644
index 0000000..6936640
--- /dev/null
+++ b/t/add/positioning/positioning.conf
@@ -0,0 +1,9 @@
+[po4a_langs] fr
+
+[po4a_paths] positioning.pot $lang:$lang.po
+[options] opt:"--msgmerge-opt --silent"
+
+[type:pod] input1.pod fr:file-before.pod.fr add_fr:add-before.fr
+[type:pod] input2.pod fr:file-after.pod.fr add_fr:add-after.fr
+[type:pod] input3.pod fr:file-eof.pod.fr add_fr:add-eof.fr
+[type:pod] input4.pod fr:file-eofmode.pod.fr add_fr:add-eofmode.fr
diff --git a/t/add/positioning/positioning.pot b/t/add/positioning/positioning.pot
new file mode 100644
index 0000000..76a0c71
--- /dev/null
+++ b/t/add/positioning/positioning.pot
@@ -0,0 +1,37 @@
+# SOME DESCRIPTIVE TITLE
+# Copyright (C) YEAR Free Software Foundation, Inc.
+# This file is distributed under the same license as the PACKAGE package.
+# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
+#
+#, fuzzy
+msgid ""
+msgstr ""
+"Project-Id-Version: PACKAGE VERSION\n"
+"POT-Creation-Date: 2020-04-05 23:34+0200\n"
+"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
+"Language-Team: LANGUAGE <LL@li.org>\n"
+"Language: \n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+
+#. type: =head1
+#: add/positioning/input.pod:1
+msgid "NAME"
+msgstr ""
+
+#. type: textblock
+#: add/positioning/input.pod:3
+msgid "dummy - a dummy program"
+msgstr ""
+
+#. type: =head1
+#: add/positioning/input.pod:5
+msgid "AUTHOR"
+msgstr ""
+
+#. type: textblock
+#: add/positioning/input.pod:7
+msgid "me"
+msgstr ""
diff --git a/t/cfg-args.t b/t/cfg-args.t
new file mode 100644
index 0000000..aad779d
--- /dev/null
+++ b/t/cfg-args.t
@@ -0,0 +1,87 @@
+#! /usr/bin/perl
+# config file tester.
+
+#########################
+
+use strict;
+use warnings;
+
+use lib q(t);
+use Testhelper;
+
+# TODO: alias option overriding generic option
+# TODO: file-specific overriding alias option
+
+my @tests;
+push @tests, {
+ 'doc' => '-k 20 in global options',
+ 'po4a.conf' => 'cfg/args-global/po4a.conf',
+ 'modes' => 'dstdir', # no need to test every mode
+ 'options' => '--no-update', # no need for the produced po files
+ 'expected_files' => 'man.de.1 man.es.1 man.fr.1 man.it.1'
+
+ },
+ {
+ 'doc' => '-k 100 on command line >> -k 20 in global options',
+ 'po4a.conf' => 'cfg/args-global/po4a.conf',
+ 'modes' => 'dstdir',
+ 'options' => '--no-update --keep 100',
+ 'expected_outfile' => '_output-keep100',
+ 'expected_files' => 'man.it.1'
+
+ },
+ {
+ 'doc' => '-k 0 in type alias',
+ 'po4a.conf' => 'cfg/args-alias/po4a.conf',
+ 'modes' => 'dstdir',
+ 'options' => '--no-update',
+ 'expected_files' => 'man.de.1 man.fr.1 man.fr.2 man.it.1 man.it.2'
+ },
+ {
+ 'doc' => '-k 100 on command line >> -k 0 in type alias',
+ 'po4a.conf' => 'cfg/args-alias/po4a.conf',
+ 'modes' => 'dstdir',
+ 'options' => '--no-update --keep 100',
+ 'expected_outfile' => '_output-keep100',
+ 'expected_files' => 'man.it.1 man.it.2'
+
+ },
+ {
+ 'doc' => '-k 0 in type alias, but with a redefinition of the same alias',
+ 'po4a.conf' => 'cfg/args-alias-redef/po4a.conf',
+ 'modes' => 'dstdir',
+ 'options' => '--no-update',
+ 'expected_files' => 'man.de.1 man.fr.1 man.it.1'
+ },
+ {
+ 'doc' => '-k 40 in master doc',
+ 'po4a.conf' => 'cfg/args-master/po4a.conf',
+ 'modes' => 'dstdir',
+ 'options' => '--no-update',
+ 'expected_files' => 'man.fr.1 man.it.1'
+ },
+ {
+ 'doc' => '-k 100 on command line >> -k 40 in master doc',
+ 'po4a.conf' => 'cfg/args-master/po4a.conf',
+ 'modes' => 'dstdir',
+ 'options' => '--no-update --keep 100',
+ 'expected_outfile' => '_output-keep100',
+ 'expected_files' => 'man.it.1'
+ },
+ {
+ 'doc' => 'spaces in the directory and file names',
+ 'po4a.conf' => 'cfg/space_in_name/po4a.conf',
+ 'closed_path' => 'cfg/*/',
+ 'expected_files' => 'some\ directory space\ in\ name.fr.po space\ in\ name.pot',
+ },
+ {
+ 'doc' => 'Just like single-uptodate, but with the config file in DOS encoding',
+ 'po4a.conf' => 'cfg/windows-CRLF/windows-CRLF.conf',
+ 'closed_path' => 'cfg/*/',
+ 'expected_files' => 'single-uptodate.fr.po single-uptodate.pot single-uptodate.man.fr.1',
+
+ };
+
+run_all_tests(@tests);
+
+0;
diff --git a/t/cfg-multi.t b/t/cfg-multi.t
new file mode 100644
index 0000000..80fbb56
--- /dev/null
+++ b/t/cfg-multi.t
@@ -0,0 +1,107 @@
+#! /usr/bin/perl
+# config file tester.
+
+#########################
+
+use strict;
+use warnings;
+
+use lib q(t);
+use Testhelper;
+
+my @tests;
+push @tests, {
+ 'doc' => 'Multiple languages, no pot no po',
+ 'po4a.conf' => 'cfg/multiple-nopotpo/po4a.conf',
+ 'closed_path' => 'cfg/*/', # Do not use or modify the other tests
+ 'expected_files' => 'multiple.de.po multiple.es.po multiple.fr.po multiple.it.po multiple.pot',
+ },
+ {
+ 'doc' => 'Multiple languages, no po',
+ 'po4a.conf' => 'cfg/multiple-nopo/po4a.conf',
+ 'closed_path' => 'cfg/*/',
+ 'expected_files' => 'multiple.de.po multiple.es.po multiple.fr.po multiple.it.po multiple.pot',
+
+ },
+ {
+ 'doc' => 'Multiple languages, no po, --no-update',
+ 'po4a.conf' => 'cfg/multiple-nopo/po4a.conf',
+ 'options' => ' --no-update',
+ 'closed_path' => 'cfg/*/',
+ 'expected_outfile' => 'cfg/multiple-nopo/_output-noupdate',
+ 'expected_files' => '',
+
+ },
+ {
+ 'doc' => 'Multiple languages, with translation to create',
+ 'po4a.conf' => 'cfg/multiple/po4a.conf',
+ 'closed_path' => 'cfg/*/',
+ 'expected_files' => 'multiple.de.po multiple.es.po multiple.fr.po multiple.it.po '
+ . 'multiple.man.de.1 multiple.man.es.1 multiple.man.fr.1 multiple.man.it.1 multiple.pot',
+
+ },
+ {
+ 'doc' => 'Multiple languages, translation uptodate',
+ 'po4a.conf' => 'cfg/multiple-uptodate/po4a.conf',
+ 'closed_path' => 'cfg/*/',
+ 'expected_files' => 'multiple.de.po multiple.es.po multiple.fr.po multiple.it.po '
+ . 'multiple.man.de.1 multiple.man.es.1 multiple.man.fr.1 multiple.man.it.1 multiple.pot',
+
+ },
+ {
+ 'doc' => 'Multiple languages, translation uptodate, translate only one language',
+ 'po4a.conf' => 'cfg/multiple-uptodate/po4a.conf',
+ 'options' => ' --translate-only multiple.man.de.1',
+ 'closed_path' => 'cfg/*/',
+ 'expected_outfile' => 'cfg/multiple-uptodate/_output-only-one',
+ 'expected_files' => 'multiple.man.de.1',
+ },
+ {
+ 'doc' => 'Multiple languages, translation uptodate, translate only two languages',
+ 'po4a.conf' => 'cfg/multiple-uptodate/po4a.conf',
+ 'options' => ' --translate-only multiple.man.de.1 --translate-only multiple.man.es.1',
+ 'closed_path' => 'cfg/*/',
+ 'expected_outfile' => 'cfg/multiple-uptodate/_output-only-two',
+ 'expected_files' => 'multiple.man.de.1 multiple.man.es.1',
+ },
+ {
+ 'doc' => 'Multiple languages, translation already fuzzy',
+ 'po4a.conf' => 'cfg/multiple-fuzzy/po4a.conf',
+ 'closed_path' => 'cfg/*/',
+ 'expected_files' => 'multiple.de.po multiple.es.po multiple.fr.po multiple.it.po multiple.pot',
+
+ },
+ {
+ 'doc' => 'Multiple languages, translation fuzzied during the update',
+ 'po4a.conf' => 'cfg/multiple-fuzzied/po4a.conf',
+ 'closed_path' => 'cfg/*/',
+ 'expected_files' => 'multiple.de.po multiple.es.po multiple.fr.po multiple.it.po multiple.pot',
+
+ },
+ {
+ 'doc' => 'Multiple languages, translation would be fuzzied if --no-update were not given',
+ 'po4a.conf' => 'cfg/multiple-fuzzied-noup/po4a.conf',
+ 'options' => '--no-update',
+ 'closed_path' => 'cfg/*/',
+ 'expected_files' => '',
+
+ },
+ {
+ 'doc' => 'Multiple languages, with a new string appearing in the master doc',
+ 'po4a.conf' => 'cfg/multiple-newstr/po4a.conf',
+ 'closed_path' => 'cfg/*/',
+ 'expected_files' => 'multiple.de.po multiple.es.po multiple.fr.po multiple.it.po '
+ . 'multiple.man.de.1 multiple.man.es.1 multiple.man.fr.1 multiple.man.it.1 multiple.pot',
+
+ },
+ {
+ 'doc' => 'Multiple languages, with a separate pot_in file',
+ 'po4a.conf' => 'cfg/multiple-potin/po4a.conf',
+ 'closed_path' => 'cfg/*/',
+ 'expected_files' => 'multiple.de.po multiple.es.po multiple.fr.po multiple.it.po '
+ . 'multiple.man.de.1 multiple.man.es.1 multiple.man.fr.1 multiple.man.it.1 multiple.pot',
+ };
+
+run_all_tests(@tests);
+
+0;
diff --git a/t/cfg-option.t b/t/cfg-option.t
new file mode 100644
index 0000000..23d7413
--- /dev/null
+++ b/t/cfg-option.t
@@ -0,0 +1,23 @@
+#! /usr/bin/perl
+# config file tester.
+
+#########################
+
+use strict;
+use warnings;
+
+use lib q(t);
+use Testhelper;
+
+my @tests;
+push @tests,
+ {
+ 'doc' => 'space in option value',
+ 'po4a.conf' => 'cfg/space-in-option-value/po4a.conf',
+ 'modes' => 'dstdir',
+ 'expected_files' => 'man.pot man.ja.po man.ja.1'
+ };
+
+run_all_tests(@tests);
+
+0;
diff --git a/t/cfg-single.t b/t/cfg-single.t
new file mode 100644
index 0000000..8ff5f1c
--- /dev/null
+++ b/t/cfg-single.t
@@ -0,0 +1,133 @@
+#! /usr/bin/perl
+# config file tester.
+
+#########################
+
+use strict;
+use warnings;
+
+use lib q(t);
+use Testhelper;
+
+my @tests;
+push @tests, {
+ 'doc' => 'Single language, no pot no po',
+ 'po4a.conf' => 'cfg/single-nopotpo/po4a.conf',
+ 'closed_path' => 'cfg/*/', # Do not use or modify the other tests
+ 'expected_files' => 'single.fr.po single.pot',
+ },
+ {
+ 'doc' => 'Single language, no po',
+ 'po4a.conf' => 'cfg/single-nopo/po4a.conf',
+ 'closed_path' => 'cfg/*/',
+ 'expected_files' => 'single.fr.po single.pot',
+ },
+ {
+ 'doc' => 'Single language, no po, --no-update',
+ 'po4a.conf' => 'cfg/single-nopo/po4a.conf',
+ 'options' => ' --no-update',
+ 'closed_path' => 'cfg/*/',
+ 'expected_outfile' => 'cfg/single-nopo/_output-noupdate',
+ 'expected_files' => '',
+
+ },
+ {
+ 'doc' => 'Single language, with translation to create',
+ 'po4a.conf' => 'cfg/single/single.conf',
+ 'closed_path' => 'cfg/*/',
+ 'expected_files' => 'single.fr.po single.pot single.man.fr.1',
+
+ },
+ {
+ 'doc' => 'Single language, translation uptodate',
+ 'po4a.conf' => 'cfg/single-uptodate/single-uptodate.conf',
+ 'closed_path' => 'cfg/*/',
+ 'expected_files' => 'single-uptodate.fr.po single-uptodate.pot single-uptodate.man.fr.1',
+
+ },
+ {
+ 'doc' => 'Single language, translation already fuzzy',
+ 'po4a.conf' => 'cfg/single-fuzzy/po4a.conf',
+ 'closed_path' => 'cfg/*/',
+ 'expected_files' => 'single-fuzzy.fr.po single-fuzzy.pot',
+
+ },
+ {
+ 'doc' => 'Single language, translation fuzzied during the update',
+ 'po4a.conf' => 'cfg/single-fuzzied/po4a.conf',
+ 'closed_path' => 'cfg/*/',
+ 'expected_files' => 'single-fuzzied.fr.po single-fuzzied.pot',
+
+ },
+ {
+ 'doc' => 'Single language, translation would be fuzzied if --no-update were not given',
+ 'po4a.conf' => 'cfg/single-fuzzied-noup/po4a.conf',
+ 'options' => '--no-update',
+ 'closed_path' => 'cfg/*/',
+ 'expected_files' => '',
+
+ },
+ {
+ 'doc' => 'Single language, with a new string appearing in the master doc',
+ 'po4a.conf' => 'cfg/single-newstr/po4a.conf',
+ 'closed_path' => 'cfg/*/',
+ 'expected_files' => 'single-newstr.fr.po single-newstr.pot single-newstr.man.fr.1',
+ },
+ {
+ 'doc' => 'Single language, with a validation error reported by msgfmt',
+ 'po4a.conf' => 'cfg/single-invalid/po4a.conf',
+ 'closed_path' => 'cfg/*/',
+ 'expected_retcode' => 256,
+ 'expected_files' => 'single.fr.po single.pot',
+ },
+ {
+ 'doc' => 'Single language, with a separate pot_in file',
+ 'po4a.conf' => 'cfg/single-potin/po4a.conf',
+ 'closed_path' => 'cfg/*/',
+ 'expected_files' => 'single.man.fr.1 single.fr.po single.pot',
+ },
+ {
+ 'doc' => 'Single language, using po_directory in the config file',
+ 'po4a.conf' => 'cfg/single-podirectory/po4a.conf',
+ 'closed_path' => 'cfg/*/',
+ 'expected_files' => 'po single.man.fr.1',
+ 'tests' => [
+ 'PODIFF -I#: $path/po/fr.po $tmppath/po/fr.po', #
+ 'PODIFF -I#: $path/po/single.pot $tmppath/po/single.pot'
+ ]
+ },
+ {
+ 'doc' => 'Single language, using po_directory in the config file, empty POT, no PO',
+ 'po4a.conf' => 'cfg/single-podirectory-emptypot-emptypo/po4a.conf',
+ 'closed_path' => 'cfg/*/',
+ 'expected_files' => 'fr.po single.pot',
+ 'tests' => [
+ 'PODIFF -I#: $path/_fr.po.expected $tmppath/fr.po', #
+ 'PODIFF -I#: $path/_single.pot.expected $tmppath/single.pot',
+ 'rm $tmppath/single.pot && touch $tmppath/single.pot', # This file is empty on purpose
+ 'rm $tmppath/fr.po && touch $tmppath/fr.po', # This file is empty on purpose
+ ]
+
+ },
+ {
+ 'doc' => 'Single language, using po_directory in the config file, empty POT file',
+ 'po4a.conf' => 'cfg/single-podirectory-emptypot/po4a.conf',
+ 'closed_path' => 'cfg/*/',
+ 'expected_files' => 'po single.man.fr.1',
+ 'tests' => [
+ 'PODIFF -I#: $path/po/fr.po $tmppath/po/fr.po', #
+ 'PODIFF -I#: $path/_single.pot $tmppath/po/single.pot',
+ 'rm $tmppath/po/single.pot && touch $tmppath/po/single.pot'
+ , # The $path/po/single.pot exists, but it's empty (on purpose)
+ ]
+ },
+ {
+ 'doc' => 'Single language, empty PO file and UTF in msgids (see Debian\'s #1022216)',
+ 'po4a.conf' => 'cfg/single-emptypo/po4a.conf',
+ 'closed_path' => 'cfg/*/',
+ 'expected_files' => 'fr.po single.pot single.man.fr.1',
+ };
+
+run_all_tests(@tests);
+
+0;
diff --git a/t/cfg-split.t b/t/cfg-split.t
new file mode 100644
index 0000000..a3be132
--- /dev/null
+++ b/t/cfg-split.t
@@ -0,0 +1,108 @@
+#! /usr/bin/perl
+# config file tester.
+
+#########################
+
+use strict;
+use warnings;
+
+use lib q(t);
+use Testhelper;
+
+my @tests;
+push @tests, {
+ 'doc' => 'Split settings, no pot no po',
+ 'po4a.conf' => 'cfg/split-nopotpo/po4a.conf',
+ 'closed_path' => 'cfg/*/', # Do not use or modify the other tests
+ 'expected_files' =>
+ 'first.man.de.po first.man.fr.po first.man.pot second.man.de.po second.man.fr.po second.man.pot',
+ },
+ {
+ 'doc' => 'Split settings, no po',
+ 'po4a.conf' => 'cfg/split-nopo/po4a.conf',
+ 'closed_path' => 'cfg/*/',
+ 'expected_files' =>
+ 'first.man.de.po first.man.fr.po first.man.pot second.man.de.po second.man.fr.po second.man.pot',
+
+ },
+ {
+ 'doc' => 'Split settings, no po, --no-update',
+ 'po4a.conf' => 'cfg/split-nopo/po4a.conf',
+ 'options' => ' --no-update',
+ 'closed_path' => 'cfg/*/',
+ 'expected_outfile' => 'cfg/split-nopo/_output-noupdate',
+ 'expected_files' => '',
+
+ },
+ {
+ 'doc' => 'Split settings, with translation to create',
+ 'po4a.conf' => 'cfg/split/po4a.conf',
+ 'closed_path' => 'cfg/*/',
+ 'expected_files' => 'first.man.de first.man.de.po first.man.fr first.man.fr.po first.man.pot '
+ . 'second.man.de second.man.de.po second.man.fr second.man.fr.po second.man.pot',
+
+ },
+ {
+ 'doc' => 'Split settings, grouping several files into a given POT file',
+ 'po4a.conf' => 'cfg/split-multimaster/po4a.conf',
+ 'closed_path' => 'cfg/*/',
+ 'expected_files' => 'first.man.de first.man.fr third.man.de third.man.fr '
+ . 'Documentation.pot Documentation.de.po Documentation.fr.po '
+ . 'second.man.de second.man.de.po second.man.fr second.man.fr.po second.man.pot',
+ },
+ {
+ 'doc' => 'Split settings, translation uptodate',
+ 'po4a.conf' => 'cfg/split-uptodate/po4a.conf',
+ 'closed_path' => 'cfg/*/',
+ 'expected_files' => 'first.man.de first.man.de.po first.man.fr first.man.fr.po first.man.pot '
+ . 'second.man.de second.man.de.po second.man.fr second.man.fr.po second.man.pot',
+
+ },
+ {
+ 'doc' => 'Split settings, translation already fuzzy',
+ 'po4a.conf' => 'cfg/split-fuzzy/po4a.conf',
+ 'closed_path' => 'cfg/*/',
+ 'expected_files' => 'first.man.de first.man.de.po first.man.fr first.man.fr.po first.man.pot '
+ . 'second.man.de second.man.de.po second.man.fr second.man.fr.po second.man.pot',
+
+ },
+ {
+ 'doc' => 'Split settings, translation fuzzied during the update',
+ 'po4a.conf' => 'cfg/split-fuzzied/po4a.conf',
+ 'closed_path' => 'cfg/*/',
+ 'expected_files' => 'first.man.de first.man.de.po first.man.fr first.man.fr.po first.man.pot '
+ . 'second.man.de second.man.de.po second.man.fr second.man.fr.po second.man.pot',
+
+ },
+ {
+ 'doc' => 'Split settings, translation would be fuzzied if --no-update were not given',
+ 'po4a.conf' => 'cfg/split-fuzzied-noup/po4a.conf',
+ 'options' => '--no-update',
+ 'closed_path' => 'cfg/*/',
+ 'expected_files' => 'first.man.de first.man.fr second.man.de second.man.fr',
+
+ },
+ {
+ 'doc' => 'Split settings, with a new string appearing in the master doc',
+ 'po4a.conf' => 'cfg/split-newstr/po4a.conf',
+ 'closed_path' => 'cfg/*/',
+ 'expected_files' => 'first.man.de first.man.de.po first.man.fr first.man.fr.po first.man.pot '
+ . 'second.man.de second.man.de.po second.man.fr second.man.fr.po second.man.pot',
+ },
+ {
+ 'doc' => 'Split settings, with a separate pot_in file',
+ 'po4a.conf' => 'cfg/split-potin/po4a.conf',
+ 'closed_path' => 'cfg/*/',
+ 'expected_files' => 'first.man.de first.man.de.po first.man.fr first.man.fr.po first.man.pot '
+ . 'second.man.de second.man.de.po second.man.fr second.man.fr.po second.man.pot',
+ },
+ {
+ 'doc' => 'Split settings, with an YAML master doc, translation uptodate',
+ 'po4a.conf' => 'cfg/split-yaml/po4a.cfg',
+ 'closed_path' => 'cfg/*/',
+ 'expected_files' => 'content.pot content.vi.po _index.vi.md i18n.pot i18n.vi.po vi.yaml'
+ };
+
+run_all_tests(@tests);
+
+0;
diff --git a/t/cfg/args-alias-redef/_man.de.1 b/t/cfg/args-alias-redef/_man.de.1
new file mode 100644
index 0000000..f7abf19
--- /dev/null
+++ b/t/cfg/args-alias-redef/_man.de.1
@@ -0,0 +1,12 @@
+.\"*******************************************************************
+.\"
+.\" This file was generated with po4a. Translate the source file.
+.\"
+.\"*******************************************************************
+.TH test1 1
+.SH NAME
+test \- just a test
+
+Hallo
+
+World
diff --git a/t/cfg/args-alias-redef/_man.es.1 b/t/cfg/args-alias-redef/_man.es.1
new file mode 100644
index 0000000..658c6f6
--- /dev/null
+++ b/t/cfg/args-alias-redef/_man.es.1
@@ -0,0 +1,12 @@
+.\"*******************************************************************
+.\"
+.\" This file was generated with po4a. Translate the source file.
+.\"
+.\"*******************************************************************
+.TH test1 1
+.SH NAME
+test \- apenas una prueba
+
+Hola
+
+Mundo
diff --git a/t/cfg/args-alias-redef/_man.fr.1 b/t/cfg/args-alias-redef/_man.fr.1
new file mode 100644
index 0000000..7c16cd5
--- /dev/null
+++ b/t/cfg/args-alias-redef/_man.fr.1
@@ -0,0 +1,12 @@
+.\"*******************************************************************
+.\"
+.\" This file was generated with po4a. Translate the source file.
+.\"
+.\"*******************************************************************
+.TH test1 1
+.SH NAME
+test \- juste un test
+
+Bonjour
+
+Monde
diff --git a/t/cfg/args-alias-redef/_man.it.1 b/t/cfg/args-alias-redef/_man.it.1
new file mode 100644
index 0000000..1845fd7
--- /dev/null
+++ b/t/cfg/args-alias-redef/_man.it.1
@@ -0,0 +1,12 @@
+.\"*******************************************************************
+.\"
+.\" This file was generated with po4a. Translate the source file.
+.\"
+.\"*******************************************************************
+.TH test1 1
+.SH NOME
+test \- appena una prova
+
+Ciao
+
+Mondo
diff --git a/t/cfg/args-alias-redef/_output b/t/cfg/args-alias-redef/_output
new file mode 100644
index 0000000..b6bfe99
--- /dev/null
+++ b/t/cfg/args-alias-redef/_output
@@ -0,0 +1,6 @@
+NOT creating args.pot as requested (--no-update).
+NOT updating the POT file args.pot as requested (--no-update).
+man.de.1 is 20% translated (1 of 5 strings).
+Discard man.es.1 (3 of 5 strings; only 60% translated; need 70%).
+man.fr.1 is 80% translated (4 of 5 strings).
+man.it.1 is 100% translated (5 strings).
diff --git a/t/cfg/args-alias-redef/args.de.po b/t/cfg/args-alias-redef/args.de.po
new file mode 100644
index 0000000..f9e9a1b
--- /dev/null
+++ b/t/cfg/args-alias-redef/args.de.po
@@ -0,0 +1,43 @@
+# SOME DESCRIPTIVE TITLE
+# Copyright (C) YEAR Free Software Foundation, Inc.
+# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
+#
+#, fuzzy
+msgid ""
+msgstr ""
+"Project-Id-Version: PACKAGE VERSION\n"
+"POT-Creation-Date: 2005-04-24 0:48+0200\n"
+"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
+"Language-Team: LANGUAGE <LL@li.org>\n"
+"Language: de\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+
+#. type: TH
+#: t-05-config/test2_man.1:1
+#, no-wrap
+msgid "test1"
+msgstr ""
+
+#. type: SH
+#: t-05-config/test2_man.1:2
+#, no-wrap
+msgid "NAME"
+msgstr ""
+
+#. type: Plain text
+#: t-05-config/test2_man.1:4
+msgid "test - just a test"
+msgstr ""
+
+#. type: Plain text
+#: t-05-config/test2_man.1:6
+msgid "Hello"
+msgstr "Hallo"
+
+#. type: Plain text
+#: t-05-config/test2_man.1:7
+msgid "World"
+msgstr ""
diff --git a/t/cfg/args-alias-redef/args.es.po b/t/cfg/args-alias-redef/args.es.po
new file mode 100644
index 0000000..8a75616
--- /dev/null
+++ b/t/cfg/args-alias-redef/args.es.po
@@ -0,0 +1,43 @@
+# SOME DESCRIPTIVE TITLE
+# Copyright (C) YEAR Free Software Foundation, Inc.
+# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
+#
+#, fuzzy
+msgid ""
+msgstr ""
+"Project-Id-Version: PACKAGE VERSION\n"
+"POT-Creation-Date: 2005-04-24 0:48+0200\n"
+"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
+"Language-Team: LANGUAGE <LL@li.org>\n"
+"Language: es\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: ENCODING\n"
+
+#. type: TH
+#: t-05-config/test2_man.1:1
+#, no-wrap
+msgid "test1"
+msgstr ""
+
+#. type: SH
+#: t-05-config/test2_man.1:2
+#, no-wrap
+msgid "NAME"
+msgstr ""
+
+#. type: Plain text
+#: t-05-config/test2_man.1:4
+msgid "test - just a test"
+msgstr "test - apenas una prueba"
+
+#. type: Plain text
+#: t-05-config/test2_man.1:6
+msgid "Hello"
+msgstr "Hola"
+
+#. type: Plain text
+#: t-05-config/test2_man.1:7
+msgid "World"
+msgstr "Mundo"
diff --git a/t/cfg/args-alias-redef/args.fr.po b/t/cfg/args-alias-redef/args.fr.po
new file mode 100644
index 0000000..d690c75
--- /dev/null
+++ b/t/cfg/args-alias-redef/args.fr.po
@@ -0,0 +1,43 @@
+# SOME DESCRIPTIVE TITLE
+# Copyright (C) YEAR Free Software Foundation, Inc.
+# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
+#
+#, fuzzy
+msgid ""
+msgstr ""
+"Project-Id-Version: po 4a\n"
+"POT-Creation-Date: 2005-04-24 0:48+0200\n"
+"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
+"Language-Team: LANGUAGE <LL@li.org>\n"
+"Language: fr\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+
+#. type: TH
+#: t-05-config/test2_man.1:1
+#, no-wrap
+msgid "test1"
+msgstr "test1"
+
+#. type: SH
+#: t-05-config/test2_man.1:2
+#, no-wrap
+msgid "NAME"
+msgstr ""
+
+#. type: Plain text
+#: t-05-config/test2_man.1:4
+msgid "test - just a test"
+msgstr "test - juste un test"
+
+#. type: Plain text
+#: t-05-config/test2_man.1:6
+msgid "Hello"
+msgstr "Bonjour"
+
+#. type: Plain text
+#: t-05-config/test2_man.1:7
+msgid "World"
+msgstr "Monde"
diff --git a/t/cfg/args-alias-redef/args.it.po b/t/cfg/args-alias-redef/args.it.po
new file mode 100644
index 0000000..e046d74
--- /dev/null
+++ b/t/cfg/args-alias-redef/args.it.po
@@ -0,0 +1,43 @@
+# SOME DESCRIPTIVE TITLE
+# Copyright (C) YEAR Free Software Foundation, Inc.
+# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
+#
+#, fuzzy
+msgid ""
+msgstr ""
+"Project-Id-Version: PACKAGE VERSION\n"
+"POT-Creation-Date: 2005-04-24 0:48+0200\n"
+"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
+"Language-Team: LANGUAGE <LL@li.org>\n"
+"Language: it\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+
+#. type: TH
+#: t-05-config/test2_man.1:1
+#, no-wrap
+msgid "test1"
+msgstr "test1"
+
+#. type: SH
+#: t-05-config/test2_man.1:2
+#, no-wrap
+msgid "NAME"
+msgstr "NOME"
+
+#. type: Plain text
+#: t-05-config/test2_man.1:4
+msgid "test - just a test"
+msgstr "test - appena una prova"
+
+#. type: Plain text
+#: t-05-config/test2_man.1:6
+msgid "Hello"
+msgstr "Ciao"
+
+#. type: Plain text
+#: t-05-config/test2_man.1:7
+msgid "World"
+msgstr "Mondo"
diff --git a/t/cfg/args-alias-redef/man.1 b/t/cfg/args-alias-redef/man.1
new file mode 100644
index 0000000..a1394ba
--- /dev/null
+++ b/t/cfg/args-alias-redef/man.1
@@ -0,0 +1,7 @@
+.TH test1 1
+.SH NAME
+test \- just a test
+
+Hello
+
+World
diff --git a/t/cfg/args-alias-redef/po4a.conf b/t/cfg/args-alias-redef/po4a.conf
new file mode 100644
index 0000000..fc40940
--- /dev/null
+++ b/t/cfg/args-alias-redef/po4a.conf
@@ -0,0 +1,11 @@
+# This file redefines aliases to 'man' to enrich its definition.
+# This was initially not thought as possible, but debhelper relies on it, so make it work.
+
+[po4a_langs] fr es it de
+[po4a_paths] args.pot $lang:args.$lang.po
+
+[po4a_alias:man] man opt:"--keep 0"
+[po4a_alias:man] man opt_es:"--keep 70"
+[po4a_alias:man] man opt_ja:"--keep 100"
+
+[type:man] man.1 $lang:man.$lang.1
diff --git a/t/cfg/args-alias/_man.de.1 b/t/cfg/args-alias/_man.de.1
new file mode 100644
index 0000000..f7abf19
--- /dev/null
+++ b/t/cfg/args-alias/_man.de.1
@@ -0,0 +1,12 @@
+.\"*******************************************************************
+.\"
+.\" This file was generated with po4a. Translate the source file.
+.\"
+.\"*******************************************************************
+.TH test1 1
+.SH NAME
+test \- just a test
+
+Hallo
+
+World
diff --git a/t/cfg/args-alias/_man.es.1 b/t/cfg/args-alias/_man.es.1
new file mode 100644
index 0000000..658c6f6
--- /dev/null
+++ b/t/cfg/args-alias/_man.es.1
@@ -0,0 +1,12 @@
+.\"*******************************************************************
+.\"
+.\" This file was generated with po4a. Translate the source file.
+.\"
+.\"*******************************************************************
+.TH test1 1
+.SH NAME
+test \- apenas una prueba
+
+Hola
+
+Mundo
diff --git a/t/cfg/args-alias/_man.fr.1 b/t/cfg/args-alias/_man.fr.1
new file mode 100644
index 0000000..7c16cd5
--- /dev/null
+++ b/t/cfg/args-alias/_man.fr.1
@@ -0,0 +1,12 @@
+.\"*******************************************************************
+.\"
+.\" This file was generated with po4a. Translate the source file.
+.\"
+.\"*******************************************************************
+.TH test1 1
+.SH NAME
+test \- juste un test
+
+Bonjour
+
+Monde
diff --git a/t/cfg/args-alias/_man.fr.2 b/t/cfg/args-alias/_man.fr.2
new file mode 100644
index 0000000..7c16cd5
--- /dev/null
+++ b/t/cfg/args-alias/_man.fr.2
@@ -0,0 +1,12 @@
+.\"*******************************************************************
+.\"
+.\" This file was generated with po4a. Translate the source file.
+.\"
+.\"*******************************************************************
+.TH test1 1
+.SH NAME
+test \- juste un test
+
+Bonjour
+
+Monde
diff --git a/t/cfg/args-alias/_man.it.1 b/t/cfg/args-alias/_man.it.1
new file mode 100644
index 0000000..1845fd7
--- /dev/null
+++ b/t/cfg/args-alias/_man.it.1
@@ -0,0 +1,12 @@
+.\"*******************************************************************
+.\"
+.\" This file was generated with po4a. Translate the source file.
+.\"
+.\"*******************************************************************
+.TH test1 1
+.SH NOME
+test \- appena una prova
+
+Ciao
+
+Mondo
diff --git a/t/cfg/args-alias/_man.it.2 b/t/cfg/args-alias/_man.it.2
new file mode 100644
index 0000000..1845fd7
--- /dev/null
+++ b/t/cfg/args-alias/_man.it.2
@@ -0,0 +1,12 @@
+.\"*******************************************************************
+.\"
+.\" This file was generated with po4a. Translate the source file.
+.\"
+.\"*******************************************************************
+.TH test1 1
+.SH NOME
+test \- appena una prova
+
+Ciao
+
+Mondo
diff --git a/t/cfg/args-alias/_output b/t/cfg/args-alias/_output
new file mode 100644
index 0000000..da4af66
--- /dev/null
+++ b/t/cfg/args-alias/_output
@@ -0,0 +1,10 @@
+NOT creating args.pot as requested (--no-update).
+NOT updating the POT file args.pot as requested (--no-update).
+man.de.1 is 20% translated (1 of 5 strings).
+Discard man.de.2 (1 of 5 strings; only 20% translated; need 80%).
+Discard man.es.1 (3 of 5 strings; only 60% translated; need 70%).
+Discard man.es.2 (3 of 5 strings; only 60% translated; need 80%).
+man.fr.1 is 80% translated (4 of 5 strings).
+man.fr.2 is 80% translated (4 of 5 strings).
+man.it.1 is 100% translated (5 strings).
+man.it.2 is 100% translated (5 strings).
diff --git a/t/cfg/args-alias/_output-keep100 b/t/cfg/args-alias/_output-keep100
new file mode 100644
index 0000000..cacbc50
--- /dev/null
+++ b/t/cfg/args-alias/_output-keep100
@@ -0,0 +1,10 @@
+NOT creating args.pot as requested (--no-update).
+NOT updating the POT file args.pot as requested (--no-update).
+Discard man.de.1 (1 of 5 strings; only 20% translated; need 100%).
+Discard man.de.2 (1 of 5 strings; only 20% translated; need 100%).
+Discard man.es.1 (3 of 5 strings; only 60% translated; need 100%).
+Discard man.es.2 (3 of 5 strings; only 60% translated; need 100%).
+Discard man.fr.1 (4 of 5 strings; only 80% translated; need 100%).
+Discard man.fr.2 (4 of 5 strings; only 80% translated; need 100%).
+man.it.1 is 100% translated (5 strings).
+man.it.2 is 100% translated (5 strings).
diff --git a/t/cfg/args-alias/args.de.po b/t/cfg/args-alias/args.de.po
new file mode 100644
index 0000000..f9e9a1b
--- /dev/null
+++ b/t/cfg/args-alias/args.de.po
@@ -0,0 +1,43 @@
+# SOME DESCRIPTIVE TITLE
+# Copyright (C) YEAR Free Software Foundation, Inc.
+# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
+#
+#, fuzzy
+msgid ""
+msgstr ""
+"Project-Id-Version: PACKAGE VERSION\n"
+"POT-Creation-Date: 2005-04-24 0:48+0200\n"
+"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
+"Language-Team: LANGUAGE <LL@li.org>\n"
+"Language: de\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+
+#. type: TH
+#: t-05-config/test2_man.1:1
+#, no-wrap
+msgid "test1"
+msgstr ""
+
+#. type: SH
+#: t-05-config/test2_man.1:2
+#, no-wrap
+msgid "NAME"
+msgstr ""
+
+#. type: Plain text
+#: t-05-config/test2_man.1:4
+msgid "test - just a test"
+msgstr ""
+
+#. type: Plain text
+#: t-05-config/test2_man.1:6
+msgid "Hello"
+msgstr "Hallo"
+
+#. type: Plain text
+#: t-05-config/test2_man.1:7
+msgid "World"
+msgstr ""
diff --git a/t/cfg/args-alias/args.es.po b/t/cfg/args-alias/args.es.po
new file mode 100644
index 0000000..8a75616
--- /dev/null
+++ b/t/cfg/args-alias/args.es.po
@@ -0,0 +1,43 @@
+# SOME DESCRIPTIVE TITLE
+# Copyright (C) YEAR Free Software Foundation, Inc.
+# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
+#
+#, fuzzy
+msgid ""
+msgstr ""
+"Project-Id-Version: PACKAGE VERSION\n"
+"POT-Creation-Date: 2005-04-24 0:48+0200\n"
+"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
+"Language-Team: LANGUAGE <LL@li.org>\n"
+"Language: es\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: ENCODING\n"
+
+#. type: TH
+#: t-05-config/test2_man.1:1
+#, no-wrap
+msgid "test1"
+msgstr ""
+
+#. type: SH
+#: t-05-config/test2_man.1:2
+#, no-wrap
+msgid "NAME"
+msgstr ""
+
+#. type: Plain text
+#: t-05-config/test2_man.1:4
+msgid "test - just a test"
+msgstr "test - apenas una prueba"
+
+#. type: Plain text
+#: t-05-config/test2_man.1:6
+msgid "Hello"
+msgstr "Hola"
+
+#. type: Plain text
+#: t-05-config/test2_man.1:7
+msgid "World"
+msgstr "Mundo"
diff --git a/t/cfg/args-alias/args.fr.po b/t/cfg/args-alias/args.fr.po
new file mode 100644
index 0000000..d690c75
--- /dev/null
+++ b/t/cfg/args-alias/args.fr.po
@@ -0,0 +1,43 @@
+# SOME DESCRIPTIVE TITLE
+# Copyright (C) YEAR Free Software Foundation, Inc.
+# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
+#
+#, fuzzy
+msgid ""
+msgstr ""
+"Project-Id-Version: po 4a\n"
+"POT-Creation-Date: 2005-04-24 0:48+0200\n"
+"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
+"Language-Team: LANGUAGE <LL@li.org>\n"
+"Language: fr\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+
+#. type: TH
+#: t-05-config/test2_man.1:1
+#, no-wrap
+msgid "test1"
+msgstr "test1"
+
+#. type: SH
+#: t-05-config/test2_man.1:2
+#, no-wrap
+msgid "NAME"
+msgstr ""
+
+#. type: Plain text
+#: t-05-config/test2_man.1:4
+msgid "test - just a test"
+msgstr "test - juste un test"
+
+#. type: Plain text
+#: t-05-config/test2_man.1:6
+msgid "Hello"
+msgstr "Bonjour"
+
+#. type: Plain text
+#: t-05-config/test2_man.1:7
+msgid "World"
+msgstr "Monde"
diff --git a/t/cfg/args-alias/args.it.po b/t/cfg/args-alias/args.it.po
new file mode 100644
index 0000000..e046d74
--- /dev/null
+++ b/t/cfg/args-alias/args.it.po
@@ -0,0 +1,43 @@
+# SOME DESCRIPTIVE TITLE
+# Copyright (C) YEAR Free Software Foundation, Inc.
+# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
+#
+#, fuzzy
+msgid ""
+msgstr ""
+"Project-Id-Version: PACKAGE VERSION\n"
+"POT-Creation-Date: 2005-04-24 0:48+0200\n"
+"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
+"Language-Team: LANGUAGE <LL@li.org>\n"
+"Language: it\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+
+#. type: TH
+#: t-05-config/test2_man.1:1
+#, no-wrap
+msgid "test1"
+msgstr "test1"
+
+#. type: SH
+#: t-05-config/test2_man.1:2
+#, no-wrap
+msgid "NAME"
+msgstr "NOME"
+
+#. type: Plain text
+#: t-05-config/test2_man.1:4
+msgid "test - just a test"
+msgstr "test - appena una prova"
+
+#. type: Plain text
+#: t-05-config/test2_man.1:6
+msgid "Hello"
+msgstr "Ciao"
+
+#. type: Plain text
+#: t-05-config/test2_man.1:7
+msgid "World"
+msgstr "Mondo"
diff --git a/t/cfg/args-alias/man.1 b/t/cfg/args-alias/man.1
new file mode 100644
index 0000000..a1394ba
--- /dev/null
+++ b/t/cfg/args-alias/man.1
@@ -0,0 +1,7 @@
+.TH test1 1
+.SH NAME
+test \- just a test
+
+Hello
+
+World
diff --git a/t/cfg/args-alias/man.2 b/t/cfg/args-alias/man.2
new file mode 100644
index 0000000..a1394ba
--- /dev/null
+++ b/t/cfg/args-alias/man.2
@@ -0,0 +1,7 @@
+.TH test1 1
+.SH NAME
+test \- just a test
+
+Hello
+
+World
diff --git a/t/cfg/args-alias/po4a.conf b/t/cfg/args-alias/po4a.conf
new file mode 100644
index 0000000..1a1a40e
--- /dev/null
+++ b/t/cfg/args-alias/po4a.conf
@@ -0,0 +1,7 @@
+[po4a_langs] fr es it de
+[po4a_paths] args.pot $lang:args.$lang.po
+
+[po4a_alias:man-all] man opt:"--keep 0" opt_es:"--keep 70"
+
+[type:man-all] man.1 $lang:man.$lang.1
+[type:man] man.2 $lang:man.$lang.2
diff --git a/t/cfg/args-global/_man.de.1 b/t/cfg/args-global/_man.de.1
new file mode 100644
index 0000000..f7abf19
--- /dev/null
+++ b/t/cfg/args-global/_man.de.1
@@ -0,0 +1,12 @@
+.\"*******************************************************************
+.\"
+.\" This file was generated with po4a. Translate the source file.
+.\"
+.\"*******************************************************************
+.TH test1 1
+.SH NAME
+test \- just a test
+
+Hallo
+
+World
diff --git a/t/cfg/args-global/_man.es.1 b/t/cfg/args-global/_man.es.1
new file mode 100644
index 0000000..658c6f6
--- /dev/null
+++ b/t/cfg/args-global/_man.es.1
@@ -0,0 +1,12 @@
+.\"*******************************************************************
+.\"
+.\" This file was generated with po4a. Translate the source file.
+.\"
+.\"*******************************************************************
+.TH test1 1
+.SH NAME
+test \- apenas una prueba
+
+Hola
+
+Mundo
diff --git a/t/cfg/args-global/_man.fr.1 b/t/cfg/args-global/_man.fr.1
new file mode 100644
index 0000000..7c16cd5
--- /dev/null
+++ b/t/cfg/args-global/_man.fr.1
@@ -0,0 +1,12 @@
+.\"*******************************************************************
+.\"
+.\" This file was generated with po4a. Translate the source file.
+.\"
+.\"*******************************************************************
+.TH test1 1
+.SH NAME
+test \- juste un test
+
+Bonjour
+
+Monde
diff --git a/t/cfg/args-global/_man.it.1 b/t/cfg/args-global/_man.it.1
new file mode 100644
index 0000000..1845fd7
--- /dev/null
+++ b/t/cfg/args-global/_man.it.1
@@ -0,0 +1,12 @@
+.\"*******************************************************************
+.\"
+.\" This file was generated with po4a. Translate the source file.
+.\"
+.\"*******************************************************************
+.TH test1 1
+.SH NOME
+test \- appena una prova
+
+Ciao
+
+Mondo
diff --git a/t/cfg/args-global/_output b/t/cfg/args-global/_output
new file mode 100644
index 0000000..b649c44
--- /dev/null
+++ b/t/cfg/args-global/_output
@@ -0,0 +1,6 @@
+NOT creating args.pot as requested (--no-update).
+NOT updating the POT file args.pot as requested (--no-update).
+man.de.1 is 20% translated (1 of 5 strings).
+man.es.1 is 60% translated (3 of 5 strings).
+man.fr.1 is 80% translated (4 of 5 strings).
+man.it.1 is 100% translated (5 strings).
diff --git a/t/cfg/args-global/_output-keep100 b/t/cfg/args-global/_output-keep100
new file mode 100644
index 0000000..2b9d1e4
--- /dev/null
+++ b/t/cfg/args-global/_output-keep100
@@ -0,0 +1,6 @@
+NOT creating args.pot as requested (--no-update).
+NOT updating the POT file args.pot as requested (--no-update).
+Discard man.de.1 (1 of 5 strings; only 20% translated; need 100%).
+Discard man.es.1 (3 of 5 strings; only 60% translated; need 100%).
+Discard man.fr.1 (4 of 5 strings; only 80% translated; need 100%).
+man.it.1 is 100% translated (5 strings).
diff --git a/t/cfg/args-global/args.de.po b/t/cfg/args-global/args.de.po
new file mode 100644
index 0000000..f9e9a1b
--- /dev/null
+++ b/t/cfg/args-global/args.de.po
@@ -0,0 +1,43 @@
+# SOME DESCRIPTIVE TITLE
+# Copyright (C) YEAR Free Software Foundation, Inc.
+# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
+#
+#, fuzzy
+msgid ""
+msgstr ""
+"Project-Id-Version: PACKAGE VERSION\n"
+"POT-Creation-Date: 2005-04-24 0:48+0200\n"
+"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
+"Language-Team: LANGUAGE <LL@li.org>\n"
+"Language: de\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+
+#. type: TH
+#: t-05-config/test2_man.1:1
+#, no-wrap
+msgid "test1"
+msgstr ""
+
+#. type: SH
+#: t-05-config/test2_man.1:2
+#, no-wrap
+msgid "NAME"
+msgstr ""
+
+#. type: Plain text
+#: t-05-config/test2_man.1:4
+msgid "test - just a test"
+msgstr ""
+
+#. type: Plain text
+#: t-05-config/test2_man.1:6
+msgid "Hello"
+msgstr "Hallo"
+
+#. type: Plain text
+#: t-05-config/test2_man.1:7
+msgid "World"
+msgstr ""
diff --git a/t/cfg/args-global/args.es.po b/t/cfg/args-global/args.es.po
new file mode 100644
index 0000000..8a75616
--- /dev/null
+++ b/t/cfg/args-global/args.es.po
@@ -0,0 +1,43 @@
+# SOME DESCRIPTIVE TITLE
+# Copyright (C) YEAR Free Software Foundation, Inc.
+# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
+#
+#, fuzzy
+msgid ""
+msgstr ""
+"Project-Id-Version: PACKAGE VERSION\n"
+"POT-Creation-Date: 2005-04-24 0:48+0200\n"
+"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
+"Language-Team: LANGUAGE <LL@li.org>\n"
+"Language: es\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: ENCODING\n"
+
+#. type: TH
+#: t-05-config/test2_man.1:1
+#, no-wrap
+msgid "test1"
+msgstr ""
+
+#. type: SH
+#: t-05-config/test2_man.1:2
+#, no-wrap
+msgid "NAME"
+msgstr ""
+
+#. type: Plain text
+#: t-05-config/test2_man.1:4
+msgid "test - just a test"
+msgstr "test - apenas una prueba"
+
+#. type: Plain text
+#: t-05-config/test2_man.1:6
+msgid "Hello"
+msgstr "Hola"
+
+#. type: Plain text
+#: t-05-config/test2_man.1:7
+msgid "World"
+msgstr "Mundo"
diff --git a/t/cfg/args-global/args.fr.po b/t/cfg/args-global/args.fr.po
new file mode 100644
index 0000000..d690c75
--- /dev/null
+++ b/t/cfg/args-global/args.fr.po
@@ -0,0 +1,43 @@
+# SOME DESCRIPTIVE TITLE
+# Copyright (C) YEAR Free Software Foundation, Inc.
+# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
+#
+#, fuzzy
+msgid ""
+msgstr ""
+"Project-Id-Version: po 4a\n"
+"POT-Creation-Date: 2005-04-24 0:48+0200\n"
+"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
+"Language-Team: LANGUAGE <LL@li.org>\n"
+"Language: fr\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+
+#. type: TH
+#: t-05-config/test2_man.1:1
+#, no-wrap
+msgid "test1"
+msgstr "test1"
+
+#. type: SH
+#: t-05-config/test2_man.1:2
+#, no-wrap
+msgid "NAME"
+msgstr ""
+
+#. type: Plain text
+#: t-05-config/test2_man.1:4
+msgid "test - just a test"
+msgstr "test - juste un test"
+
+#. type: Plain text
+#: t-05-config/test2_man.1:6
+msgid "Hello"
+msgstr "Bonjour"
+
+#. type: Plain text
+#: t-05-config/test2_man.1:7
+msgid "World"
+msgstr "Monde"
diff --git a/t/cfg/args-global/args.it.po b/t/cfg/args-global/args.it.po
new file mode 100644
index 0000000..e046d74
--- /dev/null
+++ b/t/cfg/args-global/args.it.po
@@ -0,0 +1,43 @@
+# SOME DESCRIPTIVE TITLE
+# Copyright (C) YEAR Free Software Foundation, Inc.
+# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
+#
+#, fuzzy
+msgid ""
+msgstr ""
+"Project-Id-Version: PACKAGE VERSION\n"
+"POT-Creation-Date: 2005-04-24 0:48+0200\n"
+"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
+"Language-Team: LANGUAGE <LL@li.org>\n"
+"Language: it\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+
+#. type: TH
+#: t-05-config/test2_man.1:1
+#, no-wrap
+msgid "test1"
+msgstr "test1"
+
+#. type: SH
+#: t-05-config/test2_man.1:2
+#, no-wrap
+msgid "NAME"
+msgstr "NOME"
+
+#. type: Plain text
+#: t-05-config/test2_man.1:4
+msgid "test - just a test"
+msgstr "test - appena una prova"
+
+#. type: Plain text
+#: t-05-config/test2_man.1:6
+msgid "Hello"
+msgstr "Ciao"
+
+#. type: Plain text
+#: t-05-config/test2_man.1:7
+msgid "World"
+msgstr "Mondo"
diff --git a/t/cfg/args-global/man.1 b/t/cfg/args-global/man.1
new file mode 100644
index 0000000..a1394ba
--- /dev/null
+++ b/t/cfg/args-global/man.1
@@ -0,0 +1,7 @@
+.TH test1 1
+.SH NAME
+test \- just a test
+
+Hello
+
+World
diff --git a/t/cfg/args-global/po4a.conf b/t/cfg/args-global/po4a.conf
new file mode 100644
index 0000000..214a748
--- /dev/null
+++ b/t/cfg/args-global/po4a.conf
@@ -0,0 +1,6 @@
+[po4a_langs] fr es it de
+[po4a_paths] args.pot $lang:args.$lang.po
+
+[options] --keep 20
+
+[type:man] man.1 $lang:man.$lang.1
diff --git a/t/cfg/args-master/_man.de.1 b/t/cfg/args-master/_man.de.1
new file mode 100644
index 0000000..f7abf19
--- /dev/null
+++ b/t/cfg/args-master/_man.de.1
@@ -0,0 +1,12 @@
+.\"*******************************************************************
+.\"
+.\" This file was generated with po4a. Translate the source file.
+.\"
+.\"*******************************************************************
+.TH test1 1
+.SH NAME
+test \- just a test
+
+Hallo
+
+World
diff --git a/t/cfg/args-master/_man.es.1 b/t/cfg/args-master/_man.es.1
new file mode 100644
index 0000000..658c6f6
--- /dev/null
+++ b/t/cfg/args-master/_man.es.1
@@ -0,0 +1,12 @@
+.\"*******************************************************************
+.\"
+.\" This file was generated with po4a. Translate the source file.
+.\"
+.\"*******************************************************************
+.TH test1 1
+.SH NAME
+test \- apenas una prueba
+
+Hola
+
+Mundo
diff --git a/t/cfg/args-master/_man.fr.1 b/t/cfg/args-master/_man.fr.1
new file mode 100644
index 0000000..7c16cd5
--- /dev/null
+++ b/t/cfg/args-master/_man.fr.1
@@ -0,0 +1,12 @@
+.\"*******************************************************************
+.\"
+.\" This file was generated with po4a. Translate the source file.
+.\"
+.\"*******************************************************************
+.TH test1 1
+.SH NAME
+test \- juste un test
+
+Bonjour
+
+Monde
diff --git a/t/cfg/args-master/_man.fr.2 b/t/cfg/args-master/_man.fr.2
new file mode 100644
index 0000000..7c16cd5
--- /dev/null
+++ b/t/cfg/args-master/_man.fr.2
@@ -0,0 +1,12 @@
+.\"*******************************************************************
+.\"
+.\" This file was generated with po4a. Translate the source file.
+.\"
+.\"*******************************************************************
+.TH test1 1
+.SH NAME
+test \- juste un test
+
+Bonjour
+
+Monde
diff --git a/t/cfg/args-master/_man.it.1 b/t/cfg/args-master/_man.it.1
new file mode 100644
index 0000000..1845fd7
--- /dev/null
+++ b/t/cfg/args-master/_man.it.1
@@ -0,0 +1,12 @@
+.\"*******************************************************************
+.\"
+.\" This file was generated with po4a. Translate the source file.
+.\"
+.\"*******************************************************************
+.TH test1 1
+.SH NOME
+test \- appena una prova
+
+Ciao
+
+Mondo
diff --git a/t/cfg/args-master/_man.it.2 b/t/cfg/args-master/_man.it.2
new file mode 100644
index 0000000..1845fd7
--- /dev/null
+++ b/t/cfg/args-master/_man.it.2
@@ -0,0 +1,12 @@
+.\"*******************************************************************
+.\"
+.\" This file was generated with po4a. Translate the source file.
+.\"
+.\"*******************************************************************
+.TH test1 1
+.SH NOME
+test \- appena una prova
+
+Ciao
+
+Mondo
diff --git a/t/cfg/args-master/_output b/t/cfg/args-master/_output
new file mode 100644
index 0000000..db00cb6
--- /dev/null
+++ b/t/cfg/args-master/_output
@@ -0,0 +1,6 @@
+NOT creating args.pot as requested (--no-update).
+NOT updating the POT file args.pot as requested (--no-update).
+Discard man.de.1 (1 of 5 strings; only 20% translated; need 22%).
+Discard man.es.1 (3 of 5 strings; only 60% translated; need 66%).
+man.fr.1 is 80% translated (4 of 5 strings).
+man.it.1 is 100% translated (5 strings).
diff --git a/t/cfg/args-master/_output-keep100 b/t/cfg/args-master/_output-keep100
new file mode 100644
index 0000000..2b9d1e4
--- /dev/null
+++ b/t/cfg/args-master/_output-keep100
@@ -0,0 +1,6 @@
+NOT creating args.pot as requested (--no-update).
+NOT updating the POT file args.pot as requested (--no-update).
+Discard man.de.1 (1 of 5 strings; only 20% translated; need 100%).
+Discard man.es.1 (3 of 5 strings; only 60% translated; need 100%).
+Discard man.fr.1 (4 of 5 strings; only 80% translated; need 100%).
+man.it.1 is 100% translated (5 strings).
diff --git a/t/cfg/args-master/args.de.po b/t/cfg/args-master/args.de.po
new file mode 100644
index 0000000..f9e9a1b
--- /dev/null
+++ b/t/cfg/args-master/args.de.po
@@ -0,0 +1,43 @@
+# SOME DESCRIPTIVE TITLE
+# Copyright (C) YEAR Free Software Foundation, Inc.
+# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
+#
+#, fuzzy
+msgid ""
+msgstr ""
+"Project-Id-Version: PACKAGE VERSION\n"
+"POT-Creation-Date: 2005-04-24 0:48+0200\n"
+"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
+"Language-Team: LANGUAGE <LL@li.org>\n"
+"Language: de\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+
+#. type: TH
+#: t-05-config/test2_man.1:1
+#, no-wrap
+msgid "test1"
+msgstr ""
+
+#. type: SH
+#: t-05-config/test2_man.1:2
+#, no-wrap
+msgid "NAME"
+msgstr ""
+
+#. type: Plain text
+#: t-05-config/test2_man.1:4
+msgid "test - just a test"
+msgstr ""
+
+#. type: Plain text
+#: t-05-config/test2_man.1:6
+msgid "Hello"
+msgstr "Hallo"
+
+#. type: Plain text
+#: t-05-config/test2_man.1:7
+msgid "World"
+msgstr ""
diff --git a/t/cfg/args-master/args.es.po b/t/cfg/args-master/args.es.po
new file mode 100644
index 0000000..8a75616
--- /dev/null
+++ b/t/cfg/args-master/args.es.po
@@ -0,0 +1,43 @@
+# SOME DESCRIPTIVE TITLE
+# Copyright (C) YEAR Free Software Foundation, Inc.
+# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
+#
+#, fuzzy
+msgid ""
+msgstr ""
+"Project-Id-Version: PACKAGE VERSION\n"
+"POT-Creation-Date: 2005-04-24 0:48+0200\n"
+"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
+"Language-Team: LANGUAGE <LL@li.org>\n"
+"Language: es\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: ENCODING\n"
+
+#. type: TH
+#: t-05-config/test2_man.1:1
+#, no-wrap
+msgid "test1"
+msgstr ""
+
+#. type: SH
+#: t-05-config/test2_man.1:2
+#, no-wrap
+msgid "NAME"
+msgstr ""
+
+#. type: Plain text
+#: t-05-config/test2_man.1:4
+msgid "test - just a test"
+msgstr "test - apenas una prueba"
+
+#. type: Plain text
+#: t-05-config/test2_man.1:6
+msgid "Hello"
+msgstr "Hola"
+
+#. type: Plain text
+#: t-05-config/test2_man.1:7
+msgid "World"
+msgstr "Mundo"
diff --git a/t/cfg/args-master/args.fr.po b/t/cfg/args-master/args.fr.po
new file mode 100644
index 0000000..d690c75
--- /dev/null
+++ b/t/cfg/args-master/args.fr.po
@@ -0,0 +1,43 @@
+# SOME DESCRIPTIVE TITLE
+# Copyright (C) YEAR Free Software Foundation, Inc.
+# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
+#
+#, fuzzy
+msgid ""
+msgstr ""
+"Project-Id-Version: po 4a\n"
+"POT-Creation-Date: 2005-04-24 0:48+0200\n"
+"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
+"Language-Team: LANGUAGE <LL@li.org>\n"
+"Language: fr\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+
+#. type: TH
+#: t-05-config/test2_man.1:1
+#, no-wrap
+msgid "test1"
+msgstr "test1"
+
+#. type: SH
+#: t-05-config/test2_man.1:2
+#, no-wrap
+msgid "NAME"
+msgstr ""
+
+#. type: Plain text
+#: t-05-config/test2_man.1:4
+msgid "test - just a test"
+msgstr "test - juste un test"
+
+#. type: Plain text
+#: t-05-config/test2_man.1:6
+msgid "Hello"
+msgstr "Bonjour"
+
+#. type: Plain text
+#: t-05-config/test2_man.1:7
+msgid "World"
+msgstr "Monde"
diff --git a/t/cfg/args-master/args.it.po b/t/cfg/args-master/args.it.po
new file mode 100644
index 0000000..e046d74
--- /dev/null
+++ b/t/cfg/args-master/args.it.po
@@ -0,0 +1,43 @@
+# SOME DESCRIPTIVE TITLE
+# Copyright (C) YEAR Free Software Foundation, Inc.
+# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
+#
+#, fuzzy
+msgid ""
+msgstr ""
+"Project-Id-Version: PACKAGE VERSION\n"
+"POT-Creation-Date: 2005-04-24 0:48+0200\n"
+"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
+"Language-Team: LANGUAGE <LL@li.org>\n"
+"Language: it\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+
+#. type: TH
+#: t-05-config/test2_man.1:1
+#, no-wrap
+msgid "test1"
+msgstr "test1"
+
+#. type: SH
+#: t-05-config/test2_man.1:2
+#, no-wrap
+msgid "NAME"
+msgstr "NOME"
+
+#. type: Plain text
+#: t-05-config/test2_man.1:4
+msgid "test - just a test"
+msgstr "test - appena una prova"
+
+#. type: Plain text
+#: t-05-config/test2_man.1:6
+msgid "Hello"
+msgstr "Ciao"
+
+#. type: Plain text
+#: t-05-config/test2_man.1:7
+msgid "World"
+msgstr "Mondo"
diff --git a/t/cfg/args-master/man.1 b/t/cfg/args-master/man.1
new file mode 100644
index 0000000..a1394ba
--- /dev/null
+++ b/t/cfg/args-master/man.1
@@ -0,0 +1,7 @@
+.TH test1 1
+.SH NAME
+test \- just a test
+
+Hello
+
+World
diff --git a/t/cfg/args-master/man.2 b/t/cfg/args-master/man.2
new file mode 100644
index 0000000..a1394ba
--- /dev/null
+++ b/t/cfg/args-master/man.2
@@ -0,0 +1,7 @@
+.TH test1 1
+.SH NAME
+test \- just a test
+
+Hello
+
+World
diff --git a/t/cfg/args-master/po4a.conf b/t/cfg/args-master/po4a.conf
new file mode 100644
index 0000000..aa6ec9a
--- /dev/null
+++ b/t/cfg/args-master/po4a.conf
@@ -0,0 +1,5 @@
+[po4a_langs] fr es it de
+[po4a_paths] args.pot $lang:args.$lang.po
+
+[type:man] man.1 $lang:man.$lang.1 opt:"--keep 66" opt_de:"--keep 22"
+
diff --git a/t/cfg/multiple-fuzzied-noup/_multiple.de.po b/t/cfg/multiple-fuzzied-noup/_multiple.de.po
new file mode 100644
index 0000000..b7a6cee
--- /dev/null
+++ b/t/cfg/multiple-fuzzied-noup/_multiple.de.po
@@ -0,0 +1,41 @@
+# German translations for po package
+# Copyright (C) 2020 Free Software Foundation, Inc.
+# This file is distributed under the same license as the po package.
+# Automatically generated, 2020.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: po 4a\n"
+"POT-Creation-Date: 2020-04-13 01:07+0200\n"
+"PO-Revision-Date: 2020-04-13 01:07+0200\n"
+"Last-Translator: Automatically generated\n"
+"Language-Team: none\n"
+"Language: de\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+
+#. type: TH
+#: multiple.man.1:1
+#, no-wrap
+msgid "test1"
+msgstr "prüfung1"
+
+#. type: SH
+#: multiple.man.1:2
+#, no-wrap
+msgid "NAME"
+msgstr "NAME"
+
+#. type: Plain text
+#: multiple.man.1:4
+msgid "test - just a test"
+msgstr "prüfung - nur ein Prüfung"
+
+#. type: Plain text
+#: multiple.man.1:5
+#, fuzzy
+#| msgid "-Hello"
+msgid "Hello"
+msgstr "Hallo"
diff --git a/t/cfg/multiple-fuzzied-noup/_multiple.es.po b/t/cfg/multiple-fuzzied-noup/_multiple.es.po
new file mode 100644
index 0000000..c9dca6a
--- /dev/null
+++ b/t/cfg/multiple-fuzzied-noup/_multiple.es.po
@@ -0,0 +1,40 @@
+# Spanish translations for po package
+# Copyright (C) 2020 Free Software Foundation, Inc.
+# This file is distributed under the same license as the po package.
+# Automatically generated, 2020.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: po 4a\n"
+"POT-Creation-Date: 2020-04-13 01:08+0200\n"
+"PO-Revision-Date: 2020-04-13 01:08+0200\n"
+"Last-Translator: Automatically generated\n"
+"Language-Team: none\n"
+"Language: es\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+
+#. type: TH
+#: multiple.man.1:1
+#, fuzzy, no-wrap
+#| msgid "-test1"
+msgid "test1"
+msgstr "prueba1"
+
+#. type: SH
+#: multiple.man.1:2
+#, no-wrap
+msgid "NAME"
+msgstr "NOMBRE"
+
+#. type: Plain text
+#: multiple.man.1:4
+msgid "test - just a test"
+msgstr "prueba - solo una prueba"
+
+#. type: Plain text
+#: multiple.man.1:5
+msgid "Hello"
+msgstr "Hola"
diff --git a/t/cfg/multiple-fuzzied-noup/_multiple.fr.po b/t/cfg/multiple-fuzzied-noup/_multiple.fr.po
new file mode 100644
index 0000000..82449b6
--- /dev/null
+++ b/t/cfg/multiple-fuzzied-noup/_multiple.fr.po
@@ -0,0 +1,41 @@
+# French translations for po package
+# Copyright (C) 2020 Free Software Foundation, Inc.
+# This file is distributed under the same license as the po package.
+# Automatically generated, 2020.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: po 4a\n"
+"POT-Creation-Date: 2005-04-24 2:54+0200\n"
+"PO-Revision-Date: 2005-04-24 2:54+0200\n"
+"Last-Translator: Automatically generated\n"
+"Language-Team: none\n"
+"Language: fr\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=2; plural=(n > 1);\n"
+
+#. type: TH
+#: multiple.man.1:1
+#, no-wrap
+msgid "test1"
+msgstr "test1"
+
+#. type: SH
+#: multiple.man.1:2
+#, no-wrap
+msgid "NAME"
+msgstr "NOM"
+
+#. type: Plain text
+#: multiple.man.1:4
+#, fuzzy
+#| msgid "-test - just a test"
+msgid "test - just a test"
+msgstr "test - juste un test"
+
+#. type: Plain text
+#: multiple.man.1:5
+msgid "Hello"
+msgstr "Bonjour"
diff --git a/t/cfg/multiple-fuzzied-noup/_multiple.it.po b/t/cfg/multiple-fuzzied-noup/_multiple.it.po
new file mode 100644
index 0000000..2e0c964
--- /dev/null
+++ b/t/cfg/multiple-fuzzied-noup/_multiple.it.po
@@ -0,0 +1,40 @@
+# Italian translations for po package
+# Copyright (C) 2020 Free Software Foundation, Inc.
+# This file is distributed under the same license as the po package.
+# Automatically generated, 2020.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: po 4a\n"
+"POT-Creation-Date: 2020-04-13 01:08+0200\n"
+"PO-Revision-Date: 2020-04-13 01:08+0200\n"
+"Last-Translator: Automatically generated\n"
+"Language-Team: none\n"
+"Language: it\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+
+#. type: TH
+#: multiple.man.1:1
+#, no-wrap
+msgid "test1"
+msgstr "test1"
+
+#. type: SH
+#: multiple.man.1:2
+#, fuzzy, no-wrap
+#| msgid "NAME-"
+msgid "NAME"
+msgstr "NOME"
+
+#. type: Plain text
+#: multiple.man.1:4
+msgid "test - just a test"
+msgstr "test - solo un test"
+
+#. type: Plain text
+#: multiple.man.1:5
+msgid "Hello"
+msgstr "Ciao"
diff --git a/t/cfg/multiple-fuzzied-noup/_output b/t/cfg/multiple-fuzzied-noup/_output
new file mode 100644
index 0000000..a33da77
--- /dev/null
+++ b/t/cfg/multiple-fuzzied-noup/_output
@@ -0,0 +1,6 @@
+NOT updating multiple.pot as requested (--no-update).
+NOT updating the POT file multiple.pot as requested (--no-update).
+Discard multiple.man.de.1 (3 of 4 strings; only 75% translated; need 80%).
+Discard multiple.man.es.1 (3 of 4 strings; only 75% translated; need 80%).
+Discard multiple.man.fr.1 (3 of 4 strings; only 75% translated; need 80%).
+Discard multiple.man.it.1 (3 of 4 strings; only 75% translated; need 80%).
diff --git a/t/cfg/multiple-fuzzied-noup/multiple.de.po b/t/cfg/multiple-fuzzied-noup/multiple.de.po
new file mode 100644
index 0000000..bb4a7d1
--- /dev/null
+++ b/t/cfg/multiple-fuzzied-noup/multiple.de.po
@@ -0,0 +1,39 @@
+# German translations for po package
+# Copyright (C) 2020 Free Software Foundation, Inc.
+# This file is distributed under the same license as the po package.
+# Automatically generated, 2020.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: po 4a\n"
+"POT-Creation-Date: 2020-04-13 01:07+0200\n"
+"PO-Revision-Date: 2020-04-13 01:07+0200\n"
+"Last-Translator: Automatically generated\n"
+"Language-Team: none\n"
+"Language: de\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+
+#. type: TH
+#: cfg/multiple-nopotpo/multiple.man.1:1
+#, no-wrap
+msgid "test1"
+msgstr "prüfung1"
+
+#. type: SH
+#: cfg/multiple-nopotpo/multiple.man.1:2
+#, no-wrap
+msgid "NAME"
+msgstr "NAME"
+
+#. type: Plain text
+#: cfg/multiple-nopotpo/multiple.man.1:4
+msgid "test - just a test"
+msgstr "prüfung - nur ein Prüfung"
+
+#. type: Plain text
+#: cfg/multiple-nopotpo/multiple.man.1:5
+msgid "-Hello"
+msgstr "Hallo"
diff --git a/t/cfg/multiple-fuzzied-noup/multiple.es.po b/t/cfg/multiple-fuzzied-noup/multiple.es.po
new file mode 100644
index 0000000..efa4116
--- /dev/null
+++ b/t/cfg/multiple-fuzzied-noup/multiple.es.po
@@ -0,0 +1,39 @@
+# Spanish translations for po package
+# Copyright (C) 2020 Free Software Foundation, Inc.
+# This file is distributed under the same license as the po package.
+# Automatically generated, 2020.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: po 4a\n"
+"POT-Creation-Date: 2020-04-13 01:08+0200\n"
+"PO-Revision-Date: 2020-04-13 01:08+0200\n"
+"Last-Translator: Automatically generated\n"
+"Language-Team: none\n"
+"Language: es\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+
+#. type: TH
+#: cfg/multiple-nopotpo/multiple.man.1:1
+#, no-wrap
+msgid "-test1"
+msgstr "prueba1"
+
+#. type: SH
+#: cfg/multiple-nopotpo/multiple.man.1:2
+#, no-wrap
+msgid "NAME"
+msgstr "NOMBRE"
+
+#. type: Plain text
+#: cfg/multiple-nopotpo/multiple.man.1:4
+msgid "test - just a test"
+msgstr "prueba - solo una prueba"
+
+#. type: Plain text
+#: cfg/multiple-nopotpo/multiple.man.1:5
+msgid "Hello"
+msgstr "Hola"
diff --git a/t/cfg/multiple-fuzzied-noup/multiple.fr.po b/t/cfg/multiple-fuzzied-noup/multiple.fr.po
new file mode 100644
index 0000000..7f6725b
--- /dev/null
+++ b/t/cfg/multiple-fuzzied-noup/multiple.fr.po
@@ -0,0 +1,39 @@
+# French translations for po package
+# Copyright (C) 2020 Free Software Foundation, Inc.
+# This file is distributed under the same license as the po package.
+# Automatically generated, 2020.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: po 4a\n"
+"POT-Creation-Date: 2005-04-24 2:54+0200\n"
+"PO-Revision-Date: 2005-04-24 2:54+0200\n"
+"Last-Translator: Automatically generated\n"
+"Language-Team: none\n"
+"Language: fr\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=2; plural=(n > 1);\n"
+
+#. type: TH
+#: t-05-config/test00_man.1:1
+#, no-wrap
+msgid "test1"
+msgstr "test1"
+
+#. type: SH
+#: t-05-config/test00_man.1:2
+#, no-wrap
+msgid "NAME"
+msgstr "NOM"
+
+#. type: Plain text
+#: t-05-config/test00_man.1:4
+msgid "-test - just a test"
+msgstr "test - juste un test"
+
+#. type: Plain text
+#: t-05-config/test00_man.1:5
+msgid "Hello"
+msgstr "Bonjour"
diff --git a/t/cfg/multiple-fuzzied-noup/multiple.it.po b/t/cfg/multiple-fuzzied-noup/multiple.it.po
new file mode 100644
index 0000000..93b4e3b
--- /dev/null
+++ b/t/cfg/multiple-fuzzied-noup/multiple.it.po
@@ -0,0 +1,39 @@
+# Italian translations for po package
+# Copyright (C) 2020 Free Software Foundation, Inc.
+# This file is distributed under the same license as the po package.
+# Automatically generated, 2020.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: po 4a\n"
+"POT-Creation-Date: 2020-04-13 01:08+0200\n"
+"PO-Revision-Date: 2020-04-13 01:08+0200\n"
+"Last-Translator: Automatically generated\n"
+"Language-Team: none\n"
+"Language: it\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+
+#. type: TH
+#: cfg/multiple-nopotpo/multiple.man.1:1
+#, no-wrap
+msgid "test1"
+msgstr "test1"
+
+#. type: SH
+#: cfg/multiple-nopotpo/multiple.man.1:2
+#, no-wrap
+msgid "NAME-"
+msgstr "NOME"
+
+#. type: Plain text
+#: cfg/multiple-nopotpo/multiple.man.1:4
+msgid "test - just a test"
+msgstr "test - solo un test"
+
+#. type: Plain text
+#: cfg/multiple-nopotpo/multiple.man.1:5
+msgid "Hello"
+msgstr "Ciao"
diff --git a/t/cfg/multiple-fuzzied-noup/multiple.man.1 b/t/cfg/multiple-fuzzied-noup/multiple.man.1
new file mode 100644
index 0000000..2178e17
--- /dev/null
+++ b/t/cfg/multiple-fuzzied-noup/multiple.man.1
@@ -0,0 +1,5 @@
+.TH test1 1
+.SH NAME
+test \- just a test
+
+Hello
diff --git a/t/cfg/multiple-fuzzied-noup/multiple.man.de.1 b/t/cfg/multiple-fuzzied-noup/multiple.man.de.1
new file mode 100644
index 0000000..870b037
--- /dev/null
+++ b/t/cfg/multiple-fuzzied-noup/multiple.man.de.1
@@ -0,0 +1,10 @@
+.\"*******************************************************************
+.\"
+.\" This file was generated with po4a. Translate the source file.
+.\"
+.\"*******************************************************************
+.TH prüfung1 1
+.SH NAME
+prüfung \- nur ein Prüfung
+
+Hallo
diff --git a/t/cfg/multiple-fuzzied-noup/multiple.man.es.1 b/t/cfg/multiple-fuzzied-noup/multiple.man.es.1
new file mode 100644
index 0000000..091ad34
--- /dev/null
+++ b/t/cfg/multiple-fuzzied-noup/multiple.man.es.1
@@ -0,0 +1,10 @@
+.\"*******************************************************************
+.\"
+.\" This file was generated with po4a. Translate the source file.
+.\"
+.\"*******************************************************************
+.TH prueba1 1
+.SH NOMBRE
+prueba \- solo una prueba
+
+Hola
diff --git a/t/cfg/multiple-fuzzied-noup/multiple.man.fr.1 b/t/cfg/multiple-fuzzied-noup/multiple.man.fr.1
new file mode 100644
index 0000000..873acf4
--- /dev/null
+++ b/t/cfg/multiple-fuzzied-noup/multiple.man.fr.1
@@ -0,0 +1,10 @@
+.\"*******************************************************************
+.\"
+.\" This file was generated with po4a. Translate the source file.
+.\"
+.\"*******************************************************************
+.TH test1 1
+.SH NOM
+test \- juste un test
+
+Bonjour
diff --git a/t/cfg/multiple-fuzzied-noup/multiple.man.it.1 b/t/cfg/multiple-fuzzied-noup/multiple.man.it.1
new file mode 100644
index 0000000..b2cbe40
--- /dev/null
+++ b/t/cfg/multiple-fuzzied-noup/multiple.man.it.1
@@ -0,0 +1,10 @@
+.\"*******************************************************************
+.\"
+.\" This file was generated with po4a. Translate the source file.
+.\"
+.\"*******************************************************************
+.TH test1 1
+.SH NOME
+test \- solo un test
+
+Ciao
diff --git a/t/cfg/multiple-fuzzied-noup/multiple.pot b/t/cfg/multiple-fuzzied-noup/multiple.pot
new file mode 100644
index 0000000..430a879
--- /dev/null
+++ b/t/cfg/multiple-fuzzied-noup/multiple.pot
@@ -0,0 +1,39 @@
+# SOME DESCRIPTIVE TITLE
+# Copyright (C) YEAR Free Software Foundation, Inc.
+# This file is distributed under the same license as the PACKAGE package.
+# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
+#
+#, fuzzy
+msgid ""
+msgstr ""
+"Project-Id-Version: PACKAGE VERSION\n"
+"POT-Creation-Date: 2020-04-06 02:01+0200\n"
+"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
+"Language-Team: LANGUAGE <LL@li.org>\n"
+"Language: \n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+
+#. type: TH
+#: cfg/single-nopotpo/single.man.1:1
+#, no-wrap
+msgid "test1"
+msgstr ""
+
+#. type: SH
+#: cfg/single-nopotpo/single.man.1:2
+#, no-wrap
+msgid "NAME"
+msgstr ""
+
+#. type: Plain text
+#: cfg/single-nopotpo/single.man.1:4
+msgid "test - just a test"
+msgstr ""
+
+#. type: Plain text
+#: cfg/single-nopotpo/single.man.1:5
+msgid "Hello"
+msgstr ""
diff --git a/t/cfg/multiple-fuzzied-noup/po4a.conf b/t/cfg/multiple-fuzzied-noup/po4a.conf
new file mode 100644
index 0000000..1edb0aa
--- /dev/null
+++ b/t/cfg/multiple-fuzzied-noup/po4a.conf
@@ -0,0 +1,5 @@
+[po4a_langs] fr de es it
+[po4a_paths] multiple.pot $lang:multiple.$lang.po
+[options] opt:"--msgmerge-opt --silent"
+
+[type:man] multiple.man.1 $lang:multiple.man.$lang.1
diff --git a/t/cfg/multiple-fuzzied/_multiple.de.po b/t/cfg/multiple-fuzzied/_multiple.de.po
new file mode 100644
index 0000000..b7a6cee
--- /dev/null
+++ b/t/cfg/multiple-fuzzied/_multiple.de.po
@@ -0,0 +1,41 @@
+# German translations for po package
+# Copyright (C) 2020 Free Software Foundation, Inc.
+# This file is distributed under the same license as the po package.
+# Automatically generated, 2020.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: po 4a\n"
+"POT-Creation-Date: 2020-04-13 01:07+0200\n"
+"PO-Revision-Date: 2020-04-13 01:07+0200\n"
+"Last-Translator: Automatically generated\n"
+"Language-Team: none\n"
+"Language: de\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+
+#. type: TH
+#: multiple.man.1:1
+#, no-wrap
+msgid "test1"
+msgstr "prüfung1"
+
+#. type: SH
+#: multiple.man.1:2
+#, no-wrap
+msgid "NAME"
+msgstr "NAME"
+
+#. type: Plain text
+#: multiple.man.1:4
+msgid "test - just a test"
+msgstr "prüfung - nur ein Prüfung"
+
+#. type: Plain text
+#: multiple.man.1:5
+#, fuzzy
+#| msgid "-Hello"
+msgid "Hello"
+msgstr "Hallo"
diff --git a/t/cfg/multiple-fuzzied/_multiple.es.po b/t/cfg/multiple-fuzzied/_multiple.es.po
new file mode 100644
index 0000000..c9dca6a
--- /dev/null
+++ b/t/cfg/multiple-fuzzied/_multiple.es.po
@@ -0,0 +1,40 @@
+# Spanish translations for po package
+# Copyright (C) 2020 Free Software Foundation, Inc.
+# This file is distributed under the same license as the po package.
+# Automatically generated, 2020.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: po 4a\n"
+"POT-Creation-Date: 2020-04-13 01:08+0200\n"
+"PO-Revision-Date: 2020-04-13 01:08+0200\n"
+"Last-Translator: Automatically generated\n"
+"Language-Team: none\n"
+"Language: es\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+
+#. type: TH
+#: multiple.man.1:1
+#, fuzzy, no-wrap
+#| msgid "-test1"
+msgid "test1"
+msgstr "prueba1"
+
+#. type: SH
+#: multiple.man.1:2
+#, no-wrap
+msgid "NAME"
+msgstr "NOMBRE"
+
+#. type: Plain text
+#: multiple.man.1:4
+msgid "test - just a test"
+msgstr "prueba - solo una prueba"
+
+#. type: Plain text
+#: multiple.man.1:5
+msgid "Hello"
+msgstr "Hola"
diff --git a/t/cfg/multiple-fuzzied/_multiple.fr.po b/t/cfg/multiple-fuzzied/_multiple.fr.po
new file mode 100644
index 0000000..82449b6
--- /dev/null
+++ b/t/cfg/multiple-fuzzied/_multiple.fr.po
@@ -0,0 +1,41 @@
+# French translations for po package
+# Copyright (C) 2020 Free Software Foundation, Inc.
+# This file is distributed under the same license as the po package.
+# Automatically generated, 2020.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: po 4a\n"
+"POT-Creation-Date: 2005-04-24 2:54+0200\n"
+"PO-Revision-Date: 2005-04-24 2:54+0200\n"
+"Last-Translator: Automatically generated\n"
+"Language-Team: none\n"
+"Language: fr\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=2; plural=(n > 1);\n"
+
+#. type: TH
+#: multiple.man.1:1
+#, no-wrap
+msgid "test1"
+msgstr "test1"
+
+#. type: SH
+#: multiple.man.1:2
+#, no-wrap
+msgid "NAME"
+msgstr "NOM"
+
+#. type: Plain text
+#: multiple.man.1:4
+#, fuzzy
+#| msgid "-test - just a test"
+msgid "test - just a test"
+msgstr "test - juste un test"
+
+#. type: Plain text
+#: multiple.man.1:5
+msgid "Hello"
+msgstr "Bonjour"
diff --git a/t/cfg/multiple-fuzzied/_multiple.it.po b/t/cfg/multiple-fuzzied/_multiple.it.po
new file mode 100644
index 0000000..2e0c964
--- /dev/null
+++ b/t/cfg/multiple-fuzzied/_multiple.it.po
@@ -0,0 +1,40 @@
+# Italian translations for po package
+# Copyright (C) 2020 Free Software Foundation, Inc.
+# This file is distributed under the same license as the po package.
+# Automatically generated, 2020.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: po 4a\n"
+"POT-Creation-Date: 2020-04-13 01:08+0200\n"
+"PO-Revision-Date: 2020-04-13 01:08+0200\n"
+"Last-Translator: Automatically generated\n"
+"Language-Team: none\n"
+"Language: it\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+
+#. type: TH
+#: multiple.man.1:1
+#, no-wrap
+msgid "test1"
+msgstr "test1"
+
+#. type: SH
+#: multiple.man.1:2
+#, fuzzy, no-wrap
+#| msgid "NAME-"
+msgid "NAME"
+msgstr "NOME"
+
+#. type: Plain text
+#: multiple.man.1:4
+msgid "test - just a test"
+msgstr "test - solo un test"
+
+#. type: Plain text
+#: multiple.man.1:5
+msgid "Hello"
+msgstr "Ciao"
diff --git a/t/cfg/multiple-fuzzied/_output b/t/cfg/multiple-fuzzied/_output
new file mode 100644
index 0000000..f3f6f7c
--- /dev/null
+++ b/t/cfg/multiple-fuzzied/_output
@@ -0,0 +1,9 @@
+Updating multiple.pot: (4 entries)
+Updating multiple.de.po: 3 translated messages, 1 fuzzy translation.
+Updating multiple.es.po: 3 translated messages, 1 fuzzy translation.
+Updating multiple.fr.po: 3 translated messages, 1 fuzzy translation.
+Updating multiple.it.po: 3 translated messages, 1 fuzzy translation.
+Discard multiple.man.de.1 (3 of 4 strings; only 75% translated; need 80%).
+Discard multiple.man.es.1 (3 of 4 strings; only 75% translated; need 80%).
+Discard multiple.man.fr.1 (3 of 4 strings; only 75% translated; need 80%).
+Discard multiple.man.it.1 (3 of 4 strings; only 75% translated; need 80%).
diff --git a/t/cfg/multiple-fuzzied/multiple.de.po b/t/cfg/multiple-fuzzied/multiple.de.po
new file mode 100644
index 0000000..bb4a7d1
--- /dev/null
+++ b/t/cfg/multiple-fuzzied/multiple.de.po
@@ -0,0 +1,39 @@
+# German translations for po package
+# Copyright (C) 2020 Free Software Foundation, Inc.
+# This file is distributed under the same license as the po package.
+# Automatically generated, 2020.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: po 4a\n"
+"POT-Creation-Date: 2020-04-13 01:07+0200\n"
+"PO-Revision-Date: 2020-04-13 01:07+0200\n"
+"Last-Translator: Automatically generated\n"
+"Language-Team: none\n"
+"Language: de\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+
+#. type: TH
+#: cfg/multiple-nopotpo/multiple.man.1:1
+#, no-wrap
+msgid "test1"
+msgstr "prüfung1"
+
+#. type: SH
+#: cfg/multiple-nopotpo/multiple.man.1:2
+#, no-wrap
+msgid "NAME"
+msgstr "NAME"
+
+#. type: Plain text
+#: cfg/multiple-nopotpo/multiple.man.1:4
+msgid "test - just a test"
+msgstr "prüfung - nur ein Prüfung"
+
+#. type: Plain text
+#: cfg/multiple-nopotpo/multiple.man.1:5
+msgid "-Hello"
+msgstr "Hallo"
diff --git a/t/cfg/multiple-fuzzied/multiple.es.po b/t/cfg/multiple-fuzzied/multiple.es.po
new file mode 100644
index 0000000..efa4116
--- /dev/null
+++ b/t/cfg/multiple-fuzzied/multiple.es.po
@@ -0,0 +1,39 @@
+# Spanish translations for po package
+# Copyright (C) 2020 Free Software Foundation, Inc.
+# This file is distributed under the same license as the po package.
+# Automatically generated, 2020.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: po 4a\n"
+"POT-Creation-Date: 2020-04-13 01:08+0200\n"
+"PO-Revision-Date: 2020-04-13 01:08+0200\n"
+"Last-Translator: Automatically generated\n"
+"Language-Team: none\n"
+"Language: es\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+
+#. type: TH
+#: cfg/multiple-nopotpo/multiple.man.1:1
+#, no-wrap
+msgid "-test1"
+msgstr "prueba1"
+
+#. type: SH
+#: cfg/multiple-nopotpo/multiple.man.1:2
+#, no-wrap
+msgid "NAME"
+msgstr "NOMBRE"
+
+#. type: Plain text
+#: cfg/multiple-nopotpo/multiple.man.1:4
+msgid "test - just a test"
+msgstr "prueba - solo una prueba"
+
+#. type: Plain text
+#: cfg/multiple-nopotpo/multiple.man.1:5
+msgid "Hello"
+msgstr "Hola"
diff --git a/t/cfg/multiple-fuzzied/multiple.fr.po b/t/cfg/multiple-fuzzied/multiple.fr.po
new file mode 100644
index 0000000..7f6725b
--- /dev/null
+++ b/t/cfg/multiple-fuzzied/multiple.fr.po
@@ -0,0 +1,39 @@
+# French translations for po package
+# Copyright (C) 2020 Free Software Foundation, Inc.
+# This file is distributed under the same license as the po package.
+# Automatically generated, 2020.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: po 4a\n"
+"POT-Creation-Date: 2005-04-24 2:54+0200\n"
+"PO-Revision-Date: 2005-04-24 2:54+0200\n"
+"Last-Translator: Automatically generated\n"
+"Language-Team: none\n"
+"Language: fr\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=2; plural=(n > 1);\n"
+
+#. type: TH
+#: t-05-config/test00_man.1:1
+#, no-wrap
+msgid "test1"
+msgstr "test1"
+
+#. type: SH
+#: t-05-config/test00_man.1:2
+#, no-wrap
+msgid "NAME"
+msgstr "NOM"
+
+#. type: Plain text
+#: t-05-config/test00_man.1:4
+msgid "-test - just a test"
+msgstr "test - juste un test"
+
+#. type: Plain text
+#: t-05-config/test00_man.1:5
+msgid "Hello"
+msgstr "Bonjour"
diff --git a/t/cfg/multiple-fuzzied/multiple.it.po b/t/cfg/multiple-fuzzied/multiple.it.po
new file mode 100644
index 0000000..93b4e3b
--- /dev/null
+++ b/t/cfg/multiple-fuzzied/multiple.it.po
@@ -0,0 +1,39 @@
+# Italian translations for po package
+# Copyright (C) 2020 Free Software Foundation, Inc.
+# This file is distributed under the same license as the po package.
+# Automatically generated, 2020.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: po 4a\n"
+"POT-Creation-Date: 2020-04-13 01:08+0200\n"
+"PO-Revision-Date: 2020-04-13 01:08+0200\n"
+"Last-Translator: Automatically generated\n"
+"Language-Team: none\n"
+"Language: it\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+
+#. type: TH
+#: cfg/multiple-nopotpo/multiple.man.1:1
+#, no-wrap
+msgid "test1"
+msgstr "test1"
+
+#. type: SH
+#: cfg/multiple-nopotpo/multiple.man.1:2
+#, no-wrap
+msgid "NAME-"
+msgstr "NOME"
+
+#. type: Plain text
+#: cfg/multiple-nopotpo/multiple.man.1:4
+msgid "test - just a test"
+msgstr "test - solo un test"
+
+#. type: Plain text
+#: cfg/multiple-nopotpo/multiple.man.1:5
+msgid "Hello"
+msgstr "Ciao"
diff --git a/t/cfg/multiple-fuzzied/multiple.man.1 b/t/cfg/multiple-fuzzied/multiple.man.1
new file mode 100644
index 0000000..2178e17
--- /dev/null
+++ b/t/cfg/multiple-fuzzied/multiple.man.1
@@ -0,0 +1,5 @@
+.TH test1 1
+.SH NAME
+test \- just a test
+
+Hello
diff --git a/t/cfg/multiple-fuzzied/multiple.man.de.1 b/t/cfg/multiple-fuzzied/multiple.man.de.1
new file mode 100644
index 0000000..870b037
--- /dev/null
+++ b/t/cfg/multiple-fuzzied/multiple.man.de.1
@@ -0,0 +1,10 @@
+.\"*******************************************************************
+.\"
+.\" This file was generated with po4a. Translate the source file.
+.\"
+.\"*******************************************************************
+.TH prüfung1 1
+.SH NAME
+prüfung \- nur ein Prüfung
+
+Hallo
diff --git a/t/cfg/multiple-fuzzied/multiple.man.es.1 b/t/cfg/multiple-fuzzied/multiple.man.es.1
new file mode 100644
index 0000000..091ad34
--- /dev/null
+++ b/t/cfg/multiple-fuzzied/multiple.man.es.1
@@ -0,0 +1,10 @@
+.\"*******************************************************************
+.\"
+.\" This file was generated with po4a. Translate the source file.
+.\"
+.\"*******************************************************************
+.TH prueba1 1
+.SH NOMBRE
+prueba \- solo una prueba
+
+Hola
diff --git a/t/cfg/multiple-fuzzied/multiple.man.fr.1 b/t/cfg/multiple-fuzzied/multiple.man.fr.1
new file mode 100644
index 0000000..873acf4
--- /dev/null
+++ b/t/cfg/multiple-fuzzied/multiple.man.fr.1
@@ -0,0 +1,10 @@
+.\"*******************************************************************
+.\"
+.\" This file was generated with po4a. Translate the source file.
+.\"
+.\"*******************************************************************
+.TH test1 1
+.SH NOM
+test \- juste un test
+
+Bonjour
diff --git a/t/cfg/multiple-fuzzied/multiple.man.it.1 b/t/cfg/multiple-fuzzied/multiple.man.it.1
new file mode 100644
index 0000000..b2cbe40
--- /dev/null
+++ b/t/cfg/multiple-fuzzied/multiple.man.it.1
@@ -0,0 +1,10 @@
+.\"*******************************************************************
+.\"
+.\" This file was generated with po4a. Translate the source file.
+.\"
+.\"*******************************************************************
+.TH test1 1
+.SH NOME
+test \- solo un test
+
+Ciao
diff --git a/t/cfg/multiple-fuzzied/multiple.pot b/t/cfg/multiple-fuzzied/multiple.pot
new file mode 100644
index 0000000..430a879
--- /dev/null
+++ b/t/cfg/multiple-fuzzied/multiple.pot
@@ -0,0 +1,39 @@
+# SOME DESCRIPTIVE TITLE
+# Copyright (C) YEAR Free Software Foundation, Inc.
+# This file is distributed under the same license as the PACKAGE package.
+# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
+#
+#, fuzzy
+msgid ""
+msgstr ""
+"Project-Id-Version: PACKAGE VERSION\n"
+"POT-Creation-Date: 2020-04-06 02:01+0200\n"
+"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
+"Language-Team: LANGUAGE <LL@li.org>\n"
+"Language: \n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+
+#. type: TH
+#: cfg/single-nopotpo/single.man.1:1
+#, no-wrap
+msgid "test1"
+msgstr ""
+
+#. type: SH
+#: cfg/single-nopotpo/single.man.1:2
+#, no-wrap
+msgid "NAME"
+msgstr ""
+
+#. type: Plain text
+#: cfg/single-nopotpo/single.man.1:4
+msgid "test - just a test"
+msgstr ""
+
+#. type: Plain text
+#: cfg/single-nopotpo/single.man.1:5
+msgid "Hello"
+msgstr ""
diff --git a/t/cfg/multiple-fuzzied/po4a.conf b/t/cfg/multiple-fuzzied/po4a.conf
new file mode 100644
index 0000000..1edb0aa
--- /dev/null
+++ b/t/cfg/multiple-fuzzied/po4a.conf
@@ -0,0 +1,5 @@
+[po4a_langs] fr de es it
+[po4a_paths] multiple.pot $lang:multiple.$lang.po
+[options] opt:"--msgmerge-opt --silent"
+
+[type:man] multiple.man.1 $lang:multiple.man.$lang.1
diff --git a/t/cfg/multiple-fuzzy/_output b/t/cfg/multiple-fuzzy/_output
new file mode 100644
index 0000000..f3f6f7c
--- /dev/null
+++ b/t/cfg/multiple-fuzzy/_output
@@ -0,0 +1,9 @@
+Updating multiple.pot: (4 entries)
+Updating multiple.de.po: 3 translated messages, 1 fuzzy translation.
+Updating multiple.es.po: 3 translated messages, 1 fuzzy translation.
+Updating multiple.fr.po: 3 translated messages, 1 fuzzy translation.
+Updating multiple.it.po: 3 translated messages, 1 fuzzy translation.
+Discard multiple.man.de.1 (3 of 4 strings; only 75% translated; need 80%).
+Discard multiple.man.es.1 (3 of 4 strings; only 75% translated; need 80%).
+Discard multiple.man.fr.1 (3 of 4 strings; only 75% translated; need 80%).
+Discard multiple.man.it.1 (3 of 4 strings; only 75% translated; need 80%).
diff --git a/t/cfg/multiple-fuzzy/multiple.de.po b/t/cfg/multiple-fuzzy/multiple.de.po
new file mode 100644
index 0000000..007c33d
--- /dev/null
+++ b/t/cfg/multiple-fuzzy/multiple.de.po
@@ -0,0 +1,40 @@
+# German translations for po package
+# Copyright (C) 2020 Free Software Foundation, Inc.
+# This file is distributed under the same license as the po package.
+# Automatically generated, 2020.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: po 4a\n"
+"POT-Creation-Date: 2020-04-13 01:07+0200\n"
+"PO-Revision-Date: 2020-04-13 01:07+0200\n"
+"Last-Translator: Automatically generated\n"
+"Language-Team: none\n"
+"Language: de\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+
+#. type: TH
+#: cfg/multiple-nopotpo/multiple.man.1:1
+#, no-wrap
+msgid "test1"
+msgstr "prüfung1"
+
+#. type: SH
+#: cfg/multiple-nopotpo/multiple.man.1:2
+#, no-wrap
+msgid "NAME"
+msgstr "NAME"
+
+#. type: Plain text
+#: cfg/multiple-nopotpo/multiple.man.1:4
+msgid "test - just a test"
+msgstr "prüfung - nur ein Prüfung"
+
+#. type: Plain text
+#: cfg/multiple-nopotpo/multiple.man.1:5
+#, fuzzy
+msgid "Hello"
+msgstr "Hallo"
diff --git a/t/cfg/multiple-fuzzy/multiple.es.po b/t/cfg/multiple-fuzzy/multiple.es.po
new file mode 100644
index 0000000..85415cc
--- /dev/null
+++ b/t/cfg/multiple-fuzzy/multiple.es.po
@@ -0,0 +1,39 @@
+# Spanish translations for po package
+# Copyright (C) 2020 Free Software Foundation, Inc.
+# This file is distributed under the same license as the po package.
+# Automatically generated, 2020.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: po 4a\n"
+"POT-Creation-Date: 2020-04-13 01:08+0200\n"
+"PO-Revision-Date: 2020-04-13 01:08+0200\n"
+"Last-Translator: Automatically generated\n"
+"Language-Team: none\n"
+"Language: es\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+
+#. type: TH
+#: cfg/multiple-nopotpo/multiple.man.1:1
+#, fuzzy, no-wrap
+msgid "test1"
+msgstr "prueba1"
+
+#. type: SH
+#: cfg/multiple-nopotpo/multiple.man.1:2
+#, no-wrap
+msgid "NAME"
+msgstr "NOMBRE"
+
+#. type: Plain text
+#: cfg/multiple-nopotpo/multiple.man.1:4
+msgid "test - just a test"
+msgstr "prueba - solo una prueba"
+
+#. type: Plain text
+#: cfg/multiple-nopotpo/multiple.man.1:5
+msgid "Hello"
+msgstr "Hola"
diff --git a/t/cfg/multiple-fuzzy/multiple.fr.po b/t/cfg/multiple-fuzzy/multiple.fr.po
new file mode 100644
index 0000000..08e8005
--- /dev/null
+++ b/t/cfg/multiple-fuzzy/multiple.fr.po
@@ -0,0 +1,40 @@
+# French translations for po package
+# Copyright (C) 2020 Free Software Foundation, Inc.
+# This file is distributed under the same license as the po package.
+# Automatically generated, 2020.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: po 4a\n"
+"POT-Creation-Date: 2005-04-24 2:54+0200\n"
+"PO-Revision-Date: 2005-04-24 2:54+0200\n"
+"Last-Translator: Automatically generated\n"
+"Language-Team: none\n"
+"Language: fr\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=2; plural=(n > 1);\n"
+
+#. type: TH
+#: t-05-config/test00_man.1:1
+#, no-wrap
+msgid "test1"
+msgstr "test1"
+
+#. type: SH
+#: t-05-config/test00_man.1:2
+#, no-wrap
+msgid "NAME"
+msgstr "NOM"
+
+#. type: Plain text
+#: t-05-config/test00_man.1:4
+#, fuzzy
+msgid "test - just a test"
+msgstr "test - juste un test"
+
+#. type: Plain text
+#: t-05-config/test00_man.1:5
+msgid "Hello"
+msgstr "Bonjour"
diff --git a/t/cfg/multiple-fuzzy/multiple.it.po b/t/cfg/multiple-fuzzy/multiple.it.po
new file mode 100644
index 0000000..055dacc
--- /dev/null
+++ b/t/cfg/multiple-fuzzy/multiple.it.po
@@ -0,0 +1,39 @@
+# Italian translations for po package
+# Copyright (C) 2020 Free Software Foundation, Inc.
+# This file is distributed under the same license as the po package.
+# Automatically generated, 2020.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: po 4a\n"
+"POT-Creation-Date: 2020-04-13 01:08+0200\n"
+"PO-Revision-Date: 2020-04-13 01:08+0200\n"
+"Last-Translator: Automatically generated\n"
+"Language-Team: none\n"
+"Language: it\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+
+#. type: TH
+#: cfg/multiple-nopotpo/multiple.man.1:1
+#, no-wrap
+msgid "test1"
+msgstr "test1"
+
+#. type: SH
+#: cfg/multiple-nopotpo/multiple.man.1:2
+#, fuzzy, no-wrap
+msgid "NAME"
+msgstr "NOME"
+
+#. type: Plain text
+#: cfg/multiple-nopotpo/multiple.man.1:4
+msgid "test - just a test"
+msgstr "test - solo un test"
+
+#. type: Plain text
+#: cfg/multiple-nopotpo/multiple.man.1:5
+msgid "Hello"
+msgstr "Ciao"
diff --git a/t/cfg/multiple-fuzzy/multiple.man.1 b/t/cfg/multiple-fuzzy/multiple.man.1
new file mode 100644
index 0000000..2178e17
--- /dev/null
+++ b/t/cfg/multiple-fuzzy/multiple.man.1
@@ -0,0 +1,5 @@
+.TH test1 1
+.SH NAME
+test \- just a test
+
+Hello
diff --git a/t/cfg/multiple-fuzzy/multiple.man.de.1 b/t/cfg/multiple-fuzzy/multiple.man.de.1
new file mode 100644
index 0000000..870b037
--- /dev/null
+++ b/t/cfg/multiple-fuzzy/multiple.man.de.1
@@ -0,0 +1,10 @@
+.\"*******************************************************************
+.\"
+.\" This file was generated with po4a. Translate the source file.
+.\"
+.\"*******************************************************************
+.TH prüfung1 1
+.SH NAME
+prüfung \- nur ein Prüfung
+
+Hallo
diff --git a/t/cfg/multiple-fuzzy/multiple.man.es.1 b/t/cfg/multiple-fuzzy/multiple.man.es.1
new file mode 100644
index 0000000..091ad34
--- /dev/null
+++ b/t/cfg/multiple-fuzzy/multiple.man.es.1
@@ -0,0 +1,10 @@
+.\"*******************************************************************
+.\"
+.\" This file was generated with po4a. Translate the source file.
+.\"
+.\"*******************************************************************
+.TH prueba1 1
+.SH NOMBRE
+prueba \- solo una prueba
+
+Hola
diff --git a/t/cfg/multiple-fuzzy/multiple.man.fr.1 b/t/cfg/multiple-fuzzy/multiple.man.fr.1
new file mode 100644
index 0000000..873acf4
--- /dev/null
+++ b/t/cfg/multiple-fuzzy/multiple.man.fr.1
@@ -0,0 +1,10 @@
+.\"*******************************************************************
+.\"
+.\" This file was generated with po4a. Translate the source file.
+.\"
+.\"*******************************************************************
+.TH test1 1
+.SH NOM
+test \- juste un test
+
+Bonjour
diff --git a/t/cfg/multiple-fuzzy/multiple.man.it.1 b/t/cfg/multiple-fuzzy/multiple.man.it.1
new file mode 100644
index 0000000..b2cbe40
--- /dev/null
+++ b/t/cfg/multiple-fuzzy/multiple.man.it.1
@@ -0,0 +1,10 @@
+.\"*******************************************************************
+.\"
+.\" This file was generated with po4a. Translate the source file.
+.\"
+.\"*******************************************************************
+.TH test1 1
+.SH NOME
+test \- solo un test
+
+Ciao
diff --git a/t/cfg/multiple-fuzzy/multiple.pot b/t/cfg/multiple-fuzzy/multiple.pot
new file mode 100644
index 0000000..430a879
--- /dev/null
+++ b/t/cfg/multiple-fuzzy/multiple.pot
@@ -0,0 +1,39 @@
+# SOME DESCRIPTIVE TITLE
+# Copyright (C) YEAR Free Software Foundation, Inc.
+# This file is distributed under the same license as the PACKAGE package.
+# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
+#
+#, fuzzy
+msgid ""
+msgstr ""
+"Project-Id-Version: PACKAGE VERSION\n"
+"POT-Creation-Date: 2020-04-06 02:01+0200\n"
+"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
+"Language-Team: LANGUAGE <LL@li.org>\n"
+"Language: \n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+
+#. type: TH
+#: cfg/single-nopotpo/single.man.1:1
+#, no-wrap
+msgid "test1"
+msgstr ""
+
+#. type: SH
+#: cfg/single-nopotpo/single.man.1:2
+#, no-wrap
+msgid "NAME"
+msgstr ""
+
+#. type: Plain text
+#: cfg/single-nopotpo/single.man.1:4
+msgid "test - just a test"
+msgstr ""
+
+#. type: Plain text
+#: cfg/single-nopotpo/single.man.1:5
+msgid "Hello"
+msgstr ""
diff --git a/t/cfg/multiple-fuzzy/po4a.conf b/t/cfg/multiple-fuzzy/po4a.conf
new file mode 100644
index 0000000..1edb0aa
--- /dev/null
+++ b/t/cfg/multiple-fuzzy/po4a.conf
@@ -0,0 +1,5 @@
+[po4a_langs] fr de es it
+[po4a_paths] multiple.pot $lang:multiple.$lang.po
+[options] opt:"--msgmerge-opt --silent"
+
+[type:man] multiple.man.1 $lang:multiple.man.$lang.1
diff --git a/t/cfg/multiple-newstr/_multiple.de.po b/t/cfg/multiple-newstr/_multiple.de.po
new file mode 100644
index 0000000..bbc9e13
--- /dev/null
+++ b/t/cfg/multiple-newstr/_multiple.de.po
@@ -0,0 +1,45 @@
+# German translations for po package
+# Copyright (C) 2020 Free Software Foundation, Inc.
+# This file is distributed under the same license as the po package.
+# Automatically generated, 2020.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: po 4a\n"
+"POT-Creation-Date: 2020-04-17 00:46+0200\n"
+"PO-Revision-Date: 2020-04-13 01:07+0200\n"
+"Last-Translator: Automatically generated\n"
+"Language-Team: none\n"
+"Language: de\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+
+#. type: TH
+#: multiple.man.1:1
+#, no-wrap
+msgid "test1"
+msgstr "prüfung1"
+
+#. type: SH
+#: multiple.man.1:2
+#, no-wrap
+msgid "NAME"
+msgstr "NAME"
+
+#. type: Plain text
+#: multiple.man.1:4
+msgid "test - just a test"
+msgstr "prüfung - nur ein Prüfung"
+
+#. type: Plain text
+#: multiple.man.1:6
+msgid "Hello"
+msgstr "Hallo"
+
+#. type: SH
+#: multiple.man.1:7
+#, no-wrap
+msgid "MORE CONTENT"
+msgstr ""
diff --git a/t/cfg/multiple-newstr/_multiple.es.po b/t/cfg/multiple-newstr/_multiple.es.po
new file mode 100644
index 0000000..e1d5d61
--- /dev/null
+++ b/t/cfg/multiple-newstr/_multiple.es.po
@@ -0,0 +1,45 @@
+# Spanish translations for po package
+# Copyright (C) 2020 Free Software Foundation, Inc.
+# This file is distributed under the same license as the po package.
+# Automatically generated, 2020.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: po 4a\n"
+"POT-Creation-Date: 2020-04-17 00:46+0200\n"
+"PO-Revision-Date: 2020-04-13 01:08+0200\n"
+"Last-Translator: Automatically generated\n"
+"Language-Team: none\n"
+"Language: es\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+
+#. type: TH
+#: multiple.man.1:1
+#, no-wrap
+msgid "test1"
+msgstr "prueba1"
+
+#. type: SH
+#: multiple.man.1:2
+#, no-wrap
+msgid "NAME"
+msgstr "NOMBRE"
+
+#. type: Plain text
+#: multiple.man.1:4
+msgid "test - just a test"
+msgstr "prueba - solo una prueba"
+
+#. type: Plain text
+#: multiple.man.1:6
+msgid "Hello"
+msgstr "Hola"
+
+#. type: SH
+#: multiple.man.1:7
+#, no-wrap
+msgid "MORE CONTENT"
+msgstr ""
diff --git a/t/cfg/multiple-newstr/_multiple.fr.po b/t/cfg/multiple-newstr/_multiple.fr.po
new file mode 100644
index 0000000..a1085f7
--- /dev/null
+++ b/t/cfg/multiple-newstr/_multiple.fr.po
@@ -0,0 +1,45 @@
+# French translations for po package
+# Copyright (C) 2020 Free Software Foundation, Inc.
+# This file is distributed under the same license as the po package.
+# Automatically generated, 2020.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: po 4a\n"
+"POT-Creation-Date: 2020-04-17 00:48+0200\n"
+"PO-Revision-Date: 2005-04-24 2:54+0200\n"
+"Last-Translator: Automatically generated\n"
+"Language-Team: none\n"
+"Language: fr\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=2; plural=(n > 1);\n"
+
+#. type: TH
+#: multiple.man.1:1
+#, no-wrap
+msgid "test1"
+msgstr "test1"
+
+#. type: SH
+#: multiple.man.1:2
+#, no-wrap
+msgid "NAME"
+msgstr "NOM"
+
+#. type: Plain text
+#: multiple.man.1:4
+msgid "test - just a test"
+msgstr "test - juste un test"
+
+#. type: Plain text
+#: multiple.man.1:6
+msgid "Hello"
+msgstr "Bonjour"
+
+#. type: SH
+#: multiple.man.1:7
+#, no-wrap
+msgid "MORE CONTENT"
+msgstr ""
diff --git a/t/cfg/multiple-newstr/_multiple.it.po b/t/cfg/multiple-newstr/_multiple.it.po
new file mode 100644
index 0000000..69f981f
--- /dev/null
+++ b/t/cfg/multiple-newstr/_multiple.it.po
@@ -0,0 +1,45 @@
+# Italian translations for po package
+# Copyright (C) 2020 Free Software Foundation, Inc.
+# This file is distributed under the same license as the po package.
+# Automatically generated, 2020.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: po 4a\n"
+"POT-Creation-Date: 2020-04-17 00:48+0200\n"
+"PO-Revision-Date: 2020-04-13 01:08+0200\n"
+"Last-Translator: Automatically generated\n"
+"Language-Team: none\n"
+"Language: it\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+
+#. type: TH
+#: multiple.man.1:1
+#, no-wrap
+msgid "test1"
+msgstr "test1"
+
+#. type: SH
+#: multiple.man.1:2
+#, no-wrap
+msgid "NAME"
+msgstr "NOME"
+
+#. type: Plain text
+#: multiple.man.1:4
+msgid "test - just a test"
+msgstr "test - solo un test"
+
+#. type: Plain text
+#: multiple.man.1:6
+msgid "Hello"
+msgstr "Ciao"
+
+#. type: SH
+#: multiple.man.1:7
+#, no-wrap
+msgid "MORE CONTENT"
+msgstr ""
diff --git a/t/cfg/multiple-newstr/_output b/t/cfg/multiple-newstr/_output
new file mode 100644
index 0000000..12899f9
--- /dev/null
+++ b/t/cfg/multiple-newstr/_output
@@ -0,0 +1,9 @@
+Updating multiple.pot: (5 entries)
+Updating multiple.de.po: 4 translated messages, 1 untranslated message.
+Updating multiple.es.po: 4 translated messages, 1 untranslated message.
+Updating multiple.fr.po: 4 translated messages, 1 untranslated message.
+Updating multiple.it.po: 4 translated messages, 1 untranslated message.
+multiple.man.de.1 is 80% translated (4 of 5 strings).
+multiple.man.es.1 is 80% translated (4 of 5 strings).
+multiple.man.fr.1 is 80% translated (4 of 5 strings).
+multiple.man.it.1 is 80% translated (4 of 5 strings).
diff --git a/t/cfg/multiple-newstr/multiple.de.po b/t/cfg/multiple-newstr/multiple.de.po
new file mode 100644
index 0000000..bbc2baa
--- /dev/null
+++ b/t/cfg/multiple-newstr/multiple.de.po
@@ -0,0 +1,39 @@
+# German translations for po package
+# Copyright (C) 2020 Free Software Foundation, Inc.
+# This file is distributed under the same license as the po package.
+# Automatically generated, 2020.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: po 4a\n"
+"POT-Creation-Date: 2020-04-17 00:45+0200\n"
+"PO-Revision-Date: 2020-04-13 01:07+0200\n"
+"Last-Translator: Automatically generated\n"
+"Language-Team: none\n"
+"Language: de\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+
+#. type: TH
+#: multiple.man.1:1
+#, no-wrap
+msgid "test1"
+msgstr "prüfung1"
+
+#. type: SH
+#: multiple.man.1:2
+#, no-wrap
+msgid "NAME"
+msgstr "NAME"
+
+#. type: Plain text
+#: multiple.man.1:4
+msgid "test - just a test"
+msgstr "prüfung - nur ein Prüfung"
+
+#. type: Plain text
+#: multiple.man.1:6
+msgid "Hello"
+msgstr "Hallo"
diff --git a/t/cfg/multiple-newstr/multiple.es.po b/t/cfg/multiple-newstr/multiple.es.po
new file mode 100644
index 0000000..19a3bcc
--- /dev/null
+++ b/t/cfg/multiple-newstr/multiple.es.po
@@ -0,0 +1,39 @@
+# Spanish translations for po package
+# Copyright (C) 2020 Free Software Foundation, Inc.
+# This file is distributed under the same license as the po package.
+# Automatically generated, 2020.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: po 4a\n"
+"POT-Creation-Date: 2020-04-13 01:08+0200\n"
+"PO-Revision-Date: 2020-04-13 01:08+0200\n"
+"Last-Translator: Automatically generated\n"
+"Language-Team: none\n"
+"Language: es\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+
+#. type: TH
+#: cfg/multiple-nopotpo/multiple.man.1:1
+#, no-wrap
+msgid "test1"
+msgstr "prueba1"
+
+#. type: SH
+#: cfg/multiple-nopotpo/multiple.man.1:2
+#, no-wrap
+msgid "NAME"
+msgstr "NOMBRE"
+
+#. type: Plain text
+#: cfg/multiple-nopotpo/multiple.man.1:4
+msgid "test - just a test"
+msgstr "prueba - solo una prueba"
+
+#. type: Plain text
+#: cfg/multiple-nopotpo/multiple.man.1:5
+msgid "Hello"
+msgstr "Hola"
diff --git a/t/cfg/multiple-newstr/multiple.fr.po b/t/cfg/multiple-newstr/multiple.fr.po
new file mode 100644
index 0000000..c1e3251
--- /dev/null
+++ b/t/cfg/multiple-newstr/multiple.fr.po
@@ -0,0 +1,39 @@
+# French translations for po package
+# Copyright (C) 2020 Free Software Foundation, Inc.
+# This file is distributed under the same license as the po package.
+# Automatically generated, 2020.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: po 4a\n"
+"POT-Creation-Date: 2005-04-24 2:54+0200\n"
+"PO-Revision-Date: 2005-04-24 2:54+0200\n"
+"Last-Translator: Automatically generated\n"
+"Language-Team: none\n"
+"Language: fr\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=2; plural=(n > 1);\n"
+
+#. type: TH
+#: t-05-config/test00_man.1:1
+#, no-wrap
+msgid "test1"
+msgstr "test1"
+
+#. type: SH
+#: t-05-config/test00_man.1:2
+#, no-wrap
+msgid "NAME"
+msgstr "NOM"
+
+#. type: Plain text
+#: t-05-config/test00_man.1:4
+msgid "test - just a test"
+msgstr "test - juste un test"
+
+#. type: Plain text
+#: t-05-config/test00_man.1:5
+msgid "Hello"
+msgstr "Bonjour"
diff --git a/t/cfg/multiple-newstr/multiple.it.po b/t/cfg/multiple-newstr/multiple.it.po
new file mode 100644
index 0000000..f45e1db
--- /dev/null
+++ b/t/cfg/multiple-newstr/multiple.it.po
@@ -0,0 +1,39 @@
+# Italian translations for po package
+# Copyright (C) 2020 Free Software Foundation, Inc.
+# This file is distributed under the same license as the po package.
+# Automatically generated, 2020.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: po 4a\n"
+"POT-Creation-Date: 2020-04-13 01:08+0200\n"
+"PO-Revision-Date: 2020-04-13 01:08+0200\n"
+"Last-Translator: Automatically generated\n"
+"Language-Team: none\n"
+"Language: it\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+
+#. type: TH
+#: cfg/multiple-nopotpo/multiple.man.1:1
+#, no-wrap
+msgid "test1"
+msgstr "test1"
+
+#. type: SH
+#: cfg/multiple-nopotpo/multiple.man.1:2
+#, no-wrap
+msgid "NAME"
+msgstr "NOME"
+
+#. type: Plain text
+#: cfg/multiple-nopotpo/multiple.man.1:4
+msgid "test - just a test"
+msgstr "test - solo un test"
+
+#. type: Plain text
+#: cfg/multiple-nopotpo/multiple.man.1:5
+msgid "Hello"
+msgstr "Ciao"
diff --git a/t/cfg/multiple-newstr/multiple.man.1 b/t/cfg/multiple-newstr/multiple.man.1
new file mode 100644
index 0000000..91da24d
--- /dev/null
+++ b/t/cfg/multiple-newstr/multiple.man.1
@@ -0,0 +1,7 @@
+.TH test1 1
+.SH NAME
+test \- just a test
+
+Hello
+
+.SH MORE CONTENT
diff --git a/t/cfg/multiple-newstr/multiple.man.de.1 b/t/cfg/multiple-newstr/multiple.man.de.1
new file mode 100644
index 0000000..1195118
--- /dev/null
+++ b/t/cfg/multiple-newstr/multiple.man.de.1
@@ -0,0 +1,12 @@
+.\"*******************************************************************
+.\"
+.\" This file was generated with po4a. Translate the source file.
+.\"
+.\"*******************************************************************
+.TH prüfung1 1
+.SH NAME
+prüfung \- nur ein Prüfung
+
+Hallo
+
+.SH "MORE CONTENT"
diff --git a/t/cfg/multiple-newstr/multiple.man.es.1 b/t/cfg/multiple-newstr/multiple.man.es.1
new file mode 100644
index 0000000..671c413
--- /dev/null
+++ b/t/cfg/multiple-newstr/multiple.man.es.1
@@ -0,0 +1,12 @@
+.\"*******************************************************************
+.\"
+.\" This file was generated with po4a. Translate the source file.
+.\"
+.\"*******************************************************************
+.TH prueba1 1
+.SH NOMBRE
+prueba \- solo una prueba
+
+Hola
+
+.SH "MORE CONTENT"
diff --git a/t/cfg/multiple-newstr/multiple.man.fr.1 b/t/cfg/multiple-newstr/multiple.man.fr.1
new file mode 100644
index 0000000..4dea14d
--- /dev/null
+++ b/t/cfg/multiple-newstr/multiple.man.fr.1
@@ -0,0 +1,12 @@
+.\"*******************************************************************
+.\"
+.\" This file was generated with po4a. Translate the source file.
+.\"
+.\"*******************************************************************
+.TH test1 1
+.SH NOM
+test \- juste un test
+
+Bonjour
+
+.SH "MORE CONTENT"
diff --git a/t/cfg/multiple-newstr/multiple.man.it.1 b/t/cfg/multiple-newstr/multiple.man.it.1
new file mode 100644
index 0000000..511b35a
--- /dev/null
+++ b/t/cfg/multiple-newstr/multiple.man.it.1
@@ -0,0 +1,12 @@
+.\"*******************************************************************
+.\"
+.\" This file was generated with po4a. Translate the source file.
+.\"
+.\"*******************************************************************
+.TH test1 1
+.SH NOME
+test \- solo un test
+
+Ciao
+
+.SH "MORE CONTENT"
diff --git a/t/cfg/multiple-newstr/multiple.pot b/t/cfg/multiple-newstr/multiple.pot
new file mode 100644
index 0000000..dd05b89
--- /dev/null
+++ b/t/cfg/multiple-newstr/multiple.pot
@@ -0,0 +1,45 @@
+# SOME DESCRIPTIVE TITLE
+# Copyright (C) YEAR Free Software Foundation, Inc.
+# This file is distributed under the same license as the PACKAGE package.
+# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
+#
+#, fuzzy
+msgid ""
+msgstr ""
+"Project-Id-Version: PACKAGE VERSION\n"
+"POT-Creation-Date: 2020-04-06 02:01+0200\n"
+"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
+"Language-Team: LANGUAGE <LL@li.org>\n"
+"Language: \n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+
+#. type: TH
+#: cfg/single-nopotpo/single.man.1:1
+#, no-wrap
+msgid "test1"
+msgstr ""
+
+#. type: SH
+#: cfg/single-nopotpo/single.man.1:2
+#, no-wrap
+msgid "NAME"
+msgstr ""
+
+#. type: Plain text
+#: cfg/single-nopotpo/single.man.1:4
+msgid "test - just a test"
+msgstr ""
+
+#. type: Plain text
+#: cfg/single-nopotpo/single.man.1:5
+msgid "Hello"
+msgstr ""
+
+#. type: SH
+#: multiple.man.1:7
+#, no-wrap
+msgid "MORE CONTENT"
+msgstr ""
diff --git a/t/cfg/multiple-newstr/po4a.conf b/t/cfg/multiple-newstr/po4a.conf
new file mode 100644
index 0000000..1edb0aa
--- /dev/null
+++ b/t/cfg/multiple-newstr/po4a.conf
@@ -0,0 +1,5 @@
+[po4a_langs] fr de es it
+[po4a_paths] multiple.pot $lang:multiple.$lang.po
+[options] opt:"--msgmerge-opt --silent"
+
+[type:man] multiple.man.1 $lang:multiple.man.$lang.1
diff --git a/t/cfg/multiple-nopo/_multiple.de.po b/t/cfg/multiple-nopo/_multiple.de.po
new file mode 100644
index 0000000..073f261
--- /dev/null
+++ b/t/cfg/multiple-nopo/_multiple.de.po
@@ -0,0 +1,39 @@
+# German translations for po package
+# Copyright (C) 2020 Free Software Foundation, Inc.
+# This file is distributed under the same license as the po package.
+# Automatically generated, 2020.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: po 4a\n"
+"POT-Creation-Date: 2020-04-13 01:07+0200\n"
+"PO-Revision-Date: 2020-04-13 01:07+0200\n"
+"Last-Translator: Automatically generated\n"
+"Language-Team: none\n"
+"Language: de\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+
+#. type: TH
+#: cfg/multiple-nopotpo/multiple.man.1:1
+#, no-wrap
+msgid "test1"
+msgstr ""
+
+#. type: SH
+#: cfg/multiple-nopotpo/multiple.man.1:2
+#, no-wrap
+msgid "NAME"
+msgstr ""
+
+#. type: Plain text
+#: cfg/multiple-nopotpo/multiple.man.1:4
+msgid "test - just a test"
+msgstr ""
+
+#. type: Plain text
+#: cfg/multiple-nopotpo/multiple.man.1:5
+msgid "Hello"
+msgstr ""
diff --git a/t/cfg/multiple-nopo/_multiple.es.po b/t/cfg/multiple-nopo/_multiple.es.po
new file mode 100644
index 0000000..d33f627
--- /dev/null
+++ b/t/cfg/multiple-nopo/_multiple.es.po
@@ -0,0 +1,39 @@
+# Spanish translations for po package
+# Copyright (C) 2020 Free Software Foundation, Inc.
+# This file is distributed under the same license as the po package.
+# Automatically generated, 2020.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: po 4a\n"
+"POT-Creation-Date: 2020-04-13 01:08+0200\n"
+"PO-Revision-Date: 2020-04-13 01:08+0200\n"
+"Last-Translator: Automatically generated\n"
+"Language-Team: none\n"
+"Language: es\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+
+#. type: TH
+#: cfg/multiple-nopotpo/multiple.man.1:1
+#, no-wrap
+msgid "test1"
+msgstr ""
+
+#. type: SH
+#: cfg/multiple-nopotpo/multiple.man.1:2
+#, no-wrap
+msgid "NAME"
+msgstr ""
+
+#. type: Plain text
+#: cfg/multiple-nopotpo/multiple.man.1:4
+msgid "test - just a test"
+msgstr ""
+
+#. type: Plain text
+#: cfg/multiple-nopotpo/multiple.man.1:5
+msgid "Hello"
+msgstr ""
diff --git a/t/cfg/multiple-nopo/_multiple.fr.po b/t/cfg/multiple-nopo/_multiple.fr.po
new file mode 100644
index 0000000..1772779
--- /dev/null
+++ b/t/cfg/multiple-nopo/_multiple.fr.po
@@ -0,0 +1,39 @@
+# French translations for po package
+# Copyright (C) 2020 Free Software Foundation, Inc.
+# This file is distributed under the same license as the po package.
+# Automatically generated, 2020.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: po 4a\n"
+"POT-Creation-Date: 2005-04-24 2:54+0200\n"
+"PO-Revision-Date: 2005-04-24 2:54+0200\n"
+"Last-Translator: Automatically generated\n"
+"Language-Team: none\n"
+"Language: fr\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=2; plural=(n > 1);\n"
+
+#. type: TH
+#: t-05-config/test00_man.1:1
+#, no-wrap
+msgid "test1"
+msgstr ""
+
+#. type: SH
+#: t-05-config/test00_man.1:2
+#, no-wrap
+msgid "NAME"
+msgstr ""
+
+#. type: Plain text
+#: t-05-config/test00_man.1:4
+msgid "test - just a test"
+msgstr ""
+
+#. type: Plain text
+#: t-05-config/test00_man.1:5
+msgid "Hello"
+msgstr ""
diff --git a/t/cfg/multiple-nopo/_multiple.it.po b/t/cfg/multiple-nopo/_multiple.it.po
new file mode 100644
index 0000000..7182364
--- /dev/null
+++ b/t/cfg/multiple-nopo/_multiple.it.po
@@ -0,0 +1,39 @@
+# Italian translations for po package
+# Copyright (C) 2020 Free Software Foundation, Inc.
+# This file is distributed under the same license as the po package.
+# Automatically generated, 2020.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: po 4a\n"
+"POT-Creation-Date: 2020-04-13 01:08+0200\n"
+"PO-Revision-Date: 2020-04-13 01:08+0200\n"
+"Last-Translator: Automatically generated\n"
+"Language-Team: none\n"
+"Language: it\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+
+#. type: TH
+#: cfg/multiple-nopotpo/multiple.man.1:1
+#, no-wrap
+msgid "test1"
+msgstr ""
+
+#. type: SH
+#: cfg/multiple-nopotpo/multiple.man.1:2
+#, no-wrap
+msgid "NAME"
+msgstr ""
+
+#. type: Plain text
+#: cfg/multiple-nopotpo/multiple.man.1:4
+msgid "test - just a test"
+msgstr ""
+
+#. type: Plain text
+#: cfg/multiple-nopotpo/multiple.man.1:5
+msgid "Hello"
+msgstr ""
diff --git a/t/cfg/multiple-nopo/_output b/t/cfg/multiple-nopo/_output
new file mode 100644
index 0000000..f3b2472
--- /dev/null
+++ b/t/cfg/multiple-nopo/_output
@@ -0,0 +1,9 @@
+Updating multiple.pot: (4 entries)
+Creating an empty PO file in multiple.de.po.
+Creating an empty PO file in multiple.es.po.
+Creating an empty PO file in multiple.fr.po.
+Creating an empty PO file in multiple.it.po.
+Discard multiple.man.de.1 (0 of 4 strings; only 0% translated; need 80%).
+Discard multiple.man.es.1 (0 of 4 strings; only 0% translated; need 80%).
+Discard multiple.man.fr.1 (0 of 4 strings; only 0% translated; need 80%).
+Discard multiple.man.it.1 (0 of 4 strings; only 0% translated; need 80%).
diff --git a/t/cfg/multiple-nopo/_output-noupdate b/t/cfg/multiple-nopo/_output-noupdate
new file mode 100644
index 0000000..d3cc84a
--- /dev/null
+++ b/t/cfg/multiple-nopo/_output-noupdate
@@ -0,0 +1,6 @@
+NOT updating multiple.pot as requested (--no-update).
+NOT updating the POT file multiple.pot as requested (--no-update).
+PO file multiple.de.po for language de is missing -- skipping.
+PO file multiple.es.po for language es is missing -- skipping.
+PO file multiple.fr.po for language fr is missing -- skipping.
+PO file multiple.it.po for language it is missing -- skipping.
diff --git a/t/cfg/multiple-nopo/multiple.man.1 b/t/cfg/multiple-nopo/multiple.man.1
new file mode 100644
index 0000000..2178e17
--- /dev/null
+++ b/t/cfg/multiple-nopo/multiple.man.1
@@ -0,0 +1,5 @@
+.TH test1 1
+.SH NAME
+test \- just a test
+
+Hello
diff --git a/t/cfg/multiple-nopo/multiple.pot b/t/cfg/multiple-nopo/multiple.pot
new file mode 100644
index 0000000..430a879
--- /dev/null
+++ b/t/cfg/multiple-nopo/multiple.pot
@@ -0,0 +1,39 @@
+# SOME DESCRIPTIVE TITLE
+# Copyright (C) YEAR Free Software Foundation, Inc.
+# This file is distributed under the same license as the PACKAGE package.
+# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
+#
+#, fuzzy
+msgid ""
+msgstr ""
+"Project-Id-Version: PACKAGE VERSION\n"
+"POT-Creation-Date: 2020-04-06 02:01+0200\n"
+"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
+"Language-Team: LANGUAGE <LL@li.org>\n"
+"Language: \n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+
+#. type: TH
+#: cfg/single-nopotpo/single.man.1:1
+#, no-wrap
+msgid "test1"
+msgstr ""
+
+#. type: SH
+#: cfg/single-nopotpo/single.man.1:2
+#, no-wrap
+msgid "NAME"
+msgstr ""
+
+#. type: Plain text
+#: cfg/single-nopotpo/single.man.1:4
+msgid "test - just a test"
+msgstr ""
+
+#. type: Plain text
+#: cfg/single-nopotpo/single.man.1:5
+msgid "Hello"
+msgstr ""
diff --git a/t/cfg/multiple-nopo/po4a.conf b/t/cfg/multiple-nopo/po4a.conf
new file mode 100644
index 0000000..1edb0aa
--- /dev/null
+++ b/t/cfg/multiple-nopo/po4a.conf
@@ -0,0 +1,5 @@
+[po4a_langs] fr de es it
+[po4a_paths] multiple.pot $lang:multiple.$lang.po
+[options] opt:"--msgmerge-opt --silent"
+
+[type:man] multiple.man.1 $lang:multiple.man.$lang.1
diff --git a/t/cfg/multiple-nopotpo/_multiple.de.po b/t/cfg/multiple-nopotpo/_multiple.de.po
new file mode 100644
index 0000000..073f261
--- /dev/null
+++ b/t/cfg/multiple-nopotpo/_multiple.de.po
@@ -0,0 +1,39 @@
+# German translations for po package
+# Copyright (C) 2020 Free Software Foundation, Inc.
+# This file is distributed under the same license as the po package.
+# Automatically generated, 2020.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: po 4a\n"
+"POT-Creation-Date: 2020-04-13 01:07+0200\n"
+"PO-Revision-Date: 2020-04-13 01:07+0200\n"
+"Last-Translator: Automatically generated\n"
+"Language-Team: none\n"
+"Language: de\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+
+#. type: TH
+#: cfg/multiple-nopotpo/multiple.man.1:1
+#, no-wrap
+msgid "test1"
+msgstr ""
+
+#. type: SH
+#: cfg/multiple-nopotpo/multiple.man.1:2
+#, no-wrap
+msgid "NAME"
+msgstr ""
+
+#. type: Plain text
+#: cfg/multiple-nopotpo/multiple.man.1:4
+msgid "test - just a test"
+msgstr ""
+
+#. type: Plain text
+#: cfg/multiple-nopotpo/multiple.man.1:5
+msgid "Hello"
+msgstr ""
diff --git a/t/cfg/multiple-nopotpo/_multiple.es.po b/t/cfg/multiple-nopotpo/_multiple.es.po
new file mode 100644
index 0000000..d33f627
--- /dev/null
+++ b/t/cfg/multiple-nopotpo/_multiple.es.po
@@ -0,0 +1,39 @@
+# Spanish translations for po package
+# Copyright (C) 2020 Free Software Foundation, Inc.
+# This file is distributed under the same license as the po package.
+# Automatically generated, 2020.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: po 4a\n"
+"POT-Creation-Date: 2020-04-13 01:08+0200\n"
+"PO-Revision-Date: 2020-04-13 01:08+0200\n"
+"Last-Translator: Automatically generated\n"
+"Language-Team: none\n"
+"Language: es\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+
+#. type: TH
+#: cfg/multiple-nopotpo/multiple.man.1:1
+#, no-wrap
+msgid "test1"
+msgstr ""
+
+#. type: SH
+#: cfg/multiple-nopotpo/multiple.man.1:2
+#, no-wrap
+msgid "NAME"
+msgstr ""
+
+#. type: Plain text
+#: cfg/multiple-nopotpo/multiple.man.1:4
+msgid "test - just a test"
+msgstr ""
+
+#. type: Plain text
+#: cfg/multiple-nopotpo/multiple.man.1:5
+msgid "Hello"
+msgstr ""
diff --git a/t/cfg/multiple-nopotpo/_multiple.fr.po b/t/cfg/multiple-nopotpo/_multiple.fr.po
new file mode 100644
index 0000000..1772779
--- /dev/null
+++ b/t/cfg/multiple-nopotpo/_multiple.fr.po
@@ -0,0 +1,39 @@
+# French translations for po package
+# Copyright (C) 2020 Free Software Foundation, Inc.
+# This file is distributed under the same license as the po package.
+# Automatically generated, 2020.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: po 4a\n"
+"POT-Creation-Date: 2005-04-24 2:54+0200\n"
+"PO-Revision-Date: 2005-04-24 2:54+0200\n"
+"Last-Translator: Automatically generated\n"
+"Language-Team: none\n"
+"Language: fr\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=2; plural=(n > 1);\n"
+
+#. type: TH
+#: t-05-config/test00_man.1:1
+#, no-wrap
+msgid "test1"
+msgstr ""
+
+#. type: SH
+#: t-05-config/test00_man.1:2
+#, no-wrap
+msgid "NAME"
+msgstr ""
+
+#. type: Plain text
+#: t-05-config/test00_man.1:4
+msgid "test - just a test"
+msgstr ""
+
+#. type: Plain text
+#: t-05-config/test00_man.1:5
+msgid "Hello"
+msgstr ""
diff --git a/t/cfg/multiple-nopotpo/_multiple.it.po b/t/cfg/multiple-nopotpo/_multiple.it.po
new file mode 100644
index 0000000..7182364
--- /dev/null
+++ b/t/cfg/multiple-nopotpo/_multiple.it.po
@@ -0,0 +1,39 @@
+# Italian translations for po package
+# Copyright (C) 2020 Free Software Foundation, Inc.
+# This file is distributed under the same license as the po package.
+# Automatically generated, 2020.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: po 4a\n"
+"POT-Creation-Date: 2020-04-13 01:08+0200\n"
+"PO-Revision-Date: 2020-04-13 01:08+0200\n"
+"Last-Translator: Automatically generated\n"
+"Language-Team: none\n"
+"Language: it\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+
+#. type: TH
+#: cfg/multiple-nopotpo/multiple.man.1:1
+#, no-wrap
+msgid "test1"
+msgstr ""
+
+#. type: SH
+#: cfg/multiple-nopotpo/multiple.man.1:2
+#, no-wrap
+msgid "NAME"
+msgstr ""
+
+#. type: Plain text
+#: cfg/multiple-nopotpo/multiple.man.1:4
+msgid "test - just a test"
+msgstr ""
+
+#. type: Plain text
+#: cfg/multiple-nopotpo/multiple.man.1:5
+msgid "Hello"
+msgstr ""
diff --git a/t/cfg/multiple-nopotpo/_multiple.pot b/t/cfg/multiple-nopotpo/_multiple.pot
new file mode 100644
index 0000000..430a879
--- /dev/null
+++ b/t/cfg/multiple-nopotpo/_multiple.pot
@@ -0,0 +1,39 @@
+# SOME DESCRIPTIVE TITLE
+# Copyright (C) YEAR Free Software Foundation, Inc.
+# This file is distributed under the same license as the PACKAGE package.
+# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
+#
+#, fuzzy
+msgid ""
+msgstr ""
+"Project-Id-Version: PACKAGE VERSION\n"
+"POT-Creation-Date: 2020-04-06 02:01+0200\n"
+"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
+"Language-Team: LANGUAGE <LL@li.org>\n"
+"Language: \n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+
+#. type: TH
+#: cfg/single-nopotpo/single.man.1:1
+#, no-wrap
+msgid "test1"
+msgstr ""
+
+#. type: SH
+#: cfg/single-nopotpo/single.man.1:2
+#, no-wrap
+msgid "NAME"
+msgstr ""
+
+#. type: Plain text
+#: cfg/single-nopotpo/single.man.1:4
+msgid "test - just a test"
+msgstr ""
+
+#. type: Plain text
+#: cfg/single-nopotpo/single.man.1:5
+msgid "Hello"
+msgstr ""
diff --git a/t/cfg/multiple-nopotpo/_output b/t/cfg/multiple-nopotpo/_output
new file mode 100644
index 0000000..35ab217
--- /dev/null
+++ b/t/cfg/multiple-nopotpo/_output
@@ -0,0 +1,9 @@
+Creating multiple.pot: (4 entries)
+Creating an empty PO file in multiple.de.po.
+Creating an empty PO file in multiple.es.po.
+Creating an empty PO file in multiple.fr.po.
+Creating an empty PO file in multiple.it.po.
+Discard multiple.man.de.1 (0 of 4 strings; only 0% translated; need 80%).
+Discard multiple.man.es.1 (0 of 4 strings; only 0% translated; need 80%).
+Discard multiple.man.fr.1 (0 of 4 strings; only 0% translated; need 80%).
+Discard multiple.man.it.1 (0 of 4 strings; only 0% translated; need 80%).
diff --git a/t/cfg/multiple-nopotpo/multiple.man.1 b/t/cfg/multiple-nopotpo/multiple.man.1
new file mode 100644
index 0000000..2178e17
--- /dev/null
+++ b/t/cfg/multiple-nopotpo/multiple.man.1
@@ -0,0 +1,5 @@
+.TH test1 1
+.SH NAME
+test \- just a test
+
+Hello
diff --git a/t/cfg/multiple-nopotpo/po4a.conf b/t/cfg/multiple-nopotpo/po4a.conf
new file mode 100644
index 0000000..1edb0aa
--- /dev/null
+++ b/t/cfg/multiple-nopotpo/po4a.conf
@@ -0,0 +1,5 @@
+[po4a_langs] fr de es it
+[po4a_paths] multiple.pot $lang:multiple.$lang.po
+[options] opt:"--msgmerge-opt --silent"
+
+[type:man] multiple.man.1 $lang:multiple.man.$lang.1
diff --git a/t/cfg/multiple-potin/_multiple.man.de.1 b/t/cfg/multiple-potin/_multiple.man.de.1
new file mode 100644
index 0000000..f457911
--- /dev/null
+++ b/t/cfg/multiple-potin/_multiple.man.de.1
@@ -0,0 +1,14 @@
+.\"*******************************************************************
+.\"
+.\" This file was generated with po4a. Translate the source file.
+.\"
+.\"*******************************************************************
+.TH prüfung1 1
+.SH NAME
+prüfung \- nur ein Prüfung
+
+Hallo
+
+.SH "Not Translated"
+
+This section should not end up in the PO files to not get translated.
diff --git a/t/cfg/multiple-potin/_multiple.man.es.1 b/t/cfg/multiple-potin/_multiple.man.es.1
new file mode 100644
index 0000000..53e5d48
--- /dev/null
+++ b/t/cfg/multiple-potin/_multiple.man.es.1
@@ -0,0 +1,14 @@
+.\"*******************************************************************
+.\"
+.\" This file was generated with po4a. Translate the source file.
+.\"
+.\"*******************************************************************
+.TH prueba1 1
+.SH NOMBRE
+prueba \- solo una prueba
+
+Hola
+
+.SH "Not Translated"
+
+This section should not end up in the PO files to not get translated.
diff --git a/t/cfg/multiple-potin/_multiple.man.fr.1 b/t/cfg/multiple-potin/_multiple.man.fr.1
new file mode 100644
index 0000000..aa99aaf
--- /dev/null
+++ b/t/cfg/multiple-potin/_multiple.man.fr.1
@@ -0,0 +1,14 @@
+.\"*******************************************************************
+.\"
+.\" This file was generated with po4a. Translate the source file.
+.\"
+.\"*******************************************************************
+.TH test1 1
+.SH NOM
+test \- juste un test
+
+Bonjour
+
+.SH "Not Translated"
+
+This section should not end up in the PO files to not get translated.
diff --git a/t/cfg/multiple-potin/_multiple.man.it.1 b/t/cfg/multiple-potin/_multiple.man.it.1
new file mode 100644
index 0000000..b7c5630
--- /dev/null
+++ b/t/cfg/multiple-potin/_multiple.man.it.1
@@ -0,0 +1,14 @@
+.\"*******************************************************************
+.\"
+.\" This file was generated with po4a. Translate the source file.
+.\"
+.\"*******************************************************************
+.TH test1 1
+.SH NOME
+test \- solo un test
+
+Ciao
+
+.SH "Not Translated"
+
+This section should not end up in the PO files to not get translated.
diff --git a/t/cfg/multiple-potin/_output b/t/cfg/multiple-potin/_output
new file mode 100644
index 0000000..dbe898c
--- /dev/null
+++ b/t/cfg/multiple-potin/_output
@@ -0,0 +1,9 @@
+Updating multiple.pot: (4 entries)
+Updating multiple.de.po: 4 translated messages.
+Updating multiple.es.po: 4 translated messages.
+Updating multiple.fr.po: 4 translated messages.
+Updating multiple.it.po: 4 translated messages.
+multiple.man.de.1 is 66.66% translated (4 of 6 strings).
+multiple.man.es.1 is 66.66% translated (4 of 6 strings).
+multiple.man.fr.1 is 66.66% translated (4 of 6 strings).
+multiple.man.it.1 is 66.66% translated (4 of 6 strings).
diff --git a/t/cfg/multiple-potin/multiple-filtered.man.1 b/t/cfg/multiple-potin/multiple-filtered.man.1
new file mode 100644
index 0000000..2178e17
--- /dev/null
+++ b/t/cfg/multiple-potin/multiple-filtered.man.1
@@ -0,0 +1,5 @@
+.TH test1 1
+.SH NAME
+test \- just a test
+
+Hello
diff --git a/t/cfg/multiple-potin/multiple.de.po b/t/cfg/multiple-potin/multiple.de.po
new file mode 100644
index 0000000..5198b30
--- /dev/null
+++ b/t/cfg/multiple-potin/multiple.de.po
@@ -0,0 +1,39 @@
+# German translations for po package
+# Copyright (C) 2020 Free Software Foundation, Inc.
+# This file is distributed under the same license as the po package.
+# Automatically generated, 2020.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: po 4a\n"
+"POT-Creation-Date: 2020-04-13 01:07+0200\n"
+"PO-Revision-Date: 2020-04-13 01:07+0200\n"
+"Last-Translator: Automatically generated\n"
+"Language-Team: none\n"
+"Language: de\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+
+#. type: TH
+#: cfg/multiple-nopotpo/multiple.man.1:1
+#, no-wrap
+msgid "test1"
+msgstr "prüfung1"
+
+#. type: SH
+#: cfg/multiple-nopotpo/multiple.man.1:2
+#, no-wrap
+msgid "NAME"
+msgstr "NAME"
+
+#. type: Plain text
+#: cfg/multiple-nopotpo/multiple.man.1:4
+msgid "test - just a test"
+msgstr "prüfung - nur ein Prüfung"
+
+#. type: Plain text
+#: cfg/multiple-nopotpo/multiple.man.1:5
+msgid "Hello"
+msgstr "Hallo"
diff --git a/t/cfg/multiple-potin/multiple.es.po b/t/cfg/multiple-potin/multiple.es.po
new file mode 100644
index 0000000..19a3bcc
--- /dev/null
+++ b/t/cfg/multiple-potin/multiple.es.po
@@ -0,0 +1,39 @@
+# Spanish translations for po package
+# Copyright (C) 2020 Free Software Foundation, Inc.
+# This file is distributed under the same license as the po package.
+# Automatically generated, 2020.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: po 4a\n"
+"POT-Creation-Date: 2020-04-13 01:08+0200\n"
+"PO-Revision-Date: 2020-04-13 01:08+0200\n"
+"Last-Translator: Automatically generated\n"
+"Language-Team: none\n"
+"Language: es\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+
+#. type: TH
+#: cfg/multiple-nopotpo/multiple.man.1:1
+#, no-wrap
+msgid "test1"
+msgstr "prueba1"
+
+#. type: SH
+#: cfg/multiple-nopotpo/multiple.man.1:2
+#, no-wrap
+msgid "NAME"
+msgstr "NOMBRE"
+
+#. type: Plain text
+#: cfg/multiple-nopotpo/multiple.man.1:4
+msgid "test - just a test"
+msgstr "prueba - solo una prueba"
+
+#. type: Plain text
+#: cfg/multiple-nopotpo/multiple.man.1:5
+msgid "Hello"
+msgstr "Hola"
diff --git a/t/cfg/multiple-potin/multiple.fr.po b/t/cfg/multiple-potin/multiple.fr.po
new file mode 100644
index 0000000..c1e3251
--- /dev/null
+++ b/t/cfg/multiple-potin/multiple.fr.po
@@ -0,0 +1,39 @@
+# French translations for po package
+# Copyright (C) 2020 Free Software Foundation, Inc.
+# This file is distributed under the same license as the po package.
+# Automatically generated, 2020.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: po 4a\n"
+"POT-Creation-Date: 2005-04-24 2:54+0200\n"
+"PO-Revision-Date: 2005-04-24 2:54+0200\n"
+"Last-Translator: Automatically generated\n"
+"Language-Team: none\n"
+"Language: fr\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=2; plural=(n > 1);\n"
+
+#. type: TH
+#: t-05-config/test00_man.1:1
+#, no-wrap
+msgid "test1"
+msgstr "test1"
+
+#. type: SH
+#: t-05-config/test00_man.1:2
+#, no-wrap
+msgid "NAME"
+msgstr "NOM"
+
+#. type: Plain text
+#: t-05-config/test00_man.1:4
+msgid "test - just a test"
+msgstr "test - juste un test"
+
+#. type: Plain text
+#: t-05-config/test00_man.1:5
+msgid "Hello"
+msgstr "Bonjour"
diff --git a/t/cfg/multiple-potin/multiple.it.po b/t/cfg/multiple-potin/multiple.it.po
new file mode 100644
index 0000000..f45e1db
--- /dev/null
+++ b/t/cfg/multiple-potin/multiple.it.po
@@ -0,0 +1,39 @@
+# Italian translations for po package
+# Copyright (C) 2020 Free Software Foundation, Inc.
+# This file is distributed under the same license as the po package.
+# Automatically generated, 2020.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: po 4a\n"
+"POT-Creation-Date: 2020-04-13 01:08+0200\n"
+"PO-Revision-Date: 2020-04-13 01:08+0200\n"
+"Last-Translator: Automatically generated\n"
+"Language-Team: none\n"
+"Language: it\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+
+#. type: TH
+#: cfg/multiple-nopotpo/multiple.man.1:1
+#, no-wrap
+msgid "test1"
+msgstr "test1"
+
+#. type: SH
+#: cfg/multiple-nopotpo/multiple.man.1:2
+#, no-wrap
+msgid "NAME"
+msgstr "NOME"
+
+#. type: Plain text
+#: cfg/multiple-nopotpo/multiple.man.1:4
+msgid "test - just a test"
+msgstr "test - solo un test"
+
+#. type: Plain text
+#: cfg/multiple-nopotpo/multiple.man.1:5
+msgid "Hello"
+msgstr "Ciao"
diff --git a/t/cfg/multiple-potin/multiple.man.1 b/t/cfg/multiple-potin/multiple.man.1
new file mode 100644
index 0000000..12f53fc
--- /dev/null
+++ b/t/cfg/multiple-potin/multiple.man.1
@@ -0,0 +1,9 @@
+.TH test1 1
+.SH NAME
+test \- just a test
+
+Hello
+
+.SH "Not Translated"
+
+This section should not end up in the PO files to not get translated.
diff --git a/t/cfg/multiple-potin/multiple.pot b/t/cfg/multiple-potin/multiple.pot
new file mode 100644
index 0000000..430a879
--- /dev/null
+++ b/t/cfg/multiple-potin/multiple.pot
@@ -0,0 +1,39 @@
+# SOME DESCRIPTIVE TITLE
+# Copyright (C) YEAR Free Software Foundation, Inc.
+# This file is distributed under the same license as the PACKAGE package.
+# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
+#
+#, fuzzy
+msgid ""
+msgstr ""
+"Project-Id-Version: PACKAGE VERSION\n"
+"POT-Creation-Date: 2020-04-06 02:01+0200\n"
+"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
+"Language-Team: LANGUAGE <LL@li.org>\n"
+"Language: \n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+
+#. type: TH
+#: cfg/single-nopotpo/single.man.1:1
+#, no-wrap
+msgid "test1"
+msgstr ""
+
+#. type: SH
+#: cfg/single-nopotpo/single.man.1:2
+#, no-wrap
+msgid "NAME"
+msgstr ""
+
+#. type: Plain text
+#: cfg/single-nopotpo/single.man.1:4
+msgid "test - just a test"
+msgstr ""
+
+#. type: Plain text
+#: cfg/single-nopotpo/single.man.1:5
+msgid "Hello"
+msgstr ""
diff --git a/t/cfg/multiple-potin/po4a.conf b/t/cfg/multiple-potin/po4a.conf
new file mode 100644
index 0000000..edeea11
--- /dev/null
+++ b/t/cfg/multiple-potin/po4a.conf
@@ -0,0 +1,5 @@
+[po4a_langs] fr de es it
+[po4a_paths] multiple.pot $lang:multiple.$lang.po
+[options] --msgmerge-opt --silent --keep 0
+
+[type:man] multiple.man.1 $lang:multiple.man.$lang.1 pot_in:multiple-filtered.man.1
diff --git a/t/cfg/multiple-uptodate/_output b/t/cfg/multiple-uptodate/_output
new file mode 100644
index 0000000..dd735f8
--- /dev/null
+++ b/t/cfg/multiple-uptodate/_output
@@ -0,0 +1,9 @@
+Updating multiple.pot: (4 entries)
+Updating multiple.de.po: 4 translated messages.
+Updating multiple.es.po: 4 translated messages.
+Updating multiple.fr.po: 4 translated messages.
+Updating multiple.it.po: 4 translated messages.
+multiple.man.de.1 is 100% translated (4 strings).
+multiple.man.es.1 is 100% translated (4 strings).
+multiple.man.fr.1 is 100% translated (4 strings).
+multiple.man.it.1 is 100% translated (4 strings).
diff --git a/t/cfg/multiple-uptodate/_output-only-one b/t/cfg/multiple-uptodate/_output-only-one
new file mode 100644
index 0000000..50b1362
--- /dev/null
+++ b/t/cfg/multiple-uptodate/_output-only-one
@@ -0,0 +1,4 @@
+Document multiple.man.1 kept for update (--translate-only).
+Languages skipped because of --translate-only: es fr it; kept languages: de.
+NOT updating the POT file multiple.pot because of --translate-only.
+multiple.man.de.1 is 100% translated (4 strings).
diff --git a/t/cfg/multiple-uptodate/_output-only-two b/t/cfg/multiple-uptodate/_output-only-two
new file mode 100644
index 0000000..1c2f2fb
--- /dev/null
+++ b/t/cfg/multiple-uptodate/_output-only-two
@@ -0,0 +1,5 @@
+Document multiple.man.1 kept for update (--translate-only).
+Languages skipped because of --translate-only: fr it; kept languages: de es.
+NOT updating the POT file multiple.pot because of --translate-only.
+multiple.man.de.1 is 100% translated (4 strings).
+multiple.man.es.1 is 100% translated (4 strings).
diff --git a/t/cfg/multiple-uptodate/multiple.de.po b/t/cfg/multiple-uptodate/multiple.de.po
new file mode 100644
index 0000000..5198b30
--- /dev/null
+++ b/t/cfg/multiple-uptodate/multiple.de.po
@@ -0,0 +1,39 @@
+# German translations for po package
+# Copyright (C) 2020 Free Software Foundation, Inc.
+# This file is distributed under the same license as the po package.
+# Automatically generated, 2020.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: po 4a\n"
+"POT-Creation-Date: 2020-04-13 01:07+0200\n"
+"PO-Revision-Date: 2020-04-13 01:07+0200\n"
+"Last-Translator: Automatically generated\n"
+"Language-Team: none\n"
+"Language: de\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+
+#. type: TH
+#: cfg/multiple-nopotpo/multiple.man.1:1
+#, no-wrap
+msgid "test1"
+msgstr "prüfung1"
+
+#. type: SH
+#: cfg/multiple-nopotpo/multiple.man.1:2
+#, no-wrap
+msgid "NAME"
+msgstr "NAME"
+
+#. type: Plain text
+#: cfg/multiple-nopotpo/multiple.man.1:4
+msgid "test - just a test"
+msgstr "prüfung - nur ein Prüfung"
+
+#. type: Plain text
+#: cfg/multiple-nopotpo/multiple.man.1:5
+msgid "Hello"
+msgstr "Hallo"
diff --git a/t/cfg/multiple-uptodate/multiple.es.po b/t/cfg/multiple-uptodate/multiple.es.po
new file mode 100644
index 0000000..19a3bcc
--- /dev/null
+++ b/t/cfg/multiple-uptodate/multiple.es.po
@@ -0,0 +1,39 @@
+# Spanish translations for po package
+# Copyright (C) 2020 Free Software Foundation, Inc.
+# This file is distributed under the same license as the po package.
+# Automatically generated, 2020.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: po 4a\n"
+"POT-Creation-Date: 2020-04-13 01:08+0200\n"
+"PO-Revision-Date: 2020-04-13 01:08+0200\n"
+"Last-Translator: Automatically generated\n"
+"Language-Team: none\n"
+"Language: es\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+
+#. type: TH
+#: cfg/multiple-nopotpo/multiple.man.1:1
+#, no-wrap
+msgid "test1"
+msgstr "prueba1"
+
+#. type: SH
+#: cfg/multiple-nopotpo/multiple.man.1:2
+#, no-wrap
+msgid "NAME"
+msgstr "NOMBRE"
+
+#. type: Plain text
+#: cfg/multiple-nopotpo/multiple.man.1:4
+msgid "test - just a test"
+msgstr "prueba - solo una prueba"
+
+#. type: Plain text
+#: cfg/multiple-nopotpo/multiple.man.1:5
+msgid "Hello"
+msgstr "Hola"
diff --git a/t/cfg/multiple-uptodate/multiple.fr.po b/t/cfg/multiple-uptodate/multiple.fr.po
new file mode 100644
index 0000000..c1e3251
--- /dev/null
+++ b/t/cfg/multiple-uptodate/multiple.fr.po
@@ -0,0 +1,39 @@
+# French translations for po package
+# Copyright (C) 2020 Free Software Foundation, Inc.
+# This file is distributed under the same license as the po package.
+# Automatically generated, 2020.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: po 4a\n"
+"POT-Creation-Date: 2005-04-24 2:54+0200\n"
+"PO-Revision-Date: 2005-04-24 2:54+0200\n"
+"Last-Translator: Automatically generated\n"
+"Language-Team: none\n"
+"Language: fr\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=2; plural=(n > 1);\n"
+
+#. type: TH
+#: t-05-config/test00_man.1:1
+#, no-wrap
+msgid "test1"
+msgstr "test1"
+
+#. type: SH
+#: t-05-config/test00_man.1:2
+#, no-wrap
+msgid "NAME"
+msgstr "NOM"
+
+#. type: Plain text
+#: t-05-config/test00_man.1:4
+msgid "test - just a test"
+msgstr "test - juste un test"
+
+#. type: Plain text
+#: t-05-config/test00_man.1:5
+msgid "Hello"
+msgstr "Bonjour"
diff --git a/t/cfg/multiple-uptodate/multiple.it.po b/t/cfg/multiple-uptodate/multiple.it.po
new file mode 100644
index 0000000..f45e1db
--- /dev/null
+++ b/t/cfg/multiple-uptodate/multiple.it.po
@@ -0,0 +1,39 @@
+# Italian translations for po package
+# Copyright (C) 2020 Free Software Foundation, Inc.
+# This file is distributed under the same license as the po package.
+# Automatically generated, 2020.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: po 4a\n"
+"POT-Creation-Date: 2020-04-13 01:08+0200\n"
+"PO-Revision-Date: 2020-04-13 01:08+0200\n"
+"Last-Translator: Automatically generated\n"
+"Language-Team: none\n"
+"Language: it\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+
+#. type: TH
+#: cfg/multiple-nopotpo/multiple.man.1:1
+#, no-wrap
+msgid "test1"
+msgstr "test1"
+
+#. type: SH
+#: cfg/multiple-nopotpo/multiple.man.1:2
+#, no-wrap
+msgid "NAME"
+msgstr "NOME"
+
+#. type: Plain text
+#: cfg/multiple-nopotpo/multiple.man.1:4
+msgid "test - just a test"
+msgstr "test - solo un test"
+
+#. type: Plain text
+#: cfg/multiple-nopotpo/multiple.man.1:5
+msgid "Hello"
+msgstr "Ciao"
diff --git a/t/cfg/multiple-uptodate/multiple.man.1 b/t/cfg/multiple-uptodate/multiple.man.1
new file mode 100644
index 0000000..2178e17
--- /dev/null
+++ b/t/cfg/multiple-uptodate/multiple.man.1
@@ -0,0 +1,5 @@
+.TH test1 1
+.SH NAME
+test \- just a test
+
+Hello
diff --git a/t/cfg/multiple-uptodate/multiple.man.de.1 b/t/cfg/multiple-uptodate/multiple.man.de.1
new file mode 100644
index 0000000..870b037
--- /dev/null
+++ b/t/cfg/multiple-uptodate/multiple.man.de.1
@@ -0,0 +1,10 @@
+.\"*******************************************************************
+.\"
+.\" This file was generated with po4a. Translate the source file.
+.\"
+.\"*******************************************************************
+.TH prüfung1 1
+.SH NAME
+prüfung \- nur ein Prüfung
+
+Hallo
diff --git a/t/cfg/multiple-uptodate/multiple.man.es.1 b/t/cfg/multiple-uptodate/multiple.man.es.1
new file mode 100644
index 0000000..091ad34
--- /dev/null
+++ b/t/cfg/multiple-uptodate/multiple.man.es.1
@@ -0,0 +1,10 @@
+.\"*******************************************************************
+.\"
+.\" This file was generated with po4a. Translate the source file.
+.\"
+.\"*******************************************************************
+.TH prueba1 1
+.SH NOMBRE
+prueba \- solo una prueba
+
+Hola
diff --git a/t/cfg/multiple-uptodate/multiple.man.fr.1 b/t/cfg/multiple-uptodate/multiple.man.fr.1
new file mode 100644
index 0000000..873acf4
--- /dev/null
+++ b/t/cfg/multiple-uptodate/multiple.man.fr.1
@@ -0,0 +1,10 @@
+.\"*******************************************************************
+.\"
+.\" This file was generated with po4a. Translate the source file.
+.\"
+.\"*******************************************************************
+.TH test1 1
+.SH NOM
+test \- juste un test
+
+Bonjour
diff --git a/t/cfg/multiple-uptodate/multiple.man.it.1 b/t/cfg/multiple-uptodate/multiple.man.it.1
new file mode 100644
index 0000000..b2cbe40
--- /dev/null
+++ b/t/cfg/multiple-uptodate/multiple.man.it.1
@@ -0,0 +1,10 @@
+.\"*******************************************************************
+.\"
+.\" This file was generated with po4a. Translate the source file.
+.\"
+.\"*******************************************************************
+.TH test1 1
+.SH NOME
+test \- solo un test
+
+Ciao
diff --git a/t/cfg/multiple-uptodate/multiple.pot b/t/cfg/multiple-uptodate/multiple.pot
new file mode 100644
index 0000000..430a879
--- /dev/null
+++ b/t/cfg/multiple-uptodate/multiple.pot
@@ -0,0 +1,39 @@
+# SOME DESCRIPTIVE TITLE
+# Copyright (C) YEAR Free Software Foundation, Inc.
+# This file is distributed under the same license as the PACKAGE package.
+# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
+#
+#, fuzzy
+msgid ""
+msgstr ""
+"Project-Id-Version: PACKAGE VERSION\n"
+"POT-Creation-Date: 2020-04-06 02:01+0200\n"
+"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
+"Language-Team: LANGUAGE <LL@li.org>\n"
+"Language: \n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+
+#. type: TH
+#: cfg/single-nopotpo/single.man.1:1
+#, no-wrap
+msgid "test1"
+msgstr ""
+
+#. type: SH
+#: cfg/single-nopotpo/single.man.1:2
+#, no-wrap
+msgid "NAME"
+msgstr ""
+
+#. type: Plain text
+#: cfg/single-nopotpo/single.man.1:4
+msgid "test - just a test"
+msgstr ""
+
+#. type: Plain text
+#: cfg/single-nopotpo/single.man.1:5
+msgid "Hello"
+msgstr ""
diff --git a/t/cfg/multiple-uptodate/po4a.conf b/t/cfg/multiple-uptodate/po4a.conf
new file mode 100644
index 0000000..1edb0aa
--- /dev/null
+++ b/t/cfg/multiple-uptodate/po4a.conf
@@ -0,0 +1,5 @@
+[po4a_langs] fr de es it
+[po4a_paths] multiple.pot $lang:multiple.$lang.po
+[options] opt:"--msgmerge-opt --silent"
+
+[type:man] multiple.man.1 $lang:multiple.man.$lang.1
diff --git a/t/cfg/multiple/_multiple.man.de.1 b/t/cfg/multiple/_multiple.man.de.1
new file mode 100644
index 0000000..870b037
--- /dev/null
+++ b/t/cfg/multiple/_multiple.man.de.1
@@ -0,0 +1,10 @@
+.\"*******************************************************************
+.\"
+.\" This file was generated with po4a. Translate the source file.
+.\"
+.\"*******************************************************************
+.TH prüfung1 1
+.SH NAME
+prüfung \- nur ein Prüfung
+
+Hallo
diff --git a/t/cfg/multiple/_multiple.man.es.1 b/t/cfg/multiple/_multiple.man.es.1
new file mode 100644
index 0000000..091ad34
--- /dev/null
+++ b/t/cfg/multiple/_multiple.man.es.1
@@ -0,0 +1,10 @@
+.\"*******************************************************************
+.\"
+.\" This file was generated with po4a. Translate the source file.
+.\"
+.\"*******************************************************************
+.TH prueba1 1
+.SH NOMBRE
+prueba \- solo una prueba
+
+Hola
diff --git a/t/cfg/multiple/_multiple.man.fr.1 b/t/cfg/multiple/_multiple.man.fr.1
new file mode 100644
index 0000000..873acf4
--- /dev/null
+++ b/t/cfg/multiple/_multiple.man.fr.1
@@ -0,0 +1,10 @@
+.\"*******************************************************************
+.\"
+.\" This file was generated with po4a. Translate the source file.
+.\"
+.\"*******************************************************************
+.TH test1 1
+.SH NOM
+test \- juste un test
+
+Bonjour
diff --git a/t/cfg/multiple/_multiple.man.it.1 b/t/cfg/multiple/_multiple.man.it.1
new file mode 100644
index 0000000..b2cbe40
--- /dev/null
+++ b/t/cfg/multiple/_multiple.man.it.1
@@ -0,0 +1,10 @@
+.\"*******************************************************************
+.\"
+.\" This file was generated with po4a. Translate the source file.
+.\"
+.\"*******************************************************************
+.TH test1 1
+.SH NOME
+test \- solo un test
+
+Ciao
diff --git a/t/cfg/multiple/_output b/t/cfg/multiple/_output
new file mode 100644
index 0000000..dd735f8
--- /dev/null
+++ b/t/cfg/multiple/_output
@@ -0,0 +1,9 @@
+Updating multiple.pot: (4 entries)
+Updating multiple.de.po: 4 translated messages.
+Updating multiple.es.po: 4 translated messages.
+Updating multiple.fr.po: 4 translated messages.
+Updating multiple.it.po: 4 translated messages.
+multiple.man.de.1 is 100% translated (4 strings).
+multiple.man.es.1 is 100% translated (4 strings).
+multiple.man.fr.1 is 100% translated (4 strings).
+multiple.man.it.1 is 100% translated (4 strings).
diff --git a/t/cfg/multiple/multiple.de.po b/t/cfg/multiple/multiple.de.po
new file mode 100644
index 0000000..5198b30
--- /dev/null
+++ b/t/cfg/multiple/multiple.de.po
@@ -0,0 +1,39 @@
+# German translations for po package
+# Copyright (C) 2020 Free Software Foundation, Inc.
+# This file is distributed under the same license as the po package.
+# Automatically generated, 2020.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: po 4a\n"
+"POT-Creation-Date: 2020-04-13 01:07+0200\n"
+"PO-Revision-Date: 2020-04-13 01:07+0200\n"
+"Last-Translator: Automatically generated\n"
+"Language-Team: none\n"
+"Language: de\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+
+#. type: TH
+#: cfg/multiple-nopotpo/multiple.man.1:1
+#, no-wrap
+msgid "test1"
+msgstr "prüfung1"
+
+#. type: SH
+#: cfg/multiple-nopotpo/multiple.man.1:2
+#, no-wrap
+msgid "NAME"
+msgstr "NAME"
+
+#. type: Plain text
+#: cfg/multiple-nopotpo/multiple.man.1:4
+msgid "test - just a test"
+msgstr "prüfung - nur ein Prüfung"
+
+#. type: Plain text
+#: cfg/multiple-nopotpo/multiple.man.1:5
+msgid "Hello"
+msgstr "Hallo"
diff --git a/t/cfg/multiple/multiple.es.po b/t/cfg/multiple/multiple.es.po
new file mode 100644
index 0000000..19a3bcc
--- /dev/null
+++ b/t/cfg/multiple/multiple.es.po
@@ -0,0 +1,39 @@
+# Spanish translations for po package
+# Copyright (C) 2020 Free Software Foundation, Inc.
+# This file is distributed under the same license as the po package.
+# Automatically generated, 2020.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: po 4a\n"
+"POT-Creation-Date: 2020-04-13 01:08+0200\n"
+"PO-Revision-Date: 2020-04-13 01:08+0200\n"
+"Last-Translator: Automatically generated\n"
+"Language-Team: none\n"
+"Language: es\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+
+#. type: TH
+#: cfg/multiple-nopotpo/multiple.man.1:1
+#, no-wrap
+msgid "test1"
+msgstr "prueba1"
+
+#. type: SH
+#: cfg/multiple-nopotpo/multiple.man.1:2
+#, no-wrap
+msgid "NAME"
+msgstr "NOMBRE"
+
+#. type: Plain text
+#: cfg/multiple-nopotpo/multiple.man.1:4
+msgid "test - just a test"
+msgstr "prueba - solo una prueba"
+
+#. type: Plain text
+#: cfg/multiple-nopotpo/multiple.man.1:5
+msgid "Hello"
+msgstr "Hola"
diff --git a/t/cfg/multiple/multiple.fr.po b/t/cfg/multiple/multiple.fr.po
new file mode 100644
index 0000000..c1e3251
--- /dev/null
+++ b/t/cfg/multiple/multiple.fr.po
@@ -0,0 +1,39 @@
+# French translations for po package
+# Copyright (C) 2020 Free Software Foundation, Inc.
+# This file is distributed under the same license as the po package.
+# Automatically generated, 2020.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: po 4a\n"
+"POT-Creation-Date: 2005-04-24 2:54+0200\n"
+"PO-Revision-Date: 2005-04-24 2:54+0200\n"
+"Last-Translator: Automatically generated\n"
+"Language-Team: none\n"
+"Language: fr\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=2; plural=(n > 1);\n"
+
+#. type: TH
+#: t-05-config/test00_man.1:1
+#, no-wrap
+msgid "test1"
+msgstr "test1"
+
+#. type: SH
+#: t-05-config/test00_man.1:2
+#, no-wrap
+msgid "NAME"
+msgstr "NOM"
+
+#. type: Plain text
+#: t-05-config/test00_man.1:4
+msgid "test - just a test"
+msgstr "test - juste un test"
+
+#. type: Plain text
+#: t-05-config/test00_man.1:5
+msgid "Hello"
+msgstr "Bonjour"
diff --git a/t/cfg/multiple/multiple.it.po b/t/cfg/multiple/multiple.it.po
new file mode 100644
index 0000000..f45e1db
--- /dev/null
+++ b/t/cfg/multiple/multiple.it.po
@@ -0,0 +1,39 @@
+# Italian translations for po package
+# Copyright (C) 2020 Free Software Foundation, Inc.
+# This file is distributed under the same license as the po package.
+# Automatically generated, 2020.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: po 4a\n"
+"POT-Creation-Date: 2020-04-13 01:08+0200\n"
+"PO-Revision-Date: 2020-04-13 01:08+0200\n"
+"Last-Translator: Automatically generated\n"
+"Language-Team: none\n"
+"Language: it\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+
+#. type: TH
+#: cfg/multiple-nopotpo/multiple.man.1:1
+#, no-wrap
+msgid "test1"
+msgstr "test1"
+
+#. type: SH
+#: cfg/multiple-nopotpo/multiple.man.1:2
+#, no-wrap
+msgid "NAME"
+msgstr "NOME"
+
+#. type: Plain text
+#: cfg/multiple-nopotpo/multiple.man.1:4
+msgid "test - just a test"
+msgstr "test - solo un test"
+
+#. type: Plain text
+#: cfg/multiple-nopotpo/multiple.man.1:5
+msgid "Hello"
+msgstr "Ciao"
diff --git a/t/cfg/multiple/multiple.man.1 b/t/cfg/multiple/multiple.man.1
new file mode 100644
index 0000000..2178e17
--- /dev/null
+++ b/t/cfg/multiple/multiple.man.1
@@ -0,0 +1,5 @@
+.TH test1 1
+.SH NAME
+test \- just a test
+
+Hello
diff --git a/t/cfg/multiple/multiple.pot b/t/cfg/multiple/multiple.pot
new file mode 100644
index 0000000..430a879
--- /dev/null
+++ b/t/cfg/multiple/multiple.pot
@@ -0,0 +1,39 @@
+# SOME DESCRIPTIVE TITLE
+# Copyright (C) YEAR Free Software Foundation, Inc.
+# This file is distributed under the same license as the PACKAGE package.
+# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
+#
+#, fuzzy
+msgid ""
+msgstr ""
+"Project-Id-Version: PACKAGE VERSION\n"
+"POT-Creation-Date: 2020-04-06 02:01+0200\n"
+"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
+"Language-Team: LANGUAGE <LL@li.org>\n"
+"Language: \n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+
+#. type: TH
+#: cfg/single-nopotpo/single.man.1:1
+#, no-wrap
+msgid "test1"
+msgstr ""
+
+#. type: SH
+#: cfg/single-nopotpo/single.man.1:2
+#, no-wrap
+msgid "NAME"
+msgstr ""
+
+#. type: Plain text
+#: cfg/single-nopotpo/single.man.1:4
+msgid "test - just a test"
+msgstr ""
+
+#. type: Plain text
+#: cfg/single-nopotpo/single.man.1:5
+msgid "Hello"
+msgstr ""
diff --git a/t/cfg/multiple/po4a.conf b/t/cfg/multiple/po4a.conf
new file mode 100644
index 0000000..1edb0aa
--- /dev/null
+++ b/t/cfg/multiple/po4a.conf
@@ -0,0 +1,5 @@
+[po4a_langs] fr de es it
+[po4a_paths] multiple.pot $lang:multiple.$lang.po
+[options] opt:"--msgmerge-opt --silent"
+
+[type:man] multiple.man.1 $lang:multiple.man.$lang.1
diff --git a/t/cfg/single-emptypo/_fr.po b/t/cfg/single-emptypo/_fr.po
new file mode 100644
index 0000000..59bff7e
--- /dev/null
+++ b/t/cfg/single-emptypo/_fr.po
@@ -0,0 +1,39 @@
+# French translations for po package
+# Copyright (C) 2020 Free Software Foundation, Inc.
+# This file is distributed under the same license as the po package.
+# Automatically generated, 2020.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: po 4a\n"
+"POT-Creation-Date: 2005-04-24 2:54+0200\n"
+"PO-Revision-Date: 2005-04-24 2:54+0200\n"
+"Last-Translator: Automatically generated\n"
+"Language-Team: none\n"
+"Language: fr\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=2; plural=(n > 1);\n"
+
+#. type: TH
+#: single.man.1:1
+#, no-wrap
+msgid "test1"
+msgstr ""
+
+#. type: SH
+#: single.man.1:2
+#, no-wrap
+msgid "NAME"
+msgstr ""
+
+#. type: Plain text
+#: single.man.1:4
+msgid "test - just a test"
+msgstr ""
+
+#. type: Plain text
+#: single.man.1:5
+msgid "UTF in msgid is sometimes difficult, but mandatory for some nämes."
+msgstr ""
diff --git a/t/cfg/single-emptypo/_output b/t/cfg/single-emptypo/_output
new file mode 100644
index 0000000..d8fbf51
--- /dev/null
+++ b/t/cfg/single-emptypo/_output
@@ -0,0 +1,3 @@
+Updating single.pot: (4 entries)
+Creating an empty PO file in fr.po.
+single.man.fr.1 is 0% translated (0 of 4 strings).
diff --git a/t/cfg/single-emptypo/_single.man.fr.1 b/t/cfg/single-emptypo/_single.man.fr.1
new file mode 100644
index 0000000..4f33cec
--- /dev/null
+++ b/t/cfg/single-emptypo/_single.man.fr.1
@@ -0,0 +1,10 @@
+.\"*******************************************************************
+.\"
+.\" This file was generated with po4a. Translate the source file.
+.\"
+.\"*******************************************************************
+.TH test1 1
+.SH NAME
+test \- just a test
+
+UTF in msgid is sometimes difficult, but mandatory for some nämes.
diff --git a/t/cfg/single-emptypo/fr.po b/t/cfg/single-emptypo/fr.po
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/t/cfg/single-emptypo/fr.po
diff --git a/t/cfg/single-emptypo/po4a.conf b/t/cfg/single-emptypo/po4a.conf
new file mode 100644
index 0000000..c0f289b
--- /dev/null
+++ b/t/cfg/single-emptypo/po4a.conf
@@ -0,0 +1,5 @@
+[po4a_paths] single.pot fr:fr.po
+
+[options] opt:"--verbose --keep 0 "
+
+[type:man] single.man.1 fr:single.man.fr.1
diff --git a/t/cfg/single-emptypo/single.man.1 b/t/cfg/single-emptypo/single.man.1
new file mode 100644
index 0000000..912f8f0
--- /dev/null
+++ b/t/cfg/single-emptypo/single.man.1
@@ -0,0 +1,5 @@
+.TH test1 1
+.SH NAME
+test \- just a test
+
+UTF in msgid is sometimes difficult, but mandatory for some nämes.
diff --git a/t/cfg/single-emptypo/single.pot b/t/cfg/single-emptypo/single.pot
new file mode 100644
index 0000000..b81be08
--- /dev/null
+++ b/t/cfg/single-emptypo/single.pot
@@ -0,0 +1,39 @@
+# SOME DESCRIPTIVE TITLE
+# Copyright (C) YEAR Free Software Foundation, Inc.
+# This file is distributed under the same license as the PACKAGE package.
+# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
+#
+#, fuzzy
+msgid ""
+msgstr ""
+"Project-Id-Version: PACKAGE VERSION\n"
+"POT-Creation-Date: 2005-04-24 2:54+0200\n"
+"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
+"Language-Team: LANGUAGE <LL@li.org>\n"
+"Language: \n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+
+#. type: TH
+#: single.man.1:1
+#, no-wrap
+msgid "test1"
+msgstr ""
+
+#. type: SH
+#: single.man.1:2
+#, no-wrap
+msgid "NAME"
+msgstr ""
+
+#. type: Plain text
+#: single.man.1:4
+msgid "test - just a test"
+msgstr ""
+
+#. type: Plain text
+#: single.man.1:5
+msgid "UTF in msgid is sometimes difficult, but mandatory for some nämes."
+msgstr ""
diff --git a/t/cfg/single-fuzzied-noup/_output b/t/cfg/single-fuzzied-noup/_output
new file mode 100644
index 0000000..9fb696e
--- /dev/null
+++ b/t/cfg/single-fuzzied-noup/_output
@@ -0,0 +1,3 @@
+NOT updating single-fuzzied-noup.pot as requested (--no-update).
+NOT updating the POT file single-fuzzied-noup.pot as requested (--no-update).
+Discard single-fuzzied-noup.man.fr.1 (3 of 4 strings; only 75% translated; need 80%).
diff --git a/t/cfg/single-fuzzied-noup/_single-fuzzied.fr.po b/t/cfg/single-fuzzied-noup/_single-fuzzied.fr.po
new file mode 100644
index 0000000..1018ebb
--- /dev/null
+++ b/t/cfg/single-fuzzied-noup/_single-fuzzied.fr.po
@@ -0,0 +1,40 @@
+# French translations for po package
+# Copyright (C) 2020 Free Software Foundation, Inc.
+# This file is distributed under the same license as the po package.
+# Automatically generated, 2020.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: po 4a\n"
+"POT-Creation-Date: 2005-04-24 2:54+0200\n"
+"PO-Revision-Date: 2005-04-24 2:54+0200\n"
+"Last-Translator: Automatically generated\n"
+"Language-Team: none\n"
+"Language: fr\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=2; plural=(n > 1);\n"
+
+#. type: TH
+#: t-05-config/test00_man.1:1
+#, fuzzy, no-wrap
+#| msgid "Test1"
+msgid "test1"
+msgstr "test1"
+
+#. type: SH
+#: t-05-config/test00_man.1:2
+#, no-wrap
+msgid "NAME"
+msgstr "NOM"
+
+#. type: Plain text
+#: t-05-config/test00_man.1:4
+msgid "test - just a test"
+msgstr "test - juste un test"
+
+#. type: Plain text
+#: t-05-config/test00_man.1:5
+msgid "Hello"
+msgstr "Bonjour"
diff --git a/t/cfg/single-fuzzied-noup/po4a.conf b/t/cfg/single-fuzzied-noup/po4a.conf
new file mode 100644
index 0000000..5fea97e
--- /dev/null
+++ b/t/cfg/single-fuzzied-noup/po4a.conf
@@ -0,0 +1,5 @@
+#comment
+[po4a_paths] single-fuzzied-noup.pot fr:single-fuzzied-noup.fr.po
+[options] opt:"--msgmerge-opt --silent"
+
+[type:man] single-fuzzied-noup.man.1 fr:single-fuzzied-noup.man.fr.1
diff --git a/t/cfg/single-fuzzied-noup/single-fuzzied-noup.fr.po b/t/cfg/single-fuzzied-noup/single-fuzzied-noup.fr.po
new file mode 100644
index 0000000..2d9c58f
--- /dev/null
+++ b/t/cfg/single-fuzzied-noup/single-fuzzied-noup.fr.po
@@ -0,0 +1,39 @@
+# French translations for po package
+# Copyright (C) 2020 Free Software Foundation, Inc.
+# This file is distributed under the same license as the po package.
+# Automatically generated, 2020.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: po 4a\n"
+"POT-Creation-Date: 2005-04-24 2:54+0200\n"
+"PO-Revision-Date: 2005-04-24 2:54+0200\n"
+"Last-Translator: Automatically generated\n"
+"Language-Team: none\n"
+"Language: fr\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=2; plural=(n > 1);\n"
+
+#. type: TH
+#: t-05-config/test00_man.1:1
+#, no-wrap
+msgid "Test1"
+msgstr "test1"
+
+#. type: SH
+#: t-05-config/test00_man.1:2
+#, no-wrap
+msgid "NAME"
+msgstr "NOM"
+
+#. type: Plain text
+#: t-05-config/test00_man.1:4
+msgid "test - just a test"
+msgstr "test - juste un test"
+
+#. type: Plain text
+#: t-05-config/test00_man.1:5
+msgid "Hello"
+msgstr "Bonjour"
diff --git a/t/cfg/single-fuzzied-noup/single-fuzzied-noup.man.1 b/t/cfg/single-fuzzied-noup/single-fuzzied-noup.man.1
new file mode 100644
index 0000000..2178e17
--- /dev/null
+++ b/t/cfg/single-fuzzied-noup/single-fuzzied-noup.man.1
@@ -0,0 +1,5 @@
+.TH test1 1
+.SH NAME
+test \- just a test
+
+Hello
diff --git a/t/cfg/single-fuzzied-noup/single-fuzzied-noup.pot b/t/cfg/single-fuzzied-noup/single-fuzzied-noup.pot
new file mode 100644
index 0000000..c6480a4
--- /dev/null
+++ b/t/cfg/single-fuzzied-noup/single-fuzzied-noup.pot
@@ -0,0 +1,39 @@
+# SOME DESCRIPTIVE TITLE
+# Copyright (C) YEAR Free Software Foundation, Inc.
+# This file is distributed under the same license as the PACKAGE package.
+# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
+#
+#, fuzzy
+msgid ""
+msgstr ""
+"Project-Id-Version: PACKAGE VERSION\n"
+"POT-Creation-Date: 2005-04-24 2:54+0200\n"
+"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
+"Language-Team: LANGUAGE <LL@li.org>\n"
+"Language: \n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+
+#. type: TH
+#: t-05-config/test00_man.1:1
+#, no-wrap
+msgid "test1"
+msgstr ""
+
+#. type: SH
+#: t-05-config/test00_man.1:2
+#, no-wrap
+msgid "NAME"
+msgstr ""
+
+#. type: Plain text
+#: t-05-config/test00_man.1:4
+msgid "test - just a test"
+msgstr ""
+
+#. type: Plain text
+#: t-05-config/test00_man.1:5
+msgid "Hello"
+msgstr ""
diff --git a/t/cfg/single-fuzzied/_output b/t/cfg/single-fuzzied/_output
new file mode 100644
index 0000000..97e1ee0
--- /dev/null
+++ b/t/cfg/single-fuzzied/_output
@@ -0,0 +1,3 @@
+Updating single-fuzzied.pot: (4 entries)
+Updating single-fuzzied.fr.po: 3 translated messages, 1 fuzzy translation.
+Discard single-fuzzied.man.fr.1 (3 of 4 strings; only 75% translated; need 80%).
diff --git a/t/cfg/single-fuzzied/_single-fuzzied.fr.po b/t/cfg/single-fuzzied/_single-fuzzied.fr.po
new file mode 100644
index 0000000..1018ebb
--- /dev/null
+++ b/t/cfg/single-fuzzied/_single-fuzzied.fr.po
@@ -0,0 +1,40 @@
+# French translations for po package
+# Copyright (C) 2020 Free Software Foundation, Inc.
+# This file is distributed under the same license as the po package.
+# Automatically generated, 2020.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: po 4a\n"
+"POT-Creation-Date: 2005-04-24 2:54+0200\n"
+"PO-Revision-Date: 2005-04-24 2:54+0200\n"
+"Last-Translator: Automatically generated\n"
+"Language-Team: none\n"
+"Language: fr\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=2; plural=(n > 1);\n"
+
+#. type: TH
+#: t-05-config/test00_man.1:1
+#, fuzzy, no-wrap
+#| msgid "Test1"
+msgid "test1"
+msgstr "test1"
+
+#. type: SH
+#: t-05-config/test00_man.1:2
+#, no-wrap
+msgid "NAME"
+msgstr "NOM"
+
+#. type: Plain text
+#: t-05-config/test00_man.1:4
+msgid "test - just a test"
+msgstr "test - juste un test"
+
+#. type: Plain text
+#: t-05-config/test00_man.1:5
+msgid "Hello"
+msgstr "Bonjour"
diff --git a/t/cfg/single-fuzzied/po4a.conf b/t/cfg/single-fuzzied/po4a.conf
new file mode 100644
index 0000000..b63cef1
--- /dev/null
+++ b/t/cfg/single-fuzzied/po4a.conf
@@ -0,0 +1,5 @@
+#comment
+[po4a_paths] single-fuzzied.pot fr:single-fuzzied.fr.po
+[options] opt:"--msgmerge-opt --silent"
+
+[type:man] single-fuzzied.man.1 fr:single-fuzzied.man.fr.1
diff --git a/t/cfg/single-fuzzied/single-fuzzied.fr.po b/t/cfg/single-fuzzied/single-fuzzied.fr.po
new file mode 100644
index 0000000..2d9c58f
--- /dev/null
+++ b/t/cfg/single-fuzzied/single-fuzzied.fr.po
@@ -0,0 +1,39 @@
+# French translations for po package
+# Copyright (C) 2020 Free Software Foundation, Inc.
+# This file is distributed under the same license as the po package.
+# Automatically generated, 2020.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: po 4a\n"
+"POT-Creation-Date: 2005-04-24 2:54+0200\n"
+"PO-Revision-Date: 2005-04-24 2:54+0200\n"
+"Last-Translator: Automatically generated\n"
+"Language-Team: none\n"
+"Language: fr\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=2; plural=(n > 1);\n"
+
+#. type: TH
+#: t-05-config/test00_man.1:1
+#, no-wrap
+msgid "Test1"
+msgstr "test1"
+
+#. type: SH
+#: t-05-config/test00_man.1:2
+#, no-wrap
+msgid "NAME"
+msgstr "NOM"
+
+#. type: Plain text
+#: t-05-config/test00_man.1:4
+msgid "test - just a test"
+msgstr "test - juste un test"
+
+#. type: Plain text
+#: t-05-config/test00_man.1:5
+msgid "Hello"
+msgstr "Bonjour"
diff --git a/t/cfg/single-fuzzied/single-fuzzied.man.1 b/t/cfg/single-fuzzied/single-fuzzied.man.1
new file mode 100644
index 0000000..2178e17
--- /dev/null
+++ b/t/cfg/single-fuzzied/single-fuzzied.man.1
@@ -0,0 +1,5 @@
+.TH test1 1
+.SH NAME
+test \- just a test
+
+Hello
diff --git a/t/cfg/single-fuzzied/single-fuzzied.pot b/t/cfg/single-fuzzied/single-fuzzied.pot
new file mode 100644
index 0000000..c6480a4
--- /dev/null
+++ b/t/cfg/single-fuzzied/single-fuzzied.pot
@@ -0,0 +1,39 @@
+# SOME DESCRIPTIVE TITLE
+# Copyright (C) YEAR Free Software Foundation, Inc.
+# This file is distributed under the same license as the PACKAGE package.
+# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
+#
+#, fuzzy
+msgid ""
+msgstr ""
+"Project-Id-Version: PACKAGE VERSION\n"
+"POT-Creation-Date: 2005-04-24 2:54+0200\n"
+"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
+"Language-Team: LANGUAGE <LL@li.org>\n"
+"Language: \n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+
+#. type: TH
+#: t-05-config/test00_man.1:1
+#, no-wrap
+msgid "test1"
+msgstr ""
+
+#. type: SH
+#: t-05-config/test00_man.1:2
+#, no-wrap
+msgid "NAME"
+msgstr ""
+
+#. type: Plain text
+#: t-05-config/test00_man.1:4
+msgid "test - just a test"
+msgstr ""
+
+#. type: Plain text
+#: t-05-config/test00_man.1:5
+msgid "Hello"
+msgstr ""
diff --git a/t/cfg/single-fuzzy/_output b/t/cfg/single-fuzzy/_output
new file mode 100644
index 0000000..707ac64
--- /dev/null
+++ b/t/cfg/single-fuzzy/_output
@@ -0,0 +1,3 @@
+Updating single-fuzzy.pot: (4 entries)
+Updating single-fuzzy.fr.po: 3 translated messages, 1 fuzzy translation.
+Discard single-fuzzy.man.fr.1 (3 of 4 strings; only 75% translated; need 80%).
diff --git a/t/cfg/single-fuzzy/po4a.conf b/t/cfg/single-fuzzy/po4a.conf
new file mode 100644
index 0000000..a80db4d
--- /dev/null
+++ b/t/cfg/single-fuzzy/po4a.conf
@@ -0,0 +1,5 @@
+#comment
+[po4a_paths] single-fuzzy.pot fr:single-fuzzy.fr.po
+[options] opt:"--msgmerge-opt --silent"
+
+[type:man] single-fuzzy.man.1 fr:single-fuzzy.man.fr.1
diff --git a/t/cfg/single-fuzzy/single-fuzzy.fr.po b/t/cfg/single-fuzzy/single-fuzzy.fr.po
new file mode 100644
index 0000000..954fb48
--- /dev/null
+++ b/t/cfg/single-fuzzy/single-fuzzy.fr.po
@@ -0,0 +1,39 @@
+# French translations for po package
+# Copyright (C) 2020 Free Software Foundation, Inc.
+# This file is distributed under the same license as the po package.
+# Automatically generated, 2020.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: po 4a\n"
+"POT-Creation-Date: 2005-04-24 2:54+0200\n"
+"PO-Revision-Date: 2005-04-24 2:54+0200\n"
+"Last-Translator: Automatically generated\n"
+"Language-Team: none\n"
+"Language: fr\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=2; plural=(n > 1);\n"
+
+#. type: TH
+#: t-05-config/test00_man.1:1
+#, fuzzy, no-wrap
+msgid "test1"
+msgstr "test1"
+
+#. type: SH
+#: t-05-config/test00_man.1:2
+#, no-wrap
+msgid "NAME"
+msgstr "NOM"
+
+#. type: Plain text
+#: t-05-config/test00_man.1:4
+msgid "test - just a test"
+msgstr "test - juste un test"
+
+#. type: Plain text
+#: t-05-config/test00_man.1:5
+msgid "Hello"
+msgstr "Bonjour"
diff --git a/t/cfg/single-fuzzy/single-fuzzy.man.1 b/t/cfg/single-fuzzy/single-fuzzy.man.1
new file mode 100644
index 0000000..2178e17
--- /dev/null
+++ b/t/cfg/single-fuzzy/single-fuzzy.man.1
@@ -0,0 +1,5 @@
+.TH test1 1
+.SH NAME
+test \- just a test
+
+Hello
diff --git a/t/cfg/single-fuzzy/single-fuzzy.pot b/t/cfg/single-fuzzy/single-fuzzy.pot
new file mode 100644
index 0000000..c6480a4
--- /dev/null
+++ b/t/cfg/single-fuzzy/single-fuzzy.pot
@@ -0,0 +1,39 @@
+# SOME DESCRIPTIVE TITLE
+# Copyright (C) YEAR Free Software Foundation, Inc.
+# This file is distributed under the same license as the PACKAGE package.
+# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
+#
+#, fuzzy
+msgid ""
+msgstr ""
+"Project-Id-Version: PACKAGE VERSION\n"
+"POT-Creation-Date: 2005-04-24 2:54+0200\n"
+"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
+"Language-Team: LANGUAGE <LL@li.org>\n"
+"Language: \n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+
+#. type: TH
+#: t-05-config/test00_man.1:1
+#, no-wrap
+msgid "test1"
+msgstr ""
+
+#. type: SH
+#: t-05-config/test00_man.1:2
+#, no-wrap
+msgid "NAME"
+msgstr ""
+
+#. type: Plain text
+#: t-05-config/test00_man.1:4
+msgid "test - just a test"
+msgstr ""
+
+#. type: Plain text
+#: t-05-config/test00_man.1:5
+msgid "Hello"
+msgstr ""
diff --git a/t/cfg/single-invalid/_output b/t/cfg/single-invalid/_output
new file mode 100644
index 0000000..f7ce727
--- /dev/null
+++ b/t/cfg/single-invalid/_output
@@ -0,0 +1,8 @@
+Updating single.pot: (4 entries)
+Updating single.fr.po:39: 'msgid' and 'msgstr' entries do not both end with '\n'
+msgfmt: found 1 fatal error
+single.fr.po: 4 translated messages.
+Invalid po file single.fr.po:
+single.fr.po:39: 'msgid' and 'msgstr' entries do not both end with '\n'
+msgfmt: found 1 fatal error
+
diff --git a/t/cfg/single-invalid/po4a.conf b/t/cfg/single-invalid/po4a.conf
new file mode 100644
index 0000000..da28633
--- /dev/null
+++ b/t/cfg/single-invalid/po4a.conf
@@ -0,0 +1,5 @@
+#comment
+[po4a_paths] single.pot fr:single.fr.po
+[options] opt:"--msgmerge-opt --silent"
+
+[type:man] single.man.1 fr:single.man.fr.1
diff --git a/t/cfg/single-invalid/single.fr.po b/t/cfg/single-invalid/single.fr.po
new file mode 100644
index 0000000..ca6039a
--- /dev/null
+++ b/t/cfg/single-invalid/single.fr.po
@@ -0,0 +1,39 @@
+# French translations for po package
+# Copyright (C) 2020 Free Software Foundation, Inc.
+# This file is distributed under the same license as the po package.
+# Automatically generated, 2020.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: po 4a\n"
+"POT-Creation-Date: 2005-04-24 2:54+0200\n"
+"PO-Revision-Date: 2005-04-24 2:54+0200\n"
+"Last-Translator: Automatically generated\n"
+"Language-Team: none\n"
+"Language: fr\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=2; plural=(n > 1);\n"
+
+#. type: TH
+#: t-05-config/test00_man.1:1
+#, no-wrap
+msgid "test1"
+msgstr "test1"
+
+#. type: SH
+#: t-05-config/test00_man.1:2
+#, no-wrap
+msgid "NAME"
+msgstr "NOM"
+
+#. type: Plain text
+#: t-05-config/test00_man.1:4
+msgid "test - just a test"
+msgstr "test - juste un test"
+
+#. type: Plain text
+#: t-05-config/test00_man.1:5
+msgid "Hello"
+msgstr "Bonjour\n"
diff --git a/t/cfg/single-invalid/single.man.1 b/t/cfg/single-invalid/single.man.1
new file mode 100644
index 0000000..2178e17
--- /dev/null
+++ b/t/cfg/single-invalid/single.man.1
@@ -0,0 +1,5 @@
+.TH test1 1
+.SH NAME
+test \- just a test
+
+Hello
diff --git a/t/cfg/single-invalid/single.man.fr.1 b/t/cfg/single-invalid/single.man.fr.1
new file mode 100644
index 0000000..873acf4
--- /dev/null
+++ b/t/cfg/single-invalid/single.man.fr.1
@@ -0,0 +1,10 @@
+.\"*******************************************************************
+.\"
+.\" This file was generated with po4a. Translate the source file.
+.\"
+.\"*******************************************************************
+.TH test1 1
+.SH NOM
+test \- juste un test
+
+Bonjour
diff --git a/t/cfg/single-invalid/single.pot b/t/cfg/single-invalid/single.pot
new file mode 100644
index 0000000..c6480a4
--- /dev/null
+++ b/t/cfg/single-invalid/single.pot
@@ -0,0 +1,39 @@
+# SOME DESCRIPTIVE TITLE
+# Copyright (C) YEAR Free Software Foundation, Inc.
+# This file is distributed under the same license as the PACKAGE package.
+# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
+#
+#, fuzzy
+msgid ""
+msgstr ""
+"Project-Id-Version: PACKAGE VERSION\n"
+"POT-Creation-Date: 2005-04-24 2:54+0200\n"
+"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
+"Language-Team: LANGUAGE <LL@li.org>\n"
+"Language: \n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+
+#. type: TH
+#: t-05-config/test00_man.1:1
+#, no-wrap
+msgid "test1"
+msgstr ""
+
+#. type: SH
+#: t-05-config/test00_man.1:2
+#, no-wrap
+msgid "NAME"
+msgstr ""
+
+#. type: Plain text
+#: t-05-config/test00_man.1:4
+msgid "test - just a test"
+msgstr ""
+
+#. type: Plain text
+#: t-05-config/test00_man.1:5
+msgid "Hello"
+msgstr ""
diff --git a/t/cfg/single-newstr/_output b/t/cfg/single-newstr/_output
new file mode 100644
index 0000000..3770f93
--- /dev/null
+++ b/t/cfg/single-newstr/_output
@@ -0,0 +1,3 @@
+Updating single-newstr.pot: (5 entries)
+Updating single-newstr.fr.po: 4 translated messages, 1 untranslated message.
+single-newstr.man.fr.1 is 80% translated (4 of 5 strings).
diff --git a/t/cfg/single-newstr/_single-newstr.fr.po b/t/cfg/single-newstr/_single-newstr.fr.po
new file mode 100644
index 0000000..0e99734
--- /dev/null
+++ b/t/cfg/single-newstr/_single-newstr.fr.po
@@ -0,0 +1,45 @@
+# French translations for po package
+# Copyright (C) 2020 Free Software Foundation, Inc.
+# This file is distributed under the same license as the po package.
+# Automatically generated, 2020.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: po 4a\n"
+"POT-Creation-Date: 2020-04-13 00:33+0200\n"
+"PO-Revision-Date: 2005-04-24 2:54+0200\n"
+"Last-Translator: Automatically generated\n"
+"Language-Team: none\n"
+"Language: fr\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=2; plural=(n > 1);\n"
+
+#. type: TH
+#: cfg/single-newstr/single-newstr.man.1:1
+#, no-wrap
+msgid "test1"
+msgstr "test1"
+
+#. type: SH
+#: cfg/single-newstr/single-newstr.man.1:2
+#, no-wrap
+msgid "NAME"
+msgstr "NOM"
+
+#. type: Plain text
+#: cfg/single-newstr/single-newstr.man.1:4
+msgid "test - just a test"
+msgstr "test - juste un test"
+
+#. type: Plain text
+#: cfg/single-newstr/single-newstr.man.1:6
+msgid "Hello"
+msgstr "Bonjour"
+
+#. type: SH
+#: cfg/single-newstr/single-newstr.man.1:7
+#, no-wrap
+msgid "MORE CONTENT"
+msgstr ""
diff --git a/t/cfg/single-newstr/_single-newstr.man.fr.1 b/t/cfg/single-newstr/_single-newstr.man.fr.1
new file mode 100644
index 0000000..4dea14d
--- /dev/null
+++ b/t/cfg/single-newstr/_single-newstr.man.fr.1
@@ -0,0 +1,12 @@
+.\"*******************************************************************
+.\"
+.\" This file was generated with po4a. Translate the source file.
+.\"
+.\"*******************************************************************
+.TH test1 1
+.SH NOM
+test \- juste un test
+
+Bonjour
+
+.SH "MORE CONTENT"
diff --git a/t/cfg/single-newstr/_single-newstr.pot b/t/cfg/single-newstr/_single-newstr.pot
new file mode 100644
index 0000000..8dfa72f
--- /dev/null
+++ b/t/cfg/single-newstr/_single-newstr.pot
@@ -0,0 +1,45 @@
+# SOME DESCRIPTIVE TITLE
+# Copyright (C) YEAR Free Software Foundation, Inc.
+# This file is distributed under the same license as the PACKAGE package.
+# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
+#
+#, fuzzy
+msgid ""
+msgstr ""
+"Project-Id-Version: PACKAGE VERSION\n"
+"POT-Creation-Date: 2020-04-12 18:52+0200\n"
+"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
+"Language-Team: LANGUAGE <LL@li.org>\n"
+"Language: \n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+
+#. type: TH
+#: cfg/single-newstr/single-newstr.man.1:1
+#, no-wrap
+msgid "test1"
+msgstr ""
+
+#. type: SH
+#: cfg/single-newstr/single-newstr.man.1:2
+#, no-wrap
+msgid "NAME"
+msgstr ""
+
+#. type: Plain text
+#: cfg/single-newstr/single-newstr.man.1:4
+msgid "test - just a test"
+msgstr ""
+
+#. type: Plain text
+#: cfg/single-newstr/single-newstr.man.1:5
+msgid "Hello"
+msgstr ""
+
+#. type: SH
+#: cfg/single-newstr/single-newstr.man.1:7
+#, no-wrap
+msgid "MORE CONTENT"
+msgstr ""
diff --git a/t/cfg/single-newstr/po4a.conf b/t/cfg/single-newstr/po4a.conf
new file mode 100644
index 0000000..cdd9db0
--- /dev/null
+++ b/t/cfg/single-newstr/po4a.conf
@@ -0,0 +1,6 @@
+#comment
+[po4a_langs] fr
+[po4a_paths] single-newstr.pot $lang:single-newstr.$lang.po
+[options] opt:"--msgmerge-opt --silent"
+
+[type:man] single-newstr.man.1 $lang:single-newstr.man.$lang.1
diff --git a/t/cfg/single-newstr/single-newstr.fr.po b/t/cfg/single-newstr/single-newstr.fr.po
new file mode 100644
index 0000000..e9d9c5a
--- /dev/null
+++ b/t/cfg/single-newstr/single-newstr.fr.po
@@ -0,0 +1,39 @@
+# French translations for po package
+# Copyright (C) 2020 Free Software Foundation, Inc.
+# This file is distributed under the same license as the po package.
+# Automatically generated, 2020.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: po 4a\n"
+"POT-Creation-Date: 2005-04-24 2:54+0200\n"
+"PO-Revision-Date: 2005-04-24 2:54+0200\n"
+"Last-Translator: Automatically generated\n"
+"Language-Team: none\n"
+"Language: fr\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=2; plural=(n > 1);\n"
+
+#. type: TH
+#: cfg/single-newstr/single-newstr.man.1:1
+#, no-wrap
+msgid "test1"
+msgstr "test1"
+
+#. type: SH
+#: cfg/single-newstr/single-newstr.man.1:2
+#, no-wrap
+msgid "NAME"
+msgstr "NOM"
+
+#. type: Plain text
+#: cfg/single-newstr/single-newstr.man.1:4
+msgid "test - just a test"
+msgstr "test - juste un test"
+
+#. type: Plain text
+#: cfg/single-newstr/single-newstr.man.1:6
+msgid "Hello"
+msgstr "Bonjour"
diff --git a/t/cfg/single-newstr/single-newstr.man.1 b/t/cfg/single-newstr/single-newstr.man.1
new file mode 100644
index 0000000..56efd5a
--- /dev/null
+++ b/t/cfg/single-newstr/single-newstr.man.1
@@ -0,0 +1,7 @@
+.TH test1 1
+.SH NAME
+test \- just a test
+
+Hello
+
+.SH MORE CONTENT \ No newline at end of file
diff --git a/t/cfg/single-newstr/single-newstr.pot b/t/cfg/single-newstr/single-newstr.pot
new file mode 100644
index 0000000..9f4a649
--- /dev/null
+++ b/t/cfg/single-newstr/single-newstr.pot
@@ -0,0 +1,39 @@
+# SOME DESCRIPTIVE TITLE
+# Copyright (C) YEAR Free Software Foundation, Inc.
+# This file is distributed under the same license as the PACKAGE package.
+# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
+#
+#, fuzzy
+msgid ""
+msgstr ""
+"Project-Id-Version: PACKAGE VERSION\n"
+"POT-Creation-Date: 2005-04-24 2:54+0200\n"
+"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
+"Language-Team: LANGUAGE <LL@li.org>\n"
+"Language: \n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+
+#. type: TH
+#: cfg/single-newstr/single-newstr.man.1:1
+#, no-wrap
+msgid "test1"
+msgstr ""
+
+#. type: SH
+#: cfg/single-newstr/single-newstr.man.1:2
+#, no-wrap
+msgid "NAME"
+msgstr ""
+
+#. type: Plain text
+#: cfg/single-newstr/single-newstr.man.1:4
+msgid "test - just a test"
+msgstr ""
+
+#. type: Plain text
+#: cfg/single-newstr/single-newstr.man.1:5
+msgid "Hello"
+msgstr ""
diff --git a/t/cfg/single-nopo/_output b/t/cfg/single-nopo/_output
new file mode 100644
index 0000000..f8bf8c3
--- /dev/null
+++ b/t/cfg/single-nopo/_output
@@ -0,0 +1,3 @@
+Updating single.pot: (4 entries)
+Creating an empty PO file in single.fr.po.
+Discard single.man.fr.1 (0 of 4 strings; only 0% translated; need 80%).
diff --git a/t/cfg/single-nopo/_output-noupdate b/t/cfg/single-nopo/_output-noupdate
new file mode 100644
index 0000000..2237271
--- /dev/null
+++ b/t/cfg/single-nopo/_output-noupdate
@@ -0,0 +1,3 @@
+NOT updating single.pot as requested (--no-update).
+NOT updating the POT file single.pot as requested (--no-update).
+PO file single.fr.po for language fr is missing -- skipping.
diff --git a/t/cfg/single-nopo/_single.fr.po b/t/cfg/single-nopo/_single.fr.po
new file mode 100644
index 0000000..1772779
--- /dev/null
+++ b/t/cfg/single-nopo/_single.fr.po
@@ -0,0 +1,39 @@
+# French translations for po package
+# Copyright (C) 2020 Free Software Foundation, Inc.
+# This file is distributed under the same license as the po package.
+# Automatically generated, 2020.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: po 4a\n"
+"POT-Creation-Date: 2005-04-24 2:54+0200\n"
+"PO-Revision-Date: 2005-04-24 2:54+0200\n"
+"Last-Translator: Automatically generated\n"
+"Language-Team: none\n"
+"Language: fr\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=2; plural=(n > 1);\n"
+
+#. type: TH
+#: t-05-config/test00_man.1:1
+#, no-wrap
+msgid "test1"
+msgstr ""
+
+#. type: SH
+#: t-05-config/test00_man.1:2
+#, no-wrap
+msgid "NAME"
+msgstr ""
+
+#. type: Plain text
+#: t-05-config/test00_man.1:4
+msgid "test - just a test"
+msgstr ""
+
+#. type: Plain text
+#: t-05-config/test00_man.1:5
+msgid "Hello"
+msgstr ""
diff --git a/t/cfg/single-nopo/po4a.conf b/t/cfg/single-nopo/po4a.conf
new file mode 100644
index 0000000..da28633
--- /dev/null
+++ b/t/cfg/single-nopo/po4a.conf
@@ -0,0 +1,5 @@
+#comment
+[po4a_paths] single.pot fr:single.fr.po
+[options] opt:"--msgmerge-opt --silent"
+
+[type:man] single.man.1 fr:single.man.fr.1
diff --git a/t/cfg/single-nopo/single.man.1 b/t/cfg/single-nopo/single.man.1
new file mode 100644
index 0000000..2178e17
--- /dev/null
+++ b/t/cfg/single-nopo/single.man.1
@@ -0,0 +1,5 @@
+.TH test1 1
+.SH NAME
+test \- just a test
+
+Hello
diff --git a/t/cfg/single-nopo/single.pot b/t/cfg/single-nopo/single.pot
new file mode 100644
index 0000000..c6480a4
--- /dev/null
+++ b/t/cfg/single-nopo/single.pot
@@ -0,0 +1,39 @@
+# SOME DESCRIPTIVE TITLE
+# Copyright (C) YEAR Free Software Foundation, Inc.
+# This file is distributed under the same license as the PACKAGE package.
+# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
+#
+#, fuzzy
+msgid ""
+msgstr ""
+"Project-Id-Version: PACKAGE VERSION\n"
+"POT-Creation-Date: 2005-04-24 2:54+0200\n"
+"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
+"Language-Team: LANGUAGE <LL@li.org>\n"
+"Language: \n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+
+#. type: TH
+#: t-05-config/test00_man.1:1
+#, no-wrap
+msgid "test1"
+msgstr ""
+
+#. type: SH
+#: t-05-config/test00_man.1:2
+#, no-wrap
+msgid "NAME"
+msgstr ""
+
+#. type: Plain text
+#: t-05-config/test00_man.1:4
+msgid "test - just a test"
+msgstr ""
+
+#. type: Plain text
+#: t-05-config/test00_man.1:5
+msgid "Hello"
+msgstr ""
diff --git a/t/cfg/single-nopotpo/_output b/t/cfg/single-nopotpo/_output
new file mode 100644
index 0000000..d3e3bd4
--- /dev/null
+++ b/t/cfg/single-nopotpo/_output
@@ -0,0 +1,3 @@
+Creating single.pot: (4 entries)
+Creating an empty PO file in single.fr.po.
+Discard single.man.fr.1 (0 of 4 strings; only 0% translated; need 80%).
diff --git a/t/cfg/single-nopotpo/_single.fr.po b/t/cfg/single-nopotpo/_single.fr.po
new file mode 100644
index 0000000..1772779
--- /dev/null
+++ b/t/cfg/single-nopotpo/_single.fr.po
@@ -0,0 +1,39 @@
+# French translations for po package
+# Copyright (C) 2020 Free Software Foundation, Inc.
+# This file is distributed under the same license as the po package.
+# Automatically generated, 2020.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: po 4a\n"
+"POT-Creation-Date: 2005-04-24 2:54+0200\n"
+"PO-Revision-Date: 2005-04-24 2:54+0200\n"
+"Last-Translator: Automatically generated\n"
+"Language-Team: none\n"
+"Language: fr\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=2; plural=(n > 1);\n"
+
+#. type: TH
+#: t-05-config/test00_man.1:1
+#, no-wrap
+msgid "test1"
+msgstr ""
+
+#. type: SH
+#: t-05-config/test00_man.1:2
+#, no-wrap
+msgid "NAME"
+msgstr ""
+
+#. type: Plain text
+#: t-05-config/test00_man.1:4
+msgid "test - just a test"
+msgstr ""
+
+#. type: Plain text
+#: t-05-config/test00_man.1:5
+msgid "Hello"
+msgstr ""
diff --git a/t/cfg/single-nopotpo/_single.pot b/t/cfg/single-nopotpo/_single.pot
new file mode 100644
index 0000000..430a879
--- /dev/null
+++ b/t/cfg/single-nopotpo/_single.pot
@@ -0,0 +1,39 @@
+# SOME DESCRIPTIVE TITLE
+# Copyright (C) YEAR Free Software Foundation, Inc.
+# This file is distributed under the same license as the PACKAGE package.
+# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
+#
+#, fuzzy
+msgid ""
+msgstr ""
+"Project-Id-Version: PACKAGE VERSION\n"
+"POT-Creation-Date: 2020-04-06 02:01+0200\n"
+"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
+"Language-Team: LANGUAGE <LL@li.org>\n"
+"Language: \n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+
+#. type: TH
+#: cfg/single-nopotpo/single.man.1:1
+#, no-wrap
+msgid "test1"
+msgstr ""
+
+#. type: SH
+#: cfg/single-nopotpo/single.man.1:2
+#, no-wrap
+msgid "NAME"
+msgstr ""
+
+#. type: Plain text
+#: cfg/single-nopotpo/single.man.1:4
+msgid "test - just a test"
+msgstr ""
+
+#. type: Plain text
+#: cfg/single-nopotpo/single.man.1:5
+msgid "Hello"
+msgstr ""
diff --git a/t/cfg/single-nopotpo/po4a.conf b/t/cfg/single-nopotpo/po4a.conf
new file mode 100644
index 0000000..da28633
--- /dev/null
+++ b/t/cfg/single-nopotpo/po4a.conf
@@ -0,0 +1,5 @@
+#comment
+[po4a_paths] single.pot fr:single.fr.po
+[options] opt:"--msgmerge-opt --silent"
+
+[type:man] single.man.1 fr:single.man.fr.1
diff --git a/t/cfg/single-nopotpo/single.man.1 b/t/cfg/single-nopotpo/single.man.1
new file mode 100644
index 0000000..2178e17
--- /dev/null
+++ b/t/cfg/single-nopotpo/single.man.1
@@ -0,0 +1,5 @@
+.TH test1 1
+.SH NAME
+test \- just a test
+
+Hello
diff --git a/t/cfg/single-podirectory-emptypot-emptypo/_fr.po.expected b/t/cfg/single-podirectory-emptypot-emptypo/_fr.po.expected
new file mode 100644
index 0000000..3d5100f
--- /dev/null
+++ b/t/cfg/single-podirectory-emptypot-emptypo/_fr.po.expected
@@ -0,0 +1,39 @@
+# French translations for po package
+# Copyright (C) 2024 Free Software Foundation, Inc.
+# This file is distributed under the same license as the po package.
+# Automatically generated, 2024.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: po 4a\n"
+"POT-Creation-Date: 2024-01-04 22:50+0100\n"
+"PO-Revision-Date: 2024-01-04 22:50+0100\n"
+"Last-Translator: Automatically generated\n"
+"Language-Team: none\n"
+"Language: fr\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=2; plural=(n > 1);\n"
+
+#. type: TH
+#: single.man.1:1
+#, no-wrap
+msgid "test1"
+msgstr ""
+
+#. type: SH
+#: single.man.1:2
+#, no-wrap
+msgid "NAME"
+msgstr ""
+
+#. type: Plain text
+#: single.man.1:4
+msgid "test - just a test"
+msgstr ""
+
+#. type: Plain text
+#: single.man.1:5
+msgid "Hello"
+msgstr ""
diff --git a/t/cfg/single-podirectory-emptypot-emptypo/_output b/t/cfg/single-podirectory-emptypot-emptypo/_output
new file mode 100644
index 0000000..53b4fa7
--- /dev/null
+++ b/t/cfg/single-podirectory-emptypot-emptypo/_output
@@ -0,0 +1,6 @@
+Using '.' as a po_directory.
+Found language 'fr' in the provided po_directory: ./fr.po
+Found POT file './single.pot' in the provided po_directory.
+Updating ./single.pot: (4 entries)
+Creating an empty PO file in fr.po.
+Discard single.man.fr.1 (0 of 4 strings; only 0% translated; need 80%).
diff --git a/t/cfg/single-podirectory-emptypot-emptypo/_single.pot.expected b/t/cfg/single-podirectory-emptypot-emptypo/_single.pot.expected
new file mode 100644
index 0000000..430a879
--- /dev/null
+++ b/t/cfg/single-podirectory-emptypot-emptypo/_single.pot.expected
@@ -0,0 +1,39 @@
+# SOME DESCRIPTIVE TITLE
+# Copyright (C) YEAR Free Software Foundation, Inc.
+# This file is distributed under the same license as the PACKAGE package.
+# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
+#
+#, fuzzy
+msgid ""
+msgstr ""
+"Project-Id-Version: PACKAGE VERSION\n"
+"POT-Creation-Date: 2020-04-06 02:01+0200\n"
+"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
+"Language-Team: LANGUAGE <LL@li.org>\n"
+"Language: \n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+
+#. type: TH
+#: cfg/single-nopotpo/single.man.1:1
+#, no-wrap
+msgid "test1"
+msgstr ""
+
+#. type: SH
+#: cfg/single-nopotpo/single.man.1:2
+#, no-wrap
+msgid "NAME"
+msgstr ""
+
+#. type: Plain text
+#: cfg/single-nopotpo/single.man.1:4
+msgid "test - just a test"
+msgstr ""
+
+#. type: Plain text
+#: cfg/single-nopotpo/single.man.1:5
+msgid "Hello"
+msgstr ""
diff --git a/t/cfg/single-podirectory-emptypot-emptypo/fr.po b/t/cfg/single-podirectory-emptypot-emptypo/fr.po
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/t/cfg/single-podirectory-emptypot-emptypo/fr.po
diff --git a/t/cfg/single-podirectory-emptypot-emptypo/po4a.conf b/t/cfg/single-podirectory-emptypot-emptypo/po4a.conf
new file mode 100644
index 0000000..a34f60a
--- /dev/null
+++ b/t/cfg/single-podirectory-emptypot-emptypo/po4a.conf
@@ -0,0 +1,5 @@
+#comment
+[po_directory] .
+[options] opt:"--msgmerge-opt --silent"
+
+[type:man] single.man.1 fr:single.man.fr.1
diff --git a/t/cfg/single-podirectory-emptypot-emptypo/single.man.1 b/t/cfg/single-podirectory-emptypot-emptypo/single.man.1
new file mode 100644
index 0000000..2178e17
--- /dev/null
+++ b/t/cfg/single-podirectory-emptypot-emptypo/single.man.1
@@ -0,0 +1,5 @@
+.TH test1 1
+.SH NAME
+test \- just a test
+
+Hello
diff --git a/t/cfg/single-podirectory-emptypot-emptypo/single.pot b/t/cfg/single-podirectory-emptypot-emptypo/single.pot
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/t/cfg/single-podirectory-emptypot-emptypo/single.pot
diff --git a/t/cfg/single-podirectory-emptypot/_output b/t/cfg/single-podirectory-emptypot/_output
new file mode 100644
index 0000000..0a9d135
--- /dev/null
+++ b/t/cfg/single-podirectory-emptypot/_output
@@ -0,0 +1,6 @@
+Using 'po' as a po_directory.
+Found language 'fr' in the provided po_directory: po/fr.po
+Found POT file 'po/single.pot' in the provided po_directory.
+Updating po/single.pot: (4 entries)
+Updating po/fr.po: 4 translated messages.
+single.man.fr.1 is 100% translated (4 strings).
diff --git a/t/cfg/single-podirectory-emptypot/_single.man.fr.1 b/t/cfg/single-podirectory-emptypot/_single.man.fr.1
new file mode 100644
index 0000000..873acf4
--- /dev/null
+++ b/t/cfg/single-podirectory-emptypot/_single.man.fr.1
@@ -0,0 +1,10 @@
+.\"*******************************************************************
+.\"
+.\" This file was generated with po4a. Translate the source file.
+.\"
+.\"*******************************************************************
+.TH test1 1
+.SH NOM
+test \- juste un test
+
+Bonjour
diff --git a/t/cfg/single-podirectory-emptypot/_single.pot b/t/cfg/single-podirectory-emptypot/_single.pot
new file mode 100644
index 0000000..c6480a4
--- /dev/null
+++ b/t/cfg/single-podirectory-emptypot/_single.pot
@@ -0,0 +1,39 @@
+# SOME DESCRIPTIVE TITLE
+# Copyright (C) YEAR Free Software Foundation, Inc.
+# This file is distributed under the same license as the PACKAGE package.
+# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
+#
+#, fuzzy
+msgid ""
+msgstr ""
+"Project-Id-Version: PACKAGE VERSION\n"
+"POT-Creation-Date: 2005-04-24 2:54+0200\n"
+"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
+"Language-Team: LANGUAGE <LL@li.org>\n"
+"Language: \n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+
+#. type: TH
+#: t-05-config/test00_man.1:1
+#, no-wrap
+msgid "test1"
+msgstr ""
+
+#. type: SH
+#: t-05-config/test00_man.1:2
+#, no-wrap
+msgid "NAME"
+msgstr ""
+
+#. type: Plain text
+#: t-05-config/test00_man.1:4
+msgid "test - just a test"
+msgstr ""
+
+#. type: Plain text
+#: t-05-config/test00_man.1:5
+msgid "Hello"
+msgstr ""
diff --git a/t/cfg/single-podirectory-emptypot/po/fr.po b/t/cfg/single-podirectory-emptypot/po/fr.po
new file mode 100644
index 0000000..c1e3251
--- /dev/null
+++ b/t/cfg/single-podirectory-emptypot/po/fr.po
@@ -0,0 +1,39 @@
+# French translations for po package
+# Copyright (C) 2020 Free Software Foundation, Inc.
+# This file is distributed under the same license as the po package.
+# Automatically generated, 2020.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: po 4a\n"
+"POT-Creation-Date: 2005-04-24 2:54+0200\n"
+"PO-Revision-Date: 2005-04-24 2:54+0200\n"
+"Last-Translator: Automatically generated\n"
+"Language-Team: none\n"
+"Language: fr\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=2; plural=(n > 1);\n"
+
+#. type: TH
+#: t-05-config/test00_man.1:1
+#, no-wrap
+msgid "test1"
+msgstr "test1"
+
+#. type: SH
+#: t-05-config/test00_man.1:2
+#, no-wrap
+msgid "NAME"
+msgstr "NOM"
+
+#. type: Plain text
+#: t-05-config/test00_man.1:4
+msgid "test - just a test"
+msgstr "test - juste un test"
+
+#. type: Plain text
+#: t-05-config/test00_man.1:5
+msgid "Hello"
+msgstr "Bonjour"
diff --git a/t/cfg/single-podirectory-emptypot/po/single.pot b/t/cfg/single-podirectory-emptypot/po/single.pot
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/t/cfg/single-podirectory-emptypot/po/single.pot
diff --git a/t/cfg/single-podirectory-emptypot/po4a.conf b/t/cfg/single-podirectory-emptypot/po4a.conf
new file mode 100644
index 0000000..732d6c5
--- /dev/null
+++ b/t/cfg/single-podirectory-emptypot/po4a.conf
@@ -0,0 +1,5 @@
+[po_directory] po
+
+[options] opt:"--msgmerge-opt --silent"
+
+[type:man] single.man.1 $lang:single.man.$lang.1
diff --git a/t/cfg/single-podirectory-emptypot/single.man.1 b/t/cfg/single-podirectory-emptypot/single.man.1
new file mode 100644
index 0000000..2178e17
--- /dev/null
+++ b/t/cfg/single-podirectory-emptypot/single.man.1
@@ -0,0 +1,5 @@
+.TH test1 1
+.SH NAME
+test \- just a test
+
+Hello
diff --git a/t/cfg/single-podirectory/_output b/t/cfg/single-podirectory/_output
new file mode 100644
index 0000000..0a9d135
--- /dev/null
+++ b/t/cfg/single-podirectory/_output
@@ -0,0 +1,6 @@
+Using 'po' as a po_directory.
+Found language 'fr' in the provided po_directory: po/fr.po
+Found POT file 'po/single.pot' in the provided po_directory.
+Updating po/single.pot: (4 entries)
+Updating po/fr.po: 4 translated messages.
+single.man.fr.1 is 100% translated (4 strings).
diff --git a/t/cfg/single-podirectory/_single.man.fr.1 b/t/cfg/single-podirectory/_single.man.fr.1
new file mode 100644
index 0000000..873acf4
--- /dev/null
+++ b/t/cfg/single-podirectory/_single.man.fr.1
@@ -0,0 +1,10 @@
+.\"*******************************************************************
+.\"
+.\" This file was generated with po4a. Translate the source file.
+.\"
+.\"*******************************************************************
+.TH test1 1
+.SH NOM
+test \- juste un test
+
+Bonjour
diff --git a/t/cfg/single-podirectory/po/fr.po b/t/cfg/single-podirectory/po/fr.po
new file mode 100644
index 0000000..c1e3251
--- /dev/null
+++ b/t/cfg/single-podirectory/po/fr.po
@@ -0,0 +1,39 @@
+# French translations for po package
+# Copyright (C) 2020 Free Software Foundation, Inc.
+# This file is distributed under the same license as the po package.
+# Automatically generated, 2020.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: po 4a\n"
+"POT-Creation-Date: 2005-04-24 2:54+0200\n"
+"PO-Revision-Date: 2005-04-24 2:54+0200\n"
+"Last-Translator: Automatically generated\n"
+"Language-Team: none\n"
+"Language: fr\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=2; plural=(n > 1);\n"
+
+#. type: TH
+#: t-05-config/test00_man.1:1
+#, no-wrap
+msgid "test1"
+msgstr "test1"
+
+#. type: SH
+#: t-05-config/test00_man.1:2
+#, no-wrap
+msgid "NAME"
+msgstr "NOM"
+
+#. type: Plain text
+#: t-05-config/test00_man.1:4
+msgid "test - just a test"
+msgstr "test - juste un test"
+
+#. type: Plain text
+#: t-05-config/test00_man.1:5
+msgid "Hello"
+msgstr "Bonjour"
diff --git a/t/cfg/single-podirectory/po/single.pot b/t/cfg/single-podirectory/po/single.pot
new file mode 100644
index 0000000..c6480a4
--- /dev/null
+++ b/t/cfg/single-podirectory/po/single.pot
@@ -0,0 +1,39 @@
+# SOME DESCRIPTIVE TITLE
+# Copyright (C) YEAR Free Software Foundation, Inc.
+# This file is distributed under the same license as the PACKAGE package.
+# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
+#
+#, fuzzy
+msgid ""
+msgstr ""
+"Project-Id-Version: PACKAGE VERSION\n"
+"POT-Creation-Date: 2005-04-24 2:54+0200\n"
+"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
+"Language-Team: LANGUAGE <LL@li.org>\n"
+"Language: \n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+
+#. type: TH
+#: t-05-config/test00_man.1:1
+#, no-wrap
+msgid "test1"
+msgstr ""
+
+#. type: SH
+#: t-05-config/test00_man.1:2
+#, no-wrap
+msgid "NAME"
+msgstr ""
+
+#. type: Plain text
+#: t-05-config/test00_man.1:4
+msgid "test - just a test"
+msgstr ""
+
+#. type: Plain text
+#: t-05-config/test00_man.1:5
+msgid "Hello"
+msgstr ""
diff --git a/t/cfg/single-podirectory/po4a.conf b/t/cfg/single-podirectory/po4a.conf
new file mode 100644
index 0000000..732d6c5
--- /dev/null
+++ b/t/cfg/single-podirectory/po4a.conf
@@ -0,0 +1,5 @@
+[po_directory] po
+
+[options] opt:"--msgmerge-opt --silent"
+
+[type:man] single.man.1 $lang:single.man.$lang.1
diff --git a/t/cfg/single-podirectory/single.man.1 b/t/cfg/single-podirectory/single.man.1
new file mode 100644
index 0000000..2178e17
--- /dev/null
+++ b/t/cfg/single-podirectory/single.man.1
@@ -0,0 +1,5 @@
+.TH test1 1
+.SH NAME
+test \- just a test
+
+Hello
diff --git a/t/cfg/single-potin/_output b/t/cfg/single-potin/_output
new file mode 100644
index 0000000..ed431cd
--- /dev/null
+++ b/t/cfg/single-potin/_output
@@ -0,0 +1,3 @@
+Updating single.pot: (4 entries)
+Updating single.fr.po: 4 translated messages.
+single.man.fr.1 is 66.66% translated (4 of 6 strings).
diff --git a/t/cfg/single-potin/_single.man.fr.1 b/t/cfg/single-potin/_single.man.fr.1
new file mode 100644
index 0000000..f710e2f
--- /dev/null
+++ b/t/cfg/single-potin/_single.man.fr.1
@@ -0,0 +1,15 @@
+.\"*******************************************************************
+.\"
+.\" This file was generated with po4a. Translate the source file.
+.\"
+.\"*******************************************************************
+.TH test1 1
+.SH NOM
+test \- juste un test
+
+Bonjour
+
+.SH "NOT TRANSLATED"
+
+The content of this section is not to be translated (not part of the
+filtered page).
diff --git a/t/cfg/single-potin/po4a.conf b/t/cfg/single-potin/po4a.conf
new file mode 100644
index 0000000..7117090
--- /dev/null
+++ b/t/cfg/single-potin/po4a.conf
@@ -0,0 +1,5 @@
+#comment
+[po4a_paths] single.pot fr:single.fr.po
+[options] --msgmerge-opt --silent --keep 0
+
+[type:man] single.man.1 fr:single.man.fr.1 pot_in:single-filtered.man.1
diff --git a/t/cfg/single-potin/single-filtered.man.1 b/t/cfg/single-potin/single-filtered.man.1
new file mode 100644
index 0000000..2178e17
--- /dev/null
+++ b/t/cfg/single-potin/single-filtered.man.1
@@ -0,0 +1,5 @@
+.TH test1 1
+.SH NAME
+test \- just a test
+
+Hello
diff --git a/t/cfg/single-potin/single.fr.po b/t/cfg/single-potin/single.fr.po
new file mode 100644
index 0000000..c1e3251
--- /dev/null
+++ b/t/cfg/single-potin/single.fr.po
@@ -0,0 +1,39 @@
+# French translations for po package
+# Copyright (C) 2020 Free Software Foundation, Inc.
+# This file is distributed under the same license as the po package.
+# Automatically generated, 2020.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: po 4a\n"
+"POT-Creation-Date: 2005-04-24 2:54+0200\n"
+"PO-Revision-Date: 2005-04-24 2:54+0200\n"
+"Last-Translator: Automatically generated\n"
+"Language-Team: none\n"
+"Language: fr\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=2; plural=(n > 1);\n"
+
+#. type: TH
+#: t-05-config/test00_man.1:1
+#, no-wrap
+msgid "test1"
+msgstr "test1"
+
+#. type: SH
+#: t-05-config/test00_man.1:2
+#, no-wrap
+msgid "NAME"
+msgstr "NOM"
+
+#. type: Plain text
+#: t-05-config/test00_man.1:4
+msgid "test - just a test"
+msgstr "test - juste un test"
+
+#. type: Plain text
+#: t-05-config/test00_man.1:5
+msgid "Hello"
+msgstr "Bonjour"
diff --git a/t/cfg/single-potin/single.man.1 b/t/cfg/single-potin/single.man.1
new file mode 100644
index 0000000..2dbd733
--- /dev/null
+++ b/t/cfg/single-potin/single.man.1
@@ -0,0 +1,10 @@
+.TH test1 1
+.SH NAME
+test \- just a test
+
+Hello
+
+.SH "NOT TRANSLATED"
+
+The content of this section is not to be translated (not part of the
+filtered page).
diff --git a/t/cfg/single-potin/single.pot b/t/cfg/single-potin/single.pot
new file mode 100644
index 0000000..c6480a4
--- /dev/null
+++ b/t/cfg/single-potin/single.pot
@@ -0,0 +1,39 @@
+# SOME DESCRIPTIVE TITLE
+# Copyright (C) YEAR Free Software Foundation, Inc.
+# This file is distributed under the same license as the PACKAGE package.
+# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
+#
+#, fuzzy
+msgid ""
+msgstr ""
+"Project-Id-Version: PACKAGE VERSION\n"
+"POT-Creation-Date: 2005-04-24 2:54+0200\n"
+"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
+"Language-Team: LANGUAGE <LL@li.org>\n"
+"Language: \n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+
+#. type: TH
+#: t-05-config/test00_man.1:1
+#, no-wrap
+msgid "test1"
+msgstr ""
+
+#. type: SH
+#: t-05-config/test00_man.1:2
+#, no-wrap
+msgid "NAME"
+msgstr ""
+
+#. type: Plain text
+#: t-05-config/test00_man.1:4
+msgid "test - just a test"
+msgstr ""
+
+#. type: Plain text
+#: t-05-config/test00_man.1:5
+msgid "Hello"
+msgstr ""
diff --git a/t/cfg/single-uptodate/_output b/t/cfg/single-uptodate/_output
new file mode 100644
index 0000000..1ccbbe0
--- /dev/null
+++ b/t/cfg/single-uptodate/_output
@@ -0,0 +1,3 @@
+Updating single-uptodate.pot: (4 entries)
+Updating single-uptodate.fr.po: 4 translated messages.
+single-uptodate.man.fr.1 is 100% translated (4 strings).
diff --git a/t/cfg/single-uptodate/single-uptodate.conf b/t/cfg/single-uptodate/single-uptodate.conf
new file mode 100644
index 0000000..91213e2
--- /dev/null
+++ b/t/cfg/single-uptodate/single-uptodate.conf
@@ -0,0 +1,5 @@
+#comment
+[po4a_paths] single-uptodate.pot fr:single-uptodate.fr.po
+[options] opt:"--msgmerge-opt --silent"
+
+[type:man] single-uptodate.man.1 fr:single-uptodate.man.fr.1
diff --git a/t/cfg/single-uptodate/single-uptodate.fr.po b/t/cfg/single-uptodate/single-uptodate.fr.po
new file mode 100644
index 0000000..c1e3251
--- /dev/null
+++ b/t/cfg/single-uptodate/single-uptodate.fr.po
@@ -0,0 +1,39 @@
+# French translations for po package
+# Copyright (C) 2020 Free Software Foundation, Inc.
+# This file is distributed under the same license as the po package.
+# Automatically generated, 2020.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: po 4a\n"
+"POT-Creation-Date: 2005-04-24 2:54+0200\n"
+"PO-Revision-Date: 2005-04-24 2:54+0200\n"
+"Last-Translator: Automatically generated\n"
+"Language-Team: none\n"
+"Language: fr\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=2; plural=(n > 1);\n"
+
+#. type: TH
+#: t-05-config/test00_man.1:1
+#, no-wrap
+msgid "test1"
+msgstr "test1"
+
+#. type: SH
+#: t-05-config/test00_man.1:2
+#, no-wrap
+msgid "NAME"
+msgstr "NOM"
+
+#. type: Plain text
+#: t-05-config/test00_man.1:4
+msgid "test - just a test"
+msgstr "test - juste un test"
+
+#. type: Plain text
+#: t-05-config/test00_man.1:5
+msgid "Hello"
+msgstr "Bonjour"
diff --git a/t/cfg/single-uptodate/single-uptodate.man.1 b/t/cfg/single-uptodate/single-uptodate.man.1
new file mode 100644
index 0000000..2178e17
--- /dev/null
+++ b/t/cfg/single-uptodate/single-uptodate.man.1
@@ -0,0 +1,5 @@
+.TH test1 1
+.SH NAME
+test \- just a test
+
+Hello
diff --git a/t/cfg/single-uptodate/single-uptodate.man.fr.1 b/t/cfg/single-uptodate/single-uptodate.man.fr.1
new file mode 100644
index 0000000..873acf4
--- /dev/null
+++ b/t/cfg/single-uptodate/single-uptodate.man.fr.1
@@ -0,0 +1,10 @@
+.\"*******************************************************************
+.\"
+.\" This file was generated with po4a. Translate the source file.
+.\"
+.\"*******************************************************************
+.TH test1 1
+.SH NOM
+test \- juste un test
+
+Bonjour
diff --git a/t/cfg/single-uptodate/single-uptodate.pot b/t/cfg/single-uptodate/single-uptodate.pot
new file mode 100644
index 0000000..c6480a4
--- /dev/null
+++ b/t/cfg/single-uptodate/single-uptodate.pot
@@ -0,0 +1,39 @@
+# SOME DESCRIPTIVE TITLE
+# Copyright (C) YEAR Free Software Foundation, Inc.
+# This file is distributed under the same license as the PACKAGE package.
+# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
+#
+#, fuzzy
+msgid ""
+msgstr ""
+"Project-Id-Version: PACKAGE VERSION\n"
+"POT-Creation-Date: 2005-04-24 2:54+0200\n"
+"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
+"Language-Team: LANGUAGE <LL@li.org>\n"
+"Language: \n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+
+#. type: TH
+#: t-05-config/test00_man.1:1
+#, no-wrap
+msgid "test1"
+msgstr ""
+
+#. type: SH
+#: t-05-config/test00_man.1:2
+#, no-wrap
+msgid "NAME"
+msgstr ""
+
+#. type: Plain text
+#: t-05-config/test00_man.1:4
+msgid "test - just a test"
+msgstr ""
+
+#. type: Plain text
+#: t-05-config/test00_man.1:5
+msgid "Hello"
+msgstr ""
diff --git a/t/cfg/single/_output b/t/cfg/single/_output
new file mode 100644
index 0000000..c63e3db
--- /dev/null
+++ b/t/cfg/single/_output
@@ -0,0 +1,3 @@
+Updating single.pot: (4 entries)
+Updating single.fr.po: 4 translated messages.
+single.man.fr.1 is 100% translated (4 strings).
diff --git a/t/cfg/single/_single.man.fr.1 b/t/cfg/single/_single.man.fr.1
new file mode 100644
index 0000000..873acf4
--- /dev/null
+++ b/t/cfg/single/_single.man.fr.1
@@ -0,0 +1,10 @@
+.\"*******************************************************************
+.\"
+.\" This file was generated with po4a. Translate the source file.
+.\"
+.\"*******************************************************************
+.TH test1 1
+.SH NOM
+test \- juste un test
+
+Bonjour
diff --git a/t/cfg/single/single-noupdate.output b/t/cfg/single/single-noupdate.output
new file mode 100644
index 0000000..7661d8c
--- /dev/null
+++ b/t/cfg/single/single-noupdate.output
@@ -0,0 +1,2 @@
+Updating cfg/single-nopo/single.pot:
+ (4 entries)
diff --git a/t/cfg/single/single.conf b/t/cfg/single/single.conf
new file mode 100644
index 0000000..da28633
--- /dev/null
+++ b/t/cfg/single/single.conf
@@ -0,0 +1,5 @@
+#comment
+[po4a_paths] single.pot fr:single.fr.po
+[options] opt:"--msgmerge-opt --silent"
+
+[type:man] single.man.1 fr:single.man.fr.1
diff --git a/t/cfg/single/single.fr.po b/t/cfg/single/single.fr.po
new file mode 100644
index 0000000..c1e3251
--- /dev/null
+++ b/t/cfg/single/single.fr.po
@@ -0,0 +1,39 @@
+# French translations for po package
+# Copyright (C) 2020 Free Software Foundation, Inc.
+# This file is distributed under the same license as the po package.
+# Automatically generated, 2020.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: po 4a\n"
+"POT-Creation-Date: 2005-04-24 2:54+0200\n"
+"PO-Revision-Date: 2005-04-24 2:54+0200\n"
+"Last-Translator: Automatically generated\n"
+"Language-Team: none\n"
+"Language: fr\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=2; plural=(n > 1);\n"
+
+#. type: TH
+#: t-05-config/test00_man.1:1
+#, no-wrap
+msgid "test1"
+msgstr "test1"
+
+#. type: SH
+#: t-05-config/test00_man.1:2
+#, no-wrap
+msgid "NAME"
+msgstr "NOM"
+
+#. type: Plain text
+#: t-05-config/test00_man.1:4
+msgid "test - just a test"
+msgstr "test - juste un test"
+
+#. type: Plain text
+#: t-05-config/test00_man.1:5
+msgid "Hello"
+msgstr "Bonjour"
diff --git a/t/cfg/single/single.man.1 b/t/cfg/single/single.man.1
new file mode 100644
index 0000000..2178e17
--- /dev/null
+++ b/t/cfg/single/single.man.1
@@ -0,0 +1,5 @@
+.TH test1 1
+.SH NAME
+test \- just a test
+
+Hello
diff --git a/t/cfg/single/single.pot b/t/cfg/single/single.pot
new file mode 100644
index 0000000..c6480a4
--- /dev/null
+++ b/t/cfg/single/single.pot
@@ -0,0 +1,39 @@
+# SOME DESCRIPTIVE TITLE
+# Copyright (C) YEAR Free Software Foundation, Inc.
+# This file is distributed under the same license as the PACKAGE package.
+# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
+#
+#, fuzzy
+msgid ""
+msgstr ""
+"Project-Id-Version: PACKAGE VERSION\n"
+"POT-Creation-Date: 2005-04-24 2:54+0200\n"
+"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
+"Language-Team: LANGUAGE <LL@li.org>\n"
+"Language: \n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+
+#. type: TH
+#: t-05-config/test00_man.1:1
+#, no-wrap
+msgid "test1"
+msgstr ""
+
+#. type: SH
+#: t-05-config/test00_man.1:2
+#, no-wrap
+msgid "NAME"
+msgstr ""
+
+#. type: Plain text
+#: t-05-config/test00_man.1:4
+msgid "test - just a test"
+msgstr ""
+
+#. type: Plain text
+#: t-05-config/test00_man.1:5
+msgid "Hello"
+msgstr ""
diff --git a/t/cfg/space-in-option-value/_man.ja.1 b/t/cfg/space-in-option-value/_man.ja.1
new file mode 100644
index 0000000..6479fb6
--- /dev/null
+++ b/t/cfg/space-in-option-value/_man.ja.1
@@ -0,0 +1,6 @@
+.\"*******************************************************************
+.\"
+.\" This file was generated with po4a. Translate the source file.
+.\"
+.\"*******************************************************************
+.TH 検査 1
diff --git a/t/cfg/space-in-option-value/_output b/t/cfg/space-in-option-value/_output
new file mode 100644
index 0000000..a5c6017
--- /dev/null
+++ b/t/cfg/space-in-option-value/_output
@@ -0,0 +1,3 @@
+Updating man.pot: (1 entries)
+Updating man.ja.po: 1 translated message.
+man.ja.1 is 100% translated (1 strings).
diff --git a/t/cfg/space-in-option-value/man.1 b/t/cfg/space-in-option-value/man.1
new file mode 100644
index 0000000..eb859f2
--- /dev/null
+++ b/t/cfg/space-in-option-value/man.1
@@ -0,0 +1 @@
+.TH test 1
diff --git a/t/cfg/space-in-option-value/man.ja.po b/t/cfg/space-in-option-value/man.ja.po
new file mode 100644
index 0000000..5e24d8d
--- /dev/null
+++ b/t/cfg/space-in-option-value/man.ja.po
@@ -0,0 +1,23 @@
+# Japanese translations for Hello world package
+# Copyright (C) 2024 Goodbye Mars
+# This file is distributed under the same license as the Hello world package.
+# Automatically generated, 2024.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: Hello world How are you Venus\n"
+"POT-Creation-Date: 2024-01-05 08:52+0900\n"
+"PO-Revision-Date: 2024-01-13 11:15+0900\n"
+"Last-Translator: Automatically generated\n"
+"Language-Team: none\n"
+"Language: ja\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=1; plural=0;\n"
+
+#. type: TH
+#: man.1:1
+#, no-wrap
+msgid "test"
+msgstr "検査"
diff --git a/t/cfg/space-in-option-value/man.pot b/t/cfg/space-in-option-value/man.pot
new file mode 100644
index 0000000..9499249
--- /dev/null
+++ b/t/cfg/space-in-option-value/man.pot
@@ -0,0 +1,23 @@
+# SOME DESCRIPTIVE TITLE
+# Copyright (C) YEAR Goodbye Mars
+# This file is distributed under the same license as the Hello world package.
+# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
+#
+#, fuzzy
+msgid ""
+msgstr ""
+"Project-Id-Version: Hello world How are you Venus\n"
+"POT-Creation-Date: 2024-01-05 08:52+0900\n"
+"PO-Revision-Date: 2024-01-13 11:16+0900\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
+"Language-Team: LANGUAGE <LL@li.org>\n"
+"Language: \n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+
+#. type: TH
+#: man.1:1
+#, no-wrap
+msgid "test"
+msgstr ""
diff --git a/t/cfg/space-in-option-value/po4a.conf b/t/cfg/space-in-option-value/po4a.conf
new file mode 100644
index 0000000..8cef3eb
--- /dev/null
+++ b/t/cfg/space-in-option-value/po4a.conf
@@ -0,0 +1,7 @@
+[options] --package-name "Hello world" \
+ --package-version 'How are you Venus' \
+ --copyright-holder Goodbye\ Mars
+
+[po4a_langs] ja
+[po4a_paths] man.pot ja:man.ja.po
+[type:man] man.1 ja:man.ja.1
diff --git a/t/cfg/space_in_name/_output b/t/cfg/space_in_name/_output
new file mode 100644
index 0000000..d01e299
--- /dev/null
+++ b/t/cfg/space_in_name/_output
@@ -0,0 +1,3 @@
+Updating space in name.pot: (4 entries)
+Updating space in name.fr.po: 4 translated messages.
+some directory/some file.man.fr.1 is 100% translated (4 strings).
diff --git a/t/cfg/space_in_name/_single.man.fr.1 b/t/cfg/space_in_name/_single.man.fr.1
new file mode 100644
index 0000000..873acf4
--- /dev/null
+++ b/t/cfg/space_in_name/_single.man.fr.1
@@ -0,0 +1,10 @@
+.\"*******************************************************************
+.\"
+.\" This file was generated with po4a. Translate the source file.
+.\"
+.\"*******************************************************************
+.TH test1 1
+.SH NOM
+test \- juste un test
+
+Bonjour
diff --git a/t/cfg/space_in_name/po4a.conf b/t/cfg/space_in_name/po4a.conf
new file mode 100644
index 0000000..57312a3
--- /dev/null
+++ b/t/cfg/space_in_name/po4a.conf
@@ -0,0 +1,5 @@
+#comment
+[po4a_paths] "space in name.pot" fr:space\ in\ name.fr.po
+[options] opt:"--msgmerge-opt --silent"
+
+[type:man] "some directory/some file".man.1 fr:some\ directory/some\ file.man.fr.1
diff --git a/t/cfg/space_in_name/some directory/some file.man.1 b/t/cfg/space_in_name/some directory/some file.man.1
new file mode 100644
index 0000000..2178e17
--- /dev/null
+++ b/t/cfg/space_in_name/some directory/some file.man.1
@@ -0,0 +1,5 @@
+.TH test1 1
+.SH NAME
+test \- just a test
+
+Hello
diff --git a/t/cfg/space_in_name/space in name.fr.po b/t/cfg/space_in_name/space in name.fr.po
new file mode 100644
index 0000000..c1e3251
--- /dev/null
+++ b/t/cfg/space_in_name/space in name.fr.po
@@ -0,0 +1,39 @@
+# French translations for po package
+# Copyright (C) 2020 Free Software Foundation, Inc.
+# This file is distributed under the same license as the po package.
+# Automatically generated, 2020.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: po 4a\n"
+"POT-Creation-Date: 2005-04-24 2:54+0200\n"
+"PO-Revision-Date: 2005-04-24 2:54+0200\n"
+"Last-Translator: Automatically generated\n"
+"Language-Team: none\n"
+"Language: fr\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=2; plural=(n > 1);\n"
+
+#. type: TH
+#: t-05-config/test00_man.1:1
+#, no-wrap
+msgid "test1"
+msgstr "test1"
+
+#. type: SH
+#: t-05-config/test00_man.1:2
+#, no-wrap
+msgid "NAME"
+msgstr "NOM"
+
+#. type: Plain text
+#: t-05-config/test00_man.1:4
+msgid "test - just a test"
+msgstr "test - juste un test"
+
+#. type: Plain text
+#: t-05-config/test00_man.1:5
+msgid "Hello"
+msgstr "Bonjour"
diff --git a/t/cfg/space_in_name/space in name.pot b/t/cfg/space_in_name/space in name.pot
new file mode 100644
index 0000000..c6480a4
--- /dev/null
+++ b/t/cfg/space_in_name/space in name.pot
@@ -0,0 +1,39 @@
+# SOME DESCRIPTIVE TITLE
+# Copyright (C) YEAR Free Software Foundation, Inc.
+# This file is distributed under the same license as the PACKAGE package.
+# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
+#
+#, fuzzy
+msgid ""
+msgstr ""
+"Project-Id-Version: PACKAGE VERSION\n"
+"POT-Creation-Date: 2005-04-24 2:54+0200\n"
+"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
+"Language-Team: LANGUAGE <LL@li.org>\n"
+"Language: \n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+
+#. type: TH
+#: t-05-config/test00_man.1:1
+#, no-wrap
+msgid "test1"
+msgstr ""
+
+#. type: SH
+#: t-05-config/test00_man.1:2
+#, no-wrap
+msgid "NAME"
+msgstr ""
+
+#. type: Plain text
+#: t-05-config/test00_man.1:4
+msgid "test - just a test"
+msgstr ""
+
+#. type: Plain text
+#: t-05-config/test00_man.1:5
+msgid "Hello"
+msgstr ""
diff --git a/t/cfg/split-fuzzied-noup/_first.man.de.po b/t/cfg/split-fuzzied-noup/_first.man.de.po
new file mode 100644
index 0000000..5c0f31c
--- /dev/null
+++ b/t/cfg/split-fuzzied-noup/_first.man.de.po
@@ -0,0 +1,45 @@
+# German translations for po package
+# Copyright (C) 2020 Free Software Foundation, Inc.
+# This file is distributed under the same license as the po package.
+# Automatically generated, 2020.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: po 4a\n"
+"POT-Creation-Date: 2020-04-17 16:59+0200\n"
+"PO-Revision-Date: 2020-04-17 16:59+0200\n"
+"Last-Translator: Automatically generated\n"
+"Language-Team: none\n"
+"Language: de\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+
+#. type: TH
+#: first.man:1
+#, fuzzy, no-wrap
+#| msgid "-first"
+msgid "first"
+msgstr "erste"
+
+#. type: SH
+#: first.man:2 second.man:2
+#, no-wrap
+msgid "NAME"
+msgstr "NAME"
+
+#. type: Plain text
+#: first.man:4
+msgid "first - a first test file"
+msgstr "erste - eine erste Testdatei"
+
+#. type: Plain text
+#: first.man:6
+msgid "Some random text."
+msgstr "Ein zufälliger Text."
+
+#. type: Plain text
+#: first.man:7
+msgid "More random text that does not make sense."
+msgstr "Mehr zufälliger Text, der keinen Sinn ergibt."
diff --git a/t/cfg/split-fuzzied-noup/_first.man.fr.po b/t/cfg/split-fuzzied-noup/_first.man.fr.po
new file mode 100644
index 0000000..215df9b
--- /dev/null
+++ b/t/cfg/split-fuzzied-noup/_first.man.fr.po
@@ -0,0 +1,45 @@
+# French translations for po package
+# Copyright (C) 2020 Free Software Foundation, Inc.
+# This file is distributed under the same license as the po package.
+# Automatically generated, 2020.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: po 4a\n"
+"POT-Creation-Date: 2020-04-17 16:59+0200\n"
+"PO-Revision-Date: 2020-04-17 16:59+0200\n"
+"Last-Translator: Automatically generated\n"
+"Language-Team: none\n"
+"Language: fr\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=2; plural=(n > 1);\n"
+
+#. type: TH
+#: first.man:1
+#, fuzzy, no-wrap
+#| msgid "-first"
+msgid "first"
+msgstr "premier"
+
+#. type: SH
+#: first.man:2 second.man:2
+#, no-wrap
+msgid "NAME"
+msgstr "NOM"
+
+#. type: Plain text
+#: first.man:4
+msgid "first - a first test file"
+msgstr "premier - un premier fichier de test"
+
+#. type: Plain text
+#: first.man:6
+msgid "Some random text."
+msgstr "Un texte au hasard."
+
+#. type: Plain text
+#: first.man:7
+msgid "More random text that does not make sense."
+msgstr "Plus de texte dénué de sens au hasard."
diff --git a/t/cfg/split-fuzzied-noup/_output b/t/cfg/split-fuzzied-noup/_output
new file mode 100644
index 0000000..f1bbc52
--- /dev/null
+++ b/t/cfg/split-fuzzied-noup/_output
@@ -0,0 +1,5 @@
+Split mode, creating a temporary POT: (9 entries)
+first.man.de is 80% translated (4 of 5 strings).
+second.man.de is 80% translated (4 of 5 strings).
+first.man.fr is 80% translated (4 of 5 strings).
+second.man.fr is 80% translated (4 of 5 strings).
diff --git a/t/cfg/split-fuzzied-noup/_second.man.de.po b/t/cfg/split-fuzzied-noup/_second.man.de.po
new file mode 100644
index 0000000..9ae267e
--- /dev/null
+++ b/t/cfg/split-fuzzied-noup/_second.man.de.po
@@ -0,0 +1,45 @@
+# German translations for po package
+# Copyright (C) 2020 Free Software Foundation, Inc.
+# This file is distributed under the same license as the po package.
+# Automatically generated, 2020.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: po 4a\n"
+"POT-Creation-Date: 2020-04-17 16:59+0200\n"
+"PO-Revision-Date: 2020-04-17 16:59+0200\n"
+"Last-Translator: Automatically generated\n"
+"Language-Team: none\n"
+"Language: de\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+
+#. type: SH
+#: first.man:2 second.man:2
+#, no-wrap
+msgid "NAME"
+msgstr "NAME"
+
+#. type: TH
+#: second.man:1
+#, fuzzy, no-wrap
+#| msgid "-second"
+msgid "second"
+msgstr "zweite"
+
+#. type: Plain text
+#: second.man:4
+msgid "second - a second test file"
+msgstr "zweite - eine zweite Testdatei"
+
+#. type: Plain text
+#: second.man:7
+msgid "This is a test paragraph. A short one."
+msgstr "Dies ist ein Testabsatz. Ein kurzer."
+
+#. type: Plain text
+#: second.man:8
+msgid "Another entry."
+msgstr "Ein weiterer Eintrag."
diff --git a/t/cfg/split-fuzzied-noup/_second.man.fr.po b/t/cfg/split-fuzzied-noup/_second.man.fr.po
new file mode 100644
index 0000000..28ffc32
--- /dev/null
+++ b/t/cfg/split-fuzzied-noup/_second.man.fr.po
@@ -0,0 +1,45 @@
+# French translations for po package
+# Copyright (C) 2020 Free Software Foundation, Inc.
+# This file is distributed under the same license as the po package.
+# Automatically generated, 2020.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: po 4a\n"
+"POT-Creation-Date: 2020-04-17 16:59+0200\n"
+"PO-Revision-Date: 2020-04-17 16:59+0200\n"
+"Last-Translator: Automatically generated\n"
+"Language-Team: none\n"
+"Language: fr\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=2; plural=(n > 1);\n"
+
+#. type: SH
+#: first.man:2 second.man:2
+#, no-wrap
+msgid "NAME"
+msgstr "NOM"
+
+#. type: TH
+#: second.man:1
+#, fuzzy, no-wrap
+#| msgid "-second"
+msgid "second"
+msgstr "second"
+
+#. type: Plain text
+#: second.man:4
+msgid "second - a second test file"
+msgstr "second - un second fichier de test"
+
+#. type: Plain text
+#: second.man:7
+msgid "This is a test paragraph. A short one."
+msgstr "Ceci est un paragraphe de test. Un court."
+
+#. type: Plain text
+#: second.man:8
+msgid "Another entry."
+msgstr "Une autre entrée."
diff --git a/t/cfg/split-fuzzied-noup/diff_output b/t/cfg/split-fuzzied-noup/diff_output
new file mode 100644
index 0000000..53b5855
--- /dev/null
+++ b/t/cfg/split-fuzzied-noup/diff_output
@@ -0,0 +1,11 @@
+--- cfg/split-nopo/_output-noupdate 2020-04-17 17:20:05.150242241 +0200
++++ - 2020-04-17 17:24:16.593316616 +0200
+@@ -0,0 +1,8 @@
++Split mode, creating a temporary POT.
++ (9 entries)
++The translation of master file 'first.man' in language 'de' is missing (file: first.man.de.po) -- skipping.
++The translation of master file 'second.man' in language 'de' is missing (file: second.man.de.po) -- skipping.
++The translation of master file 'first.man' in language 'fr' is missing (file: first.man.fr.po) -- skipping.
++The translation of master file 'second.man' in language 'fr' is missing (file: second.man.fr.po) -- skipping.
++PO file for language de is missing -- skipping.
++PO file for language fr is missing -- skipping.
diff --git a/t/cfg/split-fuzzied-noup/first.man b/t/cfg/split-fuzzied-noup/first.man
new file mode 100644
index 0000000..7283dc8
--- /dev/null
+++ b/t/cfg/split-fuzzied-noup/first.man
@@ -0,0 +1,7 @@
+.TH first 1
+.SH NAME
+first \- a first test file
+
+Some random text.
+
+More random text that does not make sense.
diff --git a/t/cfg/split-fuzzied-noup/first.man.de b/t/cfg/split-fuzzied-noup/first.man.de
new file mode 100644
index 0000000..0a74d4d
--- /dev/null
+++ b/t/cfg/split-fuzzied-noup/first.man.de
@@ -0,0 +1,12 @@
+.\"*******************************************************************
+.\"
+.\" This file was generated with po4a. Translate the source file.
+.\"
+.\"*******************************************************************
+.TH first 1
+.SH NAME
+erste \- eine erste Testdatei
+
+Ein zufälliger Text.
+
+Mehr zufälliger Text, der keinen Sinn ergibt.
diff --git a/t/cfg/split-fuzzied-noup/first.man.de.po b/t/cfg/split-fuzzied-noup/first.man.de.po
new file mode 100644
index 0000000..ee88f68
--- /dev/null
+++ b/t/cfg/split-fuzzied-noup/first.man.de.po
@@ -0,0 +1,44 @@
+# German translations for po package
+# Copyright (C) 2020 Free Software Foundation, Inc.
+# This file is distributed under the same license as the po package.
+# Automatically generated, 2020.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: po 4a\n"
+"POT-Creation-Date: 2020-04-17 16:59+0200\n"
+"PO-Revision-Date: 2020-04-17 16:59+0200\n"
+"Last-Translator: Automatically generated\n"
+"Language-Team: none\n"
+"Language: de\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+
+#. type: TH
+#: first.man:1
+#, no-wrap
+msgid "-first"
+msgstr "erste"
+
+#. type: SH
+#: first.man:2 second.man:2
+#, no-wrap
+msgid "NAME"
+msgstr "NAME"
+
+#. type: Plain text
+#: first.man:4
+msgid "first - a first test file"
+msgstr "erste - eine erste Testdatei"
+
+#. type: Plain text
+#: first.man:6
+msgid "Some random text."
+msgstr "Ein zufälliger Text."
+
+#. type: Plain text
+#: first.man:7
+msgid "More random text that does not make sense."
+msgstr "Mehr zufälliger Text, der keinen Sinn ergibt."
diff --git a/t/cfg/split-fuzzied-noup/first.man.fr b/t/cfg/split-fuzzied-noup/first.man.fr
new file mode 100644
index 0000000..c88127a
--- /dev/null
+++ b/t/cfg/split-fuzzied-noup/first.man.fr
@@ -0,0 +1,12 @@
+.\"*******************************************************************
+.\"
+.\" This file was generated with po4a. Translate the source file.
+.\"
+.\"*******************************************************************
+.TH first 1
+.SH NOM
+premier \- un premier fichier de test
+
+Un texte au hasard.
+
+Plus de texte dénué de sens au hasard.
diff --git a/t/cfg/split-fuzzied-noup/first.man.fr.po b/t/cfg/split-fuzzied-noup/first.man.fr.po
new file mode 100644
index 0000000..ff08372
--- /dev/null
+++ b/t/cfg/split-fuzzied-noup/first.man.fr.po
@@ -0,0 +1,44 @@
+# French translations for po package
+# Copyright (C) 2020 Free Software Foundation, Inc.
+# This file is distributed under the same license as the po package.
+# Automatically generated, 2020.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: po 4a\n"
+"POT-Creation-Date: 2020-04-17 16:59+0200\n"
+"PO-Revision-Date: 2020-04-17 16:59+0200\n"
+"Last-Translator: Automatically generated\n"
+"Language-Team: none\n"
+"Language: fr\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=2; plural=(n > 1);\n"
+
+#. type: TH
+#: first.man:1
+#, no-wrap
+msgid "-first"
+msgstr "premier"
+
+#. type: SH
+#: first.man:2 second.man:2
+#, no-wrap
+msgid "NAME"
+msgstr "NOM"
+
+#. type: Plain text
+#: first.man:4
+msgid "first - a first test file"
+msgstr "premier - un premier fichier de test"
+
+#. type: Plain text
+#: first.man:6
+msgid "Some random text."
+msgstr "Un texte au hasard."
+
+#. type: Plain text
+#: first.man:7
+msgid "More random text that does not make sense."
+msgstr "Plus de texte dénué de sens au hasard."
diff --git a/t/cfg/split-fuzzied-noup/first.man.pot b/t/cfg/split-fuzzied-noup/first.man.pot
new file mode 100644
index 0000000..ab025af
--- /dev/null
+++ b/t/cfg/split-fuzzied-noup/first.man.pot
@@ -0,0 +1,44 @@
+# SOME DESCRIPTIVE TITLE
+# Copyright (C) YEAR Free Software Foundation, Inc.
+# This file is distributed under the same license as the PACKAGE package.
+# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
+#
+#, fuzzy
+msgid ""
+msgstr ""
+"Project-Id-Version: PACKAGE VERSION\n"
+"POT-Creation-Date: 2020-04-17 16:59+0200\n"
+"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
+"Language-Team: LANGUAGE <LL@li.org>\n"
+"Language: \n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+
+#. type: TH
+#: first.man:1
+#, no-wrap
+msgid "first"
+msgstr ""
+
+#. type: SH
+#: first.man:2 second.man:2
+#, no-wrap
+msgid "NAME"
+msgstr ""
+
+#. type: Plain text
+#: first.man:4
+msgid "first - a first test file"
+msgstr ""
+
+#. type: Plain text
+#: first.man:6
+msgid "Some random text."
+msgstr ""
+
+#. type: Plain text
+#: first.man:7
+msgid "More random text that does not make sense."
+msgstr ""
diff --git a/t/cfg/split-fuzzied-noup/po4a.conf b/t/cfg/split-fuzzied-noup/po4a.conf
new file mode 100644
index 0000000..c8f3393
--- /dev/null
+++ b/t/cfg/split-fuzzied-noup/po4a.conf
@@ -0,0 +1,6 @@
+[po4a_langs] fr de
+[po4a_paths] $master.pot $lang:$master.$lang.po
+[options] opt:"--msgmerge-opt --silent"
+
+[type:man] first.man $lang:first.man.$lang
+[type:man] second.man $lang:second.man.$lang
diff --git a/t/cfg/split-fuzzied-noup/second.man b/t/cfg/split-fuzzied-noup/second.man
new file mode 100644
index 0000000..966b73a
--- /dev/null
+++ b/t/cfg/split-fuzzied-noup/second.man
@@ -0,0 +1,8 @@
+.TH second 1
+.SH NAME
+second \- a second test file
+
+This is a test paragraph.
+A short one.
+
+Another entry.
diff --git a/t/cfg/split-fuzzied-noup/second.man.de b/t/cfg/split-fuzzied-noup/second.man.de
new file mode 100644
index 0000000..37e3673
--- /dev/null
+++ b/t/cfg/split-fuzzied-noup/second.man.de
@@ -0,0 +1,12 @@
+.\"*******************************************************************
+.\"
+.\" This file was generated with po4a. Translate the source file.
+.\"
+.\"*******************************************************************
+.TH second 1
+.SH NAME
+zweite \- eine zweite Testdatei
+
+Dies ist ein Testabsatz. Ein kurzer.
+
+Ein weiterer Eintrag.
diff --git a/t/cfg/split-fuzzied-noup/second.man.de.po b/t/cfg/split-fuzzied-noup/second.man.de.po
new file mode 100644
index 0000000..1d86207
--- /dev/null
+++ b/t/cfg/split-fuzzied-noup/second.man.de.po
@@ -0,0 +1,44 @@
+# German translations for po package
+# Copyright (C) 2020 Free Software Foundation, Inc.
+# This file is distributed under the same license as the po package.
+# Automatically generated, 2020.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: po 4a\n"
+"POT-Creation-Date: 2020-04-17 16:59+0200\n"
+"PO-Revision-Date: 2020-04-17 16:59+0200\n"
+"Last-Translator: Automatically generated\n"
+"Language-Team: none\n"
+"Language: de\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+
+#. type: SH
+#: first.man:2 second.man:2
+#, no-wrap
+msgid "NAME"
+msgstr "NAME"
+
+#. type: TH
+#: second.man:1
+#, no-wrap
+msgid "-second"
+msgstr "zweite"
+
+#. type: Plain text
+#: second.man:4
+msgid "second - a second test file"
+msgstr "zweite - eine zweite Testdatei"
+
+#. type: Plain text
+#: second.man:7
+msgid "This is a test paragraph. A short one."
+msgstr "Dies ist ein Testabsatz. Ein kurzer."
+
+#. type: Plain text
+#: second.man:8
+msgid "Another entry."
+msgstr "Ein weiterer Eintrag."
diff --git a/t/cfg/split-fuzzied-noup/second.man.fr b/t/cfg/split-fuzzied-noup/second.man.fr
new file mode 100644
index 0000000..6489f66
--- /dev/null
+++ b/t/cfg/split-fuzzied-noup/second.man.fr
@@ -0,0 +1,12 @@
+.\"*******************************************************************
+.\"
+.\" This file was generated with po4a. Translate the source file.
+.\"
+.\"*******************************************************************
+.TH second 1
+.SH NOM
+second \- un second fichier de test
+
+Ceci est un paragraphe de test. Un court.
+
+Une autre entrée.
diff --git a/t/cfg/split-fuzzied-noup/second.man.fr.po b/t/cfg/split-fuzzied-noup/second.man.fr.po
new file mode 100644
index 0000000..aedcd15
--- /dev/null
+++ b/t/cfg/split-fuzzied-noup/second.man.fr.po
@@ -0,0 +1,44 @@
+# French translations for po package
+# Copyright (C) 2020 Free Software Foundation, Inc.
+# This file is distributed under the same license as the po package.
+# Automatically generated, 2020.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: po 4a\n"
+"POT-Creation-Date: 2020-04-17 16:59+0200\n"
+"PO-Revision-Date: 2020-04-17 16:59+0200\n"
+"Last-Translator: Automatically generated\n"
+"Language-Team: none\n"
+"Language: fr\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=2; plural=(n > 1);\n"
+
+#. type: SH
+#: first.man:2 second.man:2
+#, no-wrap
+msgid "NAME"
+msgstr "NOM"
+
+#. type: TH
+#: second.man:1
+#, no-wrap
+msgid "-second"
+msgstr "second"
+
+#. type: Plain text
+#: second.man:4
+msgid "second - a second test file"
+msgstr "second - un second fichier de test"
+
+#. type: Plain text
+#: second.man:7
+msgid "This is a test paragraph. A short one."
+msgstr "Ceci est un paragraphe de test. Un court."
+
+#. type: Plain text
+#: second.man:8
+msgid "Another entry."
+msgstr "Une autre entrée."
diff --git a/t/cfg/split-fuzzied-noup/second.man.pot b/t/cfg/split-fuzzied-noup/second.man.pot
new file mode 100644
index 0000000..1e6995b
--- /dev/null
+++ b/t/cfg/split-fuzzied-noup/second.man.pot
@@ -0,0 +1,44 @@
+# SOME DESCRIPTIVE TITLE
+# Copyright (C) YEAR Free Software Foundation, Inc.
+# This file is distributed under the same license as the PACKAGE package.
+# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
+#
+#, fuzzy
+msgid ""
+msgstr ""
+"Project-Id-Version: PACKAGE VERSION\n"
+"POT-Creation-Date: 2020-04-17 16:59+0200\n"
+"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
+"Language-Team: LANGUAGE <LL@li.org>\n"
+"Language: \n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+
+#. type: SH
+#: first.man:2 second.man:2
+#, no-wrap
+msgid "NAME"
+msgstr ""
+
+#. type: TH
+#: second.man:1
+#, no-wrap
+msgid "second"
+msgstr ""
+
+#. type: Plain text
+#: second.man:4
+msgid "second - a second test file"
+msgstr ""
+
+#. type: Plain text
+#: second.man:7
+msgid "This is a test paragraph. A short one."
+msgstr ""
+
+#. type: Plain text
+#: second.man:8
+msgid "Another entry."
+msgstr ""
diff --git a/t/cfg/split-fuzzied/_first.man.de.po b/t/cfg/split-fuzzied/_first.man.de.po
new file mode 100644
index 0000000..5c0f31c
--- /dev/null
+++ b/t/cfg/split-fuzzied/_first.man.de.po
@@ -0,0 +1,45 @@
+# German translations for po package
+# Copyright (C) 2020 Free Software Foundation, Inc.
+# This file is distributed under the same license as the po package.
+# Automatically generated, 2020.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: po 4a\n"
+"POT-Creation-Date: 2020-04-17 16:59+0200\n"
+"PO-Revision-Date: 2020-04-17 16:59+0200\n"
+"Last-Translator: Automatically generated\n"
+"Language-Team: none\n"
+"Language: de\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+
+#. type: TH
+#: first.man:1
+#, fuzzy, no-wrap
+#| msgid "-first"
+msgid "first"
+msgstr "erste"
+
+#. type: SH
+#: first.man:2 second.man:2
+#, no-wrap
+msgid "NAME"
+msgstr "NAME"
+
+#. type: Plain text
+#: first.man:4
+msgid "first - a first test file"
+msgstr "erste - eine erste Testdatei"
+
+#. type: Plain text
+#: first.man:6
+msgid "Some random text."
+msgstr "Ein zufälliger Text."
+
+#. type: Plain text
+#: first.man:7
+msgid "More random text that does not make sense."
+msgstr "Mehr zufälliger Text, der keinen Sinn ergibt."
diff --git a/t/cfg/split-fuzzied/_first.man.fr.po b/t/cfg/split-fuzzied/_first.man.fr.po
new file mode 100644
index 0000000..215df9b
--- /dev/null
+++ b/t/cfg/split-fuzzied/_first.man.fr.po
@@ -0,0 +1,45 @@
+# French translations for po package
+# Copyright (C) 2020 Free Software Foundation, Inc.
+# This file is distributed under the same license as the po package.
+# Automatically generated, 2020.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: po 4a\n"
+"POT-Creation-Date: 2020-04-17 16:59+0200\n"
+"PO-Revision-Date: 2020-04-17 16:59+0200\n"
+"Last-Translator: Automatically generated\n"
+"Language-Team: none\n"
+"Language: fr\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=2; plural=(n > 1);\n"
+
+#. type: TH
+#: first.man:1
+#, fuzzy, no-wrap
+#| msgid "-first"
+msgid "first"
+msgstr "premier"
+
+#. type: SH
+#: first.man:2 second.man:2
+#, no-wrap
+msgid "NAME"
+msgstr "NOM"
+
+#. type: Plain text
+#: first.man:4
+msgid "first - a first test file"
+msgstr "premier - un premier fichier de test"
+
+#. type: Plain text
+#: first.man:6
+msgid "Some random text."
+msgstr "Un texte au hasard."
+
+#. type: Plain text
+#: first.man:7
+msgid "More random text that does not make sense."
+msgstr "Plus de texte dénué de sens au hasard."
diff --git a/t/cfg/split-fuzzied/_output b/t/cfg/split-fuzzied/_output
new file mode 100644
index 0000000..480d064
--- /dev/null
+++ b/t/cfg/split-fuzzied/_output
@@ -0,0 +1,7 @@
+Split mode, creating a temporary POT: (9 entries)
+Updating the translation in language de: 7 translated messages, 2 fuzzy translations.
+Updating the translation in language fr: 7 translated messages, 2 fuzzy translations.
+first.man.de is 80% translated (4 of 5 strings).
+second.man.de is 80% translated (4 of 5 strings).
+first.man.fr is 80% translated (4 of 5 strings).
+second.man.fr is 80% translated (4 of 5 strings).
diff --git a/t/cfg/split-fuzzied/_second.man.de.po b/t/cfg/split-fuzzied/_second.man.de.po
new file mode 100644
index 0000000..9ae267e
--- /dev/null
+++ b/t/cfg/split-fuzzied/_second.man.de.po
@@ -0,0 +1,45 @@
+# German translations for po package
+# Copyright (C) 2020 Free Software Foundation, Inc.
+# This file is distributed under the same license as the po package.
+# Automatically generated, 2020.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: po 4a\n"
+"POT-Creation-Date: 2020-04-17 16:59+0200\n"
+"PO-Revision-Date: 2020-04-17 16:59+0200\n"
+"Last-Translator: Automatically generated\n"
+"Language-Team: none\n"
+"Language: de\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+
+#. type: SH
+#: first.man:2 second.man:2
+#, no-wrap
+msgid "NAME"
+msgstr "NAME"
+
+#. type: TH
+#: second.man:1
+#, fuzzy, no-wrap
+#| msgid "-second"
+msgid "second"
+msgstr "zweite"
+
+#. type: Plain text
+#: second.man:4
+msgid "second - a second test file"
+msgstr "zweite - eine zweite Testdatei"
+
+#. type: Plain text
+#: second.man:7
+msgid "This is a test paragraph. A short one."
+msgstr "Dies ist ein Testabsatz. Ein kurzer."
+
+#. type: Plain text
+#: second.man:8
+msgid "Another entry."
+msgstr "Ein weiterer Eintrag."
diff --git a/t/cfg/split-fuzzied/_second.man.fr.po b/t/cfg/split-fuzzied/_second.man.fr.po
new file mode 100644
index 0000000..28ffc32
--- /dev/null
+++ b/t/cfg/split-fuzzied/_second.man.fr.po
@@ -0,0 +1,45 @@
+# French translations for po package
+# Copyright (C) 2020 Free Software Foundation, Inc.
+# This file is distributed under the same license as the po package.
+# Automatically generated, 2020.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: po 4a\n"
+"POT-Creation-Date: 2020-04-17 16:59+0200\n"
+"PO-Revision-Date: 2020-04-17 16:59+0200\n"
+"Last-Translator: Automatically generated\n"
+"Language-Team: none\n"
+"Language: fr\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=2; plural=(n > 1);\n"
+
+#. type: SH
+#: first.man:2 second.man:2
+#, no-wrap
+msgid "NAME"
+msgstr "NOM"
+
+#. type: TH
+#: second.man:1
+#, fuzzy, no-wrap
+#| msgid "-second"
+msgid "second"
+msgstr "second"
+
+#. type: Plain text
+#: second.man:4
+msgid "second - a second test file"
+msgstr "second - un second fichier de test"
+
+#. type: Plain text
+#: second.man:7
+msgid "This is a test paragraph. A short one."
+msgstr "Ceci est un paragraphe de test. Un court."
+
+#. type: Plain text
+#: second.man:8
+msgid "Another entry."
+msgstr "Une autre entrée."
diff --git a/t/cfg/split-fuzzied/diff_output b/t/cfg/split-fuzzied/diff_output
new file mode 100644
index 0000000..53b5855
--- /dev/null
+++ b/t/cfg/split-fuzzied/diff_output
@@ -0,0 +1,11 @@
+--- cfg/split-nopo/_output-noupdate 2020-04-17 17:20:05.150242241 +0200
++++ - 2020-04-17 17:24:16.593316616 +0200
+@@ -0,0 +1,8 @@
++Split mode, creating a temporary POT.
++ (9 entries)
++The translation of master file 'first.man' in language 'de' is missing (file: first.man.de.po) -- skipping.
++The translation of master file 'second.man' in language 'de' is missing (file: second.man.de.po) -- skipping.
++The translation of master file 'first.man' in language 'fr' is missing (file: first.man.fr.po) -- skipping.
++The translation of master file 'second.man' in language 'fr' is missing (file: second.man.fr.po) -- skipping.
++PO file for language de is missing -- skipping.
++PO file for language fr is missing -- skipping.
diff --git a/t/cfg/split-fuzzied/first.man b/t/cfg/split-fuzzied/first.man
new file mode 100644
index 0000000..7283dc8
--- /dev/null
+++ b/t/cfg/split-fuzzied/first.man
@@ -0,0 +1,7 @@
+.TH first 1
+.SH NAME
+first \- a first test file
+
+Some random text.
+
+More random text that does not make sense.
diff --git a/t/cfg/split-fuzzied/first.man.de b/t/cfg/split-fuzzied/first.man.de
new file mode 100644
index 0000000..0a74d4d
--- /dev/null
+++ b/t/cfg/split-fuzzied/first.man.de
@@ -0,0 +1,12 @@
+.\"*******************************************************************
+.\"
+.\" This file was generated with po4a. Translate the source file.
+.\"
+.\"*******************************************************************
+.TH first 1
+.SH NAME
+erste \- eine erste Testdatei
+
+Ein zufälliger Text.
+
+Mehr zufälliger Text, der keinen Sinn ergibt.
diff --git a/t/cfg/split-fuzzied/first.man.de.po b/t/cfg/split-fuzzied/first.man.de.po
new file mode 100644
index 0000000..ee88f68
--- /dev/null
+++ b/t/cfg/split-fuzzied/first.man.de.po
@@ -0,0 +1,44 @@
+# German translations for po package
+# Copyright (C) 2020 Free Software Foundation, Inc.
+# This file is distributed under the same license as the po package.
+# Automatically generated, 2020.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: po 4a\n"
+"POT-Creation-Date: 2020-04-17 16:59+0200\n"
+"PO-Revision-Date: 2020-04-17 16:59+0200\n"
+"Last-Translator: Automatically generated\n"
+"Language-Team: none\n"
+"Language: de\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+
+#. type: TH
+#: first.man:1
+#, no-wrap
+msgid "-first"
+msgstr "erste"
+
+#. type: SH
+#: first.man:2 second.man:2
+#, no-wrap
+msgid "NAME"
+msgstr "NAME"
+
+#. type: Plain text
+#: first.man:4
+msgid "first - a first test file"
+msgstr "erste - eine erste Testdatei"
+
+#. type: Plain text
+#: first.man:6
+msgid "Some random text."
+msgstr "Ein zufälliger Text."
+
+#. type: Plain text
+#: first.man:7
+msgid "More random text that does not make sense."
+msgstr "Mehr zufälliger Text, der keinen Sinn ergibt."
diff --git a/t/cfg/split-fuzzied/first.man.fr b/t/cfg/split-fuzzied/first.man.fr
new file mode 100644
index 0000000..c88127a
--- /dev/null
+++ b/t/cfg/split-fuzzied/first.man.fr
@@ -0,0 +1,12 @@
+.\"*******************************************************************
+.\"
+.\" This file was generated with po4a. Translate the source file.
+.\"
+.\"*******************************************************************
+.TH first 1
+.SH NOM
+premier \- un premier fichier de test
+
+Un texte au hasard.
+
+Plus de texte dénué de sens au hasard.
diff --git a/t/cfg/split-fuzzied/first.man.fr.po b/t/cfg/split-fuzzied/first.man.fr.po
new file mode 100644
index 0000000..ff08372
--- /dev/null
+++ b/t/cfg/split-fuzzied/first.man.fr.po
@@ -0,0 +1,44 @@
+# French translations for po package
+# Copyright (C) 2020 Free Software Foundation, Inc.
+# This file is distributed under the same license as the po package.
+# Automatically generated, 2020.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: po 4a\n"
+"POT-Creation-Date: 2020-04-17 16:59+0200\n"
+"PO-Revision-Date: 2020-04-17 16:59+0200\n"
+"Last-Translator: Automatically generated\n"
+"Language-Team: none\n"
+"Language: fr\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=2; plural=(n > 1);\n"
+
+#. type: TH
+#: first.man:1
+#, no-wrap
+msgid "-first"
+msgstr "premier"
+
+#. type: SH
+#: first.man:2 second.man:2
+#, no-wrap
+msgid "NAME"
+msgstr "NOM"
+
+#. type: Plain text
+#: first.man:4
+msgid "first - a first test file"
+msgstr "premier - un premier fichier de test"
+
+#. type: Plain text
+#: first.man:6
+msgid "Some random text."
+msgstr "Un texte au hasard."
+
+#. type: Plain text
+#: first.man:7
+msgid "More random text that does not make sense."
+msgstr "Plus de texte dénué de sens au hasard."
diff --git a/t/cfg/split-fuzzied/first.man.pot b/t/cfg/split-fuzzied/first.man.pot
new file mode 100644
index 0000000..ab025af
--- /dev/null
+++ b/t/cfg/split-fuzzied/first.man.pot
@@ -0,0 +1,44 @@
+# SOME DESCRIPTIVE TITLE
+# Copyright (C) YEAR Free Software Foundation, Inc.
+# This file is distributed under the same license as the PACKAGE package.
+# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
+#
+#, fuzzy
+msgid ""
+msgstr ""
+"Project-Id-Version: PACKAGE VERSION\n"
+"POT-Creation-Date: 2020-04-17 16:59+0200\n"
+"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
+"Language-Team: LANGUAGE <LL@li.org>\n"
+"Language: \n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+
+#. type: TH
+#: first.man:1
+#, no-wrap
+msgid "first"
+msgstr ""
+
+#. type: SH
+#: first.man:2 second.man:2
+#, no-wrap
+msgid "NAME"
+msgstr ""
+
+#. type: Plain text
+#: first.man:4
+msgid "first - a first test file"
+msgstr ""
+
+#. type: Plain text
+#: first.man:6
+msgid "Some random text."
+msgstr ""
+
+#. type: Plain text
+#: first.man:7
+msgid "More random text that does not make sense."
+msgstr ""
diff --git a/t/cfg/split-fuzzied/po4a.conf b/t/cfg/split-fuzzied/po4a.conf
new file mode 100644
index 0000000..c8f3393
--- /dev/null
+++ b/t/cfg/split-fuzzied/po4a.conf
@@ -0,0 +1,6 @@
+[po4a_langs] fr de
+[po4a_paths] $master.pot $lang:$master.$lang.po
+[options] opt:"--msgmerge-opt --silent"
+
+[type:man] first.man $lang:first.man.$lang
+[type:man] second.man $lang:second.man.$lang
diff --git a/t/cfg/split-fuzzied/second.man b/t/cfg/split-fuzzied/second.man
new file mode 100644
index 0000000..966b73a
--- /dev/null
+++ b/t/cfg/split-fuzzied/second.man
@@ -0,0 +1,8 @@
+.TH second 1
+.SH NAME
+second \- a second test file
+
+This is a test paragraph.
+A short one.
+
+Another entry.
diff --git a/t/cfg/split-fuzzied/second.man.de b/t/cfg/split-fuzzied/second.man.de
new file mode 100644
index 0000000..37e3673
--- /dev/null
+++ b/t/cfg/split-fuzzied/second.man.de
@@ -0,0 +1,12 @@
+.\"*******************************************************************
+.\"
+.\" This file was generated with po4a. Translate the source file.
+.\"
+.\"*******************************************************************
+.TH second 1
+.SH NAME
+zweite \- eine zweite Testdatei
+
+Dies ist ein Testabsatz. Ein kurzer.
+
+Ein weiterer Eintrag.
diff --git a/t/cfg/split-fuzzied/second.man.de.po b/t/cfg/split-fuzzied/second.man.de.po
new file mode 100644
index 0000000..1d86207
--- /dev/null
+++ b/t/cfg/split-fuzzied/second.man.de.po
@@ -0,0 +1,44 @@
+# German translations for po package
+# Copyright (C) 2020 Free Software Foundation, Inc.
+# This file is distributed under the same license as the po package.
+# Automatically generated, 2020.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: po 4a\n"
+"POT-Creation-Date: 2020-04-17 16:59+0200\n"
+"PO-Revision-Date: 2020-04-17 16:59+0200\n"
+"Last-Translator: Automatically generated\n"
+"Language-Team: none\n"
+"Language: de\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+
+#. type: SH
+#: first.man:2 second.man:2
+#, no-wrap
+msgid "NAME"
+msgstr "NAME"
+
+#. type: TH
+#: second.man:1
+#, no-wrap
+msgid "-second"
+msgstr "zweite"
+
+#. type: Plain text
+#: second.man:4
+msgid "second - a second test file"
+msgstr "zweite - eine zweite Testdatei"
+
+#. type: Plain text
+#: second.man:7
+msgid "This is a test paragraph. A short one."
+msgstr "Dies ist ein Testabsatz. Ein kurzer."
+
+#. type: Plain text
+#: second.man:8
+msgid "Another entry."
+msgstr "Ein weiterer Eintrag."
diff --git a/t/cfg/split-fuzzied/second.man.fr b/t/cfg/split-fuzzied/second.man.fr
new file mode 100644
index 0000000..6489f66
--- /dev/null
+++ b/t/cfg/split-fuzzied/second.man.fr
@@ -0,0 +1,12 @@
+.\"*******************************************************************
+.\"
+.\" This file was generated with po4a. Translate the source file.
+.\"
+.\"*******************************************************************
+.TH second 1
+.SH NOM
+second \- un second fichier de test
+
+Ceci est un paragraphe de test. Un court.
+
+Une autre entrée.
diff --git a/t/cfg/split-fuzzied/second.man.fr.po b/t/cfg/split-fuzzied/second.man.fr.po
new file mode 100644
index 0000000..aedcd15
--- /dev/null
+++ b/t/cfg/split-fuzzied/second.man.fr.po
@@ -0,0 +1,44 @@
+# French translations for po package
+# Copyright (C) 2020 Free Software Foundation, Inc.
+# This file is distributed under the same license as the po package.
+# Automatically generated, 2020.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: po 4a\n"
+"POT-Creation-Date: 2020-04-17 16:59+0200\n"
+"PO-Revision-Date: 2020-04-17 16:59+0200\n"
+"Last-Translator: Automatically generated\n"
+"Language-Team: none\n"
+"Language: fr\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=2; plural=(n > 1);\n"
+
+#. type: SH
+#: first.man:2 second.man:2
+#, no-wrap
+msgid "NAME"
+msgstr "NOM"
+
+#. type: TH
+#: second.man:1
+#, no-wrap
+msgid "-second"
+msgstr "second"
+
+#. type: Plain text
+#: second.man:4
+msgid "second - a second test file"
+msgstr "second - un second fichier de test"
+
+#. type: Plain text
+#: second.man:7
+msgid "This is a test paragraph. A short one."
+msgstr "Ceci est un paragraphe de test. Un court."
+
+#. type: Plain text
+#: second.man:8
+msgid "Another entry."
+msgstr "Une autre entrée."
diff --git a/t/cfg/split-fuzzied/second.man.pot b/t/cfg/split-fuzzied/second.man.pot
new file mode 100644
index 0000000..1e6995b
--- /dev/null
+++ b/t/cfg/split-fuzzied/second.man.pot
@@ -0,0 +1,44 @@
+# SOME DESCRIPTIVE TITLE
+# Copyright (C) YEAR Free Software Foundation, Inc.
+# This file is distributed under the same license as the PACKAGE package.
+# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
+#
+#, fuzzy
+msgid ""
+msgstr ""
+"Project-Id-Version: PACKAGE VERSION\n"
+"POT-Creation-Date: 2020-04-17 16:59+0200\n"
+"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
+"Language-Team: LANGUAGE <LL@li.org>\n"
+"Language: \n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+
+#. type: SH
+#: first.man:2 second.man:2
+#, no-wrap
+msgid "NAME"
+msgstr ""
+
+#. type: TH
+#: second.man:1
+#, no-wrap
+msgid "second"
+msgstr ""
+
+#. type: Plain text
+#: second.man:4
+msgid "second - a second test file"
+msgstr ""
+
+#. type: Plain text
+#: second.man:7
+msgid "This is a test paragraph. A short one."
+msgstr ""
+
+#. type: Plain text
+#: second.man:8
+msgid "Another entry."
+msgstr ""
diff --git a/t/cfg/split-fuzzy/_output b/t/cfg/split-fuzzy/_output
new file mode 100644
index 0000000..480d064
--- /dev/null
+++ b/t/cfg/split-fuzzy/_output
@@ -0,0 +1,7 @@
+Split mode, creating a temporary POT: (9 entries)
+Updating the translation in language de: 7 translated messages, 2 fuzzy translations.
+Updating the translation in language fr: 7 translated messages, 2 fuzzy translations.
+first.man.de is 80% translated (4 of 5 strings).
+second.man.de is 80% translated (4 of 5 strings).
+first.man.fr is 80% translated (4 of 5 strings).
+second.man.fr is 80% translated (4 of 5 strings).
diff --git a/t/cfg/split-fuzzy/diff_output b/t/cfg/split-fuzzy/diff_output
new file mode 100644
index 0000000..53b5855
--- /dev/null
+++ b/t/cfg/split-fuzzy/diff_output
@@ -0,0 +1,11 @@
+--- cfg/split-nopo/_output-noupdate 2020-04-17 17:20:05.150242241 +0200
++++ - 2020-04-17 17:24:16.593316616 +0200
+@@ -0,0 +1,8 @@
++Split mode, creating a temporary POT.
++ (9 entries)
++The translation of master file 'first.man' in language 'de' is missing (file: first.man.de.po) -- skipping.
++The translation of master file 'second.man' in language 'de' is missing (file: second.man.de.po) -- skipping.
++The translation of master file 'first.man' in language 'fr' is missing (file: first.man.fr.po) -- skipping.
++The translation of master file 'second.man' in language 'fr' is missing (file: second.man.fr.po) -- skipping.
++PO file for language de is missing -- skipping.
++PO file for language fr is missing -- skipping.
diff --git a/t/cfg/split-fuzzy/first.man b/t/cfg/split-fuzzy/first.man
new file mode 100644
index 0000000..7283dc8
--- /dev/null
+++ b/t/cfg/split-fuzzy/first.man
@@ -0,0 +1,7 @@
+.TH first 1
+.SH NAME
+first \- a first test file
+
+Some random text.
+
+More random text that does not make sense.
diff --git a/t/cfg/split-fuzzy/first.man.de b/t/cfg/split-fuzzy/first.man.de
new file mode 100644
index 0000000..0a74d4d
--- /dev/null
+++ b/t/cfg/split-fuzzy/first.man.de
@@ -0,0 +1,12 @@
+.\"*******************************************************************
+.\"
+.\" This file was generated with po4a. Translate the source file.
+.\"
+.\"*******************************************************************
+.TH first 1
+.SH NAME
+erste \- eine erste Testdatei
+
+Ein zufälliger Text.
+
+Mehr zufälliger Text, der keinen Sinn ergibt.
diff --git a/t/cfg/split-fuzzy/first.man.de.po b/t/cfg/split-fuzzy/first.man.de.po
new file mode 100644
index 0000000..25d13c3
--- /dev/null
+++ b/t/cfg/split-fuzzy/first.man.de.po
@@ -0,0 +1,44 @@
+# German translations for po package
+# Copyright (C) 2020 Free Software Foundation, Inc.
+# This file is distributed under the same license as the po package.
+# Automatically generated, 2020.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: po 4a\n"
+"POT-Creation-Date: 2020-04-17 16:59+0200\n"
+"PO-Revision-Date: 2020-04-17 16:59+0200\n"
+"Last-Translator: Automatically generated\n"
+"Language-Team: none\n"
+"Language: de\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+
+#. type: TH
+#: first.man:1
+#, fuzzy, no-wrap
+msgid "first"
+msgstr "erste"
+
+#. type: SH
+#: first.man:2 second.man:2
+#, no-wrap
+msgid "NAME"
+msgstr "NAME"
+
+#. type: Plain text
+#: first.man:4
+msgid "first - a first test file"
+msgstr "erste - eine erste Testdatei"
+
+#. type: Plain text
+#: first.man:6
+msgid "Some random text."
+msgstr "Ein zufälliger Text."
+
+#. type: Plain text
+#: first.man:7
+msgid "More random text that does not make sense."
+msgstr "Mehr zufälliger Text, der keinen Sinn ergibt."
diff --git a/t/cfg/split-fuzzy/first.man.fr b/t/cfg/split-fuzzy/first.man.fr
new file mode 100644
index 0000000..c88127a
--- /dev/null
+++ b/t/cfg/split-fuzzy/first.man.fr
@@ -0,0 +1,12 @@
+.\"*******************************************************************
+.\"
+.\" This file was generated with po4a. Translate the source file.
+.\"
+.\"*******************************************************************
+.TH first 1
+.SH NOM
+premier \- un premier fichier de test
+
+Un texte au hasard.
+
+Plus de texte dénué de sens au hasard.
diff --git a/t/cfg/split-fuzzy/first.man.fr.po b/t/cfg/split-fuzzy/first.man.fr.po
new file mode 100644
index 0000000..1f84c90
--- /dev/null
+++ b/t/cfg/split-fuzzy/first.man.fr.po
@@ -0,0 +1,44 @@
+# French translations for po package
+# Copyright (C) 2020 Free Software Foundation, Inc.
+# This file is distributed under the same license as the po package.
+# Automatically generated, 2020.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: po 4a\n"
+"POT-Creation-Date: 2020-04-17 16:59+0200\n"
+"PO-Revision-Date: 2020-04-17 16:59+0200\n"
+"Last-Translator: Automatically generated\n"
+"Language-Team: none\n"
+"Language: fr\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=2; plural=(n > 1);\n"
+
+#. type: TH
+#: first.man:1
+#, fuzzy, no-wrap
+msgid "first"
+msgstr "premier"
+
+#. type: SH
+#: first.man:2 second.man:2
+#, no-wrap
+msgid "NAME"
+msgstr "NOM"
+
+#. type: Plain text
+#: first.man:4
+msgid "first - a first test file"
+msgstr "premier - un premier fichier de test"
+
+#. type: Plain text
+#: first.man:6
+msgid "Some random text."
+msgstr "Un texte au hasard."
+
+#. type: Plain text
+#: first.man:7
+msgid "More random text that does not make sense."
+msgstr "Plus de texte dénué de sens au hasard."
diff --git a/t/cfg/split-fuzzy/first.man.pot b/t/cfg/split-fuzzy/first.man.pot
new file mode 100644
index 0000000..ab025af
--- /dev/null
+++ b/t/cfg/split-fuzzy/first.man.pot
@@ -0,0 +1,44 @@
+# SOME DESCRIPTIVE TITLE
+# Copyright (C) YEAR Free Software Foundation, Inc.
+# This file is distributed under the same license as the PACKAGE package.
+# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
+#
+#, fuzzy
+msgid ""
+msgstr ""
+"Project-Id-Version: PACKAGE VERSION\n"
+"POT-Creation-Date: 2020-04-17 16:59+0200\n"
+"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
+"Language-Team: LANGUAGE <LL@li.org>\n"
+"Language: \n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+
+#. type: TH
+#: first.man:1
+#, no-wrap
+msgid "first"
+msgstr ""
+
+#. type: SH
+#: first.man:2 second.man:2
+#, no-wrap
+msgid "NAME"
+msgstr ""
+
+#. type: Plain text
+#: first.man:4
+msgid "first - a first test file"
+msgstr ""
+
+#. type: Plain text
+#: first.man:6
+msgid "Some random text."
+msgstr ""
+
+#. type: Plain text
+#: first.man:7
+msgid "More random text that does not make sense."
+msgstr ""
diff --git a/t/cfg/split-fuzzy/po4a.conf b/t/cfg/split-fuzzy/po4a.conf
new file mode 100644
index 0000000..c8f3393
--- /dev/null
+++ b/t/cfg/split-fuzzy/po4a.conf
@@ -0,0 +1,6 @@
+[po4a_langs] fr de
+[po4a_paths] $master.pot $lang:$master.$lang.po
+[options] opt:"--msgmerge-opt --silent"
+
+[type:man] first.man $lang:first.man.$lang
+[type:man] second.man $lang:second.man.$lang
diff --git a/t/cfg/split-fuzzy/second.man b/t/cfg/split-fuzzy/second.man
new file mode 100644
index 0000000..966b73a
--- /dev/null
+++ b/t/cfg/split-fuzzy/second.man
@@ -0,0 +1,8 @@
+.TH second 1
+.SH NAME
+second \- a second test file
+
+This is a test paragraph.
+A short one.
+
+Another entry.
diff --git a/t/cfg/split-fuzzy/second.man.de b/t/cfg/split-fuzzy/second.man.de
new file mode 100644
index 0000000..37e3673
--- /dev/null
+++ b/t/cfg/split-fuzzy/second.man.de
@@ -0,0 +1,12 @@
+.\"*******************************************************************
+.\"
+.\" This file was generated with po4a. Translate the source file.
+.\"
+.\"*******************************************************************
+.TH second 1
+.SH NAME
+zweite \- eine zweite Testdatei
+
+Dies ist ein Testabsatz. Ein kurzer.
+
+Ein weiterer Eintrag.
diff --git a/t/cfg/split-fuzzy/second.man.de.po b/t/cfg/split-fuzzy/second.man.de.po
new file mode 100644
index 0000000..ed98a4d
--- /dev/null
+++ b/t/cfg/split-fuzzy/second.man.de.po
@@ -0,0 +1,44 @@
+# German translations for po package
+# Copyright (C) 2020 Free Software Foundation, Inc.
+# This file is distributed under the same license as the po package.
+# Automatically generated, 2020.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: po 4a\n"
+"POT-Creation-Date: 2020-04-17 16:59+0200\n"
+"PO-Revision-Date: 2020-04-17 16:59+0200\n"
+"Last-Translator: Automatically generated\n"
+"Language-Team: none\n"
+"Language: de\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+
+#. type: SH
+#: first.man:2 second.man:2
+#, no-wrap
+msgid "NAME"
+msgstr "NAME"
+
+#. type: TH
+#: second.man:1
+#, fuzzy, no-wrap
+msgid "second"
+msgstr "zweite"
+
+#. type: Plain text
+#: second.man:4
+msgid "second - a second test file"
+msgstr "zweite - eine zweite Testdatei"
+
+#. type: Plain text
+#: second.man:7
+msgid "This is a test paragraph. A short one."
+msgstr "Dies ist ein Testabsatz. Ein kurzer."
+
+#. type: Plain text
+#: second.man:8
+msgid "Another entry."
+msgstr "Ein weiterer Eintrag."
diff --git a/t/cfg/split-fuzzy/second.man.fr b/t/cfg/split-fuzzy/second.man.fr
new file mode 100644
index 0000000..6489f66
--- /dev/null
+++ b/t/cfg/split-fuzzy/second.man.fr
@@ -0,0 +1,12 @@
+.\"*******************************************************************
+.\"
+.\" This file was generated with po4a. Translate the source file.
+.\"
+.\"*******************************************************************
+.TH second 1
+.SH NOM
+second \- un second fichier de test
+
+Ceci est un paragraphe de test. Un court.
+
+Une autre entrée.
diff --git a/t/cfg/split-fuzzy/second.man.fr.po b/t/cfg/split-fuzzy/second.man.fr.po
new file mode 100644
index 0000000..ae30c13
--- /dev/null
+++ b/t/cfg/split-fuzzy/second.man.fr.po
@@ -0,0 +1,44 @@
+# French translations for po package
+# Copyright (C) 2020 Free Software Foundation, Inc.
+# This file is distributed under the same license as the po package.
+# Automatically generated, 2020.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: po 4a\n"
+"POT-Creation-Date: 2020-04-17 16:59+0200\n"
+"PO-Revision-Date: 2020-04-17 16:59+0200\n"
+"Last-Translator: Automatically generated\n"
+"Language-Team: none\n"
+"Language: fr\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=2; plural=(n > 1);\n"
+
+#. type: SH
+#: first.man:2 second.man:2
+#, no-wrap
+msgid "NAME"
+msgstr "NOM"
+
+#. type: TH
+#: second.man:1
+#, fuzzy, no-wrap
+msgid "second"
+msgstr "second"
+
+#. type: Plain text
+#: second.man:4
+msgid "second - a second test file"
+msgstr "second - un second fichier de test"
+
+#. type: Plain text
+#: second.man:7
+msgid "This is a test paragraph. A short one."
+msgstr "Ceci est un paragraphe de test. Un court."
+
+#. type: Plain text
+#: second.man:8
+msgid "Another entry."
+msgstr "Une autre entrée."
diff --git a/t/cfg/split-fuzzy/second.man.pot b/t/cfg/split-fuzzy/second.man.pot
new file mode 100644
index 0000000..1e6995b
--- /dev/null
+++ b/t/cfg/split-fuzzy/second.man.pot
@@ -0,0 +1,44 @@
+# SOME DESCRIPTIVE TITLE
+# Copyright (C) YEAR Free Software Foundation, Inc.
+# This file is distributed under the same license as the PACKAGE package.
+# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
+#
+#, fuzzy
+msgid ""
+msgstr ""
+"Project-Id-Version: PACKAGE VERSION\n"
+"POT-Creation-Date: 2020-04-17 16:59+0200\n"
+"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
+"Language-Team: LANGUAGE <LL@li.org>\n"
+"Language: \n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+
+#. type: SH
+#: first.man:2 second.man:2
+#, no-wrap
+msgid "NAME"
+msgstr ""
+
+#. type: TH
+#: second.man:1
+#, no-wrap
+msgid "second"
+msgstr ""
+
+#. type: Plain text
+#: second.man:4
+msgid "second - a second test file"
+msgstr ""
+
+#. type: Plain text
+#: second.man:7
+msgid "This is a test paragraph. A short one."
+msgstr ""
+
+#. type: Plain text
+#: second.man:8
+msgid "Another entry."
+msgstr ""
diff --git a/t/cfg/split-multimaster/Documentation.de.po b/t/cfg/split-multimaster/Documentation.de.po
new file mode 100644
index 0000000..b188b4f
--- /dev/null
+++ b/t/cfg/split-multimaster/Documentation.de.po
@@ -0,0 +1,64 @@
+# German translations for po package
+# Copyright (C) 2020 Free Software Foundation, Inc.
+# This file is distributed under the same license as the po package.
+# Automatically generated, 2020.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: po 4a\n"
+"POT-Creation-Date: 2021-11-04 14:27+0100\n"
+"PO-Revision-Date: 2020-04-17 16:59+0200\n"
+"Last-Translator: Automatically generated\n"
+"Language-Team: none\n"
+"Language: de\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+
+#. type: TH
+#: first.man:1
+#, no-wrap
+msgid "first"
+msgstr "erste"
+
+#. type: SH
+#: first.man:2 second.man:2 third.man:2
+#, no-wrap
+msgid "NAME"
+msgstr "NAME"
+
+#. type: Plain text
+#: first.man:4
+msgid "first - a first test file"
+msgstr "erste - eine erste Testdatei"
+
+#. type: Plain text
+#: first.man:6 third.man:6
+msgid "Some random text."
+msgstr "Ein zufälliger Text."
+
+#. type: Plain text
+#: first.man:7
+msgid "More random text that does not make sense."
+msgstr "Mehr zufälliger Text, der keinen Sinn ergibt."
+
+#. type: TH
+#: third.man:1
+#, no-wrap
+msgid "third"
+msgstr "dritte"
+
+#. type: Plain text
+#: third.man:4
+msgid "third - a third test file"
+msgstr "dritte - eine dritte Testdatei"
+
+#. type: Plain text
+#: third.man:8
+msgid ""
+"More random text that does not make sense, but is different from the first "
+"file."
+msgstr ""
+"Mehr zufälliger Text, der keinen Sinn ergibt, aber anders von die erster "
+"Testdatei."
diff --git a/t/cfg/split-multimaster/Documentation.fr.po b/t/cfg/split-multimaster/Documentation.fr.po
new file mode 100644
index 0000000..2bd8187
--- /dev/null
+++ b/t/cfg/split-multimaster/Documentation.fr.po
@@ -0,0 +1,63 @@
+# French translations for po package
+# Copyright (C) 2020 Free Software Foundation, Inc.
+# This file is distributed under the same license as the po package.
+# Automatically generated, 2020.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: po 4a\n"
+"POT-Creation-Date: 2021-11-04 14:27+0100\n"
+"PO-Revision-Date: 2020-04-17 16:59+0200\n"
+"Last-Translator: Automatically generated\n"
+"Language-Team: none\n"
+"Language: fr\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=2; plural=(n > 1);\n"
+
+#. type: TH
+#: first.man:1
+#, no-wrap
+msgid "first"
+msgstr "premier"
+
+#. type: SH
+#: first.man:2 second.man:2 third.man:2
+#, no-wrap
+msgid "NAME"
+msgstr "NOM"
+
+#. type: Plain text
+#: first.man:4
+msgid "first - a first test file"
+msgstr "premier - un premier fichier de test"
+
+#. type: Plain text
+#: first.man:6 third.man:6
+msgid "Some random text."
+msgstr "Un texte au hasard."
+
+#. type: Plain text
+#: first.man:7
+msgid "More random text that does not make sense."
+msgstr "Plus de texte dénué de sens au hasard."
+
+#. type: TH
+#: third.man:1
+#, no-wrap
+msgid "third"
+msgstr "troisième"
+
+#. type: Plain text
+#: third.man:4
+msgid "third - a third test file"
+msgstr "troisième - un troisieme fichier de test"
+
+#. type: Plain text
+#: third.man:8
+msgid ""
+"More random text that does not make sense, but is different from the first "
+"file."
+msgstr ""
+"Plus de texte dénué de sens au hasard, mais différent du premier fichier."
diff --git a/t/cfg/split-multimaster/Documentation.pot b/t/cfg/split-multimaster/Documentation.pot
new file mode 100644
index 0000000..9edb55f
--- /dev/null
+++ b/t/cfg/split-multimaster/Documentation.pot
@@ -0,0 +1,62 @@
+# SOME DESCRIPTIVE TITLE
+# Copyright (C) YEAR Free Software Foundation, Inc.
+# This file is distributed under the same license as the PACKAGE package.
+# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
+#
+#, fuzzy
+msgid ""
+msgstr ""
+"Project-Id-Version: PACKAGE VERSION\n"
+"POT-Creation-Date: 2021-11-04 14:27+0100\n"
+"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
+"Language-Team: LANGUAGE <LL@li.org>\n"
+"Language: \n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+
+#. type: TH
+#: first.man:1
+#, no-wrap
+msgid "first"
+msgstr ""
+
+#. type: SH
+#: first.man:2 second.man:2 third.man:2
+#, no-wrap
+msgid "NAME"
+msgstr ""
+
+#. type: Plain text
+#: first.man:4
+msgid "first - a first test file"
+msgstr ""
+
+#. type: Plain text
+#: first.man:6 third.man:6
+msgid "Some random text."
+msgstr ""
+
+#. type: Plain text
+#: first.man:7
+msgid "More random text that does not make sense."
+msgstr ""
+
+#. type: TH
+#: third.man:1
+#, no-wrap
+msgid "third"
+msgstr ""
+
+#. type: Plain text
+#: third.man:4
+msgid "third - a third test file"
+msgstr ""
+
+#. type: Plain text
+#: third.man:8
+msgid ""
+"More random text that does not make sense, but is different from the first "
+"file."
+msgstr ""
diff --git a/t/cfg/split-multimaster/_output b/t/cfg/split-multimaster/_output
new file mode 100644
index 0000000..4e8c4f2
--- /dev/null
+++ b/t/cfg/split-multimaster/_output
@@ -0,0 +1,9 @@
+Split mode, creating a temporary POT: (12 entries)
+Updating the translation in language de: 12 translated messages.
+Updating the translation in language fr: 12 translated messages.
+first.man.de is 100% translated (5 strings).
+second.man.de is 100% translated (5 strings).
+third.man.de is 100% translated (5 strings).
+first.man.fr is 100% translated (5 strings).
+second.man.fr is 100% translated (5 strings).
+third.man.fr is 100% translated (5 strings).
diff --git a/t/cfg/split-multimaster/first.man b/t/cfg/split-multimaster/first.man
new file mode 100644
index 0000000..7283dc8
--- /dev/null
+++ b/t/cfg/split-multimaster/first.man
@@ -0,0 +1,7 @@
+.TH first 1
+.SH NAME
+first \- a first test file
+
+Some random text.
+
+More random text that does not make sense.
diff --git a/t/cfg/split-multimaster/first.man.de b/t/cfg/split-multimaster/first.man.de
new file mode 100644
index 0000000..3cfb621
--- /dev/null
+++ b/t/cfg/split-multimaster/first.man.de
@@ -0,0 +1,12 @@
+.\"*******************************************************************
+.\"
+.\" This file was generated with po4a. Translate the source file.
+.\"
+.\"*******************************************************************
+.TH erste 1
+.SH NAME
+erste \- eine erste Testdatei
+
+Ein zufälliger Text.
+
+Mehr zufälliger Text, der keinen Sinn ergibt.
diff --git a/t/cfg/split-multimaster/first.man.fr b/t/cfg/split-multimaster/first.man.fr
new file mode 100644
index 0000000..ee338ba
--- /dev/null
+++ b/t/cfg/split-multimaster/first.man.fr
@@ -0,0 +1,12 @@
+.\"*******************************************************************
+.\"
+.\" This file was generated with po4a. Translate the source file.
+.\"
+.\"*******************************************************************
+.TH premier 1
+.SH NOM
+premier \- un premier fichier de test
+
+Un texte au hasard.
+
+Plus de texte dénué de sens au hasard.
diff --git a/t/cfg/split-multimaster/po4a.conf b/t/cfg/split-multimaster/po4a.conf
new file mode 100644
index 0000000..42ddcce
--- /dev/null
+++ b/t/cfg/split-multimaster/po4a.conf
@@ -0,0 +1,7 @@
+[po4a_langs] fr de
+[po4a_paths] $master.pot $lang:$master.$lang.po
+[options] opt:"--msgmerge-opt --silent"
+
+[type:man] first.man $lang:first.man.$lang pot=Documentation
+[type:man] second.man $lang:second.man.$lang
+[type:man] third.man $lang:third.man.$lang pot=Documentation
diff --git a/t/cfg/split-multimaster/second.man b/t/cfg/split-multimaster/second.man
new file mode 100644
index 0000000..966b73a
--- /dev/null
+++ b/t/cfg/split-multimaster/second.man
@@ -0,0 +1,8 @@
+.TH second 1
+.SH NAME
+second \- a second test file
+
+This is a test paragraph.
+A short one.
+
+Another entry.
diff --git a/t/cfg/split-multimaster/second.man.de b/t/cfg/split-multimaster/second.man.de
new file mode 100644
index 0000000..6d7e4a8
--- /dev/null
+++ b/t/cfg/split-multimaster/second.man.de
@@ -0,0 +1,12 @@
+.\"*******************************************************************
+.\"
+.\" This file was generated with po4a. Translate the source file.
+.\"
+.\"*******************************************************************
+.TH zweite 1
+.SH NAME
+zweite \- eine zweite Testdatei
+
+Dies ist ein Testabsatz. Ein kurzer.
+
+Ein weiterer Eintrag.
diff --git a/t/cfg/split-multimaster/second.man.de.po b/t/cfg/split-multimaster/second.man.de.po
new file mode 100644
index 0000000..ed8b0a0
--- /dev/null
+++ b/t/cfg/split-multimaster/second.man.de.po
@@ -0,0 +1,44 @@
+# German translations for po package
+# Copyright (C) 2020 Free Software Foundation, Inc.
+# This file is distributed under the same license as the po package.
+# Automatically generated, 2020.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: po 4a\n"
+"POT-Creation-Date: 2020-04-17 16:59+0200\n"
+"PO-Revision-Date: 2020-04-17 16:59+0200\n"
+"Last-Translator: Automatically generated\n"
+"Language-Team: none\n"
+"Language: de\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+
+#. type: SH
+#: first.man:2 second.man:2
+#, no-wrap
+msgid "NAME"
+msgstr "NAME"
+
+#. type: TH
+#: second.man:1
+#, no-wrap
+msgid "second"
+msgstr "zweite"
+
+#. type: Plain text
+#: second.man:4
+msgid "second - a second test file"
+msgstr "zweite - eine zweite Testdatei"
+
+#. type: Plain text
+#: second.man:7
+msgid "This is a test paragraph. A short one."
+msgstr "Dies ist ein Testabsatz. Ein kurzer."
+
+#. type: Plain text
+#: second.man:8
+msgid "Another entry."
+msgstr "Ein weiterer Eintrag."
diff --git a/t/cfg/split-multimaster/second.man.fr b/t/cfg/split-multimaster/second.man.fr
new file mode 100644
index 0000000..6489f66
--- /dev/null
+++ b/t/cfg/split-multimaster/second.man.fr
@@ -0,0 +1,12 @@
+.\"*******************************************************************
+.\"
+.\" This file was generated with po4a. Translate the source file.
+.\"
+.\"*******************************************************************
+.TH second 1
+.SH NOM
+second \- un second fichier de test
+
+Ceci est un paragraphe de test. Un court.
+
+Une autre entrée.
diff --git a/t/cfg/split-multimaster/second.man.fr.po b/t/cfg/split-multimaster/second.man.fr.po
new file mode 100644
index 0000000..772d720
--- /dev/null
+++ b/t/cfg/split-multimaster/second.man.fr.po
@@ -0,0 +1,44 @@
+# French translations for po package
+# Copyright (C) 2020 Free Software Foundation, Inc.
+# This file is distributed under the same license as the po package.
+# Automatically generated, 2020.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: po 4a\n"
+"POT-Creation-Date: 2020-04-17 16:59+0200\n"
+"PO-Revision-Date: 2020-04-17 16:59+0200\n"
+"Last-Translator: Automatically generated\n"
+"Language-Team: none\n"
+"Language: fr\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=2; plural=(n > 1);\n"
+
+#. type: SH
+#: first.man:2 second.man:2
+#, no-wrap
+msgid "NAME"
+msgstr "NOM"
+
+#. type: TH
+#: second.man:1
+#, no-wrap
+msgid "second"
+msgstr "second"
+
+#. type: Plain text
+#: second.man:4
+msgid "second - a second test file"
+msgstr "second - un second fichier de test"
+
+#. type: Plain text
+#: second.man:7
+msgid "This is a test paragraph. A short one."
+msgstr "Ceci est un paragraphe de test. Un court."
+
+#. type: Plain text
+#: second.man:8
+msgid "Another entry."
+msgstr "Une autre entrée."
diff --git a/t/cfg/split-multimaster/second.man.pot b/t/cfg/split-multimaster/second.man.pot
new file mode 100644
index 0000000..1e6995b
--- /dev/null
+++ b/t/cfg/split-multimaster/second.man.pot
@@ -0,0 +1,44 @@
+# SOME DESCRIPTIVE TITLE
+# Copyright (C) YEAR Free Software Foundation, Inc.
+# This file is distributed under the same license as the PACKAGE package.
+# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
+#
+#, fuzzy
+msgid ""
+msgstr ""
+"Project-Id-Version: PACKAGE VERSION\n"
+"POT-Creation-Date: 2020-04-17 16:59+0200\n"
+"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
+"Language-Team: LANGUAGE <LL@li.org>\n"
+"Language: \n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+
+#. type: SH
+#: first.man:2 second.man:2
+#, no-wrap
+msgid "NAME"
+msgstr ""
+
+#. type: TH
+#: second.man:1
+#, no-wrap
+msgid "second"
+msgstr ""
+
+#. type: Plain text
+#: second.man:4
+msgid "second - a second test file"
+msgstr ""
+
+#. type: Plain text
+#: second.man:7
+msgid "This is a test paragraph. A short one."
+msgstr ""
+
+#. type: Plain text
+#: second.man:8
+msgid "Another entry."
+msgstr ""
diff --git a/t/cfg/split-multimaster/third.man b/t/cfg/split-multimaster/third.man
new file mode 100644
index 0000000..21f1c5e
--- /dev/null
+++ b/t/cfg/split-multimaster/third.man
@@ -0,0 +1,8 @@
+.TH third 1
+.SH NAME
+third \- a third test file
+
+Some random text.
+
+More random text that does not make sense, but is different from the
+first file.
diff --git a/t/cfg/split-multimaster/third.man.de b/t/cfg/split-multimaster/third.man.de
new file mode 100644
index 0000000..53d22e0
--- /dev/null
+++ b/t/cfg/split-multimaster/third.man.de
@@ -0,0 +1,13 @@
+.\"*******************************************************************
+.\"
+.\" This file was generated with po4a. Translate the source file.
+.\"
+.\"*******************************************************************
+.TH dritte 1
+.SH NAME
+dritte \- eine dritte Testdatei
+
+Ein zufälliger Text.
+
+Mehr zufälliger Text, der keinen Sinn ergibt, aber anders von die erster
+Testdatei.
diff --git a/t/cfg/split-multimaster/third.man.fr b/t/cfg/split-multimaster/third.man.fr
new file mode 100644
index 0000000..051001c
--- /dev/null
+++ b/t/cfg/split-multimaster/third.man.fr
@@ -0,0 +1,12 @@
+.\"*******************************************************************
+.\"
+.\" This file was generated with po4a. Translate the source file.
+.\"
+.\"*******************************************************************
+.TH troisième 1
+.SH NOM
+troisième \- un troisieme fichier de test
+
+Un texte au hasard.
+
+Plus de texte dénué de sens au hasard, mais différent du premier fichier.
diff --git a/t/cfg/split-newstr/_first.man.de b/t/cfg/split-newstr/_first.man.de
new file mode 100644
index 0000000..d09be6a
--- /dev/null
+++ b/t/cfg/split-newstr/_first.man.de
@@ -0,0 +1,14 @@
+.\"*******************************************************************
+.\"
+.\" This file was generated with po4a. Translate the source file.
+.\"
+.\"*******************************************************************
+.TH erste 1
+.SH NAME
+erste \- eine erste Testdatei
+
+Ein zufälliger Text.
+
+Mehr zufälliger Text, der keinen Sinn ergibt.
+
+This is a brand new shiny paragraph. Can you believe it?
diff --git a/t/cfg/split-newstr/_first.man.de.po b/t/cfg/split-newstr/_first.man.de.po
new file mode 100644
index 0000000..d9b9ea4
--- /dev/null
+++ b/t/cfg/split-newstr/_first.man.de.po
@@ -0,0 +1,49 @@
+# German translations for po package
+# Copyright (C) 2020 Free Software Foundation, Inc.
+# This file is distributed under the same license as the po package.
+# Automatically generated, 2020.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: po 4a\n"
+"POT-Creation-Date: 2020-04-17 16:59+0200\n"
+"PO-Revision-Date: 2020-04-17 16:59+0200\n"
+"Last-Translator: Automatically generated\n"
+"Language-Team: none\n"
+"Language: de\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+
+#. type: TH
+#: first.man:1
+#, no-wrap
+msgid "first"
+msgstr "erste"
+
+#. type: SH
+#: first.man:2 second.man:2
+#, no-wrap
+msgid "NAME"
+msgstr "NAME"
+
+#. type: Plain text
+#: first.man:4
+msgid "first - a first test file"
+msgstr "erste - eine erste Testdatei"
+
+#. type: Plain text
+#: first.man:6
+msgid "Some random text."
+msgstr "Ein zufälliger Text."
+
+#. type: Plain text
+#: first.man:7
+msgid "More random text that does not make sense."
+msgstr "Mehr zufälliger Text, der keinen Sinn ergibt."
+
+#. type: Plain text
+#: first.man:9
+msgid "This is a brand new shiny paragraph. Can you believe it?"
+msgstr ""
diff --git a/t/cfg/split-newstr/_first.man.fr b/t/cfg/split-newstr/_first.man.fr
new file mode 100644
index 0000000..a32b888
--- /dev/null
+++ b/t/cfg/split-newstr/_first.man.fr
@@ -0,0 +1,14 @@
+.\"*******************************************************************
+.\"
+.\" This file was generated with po4a. Translate the source file.
+.\"
+.\"*******************************************************************
+.TH premier 1
+.SH NOM
+premier \- un premier fichier de test
+
+Un texte au hasard.
+
+Plus de texte dénué de sens au hasard.
+
+This is a brand new shiny paragraph. Can you believe it?
diff --git a/t/cfg/split-newstr/_first.man.fr.po b/t/cfg/split-newstr/_first.man.fr.po
new file mode 100644
index 0000000..c0a16cb
--- /dev/null
+++ b/t/cfg/split-newstr/_first.man.fr.po
@@ -0,0 +1,49 @@
+# French translations for po package
+# Copyright (C) 2020 Free Software Foundation, Inc.
+# This file is distributed under the same license as the po package.
+# Automatically generated, 2020.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: po 4a\n"
+"POT-Creation-Date: 2020-04-17 16:59+0200\n"
+"PO-Revision-Date: 2020-04-17 16:59+0200\n"
+"Last-Translator: Automatically generated\n"
+"Language-Team: none\n"
+"Language: fr\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=2; plural=(n > 1);\n"
+
+#. type: TH
+#: first.man:1
+#, no-wrap
+msgid "first"
+msgstr "premier"
+
+#. type: SH
+#: first.man:2 second.man:2
+#, no-wrap
+msgid "NAME"
+msgstr "NOM"
+
+#. type: Plain text
+#: first.man:4
+msgid "first - a first test file"
+msgstr "premier - un premier fichier de test"
+
+#. type: Plain text
+#: first.man:6
+msgid "Some random text."
+msgstr "Un texte au hasard."
+
+#. type: Plain text
+#: first.man:7
+msgid "More random text that does not make sense."
+msgstr "Plus de texte dénué de sens au hasard."
+
+#. type: Plain text
+#: first.man:9
+msgid "This is a brand new shiny paragraph. Can you believe it?"
+msgstr ""
diff --git a/t/cfg/split-newstr/_first.man.pot b/t/cfg/split-newstr/_first.man.pot
new file mode 100644
index 0000000..20fdce3
--- /dev/null
+++ b/t/cfg/split-newstr/_first.man.pot
@@ -0,0 +1,49 @@
+# SOME DESCRIPTIVE TITLE
+# Copyright (C) YEAR Free Software Foundation, Inc.
+# This file is distributed under the same license as the PACKAGE package.
+# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
+#
+#, fuzzy
+msgid ""
+msgstr ""
+"Project-Id-Version: PACKAGE VERSION\n"
+"POT-Creation-Date: 2020-04-17 16:59+0200\n"
+"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
+"Language-Team: LANGUAGE <LL@li.org>\n"
+"Language: \n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+
+#. type: TH
+#: first.man:1
+#, no-wrap
+msgid "first"
+msgstr ""
+
+#. type: SH
+#: first.man:2 second.man:2
+#, no-wrap
+msgid "NAME"
+msgstr ""
+
+#. type: Plain text
+#: first.man:4
+msgid "first - a first test file"
+msgstr ""
+
+#. type: Plain text
+#: first.man:6
+msgid "Some random text."
+msgstr ""
+
+#. type: Plain text
+#: first.man:7
+msgid "More random text that does not make sense."
+msgstr ""
+
+#. type: Plain text
+#: first.man:9
+msgid "This is a brand new shiny paragraph. Can you believe it?"
+msgstr ""
diff --git a/t/cfg/split-newstr/_output b/t/cfg/split-newstr/_output
new file mode 100644
index 0000000..b5c7774
--- /dev/null
+++ b/t/cfg/split-newstr/_output
@@ -0,0 +1,7 @@
+Split mode, creating a temporary POT: (11 entries)
+Updating the translation in language de: 9 translated messages, 2 untranslated messages.
+Updating the translation in language fr: 9 translated messages, 2 untranslated messages.
+first.man.de is 83.33% translated (5 of 6 strings).
+second.man.de is 83.33% translated (5 of 6 strings).
+first.man.fr is 83.33% translated (5 of 6 strings).
+second.man.fr is 83.33% translated (5 of 6 strings).
diff --git a/t/cfg/split-newstr/_second.man.de b/t/cfg/split-newstr/_second.man.de
new file mode 100644
index 0000000..4b495f2
--- /dev/null
+++ b/t/cfg/split-newstr/_second.man.de
@@ -0,0 +1,14 @@
+.\"*******************************************************************
+.\"
+.\" This file was generated with po4a. Translate the source file.
+.\"
+.\"*******************************************************************
+.TH zweite 1
+.SH NAME
+zweite \- eine zweite Testdatei
+
+Dies ist ein Testabsatz. Ein kurzer.
+
+Ein weiterer Eintrag.
+
+Woot, some more text appeared. Let's translate it.
diff --git a/t/cfg/split-newstr/_second.man.de.po b/t/cfg/split-newstr/_second.man.de.po
new file mode 100644
index 0000000..da6d1d3
--- /dev/null
+++ b/t/cfg/split-newstr/_second.man.de.po
@@ -0,0 +1,49 @@
+# German translations for po package
+# Copyright (C) 2020 Free Software Foundation, Inc.
+# This file is distributed under the same license as the po package.
+# Automatically generated, 2020.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: po 4a\n"
+"POT-Creation-Date: 2020-04-17 16:59+0200\n"
+"PO-Revision-Date: 2020-04-17 16:59+0200\n"
+"Last-Translator: Automatically generated\n"
+"Language-Team: none\n"
+"Language: de\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+
+#. type: SH
+#: first.man:2 second.man:2
+#, no-wrap
+msgid "NAME"
+msgstr "NAME"
+
+#. type: TH
+#: second.man:1
+#, no-wrap
+msgid "second"
+msgstr "zweite"
+
+#. type: Plain text
+#: second.man:4
+msgid "second - a second test file"
+msgstr "zweite - eine zweite Testdatei"
+
+#. type: Plain text
+#: second.man:7
+msgid "This is a test paragraph. A short one."
+msgstr "Dies ist ein Testabsatz. Ein kurzer."
+
+#. type: Plain text
+#: second.man:8
+msgid "Another entry."
+msgstr "Ein weiterer Eintrag."
+
+#. type: Plain text
+#: second.man:10
+msgid "Woot, some more text appeared. Let's translate it."
+msgstr ""
diff --git a/t/cfg/split-newstr/_second.man.fr b/t/cfg/split-newstr/_second.man.fr
new file mode 100644
index 0000000..a99b46d
--- /dev/null
+++ b/t/cfg/split-newstr/_second.man.fr
@@ -0,0 +1,14 @@
+.\"*******************************************************************
+.\"
+.\" This file was generated with po4a. Translate the source file.
+.\"
+.\"*******************************************************************
+.TH second 1
+.SH NOM
+second \- un second fichier de test
+
+Ceci est un paragraphe de test. Un court.
+
+Une autre entrée.
+
+Woot, some more text appeared. Let's translate it.
diff --git a/t/cfg/split-newstr/_second.man.fr.po b/t/cfg/split-newstr/_second.man.fr.po
new file mode 100644
index 0000000..f2ff101
--- /dev/null
+++ b/t/cfg/split-newstr/_second.man.fr.po
@@ -0,0 +1,49 @@
+# French translations for po package
+# Copyright (C) 2020 Free Software Foundation, Inc.
+# This file is distributed under the same license as the po package.
+# Automatically generated, 2020.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: po 4a\n"
+"POT-Creation-Date: 2020-04-17 16:59+0200\n"
+"PO-Revision-Date: 2020-04-17 16:59+0200\n"
+"Last-Translator: Automatically generated\n"
+"Language-Team: none\n"
+"Language: fr\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=2; plural=(n > 1);\n"
+
+#. type: SH
+#: first.man:2 second.man:2
+#, no-wrap
+msgid "NAME"
+msgstr "NOM"
+
+#. type: TH
+#: second.man:1
+#, no-wrap
+msgid "second"
+msgstr "second"
+
+#. type: Plain text
+#: second.man:4
+msgid "second - a second test file"
+msgstr "second - un second fichier de test"
+
+#. type: Plain text
+#: second.man:7
+msgid "This is a test paragraph. A short one."
+msgstr "Ceci est un paragraphe de test. Un court."
+
+#. type: Plain text
+#: second.man:8
+msgid "Another entry."
+msgstr "Une autre entrée."
+
+#. type: Plain text
+#: second.man:10
+msgid "Woot, some more text appeared. Let's translate it."
+msgstr ""
diff --git a/t/cfg/split-newstr/_second.man.pot b/t/cfg/split-newstr/_second.man.pot
new file mode 100644
index 0000000..b9c0866
--- /dev/null
+++ b/t/cfg/split-newstr/_second.man.pot
@@ -0,0 +1,49 @@
+# SOME DESCRIPTIVE TITLE
+# Copyright (C) YEAR Free Software Foundation, Inc.
+# This file is distributed under the same license as the PACKAGE package.
+# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
+#
+#, fuzzy
+msgid ""
+msgstr ""
+"Project-Id-Version: PACKAGE VERSION\n"
+"POT-Creation-Date: 2020-04-17 16:59+0200\n"
+"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
+"Language-Team: LANGUAGE <LL@li.org>\n"
+"Language: \n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+
+#. type: SH
+#: first.man:2 second.man:2
+#, no-wrap
+msgid "NAME"
+msgstr ""
+
+#. type: TH
+#: second.man:1
+#, no-wrap
+msgid "second"
+msgstr ""
+
+#. type: Plain text
+#: second.man:4
+msgid "second - a second test file"
+msgstr ""
+
+#. type: Plain text
+#: second.man:7
+msgid "This is a test paragraph. A short one."
+msgstr ""
+
+#. type: Plain text
+#: second.man:8
+msgid "Another entry."
+msgstr ""
+
+#. type: Plain text
+#: second.man:10
+msgid "Woot, some more text appeared. Let's translate it."
+msgstr ""
diff --git a/t/cfg/split-newstr/diff_output b/t/cfg/split-newstr/diff_output
new file mode 100644
index 0000000..53b5855
--- /dev/null
+++ b/t/cfg/split-newstr/diff_output
@@ -0,0 +1,11 @@
+--- cfg/split-nopo/_output-noupdate 2020-04-17 17:20:05.150242241 +0200
++++ - 2020-04-17 17:24:16.593316616 +0200
+@@ -0,0 +1,8 @@
++Split mode, creating a temporary POT.
++ (9 entries)
++The translation of master file 'first.man' in language 'de' is missing (file: first.man.de.po) -- skipping.
++The translation of master file 'second.man' in language 'de' is missing (file: second.man.de.po) -- skipping.
++The translation of master file 'first.man' in language 'fr' is missing (file: first.man.fr.po) -- skipping.
++The translation of master file 'second.man' in language 'fr' is missing (file: second.man.fr.po) -- skipping.
++PO file for language de is missing -- skipping.
++PO file for language fr is missing -- skipping.
diff --git a/t/cfg/split-newstr/first.man b/t/cfg/split-newstr/first.man
new file mode 100644
index 0000000..4e59f77
--- /dev/null
+++ b/t/cfg/split-newstr/first.man
@@ -0,0 +1,9 @@
+.TH first 1
+.SH NAME
+first \- a first test file
+
+Some random text.
+
+More random text that does not make sense.
+
+This is a brand new shiny paragraph. Can you believe it? \ No newline at end of file
diff --git a/t/cfg/split-newstr/first.man.de.po b/t/cfg/split-newstr/first.man.de.po
new file mode 100644
index 0000000..ddf4157
--- /dev/null
+++ b/t/cfg/split-newstr/first.man.de.po
@@ -0,0 +1,44 @@
+# German translations for po package
+# Copyright (C) 2020 Free Software Foundation, Inc.
+# This file is distributed under the same license as the po package.
+# Automatically generated, 2020.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: po 4a\n"
+"POT-Creation-Date: 2020-04-17 16:59+0200\n"
+"PO-Revision-Date: 2020-04-17 16:59+0200\n"
+"Last-Translator: Automatically generated\n"
+"Language-Team: none\n"
+"Language: de\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+
+#. type: TH
+#: first.man:1
+#, no-wrap
+msgid "first"
+msgstr "erste"
+
+#. type: SH
+#: first.man:2 second.man:2
+#, no-wrap
+msgid "NAME"
+msgstr "NAME"
+
+#. type: Plain text
+#: first.man:4
+msgid "first - a first test file"
+msgstr "erste - eine erste Testdatei"
+
+#. type: Plain text
+#: first.man:6
+msgid "Some random text."
+msgstr "Ein zufälliger Text."
+
+#. type: Plain text
+#: first.man:7
+msgid "More random text that does not make sense."
+msgstr "Mehr zufälliger Text, der keinen Sinn ergibt."
diff --git a/t/cfg/split-newstr/first.man.fr.po b/t/cfg/split-newstr/first.man.fr.po
new file mode 100644
index 0000000..14f078b
--- /dev/null
+++ b/t/cfg/split-newstr/first.man.fr.po
@@ -0,0 +1,44 @@
+# French translations for po package
+# Copyright (C) 2020 Free Software Foundation, Inc.
+# This file is distributed under the same license as the po package.
+# Automatically generated, 2020.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: po 4a\n"
+"POT-Creation-Date: 2020-04-17 16:59+0200\n"
+"PO-Revision-Date: 2020-04-17 16:59+0200\n"
+"Last-Translator: Automatically generated\n"
+"Language-Team: none\n"
+"Language: fr\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=2; plural=(n > 1);\n"
+
+#. type: TH
+#: first.man:1
+#, no-wrap
+msgid "first"
+msgstr "premier"
+
+#. type: SH
+#: first.man:2 second.man:2
+#, no-wrap
+msgid "NAME"
+msgstr "NOM"
+
+#. type: Plain text
+#: first.man:4
+msgid "first - a first test file"
+msgstr "premier - un premier fichier de test"
+
+#. type: Plain text
+#: first.man:6
+msgid "Some random text."
+msgstr "Un texte au hasard."
+
+#. type: Plain text
+#: first.man:7
+msgid "More random text that does not make sense."
+msgstr "Plus de texte dénué de sens au hasard."
diff --git a/t/cfg/split-newstr/first.man.pot b/t/cfg/split-newstr/first.man.pot
new file mode 100644
index 0000000..ab025af
--- /dev/null
+++ b/t/cfg/split-newstr/first.man.pot
@@ -0,0 +1,44 @@
+# SOME DESCRIPTIVE TITLE
+# Copyright (C) YEAR Free Software Foundation, Inc.
+# This file is distributed under the same license as the PACKAGE package.
+# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
+#
+#, fuzzy
+msgid ""
+msgstr ""
+"Project-Id-Version: PACKAGE VERSION\n"
+"POT-Creation-Date: 2020-04-17 16:59+0200\n"
+"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
+"Language-Team: LANGUAGE <LL@li.org>\n"
+"Language: \n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+
+#. type: TH
+#: first.man:1
+#, no-wrap
+msgid "first"
+msgstr ""
+
+#. type: SH
+#: first.man:2 second.man:2
+#, no-wrap
+msgid "NAME"
+msgstr ""
+
+#. type: Plain text
+#: first.man:4
+msgid "first - a first test file"
+msgstr ""
+
+#. type: Plain text
+#: first.man:6
+msgid "Some random text."
+msgstr ""
+
+#. type: Plain text
+#: first.man:7
+msgid "More random text that does not make sense."
+msgstr ""
diff --git a/t/cfg/split-newstr/po4a.conf b/t/cfg/split-newstr/po4a.conf
new file mode 100644
index 0000000..c8f3393
--- /dev/null
+++ b/t/cfg/split-newstr/po4a.conf
@@ -0,0 +1,6 @@
+[po4a_langs] fr de
+[po4a_paths] $master.pot $lang:$master.$lang.po
+[options] opt:"--msgmerge-opt --silent"
+
+[type:man] first.man $lang:first.man.$lang
+[type:man] second.man $lang:second.man.$lang
diff --git a/t/cfg/split-newstr/second.man b/t/cfg/split-newstr/second.man
new file mode 100644
index 0000000..26aa6d4
--- /dev/null
+++ b/t/cfg/split-newstr/second.man
@@ -0,0 +1,10 @@
+.TH second 1
+.SH NAME
+second \- a second test file
+
+This is a test paragraph.
+A short one.
+
+Another entry.
+
+Woot, some more text appeared. Let's translate it. \ No newline at end of file
diff --git a/t/cfg/split-newstr/second.man.de.po b/t/cfg/split-newstr/second.man.de.po
new file mode 100644
index 0000000..ed8b0a0
--- /dev/null
+++ b/t/cfg/split-newstr/second.man.de.po
@@ -0,0 +1,44 @@
+# German translations for po package
+# Copyright (C) 2020 Free Software Foundation, Inc.
+# This file is distributed under the same license as the po package.
+# Automatically generated, 2020.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: po 4a\n"
+"POT-Creation-Date: 2020-04-17 16:59+0200\n"
+"PO-Revision-Date: 2020-04-17 16:59+0200\n"
+"Last-Translator: Automatically generated\n"
+"Language-Team: none\n"
+"Language: de\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+
+#. type: SH
+#: first.man:2 second.man:2
+#, no-wrap
+msgid "NAME"
+msgstr "NAME"
+
+#. type: TH
+#: second.man:1
+#, no-wrap
+msgid "second"
+msgstr "zweite"
+
+#. type: Plain text
+#: second.man:4
+msgid "second - a second test file"
+msgstr "zweite - eine zweite Testdatei"
+
+#. type: Plain text
+#: second.man:7
+msgid "This is a test paragraph. A short one."
+msgstr "Dies ist ein Testabsatz. Ein kurzer."
+
+#. type: Plain text
+#: second.man:8
+msgid "Another entry."
+msgstr "Ein weiterer Eintrag."
diff --git a/t/cfg/split-newstr/second.man.fr.po b/t/cfg/split-newstr/second.man.fr.po
new file mode 100644
index 0000000..772d720
--- /dev/null
+++ b/t/cfg/split-newstr/second.man.fr.po
@@ -0,0 +1,44 @@
+# French translations for po package
+# Copyright (C) 2020 Free Software Foundation, Inc.
+# This file is distributed under the same license as the po package.
+# Automatically generated, 2020.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: po 4a\n"
+"POT-Creation-Date: 2020-04-17 16:59+0200\n"
+"PO-Revision-Date: 2020-04-17 16:59+0200\n"
+"Last-Translator: Automatically generated\n"
+"Language-Team: none\n"
+"Language: fr\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=2; plural=(n > 1);\n"
+
+#. type: SH
+#: first.man:2 second.man:2
+#, no-wrap
+msgid "NAME"
+msgstr "NOM"
+
+#. type: TH
+#: second.man:1
+#, no-wrap
+msgid "second"
+msgstr "second"
+
+#. type: Plain text
+#: second.man:4
+msgid "second - a second test file"
+msgstr "second - un second fichier de test"
+
+#. type: Plain text
+#: second.man:7
+msgid "This is a test paragraph. A short one."
+msgstr "Ceci est un paragraphe de test. Un court."
+
+#. type: Plain text
+#: second.man:8
+msgid "Another entry."
+msgstr "Une autre entrée."
diff --git a/t/cfg/split-newstr/second.man.pot b/t/cfg/split-newstr/second.man.pot
new file mode 100644
index 0000000..1e6995b
--- /dev/null
+++ b/t/cfg/split-newstr/second.man.pot
@@ -0,0 +1,44 @@
+# SOME DESCRIPTIVE TITLE
+# Copyright (C) YEAR Free Software Foundation, Inc.
+# This file is distributed under the same license as the PACKAGE package.
+# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
+#
+#, fuzzy
+msgid ""
+msgstr ""
+"Project-Id-Version: PACKAGE VERSION\n"
+"POT-Creation-Date: 2020-04-17 16:59+0200\n"
+"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
+"Language-Team: LANGUAGE <LL@li.org>\n"
+"Language: \n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+
+#. type: SH
+#: first.man:2 second.man:2
+#, no-wrap
+msgid "NAME"
+msgstr ""
+
+#. type: TH
+#: second.man:1
+#, no-wrap
+msgid "second"
+msgstr ""
+
+#. type: Plain text
+#: second.man:4
+msgid "second - a second test file"
+msgstr ""
+
+#. type: Plain text
+#: second.man:7
+msgid "This is a test paragraph. A short one."
+msgstr ""
+
+#. type: Plain text
+#: second.man:8
+msgid "Another entry."
+msgstr ""
diff --git a/t/cfg/split-nopo/_first.man.de.po b/t/cfg/split-nopo/_first.man.de.po
new file mode 100644
index 0000000..0a3499f
--- /dev/null
+++ b/t/cfg/split-nopo/_first.man.de.po
@@ -0,0 +1,44 @@
+# German translations for po package
+# Copyright (C) 2020 Free Software Foundation, Inc.
+# This file is distributed under the same license as the po package.
+# Automatically generated, 2020.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: po 4a\n"
+"POT-Creation-Date: 2020-04-17 16:59+0200\n"
+"PO-Revision-Date: 2020-04-17 16:59+0200\n"
+"Last-Translator: Automatically generated\n"
+"Language-Team: none\n"
+"Language: de\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+
+#. type: TH
+#: first.man:1
+#, no-wrap
+msgid "first"
+msgstr ""
+
+#. type: SH
+#: first.man:2 second.man:2
+#, no-wrap
+msgid "NAME"
+msgstr ""
+
+#. type: Plain text
+#: first.man:4
+msgid "first - a first test file"
+msgstr ""
+
+#. type: Plain text
+#: first.man:6
+msgid "Some random text."
+msgstr ""
+
+#. type: Plain text
+#: first.man:7
+msgid "More random text that does not make sense."
+msgstr ""
diff --git a/t/cfg/split-nopo/_first.man.fr.po b/t/cfg/split-nopo/_first.man.fr.po
new file mode 100644
index 0000000..0c18419
--- /dev/null
+++ b/t/cfg/split-nopo/_first.man.fr.po
@@ -0,0 +1,44 @@
+# French translations for po package
+# Copyright (C) 2020 Free Software Foundation, Inc.
+# This file is distributed under the same license as the po package.
+# Automatically generated, 2020.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: po 4a\n"
+"POT-Creation-Date: 2020-04-17 16:59+0200\n"
+"PO-Revision-Date: 2020-04-17 16:59+0200\n"
+"Last-Translator: Automatically generated\n"
+"Language-Team: none\n"
+"Language: fr\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=2; plural=(n > 1);\n"
+
+#. type: TH
+#: first.man:1
+#, no-wrap
+msgid "first"
+msgstr ""
+
+#. type: SH
+#: first.man:2 second.man:2
+#, no-wrap
+msgid "NAME"
+msgstr ""
+
+#. type: Plain text
+#: first.man:4
+msgid "first - a first test file"
+msgstr ""
+
+#. type: Plain text
+#: first.man:6
+msgid "Some random text."
+msgstr ""
+
+#. type: Plain text
+#: first.man:7
+msgid "More random text that does not make sense."
+msgstr ""
diff --git a/t/cfg/split-nopo/_output b/t/cfg/split-nopo/_output
new file mode 100644
index 0000000..391f776
--- /dev/null
+++ b/t/cfg/split-nopo/_output
@@ -0,0 +1,11 @@
+Split mode, creating a temporary POT: (9 entries)
+The translation of master file 'first.man' in language 'de' is missing (file: first.man.de.po) -- skipping.
+The translation of master file 'second.man' in language 'de' is missing (file: second.man.de.po) -- skipping.
+The translation of master file 'first.man' in language 'fr' is missing (file: first.man.fr.po) -- skipping.
+The translation of master file 'second.man' in language 'fr' is missing (file: second.man.fr.po) -- skipping.
+Creating an empty PO file for the language de.
+Creating an empty PO file for the language fr.
+Discard first.man.de (0 of 5 strings; only 0% translated; need 80%).
+Discard second.man.de (0 of 5 strings; only 0% translated; need 80%).
+Discard first.man.fr (0 of 5 strings; only 0% translated; need 80%).
+Discard second.man.fr (0 of 5 strings; only 0% translated; need 80%).
diff --git a/t/cfg/split-nopo/_output-noupdate b/t/cfg/split-nopo/_output-noupdate
new file mode 100644
index 0000000..0f5f083
--- /dev/null
+++ b/t/cfg/split-nopo/_output-noupdate
@@ -0,0 +1,7 @@
+Split mode, creating a temporary POT: (9 entries)
+The translation of master file 'first.man' in language 'de' is missing (file: first.man.de.po) -- skipping.
+The translation of master file 'second.man' in language 'de' is missing (file: second.man.de.po) -- skipping.
+The translation of master file 'first.man' in language 'fr' is missing (file: first.man.fr.po) -- skipping.
+The translation of master file 'second.man' in language 'fr' is missing (file: second.man.fr.po) -- skipping.
+PO file for language de is missing -- skipping.
+PO file for language fr is missing -- skipping.
diff --git a/t/cfg/split-nopo/_second.man.de.po b/t/cfg/split-nopo/_second.man.de.po
new file mode 100644
index 0000000..74b0235
--- /dev/null
+++ b/t/cfg/split-nopo/_second.man.de.po
@@ -0,0 +1,44 @@
+# German translations for po package
+# Copyright (C) 2020 Free Software Foundation, Inc.
+# This file is distributed under the same license as the po package.
+# Automatically generated, 2020.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: po 4a\n"
+"POT-Creation-Date: 2020-04-17 16:59+0200\n"
+"PO-Revision-Date: 2020-04-17 16:59+0200\n"
+"Last-Translator: Automatically generated\n"
+"Language-Team: none\n"
+"Language: de\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+
+#. type: SH
+#: first.man:2 second.man:2
+#, no-wrap
+msgid "NAME"
+msgstr ""
+
+#. type: TH
+#: second.man:1
+#, no-wrap
+msgid "second"
+msgstr ""
+
+#. type: Plain text
+#: second.man:4
+msgid "second - a second test file"
+msgstr ""
+
+#. type: Plain text
+#: second.man:7
+msgid "This is a test paragraph. A short one."
+msgstr ""
+
+#. type: Plain text
+#: second.man:8
+msgid "Another entry."
+msgstr ""
diff --git a/t/cfg/split-nopo/_second.man.fr.po b/t/cfg/split-nopo/_second.man.fr.po
new file mode 100644
index 0000000..539e8a2
--- /dev/null
+++ b/t/cfg/split-nopo/_second.man.fr.po
@@ -0,0 +1,44 @@
+# French translations for po package
+# Copyright (C) 2020 Free Software Foundation, Inc.
+# This file is distributed under the same license as the po package.
+# Automatically generated, 2020.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: po 4a\n"
+"POT-Creation-Date: 2020-04-17 16:59+0200\n"
+"PO-Revision-Date: 2020-04-17 16:59+0200\n"
+"Last-Translator: Automatically generated\n"
+"Language-Team: none\n"
+"Language: fr\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=2; plural=(n > 1);\n"
+
+#. type: SH
+#: first.man:2 second.man:2
+#, no-wrap
+msgid "NAME"
+msgstr ""
+
+#. type: TH
+#: second.man:1
+#, no-wrap
+msgid "second"
+msgstr ""
+
+#. type: Plain text
+#: second.man:4
+msgid "second - a second test file"
+msgstr ""
+
+#. type: Plain text
+#: second.man:7
+msgid "This is a test paragraph. A short one."
+msgstr ""
+
+#. type: Plain text
+#: second.man:8
+msgid "Another entry."
+msgstr ""
diff --git a/t/cfg/split-nopo/diff_output b/t/cfg/split-nopo/diff_output
new file mode 100644
index 0000000..53b5855
--- /dev/null
+++ b/t/cfg/split-nopo/diff_output
@@ -0,0 +1,11 @@
+--- cfg/split-nopo/_output-noupdate 2020-04-17 17:20:05.150242241 +0200
++++ - 2020-04-17 17:24:16.593316616 +0200
+@@ -0,0 +1,8 @@
++Split mode, creating a temporary POT.
++ (9 entries)
++The translation of master file 'first.man' in language 'de' is missing (file: first.man.de.po) -- skipping.
++The translation of master file 'second.man' in language 'de' is missing (file: second.man.de.po) -- skipping.
++The translation of master file 'first.man' in language 'fr' is missing (file: first.man.fr.po) -- skipping.
++The translation of master file 'second.man' in language 'fr' is missing (file: second.man.fr.po) -- skipping.
++PO file for language de is missing -- skipping.
++PO file for language fr is missing -- skipping.
diff --git a/t/cfg/split-nopo/first.man b/t/cfg/split-nopo/first.man
new file mode 100644
index 0000000..7283dc8
--- /dev/null
+++ b/t/cfg/split-nopo/first.man
@@ -0,0 +1,7 @@
+.TH first 1
+.SH NAME
+first \- a first test file
+
+Some random text.
+
+More random text that does not make sense.
diff --git a/t/cfg/split-nopo/first.man.pot b/t/cfg/split-nopo/first.man.pot
new file mode 100644
index 0000000..ab025af
--- /dev/null
+++ b/t/cfg/split-nopo/first.man.pot
@@ -0,0 +1,44 @@
+# SOME DESCRIPTIVE TITLE
+# Copyright (C) YEAR Free Software Foundation, Inc.
+# This file is distributed under the same license as the PACKAGE package.
+# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
+#
+#, fuzzy
+msgid ""
+msgstr ""
+"Project-Id-Version: PACKAGE VERSION\n"
+"POT-Creation-Date: 2020-04-17 16:59+0200\n"
+"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
+"Language-Team: LANGUAGE <LL@li.org>\n"
+"Language: \n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+
+#. type: TH
+#: first.man:1
+#, no-wrap
+msgid "first"
+msgstr ""
+
+#. type: SH
+#: first.man:2 second.man:2
+#, no-wrap
+msgid "NAME"
+msgstr ""
+
+#. type: Plain text
+#: first.man:4
+msgid "first - a first test file"
+msgstr ""
+
+#. type: Plain text
+#: first.man:6
+msgid "Some random text."
+msgstr ""
+
+#. type: Plain text
+#: first.man:7
+msgid "More random text that does not make sense."
+msgstr ""
diff --git a/t/cfg/split-nopo/po4a.conf b/t/cfg/split-nopo/po4a.conf
new file mode 100644
index 0000000..c8f3393
--- /dev/null
+++ b/t/cfg/split-nopo/po4a.conf
@@ -0,0 +1,6 @@
+[po4a_langs] fr de
+[po4a_paths] $master.pot $lang:$master.$lang.po
+[options] opt:"--msgmerge-opt --silent"
+
+[type:man] first.man $lang:first.man.$lang
+[type:man] second.man $lang:second.man.$lang
diff --git a/t/cfg/split-nopo/second.man b/t/cfg/split-nopo/second.man
new file mode 100644
index 0000000..966b73a
--- /dev/null
+++ b/t/cfg/split-nopo/second.man
@@ -0,0 +1,8 @@
+.TH second 1
+.SH NAME
+second \- a second test file
+
+This is a test paragraph.
+A short one.
+
+Another entry.
diff --git a/t/cfg/split-nopo/second.man.pot b/t/cfg/split-nopo/second.man.pot
new file mode 100644
index 0000000..1e6995b
--- /dev/null
+++ b/t/cfg/split-nopo/second.man.pot
@@ -0,0 +1,44 @@
+# SOME DESCRIPTIVE TITLE
+# Copyright (C) YEAR Free Software Foundation, Inc.
+# This file is distributed under the same license as the PACKAGE package.
+# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
+#
+#, fuzzy
+msgid ""
+msgstr ""
+"Project-Id-Version: PACKAGE VERSION\n"
+"POT-Creation-Date: 2020-04-17 16:59+0200\n"
+"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
+"Language-Team: LANGUAGE <LL@li.org>\n"
+"Language: \n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+
+#. type: SH
+#: first.man:2 second.man:2
+#, no-wrap
+msgid "NAME"
+msgstr ""
+
+#. type: TH
+#: second.man:1
+#, no-wrap
+msgid "second"
+msgstr ""
+
+#. type: Plain text
+#: second.man:4
+msgid "second - a second test file"
+msgstr ""
+
+#. type: Plain text
+#: second.man:7
+msgid "This is a test paragraph. A short one."
+msgstr ""
+
+#. type: Plain text
+#: second.man:8
+msgid "Another entry."
+msgstr ""
diff --git a/t/cfg/split-nopotpo/_first.man.de.po b/t/cfg/split-nopotpo/_first.man.de.po
new file mode 100644
index 0000000..0a3499f
--- /dev/null
+++ b/t/cfg/split-nopotpo/_first.man.de.po
@@ -0,0 +1,44 @@
+# German translations for po package
+# Copyright (C) 2020 Free Software Foundation, Inc.
+# This file is distributed under the same license as the po package.
+# Automatically generated, 2020.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: po 4a\n"
+"POT-Creation-Date: 2020-04-17 16:59+0200\n"
+"PO-Revision-Date: 2020-04-17 16:59+0200\n"
+"Last-Translator: Automatically generated\n"
+"Language-Team: none\n"
+"Language: de\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+
+#. type: TH
+#: first.man:1
+#, no-wrap
+msgid "first"
+msgstr ""
+
+#. type: SH
+#: first.man:2 second.man:2
+#, no-wrap
+msgid "NAME"
+msgstr ""
+
+#. type: Plain text
+#: first.man:4
+msgid "first - a first test file"
+msgstr ""
+
+#. type: Plain text
+#: first.man:6
+msgid "Some random text."
+msgstr ""
+
+#. type: Plain text
+#: first.man:7
+msgid "More random text that does not make sense."
+msgstr ""
diff --git a/t/cfg/split-nopotpo/_first.man.fr.po b/t/cfg/split-nopotpo/_first.man.fr.po
new file mode 100644
index 0000000..0c18419
--- /dev/null
+++ b/t/cfg/split-nopotpo/_first.man.fr.po
@@ -0,0 +1,44 @@
+# French translations for po package
+# Copyright (C) 2020 Free Software Foundation, Inc.
+# This file is distributed under the same license as the po package.
+# Automatically generated, 2020.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: po 4a\n"
+"POT-Creation-Date: 2020-04-17 16:59+0200\n"
+"PO-Revision-Date: 2020-04-17 16:59+0200\n"
+"Last-Translator: Automatically generated\n"
+"Language-Team: none\n"
+"Language: fr\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=2; plural=(n > 1);\n"
+
+#. type: TH
+#: first.man:1
+#, no-wrap
+msgid "first"
+msgstr ""
+
+#. type: SH
+#: first.man:2 second.man:2
+#, no-wrap
+msgid "NAME"
+msgstr ""
+
+#. type: Plain text
+#: first.man:4
+msgid "first - a first test file"
+msgstr ""
+
+#. type: Plain text
+#: first.man:6
+msgid "Some random text."
+msgstr ""
+
+#. type: Plain text
+#: first.man:7
+msgid "More random text that does not make sense."
+msgstr ""
diff --git a/t/cfg/split-nopotpo/_first.man.pot b/t/cfg/split-nopotpo/_first.man.pot
new file mode 100644
index 0000000..ab025af
--- /dev/null
+++ b/t/cfg/split-nopotpo/_first.man.pot
@@ -0,0 +1,44 @@
+# SOME DESCRIPTIVE TITLE
+# Copyright (C) YEAR Free Software Foundation, Inc.
+# This file is distributed under the same license as the PACKAGE package.
+# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
+#
+#, fuzzy
+msgid ""
+msgstr ""
+"Project-Id-Version: PACKAGE VERSION\n"
+"POT-Creation-Date: 2020-04-17 16:59+0200\n"
+"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
+"Language-Team: LANGUAGE <LL@li.org>\n"
+"Language: \n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+
+#. type: TH
+#: first.man:1
+#, no-wrap
+msgid "first"
+msgstr ""
+
+#. type: SH
+#: first.man:2 second.man:2
+#, no-wrap
+msgid "NAME"
+msgstr ""
+
+#. type: Plain text
+#: first.man:4
+msgid "first - a first test file"
+msgstr ""
+
+#. type: Plain text
+#: first.man:6
+msgid "Some random text."
+msgstr ""
+
+#. type: Plain text
+#: first.man:7
+msgid "More random text that does not make sense."
+msgstr ""
diff --git a/t/cfg/split-nopotpo/_output b/t/cfg/split-nopotpo/_output
new file mode 100644
index 0000000..391f776
--- /dev/null
+++ b/t/cfg/split-nopotpo/_output
@@ -0,0 +1,11 @@
+Split mode, creating a temporary POT: (9 entries)
+The translation of master file 'first.man' in language 'de' is missing (file: first.man.de.po) -- skipping.
+The translation of master file 'second.man' in language 'de' is missing (file: second.man.de.po) -- skipping.
+The translation of master file 'first.man' in language 'fr' is missing (file: first.man.fr.po) -- skipping.
+The translation of master file 'second.man' in language 'fr' is missing (file: second.man.fr.po) -- skipping.
+Creating an empty PO file for the language de.
+Creating an empty PO file for the language fr.
+Discard first.man.de (0 of 5 strings; only 0% translated; need 80%).
+Discard second.man.de (0 of 5 strings; only 0% translated; need 80%).
+Discard first.man.fr (0 of 5 strings; only 0% translated; need 80%).
+Discard second.man.fr (0 of 5 strings; only 0% translated; need 80%).
diff --git a/t/cfg/split-nopotpo/_second.man.de.po b/t/cfg/split-nopotpo/_second.man.de.po
new file mode 100644
index 0000000..74b0235
--- /dev/null
+++ b/t/cfg/split-nopotpo/_second.man.de.po
@@ -0,0 +1,44 @@
+# German translations for po package
+# Copyright (C) 2020 Free Software Foundation, Inc.
+# This file is distributed under the same license as the po package.
+# Automatically generated, 2020.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: po 4a\n"
+"POT-Creation-Date: 2020-04-17 16:59+0200\n"
+"PO-Revision-Date: 2020-04-17 16:59+0200\n"
+"Last-Translator: Automatically generated\n"
+"Language-Team: none\n"
+"Language: de\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+
+#. type: SH
+#: first.man:2 second.man:2
+#, no-wrap
+msgid "NAME"
+msgstr ""
+
+#. type: TH
+#: second.man:1
+#, no-wrap
+msgid "second"
+msgstr ""
+
+#. type: Plain text
+#: second.man:4
+msgid "second - a second test file"
+msgstr ""
+
+#. type: Plain text
+#: second.man:7
+msgid "This is a test paragraph. A short one."
+msgstr ""
+
+#. type: Plain text
+#: second.man:8
+msgid "Another entry."
+msgstr ""
diff --git a/t/cfg/split-nopotpo/_second.man.fr.po b/t/cfg/split-nopotpo/_second.man.fr.po
new file mode 100644
index 0000000..539e8a2
--- /dev/null
+++ b/t/cfg/split-nopotpo/_second.man.fr.po
@@ -0,0 +1,44 @@
+# French translations for po package
+# Copyright (C) 2020 Free Software Foundation, Inc.
+# This file is distributed under the same license as the po package.
+# Automatically generated, 2020.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: po 4a\n"
+"POT-Creation-Date: 2020-04-17 16:59+0200\n"
+"PO-Revision-Date: 2020-04-17 16:59+0200\n"
+"Last-Translator: Automatically generated\n"
+"Language-Team: none\n"
+"Language: fr\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=2; plural=(n > 1);\n"
+
+#. type: SH
+#: first.man:2 second.man:2
+#, no-wrap
+msgid "NAME"
+msgstr ""
+
+#. type: TH
+#: second.man:1
+#, no-wrap
+msgid "second"
+msgstr ""
+
+#. type: Plain text
+#: second.man:4
+msgid "second - a second test file"
+msgstr ""
+
+#. type: Plain text
+#: second.man:7
+msgid "This is a test paragraph. A short one."
+msgstr ""
+
+#. type: Plain text
+#: second.man:8
+msgid "Another entry."
+msgstr ""
diff --git a/t/cfg/split-nopotpo/_second.man.pot b/t/cfg/split-nopotpo/_second.man.pot
new file mode 100644
index 0000000..1e6995b
--- /dev/null
+++ b/t/cfg/split-nopotpo/_second.man.pot
@@ -0,0 +1,44 @@
+# SOME DESCRIPTIVE TITLE
+# Copyright (C) YEAR Free Software Foundation, Inc.
+# This file is distributed under the same license as the PACKAGE package.
+# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
+#
+#, fuzzy
+msgid ""
+msgstr ""
+"Project-Id-Version: PACKAGE VERSION\n"
+"POT-Creation-Date: 2020-04-17 16:59+0200\n"
+"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
+"Language-Team: LANGUAGE <LL@li.org>\n"
+"Language: \n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+
+#. type: SH
+#: first.man:2 second.man:2
+#, no-wrap
+msgid "NAME"
+msgstr ""
+
+#. type: TH
+#: second.man:1
+#, no-wrap
+msgid "second"
+msgstr ""
+
+#. type: Plain text
+#: second.man:4
+msgid "second - a second test file"
+msgstr ""
+
+#. type: Plain text
+#: second.man:7
+msgid "This is a test paragraph. A short one."
+msgstr ""
+
+#. type: Plain text
+#: second.man:8
+msgid "Another entry."
+msgstr ""
diff --git a/t/cfg/split-nopotpo/first.man b/t/cfg/split-nopotpo/first.man
new file mode 100644
index 0000000..7283dc8
--- /dev/null
+++ b/t/cfg/split-nopotpo/first.man
@@ -0,0 +1,7 @@
+.TH first 1
+.SH NAME
+first \- a first test file
+
+Some random text.
+
+More random text that does not make sense.
diff --git a/t/cfg/split-nopotpo/po4a.conf b/t/cfg/split-nopotpo/po4a.conf
new file mode 100644
index 0000000..c8f3393
--- /dev/null
+++ b/t/cfg/split-nopotpo/po4a.conf
@@ -0,0 +1,6 @@
+[po4a_langs] fr de
+[po4a_paths] $master.pot $lang:$master.$lang.po
+[options] opt:"--msgmerge-opt --silent"
+
+[type:man] first.man $lang:first.man.$lang
+[type:man] second.man $lang:second.man.$lang
diff --git a/t/cfg/split-nopotpo/second.man b/t/cfg/split-nopotpo/second.man
new file mode 100644
index 0000000..966b73a
--- /dev/null
+++ b/t/cfg/split-nopotpo/second.man
@@ -0,0 +1,8 @@
+.TH second 1
+.SH NAME
+second \- a second test file
+
+This is a test paragraph.
+A short one.
+
+Another entry.
diff --git a/t/cfg/split-potin/_first.man.de b/t/cfg/split-potin/_first.man.de
new file mode 100644
index 0000000..f2c73ac
--- /dev/null
+++ b/t/cfg/split-potin/_first.man.de
@@ -0,0 +1,16 @@
+.\"*******************************************************************
+.\"
+.\" This file was generated with po4a. Translate the source file.
+.\"
+.\"*******************************************************************
+.TH erste 1
+.SH NAME
+erste \- eine erste Testdatei
+
+Ein zufälliger Text.
+
+Mehr zufälliger Text, der keinen Sinn ergibt.
+
+.SH "Not Translated"
+
+This section should not end up in the PO files to not get translated.
diff --git a/t/cfg/split-potin/_first.man.fr b/t/cfg/split-potin/_first.man.fr
new file mode 100644
index 0000000..250a45d
--- /dev/null
+++ b/t/cfg/split-potin/_first.man.fr
@@ -0,0 +1,16 @@
+.\"*******************************************************************
+.\"
+.\" This file was generated with po4a. Translate the source file.
+.\"
+.\"*******************************************************************
+.TH premier 1
+.SH NOM
+premier \- un premier fichier de test
+
+Un texte au hasard.
+
+Plus de texte dénué de sens au hasard.
+
+.SH "Not Translated"
+
+This section should not end up in the PO files to not get translated.
diff --git a/t/cfg/split-potin/_output b/t/cfg/split-potin/_output
new file mode 100644
index 0000000..9fe5e33
--- /dev/null
+++ b/t/cfg/split-potin/_output
@@ -0,0 +1,7 @@
+Split mode, creating a temporary POT: (9 entries)
+Updating the translation in language de: 9 translated messages.
+Updating the translation in language fr: 9 translated messages.
+first.man.de is 71.42% translated (5 of 7 strings).
+second.man.de is 71.42% translated (5 of 7 strings).
+first.man.fr is 71.42% translated (5 of 7 strings).
+second.man.fr is 71.42% translated (5 of 7 strings).
diff --git a/t/cfg/split-potin/_second.man.de b/t/cfg/split-potin/_second.man.de
new file mode 100644
index 0000000..198dc49
--- /dev/null
+++ b/t/cfg/split-potin/_second.man.de
@@ -0,0 +1,16 @@
+.\"*******************************************************************
+.\"
+.\" This file was generated with po4a. Translate the source file.
+.\"
+.\"*******************************************************************
+.TH zweite 1
+.SH NAME
+zweite \- eine zweite Testdatei
+
+Dies ist ein Testabsatz. Ein kurzer.
+
+Ein weiterer Eintrag.
+
+.SH "Not Translated"
+
+This section should not end up in the PO files to not get translated.
diff --git a/t/cfg/split-potin/_second.man.fr b/t/cfg/split-potin/_second.man.fr
new file mode 100644
index 0000000..cc22d85
--- /dev/null
+++ b/t/cfg/split-potin/_second.man.fr
@@ -0,0 +1,16 @@
+.\"*******************************************************************
+.\"
+.\" This file was generated with po4a. Translate the source file.
+.\"
+.\"*******************************************************************
+.TH second 1
+.SH NOM
+second \- un second fichier de test
+
+Ceci est un paragraphe de test. Un court.
+
+Une autre entrée.
+
+.SH "Not Translated"
+
+This section should not end up in the PO files to not get translated.
diff --git a/t/cfg/split-potin/diff_output b/t/cfg/split-potin/diff_output
new file mode 100644
index 0000000..53b5855
--- /dev/null
+++ b/t/cfg/split-potin/diff_output
@@ -0,0 +1,11 @@
+--- cfg/split-nopo/_output-noupdate 2020-04-17 17:20:05.150242241 +0200
++++ - 2020-04-17 17:24:16.593316616 +0200
+@@ -0,0 +1,8 @@
++Split mode, creating a temporary POT.
++ (9 entries)
++The translation of master file 'first.man' in language 'de' is missing (file: first.man.de.po) -- skipping.
++The translation of master file 'second.man' in language 'de' is missing (file: second.man.de.po) -- skipping.
++The translation of master file 'first.man' in language 'fr' is missing (file: first.man.fr.po) -- skipping.
++The translation of master file 'second.man' in language 'fr' is missing (file: second.man.fr.po) -- skipping.
++PO file for language de is missing -- skipping.
++PO file for language fr is missing -- skipping.
diff --git a/t/cfg/split-potin/first-filtered.man b/t/cfg/split-potin/first-filtered.man
new file mode 100644
index 0000000..7283dc8
--- /dev/null
+++ b/t/cfg/split-potin/first-filtered.man
@@ -0,0 +1,7 @@
+.TH first 1
+.SH NAME
+first \- a first test file
+
+Some random text.
+
+More random text that does not make sense.
diff --git a/t/cfg/split-potin/first.man b/t/cfg/split-potin/first.man
new file mode 100644
index 0000000..49a7da6
--- /dev/null
+++ b/t/cfg/split-potin/first.man
@@ -0,0 +1,11 @@
+.TH first 1
+.SH NAME
+first \- a first test file
+
+Some random text.
+
+More random text that does not make sense.
+
+.SH "Not Translated"
+
+This section should not end up in the PO files to not get translated.
diff --git a/t/cfg/split-potin/first.man.de.po b/t/cfg/split-potin/first.man.de.po
new file mode 100644
index 0000000..ddf4157
--- /dev/null
+++ b/t/cfg/split-potin/first.man.de.po
@@ -0,0 +1,44 @@
+# German translations for po package
+# Copyright (C) 2020 Free Software Foundation, Inc.
+# This file is distributed under the same license as the po package.
+# Automatically generated, 2020.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: po 4a\n"
+"POT-Creation-Date: 2020-04-17 16:59+0200\n"
+"PO-Revision-Date: 2020-04-17 16:59+0200\n"
+"Last-Translator: Automatically generated\n"
+"Language-Team: none\n"
+"Language: de\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+
+#. type: TH
+#: first.man:1
+#, no-wrap
+msgid "first"
+msgstr "erste"
+
+#. type: SH
+#: first.man:2 second.man:2
+#, no-wrap
+msgid "NAME"
+msgstr "NAME"
+
+#. type: Plain text
+#: first.man:4
+msgid "first - a first test file"
+msgstr "erste - eine erste Testdatei"
+
+#. type: Plain text
+#: first.man:6
+msgid "Some random text."
+msgstr "Ein zufälliger Text."
+
+#. type: Plain text
+#: first.man:7
+msgid "More random text that does not make sense."
+msgstr "Mehr zufälliger Text, der keinen Sinn ergibt."
diff --git a/t/cfg/split-potin/first.man.fr.po b/t/cfg/split-potin/first.man.fr.po
new file mode 100644
index 0000000..14f078b
--- /dev/null
+++ b/t/cfg/split-potin/first.man.fr.po
@@ -0,0 +1,44 @@
+# French translations for po package
+# Copyright (C) 2020 Free Software Foundation, Inc.
+# This file is distributed under the same license as the po package.
+# Automatically generated, 2020.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: po 4a\n"
+"POT-Creation-Date: 2020-04-17 16:59+0200\n"
+"PO-Revision-Date: 2020-04-17 16:59+0200\n"
+"Last-Translator: Automatically generated\n"
+"Language-Team: none\n"
+"Language: fr\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=2; plural=(n > 1);\n"
+
+#. type: TH
+#: first.man:1
+#, no-wrap
+msgid "first"
+msgstr "premier"
+
+#. type: SH
+#: first.man:2 second.man:2
+#, no-wrap
+msgid "NAME"
+msgstr "NOM"
+
+#. type: Plain text
+#: first.man:4
+msgid "first - a first test file"
+msgstr "premier - un premier fichier de test"
+
+#. type: Plain text
+#: first.man:6
+msgid "Some random text."
+msgstr "Un texte au hasard."
+
+#. type: Plain text
+#: first.man:7
+msgid "More random text that does not make sense."
+msgstr "Plus de texte dénué de sens au hasard."
diff --git a/t/cfg/split-potin/first.man.pot b/t/cfg/split-potin/first.man.pot
new file mode 100644
index 0000000..ab025af
--- /dev/null
+++ b/t/cfg/split-potin/first.man.pot
@@ -0,0 +1,44 @@
+# SOME DESCRIPTIVE TITLE
+# Copyright (C) YEAR Free Software Foundation, Inc.
+# This file is distributed under the same license as the PACKAGE package.
+# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
+#
+#, fuzzy
+msgid ""
+msgstr ""
+"Project-Id-Version: PACKAGE VERSION\n"
+"POT-Creation-Date: 2020-04-17 16:59+0200\n"
+"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
+"Language-Team: LANGUAGE <LL@li.org>\n"
+"Language: \n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+
+#. type: TH
+#: first.man:1
+#, no-wrap
+msgid "first"
+msgstr ""
+
+#. type: SH
+#: first.man:2 second.man:2
+#, no-wrap
+msgid "NAME"
+msgstr ""
+
+#. type: Plain text
+#: first.man:4
+msgid "first - a first test file"
+msgstr ""
+
+#. type: Plain text
+#: first.man:6
+msgid "Some random text."
+msgstr ""
+
+#. type: Plain text
+#: first.man:7
+msgid "More random text that does not make sense."
+msgstr ""
diff --git a/t/cfg/split-potin/po4a.conf b/t/cfg/split-potin/po4a.conf
new file mode 100644
index 0000000..ed42214
--- /dev/null
+++ b/t/cfg/split-potin/po4a.conf
@@ -0,0 +1,6 @@
+[po4a_langs] fr de
+[po4a_paths] $master.pot $lang:$master.$lang.po
+[options] --msgmerge-opt --silent --keep 0
+
+[type:man] first.man $lang:first.man.$lang pot_in:first-filtered.man
+[type:man] second.man $lang:second.man.$lang pot_in:second-filtered.man
diff --git a/t/cfg/split-potin/second-filtered.man b/t/cfg/split-potin/second-filtered.man
new file mode 100644
index 0000000..966b73a
--- /dev/null
+++ b/t/cfg/split-potin/second-filtered.man
@@ -0,0 +1,8 @@
+.TH second 1
+.SH NAME
+second \- a second test file
+
+This is a test paragraph.
+A short one.
+
+Another entry.
diff --git a/t/cfg/split-potin/second.man b/t/cfg/split-potin/second.man
new file mode 100644
index 0000000..5c57cdd
--- /dev/null
+++ b/t/cfg/split-potin/second.man
@@ -0,0 +1,12 @@
+.TH second 1
+.SH NAME
+second \- a second test file
+
+This is a test paragraph.
+A short one.
+
+Another entry.
+
+.SH "Not Translated"
+
+This section should not end up in the PO files to not get translated.
diff --git a/t/cfg/split-potin/second.man.de.po b/t/cfg/split-potin/second.man.de.po
new file mode 100644
index 0000000..ed8b0a0
--- /dev/null
+++ b/t/cfg/split-potin/second.man.de.po
@@ -0,0 +1,44 @@
+# German translations for po package
+# Copyright (C) 2020 Free Software Foundation, Inc.
+# This file is distributed under the same license as the po package.
+# Automatically generated, 2020.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: po 4a\n"
+"POT-Creation-Date: 2020-04-17 16:59+0200\n"
+"PO-Revision-Date: 2020-04-17 16:59+0200\n"
+"Last-Translator: Automatically generated\n"
+"Language-Team: none\n"
+"Language: de\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+
+#. type: SH
+#: first.man:2 second.man:2
+#, no-wrap
+msgid "NAME"
+msgstr "NAME"
+
+#. type: TH
+#: second.man:1
+#, no-wrap
+msgid "second"
+msgstr "zweite"
+
+#. type: Plain text
+#: second.man:4
+msgid "second - a second test file"
+msgstr "zweite - eine zweite Testdatei"
+
+#. type: Plain text
+#: second.man:7
+msgid "This is a test paragraph. A short one."
+msgstr "Dies ist ein Testabsatz. Ein kurzer."
+
+#. type: Plain text
+#: second.man:8
+msgid "Another entry."
+msgstr "Ein weiterer Eintrag."
diff --git a/t/cfg/split-potin/second.man.fr.po b/t/cfg/split-potin/second.man.fr.po
new file mode 100644
index 0000000..772d720
--- /dev/null
+++ b/t/cfg/split-potin/second.man.fr.po
@@ -0,0 +1,44 @@
+# French translations for po package
+# Copyright (C) 2020 Free Software Foundation, Inc.
+# This file is distributed under the same license as the po package.
+# Automatically generated, 2020.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: po 4a\n"
+"POT-Creation-Date: 2020-04-17 16:59+0200\n"
+"PO-Revision-Date: 2020-04-17 16:59+0200\n"
+"Last-Translator: Automatically generated\n"
+"Language-Team: none\n"
+"Language: fr\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=2; plural=(n > 1);\n"
+
+#. type: SH
+#: first.man:2 second.man:2
+#, no-wrap
+msgid "NAME"
+msgstr "NOM"
+
+#. type: TH
+#: second.man:1
+#, no-wrap
+msgid "second"
+msgstr "second"
+
+#. type: Plain text
+#: second.man:4
+msgid "second - a second test file"
+msgstr "second - un second fichier de test"
+
+#. type: Plain text
+#: second.man:7
+msgid "This is a test paragraph. A short one."
+msgstr "Ceci est un paragraphe de test. Un court."
+
+#. type: Plain text
+#: second.man:8
+msgid "Another entry."
+msgstr "Une autre entrée."
diff --git a/t/cfg/split-potin/second.man.pot b/t/cfg/split-potin/second.man.pot
new file mode 100644
index 0000000..1e6995b
--- /dev/null
+++ b/t/cfg/split-potin/second.man.pot
@@ -0,0 +1,44 @@
+# SOME DESCRIPTIVE TITLE
+# Copyright (C) YEAR Free Software Foundation, Inc.
+# This file is distributed under the same license as the PACKAGE package.
+# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
+#
+#, fuzzy
+msgid ""
+msgstr ""
+"Project-Id-Version: PACKAGE VERSION\n"
+"POT-Creation-Date: 2020-04-17 16:59+0200\n"
+"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
+"Language-Team: LANGUAGE <LL@li.org>\n"
+"Language: \n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+
+#. type: SH
+#: first.man:2 second.man:2
+#, no-wrap
+msgid "NAME"
+msgstr ""
+
+#. type: TH
+#: second.man:1
+#, no-wrap
+msgid "second"
+msgstr ""
+
+#. type: Plain text
+#: second.man:4
+msgid "second - a second test file"
+msgstr ""
+
+#. type: Plain text
+#: second.man:7
+msgid "This is a test paragraph. A short one."
+msgstr ""
+
+#. type: Plain text
+#: second.man:8
+msgid "Another entry."
+msgstr ""
diff --git a/t/cfg/split-uptodate/_output b/t/cfg/split-uptodate/_output
new file mode 100644
index 0000000..2525bdf
--- /dev/null
+++ b/t/cfg/split-uptodate/_output
@@ -0,0 +1,7 @@
+Split mode, creating a temporary POT: (9 entries)
+Updating the translation in language de: 9 translated messages.
+Updating the translation in language fr: 9 translated messages.
+first.man.de is 100% translated (5 strings).
+second.man.de is 100% translated (5 strings).
+first.man.fr is 100% translated (5 strings).
+second.man.fr is 100% translated (5 strings).
diff --git a/t/cfg/split-uptodate/diff_output b/t/cfg/split-uptodate/diff_output
new file mode 100644
index 0000000..53b5855
--- /dev/null
+++ b/t/cfg/split-uptodate/diff_output
@@ -0,0 +1,11 @@
+--- cfg/split-nopo/_output-noupdate 2020-04-17 17:20:05.150242241 +0200
++++ - 2020-04-17 17:24:16.593316616 +0200
+@@ -0,0 +1,8 @@
++Split mode, creating a temporary POT.
++ (9 entries)
++The translation of master file 'first.man' in language 'de' is missing (file: first.man.de.po) -- skipping.
++The translation of master file 'second.man' in language 'de' is missing (file: second.man.de.po) -- skipping.
++The translation of master file 'first.man' in language 'fr' is missing (file: first.man.fr.po) -- skipping.
++The translation of master file 'second.man' in language 'fr' is missing (file: second.man.fr.po) -- skipping.
++PO file for language de is missing -- skipping.
++PO file for language fr is missing -- skipping.
diff --git a/t/cfg/split-uptodate/first.man b/t/cfg/split-uptodate/first.man
new file mode 100644
index 0000000..7283dc8
--- /dev/null
+++ b/t/cfg/split-uptodate/first.man
@@ -0,0 +1,7 @@
+.TH first 1
+.SH NAME
+first \- a first test file
+
+Some random text.
+
+More random text that does not make sense.
diff --git a/t/cfg/split-uptodate/first.man.de b/t/cfg/split-uptodate/first.man.de
new file mode 100644
index 0000000..3cfb621
--- /dev/null
+++ b/t/cfg/split-uptodate/first.man.de
@@ -0,0 +1,12 @@
+.\"*******************************************************************
+.\"
+.\" This file was generated with po4a. Translate the source file.
+.\"
+.\"*******************************************************************
+.TH erste 1
+.SH NAME
+erste \- eine erste Testdatei
+
+Ein zufälliger Text.
+
+Mehr zufälliger Text, der keinen Sinn ergibt.
diff --git a/t/cfg/split-uptodate/first.man.de.po b/t/cfg/split-uptodate/first.man.de.po
new file mode 100644
index 0000000..ddf4157
--- /dev/null
+++ b/t/cfg/split-uptodate/first.man.de.po
@@ -0,0 +1,44 @@
+# German translations for po package
+# Copyright (C) 2020 Free Software Foundation, Inc.
+# This file is distributed under the same license as the po package.
+# Automatically generated, 2020.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: po 4a\n"
+"POT-Creation-Date: 2020-04-17 16:59+0200\n"
+"PO-Revision-Date: 2020-04-17 16:59+0200\n"
+"Last-Translator: Automatically generated\n"
+"Language-Team: none\n"
+"Language: de\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+
+#. type: TH
+#: first.man:1
+#, no-wrap
+msgid "first"
+msgstr "erste"
+
+#. type: SH
+#: first.man:2 second.man:2
+#, no-wrap
+msgid "NAME"
+msgstr "NAME"
+
+#. type: Plain text
+#: first.man:4
+msgid "first - a first test file"
+msgstr "erste - eine erste Testdatei"
+
+#. type: Plain text
+#: first.man:6
+msgid "Some random text."
+msgstr "Ein zufälliger Text."
+
+#. type: Plain text
+#: first.man:7
+msgid "More random text that does not make sense."
+msgstr "Mehr zufälliger Text, der keinen Sinn ergibt."
diff --git a/t/cfg/split-uptodate/first.man.fr b/t/cfg/split-uptodate/first.man.fr
new file mode 100644
index 0000000..ee338ba
--- /dev/null
+++ b/t/cfg/split-uptodate/first.man.fr
@@ -0,0 +1,12 @@
+.\"*******************************************************************
+.\"
+.\" This file was generated with po4a. Translate the source file.
+.\"
+.\"*******************************************************************
+.TH premier 1
+.SH NOM
+premier \- un premier fichier de test
+
+Un texte au hasard.
+
+Plus de texte dénué de sens au hasard.
diff --git a/t/cfg/split-uptodate/first.man.fr.po b/t/cfg/split-uptodate/first.man.fr.po
new file mode 100644
index 0000000..14f078b
--- /dev/null
+++ b/t/cfg/split-uptodate/first.man.fr.po
@@ -0,0 +1,44 @@
+# French translations for po package
+# Copyright (C) 2020 Free Software Foundation, Inc.
+# This file is distributed under the same license as the po package.
+# Automatically generated, 2020.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: po 4a\n"
+"POT-Creation-Date: 2020-04-17 16:59+0200\n"
+"PO-Revision-Date: 2020-04-17 16:59+0200\n"
+"Last-Translator: Automatically generated\n"
+"Language-Team: none\n"
+"Language: fr\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=2; plural=(n > 1);\n"
+
+#. type: TH
+#: first.man:1
+#, no-wrap
+msgid "first"
+msgstr "premier"
+
+#. type: SH
+#: first.man:2 second.man:2
+#, no-wrap
+msgid "NAME"
+msgstr "NOM"
+
+#. type: Plain text
+#: first.man:4
+msgid "first - a first test file"
+msgstr "premier - un premier fichier de test"
+
+#. type: Plain text
+#: first.man:6
+msgid "Some random text."
+msgstr "Un texte au hasard."
+
+#. type: Plain text
+#: first.man:7
+msgid "More random text that does not make sense."
+msgstr "Plus de texte dénué de sens au hasard."
diff --git a/t/cfg/split-uptodate/first.man.pot b/t/cfg/split-uptodate/first.man.pot
new file mode 100644
index 0000000..ab025af
--- /dev/null
+++ b/t/cfg/split-uptodate/first.man.pot
@@ -0,0 +1,44 @@
+# SOME DESCRIPTIVE TITLE
+# Copyright (C) YEAR Free Software Foundation, Inc.
+# This file is distributed under the same license as the PACKAGE package.
+# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
+#
+#, fuzzy
+msgid ""
+msgstr ""
+"Project-Id-Version: PACKAGE VERSION\n"
+"POT-Creation-Date: 2020-04-17 16:59+0200\n"
+"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
+"Language-Team: LANGUAGE <LL@li.org>\n"
+"Language: \n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+
+#. type: TH
+#: first.man:1
+#, no-wrap
+msgid "first"
+msgstr ""
+
+#. type: SH
+#: first.man:2 second.man:2
+#, no-wrap
+msgid "NAME"
+msgstr ""
+
+#. type: Plain text
+#: first.man:4
+msgid "first - a first test file"
+msgstr ""
+
+#. type: Plain text
+#: first.man:6
+msgid "Some random text."
+msgstr ""
+
+#. type: Plain text
+#: first.man:7
+msgid "More random text that does not make sense."
+msgstr ""
diff --git a/t/cfg/split-uptodate/po4a.conf b/t/cfg/split-uptodate/po4a.conf
new file mode 100644
index 0000000..c8f3393
--- /dev/null
+++ b/t/cfg/split-uptodate/po4a.conf
@@ -0,0 +1,6 @@
+[po4a_langs] fr de
+[po4a_paths] $master.pot $lang:$master.$lang.po
+[options] opt:"--msgmerge-opt --silent"
+
+[type:man] first.man $lang:first.man.$lang
+[type:man] second.man $lang:second.man.$lang
diff --git a/t/cfg/split-uptodate/second.man b/t/cfg/split-uptodate/second.man
new file mode 100644
index 0000000..966b73a
--- /dev/null
+++ b/t/cfg/split-uptodate/second.man
@@ -0,0 +1,8 @@
+.TH second 1
+.SH NAME
+second \- a second test file
+
+This is a test paragraph.
+A short one.
+
+Another entry.
diff --git a/t/cfg/split-uptodate/second.man.de b/t/cfg/split-uptodate/second.man.de
new file mode 100644
index 0000000..6d7e4a8
--- /dev/null
+++ b/t/cfg/split-uptodate/second.man.de
@@ -0,0 +1,12 @@
+.\"*******************************************************************
+.\"
+.\" This file was generated with po4a. Translate the source file.
+.\"
+.\"*******************************************************************
+.TH zweite 1
+.SH NAME
+zweite \- eine zweite Testdatei
+
+Dies ist ein Testabsatz. Ein kurzer.
+
+Ein weiterer Eintrag.
diff --git a/t/cfg/split-uptodate/second.man.de.po b/t/cfg/split-uptodate/second.man.de.po
new file mode 100644
index 0000000..ed8b0a0
--- /dev/null
+++ b/t/cfg/split-uptodate/second.man.de.po
@@ -0,0 +1,44 @@
+# German translations for po package
+# Copyright (C) 2020 Free Software Foundation, Inc.
+# This file is distributed under the same license as the po package.
+# Automatically generated, 2020.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: po 4a\n"
+"POT-Creation-Date: 2020-04-17 16:59+0200\n"
+"PO-Revision-Date: 2020-04-17 16:59+0200\n"
+"Last-Translator: Automatically generated\n"
+"Language-Team: none\n"
+"Language: de\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+
+#. type: SH
+#: first.man:2 second.man:2
+#, no-wrap
+msgid "NAME"
+msgstr "NAME"
+
+#. type: TH
+#: second.man:1
+#, no-wrap
+msgid "second"
+msgstr "zweite"
+
+#. type: Plain text
+#: second.man:4
+msgid "second - a second test file"
+msgstr "zweite - eine zweite Testdatei"
+
+#. type: Plain text
+#: second.man:7
+msgid "This is a test paragraph. A short one."
+msgstr "Dies ist ein Testabsatz. Ein kurzer."
+
+#. type: Plain text
+#: second.man:8
+msgid "Another entry."
+msgstr "Ein weiterer Eintrag."
diff --git a/t/cfg/split-uptodate/second.man.fr b/t/cfg/split-uptodate/second.man.fr
new file mode 100644
index 0000000..6489f66
--- /dev/null
+++ b/t/cfg/split-uptodate/second.man.fr
@@ -0,0 +1,12 @@
+.\"*******************************************************************
+.\"
+.\" This file was generated with po4a. Translate the source file.
+.\"
+.\"*******************************************************************
+.TH second 1
+.SH NOM
+second \- un second fichier de test
+
+Ceci est un paragraphe de test. Un court.
+
+Une autre entrée.
diff --git a/t/cfg/split-uptodate/second.man.fr.po b/t/cfg/split-uptodate/second.man.fr.po
new file mode 100644
index 0000000..772d720
--- /dev/null
+++ b/t/cfg/split-uptodate/second.man.fr.po
@@ -0,0 +1,44 @@
+# French translations for po package
+# Copyright (C) 2020 Free Software Foundation, Inc.
+# This file is distributed under the same license as the po package.
+# Automatically generated, 2020.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: po 4a\n"
+"POT-Creation-Date: 2020-04-17 16:59+0200\n"
+"PO-Revision-Date: 2020-04-17 16:59+0200\n"
+"Last-Translator: Automatically generated\n"
+"Language-Team: none\n"
+"Language: fr\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=2; plural=(n > 1);\n"
+
+#. type: SH
+#: first.man:2 second.man:2
+#, no-wrap
+msgid "NAME"
+msgstr "NOM"
+
+#. type: TH
+#: second.man:1
+#, no-wrap
+msgid "second"
+msgstr "second"
+
+#. type: Plain text
+#: second.man:4
+msgid "second - a second test file"
+msgstr "second - un second fichier de test"
+
+#. type: Plain text
+#: second.man:7
+msgid "This is a test paragraph. A short one."
+msgstr "Ceci est un paragraphe de test. Un court."
+
+#. type: Plain text
+#: second.man:8
+msgid "Another entry."
+msgstr "Une autre entrée."
diff --git a/t/cfg/split-uptodate/second.man.pot b/t/cfg/split-uptodate/second.man.pot
new file mode 100644
index 0000000..1e6995b
--- /dev/null
+++ b/t/cfg/split-uptodate/second.man.pot
@@ -0,0 +1,44 @@
+# SOME DESCRIPTIVE TITLE
+# Copyright (C) YEAR Free Software Foundation, Inc.
+# This file is distributed under the same license as the PACKAGE package.
+# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
+#
+#, fuzzy
+msgid ""
+msgstr ""
+"Project-Id-Version: PACKAGE VERSION\n"
+"POT-Creation-Date: 2020-04-17 16:59+0200\n"
+"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
+"Language-Team: LANGUAGE <LL@li.org>\n"
+"Language: \n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+
+#. type: SH
+#: first.man:2 second.man:2
+#, no-wrap
+msgid "NAME"
+msgstr ""
+
+#. type: TH
+#: second.man:1
+#, no-wrap
+msgid "second"
+msgstr ""
+
+#. type: Plain text
+#: second.man:4
+msgid "second - a second test file"
+msgstr ""
+
+#. type: Plain text
+#: second.man:7
+msgid "This is a test paragraph. A short one."
+msgstr ""
+
+#. type: Plain text
+#: second.man:8
+msgid "Another entry."
+msgstr ""
diff --git a/t/cfg/split-yaml/_index.md b/t/cfg/split-yaml/_index.md
new file mode 100644
index 0000000..c5a04d0
--- /dev/null
+++ b/t/cfg/split-yaml/_index.md
@@ -0,0 +1,3 @@
+Happy birthday.
+
+Happy new year.
diff --git a/t/cfg/split-yaml/_index.vi.md b/t/cfg/split-yaml/_index.vi.md
new file mode 100644
index 0000000..6210788
--- /dev/null
+++ b/t/cfg/split-yaml/_index.vi.md
@@ -0,0 +1,3 @@
+Chúc mừng sinh nhật.
+
+Chúc mừng năm mới.
diff --git a/t/cfg/split-yaml/_output b/t/cfg/split-yaml/_output
new file mode 100644
index 0000000..1530d95
--- /dev/null
+++ b/t/cfg/split-yaml/_output
@@ -0,0 +1,4 @@
+Split mode, creating a temporary POT: (5 entries)
+Updating the translation in language vi: 5 translated messages.
+_index.vi.md is 100% translated (2 strings).
+vi.yaml is 100% translated (3 strings).
diff --git a/t/cfg/split-yaml/content.pot b/t/cfg/split-yaml/content.pot
new file mode 100644
index 0000000..8b92b77
--- /dev/null
+++ b/t/cfg/split-yaml/content.pot
@@ -0,0 +1,27 @@
+# SOME DESCRIPTIVE TITLE
+# Copyright (C) YEAR Free Software Foundation, Inc.
+# This file is distributed under the same license as the PACKAGE package.
+# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
+#
+#, fuzzy
+msgid ""
+msgstr ""
+"Project-Id-Version: PACKAGE VERSION\n"
+"POT-Creation-Date: 2021-02-08 09:11+0100\n"
+"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
+"Language-Team: LANGUAGE <LL@li.org>\n"
+"Language: \n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+
+#. type: Plain text
+#: _index.md:2
+msgid "Happy birthday."
+msgstr ""
+
+#. type: Plain text
+#: _index.md:3
+msgid "Happy new year."
+msgstr ""
diff --git a/t/cfg/split-yaml/content.vi.po b/t/cfg/split-yaml/content.vi.po
new file mode 100644
index 0000000..1c38c19
--- /dev/null
+++ b/t/cfg/split-yaml/content.vi.po
@@ -0,0 +1,27 @@
+# SOME DESCRIPTIVE TITLE
+# Copyright (C) YEAR Free Software Foundation, Inc.
+# This file is distributed under the same license as the PACKAGE package.
+# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
+#
+#, fuzzy
+msgid ""
+msgstr ""
+"Project-Id-Version: PACKAGE VERSION\n"
+"POT-Creation-Date: 2021-02-08 09:11+0100\n"
+"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
+"Language-Team: LANGUAGE <LL@li.org>\n"
+"Language: \n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+
+#. type: Plain text
+#: _index.md:2
+msgid "Happy birthday."
+msgstr "Chúc mừng sinh nhật."
+
+#. type: Plain text
+#: _index.md:3
+msgid "Happy new year."
+msgstr "Chúc mừng năm mới."
diff --git a/t/cfg/split-yaml/en.yaml b/t/cfg/split-yaml/en.yaml
new file mode 100644
index 0000000..f5d1fa8
--- /dev/null
+++ b/t/cfg/split-yaml/en.yaml
@@ -0,0 +1,6 @@
+translated-by:
+ other: 'Translated by'
+translations:
+ other: Languages
+select-your-language:
+ other: 'Select your language'
diff --git a/t/cfg/split-yaml/i18n.pot b/t/cfg/split-yaml/i18n.pot
new file mode 100644
index 0000000..7e50912
--- /dev/null
+++ b/t/cfg/split-yaml/i18n.pot
@@ -0,0 +1,35 @@
+# SOME DESCRIPTIVE TITLE
+# Copyright (C) YEAR Free Software Foundation, Inc.
+# This file is distributed under the same license as the PACKAGE package.
+# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
+#
+#, fuzzy
+msgid ""
+msgstr ""
+"Project-Id-Version: PACKAGE VERSION\n"
+"POT-Creation-Date: 2021-02-08 09:11+0100\n"
+"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
+"Language-Team: LANGUAGE <LL@li.org>\n"
+"Language: \n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+
+#. type: Hash Value: select-your-language other
+#: en.yaml:0
+#, no-wrap
+msgid "Select your language"
+msgstr ""
+
+#. type: Hash Value: translated-by other
+#: en.yaml:0
+#, no-wrap
+msgid "Translated by"
+msgstr ""
+
+#. type: Hash Value: translations other
+#: en.yaml:0
+#, no-wrap
+msgid "Languages"
+msgstr ""
diff --git a/t/cfg/split-yaml/i18n.vi.po b/t/cfg/split-yaml/i18n.vi.po
new file mode 100644
index 0000000..06c78f5
--- /dev/null
+++ b/t/cfg/split-yaml/i18n.vi.po
@@ -0,0 +1,35 @@
+# SOME DESCRIPTIVE TITLE
+# Copyright (C) YEAR Free Software Foundation, Inc.
+# This file is distributed under the same license as the PACKAGE package.
+# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
+#
+#, fuzzy
+msgid ""
+msgstr ""
+"Project-Id-Version: PACKAGE VERSION\n"
+"POT-Creation-Date: 2021-02-08 09:08+0100\n"
+"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
+"Language-Team: LANGUAGE <LL@li.org>\n"
+"Language: \n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+
+#. type: Hash Value: select-your-language other
+#: en.yaml:0
+#, no-wrap
+msgid "Select your language"
+msgstr "Chọn ngôn ngữ"
+
+#. type: Hash Value: translated-by other
+#: en.yaml:0
+#, no-wrap
+msgid "Translated by"
+msgstr "Dịch bởi"
+
+#. type: Hash Value: translations other
+#: en.yaml:0
+#, no-wrap
+msgid "Languages"
+msgstr "Ngôn ngữ"
diff --git a/t/cfg/split-yaml/po4a.cfg b/t/cfg/split-yaml/po4a.cfg
new file mode 100644
index 0000000..e3458f6
--- /dev/null
+++ b/t/cfg/split-yaml/po4a.cfg
@@ -0,0 +1,5 @@
+[po4a_langs] vi
+[po4a_paths] $master.pot $lang:$master.$lang.po
+[type: text] _index.md $lang:_index.$lang.md pot=content opt:"-o markdown"
+[type: yaml] en.yaml $lang:$lang.yaml pot=i18n
+[options] -M utf-8 -L utf-8
diff --git a/t/cfg/split-yaml/vi.yaml b/t/cfg/split-yaml/vi.yaml
new file mode 100644
index 0000000..972e020
--- /dev/null
+++ b/t/cfg/split-yaml/vi.yaml
@@ -0,0 +1,7 @@
+---
+select-your-language:
+ other: 'Chọn ngôn ngữ'
+translated-by:
+ other: 'Dịch bởi'
+translations:
+ other: 'Ngôn ngữ'
diff --git a/t/cfg/split/_first.man.de b/t/cfg/split/_first.man.de
new file mode 100644
index 0000000..3cfb621
--- /dev/null
+++ b/t/cfg/split/_first.man.de
@@ -0,0 +1,12 @@
+.\"*******************************************************************
+.\"
+.\" This file was generated with po4a. Translate the source file.
+.\"
+.\"*******************************************************************
+.TH erste 1
+.SH NAME
+erste \- eine erste Testdatei
+
+Ein zufälliger Text.
+
+Mehr zufälliger Text, der keinen Sinn ergibt.
diff --git a/t/cfg/split/_first.man.fr b/t/cfg/split/_first.man.fr
new file mode 100644
index 0000000..ee338ba
--- /dev/null
+++ b/t/cfg/split/_first.man.fr
@@ -0,0 +1,12 @@
+.\"*******************************************************************
+.\"
+.\" This file was generated with po4a. Translate the source file.
+.\"
+.\"*******************************************************************
+.TH premier 1
+.SH NOM
+premier \- un premier fichier de test
+
+Un texte au hasard.
+
+Plus de texte dénué de sens au hasard.
diff --git a/t/cfg/split/_output b/t/cfg/split/_output
new file mode 100644
index 0000000..2525bdf
--- /dev/null
+++ b/t/cfg/split/_output
@@ -0,0 +1,7 @@
+Split mode, creating a temporary POT: (9 entries)
+Updating the translation in language de: 9 translated messages.
+Updating the translation in language fr: 9 translated messages.
+first.man.de is 100% translated (5 strings).
+second.man.de is 100% translated (5 strings).
+first.man.fr is 100% translated (5 strings).
+second.man.fr is 100% translated (5 strings).
diff --git a/t/cfg/split/_second.man.de b/t/cfg/split/_second.man.de
new file mode 100644
index 0000000..6d7e4a8
--- /dev/null
+++ b/t/cfg/split/_second.man.de
@@ -0,0 +1,12 @@
+.\"*******************************************************************
+.\"
+.\" This file was generated with po4a. Translate the source file.
+.\"
+.\"*******************************************************************
+.TH zweite 1
+.SH NAME
+zweite \- eine zweite Testdatei
+
+Dies ist ein Testabsatz. Ein kurzer.
+
+Ein weiterer Eintrag.
diff --git a/t/cfg/split/_second.man.fr b/t/cfg/split/_second.man.fr
new file mode 100644
index 0000000..6489f66
--- /dev/null
+++ b/t/cfg/split/_second.man.fr
@@ -0,0 +1,12 @@
+.\"*******************************************************************
+.\"
+.\" This file was generated with po4a. Translate the source file.
+.\"
+.\"*******************************************************************
+.TH second 1
+.SH NOM
+second \- un second fichier de test
+
+Ceci est un paragraphe de test. Un court.
+
+Une autre entrée.
diff --git a/t/cfg/split/diff_output b/t/cfg/split/diff_output
new file mode 100644
index 0000000..53b5855
--- /dev/null
+++ b/t/cfg/split/diff_output
@@ -0,0 +1,11 @@
+--- cfg/split-nopo/_output-noupdate 2020-04-17 17:20:05.150242241 +0200
++++ - 2020-04-17 17:24:16.593316616 +0200
+@@ -0,0 +1,8 @@
++Split mode, creating a temporary POT.
++ (9 entries)
++The translation of master file 'first.man' in language 'de' is missing (file: first.man.de.po) -- skipping.
++The translation of master file 'second.man' in language 'de' is missing (file: second.man.de.po) -- skipping.
++The translation of master file 'first.man' in language 'fr' is missing (file: first.man.fr.po) -- skipping.
++The translation of master file 'second.man' in language 'fr' is missing (file: second.man.fr.po) -- skipping.
++PO file for language de is missing -- skipping.
++PO file for language fr is missing -- skipping.
diff --git a/t/cfg/split/first.man b/t/cfg/split/first.man
new file mode 100644
index 0000000..7283dc8
--- /dev/null
+++ b/t/cfg/split/first.man
@@ -0,0 +1,7 @@
+.TH first 1
+.SH NAME
+first \- a first test file
+
+Some random text.
+
+More random text that does not make sense.
diff --git a/t/cfg/split/first.man.de.po b/t/cfg/split/first.man.de.po
new file mode 100644
index 0000000..ddf4157
--- /dev/null
+++ b/t/cfg/split/first.man.de.po
@@ -0,0 +1,44 @@
+# German translations for po package
+# Copyright (C) 2020 Free Software Foundation, Inc.
+# This file is distributed under the same license as the po package.
+# Automatically generated, 2020.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: po 4a\n"
+"POT-Creation-Date: 2020-04-17 16:59+0200\n"
+"PO-Revision-Date: 2020-04-17 16:59+0200\n"
+"Last-Translator: Automatically generated\n"
+"Language-Team: none\n"
+"Language: de\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+
+#. type: TH
+#: first.man:1
+#, no-wrap
+msgid "first"
+msgstr "erste"
+
+#. type: SH
+#: first.man:2 second.man:2
+#, no-wrap
+msgid "NAME"
+msgstr "NAME"
+
+#. type: Plain text
+#: first.man:4
+msgid "first - a first test file"
+msgstr "erste - eine erste Testdatei"
+
+#. type: Plain text
+#: first.man:6
+msgid "Some random text."
+msgstr "Ein zufälliger Text."
+
+#. type: Plain text
+#: first.man:7
+msgid "More random text that does not make sense."
+msgstr "Mehr zufälliger Text, der keinen Sinn ergibt."
diff --git a/t/cfg/split/first.man.fr.po b/t/cfg/split/first.man.fr.po
new file mode 100644
index 0000000..14f078b
--- /dev/null
+++ b/t/cfg/split/first.man.fr.po
@@ -0,0 +1,44 @@
+# French translations for po package
+# Copyright (C) 2020 Free Software Foundation, Inc.
+# This file is distributed under the same license as the po package.
+# Automatically generated, 2020.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: po 4a\n"
+"POT-Creation-Date: 2020-04-17 16:59+0200\n"
+"PO-Revision-Date: 2020-04-17 16:59+0200\n"
+"Last-Translator: Automatically generated\n"
+"Language-Team: none\n"
+"Language: fr\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=2; plural=(n > 1);\n"
+
+#. type: TH
+#: first.man:1
+#, no-wrap
+msgid "first"
+msgstr "premier"
+
+#. type: SH
+#: first.man:2 second.man:2
+#, no-wrap
+msgid "NAME"
+msgstr "NOM"
+
+#. type: Plain text
+#: first.man:4
+msgid "first - a first test file"
+msgstr "premier - un premier fichier de test"
+
+#. type: Plain text
+#: first.man:6
+msgid "Some random text."
+msgstr "Un texte au hasard."
+
+#. type: Plain text
+#: first.man:7
+msgid "More random text that does not make sense."
+msgstr "Plus de texte dénué de sens au hasard."
diff --git a/t/cfg/split/first.man.pot b/t/cfg/split/first.man.pot
new file mode 100644
index 0000000..ab025af
--- /dev/null
+++ b/t/cfg/split/first.man.pot
@@ -0,0 +1,44 @@
+# SOME DESCRIPTIVE TITLE
+# Copyright (C) YEAR Free Software Foundation, Inc.
+# This file is distributed under the same license as the PACKAGE package.
+# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
+#
+#, fuzzy
+msgid ""
+msgstr ""
+"Project-Id-Version: PACKAGE VERSION\n"
+"POT-Creation-Date: 2020-04-17 16:59+0200\n"
+"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
+"Language-Team: LANGUAGE <LL@li.org>\n"
+"Language: \n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+
+#. type: TH
+#: first.man:1
+#, no-wrap
+msgid "first"
+msgstr ""
+
+#. type: SH
+#: first.man:2 second.man:2
+#, no-wrap
+msgid "NAME"
+msgstr ""
+
+#. type: Plain text
+#: first.man:4
+msgid "first - a first test file"
+msgstr ""
+
+#. type: Plain text
+#: first.man:6
+msgid "Some random text."
+msgstr ""
+
+#. type: Plain text
+#: first.man:7
+msgid "More random text that does not make sense."
+msgstr ""
diff --git a/t/cfg/split/po4a.conf b/t/cfg/split/po4a.conf
new file mode 100644
index 0000000..c8f3393
--- /dev/null
+++ b/t/cfg/split/po4a.conf
@@ -0,0 +1,6 @@
+[po4a_langs] fr de
+[po4a_paths] $master.pot $lang:$master.$lang.po
+[options] opt:"--msgmerge-opt --silent"
+
+[type:man] first.man $lang:first.man.$lang
+[type:man] second.man $lang:second.man.$lang
diff --git a/t/cfg/split/second.man b/t/cfg/split/second.man
new file mode 100644
index 0000000..966b73a
--- /dev/null
+++ b/t/cfg/split/second.man
@@ -0,0 +1,8 @@
+.TH second 1
+.SH NAME
+second \- a second test file
+
+This is a test paragraph.
+A short one.
+
+Another entry.
diff --git a/t/cfg/split/second.man.de.po b/t/cfg/split/second.man.de.po
new file mode 100644
index 0000000..ed8b0a0
--- /dev/null
+++ b/t/cfg/split/second.man.de.po
@@ -0,0 +1,44 @@
+# German translations for po package
+# Copyright (C) 2020 Free Software Foundation, Inc.
+# This file is distributed under the same license as the po package.
+# Automatically generated, 2020.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: po 4a\n"
+"POT-Creation-Date: 2020-04-17 16:59+0200\n"
+"PO-Revision-Date: 2020-04-17 16:59+0200\n"
+"Last-Translator: Automatically generated\n"
+"Language-Team: none\n"
+"Language: de\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+
+#. type: SH
+#: first.man:2 second.man:2
+#, no-wrap
+msgid "NAME"
+msgstr "NAME"
+
+#. type: TH
+#: second.man:1
+#, no-wrap
+msgid "second"
+msgstr "zweite"
+
+#. type: Plain text
+#: second.man:4
+msgid "second - a second test file"
+msgstr "zweite - eine zweite Testdatei"
+
+#. type: Plain text
+#: second.man:7
+msgid "This is a test paragraph. A short one."
+msgstr "Dies ist ein Testabsatz. Ein kurzer."
+
+#. type: Plain text
+#: second.man:8
+msgid "Another entry."
+msgstr "Ein weiterer Eintrag."
diff --git a/t/cfg/split/second.man.fr.po b/t/cfg/split/second.man.fr.po
new file mode 100644
index 0000000..772d720
--- /dev/null
+++ b/t/cfg/split/second.man.fr.po
@@ -0,0 +1,44 @@
+# French translations for po package
+# Copyright (C) 2020 Free Software Foundation, Inc.
+# This file is distributed under the same license as the po package.
+# Automatically generated, 2020.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: po 4a\n"
+"POT-Creation-Date: 2020-04-17 16:59+0200\n"
+"PO-Revision-Date: 2020-04-17 16:59+0200\n"
+"Last-Translator: Automatically generated\n"
+"Language-Team: none\n"
+"Language: fr\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=2; plural=(n > 1);\n"
+
+#. type: SH
+#: first.man:2 second.man:2
+#, no-wrap
+msgid "NAME"
+msgstr "NOM"
+
+#. type: TH
+#: second.man:1
+#, no-wrap
+msgid "second"
+msgstr "second"
+
+#. type: Plain text
+#: second.man:4
+msgid "second - a second test file"
+msgstr "second - un second fichier de test"
+
+#. type: Plain text
+#: second.man:7
+msgid "This is a test paragraph. A short one."
+msgstr "Ceci est un paragraphe de test. Un court."
+
+#. type: Plain text
+#: second.man:8
+msgid "Another entry."
+msgstr "Une autre entrée."
diff --git a/t/cfg/split/second.man.pot b/t/cfg/split/second.man.pot
new file mode 100644
index 0000000..1e6995b
--- /dev/null
+++ b/t/cfg/split/second.man.pot
@@ -0,0 +1,44 @@
+# SOME DESCRIPTIVE TITLE
+# Copyright (C) YEAR Free Software Foundation, Inc.
+# This file is distributed under the same license as the PACKAGE package.
+# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
+#
+#, fuzzy
+msgid ""
+msgstr ""
+"Project-Id-Version: PACKAGE VERSION\n"
+"POT-Creation-Date: 2020-04-17 16:59+0200\n"
+"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
+"Language-Team: LANGUAGE <LL@li.org>\n"
+"Language: \n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+
+#. type: SH
+#: first.man:2 second.man:2
+#, no-wrap
+msgid "NAME"
+msgstr ""
+
+#. type: TH
+#: second.man:1
+#, no-wrap
+msgid "second"
+msgstr ""
+
+#. type: Plain text
+#: second.man:4
+msgid "second - a second test file"
+msgstr ""
+
+#. type: Plain text
+#: second.man:7
+msgid "This is a test paragraph. A short one."
+msgstr ""
+
+#. type: Plain text
+#: second.man:8
+msgid "Another entry."
+msgstr ""
diff --git a/t/cfg/windows-CRLF/_output b/t/cfg/windows-CRLF/_output
new file mode 100644
index 0000000..1ccbbe0
--- /dev/null
+++ b/t/cfg/windows-CRLF/_output
@@ -0,0 +1,3 @@
+Updating single-uptodate.pot: (4 entries)
+Updating single-uptodate.fr.po: 4 translated messages.
+single-uptodate.man.fr.1 is 100% translated (4 strings).
diff --git a/t/cfg/windows-CRLF/single-uptodate.fr.po b/t/cfg/windows-CRLF/single-uptodate.fr.po
new file mode 100644
index 0000000..050b99a
--- /dev/null
+++ b/t/cfg/windows-CRLF/single-uptodate.fr.po
@@ -0,0 +1,39 @@
+# French translations for po package
+# Copyright (C) 2020 Free Software Foundation, Inc.
+# This file is distributed under the same license as the po package.
+# Automatically generated, 2020.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: po 4a\n"
+"POT-Creation-Date: 2005-04-24 2:54+0200\n"
+"PO-Revision-Date: 2005-04-24 2:54+0200\n"
+"Last-Translator: Automatically generated\n"
+"Language-Team: none\n"
+"Language: fr\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=2; plural=(n > 1);\n"
+
+#. type: TH
+#: t-05-config/test00_man.1:1
+#, no-wrap
+msgid "test1"
+msgstr "test1"
+
+#. type: SH
+#: t-05-config/test00_man.1:2
+#, no-wrap
+msgid "NAME"
+msgstr "NOM"
+
+#. type: Plain text
+#: t-05-config/test00_man.1:4
+msgid "test - just a test"
+msgstr "test - juste un test"
+
+#. type: Plain text
+#: t-05-config/test00_man.1:5
+msgid "Hello"
+msgstr "Bonjour"
diff --git a/t/cfg/windows-CRLF/single-uptodate.man.1 b/t/cfg/windows-CRLF/single-uptodate.man.1
new file mode 100644
index 0000000..e446c61
--- /dev/null
+++ b/t/cfg/windows-CRLF/single-uptodate.man.1
@@ -0,0 +1,5 @@
+.TH test1 1
+.SH NAME
+test \- just a test
+
+Hello
diff --git a/t/cfg/windows-CRLF/single-uptodate.man.fr.1 b/t/cfg/windows-CRLF/single-uptodate.man.fr.1
new file mode 100644
index 0000000..8f06439
--- /dev/null
+++ b/t/cfg/windows-CRLF/single-uptodate.man.fr.1
@@ -0,0 +1,10 @@
+.\"*******************************************************************
+.\"
+.\" This file was generated with po4a. Translate the source file.
+.\"
+.\"*******************************************************************
+.TH test1 1
+.SH NOM
+test \- juste un test
+
+Bonjour
diff --git a/t/cfg/windows-CRLF/single-uptodate.pot b/t/cfg/windows-CRLF/single-uptodate.pot
new file mode 100644
index 0000000..fe72624
--- /dev/null
+++ b/t/cfg/windows-CRLF/single-uptodate.pot
@@ -0,0 +1,39 @@
+# SOME DESCRIPTIVE TITLE
+# Copyright (C) YEAR Free Software Foundation, Inc.
+# This file is distributed under the same license as the PACKAGE package.
+# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
+#
+#, fuzzy
+msgid ""
+msgstr ""
+"Project-Id-Version: PACKAGE VERSION\n"
+"POT-Creation-Date: 2005-04-24 2:54+0200\n"
+"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
+"Language-Team: LANGUAGE <LL@li.org>\n"
+"Language: \n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+
+#. type: TH
+#: t-05-config/test00_man.1:1
+#, no-wrap
+msgid "test1"
+msgstr ""
+
+#. type: SH
+#: t-05-config/test00_man.1:2
+#, no-wrap
+msgid "NAME"
+msgstr ""
+
+#. type: Plain text
+#: t-05-config/test00_man.1:4
+msgid "test - just a test"
+msgstr ""
+
+#. type: Plain text
+#: t-05-config/test00_man.1:5
+msgid "Hello"
+msgstr ""
diff --git a/t/cfg/windows-CRLF/windows-CRLF.conf b/t/cfg/windows-CRLF/windows-CRLF.conf
new file mode 100644
index 0000000..c68b0ab
--- /dev/null
+++ b/t/cfg/windows-CRLF/windows-CRLF.conf
@@ -0,0 +1,5 @@
+#comment
+[po4a_paths] single-uptodate.pot fr:single-uptodate.fr.po
+[options] opt:"--msgmerge-opt --silent"
+
+[type:man] single-uptodate.man.1 fr:single-uptodate.man.fr.1
diff --git a/t/charset.t b/t/charset.t
new file mode 100644
index 0000000..e35a853
--- /dev/null
+++ b/t/charset.t
@@ -0,0 +1,59 @@
+#! /usr/bin/perl
+# Character sets tester.
+
+#########################
+
+use strict;
+use warnings;
+
+use lib q(t);
+use Testhelper;
+
+my @tests;
+
+push @tests,
+ {
+ 'doc' => 'master encoding: ascii',
+ 'po4a.conf' => 'charset/input-ascii/po4a.conf',
+ 'closed_path' => 'charset/*/',
+ 'options' => '--keep 0',
+ 'expected_files' => 'ascii.up.po ascii.pot ascii.up.pod ',
+ },
+ {
+ 'doc' => 'master encoding: iso8859',
+ 'po4a.conf' => 'charset/input-iso8859/po4a.conf',
+ 'closed_path' => 'charset/*/',
+ 'options' => '--keep 0',
+ 'expected_files' => 'iso8859.up.po iso8859.pot iso8859.up.pod ',
+ },
+ {
+ 'doc' => 'master encoding: UTF-8 ',
+ 'po4a.conf' => 'charset/input-utf8/po4a.conf',
+ 'closed_path' => 'charset/*/',
+ 'options' => '--keep 0',
+ 'expected_files' => 'utf8.up.po utf8.pot utf8.up.pod ',
+ },
+ {
+ 'format' => 'asciidoc',
+ 'input' => "charset/asciidoc/CharsetUtf.adoc",
+ },
+ {
+ 'doc' => "UTF with BOM marker (code point of width 3 at the beginning of the doc to indicate that it's UTF-8)",
+ 'format' => 'asciidoc',
+ 'input' => "charset/asciidoc/CharsetUtfBOM.adoc",
+ 'norm' => "charset/asciidoc/CharsetUtf.norm",
+ 'trans' => "charset/asciidoc/CharsetUtf.trans",
+ },
+ {
+ 'format' => 'asciidoc',
+ 'options' => '-M iso-8859-1',
+ 'input' => "charset/asciidoc/CharsetLatin1.adoc",
+ },
+ {
+ 'format' => 'yaml',
+ 'options' => "-M UTF-8",
+ 'input' => "charset/yaml/utf8.yaml",
+ };
+
+run_all_tests(@tests);
+0;
diff --git a/t/charset/asciidoc/CharsetLatin1.adoc b/t/charset/asciidoc/CharsetLatin1.adoc
new file mode 100644
index 0000000..dec9258
--- /dev/null
+++ b/t/charset/asciidoc/CharsetLatin1.adoc
@@ -0,0 +1,17 @@
+Title
+=======
+
+Title
+-------
+
+Title level
+~~~~~~~~~~~~~
+
+Title level
+^^^^^^^^^^^^^
+
+Title level
++++++++++++++
+
+Latin1 is sometimes easier than UTF-8 in Perl :(
+But po4a produces UTF-8 POT files anyway. \ No newline at end of file
diff --git a/t/charset/asciidoc/CharsetLatin1.norm b/t/charset/asciidoc/CharsetLatin1.norm
new file mode 100644
index 0000000..3ce7205
--- /dev/null
+++ b/t/charset/asciidoc/CharsetLatin1.norm
@@ -0,0 +1,16 @@
+Title é
+=======
+
+Title é
+-------
+
+Title level é
+~~~~~~~~~~~~~
+
+Title level é
+^^^^^^^^^^^^^
+
+Title level é
++++++++++++++
+
+Latin1 is sometimes easier than UTF-8 in Perl :( But po4a produces UTF-8 POT files anyway.
diff --git a/t/charset/asciidoc/CharsetLatin1.po b/t/charset/asciidoc/CharsetLatin1.po
new file mode 100644
index 0000000..6bc1b56
--- /dev/null
+++ b/t/charset/asciidoc/CharsetLatin1.po
@@ -0,0 +1,38 @@
+# SOME DESCRIPTIVE TITLE
+# Copyright (C) YEAR Free Software Foundation, Inc.
+# This file is distributed under the same license as the PACKAGE package.
+# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
+#
+#, fuzzy
+msgid ""
+msgstr ""
+"Project-Id-Version: PACKAGE VERSION\n"
+"POT-Creation-Date: 2020-04-28 11:51+0200\n"
+"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
+"Language-Team: LANGUAGE <LL@LI.ORG>\n"
+"Language: \n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+
+#. type: Title -
+#: CharsetLatin1.adoc:2 CharsetLatin1.adoc:5
+#, no-wrap
+msgid "Title é"
+msgstr "TITLE É"
+
+#. type: Title +
+#: CharsetLatin1.adoc:8 CharsetLatin1.adoc:11 CharsetLatin1.adoc:14
+#, no-wrap
+msgid "Title level é"
+msgstr "TITLE LEVEL É"
+
+#. type: Plain text
+#: CharsetLatin1.adoc:17
+msgid ""
+"Latin1 is sometimes easier than UTF-8 in Perl :( But po4a produces UTF-8 POT "
+"files anyway."
+msgstr ""
+"LATIN1 IS SOMETIMES EASIER THAN UTF-8 IN PERL :( BUT PO4A PRODUCES UTF-8 POT "
+"FILES ANYWAY."
diff --git a/t/charset/asciidoc/CharsetLatin1.pot b/t/charset/asciidoc/CharsetLatin1.pot
new file mode 100644
index 0000000..996fda6
--- /dev/null
+++ b/t/charset/asciidoc/CharsetLatin1.pot
@@ -0,0 +1,36 @@
+# SOME DESCRIPTIVE TITLE
+# Copyright (C) YEAR Free Software Foundation, Inc.
+# This file is distributed under the same license as the PACKAGE package.
+# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
+#
+#, fuzzy
+msgid ""
+msgstr ""
+"Project-Id-Version: PACKAGE VERSION\n"
+"POT-Creation-Date: 2020-04-28 11:51+0200\n"
+"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
+"Language-Team: LANGUAGE <LL@li.org>\n"
+"Language: \n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+
+#. type: Title -
+#: CharsetLatin1.adoc:2 CharsetLatin1.adoc:5
+#, no-wrap
+msgid "Title é"
+msgstr ""
+
+#. type: Title +
+#: CharsetLatin1.adoc:8 CharsetLatin1.adoc:11 CharsetLatin1.adoc:14
+#, no-wrap
+msgid "Title level é"
+msgstr ""
+
+#. type: Plain text
+#: CharsetLatin1.adoc:17
+msgid ""
+"Latin1 is sometimes easier than UTF-8 in Perl :( But po4a produces UTF-8 POT "
+"files anyway."
+msgstr ""
diff --git a/t/charset/asciidoc/CharsetLatin1.trans b/t/charset/asciidoc/CharsetLatin1.trans
new file mode 100644
index 0000000..839fe46
--- /dev/null
+++ b/t/charset/asciidoc/CharsetLatin1.trans
@@ -0,0 +1,16 @@
+TITLE É
+=======
+
+TITLE É
+-------
+
+TITLE LEVEL É
+~~~~~~~~~~~~~
+
+TITLE LEVEL É
+^^^^^^^^^^^^^
+
+TITLE LEVEL É
++++++++++++++
+
+LATIN1 IS SOMETIMES EASIER THAN UTF-8 IN PERL :( BUT PO4A PRODUCES UTF-8 POT FILES ANYWAY.
diff --git a/t/charset/asciidoc/CharsetUtf.adoc b/t/charset/asciidoc/CharsetUtf.adoc
new file mode 100644
index 0000000..06e58b8
--- /dev/null
+++ b/t/charset/asciidoc/CharsetUtf.adoc
@@ -0,0 +1,16 @@
+Title …
+=======
+
+Title …
+-------
+
+Title level …
+~~~~~~~~~~~~~
+
+Title level …
+^^^^^^^^^^^^^
+
+Title level …
++++++++++++++
+
+UTF-8 is sometimes difficult in Perl ☹️
diff --git a/t/charset/asciidoc/CharsetUtf.norm b/t/charset/asciidoc/CharsetUtf.norm
new file mode 100644
index 0000000..06e58b8
--- /dev/null
+++ b/t/charset/asciidoc/CharsetUtf.norm
@@ -0,0 +1,16 @@
+Title …
+=======
+
+Title …
+-------
+
+Title level …
+~~~~~~~~~~~~~
+
+Title level …
+^^^^^^^^^^^^^
+
+Title level …
++++++++++++++
+
+UTF-8 is sometimes difficult in Perl ☹️
diff --git a/t/charset/asciidoc/CharsetUtf.po b/t/charset/asciidoc/CharsetUtf.po
new file mode 100644
index 0000000..044273a
--- /dev/null
+++ b/t/charset/asciidoc/CharsetUtf.po
@@ -0,0 +1,34 @@
+# SOME DESCRIPTIVE TITLE
+# Copyright (C) YEAR Free Software Foundation, Inc.
+# This file is distributed under the same license as the PACKAGE package.
+# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
+#
+#, fuzzy
+msgid ""
+msgstr ""
+"Project-Id-Version: PACKAGE VERSION\n"
+"POT-Creation-Date: 2020-04-28 11:43+0200\n"
+"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
+"Language-Team: LANGUAGE <LL@li.org>\n"
+"Language: \n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+
+#. type: Title -
+#: CharsetUtf.adoc:2 CharsetUtf.adoc:5
+#, no-wrap
+msgid "Title …"
+msgstr "TITLE …"
+
+#. type: Title +
+#: CharsetUtf.adoc:8 CharsetUtf.adoc:11 CharsetUtf.adoc:14
+#, no-wrap
+msgid "Title level …"
+msgstr "TITLE LEVEL …"
+
+#. type: Plain text
+#: CharsetUtf.adoc:16
+msgid "UTF-8 is sometimes difficult in Perl ☹️"
+msgstr "UTF-8 IS SOMETIMES DIFFICULT IN PERL ☹️"
diff --git a/t/charset/asciidoc/CharsetUtf.pot b/t/charset/asciidoc/CharsetUtf.pot
new file mode 100644
index 0000000..9d7605d
--- /dev/null
+++ b/t/charset/asciidoc/CharsetUtf.pot
@@ -0,0 +1,34 @@
+# SOME DESCRIPTIVE TITLE
+# Copyright (C) YEAR Free Software Foundation, Inc.
+# This file is distributed under the same license as the PACKAGE package.
+# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
+#
+#, fuzzy
+msgid ""
+msgstr ""
+"Project-Id-Version: PACKAGE VERSION\n"
+"POT-Creation-Date: 2020-04-28 11:43+0200\n"
+"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
+"Language-Team: LANGUAGE <LL@li.org>\n"
+"Language: \n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+
+#. type: Title -
+#: CharsetUtf.adoc:2 CharsetUtf.adoc:5
+#, no-wrap
+msgid "Title …"
+msgstr ""
+
+#. type: Title +
+#: CharsetUtf.adoc:8 CharsetUtf.adoc:11 CharsetUtf.adoc:14
+#, no-wrap
+msgid "Title level …"
+msgstr ""
+
+#. type: Plain text
+#: CharsetUtf.adoc:16
+msgid "UTF-8 is sometimes difficult in Perl ☹️"
+msgstr ""
diff --git a/t/charset/asciidoc/CharsetUtf.trans b/t/charset/asciidoc/CharsetUtf.trans
new file mode 100644
index 0000000..28fdced
--- /dev/null
+++ b/t/charset/asciidoc/CharsetUtf.trans
@@ -0,0 +1,16 @@
+TITLE …
+=======
+
+TITLE …
+-------
+
+TITLE LEVEL …
+~~~~~~~~~~~~~
+
+TITLE LEVEL …
+^^^^^^^^^^^^^
+
+TITLE LEVEL …
++++++++++++++
+
+UTF-8 IS SOMETIMES DIFFICULT IN PERL ☹️
diff --git a/t/charset/asciidoc/CharsetUtfBOM.adoc b/t/charset/asciidoc/CharsetUtfBOM.adoc
new file mode 100644
index 0000000..f9138b8
--- /dev/null
+++ b/t/charset/asciidoc/CharsetUtfBOM.adoc
@@ -0,0 +1,16 @@
+Title …
+=======
+
+Title …
+-------
+
+Title level …
+~~~~~~~~~~~~~
+
+Title level …
+^^^^^^^^^^^^^
+
+Title level …
++++++++++++++
+
+UTF-8 is sometimes difficult in Perl ☹️
diff --git a/t/charset/asciidoc/CharsetUtfBOM.po b/t/charset/asciidoc/CharsetUtfBOM.po
new file mode 100644
index 0000000..7cdcc17
--- /dev/null
+++ b/t/charset/asciidoc/CharsetUtfBOM.po
@@ -0,0 +1,34 @@
+# SOME DESCRIPTIVE TITLE
+# Copyright (C) YEAR Free Software Foundation, Inc.
+# This file is distributed under the same license as the PACKAGE package.
+# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
+#
+#, fuzzy
+msgid ""
+msgstr ""
+"Project-Id-Version: PACKAGE VERSION\n"
+"POT-Creation-Date: 2020-04-28 11:43+0200\n"
+"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
+"Language-Team: LANGUAGE <LL@li.org>\n"
+"Language: \n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+
+#. type: Title -
+#: CharsetUtfBOM.adoc:2 CharsetUtfBOM.adoc:5
+#, no-wrap
+msgid "Title …"
+msgstr "TITLE …"
+
+#. type: Title +
+#: CharsetUtfBOM.adoc:8 CharsetUtfBOM.adoc:11 CharsetUtfBOM.adoc:14
+#, no-wrap
+msgid "Title level …"
+msgstr "TITLE LEVEL …"
+
+#. type: Plain text
+#: CharsetUtfBOM.adoc:16
+msgid "UTF-8 is sometimes difficult in Perl ☹️"
+msgstr "UTF-8 IS SOMETIMES DIFFICULT IN PERL ☹️"
diff --git a/t/charset/asciidoc/CharsetUtfBOM.pot b/t/charset/asciidoc/CharsetUtfBOM.pot
new file mode 100644
index 0000000..0a83f64
--- /dev/null
+++ b/t/charset/asciidoc/CharsetUtfBOM.pot
@@ -0,0 +1,34 @@
+# SOME DESCRIPTIVE TITLE
+# Copyright (C) YEAR Free Software Foundation, Inc.
+# This file is distributed under the same license as the PACKAGE package.
+# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
+#
+#, fuzzy
+msgid ""
+msgstr ""
+"Project-Id-Version: PACKAGE VERSION\n"
+"POT-Creation-Date: 2020-04-28 11:43+0200\n"
+"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
+"Language-Team: LANGUAGE <LL@li.org>\n"
+"Language: \n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+
+#. type: Title -
+#: CharsetUtfBOM.adoc:2 CharsetUtfBOM.adoc:5
+#, no-wrap
+msgid "Title …"
+msgstr ""
+
+#. type: Title +
+#: CharsetUtfBOM.adoc:8 CharsetUtfBOM.adoc:11 CharsetUtfBOM.adoc:14
+#, no-wrap
+msgid "Title level …"
+msgstr ""
+
+#. type: Plain text
+#: CharsetUtfBOM.adoc:16
+msgid "UTF-8 is sometimes difficult in Perl ☹️"
+msgstr ""
diff --git a/t/charset/input-ascii/_ascii.up.pod b/t/charset/input-ascii/_ascii.up.pod
new file mode 100644
index 0000000..20f0135
--- /dev/null
+++ b/t/charset/input-ascii/_ascii.up.pod
@@ -0,0 +1,18 @@
+
+ *****************************************************
+ * GENERATED FILE, DO NOT EDIT *
+ * THIS IS NO SOURCE FILE, BUT RESULT OF COMPILATION *
+ *****************************************************
+
+This file was generated by po4a(7). Do not store it (in VCS, for example),
+but store the PO file used as source file by po4a-translate.
+
+In fact, consider this as a binary, and the PO file as a regular .c file:
+If the PO get lost, keeping this translation up-to-date will be harder.
+
+=encoding UTF-8
+
+=head1 TEST TITLE
+
+BLABLABLA LELELELE
+
diff --git a/t/charset/input-ascii/_output b/t/charset/input-ascii/_output
new file mode 100644
index 0000000..c1b820f
--- /dev/null
+++ b/t/charset/input-ascii/_output
@@ -0,0 +1,3 @@
+Updating ascii.pot: (2 entries)
+Updating ascii.up.po: 2 translated messages.
+ascii.up.pod is 100% translated (2 strings).
diff --git a/t/charset/input-ascii/ascii.pod b/t/charset/input-ascii/ascii.pod
new file mode 100644
index 0000000..e0c5ba6
--- /dev/null
+++ b/t/charset/input-ascii/ascii.pod
@@ -0,0 +1,4 @@
+=head1 Test title
+
+blablabla
+lelelele
diff --git a/t/charset/input-ascii/ascii.pot b/t/charset/input-ascii/ascii.pot
new file mode 100644
index 0000000..c47d6c9
--- /dev/null
+++ b/t/charset/input-ascii/ascii.pot
@@ -0,0 +1,27 @@
+# SOME DESCRIPTIVE TITLE
+# Copyright (C) YEAR Free Software Foundation, Inc.
+# This file is distributed under the same license as the PACKAGE package.
+# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
+#
+#, fuzzy
+msgid ""
+msgstr ""
+"Project-Id-Version: PACKAGE VERSION\n"
+"POT-Creation-Date: 2020-04-08 21:15+0200\n"
+"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
+"Language-Team: LANGUAGE <LL@li.org>\n"
+"Language: \n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+
+#. type: =head1
+#: charset/input/input-ascii.pod:1
+msgid "Test title"
+msgstr ""
+
+#. type: textblock
+#: charset/input/input-ascii.pod:3
+msgid "blablabla lelelele"
+msgstr ""
diff --git a/t/charset/input-ascii/ascii.up.po b/t/charset/input-ascii/ascii.up.po
new file mode 100644
index 0000000..b6a663c
--- /dev/null
+++ b/t/charset/input-ascii/ascii.up.po
@@ -0,0 +1,26 @@
+# Language up translations for po package
+# Copyright (C) 2020 Free Software Foundation, Inc.
+# This file is distributed under the same license as the po package.
+# Automatically generated, 2020.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: po 4a\n"
+"POT-Creation-Date: 2020-04-08 20:41+0200\n"
+"PO-Revision-Date: 2020-04-08 20:41+0200\n"
+"Last-Translator: Automatically generated\n"
+"Language-Team: none\n"
+"Language: up\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+
+#. type: =head1
+#: charset/input/input-ascii.pod:1
+msgid "Test title"
+msgstr "TEST TITLE"
+
+#. type: textblock
+#: charset/input/input-ascii.pod:3
+msgid "blablabla lelelele"
+msgstr "BLABLABLA LELELELE"
diff --git a/t/charset/input-ascii/po4a.conf b/t/charset/input-ascii/po4a.conf
new file mode 100644
index 0000000..2fbd321
--- /dev/null
+++ b/t/charset/input-ascii/po4a.conf
@@ -0,0 +1,4 @@
+[po4a_paths] ascii.pot up:ascii.up.po
+[options] opt:"--msgmerge-opt --silent"
+
+[type:pod] ascii.pod up:ascii.up.pod
diff --git a/t/charset/input-iso8859/_iso8859.up.pod b/t/charset/input-iso8859/_iso8859.up.pod
new file mode 100644
index 0000000..091122b
--- /dev/null
+++ b/t/charset/input-iso8859/_iso8859.up.pod
@@ -0,0 +1,18 @@
+
+ *****************************************************
+ * GENERATED FILE, DO NOT EDIT *
+ * THIS IS NO SOURCE FILE, BUT RESULT OF COMPILATION *
+ *****************************************************
+
+This file was generated by po4a(7). Do not store it (in VCS, for example),
+but store the PO file used as source file by po4a-translate.
+
+In fact, consider this as a binary, and the PO file as a regular .c file:
+If the PO get lost, keeping this translation up-to-date will be harder.
+
+=encoding UTF-8
+
+=head1 TÍTULO DE PRUEBA
+
+BLÈBLEBLE LÁLALALA
+
diff --git a/t/charset/input-iso8859/_output b/t/charset/input-iso8859/_output
new file mode 100644
index 0000000..6056d6c
--- /dev/null
+++ b/t/charset/input-iso8859/_output
@@ -0,0 +1,3 @@
+Updating iso8859.pot: (2 entries)
+Updating iso8859.up.po: 2 translated messages.
+iso8859.up.pod is 100% translated (2 strings).
diff --git a/t/charset/input-iso8859/iso8859.pod b/t/charset/input-iso8859/iso8859.pod
new file mode 100644
index 0000000..dfbe5e1
--- /dev/null
+++ b/t/charset/input-iso8859/iso8859.pod
@@ -0,0 +1,4 @@
+=head1 Ttulo de prueba
+
+blbleble
+llalala
diff --git a/t/charset/input-iso8859/iso8859.pot b/t/charset/input-iso8859/iso8859.pot
new file mode 100644
index 0000000..b48cae2
--- /dev/null
+++ b/t/charset/input-iso8859/iso8859.pot
@@ -0,0 +1,27 @@
+# SOME DESCRIPTIVE TITLE
+# Copyright (C) YEAR Free Software Foundation, Inc.
+# This file is distributed under the same license as the PACKAGE package.
+# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
+#
+#, fuzzy
+msgid ""
+msgstr ""
+"Project-Id-Version: PACKAGE VERSION\n"
+"POT-Creation-Date: 2020-04-11 17:44+0200\n"
+"PO-Revision-Date: 2020-04-09 17:33+0200\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
+"Language-Team: LANGUAGE <LL@li.org>\n"
+"Language: \n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+
+#. type: =head1
+#: charset/input/iso8859.pod:1
+msgid "Título de prueba"
+msgstr ""
+
+#. type: textblock
+#: charset/input/iso8859.pod:3
+msgid "blèbleble lálalala"
+msgstr ""
diff --git a/t/charset/input-iso8859/iso8859.up.po b/t/charset/input-iso8859/iso8859.up.po
new file mode 100644
index 0000000..8a0a58b
--- /dev/null
+++ b/t/charset/input-iso8859/iso8859.up.po
@@ -0,0 +1,26 @@
+# Language up translations for po package
+# Copyright (C) 2020 Free Software Foundation, Inc.
+# This file is distributed under the same license as the po package.
+# Automatically generated, 2020.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: po 4a\n"
+"POT-Creation-Date: 2020-04-11 17:44+0200\n"
+"PO-Revision-Date: 2020-04-09 17:33+0200\n"
+"Last-Translator: Automatically generated\n"
+"Language-Team: none\n"
+"Language: up\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+
+#. type: =head1
+#: charset/input/iso8859.pod:1
+msgid "Título de prueba"
+msgstr "TÍTULO DE PRUEBA"
+
+#. type: textblock
+#: charset/input/iso8859.pod:3
+msgid "blèbleble lálalala"
+msgstr "BLÈBLEBLE LÁLALALA"
diff --git a/t/charset/input-iso8859/po4a.conf b/t/charset/input-iso8859/po4a.conf
new file mode 100644
index 0000000..fe0124d
--- /dev/null
+++ b/t/charset/input-iso8859/po4a.conf
@@ -0,0 +1,4 @@
+[po4a_paths] iso8859.pot up:iso8859.up.po
+[options] opt:"--msgmerge-opt --silent --master-charset ISO-8859-1"
+
+[type:pod] iso8859.pod up:iso8859.up.pod
diff --git a/t/charset/input-utf8/_output b/t/charset/input-utf8/_output
new file mode 100644
index 0000000..1c6e038
--- /dev/null
+++ b/t/charset/input-utf8/_output
@@ -0,0 +1,3 @@
+Updating utf8.pot: (2 entries)
+Updating utf8.up.po: 2 translated messages.
+utf8.up.pod is 100% translated (2 strings).
diff --git a/t/charset/input-utf8/_utf8.up.pod b/t/charset/input-utf8/_utf8.up.pod
new file mode 100644
index 0000000..091122b
--- /dev/null
+++ b/t/charset/input-utf8/_utf8.up.pod
@@ -0,0 +1,18 @@
+
+ *****************************************************
+ * GENERATED FILE, DO NOT EDIT *
+ * THIS IS NO SOURCE FILE, BUT RESULT OF COMPILATION *
+ *****************************************************
+
+This file was generated by po4a(7). Do not store it (in VCS, for example),
+but store the PO file used as source file by po4a-translate.
+
+In fact, consider this as a binary, and the PO file as a regular .c file:
+If the PO get lost, keeping this translation up-to-date will be harder.
+
+=encoding UTF-8
+
+=head1 TÍTULO DE PRUEBA
+
+BLÈBLEBLE LÁLALALA
+
diff --git a/t/charset/input-utf8/po4a.conf b/t/charset/input-utf8/po4a.conf
new file mode 100644
index 0000000..2968bb5
--- /dev/null
+++ b/t/charset/input-utf8/po4a.conf
@@ -0,0 +1,4 @@
+[po4a_paths] utf8.pot up:utf8.up.po
+[options] opt:"--msgmerge-opt --silent --master-charset UTF-8"
+
+[type:pod] utf8.pod up:utf8.up.pod
diff --git a/t/charset/input-utf8/utf8.pod b/t/charset/input-utf8/utf8.pod
new file mode 100644
index 0000000..4d65bf6
--- /dev/null
+++ b/t/charset/input-utf8/utf8.pod
@@ -0,0 +1,4 @@
+=head1 Título de prueba
+
+blèbleble
+lálalala
diff --git a/t/charset/input-utf8/utf8.pot b/t/charset/input-utf8/utf8.pot
new file mode 100644
index 0000000..b69a8bf
--- /dev/null
+++ b/t/charset/input-utf8/utf8.pot
@@ -0,0 +1,27 @@
+# SOME DESCRIPTIVE TITLE
+# Copyright (C) YEAR Free Software Foundation, Inc.
+# This file is distributed under the same license as the PACKAGE package.
+# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
+#
+#, fuzzy
+msgid ""
+msgstr ""
+"Project-Id-Version: PACKAGE VERSION\n"
+"POT-Creation-Date: 2020-04-12 00:26+0200\n"
+"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
+"Language-Team: LANGUAGE <LL@li.org>\n"
+"Language: \n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+
+#. type: =head1
+#: charset/input-utf8/utf8.pod:1
+msgid "Título de prueba"
+msgstr ""
+
+#. type: textblock
+#: charset/input-utf8/utf8.pod:3
+msgid "blèbleble lálalala"
+msgstr ""
diff --git a/t/charset/input-utf8/utf8.up.po b/t/charset/input-utf8/utf8.up.po
new file mode 100644
index 0000000..7041296
--- /dev/null
+++ b/t/charset/input-utf8/utf8.up.po
@@ -0,0 +1,26 @@
+# Language up translations for po package
+# Copyright (C) 2020 Free Software Foundation, Inc.
+# This file is distributed under the same license as the po package.
+# Automatically generated, 2020.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: po 4a\n"
+"POT-Creation-Date: 2020-04-12 00:24+0200\n"
+"PO-Revision-Date: 2020-04-12 00:24+0200\n"
+"Last-Translator: Automatically generated\n"
+"Language-Team: none\n"
+"Language: up\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+
+#. type: =head1
+#: charset/input-utf8/utf8.pod:1
+msgid "Título de prueba"
+msgstr "TÍTULO DE PRUEBA"
+
+#. type: textblock
+#: charset/input-utf8/utf8.pod:3
+msgid "blèbleble lálalala"
+msgstr "BLÈBLEBLE LÁLALALA"
diff --git a/t/charset/yaml/utf8.norm b/t/charset/yaml/utf8.norm
new file mode 100644
index 0000000..444e273
--- /dev/null
+++ b/t/charset/yaml/utf8.norm
@@ -0,0 +1,3 @@
+---
+meta:
+ lang: 日本語
diff --git a/t/charset/yaml/utf8.po b/t/charset/yaml/utf8.po
new file mode 100644
index 0000000..36cd1ee
--- /dev/null
+++ b/t/charset/yaml/utf8.po
@@ -0,0 +1,23 @@
+# SOME DESCRIPTIVE TITLE
+# Copyright (C) YEAR Free Software Foundation, Inc.
+# This file is distributed under the same license as the PACKAGE package.
+# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
+#
+#, fuzzy
+msgid ""
+msgstr ""
+"Project-Id-Version: PACKAGE VERSION\n"
+"POT-Creation-Date: 2021-02-08 08:18+0100\n"
+"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
+"Language-Team: LANGUAGE <LL@li.org>\n"
+"Language: \n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+
+#. type: Hash Value: meta lang
+#: utf8.yaml:1
+#, no-wrap
+msgid "日本語"
+msgstr "UPPER CASE"
diff --git a/t/charset/yaml/utf8.pot b/t/charset/yaml/utf8.pot
new file mode 100644
index 0000000..7dcea62
--- /dev/null
+++ b/t/charset/yaml/utf8.pot
@@ -0,0 +1,23 @@
+# SOME DESCRIPTIVE TITLE
+# Copyright (C) YEAR Free Software Foundation, Inc.
+# This file is distributed under the same license as the PACKAGE package.
+# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
+#
+#, fuzzy
+msgid ""
+msgstr ""
+"Project-Id-Version: PACKAGE VERSION\n"
+"POT-Creation-Date: 2021-02-08 08:18+0100\n"
+"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
+"Language-Team: LANGUAGE <LL@li.org>\n"
+"Language: \n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+
+#. type: Hash Value: meta lang
+#: utf8.yaml:1
+#, no-wrap
+msgid "日本語"
+msgstr ""
diff --git a/t/charset/yaml/utf8.trans b/t/charset/yaml/utf8.trans
new file mode 100644
index 0000000..d8afa3a
--- /dev/null
+++ b/t/charset/yaml/utf8.trans
@@ -0,0 +1,3 @@
+---
+meta:
+ lang: 'UPPER CASE'
diff --git a/t/charset/yaml/utf8.yaml b/t/charset/yaml/utf8.yaml
new file mode 100644
index 0000000..444e273
--- /dev/null
+++ b/t/charset/yaml/utf8.yaml
@@ -0,0 +1,3 @@
+---
+meta:
+ lang: 日本語
diff --git a/t/core-porefs.t b/t/core-porefs.t
new file mode 100644
index 0000000..32d375a
--- /dev/null
+++ b/t/core-porefs.t
@@ -0,0 +1,61 @@
+#! /usr/bin/perl
+# Addenda modifiers tester.
+
+#########################
+
+use strict;
+use warnings;
+
+use lib q(t);
+use Testhelper;
+
+my @tests;
+
+push @tests, {
+ 'doc' => 'Many PO references',
+ 'po4a.conf' => 'core/porefs/po4a.conf',
+ 'options' => '--no-translations',
+ 'modes' => 'dstdir',
+ 'expected_files' => 'list.pot up.po',
+ 'tests' => [
+ 'PODIFF core/porefs/_base.pot tmp/core/porefs/list.pot', # force tidyall to wrap here
+ 'PODIFF core/porefs/_base.po tmp/core/porefs/up.po',
+ ]
+ },
+ {
+ 'doc' => 'Many PO references --porefs=none',
+ 'po4a.conf' => 'core/porefs/po4a.conf',
+ 'options' => '--no-translations --porefs=none',
+ 'modes' => 'dstdir',
+ 'expected_files' => 'list.pot up.po',
+ 'tests' => [
+ 'PODIFF core/porefs/_none.pot tmp/core/porefs/list.pot', #
+ 'PODIFF core/porefs/_none.po tmp/core/porefs/up.po',
+ ]
+ },
+ {
+ 'doc' => 'Many PO references --porefs=file',
+ 'po4a.conf' => 'core/porefs/po4a.conf',
+ 'options' => '--no-translations --porefs=file',
+ 'modes' => 'dstdir',
+ 'expected_files' => 'list.pot up.po',
+ 'tests' => [
+ 'PODIFF core/porefs/_file.pot tmp/core/porefs/list.pot', #
+ 'PODIFF core/porefs/_file.po tmp/core/porefs/up.po',
+ ]
+ },
+ {
+ 'doc' => 'Many PO references --porefs=counter',
+ 'po4a.conf' => 'core/porefs/po4a.conf',
+ 'options' => '--no-translations --porefs=counter',
+ 'modes' => 'dstdir',
+ 'expected_files' => 'list.pot up.po',
+ 'tests' => [
+ 'PODIFF core/porefs/_counter.pot tmp/core/porefs/list.pot',
+ 'PODIFF core/porefs/_counter.po tmp/core/porefs/up.po',
+ ]
+
+ };
+
+run_all_tests(@tests);
+0;
diff --git a/t/core/porefs/_base.po b/t/core/porefs/_base.po
new file mode 100644
index 0000000..658d57e
--- /dev/null
+++ b/t/core/porefs/_base.po
@@ -0,0 +1,36 @@
+# Language up translations for po package
+# Copyright (C) 2020 Free Software Foundation, Inc.
+# This file is distributed under the same license as the po package.
+# Automatically generated, 2020.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: po 4a\n"
+"POT-Creation-Date: 2020-04-24 01:58+0200\n"
+"PO-Revision-Date: 2020-04-24 01:58+0200\n"
+"Last-Translator: Automatically generated\n"
+"Language-Team: none\n"
+"Language: up\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+
+#. type: Title =
+#: long-filename-of-input-1:2 long-filename-of-input-2:2
+#: long-filename-of-input-3:2 long-filename-of-input-4:2
+#: long-filename-of-input-5:2 long-filename-of-input-6:2
+#: long-filename-of-input-7:2 long-filename-of-input-8:2
+#: long-filename-of-input-9:2
+#, no-wrap
+msgid "original title 0"
+msgstr ""
+
+#. type: Title -
+#: long-filename-of-input-1:5 long-filename-of-input-2:5
+#: long-filename-of-input-3:5 long-filename-of-input-4:5
+#: long-filename-of-input-5:5 long-filename-of-input-6:5
+#: long-filename-of-input-7:5 long-filename-of-input-8:5
+#: long-filename-of-input-9:5
+#, no-wrap
+msgid "original title 1"
+msgstr ""
diff --git a/t/core/porefs/_base.pot b/t/core/porefs/_base.pot
new file mode 100644
index 0000000..570efb6
--- /dev/null
+++ b/t/core/porefs/_base.pot
@@ -0,0 +1,37 @@
+# SOME DESCRIPTIVE TITLE
+# Copyright (C) YEAR Free Software Foundation, Inc.
+# This file is distributed under the same license as the PACKAGE package.
+# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
+#
+#, fuzzy
+msgid ""
+msgstr ""
+"Project-Id-Version: PACKAGE VERSION\n"
+"POT-Creation-Date: 2020-04-24 01:58+0200\n"
+"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
+"Language-Team: LANGUAGE <LL@li.org>\n"
+"Language: \n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+
+#. type: Title =
+#: long-filename-of-input-1:2 long-filename-of-input-2:2
+#: long-filename-of-input-3:2 long-filename-of-input-4:2
+#: long-filename-of-input-5:2 long-filename-of-input-6:2
+#: long-filename-of-input-7:2 long-filename-of-input-8:2
+#: long-filename-of-input-9:2
+#, no-wrap
+msgid "original title 0"
+msgstr ""
+
+#. type: Title -
+#: long-filename-of-input-1:5 long-filename-of-input-2:5
+#: long-filename-of-input-3:5 long-filename-of-input-4:5
+#: long-filename-of-input-5:5 long-filename-of-input-6:5
+#: long-filename-of-input-7:5 long-filename-of-input-8:5
+#: long-filename-of-input-9:5
+#, no-wrap
+msgid "original title 1"
+msgstr ""
diff --git a/t/core/porefs/_counter.po b/t/core/porefs/_counter.po
new file mode 100644
index 0000000..4af136b
--- /dev/null
+++ b/t/core/porefs/_counter.po
@@ -0,0 +1,36 @@
+# Language up translations for po package
+# Copyright (C) 2020 Free Software Foundation, Inc.
+# This file is distributed under the same license as the po package.
+# Automatically generated, 2020.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: po 4a\n"
+"POT-Creation-Date: 2020-04-24 01:58+0200\n"
+"PO-Revision-Date: 2020-04-24 01:58+0200\n"
+"Last-Translator: Automatically generated\n"
+"Language-Team: none\n"
+"Language: up\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+
+#. type: Title =
+#: long-filename-of-input-1:1 long-filename-of-input-2:1
+#: long-filename-of-input-3:1 long-filename-of-input-4:1
+#: long-filename-of-input-5:1 long-filename-of-input-6:1
+#: long-filename-of-input-7:1 long-filename-of-input-8:1
+#: long-filename-of-input-9:1
+#, no-wrap
+msgid "original title 0"
+msgstr ""
+
+#. type: Title -
+#: long-filename-of-input-1:2 long-filename-of-input-2:2
+#: long-filename-of-input-3:2 long-filename-of-input-4:2
+#: long-filename-of-input-5:2 long-filename-of-input-6:2
+#: long-filename-of-input-7:2 long-filename-of-input-8:2
+#: long-filename-of-input-9:2
+#, no-wrap
+msgid "original title 1"
+msgstr ""
diff --git a/t/core/porefs/_counter.pot b/t/core/porefs/_counter.pot
new file mode 100644
index 0000000..36b9eb2
--- /dev/null
+++ b/t/core/porefs/_counter.pot
@@ -0,0 +1,37 @@
+# SOME DESCRIPTIVE TITLE
+# Copyright (C) YEAR Free Software Foundation, Inc.
+# This file is distributed under the same license as the PACKAGE package.
+# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
+#
+#, fuzzy
+msgid ""
+msgstr ""
+"Project-Id-Version: PACKAGE VERSION\n"
+"POT-Creation-Date: 2020-04-24 01:58+0200\n"
+"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
+"Language-Team: LANGUAGE <LL@li.org>\n"
+"Language: \n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+
+#. type: Title =
+#: long-filename-of-input-1:1 long-filename-of-input-2:1
+#: long-filename-of-input-3:1 long-filename-of-input-4:1
+#: long-filename-of-input-5:1 long-filename-of-input-6:1
+#: long-filename-of-input-7:1 long-filename-of-input-8:1
+#: long-filename-of-input-9:1
+#, no-wrap
+msgid "original title 0"
+msgstr ""
+
+#. type: Title -
+#: long-filename-of-input-1:2 long-filename-of-input-2:2
+#: long-filename-of-input-3:2 long-filename-of-input-4:2
+#: long-filename-of-input-5:2 long-filename-of-input-6:2
+#: long-filename-of-input-7:2 long-filename-of-input-8:2
+#: long-filename-of-input-9:2
+#, no-wrap
+msgid "original title 1"
+msgstr ""
diff --git a/t/core/porefs/_file.po b/t/core/porefs/_file.po
new file mode 100644
index 0000000..c445587
--- /dev/null
+++ b/t/core/porefs/_file.po
@@ -0,0 +1,32 @@
+# Language up translations for po package
+# Copyright (C) 2020 Free Software Foundation, Inc.
+# This file is distributed under the same license as the po package.
+# Automatically generated, 2020.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: po 4a\n"
+"POT-Creation-Date: 2020-04-24 01:58+0200\n"
+"PO-Revision-Date: 2020-04-24 01:58+0200\n"
+"Last-Translator: Automatically generated\n"
+"Language-Team: none\n"
+"Language: up\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+
+#. type: Title =
+#: long-filename-of-input-1 long-filename-of-input-2 long-filename-of-input-3
+#: long-filename-of-input-4 long-filename-of-input-5 long-filename-of-input-6
+#: long-filename-of-input-7 long-filename-of-input-8 long-filename-of-input-9
+#, no-wrap
+msgid "original title 0"
+msgstr ""
+
+#. type: Title -
+#: long-filename-of-input-1 long-filename-of-input-2 long-filename-of-input-3
+#: long-filename-of-input-4 long-filename-of-input-5 long-filename-of-input-6
+#: long-filename-of-input-7 long-filename-of-input-8 long-filename-of-input-9
+#, no-wrap
+msgid "original title 1"
+msgstr ""
diff --git a/t/core/porefs/_file.pot b/t/core/porefs/_file.pot
new file mode 100644
index 0000000..6f5ab49
--- /dev/null
+++ b/t/core/porefs/_file.pot
@@ -0,0 +1,33 @@
+# SOME DESCRIPTIVE TITLE
+# Copyright (C) YEAR Free Software Foundation, Inc.
+# This file is distributed under the same license as the PACKAGE package.
+# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
+#
+#, fuzzy
+msgid ""
+msgstr ""
+"Project-Id-Version: PACKAGE VERSION\n"
+"POT-Creation-Date: 2020-04-24 01:58+0200\n"
+"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
+"Language-Team: LANGUAGE <LL@li.org>\n"
+"Language: \n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+
+#. type: Title =
+#: long-filename-of-input-1 long-filename-of-input-2 long-filename-of-input-3
+#: long-filename-of-input-4 long-filename-of-input-5 long-filename-of-input-6
+#: long-filename-of-input-7 long-filename-of-input-8 long-filename-of-input-9
+#, no-wrap
+msgid "original title 0"
+msgstr ""
+
+#. type: Title -
+#: long-filename-of-input-1 long-filename-of-input-2 long-filename-of-input-3
+#: long-filename-of-input-4 long-filename-of-input-5 long-filename-of-input-6
+#: long-filename-of-input-7 long-filename-of-input-8 long-filename-of-input-9
+#, no-wrap
+msgid "original title 1"
+msgstr ""
diff --git a/t/core/porefs/_none.po b/t/core/porefs/_none.po
new file mode 100644
index 0000000..f499684
--- /dev/null
+++ b/t/core/porefs/_none.po
@@ -0,0 +1,26 @@
+# Language up translations for po package
+# Copyright (C) 2020 Free Software Foundation, Inc.
+# This file is distributed under the same license as the po package.
+# Automatically generated, 2020.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: po 4a\n"
+"POT-Creation-Date: 2020-04-24 01:14+0200\n"
+"PO-Revision-Date: 2020-04-24 01:14+0200\n"
+"Last-Translator: Automatically generated\n"
+"Language-Team: none\n"
+"Language: up\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+
+#. type: Title =
+#, no-wrap
+msgid "original title 0"
+msgstr ""
+
+#. type: Title -
+#, no-wrap
+msgid "original title 1"
+msgstr ""
diff --git a/t/core/porefs/_none.pot b/t/core/porefs/_none.pot
new file mode 100644
index 0000000..50fc572
--- /dev/null
+++ b/t/core/porefs/_none.pot
@@ -0,0 +1,27 @@
+# SOME DESCRIPTIVE TITLE
+# Copyright (C) YEAR Free Software Foundation, Inc.
+# This file is distributed under the same license as the PACKAGE package.
+# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
+#
+#, fuzzy
+msgid ""
+msgstr ""
+"Project-Id-Version: PACKAGE VERSION\n"
+"POT-Creation-Date: 2020-04-24 01:14+0200\n"
+"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
+"Language-Team: LANGUAGE <LL@li.org>\n"
+"Language: \n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+
+#. type: Title =
+#, no-wrap
+msgid "original title 0"
+msgstr ""
+
+#. type: Title -
+#, no-wrap
+msgid "original title 1"
+msgstr ""
diff --git a/t/core/porefs/_output b/t/core/porefs/_output
new file mode 100644
index 0000000..7920683
--- /dev/null
+++ b/t/core/porefs/_output
@@ -0,0 +1,2 @@
+Creating list.pot: (2 entries)
+Creating an empty PO file in up.po.
diff --git a/t/core/porefs/long-filename-of-input-1 b/t/core/porefs/long-filename-of-input-1
new file mode 100644
index 0000000..65893ca
--- /dev/null
+++ b/t/core/porefs/long-filename-of-input-1
@@ -0,0 +1,6 @@
+original title 0
+================
+
+original title 1
+----------------
+
diff --git a/t/core/porefs/long-filename-of-input-2 b/t/core/porefs/long-filename-of-input-2
new file mode 100644
index 0000000..65893ca
--- /dev/null
+++ b/t/core/porefs/long-filename-of-input-2
@@ -0,0 +1,6 @@
+original title 0
+================
+
+original title 1
+----------------
+
diff --git a/t/core/porefs/long-filename-of-input-3 b/t/core/porefs/long-filename-of-input-3
new file mode 100644
index 0000000..65893ca
--- /dev/null
+++ b/t/core/porefs/long-filename-of-input-3
@@ -0,0 +1,6 @@
+original title 0
+================
+
+original title 1
+----------------
+
diff --git a/t/core/porefs/long-filename-of-input-4 b/t/core/porefs/long-filename-of-input-4
new file mode 100644
index 0000000..65893ca
--- /dev/null
+++ b/t/core/porefs/long-filename-of-input-4
@@ -0,0 +1,6 @@
+original title 0
+================
+
+original title 1
+----------------
+
diff --git a/t/core/porefs/long-filename-of-input-5 b/t/core/porefs/long-filename-of-input-5
new file mode 100644
index 0000000..65893ca
--- /dev/null
+++ b/t/core/porefs/long-filename-of-input-5
@@ -0,0 +1,6 @@
+original title 0
+================
+
+original title 1
+----------------
+
diff --git a/t/core/porefs/long-filename-of-input-6 b/t/core/porefs/long-filename-of-input-6
new file mode 100644
index 0000000..65893ca
--- /dev/null
+++ b/t/core/porefs/long-filename-of-input-6
@@ -0,0 +1,6 @@
+original title 0
+================
+
+original title 1
+----------------
+
diff --git a/t/core/porefs/long-filename-of-input-7 b/t/core/porefs/long-filename-of-input-7
new file mode 100644
index 0000000..65893ca
--- /dev/null
+++ b/t/core/porefs/long-filename-of-input-7
@@ -0,0 +1,6 @@
+original title 0
+================
+
+original title 1
+----------------
+
diff --git a/t/core/porefs/long-filename-of-input-8 b/t/core/porefs/long-filename-of-input-8
new file mode 100644
index 0000000..65893ca
--- /dev/null
+++ b/t/core/porefs/long-filename-of-input-8
@@ -0,0 +1,6 @@
+original title 0
+================
+
+original title 1
+----------------
+
diff --git a/t/core/porefs/long-filename-of-input-9 b/t/core/porefs/long-filename-of-input-9
new file mode 100644
index 0000000..65893ca
--- /dev/null
+++ b/t/core/porefs/long-filename-of-input-9
@@ -0,0 +1,6 @@
+original title 0
+================
+
+original title 1
+----------------
+
diff --git a/t/core/porefs/po4a.conf b/t/core/porefs/po4a.conf
new file mode 100644
index 0000000..03afe0d
--- /dev/null
+++ b/t/core/porefs/po4a.conf
@@ -0,0 +1,14 @@
+[po4a_langs] up
+
+[po4a_paths] list.pot $lang:$lang.po
+[options] opt:"--msgmerge-opt --silent"
+
+[type:asciidoc] long-filename-of-input-1 up:translated-1
+[type:asciidoc] long-filename-of-input-2 up:translated-2
+[type:asciidoc] long-filename-of-input-3 up:translated-3
+[type:asciidoc] long-filename-of-input-4 up:translated-4
+[type:asciidoc] long-filename-of-input-5 up:translated-5
+[type:asciidoc] long-filename-of-input-6 up:translated-6
+[type:asciidoc] long-filename-of-input-7 up:translated-7
+[type:asciidoc] long-filename-of-input-8 up:translated-8
+[type:asciidoc] long-filename-of-input-9 up:translated-9
diff --git a/t/fmt-asciidoc.t b/t/fmt-asciidoc.t
new file mode 100644
index 0000000..74aac07
--- /dev/null
+++ b/t/fmt-asciidoc.t
@@ -0,0 +1,68 @@
+#! /usr/bin/perl
+# Text module tester.
+
+#########################
+
+use strict;
+use warnings;
+
+use lib q(t);
+use Testhelper;
+
+my @tests;
+
+foreach my $t (
+ qw(Titles BlockTitles BlockId Paragraphs DelimitedBlocks Lists Footnotes Callouts Comments Tables TablesImageText Attributes StyleMacro MacroIncludesHugo IndexEntries)
+ )
+{
+ push @tests, { 'format' => 'asciidoc', 'input' => "fmt/asciidoc/$t.adoc" };
+}
+
+push @tests,
+ {
+ 'format' => 'asciidoc',
+ 'options' => '-o compat=asciidoctor',
+ 'input' => 'fmt/asciidoc/StrictDelimitedBlocks.adoc',
+ 'doc' => 'asciidoctor block fence parsing',
+ },
+ {
+ 'format' => 'asciidoc',
+ 'options' => '-o tablecells=1',
+ 'input' => 'fmt/asciidoc/TablesCells.adoc',
+ 'doc' => 'test table cells segmentation',
+ },
+ {
+ 'format' => 'asciidoc',
+ 'options' => '-o noimagetargets=1',
+ 'input' => "fmt/asciidoc/NoImageTarget.adoc",
+ 'doc' => "test ignoring image targets",
+ },
+ {
+ 'format' => 'asciidoc',
+ 'options' => '-o nolinting=1',
+ 'input' => "fmt/asciidoc/LineBreak.adoc",
+ },
+ {
+ 'format' => 'asciidoc',
+ 'options' => '-o cleanspaces=1',
+ 'input' => "fmt/asciidoc/CleanSpaces.adoc",
+ },
+ {
+ 'format' => 'asciidoc',
+ 'input' => "fmt/asciidoc/YamlFrontMatter.adoc",
+ },
+ {
+ 'doc' => "That the yfm_keys and yfm_skip_array options actually work",
+ 'format' => 'asciidoc',
+ 'options' => "-o yfm_skip_array -o yfm_keys='title , subtitle,paragraph'",
+ 'input' => "fmt/asciidoc/YamlFrontMatter_Option.adoc",
+ },
+ {
+ 'doc' => "That the yfm_keys and yfm_paths options actually work",
+ 'format' => 'asciidoc',
+ 'options' => "-o yfm_skip_array -o yfm_keys='subtitle , paragraph' -o yfm_paths='people title'",
+ 'input' => "fmt/asciidoc/YamlFrontMatter_KeysPaths.adoc",
+ };
+
+run_all_tests(@tests);
+0;
diff --git a/t/fmt-docbook.t b/t/fmt-docbook.t
new file mode 100644
index 0000000..20f0962
--- /dev/null
+++ b/t/fmt-docbook.t
@@ -0,0 +1,39 @@
+# XML and XML-based modules tester.
+
+#########################
+
+use strict;
+use warnings;
+
+use lib q(t);
+use Testhelper;
+
+my @tests;
+
+push @tests,
+ {
+ 'format' => 'docbook',
+ 'input' => 'fmt/docbook/debian-history.dbk',
+ 'doc' => 'Reduced structure of the debian-history document, with the options used in the real package',
+ 'options' => "-M UTF-8 -o nodefault='<bookinfo>' -o break='<bookinfo>' -o untranslated='<bookinfo>'",
+ },
+ { # This is the buggy pre-0.58 behavior where the flow is broken by processing instructions
+ # This triggers an unfortunate behavior as the break occurs on the path <screen><userinput> where <screen> is nowrap and <userinput> is inline|wrap.
+ # As a result, when the PI breaks within <userinput>, the first part is translated with wrap.
+ # When the second part (after the PI) is pushed, we are back in <screen> path, so this part is translated with no-wrap (as it should)
+ # The default behavior was changed to ensure that PI are not breaking, but this option is still provided just in case somebody needs PI to be breaking
+ 'doc' => 'GH#170: processing instructions should not be breaking',
+ 'format' => 'docbook',
+ 'options' => '-o break-pi',
+ 'input' => "fmt/docbook/PI-break.dbk",
+ },
+ { # This is ensuring that GH#170 is gone
+ # Since the PI is handled as inline, the input (that is the same as previously) now builds only one msgid, produced in <screen> path.
+ # The <userinput> is inline as expected, and so is the PI.
+ 'doc' => 'GH#170: processing instructions should be inline tags',
+ 'format' => 'docbook',
+ 'input' => "fmt/docbook/PI-inline.dbk",
+ };
+
+run_all_tests(@tests);
+0;
diff --git a/t/fmt-gemtext.t b/t/fmt-gemtext.t
new file mode 100644
index 0000000..822a4a5
--- /dev/null
+++ b/t/fmt-gemtext.t
@@ -0,0 +1,20 @@
+# Gemtext module tester.
+
+#########################
+
+use strict;
+use warnings;
+
+use lib q(t);
+use Testhelper;
+
+my @tests;
+
+push @tests,
+ {
+ 'format' => 'gemtext',
+ 'input' => "fmt/gemtext/basic.gmi",
+ };
+
+run_all_tests(@tests);
+0;
diff --git a/t/fmt-halibut.t b/t/fmt-halibut.t
new file mode 100644
index 0000000..1f290bf
--- /dev/null
+++ b/t/fmt-halibut.t
@@ -0,0 +1,21 @@
+#! /usr/bin/perl
+# Ini module tester.
+
+#########################
+
+use strict;
+use warnings;
+
+use lib q(t);
+use Testhelper;
+
+my @tests;
+
+push @tests,
+ {
+ 'format' => 'halibut',
+ 'input' => 'fmt/halibut/basic.but'
+ };
+
+run_all_tests(@tests);
+0;
diff --git a/t/fmt-ini.t b/t/fmt-ini.t
new file mode 100644
index 0000000..28c1e8e
--- /dev/null
+++ b/t/fmt-ini.t
@@ -0,0 +1,21 @@
+#! /usr/bin/perl
+# Ini module tester.
+
+#########################
+
+use strict;
+use warnings;
+
+use lib q(t);
+use Testhelper;
+
+my @tests;
+
+push @tests,
+ {
+ 'format' => 'ini',
+ 'input' => 'fmt/ini/basic.ini'
+ };
+
+run_all_tests(@tests);
+0;
diff --git a/t/fmt-man.t b/t/fmt-man.t
new file mode 100644
index 0000000..4e72834
--- /dev/null
+++ b/t/fmt-man.t
@@ -0,0 +1,96 @@
+#! /usr/bin/perl
+# Man module tester.
+
+#########################
+
+use strict;
+use warnings;
+
+use lib q(t);
+use Testhelper;
+
+my @tests;
+
+push @tests,
+ {
+ 'doc' => 'null arguments and null paragraphs',
+ 'format' => 'man',
+ 'input' => 'fmt/man/null.man',
+ },
+ {
+ 'doc' => 'escaped newlines and tabs',
+ 'format' => 'man',
+ 'input' => 'fmt/man/escapes.man',
+ },
+
+ {
+ 'doc' => 'User macros definition (missing behavior)',
+ 'input' => 'fmt/man/macro-def.man',
+ 'format' => 'man',
+ 'norm_stderr' => 'fmt/man/macro-def.stderr-missing-behavior',
+ 'trans_stderr' => 'fmt/man/macro-def.stderr-missing-behavior',
+ 'options' => '--option groff_code=verbatim',
+ },
+ {
+ 'doc' => 'User macros definition (untranslated)',
+ 'input' => 'fmt/man/macro-def.man',
+ 'format' => 'man',
+ 'options' => '--option groff_code=verbatim -o untranslated=Blob',
+ },
+ {
+ 'doc' => 'User macros definition (noarg)',
+ 'input' => 'fmt/man/macro-def.man',
+ 'format' => 'man',
+ 'options' => ' --option groff_code=verbatim -o noarg=Blob',
+ },
+
+ {
+ 'doc' => 'User macros definition and usage (missing behavior)',
+ 'input' => 'fmt/man/macro-defuse.man',
+ 'norm_stderr' => 'fmt/man/macro-defuse.stderr-missing-behavior',
+ 'trans_stderr' => 'fmt/man/macro-defuse.stderr-missing-behavior',
+ 'format' => 'man',
+ 'options' => '--option groff_code=verbatim',
+ 'error' => 1,
+ },
+ {
+ 'doc' => 'User macros definition and usage (inline)',
+ 'input' => 'fmt/man/macro-defuse.man',
+ 'format' => 'man',
+ 'options' => '--option groff_code=verbatim -o inline=Blob',
+ },
+ {
+ 'doc' => 'User macros definition and usage (noarg)',
+ 'input' => 'fmt/man/macro-defuse.man',
+ 'format' => 'man',
+ 'options' => ' --option groff_code=verbatim -o noarg=Blob',
+ 'potfile' => 'fmt/man/macro-defuse.pot-noarg',
+ 'pofile' => 'fmt/man/macro-defuse.po-noarg',
+},
+
+ {
+ 'doc' => 'hyphens (verbatim)',
+ 'input' => 'fmt/man/hyphens-verbatim.man',
+ 'format' => 'man',
+ 'options' => '-o groff_code=verbatim',
+ },
+ {
+ 'doc' => 'hyphens (translate)',
+ 'input' => 'fmt/man/hyphens-translate.man',
+ 'format' => 'man',
+ 'options' => '-o groff_code=translate',
+ };
+
+foreach my $t ( qw(fonts dots2 macros mdoc
+ quotes quoted-comment spaces
+ tbl-textblock tbl-option-tab tbl-mdoc-mixed1 tbl-mdoc-mixed2 tbl-mdoc-mixed3 tbl-mdoc-mixed4 ) ) {
+ push @tests, { 'format' => 'man', 'input' => "fmt/man/$t.man" };
+}
+
+foreach my $t (qw(dots-errors1 dots-errors2 dots-errors3)) {
+ push @tests, { 'format' => 'man', 'input' => "fmt/man/$t.man", 'error' => 1 };
+
+}
+
+run_all_tests(@tests);
+0;
diff --git a/t/fmt-pod.t b/t/fmt-pod.t
new file mode 100644
index 0000000..631ecd5
--- /dev/null
+++ b/t/fmt-pod.t
@@ -0,0 +1,22 @@
+#! /usr/bin/perl
+# config file tester.
+
+#########################
+
+use strict;
+use warnings;
+
+use lib q(t);
+use Testhelper;
+
+my @tests;
+push @tests, {
+ 'doc' => 'Basic testing of POD constructs',
+ 'format' => 'pod',
+ 'input' => 'fmt/pod/basic.pod',
+
+};
+
+run_all_tests(@tests);
+
+0;
diff --git a/t/fmt-rubydoc.t b/t/fmt-rubydoc.t
new file mode 100644
index 0000000..160b5c6
--- /dev/null
+++ b/t/fmt-rubydoc.t
@@ -0,0 +1,32 @@
+#! /usr/bin/perl
+# RubyDoc module tester.
+
+#########################
+
+use strict;
+use warnings;
+
+use lib q(t);
+use Testhelper;
+
+my @tests;
+
+foreach my $t (qw(Headlines Lists)) {
+ push @tests,
+ {
+ 'format' => 'Rd',
+ 'input' => "fmt/rubydoc/$t.rd"
+ };
+}
+
+foreach my $pure (qw(Verbatim)) {
+ push @tests,
+ {
+ 'format' => 'Rd',
+ 'options' => '-o puredoc',
+ 'input' => "fmt/rubydoc/$pure.rd"
+ };
+}
+
+run_all_tests(@tests);
+0;
diff --git a/t/fmt-sgml.t b/t/fmt-sgml.t
new file mode 100644
index 0000000..27779a1
--- /dev/null
+++ b/t/fmt-sgml.t
@@ -0,0 +1,25 @@
+#! /usr/bin/perl
+# SGML module tester.
+
+#########################
+
+use strict;
+use warnings;
+
+use lib q(t);
+use Testhelper;
+
+my @tests;
+
+push @tests,
+ {
+ 'format' => 'sgml',
+ 'input' => "fmt/sgml/basic.sgml",
+ },
+ {
+ 'format' => 'sgml',
+ 'input' => "fmt/sgml/attributes-order.sgml",
+ };
+
+run_all_tests(@tests);
+0;
diff --git a/t/fmt-tex.t b/t/fmt-tex.t
new file mode 100644
index 0000000..a380cf5
--- /dev/null
+++ b/t/fmt-tex.t
@@ -0,0 +1,37 @@
+# TeX module tester.
+
+#########################
+
+use strict;
+use warnings;
+
+use lib q(t);
+use Testhelper;
+
+my @tests;
+
+foreach my $t (qw(basic theorem)) {
+ push @tests,
+ {
+ 'format' => 'latex',
+ 'input' => "fmt/tex/$t.tex"
+ };
+}
+
+push @tests,
+ {
+ 'doc' => 'invalid input command, without ignore',
+ 'format' => 'latex',
+ 'input' => "fmt/tex/input-in-verbatim.tex",
+ 'error' => 1,
+ 'norm_stderr' => 'fmt/tex/input-in-verbatim.stderr-without-ignore',
+ },
+ {
+ 'doc' => 'invalid input command, with exclude_include',
+ 'format' => 'latex',
+ 'input' => "fmt/tex/input-in-verbatim.tex",
+ 'options' => '-o exclude_include=main.tex'
+ };
+
+run_all_tests(@tests);
+0;
diff --git a/t/fmt-texinfo.t b/t/fmt-texinfo.t
new file mode 100644
index 0000000..b63371b
--- /dev/null
+++ b/t/fmt-texinfo.t
@@ -0,0 +1,23 @@
+# Texinfo module tester.
+
+#########################
+
+use strict;
+use warnings;
+
+use lib q(t);
+use Testhelper;
+
+my @tests;
+
+for my $test (qw(longmenu partialmenus comments tindex)) {
+ push @tests,
+ {
+ 'format' => 'texinfo',
+ 'input' => "fmt/texinfo/$test.texi",
+ 'options' => '-o no-warn',
+ };
+}
+
+run_all_tests(@tests);
+0;
diff --git a/t/fmt-txt-fortunes.t b/t/fmt-txt-fortunes.t
new file mode 100644
index 0000000..c669420
--- /dev/null
+++ b/t/fmt-txt-fortunes.t
@@ -0,0 +1,24 @@
+#! /usr/bin/perl
+# Text module tester for fortunes files.
+
+#########################
+
+use strict;
+use warnings;
+
+use lib q(t);
+use Testhelper;
+
+my @tests;
+
+foreach my $t (qw(SingleFortune SeveralFortunes MultipleLines)) {
+ push @tests,
+ {
+ 'format' => 'text',
+ 'options' => '-o fortunes',
+ 'input' => "fmt/txt-fortunes/$t.txt"
+ };
+}
+
+run_all_tests(@tests);
+0;
diff --git a/t/fmt-txt-markdown.t b/t/fmt-txt-markdown.t
new file mode 100644
index 0000000..dcc2347
--- /dev/null
+++ b/t/fmt-txt-markdown.t
@@ -0,0 +1,84 @@
+# Text module tester.
+
+#########################
+
+use strict;
+use warnings;
+
+use lib q(t);
+use Testhelper;
+
+my @tests;
+
+# Generic tests
+
+foreach my $t (qw(Basic Rules)) {
+ push @tests, { 'format' => 'text', 'options' => '-o markdown', 'input' => "fmt/txt-markdown/$t.md" };
+}
+
+push @tests,
+ {
+ 'format' => 'text',
+ 'options' => "-o markdown --master-charset UTF-8 --wrap-po=newlines -o neverwrap",
+ 'input' => "fmt/txt-markdown/NoWrap.md",
+ },
+ {
+ 'format' => 'text',
+ 'options' => '-o markdown',
+ 'input' => "fmt/txt-markdown/NestedLists.md",
+ },
+ {
+ 'doc' => "Rewrap output of a Markdown file to the given width",
+ 'format' => 'text',
+ 'options' => '-o markdown -w 40',
+ 'input' => "fmt/txt-markdown/Width.md",
+ 'skip' => { 'updatepo' => 1 }
+ };
+
+# Some tests specific to the Pandoc dialect of Markdown
+# In particular regarding the headers
+
+foreach my $pandoc (
+ qw(HeaderTitle HeaderTitleMultilines HeaderTitleAuthors HeaderTitleDate HeaderOnlyAuthor HeaderTitleMultipleAuthors
+ FencedCodeBlocks)
+ )
+{
+ push @tests, { 'format' => 'text', 'options' => '-o markdown', 'input' => "fmt/txt-markdown/Pandoc$pandoc.md" };
+}
+
+# Some tests around the YAML Front Matter feature
+
+push @tests,
+ {
+ 'format' => 'text',
+ 'options' => '-o markdown',
+ 'input' => 'fmt/txt-markdown/YamlFrontMatter.md'
+ },
+ {
+ 'doc' => "That the yfm_keys and yfm_skip_array options actually work",
+ 'format' => 'text',
+ 'options' => "-o markdown -o yfm_skip_array -o yfm_keys='title , subtitle,paragraph'",
+ 'input' => "fmt/txt-markdown/YamlFrontMatter_Options.md",
+ },
+ {
+ 'doc' => "That the yfm_keys and yfm_paths options actually work",
+ 'format' => 'text',
+ 'options' => "-o markdown -o yfm_skip_array -o yfm_keys=' subtitle ,paragraph' -o yfm_paths='people title' ",
+ 'input' => "fmt/txt-markdown/YamlFrontMatter_KeysPaths.md",
+ },
+ {
+ 'doc' => "Allow markdown files to contain two horizontal rulers that do not denote a YFM.",
+ 'format' => 'text',
+ 'options' => "-o markdown -o yfm_lenient ",
+ 'input' => "fmt/txt-markdown/YamlFrontMatter_fake.md",
+ },
+ {
+ 'doc' => "Handle tables in markdown files, even if it's a GitHub extension.",
+ 'skip' => { 'updatepo' => 1 },
+ 'format' => 'text',
+ 'options' => "-o markdown ",
+ 'input' => "fmt/txt-markdown/Tables.md",
+ };
+
+run_all_tests(@tests);
+0;
diff --git a/t/fmt-txt.t b/t/fmt-txt.t
new file mode 100644
index 0000000..6176e35
--- /dev/null
+++ b/t/fmt-txt.t
@@ -0,0 +1,37 @@
+# Text module tester.
+
+#########################
+
+use strict;
+use warnings;
+
+use lib q(t);
+use Testhelper;
+
+my @tests;
+
+push @tests,
+ {
+ 'format' => 'text',
+ 'options' => '-o keyvalue',
+ 'input' => "fmt/txt/KeyValue.text",
+ },
+ {
+ 'doc' => "Rewrap output of text file to the given width",
+ 'format' => 'text',
+ 'options' => '-w 40',
+ 'input' => "fmt/txt/Width.text",
+ 'skip' => { 'updatepo' => 1 }
+ },
+ {
+ 'doc' => "Don't wrap the output at all",
+ 'format' => 'text',
+ 'options' => '--width -1',
+ 'input' => "fmt/txt/Width.text",
+ 'norm' => "fmt/txt/Width-nowrap.norm",
+ 'trans' => "fmt/txt/Width-nowrap.trans",
+ 'skip' => { 'updatepo' => 1 }
+ };
+
+run_all_tests(@tests);
+0;
diff --git a/t/fmt-wml.t b/t/fmt-wml.t
new file mode 100644
index 0000000..4585206
--- /dev/null
+++ b/t/fmt-wml.t
@@ -0,0 +1,22 @@
+#! /usr/bin/perl
+# config file tester.
+
+#########################
+
+use strict;
+use warnings;
+
+use lib q(t);
+use Testhelper;
+
+my @tests;
+push @tests, {
+ 'doc' => 'Basic testing of WML constructs',
+ 'format' => 'wml',
+ 'input' => 'fmt/wml/basic.wml',
+
+};
+
+run_all_tests(@tests);
+
+0;
diff --git a/t/fmt-xhtml.t b/t/fmt-xhtml.t
new file mode 100644
index 0000000..529f191
--- /dev/null
+++ b/t/fmt-xhtml.t
@@ -0,0 +1,18 @@
+# Xhtml module tester.
+
+#########################
+
+use strict;
+use warnings;
+
+use lib q(t);
+use Testhelper;
+
+my @tests;
+
+for my $t (qw(basic includessi closing-tag table)) {
+ push @tests, { 'format' => 'xhtml', 'input' => "fmt/xhtml/$t.html" };
+}
+
+run_all_tests(@tests);
+0;
diff --git a/t/fmt-xml-dia.t b/t/fmt-xml-dia.t
new file mode 100644
index 0000000..a91507c
--- /dev/null
+++ b/t/fmt-xml-dia.t
@@ -0,0 +1,27 @@
+#! /usr/bin/perl
+# DIA module tester.
+
+#########################
+
+use strict;
+use warnings;
+
+use lib q(t);
+use Testhelper;
+
+my @tests;
+
+push @tests,
+ {
+ 'doc' => "Extract only the strings that we should",
+ 'format' => 'dia',
+ 'input' => 'fmt/xml-dia/basic.dia',
+ },
+ {
+ 'doc' => "test translations with extraneous newlines",
+ 'format' => 'dia',
+ 'input' => 'fmt/xml-dia/transl.dia',
+ };
+
+run_all_tests(@tests);
+0;
diff --git a/t/fmt-xml.t b/t/fmt-xml.t
new file mode 100644
index 0000000..91b3f8c
--- /dev/null
+++ b/t/fmt-xml.t
@@ -0,0 +1,30 @@
+# XML and XML-based modules tester.
+
+#########################
+
+use strict;
+use warnings;
+
+use lib q(t);
+use Testhelper;
+
+my @tests;
+
+for my $g (qw(basic comments cdata)) {
+ push @tests, { 'format' => 'guide', 'input' => "fmt/xml/$g.xml" };
+}
+for my $x (qw(attribute-novalue options)) {
+ push @tests, { 'format' => 'xml', 'input' => "fmt/xml/$x.xml" };
+}
+push @tests, {
+ 'format' => 'xml',
+ 'input' => "fmt/xml/placeholder-empty.xml",
+ 'options' => "-o 'placeholder=<place>'",
+}, {
+ 'format' => 'xml',
+ 'input' => "fmt/xml/inside-foldattribute.xml",
+ 'options' => "-o 'attributes=<image>alt' -o 'inline=<image>' -o foldattributes",
+};
+
+run_all_tests(@tests);
+0;
diff --git a/t/fmt-yaml.t b/t/fmt-yaml.t
new file mode 100644
index 0000000..9693cc0
--- /dev/null
+++ b/t/fmt-yaml.t
@@ -0,0 +1,66 @@
+# Yaml module tester.
+
+#########################
+
+use strict;
+use warnings;
+
+use lib q(t);
+use Testhelper;
+
+my @tests;
+
+push @tests,
+ {
+ 'format' => 'yaml',
+ 'input' => "fmt/yaml/basic.yaml"
+ },
+ {
+ 'doc' => 'basic -o keys=Name',
+ 'format' => 'yaml',
+ 'input' => "fmt/yaml/basic.yaml",
+ 'options' => "-o keys=Name",
+ 'potfile' => 'fmt/yaml/keysoption1.pot',
+ 'pofile' => 'fmt/yaml/keysoption1.po',
+ 'trans' => 'fmt/yaml/keysoption1.trans',
+ },
+ {
+ 'doc' => "basic -o keys='Name File'",
+ 'format' => 'yaml',
+ 'input' => "fmt/yaml/basic.yaml",
+ 'options' => "-o 'keys=Name File'",
+ 'potfile' => 'fmt/yaml/keysoption2.pot',
+ 'pofile' => 'fmt/yaml/keysoption2.po',
+ 'trans' => 'fmt/yaml/keysoption2.trans',
+ },
+ {
+ 'doc' => "-o skip_array",
+ 'format' => 'yaml',
+ 'options' => "-o keys=title -o skip_array",
+ 'input' => "fmt/yaml/skiparray.yaml",
+ },
+ {
+ 'doc' => "basic -o keys='Name' -o paths='Name,Level1 Dir,invoice,bill-to address city' -o skip_array",
+ 'format' => 'yaml',
+ 'input' => "fmt/yaml/basic.yaml",
+ 'options' => "-o keys='Name' -o paths='Name,Level1 Dir,invoice,bill-to address city' -o skip_array",
+ 'potfile' => 'fmt/yaml/keysandpaths1.pot',
+ 'pofile' => 'fmt/yaml/keysandpaths1.po',
+ 'trans' => 'fmt/yaml/keysandpaths1.trans',
+ },
+ {
+ 'doc' => "basic -o paths='Name,level1 Dir ' -o skip_array",
+ 'format' => 'yaml',
+ 'input' => "fmt/yaml/basic.yaml",
+ 'options' => "-o paths='Name,Level1 Dir' -o skip_array",
+ 'potfile' => 'fmt/yaml/pathsoption1.pot',
+ 'pofile' => 'fmt/yaml/pathsoption1.po',
+ 'trans' => 'fmt/yaml/pathsoption1.trans',
+ },
+ {
+ 'format' => "yaml",
+ 'input' => "fmt/yaml/arraylikestring.yaml",
+ };
+
+run_all_tests(@tests);
+0;
diff --git a/t/fmt/asciidoc/Attributes.adoc b/t/fmt/asciidoc/Attributes.adoc
new file mode 100644
index 0000000..3a6cac3
--- /dev/null
+++ b/t/fmt/asciidoc/Attributes.adoc
@@ -0,0 +1,36 @@
+//po4a: entry Author
+//po4a: entry Email
+//po4a: entry Date
+//po4a: entry Revision
+//po4a: entry Key words
+//po4a: entry Revision history
+Test Attributes
+===============
+:Author: Stuart Rackham
+:Email: srackham@gmail.com
+:Date: April 23, 2004
+:Revision: 5.1.1
+:Key words: linux, ralink, debian, wireless
+:Revision history:
+//po4a: entry soft wrap 1
+//po4a: entry soft wrap 2
+//po4a: entry hard wrap
+:soft wrap 1: a first part \
+concatenated with a second one \
+followed by a third one
+:soft wrap 2: an old style part +
+concatenated with a second one +
+followed by a third one
+:hard wrap: a first line + \
+concatenated with a second one + \
+followed by a third one
+
+:soft wrap 1 unregistered: a first part \
+concatenated with a second one \
+followed by a third one unregistered
+:soft wrap 2 unregistered: an old style part +
+concatenated with a second one +
+followed by a third one unregistered
+:hard wrap unregistered: a first line + \
+concatenated with a second one + \
+followed by a third one unregistered
diff --git a/t/fmt/asciidoc/Attributes.norm b/t/fmt/asciidoc/Attributes.norm
new file mode 100644
index 0000000..3e5a51d
--- /dev/null
+++ b/t/fmt/asciidoc/Attributes.norm
@@ -0,0 +1,32 @@
+//po4a: entry Author
+//po4a: entry Email
+//po4a: entry Date
+//po4a: entry Revision
+//po4a: entry Key words
+//po4a: entry Revision history
+Test Attributes
+===============
+:Author: Stuart Rackham
+:Email: srackham@gmail.com
+:Date: April 23, 2004
+:Revision: 5.1.1
+:Key words: linux, ralink, debian, wireless
+:Revision history:
+//po4a: entry soft wrap 1
+//po4a: entry soft wrap 2
+//po4a: entry hard wrap
+:soft wrap 1: a first part concatenated with a second one followed by a third one
+:soft wrap 2: an old style part concatenated with a second one followed by a third one
+:hard wrap: a first line + \
+concatenated with a second one + \
+followed by a third one
+
+:soft wrap 1 unregistered: a first part \
+concatenated with a second one \
+followed by a third one unregistered
+:soft wrap 2 unregistered: an old style part +
+concatenated with a second one +
+followed by a third one unregistered
+:hard wrap unregistered: a first line + \
+concatenated with a second one + \
+followed by a third one unregistered
diff --git a/t/fmt/asciidoc/Attributes.po b/t/fmt/asciidoc/Attributes.po
new file mode 100644
index 0000000..9d1bd03
--- /dev/null
+++ b/t/fmt/asciidoc/Attributes.po
@@ -0,0 +1,72 @@
+# SOME DESCRIPTIVE TITLE
+# Copyright (C) YEAR Free Software Foundation, Inc.
+# This file is distributed under the same license as the PACKAGE package.
+# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
+#
+#, fuzzy
+msgid ""
+msgstr ""
+"Project-Id-Version: PACKAGE VERSION\n"
+"POT-Creation-Date: 2012-10-09 01:30+0300\n"
+"PO-Revision-Date: 2023-05-19 16:54+0200\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
+"Language-Team: LANGUAGE <LL@LI.ORG>\n"
+"Language: \n"
+"MIME-Version: 1.0\n"
+"Content-Type: TEXT/PLAIN; CHARSET=UTF-8\n"
+"Content-Transfer-Encoding: 8BIT\n"
+
+#. type: Title =
+#: Attributes.adoc:8
+#, no-wrap
+msgid "Test Attributes"
+msgstr "TEST ATTRIBUTES"
+
+#. type: Attribute :Author:
+#: Attributes.adoc:9
+msgid "Stuart Rackham"
+msgstr "STUART RACKHAM"
+
+#. type: Attribute :Email:
+#: Attributes.adoc:10
+msgid "srackham@gmail.com"
+msgstr "SRACKHAM@GMAIL.COM"
+
+#. type: Attribute :Date:
+#: Attributes.adoc:11
+msgid "April 23, 2004"
+msgstr "APRIL 23, 2004"
+
+#. type: Attribute :Revision:
+#: Attributes.adoc:12
+msgid "5.1.1"
+msgstr "5.1.1"
+
+#. type: Attribute :Key words:
+#: Attributes.adoc:13
+msgid "linux, ralink, debian, wireless"
+msgstr "LINUX, RALINK, DEBIAN, WIRELESS"
+
+#. type: Attribute :soft wrap 1:
+#: Attributes.adoc:18
+msgid "a first part concatenated with a second one followed by a third one"
+msgstr "A FIRST PART CONCATENATED WITH A SECOND ONE FOLLOWED BY A THIRD ONE"
+
+#. type: Attribute :soft wrap 2:
+#: Attributes.adoc:21
+msgid ""
+"an old style part concatenated with a second one followed by a third one"
+msgstr ""
+"AN OLD STYLE PART CONCATENATED WITH A SECOND ONE FOLLOWED BY A THIRD ONE"
+
+#. type: Attribute :hard wrap:
+#: Attributes.adoc:24
+#, no-wrap
+msgid ""
+"a first line\n"
+"concatenated with a second one\n"
+"followed by a third one"
+msgstr ""
+"A FIRST LINE\n"
+"CONCATENATED WITH A SECOND ONE\n"
+"FOLLOWED BY A THIRD ONE"
diff --git a/t/fmt/asciidoc/Attributes.pot b/t/fmt/asciidoc/Attributes.pot
new file mode 100644
index 0000000..2939193
--- /dev/null
+++ b/t/fmt/asciidoc/Attributes.pot
@@ -0,0 +1,67 @@
+# SOME DESCRIPTIVE TITLE
+# Copyright (C) YEAR Free Software Foundation, Inc.
+# This file is distributed under the same license as the PACKAGE package.
+# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
+#
+#, fuzzy
+msgid ""
+msgstr ""
+"Project-Id-Version: PACKAGE VERSION\n"
+"POT-Creation-Date: 2012-10-09 01:30+0300\n"
+"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
+"Language-Team: LANGUAGE <LL@li.org>\n"
+"Language: \n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+
+#. type: Title =
+#: Attributes.adoc:8
+#, no-wrap
+msgid "Test Attributes"
+msgstr ""
+
+#. type: Attribute :Author:
+#: Attributes.adoc:9
+msgid "Stuart Rackham"
+msgstr ""
+
+#. type: Attribute :Email:
+#: Attributes.adoc:10
+msgid "srackham@gmail.com"
+msgstr ""
+
+#. type: Attribute :Date:
+#: Attributes.adoc:11
+msgid "April 23, 2004"
+msgstr ""
+
+#. type: Attribute :Revision:
+#: Attributes.adoc:12
+msgid "5.1.1"
+msgstr ""
+
+#. type: Attribute :Key words:
+#: Attributes.adoc:13
+msgid "linux, ralink, debian, wireless"
+msgstr ""
+
+#. type: Attribute :soft wrap 1:
+#: Attributes.adoc:18
+msgid "a first part concatenated with a second one followed by a third one"
+msgstr ""
+
+#. type: Attribute :soft wrap 2:
+#: Attributes.adoc:21
+msgid "an old style part concatenated with a second one followed by a third one"
+msgstr ""
+
+#. type: Attribute :hard wrap:
+#: Attributes.adoc:24
+#, no-wrap
+msgid ""
+"a first line\n"
+"concatenated with a second one\n"
+"followed by a third one"
+msgstr ""
diff --git a/t/fmt/asciidoc/Attributes.trans b/t/fmt/asciidoc/Attributes.trans
new file mode 100644
index 0000000..99fab33
--- /dev/null
+++ b/t/fmt/asciidoc/Attributes.trans
@@ -0,0 +1,32 @@
+//po4a: entry Author
+//po4a: entry Email
+//po4a: entry Date
+//po4a: entry Revision
+//po4a: entry Key words
+//po4a: entry Revision history
+TEST ATTRIBUTES
+===============
+:Author: STUART RACKHAM
+:Email: SRACKHAM@GMAIL.COM
+:Date: APRIL 23, 2004
+:Revision: 5.1.1
+:Key words: LINUX, RALINK, DEBIAN, WIRELESS
+:Revision history:
+//po4a: entry soft wrap 1
+//po4a: entry soft wrap 2
+//po4a: entry hard wrap
+:soft wrap 1: A FIRST PART CONCATENATED WITH A SECOND ONE FOLLOWED BY A THIRD ONE
+:soft wrap 2: AN OLD STYLE PART CONCATENATED WITH A SECOND ONE FOLLOWED BY A THIRD ONE
+:hard wrap: A FIRST LINE + \
+CONCATENATED WITH A SECOND ONE + \
+FOLLOWED BY A THIRD ONE
+
+:soft wrap 1 unregistered: a first part \
+concatenated with a second one \
+followed by a third one unregistered
+:soft wrap 2 unregistered: an old style part +
+concatenated with a second one +
+followed by a third one unregistered
+:hard wrap unregistered: a first line + \
+concatenated with a second one + \
+followed by a third one unregistered
diff --git a/t/fmt/asciidoc/BlockId.adoc b/t/fmt/asciidoc/BlockId.adoc
new file mode 100644
index 0000000..302e9cc
--- /dev/null
+++ b/t/fmt/asciidoc/BlockId.adoc
@@ -0,0 +1,11 @@
+Test BlockId Element
+====================
+
+[[lorem-ipsum]]
+Some paragraph text. Some paragraph text. Some paragraph text.
+Some paragraph text. Some paragraph text. Some paragraph text.
+
+[[ipsum-quia,Second Paragraph]]
+Reference to <<lorem-ipsum, Lorem Ipsum>>.
+
+[[ipsum]] Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Aenean commodo ligula eget dolor: [[dolor]]
diff --git a/t/fmt/asciidoc/BlockId.norm b/t/fmt/asciidoc/BlockId.norm
new file mode 100644
index 0000000..733ef33
--- /dev/null
+++ b/t/fmt/asciidoc/BlockId.norm
@@ -0,0 +1,10 @@
+Test BlockId Element
+====================
+
+[[lorem-ipsum]]
+Some paragraph text. Some paragraph text. Some paragraph text. Some paragraph text. Some paragraph text. Some paragraph text.
+
+[[ipsum-quia,Second Paragraph]]
+Reference to <<lorem-ipsum, Lorem Ipsum>>.
+
+[[ipsum]] Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Aenean commodo ligula eget dolor: [[dolor]]
diff --git a/t/fmt/asciidoc/BlockId.po b/t/fmt/asciidoc/BlockId.po
new file mode 100644
index 0000000..a0056d2
--- /dev/null
+++ b/t/fmt/asciidoc/BlockId.po
@@ -0,0 +1,52 @@
+# SOME DESCRIPTIVE TITLE
+# Copyright (C) YEAR Free Software Foundation, Inc.
+# This file is distributed under the same license as the PACKAGE package.
+# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
+#
+#, fuzzy
+msgid ""
+msgstr ""
+"Project-Id-Version: PACKAGE VERSION\n"
+"POT-Creation-Date: 2020-04-27 23:05+0200\n"
+"PO-Revision-Date: 2008-10-12 22:03+0200\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
+"Language-Team: LANGUAGE <LL@li.org>\n"
+"Language: \n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+
+#. type: Title =
+#: BlockId.adoc:2
+#, no-wrap
+msgid "Test BlockId Element"
+msgstr "TEST BLOCKID ELEMENT"
+
+#. type: Plain text
+#: BlockId.adoc:7
+msgid ""
+"Some paragraph text. Some paragraph text. Some paragraph text. Some "
+"paragraph text. Some paragraph text. Some paragraph text."
+msgstr ""
+"SOME PARAGRAPH TEXT. SOME PARAGRAPH TEXT. SOME PARAGRAPH TEXT. SOME "
+"PARAGRAPH TEXT. SOME PARAGRAPH TEXT. SOME PARAGRAPH TEXT."
+
+#. type: Plain text
+#: BlockId.adoc:8
+#, no-wrap
+msgid "Second Paragraph"
+msgstr "SECOND PARAGRAPH"
+
+#. type: Plain text
+#: BlockId.adoc:10
+msgid "Reference to <<lorem-ipsum, Lorem Ipsum>>."
+msgstr "REFERENCE TO <<lorem-ipsum, LOREM IPSUM>>."
+
+#. type: Plain text
+#: BlockId.adoc:11
+msgid ""
+"[[ipsum]] Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Aenean "
+"commodo ligula eget dolor: [[dolor]]"
+msgstr ""
+"[[ipsum]] LOREM IPSUM DOLOR SIT AMET, CONSECTETUER ADIPISCING ELIT. AENEAN "
+"COMMODO LIGULA EGET DOLOR: [[dolor]]"
diff --git a/t/fmt/asciidoc/BlockId.pot b/t/fmt/asciidoc/BlockId.pot
new file mode 100644
index 0000000..754f914
--- /dev/null
+++ b/t/fmt/asciidoc/BlockId.pot
@@ -0,0 +1,48 @@
+# SOME DESCRIPTIVE TITLE
+# Copyright (C) YEAR Free Software Foundation, Inc.
+# This file is distributed under the same license as the PACKAGE package.
+# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
+#
+#, fuzzy
+msgid ""
+msgstr ""
+"Project-Id-Version: PACKAGE VERSION\n"
+"POT-Creation-Date: 2020-04-27 23:05+0200\n"
+"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
+"Language-Team: LANGUAGE <LL@li.org>\n"
+"Language: \n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+
+#. type: Title =
+#: BlockId.adoc:2
+#, no-wrap
+msgid "Test BlockId Element"
+msgstr ""
+
+#. type: Plain text
+#: BlockId.adoc:7
+msgid ""
+"Some paragraph text. Some paragraph text. Some paragraph text. Some "
+"paragraph text. Some paragraph text. Some paragraph text."
+msgstr ""
+
+#. type: Plain text
+#: BlockId.adoc:8
+#, no-wrap
+msgid "Second Paragraph"
+msgstr ""
+
+#. type: Plain text
+#: BlockId.adoc:10
+msgid "Reference to <<lorem-ipsum, Lorem Ipsum>>."
+msgstr ""
+
+#. type: Plain text
+#: BlockId.adoc:11
+msgid ""
+"[[ipsum]] Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Aenean "
+"commodo ligula eget dolor: [[dolor]]"
+msgstr ""
diff --git a/t/fmt/asciidoc/BlockId.trans b/t/fmt/asciidoc/BlockId.trans
new file mode 100644
index 0000000..c1a6595
--- /dev/null
+++ b/t/fmt/asciidoc/BlockId.trans
@@ -0,0 +1,10 @@
+TEST BLOCKID ELEMENT
+====================
+
+[[lorem-ipsum]]
+SOME PARAGRAPH TEXT. SOME PARAGRAPH TEXT. SOME PARAGRAPH TEXT. SOME PARAGRAPH TEXT. SOME PARAGRAPH TEXT. SOME PARAGRAPH TEXT.
+
+[[ipsum-quia,SECOND PARAGRAPH]]
+REFERENCE TO <<lorem-ipsum, LOREM IPSUM>>.
+
+[[ipsum]] LOREM IPSUM DOLOR SIT AMET, CONSECTETUER ADIPISCING ELIT. AENEAN COMMODO LIGULA EGET DOLOR: [[dolor]]
diff --git a/t/fmt/asciidoc/BlockTitles.adoc b/t/fmt/asciidoc/BlockTitles.adoc
new file mode 100644
index 0000000..7194d0a
--- /dev/null
+++ b/t/fmt/asciidoc/BlockTitles.adoc
@@ -0,0 +1,14 @@
+Test BlockTitles
+================
+
+.Notes
+- Note 1.
+- Note 2.
+
+
+.Lorem ipsum
+Some paragraph text. Some paragraph text. Some paragraph text.
+Some paragraph text. Some paragraph text. Some paragraph text.
+
+Some paragraph text. Some paragraph text. Some paragraph text.
+Some paragraph text. Some paragraph text. Some paragraph text.
diff --git a/t/fmt/asciidoc/BlockTitles.norm b/t/fmt/asciidoc/BlockTitles.norm
new file mode 100644
index 0000000..6e7f803
--- /dev/null
+++ b/t/fmt/asciidoc/BlockTitles.norm
@@ -0,0 +1,12 @@
+Test BlockTitles
+================
+
+.Notes
+- Note 1.
+- Note 2.
+
+
+.Lorem ipsum
+Some paragraph text. Some paragraph text. Some paragraph text. Some paragraph text. Some paragraph text. Some paragraph text.
+
+Some paragraph text. Some paragraph text. Some paragraph text. Some paragraph text. Some paragraph text. Some paragraph text.
diff --git a/t/fmt/asciidoc/BlockTitles.po b/t/fmt/asciidoc/BlockTitles.po
new file mode 100644
index 0000000..3418fe6
--- /dev/null
+++ b/t/fmt/asciidoc/BlockTitles.po
@@ -0,0 +1,54 @@
+# SOME DESCRIPTIVE TITLE
+# Copyright (C) YEAR Free Software Foundation, Inc.
+# This file is distributed under the same license as the PACKAGE package.
+# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
+#
+#, fuzzy
+msgid ""
+msgstr ""
+"Project-Id-Version: PACKAGE VERSION\n"
+"POT-Creation-Date: 2020-04-27 22:58+0200\n"
+"PO-Revision-Date: 2008-10-12 22:03+0200\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
+"Language-Team: LANGUAGE <LL@li.org>\n"
+"Language: \n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+
+#. type: Title =
+#: BlockTitles.adoc:2
+#, no-wrap
+msgid "Test BlockTitles"
+msgstr "TEST BLOCKTITLES"
+
+#. type: Block title
+#: BlockTitles.adoc:4
+#, no-wrap
+msgid "Notes"
+msgstr "NOTES"
+
+#. type: Plain text
+#: BlockTitles.adoc:6
+msgid "Note 1."
+msgstr "NOTE 1."
+
+#. type: Plain text
+#: BlockTitles.adoc:7
+msgid "Note 2."
+msgstr "NOTE 2."
+
+#. type: Block title
+#: BlockTitles.adoc:9
+#, no-wrap
+msgid "Lorem ipsum"
+msgstr "LOREM IPSUM"
+
+#. type: Plain text
+#: BlockTitles.adoc:12 BlockTitles.adoc:14
+msgid ""
+"Some paragraph text. Some paragraph text. Some paragraph text. Some "
+"paragraph text. Some paragraph text. Some paragraph text."
+msgstr ""
+"SOME PARAGRAPH TEXT. SOME PARAGRAPH TEXT. SOME PARAGRAPH TEXT. SOME "
+"PARAGRAPH TEXT. SOME PARAGRAPH TEXT. SOME PARAGRAPH TEXT."
diff --git a/t/fmt/asciidoc/BlockTitles.pot b/t/fmt/asciidoc/BlockTitles.pot
new file mode 100644
index 0000000..e151605
--- /dev/null
+++ b/t/fmt/asciidoc/BlockTitles.pot
@@ -0,0 +1,52 @@
+# SOME DESCRIPTIVE TITLE
+# Copyright (C) YEAR Free Software Foundation, Inc.
+# This file is distributed under the same license as the PACKAGE package.
+# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
+#
+#, fuzzy
+msgid ""
+msgstr ""
+"Project-Id-Version: PACKAGE VERSION\n"
+"POT-Creation-Date: 2020-04-27 22:58+0200\n"
+"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
+"Language-Team: LANGUAGE <LL@li.org>\n"
+"Language: \n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+
+#. type: Title =
+#: BlockTitles.adoc:2
+#, no-wrap
+msgid "Test BlockTitles"
+msgstr ""
+
+#. type: Block title
+#: BlockTitles.adoc:4
+#, no-wrap
+msgid "Notes"
+msgstr ""
+
+#. type: Plain text
+#: BlockTitles.adoc:6
+msgid "Note 1."
+msgstr ""
+
+#. type: Plain text
+#: BlockTitles.adoc:7
+msgid "Note 2."
+msgstr ""
+
+#. type: Block title
+#: BlockTitles.adoc:9
+#, no-wrap
+msgid "Lorem ipsum"
+msgstr ""
+
+#. type: Plain text
+#: BlockTitles.adoc:12 BlockTitles.adoc:14
+msgid ""
+"Some paragraph text. Some paragraph text. Some paragraph text. Some "
+"paragraph text. Some paragraph text. Some paragraph text."
+msgstr ""
diff --git a/t/fmt/asciidoc/BlockTitles.trans b/t/fmt/asciidoc/BlockTitles.trans
new file mode 100644
index 0000000..54012a3
--- /dev/null
+++ b/t/fmt/asciidoc/BlockTitles.trans
@@ -0,0 +1,12 @@
+TEST BLOCKTITLES
+================
+
+.NOTES
+- NOTE 1.
+- NOTE 2.
+
+
+.LOREM IPSUM
+SOME PARAGRAPH TEXT. SOME PARAGRAPH TEXT. SOME PARAGRAPH TEXT. SOME PARAGRAPH TEXT. SOME PARAGRAPH TEXT. SOME PARAGRAPH TEXT.
+
+SOME PARAGRAPH TEXT. SOME PARAGRAPH TEXT. SOME PARAGRAPH TEXT. SOME PARAGRAPH TEXT. SOME PARAGRAPH TEXT. SOME PARAGRAPH TEXT.
diff --git a/t/fmt/asciidoc/Callouts.adoc b/t/fmt/asciidoc/Callouts.adoc
new file mode 100644
index 0000000..6545ea4
--- /dev/null
+++ b/t/fmt/asciidoc/Callouts.adoc
@@ -0,0 +1,42 @@
+Test Callouts
+=============
+
+.MS-DOS directory listing
+.....................................................
+10/17/97 9:04 <DIR> bin
+10/16/97 14:11 <DIR> DOS <1>
+10/16/97 14:40 <DIR> Program Files
+10/16/97 14:46 <DIR> TEMP
+10/17/97 9:04 <DIR> tmp
+10/16/97 14:37 <DIR> WINNT
+10/16/97 14:25 119 AUTOEXEC.BAT <2>
+ 2/13/94 6:21 54,619 COMMAND.COM <2>
+10/16/97 14:25 115 CONFIG.SYS <2>
+11/16/97 17:17 61,865,984 pagefile.sys
+ 2/13/94 6:21 9,349 WINA20.386 <3>
+.....................................................
+
+<1> This directory holds MS-DOS.
+<2> System startup code for DOS.
+<3> Some sort of Windows 3.1 hack.
+
+
+[source,shell]
+....
+# Generate the FreeBSD website
+#
+# Copyright (c) 2020-2021, The FreeBSD Documentation Project <.>
+#
+# Targets intended for use on the command line <.>
+#
+# all (default) - generate the releases.toml and compile all the website
+# run - serves the built website for local browsing
+#
+# The run target uses hugo's built-in webserver to make the built website
+# available for local browsing. The website should have been built prior
+# to attempting to use the `run` target. By default, hugo will start its
+# webserver on port 1313. <.>
+....
+<.> Callout 1.
+<.> Callout 2.
+<.> Callout 3.
diff --git a/t/fmt/asciidoc/Callouts.norm b/t/fmt/asciidoc/Callouts.norm
new file mode 100644
index 0000000..9bf1864
--- /dev/null
+++ b/t/fmt/asciidoc/Callouts.norm
@@ -0,0 +1,42 @@
+Test Callouts
+=============
+
+.MS-DOS directory listing
+.....................................................
+10/17/97 9:04 <DIR> bin
+10/16/97 14:11 <DIR> DOS <1>
+10/16/97 14:40 <DIR> Program Files
+10/16/97 14:46 <DIR> TEMP
+10/17/97 9:04 <DIR> tmp
+10/16/97 14:37 <DIR> WINNT
+10/16/97 14:25 119 AUTOEXEC.BAT <2>
+ 2/13/94 6:21 54,619 COMMAND.COM <2>
+10/16/97 14:25 115 CONFIG.SYS <2>
+11/16/97 17:17 61,865,984 pagefile.sys
+ 2/13/94 6:21 9,349 WINA20.386 <3>
+.....................................................
+
+<1> This directory holds MS-DOS.
+<2> System startup code for DOS.
+<3> Some sort of Windows 3.1 hack.
+
+
+[source, shell]
+....
+# Generate the FreeBSD website
+#
+# Copyright (c) 2020-2021, The FreeBSD Documentation Project <.>
+#
+# Targets intended for use on the command line <.>
+#
+# all (default) - generate the releases.toml and compile all the website
+# run - serves the built website for local browsing
+#
+# The run target uses hugo's built-in webserver to make the built website
+# available for local browsing. The website should have been built prior
+# to attempting to use the `run` target. By default, hugo will start its
+# webserver on port 1313. <.>
+....
+<.> Callout 1.
+<.> Callout 2.
+<.> Callout 3.
diff --git a/t/fmt/asciidoc/Callouts.po b/t/fmt/asciidoc/Callouts.po
new file mode 100644
index 0000000..39b695b
--- /dev/null
+++ b/t/fmt/asciidoc/Callouts.po
@@ -0,0 +1,119 @@
+# SOME DESCRIPTIVE TITLE
+# Copyright (C) YEAR Free Software Foundation, Inc.
+# This file is distributed under the same license as the PACKAGE package.
+# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
+#
+#, fuzzy
+msgid ""
+msgstr ""
+"Project-Id-Version: PACKAGE VERSION\n"
+"POT-Creation-Date: 2008-10-12 19:36+0300\n"
+"PO-Revision-Date: 2008-10-12 22:52+0200\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
+"Language-Team: LANGUAGE <LL@LI.ORG>\n"
+"Language: \n"
+"MIME-Version: 1.0\n"
+"Content-Type: TEXT/PLAIN; CHARSET=UTF-8\n"
+"Content-Transfer-Encoding: 8BIT\n"
+
+#. type: Title =
+#: Callouts.adoc:2
+#, no-wrap
+msgid "Test Callouts"
+msgstr "TEST CALLOUTS"
+
+#. type: Block title
+#: Callouts.adoc:4
+#, no-wrap
+msgid "MS-DOS directory listing"
+msgstr "MS-DOS DIRECTORY LISTING"
+
+#. type: delimited block .
+#: Callouts.adoc:17
+#, no-wrap
+msgid ""
+"10/17/97 9:04 <DIR> bin\n"
+"10/16/97 14:11 <DIR> DOS <1>\n"
+"10/16/97 14:40 <DIR> Program Files\n"
+"10/16/97 14:46 <DIR> TEMP\n"
+"10/17/97 9:04 <DIR> tmp\n"
+"10/16/97 14:37 <DIR> WINNT\n"
+"10/16/97 14:25 119 AUTOEXEC.BAT <2>\n"
+" 2/13/94 6:21 54,619 COMMAND.COM <2>\n"
+"10/16/97 14:25 115 CONFIG.SYS <2>\n"
+"11/16/97 17:17 61,865,984 pagefile.sys\n"
+" 2/13/94 6:21 9,349 WINA20.386 <3>\n"
+msgstr ""
+"10/17/97 9:04 <DIR> BIN\n"
+"10/16/97 14:11 <DIR> DOS <1>\n"
+"10/16/97 14:40 <DIR> PROGRAM FILES\n"
+"10/16/97 14:46 <DIR> TEMP\n"
+"10/17/97 9:04 <DIR> TMP\n"
+"10/16/97 14:37 <DIR> WINNT\n"
+"10/16/97 14:25 119 AUTOEXEC.BAT <2>\n"
+" 2/13/94 6:21 54,619 COMMAND.COM <2>\n"
+"10/16/97 14:25 115 CONFIG.SYS <2>\n"
+"11/16/97 17:17 61,865,984 PAGEFILE.SYS\n"
+" 2/13/94 6:21 9,349 WINA20.386 <3>\n"
+
+#. type: Plain text
+#: Callouts.adoc:20
+msgid "This directory holds MS-DOS."
+msgstr "THIS DIRECTORY HOLDS MS-DOS."
+
+#. type: Plain text
+#: Callouts.adoc:21
+msgid "System startup code for DOS."
+msgstr "SYSTEM STARTUP CODE FOR DOS."
+
+#. type: Plain text
+#: Callouts.adoc:22
+msgid "Some sort of Windows 3.1 hack."
+msgstr "SOME SORT OF WINDOWS 3.1 HACK."
+
+#. type: delimited block .
+#: Callouts.adoc:39
+#, no-wrap
+msgid ""
+"# Generate the FreeBSD website\n"
+"#\n"
+"# Copyright (c) 2020-2021, The FreeBSD Documentation Project <.>\n"
+"#\n"
+"# Targets intended for use on the command line <.>\n"
+"#\n"
+"# all (default)\t-\tgenerate the releases.toml and compile all the website\n"
+"# run\t-\t\t\tserves the built website for local browsing\n"
+"#\n"
+"# The run target uses hugo's built-in webserver to make the built website\n"
+"# available for local browsing. The website should have been built prior\n"
+"# to attempting to use the `run` target. By default, hugo will start its\n"
+"# webserver on port 1313. <.>\n"
+msgstr ""
+"# GENERATE THE FREEBSD WEBSITE\n"
+"#\n"
+"# COPYRIGHT (C) 2020-2021, THE FREEBSD DOCUMENTATION PROJECT <.>\n"
+"#\n"
+"# TARGETS INTENDED FOR USE ON THE COMMAND LINE <.>\n"
+"#\n"
+"# ALL (DEFAULT)\t-\tGENERATE THE RELEASES.TOML AND COMPILE ALL THE WEBSITE\n"
+"# RUN\t-\t\t\tSERVES THE BUILT WEBSITE FOR LOCAL BROWSING\n"
+"#\n"
+"# THE RUN TARGET USES HUGO'S BUILT-IN WEBSERVER TO MAKE THE BUILT WEBSITE\n"
+"# AVAILABLE FOR LOCAL BROWSING. THE WEBSITE SHOULD HAVE BEEN BUILT PRIOR\n"
+"# TO ATTEMPTING TO USE THE `RUN` TARGET. BY DEFAULT, HUGO WILL START ITS\n"
+"# WEBSERVER ON PORT 1313. <.>\n"
+
+#. type: Plain text
+#: Callouts.adoc:41
+msgid "Callout 1."
+msgstr "CALLOUT 1."
+
+#. type: Plain text
+#: Callouts.adoc:42
+msgid "Callout 2."
+msgstr "CALLOUT 2."
+
+#. type: Plain text
+#: Callouts.adoc:42
+msgid "Callout 3."
+msgstr "CALLOUT 3."
diff --git a/t/fmt/asciidoc/Callouts.pot b/t/fmt/asciidoc/Callouts.pot
new file mode 100644
index 0000000..bf6539e
--- /dev/null
+++ b/t/fmt/asciidoc/Callouts.pot
@@ -0,0 +1,95 @@
+# SOME DESCRIPTIVE TITLE
+# Copyright (C) YEAR Free Software Foundation, Inc.
+# This file is distributed under the same license as the PACKAGE package.
+# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
+#
+#, fuzzy
+msgid ""
+msgstr ""
+"Project-Id-Version: PACKAGE VERSION\n"
+"POT-Creation-Date: 2008-10-12 19:36+0300\n"
+"PO-Revision-Date: 2008-10-12 22:52+0200\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
+"Language-Team: LANGUAGE <LL@li.org>\n"
+"Language: \n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+
+#. type: Title =
+#: Callouts.adoc:2
+#, no-wrap
+msgid "Test Callouts"
+msgstr ""
+
+#. type: Block title
+#: Callouts.adoc:4
+#, no-wrap
+msgid "MS-DOS directory listing"
+msgstr ""
+
+#. type: delimited block .
+#: Callouts.adoc:17
+#, no-wrap
+msgid ""
+"10/17/97 9:04 <DIR> bin\n"
+"10/16/97 14:11 <DIR> DOS <1>\n"
+"10/16/97 14:40 <DIR> Program Files\n"
+"10/16/97 14:46 <DIR> TEMP\n"
+"10/17/97 9:04 <DIR> tmp\n"
+"10/16/97 14:37 <DIR> WINNT\n"
+"10/16/97 14:25 119 AUTOEXEC.BAT <2>\n"
+" 2/13/94 6:21 54,619 COMMAND.COM <2>\n"
+"10/16/97 14:25 115 CONFIG.SYS <2>\n"
+"11/16/97 17:17 61,865,984 pagefile.sys\n"
+" 2/13/94 6:21 9,349 WINA20.386 <3>\n"
+msgstr ""
+
+#. type: Plain text
+#: Callouts.adoc:20
+msgid "This directory holds MS-DOS."
+msgstr ""
+
+#. type: Plain text
+#: Callouts.adoc:21
+msgid "System startup code for DOS."
+msgstr ""
+
+#. type: Plain text
+#: Callouts.adoc:22
+msgid "Some sort of Windows 3.1 hack."
+msgstr ""
+
+#. type: delimited block .
+#: Callouts.adoc:39
+#, no-wrap
+msgid ""
+"# Generate the FreeBSD website\n"
+"#\n"
+"# Copyright (c) 2020-2021, The FreeBSD Documentation Project <.>\n"
+"#\n"
+"# Targets intended for use on the command line <.>\n"
+"#\n"
+"# all (default)\t-\tgenerate the releases.toml and compile all the website\n"
+"# run\t-\t\t\tserves the built website for local browsing\n"
+"#\n"
+"# The run target uses hugo's built-in webserver to make the built website\n"
+"# available for local browsing. The website should have been built prior\n"
+"# to attempting to use the `run` target. By default, hugo will start its\n"
+"# webserver on port 1313. <.>\n"
+msgstr ""
+
+#. type: Plain text
+#: Callouts.adoc:41
+msgid "Callout 1."
+msgstr ""
+
+#. type: Plain text
+#: Callouts.adoc:42
+msgid "Callout 2."
+msgstr ""
+
+#. type: Plain text
+#: Callouts.adoc:42
+msgid "Callout 3."
+msgstr ""
diff --git a/t/fmt/asciidoc/Callouts.trans b/t/fmt/asciidoc/Callouts.trans
new file mode 100644
index 0000000..57d382c
--- /dev/null
+++ b/t/fmt/asciidoc/Callouts.trans
@@ -0,0 +1,42 @@
+TEST CALLOUTS
+=============
+
+.MS-DOS DIRECTORY LISTING
+.....................................................
+10/17/97 9:04 <DIR> BIN
+10/16/97 14:11 <DIR> DOS <1>
+10/16/97 14:40 <DIR> PROGRAM FILES
+10/16/97 14:46 <DIR> TEMP
+10/17/97 9:04 <DIR> TMP
+10/16/97 14:37 <DIR> WINNT
+10/16/97 14:25 119 AUTOEXEC.BAT <2>
+ 2/13/94 6:21 54,619 COMMAND.COM <2>
+10/16/97 14:25 115 CONFIG.SYS <2>
+11/16/97 17:17 61,865,984 PAGEFILE.SYS
+ 2/13/94 6:21 9,349 WINA20.386 <3>
+.....................................................
+
+<1> THIS DIRECTORY HOLDS MS-DOS.
+<2> SYSTEM STARTUP CODE FOR DOS.
+<3> SOME SORT OF WINDOWS 3.1 HACK.
+
+
+[source, shell]
+....
+# GENERATE THE FREEBSD WEBSITE
+#
+# COPYRIGHT (C) 2020-2021, THE FREEBSD DOCUMENTATION PROJECT <.>
+#
+# TARGETS INTENDED FOR USE ON THE COMMAND LINE <.>
+#
+# ALL (DEFAULT) - GENERATE THE RELEASES.TOML AND COMPILE ALL THE WEBSITE
+# RUN - SERVES THE BUILT WEBSITE FOR LOCAL BROWSING
+#
+# THE RUN TARGET USES HUGO'S BUILT-IN WEBSERVER TO MAKE THE BUILT WEBSITE
+# AVAILABLE FOR LOCAL BROWSING. THE WEBSITE SHOULD HAVE BEEN BUILT PRIOR
+# TO ATTEMPTING TO USE THE `RUN` TARGET. BY DEFAULT, HUGO WILL START ITS
+# WEBSERVER ON PORT 1313. <.>
+....
+<.> CALLOUT 1.
+<.> CALLOUT 2.
+<.> CALLOUT 3.
diff --git a/t/fmt/asciidoc/CleanSpaces.adoc b/t/fmt/asciidoc/CleanSpaces.adoc
new file mode 100644
index 0000000..99283bf
--- /dev/null
+++ b/t/fmt/asciidoc/CleanSpaces.adoc
@@ -0,0 +1,20 @@
+Test Clean Spaces
+=================
+
+**************************
+This is a Sidebar block.
+This is a Sidebar block.
+
+ This is a Sidebar block.
+ This is a Sidebar block.
+
+ - This is a Sidebar block.
+ This is a Sidebar block.
+**************************
+
+<pathspec>...::
+ Files to add content from. Fileglobs (e.g. `*.c`) can
+ be given to add all matching files.
+
+Some paragraph text. Some paragraph text. Some paragraph text.
+Some paragraph text. Some paragraph text. Some paragraph text.
diff --git a/t/fmt/asciidoc/CleanSpaces.norm b/t/fmt/asciidoc/CleanSpaces.norm
new file mode 100644
index 0000000..c8a25f3
--- /dev/null
+++ b/t/fmt/asciidoc/CleanSpaces.norm
@@ -0,0 +1,16 @@
+Test Clean Spaces
+=================
+
+**************************
+This is a Sidebar block. This is a Sidebar block.
+
+ This is a Sidebar block.
+ This is a Sidebar block.
+
+ - This is a Sidebar block. This is a Sidebar block.
+**************************
+
+<pathspec>...::
+ Files to add content from. Fileglobs (e.g. `*.c`) can be given to add all matching files.
+
+Some paragraph text. Some paragraph text. Some paragraph text. Some paragraph text. Some paragraph text. Some paragraph text.
diff --git a/t/fmt/asciidoc/CleanSpaces.po b/t/fmt/asciidoc/CleanSpaces.po
new file mode 100644
index 0000000..b7e163e
--- /dev/null
+++ b/t/fmt/asciidoc/CleanSpaces.po
@@ -0,0 +1,61 @@
+# SOME DESCRIPTIVE TITLE
+# Copyright (C) YEAR Free Software Foundation, Inc.
+# This file is distributed under the same license as the PACKAGE package.
+# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: PACKAGE VERSION\n"
+"POT-Creation-Date: 2024-02-28 21:46+0100\n"
+"PO-Revision-Date: 2024-02-28 21:47+0100\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
+"Language-Team: LANGUAGE <LL@li.org>\n"
+"Language: \n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+
+#. type: Title =
+#: CleanSpaces.adoc:2
+#, no-wrap
+msgid "Test Clean Spaces"
+msgstr "TEST CLEAN SPACES"
+
+#. type: delimited block *
+#: CleanSpaces.adoc:7 CleanSpaces.adoc:13
+msgid "This is a Sidebar block. This is a Sidebar block."
+msgstr "THIS IS A SIDEBAR BLOCK. THIS IS A SIDEBAR BLOCK."
+
+#. type: delimited block *
+#: CleanSpaces.adoc:10
+#, no-wrap
+msgid ""
+" This is a Sidebar block.\n"
+" This is a Sidebar block.\n"
+msgstr ""
+" THIS IS A SIDEBAR BLOCK.\n"
+" THIS IS A SIDEBAR BLOCK.\n"
+
+#. type: Labeled list
+#: CleanSpaces.adoc:15
+#, no-wrap
+msgid "<pathspec>..."
+msgstr "<PATHSPEC>..."
+
+#. type: Plain text
+#: CleanSpaces.adoc:18
+msgid ""
+"Files to add content from. Fileglobs (e.g. `*.c`) can be given to add all "
+"matching files."
+msgstr ""
+"FILES TO ADD CONTENT FROM. FILEGLOBS (E.G. `*.C`) CAN BE GIVEN TO ADD ALL "
+"MATCHING FILES."
+
+#. type: Plain text
+#: CleanSpaces.adoc:20
+msgid ""
+"Some paragraph text. Some paragraph text. Some paragraph text. Some "
+"paragraph text. Some paragraph text. Some paragraph text."
+msgstr ""
+"SOME PARAGRAPH TEXT. SOME PARAGRAPH TEXT. SOME PARAGRAPH TEXT. SOME "
+"PARAGRAPH TEXT. SOME PARAGRAPH TEXT. SOME PARAGRAPH TEXT."
diff --git a/t/fmt/asciidoc/CleanSpaces.pot b/t/fmt/asciidoc/CleanSpaces.pot
new file mode 100644
index 0000000..2646fec
--- /dev/null
+++ b/t/fmt/asciidoc/CleanSpaces.pot
@@ -0,0 +1,56 @@
+# SOME DESCRIPTIVE TITLE
+# Copyright (C) YEAR Free Software Foundation, Inc.
+# This file is distributed under the same license as the PACKAGE package.
+# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
+#
+#, fuzzy
+msgid ""
+msgstr ""
+"Project-Id-Version: PACKAGE VERSION\n"
+"POT-Creation-Date: 2024-02-28 21:46+0100\n"
+"PO-Revision-Date: 2024-02-28 21:48+0100\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
+"Language-Team: LANGUAGE <LL@li.org>\n"
+"Language: \n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+
+#. type: Title =
+#: CleanSpaces.adoc:2
+#, no-wrap
+msgid "Test Clean Spaces"
+msgstr ""
+
+#. type: delimited block *
+#: CleanSpaces.adoc:7 CleanSpaces.adoc:13
+msgid "This is a Sidebar block. This is a Sidebar block."
+msgstr ""
+
+#. type: delimited block *
+#: CleanSpaces.adoc:10
+#, no-wrap
+msgid ""
+" This is a Sidebar block.\n"
+" This is a Sidebar block.\n"
+msgstr ""
+
+#. type: Labeled list
+#: CleanSpaces.adoc:15
+#, no-wrap
+msgid "<pathspec>..."
+msgstr ""
+
+#. type: Plain text
+#: CleanSpaces.adoc:18
+msgid ""
+"Files to add content from. Fileglobs (e.g. `*.c`) can be given to add all "
+"matching files."
+msgstr ""
+
+#. type: Plain text
+#: CleanSpaces.adoc:20
+msgid ""
+"Some paragraph text. Some paragraph text. Some paragraph text. Some "
+"paragraph text. Some paragraph text. Some paragraph text."
+msgstr ""
diff --git a/t/fmt/asciidoc/CleanSpaces.trans b/t/fmt/asciidoc/CleanSpaces.trans
new file mode 100644
index 0000000..0068748
--- /dev/null
+++ b/t/fmt/asciidoc/CleanSpaces.trans
@@ -0,0 +1,16 @@
+TEST CLEAN SPACES
+=================
+
+**************************
+THIS IS A SIDEBAR BLOCK. THIS IS A SIDEBAR BLOCK.
+
+ THIS IS A SIDEBAR BLOCK.
+ THIS IS A SIDEBAR BLOCK.
+
+ - THIS IS A SIDEBAR BLOCK. THIS IS A SIDEBAR BLOCK.
+**************************
+
+<PATHSPEC>...::
+ FILES TO ADD CONTENT FROM. FILEGLOBS (E.G. `*.C`) CAN BE GIVEN TO ADD ALL MATCHING FILES.
+
+SOME PARAGRAPH TEXT. SOME PARAGRAPH TEXT. SOME PARAGRAPH TEXT. SOME PARAGRAPH TEXT. SOME PARAGRAPH TEXT. SOME PARAGRAPH TEXT.
diff --git a/t/fmt/asciidoc/Comments.adoc b/t/fmt/asciidoc/Comments.adoc
new file mode 100644
index 0000000..df2be1d
--- /dev/null
+++ b/t/fmt/asciidoc/Comments.adoc
@@ -0,0 +1,27 @@
+// This comment apppears
+// on two lines
+Test BlockTitles
+================
+
+.Notes
+- Note 1.
+// This commment is about item 1!
+- Note 2.
+// This commment is about item 2!
+
+
+// A comment before BlockTitle
+.Lorem ipsum
+Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod
+tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam,
+// And another comment within the paragraph
+quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo
+consequat.
+
+/////////////////////////////////////////////////////////////
+With a
+block comment
+/////////////////////////////////////////////////////////////
+Duis aute irure dolor in reprehenderit in voluptate velit esse cillum
+dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non
+proident, sunt in culpa qui officia deserunt mollit anim id est laborum.
diff --git a/t/fmt/asciidoc/Comments.norm b/t/fmt/asciidoc/Comments.norm
new file mode 100644
index 0000000..691fed1
--- /dev/null
+++ b/t/fmt/asciidoc/Comments.norm
@@ -0,0 +1,23 @@
+// This comment apppears
+// on two lines
+Test BlockTitles
+================
+
+.Notes
+- Note 1.
+// This commment is about item 1!
+- Note 2.
+// This commment is about item 2!
+
+
+// A comment before BlockTitle
+.Lorem ipsum
+Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam,
+// And another comment within the paragraph
+quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat.
+
+/////////////////////////////////////////////////////////////
+With a
+block comment
+/////////////////////////////////////////////////////////////
+Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.
diff --git a/t/fmt/asciidoc/Comments.po b/t/fmt/asciidoc/Comments.po
new file mode 100644
index 0000000..47627c7
--- /dev/null
+++ b/t/fmt/asciidoc/Comments.po
@@ -0,0 +1,82 @@
+# SOME DESCRIPTIVE TITLE
+# Copyright (C) YEAR Free Software Foundation, Inc.
+# This file is distributed under the same license as the PACKAGE package.
+# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
+#
+#, fuzzy
+msgid ""
+msgstr ""
+"Project-Id-Version: PACKAGE VERSION\n"
+"POT-Creation-Date: 2012-10-04 00:29+0300\n"
+"PO-Revision-Date: 2021-09-14 22:37+0200\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
+"Language-Team: LANGUAGE <LL@LI.ORG>\n"
+"Language: \n"
+"MIME-Version: 1.0\n"
+"Content-Type: TEXT/PLAIN; CHARSET=UTF-8\n"
+"Content-Transfer-Encoding: 8BIT\n"
+
+#. This comment apppears
+#. on two lines
+#. type: Title =
+#: Comments.adoc:4
+#, no-wrap
+msgid "Test BlockTitles"
+msgstr "TEST BLOCKTITLES"
+
+#. type: Block title
+#: Comments.adoc:6
+#, no-wrap
+msgid "Notes"
+msgstr "NOTES"
+
+#. This commment is about item 1!
+#. type: Plain text
+#: Comments.adoc:8
+msgid "Note 1."
+msgstr "NOTE 1."
+
+#. This commment is about item 2!
+#. type: Plain text
+#: Comments.adoc:10
+msgid "Note 2."
+msgstr "NOTE 2."
+
+#. A comment before BlockTitle
+#. type: Block title
+#: Comments.adoc:14
+#, no-wrap
+msgid "Lorem ipsum"
+msgstr "LOREM IPSUM"
+
+#. And another comment within the paragraph
+#. type: Plain text
+#: Comments.adoc:17
+msgid ""
+"Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod "
+"tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam,"
+msgstr ""
+"LOREM IPSUM DOLOR SIT AMET, CONSECTETUR ADIPISICING ELIT, SED DO EIUSMOD "
+"TEMPOR INCIDIDUNT UT LABORE ET DOLORE MAGNA ALIQUA. UT ENIM AD MINIM VENIAM,"
+
+#. type: Plain text
+#: Comments.adoc:20
+msgid ""
+"quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo "
+"consequat."
+msgstr ""
+"QUIS NOSTRUD EXERCITATION ULLAMCO LABORIS NISI UT ALIQUIP EX EA COMMODO "
+"CONSEQUAT."
+
+#. With a
+#. block comment
+#. type: Plain text
+#: Comments.adoc:27
+msgid ""
+"Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore "
+"eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, "
+"sunt in culpa qui officia deserunt mollit anim id est laborum."
+msgstr ""
+"DUIS AUTE IRURE DOLOR IN REPREHENDERIT IN VOLUPTATE VELIT ESSE CILLUM DOLORE "
+"EU FUGIAT NULLA PARIATUR. EXCEPTEUR SINT OCCAECAT CUPIDATAT NON PROIDENT, "
+"SUNT IN CULPA QUI OFFICIA DESERUNT MOLLIT ANIM ID EST LABORUM."
diff --git a/t/fmt/asciidoc/Comments.pot b/t/fmt/asciidoc/Comments.pot
new file mode 100644
index 0000000..706aa66
--- /dev/null
+++ b/t/fmt/asciidoc/Comments.pot
@@ -0,0 +1,75 @@
+# SOME DESCRIPTIVE TITLE
+# Copyright (C) YEAR Free Software Foundation, Inc.
+# This file is distributed under the same license as the PACKAGE package.
+# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
+#
+#, fuzzy
+msgid ""
+msgstr ""
+"Project-Id-Version: PACKAGE VERSION\n"
+"POT-Creation-Date: 2012-10-04 00:29+0300\n"
+"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
+"Language-Team: LANGUAGE <LL@li.org>\n"
+"Language: \n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+
+#. This comment apppears
+#. on two lines
+#. type: Title =
+#: Comments.adoc:4
+#, no-wrap
+msgid "Test BlockTitles"
+msgstr ""
+
+#. type: Block title
+#: Comments.adoc:6
+#, no-wrap
+msgid "Notes"
+msgstr ""
+
+#. This commment is about item 1!
+#. type: Plain text
+#: Comments.adoc:8
+msgid "Note 1."
+msgstr ""
+
+#. This commment is about item 2!
+#. type: Plain text
+#: Comments.adoc:10
+msgid "Note 2."
+msgstr ""
+
+#. A comment before BlockTitle
+#. type: Block title
+#: Comments.adoc:14
+#, no-wrap
+msgid "Lorem ipsum"
+msgstr ""
+
+#. And another comment within the paragraph
+#. type: Plain text
+#: Comments.adoc:17
+msgid ""
+"Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod "
+"tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam,"
+msgstr ""
+
+#. type: Plain text
+#: Comments.adoc:20
+msgid ""
+"quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo "
+"consequat."
+msgstr ""
+
+#. With a
+#. block comment
+#. type: Plain text
+#: Comments.adoc:27
+msgid ""
+"Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore "
+"eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, "
+"sunt in culpa qui officia deserunt mollit anim id est laborum."
+msgstr ""
diff --git a/t/fmt/asciidoc/Comments.trans b/t/fmt/asciidoc/Comments.trans
new file mode 100644
index 0000000..e5aad78
--- /dev/null
+++ b/t/fmt/asciidoc/Comments.trans
@@ -0,0 +1,23 @@
+// This comment apppears
+// on two lines
+TEST BLOCKTITLES
+================
+
+.NOTES
+- NOTE 1.
+// This commment is about item 1!
+- NOTE 2.
+// This commment is about item 2!
+
+
+// A comment before BlockTitle
+.LOREM IPSUM
+LOREM IPSUM DOLOR SIT AMET, CONSECTETUR ADIPISICING ELIT, SED DO EIUSMOD TEMPOR INCIDIDUNT UT LABORE ET DOLORE MAGNA ALIQUA. UT ENIM AD MINIM VENIAM,
+// And another comment within the paragraph
+QUIS NOSTRUD EXERCITATION ULLAMCO LABORIS NISI UT ALIQUIP EX EA COMMODO CONSEQUAT.
+
+/////////////////////////////////////////////////////////////
+With a
+block comment
+/////////////////////////////////////////////////////////////
+DUIS AUTE IRURE DOLOR IN REPREHENDERIT IN VOLUPTATE VELIT ESSE CILLUM DOLORE EU FUGIAT NULLA PARIATUR. EXCEPTEUR SINT OCCAECAT CUPIDATAT NON PROIDENT, SUNT IN CULPA QUI OFFICIA DESERUNT MOLLIT ANIM ID EST LABORUM.
diff --git a/t/fmt/asciidoc/DelimitedBlocks.adoc b/t/fmt/asciidoc/DelimitedBlocks.adoc
new file mode 100644
index 0000000..697c2d7
--- /dev/null
+++ b/t/fmt/asciidoc/DelimitedBlocks.adoc
@@ -0,0 +1,184 @@
+//po4a: style[,caption]
+Test Delimited Blocks
+=====================
+
+Predefined Delimited Blocks
+---------------------------
+
+CommentBlock
+
+//////////////////////////
+This is a Comment block.
+This is a Comment block.
+
+ This is a Comment block.
+ This is a Comment block.
+
+ - This is a Comment block.
+ This is a Comment block.
+//////////////////////////
+
+PassthroughBlock
+
+++++++++++++++++++++++++++
+This is a Passthrough block.
+This is a Passthrough block.
+
+ This is a Passthrough block.
+ This is a Passthrough block.
+
+ - This is a Passthrough block.
+ This is a Passthrough block.
+++++++++++++++++++++++++++
+
+ListingBlock
+
+--------------------------
+This is a Listing block.
+This is a Listing block.
+
+ This is a Listing block.
+ This is a Listing block.
+
+ - This is a Listing block.
+ This is a Listing block.
+--------------------------
+
+LiteralBlock
+
+..........................
+This is a Literal block.
+This is a Literal block.
+
+ This is a Literal block.
+ This is a Literal block.
+
+ - This is a Literal block.
+ This is a Literal block.
+..........................
+
+SidebarBlock
+
+**************************
+This is a Sidebar block.
+This is a Sidebar block.
+
+ This is a Sidebar block.
+ This is a Sidebar block.
+
+ - This is a Sidebar block.
+ This is a Sidebar block.
+**************************
+
+QuoteBlock
+
+__________________________
+This is a Quote block.
+This is a Quote block.
+
+ This is a Quote block.
+ This is a Quote block.
+
+ - This is a Quote block.
+ This is a Quote block.
+__________________________
+
+
+[quote, Bertrand Russell, The World of Mathematics (1956)]
+____________________________________________________________________
+A good notation has subtlety and suggestiveness which at times makes
+it almost seem like a live teacher.
+____________________________________________________________________
+
+[verse, William Blake, from Auguries of Innocence]
+__________________________________________________
+To see a world in a grain of sand,
+And a heaven in a wild flower,
+Hold infinity in the palm of your hand,
+And eternity in an hour.
+__________________________________________________
+
+ExampleBlock
+
+==========================
+This is a Example block.
+This is a Example block.
+
+ This is a Example block.
+ This is a Example block.
+
+ - This is a Example block.
+ This is a Example block.
+==========================
+
+.An example
+=====================================================================
+Qui in magna commodo, est labitur dolorum an. Est ne magna primis
+adolescens.
+=====================================================================
+
+[caption="Example 1: "]
+.An example with a custom caption
+=====================================================================
+Qui in magna commodo, est labitur dolorum an. Est ne magna primis
+adolescens.
+=====================================================================
+
+[NOTE]
+.A NOTE block
+=====================================================================
+Qui in magna commodo, est labitur dolorum an. Est ne magna primis
+adolescens.
+
+. Fusce euismod commodo velit.
+. Vivamus fringilla mi eu lacus.
+ .. Fusce euismod commodo velit.
+ .. Vivamus fringilla mi eu lacus.
+. Donec eget arcu bibendum
+ nunc consequat lobortis.
+=====================================================================
+
+Filter blocks
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~
+This is a Filter block.
+This is a Filter block.
+
+ This is a Filter block.
+ This is a Filter block.
+
+ - This is a Filter block.
+ This is a Filter block.
+~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+
+
+//////////////////////////
+test
+
+--------------------------
+Listing inside Comment
+--------------------------
+
+end of test
+//////////////////////////
+
+++++++++++++++++++++++++++
+test
+
+--------------------------
+Listing inside Passthrough
+--------------------------
+
+end of test
+++++++++++++++++++++++++++
+
+--------------------------
+test
+
+__________________________
+QuoteBlock inside Listing
+__________________________
+
+end of test
+--------------------------
diff --git a/t/fmt/asciidoc/DelimitedBlocks.norm b/t/fmt/asciidoc/DelimitedBlocks.norm
new file mode 100644
index 0000000..d3e8de8
--- /dev/null
+++ b/t/fmt/asciidoc/DelimitedBlocks.norm
@@ -0,0 +1,173 @@
+//po4a: style[,caption]
+Test Delimited Blocks
+=====================
+
+Predefined Delimited Blocks
+---------------------------
+
+CommentBlock
+
+//////////////////////////
+This is a Comment block.
+This is a Comment block.
+
+ This is a Comment block.
+ This is a Comment block.
+
+ - This is a Comment block.
+ This is a Comment block.
+//////////////////////////
+
+PassthroughBlock
+
+++++++++++++++++++++++++++
+This is a Passthrough block.
+This is a Passthrough block.
+
+ This is a Passthrough block.
+ This is a Passthrough block.
+
+ - This is a Passthrough block.
+ This is a Passthrough block.
+++++++++++++++++++++++++++
+
+ListingBlock
+
+--------------------------
+This is a Listing block.
+This is a Listing block.
+
+ This is a Listing block.
+ This is a Listing block.
+
+ - This is a Listing block.
+ This is a Listing block.
+--------------------------
+
+LiteralBlock
+
+..........................
+This is a Literal block.
+This is a Literal block.
+
+ This is a Literal block.
+ This is a Literal block.
+
+ - This is a Literal block.
+ This is a Literal block.
+..........................
+
+SidebarBlock
+
+**************************
+This is a Sidebar block. This is a Sidebar block.
+
+ This is a Sidebar block.
+ This is a Sidebar block.
+
+ - This is a Sidebar block. This is a Sidebar block.
+**************************
+
+QuoteBlock
+
+__________________________
+This is a Quote block. This is a Quote block.
+
+ This is a Quote block.
+ This is a Quote block.
+
+ - This is a Quote block. This is a Quote block.
+__________________________
+
+
+[quote, "Bertrand Russell", "The World of Mathematics (1956)"]
+____________________________________________________________________
+A good notation has subtlety and suggestiveness which at times makes it almost seem like a live teacher.
+____________________________________________________________________
+
+[verse, "William Blake", "from Auguries of Innocence"]
+__________________________________________________
+To see a world in a grain of sand,
+And a heaven in a wild flower,
+Hold infinity in the palm of your hand,
+And eternity in an hour.
+__________________________________________________
+
+ExampleBlock
+
+==========================
+This is a Example block. This is a Example block.
+
+ This is a Example block.
+ This is a Example block.
+
+ - This is a Example block. This is a Example block.
+==========================
+
+.An example
+=====================================================================
+Qui in magna commodo, est labitur dolorum an. Est ne magna primis adolescens.
+=====================================================================
+
+[caption="Example 1: "]
+.An example with a custom caption
+=====================================================================
+Qui in magna commodo, est labitur dolorum an. Est ne magna primis adolescens.
+=====================================================================
+
+[NOTE]
+.A NOTE block
+=====================================================================
+Qui in magna commodo, est labitur dolorum an. Est ne magna primis adolescens.
+
+. Fusce euismod commodo velit.
+. Vivamus fringilla mi eu lacus.
+ .. Fusce euismod commodo velit.
+ .. Vivamus fringilla mi eu lacus.
+. Donec eget arcu bibendum nunc consequat lobortis.
+=====================================================================
+
+Filter blocks
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~
+This is a Filter block.
+This is a Filter block.
+
+ This is a Filter block.
+ This is a Filter block.
+
+ - This is a Filter block.
+ This is a Filter block.
+~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+
+
+//////////////////////////
+test
+
+--------------------------
+Listing inside Comment
+--------------------------
+
+end of test
+//////////////////////////
+
+++++++++++++++++++++++++++
+test
+
+--------------------------
+Listing inside Passthrough
+--------------------------
+
+end of test
+++++++++++++++++++++++++++
+
+--------------------------
+test
+
+__________________________
+QuoteBlock inside Listing
+__________________________
+
+end of test
+--------------------------
diff --git a/t/fmt/asciidoc/DelimitedBlocks.po b/t/fmt/asciidoc/DelimitedBlocks.po
new file mode 100644
index 0000000..203bd37
--- /dev/null
+++ b/t/fmt/asciidoc/DelimitedBlocks.po
@@ -0,0 +1,341 @@
+# SOME DESCRIPTIVE TITLE
+# Copyright (C) YEAR Free Software Foundation, Inc.
+# This file is distributed under the same license as the PACKAGE package.
+# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
+#
+#, fuzzy
+msgid ""
+msgstr ""
+"Project-Id-Version: PACKAGE VERSION\n"
+"POT-Creation-Date: 2012-10-09 09:04+0300\n"
+"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
+"Language-Team: LANGUAGE <LL@LI.ORG>\n"
+"Language: \n"
+"MIME-Version: 1.0\n"
+"Content-Type: TEXT/PLAIN; CHARSET=UTF-8\n"
+"Content-Transfer-Encoding: 8BIT\n"
+
+#. type: Title =
+#: DelimitedBlocks.adoc:3
+#, no-wrap
+msgid "Test Delimited Blocks"
+msgstr "TEST DELIMITED BLOCKS"
+
+#. type: Title -
+#: DelimitedBlocks.adoc:6
+#, no-wrap
+msgid "Predefined Delimited Blocks"
+msgstr "PREDEFINED DELIMITED BLOCKS"
+
+#. type: Plain text
+#: DelimitedBlocks.adoc:9
+msgid "CommentBlock"
+msgstr "COMMENTBLOCK"
+
+#
+#
+#. This is a Comment block.
+#. This is a Comment block.
+#. This is a Comment block.
+#. This is a Comment block.
+#. - This is a Comment block.
+#. This is a Comment block.
+#. type: Plain text
+#: DelimitedBlocks.adoc:22
+msgid "PassthroughBlock"
+msgstr "PASSTHROUGHBLOCK"
+
+#. type: delimited block +
+#: DelimitedBlocks.adoc:26
+#, no-wrap
+msgid ""
+"This is a Passthrough block.\n"
+"This is a Passthrough block.\n"
+msgstr ""
+"THIS IS A PASSTHROUGH BLOCK.\n"
+"THIS IS A PASSTHROUGH BLOCK.\n"
+
+#. type: delimited block +
+#: DelimitedBlocks.adoc:29
+#, no-wrap
+msgid ""
+" This is a Passthrough block.\n"
+" This is a Passthrough block.\n"
+msgstr ""
+" THIS IS A PASSTHROUGH BLOCK.\n"
+" THIS IS A PASSTHROUGH BLOCK.\n"
+
+#. type: delimited block +
+#: DelimitedBlocks.adoc:32
+#, no-wrap
+msgid ""
+" - This is a Passthrough block.\n"
+" This is a Passthrough block.\n"
+msgstr ""
+" - THIS IS A PASSTHROUGH BLOCK.\n"
+" THIS IS A PASSTHROUGH BLOCK.\n"
+
+#. type: Plain text
+#: DelimitedBlocks.adoc:35
+msgid "ListingBlock"
+msgstr "LISTINGBLOCK"
+
+#. type: delimited block -
+#: DelimitedBlocks.adoc:39
+#, no-wrap
+msgid ""
+"This is a Listing block.\n"
+"This is a Listing block.\n"
+msgstr ""
+"THIS IS A LISTING BLOCK.\n"
+"THIS IS A LISTING BLOCK.\n"
+
+#. type: delimited block -
+#: DelimitedBlocks.adoc:42
+#, no-wrap
+msgid ""
+" This is a Listing block.\n"
+" This is a Listing block.\n"
+msgstr ""
+" THIS IS A LISTING BLOCK.\n"
+" THIS IS A LISTING BLOCK.\n"
+
+#. type: delimited block -
+#: DelimitedBlocks.adoc:45
+#, no-wrap
+msgid ""
+" - This is a Listing block.\n"
+" This is a Listing block.\n"
+msgstr ""
+" - THIS IS A LISTING BLOCK.\n"
+" THIS IS A LISTING BLOCK.\n"
+
+#. type: Plain text
+#: DelimitedBlocks.adoc:48
+msgid "LiteralBlock"
+msgstr "LITERALBLOCK"
+
+#. type: delimited block .
+#: DelimitedBlocks.adoc:52
+#, no-wrap
+msgid ""
+"This is a Literal block.\n"
+"This is a Literal block.\n"
+msgstr ""
+"THIS IS A LITERAL BLOCK.\n"
+"THIS IS A LITERAL BLOCK.\n"
+
+#. type: delimited block .
+#: DelimitedBlocks.adoc:55
+#, no-wrap
+msgid ""
+" This is a Literal block.\n"
+" This is a Literal block.\n"
+msgstr ""
+" THIS IS A LITERAL BLOCK.\n"
+" THIS IS A LITERAL BLOCK.\n"
+
+#. type: delimited block .
+#: DelimitedBlocks.adoc:58
+#, no-wrap
+msgid ""
+" - This is a Literal block.\n"
+" This is a Literal block.\n"
+msgstr ""
+" - THIS IS A LITERAL BLOCK.\n"
+" THIS IS A LITERAL BLOCK.\n"
+
+#. type: Plain text
+#: DelimitedBlocks.adoc:61
+msgid "SidebarBlock"
+msgstr "SIDEBARBLOCK"
+
+#. type: delimited block *
+#: DelimitedBlocks.adoc:65 DelimitedBlocks.adoc:71
+msgid "This is a Sidebar block. This is a Sidebar block."
+msgstr "THIS IS A SIDEBAR BLOCK. THIS IS A SIDEBAR BLOCK."
+
+#. type: delimited block *
+#: DelimitedBlocks.adoc:68
+#, no-wrap
+msgid ""
+" This is a Sidebar block.\n"
+" This is a Sidebar block.\n"
+msgstr ""
+" THIS IS A SIDEBAR BLOCK.\n"
+" THIS IS A SIDEBAR BLOCK.\n"
+
+#. type: Plain text
+#: DelimitedBlocks.adoc:74
+msgid "QuoteBlock"
+msgstr "QUOTEBLOCK"
+
+#. type: delimited block _
+#: DelimitedBlocks.adoc:78 DelimitedBlocks.adoc:84
+msgid "This is a Quote block. This is a Quote block."
+msgstr "THIS IS A QUOTE BLOCK. THIS IS A QUOTE BLOCK."
+
+#. type: delimited block _
+#: DelimitedBlocks.adoc:81
+#, no-wrap
+msgid ""
+" This is a Quote block.\n"
+" This is a Quote block.\n"
+msgstr ""
+" THIS IS A QUOTE BLOCK.\n"
+" THIS IS A QUOTE BLOCK.\n"
+
+#. type: Positional ($2) AttributeList argument for style 'quote'
+#: DelimitedBlocks.adoc:87
+#, no-wrap
+msgid "Bertrand Russell"
+msgstr "BERTRAND RUSSELL"
+
+#. type: Positional ($3) AttributeList argument for style 'quote'
+#: DelimitedBlocks.adoc:87
+#, no-wrap
+msgid "The World of Mathematics (1956)"
+msgstr "THE WORLD OF MATHEMATICS (1956)"
+
+#. type: delimited block _
+#: DelimitedBlocks.adoc:91
+msgid ""
+"A good notation has subtlety and suggestiveness which at times makes it "
+"almost seem like a live teacher."
+msgstr ""
+"A GOOD NOTATION HAS SUBTLETY AND SUGGESTIVENESS WHICH AT TIMES MAKES IT "
+"ALMOST SEEM LIKE A LIVE TEACHER."
+
+#. type: Positional ($2) AttributeList argument for style 'verse'
+#: DelimitedBlocks.adoc:93
+#, no-wrap
+msgid "William Blake"
+msgstr "WILLIAM BLAKE"
+
+#. type: Positional ($3) AttributeList argument for style 'verse'
+#: DelimitedBlocks.adoc:93
+#, no-wrap
+msgid "from Auguries of Innocence"
+msgstr "FROM AUGURIES OF INNOCENCE"
+
+#. type: delimited block _
+#: DelimitedBlocks.adoc:99
+#, no-wrap
+msgid ""
+"To see a world in a grain of sand,\n"
+"And a heaven in a wild flower,\n"
+"Hold infinity in the palm of your hand,\n"
+"And eternity in an hour.\n"
+msgstr ""
+"TO SEE A WORLD IN A GRAIN OF SAND,\n"
+"AND A HEAVEN IN A WILD FLOWER,\n"
+"HOLD INFINITY IN THE PALM OF YOUR HAND,\n"
+"AND ETERNITY IN AN HOUR.\n"
+
+#. type: Plain text
+#: DelimitedBlocks.adoc:102
+msgid "ExampleBlock"
+msgstr "EXAMPLEBLOCK"
+
+#. type: delimited block =
+#: DelimitedBlocks.adoc:106 DelimitedBlocks.adoc:112
+msgid "This is a Example block. This is a Example block."
+msgstr "THIS IS A EXAMPLE BLOCK. THIS IS A EXAMPLE BLOCK."
+
+#. type: delimited block =
+#: DelimitedBlocks.adoc:109
+#, no-wrap
+msgid ""
+" This is a Example block.\n"
+" This is a Example block.\n"
+msgstr ""
+" THIS IS A EXAMPLE BLOCK.\n"
+" THIS IS A EXAMPLE BLOCK.\n"
+
+#. type: Block title
+#: DelimitedBlocks.adoc:114
+#, no-wrap
+msgid "An example"
+msgstr "AN EXAMPLE"
+
+#. type: delimited block =
+#: DelimitedBlocks.adoc:118 DelimitedBlocks.adoc:125 DelimitedBlocks.adoc:132
+msgid ""
+"Qui in magna commodo, est labitur dolorum an. Est ne magna primis adolescens."
+msgstr ""
+"QUI IN MAGNA COMMODO, EST LABITUR DOLORUM AN. EST NE MAGNA PRIMIS ADOLESCENS."
+
+#. type: Named 'caption' AttributeList argument for style 'caption'
+#: DelimitedBlocks.adoc:120
+#, no-wrap
+msgid "Example 1: "
+msgstr "EXAMPLE 1: "
+
+#. type: Block title
+#: DelimitedBlocks.adoc:121
+#, no-wrap
+msgid "An example with a custom caption"
+msgstr "AN EXAMPLE WITH A CUSTOM CAPTION"
+
+#. type: Block title
+#: DelimitedBlocks.adoc:128
+#, no-wrap
+msgid "A NOTE block"
+msgstr "A NOTE BLOCK"
+
+#. type: delimited block =
+#: DelimitedBlocks.adoc:134 DelimitedBlocks.adoc:136
+msgid "Fusce euismod commodo velit."
+msgstr "FUSCE EUISMOD COMMODO VELIT."
+
+#. type: delimited block =
+#: DelimitedBlocks.adoc:135 DelimitedBlocks.adoc:137
+msgid "Vivamus fringilla mi eu lacus."
+msgstr "VIVAMUS FRINGILLA MI EU LACUS."
+
+#. type: delimited block =
+#: DelimitedBlocks.adoc:139
+msgid "Donec eget arcu bibendum nunc consequat lobortis."
+msgstr "DONEC EGET ARCU BIBENDUM NUNC CONSEQUAT LOBORTIS."
+
+#. type: Plain text
+#: DelimitedBlocks.adoc:142
+msgid "Filter blocks"
+msgstr "FILTER BLOCKS"
+
+#. type: delimited block -
+#: DelimitedBlocks.adoc:168 DelimitedBlocks.adoc:178
+#, no-wrap
+msgid "test\n"
+msgstr "TEST\n"
+
+#. type: delimited block +
+#: DelimitedBlocks.adoc:172
+#, no-wrap
+msgid ""
+"--------------------------\n"
+"Listing inside Passthrough\n"
+"--------------------------\n"
+msgstr ""
+"--------------------------\n"
+"LISTING INSIDE PASSTHROUGH\n"
+"--------------------------\n"
+
+#. type: delimited block -
+#: DelimitedBlocks.adoc:174 DelimitedBlocks.adoc:184
+#, no-wrap
+msgid "end of test\n"
+msgstr "END OF TEST\n"
+
+#. type: delimited block -
+#: DelimitedBlocks.adoc:182
+#, no-wrap
+msgid ""
+"__________________________\n"
+"QuoteBlock inside Listing\n"
+"__________________________\n"
+msgstr ""
+"__________________________\n"
+"QUOTEBLOCK INSIDE LISTING\n"
+"__________________________\n"
diff --git a/t/fmt/asciidoc/DelimitedBlocks.pot b/t/fmt/asciidoc/DelimitedBlocks.pot
new file mode 100644
index 0000000..2efe635
--- /dev/null
+++ b/t/fmt/asciidoc/DelimitedBlocks.pot
@@ -0,0 +1,305 @@
+# SOME DESCRIPTIVE TITLE
+# Copyright (C) YEAR Free Software Foundation, Inc.
+# This file is distributed under the same license as the PACKAGE package.
+# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
+#
+#, fuzzy
+msgid ""
+msgstr ""
+"Project-Id-Version: PACKAGE VERSION\n"
+"POT-Creation-Date: 2012-10-09 09:04+0300\n"
+"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
+"Language-Team: LANGUAGE <LL@li.org>\n"
+"Language: \n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+
+#. type: Title =
+#: DelimitedBlocks.adoc:3
+#, no-wrap
+msgid "Test Delimited Blocks"
+msgstr ""
+
+#. type: Title -
+#: DelimitedBlocks.adoc:6
+#, no-wrap
+msgid "Predefined Delimited Blocks"
+msgstr ""
+
+#. type: Plain text
+#: DelimitedBlocks.adoc:9
+msgid "CommentBlock"
+msgstr ""
+
+#. This is a Comment block.
+#. This is a Comment block.
+#
+#. This is a Comment block.
+#. This is a Comment block.
+#
+#. - This is a Comment block.
+#. This is a Comment block.
+#. type: Plain text
+#: DelimitedBlocks.adoc:22
+msgid "PassthroughBlock"
+msgstr ""
+
+#. type: delimited block +
+#: DelimitedBlocks.adoc:26
+#, no-wrap
+msgid ""
+"This is a Passthrough block.\n"
+"This is a Passthrough block.\n"
+msgstr ""
+
+#. type: delimited block +
+#: DelimitedBlocks.adoc:29
+#, no-wrap
+msgid ""
+" This is a Passthrough block.\n"
+" This is a Passthrough block.\n"
+msgstr ""
+
+#. type: delimited block +
+#: DelimitedBlocks.adoc:32
+#, no-wrap
+msgid ""
+" - This is a Passthrough block.\n"
+" This is a Passthrough block.\n"
+msgstr ""
+
+#. type: Plain text
+#: DelimitedBlocks.adoc:35
+msgid "ListingBlock"
+msgstr ""
+
+#. type: delimited block -
+#: DelimitedBlocks.adoc:39
+#, no-wrap
+msgid ""
+"This is a Listing block.\n"
+"This is a Listing block.\n"
+msgstr ""
+
+#. type: delimited block -
+#: DelimitedBlocks.adoc:42
+#, no-wrap
+msgid ""
+" This is a Listing block.\n"
+" This is a Listing block.\n"
+msgstr ""
+
+#. type: delimited block -
+#: DelimitedBlocks.adoc:45
+#, no-wrap
+msgid ""
+" - This is a Listing block.\n"
+" This is a Listing block.\n"
+msgstr ""
+
+#. type: Plain text
+#: DelimitedBlocks.adoc:48
+msgid "LiteralBlock"
+msgstr ""
+
+#. type: delimited block .
+#: DelimitedBlocks.adoc:52
+#, no-wrap
+msgid ""
+"This is a Literal block.\n"
+"This is a Literal block.\n"
+msgstr ""
+
+#. type: delimited block .
+#: DelimitedBlocks.adoc:55
+#, no-wrap
+msgid ""
+" This is a Literal block.\n"
+" This is a Literal block.\n"
+msgstr ""
+
+#. type: delimited block .
+#: DelimitedBlocks.adoc:58
+#, no-wrap
+msgid ""
+" - This is a Literal block.\n"
+" This is a Literal block.\n"
+msgstr ""
+
+#. type: Plain text
+#: DelimitedBlocks.adoc:61
+msgid "SidebarBlock"
+msgstr ""
+
+#. type: delimited block *
+#: DelimitedBlocks.adoc:65 DelimitedBlocks.adoc:71
+msgid "This is a Sidebar block. This is a Sidebar block."
+msgstr ""
+
+#. type: delimited block *
+#: DelimitedBlocks.adoc:68
+#, no-wrap
+msgid ""
+" This is a Sidebar block.\n"
+" This is a Sidebar block.\n"
+msgstr ""
+
+#. type: Plain text
+#: DelimitedBlocks.adoc:74
+msgid "QuoteBlock"
+msgstr ""
+
+#. type: delimited block _
+#: DelimitedBlocks.adoc:78 DelimitedBlocks.adoc:84
+msgid "This is a Quote block. This is a Quote block."
+msgstr ""
+
+#. type: delimited block _
+#: DelimitedBlocks.adoc:81
+#, no-wrap
+msgid ""
+" This is a Quote block.\n"
+" This is a Quote block.\n"
+msgstr ""
+
+#. type: Positional ($2) AttributeList argument for style 'quote'
+#: DelimitedBlocks.adoc:87
+#, no-wrap
+msgid "Bertrand Russell"
+msgstr ""
+
+#. type: Positional ($3) AttributeList argument for style 'quote'
+#: DelimitedBlocks.adoc:87
+#, no-wrap
+msgid "The World of Mathematics (1956)"
+msgstr ""
+
+#. type: delimited block _
+#: DelimitedBlocks.adoc:91
+msgid ""
+"A good notation has subtlety and suggestiveness which at times makes it "
+"almost seem like a live teacher."
+msgstr ""
+
+#. type: Positional ($2) AttributeList argument for style 'verse'
+#: DelimitedBlocks.adoc:93
+#, no-wrap
+msgid "William Blake"
+msgstr ""
+
+#. type: Positional ($3) AttributeList argument for style 'verse'
+#: DelimitedBlocks.adoc:93
+#, no-wrap
+msgid "from Auguries of Innocence"
+msgstr ""
+
+#. type: delimited block _
+#: DelimitedBlocks.adoc:99
+#, no-wrap
+msgid ""
+"To see a world in a grain of sand,\n"
+"And a heaven in a wild flower,\n"
+"Hold infinity in the palm of your hand,\n"
+"And eternity in an hour.\n"
+msgstr ""
+
+#. type: Plain text
+#: DelimitedBlocks.adoc:102
+msgid "ExampleBlock"
+msgstr ""
+
+#. type: delimited block =
+#: DelimitedBlocks.adoc:106 DelimitedBlocks.adoc:112
+msgid "This is a Example block. This is a Example block."
+msgstr ""
+
+#. type: delimited block =
+#: DelimitedBlocks.adoc:109
+#, no-wrap
+msgid ""
+" This is a Example block.\n"
+" This is a Example block.\n"
+msgstr ""
+
+#. type: Block title
+#: DelimitedBlocks.adoc:114
+#, no-wrap
+msgid "An example"
+msgstr ""
+
+#. type: delimited block =
+#: DelimitedBlocks.adoc:118 DelimitedBlocks.adoc:125 DelimitedBlocks.adoc:132
+msgid ""
+"Qui in magna commodo, est labitur dolorum an. Est ne magna primis "
+"adolescens."
+msgstr ""
+
+#. type: Named 'caption' AttributeList argument for style 'caption'
+#: DelimitedBlocks.adoc:120
+#, no-wrap
+msgid "Example 1: "
+msgstr ""
+
+#. type: Block title
+#: DelimitedBlocks.adoc:121
+#, no-wrap
+msgid "An example with a custom caption"
+msgstr ""
+
+#. type: Block title
+#: DelimitedBlocks.adoc:128
+#, no-wrap
+msgid "A NOTE block"
+msgstr ""
+
+#. type: delimited block =
+#: DelimitedBlocks.adoc:134 DelimitedBlocks.adoc:136
+msgid "Fusce euismod commodo velit."
+msgstr ""
+
+#. type: delimited block =
+#: DelimitedBlocks.adoc:135 DelimitedBlocks.adoc:137
+msgid "Vivamus fringilla mi eu lacus."
+msgstr ""
+
+#. type: delimited block =
+#: DelimitedBlocks.adoc:139
+msgid "Donec eget arcu bibendum nunc consequat lobortis."
+msgstr ""
+
+#. type: Plain text
+#: DelimitedBlocks.adoc:142
+msgid "Filter blocks"
+msgstr ""
+
+#. type: delimited block -
+#: DelimitedBlocks.adoc:168 DelimitedBlocks.adoc:178
+#, no-wrap
+msgid "test\n"
+msgstr ""
+
+#. type: delimited block +
+#: DelimitedBlocks.adoc:172
+#, no-wrap
+msgid ""
+"--------------------------\n"
+"Listing inside Passthrough\n"
+"--------------------------\n"
+msgstr ""
+
+#. type: delimited block -
+#: DelimitedBlocks.adoc:174 DelimitedBlocks.adoc:184
+#, no-wrap
+msgid "end of test\n"
+msgstr ""
+
+#. type: delimited block -
+#: DelimitedBlocks.adoc:182
+#, no-wrap
+msgid ""
+"__________________________\n"
+"QuoteBlock inside Listing\n"
+"__________________________\n"
+msgstr ""
diff --git a/t/fmt/asciidoc/DelimitedBlocks.trans b/t/fmt/asciidoc/DelimitedBlocks.trans
new file mode 100644
index 0000000..2529d89
--- /dev/null
+++ b/t/fmt/asciidoc/DelimitedBlocks.trans
@@ -0,0 +1,173 @@
+//po4a: style[,caption]
+TEST DELIMITED BLOCKS
+=====================
+
+PREDEFINED DELIMITED BLOCKS
+---------------------------
+
+COMMENTBLOCK
+
+//////////////////////////
+This is a Comment block.
+This is a Comment block.
+
+ This is a Comment block.
+ This is a Comment block.
+
+ - This is a Comment block.
+ This is a Comment block.
+//////////////////////////
+
+PASSTHROUGHBLOCK
+
+++++++++++++++++++++++++++
+THIS IS A PASSTHROUGH BLOCK.
+THIS IS A PASSTHROUGH BLOCK.
+
+ THIS IS A PASSTHROUGH BLOCK.
+ THIS IS A PASSTHROUGH BLOCK.
+
+ - THIS IS A PASSTHROUGH BLOCK.
+ THIS IS A PASSTHROUGH BLOCK.
+++++++++++++++++++++++++++
+
+LISTINGBLOCK
+
+--------------------------
+THIS IS A LISTING BLOCK.
+THIS IS A LISTING BLOCK.
+
+ THIS IS A LISTING BLOCK.
+ THIS IS A LISTING BLOCK.
+
+ - THIS IS A LISTING BLOCK.
+ THIS IS A LISTING BLOCK.
+--------------------------
+
+LITERALBLOCK
+
+..........................
+THIS IS A LITERAL BLOCK.
+THIS IS A LITERAL BLOCK.
+
+ THIS IS A LITERAL BLOCK.
+ THIS IS A LITERAL BLOCK.
+
+ - THIS IS A LITERAL BLOCK.
+ THIS IS A LITERAL BLOCK.
+..........................
+
+SIDEBARBLOCK
+
+**************************
+THIS IS A SIDEBAR BLOCK. THIS IS A SIDEBAR BLOCK.
+
+ THIS IS A SIDEBAR BLOCK.
+ THIS IS A SIDEBAR BLOCK.
+
+ - THIS IS A SIDEBAR BLOCK. THIS IS A SIDEBAR BLOCK.
+**************************
+
+QUOTEBLOCK
+
+__________________________
+THIS IS A QUOTE BLOCK. THIS IS A QUOTE BLOCK.
+
+ THIS IS A QUOTE BLOCK.
+ THIS IS A QUOTE BLOCK.
+
+ - THIS IS A QUOTE BLOCK. THIS IS A QUOTE BLOCK.
+__________________________
+
+
+[quote, "BERTRAND RUSSELL", "THE WORLD OF MATHEMATICS (1956)"]
+____________________________________________________________________
+A GOOD NOTATION HAS SUBTLETY AND SUGGESTIVENESS WHICH AT TIMES MAKES IT ALMOST SEEM LIKE A LIVE TEACHER.
+____________________________________________________________________
+
+[verse, "WILLIAM BLAKE", "FROM AUGURIES OF INNOCENCE"]
+__________________________________________________
+TO SEE A WORLD IN A GRAIN OF SAND,
+AND A HEAVEN IN A WILD FLOWER,
+HOLD INFINITY IN THE PALM OF YOUR HAND,
+AND ETERNITY IN AN HOUR.
+__________________________________________________
+
+EXAMPLEBLOCK
+
+==========================
+THIS IS A EXAMPLE BLOCK. THIS IS A EXAMPLE BLOCK.
+
+ THIS IS A EXAMPLE BLOCK.
+ THIS IS A EXAMPLE BLOCK.
+
+ - THIS IS A EXAMPLE BLOCK. THIS IS A EXAMPLE BLOCK.
+==========================
+
+.AN EXAMPLE
+=====================================================================
+QUI IN MAGNA COMMODO, EST LABITUR DOLORUM AN. EST NE MAGNA PRIMIS ADOLESCENS.
+=====================================================================
+
+[caption="EXAMPLE 1: "]
+.AN EXAMPLE WITH A CUSTOM CAPTION
+=====================================================================
+QUI IN MAGNA COMMODO, EST LABITUR DOLORUM AN. EST NE MAGNA PRIMIS ADOLESCENS.
+=====================================================================
+
+[NOTE]
+.A NOTE BLOCK
+=====================================================================
+QUI IN MAGNA COMMODO, EST LABITUR DOLORUM AN. EST NE MAGNA PRIMIS ADOLESCENS.
+
+. FUSCE EUISMOD COMMODO VELIT.
+. VIVAMUS FRINGILLA MI EU LACUS.
+ .. FUSCE EUISMOD COMMODO VELIT.
+ .. VIVAMUS FRINGILLA MI EU LACUS.
+. DONEC EGET ARCU BIBENDUM NUNC CONSEQUAT LOBORTIS.
+=====================================================================
+
+FILTER BLOCKS
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~
+This is a Filter block.
+This is a Filter block.
+
+ This is a Filter block.
+ This is a Filter block.
+
+ - This is a Filter block.
+ This is a Filter block.
+~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+
+
+//////////////////////////
+test
+
+--------------------------
+Listing inside Comment
+--------------------------
+
+end of test
+//////////////////////////
+
+++++++++++++++++++++++++++
+TEST
+
+--------------------------
+LISTING INSIDE PASSTHROUGH
+--------------------------
+
+END OF TEST
+++++++++++++++++++++++++++
+
+--------------------------
+TEST
+
+__________________________
+QUOTEBLOCK INSIDE LISTING
+__________________________
+
+END OF TEST
+--------------------------
diff --git a/t/fmt/asciidoc/Footnotes.adoc b/t/fmt/asciidoc/Footnotes.adoc
new file mode 100644
index 0000000..aecfee0
--- /dev/null
+++ b/t/fmt/asciidoc/Footnotes.adoc
@@ -0,0 +1,5 @@
+Test Footnotes
+==============
+
+A footnote footnote:[An example footnote.]
+
diff --git a/t/fmt/asciidoc/Footnotes.norm b/t/fmt/asciidoc/Footnotes.norm
new file mode 100644
index 0000000..aecfee0
--- /dev/null
+++ b/t/fmt/asciidoc/Footnotes.norm
@@ -0,0 +1,5 @@
+Test Footnotes
+==============
+
+A footnote footnote:[An example footnote.]
+
diff --git a/t/fmt/asciidoc/Footnotes.po b/t/fmt/asciidoc/Footnotes.po
new file mode 100644
index 0000000..85452e7
--- /dev/null
+++ b/t/fmt/asciidoc/Footnotes.po
@@ -0,0 +1,28 @@
+# SOME DESCRIPTIVE TITLE
+# Copyright (C) YEAR Free Software Foundation, Inc.
+# This file is distributed under the same license as the PACKAGE package.
+# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
+#
+#, fuzzy
+msgid ""
+msgstr ""
+"Project-Id-Version: PACKAGE VERSION\n"
+"POT-Creation-Date: 2008-10-12 19:55+0300\n"
+"PO-Revision-Date: 2008-10-12 22:04+0200\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
+"Language-Team: LANGUAGE <LL@LI.ORG>\n"
+"Language: \n"
+"MIME-Version: 1.0\n"
+"Content-Type: TEXT/PLAIN; CHARSET=UTF-8\n"
+"Content-Transfer-Encoding: 8BIT\n"
+
+#. type: Title =
+#: Footnotes.adoc:2
+#, no-wrap
+msgid "Test Footnotes"
+msgstr "TEST FOOTNOTES"
+
+#. type: Plain text
+#: Footnotes.adoc:5
+msgid "A footnote footnote:[An example footnote.]"
+msgstr "A FOOTNOTE FOOTNOTE:[AN EXAMPLE FOOTNOTE.]"
diff --git a/t/fmt/asciidoc/Footnotes.pot b/t/fmt/asciidoc/Footnotes.pot
new file mode 100644
index 0000000..e21fb89
--- /dev/null
+++ b/t/fmt/asciidoc/Footnotes.pot
@@ -0,0 +1,28 @@
+# SOME DESCRIPTIVE TITLE
+# Copyright (C) YEAR Free Software Foundation, Inc.
+# This file is distributed under the same license as the PACKAGE package.
+# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
+#
+#, fuzzy
+msgid ""
+msgstr ""
+"Project-Id-Version: PACKAGE VERSION\n"
+"POT-Creation-Date: 2008-10-12 19:55+0300\n"
+"PO-Revision-Date: 2008-10-12 22:04+0200\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
+"Language-Team: LANGUAGE <LL@li.org>\n"
+"Language: \n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+
+#. type: Title =
+#: Footnotes.adoc:2
+#, no-wrap
+msgid "Test Footnotes"
+msgstr ""
+
+#. type: Plain text
+#: Footnotes.adoc:5
+msgid "A footnote footnote:[An example footnote.]"
+msgstr ""
diff --git a/t/fmt/asciidoc/Footnotes.trans b/t/fmt/asciidoc/Footnotes.trans
new file mode 100644
index 0000000..89077ed
--- /dev/null
+++ b/t/fmt/asciidoc/Footnotes.trans
@@ -0,0 +1,5 @@
+TEST FOOTNOTES
+==============
+
+A FOOTNOTE FOOTNOTE:[AN EXAMPLE FOOTNOTE.]
+
diff --git a/t/fmt/asciidoc/IndexEntries.adoc b/t/fmt/asciidoc/IndexEntries.adoc
new file mode 100644
index 0000000..94059af
--- /dev/null
+++ b/t/fmt/asciidoc/IndexEntries.adoc
@@ -0,0 +1,18 @@
+== (((index entry 1)))a title
+
+(((index entry 1)))
+a paragraph preceded by an entry in the index
+
+a paragraph followed by an entry in the index(((index entry 2)))
+
+(((index entry 3)))(((index {entry} 4)))
+a paragraph preceded by two entries in the index
+
+(((index entry 3,subentry 1)))((("index entry 5","subentry 2, with comma")))
+a paragraph with entry and subentry
+
+indexterm:[index entry 1,subentry 1]
+a paragraph with other version of entry and subentry.
+
+* (((index {entry} 4)))A list item with an index entry
+ * A subitem with an index entry(((index entry 5)))
diff --git a/t/fmt/asciidoc/IndexEntries.norm b/t/fmt/asciidoc/IndexEntries.norm
new file mode 100644
index 0000000..e444551
--- /dev/null
+++ b/t/fmt/asciidoc/IndexEntries.norm
@@ -0,0 +1,14 @@
+== (((index entry 1)))a title
+
+(((index entry 1)))a paragraph preceded by an entry in the index
+
+(((index entry 2)))a paragraph followed by an entry in the index
+
+(((index entry 3)))(((index {entry} 4)))a paragraph preceded by two entries in the index
+
+(((index entry 3,subentry 1)))((("index entry 5","subentry 2, with comma")))a paragraph with entry and subentry
+
+(((index entry 1,subentry 1)))a paragraph with other version of entry and subentry.
+
+* (((index {entry} 4)))A list item with an index entry
+ * (((index entry 5)))A subitem with an index entry
diff --git a/t/fmt/asciidoc/IndexEntries.po b/t/fmt/asciidoc/IndexEntries.po
new file mode 100644
index 0000000..062cf53
--- /dev/null
+++ b/t/fmt/asciidoc/IndexEntries.po
@@ -0,0 +1,92 @@
+# SOME DESCRIPTIVE TITLE
+# Copyright (C) YEAR Free Software Foundation, Inc.
+# This file is distributed under the same license as the PACKAGE package.
+# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: PACKAGE VERSION\n"
+"POT-Creation-Date: 2023-06-07 21:17+0200\n"
+"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
+"Language-Team: LANGUAGE <LL@li.org>\n"
+"Language: \n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+
+#. type: Index entry
+#: IndexEntries.adoc:1 IndexEntries.adoc:5 IndexEntries.adoc:16
+msgid "index entry 1"
+msgstr "INDEX ENTRY 1"
+
+#. type: Title ==
+#: IndexEntries.adoc:1
+#, no-wrap
+msgid "a title"
+msgstr "A TITLE"
+
+#. type: Plain text
+#: IndexEntries.adoc:5
+msgid "a paragraph preceded by an entry in the index"
+msgstr "A PARAGRAPH PRECEDED BY AN ENTRY IN THE INDEX"
+
+#. type: Index entry
+#: IndexEntries.adoc:7
+msgid "index entry 2"
+msgstr "INDEX ENTRY 2"
+
+#. type: Plain text
+#: IndexEntries.adoc:7
+msgid "a paragraph followed by an entry in the index"
+msgstr "A PARAGRAPH FOLLOWED BY AN ENTRY IN THE INDEX"
+
+#. type: Index entry
+#: IndexEntries.adoc:10 IndexEntries.adoc:13
+msgid "index entry 3"
+msgstr "INDEX ENTRY 3"
+
+#. type: Index entry
+#: IndexEntries.adoc:10 IndexEntries.adoc:18
+msgid "index {entry} 4"
+msgstr "INDEX {ENTRY} 4"
+
+#. type: Plain text
+#: IndexEntries.adoc:10
+msgid "a paragraph preceded by two entries in the index"
+msgstr "A PARAGRAPH PRECEDED BY TWO ENTRIES IN THE INDEX"
+
+#. type: Index entry
+#: IndexEntries.adoc:13 IndexEntries.adoc:16
+msgid "subentry 1"
+msgstr "SUBENTRY 1"
+
+#. type: Index entry
+#: IndexEntries.adoc:13 IndexEntries.adoc:18
+msgid "index entry 5"
+msgstr "INDEX ENTRY 5"
+
+#. type: Index entry
+#: IndexEntries.adoc:13
+msgid "subentry 2, with comma"
+msgstr "SUBENTRY 2, WITH COMMA"
+
+#. type: Plain text
+#: IndexEntries.adoc:13
+msgid "a paragraph with entry and subentry"
+msgstr "A PARAGRAPH WITH ENTRY AND SUBENTRY"
+
+#. type: Plain text
+#: IndexEntries.adoc:16
+msgid "a paragraph with other version of entry and subentry."
+msgstr "A PARAGRAPH WITH OTHER VERSION OF ENTRY AND SUBENTRY."
+
+#. type: Plain text
+#: IndexEntries.adoc:18
+msgid "A list item with an index entry"
+msgstr "A LIST ITEM WITH AN INDEX ENTRY"
+
+#. type: Plain text
+#: IndexEntries.adoc:18
+msgid "A subitem with an index entry"
+msgstr "A SUBITEM WITH AN INDEX ENTRY"
diff --git a/t/fmt/asciidoc/IndexEntries.pot b/t/fmt/asciidoc/IndexEntries.pot
new file mode 100644
index 0000000..6cc00cb
--- /dev/null
+++ b/t/fmt/asciidoc/IndexEntries.pot
@@ -0,0 +1,93 @@
+# SOME DESCRIPTIVE TITLE
+# Copyright (C) YEAR Free Software Foundation, Inc.
+# This file is distributed under the same license as the PACKAGE package.
+# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
+#
+#, fuzzy
+msgid ""
+msgstr ""
+"Project-Id-Version: PACKAGE VERSION\n"
+"POT-Creation-Date: 2023-06-07 21:17+0200\n"
+"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
+"Language-Team: LANGUAGE <LL@li.org>\n"
+"Language: \n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+
+#. type: Index entry
+#: IndexEntries.adoc:1 IndexEntries.adoc:5 IndexEntries.adoc:16
+msgid "index entry 1"
+msgstr ""
+
+#. type: Title ==
+#: IndexEntries.adoc:1
+#, no-wrap
+msgid "a title"
+msgstr ""
+
+#. type: Plain text
+#: IndexEntries.adoc:5
+msgid "a paragraph preceded by an entry in the index"
+msgstr ""
+
+#. type: Index entry
+#: IndexEntries.adoc:7
+msgid "index entry 2"
+msgstr ""
+
+#. type: Plain text
+#: IndexEntries.adoc:7
+msgid "a paragraph followed by an entry in the index"
+msgstr ""
+
+#. type: Index entry
+#: IndexEntries.adoc:10 IndexEntries.adoc:13
+msgid "index entry 3"
+msgstr ""
+
+#. type: Index entry
+#: IndexEntries.adoc:10 IndexEntries.adoc:18
+msgid "index {entry} 4"
+msgstr ""
+
+#. type: Plain text
+#: IndexEntries.adoc:10
+msgid "a paragraph preceded by two entries in the index"
+msgstr ""
+
+#. type: Index entry
+#: IndexEntries.adoc:13 IndexEntries.adoc:16
+msgid "subentry 1"
+msgstr ""
+
+#. type: Index entry
+#: IndexEntries.adoc:13 IndexEntries.adoc:18
+msgid "index entry 5"
+msgstr ""
+
+#. type: Index entry
+#: IndexEntries.adoc:13
+msgid "subentry 2, with comma"
+msgstr ""
+
+#. type: Plain text
+#: IndexEntries.adoc:13
+msgid "a paragraph with entry and subentry"
+msgstr ""
+
+#. type: Plain text
+#: IndexEntries.adoc:16
+msgid "a paragraph with other version of entry and subentry."
+msgstr ""
+
+#. type: Plain text
+#: IndexEntries.adoc:18
+msgid "A list item with an index entry"
+msgstr ""
+
+#. type: Plain text
+#: IndexEntries.adoc:18
+msgid "A subitem with an index entry"
+msgstr ""
diff --git a/t/fmt/asciidoc/IndexEntries.trans b/t/fmt/asciidoc/IndexEntries.trans
new file mode 100644
index 0000000..64ef38b
--- /dev/null
+++ b/t/fmt/asciidoc/IndexEntries.trans
@@ -0,0 +1,14 @@
+== (((INDEX ENTRY 1)))A TITLE
+
+(((INDEX ENTRY 1)))A PARAGRAPH PRECEDED BY AN ENTRY IN THE INDEX
+
+(((INDEX ENTRY 2)))A PARAGRAPH FOLLOWED BY AN ENTRY IN THE INDEX
+
+(((INDEX ENTRY 3)))(((INDEX {ENTRY} 4)))A PARAGRAPH PRECEDED BY TWO ENTRIES IN THE INDEX
+
+(((INDEX ENTRY 3,SUBENTRY 1)))((("INDEX ENTRY 5","SUBENTRY 2, WITH COMMA")))A PARAGRAPH WITH ENTRY AND SUBENTRY
+
+(((INDEX ENTRY 1,SUBENTRY 1)))A PARAGRAPH WITH OTHER VERSION OF ENTRY AND SUBENTRY.
+
+* (((INDEX {ENTRY} 4)))A LIST ITEM WITH AN INDEX ENTRY
+ * (((INDEX ENTRY 5)))A SUBITEM WITH AN INDEX ENTRY
diff --git a/t/fmt/asciidoc/LineBreak.adoc b/t/fmt/asciidoc/LineBreak.adoc
new file mode 100644
index 0000000..e8856ff
--- /dev/null
+++ b/t/fmt/asciidoc/LineBreak.adoc
@@ -0,0 +1,37 @@
+= Linebreaks
+
+This is a paragraph with a linebreak,
+where the linebreak occurs on second line +
+The second part of the paragraph is on
+a second line.
+
+* We can do the same with a list item +
+After the linebreak, the bullet point is continued.
+* In this bullet point, the list item
+is continued on the next line. +
+Then the line is broken in a second part.
+
+..........................
+This is a Literal block. +
+This is a Literal block.
+..........................
+
+__________________________
+This is a Quote block. +
+This is a Quote block.
+__________________________
+
+. List item section 1
+. List item section 2 +
+ +
+Another section of list item 2
+
+Further text
+
+
+* List item section A
+* List item section B +
+ +
+Another section of list item B
+
+Further text
diff --git a/t/fmt/asciidoc/LineBreak.norm b/t/fmt/asciidoc/LineBreak.norm
new file mode 100644
index 0000000..44b0428
--- /dev/null
+++ b/t/fmt/asciidoc/LineBreak.norm
@@ -0,0 +1,34 @@
+= Linebreaks
+
+This is a paragraph with a linebreak, where the linebreak occurs on second line +
+The second part of the paragraph is on a second line.
+
+* We can do the same with a list item +
+After the linebreak, the bullet point is continued.
+* In this bullet point, the list item is continued on the next line. +
+Then the line is broken in a second part.
+
+..........................
+This is a Literal block. +
+This is a Literal block.
+..........................
+
+__________________________
+This is a Quote block. +
+This is a Quote block.
+__________________________
+
+. List item section 1
+. List item section 2 +
+ +
+Another section of list item 2
+
+Further text
+
+
+* List item section A
+* List item section B +
+ +
+Another section of list item B
+
+Further text
diff --git a/t/fmt/asciidoc/LineBreak.po b/t/fmt/asciidoc/LineBreak.po
new file mode 100644
index 0000000..009d79b
--- /dev/null
+++ b/t/fmt/asciidoc/LineBreak.po
@@ -0,0 +1,112 @@
+# SOME DESCRIPTIVE TITLE
+# Copyright (C) YEAR Free Software Foundation, Inc.
+# This file is distributed under the same license as the PACKAGE package.
+# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: PACKAGE VERSION\n"
+"POT-Creation-Date: 2021-10-03 19:13+0200\n"
+"PO-Revision-Date: 2022-06-28 17:39+0200\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
+"Language-Team: LANGUAGE <LL@li.org>\n"
+"Language: \n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+
+#. type: Title =
+#: LineBreak.adoc:1
+#, no-wrap
+msgid "Linebreaks"
+msgstr "LINEBREAKS"
+
+#. type: Plain text
+#: LineBreak.adoc:7
+#, no-wrap
+msgid ""
+"This is a paragraph with a linebreak, where the linebreak occurs on second "
+"line\n"
+"The second part of the paragraph is on a second line."
+msgstr ""
+"THIS IS A PARAGRAPH WITH A LINEBREAK, WHERE THE LINEBREAK OCCURS ON SECOND LINE\n"
+"THE SECOND PART OF THE PARAGRAPH IS ON A SECOND LINE."
+
+#. type: Plain text
+#: LineBreak.adoc:10
+#, no-wrap
+msgid ""
+"We can do the same with a list item\n"
+"After the linebreak, the bullet point is continued."
+msgstr ""
+"WE CAN DO THE SAME WITH A LIST ITEM\n"
+"AFTER THE LINEBREAK, THE BULLET POINT IS CONTINUED."
+
+#. type: Plain text
+#: LineBreak.adoc:13
+#, no-wrap
+msgid ""
+"In this bullet point, the list item is continued on the next line.\n"
+"Then the line is broken in a second part."
+msgstr ""
+"IN THIS BULLET POINT, THE LIST ITEM IS CONTINUED ON THE NEXT LINE.\n"
+"THEN THE LINE IS BROKEN IN A SECOND PART."
+
+#. type: delimited block .
+#: LineBreak.adoc:17
+#, no-wrap
+msgid ""
+"This is a Literal block. +\n"
+"This is a Literal block.\n"
+msgstr ""
+"THIS IS A LITERAL BLOCK. +\n"
+"THIS IS A LITERAL BLOCK.\n"
+
+#. type: delimited block _
+#: LineBreak.adoc:22
+#, no-wrap
+msgid ""
+"This is a Quote block.\n"
+"This is a Quote block."
+msgstr ""
+"THIS IS A QUOTE BLOCK.\n"
+"THIS IS A QUOTE BLOCK."
+
+#. type: Plain text
+#: LineBreak.adoc:25
+msgid "List item section 1"
+msgstr "LIST ITEM SECTION 1"
+
+#. type: Plain text
+#: LineBreak.adoc:28
+#, no-wrap
+msgid ""
+"List item section 2\n"
+"\n"
+"Another section of list item 2"
+msgstr ""
+"LIST ITEM SECTION 2\n"
+"\n"
+"ANOTHER SECTION OF LIST ITEM 2"
+
+#. type: Plain text
+#: LineBreak.adoc:30 LineBreak.adoc:37
+msgid "Further text"
+msgstr "FURTHER TEXT"
+
+#. type: Plain text
+#: LineBreak.adoc:33
+msgid "List item section A"
+msgstr "LIST ITEM SECTION A"
+
+#. type: Plain text
+#: LineBreak.adoc:36
+#, no-wrap
+msgid ""
+"List item section B\n"
+"\n"
+"Another section of list item B"
+msgstr ""
+"LIST ITEM SECTION B\n"
+"\n"
+"ANOTHER SECTION OF LIST ITEM B"
diff --git a/t/fmt/asciidoc/LineBreak.pot b/t/fmt/asciidoc/LineBreak.pot
new file mode 100644
index 0000000..144f0c2
--- /dev/null
+++ b/t/fmt/asciidoc/LineBreak.pot
@@ -0,0 +1,97 @@
+# SOME DESCRIPTIVE TITLE
+# Copyright (C) YEAR Free Software Foundation, Inc.
+# This file is distributed under the same license as the PACKAGE package.
+# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
+#
+#, fuzzy
+msgid ""
+msgstr ""
+"Project-Id-Version: PACKAGE VERSION\n"
+"POT-Creation-Date: 2021-10-03 19:13+0200\n"
+"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
+"Language-Team: LANGUAGE <LL@li.org>\n"
+"Language: \n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+
+#. type: Title =
+#: LineBreak.adoc:1
+#, no-wrap
+msgid "Linebreaks"
+msgstr ""
+
+#. type: Plain text
+#: LineBreak.adoc:7
+#, no-wrap
+msgid ""
+"This is a paragraph with a linebreak, where the linebreak occurs on second "
+"line\n"
+"The second part of the paragraph is on a second line."
+msgstr ""
+
+#. type: Plain text
+#: LineBreak.adoc:10
+#, no-wrap
+msgid ""
+"We can do the same with a list item\n"
+"After the linebreak, the bullet point is continued."
+msgstr ""
+
+#. type: Plain text
+#: LineBreak.adoc:13
+#, no-wrap
+msgid ""
+"In this bullet point, the list item is continued on the next line.\n"
+"Then the line is broken in a second part."
+msgstr ""
+
+#. type: delimited block .
+#: LineBreak.adoc:17
+#, no-wrap
+msgid ""
+"This is a Literal block. +\n"
+"This is a Literal block.\n"
+msgstr ""
+
+#. type: delimited block _
+#: LineBreak.adoc:22
+#, no-wrap
+msgid ""
+"This is a Quote block.\n"
+"This is a Quote block."
+msgstr ""
+
+#. type: Plain text
+#: LineBreak.adoc:25
+msgid "List item section 1"
+msgstr ""
+
+#. type: Plain text
+#: LineBreak.adoc:28
+#, no-wrap
+msgid ""
+"List item section 2\n"
+"\n"
+"Another section of list item 2"
+msgstr ""
+
+#. type: Plain text
+#: LineBreak.adoc:30 LineBreak.adoc:37
+msgid "Further text"
+msgstr ""
+
+#. type: Plain text
+#: LineBreak.adoc:33
+msgid "List item section A"
+msgstr ""
+
+#. type: Plain text
+#: LineBreak.adoc:36
+#, no-wrap
+msgid ""
+"List item section B\n"
+"\n"
+"Another section of list item B"
+msgstr ""
diff --git a/t/fmt/asciidoc/LineBreak.trans b/t/fmt/asciidoc/LineBreak.trans
new file mode 100644
index 0000000..b4bab24
--- /dev/null
+++ b/t/fmt/asciidoc/LineBreak.trans
@@ -0,0 +1,34 @@
+= LINEBREAKS
+
+THIS IS A PARAGRAPH WITH A LINEBREAK, WHERE THE LINEBREAK OCCURS ON SECOND LINE +
+THE SECOND PART OF THE PARAGRAPH IS ON A SECOND LINE.
+
+* WE CAN DO THE SAME WITH A LIST ITEM +
+AFTER THE LINEBREAK, THE BULLET POINT IS CONTINUED.
+* IN THIS BULLET POINT, THE LIST ITEM IS CONTINUED ON THE NEXT LINE. +
+THEN THE LINE IS BROKEN IN A SECOND PART.
+
+..........................
+THIS IS A LITERAL BLOCK. +
+THIS IS A LITERAL BLOCK.
+..........................
+
+__________________________
+THIS IS A QUOTE BLOCK. +
+THIS IS A QUOTE BLOCK.
+__________________________
+
+. LIST ITEM SECTION 1
+. LIST ITEM SECTION 2 +
+ +
+ANOTHER SECTION OF LIST ITEM 2
+
+FURTHER TEXT
+
+
+* LIST ITEM SECTION A
+* LIST ITEM SECTION B +
+ +
+ANOTHER SECTION OF LIST ITEM B
+
+FURTHER TEXT
diff --git a/t/fmt/asciidoc/Lists.adoc b/t/fmt/asciidoc/Lists.adoc
new file mode 100644
index 0000000..bc5fb3d
--- /dev/null
+++ b/t/fmt/asciidoc/Lists.adoc
@@ -0,0 +1,252 @@
+Test Lists
+==========
+
+Bulleted and Numbered Lists
+---------------------------
+
+- List item.
+- List item which content
+spans over several lines (missing leading indent)
+* List item.
+
+. Integer numbered list item.
+1. Integer numbered list item with optional numbering.
+.. Lowercase letter numbered list item.
+a. Lowercase letter numbered list item with optional numbering.
+... Third level of numbered list.
+
+- Lorem ipsum dolor sit amet, consectetuer adipiscing elit.
+ * Fusce euismod commodo velit.
+ * Qui in magna commodo, est labitur dolorum an. Est ne magna primis
+ adolescens. Sit munere ponderum dignissim et. Minim luptatum et
+ vel.
+ * Vivamus fringilla mi eu lacus.
+ * Donec eget arcu bibendum nunc consequat lobortis.
+- Nulla porttitor vulputate libero.
+ . Fusce euismod commodo velit.
+ . Vivamus fringilla mi eu lacus.
+ .. Fusce euismod commodo velit.
+ .. Vivamus fringilla mi eu lacus.
+ . Donec eget arcu bibendum nunc consequat lobortis.
+- Praesent eget purus quis magna eleifend eleifend.
+ 1. Fusce euismod commodo velit.
+ a. Fusce euismod commodo velit.
+ b. Vivamus fringilla mi eu lacus.
+ c. Donec eget arcu bibendum nunc consequat lobortis.
+ 2. Vivamus fringilla mi eu lacus.
+ 3. Donec eget arcu bibendum nunc consequat lobortis.
+ 4. Nam fermentum mattis ante.
+
+* List Item 1
+** Non-indented new list Item
+** Another Item
+* List Item 2
+* List Item 3
+** Non-indented new list Item 2
+
+Vertical Labeled Lists
+----------------------
+
+Lorem::
+ Fusce euismod commodo velit.
+
+ Fusce euismod commodo velit.
+
+Ipsum::
+ Vivamus fringilla mi eu lacus.
+ * Vivamus fringilla mi eu lacus.
+ * Donec eget arcu bibendum nunc consequat lobortis.
+Dolor::
+ Donec eget arcu bibendum nunc consequat lobortis.
+ Suspendisse;;
+ A massa id sem aliquam auctor.
+ Morbi;;
+ Pretium nulla vel lorem.
+ In;;
+ Dictum mauris in urna.
+
+<pathspec>...::
+ Files to add content from. Fileglobs (e.g. `*.c`) can
+ be given to add all matching files.
+
+-n::
+--dry-run::
+ Don't actually add the file(s), just show if they exist and/or will
+ be ignored.
+
+\--::
+ This option can be used to separate command-line options from
+ the list of files, (useful when filenames might be mistaken
+ for command-line options).
+
+[<refname>...]::
+ A list of references used to limit the references reported as
+ available.
+
+$(prefix)/etc/gitconfig::
+ System-wide configuration file.
+
+~/.gitconfig::
+ User-specific configuration file. Also called "global"
+ configuration file.
+
+%G::
+ Git directory name
+
+Horizontal Labeled Lists
+------------------------
+
+*Lorem*:: Fusce euismod commodo velit. Qui in magna commodo, est
+labitur dolorum an. Est ne magna primis adolescens.
+
+ Fusce euismod commodo velit.
+ Fusce euismod commodo velit.
+
+*Ipsum*:: Vivamus fringilla mi eu lacus.
+- Vivamus fringilla mi eu lacus.
+- Donec eget arcu bibendum nunc consequat lobortis.
+
+*Dolor*:: \
+ - Vivamus fringilla mi eu lacus.
+ - Donec eget arcu bibendum nunc consequat lobortis.
+
+*Lorem*:: Fusce euismod commodo velit. Qui in magna
+ commodo, est labitur dolorum an. Est ne magna
+ primis adolescens.
+
+*Lorem*::: Fusce euismod commodo velit. Qui in magna
+ commodo, est labitur dolorum an. Est ne magna
+ primis adolescens.
+
+*Dolor*:::
+ Vivamus fringilla mi eu lacus.
+
+|::
+ Vivamus fringilla mi eu lacus.
+
+{var}Dolor:: Donec eget arcu bibendum nunc consequat lobortis.
+
+Question and Answer Lists
+-------------------------
+Question one??
+ Answer one.
+Question two??
+ Answer two.
+
+Glossary Lists
+--------------
+
+A glossary term:-
+ The corresponding definition.
+A second glossary term:-
+ The corresponding definition.
+
+Bibliography Lists
+------------------
+
++ [[[taoup]]] Eric Steven Raymond. 'The Art of UNIX
+ Programming'. Addison-Wesley. ISBN 0-13-142901-9.
++ [[[walsh-muellner]]] Norman Walsh & Leonard Muellner.
+ 'DocBook - The Definitive Guide'. O'Reilly & Associates. 1999.
+ ISBN 1-56592-580-7.
+
+The same in a bibliography section, and without the doc typo
+
+Bibliography
+------------
++ [[[taoup]]] Eric Steven Raymond. 'The Art of UNIX
+ Programming'. Addison-Wesley. ISBN 0-13-142901-9.
++ [[[walsh-muellner]]] Norman Walsh & Leonard Muellner.
+ 'DocBook - The Definitive Guide'. O'Reilly & Associates. 1999.
+ ISBN 1-56592-580-7.
+
+List Item Continuation
+----------------------
+
+1. List item one.
++
+List item one continued with a second paragraph followed by an
+Indented block.
++
+.................
+$ ls *.sh
+$ mv *.sh ~/tmp
+.................
++
+List item one continued with a third paragraph.
+
+2. List item two.
+
+ List item two literal paragraph (no continuation required).
+ (but this should not be wrapped).
+
+- Nested list (item one).
+
+ Nested list literal paragraph (no continuation required).
+ (but this should not be wrapped).
++
+Nested list appended list item one paragraph
+
+- Nested list item two.
+
+
+List Block
+----------
+
+.Nested List Block
+1. List item one.
++
+This paragraph is part of the preceding list item
++
+--
+a. This list is nested and does not require explicit item continuation.
+
+This paragraph is part of the preceding list item
+
+b. List item b.
+
+This paragraph belongs to list item b.
+--
++
+This paragraph belongs to item 1.
+
+2. Item 2 of the outer list.
+
+.Literal Paragraph in a Vertical Labeled Lists
+
+This comes from the git doc, on which po4a used to fail miserably.
+
+patch::
+
+ This lets you choose one path out of a 'status' like selection. After choosing the path, it presents the diff between the index and the working tree file and asks you if you want to stage the change of each hunk. You can select one of the following options and type return:
+
+ y - stage this hunk
+ n - do not stage this hunk
+ q - quit; do not stage this hunk or any of the remaining ones
+ a - stage this hunk and all later hunks in the file
+ d - do not stage this hunk or any of the later hunks in the file
+ g - select a hunk to go to
+ / - search for a hunk matching the given regex
+ j - leave this hunk undecided, see next undecided hunk
+ J - leave this hunk undecided, see next hunk
+ k - leave this hunk undecided, see previous undecided hunk
+ K - leave this hunk undecided, see previous hunk
+ s - split the current hunk into smaller hunks
+ e - manually edit the current hunk
+ ? - print help
++
+After deciding the fate for all hunks, if there is any hunk that was chosen, the index is updated with the selected hunks.
+
+. First level
+.. Second level
+... Third level
+.... Fourth level
+..... Fifth level
+
+* [ ] Unchecked
+* [x] Checked
+* [X] Checked
+* [*] Checked
+
+1. *starting* with
+ a strong item
diff --git a/t/fmt/asciidoc/Lists.norm b/t/fmt/asciidoc/Lists.norm
new file mode 100644
index 0000000..5b09f20
--- /dev/null
+++ b/t/fmt/asciidoc/Lists.norm
@@ -0,0 +1,230 @@
+Test Lists
+==========
+
+Bulleted and Numbered Lists
+---------------------------
+
+- List item.
+- List item which content spans over several lines (missing leading indent)
+* List item.
+
+. Integer numbered list item.
+1. Integer numbered list item with optional numbering.
+.. Lowercase letter numbered list item.
+a. Lowercase letter numbered list item with optional numbering.
+... Third level of numbered list.
+
+- Lorem ipsum dolor sit amet, consectetuer adipiscing elit.
+ * Fusce euismod commodo velit.
+ * Qui in magna commodo, est labitur dolorum an. Est ne magna primis adolescens. Sit munere ponderum dignissim et. Minim luptatum et vel.
+ * Vivamus fringilla mi eu lacus.
+ * Donec eget arcu bibendum nunc consequat lobortis.
+- Nulla porttitor vulputate libero.
+ . Fusce euismod commodo velit.
+ . Vivamus fringilla mi eu lacus.
+ .. Fusce euismod commodo velit.
+ .. Vivamus fringilla mi eu lacus.
+ . Donec eget arcu bibendum nunc consequat lobortis.
+- Praesent eget purus quis magna eleifend eleifend.
+ 1. Fusce euismod commodo velit.
+ a. Fusce euismod commodo velit.
+ b. Vivamus fringilla mi eu lacus.
+ c. Donec eget arcu bibendum nunc consequat lobortis.
+ 2. Vivamus fringilla mi eu lacus.
+ 3. Donec eget arcu bibendum nunc consequat lobortis.
+ 4. Nam fermentum mattis ante.
+
+* List Item 1
+** Non-indented new list Item
+** Another Item
+* List Item 2
+* List Item 3
+** Non-indented new list Item 2
+
+Vertical Labeled Lists
+----------------------
+
+Lorem::
+ Fusce euismod commodo velit.
+
+ Fusce euismod commodo velit.
+
+Ipsum::
+ Vivamus fringilla mi eu lacus.
+ * Vivamus fringilla mi eu lacus.
+ * Donec eget arcu bibendum nunc consequat lobortis.
+Dolor::
+ Donec eget arcu bibendum nunc consequat lobortis.
+ Suspendisse;;
+ A massa id sem aliquam auctor.
+ Morbi;;
+ Pretium nulla vel lorem.
+ In;;
+ Dictum mauris in urna.
+
+<pathspec>...::
+ Files to add content from. Fileglobs (e.g. `*.c`) can be given to add all matching files.
+
+-n::
+--dry-run::
+ Don't actually add the file(s), just show if they exist and/or will be ignored.
+
+\--::
+ This option can be used to separate command-line options from the list of files, (useful when filenames might be mistaken for command-line options).
+
+[<refname>...]::
+ A list of references used to limit the references reported as available.
+
+$(prefix)/etc/gitconfig::
+ System-wide configuration file.
+
+~/.gitconfig::
+ User-specific configuration file. Also called "global" configuration file.
+
+%G::
+ Git directory name
+
+Horizontal Labeled Lists
+------------------------
+
+*Lorem*:: Fusce euismod commodo velit. Qui in magna commodo, est labitur dolorum an. Est ne magna primis adolescens.
+
+ Fusce euismod commodo velit.
+ Fusce euismod commodo velit.
+
+*Ipsum*:: Vivamus fringilla mi eu lacus.
+- Vivamus fringilla mi eu lacus.
+- Donec eget arcu bibendum nunc consequat lobortis.
+
+*Dolor*:: \
+ - Vivamus fringilla mi eu lacus.
+ - Donec eget arcu bibendum nunc consequat lobortis.
+
+*Lorem*:: Fusce euismod commodo velit. Qui in magna commodo, est labitur dolorum an. Est ne magna primis adolescens.
+
+*Lorem*::: Fusce euismod commodo velit. Qui in magna commodo, est labitur dolorum an. Est ne magna primis adolescens.
+
+*Dolor*:::
+ Vivamus fringilla mi eu lacus.
+
+|::
+ Vivamus fringilla mi eu lacus.
+
+{var}Dolor:: Donec eget arcu bibendum nunc consequat lobortis.
+
+Question and Answer Lists
+-------------------------
+Question one??
+ Answer one.
+Question two??
+ Answer two.
+
+Glossary Lists
+--------------
+
+A glossary term:-
+ The corresponding definition.
+A second glossary term:-
+ The corresponding definition.
+
+Bibliography Lists
+------------------
+
++ [[[taoup]]] Eric Steven Raymond. 'The Art of UNIX Programming'. Addison-Wesley. ISBN 0-13-142901-9.
++ [[[walsh-muellner]]] Norman Walsh & Leonard Muellner. 'DocBook - The Definitive Guide'. O'Reilly & Associates. 1999. ISBN 1-56592-580-7.
+
+The same in a bibliography section, and without the doc typo
+
+Bibliography
+------------
++ [[[taoup]]] Eric Steven Raymond. 'The Art of UNIX Programming'. Addison-Wesley. ISBN 0-13-142901-9.
++ [[[walsh-muellner]]] Norman Walsh & Leonard Muellner. 'DocBook - The Definitive Guide'. O'Reilly & Associates. 1999. ISBN 1-56592-580-7.
+
+List Item Continuation
+----------------------
+
+1. List item one.
++
+List item one continued with a second paragraph followed by an Indented block.
++
+.................
+$ ls *.sh
+$ mv *.sh ~/tmp
+.................
++
+List item one continued with a third paragraph.
+
+2. List item two.
+
+ List item two literal paragraph (no continuation required).
+ (but this should not be wrapped).
+
+- Nested list (item one).
+
+ Nested list literal paragraph (no continuation required).
+ (but this should not be wrapped).
++
+Nested list appended list item one paragraph
+
+- Nested list item two.
+
+
+List Block
+----------
+
+.Nested List Block
+1. List item one.
++
+This paragraph is part of the preceding list item
++
+--
+a. This list is nested and does not require explicit item continuation.
+
+This paragraph is part of the preceding list item
+
+b. List item b.
+
+This paragraph belongs to list item b.
+--
++
+This paragraph belongs to item 1.
+
+2. Item 2 of the outer list.
+
+.Literal Paragraph in a Vertical Labeled Lists
+
+This comes from the git doc, on which po4a used to fail miserably.
+
+patch::
+
+ This lets you choose one path out of a 'status' like selection. After choosing the path, it presents the diff between the index and the working tree file and asks you if you want to stage the change of each hunk. You can select one of the following options and type return:
+
+ y - stage this hunk
+ n - do not stage this hunk
+ q - quit; do not stage this hunk or any of the remaining ones
+ a - stage this hunk and all later hunks in the file
+ d - do not stage this hunk or any of the later hunks in the file
+ g - select a hunk to go to
+ / - search for a hunk matching the given regex
+ j - leave this hunk undecided, see next undecided hunk
+ J - leave this hunk undecided, see next hunk
+ k - leave this hunk undecided, see previous undecided hunk
+ K - leave this hunk undecided, see previous hunk
+ s - split the current hunk into smaller hunks
+ e - manually edit the current hunk
+ ? - print help
++
+After deciding the fate for all hunks, if there is any hunk that was chosen, the index is updated with the selected hunks.
+
+. First level
+.. Second level
+... Third level
+.... Fourth level
+..... Fifth level
+
+* [ ] Unchecked
+* [x] Checked
+* [X] Checked
+* [*] Checked
+
+1. *starting* with a strong item
diff --git a/t/fmt/asciidoc/Lists.norm.stderr b/t/fmt/asciidoc/Lists.norm.stderr
new file mode 100644
index 0000000..b858cc9
--- /dev/null
+++ b/t/fmt/asciidoc/Lists.norm.stderr
@@ -0,0 +1 @@
+Lists.adoc:9: It seems that you are adding unindented content to an item. The standard allows this, but you may still want to change your document to use indented text to provide better visual clues to writers.
diff --git a/t/fmt/asciidoc/Lists.po b/t/fmt/asciidoc/Lists.po
new file mode 100644
index 0000000..a649e5d
--- /dev/null
+++ b/t/fmt/asciidoc/Lists.po
@@ -0,0 +1,669 @@
+# SOME DESCRIPTIVE TITLE
+# Copyright (C) YEAR Free Software Foundation, Inc.
+# This file is distributed under the same license as the PACKAGE package.
+# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: PACKAGE VERSION\n"
+"POT-Creation-Date: 2020-10-15 22:04+0200\n"
+"PO-Revision-Date: 2020-10-15 22:16+0200\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
+"Language-Team: LANGUAGE <LL@li.org>\n"
+"Language: \n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+
+#. type: Title =
+#: Lists.adoc:2
+#, no-wrap
+msgid "Test Lists"
+msgstr "TEST LISTS"
+
+#. type: Title -
+#: Lists.adoc:5
+#, no-wrap
+msgid "Bulleted and Numbered Lists"
+msgstr "BULLETED AND NUMBERED LISTS"
+
+#. type: Plain text
+#: Lists.adoc:8 Lists.adoc:11
+msgid "List item."
+msgstr "LIST ITEM."
+
+#. type: Plain text
+#: Lists.adoc:10
+msgid ""
+"List item which content spans over several lines (missing leading indent)"
+msgstr ""
+"LIST ITEM WHICH CONTENT SPANS OVER SEVERAL LINES (MISSING LEADING INDENT)"
+
+#. type: Plain text
+#: Lists.adoc:13
+msgid "Integer numbered list item."
+msgstr "INTEGER NUMBERED LIST ITEM."
+
+#. type: Plain text
+#: Lists.adoc:14
+msgid "Integer numbered list item with optional numbering."
+msgstr "INTEGER NUMBERED LIST ITEM WITH OPTIONAL NUMBERING."
+
+#. type: Plain text
+#: Lists.adoc:15
+msgid "Lowercase letter numbered list item."
+msgstr "LOWERCASE LETTER NUMBERED LIST ITEM."
+
+#. type: Plain text
+#: Lists.adoc:16
+msgid "Lowercase letter numbered list item with optional numbering."
+msgstr "LOWERCASE LETTER NUMBERED LIST ITEM WITH OPTIONAL NUMBERING."
+
+#. type: Plain text
+#: Lists.adoc:17
+msgid "Third level of numbered list."
+msgstr "THIRD LEVEL OF NUMBERED LIST."
+
+#. type: Plain text
+#: Lists.adoc:19
+msgid "Lorem ipsum dolor sit amet, consectetuer adipiscing elit."
+msgstr "LOREM IPSUM DOLOR SIT AMET, CONSECTETUER ADIPISCING ELIT."
+
+#. type: Plain text
+#: Lists.adoc:20 Lists.adoc:27 Lists.adoc:29 Lists.adoc:33 Lists.adoc:34
+#: Lists.adoc:52 Lists.adoc:54
+msgid "Fusce euismod commodo velit."
+msgstr "FUSCE EUISMOD COMMODO VELIT."
+
+#. type: Plain text
+#: Lists.adoc:23
+msgid ""
+"Qui in magna commodo, est labitur dolorum an. Est ne magna primis "
+"adolescens. Sit munere ponderum dignissim et. Minim luptatum et vel."
+msgstr ""
+"QUI IN MAGNA COMMODO, EST LABITUR DOLORUM AN. EST NE MAGNA PRIMIS "
+"ADOLESCENS. SIT MUNERE PONDERUM DIGNISSIM ET. MINIM LUPTATUM ET VEL."
+
+#. type: Plain text
+#: Lists.adoc:24 Lists.adoc:28 Lists.adoc:30 Lists.adoc:35 Lists.adoc:37
+#: Lists.adoc:57 Lists.adoc:58 Lists.adoc:106 Lists.adoc:107 Lists.adoc:111
+#: Lists.adoc:123 Lists.adoc:126
+msgid "Vivamus fringilla mi eu lacus."
+msgstr "VIVAMUS FRINGILLA MI EU LACUS."
+
+#. type: Plain text
+#: Lists.adoc:25 Lists.adoc:31 Lists.adoc:36 Lists.adoc:38 Lists.adoc:59
+#: Lists.adoc:61 Lists.adoc:108 Lists.adoc:112 Lists.adoc:128
+msgid "Donec eget arcu bibendum nunc consequat lobortis."
+msgstr "DONEC EGET ARCU BIBENDUM NUNC CONSEQUAT LOBORTIS."
+
+#. type: Plain text
+#: Lists.adoc:26
+msgid "Nulla porttitor vulputate libero."
+msgstr "NULLA PORTTITOR VULPUTATE LIBERO."
+
+#. type: Plain text
+#: Lists.adoc:32
+msgid "Praesent eget purus quis magna eleifend eleifend."
+msgstr "PRAESENT EGET PURUS QUIS MAGNA ELEIFEND ELEIFEND."
+
+#. type: Plain text
+#: Lists.adoc:39
+msgid "Nam fermentum mattis ante."
+msgstr "NAM FERMENTUM MATTIS ANTE."
+
+#. type: Plain text
+#: Lists.adoc:41
+msgid "List Item 1"
+msgstr "LIST ITEM 1"
+
+#. type: Plain text
+#: Lists.adoc:42
+msgid "Non-indented new list Item"
+msgstr "NON-INDENTED NEW LIST ITEM"
+
+#. type: Plain text
+#: Lists.adoc:43
+msgid "Another Item"
+msgstr "ANOTHER ITEM"
+
+#. type: Plain text
+#: Lists.adoc:44
+msgid "List Item 2"
+msgstr "LIST ITEM 2"
+
+#. type: Plain text
+#: Lists.adoc:45
+msgid "List Item 3"
+msgstr "LIST ITEM 3"
+
+#. type: Plain text
+#: Lists.adoc:46
+msgid "Non-indented new list Item 2"
+msgstr "NON-INDENTED NEW LIST ITEM 2"
+
+#. type: Title -
+#: Lists.adoc:48
+#, no-wrap
+msgid "Vertical Labeled Lists"
+msgstr "VERTICAL LABELED LISTS"
+
+#. type: Labeled list
+#: Lists.adoc:50
+#, no-wrap
+msgid "Lorem"
+msgstr "LOREM"
+
+#. type: Labeled list
+#: Lists.adoc:55
+#, no-wrap
+msgid "Ipsum"
+msgstr "IPSUM"
+
+#. type: Labeled list
+#: Lists.adoc:59
+#, no-wrap
+msgid "Dolor"
+msgstr "DOLOR"
+
+#. type: Labeled list
+#: Lists.adoc:61
+#, no-wrap
+msgid "Suspendisse"
+msgstr "SUSPENDISSE"
+
+#. type: Plain text
+#: Lists.adoc:63
+#, no-wrap
+msgid "A massa id sem aliquam auctor.\n"
+msgstr "A MASSA ID SEM ALIQUAM AUCTOR.\n"
+
+#. type: Labeled list
+#: Lists.adoc:63
+#, no-wrap
+msgid "Morbi"
+msgstr "MORBI"
+
+#. type: Plain text
+#: Lists.adoc:65
+#, no-wrap
+msgid "Pretium nulla vel lorem.\n"
+msgstr "PRETIUM NULLA VEL LOREM.\n"
+
+#. type: Labeled list
+#: Lists.adoc:65
+#, no-wrap
+msgid "In"
+msgstr "IN"
+
+#. type: Plain text
+#: Lists.adoc:67
+#, no-wrap
+msgid "Dictum mauris in urna.\n"
+msgstr "DICTUM MAURIS IN URNA.\n"
+
+#. type: Labeled list
+#: Lists.adoc:68
+#, no-wrap
+msgid "<pathspec>..."
+msgstr "<PATHSPEC>..."
+
+#. type: Plain text
+#: Lists.adoc:71
+msgid ""
+"Files to add content from. Fileglobs (e.g. `*.c`) can be given to add all "
+"matching files."
+msgstr ""
+"FILES TO ADD CONTENT FROM. FILEGLOBS (E.G. `*.C`) CAN BE GIVEN TO ADD ALL "
+"MATCHING FILES."
+
+#. type: Labeled list
+#: Lists.adoc:72
+#, no-wrap
+msgid "-n"
+msgstr "-N"
+
+#. type: Labeled list
+#: Lists.adoc:73
+#, no-wrap
+msgid "--dry-run"
+msgstr "--DRY-RUN"
+
+#. type: Plain text
+#: Lists.adoc:76
+msgid ""
+"Don't actually add the file(s), just show if they exist and/or will be "
+"ignored."
+msgstr ""
+"DON'T ACTUALLY ADD THE FILE(S), JUST SHOW IF THEY EXIST AND/OR WILL BE "
+"IGNORED."
+
+#. type: Labeled list
+#: Lists.adoc:77
+#, no-wrap
+msgid "\\--"
+msgstr "\\--"
+
+#. type: Plain text
+#: Lists.adoc:81
+msgid ""
+"This option can be used to separate command-line options from the list of "
+"files, (useful when filenames might be mistaken for command-line options)."
+msgstr ""
+"THIS OPTION CAN BE USED TO SEPARATE COMMAND-LINE OPTIONS FROM THE LIST OF "
+"FILES, (USEFUL WHEN FILENAMES MIGHT BE MISTAKEN FOR COMMAND-LINE OPTIONS)."
+
+#. type: Labeled list
+#: Lists.adoc:82
+#, no-wrap
+msgid "[<refname>...]"
+msgstr "[<REFNAME>...]"
+
+#. type: Plain text
+#: Lists.adoc:85
+msgid ""
+"A list of references used to limit the references reported as available."
+msgstr ""
+"A LIST OF REFERENCES USED TO LIMIT THE REFERENCES REPORTED AS AVAILABLE."
+
+#. type: Labeled list
+#: Lists.adoc:86
+#, no-wrap
+msgid "$(prefix)/etc/gitconfig"
+msgstr "$(PREFIX)/ETC/GITCONFIG"
+
+#. type: Plain text
+#: Lists.adoc:88
+msgid "System-wide configuration file."
+msgstr "SYSTEM-WIDE CONFIGURATION FILE."
+
+#. type: Labeled list
+#: Lists.adoc:89
+#, no-wrap
+msgid "~/.gitconfig"
+msgstr "~/.GITCONFIG"
+
+#. type: Plain text
+#: Lists.adoc:92
+msgid ""
+"User-specific configuration file. Also called \"global\" configuration file."
+msgstr ""
+"USER-SPECIFIC CONFIGURATION FILE. ALSO CALLED \"GLOBAL\" CONFIGURATION FILE."
+
+#. type: Labeled list
+#: Lists.adoc:93
+#, no-wrap
+msgid "%G"
+msgstr "%G"
+
+#. type: Plain text
+#: Lists.adoc:95
+msgid "Git directory name"
+msgstr "GIT DIRECTORY NAME"
+
+#. type: Title -
+#: Lists.adoc:97
+#, no-wrap
+msgid "Horizontal Labeled Lists"
+msgstr "HORIZONTAL LABELED LISTS"
+
+#. type: Labeled list
+#: Lists.adoc:99 Lists.adoc:113 Lists.adoc:117
+#, no-wrap
+msgid "*Lorem*"
+msgstr "*LOREM*"
+
+#. type: Plain text
+#: Lists.adoc:101 Lists.adoc:116 Lists.adoc:120
+msgid ""
+"Fusce euismod commodo velit. Qui in magna commodo, est labitur dolorum an. "
+"Est ne magna primis adolescens."
+msgstr ""
+"FUSCE EUISMOD COMMODO VELIT. QUI IN MAGNA COMMODO, EST LABITUR DOLORUM AN. "
+"EST NE MAGNA PRIMIS ADOLESCENS."
+
+#. type: Plain text
+#: Lists.adoc:104
+#, no-wrap
+msgid ""
+" Fusce euismod commodo velit.\n"
+" Fusce euismod commodo velit.\n"
+msgstr ""
+" FUSCE EUISMOD COMMODO VELIT.\n"
+" FUSCE EUISMOD COMMODO VELIT.\n"
+
+#. type: Labeled list
+#: Lists.adoc:105
+#, no-wrap
+msgid "*Ipsum*"
+msgstr "*IPSUM*"
+
+#. type: Labeled list
+#: Lists.adoc:109 Lists.adoc:121
+#, no-wrap
+msgid "*Dolor*"
+msgstr "*DOLOR*"
+
+#. type: Labeled list
+#: Lists.adoc:124
+#, no-wrap
+msgid "|"
+msgstr "|"
+
+#. type: Labeled list
+#: Lists.adoc:127
+#, no-wrap
+msgid "{var}Dolor"
+msgstr "{VAR}DOLOR"
+
+#. type: Title -
+#: Lists.adoc:130
+#, no-wrap
+msgid "Question and Answer Lists"
+msgstr "QUESTION AND ANSWER LISTS"
+
+#. type: Labeled list
+#: Lists.adoc:131
+#, no-wrap
+msgid "Question one"
+msgstr "QUESTION ONE"
+
+#. type: Plain text
+#: Lists.adoc:133
+msgid "Answer one."
+msgstr "ANSWER ONE."
+
+#. type: Labeled list
+#: Lists.adoc:133
+#, no-wrap
+msgid "Question two"
+msgstr "QUESTION TWO"
+
+#. type: Plain text
+#: Lists.adoc:135
+msgid "Answer two."
+msgstr "ANSWER TWO."
+
+#. type: Title -
+#: Lists.adoc:137
+#, no-wrap
+msgid "Glossary Lists"
+msgstr "GLOSSARY LISTS"
+
+#. type: Labeled list
+#: Lists.adoc:139
+#, no-wrap
+msgid "A glossary term"
+msgstr "A GLOSSARY TERM"
+
+#. type: Plain text
+#: Lists.adoc:141 Lists.adoc:143
+msgid "The corresponding definition."
+msgstr "THE CORRESPONDING DEFINITION."
+
+#. type: Labeled list
+#: Lists.adoc:141
+#, no-wrap
+msgid "A second glossary term"
+msgstr "A SECOND GLOSSARY TERM"
+
+#. type: Title -
+#: Lists.adoc:145
+#, no-wrap
+msgid "Bibliography Lists"
+msgstr "BIBLIOGRAPHY LISTS"
+
+#. type: Plain text
+#: Lists.adoc:149 Lists.adoc:159
+msgid ""
+"[[[taoup]]] Eric Steven Raymond. 'The Art of UNIX Programming'. Addison-"
+"Wesley. ISBN 0-13-142901-9."
+msgstr ""
+"[[[TAOUP]]] ERIC STEVEN RAYMOND. 'THE ART OF UNIX PROGRAMMING'. ADDISON-"
+"WESLEY. ISBN 0-13-142901-9."
+
+#. type: Plain text
+#: Lists.adoc:152 Lists.adoc:162
+msgid ""
+"[[[walsh-muellner]]] Norman Walsh & Leonard Muellner. 'DocBook - The "
+"Definitive Guide'. O'Reilly & Associates. 1999. ISBN 1-56592-580-7."
+msgstr ""
+"[[[WALSH-MUELLNER]]] NORMAN WALSH & LEONARD MUELLNER. 'DOCBOOK - THE "
+"DEFINITIVE GUIDE'. O'REILLY & ASSOCIATES. 1999. ISBN 1-56592-580-7."
+
+#. type: Plain text
+#: Lists.adoc:154
+msgid "The same in a bibliography section, and without the doc typo"
+msgstr "THE SAME IN A BIBLIOGRAPHY SECTION, AND WITHOUT THE DOC TYPO"
+
+#. type: Title -
+#: Lists.adoc:156
+#, no-wrap
+msgid "Bibliography"
+msgstr "BIBLIOGRAPHY"
+
+#. type: Title -
+#: Lists.adoc:164
+#, no-wrap
+msgid "List Item Continuation"
+msgstr "LIST ITEM CONTINUATION"
+
+#. type: Plain text
+#: Lists.adoc:167 Lists.adoc:198
+msgid "List item one."
+msgstr "LIST ITEM ONE."
+
+#. type: Plain text
+#: Lists.adoc:170
+msgid ""
+"List item one continued with a second paragraph followed by an Indented "
+"block."
+msgstr ""
+"LIST ITEM ONE CONTINUED WITH A SECOND PARAGRAPH FOLLOWED BY AN INDENTED "
+"BLOCK."
+
+#. type: delimited block .
+#: Lists.adoc:174
+#, no-wrap
+msgid ""
+"$ ls *.sh\n"
+"$ mv *.sh ~/tmp\n"
+msgstr ""
+"$ LS *.SH\n"
+"$ MV *.SH ~/TMP\n"
+
+#. type: Plain text
+#: Lists.adoc:177
+msgid "List item one continued with a third paragraph."
+msgstr "LIST ITEM ONE CONTINUED WITH A THIRD PARAGRAPH."
+
+#. type: Plain text
+#: Lists.adoc:179
+msgid "List item two."
+msgstr "LIST ITEM TWO."
+
+#. type: Plain text
+#: Lists.adoc:182
+#, no-wrap
+msgid ""
+"List item two literal paragraph (no continuation required).\n"
+"(but this should not be wrapped).\n"
+msgstr ""
+"LIST ITEM TWO LITERAL PARAGRAPH (NO CONTINUATION REQUIRED).\n"
+"(BUT THIS SHOULD NOT BE WRAPPED).\n"
+
+#. type: Plain text
+#: Lists.adoc:184
+msgid "Nested list (item one)."
+msgstr "NESTED LIST (ITEM ONE)."
+
+#. type: Plain text
+#: Lists.adoc:187
+#, no-wrap
+msgid ""
+"Nested list literal paragraph (no continuation required).\n"
+"(but this should not be wrapped).\n"
+msgstr ""
+"NESTED LIST LITERAL PARAGRAPH (NO CONTINUATION REQUIRED).\n"
+"(BUT THIS SHOULD NOT BE WRAPPED).\n"
+
+#. type: Plain text
+#: Lists.adoc:189
+msgid "Nested list appended list item one paragraph"
+msgstr "NESTED LIST APPENDED LIST ITEM ONE PARAGRAPH"
+
+#. type: Plain text
+#: Lists.adoc:191
+msgid "Nested list item two."
+msgstr "NESTED LIST ITEM TWO."
+
+#. type: Title -
+#: Lists.adoc:194
+#, no-wrap
+msgid "List Block"
+msgstr "LIST BLOCK"
+
+#. type: Block title
+#: Lists.adoc:196
+#, no-wrap
+msgid "Nested List Block"
+msgstr "NESTED LIST BLOCK"
+
+#. type: Plain text
+#: Lists.adoc:200 Lists.adoc:205
+msgid "This paragraph is part of the preceding list item"
+msgstr "THIS PARAGRAPH IS PART OF THE PRECEDING LIST ITEM"
+
+#. type: Plain text
+#: Lists.adoc:203
+msgid "This list is nested and does not require explicit item continuation."
+msgstr "THIS LIST IS NESTED AND DOES NOT REQUIRE EXPLICIT ITEM CONTINUATION."
+
+#. type: Plain text
+#: Lists.adoc:207
+msgid "List item b."
+msgstr "LIST ITEM B."
+
+#. type: Plain text
+#: Lists.adoc:209
+msgid "This paragraph belongs to list item b."
+msgstr "THIS PARAGRAPH BELONGS TO LIST ITEM B."
+
+#. type: Plain text
+#: Lists.adoc:212
+msgid "This paragraph belongs to item 1."
+msgstr "THIS PARAGRAPH BELONGS TO ITEM 1."
+
+#. type: Plain text
+#: Lists.adoc:214
+msgid "Item 2 of the outer list."
+msgstr "ITEM 2 OF THE OUTER LIST."
+
+#. type: Block title
+#: Lists.adoc:215
+#, no-wrap
+msgid "Literal Paragraph in a Vertical Labeled Lists"
+msgstr "LITERAL PARAGRAPH IN A VERTICAL LABELED LISTS"
+
+#. type: Plain text
+#: Lists.adoc:218
+msgid "This comes from the git doc, on which po4a used to fail miserably."
+msgstr "THIS COMES FROM THE GIT DOC, ON WHICH PO4A USED TO FAIL MISERABLY."
+
+#. type: Labeled list
+#: Lists.adoc:219
+#, no-wrap
+msgid "patch"
+msgstr "PATCH"
+
+#. type: Plain text
+#: Lists.adoc:222
+msgid ""
+"This lets you choose one path out of a 'status' like selection. After "
+"choosing the path, it presents the diff between the index and the working "
+"tree file and asks you if you want to stage the change of each hunk. You "
+"can select one of the following options and type return:"
+msgstr "THIS LETS YOU CHOOSE ONE PATH OUT OF A 'STATUS' LIKE SELECTION. AFTER CHOOSING THE PATH, IT PRESENTS THE DIFF BETWEEN THE INDEX AND THE WORKING TREE FILE AND ASKS YOU IF YOU WANT TO STAGE THE CHANGE OF EACH HUNK. YOU CAN SELECT ONE OF THE FOLLOWING OPTIONS AND TYPE RETURN:"
+
+#. type: Plain text
+#: Lists.adoc:237
+#, no-wrap
+msgid ""
+"y - stage this hunk\n"
+"n - do not stage this hunk\n"
+"q - quit; do not stage this hunk or any of the remaining ones\n"
+"a - stage this hunk and all later hunks in the file\n"
+"d - do not stage this hunk or any of the later hunks in the file\n"
+"g - select a hunk to go to\n"
+"/ - search for a hunk matching the given regex\n"
+"j - leave this hunk undecided, see next undecided hunk\n"
+"J - leave this hunk undecided, see next hunk\n"
+"k - leave this hunk undecided, see previous undecided hunk\n"
+"K - leave this hunk undecided, see previous hunk\n"
+"s - split the current hunk into smaller hunks\n"
+"e - manually edit the current hunk\n"
+"? - print help\n"
+msgstr ""
+"Y - STAGE THIS HUNK\n"
+"N - DO NOT STAGE THIS HUNK\n"
+"Q - QUIT; DO NOT STAGE THIS HUNK OR ANY OF THE REMAINING ONES\n"
+"A - STAGE THIS HUNK AND ALL LATER HUNKS IN THE FILE\n"
+"D - DO NOT STAGE THIS HUNK OR ANY OF THE LATER HUNKS IN THE FILE\n"
+"G - SELECT A HUNK TO GO TO\n"
+"/ - SEARCH FOR A HUNK MATCHING THE GIVEN REGEX\n"
+"J - LEAVE THIS HUNK UNDECIDED, SEE NEXT UNDECIDED HUNK\n"
+"J - LEAVE THIS HUNK UNDECIDED, SEE NEXT HUNK\n"
+"K - LEAVE THIS HUNK UNDECIDED, SEE PREVIOUS UNDECIDED HUNK\n"
+"K - LEAVE THIS HUNK UNDECIDED, SEE PREVIOUS HUNK\n"
+"S - SPLIT THE CURRENT HUNK INTO SMALLER HUNKS\n"
+"E - MANUALLY EDIT THE CURRENT HUNK\n"
+"? - PRINT HELP\n"
+
+#. type: Plain text
+#: Lists.adoc:239
+msgid ""
+"After deciding the fate for all hunks, if there is any hunk that was chosen, "
+"the index is updated with the selected hunks."
+msgstr ""
+"AFTER DECIDING THE FATE FOR ALL HUNKS, IF THERE IS ANY HUNK THAT WAS CHOSEN, "
+"THE INDEX IS UPDATED WITH THE SELECTED HUNKS."
+
+#. type: Plain text
+#: Lists.adoc:241
+msgid "First level"
+msgstr "FIRST LEVEL"
+
+#. type: Plain text
+#: Lists.adoc:242
+msgid "Second level"
+msgstr "SECOND LEVEL"
+
+#. type: Plain text
+#: Lists.adoc:243
+msgid "Third level"
+msgstr "THIRD LEVEL"
+
+#. type: Plain text
+#: Lists.adoc:244
+msgid "Fourth level"
+msgstr "FOURTH LEVEL"
+
+#. type: Plain text
+#: Lists.adoc:245
+msgid "Fifth level"
+msgstr "FIFTH LEVEL"
+
+#. type: Plain text
+#: Lists.adoc:247
+msgid "Unchecked"
+msgstr "UNCHECKED"
+
+#. type: Plain text
+#: Lists.adoc:248 Lists.adoc:249 Lists.adoc:250
+msgid "Checked"
+msgstr "CHECKED"
+
+#. type: Plain text
+#: Lists.adoc:252
+msgid "*starting* with a strong item"
+msgstr "*STARTING* WITH A STRONG ITEM"
diff --git a/t/fmt/asciidoc/Lists.pot b/t/fmt/asciidoc/Lists.pot
new file mode 100644
index 0000000..025bbd4
--- /dev/null
+++ b/t/fmt/asciidoc/Lists.pot
@@ -0,0 +1,624 @@
+# SOME DESCRIPTIVE TITLE
+# Copyright (C) YEAR Free Software Foundation, Inc.
+# This file is distributed under the same license as the PACKAGE package.
+# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
+#
+#, fuzzy
+msgid ""
+msgstr ""
+"Project-Id-Version: PACKAGE VERSION\n"
+"POT-Creation-Date: 2023-06-17 11:44+0200\n"
+"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
+"Language-Team: LANGUAGE <LL@li.org>\n"
+"Language: \n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+
+#. type: Title =
+#: Lists.adoc:2
+#, no-wrap
+msgid "Test Lists"
+msgstr ""
+
+#. type: Title -
+#: Lists.adoc:5
+#, no-wrap
+msgid "Bulleted and Numbered Lists"
+msgstr ""
+
+#. type: Plain text
+#: Lists.adoc:8 Lists.adoc:11
+msgid "List item."
+msgstr ""
+
+#. type: Plain text
+#: Lists.adoc:10
+msgid "List item which content spans over several lines (missing leading indent)"
+msgstr ""
+
+#. type: Plain text
+#: Lists.adoc:13
+msgid "Integer numbered list item."
+msgstr ""
+
+#. type: Plain text
+#: Lists.adoc:14
+msgid "Integer numbered list item with optional numbering."
+msgstr ""
+
+#. type: Plain text
+#: Lists.adoc:15
+msgid "Lowercase letter numbered list item."
+msgstr ""
+
+#. type: Plain text
+#: Lists.adoc:16
+msgid "Lowercase letter numbered list item with optional numbering."
+msgstr ""
+
+#. type: Plain text
+#: Lists.adoc:17
+msgid "Third level of numbered list."
+msgstr ""
+
+#. type: Plain text
+#: Lists.adoc:19
+msgid "Lorem ipsum dolor sit amet, consectetuer adipiscing elit."
+msgstr ""
+
+#. type: Plain text
+#: Lists.adoc:20 Lists.adoc:27 Lists.adoc:29 Lists.adoc:33 Lists.adoc:34
+#: Lists.adoc:52 Lists.adoc:54
+msgid "Fusce euismod commodo velit."
+msgstr ""
+
+#. type: Plain text
+#: Lists.adoc:23
+msgid ""
+"Qui in magna commodo, est labitur dolorum an. Est ne magna primis "
+"adolescens. Sit munere ponderum dignissim et. Minim luptatum et vel."
+msgstr ""
+
+#. type: Plain text
+#: Lists.adoc:24 Lists.adoc:28 Lists.adoc:30 Lists.adoc:35 Lists.adoc:37
+#: Lists.adoc:57 Lists.adoc:58 Lists.adoc:106 Lists.adoc:107 Lists.adoc:111
+#: Lists.adoc:123 Lists.adoc:126
+msgid "Vivamus fringilla mi eu lacus."
+msgstr ""
+
+#. type: Plain text
+#: Lists.adoc:25 Lists.adoc:31 Lists.adoc:36 Lists.adoc:38 Lists.adoc:59
+#: Lists.adoc:61 Lists.adoc:108 Lists.adoc:112 Lists.adoc:128
+msgid "Donec eget arcu bibendum nunc consequat lobortis."
+msgstr ""
+
+#. type: Plain text
+#: Lists.adoc:26
+msgid "Nulla porttitor vulputate libero."
+msgstr ""
+
+#. type: Plain text
+#: Lists.adoc:32
+msgid "Praesent eget purus quis magna eleifend eleifend."
+msgstr ""
+
+#. type: Plain text
+#: Lists.adoc:39
+msgid "Nam fermentum mattis ante."
+msgstr ""
+
+#. type: Plain text
+#: Lists.adoc:41
+msgid "List Item 1"
+msgstr ""
+
+#. type: Plain text
+#: Lists.adoc:42
+msgid "Non-indented new list Item"
+msgstr ""
+
+#. type: Plain text
+#: Lists.adoc:43
+msgid "Another Item"
+msgstr ""
+
+#. type: Plain text
+#: Lists.adoc:44
+msgid "List Item 2"
+msgstr ""
+
+#. type: Plain text
+#: Lists.adoc:45
+msgid "List Item 3"
+msgstr ""
+
+#. type: Plain text
+#: Lists.adoc:46
+msgid "Non-indented new list Item 2"
+msgstr ""
+
+#. type: Title -
+#: Lists.adoc:48
+#, no-wrap
+msgid "Vertical Labeled Lists"
+msgstr ""
+
+#. type: Labeled list
+#: Lists.adoc:50
+#, no-wrap
+msgid "Lorem"
+msgstr ""
+
+#. type: Labeled list
+#: Lists.adoc:55
+#, no-wrap
+msgid "Ipsum"
+msgstr ""
+
+#. type: Labeled list
+#: Lists.adoc:59
+#, no-wrap
+msgid "Dolor"
+msgstr ""
+
+#. type: Labeled list
+#: Lists.adoc:61
+#, no-wrap
+msgid "Suspendisse"
+msgstr ""
+
+#. type: Plain text
+#: Lists.adoc:63
+#, no-wrap
+msgid "A massa id sem aliquam auctor.\n"
+msgstr ""
+
+#. type: Labeled list
+#: Lists.adoc:63
+#, no-wrap
+msgid "Morbi"
+msgstr ""
+
+#. type: Plain text
+#: Lists.adoc:65
+#, no-wrap
+msgid "Pretium nulla vel lorem.\n"
+msgstr ""
+
+#. type: Labeled list
+#: Lists.adoc:65
+#, no-wrap
+msgid "In"
+msgstr ""
+
+#. type: Plain text
+#: Lists.adoc:67
+#, no-wrap
+msgid "Dictum mauris in urna.\n"
+msgstr ""
+
+#. type: Labeled list
+#: Lists.adoc:68
+#, no-wrap
+msgid "<pathspec>..."
+msgstr ""
+
+#. type: Plain text
+#: Lists.adoc:71
+msgid ""
+"Files to add content from. Fileglobs (e.g. `*.c`) can be given to add all "
+"matching files."
+msgstr ""
+
+#. type: Labeled list
+#: Lists.adoc:72
+#, no-wrap
+msgid "-n"
+msgstr ""
+
+#. type: Labeled list
+#: Lists.adoc:73
+#, no-wrap
+msgid "--dry-run"
+msgstr ""
+
+#. type: Plain text
+#: Lists.adoc:76
+msgid ""
+"Don't actually add the file(s), just show if they exist and/or will be "
+"ignored."
+msgstr ""
+
+#. type: Labeled list
+#: Lists.adoc:77
+#, no-wrap
+msgid "\\--"
+msgstr ""
+
+#. type: Plain text
+#: Lists.adoc:81
+msgid ""
+"This option can be used to separate command-line options from the list of "
+"files, (useful when filenames might be mistaken for command-line options)."
+msgstr ""
+
+#. type: Labeled list
+#: Lists.adoc:82
+#, no-wrap
+msgid "[<refname>...]"
+msgstr ""
+
+#. type: Plain text
+#: Lists.adoc:85
+msgid "A list of references used to limit the references reported as available."
+msgstr ""
+
+#. type: Labeled list
+#: Lists.adoc:86
+#, no-wrap
+msgid "$(prefix)/etc/gitconfig"
+msgstr ""
+
+#. type: Plain text
+#: Lists.adoc:88
+msgid "System-wide configuration file."
+msgstr ""
+
+#. type: Labeled list
+#: Lists.adoc:89
+#, no-wrap
+msgid "~/.gitconfig"
+msgstr ""
+
+#. type: Plain text
+#: Lists.adoc:92
+msgid "User-specific configuration file. Also called \"global\" configuration file."
+msgstr ""
+
+#. type: Labeled list
+#: Lists.adoc:93
+#, no-wrap
+msgid "%G"
+msgstr ""
+
+#. type: Plain text
+#: Lists.adoc:95
+msgid "Git directory name"
+msgstr ""
+
+#. type: Title -
+#: Lists.adoc:97
+#, no-wrap
+msgid "Horizontal Labeled Lists"
+msgstr ""
+
+#. type: Labeled list
+#: Lists.adoc:99 Lists.adoc:113 Lists.adoc:117
+#, no-wrap
+msgid "*Lorem*"
+msgstr ""
+
+#. type: Plain text
+#: Lists.adoc:101 Lists.adoc:116 Lists.adoc:120
+msgid ""
+"Fusce euismod commodo velit. Qui in magna commodo, est labitur dolorum "
+"an. Est ne magna primis adolescens."
+msgstr ""
+
+#. type: Plain text
+#: Lists.adoc:104
+#, no-wrap
+msgid ""
+" Fusce euismod commodo velit.\n"
+" Fusce euismod commodo velit.\n"
+msgstr ""
+
+#. type: Labeled list
+#: Lists.adoc:105
+#, no-wrap
+msgid "*Ipsum*"
+msgstr ""
+
+#. type: Labeled list
+#: Lists.adoc:109 Lists.adoc:121
+#, no-wrap
+msgid "*Dolor*"
+msgstr ""
+
+#. type: Labeled list
+#: Lists.adoc:124
+#, no-wrap
+msgid "|"
+msgstr ""
+
+#. type: Labeled list
+#: Lists.adoc:127
+#, no-wrap
+msgid "{var}Dolor"
+msgstr ""
+
+#. type: Title -
+#: Lists.adoc:130
+#, no-wrap
+msgid "Question and Answer Lists"
+msgstr ""
+
+#. type: Labeled list
+#: Lists.adoc:131
+#, no-wrap
+msgid "Question one"
+msgstr ""
+
+#. type: Plain text
+#: Lists.adoc:133
+msgid "Answer one."
+msgstr ""
+
+#. type: Labeled list
+#: Lists.adoc:133
+#, no-wrap
+msgid "Question two"
+msgstr ""
+
+#. type: Plain text
+#: Lists.adoc:135
+msgid "Answer two."
+msgstr ""
+
+#. type: Title -
+#: Lists.adoc:137
+#, no-wrap
+msgid "Glossary Lists"
+msgstr ""
+
+#. type: Labeled list
+#: Lists.adoc:139
+#, no-wrap
+msgid "A glossary term"
+msgstr ""
+
+#. type: Plain text
+#: Lists.adoc:141 Lists.adoc:143
+msgid "The corresponding definition."
+msgstr ""
+
+#. type: Labeled list
+#: Lists.adoc:141
+#, no-wrap
+msgid "A second glossary term"
+msgstr ""
+
+#. type: Title -
+#: Lists.adoc:145
+#, no-wrap
+msgid "Bibliography Lists"
+msgstr ""
+
+#. type: Plain text
+#: Lists.adoc:149 Lists.adoc:159
+msgid ""
+"[[[taoup]]] Eric Steven Raymond. 'The Art of UNIX "
+"Programming'. Addison-Wesley. ISBN 0-13-142901-9."
+msgstr ""
+
+#. type: Plain text
+#: Lists.adoc:152 Lists.adoc:162
+msgid ""
+"[[[walsh-muellner]]] Norman Walsh & Leonard Muellner. 'DocBook - The "
+"Definitive Guide'. O'Reilly & Associates. 1999. ISBN 1-56592-580-7."
+msgstr ""
+
+#. type: Plain text
+#: Lists.adoc:154
+msgid "The same in a bibliography section, and without the doc typo"
+msgstr ""
+
+#. type: Title -
+#: Lists.adoc:156
+#, no-wrap
+msgid "Bibliography"
+msgstr ""
+
+#. type: Title -
+#: Lists.adoc:164
+#, no-wrap
+msgid "List Item Continuation"
+msgstr ""
+
+#. type: Plain text
+#: Lists.adoc:167 Lists.adoc:198
+msgid "List item one."
+msgstr ""
+
+#. type: Plain text
+#: Lists.adoc:170
+msgid ""
+"List item one continued with a second paragraph followed by an Indented "
+"block."
+msgstr ""
+
+#. type: delimited block .
+#: Lists.adoc:174
+#, no-wrap
+msgid ""
+"$ ls *.sh\n"
+"$ mv *.sh ~/tmp\n"
+msgstr ""
+
+#. type: Plain text
+#: Lists.adoc:177
+msgid "List item one continued with a third paragraph."
+msgstr ""
+
+#. type: Plain text
+#: Lists.adoc:179
+msgid "List item two."
+msgstr ""
+
+#. type: Plain text
+#: Lists.adoc:182
+#, no-wrap
+msgid ""
+"List item two literal paragraph (no continuation required).\n"
+"(but this should not be wrapped).\n"
+msgstr ""
+
+#. type: Plain text
+#: Lists.adoc:184
+msgid "Nested list (item one)."
+msgstr ""
+
+#. type: Plain text
+#: Lists.adoc:187
+#, no-wrap
+msgid ""
+"Nested list literal paragraph (no continuation required).\n"
+"(but this should not be wrapped).\n"
+msgstr ""
+
+#. type: Plain text
+#: Lists.adoc:189
+msgid "Nested list appended list item one paragraph"
+msgstr ""
+
+#. type: Plain text
+#: Lists.adoc:191
+msgid "Nested list item two."
+msgstr ""
+
+#. type: Title -
+#: Lists.adoc:194
+#, no-wrap
+msgid "List Block"
+msgstr ""
+
+#. type: Block title
+#: Lists.adoc:196
+#, no-wrap
+msgid "Nested List Block"
+msgstr ""
+
+#. type: Plain text
+#: Lists.adoc:200 Lists.adoc:205
+msgid "This paragraph is part of the preceding list item"
+msgstr ""
+
+#. type: Plain text
+#: Lists.adoc:203
+msgid "This list is nested and does not require explicit item continuation."
+msgstr ""
+
+#. type: Plain text
+#: Lists.adoc:207
+msgid "List item b."
+msgstr ""
+
+#. type: Plain text
+#: Lists.adoc:209
+msgid "This paragraph belongs to list item b."
+msgstr ""
+
+#. type: Plain text
+#: Lists.adoc:212
+msgid "This paragraph belongs to item 1."
+msgstr ""
+
+#. type: Plain text
+#: Lists.adoc:214
+msgid "Item 2 of the outer list."
+msgstr ""
+
+#. type: Block title
+#: Lists.adoc:215
+#, no-wrap
+msgid "Literal Paragraph in a Vertical Labeled Lists"
+msgstr ""
+
+#. type: Plain text
+#: Lists.adoc:218
+msgid "This comes from the git doc, on which po4a used to fail miserably."
+msgstr ""
+
+#. type: Labeled list
+#: Lists.adoc:219
+#, no-wrap
+msgid "patch"
+msgstr ""
+
+#. type: Plain text
+#: Lists.adoc:222
+msgid ""
+"This lets you choose one path out of a 'status' like selection. After "
+"choosing the path, it presents the diff between the index and the working "
+"tree file and asks you if you want to stage the change of each hunk. You "
+"can select one of the following options and type return:"
+msgstr ""
+
+#. type: Plain text
+#: Lists.adoc:237
+#, no-wrap
+msgid ""
+"y - stage this hunk\n"
+"n - do not stage this hunk\n"
+"q - quit; do not stage this hunk or any of the remaining ones\n"
+"a - stage this hunk and all later hunks in the file\n"
+"d - do not stage this hunk or any of the later hunks in the file\n"
+"g - select a hunk to go to\n"
+"/ - search for a hunk matching the given regex\n"
+"j - leave this hunk undecided, see next undecided hunk\n"
+"J - leave this hunk undecided, see next hunk\n"
+"k - leave this hunk undecided, see previous undecided hunk\n"
+"K - leave this hunk undecided, see previous hunk\n"
+"s - split the current hunk into smaller hunks\n"
+"e - manually edit the current hunk\n"
+"? - print help\n"
+msgstr ""
+
+#. type: Plain text
+#: Lists.adoc:239
+msgid ""
+"After deciding the fate for all hunks, if there is any hunk that was chosen, "
+"the index is updated with the selected hunks."
+msgstr ""
+
+#. type: Plain text
+#: Lists.adoc:241
+msgid "First level"
+msgstr ""
+
+#. type: Plain text
+#: Lists.adoc:242
+msgid "Second level"
+msgstr ""
+
+#. type: Plain text
+#: Lists.adoc:243
+msgid "Third level"
+msgstr ""
+
+#. type: Plain text
+#: Lists.adoc:244
+msgid "Fourth level"
+msgstr ""
+
+#. type: Plain text
+#: Lists.adoc:245
+msgid "Fifth level"
+msgstr ""
+
+#. type: Plain text
+#: Lists.adoc:247
+msgid "Unchecked"
+msgstr ""
+
+#. type: Plain text
+#: Lists.adoc:248 Lists.adoc:249 Lists.adoc:250
+msgid "Checked"
+msgstr ""
+
+#. type: Plain text
+#: Lists.adoc:252
+msgid "*starting* with a strong item"
+msgstr ""
diff --git a/t/fmt/asciidoc/Lists.trans b/t/fmt/asciidoc/Lists.trans
new file mode 100644
index 0000000..35ccfb1
--- /dev/null
+++ b/t/fmt/asciidoc/Lists.trans
@@ -0,0 +1,230 @@
+TEST LISTS
+==========
+
+BULLETED AND NUMBERED LISTS
+---------------------------
+
+- LIST ITEM.
+- LIST ITEM WHICH CONTENT SPANS OVER SEVERAL LINES (MISSING LEADING INDENT)
+* LIST ITEM.
+
+. INTEGER NUMBERED LIST ITEM.
+1. INTEGER NUMBERED LIST ITEM WITH OPTIONAL NUMBERING.
+.. LOWERCASE LETTER NUMBERED LIST ITEM.
+a. LOWERCASE LETTER NUMBERED LIST ITEM WITH OPTIONAL NUMBERING.
+... THIRD LEVEL OF NUMBERED LIST.
+
+- LOREM IPSUM DOLOR SIT AMET, CONSECTETUER ADIPISCING ELIT.
+ * FUSCE EUISMOD COMMODO VELIT.
+ * QUI IN MAGNA COMMODO, EST LABITUR DOLORUM AN. EST NE MAGNA PRIMIS ADOLESCENS. SIT MUNERE PONDERUM DIGNISSIM ET. MINIM LUPTATUM ET VEL.
+ * VIVAMUS FRINGILLA MI EU LACUS.
+ * DONEC EGET ARCU BIBENDUM NUNC CONSEQUAT LOBORTIS.
+- NULLA PORTTITOR VULPUTATE LIBERO.
+ . FUSCE EUISMOD COMMODO VELIT.
+ . VIVAMUS FRINGILLA MI EU LACUS.
+ .. FUSCE EUISMOD COMMODO VELIT.
+ .. VIVAMUS FRINGILLA MI EU LACUS.
+ . DONEC EGET ARCU BIBENDUM NUNC CONSEQUAT LOBORTIS.
+- PRAESENT EGET PURUS QUIS MAGNA ELEIFEND ELEIFEND.
+ 1. FUSCE EUISMOD COMMODO VELIT.
+ a. FUSCE EUISMOD COMMODO VELIT.
+ b. VIVAMUS FRINGILLA MI EU LACUS.
+ c. DONEC EGET ARCU BIBENDUM NUNC CONSEQUAT LOBORTIS.
+ 2. VIVAMUS FRINGILLA MI EU LACUS.
+ 3. DONEC EGET ARCU BIBENDUM NUNC CONSEQUAT LOBORTIS.
+ 4. NAM FERMENTUM MATTIS ANTE.
+
+* LIST ITEM 1
+** NON-INDENTED NEW LIST ITEM
+** ANOTHER ITEM
+* LIST ITEM 2
+* LIST ITEM 3
+** NON-INDENTED NEW LIST ITEM 2
+
+VERTICAL LABELED LISTS
+----------------------
+
+LOREM::
+ FUSCE EUISMOD COMMODO VELIT.
+
+ FUSCE EUISMOD COMMODO VELIT.
+
+IPSUM::
+ VIVAMUS FRINGILLA MI EU LACUS.
+ * VIVAMUS FRINGILLA MI EU LACUS.
+ * DONEC EGET ARCU BIBENDUM NUNC CONSEQUAT LOBORTIS.
+DOLOR::
+ DONEC EGET ARCU BIBENDUM NUNC CONSEQUAT LOBORTIS.
+ SUSPENDISSE;;
+ A MASSA ID SEM ALIQUAM AUCTOR.
+ MORBI;;
+ PRETIUM NULLA VEL LOREM.
+ IN;;
+ DICTUM MAURIS IN URNA.
+
+<PATHSPEC>...::
+ FILES TO ADD CONTENT FROM. FILEGLOBS (E.G. `*.C`) CAN BE GIVEN TO ADD ALL MATCHING FILES.
+
+-N::
+--DRY-RUN::
+ DON'T ACTUALLY ADD THE FILE(S), JUST SHOW IF THEY EXIST AND/OR WILL BE IGNORED.
+
+\--::
+ THIS OPTION CAN BE USED TO SEPARATE COMMAND-LINE OPTIONS FROM THE LIST OF FILES, (USEFUL WHEN FILENAMES MIGHT BE MISTAKEN FOR COMMAND-LINE OPTIONS).
+
+[<REFNAME>...]::
+ A LIST OF REFERENCES USED TO LIMIT THE REFERENCES REPORTED AS AVAILABLE.
+
+$(PREFIX)/ETC/GITCONFIG::
+ SYSTEM-WIDE CONFIGURATION FILE.
+
+~/.GITCONFIG::
+ USER-SPECIFIC CONFIGURATION FILE. ALSO CALLED "GLOBAL" CONFIGURATION FILE.
+
+%G::
+ GIT DIRECTORY NAME
+
+HORIZONTAL LABELED LISTS
+------------------------
+
+*LOREM*:: FUSCE EUISMOD COMMODO VELIT. QUI IN MAGNA COMMODO, EST LABITUR DOLORUM AN. EST NE MAGNA PRIMIS ADOLESCENS.
+
+ FUSCE EUISMOD COMMODO VELIT.
+ FUSCE EUISMOD COMMODO VELIT.
+
+*IPSUM*:: VIVAMUS FRINGILLA MI EU LACUS.
+- VIVAMUS FRINGILLA MI EU LACUS.
+- DONEC EGET ARCU BIBENDUM NUNC CONSEQUAT LOBORTIS.
+
+*DOLOR*:: \
+ - VIVAMUS FRINGILLA MI EU LACUS.
+ - DONEC EGET ARCU BIBENDUM NUNC CONSEQUAT LOBORTIS.
+
+*LOREM*:: FUSCE EUISMOD COMMODO VELIT. QUI IN MAGNA COMMODO, EST LABITUR DOLORUM AN. EST NE MAGNA PRIMIS ADOLESCENS.
+
+*LOREM*::: FUSCE EUISMOD COMMODO VELIT. QUI IN MAGNA COMMODO, EST LABITUR DOLORUM AN. EST NE MAGNA PRIMIS ADOLESCENS.
+
+*DOLOR*:::
+ VIVAMUS FRINGILLA MI EU LACUS.
+
+|::
+ VIVAMUS FRINGILLA MI EU LACUS.
+
+{VAR}DOLOR:: DONEC EGET ARCU BIBENDUM NUNC CONSEQUAT LOBORTIS.
+
+QUESTION AND ANSWER LISTS
+-------------------------
+QUESTION ONE??
+ ANSWER ONE.
+QUESTION TWO??
+ ANSWER TWO.
+
+GLOSSARY LISTS
+--------------
+
+A GLOSSARY TERM:-
+ THE CORRESPONDING DEFINITION.
+A SECOND GLOSSARY TERM:-
+ THE CORRESPONDING DEFINITION.
+
+BIBLIOGRAPHY LISTS
+------------------
+
++ [[[TAOUP]]] ERIC STEVEN RAYMOND. 'THE ART OF UNIX PROGRAMMING'. ADDISON-WESLEY. ISBN 0-13-142901-9.
++ [[[WALSH-MUELLNER]]] NORMAN WALSH & LEONARD MUELLNER. 'DOCBOOK - THE DEFINITIVE GUIDE'. O'REILLY & ASSOCIATES. 1999. ISBN 1-56592-580-7.
+
+THE SAME IN A BIBLIOGRAPHY SECTION, AND WITHOUT THE DOC TYPO
+
+BIBLIOGRAPHY
+------------
++ [[[TAOUP]]] ERIC STEVEN RAYMOND. 'THE ART OF UNIX PROGRAMMING'. ADDISON-WESLEY. ISBN 0-13-142901-9.
++ [[[WALSH-MUELLNER]]] NORMAN WALSH & LEONARD MUELLNER. 'DOCBOOK - THE DEFINITIVE GUIDE'. O'REILLY & ASSOCIATES. 1999. ISBN 1-56592-580-7.
+
+LIST ITEM CONTINUATION
+----------------------
+
+1. LIST ITEM ONE.
++
+LIST ITEM ONE CONTINUED WITH A SECOND PARAGRAPH FOLLOWED BY AN INDENTED BLOCK.
++
+.................
+$ LS *.SH
+$ MV *.SH ~/TMP
+.................
++
+LIST ITEM ONE CONTINUED WITH A THIRD PARAGRAPH.
+
+2. LIST ITEM TWO.
+
+ LIST ITEM TWO LITERAL PARAGRAPH (NO CONTINUATION REQUIRED).
+ (BUT THIS SHOULD NOT BE WRAPPED).
+
+- NESTED LIST (ITEM ONE).
+
+ NESTED LIST LITERAL PARAGRAPH (NO CONTINUATION REQUIRED).
+ (BUT THIS SHOULD NOT BE WRAPPED).
++
+NESTED LIST APPENDED LIST ITEM ONE PARAGRAPH
+
+- NESTED LIST ITEM TWO.
+
+
+LIST BLOCK
+----------
+
+.NESTED LIST BLOCK
+1. LIST ITEM ONE.
++
+THIS PARAGRAPH IS PART OF THE PRECEDING LIST ITEM
++
+--
+a. THIS LIST IS NESTED AND DOES NOT REQUIRE EXPLICIT ITEM CONTINUATION.
+
+THIS PARAGRAPH IS PART OF THE PRECEDING LIST ITEM
+
+b. LIST ITEM B.
+
+THIS PARAGRAPH BELONGS TO LIST ITEM B.
+--
++
+THIS PARAGRAPH BELONGS TO ITEM 1.
+
+2. ITEM 2 OF THE OUTER LIST.
+
+.LITERAL PARAGRAPH IN A VERTICAL LABELED LISTS
+
+THIS COMES FROM THE GIT DOC, ON WHICH PO4A USED TO FAIL MISERABLY.
+
+PATCH::
+
+ THIS LETS YOU CHOOSE ONE PATH OUT OF A 'STATUS' LIKE SELECTION. AFTER CHOOSING THE PATH, IT PRESENTS THE DIFF BETWEEN THE INDEX AND THE WORKING TREE FILE AND ASKS YOU IF YOU WANT TO STAGE THE CHANGE OF EACH HUNK. YOU CAN SELECT ONE OF THE FOLLOWING OPTIONS AND TYPE RETURN:
+
+ Y - STAGE THIS HUNK
+ N - DO NOT STAGE THIS HUNK
+ Q - QUIT; DO NOT STAGE THIS HUNK OR ANY OF THE REMAINING ONES
+ A - STAGE THIS HUNK AND ALL LATER HUNKS IN THE FILE
+ D - DO NOT STAGE THIS HUNK OR ANY OF THE LATER HUNKS IN THE FILE
+ G - SELECT A HUNK TO GO TO
+ / - SEARCH FOR A HUNK MATCHING THE GIVEN REGEX
+ J - LEAVE THIS HUNK UNDECIDED, SEE NEXT UNDECIDED HUNK
+ J - LEAVE THIS HUNK UNDECIDED, SEE NEXT HUNK
+ K - LEAVE THIS HUNK UNDECIDED, SEE PREVIOUS UNDECIDED HUNK
+ K - LEAVE THIS HUNK UNDECIDED, SEE PREVIOUS HUNK
+ S - SPLIT THE CURRENT HUNK INTO SMALLER HUNKS
+ E - MANUALLY EDIT THE CURRENT HUNK
+ ? - PRINT HELP
++
+AFTER DECIDING THE FATE FOR ALL HUNKS, IF THERE IS ANY HUNK THAT WAS CHOSEN, THE INDEX IS UPDATED WITH THE SELECTED HUNKS.
+
+. FIRST LEVEL
+.. SECOND LEVEL
+... THIRD LEVEL
+.... FOURTH LEVEL
+..... FIFTH LEVEL
+
+* [ ] UNCHECKED
+* [x] CHECKED
+* [X] CHECKED
+* [*] CHECKED
+
+1. *STARTING* WITH A STRONG ITEM
diff --git a/t/fmt/asciidoc/Lists.trans.stderr b/t/fmt/asciidoc/Lists.trans.stderr
new file mode 100644
index 0000000..b858cc9
--- /dev/null
+++ b/t/fmt/asciidoc/Lists.trans.stderr
@@ -0,0 +1 @@
+Lists.adoc:9: It seems that you are adding unindented content to an item. The standard allows this, but you may still want to change your document to use indented text to provide better visual clues to writers.
diff --git a/t/fmt/asciidoc/MacroIncludesHugo.adoc b/t/fmt/asciidoc/MacroIncludesHugo.adoc
new file mode 100644
index 0000000..a779282
--- /dev/null
+++ b/t/fmt/asciidoc/MacroIncludesHugo.adoc
@@ -0,0 +1,31 @@
+== Includes
+
+include::shared/attributes/attributes-{{% lang %}}.adoc[]
+include::shared/{{% lang %}}/teams.adoc[]
+include::shared/{{% lang %}}/mailing-lists.adoc[]
+include::shared/{{% lang %}}/urls.adoc[]
+include::partial.adoc[]
+include::chapter01.adoc[]
+include::chapter01.adoc[leveloffset=+1]
+include::attributes-settings.adoc[]
+include::attributes-urls.adoc[]
+include::{includedir}/fragment1.adoc[]
+include::{sourcedir}/org/asciidoctor/Asciidoctor.java[]
+include::sales/2016/results.csv[]
+include::complex-list-item.adoc[]
+include::filename.txt[lines="1..10,15..20"]
+include::filename.txt[lines=12..-1]
+include::https://raw.githubusercontent.com/asciidoctor/asciidoctor/main/README.adoc[]
+
+== Description List
+
+CPU:: The brain of the computer.
+Hard drive:: Permanent storage for operating system and/or user files.
+RAM:: Temporarily stores information the CPU uses during operation.
+Keyboard:: Used to enter text or control items on the screen.
+Mouse:: Used to point to and select items on your computer screen.
+Monitor:: Displays information in visual form using text and graphics.
+Include:: Displays information in visual form using text and graphics.
+include:: Displays information in visual form using text and graphics.
+include:: Displays information in visual form using[] text and graphics.
+include:: Displays information in visual form using text and graphics.[]
diff --git a/t/fmt/asciidoc/MacroIncludesHugo.norm b/t/fmt/asciidoc/MacroIncludesHugo.norm
new file mode 100644
index 0000000..a779282
--- /dev/null
+++ b/t/fmt/asciidoc/MacroIncludesHugo.norm
@@ -0,0 +1,31 @@
+== Includes
+
+include::shared/attributes/attributes-{{% lang %}}.adoc[]
+include::shared/{{% lang %}}/teams.adoc[]
+include::shared/{{% lang %}}/mailing-lists.adoc[]
+include::shared/{{% lang %}}/urls.adoc[]
+include::partial.adoc[]
+include::chapter01.adoc[]
+include::chapter01.adoc[leveloffset=+1]
+include::attributes-settings.adoc[]
+include::attributes-urls.adoc[]
+include::{includedir}/fragment1.adoc[]
+include::{sourcedir}/org/asciidoctor/Asciidoctor.java[]
+include::sales/2016/results.csv[]
+include::complex-list-item.adoc[]
+include::filename.txt[lines="1..10,15..20"]
+include::filename.txt[lines=12..-1]
+include::https://raw.githubusercontent.com/asciidoctor/asciidoctor/main/README.adoc[]
+
+== Description List
+
+CPU:: The brain of the computer.
+Hard drive:: Permanent storage for operating system and/or user files.
+RAM:: Temporarily stores information the CPU uses during operation.
+Keyboard:: Used to enter text or control items on the screen.
+Mouse:: Used to point to and select items on your computer screen.
+Monitor:: Displays information in visual form using text and graphics.
+Include:: Displays information in visual form using text and graphics.
+include:: Displays information in visual form using text and graphics.
+include:: Displays information in visual form using[] text and graphics.
+include:: Displays information in visual form using text and graphics.[]
diff --git a/t/fmt/asciidoc/MacroIncludesHugo.po b/t/fmt/asciidoc/MacroIncludesHugo.po
new file mode 100644
index 0000000..13a4ce9
--- /dev/null
+++ b/t/fmt/asciidoc/MacroIncludesHugo.po
@@ -0,0 +1,119 @@
+# SOME DESCRIPTIVE TITLE
+# Copyright (C) YEAR Free Software Foundation, Inc.
+# This file is distributed under the same license as the PACKAGE package.
+# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
+#
+#, fuzzy
+msgid ""
+msgstr ""
+"Project-Id-Version: PACKAGE VERSION\n"
+"POT-Creation-Date: 2022-01-23 10:54-0300\n"
+"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
+"Language-Team: LANGUAGE <LL@li.org>\n"
+"Language: \n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+
+#. type: Title ==
+#: MacroIncludesHugo.adoc:1
+#, no-wrap
+msgid "Includes"
+msgstr "iNCLUDES"
+
+#. type: Title ==
+#: MacroIncludesHugo.adoc:20
+#, no-wrap
+msgid "Description List"
+msgstr "dESCRIPTION lIST"
+
+#. type: Labeled list
+#: MacroIncludesHugo.adoc:22
+#, no-wrap
+msgid "CPU"
+msgstr "cpu"
+
+#. type: Plain text
+#: MacroIncludesHugo.adoc:23
+msgid "The brain of the computer."
+msgstr "tHE BRAIN OF THE COMPUTER."
+
+#. type: Labeled list
+#: MacroIncludesHugo.adoc:23
+#, no-wrap
+msgid "Hard drive"
+msgstr "hARD DRIVE"
+
+#. type: Plain text
+#: MacroIncludesHugo.adoc:24
+msgid "Permanent storage for operating system and/or user files."
+msgstr "pERMANENT STORAGE FOR OPERATING SYSTEM AND/OR USER FILES."
+
+#. type: Labeled list
+#: MacroIncludesHugo.adoc:24
+#, no-wrap
+msgid "RAM"
+msgstr "ram"
+
+#. type: Plain text
+#: MacroIncludesHugo.adoc:25
+msgid "Temporarily stores information the CPU uses during operation."
+msgstr "tEMPORARILY STORES INFORMATION THE cpu USES DURING OPERATION."
+
+#. type: Labeled list
+#: MacroIncludesHugo.adoc:25
+#, no-wrap
+msgid "Keyboard"
+msgstr "kEYBOARD"
+
+#. type: Plain text
+#: MacroIncludesHugo.adoc:26
+msgid "Used to enter text or control items on the screen."
+msgstr "uSED TO ENTER TEXT OR CONTROL ITEMS ON THE SCREEN."
+
+#. type: Labeled list
+#: MacroIncludesHugo.adoc:26
+#, no-wrap
+msgid "Mouse"
+msgstr "mOUSE"
+
+#. type: Plain text
+#: MacroIncludesHugo.adoc:27
+msgid "Used to point to and select items on your computer screen."
+msgstr "uSED TO POINT TO AND SELECT ITEMS ON YOUR COMPUTER SCREEN."
+
+#. type: Labeled list
+#: MacroIncludesHugo.adoc:27
+#, no-wrap
+msgid "Monitor"
+msgstr "mONITOR"
+
+#. type: Plain text
+#: MacroIncludesHugo.adoc:28 MacroIncludesHugo.adoc:29
+#: MacroIncludesHugo.adoc:30
+msgid "Displays information in visual form using text and graphics."
+msgstr "dISPLAYS INFORMATION IN VISUAL FORM USING TEXT AND GRAPHICS."
+
+#. type: Labeled list
+#: MacroIncludesHugo.adoc:28
+#, no-wrap
+msgid "Include"
+msgstr "iNCLUDE"
+
+#. type: Labeled list
+#: MacroIncludesHugo.adoc:29 MacroIncludesHugo.adoc:30
+#: MacroIncludesHugo.adoc:31
+#, no-wrap
+msgid "include"
+msgstr "INCLUDE"
+
+#. type: Plain text
+#: MacroIncludesHugo.adoc:31
+msgid "Displays information in visual form using[] text and graphics."
+msgstr "dISPLAYS INFORMATION IN VISUAL FORM USING[] TEXT AND GRAPHICS."
+
+#. type: Plain text
+#: MacroIncludesHugo.adoc:31
+msgid "Displays information in visual form using text and graphics.[]"
+msgstr "dISPLAYS INFORMATION IN VISUAL FORM USING TEXT AND GRAPHICS.[]"
diff --git a/t/fmt/asciidoc/MacroIncludesHugo.pot b/t/fmt/asciidoc/MacroIncludesHugo.pot
new file mode 100644
index 0000000..f999645
--- /dev/null
+++ b/t/fmt/asciidoc/MacroIncludesHugo.pot
@@ -0,0 +1,119 @@
+# SOME DESCRIPTIVE TITLE
+# Copyright (C) YEAR Free Software Foundation, Inc.
+# This file is distributed under the same license as the PACKAGE package.
+# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
+#
+#, fuzzy
+msgid ""
+msgstr ""
+"Project-Id-Version: PACKAGE VERSION\n"
+"POT-Creation-Date: 2022-01-23 10:48-0300\n"
+"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
+"Language-Team: LANGUAGE <LL@li.org>\n"
+"Language: \n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+
+#. type: Title ==
+#: MacroIncludesHugo.adoc:1
+#, no-wrap
+msgid "Includes"
+msgstr ""
+
+#. type: Title ==
+#: MacroIncludesHugo.adoc:20
+#, no-wrap
+msgid "Description List"
+msgstr ""
+
+#. type: Labeled list
+#: MacroIncludesHugo.adoc:22
+#, no-wrap
+msgid "CPU"
+msgstr ""
+
+#. type: Plain text
+#: MacroIncludesHugo.adoc:23
+msgid "The brain of the computer."
+msgstr ""
+
+#. type: Labeled list
+#: MacroIncludesHugo.adoc:23
+#, no-wrap
+msgid "Hard drive"
+msgstr ""
+
+#. type: Plain text
+#: MacroIncludesHugo.adoc:24
+msgid "Permanent storage for operating system and/or user files."
+msgstr ""
+
+#. type: Labeled list
+#: MacroIncludesHugo.adoc:24
+#, no-wrap
+msgid "RAM"
+msgstr ""
+
+#. type: Plain text
+#: MacroIncludesHugo.adoc:25
+msgid "Temporarily stores information the CPU uses during operation."
+msgstr ""
+
+#. type: Labeled list
+#: MacroIncludesHugo.adoc:25
+#, no-wrap
+msgid "Keyboard"
+msgstr ""
+
+#. type: Plain text
+#: MacroIncludesHugo.adoc:26
+msgid "Used to enter text or control items on the screen."
+msgstr ""
+
+#. type: Labeled list
+#: MacroIncludesHugo.adoc:26
+#, no-wrap
+msgid "Mouse"
+msgstr ""
+
+#. type: Plain text
+#: MacroIncludesHugo.adoc:27
+msgid "Used to point to and select items on your computer screen."
+msgstr ""
+
+#. type: Labeled list
+#: MacroIncludesHugo.adoc:27
+#, no-wrap
+msgid "Monitor"
+msgstr ""
+
+#. type: Plain text
+#: MacroIncludesHugo.adoc:28 MacroIncludesHugo.adoc:29
+#: MacroIncludesHugo.adoc:30
+msgid "Displays information in visual form using text and graphics."
+msgstr ""
+
+#. type: Labeled list
+#: MacroIncludesHugo.adoc:28
+#, no-wrap
+msgid "Include"
+msgstr ""
+
+#. type: Labeled list
+#: MacroIncludesHugo.adoc:29 MacroIncludesHugo.adoc:30
+#: MacroIncludesHugo.adoc:31
+#, no-wrap
+msgid "include"
+msgstr ""
+
+#. type: Plain text
+#: MacroIncludesHugo.adoc:31
+msgid "Displays information in visual form using[] text and graphics."
+msgstr ""
+
+#. type: Plain text
+#: MacroIncludesHugo.adoc:31
+msgid "Displays information in visual form using text and graphics.[]"
+msgstr ""
diff --git a/t/fmt/asciidoc/MacroIncludesHugo.trans b/t/fmt/asciidoc/MacroIncludesHugo.trans
new file mode 100644
index 0000000..a1f4a14
--- /dev/null
+++ b/t/fmt/asciidoc/MacroIncludesHugo.trans
@@ -0,0 +1,31 @@
+== iNCLUDES
+
+include::shared/attributes/attributes-{{% lang %}}.adoc[]
+include::shared/{{% lang %}}/teams.adoc[]
+include::shared/{{% lang %}}/mailing-lists.adoc[]
+include::shared/{{% lang %}}/urls.adoc[]
+include::partial.adoc[]
+include::chapter01.adoc[]
+include::chapter01.adoc[leveloffset=+1]
+include::attributes-settings.adoc[]
+include::attributes-urls.adoc[]
+include::{includedir}/fragment1.adoc[]
+include::{sourcedir}/org/asciidoctor/Asciidoctor.java[]
+include::sales/2016/results.csv[]
+include::complex-list-item.adoc[]
+include::filename.txt[lines="1..10,15..20"]
+include::filename.txt[lines=12..-1]
+include::https://raw.githubusercontent.com/asciidoctor/asciidoctor/main/README.adoc[]
+
+== dESCRIPTION lIST
+
+cpu:: tHE BRAIN OF THE COMPUTER.
+hARD DRIVE:: pERMANENT STORAGE FOR OPERATING SYSTEM AND/OR USER FILES.
+ram:: tEMPORARILY STORES INFORMATION THE cpu USES DURING OPERATION.
+kEYBOARD:: uSED TO ENTER TEXT OR CONTROL ITEMS ON THE SCREEN.
+mOUSE:: uSED TO POINT TO AND SELECT ITEMS ON YOUR COMPUTER SCREEN.
+mONITOR:: dISPLAYS INFORMATION IN VISUAL FORM USING TEXT AND GRAPHICS.
+iNCLUDE:: dISPLAYS INFORMATION IN VISUAL FORM USING TEXT AND GRAPHICS.
+INCLUDE:: dISPLAYS INFORMATION IN VISUAL FORM USING TEXT AND GRAPHICS.
+INCLUDE:: dISPLAYS INFORMATION IN VISUAL FORM USING[] TEXT AND GRAPHICS.
+INCLUDE:: dISPLAYS INFORMATION IN VISUAL FORM USING TEXT AND GRAPHICS.[]
diff --git a/t/fmt/asciidoc/NoImageTarget.adoc b/t/fmt/asciidoc/NoImageTarget.adoc
new file mode 100644
index 0000000..b6b29d9
--- /dev/null
+++ b/t/fmt/asciidoc/NoImageTarget.adoc
@@ -0,0 +1,19 @@
+Test Images targets
+===========================================
+
+Image Targets
+-------------
+
+Paragraph before blockimage
+image::foo.png[Block image Alt]
+paragraph after blockimage
+
+image::foo.png["Block image with title", title="My image title"]
+
+.External image title
+image::foo.png["Block image with external title"]
+
+image::foo.png[title="Image with title but without alt-text"]
+
+Block image macro without alt text:
+image::foo.png[]
diff --git a/t/fmt/asciidoc/NoImageTarget.norm b/t/fmt/asciidoc/NoImageTarget.norm
new file mode 100644
index 0000000..b6b29d9
--- /dev/null
+++ b/t/fmt/asciidoc/NoImageTarget.norm
@@ -0,0 +1,19 @@
+Test Images targets
+===========================================
+
+Image Targets
+-------------
+
+Paragraph before blockimage
+image::foo.png[Block image Alt]
+paragraph after blockimage
+
+image::foo.png["Block image with title", title="My image title"]
+
+.External image title
+image::foo.png["Block image with external title"]
+
+image::foo.png[title="Image with title but without alt-text"]
+
+Block image macro without alt text:
+image::foo.png[]
diff --git a/t/fmt/asciidoc/NoImageTarget.po b/t/fmt/asciidoc/NoImageTarget.po
new file mode 100644
index 0000000..536a640
--- /dev/null
+++ b/t/fmt/asciidoc/NoImageTarget.po
@@ -0,0 +1,49 @@
+# SOME DESCRIPTIVE TITLE
+# Copyright (C) YEAR Free Software Foundation, Inc.
+# This file is distributed under the same license as the PACKAGE package.
+# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
+#
+#, fuzzy
+msgid ""
+msgstr ""
+"Project-Id-Version: PACKAGE VERSION\n"
+"POT-Creation-Date: 2018-12-02 17:37+0100\n"
+"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
+"Language-Team: LANGUAGE <LL@LI.ORG>\n"
+"Language: \n"
+"MIME-Version: 1.0\n"
+"Content-Type: TEXT/PLAIN; CHARSET=UTF-8\n"
+"Content-Transfer-Encoding: 8BIT\n"
+
+#. type: Plain text
+#: NoImageTarget.adoc:2
+msgid "Test Images targets"
+msgstr "TEST IMAGES TARGETS"
+
+#. type: Title -
+#: NoImageTarget.adoc:5
+#, no-wrap
+msgid "Image Targets"
+msgstr "IMAGE TARGETS"
+
+#. type: delimited block =
+#: NoImageTarget.adoc:8
+msgid "Paragraph before blockimage"
+msgstr "PARAGRAPH BEFORE BLOCKIMAGE"
+
+#. type: delimited block =
+#: NoImageTarget.adoc:10
+msgid "paragraph after blockimage"
+msgstr "PARAGRAPH AFTER BLOCKIMAGE"
+
+#. type: Block title
+#: NoImageTarget.adoc:13
+#, no-wrap
+msgid "External image title"
+msgstr "EXTERNAL IMAGE TITLE"
+
+#. type: delimited block =
+#: NoImageTarget.adoc:19
+msgid "Block image macro without alt text:"
+msgstr "BLOCK IMAGE MACRO WITHOUT ALT TEXT:"
diff --git a/t/fmt/asciidoc/NoImageTarget.pot b/t/fmt/asciidoc/NoImageTarget.pot
new file mode 100644
index 0000000..658891f
--- /dev/null
+++ b/t/fmt/asciidoc/NoImageTarget.pot
@@ -0,0 +1,49 @@
+# SOME DESCRIPTIVE TITLE
+# Copyright (C) YEAR Free Software Foundation, Inc.
+# This file is distributed under the same license as the PACKAGE package.
+# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
+#
+#, fuzzy
+msgid ""
+msgstr ""
+"Project-Id-Version: PACKAGE VERSION\n"
+"POT-Creation-Date: 2018-12-02 17:37+0100\n"
+"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
+"Language-Team: LANGUAGE <LL@li.org>\n"
+"Language: \n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+
+#. type: Plain text
+#: NoImageTarget.adoc:2
+msgid "Test Images targets"
+msgstr ""
+
+#. type: Title -
+#: NoImageTarget.adoc:5
+#, no-wrap
+msgid "Image Targets"
+msgstr ""
+
+#. type: delimited block =
+#: NoImageTarget.adoc:8
+msgid "Paragraph before blockimage"
+msgstr ""
+
+#. type: delimited block =
+#: NoImageTarget.adoc:10
+msgid "paragraph after blockimage"
+msgstr ""
+
+#. type: Block title
+#: NoImageTarget.adoc:13
+#, no-wrap
+msgid "External image title"
+msgstr ""
+
+#. type: delimited block =
+#: NoImageTarget.adoc:19
+msgid "Block image macro without alt text:"
+msgstr ""
diff --git a/t/fmt/asciidoc/NoImageTarget.trans b/t/fmt/asciidoc/NoImageTarget.trans
new file mode 100644
index 0000000..4a85d81
--- /dev/null
+++ b/t/fmt/asciidoc/NoImageTarget.trans
@@ -0,0 +1,19 @@
+TEST IMAGES TARGETS
+===========================================
+
+IMAGE TARGETS
+-------------
+
+PARAGRAPH BEFORE BLOCKIMAGE
+image::foo.png[Block image Alt]
+PARAGRAPH AFTER BLOCKIMAGE
+
+image::foo.png["Block image with title", title="My image title"]
+
+.EXTERNAL IMAGE TITLE
+image::foo.png["Block image with external title"]
+
+image::foo.png[title="Image with title but without alt-text"]
+
+BLOCK IMAGE MACRO WITHOUT ALT TEXT:
+image::foo.png[]
diff --git a/t/fmt/asciidoc/Paragraphs.adoc b/t/fmt/asciidoc/Paragraphs.adoc
new file mode 100644
index 0000000..1715370
--- /dev/null
+++ b/t/fmt/asciidoc/Paragraphs.adoc
@@ -0,0 +1,69 @@
+Test Paragraphs
+===============
+
+Default Paragraph
+-----------------
+
+Some paragraph text. Some paragraph text. Some paragraph text.
+Some paragraph text. Some paragraph text. Some paragraph text.
+
+Literal Paragraph
+-----------------
+
+ Some paragraph text. Some paragraph text. Some paragraph text.
+ Some paragraph text. Some paragraph text. Some paragraph text.
+
+[verse]
+Some paragraph text.
+Some paragraph text.
+Some paragraph text.
+Some paragraph text.
+Some paragraph text.
+Some paragraph text.
+
+Admonition Paragraphs
+---------------------
+
+NOTE: This is an example note.
+
+[NOTE]
+This is an example note.
+
+TIP: This is an example tip.
+
+[TIP]
+This is an example tip.
+
+IMPORTANT: This is an example important.
+
+[IMPORTANT]
+This is an example important.
+
+WARNING: This is an example warning.
+
+[WARNING]
+This is an example warning.
+
+CAUTION: This is an example caution.
+
+[CAUTION]
+This is an example caution.
+
+[icons=None, caption="My Special Note"]
+NOTE: This is my special note.
+
+[icon="./images/icons/wink.png"]
+NOTE: What lovely war.
+
+If --stdin was also used then this is prefixed by either "pack\t", or "keep\t" if a
+new .keep file was successfully created. This is useful to remove a
+.keep file used as a lock to prevent the race with 'git repack'
+mentioned above.
+
+TIP: we're starting a
+multi-line
+Tip box.
+
+TIP: *now bold*
+text in
+the beginning
diff --git a/t/fmt/asciidoc/Paragraphs.norm b/t/fmt/asciidoc/Paragraphs.norm
new file mode 100644
index 0000000..af9bf15
--- /dev/null
+++ b/t/fmt/asciidoc/Paragraphs.norm
@@ -0,0 +1,61 @@
+Test Paragraphs
+===============
+
+Default Paragraph
+-----------------
+
+Some paragraph text. Some paragraph text. Some paragraph text. Some paragraph text. Some paragraph text. Some paragraph text.
+
+Literal Paragraph
+-----------------
+
+ Some paragraph text. Some paragraph text. Some paragraph text.
+ Some paragraph text. Some paragraph text. Some paragraph text.
+
+[verse]
+Some paragraph text.
+Some paragraph text.
+Some paragraph text.
+Some paragraph text.
+Some paragraph text.
+Some paragraph text.
+
+Admonition Paragraphs
+---------------------
+
+NOTE: This is an example note.
+
+[NOTE]
+This is an example note.
+
+TIP: This is an example tip.
+
+[TIP]
+This is an example tip.
+
+IMPORTANT: This is an example important.
+
+[IMPORTANT]
+This is an example important.
+
+WARNING: This is an example warning.
+
+[WARNING]
+This is an example warning.
+
+CAUTION: This is an example caution.
+
+[CAUTION]
+This is an example caution.
+
+[icons=None, caption="My Special Note"]
+NOTE: This is my special note.
+
+[icon="./images/icons/wink.png"]
+NOTE: What lovely war.
+
+If --stdin was also used then this is prefixed by either "pack\t", or "keep\t" if a new .keep file was successfully created. This is useful to remove a .keep file used as a lock to prevent the race with 'git repack' mentioned above.
+
+TIP: we're starting a multi-line Tip box.
+
+TIP: *now bold* text in the beginning
diff --git a/t/fmt/asciidoc/Paragraphs.po b/t/fmt/asciidoc/Paragraphs.po
new file mode 100644
index 0000000..b26d7d2
--- /dev/null
+++ b/t/fmt/asciidoc/Paragraphs.po
@@ -0,0 +1,140 @@
+# SOME DESCRIPTIVE TITLE
+# Copyright (C) YEAR Free Software Foundation, Inc.
+# This file is distributed under the same license as the PACKAGE package.
+# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
+#
+#, fuzzy
+msgid ""
+msgstr ""
+"Project-Id-Version: PACKAGE VERSION\n"
+"POT-Creation-Date: 2020-04-27 23:11+0200\n"
+"PO-Revision-Date: 2008-10-12 22:03+0200\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
+"Language-Team: LANGUAGE <LL@li.org>\n"
+"Language: \n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+
+#. type: Title =
+#: Paragraphs.adoc:2
+#, no-wrap
+msgid "Test Paragraphs"
+msgstr "TEST PARAGRAPHS"
+
+#. type: Title -
+#: Paragraphs.adoc:5
+#, no-wrap
+msgid "Default Paragraph"
+msgstr "DEFAULT PARAGRAPH"
+
+#. type: Plain text
+#: Paragraphs.adoc:9
+msgid ""
+"Some paragraph text. Some paragraph text. Some paragraph text. Some "
+"paragraph text. Some paragraph text. Some paragraph text."
+msgstr ""
+"SOME PARAGRAPH TEXT. SOME PARAGRAPH TEXT. SOME PARAGRAPH TEXT. SOME "
+"PARAGRAPH TEXT. SOME PARAGRAPH TEXT. SOME PARAGRAPH TEXT."
+
+#. type: Title -
+#: Paragraphs.adoc:11
+#, no-wrap
+msgid "Literal Paragraph"
+msgstr "LITERAL PARAGRAPH"
+
+#. type: Plain text
+#: Paragraphs.adoc:15
+#, no-wrap
+msgid ""
+" Some paragraph text. Some paragraph text. Some paragraph text. \n"
+" Some paragraph text. Some paragraph text. Some paragraph text. \n"
+msgstr ""
+" SOME PARAGRAPH TEXT. SOME PARAGRAPH TEXT. SOME PARAGRAPH TEXT. \n"
+" SOME PARAGRAPH TEXT. SOME PARAGRAPH TEXT. SOME PARAGRAPH TEXT. \n"
+
+#. type: Plain text
+#: Paragraphs.adoc:23
+#, no-wrap
+msgid ""
+"Some paragraph text.\n"
+"Some paragraph text.\n"
+"Some paragraph text. \n"
+"Some paragraph text.\n"
+"Some paragraph text.\n"
+"Some paragraph text. \n"
+msgstr ""
+"SOME PARAGRAPH TEXT.\n"
+"SOME PARAGRAPH TEXT.\n"
+"SOME PARAGRAPH TEXT. \n"
+"SOME PARAGRAPH TEXT.\n"
+"SOME PARAGRAPH TEXT.\n"
+"SOME PARAGRAPH TEXT. \n"
+
+#. type: Title -
+#: Paragraphs.adoc:25
+#, no-wrap
+msgid "Admonition Paragraphs"
+msgstr "ADMONITION PARAGRAPHS"
+
+#. type: Plain text
+#: Paragraphs.adoc:28 Paragraphs.adoc:31
+msgid "This is an example note."
+msgstr "THIS IS AN EXAMPLE NOTE."
+
+#. type: Plain text
+#: Paragraphs.adoc:33 Paragraphs.adoc:36
+msgid "This is an example tip."
+msgstr "THIS IS AN EXAMPLE TIP."
+
+#. type: Plain text
+#: Paragraphs.adoc:38 Paragraphs.adoc:41
+msgid "This is an example important."
+msgstr "THIS IS AN EXAMPLE IMPORTANT."
+
+#. type: Plain text
+#: Paragraphs.adoc:43 Paragraphs.adoc:46
+msgid "This is an example warning."
+msgstr "THIS IS AN EXAMPLE WARNING."
+
+#. type: Plain text
+#: Paragraphs.adoc:48 Paragraphs.adoc:51
+msgid "This is an example caution."
+msgstr "THIS IS AN EXAMPLE CAUTION."
+
+#. type: Named 'caption' AttributeList argument for style 'icons'
+#: Paragraphs.adoc:52
+#, no-wrap
+msgid "My Special Note"
+msgstr "MY SPECIAL NOTE"
+
+#. type: Plain text
+#: Paragraphs.adoc:54
+msgid "This is my special note."
+msgstr "THIS IS MY SPECIAL NOTE."
+
+#. type: Named 'icon' AttributeList argument for style 'icon'
+#: Paragraphs.adoc:55
+#, no-wrap
+msgid "./images/icons/wink.png"
+msgstr ""
+
+#. type: Plain text
+#: Paragraphs.adoc:57
+msgid "What lovely war."
+msgstr "WHAT LOVELY WAR."
+
+#. type: Plain text
+#: Paragraphs.adoc:62
+msgid "If --stdin was also used then this is prefixed by either \"pack\\t\", or \"keep\\t\" if a new .keep file was successfully created. This is useful to remove a .keep file used as a lock to prevent the race with 'git repack' mentioned above."
+msgstr "IF --STDIN WAS ALSO USED THEN THIS IS PREFIXED BY EITHER \"PACK\\T\", OR \"KEEP\\T\" IF A NEW .KEEP FILE WAS SUCCESSFULLY CREATED. THIS IS USEFUL TO REMOVE A .KEEP FILE USED AS A LOCK TO PREVENT THE RACE WITH 'GIT REPACK' MENTIONED ABOVE."
+
+#. type: Plain text
+#: Paragraphs.adoc:66
+msgid "we're starting a multi-line Tip box."
+msgstr "WE'RE STARTING A MULTI-LINE TIP BOX."
+
+#. type: Plain text
+#: Paragraphs.adoc:69
+msgid "*now bold* text in the beginning"
+msgstr "*NOW BOLD* TEXT IN THE BEGINNING"
diff --git a/t/fmt/asciidoc/Paragraphs.pot b/t/fmt/asciidoc/Paragraphs.pot
new file mode 100644
index 0000000..cbc8d5f
--- /dev/null
+++ b/t/fmt/asciidoc/Paragraphs.pot
@@ -0,0 +1,134 @@
+# SOME DESCRIPTIVE TITLE
+# Copyright (C) YEAR Free Software Foundation, Inc.
+# This file is distributed under the same license as the PACKAGE package.
+# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
+#
+#, fuzzy
+msgid ""
+msgstr ""
+"Project-Id-Version: PACKAGE VERSION\n"
+"POT-Creation-Date: 2020-04-27 23:11+0200\n"
+"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
+"Language-Team: LANGUAGE <LL@li.org>\n"
+"Language: \n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+
+#. type: Title =
+#: Paragraphs.adoc:2
+#, no-wrap
+msgid "Test Paragraphs"
+msgstr ""
+
+#. type: Title -
+#: Paragraphs.adoc:5
+#, no-wrap
+msgid "Default Paragraph"
+msgstr ""
+
+#. type: Plain text
+#: Paragraphs.adoc:9
+msgid ""
+"Some paragraph text. Some paragraph text. Some paragraph text. Some "
+"paragraph text. Some paragraph text. Some paragraph text."
+msgstr ""
+
+#. type: Title -
+#: Paragraphs.adoc:11
+#, no-wrap
+msgid "Literal Paragraph"
+msgstr ""
+
+#. type: Plain text
+#: Paragraphs.adoc:15
+#, no-wrap
+msgid ""
+" Some paragraph text. Some paragraph text. Some paragraph text. \n"
+" Some paragraph text. Some paragraph text. Some paragraph text. \n"
+msgstr ""
+
+#. type: Plain text
+#: Paragraphs.adoc:23
+#, no-wrap
+msgid ""
+"Some paragraph text.\n"
+"Some paragraph text.\n"
+"Some paragraph text. \n"
+"Some paragraph text.\n"
+"Some paragraph text.\n"
+"Some paragraph text. \n"
+msgstr ""
+
+#. type: Title -
+#: Paragraphs.adoc:25
+#, no-wrap
+msgid "Admonition Paragraphs"
+msgstr ""
+
+#. type: Plain text
+#: Paragraphs.adoc:28 Paragraphs.adoc:31
+msgid "This is an example note."
+msgstr ""
+
+#. type: Plain text
+#: Paragraphs.adoc:33 Paragraphs.adoc:36
+msgid "This is an example tip."
+msgstr ""
+
+#. type: Plain text
+#: Paragraphs.adoc:38 Paragraphs.adoc:41
+msgid "This is an example important."
+msgstr ""
+
+#. type: Plain text
+#: Paragraphs.adoc:43 Paragraphs.adoc:46
+msgid "This is an example warning."
+msgstr ""
+
+#. type: Plain text
+#: Paragraphs.adoc:48 Paragraphs.adoc:51
+msgid "This is an example caution."
+msgstr ""
+
+#. type: Named 'caption' AttributeList argument for style 'icons'
+#: Paragraphs.adoc:52
+#, no-wrap
+msgid "My Special Note"
+msgstr ""
+
+#. type: Plain text
+#: Paragraphs.adoc:54
+msgid "This is my special note."
+msgstr ""
+
+#. type: Named 'icon' AttributeList argument for style 'icon'
+#: Paragraphs.adoc:55
+#, no-wrap
+msgid "./images/icons/wink.png"
+msgstr ""
+
+#. type: Plain text
+#: Paragraphs.adoc:57
+msgid "What lovely war."
+msgstr ""
+
+#. type: Plain text
+#: Paragraphs.adoc:62
+msgid ""
+"If --stdin was also used then this is prefixed by either \"pack\\t\", or "
+"\"keep\\t\" if a new .keep file was successfully created. This is useful to "
+"remove a .keep file used as a lock to prevent the race with 'git repack' "
+"mentioned above."
+msgstr ""
+
+#. type: Plain text
+#: Paragraphs.adoc:66
+msgid "we're starting a multi-line Tip box."
+msgstr ""
+
+#. type: Plain text
+#: Paragraphs.adoc:69
+msgid "*now bold* text in the beginning"
+msgstr ""
diff --git a/t/fmt/asciidoc/Paragraphs.trans b/t/fmt/asciidoc/Paragraphs.trans
new file mode 100644
index 0000000..56b646f
--- /dev/null
+++ b/t/fmt/asciidoc/Paragraphs.trans
@@ -0,0 +1,61 @@
+TEST PARAGRAPHS
+===============
+
+DEFAULT PARAGRAPH
+-----------------
+
+SOME PARAGRAPH TEXT. SOME PARAGRAPH TEXT. SOME PARAGRAPH TEXT. SOME PARAGRAPH TEXT. SOME PARAGRAPH TEXT. SOME PARAGRAPH TEXT.
+
+LITERAL PARAGRAPH
+-----------------
+
+ SOME PARAGRAPH TEXT. SOME PARAGRAPH TEXT. SOME PARAGRAPH TEXT.
+ SOME PARAGRAPH TEXT. SOME PARAGRAPH TEXT. SOME PARAGRAPH TEXT.
+
+[verse]
+SOME PARAGRAPH TEXT.
+SOME PARAGRAPH TEXT.
+SOME PARAGRAPH TEXT.
+SOME PARAGRAPH TEXT.
+SOME PARAGRAPH TEXT.
+SOME PARAGRAPH TEXT.
+
+ADMONITION PARAGRAPHS
+---------------------
+
+NOTE: THIS IS AN EXAMPLE NOTE.
+
+[NOTE]
+THIS IS AN EXAMPLE NOTE.
+
+TIP: THIS IS AN EXAMPLE TIP.
+
+[TIP]
+THIS IS AN EXAMPLE TIP.
+
+IMPORTANT: THIS IS AN EXAMPLE IMPORTANT.
+
+[IMPORTANT]
+THIS IS AN EXAMPLE IMPORTANT.
+
+WARNING: THIS IS AN EXAMPLE WARNING.
+
+[WARNING]
+THIS IS AN EXAMPLE WARNING.
+
+CAUTION: THIS IS AN EXAMPLE CAUTION.
+
+[CAUTION]
+THIS IS AN EXAMPLE CAUTION.
+
+[icons=None, caption="MY SPECIAL NOTE"]
+NOTE: THIS IS MY SPECIAL NOTE.
+
+[icon="./images/icons/wink.png"]
+NOTE: WHAT LOVELY WAR.
+
+IF --STDIN WAS ALSO USED THEN THIS IS PREFIXED BY EITHER "PACK\T", OR "KEEP\T" IF A NEW .KEEP FILE WAS SUCCESSFULLY CREATED. THIS IS USEFUL TO REMOVE A .KEEP FILE USED AS A LOCK TO PREVENT THE RACE WITH 'GIT REPACK' MENTIONED ABOVE.
+
+TIP: WE'RE STARTING A MULTI-LINE TIP BOX.
+
+TIP: *NOW BOLD* TEXT IN THE BEGINNING
diff --git a/t/fmt/asciidoc/StrictDelimitedBlocks.adoc b/t/fmt/asciidoc/StrictDelimitedBlocks.adoc
new file mode 100644
index 0000000..2810232
--- /dev/null
+++ b/t/fmt/asciidoc/StrictDelimitedBlocks.adoc
@@ -0,0 +1,194 @@
+//po4a: style[,caption]
+Test Delimited Blocks
+=====================
+
+Predefined Delimited Blocks
+---------------------------
+
+CommentBlock
+
+//////////////////////////
+This is a Comment block.
+This is a Comment block.
+
+ This is a Comment block.
+ This is a Comment block.
+
+ - This is a Comment block.
+ This is a Comment block.
+//////////////////////////
+
+PassthroughBlock
+
+++++++++++++++++++++++++++
+This is a Passthrough block.
+This is a Passthrough block.
+
+ This is a Passthrough block.
+ This is a Passthrough block.
+
+ - This is a Passthrough block.
+ This is a Passthrough block.
+++++++++++++++++++++++++++
+
+ListingBlock
+
+--------------------------
+This is a Listing block.
+This is a Listing block.
+
+ This is a Listing block.
+ This is a Listing block.
+
+ - This is a Listing block.
+ This is a Listing block.
+--------------------------
+
+LiteralBlock
+
+..........................
+This is a Literal block.
+This is a Literal block.
+
+ This is a Literal block.
+ This is a Literal block.
+
+ - This is a Literal block.
+ This is a Literal block.
+..........................
+
+SidebarBlock
+
+**************************
+This is a Sidebar block.
+This is a Sidebar block.
+
+ This is a Sidebar block.
+ This is a Sidebar block.
+
+ - This is a Sidebar block.
+ This is a Sidebar block.
+**************************
+
+QuoteBlock
+
+__________________________
+This is a Quote block.
+This is a Quote block.
+
+ This is a Quote block.
+ This is a Quote block.
+
+ - This is a Quote block.
+ This is a Quote block.
+__________________________
+
+
+[quote, Bertrand Russell, The World of Mathematics (1956)]
+____________________________________________________________________
+A good notation has subtlety and suggestiveness which at times makes
+it almost seem like a live teacher.
+____________________________________________________________________
+
+[verse, William Blake, from Auguries of Innocence]
+__________________________________________________
+To see a world in a grain of sand,
+And a heaven in a wild flower,
+Hold infinity in the palm of your hand,
+And eternity in an hour.
+__________________________________________________
+
+ExampleBlock
+
+==========================
+This is a Example block.
+This is a Example block.
+
+ This is a Example block.
+ This is a Example block.
+
+ - This is a Example block.
+ This is a Example block.
+==========================
+
+.An example
+=====================================================================
+Qui in magna commodo, est labitur dolorum an. Est ne magna primis
+adolescens.
+=====================================================================
+
+[caption="Example 1: "]
+.An example with a custom caption
+=====================================================================
+Qui in magna commodo, est labitur dolorum an. Est ne magna primis
+adolescens.
+=====================================================================
+
+[NOTE]
+.A NOTE block
+=====================================================================
+Qui in magna commodo, est labitur dolorum an. Est ne magna primis
+adolescens.
+
+. Fusce euismod commodo velit.
+. Vivamus fringilla mi eu lacus.
+ .. Fusce euismod commodo velit.
+ .. Vivamus fringilla mi eu lacus.
+. Donec eget arcu bibendum
+ nunc consequat lobortis.
+=====================================================================
+
+Filter blocks
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~
+This is a Filter block.
+This is a Filter block.
+
+ This is a Filter block.
+ This is a Filter block.
+
+ - This is a Filter block.
+ This is a Filter block.
+~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+
+
+//////////////////////////
+test
+
+--------------------------
+Listing inside Comment
+--------------------------
+
+end of test
+//////////////////////////
+
+++++++++++++++++++++++++++
+test
+
+--------------------------
+Listing inside Passthrough
+--------------------------
+
+end of test
+++++++++++++++++++++++++++
+
+--------------------------
+test
+
+__________________________
+QuoteBlock inside Listing
+__________________________
+
+end of test
+--------------------------
+
+----
+test
+
+-------------------------------
+Listing inside a Listing
+-------------------------------
+
+end of test
+----
diff --git a/t/fmt/asciidoc/StrictDelimitedBlocks.norm b/t/fmt/asciidoc/StrictDelimitedBlocks.norm
new file mode 100644
index 0000000..f1c6a00
--- /dev/null
+++ b/t/fmt/asciidoc/StrictDelimitedBlocks.norm
@@ -0,0 +1,183 @@
+//po4a: style[,caption]
+Test Delimited Blocks
+=====================
+
+Predefined Delimited Blocks
+---------------------------
+
+CommentBlock
+
+//////////////////////////
+This is a Comment block.
+This is a Comment block.
+
+ This is a Comment block.
+ This is a Comment block.
+
+ - This is a Comment block.
+ This is a Comment block.
+//////////////////////////
+
+PassthroughBlock
+
+++++++++++++++++++++++++++
+This is a Passthrough block.
+This is a Passthrough block.
+
+ This is a Passthrough block.
+ This is a Passthrough block.
+
+ - This is a Passthrough block.
+ This is a Passthrough block.
+++++++++++++++++++++++++++
+
+ListingBlock
+
+--------------------------
+This is a Listing block.
+This is a Listing block.
+
+ This is a Listing block.
+ This is a Listing block.
+
+ - This is a Listing block.
+ This is a Listing block.
+--------------------------
+
+LiteralBlock
+
+..........................
+This is a Literal block.
+This is a Literal block.
+
+ This is a Literal block.
+ This is a Literal block.
+
+ - This is a Literal block.
+ This is a Literal block.
+..........................
+
+SidebarBlock
+
+**************************
+This is a Sidebar block. This is a Sidebar block.
+
+ This is a Sidebar block.
+ This is a Sidebar block.
+
+ - This is a Sidebar block. This is a Sidebar block.
+**************************
+
+QuoteBlock
+
+__________________________
+This is a Quote block. This is a Quote block.
+
+ This is a Quote block.
+ This is a Quote block.
+
+ - This is a Quote block. This is a Quote block.
+__________________________
+
+
+[quote, "Bertrand Russell", "The World of Mathematics (1956)"]
+____________________________________________________________________
+A good notation has subtlety and suggestiveness which at times makes it almost seem like a live teacher.
+____________________________________________________________________
+
+[verse, "William Blake", "from Auguries of Innocence"]
+__________________________________________________
+To see a world in a grain of sand,
+And a heaven in a wild flower,
+Hold infinity in the palm of your hand,
+And eternity in an hour.
+__________________________________________________
+
+ExampleBlock
+
+==========================
+This is a Example block. This is a Example block.
+
+ This is a Example block.
+ This is a Example block.
+
+ - This is a Example block. This is a Example block.
+==========================
+
+.An example
+=====================================================================
+Qui in magna commodo, est labitur dolorum an. Est ne magna primis adolescens.
+=====================================================================
+
+[caption="Example 1: "]
+.An example with a custom caption
+=====================================================================
+Qui in magna commodo, est labitur dolorum an. Est ne magna primis adolescens.
+=====================================================================
+
+[NOTE]
+.A NOTE block
+=====================================================================
+Qui in magna commodo, est labitur dolorum an. Est ne magna primis adolescens.
+
+. Fusce euismod commodo velit.
+. Vivamus fringilla mi eu lacus.
+ .. Fusce euismod commodo velit.
+ .. Vivamus fringilla mi eu lacus.
+. Donec eget arcu bibendum nunc consequat lobortis.
+=====================================================================
+
+Filter blocks
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~
+This is a Filter block.
+This is a Filter block.
+
+ This is a Filter block.
+ This is a Filter block.
+
+ - This is a Filter block.
+ This is a Filter block.
+~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+
+
+//////////////////////////
+test
+
+--------------------------
+Listing inside Comment
+--------------------------
+
+end of test
+//////////////////////////
+
+++++++++++++++++++++++++++
+test
+
+--------------------------
+Listing inside Passthrough
+--------------------------
+
+end of test
+++++++++++++++++++++++++++
+
+--------------------------
+test
+
+__________________________
+QuoteBlock inside Listing
+__________________________
+
+end of test
+--------------------------
+
+----
+test
+
+-------------------------------
+Listing inside a Listing
+-------------------------------
+
+end of test
+----
diff --git a/t/fmt/asciidoc/StrictDelimitedBlocks.po b/t/fmt/asciidoc/StrictDelimitedBlocks.po
new file mode 100644
index 0000000..91f108e
--- /dev/null
+++ b/t/fmt/asciidoc/StrictDelimitedBlocks.po
@@ -0,0 +1,352 @@
+# SOME DESCRIPTIVE TITLE
+# Copyright (C) YEAR Free Software Foundation, Inc.
+# This file is distributed under the same license as the PACKAGE package.
+# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: PACKAGE VERSION\n"
+"POT-Creation-Date: 2012-10-09 09:04+0300\n"
+"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
+"Language-Team: LANGUAGE <LL@LI.ORG>\n"
+"Language: \n"
+"MIME-Version: 1.0\n"
+"Content-Type: TEXT/PLAIN; CHARSET=UTF-8\n"
+"Content-Transfer-Encoding: 8BIT\n"
+
+#. type: Title =
+#: StrictDelimitedBlocks.adoc:3
+#, no-wrap
+msgid "Test Delimited Blocks"
+msgstr "TEST DELIMITED BLOCKS"
+
+#. type: Title -
+#: StrictDelimitedBlocks.adoc:6
+#, no-wrap
+msgid "Predefined Delimited Blocks"
+msgstr "PREDEFINED DELIMITED BLOCKS"
+
+#. type: Plain text
+#: StrictDelimitedBlocks.adoc:9
+msgid "CommentBlock"
+msgstr "COMMENTBLOCK"
+
+#
+#
+#. This is a Comment block.
+#. This is a Comment block.
+#. This is a Comment block.
+#. This is a Comment block.
+#. - This is a Comment block.
+#. This is a Comment block.
+#. type: Plain text
+#: StrictDelimitedBlocks.adoc:22
+msgid "PassthroughBlock"
+msgstr "PASSTHROUGHBLOCK"
+
+#. type: delimited block + 26
+#: StrictDelimitedBlocks.adoc:26
+#, no-wrap
+msgid ""
+"This is a Passthrough block.\n"
+"This is a Passthrough block.\n"
+msgstr ""
+"THIS IS A PASSTHROUGH BLOCK.\n"
+"THIS IS A PASSTHROUGH BLOCK.\n"
+
+#. type: delimited block + 26
+#: StrictDelimitedBlocks.adoc:29
+#, no-wrap
+msgid ""
+" This is a Passthrough block.\n"
+" This is a Passthrough block.\n"
+msgstr ""
+" THIS IS A PASSTHROUGH BLOCK.\n"
+" THIS IS A PASSTHROUGH BLOCK.\n"
+
+#. type: delimited block + 26
+#: StrictDelimitedBlocks.adoc:32
+#, no-wrap
+msgid ""
+" - This is a Passthrough block.\n"
+" This is a Passthrough block.\n"
+msgstr ""
+" - THIS IS A PASSTHROUGH BLOCK.\n"
+" THIS IS A PASSTHROUGH BLOCK.\n"
+
+#. type: Plain text
+#: StrictDelimitedBlocks.adoc:35
+msgid "ListingBlock"
+msgstr "LISTINGBLOCK"
+
+#. type: delimited block - 26
+#: StrictDelimitedBlocks.adoc:39
+#, no-wrap
+msgid ""
+"This is a Listing block.\n"
+"This is a Listing block.\n"
+msgstr ""
+"THIS IS A LISTING BLOCK.\n"
+"THIS IS A LISTING BLOCK.\n"
+
+#. type: delimited block - 26
+#: StrictDelimitedBlocks.adoc:42
+#, no-wrap
+msgid ""
+" This is a Listing block.\n"
+" This is a Listing block.\n"
+msgstr ""
+" THIS IS A LISTING BLOCK.\n"
+" THIS IS A LISTING BLOCK.\n"
+
+#. type: delimited block - 26
+#: StrictDelimitedBlocks.adoc:45
+#, no-wrap
+msgid ""
+" - This is a Listing block.\n"
+" This is a Listing block.\n"
+msgstr ""
+" - THIS IS A LISTING BLOCK.\n"
+" THIS IS A LISTING BLOCK.\n"
+
+#. type: Plain text
+#: StrictDelimitedBlocks.adoc:48
+msgid "LiteralBlock"
+msgstr "LITERALBLOCK"
+
+#. type: delimited block . 26
+#: StrictDelimitedBlocks.adoc:52
+#, no-wrap
+msgid ""
+"This is a Literal block.\n"
+"This is a Literal block.\n"
+msgstr ""
+"THIS IS A LITERAL BLOCK.\n"
+"THIS IS A LITERAL BLOCK.\n"
+
+#. type: delimited block . 26
+#: StrictDelimitedBlocks.adoc:55
+#, no-wrap
+msgid ""
+" This is a Literal block.\n"
+" This is a Literal block.\n"
+msgstr ""
+" THIS IS A LITERAL BLOCK.\n"
+" THIS IS A LITERAL BLOCK.\n"
+
+#. type: delimited block . 26
+#: StrictDelimitedBlocks.adoc:58
+#, no-wrap
+msgid ""
+" - This is a Literal block.\n"
+" This is a Literal block.\n"
+msgstr ""
+" - THIS IS A LITERAL BLOCK.\n"
+" THIS IS A LITERAL BLOCK.\n"
+
+#. type: Plain text
+#: StrictDelimitedBlocks.adoc:61
+msgid "SidebarBlock"
+msgstr "SIDEBARBLOCK"
+
+#. type: delimited block * 26
+#: StrictDelimitedBlocks.adoc:65 StrictDelimitedBlocks.adoc:71
+msgid "This is a Sidebar block. This is a Sidebar block."
+msgstr "THIS IS A SIDEBAR BLOCK. THIS IS A SIDEBAR BLOCK."
+
+#. type: delimited block * 26
+#: StrictDelimitedBlocks.adoc:68
+#, no-wrap
+msgid ""
+" This is a Sidebar block.\n"
+" This is a Sidebar block.\n"
+msgstr ""
+" THIS IS A SIDEBAR BLOCK.\n"
+" THIS IS A SIDEBAR BLOCK.\n"
+
+#. type: Plain text
+#: StrictDelimitedBlocks.adoc:74
+msgid "QuoteBlock"
+msgstr "QUOTEBLOCK"
+
+#. type: delimited block _ 26
+#: StrictDelimitedBlocks.adoc:78 StrictDelimitedBlocks.adoc:84
+msgid "This is a Quote block. This is a Quote block."
+msgstr "THIS IS A QUOTE BLOCK. THIS IS A QUOTE BLOCK."
+
+#. type: delimited block _ 26
+#: StrictDelimitedBlocks.adoc:81
+#, no-wrap
+msgid ""
+" This is a Quote block.\n"
+" This is a Quote block.\n"
+msgstr ""
+" THIS IS A QUOTE BLOCK.\n"
+" THIS IS A QUOTE BLOCK.\n"
+
+#. type: Positional ($2) AttributeList argument for style 'quote'
+#: StrictDelimitedBlocks.adoc:87
+#, no-wrap
+msgid "Bertrand Russell"
+msgstr "BERTRAND RUSSELL"
+
+#. type: Positional ($3) AttributeList argument for style 'quote'
+#: StrictDelimitedBlocks.adoc:87
+#, no-wrap
+msgid "The World of Mathematics (1956)"
+msgstr "THE WORLD OF MATHEMATICS (1956)"
+
+#. type: delimited block _ 68
+#: StrictDelimitedBlocks.adoc:91
+msgid ""
+"A good notation has subtlety and suggestiveness which at times makes it "
+"almost seem like a live teacher."
+msgstr ""
+"A GOOD NOTATION HAS SUBTLETY AND SUGGESTIVENESS WHICH AT TIMES MAKES IT "
+"ALMOST SEEM LIKE A LIVE TEACHER."
+
+#. type: Positional ($2) AttributeList argument for style 'verse'
+#: StrictDelimitedBlocks.adoc:93
+#, no-wrap
+msgid "William Blake"
+msgstr "WILLIAM BLAKE"
+
+#. type: Positional ($3) AttributeList argument for style 'verse'
+#: StrictDelimitedBlocks.adoc:93
+#, no-wrap
+msgid "from Auguries of Innocence"
+msgstr "FROM AUGURIES OF INNOCENCE"
+
+#. type: delimited block _ 50
+#: StrictDelimitedBlocks.adoc:99
+#, no-wrap
+msgid ""
+"To see a world in a grain of sand,\n"
+"And a heaven in a wild flower,\n"
+"Hold infinity in the palm of your hand,\n"
+"And eternity in an hour.\n"
+msgstr ""
+"TO SEE A WORLD IN A GRAIN OF SAND,\n"
+"AND A HEAVEN IN A WILD FLOWER,\n"
+"HOLD INFINITY IN THE PALM OF YOUR HAND,\n"
+"AND ETERNITY IN AN HOUR.\n"
+
+#. type: Plain text
+#: StrictDelimitedBlocks.adoc:102
+msgid "ExampleBlock"
+msgstr "EXAMPLEBLOCK"
+
+#. type: delimited block = 26
+#: StrictDelimitedBlocks.adoc:106 StrictDelimitedBlocks.adoc:112
+msgid "This is a Example block. This is a Example block."
+msgstr "THIS IS A EXAMPLE BLOCK. THIS IS A EXAMPLE BLOCK."
+
+#. type: delimited block = 26
+#: StrictDelimitedBlocks.adoc:109
+#, no-wrap
+msgid ""
+" This is a Example block.\n"
+" This is a Example block.\n"
+msgstr ""
+" THIS IS A EXAMPLE BLOCK.\n"
+" THIS IS A EXAMPLE BLOCK.\n"
+
+#. type: Block title
+#: StrictDelimitedBlocks.adoc:114
+#, no-wrap
+msgid "An example"
+msgstr "AN EXAMPLE"
+
+#. type: delimited block = 69
+#: StrictDelimitedBlocks.adoc:118 StrictDelimitedBlocks.adoc:125 StrictDelimitedBlocks.adoc:132
+msgid ""
+"Qui in magna commodo, est labitur dolorum an. Est ne magna primis adolescens."
+msgstr ""
+"QUI IN MAGNA COMMODO, EST LABITUR DOLORUM AN. EST NE MAGNA PRIMIS ADOLESCENS."
+
+#. type: Named 'caption' AttributeList argument for style 'caption'
+#: StrictDelimitedBlocks.adoc:120
+#, no-wrap
+msgid "Example 1: "
+msgstr "EXAMPLE 1: "
+
+#. type: Block title
+#: StrictDelimitedBlocks.adoc:121
+#, no-wrap
+msgid "An example with a custom caption"
+msgstr "AN EXAMPLE WITH A CUSTOM CAPTION"
+
+#. type: Block title
+#: StrictDelimitedBlocks.adoc:128
+#, no-wrap
+msgid "A NOTE block"
+msgstr "A NOTE BLOCK"
+
+#. type: delimited block = 69
+#: StrictDelimitedBlocks.adoc:134 StrictDelimitedBlocks.adoc:136
+msgid "Fusce euismod commodo velit."
+msgstr "FUSCE EUISMOD COMMODO VELIT."
+
+#. type: delimited block = 69
+#: StrictDelimitedBlocks.adoc:135 StrictDelimitedBlocks.adoc:137
+msgid "Vivamus fringilla mi eu lacus."
+msgstr "VIVAMUS FRINGILLA MI EU LACUS."
+
+#. type: delimited block = 69
+#: StrictDelimitedBlocks.adoc:139
+msgid "Donec eget arcu bibendum nunc consequat lobortis."
+msgstr "DONEC EGET ARCU BIBENDUM NUNC CONSEQUAT LOBORTIS."
+
+#. type: Plain text
+#: StrictDelimitedBlocks.adoc:142
+msgid "Filter blocks"
+msgstr "FILTER BLOCKS"
+
+#. type: delimited block - 4
+#: StrictDelimitedBlocks.adoc:168 StrictDelimitedBlocks.adoc:178 StrictDelimitedBlocks.adoc:188
+#, no-wrap
+msgid "test\n"
+msgstr "TEST\n"
+
+#. type: delimited block + 26
+#: StrictDelimitedBlocks.adoc:172
+#, no-wrap
+msgid ""
+"--------------------------\n"
+"Listing inside Passthrough\n"
+"--------------------------\n"
+msgstr ""
+"--------------------------\n"
+"LISTING INSIDE PASSTHROUGH\n"
+"--------------------------\n"
+
+#. type: delimited block - 4
+#: StrictDelimitedBlocks.adoc:174 StrictDelimitedBlocks.adoc:184 StrictDelimitedBlocks.adoc:194
+#, no-wrap
+msgid "end of test\n"
+msgstr "END OF TEST\n"
+
+#. type: delimited block - 26
+#: StrictDelimitedBlocks.adoc:182
+#, no-wrap
+msgid ""
+"__________________________\n"
+"QuoteBlock inside Listing\n"
+"__________________________\n"
+msgstr ""
+"__________________________\n"
+"QUOTEBLOCK INSIDE LISTING\n"
+"__________________________\n"
+
+#. type: delimited block - 4
+#: StrictDelimitedBlocks.adoc:192
+#, no-wrap
+msgid ""
+"-------------------------------\n"
+"Listing inside a Listing\n"
+"-------------------------------\n"
+msgstr ""
+"-------------------------------\n"
+"LISTING INSIDE A LISTING\n"
+"-------------------------------\n"
diff --git a/t/fmt/asciidoc/StrictDelimitedBlocks.pot b/t/fmt/asciidoc/StrictDelimitedBlocks.pot
new file mode 100644
index 0000000..28b64da
--- /dev/null
+++ b/t/fmt/asciidoc/StrictDelimitedBlocks.pot
@@ -0,0 +1,317 @@
+# SOME DESCRIPTIVE TITLE
+# Copyright (C) YEAR Free Software Foundation, Inc.
+# This file is distributed under the same license as the PACKAGE package.
+# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
+#
+#, fuzzy
+msgid ""
+msgstr ""
+"Project-Id-Version: PACKAGE VERSION\n"
+"POT-Creation-Date: 2012-10-09 09:04+0300\n"
+"PO-Revision-Date: 2020-05-30 18:26+0200\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
+"Language-Team: LANGUAGE <LL@li.org>\n"
+"Language: \n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+
+#. type: Title =
+#: StrictDelimitedBlocks.adoc:3
+#, no-wrap
+msgid "Test Delimited Blocks"
+msgstr ""
+
+#. type: Title -
+#: StrictDelimitedBlocks.adoc:6
+#, no-wrap
+msgid "Predefined Delimited Blocks"
+msgstr ""
+
+#. type: Plain text
+#: StrictDelimitedBlocks.adoc:9
+msgid "CommentBlock"
+msgstr ""
+
+#. This is a Comment block.
+#. This is a Comment block.
+#
+#. This is a Comment block.
+#. This is a Comment block.
+#
+#. - This is a Comment block.
+#. This is a Comment block.
+#. type: Plain text
+#: StrictDelimitedBlocks.adoc:22
+msgid "PassthroughBlock"
+msgstr ""
+
+#. type: delimited block + 26
+#: StrictDelimitedBlocks.adoc:26
+#, no-wrap
+msgid ""
+"This is a Passthrough block.\n"
+"This is a Passthrough block.\n"
+msgstr ""
+
+#. type: delimited block + 26
+#: StrictDelimitedBlocks.adoc:29
+#, no-wrap
+msgid ""
+" This is a Passthrough block.\n"
+" This is a Passthrough block.\n"
+msgstr ""
+
+#. type: delimited block + 26
+#: StrictDelimitedBlocks.adoc:32
+#, no-wrap
+msgid ""
+" - This is a Passthrough block.\n"
+" This is a Passthrough block.\n"
+msgstr ""
+
+#. type: Plain text
+#: StrictDelimitedBlocks.adoc:35
+msgid "ListingBlock"
+msgstr ""
+
+#. type: delimited block - 26
+#: StrictDelimitedBlocks.adoc:39
+#, no-wrap
+msgid ""
+"This is a Listing block.\n"
+"This is a Listing block.\n"
+msgstr ""
+
+#. type: delimited block - 26
+#: StrictDelimitedBlocks.adoc:42
+#, no-wrap
+msgid ""
+" This is a Listing block.\n"
+" This is a Listing block.\n"
+msgstr ""
+
+#. type: delimited block - 26
+#: StrictDelimitedBlocks.adoc:45
+#, no-wrap
+msgid ""
+" - This is a Listing block.\n"
+" This is a Listing block.\n"
+msgstr ""
+
+#. type: Plain text
+#: StrictDelimitedBlocks.adoc:48
+msgid "LiteralBlock"
+msgstr ""
+
+#. type: delimited block . 26
+#: StrictDelimitedBlocks.adoc:52
+#, no-wrap
+msgid ""
+"This is a Literal block.\n"
+"This is a Literal block.\n"
+msgstr ""
+
+#. type: delimited block . 26
+#: StrictDelimitedBlocks.adoc:55
+#, no-wrap
+msgid ""
+" This is a Literal block.\n"
+" This is a Literal block.\n"
+msgstr ""
+
+#. type: delimited block . 26
+#: StrictDelimitedBlocks.adoc:58
+#, no-wrap
+msgid ""
+" - This is a Literal block.\n"
+" This is a Literal block.\n"
+msgstr ""
+
+#. type: Plain text
+#: StrictDelimitedBlocks.adoc:61
+msgid "SidebarBlock"
+msgstr ""
+
+#. type: delimited block * 26
+#: StrictDelimitedBlocks.adoc:65 StrictDelimitedBlocks.adoc:71
+msgid "This is a Sidebar block. This is a Sidebar block."
+msgstr ""
+
+#. type: delimited block * 26
+#: StrictDelimitedBlocks.adoc:68
+#, no-wrap
+msgid ""
+" This is a Sidebar block.\n"
+" This is a Sidebar block.\n"
+msgstr ""
+
+#. type: Plain text
+#: StrictDelimitedBlocks.adoc:74
+msgid "QuoteBlock"
+msgstr ""
+
+#. type: delimited block _ 26
+#: StrictDelimitedBlocks.adoc:78 StrictDelimitedBlocks.adoc:84
+msgid "This is a Quote block. This is a Quote block."
+msgstr ""
+
+#. type: delimited block _ 26
+#: StrictDelimitedBlocks.adoc:81
+#, no-wrap
+msgid ""
+" This is a Quote block.\n"
+" This is a Quote block.\n"
+msgstr ""
+
+#. type: Positional ($2) AttributeList argument for style 'quote'
+#: StrictDelimitedBlocks.adoc:87
+#, no-wrap
+msgid "Bertrand Russell"
+msgstr ""
+
+#. type: Positional ($3) AttributeList argument for style 'quote'
+#: StrictDelimitedBlocks.adoc:87
+#, no-wrap
+msgid "The World of Mathematics (1956)"
+msgstr ""
+
+#. type: delimited block _ 68
+#: StrictDelimitedBlocks.adoc:91
+msgid ""
+"A good notation has subtlety and suggestiveness which at times makes it "
+"almost seem like a live teacher."
+msgstr ""
+
+#. type: Positional ($2) AttributeList argument for style 'verse'
+#: StrictDelimitedBlocks.adoc:93
+#, no-wrap
+msgid "William Blake"
+msgstr ""
+
+#. type: Positional ($3) AttributeList argument for style 'verse'
+#: StrictDelimitedBlocks.adoc:93
+#, no-wrap
+msgid "from Auguries of Innocence"
+msgstr ""
+
+#. type: delimited block _ 50
+#: StrictDelimitedBlocks.adoc:99
+#, no-wrap
+msgid ""
+"To see a world in a grain of sand,\n"
+"And a heaven in a wild flower,\n"
+"Hold infinity in the palm of your hand,\n"
+"And eternity in an hour.\n"
+msgstr ""
+
+#. type: Plain text
+#: StrictDelimitedBlocks.adoc:102
+msgid "ExampleBlock"
+msgstr ""
+
+#. type: delimited block = 26
+#: StrictDelimitedBlocks.adoc:106 StrictDelimitedBlocks.adoc:112
+msgid "This is a Example block. This is a Example block."
+msgstr ""
+
+#. type: delimited block = 26
+#: StrictDelimitedBlocks.adoc:109
+#, no-wrap
+msgid ""
+" This is a Example block.\n"
+" This is a Example block.\n"
+msgstr ""
+
+#. type: Block title
+#: StrictDelimitedBlocks.adoc:114
+#, no-wrap
+msgid "An example"
+msgstr ""
+
+#. type: delimited block = 69
+#: StrictDelimitedBlocks.adoc:118 StrictDelimitedBlocks.adoc:125
+#: StrictDelimitedBlocks.adoc:132
+msgid ""
+"Qui in magna commodo, est labitur dolorum an. Est ne magna primis "
+"adolescens."
+msgstr ""
+
+#. type: Named 'caption' AttributeList argument for style 'caption'
+#: StrictDelimitedBlocks.adoc:120
+#, no-wrap
+msgid "Example 1: "
+msgstr ""
+
+#. type: Block title
+#: StrictDelimitedBlocks.adoc:121
+#, no-wrap
+msgid "An example with a custom caption"
+msgstr ""
+
+#. type: Block title
+#: StrictDelimitedBlocks.adoc:128
+#, no-wrap
+msgid "A NOTE block"
+msgstr ""
+
+#. type: delimited block = 69
+#: StrictDelimitedBlocks.adoc:134 StrictDelimitedBlocks.adoc:136
+msgid "Fusce euismod commodo velit."
+msgstr ""
+
+#. type: delimited block = 69
+#: StrictDelimitedBlocks.adoc:135 StrictDelimitedBlocks.adoc:137
+msgid "Vivamus fringilla mi eu lacus."
+msgstr ""
+
+#. type: delimited block = 69
+#: StrictDelimitedBlocks.adoc:139
+msgid "Donec eget arcu bibendum nunc consequat lobortis."
+msgstr ""
+
+#. type: Plain text
+#: StrictDelimitedBlocks.adoc:142
+msgid "Filter blocks"
+msgstr ""
+
+#. type: delimited block - 4
+#: StrictDelimitedBlocks.adoc:168 StrictDelimitedBlocks.adoc:178
+#: StrictDelimitedBlocks.adoc:188
+#, no-wrap
+msgid "test\n"
+msgstr ""
+
+#. type: delimited block + 26
+#: StrictDelimitedBlocks.adoc:172
+#, no-wrap
+msgid ""
+"--------------------------\n"
+"Listing inside Passthrough\n"
+"--------------------------\n"
+msgstr ""
+
+#. type: delimited block - 4
+#: StrictDelimitedBlocks.adoc:174 StrictDelimitedBlocks.adoc:184
+#: StrictDelimitedBlocks.adoc:194
+#, no-wrap
+msgid "end of test\n"
+msgstr ""
+
+#. type: delimited block - 26
+#: StrictDelimitedBlocks.adoc:182
+#, no-wrap
+msgid ""
+"__________________________\n"
+"QuoteBlock inside Listing\n"
+"__________________________\n"
+msgstr ""
+
+#. type: delimited block - 4
+#: StrictDelimitedBlocks.adoc:192
+#, no-wrap
+msgid ""
+"-------------------------------\n"
+"Listing inside a Listing\n"
+"-------------------------------\n"
+msgstr ""
diff --git a/t/fmt/asciidoc/StrictDelimitedBlocks.trans b/t/fmt/asciidoc/StrictDelimitedBlocks.trans
new file mode 100644
index 0000000..69ef5be
--- /dev/null
+++ b/t/fmt/asciidoc/StrictDelimitedBlocks.trans
@@ -0,0 +1,183 @@
+//po4a: style[,caption]
+TEST DELIMITED BLOCKS
+=====================
+
+PREDEFINED DELIMITED BLOCKS
+---------------------------
+
+COMMENTBLOCK
+
+//////////////////////////
+This is a Comment block.
+This is a Comment block.
+
+ This is a Comment block.
+ This is a Comment block.
+
+ - This is a Comment block.
+ This is a Comment block.
+//////////////////////////
+
+PASSTHROUGHBLOCK
+
+++++++++++++++++++++++++++
+THIS IS A PASSTHROUGH BLOCK.
+THIS IS A PASSTHROUGH BLOCK.
+
+ THIS IS A PASSTHROUGH BLOCK.
+ THIS IS A PASSTHROUGH BLOCK.
+
+ - THIS IS A PASSTHROUGH BLOCK.
+ THIS IS A PASSTHROUGH BLOCK.
+++++++++++++++++++++++++++
+
+LISTINGBLOCK
+
+--------------------------
+THIS IS A LISTING BLOCK.
+THIS IS A LISTING BLOCK.
+
+ THIS IS A LISTING BLOCK.
+ THIS IS A LISTING BLOCK.
+
+ - THIS IS A LISTING BLOCK.
+ THIS IS A LISTING BLOCK.
+--------------------------
+
+LITERALBLOCK
+
+..........................
+THIS IS A LITERAL BLOCK.
+THIS IS A LITERAL BLOCK.
+
+ THIS IS A LITERAL BLOCK.
+ THIS IS A LITERAL BLOCK.
+
+ - THIS IS A LITERAL BLOCK.
+ THIS IS A LITERAL BLOCK.
+..........................
+
+SIDEBARBLOCK
+
+**************************
+THIS IS A SIDEBAR BLOCK. THIS IS A SIDEBAR BLOCK.
+
+ THIS IS A SIDEBAR BLOCK.
+ THIS IS A SIDEBAR BLOCK.
+
+ - THIS IS A SIDEBAR BLOCK. THIS IS A SIDEBAR BLOCK.
+**************************
+
+QUOTEBLOCK
+
+__________________________
+THIS IS A QUOTE BLOCK. THIS IS A QUOTE BLOCK.
+
+ THIS IS A QUOTE BLOCK.
+ THIS IS A QUOTE BLOCK.
+
+ - THIS IS A QUOTE BLOCK. THIS IS A QUOTE BLOCK.
+__________________________
+
+
+[quote, "BERTRAND RUSSELL", "THE WORLD OF MATHEMATICS (1956)"]
+____________________________________________________________________
+A GOOD NOTATION HAS SUBTLETY AND SUGGESTIVENESS WHICH AT TIMES MAKES IT ALMOST SEEM LIKE A LIVE TEACHER.
+____________________________________________________________________
+
+[verse, "WILLIAM BLAKE", "FROM AUGURIES OF INNOCENCE"]
+__________________________________________________
+TO SEE A WORLD IN A GRAIN OF SAND,
+AND A HEAVEN IN A WILD FLOWER,
+HOLD INFINITY IN THE PALM OF YOUR HAND,
+AND ETERNITY IN AN HOUR.
+__________________________________________________
+
+EXAMPLEBLOCK
+
+==========================
+THIS IS A EXAMPLE BLOCK. THIS IS A EXAMPLE BLOCK.
+
+ THIS IS A EXAMPLE BLOCK.
+ THIS IS A EXAMPLE BLOCK.
+
+ - THIS IS A EXAMPLE BLOCK. THIS IS A EXAMPLE BLOCK.
+==========================
+
+.AN EXAMPLE
+=====================================================================
+QUI IN MAGNA COMMODO, EST LABITUR DOLORUM AN. EST NE MAGNA PRIMIS ADOLESCENS.
+=====================================================================
+
+[caption="EXAMPLE 1: "]
+.AN EXAMPLE WITH A CUSTOM CAPTION
+=====================================================================
+QUI IN MAGNA COMMODO, EST LABITUR DOLORUM AN. EST NE MAGNA PRIMIS ADOLESCENS.
+=====================================================================
+
+[NOTE]
+.A NOTE BLOCK
+=====================================================================
+QUI IN MAGNA COMMODO, EST LABITUR DOLORUM AN. EST NE MAGNA PRIMIS ADOLESCENS.
+
+. FUSCE EUISMOD COMMODO VELIT.
+. VIVAMUS FRINGILLA MI EU LACUS.
+ .. FUSCE EUISMOD COMMODO VELIT.
+ .. VIVAMUS FRINGILLA MI EU LACUS.
+. DONEC EGET ARCU BIBENDUM NUNC CONSEQUAT LOBORTIS.
+=====================================================================
+
+FILTER BLOCKS
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~
+This is a Filter block.
+This is a Filter block.
+
+ This is a Filter block.
+ This is a Filter block.
+
+ - This is a Filter block.
+ This is a Filter block.
+~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+
+
+//////////////////////////
+test
+
+--------------------------
+Listing inside Comment
+--------------------------
+
+end of test
+//////////////////////////
+
+++++++++++++++++++++++++++
+TEST
+
+--------------------------
+LISTING INSIDE PASSTHROUGH
+--------------------------
+
+END OF TEST
+++++++++++++++++++++++++++
+
+--------------------------
+TEST
+
+__________________________
+QUOTEBLOCK INSIDE LISTING
+__________________________
+
+END OF TEST
+--------------------------
+
+----
+TEST
+
+-------------------------------
+LISTING INSIDE A LISTING
+-------------------------------
+
+END OF TEST
+----
diff --git a/t/fmt/asciidoc/StyleMacro.adoc b/t/fmt/asciidoc/StyleMacro.adoc
new file mode 100644
index 0000000..97936a8
--- /dev/null
+++ b/t/fmt/asciidoc/StyleMacro.adoc
@@ -0,0 +1,59 @@
+Test Macro and Styles
+===========================================
+
+Styles
+------
+
+[quote, Lorem Ipsum, Dolor sit(1991)]
+Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod
+tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim
+veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea
+commodo consequat. Duis aute irure dolor in reprehenderit in voluptate
+velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat
+cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id
+est laborum.
+
+[verse, Lorem Ipsum verse, Dolor sit verse]
+Lorem ipsum dolor sit amet,
+Consectetur adipisicing elit,
+Sed do eiusmod tempor incididunt
+Ut labore et dolore magna aliqua.
+
+
+[verse, Lorem Ipsum verse2, Dolor sit verse2]
+____
+Lorem ipsum dolor sit amet,
+Consectetur adipisicing elit,
+
+Sed do eiusmod tempor incididunt
+Ut labore et dolore magna aliqua.
+____
+
+[icon=foo.png, caption="Lorem ipsum"]
+Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod
+tempor incididunt ut labore et dolore magna aliqua.
+
+Block macros
+------------
+
+Paragraph before blockimage
+image::foo.png[Block image Alt]
+paragraph after blockimage
+
+image::foo.png["Block image with title", title="My image title"]
+
+.External image title
+image::foo.png["Block image with external title"]
+
+image::foo.png[title="Image with title but without alt-text"]
+
+Block image macro without alt text:
+image::foo.png[]
+
+ifeval::[42 == 42]
+// Empty macro target:
+endif::[]
+
+ifeval::["{foo}" == "bar"]
+include::{foo-path}bar.adoc[leveloffset=+1, lines=7..21;32..-1]
+endif::[]
diff --git a/t/fmt/asciidoc/StyleMacro.norm b/t/fmt/asciidoc/StyleMacro.norm
new file mode 100644
index 0000000..b9688b6
--- /dev/null
+++ b/t/fmt/asciidoc/StyleMacro.norm
@@ -0,0 +1,52 @@
+Test Macro and Styles
+===========================================
+
+Styles
+------
+
+[quote, "Lorem Ipsum", "Dolor sit(1991)"]
+Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.
+
+[verse, "Lorem Ipsum verse", "Dolor sit verse"]
+Lorem ipsum dolor sit amet,
+Consectetur adipisicing elit,
+Sed do eiusmod tempor incididunt
+Ut labore et dolore magna aliqua.
+
+
+[verse, "Lorem Ipsum verse2", "Dolor sit verse2"]
+____
+Lorem ipsum dolor sit amet,
+Consectetur adipisicing elit,
+
+Sed do eiusmod tempor incididunt
+Ut labore et dolore magna aliqua.
+____
+
+[icon="foo.png,", caption="Lorem ipsum"]
+Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.
+
+Block macros
+------------
+
+Paragraph before blockimage
+image::foo.png["Block image Alt"]
+paragraph after blockimage
+
+image::foo.png["Block image with title", title="My image title"]
+
+.External image title
+image::foo.png["Block image with external title"]
+
+image::foo.png[title="Image with title but without alt-text"]
+
+Block image macro without alt text:
+image::foo.png[]
+
+ifeval::[42 == 42]
+// Empty macro target:
+endif::[]
+
+ifeval::["{foo}" == "bar"]
+include::{foo-path}bar.adoc[leveloffset=+1, lines=7..21;32..-1]
+endif::[]
diff --git a/t/fmt/asciidoc/StyleMacro.po b/t/fmt/asciidoc/StyleMacro.po
new file mode 100644
index 0000000..c8a3c85
--- /dev/null
+++ b/t/fmt/asciidoc/StyleMacro.po
@@ -0,0 +1,194 @@
+# SOME DESCRIPTIVE TITLE
+# Copyright (C) YEAR Free Software Foundation, Inc.
+# This file is distributed under the same license as the PACKAGE package.
+# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
+#
+#, fuzzy
+msgid ""
+msgstr ""
+"Project-Id-Version: PACKAGE VERSION\n"
+"POT-Creation-Date: 2017-03-27 17:53+0200\n"
+"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
+"Language-Team: LANGUAGE <LL@LI.ORG>\n"
+"Language: \n"
+"MIME-Version: 1.0\n"
+"Content-Type: TEXT/PLAIN; CHARSET=UTF-8\n"
+"Content-Transfer-Encoding: 8BIT\n"
+
+#. type: Plain text
+#: StyleMacro.adoc:2
+msgid "Test Macro and Styles"
+msgstr "TEST MACRO AND STYLES"
+
+#. type: Title -
+#: StyleMacro.adoc:5
+#, no-wrap
+msgid "Styles"
+msgstr "STYLES"
+
+#. type: Positional ($2) AttributeList argument for style 'quote'
+#: StyleMacro.adoc:7
+#, no-wrap
+msgid "Lorem Ipsum"
+msgstr "LOREM IPSUM"
+
+#. type: Positional ($3) AttributeList argument for style 'quote'
+#: StyleMacro.adoc:7
+#, no-wrap
+msgid "Dolor sit(1991)"
+msgstr "DOLOR SIT(1991)"
+
+#. type: quote
+#: StyleMacro.adoc:15
+msgid ""
+"Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod "
+"tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, "
+"quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo "
+"consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse "
+"cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat "
+"non proident, sunt in culpa qui officia deserunt mollit anim id est laborum."
+msgstr ""
+"LOREM IPSUM DOLOR SIT AMET, CONSECTETUR ADIPISICING ELIT, SED DO EIUSMOD "
+"TEMPOR INCIDIDUNT UT LABORE ET DOLORE MAGNA ALIQUA. UT ENIM AD MINIM VENIAM, "
+"QUIS NOSTRUD EXERCITATION ULLAMCO LABORIS NISI UT ALIQUIP EX EA COMMODO "
+"CONSEQUAT. DUIS AUTE IRURE DOLOR IN REPREHENDERIT IN VOLUPTATE VELIT ESSE "
+"CILLUM DOLORE EU FUGIAT NULLA PARIATUR. EXCEPTEUR SINT OCCAECAT CUPIDATAT "
+"NON PROIDENT, SUNT IN CULPA QUI OFFICIA DESERUNT MOLLIT ANIM ID EST LABORUM."
+
+#. type: Positional ($2) AttributeList argument for style 'verse'
+#: StyleMacro.adoc:16
+#, no-wrap
+msgid "Lorem Ipsum verse"
+msgstr "LOREM IPSUM VERSE"
+
+#. type: Positional ($3) AttributeList argument for style 'verse'
+#: StyleMacro.adoc:16
+#, no-wrap
+msgid "Dolor sit verse"
+msgstr "DOLOR SIT VERSE"
+
+#. type: verse
+#: StyleMacro.adoc:21
+#, no-wrap
+msgid ""
+"Lorem ipsum dolor sit amet,\n"
+"Consectetur adipisicing elit,\n"
+"Sed do eiusmod tempor incididunt\n"
+"Ut labore et dolore magna aliqua.\n"
+msgstr ""
+"LOREM IPSUM DOLOR SIT AMET,\n"
+"CONSECTETUR ADIPISICING ELIT,\n"
+"SED DO EIUSMOD TEMPOR INCIDIDUNT\n"
+"UT LABORE ET DOLORE MAGNA ALIQUA.\n"
+
+#. type: Positional ($2) AttributeList argument for style 'verse'
+#: StyleMacro.adoc:23
+#, no-wrap
+msgid "Lorem Ipsum verse2"
+msgstr "LOREM IPSUM VERSE2"
+
+#. type: Positional ($3) AttributeList argument for style 'verse'
+#: StyleMacro.adoc:23
+#, no-wrap
+msgid "Dolor sit verse2"
+msgstr "DOLOR SIT VERSE2"
+
+#. type: delimited block _
+#: StyleMacro.adoc:27
+#, no-wrap
+msgid ""
+"Lorem ipsum dolor sit amet,\n"
+"Consectetur adipisicing elit,\n"
+msgstr ""
+"LOREM IPSUM DOLOR SIT AMET,\n"
+"CONSECTETUR ADIPISICING ELIT,\n"
+
+#. type: delimited block _
+#: StyleMacro.adoc:30
+#, no-wrap
+msgid ""
+"Sed do eiusmod tempor incididunt\n"
+"Ut labore et dolore magna aliqua.\n"
+msgstr ""
+"SED DO EIUSMOD TEMPOR INCIDIDUNT\n"
+"UT LABORE ET DOLORE MAGNA ALIQUA.\n"
+
+#. type: Named 'icon' AttributeList argument for style 'icon'
+#: StyleMacro.adoc:32
+#, no-wrap
+msgid "foo.png,"
+msgstr "FOO.PNG,"
+
+#. type: Plain text
+#: StyleMacro.adoc:35
+msgid ""
+"Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod "
+"tempor incididunt ut labore et dolore magna aliqua."
+msgstr ""
+"LOREM IPSUM DOLOR SIT AMET, CONSECTETUR ADIPISICING ELIT, SED DO EIUSMOD "
+"TEMPOR INCIDIDUNT UT LABORE ET DOLORE MAGNA ALIQUA."
+
+#. type: Title -
+#: StyleMacro.adoc:37
+#, no-wrap
+msgid "Block macros"
+msgstr "BLOCK MACROS"
+
+#. type: Plain text
+#: StyleMacro.adoc:40
+msgid "Paragraph before blockimage"
+msgstr "PARAGRAPH BEFORE BLOCKIMAGE"
+
+#. type: Positional ($1) AttributeList argument for macro 'image'
+#: StyleMacro.adoc:40
+#, no-wrap
+msgid "Block image Alt"
+msgstr "BLOCK IMAGE ALT"
+
+#. type: Target for macro image
+#: StyleMacro.adoc:40 StyleMacro.adoc:43 StyleMacro.adoc:46 StyleMacro.adoc:48
+#: StyleMacro.adoc:51
+#, no-wrap
+msgid "foo.png"
+msgstr "FOO.PNG"
+
+#. type: Plain text
+#: StyleMacro.adoc:42
+msgid "paragraph after blockimage"
+msgstr "PARAGRAPH AFTER BLOCKIMAGE"
+
+#. type: Positional ($1) AttributeList argument for macro 'image'
+#: StyleMacro.adoc:43
+#, no-wrap
+msgid "Block image with title"
+msgstr "BLOCK IMAGE WITH TITLE"
+
+#. type: Named 'title' AttributeList argument for macro 'image'
+#: StyleMacro.adoc:43
+#, no-wrap
+msgid "My image title"
+msgstr "MY IMAGE TITLE"
+
+#. type: Block title
+#: StyleMacro.adoc:45
+#, no-wrap
+msgid "External image title"
+msgstr "EXTERNAL IMAGE TITLE"
+
+#. type: Positional ($1) AttributeList argument for macro 'image'
+#: StyleMacro.adoc:46
+#, no-wrap
+msgid "Block image with external title"
+msgstr "BLOCK IMAGE WITH EXTERNAL TITLE"
+
+#. type: Named 'title' AttributeList argument for macro 'image'
+#: StyleMacro.adoc:48
+#, no-wrap
+msgid "Image with title but without alt-text"
+msgstr "IMAGE WITH TITLE BUT WITHOUT ALT-TEXT"
+
+#. type: Plain text
+#: StyleMacro.adoc:51
+msgid "Block image macro without alt text:"
+msgstr "BLOCK IMAGE MACRO WITHOUT ALT TEXT:"
diff --git a/t/fmt/asciidoc/StyleMacro.pot b/t/fmt/asciidoc/StyleMacro.pot
new file mode 100644
index 0000000..b74d2a6
--- /dev/null
+++ b/t/fmt/asciidoc/StyleMacro.pot
@@ -0,0 +1,178 @@
+# SOME DESCRIPTIVE TITLE
+# Copyright (C) YEAR Free Software Foundation, Inc.
+# This file is distributed under the same license as the PACKAGE package.
+# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
+#
+#, fuzzy
+msgid ""
+msgstr ""
+"Project-Id-Version: PACKAGE VERSION\n"
+"POT-Creation-Date: 2021-03-13 16:59-0300\n"
+"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
+"Language-Team: LANGUAGE <LL@li.org>\n"
+"Language: \n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+
+#. type: Plain text
+#: StyleMacro.adoc:2
+msgid "Test Macro and Styles"
+msgstr ""
+
+#. type: Title -
+#: StyleMacro.adoc:5
+#, no-wrap
+msgid "Styles"
+msgstr ""
+
+#. type: Positional ($2) AttributeList argument for style 'quote'
+#: StyleMacro.adoc:7
+#, no-wrap
+msgid "Lorem Ipsum"
+msgstr ""
+
+#. type: Positional ($3) AttributeList argument for style 'quote'
+#: StyleMacro.adoc:7
+#, no-wrap
+msgid "Dolor sit(1991)"
+msgstr ""
+
+#. type: quote
+#: StyleMacro.adoc:15
+msgid ""
+"Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod "
+"tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, "
+"quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo "
+"consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse "
+"cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat "
+"non proident, sunt in culpa qui officia deserunt mollit anim id est laborum."
+msgstr ""
+
+#. type: Positional ($2) AttributeList argument for style 'verse'
+#: StyleMacro.adoc:16
+#, no-wrap
+msgid "Lorem Ipsum verse"
+msgstr ""
+
+#. type: Positional ($3) AttributeList argument for style 'verse'
+#: StyleMacro.adoc:16
+#, no-wrap
+msgid "Dolor sit verse"
+msgstr ""
+
+#. type: verse
+#: StyleMacro.adoc:21
+#, no-wrap
+msgid ""
+"Lorem ipsum dolor sit amet,\n"
+"Consectetur adipisicing elit,\n"
+"Sed do eiusmod tempor incididunt\n"
+"Ut labore et dolore magna aliqua.\n"
+msgstr ""
+
+#. type: Positional ($2) AttributeList argument for style 'verse'
+#: StyleMacro.adoc:23
+#, no-wrap
+msgid "Lorem Ipsum verse2"
+msgstr ""
+
+#. type: Positional ($3) AttributeList argument for style 'verse'
+#: StyleMacro.adoc:23
+#, no-wrap
+msgid "Dolor sit verse2"
+msgstr ""
+
+#. type: delimited block _
+#: StyleMacro.adoc:27
+#, no-wrap
+msgid ""
+"Lorem ipsum dolor sit amet,\n"
+"Consectetur adipisicing elit,\n"
+msgstr ""
+
+#. type: delimited block _
+#: StyleMacro.adoc:30
+#, no-wrap
+msgid ""
+"Sed do eiusmod tempor incididunt\n"
+"Ut labore et dolore magna aliqua.\n"
+msgstr ""
+
+#. type: Named 'icon' AttributeList argument for style 'icon'
+#: StyleMacro.adoc:32
+#, no-wrap
+msgid "foo.png,"
+msgstr ""
+
+#. type: Plain text
+#: StyleMacro.adoc:35
+msgid ""
+"Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod "
+"tempor incididunt ut labore et dolore magna aliqua."
+msgstr ""
+
+#. type: Title -
+#: StyleMacro.adoc:37
+#, no-wrap
+msgid "Block macros"
+msgstr ""
+
+#. type: Plain text
+#: StyleMacro.adoc:40
+msgid "Paragraph before blockimage"
+msgstr ""
+
+#. type: Positional ($1) AttributeList argument for macro 'image'
+#: StyleMacro.adoc:40
+#, no-wrap
+msgid "Block image Alt"
+msgstr ""
+
+#. type: Target for macro image
+#: StyleMacro.adoc:40 StyleMacro.adoc:43 StyleMacro.adoc:46 StyleMacro.adoc:48
+#: StyleMacro.adoc:51
+#, no-wrap
+msgid "foo.png"
+msgstr ""
+
+#. type: Plain text
+#: StyleMacro.adoc:42
+msgid "paragraph after blockimage"
+msgstr ""
+
+#. type: Positional ($1) AttributeList argument for macro 'image'
+#: StyleMacro.adoc:43
+#, no-wrap
+msgid "Block image with title"
+msgstr ""
+
+#. type: Named 'title' AttributeList argument for macro 'image'
+#: StyleMacro.adoc:43
+#, no-wrap
+msgid "My image title"
+msgstr ""
+
+#. type: Block title
+#: StyleMacro.adoc:45
+#, no-wrap
+msgid "External image title"
+msgstr ""
+
+#. type: Positional ($1) AttributeList argument for macro 'image'
+#: StyleMacro.adoc:46
+#, no-wrap
+msgid "Block image with external title"
+msgstr ""
+
+#. type: Named 'title' AttributeList argument for macro 'image'
+#: StyleMacro.adoc:48
+#, no-wrap
+msgid "Image with title but without alt-text"
+msgstr ""
+
+#. type: Plain text
+#: StyleMacro.adoc:51
+msgid "Block image macro without alt text:"
+msgstr ""
diff --git a/t/fmt/asciidoc/StyleMacro.trans b/t/fmt/asciidoc/StyleMacro.trans
new file mode 100644
index 0000000..d33cc9e
--- /dev/null
+++ b/t/fmt/asciidoc/StyleMacro.trans
@@ -0,0 +1,52 @@
+TEST MACRO AND STYLES
+===========================================
+
+STYLES
+------
+
+[quote, "LOREM IPSUM", "DOLOR SIT(1991)"]
+LOREM IPSUM DOLOR SIT AMET, CONSECTETUR ADIPISICING ELIT, SED DO EIUSMOD TEMPOR INCIDIDUNT UT LABORE ET DOLORE MAGNA ALIQUA. UT ENIM AD MINIM VENIAM, QUIS NOSTRUD EXERCITATION ULLAMCO LABORIS NISI UT ALIQUIP EX EA COMMODO CONSEQUAT. DUIS AUTE IRURE DOLOR IN REPREHENDERIT IN VOLUPTATE VELIT ESSE CILLUM DOLORE EU FUGIAT NULLA PARIATUR. EXCEPTEUR SINT OCCAECAT CUPIDATAT NON PROIDENT, SUNT IN CULPA QUI OFFICIA DESERUNT MOLLIT ANIM ID EST LABORUM.
+
+[verse, "LOREM IPSUM VERSE", "DOLOR SIT VERSE"]
+LOREM IPSUM DOLOR SIT AMET,
+CONSECTETUR ADIPISICING ELIT,
+SED DO EIUSMOD TEMPOR INCIDIDUNT
+UT LABORE ET DOLORE MAGNA ALIQUA.
+
+
+[verse, "LOREM IPSUM VERSE2", "DOLOR SIT VERSE2"]
+____
+LOREM IPSUM DOLOR SIT AMET,
+CONSECTETUR ADIPISICING ELIT,
+
+SED DO EIUSMOD TEMPOR INCIDIDUNT
+UT LABORE ET DOLORE MAGNA ALIQUA.
+____
+
+[icon="FOO.PNG,", caption="Lorem ipsum"]
+LOREM IPSUM DOLOR SIT AMET, CONSECTETUR ADIPISICING ELIT, SED DO EIUSMOD TEMPOR INCIDIDUNT UT LABORE ET DOLORE MAGNA ALIQUA.
+
+BLOCK MACROS
+------------
+
+PARAGRAPH BEFORE BLOCKIMAGE
+image::FOO.PNG["BLOCK IMAGE ALT"]
+PARAGRAPH AFTER BLOCKIMAGE
+
+image::FOO.PNG["BLOCK IMAGE WITH TITLE", title="MY IMAGE TITLE"]
+
+.EXTERNAL IMAGE TITLE
+image::FOO.PNG["BLOCK IMAGE WITH EXTERNAL TITLE"]
+
+image::FOO.PNG[title="IMAGE WITH TITLE BUT WITHOUT ALT-TEXT"]
+
+BLOCK IMAGE MACRO WITHOUT ALT TEXT:
+image::FOO.PNG[]
+
+ifeval::[42 == 42]
+// Empty macro target:
+endif::[]
+
+ifeval::["{foo}" == "bar"]
+include::{foo-path}bar.adoc[leveloffset=+1, lines=7..21;32..-1]
+endif::[]
diff --git a/t/fmt/asciidoc/Tables.adoc b/t/fmt/asciidoc/Tables.adoc
new file mode 100644
index 0000000..35d55c5
--- /dev/null
+++ b/t/fmt/asciidoc/Tables.adoc
@@ -0,0 +1,78 @@
+Test Tables
+===========
+
+|===
+|1 | 2
+|3 | 4
+|5 | 6
+|===
+
+
+.An example table
+[grid="all", options="header", cols=">,"]
+|===
+|Column 1 | Column 2
+|1 | Item 1
+|2 | Item 2
+|3 | Item 3
+|6 | Three items
+|===
+
+[frame="all", cols="<,<,<,<", width="15%"]
+|===
+|1|2|3|4
+|a|b|c|d
+|A|B|C|D
+|===
+
+[frame="all", grid="all", cols="^15,>20,>25,>20", format="csv"]
+|===
+ID,Customer Name,Contact Name,Customer Address,Phone
+include::customers.csv[]
+|===
+
+The following examples are drawn from the https://docs.fedoraproject.org/f27/system-administrators-guide/index.html[Fedora System Administrator's Guide]:
+
+[options="header"]
+|===
+|Option|Description
+|[option]`Charset` = __encoding__|Specifies the character set of a generated web page. The _encoding_ has to be a valid character set such as `UTF-8` or `ISO-8859-2`.
+|[option]`Type` = __content-type__|Specifies the media type of a generated web page. The _content-type_ has to be a valid MIME type such as `text/html` or `text/plain`.
+|[option]`DescriptionWidth` = __value__|Specifies the width of the description column. The _value_ can be either a number of characters, or an asterisk (that is, `*`) to adjust the width automatically.
+|[option]`FancyIndexing`|Enables advanced features such as different icons for certain files or possibility to re-sort a directory listing by clicking on a column header.
+|[option]`FolderFirst`|Enables listing directories first, always placing them above files.
+|[option]`HTMLTable`|Enables the use of HTML tables for directory listings.
+|[option]`IconsAreLinks`|Enables using the icons as links.
+|[option]`IconHeight` = __value__|Specifies an icon height. The _value_ is a number of pixels.
+|[option]`IconWidth` = __value__|Specifies an icon width. The _value_ is a number of pixels.
+|[option]`IgnoreCase`|Enables sorting files and directories in a case-sensitive manner.
+|[option]`IgnoreClient`|Disables accepting query variables from a client.
+|[option]`NameWidth` = __value__|Specifies the width of the file name column. The _value_ can be either a number of characters, or an asterisk (that is, `*`) to adjust the width automatically.
+|[option]`ScanHTMLTitles`|Enables parsing the file for a description (that is, the `title` element) in case it is not provided by the [option]`AddDescription` directive.
+|[option]`ShowForbidden`|Enables listing the files with otherwise restricted access.
+|[option]`SuppressColumnSorting`|Disables re-sorting a directory listing by clicking on a column header.
+|[option]`SuppressDescription`|Disables reserving a space for file descriptions.
+|[option]`SuppressHTMLPreamble`|Disables the use of standard HTML preamble when a file specified by the [option]`HeaderName` directive is present.
+|[option]`SuppressIcon`|Disables the use of icons in directory listings.
+|[option]`SuppressLastModified`|Disables displaying the date of the last modification field in directory listings.
+|[option]`SuppressRules`|Disables the use of horizontal lines in directory listings.
+|[option]`SuppressSize`|Disables displaying the file size field in directory listings.
+|[option]`TrackModified`|Enables returning the `Last-Modified` and `ETag` values in the HTTP header.
+|[option]`VersionSort`|Enables sorting files that contain a version number in the expected manner.
+|[option]`XHTML`|Enables the use of XHTML 1.0 instead of the default HTML 3.2.
+|===
+
+Manually wrapped cells
+
+|===
+|Option|Description
+|[option]`Charset` = __encoding__
+|Specifies the character set of a generated web page. The _encoding_ has to be a valid character set such as `UTF-8` or `ISO-8859-2`.
+|[option]`Type` = __content-type__
+|Specifies the media type of a generated web page. The _content-type_
+has to be a valid MIME type such as `text/html` or `text/plain`.
+
+|[option]`DescriptionWidth` = __value__
+
+|Specifies the width of the description column. The _value_ can be either a number of characters, or an asterisk (that is, `*`) to adjust the width automatically.
+|===
diff --git a/t/fmt/asciidoc/Tables.norm b/t/fmt/asciidoc/Tables.norm
new file mode 100644
index 0000000..35d55c5
--- /dev/null
+++ b/t/fmt/asciidoc/Tables.norm
@@ -0,0 +1,78 @@
+Test Tables
+===========
+
+|===
+|1 | 2
+|3 | 4
+|5 | 6
+|===
+
+
+.An example table
+[grid="all", options="header", cols=">,"]
+|===
+|Column 1 | Column 2
+|1 | Item 1
+|2 | Item 2
+|3 | Item 3
+|6 | Three items
+|===
+
+[frame="all", cols="<,<,<,<", width="15%"]
+|===
+|1|2|3|4
+|a|b|c|d
+|A|B|C|D
+|===
+
+[frame="all", grid="all", cols="^15,>20,>25,>20", format="csv"]
+|===
+ID,Customer Name,Contact Name,Customer Address,Phone
+include::customers.csv[]
+|===
+
+The following examples are drawn from the https://docs.fedoraproject.org/f27/system-administrators-guide/index.html[Fedora System Administrator's Guide]:
+
+[options="header"]
+|===
+|Option|Description
+|[option]`Charset` = __encoding__|Specifies the character set of a generated web page. The _encoding_ has to be a valid character set such as `UTF-8` or `ISO-8859-2`.
+|[option]`Type` = __content-type__|Specifies the media type of a generated web page. The _content-type_ has to be a valid MIME type such as `text/html` or `text/plain`.
+|[option]`DescriptionWidth` = __value__|Specifies the width of the description column. The _value_ can be either a number of characters, or an asterisk (that is, `*`) to adjust the width automatically.
+|[option]`FancyIndexing`|Enables advanced features such as different icons for certain files or possibility to re-sort a directory listing by clicking on a column header.
+|[option]`FolderFirst`|Enables listing directories first, always placing them above files.
+|[option]`HTMLTable`|Enables the use of HTML tables for directory listings.
+|[option]`IconsAreLinks`|Enables using the icons as links.
+|[option]`IconHeight` = __value__|Specifies an icon height. The _value_ is a number of pixels.
+|[option]`IconWidth` = __value__|Specifies an icon width. The _value_ is a number of pixels.
+|[option]`IgnoreCase`|Enables sorting files and directories in a case-sensitive manner.
+|[option]`IgnoreClient`|Disables accepting query variables from a client.
+|[option]`NameWidth` = __value__|Specifies the width of the file name column. The _value_ can be either a number of characters, or an asterisk (that is, `*`) to adjust the width automatically.
+|[option]`ScanHTMLTitles`|Enables parsing the file for a description (that is, the `title` element) in case it is not provided by the [option]`AddDescription` directive.
+|[option]`ShowForbidden`|Enables listing the files with otherwise restricted access.
+|[option]`SuppressColumnSorting`|Disables re-sorting a directory listing by clicking on a column header.
+|[option]`SuppressDescription`|Disables reserving a space for file descriptions.
+|[option]`SuppressHTMLPreamble`|Disables the use of standard HTML preamble when a file specified by the [option]`HeaderName` directive is present.
+|[option]`SuppressIcon`|Disables the use of icons in directory listings.
+|[option]`SuppressLastModified`|Disables displaying the date of the last modification field in directory listings.
+|[option]`SuppressRules`|Disables the use of horizontal lines in directory listings.
+|[option]`SuppressSize`|Disables displaying the file size field in directory listings.
+|[option]`TrackModified`|Enables returning the `Last-Modified` and `ETag` values in the HTTP header.
+|[option]`VersionSort`|Enables sorting files that contain a version number in the expected manner.
+|[option]`XHTML`|Enables the use of XHTML 1.0 instead of the default HTML 3.2.
+|===
+
+Manually wrapped cells
+
+|===
+|Option|Description
+|[option]`Charset` = __encoding__
+|Specifies the character set of a generated web page. The _encoding_ has to be a valid character set such as `UTF-8` or `ISO-8859-2`.
+|[option]`Type` = __content-type__
+|Specifies the media type of a generated web page. The _content-type_
+has to be a valid MIME type such as `text/html` or `text/plain`.
+
+|[option]`DescriptionWidth` = __value__
+
+|Specifies the width of the description column. The _value_ can be either a number of characters, or an asterisk (that is, `*`) to adjust the width automatically.
+|===
diff --git a/t/fmt/asciidoc/Tables.po b/t/fmt/asciidoc/Tables.po
new file mode 100644
index 0000000..141e0f0
--- /dev/null
+++ b/t/fmt/asciidoc/Tables.po
@@ -0,0 +1,175 @@
+# SOME DESCRIPTIVE TITLE
+# Copyright (C) YEAR Free Software Foundation, Inc.
+# This file is distributed under the same license as the PACKAGE package.
+# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
+#
+#, fuzzy
+msgid ""
+msgstr ""
+"Project-Id-Version: PACKAGE VERSION\n"
+"POT-Creation-Date: 2018-10-03 09:32+0200\n"
+"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
+"Language-Team: LANGUAGE <LL@LI.ORG>\n"
+"Language: \n"
+"MIME-Version: 1.0\n"
+"Content-Type: TEXT/PLAIN; CHARSET=UTF-8\n"
+"Content-Transfer-Encoding: 8BIT\n"
+
+#. type: Title =
+#: Tables.adoc:2
+#, no-wrap
+msgid "Test Tables"
+msgstr "TEST TABLES"
+
+#. type: Table
+#: Tables.adoc:8
+#, no-wrap
+msgid ""
+"|1 | 2\n"
+"|3 | 4\n"
+"|5 | 6\n"
+msgstr ""
+"|1 | 2\n"
+"|3 | 4\n"
+"|5 | 6\n"
+
+#. type: Block title
+#: Tables.adoc:11
+#, no-wrap
+msgid "An example table"
+msgstr "AN EXAMPLE TABLE"
+
+#. type: Table
+#: Tables.adoc:19
+#, no-wrap
+msgid ""
+"|Column 1 | Column 2\n"
+"|1 | Item 1\n"
+"|2 | Item 2\n"
+"|3 | Item 3\n"
+"|6 | Three items\n"
+msgstr ""
+"|COLUMN 1 | COLUMN 2\n"
+"|1 | ITEM 1\n"
+"|2 | ITEM 2\n"
+"|3 | ITEM 3\n"
+"|6 | THREE ITEMS\n"
+
+#. type: Table
+#: Tables.adoc:26
+#, no-wrap
+msgid ""
+"|1|2|3|4\n"
+"|a|b|c|d\n"
+"|A|B|C|D\n"
+msgstr ""
+"|1|2|3|4\n"
+"|A|B|C|D\n"
+"|A|B|C|D\n"
+
+#. type: Table
+#: Tables.adoc:32
+#, no-wrap
+msgid ""
+"ID,Customer Name,Contact Name,Customer Address,Phone\n"
+"include::customers.csv[]\n"
+msgstr ""
+"ID,CUSTOMER NAME,CONTACT NAME,CUSTOMER ADDRESS,PHONE\n"
+"INCLUDE::CUSTOMERS.CSV[]\n"
+
+#. type: Plain text
+#: Tables.adoc:35
+msgid ""
+"The following examples are drawn from the https://docs.fedoraproject.org/f27/"
+"system-administrators-guide/index.html[Fedora System Administrator's Guide]:"
+msgstr ""
+"THE FOLLOWING EXAMPLES ARE DRAWN FROM THE HTTPS://DOCS.FEDORAPROJECT.ORG/F27/"
+"SYSTEM-ADMINISTRATORS-GUIDE/INDEX.HTML[FEDORA SYSTEM ADMINISTRATOR'S GUIDE]:"
+
+#. type: Table
+#: Tables.adoc:63
+#, no-wrap
+msgid ""
+"|Option|Description\n"
+"|[option]`Charset` = __encoding__|Specifies the character set of a generated web page. The _encoding_ has to be a valid character set such as `UTF-8` or `ISO-8859-2`.\n"
+"|[option]`Type` = __content-type__|Specifies the media type of a generated web page. The _content-type_ has to be a valid MIME type such as `text/html` or `text/plain`.\n"
+"|[option]`DescriptionWidth` = __value__|Specifies the width of the description column. The _value_ can be either a number of characters, or an asterisk (that is, `*`) to adjust the width automatically.\n"
+"|[option]`FancyIndexing`|Enables advanced features such as different icons for certain files or possibility to re-sort a directory listing by clicking on a column header.\n"
+"|[option]`FolderFirst`|Enables listing directories first, always placing them above files.\n"
+"|[option]`HTMLTable`|Enables the use of HTML tables for directory listings.\n"
+"|[option]`IconsAreLinks`|Enables using the icons as links.\n"
+"|[option]`IconHeight` = __value__|Specifies an icon height. The _value_ is a number of pixels.\n"
+"|[option]`IconWidth` = __value__|Specifies an icon width. The _value_ is a number of pixels.\n"
+"|[option]`IgnoreCase`|Enables sorting files and directories in a case-sensitive manner.\n"
+"|[option]`IgnoreClient`|Disables accepting query variables from a client.\n"
+"|[option]`NameWidth` = __value__|Specifies the width of the file name column. The _value_ can be either a number of characters, or an asterisk (that is, `*`) to adjust the width automatically.\n"
+"|[option]`ScanHTMLTitles`|Enables parsing the file for a description (that is, the `title` element) in case it is not provided by the [option]`AddDescription` directive.\n"
+"|[option]`ShowForbidden`|Enables listing the files with otherwise restricted access.\n"
+"|[option]`SuppressColumnSorting`|Disables re-sorting a directory listing by clicking on a column header.\n"
+"|[option]`SuppressDescription`|Disables reserving a space for file descriptions.\n"
+"|[option]`SuppressHTMLPreamble`|Disables the use of standard HTML preamble when a file specified by the [option]`HeaderName` directive is present.\n"
+"|[option]`SuppressIcon`|Disables the use of icons in directory listings.\n"
+"|[option]`SuppressLastModified`|Disables displaying the date of the last modification field in directory listings.\n"
+"|[option]`SuppressRules`|Disables the use of horizontal lines in directory listings.\n"
+"|[option]`SuppressSize`|Disables displaying the file size field in directory listings.\n"
+"|[option]`TrackModified`|Enables returning the `Last-Modified` and `ETag` values in the HTTP header.\n"
+"|[option]`VersionSort`|Enables sorting files that contain a version number in the expected manner.\n"
+"|[option]`XHTML`|Enables the use of XHTML 1.0 instead of the default HTML 3.2.\n"
+msgstr ""
+"|OPTION|DESCRIPTION\n"
+"|[OPTION]`CHARSET` = __ENCODING__|SPECIFIES THE CHARACTER SET OF A GENERATED WEB PAGE. THE _ENCODING_ HAS TO BE A VALID CHARACTER SET SUCH AS `UTF-8` OR `ISO-8859-2`.\n"
+"|[OPTION]`TYPE` = __CONTENT-TYPE__|SPECIFIES THE MEDIA TYPE OF A GENERATED WEB PAGE. THE _CONTENT-TYPE_ HAS TO BE A VALID MIME TYPE SUCH AS `TEXT/HTML` OR `TEXT/PLAIN`.\n"
+"|[OPTION]`DESCRIPTIONWIDTH` = __VALUE__|SPECIFIES THE WIDTH OF THE DESCRIPTION COLUMN. THE _VALUE_ CAN BE EITHER A NUMBER OF CHARACTERS, OR AN ASTERISK (THAT IS, `*`) TO ADJUST THE WIDTH AUTOMATICALLY.\n"
+"|[OPTION]`FANCYINDEXING`|ENABLES ADVANCED FEATURES SUCH AS DIFFERENT ICONS FOR CERTAIN FILES OR POSSIBILITY TO RE-SORT A DIRECTORY LISTING BY CLICKING ON A COLUMN HEADER.\n"
+"|[OPTION]`FOLDERFIRST`|ENABLES LISTING DIRECTORIES FIRST, ALWAYS PLACING THEM ABOVE FILES.\n"
+"|[OPTION]`HTMLTABLE`|ENABLES THE USE OF HTML TABLES FOR DIRECTORY LISTINGS.\n"
+"|[OPTION]`ICONSARELINKS`|ENABLES USING THE ICONS AS LINKS.\n"
+"|[OPTION]`ICONHEIGHT` = __VALUE__|SPECIFIES AN ICON HEIGHT. THE _VALUE_ IS A NUMBER OF PIXELS.\n"
+"|[OPTION]`ICONWIDTH` = __VALUE__|SPECIFIES AN ICON WIDTH. THE _VALUE_ IS A NUMBER OF PIXELS.\n"
+"|[OPTION]`IGNORECASE`|ENABLES SORTING FILES AND DIRECTORIES IN A CASE-SENSITIVE MANNER.\n"
+"|[OPTION]`IGNORECLIENT`|DISABLES ACCEPTING QUERY VARIABLES FROM A CLIENT.\n"
+"|[OPTION]`NAMEWIDTH` = __VALUE__|SPECIFIES THE WIDTH OF THE FILE NAME COLUMN. THE _VALUE_ CAN BE EITHER A NUMBER OF CHARACTERS, OR AN ASTERISK (THAT IS, `*`) TO ADJUST THE WIDTH AUTOMATICALLY.\n"
+"|[OPTION]`SCANHTMLTITLES`|ENABLES PARSING THE FILE FOR A DESCRIPTION (THAT IS, THE `TITLE` ELEMENT) IN CASE IT IS NOT PROVIDED BY THE [OPTION]`ADDDESCRIPTION` DIRECTIVE.\n"
+"|[OPTION]`SHOWFORBIDDEN`|ENABLES LISTING THE FILES WITH OTHERWISE RESTRICTED ACCESS.\n"
+"|[OPTION]`SUPPRESSCOLUMNSORTING`|DISABLES RE-SORTING A DIRECTORY LISTING BY CLICKING ON A COLUMN HEADER.\n"
+"|[OPTION]`SUPPRESSDESCRIPTION`|DISABLES RESERVING A SPACE FOR FILE DESCRIPTIONS.\n"
+"|[OPTION]`SUPPRESSHTMLPREAMBLE`|DISABLES THE USE OF STANDARD HTML PREAMBLE WHEN A FILE SPECIFIED BY THE [OPTION]`HEADERNAME` DIRECTIVE IS PRESENT.\n"
+"|[OPTION]`SUPPRESSICON`|DISABLES THE USE OF ICONS IN DIRECTORY LISTINGS.\n"
+"|[OPTION]`SUPPRESSLASTMODIFIED`|DISABLES DISPLAYING THE DATE OF THE LAST MODIFICATION FIELD IN DIRECTORY LISTINGS.\n"
+"|[OPTION]`SUPPRESSRULES`|DISABLES THE USE OF HORIZONTAL LINES IN DIRECTORY LISTINGS.\n"
+"|[OPTION]`SUPPRESSSIZE`|DISABLES DISPLAYING THE FILE SIZE FIELD IN DIRECTORY LISTINGS.\n"
+"|[OPTION]`TRACKMODIFIED`|ENABLES RETURNING THE `LAST-MODIFIED` AND `ETAG` VALUES IN THE HTTP HEADER.\n"
+"|[OPTION]`VERSIONSORT`|ENABLES SORTING FILES THAT CONTAIN A VERSION NUMBER IN THE EXPECTED MANNER.\n"
+"|[OPTION]`XHTML`|ENABLES THE USE OF XHTML 1.0 INSTEAD OF THE DEFAULT HTML 3.2.\n"
+
+#. type: Plain text
+#: Tables.adoc:66
+msgid "Manually wrapped cells"
+msgstr "MANUALLY WRAPPED CELLS"
+
+#. type: Table
+#: Tables.adoc:78
+#, no-wrap
+msgid ""
+"|Option|Description\n"
+"|[option]`Charset` = __encoding__\n"
+"|Specifies the character set of a generated web page. The _encoding_ has to be a valid character set such as `UTF-8` or `ISO-8859-2`.\n"
+"|[option]`Type` = __content-type__\n"
+"|Specifies the media type of a generated web page. The _content-type_\n"
+"has to be a valid MIME type such as `text/html` or `text/plain`.\n"
+"\n"
+"|[option]`DescriptionWidth` = __value__\n"
+"\n"
+"|Specifies the width of the description column. The _value_ can be either a number of characters, or an asterisk (that is, `*`) to adjust the width automatically.\n"
+msgstr ""
+"|OPTION|DESCRIPTION\n"
+"|[OPTION]`CHARSET` = __ENCODING__\n"
+"|SPECIFIES THE CHARACTER SET OF A GENERATED WEB PAGE. THE _ENCODING_ HAS TO BE A VALID CHARACTER SET SUCH AS `UTF-8` OR `ISO-8859-2`.\n"
+"|[OPTION]`TYPE` = __CONTENT-TYPE__\n"
+"|SPECIFIES THE MEDIA TYPE OF A GENERATED WEB PAGE. THE _CONTENT-TYPE_\n"
+"HAS TO BE A VALID MIME TYPE SUCH AS `TEXT/HTML` OR `TEXT/PLAIN`.\n"
+"\n"
+"|[OPTION]`DESCRIPTIONWIDTH` = __VALUE__\n"
+"\n"
+"|SPECIFIES THE WIDTH OF THE DESCRIPTION COLUMN. THE _VALUE_ CAN BE EITHER A NUMBER OF CHARACTERS, OR AN ASTERISK (THAT IS, `*`) TO ADJUST THE WIDTH AUTOMATICALLY.\n"
diff --git a/t/fmt/asciidoc/Tables.pot b/t/fmt/asciidoc/Tables.pot
new file mode 100644
index 0000000..67b0d2f
--- /dev/null
+++ b/t/fmt/asciidoc/Tables.pot
@@ -0,0 +1,156 @@
+# SOME DESCRIPTIVE TITLE
+# Copyright (C) YEAR Free Software Foundation, Inc.
+# This file is distributed under the same license as the PACKAGE package.
+# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
+#
+#, fuzzy
+msgid ""
+msgstr ""
+"Project-Id-Version: PACKAGE VERSION\n"
+"POT-Creation-Date: 2018-10-03 09:32+0200\n"
+"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
+"Language-Team: LANGUAGE <LL@li.org>\n"
+"Language: \n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+
+#. type: Title =
+#: Tables.adoc:2
+#, no-wrap
+msgid "Test Tables"
+msgstr ""
+
+#. type: Table
+#: Tables.adoc:8
+#, no-wrap
+msgid ""
+"|1 | 2\n"
+"|3 | 4\n"
+"|5 | 6\n"
+msgstr ""
+
+#. type: Block title
+#: Tables.adoc:11
+#, no-wrap
+msgid "An example table"
+msgstr ""
+
+#. type: Table
+#: Tables.adoc:19
+#, no-wrap
+msgid ""
+"|Column 1 | Column 2\n"
+"|1 | Item 1\n"
+"|2 | Item 2\n"
+"|3 | Item 3\n"
+"|6 | Three items\n"
+msgstr ""
+
+#. type: Table
+#: Tables.adoc:26
+#, no-wrap
+msgid ""
+"|1|2|3|4\n"
+"|a|b|c|d\n"
+"|A|B|C|D\n"
+msgstr ""
+
+#. type: Table
+#: Tables.adoc:32
+#, no-wrap
+msgid ""
+"ID,Customer Name,Contact Name,Customer Address,Phone\n"
+"include::customers.csv[]\n"
+msgstr ""
+
+#. type: Plain text
+#: Tables.adoc:35
+msgid ""
+"The following examples are drawn from the "
+"https://docs.fedoraproject.org/f27/system-administrators-guide/index.html[Fedora "
+"System Administrator's Guide]:"
+msgstr ""
+
+#. type: Table
+#: Tables.adoc:63
+#, no-wrap
+msgid ""
+"|Option|Description\n"
+"|[option]`Charset` = __encoding__|Specifies the character set of a generated "
+"web page. The _encoding_ has to be a valid character set such as `UTF-8` or "
+"`ISO-8859-2`.\n"
+"|[option]`Type` = __content-type__|Specifies the media type of a generated "
+"web page. The _content-type_ has to be a valid MIME type such as `text/html` "
+"or `text/plain`.\n"
+"|[option]`DescriptionWidth` = __value__|Specifies the width of the "
+"description column. The _value_ can be either a number of characters, or an "
+"asterisk (that is, `*`) to adjust the width automatically.\n"
+"|[option]`FancyIndexing`|Enables advanced features such as different icons "
+"for certain files or possibility to re-sort a directory listing by clicking "
+"on a column header.\n"
+"|[option]`FolderFirst`|Enables listing directories first, always placing "
+"them above files.\n"
+"|[option]`HTMLTable`|Enables the use of HTML tables for directory "
+"listings.\n"
+"|[option]`IconsAreLinks`|Enables using the icons as links.\n"
+"|[option]`IconHeight` = __value__|Specifies an icon height. The _value_ is a "
+"number of pixels.\n"
+"|[option]`IconWidth` = __value__|Specifies an icon width. The _value_ is a "
+"number of pixels.\n"
+"|[option]`IgnoreCase`|Enables sorting files and directories in a "
+"case-sensitive manner.\n"
+"|[option]`IgnoreClient`|Disables accepting query variables from a client.\n"
+"|[option]`NameWidth` = __value__|Specifies the width of the file name "
+"column. The _value_ can be either a number of characters, or an asterisk "
+"(that is, `*`) to adjust the width automatically.\n"
+"|[option]`ScanHTMLTitles`|Enables parsing the file for a description (that "
+"is, the `title` element) in case it is not provided by the "
+"[option]`AddDescription` directive.\n"
+"|[option]`ShowForbidden`|Enables listing the files with otherwise restricted "
+"access.\n"
+"|[option]`SuppressColumnSorting`|Disables re-sorting a directory listing by "
+"clicking on a column header.\n"
+"|[option]`SuppressDescription`|Disables reserving a space for file "
+"descriptions.\n"
+"|[option]`SuppressHTMLPreamble`|Disables the use of standard HTML preamble "
+"when a file specified by the [option]`HeaderName` directive is present.\n"
+"|[option]`SuppressIcon`|Disables the use of icons in directory listings.\n"
+"|[option]`SuppressLastModified`|Disables displaying the date of the last "
+"modification field in directory listings.\n"
+"|[option]`SuppressRules`|Disables the use of horizontal lines in directory "
+"listings.\n"
+"|[option]`SuppressSize`|Disables displaying the file size field in directory "
+"listings.\n"
+"|[option]`TrackModified`|Enables returning the `Last-Modified` and `ETag` "
+"values in the HTTP header.\n"
+"|[option]`VersionSort`|Enables sorting files that contain a version number "
+"in the expected manner.\n"
+"|[option]`XHTML`|Enables the use of XHTML 1.0 instead of the default HTML "
+"3.2.\n"
+msgstr ""
+
+#. type: Plain text
+#: Tables.adoc:66
+msgid "Manually wrapped cells"
+msgstr ""
+
+#. type: Table
+#: Tables.adoc:78
+#, no-wrap
+msgid ""
+"|Option|Description\n"
+"|[option]`Charset` = __encoding__\n"
+"|Specifies the character set of a generated web page. The _encoding_ has to "
+"be a valid character set such as `UTF-8` or `ISO-8859-2`.\n"
+"|[option]`Type` = __content-type__\n"
+"|Specifies the media type of a generated web page. The _content-type_\n"
+"has to be a valid MIME type such as `text/html` or `text/plain`.\n"
+"\n"
+"|[option]`DescriptionWidth` = __value__\n"
+"\n"
+"|Specifies the width of the description column. The _value_ can be either a "
+"number of characters, or an asterisk (that is, `*`) to adjust the width "
+"automatically.\n"
+msgstr ""
diff --git a/t/fmt/asciidoc/Tables.trans b/t/fmt/asciidoc/Tables.trans
new file mode 100644
index 0000000..d5be335
--- /dev/null
+++ b/t/fmt/asciidoc/Tables.trans
@@ -0,0 +1,78 @@
+TEST TABLES
+===========
+
+|===
+|1 | 2
+|3 | 4
+|5 | 6
+|===
+
+
+.AN EXAMPLE TABLE
+[grid="all", options="header", cols=">,"]
+|===
+|COLUMN 1 | COLUMN 2
+|1 | ITEM 1
+|2 | ITEM 2
+|3 | ITEM 3
+|6 | THREE ITEMS
+|===
+
+[frame="all", cols="<,<,<,<", width="15%"]
+|===
+|1|2|3|4
+|A|B|C|D
+|A|B|C|D
+|===
+
+[frame="all", grid="all", cols="^15,>20,>25,>20", format="csv"]
+|===
+ID,CUSTOMER NAME,CONTACT NAME,CUSTOMER ADDRESS,PHONE
+INCLUDE::CUSTOMERS.CSV[]
+|===
+
+THE FOLLOWING EXAMPLES ARE DRAWN FROM THE HTTPS://DOCS.FEDORAPROJECT.ORG/F27/SYSTEM-ADMINISTRATORS-GUIDE/INDEX.HTML[FEDORA SYSTEM ADMINISTRATOR'S GUIDE]:
+
+[options="header"]
+|===
+|OPTION|DESCRIPTION
+|[OPTION]`CHARSET` = __ENCODING__|SPECIFIES THE CHARACTER SET OF A GENERATED WEB PAGE. THE _ENCODING_ HAS TO BE A VALID CHARACTER SET SUCH AS `UTF-8` OR `ISO-8859-2`.
+|[OPTION]`TYPE` = __CONTENT-TYPE__|SPECIFIES THE MEDIA TYPE OF A GENERATED WEB PAGE. THE _CONTENT-TYPE_ HAS TO BE A VALID MIME TYPE SUCH AS `TEXT/HTML` OR `TEXT/PLAIN`.
+|[OPTION]`DESCRIPTIONWIDTH` = __VALUE__|SPECIFIES THE WIDTH OF THE DESCRIPTION COLUMN. THE _VALUE_ CAN BE EITHER A NUMBER OF CHARACTERS, OR AN ASTERISK (THAT IS, `*`) TO ADJUST THE WIDTH AUTOMATICALLY.
+|[OPTION]`FANCYINDEXING`|ENABLES ADVANCED FEATURES SUCH AS DIFFERENT ICONS FOR CERTAIN FILES OR POSSIBILITY TO RE-SORT A DIRECTORY LISTING BY CLICKING ON A COLUMN HEADER.
+|[OPTION]`FOLDERFIRST`|ENABLES LISTING DIRECTORIES FIRST, ALWAYS PLACING THEM ABOVE FILES.
+|[OPTION]`HTMLTABLE`|ENABLES THE USE OF HTML TABLES FOR DIRECTORY LISTINGS.
+|[OPTION]`ICONSARELINKS`|ENABLES USING THE ICONS AS LINKS.
+|[OPTION]`ICONHEIGHT` = __VALUE__|SPECIFIES AN ICON HEIGHT. THE _VALUE_ IS A NUMBER OF PIXELS.
+|[OPTION]`ICONWIDTH` = __VALUE__|SPECIFIES AN ICON WIDTH. THE _VALUE_ IS A NUMBER OF PIXELS.
+|[OPTION]`IGNORECASE`|ENABLES SORTING FILES AND DIRECTORIES IN A CASE-SENSITIVE MANNER.
+|[OPTION]`IGNORECLIENT`|DISABLES ACCEPTING QUERY VARIABLES FROM A CLIENT.
+|[OPTION]`NAMEWIDTH` = __VALUE__|SPECIFIES THE WIDTH OF THE FILE NAME COLUMN. THE _VALUE_ CAN BE EITHER A NUMBER OF CHARACTERS, OR AN ASTERISK (THAT IS, `*`) TO ADJUST THE WIDTH AUTOMATICALLY.
+|[OPTION]`SCANHTMLTITLES`|ENABLES PARSING THE FILE FOR A DESCRIPTION (THAT IS, THE `TITLE` ELEMENT) IN CASE IT IS NOT PROVIDED BY THE [OPTION]`ADDDESCRIPTION` DIRECTIVE.
+|[OPTION]`SHOWFORBIDDEN`|ENABLES LISTING THE FILES WITH OTHERWISE RESTRICTED ACCESS.
+|[OPTION]`SUPPRESSCOLUMNSORTING`|DISABLES RE-SORTING A DIRECTORY LISTING BY CLICKING ON A COLUMN HEADER.
+|[OPTION]`SUPPRESSDESCRIPTION`|DISABLES RESERVING A SPACE FOR FILE DESCRIPTIONS.
+|[OPTION]`SUPPRESSHTMLPREAMBLE`|DISABLES THE USE OF STANDARD HTML PREAMBLE WHEN A FILE SPECIFIED BY THE [OPTION]`HEADERNAME` DIRECTIVE IS PRESENT.
+|[OPTION]`SUPPRESSICON`|DISABLES THE USE OF ICONS IN DIRECTORY LISTINGS.
+|[OPTION]`SUPPRESSLASTMODIFIED`|DISABLES DISPLAYING THE DATE OF THE LAST MODIFICATION FIELD IN DIRECTORY LISTINGS.
+|[OPTION]`SUPPRESSRULES`|DISABLES THE USE OF HORIZONTAL LINES IN DIRECTORY LISTINGS.
+|[OPTION]`SUPPRESSSIZE`|DISABLES DISPLAYING THE FILE SIZE FIELD IN DIRECTORY LISTINGS.
+|[OPTION]`TRACKMODIFIED`|ENABLES RETURNING THE `LAST-MODIFIED` AND `ETAG` VALUES IN THE HTTP HEADER.
+|[OPTION]`VERSIONSORT`|ENABLES SORTING FILES THAT CONTAIN A VERSION NUMBER IN THE EXPECTED MANNER.
+|[OPTION]`XHTML`|ENABLES THE USE OF XHTML 1.0 INSTEAD OF THE DEFAULT HTML 3.2.
+|===
+
+MANUALLY WRAPPED CELLS
+
+|===
+|OPTION|DESCRIPTION
+|[OPTION]`CHARSET` = __ENCODING__
+|SPECIFIES THE CHARACTER SET OF A GENERATED WEB PAGE. THE _ENCODING_ HAS TO BE A VALID CHARACTER SET SUCH AS `UTF-8` OR `ISO-8859-2`.
+|[OPTION]`TYPE` = __CONTENT-TYPE__
+|SPECIFIES THE MEDIA TYPE OF A GENERATED WEB PAGE. THE _CONTENT-TYPE_
+HAS TO BE A VALID MIME TYPE SUCH AS `TEXT/HTML` OR `TEXT/PLAIN`.
+
+|[OPTION]`DESCRIPTIONWIDTH` = __VALUE__
+
+|SPECIFIES THE WIDTH OF THE DESCRIPTION COLUMN. THE _VALUE_ CAN BE EITHER A NUMBER OF CHARACTERS, OR AN ASTERISK (THAT IS, `*`) TO ADJUST THE WIDTH AUTOMATICALLY.
+|===
diff --git a/t/fmt/asciidoc/TablesCells.adoc b/t/fmt/asciidoc/TablesCells.adoc
new file mode 100644
index 0000000..dbd1740
--- /dev/null
+++ b/t/fmt/asciidoc/TablesCells.adoc
@@ -0,0 +1,161 @@
+Tables with Cells translated
+============================
+
+Examples taken from asciidoctor table guide
+
+.Simple table
+|===
+| Cell in column 1, row 1 | Cell in column 2, row 1
+| Cell in column 1, row 2 | Cell in column 2, row 2
+| Cell in column 1, row 3 | Cell in column 2, row 3
+|===
+
+.No space around column separator
+|===
+|Cell in column 1, row 1|Cell in column 2, row 1
+|===
+
+.Cells on each line
+[cols="3*"]
+|===
+|Cell in column 1, row 1
+|Cell in column 2, row 1
+|Cell in column 3, row 1
+
+|Cell in column 1, row 2
+|Cell in column 2, row 2
+|Cell in column 3, row 2
+|===
+
+.Cell duplicated
+|===
+|Cell in column 1, row 1 |Cell in column 2, row 1 |Cell in column 3, row 1
+3*|Same cell content in columns 1, 2, and 3
+|Cell in column 1, row 3
+|Cell in column 2, row 3
+|Cell in column 3, row 3
+|===
+
+.Cell span
+|===
+
+|Cell in column 1, row 1 |Cell in column 2, row 1 |Cell in column 3, row 1
+
+3+|Content in a single cell that spans columns 1, 2, and 3
+
+|Cell in column 1, row 3
+|Cell in column 2, row 3
+|Cell in column 3, row 3
+
+|===
+
+.Cell span in rows
+|===
+
+|Cell in column 1, row 1 |Cell in column 2, row 1 |Cell in column 3, row 1
+
+.2+|Content in a single cell that spans rows 2 and 3
+|Cell in column 2, row 2
+|Cell in column 3, row 2
+
+|Cell in column 2, row 3
+|Cell in column 3, row 3
+
+|===
+
+.Cell span in columns and rows
+|===
+
+|Column 1, row 1 |Column 2, row 1 |Column 3, row 1 |Column 4, row 1
+
+|Column 1, row 2
+2.3+|Content in a single cell that spans over rows and columns
+|Column 4, row 2
+
+|Column 1, row 3
+|Column 4, row 3
+
+|Column 1, row 4
+|Column 4, row 4
+|===
+
+.Cells aligned horizontally, vertically, and across a span of three columns
+[cols="3"]
+|===
+^|Prefix the `{vbar}` with `{caret}` to center content horizontally
+<|Prefix the `{vbar}` with `<` to align the content to the left horizontally
+>|Prefix the `{vbar}` with `>` to align the content to the right horizontally
+
+.^|Prefix the `{vbar}` with a `.` and `{caret}` to center the content in the cell vertically
+.<|Prefix the `{vbar}` with a `.` and `<` to align the content to the top of the cell
+.>|Prefix the `{vbar}` with a `.` and `>` to align the content to the bottom of the cell
+
+3+^.^|This content spans three columns (`3{plus}`) and is centered horizontally (`{caret}`) and vertically (`.{caret}`) within the cell.
+
+|===
+
+.Building a variety of cell specifiers
+|===
+
+2*>m|This content is duplicated across two columns.
+
+It is aligned right horizontally.
+
+And it is monospaced.
+
+.3+^.>s|This cell spans 3 rows. The content is centered horizontally, aligned to the bottom of the cell, and strong.
+e|This content is emphasized.
+
+.^l|This content is aligned to the top of the cell and literal.
+
+v|This cell contains a verse
+that may one day expound on the
+wonders of tables in an
+epic sonnet.
+
+|===
+
+.Cells with Asciidoc in them
+[cols="2"]
+|===
+
+a|This cell is prefixed with an `a`, so the processor interprets the following lines as an AsciiDoc list.
+
+* List item 1
+* List item 2
+* List item 3
+|This cell *is not* prefixed with an `a`, so the processor does not interpret the following lines as an AsciiDoc list.
+
+* List item 1
+* List item 2
+* List item 3
+
+a|This cell is prefixed with an `a`, so the processor honors the `lead` style on the following paragraph.
+
+[.lead]
+I am a paragraph styled with the lead attribute.
+|This cell *is not* prefixed with an `a`, so the processor does not honor the `lead` style on the following paragraph.
+
+[.lead]
+I am a paragraph styled with the lead attribute.
+|===
+
+[format="csv",width="60%",cols="2"]
+[frame="topbot",grid="none"]
+[options="header"]
+|===
+iocontrol.0 pin ,motion pin
+tool-prepare,digital-out-00
+tool-prepared,digital-in-00
+tool-change,digital-out-01
+tool-changed,digital-in-01
+tool-prep-number,analog-out-00
+tool-prep-pocket,analog-out-01
+tool-number,analog-out-02
+|===
+
+.Empty cells
+|===
+|0|
+||
+|===
diff --git a/t/fmt/asciidoc/TablesCells.norm b/t/fmt/asciidoc/TablesCells.norm
new file mode 100644
index 0000000..97befa6
--- /dev/null
+++ b/t/fmt/asciidoc/TablesCells.norm
@@ -0,0 +1,161 @@
+Tables with Cells translated
+============================
+
+Examples taken from asciidoctor table guide
+
+.Simple table
+|===
+| Cell in column 1, row 1 | Cell in column 2, row 1
+| Cell in column 1, row 2 | Cell in column 2, row 2
+| Cell in column 1, row 3 | Cell in column 2, row 3
+|===
+
+.No space around column separator
+|===
+|Cell in column 1, row 1|Cell in column 2, row 1
+|===
+
+.Cells on each line
+[cols="3*"]
+|===
+|Cell in column 1, row 1
+|Cell in column 2, row 1
+|Cell in column 3, row 1
+
+|Cell in column 1, row 2
+|Cell in column 2, row 2
+|Cell in column 3, row 2
+|===
+
+.Cell duplicated
+|===
+|Cell in column 1, row 1 |Cell in column 2, row 1 |Cell in column 3, row 1
+3*|Same cell content in columns 1, 2, and 3
+|Cell in column 1, row 3
+|Cell in column 2, row 3
+|Cell in column 3, row 3
+|===
+
+.Cell span
+|===
+
+|Cell in column 1, row 1 |Cell in column 2, row 1 |Cell in column 3, row 1
+
+3+|Content in a single cell that spans columns 1, 2, and 3
+
+|Cell in column 1, row 3
+|Cell in column 2, row 3
+|Cell in column 3, row 3
+
+|===
+
+.Cell span in rows
+|===
+
+|Cell in column 1, row 1 |Cell in column 2, row 1 |Cell in column 3, row 1
+
+.2+|Content in a single cell that spans rows 2 and 3
+|Cell in column 2, row 2
+|Cell in column 3, row 2
+
+|Cell in column 2, row 3
+|Cell in column 3, row 3
+
+|===
+
+.Cell span in columns and rows
+|===
+
+|Column 1, row 1 |Column 2, row 1 |Column 3, row 1 |Column 4, row 1
+
+|Column 1, row 2
+2.3+|Content in a single cell that spans over rows and columns
+|Column 4, row 2
+
+|Column 1, row 3
+|Column 4, row 3
+
+|Column 1, row 4
+|Column 4, row 4
+|===
+
+.Cells aligned horizontally, vertically, and across a span of three columns
+[cols="3"]
+|===
+^|Prefix the `{vbar}` with `{caret}` to center content horizontally
+<|Prefix the `{vbar}` with `<` to align the content to the left horizontally
+>|Prefix the `{vbar}` with `>` to align the content to the right horizontally
+
+.^|Prefix the `{vbar}` with a `.` and `{caret}` to center the content in the cell vertically
+.<|Prefix the `{vbar}` with a `.` and `<` to align the content to the top of the cell
+.>|Prefix the `{vbar}` with a `.` and `>` to align the content to the bottom of the cell
+
+3+^.^|This content spans three columns (`3{plus}`) and is centered horizontally (`{caret}`) and vertically (`.{caret}`) within the cell.
+
+|===
+
+.Building a variety of cell specifiers
+|===
+
+2*>m|This content is duplicated across two columns.
+
+It is aligned right horizontally.
+
+And it is monospaced.
+
+.3+^.>s|This cell spans 3 rows. The content is centered horizontally, aligned to the bottom of the cell, and strong.
+e|This content is emphasized.
+
+.^l|This content is aligned to the top of the cell and literal.
+
+v|This cell contains a verse
+that may one day expound on the
+wonders of tables in an
+epic sonnet.
+
+|===
+
+.Cells with Asciidoc in them
+[cols="2"]
+|===
+
+a|This cell is prefixed with an `a`, so the processor interprets the following lines as an AsciiDoc list.
+
+* List item 1
+* List item 2
+* List item 3
+|This cell *is not* prefixed with an `a`, so the processor does not interpret the following lines as an AsciiDoc list.
+
+* List item 1
+* List item 2
+* List item 3
+
+a|This cell is prefixed with an `a`, so the processor honors the `lead` style on the following paragraph.
+
+[.lead]
+I am a paragraph styled with the lead attribute.
+|This cell *is not* prefixed with an `a`, so the processor does not honor the `lead` style on the following paragraph.
+
+[.lead]
+I am a paragraph styled with the lead attribute.
+|===
+
+[format="csv", width="60%", cols="2"]
+[frame="topbot", grid="none"]
+[options="header"]
+|===
+iocontrol.0 pin ,motion pin
+tool-prepare,digital-out-00
+tool-prepared,digital-in-00
+tool-change,digital-out-01
+tool-changed,digital-in-01
+tool-prep-number,analog-out-00
+tool-prep-pocket,analog-out-01
+tool-number,analog-out-02
+|===
+
+.Empty cells
+|===
+|0|
+| |
+|===
diff --git a/t/fmt/asciidoc/TablesCells.norm.stderr b/t/fmt/asciidoc/TablesCells.norm.stderr
new file mode 100644
index 0000000..835f46c
--- /dev/null
+++ b/t/fmt/asciidoc/TablesCells.norm.stderr
@@ -0,0 +1 @@
+TablesCells.adoc:143: Po4a's tablecells mode only supports PSV formatted tables with '|' separators. Disabling tablecells and falling back to block mode for this table.
diff --git a/t/fmt/asciidoc/TablesCells.po b/t/fmt/asciidoc/TablesCells.po
new file mode 100644
index 0000000..29c593c
--- /dev/null
+++ b/t/fmt/asciidoc/TablesCells.po
@@ -0,0 +1,428 @@
+# SOME DESCRIPTIVE TITLE
+# Copyright (C) YEAR Free Software Foundation, Inc.
+# This file is distributed under the same license as the PACKAGE package.
+# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
+#
+#, fuzzy
+msgid ""
+msgstr ""
+"Project-Id-Version: PACKAGE VERSION\n"
+"POT-Creation-Date: 2018-12-09 22:02+0100\n"
+"PO-Revision-Date: 2020-05-10 15:01+0200\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
+"Language-Team: LANGUAGE <LL@li.org>\n"
+"Language: \n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+
+#. type: Title =
+#: TablesCells.adoc:2
+#, no-wrap
+msgid "Tables with Cells translated"
+msgstr "TABLES WITH CELLS TRANSLATED"
+
+#. type: Plain text
+#: TablesCells.adoc:5
+msgid "Examples taken from asciidoctor table guide"
+msgstr "EXAMPLES TAKEN FROM ASCIIDOCTOR TABLE GUIDE"
+
+#. type: Block title
+#: TablesCells.adoc:6
+#, no-wrap
+msgid "Simple table"
+msgstr "SIMPLE TABLE"
+
+#. type: Table
+#: TablesCells.adoc:8 TablesCells.adoc:15 TablesCells.adoc:22
+#: TablesCells.adoc:32 TablesCells.adoc:42 TablesCells.adoc:55
+#, no-wrap
+msgid "Cell in column 1, row 1"
+msgstr "CELL IN COLUMN 1, ROW 1"
+
+#. type: Table
+#: TablesCells.adoc:9 TablesCells.adoc:16 TablesCells.adoc:23
+#: TablesCells.adoc:32 TablesCells.adoc:42 TablesCells.adoc:55
+#, no-wrap
+msgid "Cell in column 2, row 1"
+msgstr "CELL IN COLUMN 2, ROW 1"
+
+#. type: Table
+#: TablesCells.adoc:9 TablesCells.adoc:26
+#, no-wrap
+msgid "Cell in column 1, row 2"
+msgstr "CELL IN COLUMN 1, ROW 2"
+
+#. type: Table
+#: TablesCells.adoc:10 TablesCells.adoc:27 TablesCells.adoc:59
+#, no-wrap
+msgid "Cell in column 2, row 2"
+msgstr "CELL IN COLUMN 2, ROW 2"
+
+#. type: Table
+#: TablesCells.adoc:10 TablesCells.adoc:35 TablesCells.adoc:47
+#, no-wrap
+msgid "Cell in column 1, row 3"
+msgstr "CELL IN COLUMN 1, ROW 3"
+
+#. type: Table
+#: TablesCells.adoc:11 TablesCells.adoc:36 TablesCells.adoc:48
+#: TablesCells.adoc:62
+#, no-wrap
+msgid "Cell in column 2, row 3"
+msgstr "CELL IN COLUMN 2, ROW 3"
+
+#. type: Block title
+#: TablesCells.adoc:13
+#, no-wrap
+msgid "No space around column separator"
+msgstr "NO SPACE AROUND COLUMN SEPARATOR"
+
+#. type: Block title
+#: TablesCells.adoc:18
+#, no-wrap
+msgid "Cells on each line"
+msgstr "CELLS ON EACH LINE"
+
+#. type: Table
+#: TablesCells.adoc:25 TablesCells.adoc:33 TablesCells.adoc:44
+#: TablesCells.adoc:57
+#, no-wrap
+msgid "Cell in column 3, row 1"
+msgstr "CELL IN COLUMN 3, ROW 1"
+
+#. type: Table
+#: TablesCells.adoc:28 TablesCells.adoc:61
+#, no-wrap
+msgid "Cell in column 3, row 2"
+msgstr "CELL IN COLUMN 3, ROW 2"
+
+#. type: Block title
+#: TablesCells.adoc:30
+#, no-wrap
+msgid "Cell duplicated"
+msgstr "CELL DUPLICATED"
+
+#. type: Table
+#: TablesCells.adoc:34
+#, no-wrap
+msgid "Same cell content in columns 1, 2, and 3"
+msgstr "SAME CELL CONTENT IN COLUMNS 1, 2, AND 3"
+
+#. type: Table
+#: TablesCells.adoc:37 TablesCells.adoc:50 TablesCells.adoc:64
+#, no-wrap
+msgid "Cell in column 3, row 3"
+msgstr "CELL IN COLUMN 3, ROW 3"
+
+#. type: Block title
+#: TablesCells.adoc:39
+#, no-wrap
+msgid "Cell span"
+msgstr "CELL SPAN"
+
+#. type: Table
+#: TablesCells.adoc:46
+#, no-wrap
+msgid "Content in a single cell that spans columns 1, 2, and 3"
+msgstr "CONTENT IN A SINGLE CELL THAT SPANS COLUMNS 1, 2, AND 3"
+
+#. type: Block title
+#: TablesCells.adoc:52
+#, no-wrap
+msgid "Cell span in rows"
+msgstr "CELL SPAN IN ROWS"
+
+#. type: Table
+#: TablesCells.adoc:58
+#, no-wrap
+msgid "Content in a single cell that spans rows 2 and 3"
+msgstr "CONTENT IN A SINGLE CELL THAT SPANS ROWS 2 AND 3"
+
+#. type: Block title
+#: TablesCells.adoc:66
+#, no-wrap
+msgid "Cell span in columns and rows"
+msgstr "CELL SPAN IN COLUMNS AND ROWS"
+
+#. type: Table
+#: TablesCells.adoc:69
+#, no-wrap
+msgid "Column 1, row 1"
+msgstr "COLUMN 1, ROW 1"
+
+#. type: Table
+#: TablesCells.adoc:69
+#, no-wrap
+msgid "Column 2, row 1"
+msgstr "COLUMN 2, ROW 1"
+
+#. type: Table
+#: TablesCells.adoc:69
+#, no-wrap
+msgid "Column 3, row 1"
+msgstr "COLUMN 3, ROW 1"
+
+#. type: Table
+#: TablesCells.adoc:71
+#, no-wrap
+msgid "Column 4, row 1"
+msgstr "COLUMN 4, ROW 1"
+
+#. type: Table
+#: TablesCells.adoc:72
+#, no-wrap
+msgid "Column 1, row 2"
+msgstr "COLUMN 1, ROW 2"
+
+#. type: Table
+#: TablesCells.adoc:73
+#, no-wrap
+msgid "Content in a single cell that spans over rows and columns"
+msgstr "CONTENT IN A SINGLE CELL THAT SPANS OVER ROWS AND COLUMNS"
+
+#. type: Table
+#: TablesCells.adoc:75
+#, no-wrap
+msgid "Column 4, row 2"
+msgstr "COLUMN 4, ROW 2"
+
+#. type: Table
+#: TablesCells.adoc:76
+#, no-wrap
+msgid "Column 1, row 3"
+msgstr "COLUMN 1, ROW 3"
+
+#. type: Table
+#: TablesCells.adoc:78
+#, no-wrap
+msgid "Column 4, row 3"
+msgstr "COLUMN 4, ROW 3"
+
+#. type: Table
+#: TablesCells.adoc:79
+#, no-wrap
+msgid "Column 1, row 4"
+msgstr "COLUMN 1, ROW 4"
+
+#. type: Table
+#: TablesCells.adoc:80
+#, no-wrap
+msgid "Column 4, row 4"
+msgstr "COLUMN 4, ROW 4"
+
+#. type: Block title
+#: TablesCells.adoc:82
+#, no-wrap
+msgid "Cells aligned horizontally, vertically, and across a span of three columns"
+msgstr "CELLS ALIGNED HORIZONTALLY, VERTICALLY, AND ACROSS A SPAN OF THREE COLUMNS"
+
+#. type: Table
+#: TablesCells.adoc:86
+#, no-wrap
+msgid "Prefix the `{vbar}` with `{caret}` to center content horizontally"
+msgstr "PREFIX THE `{VBAR}` WITH `{CARET}` TO CENTER CONTENT HORIZONTALLY"
+
+#. type: Table
+#: TablesCells.adoc:87
+#, no-wrap
+msgid "Prefix the `{vbar}` with `<` to align the content to the left horizontally"
+msgstr "PREFIX THE `{VBAR}` WITH `<` TO ALIGN THE CONTENT TO THE LEFT HORIZONTALLY"
+
+#. type: Table
+#: TablesCells.adoc:89
+#, no-wrap
+msgid "Prefix the `{vbar}` with `>` to align the content to the right horizontally"
+msgstr "PREFIX THE `{VBAR}` WITH `>` TO ALIGN THE CONTENT TO THE RIGHT HORIZONTALLY"
+
+#. type: Table
+#: TablesCells.adoc:90
+#, no-wrap
+msgid ""
+"Prefix the `{vbar}` with a `.` and `{caret}` to center the content in the "
+"cell vertically"
+msgstr "PREFIX THE `{VBAR}` WITH A `.` AND `{CARET}` TO CENTER THE CONTENT IN THE CELL VERTICALLY"
+
+#. type: Table
+#: TablesCells.adoc:91
+#, no-wrap
+msgid ""
+"Prefix the `{vbar}` with a `.` and `<` to align the content to the top of "
+"the cell"
+msgstr "PREFIX THE `{VBAR}` WITH A `.` AND `<` TO ALIGN THE CONTENT TO THE TOP OF THE CELL"
+
+#. type: Table
+#: TablesCells.adoc:93
+#, no-wrap
+msgid ""
+"Prefix the `{vbar}` with a `.` and `>` to align the content to the bottom of "
+"the cell"
+msgstr "PREFIX THE `{VBAR}` WITH A `.` AND `>` TO ALIGN THE CONTENT TO THE BOTTOM OF THE CELL"
+
+#. type: Table
+#: TablesCells.adoc:95
+#, no-wrap
+msgid ""
+"This content spans three columns (`3{plus}`) and is centered horizontally "
+"(`{caret}`) and vertically (`.{caret}`) within the cell."
+msgstr "THIS CONTENT SPANS THREE COLUMNS (`3{PLUS}`) AND IS CENTERED HORIZONTALLY (`{CARET}`) AND VERTICALLY (`.{CARET}`) WITHIN THE CELL."
+
+#. type: Block title
+#: TablesCells.adoc:97
+#, no-wrap
+msgid "Building a variety of cell specifiers"
+msgstr "BUILDING A VARIETY OF CELL SPECIFIERS"
+
+#. type: Table
+#: TablesCells.adoc:106
+#, no-wrap
+msgid ""
+"This content is duplicated across two columns.\n"
+"\n"
+"It is aligned right horizontally.\n"
+"\n"
+"And it is monospaced."
+msgstr ""
+"THIS CONTENT IS DUPLICATED ACROSS TWO COLUMNS.\n"
+"\n"
+"IT IS ALIGNED RIGHT HORIZONTALLY.\n"
+"\n"
+"AND IT IS MONOSPACED."
+
+#. type: Table
+#: TablesCells.adoc:107
+#, no-wrap
+msgid ""
+"This cell spans 3 rows. The content is centered horizontally, aligned to the "
+"bottom of the cell, and strong."
+msgstr "THIS CELL SPANS 3 ROWS. THE CONTENT IS CENTERED HORIZONTALLY, ALIGNED TO THE BOTTOM OF THE CELL, AND STRONG."
+
+#. type: Table
+#: TablesCells.adoc:109
+#, no-wrap
+msgid "This content is emphasized."
+msgstr "THIS CONTENT IS EMPHASIZED."
+
+#. type: Table
+#: TablesCells.adoc:111
+#, no-wrap
+msgid "This content is aligned to the top of the cell and literal."
+msgstr "THIS CONTENT IS ALIGNED TO THE TOP OF THE CELL AND LITERAL."
+
+#. type: Table
+#: TablesCells.adoc:116
+#, no-wrap
+msgid ""
+"This cell contains a verse\n"
+"that may one day expound on the\n"
+"wonders of tables in an\n"
+"epic sonnet."
+msgstr ""
+"THIS CELL CONTAINS A VERSE\n"
+"THAT MAY ONE DAY EXPOUND ON THE\n"
+"WONDERS OF TABLES IN AN\n"
+"EPIC SONNET."
+
+#. type: Block title
+#: TablesCells.adoc:118
+#, no-wrap
+msgid "Cells with Asciidoc in them"
+msgstr "CELLS WITH ASCIIDOC IN THEM"
+
+#. type: Table
+#: TablesCells.adoc:127
+#, no-wrap
+msgid ""
+"This cell is prefixed with an `a`, so the processor interprets the following "
+"lines as an AsciiDoc list.\n"
+"\n"
+"* List item 1\n"
+"* List item 2\n"
+"* List item 3"
+msgstr ""
+"THIS CELL IS PREFIXED WITH AN `A`, SO THE PROCESSOR INTERPRETS THE FOLLOWING LINES AS AN ASCIIDOC LIST.\n"
+"\n"
+"* LIST ITEM 1\n"
+"* LIST ITEM 2\n"
+"* LIST ITEM 3"
+
+#. type: Table
+#: TablesCells.adoc:133
+#, no-wrap
+msgid ""
+"This cell *is not* prefixed with an `a`, so the processor does not interpret "
+"the following lines as an AsciiDoc list.\n"
+"\n"
+"* List item 1\n"
+"* List item 2\n"
+"* List item 3"
+msgstr ""
+"THIS CELL *IS NOT* PREFIXED WITH AN `A`, SO THE PROCESSOR DOES NOT INTERPRET THE FOLLOWING LINES AS AN ASCIIDOC LIST.\n"
+"\n"
+"* LIST ITEM 1\n"
+"* LIST ITEM 2\n"
+"* LIST ITEM 3"
+
+#. type: Table
+#: TablesCells.adoc:137
+#, no-wrap
+msgid ""
+"This cell is prefixed with an `a`, so the processor honors the `lead` style "
+"on the following paragraph.\n"
+"\n"
+"[.lead]\n"
+"I am a paragraph styled with the lead attribute."
+msgstr ""
+"THIS CELL IS PREFIXED WITH AN `A`, SO THE PROCESSOR HONORS THE `LEAD` STYLE ON THE FOLLOWING PARAGRAPH.\n"
+"\n"
+"[.LEAD]\n"
+"I AM A PARAGRAPH STYLED WITH THE LEAD ATTRIBUTE."
+
+#. type: Table
+#: TablesCells.adoc:141
+#, no-wrap
+msgid ""
+"This cell *is not* prefixed with an `a`, so the processor does not honor the "
+"`lead` style on the following paragraph.\n"
+"\n"
+"[.lead]\n"
+"I am a paragraph styled with the lead attribute."
+msgstr ""
+"THIS CELL *IS NOT* PREFIXED WITH AN `A`, SO THE PROCESSOR DOES NOT HONOR THE `LEAD` STYLE ON THE FOLLOWING PARAGRAPH.\n"
+"\n"
+"[.LEAD]\n"
+"I AM A PARAGRAPH STYLED WITH THE LEAD ATTRIBUTE."
+
+#. type: Table
+#: TablesCells.adoc:155
+#, no-wrap
+msgid ""
+"iocontrol.0 pin ,motion pin\n"
+"tool-prepare,digital-out-00\n"
+"tool-prepared,digital-in-00\n"
+"tool-change,digital-out-01\n"
+"tool-changed,digital-in-01\n"
+"tool-prep-number,analog-out-00\n"
+"tool-prep-pocket,analog-out-01\n"
+"tool-number,analog-out-02\n"
+msgstr ""
+"IOCONTROL.0 PIN ,MOTION PIN\n"
+"TOOL-PREPARE,DIGITAL-OUT-00\n"
+"TOOL-PREPARED,DIGITAL-IN-00\n"
+"TOOL-CHANGE,DIGITAL-OUT-01\n"
+"TOOL-CHANGED,DIGITAL-IN-01\n"
+"TOOL-PREP-NUMBER,ANALOG-OUT-00\n"
+"TOOL-PREP-POCKET,ANALOG-OUT-01\n"
+"TOOL-NUMBER,ANALOG-OUT-02\n"
+
+#. type: Block title
+#: TablesCells.adoc:157
+#, no-wrap
+msgid "Empty cells"
+msgstr "EMPTY CELLS"
+
+#. type: Table
+#: TablesCells.adoc:159
+#, no-wrap
+msgid "0"
+msgstr "0"
diff --git a/t/fmt/asciidoc/TablesCells.pot b/t/fmt/asciidoc/TablesCells.pot
new file mode 100644
index 0000000..b831cd8
--- /dev/null
+++ b/t/fmt/asciidoc/TablesCells.pot
@@ -0,0 +1,393 @@
+# SOME DESCRIPTIVE TITLE
+# Copyright (C) YEAR Free Software Foundation, Inc.
+# This file is distributed under the same license as the PACKAGE package.
+# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
+#
+#, fuzzy
+msgid ""
+msgstr ""
+"Project-Id-Version: PACKAGE VERSION\n"
+"POT-Creation-Date: 2018-12-09 22:02+0100\n"
+"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
+"Language-Team: LANGUAGE <LL@li.org>\n"
+"Language: \n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+
+#. type: Title =
+#: TablesCells.adoc:2
+#, no-wrap
+msgid "Tables with Cells translated"
+msgstr ""
+
+#. type: Plain text
+#: TablesCells.adoc:5
+msgid "Examples taken from asciidoctor table guide"
+msgstr ""
+
+#. type: Block title
+#: TablesCells.adoc:6
+#, no-wrap
+msgid "Simple table"
+msgstr ""
+
+#. type: Table
+#: TablesCells.adoc:8 TablesCells.adoc:15 TablesCells.adoc:22
+#: TablesCells.adoc:32 TablesCells.adoc:42 TablesCells.adoc:55
+#, no-wrap
+msgid "Cell in column 1, row 1"
+msgstr ""
+
+#. type: Table
+#: TablesCells.adoc:9 TablesCells.adoc:16 TablesCells.adoc:23
+#: TablesCells.adoc:32 TablesCells.adoc:42 TablesCells.adoc:55
+#, no-wrap
+msgid "Cell in column 2, row 1"
+msgstr ""
+
+#. type: Table
+#: TablesCells.adoc:9 TablesCells.adoc:26
+#, no-wrap
+msgid "Cell in column 1, row 2"
+msgstr ""
+
+#. type: Table
+#: TablesCells.adoc:10 TablesCells.adoc:27 TablesCells.adoc:59
+#, no-wrap
+msgid "Cell in column 2, row 2"
+msgstr ""
+
+#. type: Table
+#: TablesCells.adoc:10 TablesCells.adoc:35 TablesCells.adoc:47
+#, no-wrap
+msgid "Cell in column 1, row 3"
+msgstr ""
+
+#. type: Table
+#: TablesCells.adoc:11 TablesCells.adoc:36 TablesCells.adoc:48
+#: TablesCells.adoc:62
+#, no-wrap
+msgid "Cell in column 2, row 3"
+msgstr ""
+
+#. type: Block title
+#: TablesCells.adoc:13
+#, no-wrap
+msgid "No space around column separator"
+msgstr ""
+
+#. type: Block title
+#: TablesCells.adoc:18
+#, no-wrap
+msgid "Cells on each line"
+msgstr ""
+
+#. type: Table
+#: TablesCells.adoc:25 TablesCells.adoc:33 TablesCells.adoc:44
+#: TablesCells.adoc:57
+#, no-wrap
+msgid "Cell in column 3, row 1"
+msgstr ""
+
+#. type: Table
+#: TablesCells.adoc:28 TablesCells.adoc:61
+#, no-wrap
+msgid "Cell in column 3, row 2"
+msgstr ""
+
+#. type: Block title
+#: TablesCells.adoc:30
+#, no-wrap
+msgid "Cell duplicated"
+msgstr ""
+
+#. type: Table
+#: TablesCells.adoc:34
+#, no-wrap
+msgid "Same cell content in columns 1, 2, and 3"
+msgstr ""
+
+#. type: Table
+#: TablesCells.adoc:37 TablesCells.adoc:50 TablesCells.adoc:64
+#, no-wrap
+msgid "Cell in column 3, row 3"
+msgstr ""
+
+#. type: Block title
+#: TablesCells.adoc:39
+#, no-wrap
+msgid "Cell span"
+msgstr ""
+
+#. type: Table
+#: TablesCells.adoc:46
+#, no-wrap
+msgid "Content in a single cell that spans columns 1, 2, and 3"
+msgstr ""
+
+#. type: Block title
+#: TablesCells.adoc:52
+#, no-wrap
+msgid "Cell span in rows"
+msgstr ""
+
+#. type: Table
+#: TablesCells.adoc:58
+#, no-wrap
+msgid "Content in a single cell that spans rows 2 and 3"
+msgstr ""
+
+#. type: Block title
+#: TablesCells.adoc:66
+#, no-wrap
+msgid "Cell span in columns and rows"
+msgstr ""
+
+#. type: Table
+#: TablesCells.adoc:69
+#, no-wrap
+msgid "Column 1, row 1"
+msgstr ""
+
+#. type: Table
+#: TablesCells.adoc:69
+#, no-wrap
+msgid "Column 2, row 1"
+msgstr ""
+
+#. type: Table
+#: TablesCells.adoc:69
+#, no-wrap
+msgid "Column 3, row 1"
+msgstr ""
+
+#. type: Table
+#: TablesCells.adoc:71
+#, no-wrap
+msgid "Column 4, row 1"
+msgstr ""
+
+#. type: Table
+#: TablesCells.adoc:72
+#, no-wrap
+msgid "Column 1, row 2"
+msgstr ""
+
+#. type: Table
+#: TablesCells.adoc:73
+#, no-wrap
+msgid "Content in a single cell that spans over rows and columns"
+msgstr ""
+
+#. type: Table
+#: TablesCells.adoc:75
+#, no-wrap
+msgid "Column 4, row 2"
+msgstr ""
+
+#. type: Table
+#: TablesCells.adoc:76
+#, no-wrap
+msgid "Column 1, row 3"
+msgstr ""
+
+#. type: Table
+#: TablesCells.adoc:78
+#, no-wrap
+msgid "Column 4, row 3"
+msgstr ""
+
+#. type: Table
+#: TablesCells.adoc:79
+#, no-wrap
+msgid "Column 1, row 4"
+msgstr ""
+
+#. type: Table
+#: TablesCells.adoc:80
+#, no-wrap
+msgid "Column 4, row 4"
+msgstr ""
+
+#. type: Block title
+#: TablesCells.adoc:82
+#, no-wrap
+msgid "Cells aligned horizontally, vertically, and across a span of three columns"
+msgstr ""
+
+#. type: Table
+#: TablesCells.adoc:86
+#, no-wrap
+msgid "Prefix the `{vbar}` with `{caret}` to center content horizontally"
+msgstr ""
+
+#. type: Table
+#: TablesCells.adoc:87
+#, no-wrap
+msgid "Prefix the `{vbar}` with `<` to align the content to the left horizontally"
+msgstr ""
+
+#. type: Table
+#: TablesCells.adoc:89
+#, no-wrap
+msgid "Prefix the `{vbar}` with `>` to align the content to the right horizontally"
+msgstr ""
+
+#. type: Table
+#: TablesCells.adoc:90
+#, no-wrap
+msgid ""
+"Prefix the `{vbar}` with a `.` and `{caret}` to center the content in the "
+"cell vertically"
+msgstr ""
+
+#. type: Table
+#: TablesCells.adoc:91
+#, no-wrap
+msgid ""
+"Prefix the `{vbar}` with a `.` and `<` to align the content to the top of "
+"the cell"
+msgstr ""
+
+#. type: Table
+#: TablesCells.adoc:93
+#, no-wrap
+msgid ""
+"Prefix the `{vbar}` with a `.` and `>` to align the content to the bottom of "
+"the cell"
+msgstr ""
+
+#. type: Table
+#: TablesCells.adoc:95
+#, no-wrap
+msgid ""
+"This content spans three columns (`3{plus}`) and is centered horizontally "
+"(`{caret}`) and vertically (`.{caret}`) within the cell."
+msgstr ""
+
+#. type: Block title
+#: TablesCells.adoc:97
+#, no-wrap
+msgid "Building a variety of cell specifiers"
+msgstr ""
+
+#. type: Table
+#: TablesCells.adoc:106
+#, no-wrap
+msgid ""
+"This content is duplicated across two columns.\n"
+"\n"
+"It is aligned right horizontally.\n"
+"\n"
+"And it is monospaced."
+msgstr ""
+
+#. type: Table
+#: TablesCells.adoc:107
+#, no-wrap
+msgid ""
+"This cell spans 3 rows. The content is centered horizontally, aligned to the "
+"bottom of the cell, and strong."
+msgstr ""
+
+#. type: Table
+#: TablesCells.adoc:109
+#, no-wrap
+msgid "This content is emphasized."
+msgstr ""
+
+#. type: Table
+#: TablesCells.adoc:111
+#, no-wrap
+msgid "This content is aligned to the top of the cell and literal."
+msgstr ""
+
+#. type: Table
+#: TablesCells.adoc:116
+#, no-wrap
+msgid ""
+"This cell contains a verse\n"
+"that may one day expound on the\n"
+"wonders of tables in an\n"
+"epic sonnet."
+msgstr ""
+
+#. type: Block title
+#: TablesCells.adoc:118
+#, no-wrap
+msgid "Cells with Asciidoc in them"
+msgstr ""
+
+#. type: Table
+#: TablesCells.adoc:127
+#, no-wrap
+msgid ""
+"This cell is prefixed with an `a`, so the processor interprets the following "
+"lines as an AsciiDoc list.\n"
+"\n"
+"* List item 1\n"
+"* List item 2\n"
+"* List item 3"
+msgstr ""
+
+#. type: Table
+#: TablesCells.adoc:133
+#, no-wrap
+msgid ""
+"This cell *is not* prefixed with an `a`, so the processor does not interpret "
+"the following lines as an AsciiDoc list.\n"
+"\n"
+"* List item 1\n"
+"* List item 2\n"
+"* List item 3"
+msgstr ""
+
+#. type: Table
+#: TablesCells.adoc:137
+#, no-wrap
+msgid ""
+"This cell is prefixed with an `a`, so the processor honors the `lead` style "
+"on the following paragraph.\n"
+"\n"
+"[.lead]\n"
+"I am a paragraph styled with the lead attribute."
+msgstr ""
+
+#. type: Table
+#: TablesCells.adoc:141
+#, no-wrap
+msgid ""
+"This cell *is not* prefixed with an `a`, so the processor does not honor the "
+"`lead` style on the following paragraph.\n"
+"\n"
+"[.lead]\n"
+"I am a paragraph styled with the lead attribute."
+msgstr ""
+
+#. type: Table
+#: TablesCells.adoc:155
+#, no-wrap
+msgid ""
+"iocontrol.0 pin ,motion pin\n"
+"tool-prepare,digital-out-00\n"
+"tool-prepared,digital-in-00\n"
+"tool-change,digital-out-01\n"
+"tool-changed,digital-in-01\n"
+"tool-prep-number,analog-out-00\n"
+"tool-prep-pocket,analog-out-01\n"
+"tool-number,analog-out-02\n"
+msgstr ""
+
+#. type: Block title
+#: TablesCells.adoc:157
+#, no-wrap
+msgid "Empty cells"
+msgstr ""
+
+#. type: Table
+#: TablesCells.adoc:159
+#, no-wrap
+msgid "0"
+msgstr ""
diff --git a/t/fmt/asciidoc/TablesCells.trans b/t/fmt/asciidoc/TablesCells.trans
new file mode 100644
index 0000000..6181b1d
--- /dev/null
+++ b/t/fmt/asciidoc/TablesCells.trans
@@ -0,0 +1,161 @@
+TABLES WITH CELLS TRANSLATED
+============================
+
+EXAMPLES TAKEN FROM ASCIIDOCTOR TABLE GUIDE
+
+.SIMPLE TABLE
+|===
+| CELL IN COLUMN 1, ROW 1 | CELL IN COLUMN 2, ROW 1
+| CELL IN COLUMN 1, ROW 2 | CELL IN COLUMN 2, ROW 2
+| CELL IN COLUMN 1, ROW 3 | CELL IN COLUMN 2, ROW 3
+|===
+
+.NO SPACE AROUND COLUMN SEPARATOR
+|===
+|CELL IN COLUMN 1, ROW 1|CELL IN COLUMN 2, ROW 1
+|===
+
+.CELLS ON EACH LINE
+[cols="3*"]
+|===
+|CELL IN COLUMN 1, ROW 1
+|CELL IN COLUMN 2, ROW 1
+|CELL IN COLUMN 3, ROW 1
+
+|CELL IN COLUMN 1, ROW 2
+|CELL IN COLUMN 2, ROW 2
+|CELL IN COLUMN 3, ROW 2
+|===
+
+.CELL DUPLICATED
+|===
+|CELL IN COLUMN 1, ROW 1 |CELL IN COLUMN 2, ROW 1 |CELL IN COLUMN 3, ROW 1
+3*|SAME CELL CONTENT IN COLUMNS 1, 2, AND 3
+|CELL IN COLUMN 1, ROW 3
+|CELL IN COLUMN 2, ROW 3
+|CELL IN COLUMN 3, ROW 3
+|===
+
+.CELL SPAN
+|===
+
+|CELL IN COLUMN 1, ROW 1 |CELL IN COLUMN 2, ROW 1 |CELL IN COLUMN 3, ROW 1
+
+3+|CONTENT IN A SINGLE CELL THAT SPANS COLUMNS 1, 2, AND 3
+
+|CELL IN COLUMN 1, ROW 3
+|CELL IN COLUMN 2, ROW 3
+|CELL IN COLUMN 3, ROW 3
+
+|===
+
+.CELL SPAN IN ROWS
+|===
+
+|CELL IN COLUMN 1, ROW 1 |CELL IN COLUMN 2, ROW 1 |CELL IN COLUMN 3, ROW 1
+
+.2+|CONTENT IN A SINGLE CELL THAT SPANS ROWS 2 AND 3
+|CELL IN COLUMN 2, ROW 2
+|CELL IN COLUMN 3, ROW 2
+
+|CELL IN COLUMN 2, ROW 3
+|CELL IN COLUMN 3, ROW 3
+
+|===
+
+.CELL SPAN IN COLUMNS AND ROWS
+|===
+
+|COLUMN 1, ROW 1 |COLUMN 2, ROW 1 |COLUMN 3, ROW 1 |COLUMN 4, ROW 1
+
+|COLUMN 1, ROW 2
+2.3+|CONTENT IN A SINGLE CELL THAT SPANS OVER ROWS AND COLUMNS
+|COLUMN 4, ROW 2
+
+|COLUMN 1, ROW 3
+|COLUMN 4, ROW 3
+
+|COLUMN 1, ROW 4
+|COLUMN 4, ROW 4
+|===
+
+.CELLS ALIGNED HORIZONTALLY, VERTICALLY, AND ACROSS A SPAN OF THREE COLUMNS
+[cols="3"]
+|===
+^|PREFIX THE `{VBAR}` WITH `{CARET}` TO CENTER CONTENT HORIZONTALLY
+<|PREFIX THE `{VBAR}` WITH `<` TO ALIGN THE CONTENT TO THE LEFT HORIZONTALLY
+>|PREFIX THE `{VBAR}` WITH `>` TO ALIGN THE CONTENT TO THE RIGHT HORIZONTALLY
+
+.^|PREFIX THE `{VBAR}` WITH A `.` AND `{CARET}` TO CENTER THE CONTENT IN THE CELL VERTICALLY
+.<|PREFIX THE `{VBAR}` WITH A `.` AND `<` TO ALIGN THE CONTENT TO THE TOP OF THE CELL
+.>|PREFIX THE `{VBAR}` WITH A `.` AND `>` TO ALIGN THE CONTENT TO THE BOTTOM OF THE CELL
+
+3+^.^|THIS CONTENT SPANS THREE COLUMNS (`3{PLUS}`) AND IS CENTERED HORIZONTALLY (`{CARET}`) AND VERTICALLY (`.{CARET}`) WITHIN THE CELL.
+
+|===
+
+.BUILDING A VARIETY OF CELL SPECIFIERS
+|===
+
+2*>m|THIS CONTENT IS DUPLICATED ACROSS TWO COLUMNS.
+
+IT IS ALIGNED RIGHT HORIZONTALLY.
+
+AND IT IS MONOSPACED.
+
+.3+^.>s|THIS CELL SPANS 3 ROWS. THE CONTENT IS CENTERED HORIZONTALLY, ALIGNED TO THE BOTTOM OF THE CELL, AND STRONG.
+e|THIS CONTENT IS EMPHASIZED.
+
+.^l|THIS CONTENT IS ALIGNED TO THE TOP OF THE CELL AND LITERAL.
+
+v|THIS CELL CONTAINS A VERSE
+THAT MAY ONE DAY EXPOUND ON THE
+WONDERS OF TABLES IN AN
+EPIC SONNET.
+
+|===
+
+.CELLS WITH ASCIIDOC IN THEM
+[cols="2"]
+|===
+
+a|THIS CELL IS PREFIXED WITH AN `A`, SO THE PROCESSOR INTERPRETS THE FOLLOWING LINES AS AN ASCIIDOC LIST.
+
+* LIST ITEM 1
+* LIST ITEM 2
+* LIST ITEM 3
+|THIS CELL *IS NOT* PREFIXED WITH AN `A`, SO THE PROCESSOR DOES NOT INTERPRET THE FOLLOWING LINES AS AN ASCIIDOC LIST.
+
+* LIST ITEM 1
+* LIST ITEM 2
+* LIST ITEM 3
+
+a|THIS CELL IS PREFIXED WITH AN `A`, SO THE PROCESSOR HONORS THE `LEAD` STYLE ON THE FOLLOWING PARAGRAPH.
+
+[.LEAD]
+I AM A PARAGRAPH STYLED WITH THE LEAD ATTRIBUTE.
+|THIS CELL *IS NOT* PREFIXED WITH AN `A`, SO THE PROCESSOR DOES NOT HONOR THE `LEAD` STYLE ON THE FOLLOWING PARAGRAPH.
+
+[.LEAD]
+I AM A PARAGRAPH STYLED WITH THE LEAD ATTRIBUTE.
+|===
+
+[format="csv", width="60%", cols="2"]
+[frame="topbot", grid="none"]
+[options="header"]
+|===
+IOCONTROL.0 PIN ,MOTION PIN
+TOOL-PREPARE,DIGITAL-OUT-00
+TOOL-PREPARED,DIGITAL-IN-00
+TOOL-CHANGE,DIGITAL-OUT-01
+TOOL-CHANGED,DIGITAL-IN-01
+TOOL-PREP-NUMBER,ANALOG-OUT-00
+TOOL-PREP-POCKET,ANALOG-OUT-01
+TOOL-NUMBER,ANALOG-OUT-02
+|===
+
+.EMPTY CELLS
+|===
+|0|
+| |
+|===
diff --git a/t/fmt/asciidoc/TablesCells.trans.stderr b/t/fmt/asciidoc/TablesCells.trans.stderr
new file mode 100644
index 0000000..835f46c
--- /dev/null
+++ b/t/fmt/asciidoc/TablesCells.trans.stderr
@@ -0,0 +1 @@
+TablesCells.adoc:143: Po4a's tablecells mode only supports PSV formatted tables with '|' separators. Disabling tablecells and falling back to block mode for this table.
diff --git a/t/fmt/asciidoc/TablesImageText.adoc b/t/fmt/asciidoc/TablesImageText.adoc
new file mode 100644
index 0000000..13f3324
--- /dev/null
+++ b/t/fmt/asciidoc/TablesImageText.adoc
@@ -0,0 +1,12 @@
+|====
+|First col
+|Second col
+
+image::tab.png[alt="Tab"]
+
+Text below image 1
+|====
+
+image::notab.png[alt="NoTab"]
+
+Text below image 2
diff --git a/t/fmt/asciidoc/TablesImageText.norm b/t/fmt/asciidoc/TablesImageText.norm
new file mode 100644
index 0000000..13f3324
--- /dev/null
+++ b/t/fmt/asciidoc/TablesImageText.norm
@@ -0,0 +1,12 @@
+|====
+|First col
+|Second col
+
+image::tab.png[alt="Tab"]
+
+Text below image 1
+|====
+
+image::notab.png[alt="NoTab"]
+
+Text below image 2
diff --git a/t/fmt/asciidoc/TablesImageText.po b/t/fmt/asciidoc/TablesImageText.po
new file mode 100644
index 0000000..3c56b24
--- /dev/null
+++ b/t/fmt/asciidoc/TablesImageText.po
@@ -0,0 +1,63 @@
+# SOME DESCRIPTIVE TITLE
+# Copyright (C) YEAR Free Software Foundation, Inc.
+# This file is distributed under the same license as the PACKAGE package.
+# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
+#
+#, fuzzy
+msgid ""
+msgstr ""
+"Project-Id-Version: PACKAGE VERSION\n"
+"POT-Creation-Date: 2020-05-09 10:35+0200\n"
+"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
+"Language-Team: LANGUAGE <LL@LI.ORG>\n"
+"Language: \n"
+"MIME-Version: 1.0\n"
+"Content-Type: TEXT/PLAIN; CHARSET=UTF-8\n"
+"Content-Transfer-Encoding: 8BIT\n"
+
+#. type: Table
+#: TablesImageText.adoc:5
+#, no-wrap
+msgid ""
+"|First col\n"
+"|Second col\n"
+"\n"
+msgstr ""
+"|FIRST COL\n"
+"|SECOND COL\n"
+"\n"
+
+#. type: Named 'alt' AttributeList argument for macro 'image'
+#: TablesImageText.adoc:5
+#, no-wrap
+msgid "Tab"
+msgstr "TAB"
+
+#. type: Target for macro image
+#: TablesImageText.adoc:5
+#, no-wrap
+msgid "tab.png"
+msgstr "TAB.PNG"
+
+#. type: Table
+#: TablesImageText.adoc:8
+msgid "Text below image 1"
+msgstr "TEXT BELOW IMAGE 1"
+
+#. type: Named 'alt' AttributeList argument for macro 'image'
+#: TablesImageText.adoc:10
+#, no-wrap
+msgid "NoTab"
+msgstr "NOTAB"
+
+#. type: Target for macro image
+#: TablesImageText.adoc:10
+#, no-wrap
+msgid "notab.png"
+msgstr "NOTAB.PNG"
+
+#. type: Plain text
+#: TablesImageText.adoc:12
+msgid "Text below image 2"
+msgstr "TEXT BELOW IMAGE 2"
diff --git a/t/fmt/asciidoc/TablesImageText.pot b/t/fmt/asciidoc/TablesImageText.pot
new file mode 100644
index 0000000..5082a1e
--- /dev/null
+++ b/t/fmt/asciidoc/TablesImageText.pot
@@ -0,0 +1,60 @@
+# SOME DESCRIPTIVE TITLE
+# Copyright (C) YEAR Free Software Foundation, Inc.
+# This file is distributed under the same license as the PACKAGE package.
+# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
+#
+#, fuzzy
+msgid ""
+msgstr ""
+"Project-Id-Version: PACKAGE VERSION\n"
+"POT-Creation-Date: 2020-05-09 10:35+0200\n"
+"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
+"Language-Team: LANGUAGE <LL@li.org>\n"
+"Language: \n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+
+#. type: Table
+#: TablesImageText.adoc:5
+#, no-wrap
+msgid ""
+"|First col\n"
+"|Second col\n"
+"\n"
+msgstr ""
+
+#. type: Named 'alt' AttributeList argument for macro 'image'
+#: TablesImageText.adoc:5
+#, no-wrap
+msgid "Tab"
+msgstr ""
+
+#. type: Target for macro image
+#: TablesImageText.adoc:5
+#, no-wrap
+msgid "tab.png"
+msgstr ""
+
+#. type: Table
+#: TablesImageText.adoc:8
+msgid "Text below image 1"
+msgstr ""
+
+#. type: Named 'alt' AttributeList argument for macro 'image'
+#: TablesImageText.adoc:10
+#, no-wrap
+msgid "NoTab"
+msgstr ""
+
+#. type: Target for macro image
+#: TablesImageText.adoc:10
+#, no-wrap
+msgid "notab.png"
+msgstr ""
+
+#. type: Plain text
+#: TablesImageText.adoc:12
+msgid "Text below image 2"
+msgstr ""
diff --git a/t/fmt/asciidoc/TablesImageText.trans b/t/fmt/asciidoc/TablesImageText.trans
new file mode 100644
index 0000000..3c789dd
--- /dev/null
+++ b/t/fmt/asciidoc/TablesImageText.trans
@@ -0,0 +1,12 @@
+|====
+|FIRST COL
+|SECOND COL
+
+image::TAB.PNG[alt="TAB"]
+
+TEXT BELOW IMAGE 1
+|====
+
+image::NOTAB.PNG[alt="NOTAB"]
+
+TEXT BELOW IMAGE 2
diff --git a/t/fmt/asciidoc/Titles.adoc b/t/fmt/asciidoc/Titles.adoc
new file mode 100644
index 0000000..1631c0a
--- /dev/null
+++ b/t/fmt/asciidoc/Titles.adoc
@@ -0,0 +1,30 @@
+Title0
+======
+
+Title1
+------
+
+Title level 2
+~~~~~~~~~~~~~
+
+Title level 3
+^^^^^^^^^^^^^
+
+Title level 4
++++++++++++++
+
+= Document Title (level 0) =
+
+== Section title (level 1) ==
+
+=== Section title (level 2) ===
+
+==== Section title (level 3) ====
+
+===== Section title (level 4) =====
+
+Title level 2 short
+~~~~~~~~~~~~~~~~~
+
+Title level 2 long
+~~~~~~~~~~~~~~~~~~~~
diff --git a/t/fmt/asciidoc/Titles.norm b/t/fmt/asciidoc/Titles.norm
new file mode 100644
index 0000000..8b5a421
--- /dev/null
+++ b/t/fmt/asciidoc/Titles.norm
@@ -0,0 +1,30 @@
+Title0
+======
+
+Title1
+------
+
+Title level 2
+~~~~~~~~~~~~~
+
+Title level 3
+^^^^^^^^^^^^^
+
+Title level 4
++++++++++++++
+
+= Document Title (level 0) =
+
+== Section title (level 1) ==
+
+=== Section title (level 2) ===
+
+==== Section title (level 3) ====
+
+===== Section title (level 4) =====
+
+Title level 2 short
+~~~~~~~~~~~~~~~~~~~
+
+Title level 2 long
+~~~~~~~~~~~~~~~~~~
diff --git a/t/fmt/asciidoc/Titles.norm.stderr b/t/fmt/asciidoc/Titles.norm.stderr
new file mode 100644
index 0000000..bcdc347
--- /dev/null
+++ b/t/fmt/asciidoc/Titles.norm.stderr
@@ -0,0 +1,2 @@
+Titles.adoc:27: 'Title level 2 short' seems to be a two-lines title underlined with '~', but the underlines are too short or too long compared to the title length. You may want to fix your master document.
+Titles.adoc:30: 'Title level 2 long' seems to be a two-lines title underlined with '~', but the underlines are too short or too long compared to the title length. You may want to fix your master document.
diff --git a/t/fmt/asciidoc/Titles.po b/t/fmt/asciidoc/Titles.po
new file mode 100644
index 0000000..58fd230
--- /dev/null
+++ b/t/fmt/asciidoc/Titles.po
@@ -0,0 +1,89 @@
+# SOME DESCRIPTIVE TITLE
+# Copyright (C) YEAR Free Software Foundation, Inc.
+# This file is distributed under the same license as the PACKAGE package.
+# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
+#
+#, fuzzy
+msgid ""
+msgstr ""
+"Project-Id-Version: PACKAGE VERSION\n"
+"POT-Creation-Date: 2008-10-12 21:59+0300\n"
+"PO-Revision-Date: 2008-10-12 22:05+0200\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
+"Language-Team: LANGUAGE <LL@li.org>\n"
+"Language: \n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+
+#. type: Title =
+#: Titles.adoc:2
+#, no-wrap
+msgid "Title0"
+msgstr "TITLE0"
+
+#. type: Title -
+#: Titles.adoc:5
+#, no-wrap
+msgid "Title1"
+msgstr "TITLE1"
+
+#. type: Title ~
+#: Titles.adoc:8
+#, no-wrap
+msgid "Title level 2"
+msgstr "TITLE LEVEL 2"
+
+#. type: Title ^
+#: Titles.adoc:11
+#, no-wrap
+msgid "Title level 3"
+msgstr "TITLE LEVEL 3"
+
+#. type: Title +
+#: Titles.adoc:14
+#, no-wrap
+msgid "Title level 4"
+msgstr "TITLE LEVEL 4"
+
+#. type: Title =
+#: Titles.adoc:16
+#, no-wrap
+msgid "Document Title (level 0)"
+msgstr "DOCUMENT TITLE (LEVEL 0)"
+
+#. type: Title ==
+#: Titles.adoc:18
+#, no-wrap
+msgid "Section title (level 1)"
+msgstr "SECTION TITLE (LEVEL 1)"
+
+#. type: Title ===
+#: Titles.adoc:20
+#, no-wrap
+msgid "Section title (level 2)"
+msgstr "SECTION TITLE (LEVEL 2)"
+
+#. type: Title ====
+#: Titles.adoc:22
+#, no-wrap
+msgid "Section title (level 3)"
+msgstr "SECTION TITLE (LEVEL 3)"
+
+#. type: Title =====
+#: Titles.adoc:24
+#, no-wrap
+msgid "Section title (level 4)"
+msgstr "SECTION TITLE (LEVEL 4)"
+
+#. type: Title ~
+#: Titles.adoc:27
+#, no-wrap
+msgid "Title level 2 short"
+msgstr "TITLE LEVEL 2 SHORT"
+
+#. type: Title ~
+#: Titles.adoc:30
+#, no-wrap
+msgid "Title level 2 long"
+msgstr "TITLE LEVEL 2 LONG"
diff --git a/t/fmt/asciidoc/Titles.pot b/t/fmt/asciidoc/Titles.pot
new file mode 100644
index 0000000..c1527c4
--- /dev/null
+++ b/t/fmt/asciidoc/Titles.pot
@@ -0,0 +1,89 @@
+# SOME DESCRIPTIVE TITLE
+# Copyright (C) YEAR Free Software Foundation, Inc.
+# This file is distributed under the same license as the PACKAGE package.
+# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
+#
+#, fuzzy
+msgid ""
+msgstr ""
+"Project-Id-Version: PACKAGE VERSION\n"
+"POT-Creation-Date: 2008-10-12 21:59+0300\n"
+"PO-Revision-Date: 2008-10-12 22:05+0200\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
+"Language-Team: LANGUAGE <LL@li.org>\n"
+"Language: \n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+
+#. type: Title =
+#: Titles.adoc:2
+#, no-wrap
+msgid "Title0"
+msgstr ""
+
+#. type: Title -
+#: Titles.adoc:5
+#, no-wrap
+msgid "Title1"
+msgstr ""
+
+#. type: Title ~
+#: Titles.adoc:8
+#, no-wrap
+msgid "Title level 2"
+msgstr ""
+
+#. type: Title ^
+#: Titles.adoc:11
+#, no-wrap
+msgid "Title level 3"
+msgstr ""
+
+#. type: Title +
+#: Titles.adoc:14
+#, no-wrap
+msgid "Title level 4"
+msgstr ""
+
+#. type: Title =
+#: Titles.adoc:16
+#, no-wrap
+msgid "Document Title (level 0)"
+msgstr ""
+
+#. type: Title ==
+#: Titles.adoc:18
+#, no-wrap
+msgid "Section title (level 1)"
+msgstr ""
+
+#. type: Title ===
+#: Titles.adoc:20
+#, no-wrap
+msgid "Section title (level 2)"
+msgstr ""
+
+#. type: Title ====
+#: Titles.adoc:22
+#, no-wrap
+msgid "Section title (level 3)"
+msgstr ""
+
+#. type: Title =====
+#: Titles.adoc:24
+#, no-wrap
+msgid "Section title (level 4)"
+msgstr ""
+
+#. type: Title ~
+#: Titles.adoc:27
+#, no-wrap
+msgid "Title level 2 short"
+msgstr ""
+
+#. type: Title ~
+#: Titles.adoc:30
+#, no-wrap
+msgid "Title level 2 long"
+msgstr ""
diff --git a/t/fmt/asciidoc/Titles.trans b/t/fmt/asciidoc/Titles.trans
new file mode 100644
index 0000000..c2e776c
--- /dev/null
+++ b/t/fmt/asciidoc/Titles.trans
@@ -0,0 +1,30 @@
+TITLE0
+======
+
+TITLE1
+------
+
+TITLE LEVEL 2
+~~~~~~~~~~~~~
+
+TITLE LEVEL 3
+^^^^^^^^^^^^^
+
+TITLE LEVEL 4
++++++++++++++
+
+= DOCUMENT TITLE (LEVEL 0) =
+
+== SECTION TITLE (LEVEL 1) ==
+
+=== SECTION TITLE (LEVEL 2) ===
+
+==== SECTION TITLE (LEVEL 3) ====
+
+===== SECTION TITLE (LEVEL 4) =====
+
+TITLE LEVEL 2 SHORT
+~~~~~~~~~~~~~~~~~~~
+
+TITLE LEVEL 2 LONG
+~~~~~~~~~~~~~~~~~~
diff --git a/t/fmt/asciidoc/Titles.trans.stderr b/t/fmt/asciidoc/Titles.trans.stderr
new file mode 100644
index 0000000..bcdc347
--- /dev/null
+++ b/t/fmt/asciidoc/Titles.trans.stderr
@@ -0,0 +1,2 @@
+Titles.adoc:27: 'Title level 2 short' seems to be a two-lines title underlined with '~', but the underlines are too short or too long compared to the title length. You may want to fix your master document.
+Titles.adoc:30: 'Title level 2 long' seems to be a two-lines title underlined with '~', but the underlines are too short or too long compared to the title length. You may want to fix your master document.
diff --git a/t/fmt/asciidoc/YamlFrontMatter.adoc b/t/fmt/asciidoc/YamlFrontMatter.adoc
new file mode 100644
index 0000000..3798587
--- /dev/null
+++ b/t/fmt/asciidoc/YamlFrontMatter.adoc
@@ -0,0 +1,39 @@
+---
+title: "This is a test for the YFM thing in AsciiDoc"
+author: test
+tags:
+- yaml
+- markdown
+wrappedtext: >
+ this is really a
+ single line of text
+ despite appearances
+include_newlines: |
+ exactly as you see
+ will appear these three
+ lines of poetry
+people:
+ -
+ name: John D'vloper
+ job: Developer
+ hobbies:
+ - Amateur radio
+ - Pet adoption & fostering
+ - Puzzle
+ -
+ name: Tabitha Bitumen
+ job: Developer
+ hobbies:
+ - Ice skating
+ - Water polo
+ - Caving
+---
+
+
+YAML: does it fit in AsciiDoc?
+==============================
+
+AsciiDoc moves to YFM too. Why so?
+
+Because blog posts need metadata!
+
diff --git a/t/fmt/asciidoc/YamlFrontMatter.norm b/t/fmt/asciidoc/YamlFrontMatter.norm
new file mode 100644
index 0000000..9bceb53
--- /dev/null
+++ b/t/fmt/asciidoc/YamlFrontMatter.norm
@@ -0,0 +1,33 @@
+---
+author: test
+include_newlines: "exactly as you see\nwill appear these three\nlines of poetry\n"
+people:
+ -
+ hobbies:
+ - 'Amateur radio'
+ - 'Pet adoption & fostering'
+ - Puzzle
+ job: Developer
+ name: "John D'vloper"
+ -
+ hobbies:
+ - 'Ice skating'
+ - 'Water polo'
+ - Caving
+ job: Developer
+ name: 'Tabitha Bitumen'
+tags:
+ - yaml
+ - markdown
+title: 'This is a test for the YFM thing in AsciiDoc'
+wrappedtext: "this is really a single line of text despite appearances\n"
+---
+
+
+YAML: does it fit in AsciiDoc?
+==============================
+
+AsciiDoc moves to YFM too. Why so?
+
+Because blog posts need metadata!
+
diff --git a/t/fmt/asciidoc/YamlFrontMatter.po b/t/fmt/asciidoc/YamlFrontMatter.po
new file mode 100644
index 0000000..37fe149
--- /dev/null
+++ b/t/fmt/asciidoc/YamlFrontMatter.po
@@ -0,0 +1,129 @@
+# SOME DESCRIPTIVE TITLE
+# Copyright (C) YEAR Free Software Foundation, Inc.
+# This file is distributed under the same license as the PACKAGE package.
+# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
+#
+#, fuzzy
+msgid ""
+msgstr ""
+"Project-Id-Version: PACKAGE VERSION\n"
+"POT-Creation-Date: 2021-02-21 00:52+0100\n"
+"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
+"Language-Team: LANGUAGE <LL@LI.ORG>\n"
+"Language: \n"
+"MIME-Version: 1.0\n"
+"Content-Type: TEXT/PLAIN; CHARSET=UTF-8\n"
+"Content-Transfer-Encoding: 8BIT\n"
+
+#. type: Yaml Front Matter Hash Value: author
+#: YamlFrontMatter.adoc:1
+#, no-wrap
+msgid "test"
+msgstr "TEST"
+
+#. type: Yaml Front Matter Hash Value: include_newlines
+#: YamlFrontMatter.adoc:1
+#, no-wrap
+msgid ""
+"exactly as you see\n"
+"will appear these three\n"
+"lines of poetry\n"
+msgstr ""
+"EXACTLY AS YOU SEE\n"
+"WILL APPEAR THESE THREE\n"
+"LINES OF POETRY\n"
+
+#. type: Yaml Front Matter Array Element: people hobbies
+#: YamlFrontMatter.adoc:1
+#, no-wrap
+msgid "Amateur radio"
+msgstr "AMATEUR RADIO"
+
+#. type: Yaml Front Matter Array Element: people hobbies
+#: YamlFrontMatter.adoc:1
+#, no-wrap
+msgid "Pet adoption & fostering"
+msgstr "PET ADOPTION & FOSTERING"
+
+#. type: Yaml Front Matter Array Element: people hobbies
+#: YamlFrontMatter.adoc:1
+#, no-wrap
+msgid "Puzzle"
+msgstr "PUZZLE"
+
+#. type: Yaml Front Matter Hash Value: people job
+#: YamlFrontMatter.adoc:1
+#, no-wrap
+msgid "Developer"
+msgstr "DEVELOPER"
+
+#. type: Yaml Front Matter Hash Value: people name
+#: YamlFrontMatter.adoc:1
+#, no-wrap
+msgid "John D'vloper"
+msgstr "JOHN D'VLOPER"
+
+#. type: Yaml Front Matter Array Element: people hobbies
+#: YamlFrontMatter.adoc:1
+#, no-wrap
+msgid "Ice skating"
+msgstr "ICE SKATING"
+
+#. type: Yaml Front Matter Array Element: people hobbies
+#: YamlFrontMatter.adoc:1
+#, no-wrap
+msgid "Water polo"
+msgstr "WATER POLO"
+
+#. type: Yaml Front Matter Array Element: people hobbies
+#: YamlFrontMatter.adoc:1
+#, no-wrap
+msgid "Caving"
+msgstr "CAVING"
+
+#. type: Yaml Front Matter Hash Value: people name
+#: YamlFrontMatter.adoc:1
+#, no-wrap
+msgid "Tabitha Bitumen"
+msgstr "TABITHA BITUMEN"
+
+#. type: Yaml Front Matter Array Element: tags
+#: YamlFrontMatter.adoc:1
+#, no-wrap
+msgid "yaml"
+msgstr "YAML"
+
+#. type: Yaml Front Matter Array Element: tags
+#: YamlFrontMatter.adoc:1
+#, no-wrap
+msgid "markdown"
+msgstr "MARKDOWN"
+
+#. type: Yaml Front Matter Hash Value: title
+#: YamlFrontMatter.adoc:1
+#, no-wrap
+msgid "This is a test for the YFM thing in AsciiDoc"
+msgstr "THIS IS A TEST FOR THE yfm THING IN aSCIIdOC"
+
+#. type: Yaml Front Matter Hash Value: wrappedtext
+#: YamlFrontMatter.adoc:1
+#, no-wrap
+msgid "this is really a single line of text despite appearances\n"
+msgstr "THIS IS REALLY A SINGLE LINE OF TEXT DESPITE APPEARANCES\n"
+
+#. type: Title =
+#: YamlFrontMatter.adoc:34
+#, no-wrap
+msgid "YAML: does it fit in AsciiDoc?"
+msgstr "YAML: DOES IT FIT IN aSCIIdOC?"
+
+#. type: Plain text
+#: YamlFrontMatter.adoc:37
+msgid "AsciiDoc moves to YFM too. Why so?"
+msgstr "aSCIIdOC MOVES TO yfm TOO. wHY SO?"
+
+#. type: Plain text
+#: YamlFrontMatter.adoc:39
+msgid "Because blog posts need metadata!"
+msgstr "BECAUSE BLOG POSTS NEED METADATA!"
diff --git a/t/fmt/asciidoc/YamlFrontMatter.pot b/t/fmt/asciidoc/YamlFrontMatter.pot
new file mode 100644
index 0000000..a0a0abc
--- /dev/null
+++ b/t/fmt/asciidoc/YamlFrontMatter.pot
@@ -0,0 +1,126 @@
+# SOME DESCRIPTIVE TITLE
+# Copyright (C) YEAR Free Software Foundation, Inc.
+# This file is distributed under the same license as the PACKAGE package.
+# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
+#
+#, fuzzy
+msgid ""
+msgstr ""
+"Project-Id-Version: PACKAGE VERSION\n"
+"POT-Creation-Date: 2021-02-21 00:52+0100\n"
+"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
+"Language-Team: LANGUAGE <LL@li.org>\n"
+"Language: \n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+
+#. type: Yaml Front Matter Hash Value: author
+#: YamlFrontMatter.adoc:1
+#, no-wrap
+msgid "test"
+msgstr ""
+
+#. type: Yaml Front Matter Hash Value: include_newlines
+#: YamlFrontMatter.adoc:1
+#, no-wrap
+msgid ""
+"exactly as you see\n"
+"will appear these three\n"
+"lines of poetry\n"
+msgstr ""
+
+#. type: Yaml Front Matter Array Element: people hobbies
+#: YamlFrontMatter.adoc:1
+#, no-wrap
+msgid "Amateur radio"
+msgstr ""
+
+#. type: Yaml Front Matter Array Element: people hobbies
+#: YamlFrontMatter.adoc:1
+#, no-wrap
+msgid "Pet adoption & fostering"
+msgstr ""
+
+#. type: Yaml Front Matter Array Element: people hobbies
+#: YamlFrontMatter.adoc:1
+#, no-wrap
+msgid "Puzzle"
+msgstr ""
+
+#. type: Yaml Front Matter Hash Value: people job
+#: YamlFrontMatter.adoc:1
+#, no-wrap
+msgid "Developer"
+msgstr ""
+
+#. type: Yaml Front Matter Hash Value: people name
+#: YamlFrontMatter.adoc:1
+#, no-wrap
+msgid "John D'vloper"
+msgstr ""
+
+#. type: Yaml Front Matter Array Element: people hobbies
+#: YamlFrontMatter.adoc:1
+#, no-wrap
+msgid "Ice skating"
+msgstr ""
+
+#. type: Yaml Front Matter Array Element: people hobbies
+#: YamlFrontMatter.adoc:1
+#, no-wrap
+msgid "Water polo"
+msgstr ""
+
+#. type: Yaml Front Matter Array Element: people hobbies
+#: YamlFrontMatter.adoc:1
+#, no-wrap
+msgid "Caving"
+msgstr ""
+
+#. type: Yaml Front Matter Hash Value: people name
+#: YamlFrontMatter.adoc:1
+#, no-wrap
+msgid "Tabitha Bitumen"
+msgstr ""
+
+#. type: Yaml Front Matter Array Element: tags
+#: YamlFrontMatter.adoc:1
+#, no-wrap
+msgid "yaml"
+msgstr ""
+
+#. type: Yaml Front Matter Array Element: tags
+#: YamlFrontMatter.adoc:1
+#, no-wrap
+msgid "markdown"
+msgstr ""
+
+#. type: Yaml Front Matter Hash Value: title
+#: YamlFrontMatter.adoc:1
+#, no-wrap
+msgid "This is a test for the YFM thing in AsciiDoc"
+msgstr ""
+
+#. type: Yaml Front Matter Hash Value: wrappedtext
+#: YamlFrontMatter.adoc:1
+#, no-wrap
+msgid "this is really a single line of text despite appearances\n"
+msgstr ""
+
+#. type: Title =
+#: YamlFrontMatter.adoc:34
+#, no-wrap
+msgid "YAML: does it fit in AsciiDoc?"
+msgstr ""
+
+#. type: Plain text
+#: YamlFrontMatter.adoc:37
+msgid "AsciiDoc moves to YFM too. Why so?"
+msgstr ""
+
+#. type: Plain text
+#: YamlFrontMatter.adoc:39
+msgid "Because blog posts need metadata!"
+msgstr ""
diff --git a/t/fmt/asciidoc/YamlFrontMatter.trans b/t/fmt/asciidoc/YamlFrontMatter.trans
new file mode 100644
index 0000000..22ca370
--- /dev/null
+++ b/t/fmt/asciidoc/YamlFrontMatter.trans
@@ -0,0 +1,33 @@
+---
+author: TEST
+include_newlines: "EXACTLY AS YOU SEE\nWILL APPEAR THESE THREE\nLINES OF POETRY\n"
+people:
+ -
+ hobbies:
+ - 'AMATEUR RADIO'
+ - 'PET ADOPTION & FOSTERING'
+ - PUZZLE
+ job: DEVELOPER
+ name: "JOHN D'VLOPER"
+ -
+ hobbies:
+ - 'ICE SKATING'
+ - 'WATER POLO'
+ - CAVING
+ job: DEVELOPER
+ name: 'TABITHA BITUMEN'
+tags:
+ - YAML
+ - MARKDOWN
+title: 'THIS IS A TEST FOR THE yfm THING IN aSCIIdOC'
+wrappedtext: "THIS IS REALLY A SINGLE LINE OF TEXT DESPITE APPEARANCES\n"
+---
+
+
+YAML: DOES IT FIT IN aSCIIdOC?
+==============================
+
+aSCIIdOC MOVES TO yfm TOO. wHY SO?
+
+BECAUSE BLOG POSTS NEED METADATA!
+
diff --git a/t/fmt/asciidoc/YamlFrontMatter_KeysPaths.adoc b/t/fmt/asciidoc/YamlFrontMatter_KeysPaths.adoc
new file mode 100644
index 0000000..79ca750
--- /dev/null
+++ b/t/fmt/asciidoc/YamlFrontMatter_KeysPaths.adoc
@@ -0,0 +1,35 @@
+---
+title: "This is a test for the YFM thing in AsciiDoc"
+subtitle: "I mean: why not?"
+author: test
+numeric_ignored_value: 22
+tags:
+- yaml
+- markdown
+people:
+ -
+ name: John D'vloper
+ title: Developer
+ hobbies:
+ - Amateur radio
+ - Pet adoption & fostering
+ - Puzzle
+ -
+ name: Tabitha Bitumen
+ title: Developer
+ hobbies:
+ - Ice skating
+ - Water polo
+ - Caving
+paragraph: >
+ Some text to translate, please.
+---
+
+
+YAML: does it fit in AsciiDoc?
+==============================
+
+AsciiDoc moves to YFM too. Why so?
+
+Because blog posts need metadata!
+
diff --git a/t/fmt/asciidoc/YamlFrontMatter_KeysPaths.norm b/t/fmt/asciidoc/YamlFrontMatter_KeysPaths.norm
new file mode 100644
index 0000000..e74e8da
--- /dev/null
+++ b/t/fmt/asciidoc/YamlFrontMatter_KeysPaths.norm
@@ -0,0 +1,34 @@
+---
+author: test
+numeric_ignored_value: 22
+paragraph: "Some text to translate, please.\n"
+people:
+ -
+ hobbies:
+ - 'Amateur radio'
+ - 'Pet adoption & fostering'
+ - Puzzle
+ name: "John D'vloper"
+ title: Developer
+ -
+ hobbies:
+ - 'Ice skating'
+ - 'Water polo'
+ - Caving
+ name: 'Tabitha Bitumen'
+ title: Developer
+subtitle: 'I mean: why not?'
+tags:
+ - yaml
+ - markdown
+title: 'This is a test for the YFM thing in AsciiDoc'
+---
+
+
+YAML: does it fit in AsciiDoc?
+==============================
+
+AsciiDoc moves to YFM too. Why so?
+
+Because blog posts need metadata!
+
diff --git a/t/fmt/asciidoc/YamlFrontMatter_KeysPaths.po b/t/fmt/asciidoc/YamlFrontMatter_KeysPaths.po
new file mode 100644
index 0000000..14214f9
--- /dev/null
+++ b/t/fmt/asciidoc/YamlFrontMatter_KeysPaths.po
@@ -0,0 +1,51 @@
+# SOME DESCRIPTIVE TITLE
+# Copyright (C) YEAR Free Software Foundation, Inc.
+# This file is distributed under the same license as the PACKAGE package.
+# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
+#
+#, fuzzy
+msgid ""
+msgstr ""
+"Project-Id-Version: PACKAGE VERSION\n"
+"POT-Creation-Date: 2021-02-21 01:14+0100\n"
+"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
+"Language-Team: LANGUAGE <LL@LI.ORG>\n"
+"Language: \n"
+"MIME-Version: 1.0\n"
+"Content-Type: TEXT/PLAIN; CHARSET=UTF-8\n"
+"Content-Transfer-Encoding: 8BIT\n"
+
+#. type: Yaml Front Matter Hash Value: paragraph
+#: YamlFrontMatter_KeysPaths.adoc:1
+#, no-wrap
+msgid "Some text to translate, please.\n"
+msgstr "SOME TEXT TO TRANSLATE, PLEASE.\n"
+
+#. type: Yaml Front Matter Hash Value: people title
+#: YamlFrontMatter_KeysPaths.adoc:1
+#, no-wrap
+msgid "Developer"
+msgstr "DEVELOPER"
+
+#. type: Yaml Front Matter Hash Value: subtitle
+#: YamlFrontMatter_KeysPaths.adoc:1
+#, no-wrap
+msgid "I mean: why not?"
+msgstr "I MEAN: WHY NOT?"
+
+#. type: Title =
+#: YamlFrontMatter_KeysPaths.adoc:30
+#, no-wrap
+msgid "YAML: does it fit in AsciiDoc?"
+msgstr "YAML: DOES IT FIT IN aSCIIdOC?"
+
+#. type: Plain text
+#: YamlFrontMatter_KeysPaths.adoc:33
+msgid "AsciiDoc moves to YFM too. Why so?"
+msgstr "aSCIIdOC MOVES TO yfm TOO. wHY SO?"
+
+#. type: Plain text
+#: YamlFrontMatter_KeysPaths.adoc:35
+msgid "Because blog posts need metadata!"
+msgstr "BECAUSE BLOG POSTS NEED METADATA!"
diff --git a/t/fmt/asciidoc/YamlFrontMatter_KeysPaths.pot b/t/fmt/asciidoc/YamlFrontMatter_KeysPaths.pot
new file mode 100644
index 0000000..e21ed6c
--- /dev/null
+++ b/t/fmt/asciidoc/YamlFrontMatter_KeysPaths.pot
@@ -0,0 +1,51 @@
+# SOME DESCRIPTIVE TITLE
+# Copyright (C) YEAR Free Software Foundation, Inc.
+# This file is distributed under the same license as the PACKAGE package.
+# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
+#
+#, fuzzy
+msgid ""
+msgstr ""
+"Project-Id-Version: PACKAGE VERSION\n"
+"POT-Creation-Date: 2021-02-21 01:14+0100\n"
+"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
+"Language-Team: LANGUAGE <LL@li.org>\n"
+"Language: \n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+
+#. type: Yaml Front Matter Hash Value: paragraph
+#: YamlFrontMatter_KeysPaths.adoc:1
+#, no-wrap
+msgid "Some text to translate, please.\n"
+msgstr ""
+
+#. type: Yaml Front Matter Hash Value: people title
+#: YamlFrontMatter_KeysPaths.adoc:1
+#, no-wrap
+msgid "Developer"
+msgstr ""
+
+#. type: Yaml Front Matter Hash Value: subtitle
+#: YamlFrontMatter_KeysPaths.adoc:1
+#, no-wrap
+msgid "I mean: why not?"
+msgstr ""
+
+#. type: Title =
+#: YamlFrontMatter_KeysPaths.adoc:30
+#, no-wrap
+msgid "YAML: does it fit in AsciiDoc?"
+msgstr ""
+
+#. type: Plain text
+#: YamlFrontMatter_KeysPaths.adoc:33
+msgid "AsciiDoc moves to YFM too. Why so?"
+msgstr ""
+
+#. type: Plain text
+#: YamlFrontMatter_KeysPaths.adoc:35
+msgid "Because blog posts need metadata!"
+msgstr ""
diff --git a/t/fmt/asciidoc/YamlFrontMatter_KeysPaths.trans b/t/fmt/asciidoc/YamlFrontMatter_KeysPaths.trans
new file mode 100644
index 0000000..1461bce
--- /dev/null
+++ b/t/fmt/asciidoc/YamlFrontMatter_KeysPaths.trans
@@ -0,0 +1,34 @@
+---
+author: test
+numeric_ignored_value: 22
+paragraph: "SOME TEXT TO TRANSLATE, PLEASE.\n"
+people:
+ -
+ hobbies:
+ - 'Amateur radio'
+ - 'Pet adoption & fostering'
+ - Puzzle
+ name: "John D'vloper"
+ title: DEVELOPER
+ -
+ hobbies:
+ - 'Ice skating'
+ - 'Water polo'
+ - Caving
+ name: 'Tabitha Bitumen'
+ title: DEVELOPER
+subtitle: 'I MEAN: WHY NOT?'
+tags:
+ - yaml
+ - markdown
+title: 'This is a test for the YFM thing in AsciiDoc'
+---
+
+
+YAML: DOES IT FIT IN aSCIIdOC?
+==============================
+
+aSCIIdOC MOVES TO yfm TOO. wHY SO?
+
+BECAUSE BLOG POSTS NEED METADATA!
+
diff --git a/t/fmt/asciidoc/YamlFrontMatter_Option.adoc b/t/fmt/asciidoc/YamlFrontMatter_Option.adoc
new file mode 100644
index 0000000..79ca750
--- /dev/null
+++ b/t/fmt/asciidoc/YamlFrontMatter_Option.adoc
@@ -0,0 +1,35 @@
+---
+title: "This is a test for the YFM thing in AsciiDoc"
+subtitle: "I mean: why not?"
+author: test
+numeric_ignored_value: 22
+tags:
+- yaml
+- markdown
+people:
+ -
+ name: John D'vloper
+ title: Developer
+ hobbies:
+ - Amateur radio
+ - Pet adoption & fostering
+ - Puzzle
+ -
+ name: Tabitha Bitumen
+ title: Developer
+ hobbies:
+ - Ice skating
+ - Water polo
+ - Caving
+paragraph: >
+ Some text to translate, please.
+---
+
+
+YAML: does it fit in AsciiDoc?
+==============================
+
+AsciiDoc moves to YFM too. Why so?
+
+Because blog posts need metadata!
+
diff --git a/t/fmt/asciidoc/YamlFrontMatter_Option.norm b/t/fmt/asciidoc/YamlFrontMatter_Option.norm
new file mode 100644
index 0000000..e74e8da
--- /dev/null
+++ b/t/fmt/asciidoc/YamlFrontMatter_Option.norm
@@ -0,0 +1,34 @@
+---
+author: test
+numeric_ignored_value: 22
+paragraph: "Some text to translate, please.\n"
+people:
+ -
+ hobbies:
+ - 'Amateur radio'
+ - 'Pet adoption & fostering'
+ - Puzzle
+ name: "John D'vloper"
+ title: Developer
+ -
+ hobbies:
+ - 'Ice skating'
+ - 'Water polo'
+ - Caving
+ name: 'Tabitha Bitumen'
+ title: Developer
+subtitle: 'I mean: why not?'
+tags:
+ - yaml
+ - markdown
+title: 'This is a test for the YFM thing in AsciiDoc'
+---
+
+
+YAML: does it fit in AsciiDoc?
+==============================
+
+AsciiDoc moves to YFM too. Why so?
+
+Because blog posts need metadata!
+
diff --git a/t/fmt/asciidoc/YamlFrontMatter_Option.po b/t/fmt/asciidoc/YamlFrontMatter_Option.po
new file mode 100644
index 0000000..f4fbf08
--- /dev/null
+++ b/t/fmt/asciidoc/YamlFrontMatter_Option.po
@@ -0,0 +1,57 @@
+# SOME DESCRIPTIVE TITLE
+# Copyright (C) YEAR Free Software Foundation, Inc.
+# This file is distributed under the same license as the PACKAGE package.
+# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
+#
+#, fuzzy
+msgid ""
+msgstr ""
+"Project-Id-Version: PACKAGE VERSION\n"
+"POT-Creation-Date: 2021-02-21 01:14+0100\n"
+"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
+"Language-Team: LANGUAGE <LL@LI.ORG>\n"
+"Language: \n"
+"MIME-Version: 1.0\n"
+"Content-Type: TEXT/PLAIN; CHARSET=UTF-8\n"
+"Content-Transfer-Encoding: 8BIT\n"
+
+#. type: Yaml Front Matter Hash Value: paragraph
+#: YamlFrontMatter_Option.adoc:1
+#, no-wrap
+msgid "Some text to translate, please.\n"
+msgstr "SOME TEXT TO TRANSLATE, PLEASE.\n"
+
+#. type: Yaml Front Matter Hash Value: people title
+#: YamlFrontMatter_Option.adoc:1
+#, no-wrap
+msgid "Developer"
+msgstr "DEVELOPER"
+
+#. type: Yaml Front Matter Hash Value: subtitle
+#: YamlFrontMatter_Option.adoc:1
+#, no-wrap
+msgid "I mean: why not?"
+msgstr "I MEAN: WHY NOT?"
+
+#. type: Yaml Front Matter Hash Value: title
+#: YamlFrontMatter_Option.adoc:1
+#, no-wrap
+msgid "This is a test for the YFM thing in AsciiDoc"
+msgstr "THIS IS A TEST FOR THE yfm THING IN aSCIIdOC"
+
+#. type: Title =
+#: YamlFrontMatter_Option.adoc:30
+#, no-wrap
+msgid "YAML: does it fit in AsciiDoc?"
+msgstr "YAML: DOES IT FIT IN aSCIIdOC?"
+
+#. type: Plain text
+#: YamlFrontMatter_Option.adoc:33
+msgid "AsciiDoc moves to YFM too. Why so?"
+msgstr "aSCIIdOC MOVES TO yfm TOO. wHY SO?"
+
+#. type: Plain text
+#: YamlFrontMatter_Option.adoc:35
+msgid "Because blog posts need metadata!"
+msgstr "BECAUSE BLOG POSTS NEED METADATA!"
diff --git a/t/fmt/asciidoc/YamlFrontMatter_Option.pot b/t/fmt/asciidoc/YamlFrontMatter_Option.pot
new file mode 100644
index 0000000..ae6420f
--- /dev/null
+++ b/t/fmt/asciidoc/YamlFrontMatter_Option.pot
@@ -0,0 +1,57 @@
+# SOME DESCRIPTIVE TITLE
+# Copyright (C) YEAR Free Software Foundation, Inc.
+# This file is distributed under the same license as the PACKAGE package.
+# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
+#
+#, fuzzy
+msgid ""
+msgstr ""
+"Project-Id-Version: PACKAGE VERSION\n"
+"POT-Creation-Date: 2021-02-21 01:14+0100\n"
+"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
+"Language-Team: LANGUAGE <LL@li.org>\n"
+"Language: \n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+
+#. type: Yaml Front Matter Hash Value: paragraph
+#: YamlFrontMatter_Option.adoc:1
+#, no-wrap
+msgid "Some text to translate, please.\n"
+msgstr ""
+
+#. type: Yaml Front Matter Hash Value: people title
+#: YamlFrontMatter_Option.adoc:1
+#, no-wrap
+msgid "Developer"
+msgstr ""
+
+#. type: Yaml Front Matter Hash Value: subtitle
+#: YamlFrontMatter_Option.adoc:1
+#, no-wrap
+msgid "I mean: why not?"
+msgstr ""
+
+#. type: Yaml Front Matter Hash Value: title
+#: YamlFrontMatter_Option.adoc:1
+#, no-wrap
+msgid "This is a test for the YFM thing in AsciiDoc"
+msgstr ""
+
+#. type: Title =
+#: YamlFrontMatter_Option.adoc:30
+#, no-wrap
+msgid "YAML: does it fit in AsciiDoc?"
+msgstr ""
+
+#. type: Plain text
+#: YamlFrontMatter_Option.adoc:33
+msgid "AsciiDoc moves to YFM too. Why so?"
+msgstr ""
+
+#. type: Plain text
+#: YamlFrontMatter_Option.adoc:35
+msgid "Because blog posts need metadata!"
+msgstr ""
diff --git a/t/fmt/asciidoc/YamlFrontMatter_Option.trans b/t/fmt/asciidoc/YamlFrontMatter_Option.trans
new file mode 100644
index 0000000..4164e56
--- /dev/null
+++ b/t/fmt/asciidoc/YamlFrontMatter_Option.trans
@@ -0,0 +1,34 @@
+---
+author: test
+numeric_ignored_value: 22
+paragraph: "SOME TEXT TO TRANSLATE, PLEASE.\n"
+people:
+ -
+ hobbies:
+ - 'Amateur radio'
+ - 'Pet adoption & fostering'
+ - Puzzle
+ name: "John D'vloper"
+ title: DEVELOPER
+ -
+ hobbies:
+ - 'Ice skating'
+ - 'Water polo'
+ - Caving
+ name: 'Tabitha Bitumen'
+ title: DEVELOPER
+subtitle: 'I MEAN: WHY NOT?'
+tags:
+ - yaml
+ - markdown
+title: 'THIS IS A TEST FOR THE yfm THING IN aSCIIdOC'
+---
+
+
+YAML: DOES IT FIT IN aSCIIdOC?
+==============================
+
+aSCIIdOC MOVES TO yfm TOO. wHY SO?
+
+BECAUSE BLOG POSTS NEED METADATA!
+
diff --git a/t/fmt/docbook/PI-break.dbk b/t/fmt/docbook/PI-break.dbk
new file mode 100644
index 0000000..2e5a7de
--- /dev/null
+++ b/t/fmt/docbook/PI-break.dbk
@@ -0,0 +1,12 @@
+<!-- This reproduces https://github.com/mquinson/po4a/issues/170 -->
+<?xml version="1.0" ?>
+<!DOCTYPE sect1 PUBLIC "-//OASIS//DTD DocBook XML V4.5//EN" "http://www.oasis-open.org/docbook/xml/4.5/docbookx.dtd">
+<sect1>
+<screen><userinput>line 1
+line 2
+<?hard-pagebreak?>
+line 3
+line 4
+</userinput>
+</screen>
+</sect1>
diff --git a/t/fmt/docbook/PI-break.norm b/t/fmt/docbook/PI-break.norm
new file mode 100644
index 0000000..7ef3574
--- /dev/null
+++ b/t/fmt/docbook/PI-break.norm
@@ -0,0 +1,12 @@
+
+<!-- This reproduces https://github.com/mquinson/po4a/issues/170 -->
+<?xml version="1.0" encoding="UTF-8" ?>
+<!DOCTYPE sect1 PUBLIC "-//OASIS//DTD DocBook XML V4.5//EN" "http://www.oasis-open.org/docbook/xml/4.5/docbookx.dtd">
+<sect1>
+<screen><userinput>line 1 line 2
+<?hard-pagebreak?>
+line 3
+line 4
+</userinput>
+</screen>
+</sect1>
diff --git a/t/fmt/docbook/PI-break.po b/t/fmt/docbook/PI-break.po
new file mode 100644
index 0000000..624b53b
--- /dev/null
+++ b/t/fmt/docbook/PI-break.po
@@ -0,0 +1,34 @@
+# SOME DESCRIPTIVE TITLE
+# Copyright (C) YEAR Free Software Foundation, Inc.
+# This file is distributed under the same license as the PACKAGE package.
+# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
+#
+#, fuzzy
+msgid ""
+msgstr ""
+"Project-Id-Version: PACKAGE VERSION\n"
+"POT-Creation-Date: 2020-04-29 00:47+0200\n"
+"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
+"Language-Team: LANGUAGE <LL@LI.ORG>\n"
+"Language: \n"
+"MIME-Version: 1.0\n"
+"Content-Type: TEXT/PLAIN; CHARSET=UTF-8\n"
+"Content-Transfer-Encoding: 8BIT\n"
+
+#. type: Content of: <sect1><screen><userinput>
+#: PI-break.dbk:5
+msgid "<userinput>line 1 line 2"
+msgstr "<USERINPUT>LINE 1 LINE 2"
+
+#. type: Content of: <sect1><screen>
+#: PI-break.dbk:8
+#, no-wrap
+msgid ""
+"line 3\n"
+"line 4\n"
+"</userinput>\n"
+msgstr ""
+"LINE 3\n"
+"LINE 4\n"
+"</USERINPUT>\n"
diff --git a/t/fmt/docbook/PI-break.pot b/t/fmt/docbook/PI-break.pot
new file mode 100644
index 0000000..2373d78
--- /dev/null
+++ b/t/fmt/docbook/PI-break.pot
@@ -0,0 +1,31 @@
+# SOME DESCRIPTIVE TITLE
+# Copyright (C) YEAR Free Software Foundation, Inc.
+# This file is distributed under the same license as the PACKAGE package.
+# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
+#
+#, fuzzy
+msgid ""
+msgstr ""
+"Project-Id-Version: PACKAGE VERSION\n"
+"POT-Creation-Date: 2020-04-29 00:47+0200\n"
+"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
+"Language-Team: LANGUAGE <LL@li.org>\n"
+"Language: \n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+
+#. type: Content of: <sect1><screen><userinput>
+#: PI-break.dbk:5
+msgid "<userinput>line 1 line 2"
+msgstr ""
+
+#. type: Content of: <sect1><screen>
+#: PI-break.dbk:8
+#, no-wrap
+msgid ""
+"line 3\n"
+"line 4\n"
+"</userinput>\n"
+msgstr ""
diff --git a/t/fmt/docbook/PI-break.trans b/t/fmt/docbook/PI-break.trans
new file mode 100644
index 0000000..8ffd1c6
--- /dev/null
+++ b/t/fmt/docbook/PI-break.trans
@@ -0,0 +1,12 @@
+
+<!-- This reproduces https://github.com/mquinson/po4a/issues/170 -->
+<?xml version="1.0" encoding="UTF-8" ?>
+<!DOCTYPE sect1 PUBLIC "-//OASIS//DTD DocBook XML V4.5//EN" "http://www.oasis-open.org/docbook/xml/4.5/docbookx.dtd">
+<sect1>
+<screen><USERINPUT>LINE 1 LINE 2
+<?hard-pagebreak?>
+LINE 3
+LINE 4
+</USERINPUT>
+</screen>
+</sect1>
diff --git a/t/fmt/docbook/PI-inline.dbk b/t/fmt/docbook/PI-inline.dbk
new file mode 100644
index 0000000..2e5a7de
--- /dev/null
+++ b/t/fmt/docbook/PI-inline.dbk
@@ -0,0 +1,12 @@
+<!-- This reproduces https://github.com/mquinson/po4a/issues/170 -->
+<?xml version="1.0" ?>
+<!DOCTYPE sect1 PUBLIC "-//OASIS//DTD DocBook XML V4.5//EN" "http://www.oasis-open.org/docbook/xml/4.5/docbookx.dtd">
+<sect1>
+<screen><userinput>line 1
+line 2
+<?hard-pagebreak?>
+line 3
+line 4
+</userinput>
+</screen>
+</sect1>
diff --git a/t/fmt/docbook/PI-inline.norm b/t/fmt/docbook/PI-inline.norm
new file mode 100644
index 0000000..473e06f
--- /dev/null
+++ b/t/fmt/docbook/PI-inline.norm
@@ -0,0 +1,13 @@
+
+<!-- This reproduces https://github.com/mquinson/po4a/issues/170 -->
+<?xml version="1.0" encoding="UTF-8" ?>
+<!DOCTYPE sect1 PUBLIC "-//OASIS//DTD DocBook XML V4.5//EN" "http://www.oasis-open.org/docbook/xml/4.5/docbookx.dtd">
+<sect1>
+<screen><userinput>line 1
+line 2
+<?hard-pagebreak?>
+line 3
+line 4
+</userinput>
+</screen>
+</sect1>
diff --git a/t/fmt/docbook/PI-inline.po b/t/fmt/docbook/PI-inline.po
new file mode 100644
index 0000000..2add7b6
--- /dev/null
+++ b/t/fmt/docbook/PI-inline.po
@@ -0,0 +1,35 @@
+# SOME DESCRIPTIVE TITLE
+# Copyright (C) YEAR Free Software Foundation, Inc.
+# This file is distributed under the same license as the PACKAGE package.
+# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
+#
+#, fuzzy
+msgid ""
+msgstr ""
+"Project-Id-Version: PACKAGE VERSION\n"
+"POT-Creation-Date: 2020-04-29 00:46+0200\n"
+"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
+"Language-Team: LANGUAGE <LL@LI.ORG>\n"
+"Language: \n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8BIT\n"
+
+#. type: Content of: <sect1><screen>
+#: PI-inline.dbk:5
+#, no-wrap
+msgid ""
+"<userinput>line 1\n"
+"line 2\n"
+"<?hard-pagebreak?>\n"
+"line 3\n"
+"line 4\n"
+"</userinput>\n"
+msgstr ""
+"<USERINPUT>LINE 1\n"
+"LINE 2\n"
+"<?HARD-PAGEBREAK?>\n"
+"LINE 3\n"
+"LINE 4\n"
+"</USERINPUT>\n"
diff --git a/t/fmt/docbook/PI-inline.pot b/t/fmt/docbook/PI-inline.pot
new file mode 100644
index 0000000..f89c127
--- /dev/null
+++ b/t/fmt/docbook/PI-inline.pot
@@ -0,0 +1,29 @@
+# SOME DESCRIPTIVE TITLE
+# Copyright (C) YEAR Free Software Foundation, Inc.
+# This file is distributed under the same license as the PACKAGE package.
+# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
+#
+#, fuzzy
+msgid ""
+msgstr ""
+"Project-Id-Version: PACKAGE VERSION\n"
+"POT-Creation-Date: 2020-04-29 00:46+0200\n"
+"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
+"Language-Team: LANGUAGE <LL@li.org>\n"
+"Language: \n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+
+#. type: Content of: <sect1><screen>
+#: PI-inline.dbk:5
+#, no-wrap
+msgid ""
+"<userinput>line 1\n"
+"line 2\n"
+"<?hard-pagebreak?>\n"
+"line 3\n"
+"line 4\n"
+"</userinput>\n"
+msgstr ""
diff --git a/t/fmt/docbook/PI-inline.trans b/t/fmt/docbook/PI-inline.trans
new file mode 100644
index 0000000..7652613
--- /dev/null
+++ b/t/fmt/docbook/PI-inline.trans
@@ -0,0 +1,13 @@
+
+<!-- This reproduces https://github.com/mquinson/po4a/issues/170 -->
+<?xml version="1.0" encoding="UTF-8" ?>
+<!DOCTYPE sect1 PUBLIC "-//OASIS//DTD DocBook XML V4.5//EN" "http://www.oasis-open.org/docbook/xml/4.5/docbookx.dtd">
+<sect1>
+<screen><USERINPUT>LINE 1
+LINE 2
+<?HARD-PAGEBREAK?>
+LINE 3
+LINE 4
+</USERINPUT>
+</screen>
+</sect1>
diff --git a/t/fmt/docbook/debian-history.dbk b/t/fmt/docbook/debian-history.dbk
new file mode 100644
index 0000000..0e010a1
--- /dev/null
+++ b/t/fmt/docbook/debian-history.dbk
@@ -0,0 +1,83 @@
+<?xml version='1.0' encoding='utf-8'?>
+<!-- -*- DocBook -*- -->
+<!DOCTYPE book PUBLIC "-//OASIS//DTD DocBook XML V4.5//EN"
+ "http://www.oasis-open.org/docbook/xml/4.5/docbookx.dtd" [
+<!ENTITY % versiondata SYSTEM "version.ent"> %versiondata;
+]>
+
+<book lang="en">
+
+<title>A Brief History of Debian</title>
+
+<bookinfo>
+
+<releaseinfo>version: &pubversion; (&pubdate;)</releaseinfo>
+
+<abstract>
+<para>
+text paragraph
+</para>
+</abstract>
+
+<legalnotice>
+
+<copyright>
+<year>1999-2020</year>
+<holder>
+<personname>Debian Documentation Team</personname>
+<email>debian-doc@lists.debian.org</email>
+</holder>
+</copyright>
+
+<authorgroup>
+<author><personname>Debian Documentation Team</personname><email>debian-doc@lists.debian.org</email></author>
+</authorgroup>
+
+<para>
+text paragraph
+</para>
+</legalnotice>
+
+</bookinfo>
+
+
+<chapter id="intro"><title>Text title</title>
+<para>
+<ulink url="http://www.debian.org/">a link</ulink>
+</para>
+<section id="begining"><title>Text title</title>
+<para>
+paragraph text
+</para>
+<para>
+paragraph text
+</para>
+</section>
+
+<section id="pronouncing-debian"><title>Text title</title>
+<para>
+paragraph text
+</para>
+</section>
+
+</chapter>
+
+<chapter id="leaders"><title>Text title</title>
+<para>
+paragraph text
+</para>
+</chapter>
+
+<appendix id="manifesto"><title>Text title</title>
+<para>
+paragraph text
+</para>
+<section id="what-is-debian"><title>Text title</title>
+<para>
+paragraph text
+</para>
+</section>
+</appendix>
+
+
+</book>
diff --git a/t/fmt/docbook/debian-history.norm b/t/fmt/docbook/debian-history.norm
new file mode 100644
index 0000000..f6e37ba
--- /dev/null
+++ b/t/fmt/docbook/debian-history.norm
@@ -0,0 +1,80 @@
+<?xml version='1.0' encoding='UTF-8'?>
+
+<!-- -*- DocBook -*- -->
+<!DOCTYPE book PUBLIC "-//OASIS//DTD DocBook XML V4.5//EN"
+ "http://www.oasis-open.org/docbook/xml/4.5/docbookx.dtd" [
+<!ENTITY % versiondata SYSTEM "version.ent"> %versiondata;
+]>
+
+<book lang="en">
+
+<title>A Brief History of Debian</title>
+
+<bookinfo>
+
+<releaseinfo>version: &pubversion; (&pubdate;)</releaseinfo>
+
+<abstract>
+<para>
+text paragraph
+</para>
+</abstract>
+
+<legalnotice>
+
+<copyright> <year>1999-2020</year> <holder> <personname>Debian Documentation
+Team</personname> <email>debian-doc@lists.debian.org</email> </holder>
+</copyright>
+
+<authorgroup>
+<author><personname>Debian Documentation Team</personname><email>debian-doc@lists.debian.org</email></author>
+</authorgroup>
+
+<para>
+text paragraph
+</para>
+</legalnotice>
+
+</bookinfo>
+
+
+<chapter id="intro"><title>Text title</title>
+<para>
+<ulink url="http://www.debian.org/">a link</ulink>
+</para>
+<section id="begining"><title>Text title</title>
+<para>
+paragraph text
+</para>
+<para>
+paragraph text
+</para>
+</section>
+
+<section id="pronouncing-debian"><title>Text title</title>
+<para>
+paragraph text
+</para>
+</section>
+
+</chapter>
+
+<chapter id="leaders"><title>Text title</title>
+<para>
+paragraph text
+</para>
+</chapter>
+
+<appendix id="manifesto"><title>Text title</title>
+<para>
+paragraph text
+</para>
+<section id="what-is-debian"><title>Text title</title>
+<para>
+paragraph text
+</para>
+</section>
+</appendix>
+
+
+</book>
diff --git a/t/fmt/docbook/debian-history.po b/t/fmt/docbook/debian-history.po
new file mode 100644
index 0000000..86e4d9e
--- /dev/null
+++ b/t/fmt/docbook/debian-history.po
@@ -0,0 +1,75 @@
+# SOME DESCRIPTIVE TITLE
+# Copyright (C) YEAR Free Software Foundation, Inc.
+# This file is distributed under the same license as the PACKAGE package.
+# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
+#
+#, fuzzy
+msgid ""
+msgstr ""
+"Project-Id-Version: PACKAGE VERSION\n"
+"POT-Creation-Date: 2020-04-26 11:20+0200\n"
+"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
+"Language-Team: LANGUAGE <LL@li.org>\n"
+"Language: \n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+
+#. type: Attribute 'lang' of: <book>
+#: debian-history.dbk:8
+msgid "en"
+msgstr "UPPERCASE"
+
+#. type: Content of: <book><title>
+#: debian-history.dbk:10
+msgid "A Brief History of Debian"
+msgstr "A BRIEF HISTORY OF DEBIAN"
+
+#. type: Content of: <book><bookinfo><releaseinfo>
+#: debian-history.dbk:14
+msgid "version: &pubversion; (&pubdate;)"
+msgstr "VERSION: &pubversion; (&pubdate;)"
+
+#. type: Content of: <book><bookinfo><legalnotice><para>
+#: debian-history.dbk:18 debian-history.dbk:37
+msgid "text paragraph"
+msgstr "TEXT PARAGRAPH"
+
+#. type: Content of: <book><bookinfo><legalnotice>
+#: debian-history.dbk:24
+msgid ""
+"<copyright> <year>1999-2020</year> <holder> <personname>Debian Documentation "
+"Team</personname> <email>debian-doc@lists.debian.org</email> </holder> "
+"</copyright>"
+msgstr ""
+"<copyright> <year>1999-2020</year> <holder> <personname>DEBIAN DOCUMENTATION "
+"TEAM</personname> <email>debian-doc@lists.debian.org</email> </holder> "
+"</copyright>"
+
+#. type: Content of: <book><bookinfo><legalnotice><authorgroup><author><personname>
+#: debian-history.dbk:33
+msgid "Debian Documentation Team"
+msgstr "DEBIAN DOCUMENTATION TEAM"
+
+#. type: Content of: <book><bookinfo><legalnotice><authorgroup><author><email>
+#: debian-history.dbk:33
+msgid "debian-doc@lists.debian.org"
+msgstr ""
+
+#. type: Content of: <book><appendix><section><title>
+#: debian-history.dbk:44 debian-history.dbk:48 debian-history.dbk:57
+#: debian-history.dbk:65 debian-history.dbk:71 debian-history.dbk:75
+msgid "Text title"
+msgstr "TEXT TITLE"
+
+#. type: Content of: <book><chapter><para>
+#: debian-history.dbk:46
+msgid "<ulink url=\"http://www.debian.org/\">a link</ulink>"
+msgstr "<ulink url=\"http://www.debian.org/\">A LINK</ulink>"
+
+#. type: Content of: <book><appendix><section><para>
+#: debian-history.dbk:50 debian-history.dbk:53 debian-history.dbk:59
+#: debian-history.dbk:67 debian-history.dbk:73 debian-history.dbk:77
+msgid "paragraph text"
+msgstr "PARAGRAPH TEXT"
diff --git a/t/fmt/docbook/debian-history.pot b/t/fmt/docbook/debian-history.pot
new file mode 100644
index 0000000..3d76617
--- /dev/null
+++ b/t/fmt/docbook/debian-history.pot
@@ -0,0 +1,72 @@
+# SOME DESCRIPTIVE TITLE
+# Copyright (C) YEAR Free Software Foundation, Inc.
+# This file is distributed under the same license as the PACKAGE package.
+# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
+#
+#, fuzzy
+msgid ""
+msgstr ""
+"Project-Id-Version: PACKAGE VERSION\n"
+"POT-Creation-Date: 2020-04-26 11:20+0200\n"
+"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
+"Language-Team: LANGUAGE <LL@li.org>\n"
+"Language: \n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+
+#. type: Attribute 'lang' of: <book>
+#: debian-history.dbk:8
+msgid "en"
+msgstr ""
+
+#. type: Content of: <book><title>
+#: debian-history.dbk:10
+msgid "A Brief History of Debian"
+msgstr ""
+
+#. type: Content of: <book><bookinfo><releaseinfo>
+#: debian-history.dbk:14
+msgid "version: &pubversion; (&pubdate;)"
+msgstr ""
+
+#. type: Content of: <book><bookinfo><legalnotice><para>
+#: debian-history.dbk:18 debian-history.dbk:37
+msgid "text paragraph"
+msgstr ""
+
+#. type: Content of: <book><bookinfo><legalnotice>
+#: debian-history.dbk:24
+msgid ""
+"<copyright> <year>1999-2020</year> <holder> <personname>Debian Documentation "
+"Team</personname> <email>debian-doc@lists.debian.org</email> </holder> "
+"</copyright>"
+msgstr ""
+
+#. type: Content of: <book><bookinfo><legalnotice><authorgroup><author><personname>
+#: debian-history.dbk:33
+msgid "Debian Documentation Team"
+msgstr ""
+
+#. type: Content of: <book><bookinfo><legalnotice><authorgroup><author><email>
+#: debian-history.dbk:33
+msgid "debian-doc@lists.debian.org"
+msgstr ""
+
+#. type: Content of: <book><appendix><section><title>
+#: debian-history.dbk:44 debian-history.dbk:48 debian-history.dbk:57
+#: debian-history.dbk:65 debian-history.dbk:71 debian-history.dbk:75
+msgid "Text title"
+msgstr ""
+
+#. type: Content of: <book><chapter><para>
+#: debian-history.dbk:46
+msgid "<ulink url=\"http://www.debian.org/\">a link</ulink>"
+msgstr ""
+
+#. type: Content of: <book><appendix><section><para>
+#: debian-history.dbk:50 debian-history.dbk:53 debian-history.dbk:59
+#: debian-history.dbk:67 debian-history.dbk:73 debian-history.dbk:77
+msgid "paragraph text"
+msgstr ""
diff --git a/t/fmt/docbook/debian-history.trans b/t/fmt/docbook/debian-history.trans
new file mode 100644
index 0000000..6b4d16a
--- /dev/null
+++ b/t/fmt/docbook/debian-history.trans
@@ -0,0 +1,80 @@
+<?xml version='1.0' encoding='UTF-8'?>
+
+<!-- -*- DocBook -*- -->
+<!DOCTYPE book PUBLIC "-//OASIS//DTD DocBook XML V4.5//EN"
+ "http://www.oasis-open.org/docbook/xml/4.5/docbookx.dtd" [
+<!ENTITY % versiondata SYSTEM "version.ent"> %versiondata;
+]>
+
+<book lang="UPPERCASE">
+
+<title>A BRIEF HISTORY OF DEBIAN</title>
+
+<bookinfo>
+
+<releaseinfo>VERSION: &pubversion; (&pubdate;)</releaseinfo>
+
+<abstract>
+<para>
+TEXT PARAGRAPH
+</para>
+</abstract>
+
+<legalnotice>
+
+<copyright> <year>1999-2020</year> <holder> <personname>DEBIAN DOCUMENTATION
+TEAM</personname> <email>debian-doc@lists.debian.org</email> </holder>
+</copyright>
+
+<authorgroup>
+<author><personname>DEBIAN DOCUMENTATION TEAM</personname><email>debian-doc@lists.debian.org</email></author>
+</authorgroup>
+
+<para>
+TEXT PARAGRAPH
+</para>
+</legalnotice>
+
+</bookinfo>
+
+
+<chapter id="intro"><title>TEXT TITLE</title>
+<para>
+<ulink url="http://www.debian.org/">A LINK</ulink>
+</para>
+<section id="begining"><title>TEXT TITLE</title>
+<para>
+PARAGRAPH TEXT
+</para>
+<para>
+PARAGRAPH TEXT
+</para>
+</section>
+
+<section id="pronouncing-debian"><title>TEXT TITLE</title>
+<para>
+PARAGRAPH TEXT
+</para>
+</section>
+
+</chapter>
+
+<chapter id="leaders"><title>TEXT TITLE</title>
+<para>
+PARAGRAPH TEXT
+</para>
+</chapter>
+
+<appendix id="manifesto"><title>TEXT TITLE</title>
+<para>
+PARAGRAPH TEXT
+</para>
+<section id="what-is-debian"><title>TEXT TITLE</title>
+<para>
+PARAGRAPH TEXT
+</para>
+</section>
+</appendix>
+
+
+</book>
diff --git a/t/fmt/gemtext/basic.gmi b/t/fmt/gemtext/basic.gmi
new file mode 100644
index 0000000..9850c87
--- /dev/null
+++ b/t/fmt/gemtext/basic.gmi
@@ -0,0 +1,21 @@
+This is a normal text line.
+
+=> gemini://example.org An example link
+
+``` alt text
+Here is a preformatted text.
+```
+
+Here are exactly two blank lines:
+
+
+# Heading
+
+## Sub Heading
+
+### Sub sub heading
+
+* Item 1
+* Item 2
+
+> This is a quote.
diff --git a/t/fmt/gemtext/basic.norm b/t/fmt/gemtext/basic.norm
new file mode 100644
index 0000000..9850c87
--- /dev/null
+++ b/t/fmt/gemtext/basic.norm
@@ -0,0 +1,21 @@
+This is a normal text line.
+
+=> gemini://example.org An example link
+
+``` alt text
+Here is a preformatted text.
+```
+
+Here are exactly two blank lines:
+
+
+# Heading
+
+## Sub Heading
+
+### Sub sub heading
+
+* Item 1
+* Item 2
+
+> This is a quote.
diff --git a/t/fmt/gemtext/basic.po b/t/fmt/gemtext/basic.po
new file mode 100644
index 0000000..f695056
--- /dev/null
+++ b/t/fmt/gemtext/basic.po
@@ -0,0 +1,83 @@
+# SOME DESCRIPTIVE TITLE
+# Copyright (C) YEAR Free Software Foundation, Inc.
+# This file is distributed under the same license as the PACKAGE package.
+# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
+#
+#, fuzzy
+msgid ""
+msgstr ""
+"Project-Id-Version: PACKAGE VERSION\n"
+"POT-Creation-Date: 2024-02-07 22:02+0900\n"
+"PO-Revision-Date: 2024-02-07 22:09+0900\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
+"Language-Team: LANGUAGE <LL@li.org>\n"
+"Language: \n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+
+#. type: paragraph
+#: basic.gmi:1
+#, no-wrap
+msgid "This is a normal text line."
+msgstr "THIS IS A NORMAL TEXT LINE."
+
+#. type: link
+#: basic.gmi:3
+#, no-wrap
+msgid "An example link"
+msgstr "AN EXAMPLE LINK"
+
+#. type: alt text
+#: basic.gmi:5
+#, no-wrap
+msgid "alt text"
+msgstr "ALT TEXT"
+
+#. type: preformatted text
+#: basic.gmi:7
+#, no-wrap
+msgid "Here is a preformatted text."
+msgstr "HERE IS A PREFORMATTED TEXT."
+
+#. type: paragraph
+#: basic.gmi:9
+#, no-wrap
+msgid "Here are exactly two blank lines:"
+msgstr "HERE ARE EXACTLY TWO BLANK LINES:"
+
+#. type: heading #
+#: basic.gmi:12
+#, no-wrap
+msgid "Heading"
+msgstr "HEADING"
+
+#. type: heading ##
+#: basic.gmi:14
+#, no-wrap
+msgid "Sub Heading"
+msgstr "SUB HEADING"
+
+#. type: heading ###
+#: basic.gmi:16
+#, no-wrap
+msgid "Sub sub heading"
+msgstr "SUB SUB HEADING"
+
+#. type: list
+#: basic.gmi:18
+#, no-wrap
+msgid "Item 1"
+msgstr "ITEM 1"
+
+#. type: list
+#: basic.gmi:19
+#, no-wrap
+msgid "Item 2"
+msgstr "ITEM 2"
+
+#. type: quote
+#: basic.gmi:21
+#, no-wrap
+msgid "This is a quote."
+msgstr "THIS IS A QUOTE."
diff --git a/t/fmt/gemtext/basic.pot b/t/fmt/gemtext/basic.pot
new file mode 100644
index 0000000..a45197b
--- /dev/null
+++ b/t/fmt/gemtext/basic.pot
@@ -0,0 +1,83 @@
+# SOME DESCRIPTIVE TITLE
+# Copyright (C) YEAR Free Software Foundation, Inc.
+# This file is distributed under the same license as the PACKAGE package.
+# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
+#
+#, fuzzy
+msgid ""
+msgstr ""
+"Project-Id-Version: PACKAGE VERSION\n"
+"POT-Creation-Date: 2024-02-07 22:02+0900\n"
+"PO-Revision-Date: 2024-02-07 22:05+0900\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
+"Language-Team: LANGUAGE <LL@li.org>\n"
+"Language: \n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+
+#. type: paragraph
+#: basic.gmi:1
+#, no-wrap
+msgid "This is a normal text line."
+msgstr ""
+
+#. type: link
+#: basic.gmi:3
+#, no-wrap
+msgid "An example link"
+msgstr ""
+
+#. type: alt text
+#: basic.gmi:5
+#, no-wrap
+msgid "alt text"
+msgstr ""
+
+#. type: preformatted text
+#: basic.gmi:7
+#, no-wrap
+msgid "Here is a preformatted text."
+msgstr ""
+
+#. type: paragraph
+#: basic.gmi:9
+#, no-wrap
+msgid "Here are exactly two blank lines:"
+msgstr ""
+
+#. type: heading #
+#: basic.gmi:12
+#, no-wrap
+msgid "Heading"
+msgstr ""
+
+#. type: heading ##
+#: basic.gmi:14
+#, no-wrap
+msgid "Sub Heading"
+msgstr ""
+
+#. type: heading ###
+#: basic.gmi:16
+#, no-wrap
+msgid "Sub sub heading"
+msgstr ""
+
+#. type: list
+#: basic.gmi:18
+#, no-wrap
+msgid "Item 1"
+msgstr ""
+
+#. type: list
+#: basic.gmi:19
+#, no-wrap
+msgid "Item 2"
+msgstr ""
+
+#. type: quote
+#: basic.gmi:21
+#, no-wrap
+msgid "This is a quote."
+msgstr ""
diff --git a/t/fmt/gemtext/basic.trans b/t/fmt/gemtext/basic.trans
new file mode 100644
index 0000000..77485a4
--- /dev/null
+++ b/t/fmt/gemtext/basic.trans
@@ -0,0 +1,21 @@
+THIS IS A NORMAL TEXT LINE.
+
+=> gemini://example.org AN EXAMPLE LINK
+
+``` ALT TEXT
+HERE IS A PREFORMATTED TEXT.
+```
+
+HERE ARE EXACTLY TWO BLANK LINES:
+
+
+# HEADING
+
+## SUB HEADING
+
+### SUB SUB HEADING
+
+* ITEM 1
+* ITEM 2
+
+> THIS IS A QUOTE.
diff --git a/t/fmt/halibut/basic.but b/t/fmt/halibut/basic.but
new file mode 100644
index 0000000..b1bedfd
--- /dev/null
+++ b/t/fmt/halibut/basic.but
@@ -0,0 +1,47 @@
+\title document title
+
+\cfg{text-filename}{puzzles.txt}
+
+\define{dash} \u2013{-}
+
+Some text
+
+\copyright Some text. See \k{licence} for details.
+
+\cfg{html-local-head}{<meta name="AppleTitle" content="Puzzles Help">}
+
+\C{intro} Introduction
+
+Text paragraph with some inline formatting. Here is some \e{emphasised
+text}. And a \dash sign.
+\I{website}\W{https://www.chiark.greenend.org.uk/~sgtatham/puzzles/}\cw{https://www.chiark.greenend.org.uk/~sgtatham/puzzles/}.
+
+\C{common} \ii{listing}
+
+\dt \ii\e{New game} (\q{N}, Ctrl+\q{N})
+
+\dd Some text
+
+\dt \ii\e{Restart game}
+
+\dd Some text
+
+\dt \ii\e{Load}
+
+\dd Some text
+
+\lcont{
+
+paragraph text
+
+}
+
+\IM{command-line}{command line} command line
+
+\IM{default parameters, specifying} default parameters, specifying
+\IM{default parameters, specifying} preferences, specifying default
+
+\IM{Unix} Unix
+\IM{Unix} Linux
+
+\versionid Some text
diff --git a/t/fmt/halibut/basic.norm b/t/fmt/halibut/basic.norm
new file mode 100644
index 0000000..d6acd16
--- /dev/null
+++ b/t/fmt/halibut/basic.norm
@@ -0,0 +1,49 @@
+\# This file was generated with po4a. Translate the source file.
+
+\title document title
+
+\cfg{text-filename}{puzzles.txt}
+
+\define{dash} \u2013{-}
+
+Some text
+
+\copyright Some text. See \k{licence} for details.
+
+\cfg{html-local-head}{<meta name="AppleTitle" content="Puzzles Help">}
+
+\C{intro} Introduction
+
+Text paragraph with some inline formatting. Here is some \e{emphasised
+text}. And a \dash sign.
+\I{website}\W{https://www.chiark.greenend.org.uk/~sgtatham/puzzles/}\cw{https://www.chiark.greenend.org.uk/~sgtatham/puzzles/}.
+
+\C{common} \ii{listing}
+
+\dt \ii\e{New game} (\q{N}, Ctrl+\q{N})
+
+\dd Some text
+
+\dt \ii\e{Restart game}
+
+\dd Some text
+
+\dt \ii\e{Load}
+
+\dd Some text
+
+\lcont{
+
+paragraph text
+
+}
+
+\IM{command-line}{command line} command line
+
+\IM{default parameters, specifying} default parameters, specifying
+\IM{default parameters, specifying} preferences, specifying default
+
+\IM{Unix} Unix
+\IM{Unix} Linux
+
+\versionid Some text
diff --git a/t/fmt/halibut/basic.po b/t/fmt/halibut/basic.po
new file mode 100644
index 0000000..25eb9b7
--- /dev/null
+++ b/t/fmt/halibut/basic.po
@@ -0,0 +1,124 @@
+# SOME DESCRIPTIVE TITLE
+# Copyright (C) YEAR Free Software Foundation, Inc.
+# This file is distributed under the same license as the PACKAGE package.
+# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
+#
+#, fuzzy
+msgid ""
+msgstr ""
+"Project-Id-Version: PACKAGE VERSION\n"
+"POT-Creation-Date: 2020-04-26 14:41+0200\n"
+"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
+"Language-Team: LANGUAGE <LL@li.org>\n"
+"Language: \n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+
+#. type: Plain text
+#: basic.but:2
+msgid "document title"
+msgstr "DOCUMENT TITLE"
+
+#. type: Plain text
+#: basic.but:4
+msgid "\\cfg{text-filename}{puzzles.txt}"
+msgstr ""
+
+#. type: define
+#: basic.but:5
+#, no-wrap
+msgid "\\u2013{-}"
+msgstr ""
+
+#. type: Plain text
+#: basic.but:8 basic.but:24 basic.but:28 basic.but:32 basic.but:47
+msgid "Some text"
+msgstr "SOME TEXT"
+
+#. type: Plain text
+#: basic.but:10
+msgid "Some text. See \\k{licence} for details."
+msgstr "SOME TEXT. See \\k{licence} FOR DETAILS."
+
+#. type: Plain text
+#: basic.but:12
+msgid "\\cfg{html-local-head}{<meta name=\"AppleTitle\" content=\"Puzzles Help\">}"
+msgstr "\\cfg{html-local-head}{<meta name=\"AppleTitle\" content=\"PUZZLES HELP\">}"
+
+#. type: Plain text
+#: basic.but:14
+msgid "Introduction"
+msgstr "INTRODUCTION"
+
+#. type: Plain text
+#: basic.but:18
+msgid ""
+"Text paragraph with some inline formatting. Here is some \\e{emphasised "
+"text}. And a \\dash sign. "
+"\\I{website}\\W{https://www.chiark.greenend.org.uk/~sgtatham/puzzles/}\\cw{https://www.chiark.greenend.org.uk/~sgtatham/puzzles/}."
+msgstr ""
+"TEXT PARAGRAPH WITH SOME INLINE FORMATTING. HERE IS SOME \\e{EMPHASISED "
+"TEXT}. AND A \\dash SIGN. "
+"\\I{website}\\W{https://www.chiark.greenend.org.uk/~sgtatham/puzzles/}\\cw{https://www.chiark.greenend.org.uk/~sgtatham/puzzles/}."
+
+#. type: ii{#1}
+#: basic.but:20
+msgid "listing"
+msgstr "LISTING"
+
+#. type: Plain text
+#: basic.but:22
+msgid "\\ii\\e{New game} (\\q{N}, Ctrl+\\q{N})"
+msgstr "\\ii\\e{NEW GAME} (\\q{N}, Ctrl+\\q{N})"
+
+#. type: Plain text
+#: basic.but:26
+msgid "\\ii\\e{Restart game}"
+msgstr "\\ii\\e{RESTART GAME}"
+
+#. type: Plain text
+#: basic.but:30
+msgid "\\ii\\e{Load}"
+msgstr "\\ii\\e{LOAD}"
+
+#. type: Plain text
+#: basic.but:38
+msgid "paragraph text"
+msgstr "PARAGRAPH TEXT"
+
+#. type: IM{#1}
+#: basic.but:39
+msgid "command-line"
+msgstr ""
+
+#. type: IM
+#: basic.but:39
+#, no-wrap
+msgid "{command line} command line"
+msgstr "{COMMAND LINE} COMMAND LINE"
+
+#. type: IM{#1}
+#: basic.but:41 basic.but:42
+#, no-wrap
+msgid "default parameters, specifying"
+msgstr "DEFAULT PARAMETERS, SPECIFYING"
+
+#. type: IM
+#: basic.but:42
+#, no-wrap
+msgid "preferences, specifying default"
+msgstr "PREFERENCES, SPECIFYING DEFAULT"
+
+#. type: IM{#1}
+#: basic.but:44 basic.but:45
+#, no-wrap
+msgid "Unix"
+msgstr "UNIX"
+
+#. type: IM
+#: basic.but:45
+#, no-wrap
+msgid "Linux"
+msgstr "LINUX"
diff --git a/t/fmt/halibut/basic.pot b/t/fmt/halibut/basic.pot
new file mode 100644
index 0000000..739c156
--- /dev/null
+++ b/t/fmt/halibut/basic.pot
@@ -0,0 +1,121 @@
+# SOME DESCRIPTIVE TITLE
+# Copyright (C) YEAR Free Software Foundation, Inc.
+# This file is distributed under the same license as the PACKAGE package.
+# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
+#
+#, fuzzy
+msgid ""
+msgstr ""
+"Project-Id-Version: PACKAGE VERSION\n"
+"POT-Creation-Date: 2020-04-26 14:40+0200\n"
+"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
+"Language-Team: LANGUAGE <LL@li.org>\n"
+"Language: \n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+
+#. type: Plain text
+#: basic.but:2
+msgid "document title"
+msgstr ""
+
+#. type: Plain text
+#: basic.but:4
+msgid "\\cfg{text-filename}{puzzles.txt}"
+msgstr ""
+
+#. type: define
+#: basic.but:5
+#, no-wrap
+msgid "\\u2013{-}"
+msgstr ""
+
+#. type: Plain text
+#: basic.but:8 basic.but:24 basic.but:28 basic.but:32 basic.but:47
+msgid "Some text"
+msgstr ""
+
+#. type: Plain text
+#: basic.but:10
+msgid "Some text. See \\k{licence} for details."
+msgstr ""
+
+#. type: Plain text
+#: basic.but:12
+msgid "\\cfg{html-local-head}{<meta name=\"AppleTitle\" content=\"Puzzles Help\">}"
+msgstr ""
+
+#. type: Plain text
+#: basic.but:14
+msgid "Introduction"
+msgstr ""
+
+#. type: Plain text
+#: basic.but:18
+msgid ""
+"Text paragraph with some inline formatting. Here is some \\e{emphasised "
+"text}. And a \\dash sign. "
+"\\I{website}\\W{https://www.chiark.greenend.org.uk/~sgtatham/puzzles/}\\cw{https://www.chiark.greenend.org.uk/~sgtatham/puzzles/}."
+msgstr ""
+
+#. type: ii{#1}
+#: basic.but:20
+msgid "listing"
+msgstr ""
+
+#. type: Plain text
+#: basic.but:22
+msgid "\\ii\\e{New game} (\\q{N}, Ctrl+\\q{N})"
+msgstr ""
+
+#. type: Plain text
+#: basic.but:26
+msgid "\\ii\\e{Restart game}"
+msgstr ""
+
+#. type: Plain text
+#: basic.but:30
+msgid "\\ii\\e{Load}"
+msgstr ""
+
+#. type: Plain text
+#: basic.but:38
+msgid "paragraph text"
+msgstr ""
+
+#. type: IM{#1}
+#: basic.but:39
+msgid "command-line"
+msgstr ""
+
+#. type: IM
+#: basic.but:39
+#, no-wrap
+msgid "{command line} command line"
+msgstr ""
+
+#. type: IM{#1}
+#: basic.but:41 basic.but:42
+#, no-wrap
+msgid "default parameters, specifying"
+msgstr ""
+
+#. type: IM
+#: basic.but:42
+#, no-wrap
+msgid "preferences, specifying default"
+msgstr ""
+
+#. type: IM{#1}
+#: basic.but:44 basic.but:45
+#, no-wrap
+msgid "Unix"
+msgstr ""
+
+#. type: IM
+#: basic.but:45
+#, no-wrap
+msgid "Linux"
+msgstr ""
diff --git a/t/fmt/halibut/basic.trans b/t/fmt/halibut/basic.trans
new file mode 100644
index 0000000..bd59dbf
--- /dev/null
+++ b/t/fmt/halibut/basic.trans
@@ -0,0 +1,49 @@
+\# This file was generated with po4a. Translate the source file.
+
+\title DOCUMENT TITLE
+
+\cfg{text-filename}{puzzles.txt}
+
+\define{dash} \u2013{-}
+
+SOME TEXT
+
+\copyright SOME TEXT. See \k{licence} FOR DETAILS.
+
+\cfg{html-local-head}{<meta name="AppleTitle" content="PUZZLES HELP">}
+
+\C{intro} INTRODUCTION
+
+TEXT PARAGRAPH WITH SOME INLINE FORMATTING. HERE IS SOME \e{EMPHASISED
+TEXT}. AND A \dash SIGN.
+\I{website}\W{https://www.chiark.greenend.org.uk/~sgtatham/puzzles/}\cw{https://www.chiark.greenend.org.uk/~sgtatham/puzzles/}.
+
+\C{common} \ii{LISTING}
+
+\dt \ii\e{NEW GAME} (\q{N}, Ctrl+\q{N})
+
+\dd SOME TEXT
+
+\dt \ii\e{RESTART GAME}
+
+\dd SOME TEXT
+
+\dt \ii\e{LOAD}
+
+\dd SOME TEXT
+
+\lcont{
+
+PARAGRAPH TEXT
+
+}
+
+\IM{command-line}{COMMAND LINE} COMMAND LINE
+
+\IM{DEFAULT PARAMETERS, SPECIFYING} DEFAULT PARAMETERS, SPECIFYING
+\IM{DEFAULT PARAMETERS, SPECIFYING} PREFERENCES, SPECIFYING DEFAULT
+
+\IM{UNIX} UNIX
+\IM{UNIX} LINUX
+
+\versionid SOME TEXT
diff --git a/t/fmt/ini/basic.ini b/t/fmt/ini/basic.ini
new file mode 100644
index 0000000..558c348
--- /dev/null
+++ b/t/fmt/ini/basic.ini
@@ -0,0 +1,5 @@
+[section_header]
+key1="some value"
+key2="some other value"
+key3=one_word_value
+key4="toto\ttata\ntutu"
diff --git a/t/fmt/ini/basic.norm b/t/fmt/ini/basic.norm
new file mode 100644
index 0000000..558c348
--- /dev/null
+++ b/t/fmt/ini/basic.norm
@@ -0,0 +1,5 @@
+[section_header]
+key1="some value"
+key2="some other value"
+key3=one_word_value
+key4="toto\ttata\ntutu"
diff --git a/t/fmt/ini/basic.po b/t/fmt/ini/basic.po
new file mode 100644
index 0000000..1c1e245
--- /dev/null
+++ b/t/fmt/ini/basic.po
@@ -0,0 +1,35 @@
+# SOME DESCRIPTIVE TITLE
+# Copyright (C) YEAR Free Software Foundation, Inc.
+# This file is distributed under the same license as the PACKAGE package.
+# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
+#
+#, fuzzy
+msgid ""
+msgstr ""
+"Project-Id-Version: PACKAGE VERSION\n"
+"POT-Creation-Date: 2006-08-23 21:48+0200\n"
+"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
+"Language-Team: LANGUAGE <LL@li.org>\n"
+"Language: \n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+
+#. type: key1=
+#: basic.ini:2
+#, no-wrap
+msgid "some value"
+msgstr "SOME VALUE"
+
+#. type: key2=
+#: basic.ini:3
+#, no-wrap
+msgid "some other value"
+msgstr "SOME OTHER VALUE"
+
+#. type: key4=
+#: basic.ini:5
+#, no-wrap
+msgid "toto\\ttata\\ntutu"
+msgstr "TOTO\\tTATA\\nTUTU"
diff --git a/t/fmt/ini/basic.pot b/t/fmt/ini/basic.pot
new file mode 100644
index 0000000..db24433
--- /dev/null
+++ b/t/fmt/ini/basic.pot
@@ -0,0 +1,35 @@
+# SOME DESCRIPTIVE TITLE
+# Copyright (C) YEAR Free Software Foundation, Inc.
+# This file is distributed under the same license as the PACKAGE package.
+# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
+#
+#, fuzzy
+msgid ""
+msgstr ""
+"Project-Id-Version: PACKAGE VERSION\n"
+"POT-Creation-Date: 2006-08-23 21:48+0200\n"
+"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
+"Language-Team: LANGUAGE <LL@li.org>\n"
+"Language: \n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+
+#. type: key1=
+#: basic.ini:2
+#, no-wrap
+msgid "some value"
+msgstr ""
+
+#. type: key2=
+#: basic.ini:3
+#, no-wrap
+msgid "some other value"
+msgstr ""
+
+#. type: key4=
+#: basic.ini:5
+#, no-wrap
+msgid "toto\\ttata\\ntutu"
+msgstr ""
diff --git a/t/fmt/ini/basic.trans b/t/fmt/ini/basic.trans
new file mode 100644
index 0000000..04b5a88
--- /dev/null
+++ b/t/fmt/ini/basic.trans
@@ -0,0 +1,5 @@
+[section_header]
+key1="SOME VALUE"
+key2="SOME OTHER VALUE"
+key3=one_word_value
+key4="TOTO\tTATA\nTUTU"
diff --git a/t/fmt/man/dots-errors1.man b/t/fmt/man/dots-errors1.man
new file mode 100644
index 0000000..db9953e
--- /dev/null
+++ b/t/fmt/man/dots-errors1.man
@@ -0,0 +1,5 @@
+.TH dot2 1
+.\" Let's play a litte bit more with dots
+.\" \. is an escaped dot (thus it is equivalent to a dot)
+\.This line won't be displayed
+
diff --git a/t/fmt/man/dots-errors1.norm.stderr b/t/fmt/man/dots-errors1.norm.stderr
new file mode 100644
index 0000000..0d25290
--- /dev/null
+++ b/t/fmt/man/dots-errors1.norm.stderr
@@ -0,0 +1,2 @@
+dots-errors1.man:4: (po4a::man)
+Unknown macro '.This line won't be displayed'. Remove it from the document, or refer to the Locale::Po4a::Man manpage to see how po4a can handle new macros.
diff --git a/t/fmt/man/dots-errors2.man b/t/fmt/man/dots-errors2.man
new file mode 100644
index 0000000..4ffe782
--- /dev/null
+++ b/t/fmt/man/dots-errors2.man
@@ -0,0 +1,5 @@
+.TH dot3 1
+.\" Let's play a litte bit more with dots
+.\" \. is an escaped dot (thus it is equivalent to a dot)
+.This line won't be displayed
+
diff --git a/t/fmt/man/dots-errors2.norm.stderr b/t/fmt/man/dots-errors2.norm.stderr
new file mode 100644
index 0000000..6d06c50
--- /dev/null
+++ b/t/fmt/man/dots-errors2.norm.stderr
@@ -0,0 +1,2 @@
+dots-errors2.man:4: (po4a::man)
+Unknown macro '.This line won't be displayed'. Remove it from the document, or refer to the Locale::Po4a::Man manpage to see how po4a can handle new macros.
diff --git a/t/fmt/man/dots-errors3.man b/t/fmt/man/dots-errors3.man
new file mode 100644
index 0000000..6bb0e32
--- /dev/null
+++ b/t/fmt/man/dots-errors3.man
@@ -0,0 +1,5 @@
+.TH dot4 1
+.\" Let's play a litte bit more with dots
+. I think po4a should warn, as for:
+.This line won't be displayed
+
diff --git a/t/fmt/man/dots-errors3.norm.stderr b/t/fmt/man/dots-errors3.norm.stderr
new file mode 100644
index 0000000..16baf93
--- /dev/null
+++ b/t/fmt/man/dots-errors3.norm.stderr
@@ -0,0 +1,2 @@
+dots-errors3.man:4: (po4a::man)
+Unknown macro '.This line won't be displayed'. Remove it from the document, or refer to the Locale::Po4a::Man manpage to see how po4a can handle new macros.
diff --git a/t/fmt/man/dots1.man b/t/fmt/man/dots1.man
new file mode 100644
index 0000000..8d1ab1c
--- /dev/null
+++ b/t/fmt/man/dots1.man
@@ -0,0 +1,31 @@
+.TH test 1 test test
+.SH FOO
+
+.\" There is no problem here
+.IR 'foo1
+.IR .foo1
+
+\fI'foo2\fP
+\fI.foo2\fP
+
+.\" bug in a groff page:
+.br
+\fI.foo3\fP
+
+.br
+\fI'foo3\fP
+
+.\" This is correct:
+.br
+\fI\&.foo4\fP
+
+.br
+\fI\&'foo4\fP
+
+.\" po4a should not generate such a buggy page. It should add a \&
+.br
+.I .foo5
+
+.br
+.I 'foo5
+
diff --git a/t/fmt/man/dots1.norm b/t/fmt/man/dots1.norm
new file mode 100644
index 0000000..f44f59b
--- /dev/null
+++ b/t/fmt/man/dots1.norm
@@ -0,0 +1,34 @@
+.\"*******************************************************************
+.\"
+.\" This file was generated with po4a. Translate the source file.
+.\"
+.\"*******************************************************************
+.TH test 1 test test
+.SH FOO
+
+.\" There is no problem here
+\&\fI'foo1\fP \fI.foo1\fP
+
+\&\fI'foo2\fP \fI.foo2\fP
+
+.\" bug in a groff page:
+.br
+\&\fI.foo3\fP
+
+.br
+\&\fI'foo3\fP
+
+.\" This is correct:
+.br
+\fI\&.foo4\fP
+
+.br
+\fI\&'foo4\fP
+
+.\" po4a should not generate such a buggy page. It should add a \&
+.br
+\&\fI.foo5\fP
+
+.br
+\&\fI'foo5\fP
+
diff --git a/t/fmt/man/dots1.po b/t/fmt/man/dots1.po
new file mode 100644
index 0000000..38b406f
--- /dev/null
+++ b/t/fmt/man/dots1.po
@@ -0,0 +1,73 @@
+# SOME DESCRIPTIVE TITLE
+# Copyright (C) YEAR Free Software Foundation, Inc.
+# This file is distributed under the same license as the PACKAGE package.
+# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
+#
+#, fuzzy
+msgid ""
+msgstr ""
+"Project-Id-Version: PACKAGE VERSION\n"
+"POT-Creation-Date: 2004-11-28 20:42+0100\n"
+"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
+"Language-Team: LANGUAGE <LL@li.org>\n"
+"Language: \n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+
+#. type: TH
+#: dots1.man:1
+#, no-wrap
+msgid "test"
+msgstr "TEST"
+
+#. type: SH
+#: dots1.man:2
+#, no-wrap
+msgid "FOO"
+msgstr ""
+
+#. There is no problem here
+#. type: Plain text
+#: dots1.man:7
+msgid "I<'foo1> I<.foo1>"
+msgstr "I<'FOO1> I<.FOO1>"
+
+#. type: Plain text
+#: dots1.man:10
+msgid "I<'foo2> I<.foo2>"
+msgstr "I<'FOO2> I<.FOO2>"
+
+#. type: Plain text
+#: dots1.man:14
+msgid "I<.foo3>"
+msgstr "I<.FOO3>"
+
+#. type: Plain text
+#: dots1.man:17
+msgid "I<'foo3>"
+msgstr "I<'FOO3>"
+
+#. type: Plain text
+#: dots1.man:21
+msgid "I<\\&.foo4>"
+msgstr "I<\\&.FOO4>"
+
+#. type: Plain text
+#: dots1.man:24
+msgid "I<\\&'foo4>"
+msgstr "I<\\&'FOO4>"
+
+#. type: Plain text
+#: dots1.man:28
+msgid "I<.foo5>"
+msgstr "I<.FOO5>"
+
+#. type: Plain text
+#: dots1.man:31
+msgid "I<'foo5>"
+msgstr "I<'FOO5>"
+
+#~ msgid "foo"
+#~ msgstr "FOO"
diff --git a/t/fmt/man/dots1.pot b/t/fmt/man/dots1.pot
new file mode 100644
index 0000000..5cae7e2
--- /dev/null
+++ b/t/fmt/man/dots1.pot
@@ -0,0 +1,70 @@
+# SOME DESCRIPTIVE TITLE
+# Copyright (C) YEAR Free Software Foundation, Inc.
+# This file is distributed under the same license as the PACKAGE package.
+# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
+#
+#, fuzzy
+msgid ""
+msgstr ""
+"Project-Id-Version: PACKAGE VERSION\n"
+"POT-Creation-Date: 2004-11-28 20:42+0100\n"
+"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
+"Language-Team: LANGUAGE <LL@li.org>\n"
+"Language: \n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+
+#. type: TH
+#: dots1.man:1
+#, no-wrap
+msgid "test"
+msgstr ""
+
+#. type: SH
+#: dots1.man:2
+#, no-wrap
+msgid "FOO"
+msgstr ""
+
+#. There is no problem here
+#. type: Plain text
+#: dots1.man:7
+msgid "I<'foo1> I<.foo1>"
+msgstr ""
+
+#. type: Plain text
+#: dots1.man:10
+msgid "I<'foo2> I<.foo2>"
+msgstr ""
+
+#. type: Plain text
+#: dots1.man:14
+msgid "I<.foo3>"
+msgstr ""
+
+#. type: Plain text
+#: dots1.man:17
+msgid "I<'foo3>"
+msgstr ""
+
+#. type: Plain text
+#: dots1.man:21
+msgid "I<\\&.foo4>"
+msgstr ""
+
+#. type: Plain text
+#: dots1.man:24
+msgid "I<\\&'foo4>"
+msgstr ""
+
+#. type: Plain text
+#: dots1.man:28
+msgid "I<.foo5>"
+msgstr ""
+
+#. type: Plain text
+#: dots1.man:31
+msgid "I<'foo5>"
+msgstr ""
diff --git a/t/fmt/man/dots1.trans b/t/fmt/man/dots1.trans
new file mode 100644
index 0000000..8ff8724
--- /dev/null
+++ b/t/fmt/man/dots1.trans
@@ -0,0 +1,34 @@
+.\"*******************************************************************
+.\"
+.\" This file was generated with po4a. Translate the source file.
+.\"
+.\"*******************************************************************
+.TH TEST 1 TEST TEST
+.SH FOO
+
+.\" There is no problem here
+\&\fI'FOO1\fP \fI.FOO1\fP
+
+\&\fI'FOO2\fP \fI.FOO2\fP
+
+.\" bug in a groff page:
+.br
+\&\fI.FOO3\fP
+
+.br
+\&\fI'FOO3\fP
+
+.\" This is correct:
+.br
+\fI\&.FOO4\fP
+
+.br
+\fI\&'FOO4\fP
+
+.\" po4a should not generate such a buggy page. It should add a \&
+.br
+\&\fI.FOO5\fP
+
+.br
+\&\fI'FOO5\fP
+
diff --git a/t/fmt/man/dots2.man b/t/fmt/man/dots2.man
new file mode 100644
index 0000000..2d65ca3
--- /dev/null
+++ b/t/fmt/man/dots2.man
@@ -0,0 +1,6 @@
+.TH dots2 1
+.\" Let's play a litte bit more with dots
+.\" \. is an escaped dot (thus it is equivalent to a dot)
+Hello
+\. This line will be completely ignored
+world
diff --git a/t/fmt/man/dots2.norm b/t/fmt/man/dots2.norm
new file mode 100644
index 0000000..cb1114c
--- /dev/null
+++ b/t/fmt/man/dots2.norm
@@ -0,0 +1,11 @@
+.\"*******************************************************************
+.\"
+.\" This file was generated with po4a. Translate the source file.
+.\"
+.\"*******************************************************************
+.TH dots2 1
+.\" Let's play a litte bit more with dots
+.\" . is an escaped dot (thus it is equivalent to a dot)
+Hello
+. This line will be completely ignored
+world
diff --git a/t/fmt/man/dots2.po b/t/fmt/man/dots2.po
new file mode 100644
index 0000000..62f667e
--- /dev/null
+++ b/t/fmt/man/dots2.po
@@ -0,0 +1,35 @@
+# SOME DESCRIPTIVE TITLE
+# Copyright (C) YEAR Free Software Foundation, Inc.
+# This file is distributed under the same license as the PACKAGE package.
+# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
+#
+#, fuzzy
+msgid ""
+msgstr ""
+"Project-Id-Version: PACKAGE VERSION\n"
+"POT-Creation-Date: 2005-02-25 13:57+0100\n"
+"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
+"Language-Team: LANGUAGE <LL@li.org>\n"
+"Language: \n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+
+#. type: TH
+#: dots2.man:1
+#, no-wrap
+msgid "dots2"
+msgstr "DOTS2"
+
+#. Let's play a litte bit more with dots
+#. . is an escaped dot (thus it is equivalent to a dot)
+#. type: Plain text
+#: dots2.man:5
+msgid "Hello"
+msgstr "HELLO"
+
+#. type: Plain text
+#: dots2.man:6
+msgid "world"
+msgstr "WORLD"
diff --git a/t/fmt/man/dots2.pot b/t/fmt/man/dots2.pot
new file mode 100644
index 0000000..db87f69
--- /dev/null
+++ b/t/fmt/man/dots2.pot
@@ -0,0 +1,35 @@
+# SOME DESCRIPTIVE TITLE
+# Copyright (C) YEAR Free Software Foundation, Inc.
+# This file is distributed under the same license as the PACKAGE package.
+# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
+#
+#, fuzzy
+msgid ""
+msgstr ""
+"Project-Id-Version: PACKAGE VERSION\n"
+"POT-Creation-Date: 2005-02-25 13:57+0100\n"
+"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
+"Language-Team: LANGUAGE <LL@li.org>\n"
+"Language: \n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+
+#. type: TH
+#: dots2.man:1
+#, no-wrap
+msgid "dots2"
+msgstr ""
+
+#. Let's play a litte bit more with dots
+#. . is an escaped dot (thus it is equivalent to a dot)
+#. type: Plain text
+#: dots2.man:5
+msgid "Hello"
+msgstr ""
+
+#. type: Plain text
+#: dots2.man:6
+msgid "world"
+msgstr ""
diff --git a/t/fmt/man/dots2.trans b/t/fmt/man/dots2.trans
new file mode 100644
index 0000000..91c7f36
--- /dev/null
+++ b/t/fmt/man/dots2.trans
@@ -0,0 +1,11 @@
+.\"*******************************************************************
+.\"
+.\" This file was generated with po4a. Translate the source file.
+.\"
+.\"*******************************************************************
+.TH DOTS2 1
+.\" Let's play a litte bit more with dots
+.\" . is an escaped dot (thus it is equivalent to a dot)
+HELLO
+. This line will be completely ignored
+WORLD
diff --git a/t/fmt/man/escapes.man b/t/fmt/man/escapes.man
new file mode 100644
index 0000000..45d5968
--- /dev/null
+++ b/t/fmt/man/escapes.man
@@ -0,0 +1,45 @@
+.TH test 1
+.SH Section1
+.nf
+ [type: sgml] doc/my_stuff.sgml fr:doc/fr/mon_truc.sgml \\
+ de:doc/de/mein_kram.sgml
+ [type: pod] script fr:doc/fr/script.1 de:doc/de/script.1 \e
+ add_fr:doc/l10n/script.fr.add
+.fi
+
+.SH Section2
+\fI/etc/foo.conf\fR \ - foo configuration
+.br
+\fI/var/log/foo\fR \ - foo log file
+
+foo\c
+bar
+
+foo \c
+bar
+
+foo\c
+ b\fPa\fPr
+
+.B foo\c
+bar
+
+.I foo \c
+bar
+
+.BI foo\c
+b\fPa\fPr
+
+.IB foo \c
+b\fPa\fPr
+
+.BR foo\c
+ b\fPa\fPr
+
+.TP
+foo\c
+bar \c
+baz
+
+.RB [ \-d\~\c
+.IR ctext ]
diff --git a/t/fmt/man/escapes.norm b/t/fmt/man/escapes.norm
new file mode 100644
index 0000000..9e3c4f9
--- /dev/null
+++ b/t/fmt/man/escapes.norm
@@ -0,0 +1,39 @@
+.\"*******************************************************************
+.\"
+.\" This file was generated with po4a. Translate the source file.
+.\"
+.\"*******************************************************************
+.TH test 1
+.SH Section1
+.nf
+ [type: sgml] doc/my_stuff.sgml fr:doc/fr/mon_truc.sgml \e
+ de:doc/de/mein_kram.sgml
+ [type: pod] script fr:doc/fr/script.1 de:doc/de/script.1 \e
+ add_fr:doc/l10n/script.fr.add
+.fi
+
+.SH Section2
+\fI/etc/foo.conf\fP \ \- foo configuration
+.br
+\fI/var/log/foo\fP \ \- foo log file
+
+foobar
+
+foo bar
+
+foo b\fIa\fPr
+
+\fBfoobar\fP
+
+\fIfoo bar\fP
+
+\fBfoo\fPb\fBa\fPr
+
+\fIfoo\fPb\fBa\fPr
+
+\fBfoo\fP b\fBa\fPr
+
+.TP
+foobar baz
+
+[\fB\-d\ \fP\fIctext\fP]
diff --git a/t/fmt/man/escapes.po b/t/fmt/man/escapes.po
new file mode 100644
index 0000000..318e0f9
--- /dev/null
+++ b/t/fmt/man/escapes.po
@@ -0,0 +1,111 @@
+# SOME DESCRIPTIVE TITLE
+# Copyright (C) YEAR Free Software Foundation, Inc.
+# This file is distributed under the same license as the PACKAGE package.
+# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
+#
+#, fuzzy
+msgid ""
+msgstr ""
+"Project-Id-Version: PACKAGE VERSION\n"
+"POT-Creation-Date: 2006-06-04 2:55+0200\n"
+"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
+"Language-Team: LANGUAGE <LL@li.org>\n"
+"Language: \n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+
+#. type: TH
+#: escapes.man:1
+#, no-wrap
+msgid "test"
+msgstr "TEST"
+
+#. type: SH
+#: escapes.man:2
+#, no-wrap
+msgid "Section1"
+msgstr "SECTION1"
+
+#. type: Plain text
+#: escapes.man:8
+#, no-wrap
+msgid ""
+" [type: sgml] doc/my_stuff.sgml fr:doc/fr/mon_truc.sgml \\e\n"
+" de:doc/de/mein_kram.sgml\n"
+" [type: pod] script fr:doc/fr/script.1 de:doc/de/script.1 \\e\n"
+" add_fr:doc/l10n/script.fr.add\n"
+msgstr ""
+" [TYPE: SGML] DOC/MY_STUFF.SGML FR:DOC/FR/MON_TRUC.SGML \\e\n"
+" DE:DOC/DE/MEIN_KRAM.SGML\n"
+" [TYPE: POD] SCRIPT FR:DOC/FR/SCRIPT.1 DE:DOC/DE/SCRIPT.1 \\e\n"
+" ADD_FR:DOC/L10N/SCRIPT.FR.ADD\n"
+
+#. type: SH
+#: escapes.man:10
+#, no-wrap
+msgid "Section2"
+msgstr "SECTION2"
+
+#. type: Plain text
+#: escapes.man:12
+msgid "I</etc/foo.conf> \\\t- foo configuration"
+msgstr "I</ETC/FOO.CONF> \\\t- FOO CONFIGURATION"
+
+#. type: Plain text
+#: escapes.man:14
+msgid "I</var/log/foo> \\\t- foo log file"
+msgstr "I</VAR/LOG/FOO> \\\t- FOO LOG FILE"
+
+#. type: Plain text
+#: escapes.man:17
+msgid "foobar"
+msgstr "FOOBAR"
+
+#. type: Plain text
+#: escapes.man:20
+msgid "foo bar"
+msgstr "FOO BAR"
+
+#. type: Plain text
+#: escapes.man:23
+#, no-wrap
+msgid "foo bI<a>r\n"
+msgstr "FOO BI<A>R\n"
+
+#. type: Plain text
+#: escapes.man:26
+msgid "B<foobar>"
+msgstr "B<FOOBAR>"
+
+#. type: Plain text
+#: escapes.man:29
+msgid "I<foo bar>"
+msgstr "I<FOO BAR>"
+
+#. type: Plain text
+#: escapes.man:32
+msgid "B<foo>bB<a>r"
+msgstr "B<FOO>BB<A>R"
+
+#. type: Plain text
+#: escapes.man:35
+msgid "I<foo>bB<a>r"
+msgstr "I<FOO>BB<A>R"
+
+#. type: Plain text
+#: escapes.man:38
+msgid "B<foo> bB<a>r"
+msgstr "B<FOO> BB<A>R"
+
+#. type: TP
+#: escapes.man:39
+#, no-wrap
+msgid "foobar baz"
+msgstr "FOOBAR BAZ"
+
+#. type: Plain text
+#: escapes.man:45
+msgid "[B<-d\\ >I<ctext>]"
+msgstr "[B<-D\\ >I<CTEXT>]"
diff --git a/t/fmt/man/escapes.pot b/t/fmt/man/escapes.pot
new file mode 100644
index 0000000..cbcffee
--- /dev/null
+++ b/t/fmt/man/escapes.pot
@@ -0,0 +1,107 @@
+# SOME DESCRIPTIVE TITLE
+# Copyright (C) YEAR Free Software Foundation, Inc.
+# This file is distributed under the same license as the PACKAGE package.
+# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
+#
+#, fuzzy
+msgid ""
+msgstr ""
+"Project-Id-Version: PACKAGE VERSION\n"
+"POT-Creation-Date: 2006-06-04 2:55+0200\n"
+"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
+"Language-Team: LANGUAGE <LL@li.org>\n"
+"Language: \n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+
+#. type: TH
+#: escapes.man:1
+#, no-wrap
+msgid "test"
+msgstr ""
+
+#. type: SH
+#: escapes.man:2
+#, no-wrap
+msgid "Section1"
+msgstr ""
+
+#. type: Plain text
+#: escapes.man:8
+#, no-wrap
+msgid ""
+" [type: sgml] doc/my_stuff.sgml fr:doc/fr/mon_truc.sgml \\e\n"
+" de:doc/de/mein_kram.sgml\n"
+" [type: pod] script fr:doc/fr/script.1 de:doc/de/script.1 \\e\n"
+" add_fr:doc/l10n/script.fr.add\n"
+msgstr ""
+
+#. type: SH
+#: escapes.man:10
+#, no-wrap
+msgid "Section2"
+msgstr ""
+
+#. type: Plain text
+#: escapes.man:12
+msgid "I</etc/foo.conf> \\\t- foo configuration"
+msgstr ""
+
+#. type: Plain text
+#: escapes.man:14
+msgid "I</var/log/foo> \\\t- foo log file"
+msgstr ""
+
+#. type: Plain text
+#: escapes.man:17
+msgid "foobar"
+msgstr ""
+
+#. type: Plain text
+#: escapes.man:20
+msgid "foo bar"
+msgstr ""
+
+#. type: Plain text
+#: escapes.man:23
+#, no-wrap
+msgid "foo bI<a>r\n"
+msgstr ""
+
+#. type: Plain text
+#: escapes.man:26
+msgid "B<foobar>"
+msgstr ""
+
+#. type: Plain text
+#: escapes.man:29
+msgid "I<foo bar>"
+msgstr ""
+
+#. type: Plain text
+#: escapes.man:32
+msgid "B<foo>bB<a>r"
+msgstr ""
+
+#. type: Plain text
+#: escapes.man:35
+msgid "I<foo>bB<a>r"
+msgstr ""
+
+#. type: Plain text
+#: escapes.man:38
+msgid "B<foo> bB<a>r"
+msgstr ""
+
+#. type: TP
+#: escapes.man:39
+#, no-wrap
+msgid "foobar baz"
+msgstr ""
+
+#. type: Plain text
+#: escapes.man:45
+msgid "[B<-d\\ >I<ctext>]"
+msgstr ""
diff --git a/t/fmt/man/escapes.trans b/t/fmt/man/escapes.trans
new file mode 100644
index 0000000..1160b69
--- /dev/null
+++ b/t/fmt/man/escapes.trans
@@ -0,0 +1,39 @@
+.\"*******************************************************************
+.\"
+.\" This file was generated with po4a. Translate the source file.
+.\"
+.\"*******************************************************************
+.TH TEST 1
+.SH SECTION1
+.nf
+ [TYPE: SGML] DOC/MY_STUFF.SGML FR:DOC/FR/MON_TRUC.SGML \e
+ DE:DOC/DE/MEIN_KRAM.SGML
+ [TYPE: POD] SCRIPT FR:DOC/FR/SCRIPT.1 DE:DOC/DE/SCRIPT.1 \e
+ ADD_FR:DOC/L10N/SCRIPT.FR.ADD
+.fi
+
+.SH SECTION2
+\fI/ETC/FOO.CONF\fP \ \- FOO CONFIGURATION
+.br
+\fI/VAR/LOG/FOO\fP \ \- FOO LOG FILE
+
+FOOBAR
+
+FOO BAR
+
+FOO B\fIA\fPR
+
+\fBFOOBAR\fP
+
+\fIFOO BAR\fP
+
+\fBFOO\fPB\fBA\fPR
+
+\fIFOO\fPB\fBA\fPR
+
+\fBFOO\fP B\fBA\fPR
+
+.TP
+FOOBAR BAZ
+
+[\fB\-D\ \fP\fICTEXT\fP]
diff --git a/t/fmt/man/fonts.man b/t/fmt/man/fonts.man
new file mode 100644
index 0000000..b9c6b32
--- /dev/null
+++ b/t/fmt/man/fonts.man
@@ -0,0 +1,276 @@
+.TH FONTS 1
+.SH NAME
+fonts \- various nasty font usages
+
+.SH b\fPr\fIi
+r
+
+r1
+
+r
+.I
+.SH b\fPi\fIi
+r
+
+r2
+
+r
+\fI
+.SH b\fPi\fIi
+r
+
+r3
+
+r
+.I
+.SH
+b\fPi\fIi
+r
+
+r4
+
+r
+.I i\fPr\fPi
+r
+
+r5
+
+r
+.I
+i\fPr\fPi
+r
+
+r6
+
+r
+.I
+i\fPr
+r
+
+r7
+
+r
+.I
+.TP
+i\fPr\fPi
+r
+
+.P
+r8
+
+r
+\fI
+.TP
+i\fPr\fPi
+r
+
+r9
+
+r
+.I
+.B
+.TP
+b\fPi\fPb
+r
+
+r10
+
+r
+.I
+.B
+b\fPi\fPb
+r
+
+r11
+
+.\" This is used in bash.1, and is not supported at this time.
+.\"
+.\"r
+.\".I
+.\".if n nroff
+.\".if t troff
+.\"
+.\" '.I' tells that only one line will use the I font.
+.\" and it's very difficult to predict the number of line that must be affected
+.\" in the case of .if (In this case, the font mut be reverted to the previous
+.\" one after the second '.if'.
+
+r
+.I
+i\fPr\fBb
+r
+
+r12
+
+\fBb
+.I
+i\fPb
+r
+
+r13
+
+.BI b i
+r\fPi\fRr
+
+
+r14
+
+.BI b i
+\fPi\fPr
+
+r15
+
+.BI
+r\fPi\fPr
+
+r16
+
+.I
+.P
+r\fPi\fPr
+
+r17
+
+\fI
+.P
+r\fPi\fPr
+
+r18
+
+\fI
+.PP
+r\fPi\fPr
+
+r19
+
+.I
+.PP
+r\fPi\fPr
+
+r20
+
+\fI
+.LP
+r\fPi\fPr
+
+r21
+
+.I
+.LP
+r\fPi\fPr
+
+r22
+
+.B
+.TP
+.I
+i\fPb\fPi
+r
+
+r23
+
+.SH
+.I
+i\fPb\fPi
+r
+
+r24
+
+.I
+.SH
+.B
+b\fPb\fPb
+r
+
+r25
+
+.IP r
+r
+
+r26
+
+.I
+.IP i
+r\fPi\fPr
+
+r27
+
+.I
+.B
+.IP b\fPi
+r\fPi\fPr
+
+r28
+
+r
+.I
+.B
+b\fPi
+r
+
+.P
+r29
+
+r
+.BR b\fPi r b
+r\fPb\fPr
+
+.\" The ".I" adds another \fR at the end of the .BR line
+r
+.I
+.BR b\fPi r b
+r\fPr\fPr
+
+r30
+
+r
+.I
+.BI b
+.TP
+r\fPr\fPr
+r
+
+.P
+r31
+
+r
+\fI\c
+.B
+b\fPi\fPb
+r
+
+r32
+
+r
+.BR b r
+r\fPr
+.BR b r b
+r\fPb\fPr
+
+r33
+
+r
+.I
+i
+r\fPi\fPr
+
+r34
+
+r
+.B
+.I
+i
+r\fPi\fPr
+
+r35
+
+a <
+.B foo
+
+r36
+
+.TP
+.I " "
+foo
+
+r37
diff --git a/t/fmt/man/fonts.norm b/t/fmt/man/fonts.norm
new file mode 100644
index 0000000..d526f85
--- /dev/null
+++ b/t/fmt/man/fonts.norm
@@ -0,0 +1,218 @@
+.\"*******************************************************************
+.\"
+.\" This file was generated with po4a. Translate the source file.
+.\"
+.\"*******************************************************************
+.TH FONTS 1
+.SH NAME
+fonts \- various nasty font usages
+
+.SH b\fRr\fP\fIi\fP
+r
+
+r1
+
+r
+.SH b\fIii\fP
+r
+
+r2
+
+r
+.SH b\fIii\fP
+r
+
+r3
+
+r
+.SH b\fIii\fP
+r
+
+r4
+
+r \fIi\fPr\fIi\fP r
+
+r5
+
+r \fIi\fPr\fIi\fP r
+
+r6
+
+r \fIi\fPr r
+
+r7
+
+r
+.TP
+\fIi\fPr\fIi\fP
+r
+
+.P
+r8
+
+r
+.TP
+\fIi\fPr\fIi\fP
+r
+
+r9
+
+r
+.TP
+\fBb\fP\fIi\fP\fBb\fP
+r
+
+r10
+
+r \fBb\fP\fIi\fP\fBb\fP r
+
+r11
+
+
+.\" This is used in bash.1, and is not supported at this time.
+.\"
+.\"r
+.\".I
+.\".if n nroff
+.\".if t troff
+.\"
+.\" '.I' tells that only one line will use the I font.
+.\" and it's very difficult to predict the number of line that must be affected
+.\" in the case of .if (In this case, the font mut be reverted to the previous
+.\" one after the second '.if'.
+r \fIi\fPr\fBb\fP r
+
+r12
+
+\fBb \fP\fIi\fP\fBb\fP r
+
+r13
+
+\fBb\fP\fIi\fP r\fIi\fPr
+
+
+r14
+
+\fBb\fP\fIi\fP \fIi\fPr
+
+r15
+
+
+r\fIi\fPr
+
+r16
+
+\fI
+.P
+r\fIi\fPr
+
+r17
+
+\fI
+.P
+r\fIi\fPr
+
+r18
+
+\fI
+.PP
+r\fIi\fPr
+
+r19
+
+\fI
+.PP
+r\fIi\fPr
+
+r20
+
+\fI
+.LP
+r\fIi\fPr
+
+r21
+
+\fI
+.LP
+r\fIi\fPr
+
+r22
+
+\fB
+.TP
+\fIi\fP\fBb\fP\fIi\fP
+r
+
+r23
+
+.SH \fIi\fPb\fIi\fP
+r
+
+r24
+
+\fI
+.SH bbb
+r
+
+r25
+
+.IP r
+r
+
+r26
+
+.IP \fIi\fP
+r\fIi\fPr
+
+r27
+
+.IP \fBb\fP\fIi\fP
+r\fIi\fPr
+
+r28
+
+r \fBb\fP\fIi\fP r
+
+.P
+r29
+
+r \fBb\fPir\fBb\fP r\fBb\fPr
+
+.\" The ".I" adds another \fR at the end of the .BR line
+r \fBb\fP\fIi\fPr\fBb\fP rrr
+
+r30
+
+r \fBb\fP
+.TP
+rrr
+r
+
+.P
+r31
+
+r \fBb\fP\fIi\fP\fBb\fP r
+
+r32
+
+r \fBb\fPr rr \fBb\fPr\fBb\fP r\fBb\fPr
+
+r33
+
+r \fIi\fP r\fIi\fPr
+
+r34
+
+r \fIi\fP r\fIi\fPr
+
+r35
+
+a < \fBfoo\fP
+
+r36
+
+.TP
+\fI\& \&\fR
+foo
+
+r37
diff --git a/t/fmt/man/fonts.po b/t/fmt/man/fonts.po
new file mode 100644
index 0000000..5be0cb4
--- /dev/null
+++ b/t/fmt/man/fonts.po
@@ -0,0 +1,381 @@
+# SOME DESCRIPTIVE TITLE
+# Copyright (C) YEAR Free Software Foundation, Inc.
+# This file is distributed under the same license as the PACKAGE package.
+# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
+#
+#, fuzzy
+msgid ""
+msgstr ""
+"Project-Id-Version: PACKAGE VERSION\n"
+"POT-Creation-Date: 2006-09-05 21:42+0200\n"
+"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
+"Language-Team: LANGUAGE <LL@li.org>\n"
+"Language: \n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+
+#. type: TH
+#: fonts.man:1
+#, no-wrap
+msgid "FONTS"
+msgstr "FONTS"
+
+#. type: SH
+#: fonts.man:2
+#, no-wrap
+msgid "NAME"
+msgstr "NAME"
+
+#. type: Plain text
+#: fonts.man:4
+msgid "fonts - various nasty font usages"
+msgstr "FONTS - VARIOUS NASTY FONT USAGES"
+
+#. type: SH
+#: fonts.man:5
+#, no-wrap
+msgid "bR<r>I<i>"
+msgstr "BR<R>I<I>"
+
+#. type: Plain text
+#: fonts.man:7 fonts.man:12 fonts.man:14 fonts.man:19 fonts.man:21 fonts.man:26
+#: fonts.man:29 fonts.man:54 fonts.man:57 fonts.man:63 fonts.man:66
+#: fonts.man:72 fonts.man:75 fonts.man:169 fonts.man:176 fonts.man:184
+#: fonts.man:187 fonts.man:189 fonts.man:232
+#, no-wrap
+msgid "r"
+msgstr "R"
+
+#. type: Plain text
+#: fonts.man:9
+msgid "r1"
+msgstr "R1"
+
+#. type: SH
+#: fonts.man:12 fonts.man:19 fonts.man:26
+#, no-wrap
+msgid "bI<ii>"
+msgstr "BI<II>"
+
+#. type: Plain text
+#: fonts.man:16
+msgid "r2"
+msgstr "R2"
+
+#. type: Plain text
+#: fonts.man:23
+msgid "r3"
+msgstr "R3"
+
+#. type: Plain text
+#: fonts.man:31
+msgid "r4"
+msgstr "R4"
+
+#. type: Plain text
+#: fonts.man:35 fonts.man:42
+msgid "r I<i>rI<i> r"
+msgstr "R I<I>RI<I> R"
+
+#. type: Plain text
+#: fonts.man:37
+msgid "r5"
+msgstr "R5"
+
+#. type: Plain text
+#: fonts.man:44
+msgid "r6"
+msgstr "R6"
+
+#. type: Plain text
+#: fonts.man:49
+msgid "r I<i>r r"
+msgstr "R I<I>R R"
+
+#. type: Plain text
+#: fonts.man:51
+msgid "r7"
+msgstr "R7"
+
+#. type: TP
+#: fonts.man:54 fonts.man:63
+#, no-wrap
+msgid "I<i>rI<i>"
+msgstr "I<I>RI<I>"
+
+#. type: Plain text
+#: fonts.man:60
+msgid "r8"
+msgstr "R8"
+
+#. type: Plain text
+#: fonts.man:68
+msgid "r9"
+msgstr "R9"
+
+#. type: TP
+#: fonts.man:72
+#, no-wrap
+msgid "B<b>I<i>B<b>"
+msgstr "B<B>I<I>B<B>"
+
+#. type: Plain text
+#: fonts.man:77
+msgid "r10"
+msgstr "R10"
+
+#. type: Plain text
+#: fonts.man:83 fonts.man:241
+msgid "r B<b>I<i>B<b> r"
+msgstr "R B<B>I<I>B<B> R"
+
+#. type: Plain text
+#: fonts.man:85
+msgid "r11"
+msgstr "R11"
+
+#. This is used in bash.1, and is not supported at this time.
+#
+#. r
+#. .I
+#. .if n nroff
+#. .if t troff
+#
+#. '.I' tells that only one line will use the I font.
+#. and it's very difficult to predict the number of line that must be affected
+#. in the case of .if (In this case, the font mut be reverted to the previous
+#. one after the second '.if'.
+#. type: Plain text
+#: fonts.man:102
+msgid "r I<i>rB<b> r"
+msgstr "R I<I>RB<B> R"
+
+#. type: Plain text
+#: fonts.man:104
+msgid "r12"
+msgstr "R12"
+
+#. type: Plain text
+#: fonts.man:109
+msgid "B<b >I<i>B<b> r"
+msgstr "B<B >I<I>B<B> R"
+
+#. type: Plain text
+#: fonts.man:111
+msgid "r13"
+msgstr "R13"
+
+#. type: Plain text
+#: fonts.man:114
+msgid "B<b>I<i> rI<i>r"
+msgstr "B<B>I<I> RI<I>R"
+
+#. type: Plain text
+#: fonts.man:117
+msgid "r14"
+msgstr "R14"
+
+#. type: Plain text
+#: fonts.man:120
+msgid "B<b>I<i> I<i>r"
+msgstr "B<B>I<I> I<I>R"
+
+#. type: Plain text
+#: fonts.man:122
+msgid "r15"
+msgstr "R15"
+
+#. type: Plain text
+#: fonts.man:125 fonts.man:131 fonts.man:137 fonts.man:143 fonts.man:149
+#: fonts.man:155 fonts.man:161 fonts.man:195 fonts.man:202
+msgid "rI<i>r"
+msgstr "RI<I>R"
+
+#. type: Plain text
+#: fonts.man:127
+msgid "r16"
+msgstr "R16"
+
+#. type: Plain text
+#: fonts.man:133
+msgid "r17"
+msgstr "R17"
+
+#. type: Plain text
+#: fonts.man:139
+msgid "r18"
+msgstr "R18"
+
+#. type: Plain text
+#: fonts.man:145
+msgid "r19"
+msgstr "R19"
+
+#. type: Plain text
+#: fonts.man:151
+msgid "r20"
+msgstr "R20"
+
+#. type: Plain text
+#: fonts.man:157
+msgid "r21"
+msgstr "R21"
+
+#. type: Plain text
+#: fonts.man:163
+msgid "r22"
+msgstr "R22"
+
+#. type: TP
+#: fonts.man:165
+#, no-wrap
+msgid "I<i>B<b>I<i>"
+msgstr "I<I>B<B>I<I>"
+
+#. type: Plain text
+#: fonts.man:171
+msgid "r23"
+msgstr "R23"
+
+#. type: SH
+#: fonts.man:172
+#, no-wrap
+msgid "I<i>bI<i>"
+msgstr "I<I>BI<I>"
+
+#. type: Plain text
+#: fonts.man:178
+msgid "r24"
+msgstr "R24"
+
+#. type: SH
+#: fonts.man:180
+#, no-wrap
+msgid "bbb"
+msgstr "BBB"
+
+#. type: Plain text
+#: fonts.man:186
+msgid "r25"
+msgstr "R25"
+
+#. type: Plain text
+#: fonts.man:191
+msgid "r26"
+msgstr "R26"
+
+#. type: IP
+#: fonts.man:193
+#, no-wrap
+msgid "I<i>"
+msgstr "I<I>"
+
+#. type: Plain text
+#: fonts.man:197
+msgid "r27"
+msgstr "R27"
+
+#. type: IP
+#: fonts.man:200
+#, no-wrap
+msgid "B<b>I<i>"
+msgstr "B<B>I<I>"
+
+#. type: Plain text
+#: fonts.man:204
+msgid "r28"
+msgstr "R28"
+
+#. type: Plain text
+#: fonts.man:210
+msgid "r B<b>I<i> r"
+msgstr "R B<B>I<I> R"
+
+#. type: Plain text
+#: fonts.man:213
+msgid "r29"
+msgstr "R29"
+
+#. type: Plain text
+#: fonts.man:217
+msgid "r B<b>irB<b> rB<b>r"
+msgstr "R B<B>IRB<B> RB<B>R"
+
+#. The ".I" adds another \fR at the end of the .BR line
+#. type: Plain text
+#: fonts.man:223
+msgid "r B<b>I<i>rB<b> rrr"
+msgstr "R B<B>I<I>RB<B> RRR"
+
+#. type: Plain text
+#: fonts.man:225
+msgid "r30"
+msgstr "R30"
+
+#. type: Plain text
+#: fonts.man:229
+msgid "r B<b>"
+msgstr "R B<B>"
+
+#. type: TP
+#: fonts.man:229
+#, no-wrap
+msgid "rrr"
+msgstr "RRR"
+
+#. type: Plain text
+#: fonts.man:235
+msgid "r31"
+msgstr "R31"
+
+#. type: Plain text
+#: fonts.man:243
+msgid "r32"
+msgstr "R32"
+
+#. type: Plain text
+#: fonts.man:249
+msgid "r B<b>r rr B<b>rB<b> rB<b>r"
+msgstr "R B<B>R RR B<B>RB<B> RB<B>R"
+
+#. type: Plain text
+#: fonts.man:251
+msgid "r33"
+msgstr "R33"
+
+#. type: Plain text
+#: fonts.man:256 fonts.man:264
+msgid "r I<i> rI<i>r"
+msgstr "R I<I> RI<I>R"
+
+#. type: Plain text
+#: fonts.man:258
+msgid "r34"
+msgstr "R34"
+
+#. type: Plain text
+#: fonts.man:266
+msgid "r35"
+msgstr "R35"
+
+#. type: Plain text
+#: fonts.man:269
+msgid "a E<lt> B<foo>"
+msgstr "A E<lt> B<FOO>"
+
+#. type: Plain text
+#: fonts.man:271
+msgid "r36"
+msgstr "R36"
+
+#. type: Plain text
+#: fonts.man:275
+msgid "foo"
+msgstr "FOO"
+
+#. type: Plain text
+#: fonts.man:276
+msgid "r37"
+msgstr "R37"
diff --git a/t/fmt/man/fonts.pot b/t/fmt/man/fonts.pot
new file mode 100644
index 0000000..37108a7
--- /dev/null
+++ b/t/fmt/man/fonts.pot
@@ -0,0 +1,381 @@
+# SOME DESCRIPTIVE TITLE
+# Copyright (C) YEAR Free Software Foundation, Inc.
+# This file is distributed under the same license as the PACKAGE package.
+# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
+#
+#, fuzzy
+msgid ""
+msgstr ""
+"Project-Id-Version: PACKAGE VERSION\n"
+"POT-Creation-Date: 2006-09-05 21:42+0200\n"
+"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
+"Language-Team: LANGUAGE <LL@li.org>\n"
+"Language: \n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+
+#. type: TH
+#: fonts.man:1
+#, no-wrap
+msgid "FONTS"
+msgstr ""
+
+#. type: SH
+#: fonts.man:2
+#, no-wrap
+msgid "NAME"
+msgstr ""
+
+#. type: Plain text
+#: fonts.man:4
+msgid "fonts - various nasty font usages"
+msgstr ""
+
+#. type: SH
+#: fonts.man:5
+#, no-wrap
+msgid "bR<r>I<i>"
+msgstr ""
+
+#. type: Plain text
+#: fonts.man:7 fonts.man:12 fonts.man:14 fonts.man:19 fonts.man:21 fonts.man:26
+#: fonts.man:29 fonts.man:54 fonts.man:57 fonts.man:63 fonts.man:66
+#: fonts.man:72 fonts.man:75 fonts.man:169 fonts.man:176 fonts.man:184
+#: fonts.man:187 fonts.man:189 fonts.man:232
+#, no-wrap
+msgid "r"
+msgstr ""
+
+#. type: Plain text
+#: fonts.man:9
+msgid "r1"
+msgstr ""
+
+#. type: SH
+#: fonts.man:12 fonts.man:19 fonts.man:26
+#, no-wrap
+msgid "bI<ii>"
+msgstr ""
+
+#. type: Plain text
+#: fonts.man:16
+msgid "r2"
+msgstr ""
+
+#. type: Plain text
+#: fonts.man:23
+msgid "r3"
+msgstr ""
+
+#. type: Plain text
+#: fonts.man:31
+msgid "r4"
+msgstr ""
+
+#. type: Plain text
+#: fonts.man:35 fonts.man:42
+msgid "r I<i>rI<i> r"
+msgstr ""
+
+#. type: Plain text
+#: fonts.man:37
+msgid "r5"
+msgstr ""
+
+#. type: Plain text
+#: fonts.man:44
+msgid "r6"
+msgstr ""
+
+#. type: Plain text
+#: fonts.man:49
+msgid "r I<i>r r"
+msgstr ""
+
+#. type: Plain text
+#: fonts.man:51
+msgid "r7"
+msgstr ""
+
+#. type: TP
+#: fonts.man:54 fonts.man:63
+#, no-wrap
+msgid "I<i>rI<i>"
+msgstr ""
+
+#. type: Plain text
+#: fonts.man:60
+msgid "r8"
+msgstr ""
+
+#. type: Plain text
+#: fonts.man:68
+msgid "r9"
+msgstr ""
+
+#. type: TP
+#: fonts.man:72
+#, no-wrap
+msgid "B<b>I<i>B<b>"
+msgstr ""
+
+#. type: Plain text
+#: fonts.man:77
+msgid "r10"
+msgstr ""
+
+#. type: Plain text
+#: fonts.man:83 fonts.man:241
+msgid "r B<b>I<i>B<b> r"
+msgstr ""
+
+#. type: Plain text
+#: fonts.man:85
+msgid "r11"
+msgstr ""
+
+#. This is used in bash.1, and is not supported at this time.
+#
+#. r
+#. .I
+#. .if n nroff
+#. .if t troff
+#
+#. '.I' tells that only one line will use the I font.
+#. and it's very difficult to predict the number of line that must be affected
+#. in the case of .if (In this case, the font mut be reverted to the previous
+#. one after the second '.if'.
+#. type: Plain text
+#: fonts.man:102
+msgid "r I<i>rB<b> r"
+msgstr ""
+
+#. type: Plain text
+#: fonts.man:104
+msgid "r12"
+msgstr ""
+
+#. type: Plain text
+#: fonts.man:109
+msgid "B<b >I<i>B<b> r"
+msgstr ""
+
+#. type: Plain text
+#: fonts.man:111
+msgid "r13"
+msgstr ""
+
+#. type: Plain text
+#: fonts.man:114
+msgid "B<b>I<i> rI<i>r"
+msgstr ""
+
+#. type: Plain text
+#: fonts.man:117
+msgid "r14"
+msgstr ""
+
+#. type: Plain text
+#: fonts.man:120
+msgid "B<b>I<i> I<i>r"
+msgstr ""
+
+#. type: Plain text
+#: fonts.man:122
+msgid "r15"
+msgstr ""
+
+#. type: Plain text
+#: fonts.man:125 fonts.man:131 fonts.man:137 fonts.man:143 fonts.man:149
+#: fonts.man:155 fonts.man:161 fonts.man:195 fonts.man:202
+msgid "rI<i>r"
+msgstr ""
+
+#. type: Plain text
+#: fonts.man:127
+msgid "r16"
+msgstr ""
+
+#. type: Plain text
+#: fonts.man:133
+msgid "r17"
+msgstr ""
+
+#. type: Plain text
+#: fonts.man:139
+msgid "r18"
+msgstr ""
+
+#. type: Plain text
+#: fonts.man:145
+msgid "r19"
+msgstr ""
+
+#. type: Plain text
+#: fonts.man:151
+msgid "r20"
+msgstr ""
+
+#. type: Plain text
+#: fonts.man:157
+msgid "r21"
+msgstr ""
+
+#. type: Plain text
+#: fonts.man:163
+msgid "r22"
+msgstr ""
+
+#. type: TP
+#: fonts.man:165
+#, no-wrap
+msgid "I<i>B<b>I<i>"
+msgstr ""
+
+#. type: Plain text
+#: fonts.man:171
+msgid "r23"
+msgstr ""
+
+#. type: SH
+#: fonts.man:172
+#, no-wrap
+msgid "I<i>bI<i>"
+msgstr ""
+
+#. type: Plain text
+#: fonts.man:178
+msgid "r24"
+msgstr ""
+
+#. type: SH
+#: fonts.man:180
+#, no-wrap
+msgid "bbb"
+msgstr ""
+
+#. type: Plain text
+#: fonts.man:186
+msgid "r25"
+msgstr ""
+
+#. type: Plain text
+#: fonts.man:191
+msgid "r26"
+msgstr ""
+
+#. type: IP
+#: fonts.man:193
+#, no-wrap
+msgid "I<i>"
+msgstr ""
+
+#. type: Plain text
+#: fonts.man:197
+msgid "r27"
+msgstr ""
+
+#. type: IP
+#: fonts.man:200
+#, no-wrap
+msgid "B<b>I<i>"
+msgstr ""
+
+#. type: Plain text
+#: fonts.man:204
+msgid "r28"
+msgstr ""
+
+#. type: Plain text
+#: fonts.man:210
+msgid "r B<b>I<i> r"
+msgstr ""
+
+#. type: Plain text
+#: fonts.man:213
+msgid "r29"
+msgstr ""
+
+#. type: Plain text
+#: fonts.man:217
+msgid "r B<b>irB<b> rB<b>r"
+msgstr ""
+
+#. The ".I" adds another \fR at the end of the .BR line
+#. type: Plain text
+#: fonts.man:223
+msgid "r B<b>I<i>rB<b> rrr"
+msgstr ""
+
+#. type: Plain text
+#: fonts.man:225
+msgid "r30"
+msgstr ""
+
+#. type: Plain text
+#: fonts.man:229
+msgid "r B<b>"
+msgstr ""
+
+#. type: TP
+#: fonts.man:229
+#, no-wrap
+msgid "rrr"
+msgstr ""
+
+#. type: Plain text
+#: fonts.man:235
+msgid "r31"
+msgstr ""
+
+#. type: Plain text
+#: fonts.man:243
+msgid "r32"
+msgstr ""
+
+#. type: Plain text
+#: fonts.man:249
+msgid "r B<b>r rr B<b>rB<b> rB<b>r"
+msgstr ""
+
+#. type: Plain text
+#: fonts.man:251
+msgid "r33"
+msgstr ""
+
+#. type: Plain text
+#: fonts.man:256 fonts.man:264
+msgid "r I<i> rI<i>r"
+msgstr ""
+
+#. type: Plain text
+#: fonts.man:258
+msgid "r34"
+msgstr ""
+
+#. type: Plain text
+#: fonts.man:266
+msgid "r35"
+msgstr ""
+
+#. type: Plain text
+#: fonts.man:269
+msgid "a E<lt> B<foo>"
+msgstr ""
+
+#. type: Plain text
+#: fonts.man:271
+msgid "r36"
+msgstr ""
+
+#. type: Plain text
+#: fonts.man:275
+msgid "foo"
+msgstr ""
+
+#. type: Plain text
+#: fonts.man:276
+msgid "r37"
+msgstr ""
diff --git a/t/fmt/man/fonts.trans b/t/fmt/man/fonts.trans
new file mode 100644
index 0000000..11af3a2
--- /dev/null
+++ b/t/fmt/man/fonts.trans
@@ -0,0 +1,218 @@
+.\"*******************************************************************
+.\"
+.\" This file was generated with po4a. Translate the source file.
+.\"
+.\"*******************************************************************
+.TH FONTS 1
+.SH NAME
+FONTS \- VARIOUS NASTY FONT USAGES
+
+.SH B\fRR\fP\fII\fP
+R
+
+R1
+
+R
+.SH B\fIII\fP
+R
+
+R2
+
+R
+.SH B\fIII\fP
+R
+
+R3
+
+R
+.SH B\fIII\fP
+R
+
+R4
+
+R \fII\fPR\fII\fP R
+
+R5
+
+R \fII\fPR\fII\fP R
+
+R6
+
+R \fII\fPR R
+
+R7
+
+R
+.TP
+\fII\fPR\fII\fP
+R
+
+.P
+R8
+
+R
+.TP
+\fII\fPR\fII\fP
+R
+
+R9
+
+R
+.TP
+\fBB\fP\fII\fP\fBB\fP
+R
+
+R10
+
+R \fBB\fP\fII\fP\fBB\fP R
+
+R11
+
+
+.\" This is used in bash.1, and is not supported at this time.
+.\"
+.\"r
+.\".I
+.\".if n nroff
+.\".if t troff
+.\"
+.\" '.I' tells that only one line will use the I font.
+.\" and it's very difficult to predict the number of line that must be affected
+.\" in the case of .if (In this case, the font mut be reverted to the previous
+.\" one after the second '.if'.
+R \fII\fPR\fBB\fP R
+
+R12
+
+\fBB \fP\fII\fP\fBB\fP R
+
+R13
+
+\fBB\fP\fII\fP R\fII\fPR
+
+
+R14
+
+\fBB\fP\fII\fP \fII\fPR
+
+R15
+
+
+R\fII\fPR
+
+R16
+
+\fI
+.P
+R\fII\fPR
+
+R17
+
+\fI
+.P
+R\fII\fPR
+
+R18
+
+\fI
+.PP
+R\fII\fPR
+
+R19
+
+\fI
+.PP
+R\fII\fPR
+
+R20
+
+\fI
+.LP
+R\fII\fPR
+
+R21
+
+\fI
+.LP
+R\fII\fPR
+
+R22
+
+\fB
+.TP
+\fII\fP\fBB\fP\fII\fP
+R
+
+R23
+
+.SH \fII\fPB\fII\fP
+R
+
+R24
+
+\fI
+.SH BBB
+R
+
+R25
+
+.IP R
+R
+
+R26
+
+.IP \fII\fP
+R\fII\fPR
+
+R27
+
+.IP \fBB\fP\fII\fP
+R\fII\fPR
+
+R28
+
+R \fBB\fP\fII\fP R
+
+.P
+R29
+
+R \fBB\fPIR\fBB\fP R\fBB\fPR
+
+.\" The ".I" adds another \fR at the end of the .BR line
+R \fBB\fP\fII\fPR\fBB\fP RRR
+
+R30
+
+R \fBB\fP
+.TP
+RRR
+R
+
+.P
+R31
+
+R \fBB\fP\fII\fP\fBB\fP R
+
+R32
+
+R \fBB\fPR RR \fBB\fPR\fBB\fP R\fBB\fPR
+
+R33
+
+R \fII\fP R\fII\fPR
+
+R34
+
+R \fII\fP R\fII\fPR
+
+R35
+
+A < \fBFOO\fP
+
+R36
+
+.TP
+\fI\& \&\fR
+FOO
+
+R37
diff --git a/t/fmt/man/hyphens-translate.man b/t/fmt/man/hyphens-translate.man
new file mode 100644
index 0000000..63c863f
--- /dev/null
+++ b/t/fmt/man/hyphens-translate.man
@@ -0,0 +1,33 @@
+.TH TEST-PO4A-HYPHENS 1
+
+.SH NAME
+
+test-po4a-hyphens - This is just-a-test
+
+.SH TITLE WITH-HYPHEN
+
+.\" Some exceptions:
+
+.\" Debian bug #470849
+.ie c \[shc] \
+. ds soft-hyphen \[shc]
+.el \
+. ds soft-hyphen \(hy
+
+continuation hyphen@255@\*[soft-hyphen]@-
+
+test \s-1small text\s+1 \s-1small-text\s+1 \s-1small\s+1
+
+test \(.-, \(<-, or \(-D
+
+Let's try TeX T\h'-.1667m'\v'.224m'E\v'-.224m'\h'-.125m'X
+
+\H'-5'test
+
+\C'test - test' \C'test-test'
+
+\Z@\v'-.25m'\l'\\n[ww]u'@\\$1
+
+test \[test-test]
+
+test \*(-a \*(a-
diff --git a/t/fmt/man/hyphens-translate.norm b/t/fmt/man/hyphens-translate.norm
new file mode 100644
index 0000000..0a149b7
--- /dev/null
+++ b/t/fmt/man/hyphens-translate.norm
@@ -0,0 +1,38 @@
+.\"*******************************************************************
+.\"
+.\" This file was generated with po4a. Translate the source file.
+.\"
+.\"*******************************************************************
+.TH TEST\-PO4A\-HYPHENS 1
+
+.SH NAME
+
+test\-po4a\-hyphens \- This is just\-a\-test
+
+.SH "TITLE WITH\-HYPHEN"
+
+
+.\" Some exceptions:
+.ie c \[shc] \
+. ds soft-hyphen \[shc]
+.el \
+. ds soft-hyphen \(hy
+
+.\" Debian bug #470849
+continuation hyphen@255@\*[soft-hyphen]@\-
+
+test \s-1small text\s+1 \s-1small\-text\s+1 \s-1small\s+1
+
+test \(.-, \(<-, or \(-D
+
+Let's try TeX T\h'-.1667m'\v'.224m'E\v'-.224m'\h'-.125m'X
+
+\H'-5'test
+
+\C'test - test' \C'test-test'
+
+\Z@\v'-.25m'\l'\en[ww]u'@\e$1
+
+test \[test-test]
+
+test \*(-a \*(a-
diff --git a/t/fmt/man/hyphens-translate.po b/t/fmt/man/hyphens-translate.po
new file mode 100644
index 0000000..8175ab3
--- /dev/null
+++ b/t/fmt/man/hyphens-translate.po
@@ -0,0 +1,101 @@
+# SOME DESCRIPTIVE TITLE
+# Copyright (C) YEAR Free Software Foundation, Inc.
+# This file is distributed under the same license as the PACKAGE package.
+# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
+#
+#, fuzzy
+msgid ""
+msgstr ""
+"Project-Id-Version: PACKAGE VERSION\n"
+"POT-Creation-Date: 2008-03-14 21:23+0100\n"
+"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
+"Language-Team: LANGUAGE <LL@li.org>\n"
+"Language: \n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+
+#. type: TH
+#: hyphens-translate.man:1
+#, no-wrap
+msgid "TEST-PO4A-HYPHENS"
+msgstr "test-po4a-hyphens"
+
+#. type: SH
+#: hyphens-translate.man:3
+#, no-wrap
+msgid "NAME"
+msgstr "name"
+
+#. type: Plain text
+#: hyphens-translate.man:6
+msgid "test-po4a-hyphens - This is just-a-test"
+msgstr "TEST-PO4A-HYPHENS - THIS IS JUST-A-TEST"
+
+#. type: SH
+#: hyphens-translate.man:7
+#, no-wrap
+msgid "TITLE WITH-HYPHEN"
+msgstr "title with-hyphen"
+
+#. Some exceptions:
+#. type: groff code
+#: hyphens-translate.man:12
+#, no-wrap
+msgid ""
+".ie c \\[shc] \\\n"
+". ds soft-hyphen \\[shc]\n"
+".el \\\n"
+". ds soft-hyphen \\(hy\n"
+msgstr ""
+".ie c \\[shc] \\\n"
+". ds soft-hyphen \\[shc]\n"
+".el \\\n"
+". ds soft-hyphen \\(hy\n"
+
+#. Debian bug #470849
+#. type: Plain text
+#: hyphens-translate.man:18
+msgid "continuation hyphen@255@\\*[soft-hyphen]@-"
+msgstr "CONTINUATION HYPHEN@255@\\*[soft-hyphen]@-"
+
+#. type: Plain text
+#: hyphens-translate.man:20
+msgid "test \\s-1small text\\s+1 \\s-1small-text\\s+1 \\s-1small\\s+1"
+msgstr "TEST \\s-1small text\\s+1 \\s-1small-text\\s+1 \\s-1small\\s+1"
+
+#. type: Plain text
+#: hyphens-translate.man:22
+msgid "test \\(.-, \\(E<lt>-, or \\(-D"
+msgstr "TEST \\(.-, \\(E<lt>-, OR \\(-D"
+
+#. type: Plain text
+#: hyphens-translate.man:24
+msgid "Let's try TeX T\\h'-.1667m'\\v'.224m'E\\v'-.224m'\\h'-.125m'X"
+msgstr "LET'S TRY tEx T\\h'-.1667m'\\v'.224m'E\\v'-.224m'\\h'-.125m'X"
+
+#. type: Plain text
+#: hyphens-translate.man:26
+msgid "\\H'-5'test"
+msgstr "\\H'-5'TEST"
+
+#. type: Plain text
+#: hyphens-translate.man:28
+msgid "\\C'test - test' \\C'test-test'"
+msgstr ""
+
+#. type: Plain text
+#: hyphens-translate.man:30
+msgid "\\Z@\\v'-.25m'\\l'\\en[ww]u'@\\e$1"
+msgstr "\\Z@\\v'-.25m'\\l'\\en[ww]u'@\\e$1"
+
+#. type: Plain text
+#: hyphens-translate.man:32
+msgid "test \\[test-test]"
+msgstr "TEST \\[TEST-TEST]"
+
+#. type: Plain text
+#: hyphens-translate.man:33
+msgid "test \\*(-a \\*(a-"
+msgstr "TEST \\*(-a \\*(a-"
diff --git a/t/fmt/man/hyphens-translate.pot b/t/fmt/man/hyphens-translate.pot
new file mode 100644
index 0000000..e1bb366
--- /dev/null
+++ b/t/fmt/man/hyphens-translate.pot
@@ -0,0 +1,97 @@
+# SOME DESCRIPTIVE TITLE
+# Copyright (C) YEAR Free Software Foundation, Inc.
+# This file is distributed under the same license as the PACKAGE package.
+# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
+#
+#, fuzzy
+msgid ""
+msgstr ""
+"Project-Id-Version: PACKAGE VERSION\n"
+"POT-Creation-Date: 2008-03-14 21:23+0100\n"
+"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
+"Language-Team: LANGUAGE <LL@li.org>\n"
+"Language: \n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+
+#. type: TH
+#: hyphens-translate.man:1
+#, no-wrap
+msgid "TEST-PO4A-HYPHENS"
+msgstr ""
+
+#. type: SH
+#: hyphens-translate.man:3
+#, no-wrap
+msgid "NAME"
+msgstr ""
+
+#. type: Plain text
+#: hyphens-translate.man:6
+msgid "test-po4a-hyphens - This is just-a-test"
+msgstr ""
+
+#. type: SH
+#: hyphens-translate.man:7
+#, no-wrap
+msgid "TITLE WITH-HYPHEN"
+msgstr ""
+
+#. Some exceptions:
+#. type: groff code
+#: hyphens-translate.man:12
+#, no-wrap
+msgid ""
+".ie c \\[shc] \\\n"
+". ds soft-hyphen \\[shc]\n"
+".el \\\n"
+". ds soft-hyphen \\(hy\n"
+msgstr ""
+
+#. Debian bug #470849
+#. type: Plain text
+#: hyphens-translate.man:18
+msgid "continuation hyphen@255@\\*[soft-hyphen]@-"
+msgstr ""
+
+#. type: Plain text
+#: hyphens-translate.man:20
+msgid "test \\s-1small text\\s+1 \\s-1small-text\\s+1 \\s-1small\\s+1"
+msgstr ""
+
+#. type: Plain text
+#: hyphens-translate.man:22
+msgid "test \\(.-, \\(E<lt>-, or \\(-D"
+msgstr ""
+
+#. type: Plain text
+#: hyphens-translate.man:24
+msgid "Let's try TeX T\\h'-.1667m'\\v'.224m'E\\v'-.224m'\\h'-.125m'X"
+msgstr ""
+
+#. type: Plain text
+#: hyphens-translate.man:26
+msgid "\\H'-5'test"
+msgstr ""
+
+#. type: Plain text
+#: hyphens-translate.man:28
+msgid "\\C'test - test' \\C'test-test'"
+msgstr ""
+
+#. type: Plain text
+#: hyphens-translate.man:30
+msgid "\\Z@\\v'-.25m'\\l'\\en[ww]u'@\\e$1"
+msgstr ""
+
+#. type: Plain text
+#: hyphens-translate.man:32
+msgid "test \\[test-test]"
+msgstr ""
+
+#. type: Plain text
+#: hyphens-translate.man:33
+msgid "test \\*(-a \\*(a-"
+msgstr ""
diff --git a/t/fmt/man/hyphens-translate.trans b/t/fmt/man/hyphens-translate.trans
new file mode 100644
index 0000000..387ce2a
--- /dev/null
+++ b/t/fmt/man/hyphens-translate.trans
@@ -0,0 +1,38 @@
+.\"*******************************************************************
+.\"
+.\" This file was generated with po4a. Translate the source file.
+.\"
+.\"*******************************************************************
+.TH test\-po4a\-hyphens 1
+
+.SH name
+
+TEST\-PO4A\-HYPHENS \- THIS IS JUST\-A\-TEST
+
+.SH "title with\-hyphen"
+
+
+.\" Some exceptions:
+.ie c \[shc] \
+. ds soft-hyphen \[shc]
+.el \
+. ds soft-hyphen \(hy
+
+.\" Debian bug #470849
+CONTINUATION HYPHEN@255@\*[soft-hyphen]@\-
+
+TEST \s-1small text\s+1 \s-1small\-text\s+1 \s-1small\s+1
+
+TEST \(.-, \(<-, OR \(-D
+
+LET'S TRY tEx T\h'-.1667m'\v'.224m'E\v'-.224m'\h'-.125m'X
+
+\H'-5'TEST
+
+\C'test - test' \C'test-test'
+
+\Z@\v'-.25m'\l'\en[ww]u'@\e$1
+
+TEST \[TEST-TEST]
+
+TEST \*(-a \*(a-
diff --git a/t/fmt/man/hyphens-verbatim.man b/t/fmt/man/hyphens-verbatim.man
new file mode 100644
index 0000000..63c863f
--- /dev/null
+++ b/t/fmt/man/hyphens-verbatim.man
@@ -0,0 +1,33 @@
+.TH TEST-PO4A-HYPHENS 1
+
+.SH NAME
+
+test-po4a-hyphens - This is just-a-test
+
+.SH TITLE WITH-HYPHEN
+
+.\" Some exceptions:
+
+.\" Debian bug #470849
+.ie c \[shc] \
+. ds soft-hyphen \[shc]
+.el \
+. ds soft-hyphen \(hy
+
+continuation hyphen@255@\*[soft-hyphen]@-
+
+test \s-1small text\s+1 \s-1small-text\s+1 \s-1small\s+1
+
+test \(.-, \(<-, or \(-D
+
+Let's try TeX T\h'-.1667m'\v'.224m'E\v'-.224m'\h'-.125m'X
+
+\H'-5'test
+
+\C'test - test' \C'test-test'
+
+\Z@\v'-.25m'\l'\\n[ww]u'@\\$1
+
+test \[test-test]
+
+test \*(-a \*(a-
diff --git a/t/fmt/man/hyphens-verbatim.norm b/t/fmt/man/hyphens-verbatim.norm
new file mode 100644
index 0000000..0a149b7
--- /dev/null
+++ b/t/fmt/man/hyphens-verbatim.norm
@@ -0,0 +1,38 @@
+.\"*******************************************************************
+.\"
+.\" This file was generated with po4a. Translate the source file.
+.\"
+.\"*******************************************************************
+.TH TEST\-PO4A\-HYPHENS 1
+
+.SH NAME
+
+test\-po4a\-hyphens \- This is just\-a\-test
+
+.SH "TITLE WITH\-HYPHEN"
+
+
+.\" Some exceptions:
+.ie c \[shc] \
+. ds soft-hyphen \[shc]
+.el \
+. ds soft-hyphen \(hy
+
+.\" Debian bug #470849
+continuation hyphen@255@\*[soft-hyphen]@\-
+
+test \s-1small text\s+1 \s-1small\-text\s+1 \s-1small\s+1
+
+test \(.-, \(<-, or \(-D
+
+Let's try TeX T\h'-.1667m'\v'.224m'E\v'-.224m'\h'-.125m'X
+
+\H'-5'test
+
+\C'test - test' \C'test-test'
+
+\Z@\v'-.25m'\l'\en[ww]u'@\e$1
+
+test \[test-test]
+
+test \*(-a \*(a-
diff --git a/t/fmt/man/hyphens-verbatim.po b/t/fmt/man/hyphens-verbatim.po
new file mode 100644
index 0000000..0431a1c
--- /dev/null
+++ b/t/fmt/man/hyphens-verbatim.po
@@ -0,0 +1,86 @@
+# SOME DESCRIPTIVE TITLE
+# Copyright (C) YEAR Free Software Foundation, Inc.
+# This file is distributed under the same license as the PACKAGE package.
+# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
+#
+#, fuzzy
+msgid ""
+msgstr ""
+"Project-Id-Version: PACKAGE VERSION\n"
+"POT-Creation-Date: 2008-03-14 21:23+0100\n"
+"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
+"Language-Team: LANGUAGE <LL@li.org>\n"
+"Language: \n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+
+#. type: TH
+#: hyphens-verbatim.man:1
+#, no-wrap
+msgid "TEST-PO4A-HYPHENS"
+msgstr "test-po4a-hyphens"
+
+#. type: SH
+#: hyphens-verbatim.man:3
+#, no-wrap
+msgid "NAME"
+msgstr "name"
+
+#. type: Plain text
+#: hyphens-verbatim.man:6
+msgid "test-po4a-hyphens - This is just-a-test"
+msgstr "TEST-PO4A-HYPHENS - THIS IS JUST-A-TEST"
+
+#. type: SH
+#: hyphens-verbatim.man:7
+#, no-wrap
+msgid "TITLE WITH-HYPHEN"
+msgstr "title with-hyphen"
+
+#. Debian bug #470849
+#. type: Plain text
+#: hyphens-verbatim.man:18
+msgid "continuation hyphen@255@\\*[soft-hyphen]@-"
+msgstr "CONTINUATION HYPHEN@255@\\*[soft-hyphen]@-"
+
+#. type: Plain text
+#: hyphens-verbatim.man:20
+msgid "test \\s-1small text\\s+1 \\s-1small-text\\s+1 \\s-1small\\s+1"
+msgstr "TEST \\s-1small text\\s+1 \\s-1small-text\\s+1 \\s-1small\\s+1"
+
+#. type: Plain text
+#: hyphens-verbatim.man:22
+msgid "test \\(.-, \\(E<lt>-, or \\(-D"
+msgstr "TEST \\(.-, \\(E<lt>-, OR \\(-D"
+
+#. type: Plain text
+#: hyphens-verbatim.man:24
+msgid "Let's try TeX T\\h'-.1667m'\\v'.224m'E\\v'-.224m'\\h'-.125m'X"
+msgstr "LET'S TRY tEx T\\h'-.1667m'\\v'.224m'E\\v'-.224m'\\h'-.125m'X"
+
+#. type: Plain text
+#: hyphens-verbatim.man:26
+msgid "\\H'-5'test"
+msgstr "\\H'-5'TEST"
+
+#. type: Plain text
+#: hyphens-verbatim.man:28
+msgid "\\C'test - test' \\C'test-test'"
+msgstr ""
+
+#. type: Plain text
+#: hyphens-verbatim.man:30
+msgid "\\Z@\\v'-.25m'\\l'\\en[ww]u'@\\e$1"
+msgstr "\\Z@\\v'-.25m'\\l'\\en[ww]u'@\\e$1"
+
+#. type: Plain text
+#: hyphens-verbatim.man:32
+msgid "test \\[test-test]"
+msgstr "TEST \\[TEST-TEST]"
+
+#. type: Plain text
+#: hyphens-verbatim.man:33
+msgid "test \\*(-a \\*(a-"
+msgstr "TEST \\*(-a \\*(a-"
diff --git a/t/fmt/man/hyphens-verbatim.pot b/t/fmt/man/hyphens-verbatim.pot
new file mode 100644
index 0000000..63f8838
--- /dev/null
+++ b/t/fmt/man/hyphens-verbatim.pot
@@ -0,0 +1,86 @@
+# SOME DESCRIPTIVE TITLE
+# Copyright (C) YEAR Free Software Foundation, Inc.
+# This file is distributed under the same license as the PACKAGE package.
+# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
+#
+#, fuzzy
+msgid ""
+msgstr ""
+"Project-Id-Version: PACKAGE VERSION\n"
+"POT-Creation-Date: 2008-03-14 21:23+0100\n"
+"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
+"Language-Team: LANGUAGE <LL@li.org>\n"
+"Language: \n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+
+#. type: TH
+#: hyphens-verbatim.man:1
+#, no-wrap
+msgid "TEST-PO4A-HYPHENS"
+msgstr ""
+
+#. type: SH
+#: hyphens-verbatim.man:3
+#, no-wrap
+msgid "NAME"
+msgstr ""
+
+#. type: Plain text
+#: hyphens-verbatim.man:6
+msgid "test-po4a-hyphens - This is just-a-test"
+msgstr ""
+
+#. type: SH
+#: hyphens-verbatim.man:7
+#, no-wrap
+msgid "TITLE WITH-HYPHEN"
+msgstr ""
+
+#. Debian bug #470849
+#. type: Plain text
+#: hyphens-verbatim.man:18
+msgid "continuation hyphen@255@\\*[soft-hyphen]@-"
+msgstr ""
+
+#. type: Plain text
+#: hyphens-verbatim.man:20
+msgid "test \\s-1small text\\s+1 \\s-1small-text\\s+1 \\s-1small\\s+1"
+msgstr ""
+
+#. type: Plain text
+#: hyphens-verbatim.man:22
+msgid "test \\(.-, \\(E<lt>-, or \\(-D"
+msgstr ""
+
+#. type: Plain text
+#: hyphens-verbatim.man:24
+msgid "Let's try TeX T\\h'-.1667m'\\v'.224m'E\\v'-.224m'\\h'-.125m'X"
+msgstr ""
+
+#. type: Plain text
+#: hyphens-verbatim.man:26
+msgid "\\H'-5'test"
+msgstr ""
+
+#. type: Plain text
+#: hyphens-verbatim.man:28
+msgid "\\C'test - test' \\C'test-test'"
+msgstr ""
+
+#. type: Plain text
+#: hyphens-verbatim.man:30
+msgid "\\Z@\\v'-.25m'\\l'\\en[ww]u'@\\e$1"
+msgstr ""
+
+#. type: Plain text
+#: hyphens-verbatim.man:32
+msgid "test \\[test-test]"
+msgstr ""
+
+#. type: Plain text
+#: hyphens-verbatim.man:33
+msgid "test \\*(-a \\*(a-"
+msgstr ""
diff --git a/t/fmt/man/hyphens-verbatim.trans b/t/fmt/man/hyphens-verbatim.trans
new file mode 100644
index 0000000..387ce2a
--- /dev/null
+++ b/t/fmt/man/hyphens-verbatim.trans
@@ -0,0 +1,38 @@
+.\"*******************************************************************
+.\"
+.\" This file was generated with po4a. Translate the source file.
+.\"
+.\"*******************************************************************
+.TH test\-po4a\-hyphens 1
+
+.SH name
+
+TEST\-PO4A\-HYPHENS \- THIS IS JUST\-A\-TEST
+
+.SH "title with\-hyphen"
+
+
+.\" Some exceptions:
+.ie c \[shc] \
+. ds soft-hyphen \[shc]
+.el \
+. ds soft-hyphen \(hy
+
+.\" Debian bug #470849
+CONTINUATION HYPHEN@255@\*[soft-hyphen]@\-
+
+TEST \s-1small text\s+1 \s-1small\-text\s+1 \s-1small\s+1
+
+TEST \(.-, \(<-, OR \(-D
+
+LET'S TRY tEx T\h'-.1667m'\v'.224m'E\v'-.224m'\h'-.125m'X
+
+\H'-5'TEST
+
+\C'test - test' \C'test-test'
+
+\Z@\v'-.25m'\l'\en[ww]u'@\e$1
+
+TEST \[TEST-TEST]
+
+TEST \*(-a \*(a-
diff --git a/t/fmt/man/macro-def.man b/t/fmt/man/macro-def.man
new file mode 100644
index 0000000..c4e1cd4
--- /dev/null
+++ b/t/fmt/man/macro-def.man
@@ -0,0 +1,12 @@
+.TH MACROS 1
+.SH NAME
+macros \- test po4a's support of user-defined groff macros
+
+.\" ========================================================================
+.de Blob \" extra explanation
+Macros' content
+..
+.\" ========================================================================
+
+
+Hello
diff --git a/t/fmt/man/macro-def.norm b/t/fmt/man/macro-def.norm
new file mode 100644
index 0000000..ec5748b
--- /dev/null
+++ b/t/fmt/man/macro-def.norm
@@ -0,0 +1,17 @@
+.\"*******************************************************************
+.\"
+.\" This file was generated with po4a. Translate the source file.
+.\"
+.\"*******************************************************************
+.TH MACROS 1
+.SH NAME
+macros \- test po4a's support of user\-defined groff macros
+
+.de Blob \" extra explanation
+Macros' content
+..
+
+
+.\" ========================================================================
+.\" ========================================================================
+Hello
diff --git a/t/fmt/man/macro-def.po b/t/fmt/man/macro-def.po
new file mode 100644
index 0000000..b55cd22
--- /dev/null
+++ b/t/fmt/man/macro-def.po
@@ -0,0 +1,23 @@
+#. type: TH
+#: macro-def.man:1
+#, no-wrap
+msgid "MACROS"
+msgstr "macros"
+
+#. type: SH
+#: macro-def.man:2
+#, no-wrap
+msgid "NAME"
+msgstr "name"
+
+#. type: Plain text
+#: macro-def.man:4
+msgid "macros - test po4a's support of user-defined groff macros"
+msgstr "MACROS - TEST PO4A'S SUPPORT OF USER-DEFINED GROFF MACROS"
+
+#. ========================================================================
+#. ========================================================================
+#. type: Plain text
+#: macro-def.man:12
+msgid "Hello"
+msgstr "hELLO"
diff --git a/t/fmt/man/macro-def.pot b/t/fmt/man/macro-def.pot
new file mode 100644
index 0000000..5cdc2a7
--- /dev/null
+++ b/t/fmt/man/macro-def.pot
@@ -0,0 +1,41 @@
+# SOME DESCRIPTIVE TITLE
+# Copyright (C) YEAR Free Software Foundation, Inc.
+# This file is distributed under the same license as the PACKAGE package.
+# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
+#
+#, fuzzy
+msgid ""
+msgstr ""
+"Project-Id-Version: PACKAGE VERSION\n"
+"POT-Creation-Date: 2022-08-22 15:13+0200\n"
+"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
+"Language-Team: LANGUAGE <LL@li.org>\n"
+"Language: \n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+
+#. type: TH
+#: macro-def.man:1
+#, no-wrap
+msgid "MACROS"
+msgstr ""
+
+#. type: SH
+#: macro-def.man:2
+#, no-wrap
+msgid "NAME"
+msgstr ""
+
+#. type: Plain text
+#: macro-def.man:4
+msgid "macros - test po4a's support of user-defined groff macros"
+msgstr ""
+
+#. ========================================================================
+#. ========================================================================
+#. type: Plain text
+#: macro-def.man:12
+msgid "Hello"
+msgstr ""
diff --git a/t/fmt/man/macro-def.stderr-missing-behavior b/t/fmt/man/macro-def.stderr-missing-behavior
new file mode 100644
index 0000000..7dc4471
--- /dev/null
+++ b/t/fmt/man/macro-def.stderr-missing-behavior
@@ -0,0 +1,4 @@
+po4a::man: This page defines a new macro 'Blob' with '.de' (inline comment: extra explanation), but you did not specify the expected po4a behavior when 'Blob' is used. You will get an error if this macro is actually used in your page.
+Add your macro to one of the 'untranslated', 'noarg', 'translate_joined', 'translate_each', 'no_wrap' or 'inline' parameters to avoid issues.
+For example, passing '-o untranslated=Blob' to po4a will ensure that the defined macro remains hidden from translators.
+Please refer to the manpage of Locale::Po4a::Man for more info on these parameters.
diff --git a/t/fmt/man/macro-def.trans b/t/fmt/man/macro-def.trans
new file mode 100644
index 0000000..125a072
--- /dev/null
+++ b/t/fmt/man/macro-def.trans
@@ -0,0 +1,17 @@
+.\"*******************************************************************
+.\"
+.\" This file was generated with po4a. Translate the source file.
+.\"
+.\"*******************************************************************
+.TH macros 1
+.SH name
+MACROS \- TEST PO4A'S SUPPORT OF USER\-DEFINED GROFF MACROS
+
+.de Blob \" extra explanation
+Macros' content
+..
+
+
+.\" ========================================================================
+.\" ========================================================================
+hELLO
diff --git a/t/fmt/man/macro-defuse.man b/t/fmt/man/macro-defuse.man
new file mode 100644
index 0000000..1bd7b51
--- /dev/null
+++ b/t/fmt/man/macro-defuse.man
@@ -0,0 +1,13 @@
+.TH MACROS 1
+.SH NAME
+macros \- test po4a's support of user-defined groff macros
+
+.\" ========================================================================
+.de Blob \" extra explanation
+Macros' content
+..
+.\" ========================================================================
+
+
+Hello
+.Blob
diff --git a/t/fmt/man/macro-defuse.norm b/t/fmt/man/macro-defuse.norm
new file mode 100644
index 0000000..ab6a4d7
--- /dev/null
+++ b/t/fmt/man/macro-defuse.norm
@@ -0,0 +1,18 @@
+.\"*******************************************************************
+.\"
+.\" This file was generated with po4a. Translate the source file.
+.\"
+.\"*******************************************************************
+.TH MACROS 1
+.SH NAME
+macros \- test po4a's support of user\-defined groff macros
+
+.de Blob \" extra explanation
+Macros' content
+..
+
+
+.\" ========================================================================
+.\" ========================================================================
+Hello
+.Blob
diff --git a/t/fmt/man/macro-defuse.po b/t/fmt/man/macro-defuse.po
new file mode 100644
index 0000000..72d69e8
--- /dev/null
+++ b/t/fmt/man/macro-defuse.po
@@ -0,0 +1,23 @@
+#. type: TH
+#: macro-defuse.man:1
+#, no-wrap
+msgid "MACROS"
+msgstr "macros"
+
+#. type: SH
+#: macro-defuse.man:2
+#, no-wrap
+msgid "NAME"
+msgstr "name"
+
+#. type: Plain text
+#: macro-defuse.man:4
+msgid "macros - test po4a's support of user-defined groff macros"
+msgstr "MACROS - TEST PO4A'S SUPPORT OF USER-DEFINED GROFF MACROS"
+
+#. ========================================================================
+#. ========================================================================
+#. type: Plain text
+#: macro-defuse.man:13
+msgid "Hello E<.Blob>"
+msgstr "hELLO E<.Blob>"
diff --git a/t/fmt/man/macro-defuse.po-noarg b/t/fmt/man/macro-defuse.po-noarg
new file mode 100644
index 0000000..3242733
--- /dev/null
+++ b/t/fmt/man/macro-defuse.po-noarg
@@ -0,0 +1,23 @@
+#. type: TH
+#: macro-defuse.man:1
+#, no-wrap
+msgid "MACROS"
+msgstr "macros"
+
+#. type: SH
+#: macro-defuse.man:2
+#, no-wrap
+msgid "NAME"
+msgstr "name"
+
+#. type: Plain text
+#: macro-defuse.man:4
+msgid "macros - test po4a's support of user-defined groff macros"
+msgstr "MACROS - TEST PO4A'S SUPPORT OF USER-DEFINED GROFF MACROS"
+
+#. ========================================================================
+#. ========================================================================
+#. type: Plain text
+#: macro-defuse.man:13
+msgid "Hello"
+msgstr "hELLO"
diff --git a/t/fmt/man/macro-defuse.pot b/t/fmt/man/macro-defuse.pot
new file mode 100644
index 0000000..90e51da
--- /dev/null
+++ b/t/fmt/man/macro-defuse.pot
@@ -0,0 +1,41 @@
+# SOME DESCRIPTIVE TITLE
+# Copyright (C) YEAR Free Software Foundation, Inc.
+# This file is distributed under the same license as the PACKAGE package.
+# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
+#
+#, fuzzy
+msgid ""
+msgstr ""
+"Project-Id-Version: PACKAGE VERSION\n"
+"POT-Creation-Date: 2022-08-22 15:13+0200\n"
+"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
+"Language-Team: LANGUAGE <LL@li.org>\n"
+"Language: \n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+
+#. type: TH
+#: macro-defuse.man:1
+#, no-wrap
+msgid "MACROS"
+msgstr ""
+
+#. type: SH
+#: macro-defuse.man:2
+#, no-wrap
+msgid "NAME"
+msgstr ""
+
+#. type: Plain text
+#: macro-defuse.man:4
+msgid "macros - test po4a's support of user-defined groff macros"
+msgstr ""
+
+#. ========================================================================
+#. ========================================================================
+#. type: Plain text
+#: macro-defuse.man:13
+msgid "Hello E<.Blob>"
+msgstr ""
diff --git a/t/fmt/man/macro-defuse.pot-noarg b/t/fmt/man/macro-defuse.pot-noarg
new file mode 100644
index 0000000..6a328c3
--- /dev/null
+++ b/t/fmt/man/macro-defuse.pot-noarg
@@ -0,0 +1,41 @@
+# SOME DESCRIPTIVE TITLE
+# Copyright (C) YEAR Free Software Foundation, Inc.
+# This file is distributed under the same license as the PACKAGE package.
+# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
+#
+#, fuzzy
+msgid ""
+msgstr ""
+"Project-Id-Version: PACKAGE VERSION\n"
+"POT-Creation-Date: 2022-08-22 15:13+0200\n"
+"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
+"Language-Team: LANGUAGE <LL@li.org>\n"
+"Language: \n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+
+#. type: TH
+#: macro-defuse.man:1
+#, no-wrap
+msgid "MACROS"
+msgstr ""
+
+#. type: SH
+#: macro-defuse.man:2
+#, no-wrap
+msgid "NAME"
+msgstr ""
+
+#. type: Plain text
+#: macro-defuse.man:4
+msgid "macros - test po4a's support of user-defined groff macros"
+msgstr ""
+
+#. ========================================================================
+#. ========================================================================
+#. type: Plain text
+#: macro-defuse.man:13
+msgid "Hello"
+msgstr ""
diff --git a/t/fmt/man/macro-defuse.stderr-missing-behavior b/t/fmt/man/macro-defuse.stderr-missing-behavior
new file mode 100644
index 0000000..7095bff
--- /dev/null
+++ b/t/fmt/man/macro-defuse.stderr-missing-behavior
@@ -0,0 +1,7 @@
+po4a::man: This page defines a new macro 'Blob' with '.de' (inline comment: extra explanation), but you did not specify the expected po4a behavior when 'Blob' is used. You will get an error if this macro is actually used in your page.
+Add your macro to one of the 'untranslated', 'noarg', 'translate_joined', 'translate_each', 'no_wrap' or 'inline' parameters to avoid issues.
+For example, passing '-o untranslated=Blob' to po4a will ensure that the defined macro remains hidden from translators.
+Please refer to the manpage of Locale::Po4a::Man for more info on these parameters.
+
+macro-defuse.man:13: (po4a::man)
+Unknown macro '.Blob'. Remove it from the document, or refer to the Locale::Po4a::Man manpage to see how po4a can handle new macros.
diff --git a/t/fmt/man/macro-defuse.trans b/t/fmt/man/macro-defuse.trans
new file mode 100644
index 0000000..58f0e1f
--- /dev/null
+++ b/t/fmt/man/macro-defuse.trans
@@ -0,0 +1,18 @@
+.\"*******************************************************************
+.\"
+.\" This file was generated with po4a. Translate the source file.
+.\"
+.\"*******************************************************************
+.TH macros 1
+.SH name
+MACROS \- TEST PO4A'S SUPPORT OF USER\-DEFINED GROFF MACROS
+
+.de Blob \" extra explanation
+Macros' content
+..
+
+
+.\" ========================================================================
+.\" ========================================================================
+hELLO
+.Blob
diff --git a/t/fmt/man/macros.man b/t/fmt/man/macros.man
new file mode 100644
index 0000000..035363c
--- /dev/null
+++ b/t/fmt/man/macros.man
@@ -0,0 +1,56 @@
+.TH MACROS 1
+.SH NAME
+macros \- test po4a's support of some groff macros
+.SH SYNOPSIS
+.B macros
+[\fB\-t\fR \fIMACRO\fR]
+[\fB\-\-test\fR \fIMACRO\fR]
+.IR macro ...
+.SH DESCRIPTION
+.B macros
+is an example manpage for macro tests.
+.SH OPTIONS
+.TP
+.BR \-t ", " \-\-test =\fIMACRO\fR
+Set the macro to test.
+.P
+.\" Check .UR and .UE macros for URLS.
+This is a link with a trailing comma to
+.UR https://www.example.org/test
+an example site
+.UE ,
+used for testing po4a.
+.P
+.UR https://www.example.org/test2
+This link
+.UE
+does not contain punctuation after the UE macro.
+.P
+.\" Check .MT and .ME macros for mail addresses.
+This is a mail address with a trailing comma for
+.MT foo@example.org
+Mr. Foo
+.ME ,
+used for testing po4a.
+.P
+.MT foo@example.org
+Mr. Foo
+.ME
+does not contain punctuation after the ME macro.
+.SH SYNOPSIS II
+.\" Check synopsis macros.
+.SY command
+.OP \-a arg1
+.OP \-b arg2
+.RI [ file
+.IR .\|.\|. ]
+.SH SYNOPSIS III
+.\" Check synopsis macros with terminating YS.
+.SY command
+.OP \-a arg1
+.YS
+.P
+More text.
+
+.B Note that long long long long long long long long long long long long long long long long long long BOLD text should not be wrapped.
+.I ITALIC long long long long long long long long long long long long long long long long long long text should not be wrapped either.
diff --git a/t/fmt/man/macros.norm b/t/fmt/man/macros.norm
new file mode 100644
index 0000000..1e4a126
--- /dev/null
+++ b/t/fmt/man/macros.norm
@@ -0,0 +1,57 @@
+.\"*******************************************************************
+.\"
+.\" This file was generated with po4a. Translate the source file.
+.\"
+.\"*******************************************************************
+.TH MACROS 1
+.SH NAME
+macros \- test po4a's support of some groff macros
+.SH SYNOPSIS
+\fBmacros\fP [\fB\-t\fP \fIMACRO\fP] [\fB\-\-test\fP \fIMACRO\fP] \fImacro\fP...
+.SH DESCRIPTION
+\fBmacros\fP is an example manpage for macro tests.
+.SH OPTIONS
+.TP
+\fB\-t\fP, \fB\-\-test\fP=\fIMACRO\fP
+Set the macro to test.
+.P
+.\" Check .UR and .UE macros for URLS.
+This is a link with a trailing comma to
+.UR https://www.example.org/test
+an example site
+.UE ,
+used for testing po4a.
+.P
+.UR https://www.example.org/test2
+This link
+.UE
+does not contain
+punctuation after the UE macro.
+.P
+.\" Check .MT and .ME macros for mail addresses.
+This is a mail address with a trailing comma for
+.MT foo@example.org
+Mr. Foo
+.ME ,
+used for testing po4a.
+.P
+.MT foo@example.org
+Mr. Foo
+.ME
+does not contain punctuation after the
+ME macro.
+.SH "SYNOPSIS II"
+.\" Check synopsis macros.
+.SY command
+.OP \-a arg1
+.OP \-b arg2
+[\fIfile\fP \fI.\|.\|.\fP]
+.SH "SYNOPSIS III"
+.\" Check synopsis macros with terminating YS.
+.SY command
+.OP \-a arg1
+.YS
+.P
+More text.
+
+\fBNote that long long long long long long long long long long long long long long long long long long BOLD text should not be wrapped.\fP \fIITALIC long long long long long long long long long long long long long long long long long long text should not be wrapped either.\fP
diff --git a/t/fmt/man/macros.po b/t/fmt/man/macros.po
new file mode 100644
index 0000000..95e7ced
--- /dev/null
+++ b/t/fmt/man/macros.po
@@ -0,0 +1,177 @@
+# SOME DESCRIPTIVE TITLE
+# Copyright (C) YEAR Free Software Foundation, Inc.
+# This file is distributed under the same license as the PACKAGE package.
+# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
+#
+#, fuzzy
+msgid ""
+msgstr ""
+"Project-Id-Version: PACKAGE VERSION\n"
+"POT-Creation-Date: 2018-06-08 15:49+0200\n"
+"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
+"Language-Team: LANGUAGE <LL@li.org>\n"
+"Language: \n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+
+#. type: TH
+#: macros.man:1
+#, no-wrap
+msgid "MACROS"
+msgstr "macros"
+
+#. type: SH
+#: macros.man:2
+#, no-wrap
+msgid "NAME"
+msgstr "name"
+
+#. type: Plain text
+#: macros.man:4
+msgid "macros - test po4a's support of some groff macros"
+msgstr "MACROS - TEST PO4A'S SUPPORT OF SOME GROFF MACROS"
+
+#. type: SH
+#: macros.man:4
+#, no-wrap
+msgid "SYNOPSIS"
+msgstr "synopsis"
+
+#. type: Plain text
+#: macros.man:9
+msgid "B<macros> [B<-t> I<MACRO>] [B<--test> I<MACRO>] I<macro>..."
+msgstr "B<MACROS> [B<-T> I<macro>] [B<--TEST> I<macro>] I<MACRO>..."
+
+#. type: SH
+#: macros.man:9
+#, no-wrap
+msgid "DESCRIPTION"
+msgstr "description"
+
+#. type: Plain text
+#: macros.man:12
+msgid "B<macros> is an example manpage for macro tests."
+msgstr "B<MACROS> IS AN EXAMPLE MANPAGE FOR MACRO TESTS."
+
+#. type: SH
+#: macros.man:12
+#, no-wrap
+msgid "OPTIONS"
+msgstr "options"
+
+#. type: TP
+#: macros.man:13
+#, no-wrap
+msgid "B<-t>, B<--test>=I<MACRO>"
+msgstr "B<-T>, B<--TEST>=I<macro>"
+
+#. type: Plain text
+#: macros.man:16
+msgid "Set the macro to test."
+msgstr "SET THE MACRO TO TEST."
+
+#. Check .UR and .UE macros for URLS.
+#. type: Plain text
+#: macros.man:23
+msgid ""
+"This is a link with a trailing comma to E<.UR https://www.example.org/test> "
+"an example site E<.UE ,> used for testing po4a."
+msgstr ""
+"THIS IS A LINK WITH A TRAILING COMMA TO E<.UR https://www.example.org/TEST> "
+"AN EXAMPLE SITE E<.UE ,> USED FOR TESTING PO4A."
+
+#. type: Plain text
+#: macros.man:28
+msgid ""
+"E<.UR https://www.example.org/test2> This link E<.UE> does not contain "
+"punctuation after the UE macro."
+msgstr ""
+"E<.UR https://www.example.org/TEST2> THIS LINK E<.UE> DOES NOT CONTAIN "
+"PUNCTUATION AFTER THE ue MACRO."
+
+#. Check .MT and .ME macros for mail addresses.
+#. type: Plain text
+#: macros.man:35
+msgid ""
+"This is a mail address with a trailing comma for E<.MT foo@example.org> Mr. "
+"Foo E<.ME ,> used for testing po4a."
+msgstr ""
+"THIS IS A MAIL ADDRESS WITH A TRAILING COMMA FOR E<.MT foo@example.org> MR. "
+"FOO E<.ME ,> USED FOR TESTING PO4A."
+
+#. type: Plain text
+#: macros.man:40
+msgid ""
+"E<.MT foo@example.org> Mr. Foo E<.ME> does not contain punctuation after the "
+"ME macro."
+msgstr ""
+"E<.MT foo@example.org> MR. FOO E<.ME> DOES NOT CONTAIN PUNCTUATION AFTER THE "
+"me MACRO."
+
+#. type: SH
+#: macros.man:40
+#, no-wrap
+msgid "SYNOPSIS II"
+msgstr "synopsis ii"
+
+#. Check synopsis macros with terminating YS.
+#. type: SY
+#: macros.man:42 macros.man:49
+#, no-wrap
+msgid "command"
+msgstr "COMMAND"
+
+#. type: OP
+#: macros.man:43 macros.man:50
+#, no-wrap
+msgid "-a"
+msgstr "-A"
+
+#. type: OP
+#: macros.man:43 macros.man:50
+#, no-wrap
+msgid "arg1"
+msgstr "ARG1"
+
+#. type: OP
+#: macros.man:44
+#, no-wrap
+msgid "-b"
+msgstr "-B"
+
+#. type: OP
+#: macros.man:44
+#, no-wrap
+msgid "arg2"
+msgstr "ARG2"
+
+#. type: Plain text
+#: macros.man:47
+msgid "[I<file> I<.\\|.\\|.>]"
+msgstr ""
+
+#. type: SH
+#: macros.man:47
+#, no-wrap
+msgid "SYNOPSIS III"
+msgstr "synopsis iii"
+
+#. type: Plain text
+#: macros.man:54
+msgid "More text."
+msgstr "MORE TEXT."
+
+#. type: Plain text
+#: macros.man:56
+msgid ""
+"B<Note that long long long long long long long long long long long long long "
+"long long long long long BOLD text should not be wrapped.> I<ITALIC long "
+"long long long long long long long long long long long long long long long "
+"long long text should not be wrapped either.>"
+msgstr ""
+"B<nOTE THAT LONG LONG LONG LONG LONG LONG LONG LONG LONG LONG LONG LONG LONG "
+"LONG LONG LONG LONG LONG bold TEXT SHOULD NOT BE WRAPPED.> I<italic LONG "
+"LONG LONG LONG LONG LONG LONG LONG LONG LONG LONG LONG LONG LONG LONG LONG "
+"LONG LONG TEXT SHOULD NOT BE WRAPPED EITHER.>"
diff --git a/t/fmt/man/macros.pot b/t/fmt/man/macros.pot
new file mode 100644
index 0000000..15f544a
--- /dev/null
+++ b/t/fmt/man/macros.pot
@@ -0,0 +1,165 @@
+# SOME DESCRIPTIVE TITLE
+# Copyright (C) YEAR Free Software Foundation, Inc.
+# This file is distributed under the same license as the PACKAGE package.
+# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
+#
+#, fuzzy
+msgid ""
+msgstr ""
+"Project-Id-Version: PACKAGE VERSION\n"
+"POT-Creation-Date: 2018-06-08 15:49+0200\n"
+"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
+"Language-Team: LANGUAGE <LL@li.org>\n"
+"Language: \n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+
+#. type: TH
+#: macros.man:1
+#, no-wrap
+msgid "MACROS"
+msgstr ""
+
+#. type: SH
+#: macros.man:2
+#, no-wrap
+msgid "NAME"
+msgstr ""
+
+#. type: Plain text
+#: macros.man:4
+msgid "macros - test po4a's support of some groff macros"
+msgstr ""
+
+#. type: SH
+#: macros.man:4
+#, no-wrap
+msgid "SYNOPSIS"
+msgstr ""
+
+#. type: Plain text
+#: macros.man:9
+msgid "B<macros> [B<-t> I<MACRO>] [B<--test> I<MACRO>] I<macro>..."
+msgstr ""
+
+#. type: SH
+#: macros.man:9
+#, no-wrap
+msgid "DESCRIPTION"
+msgstr ""
+
+#. type: Plain text
+#: macros.man:12
+msgid "B<macros> is an example manpage for macro tests."
+msgstr ""
+
+#. type: SH
+#: macros.man:12
+#, no-wrap
+msgid "OPTIONS"
+msgstr ""
+
+#. type: TP
+#: macros.man:13
+#, no-wrap
+msgid "B<-t>, B<--test>=I<MACRO>"
+msgstr ""
+
+#. type: Plain text
+#: macros.man:16
+msgid "Set the macro to test."
+msgstr ""
+
+#. Check .UR and .UE macros for URLS.
+#. type: Plain text
+#: macros.man:23
+msgid ""
+"This is a link with a trailing comma to E<.UR https://www.example.org/test> "
+"an example site E<.UE ,> used for testing po4a."
+msgstr ""
+
+#. type: Plain text
+#: macros.man:28
+msgid ""
+"E<.UR https://www.example.org/test2> This link E<.UE> does not contain "
+"punctuation after the UE macro."
+msgstr ""
+
+#. Check .MT and .ME macros for mail addresses.
+#. type: Plain text
+#: macros.man:35
+msgid ""
+"This is a mail address with a trailing comma for E<.MT foo@example.org> "
+"Mr. Foo E<.ME ,> used for testing po4a."
+msgstr ""
+
+#. type: Plain text
+#: macros.man:40
+msgid ""
+"E<.MT foo@example.org> Mr. Foo E<.ME> does not contain punctuation after the "
+"ME macro."
+msgstr ""
+
+#. type: SH
+#: macros.man:40
+#, no-wrap
+msgid "SYNOPSIS II"
+msgstr ""
+
+#. Check synopsis macros with terminating YS.
+#. type: SY
+#: macros.man:42 macros.man:49
+#, no-wrap
+msgid "command"
+msgstr ""
+
+#. type: OP
+#: macros.man:43 macros.man:50
+#, no-wrap
+msgid "-a"
+msgstr ""
+
+#. type: OP
+#: macros.man:43 macros.man:50
+#, no-wrap
+msgid "arg1"
+msgstr ""
+
+#. type: OP
+#: macros.man:44
+#, no-wrap
+msgid "-b"
+msgstr ""
+
+#. type: OP
+#: macros.man:44
+#, no-wrap
+msgid "arg2"
+msgstr ""
+
+#. type: Plain text
+#: macros.man:47
+msgid "[I<file> I<.\\|.\\|.>]"
+msgstr ""
+
+#. type: SH
+#: macros.man:47
+#, no-wrap
+msgid "SYNOPSIS III"
+msgstr ""
+
+#. type: Plain text
+#: macros.man:54
+msgid "More text."
+msgstr ""
+
+#. type: Plain text
+#: macros.man:56
+msgid ""
+"B<Note that long long long long long long long long long long long long long "
+"long long long long long BOLD text should not be wrapped.> I<ITALIC long "
+"long long long long long long long long long long long long long long long "
+"long long text should not be wrapped either.>"
+msgstr ""
diff --git a/t/fmt/man/macros.trans b/t/fmt/man/macros.trans
new file mode 100644
index 0000000..99e492e
--- /dev/null
+++ b/t/fmt/man/macros.trans
@@ -0,0 +1,57 @@
+.\"*******************************************************************
+.\"
+.\" This file was generated with po4a. Translate the source file.
+.\"
+.\"*******************************************************************
+.TH macros 1
+.SH name
+MACROS \- TEST PO4A'S SUPPORT OF SOME GROFF MACROS
+.SH synopsis
+\fBMACROS\fP [\fB\-T\fP \fImacro\fP] [\fB\-\-TEST\fP \fImacro\fP] \fIMACRO\fP...
+.SH description
+\fBMACROS\fP IS AN EXAMPLE MANPAGE FOR MACRO TESTS.
+.SH options
+.TP
+\fB\-T\fP, \fB\-\-TEST\fP=\fImacro\fP
+SET THE MACRO TO TEST.
+.P
+.\" Check .UR and .UE macros for URLS.
+THIS IS A LINK WITH A TRAILING COMMA TO
+.UR https://www.example.org/TEST
+AN EXAMPLE SITE
+.UE ,
+USED FOR TESTING PO4A.
+.P
+.UR https://www.example.org/TEST2
+THIS LINK
+.UE
+DOES NOT CONTAIN
+PUNCTUATION AFTER THE ue MACRO.
+.P
+.\" Check .MT and .ME macros for mail addresses.
+THIS IS A MAIL ADDRESS WITH A TRAILING COMMA FOR
+.MT foo@example.org
+MR. FOO
+.ME ,
+USED FOR TESTING PO4A.
+.P
+.MT foo@example.org
+MR. FOO
+.ME
+DOES NOT CONTAIN PUNCTUATION AFTER THE
+me MACRO.
+.SH "synopsis ii"
+.\" Check synopsis macros.
+.SY COMMAND
+.OP \-A ARG1
+.OP \-B ARG2
+[\fIfile\fP \fI.\|.\|.\fP]
+.SH "synopsis iii"
+.\" Check synopsis macros with terminating YS.
+.SY COMMAND
+.OP \-A ARG1
+.YS
+.P
+MORE TEXT.
+
+\fBnOTE THAT LONG LONG LONG LONG LONG LONG LONG LONG LONG LONG LONG LONG LONG LONG LONG LONG LONG LONG bold TEXT SHOULD NOT BE WRAPPED.\fP \fIitalic LONG LONG LONG LONG LONG LONG LONG LONG LONG LONG LONG LONG LONG LONG LONG LONG LONG LONG TEXT SHOULD NOT BE WRAPPED EITHER.\fP
diff --git a/t/fmt/man/mdoc.man b/t/fmt/man/mdoc.man
new file mode 100644
index 0000000..592322c
--- /dev/null
+++ b/t/fmt/man/mdoc.man
@@ -0,0 +1,44 @@
+.Dd Jun 03, 2006
+.Os Debian
+.Dt MDOC 1
+.Sh NAME
+.Nm mdoc
+.Nd test man page in mdoc
+.Sh synopsis
+.Nm
+.Bk
+.Op Ar option ...
+.Ek
+.Sh description
+This manual page documents
+.Nm ,
+a fake program.
+.Ss Sub-section
+.Nm
+and also another inline
+.Xr command 1 Ns 's
+argument.
+.
+Lets try some punctuation
+.Pa /etc/texmf/updmap.d/ .
+.Pp
+test2
+.Pa ~/.texmf-config/updmap.d ),
+and
+.Pa ~/.texmf-var/web2c/updmap.cfg ) ;
+and
+.Pa ~/.texmf-var/web2c/updmap.cfg ) .
+.Sh authors
+This manual page was written by
+.An -nosplit
+.An me
+and
+.An "m y" Aq self
+
+And lets play with fonts
+.br
+.Fd #include <netdb.h> \ \ \fP/* Or <unistd.h> on some systems */
+.Ft int
+.Fn rcmd "char **ahost" "int inport"
+.br
+?
diff --git a/t/fmt/man/mdoc.norm b/t/fmt/man/mdoc.norm
new file mode 100644
index 0000000..d35c4cb
--- /dev/null
+++ b/t/fmt/man/mdoc.norm
@@ -0,0 +1,49 @@
+.\"*******************************************************************
+.\"
+.\" This file was generated with po4a. Translate the source file.
+.\"
+.\"*******************************************************************
+.Dd Jun 03, 2006
+.Os Debian
+.Dt MDOC 1
+.Sh NAME
+.Nm mdoc
+.Nd test man page in mdoc
+.Sh synopsis
+.Nm
+.Bk
+.Op Ar option ...
+.Ek
+.Sh description
+This manual page documents
+.Nm ,
+a fake program.
+.Ss Sub-section
+.Nm
+and also another inline
+.Xr command 1 Ns 's
+argument.
+.
+Lets try some punctuation
+.Pa /etc/texmf/updmap.d/ .
+.Pp
+test2
+.Pa ~/.texmf-config/updmap.d ),
+and
+.Pa ~/.texmf-var/web2c/updmap.cfg ) ;
+and
+.Pa ~/.texmf-var/web2c/updmap.cfg ) .
+.Sh authors
+This manual page was written by
+.An -nosplit
+.An me
+and
+.An "m y" Aq self
+
+And lets play with fonts
+.br
+.Fd #include <netdb.h> \ \ \fP/* Or <unistd.h> on some systems */
+.Ft int
+.Fn rcmd "char **ahost" "int inport"
+.br
+?
diff --git a/t/fmt/man/mdoc.po b/t/fmt/man/mdoc.po
new file mode 100644
index 0000000..c3a67d9
--- /dev/null
+++ b/t/fmt/man/mdoc.po
@@ -0,0 +1,133 @@
+# SOME DESCRIPTIVE TITLE
+# Copyright (C) YEAR Free Software Foundation, Inc.
+# This file is distributed under the same license as the PACKAGE package.
+# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
+#
+#, fuzzy
+msgid ""
+msgstr ""
+"Project-Id-Version: PACKAGE VERSION\n"
+"POT-Creation-Date: 2006-08-13 19:03+0200\n"
+"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
+"Language-Team: LANGUAGE <LL@li.org>\n"
+"Language: \n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+
+#. type: Dd
+#: mdoc.man:1
+#, no-wrap
+msgid "Jun 03, 2006"
+msgstr "JUN 03, 2006"
+
+#. type: Os
+#: mdoc.man:2
+#, no-wrap
+msgid "Debian"
+msgstr "DEBIAN"
+
+#. type: Dt
+#: mdoc.man:3
+#, no-wrap
+msgid "MDOC 1"
+msgstr ""
+
+#. type: Sh
+#: mdoc.man:4
+#, no-wrap
+msgid "NAME"
+msgstr "NAME"
+
+#. type: Plain text
+#: mdoc.man:6
+msgid "E<.Nm mdoc>"
+msgstr "E<.Nm mdoc>"
+
+#. type: Nd
+#: mdoc.man:6
+#, no-wrap
+msgid "test man page in mdoc"
+msgstr "TEST MAN PAGE IN MDOC"
+
+#. type: Sh
+#: mdoc.man:7
+#, no-wrap
+msgid "synopsis"
+msgstr "SYNOPSIS"
+
+#. type: Plain text
+#: mdoc.man:12
+msgid "E<.Nm> E<.Bk> E<.Op Ar option ...> E<.Ek>"
+msgstr "E<.Nm> E<.Bk> E<.Op Ar option ...> E<.Ek>"
+
+#. type: Sh
+#: mdoc.man:12
+#, no-wrap
+msgid "description"
+msgstr "DESCRIPTION"
+
+#. type: Plain text
+#: mdoc.man:16
+msgid "This manual page documents E<.Nm>, a fake program."
+msgstr "THIS MANUAL PAGE DOCUMENTS E<.Nm>, A FAKE PROGRAM."
+
+#. type: Ss
+#: mdoc.man:16
+#, no-wrap
+msgid "Sub-section"
+msgstr "SUB-SECTION"
+
+#. type: Plain text
+#: mdoc.man:21
+msgid "E<.Nm> and also another inline E<.Xr command 1 Ns 's> argument."
+msgstr "E<.Nm> AND ALSO ANOTHER INLINE E<.Xr COMMAND 1 Ns 'S> ARGUMENT."
+
+#. type: Plain text
+#: mdoc.man:24
+msgid "Lets try some punctuation E<.Pa /etc/texmf/updmap.d/>."
+msgstr "LETS TRY SOME PUNCTUATION E<.Pa /etc/texmf/updmap.d/>."
+
+#. type: Plain text
+#: mdoc.man:31
+msgid ""
+"test2 E<.Pa ~/.texmf-config/updmap.d ),> and E<.Pa "
+"~/.texmf-var/web2c/updmap.cfg>); and E<.Pa ~/.texmf-var/web2c/updmap.cfg>)."
+msgstr ""
+"TEST2 E<.Pa ~/.texmf-config/updmap.d ),> AND E<.Pa "
+"~/.texmf-var/web2c/updmap.cfg>); AND E<.Pa ~/.texmf-var/web2c/updmap.cfg>)."
+
+#. type: Sh
+#: mdoc.man:31
+#, no-wrap
+msgid "authors"
+msgstr "AUTHORS"
+
+#. type: Plain text
+#: mdoc.man:37
+msgid ""
+"This manual page was written by E<.An -nosplit> E<.An me> and E<.An \"m y\" "
+"Aq self>"
+msgstr ""
+"THIS MANUAL PAGE WAS WRITTEN BY E<.An -nosplit> E<.An ME> AND E<.An \"M Y\" "
+"Aq SELF>"
+
+#. type: Plain text
+#: mdoc.man:39
+msgid "And lets play with fonts"
+msgstr "AND LETS PLAY WITH FONTS"
+
+#. type: Plain text
+#: mdoc.man:43
+msgid ""
+"E<.Fd #include E<lt>netdb.hE<gt> \\ \\ \\fP/* Or E<lt>unistd.hE<gt> on some "
+"systems */> E<.Ft int> E<.Fn rcmd \"char **ahost\" \"int inport\">"
+msgstr ""
+"E<.Fd #include E<lt>netdb.hE<gt> \\ \\ \\fP/* Or E<lt>unistd.hE<gt> on some "
+"systems */> E<.Ft int> E<.Fn rcmd \"char **ahost\" \"int inport\">"
+
+#. type: Plain text
+#: mdoc.man:44
+msgid "?"
+msgstr "?"
diff --git a/t/fmt/man/mdoc.pot b/t/fmt/man/mdoc.pot
new file mode 100644
index 0000000..68503b2
--- /dev/null
+++ b/t/fmt/man/mdoc.pot
@@ -0,0 +1,127 @@
+# SOME DESCRIPTIVE TITLE
+# Copyright (C) YEAR Free Software Foundation, Inc.
+# This file is distributed under the same license as the PACKAGE package.
+# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
+#
+#, fuzzy
+msgid ""
+msgstr ""
+"Project-Id-Version: PACKAGE VERSION\n"
+"POT-Creation-Date: 2020-04-27 02:20+0200\n"
+"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
+"Language-Team: LANGUAGE <LL@li.org>\n"
+"Language: \n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+
+#. type: Dd
+#: mdoc.man:1
+#, no-wrap
+msgid "Jun 03, 2006"
+msgstr ""
+
+#. type: Os
+#: mdoc.man:2
+#, no-wrap
+msgid "Debian"
+msgstr ""
+
+#. type: Dt
+#: mdoc.man:3
+#, no-wrap
+msgid "MDOC 1"
+msgstr ""
+
+#. type: Sh
+#: mdoc.man:4
+#, no-wrap
+msgid "NAME"
+msgstr ""
+
+#. type: Plain text
+#: mdoc.man:6
+msgid "E<.Nm mdoc>"
+msgstr ""
+
+#. type: Nd
+#: mdoc.man:6
+#, no-wrap
+msgid "test man page in mdoc"
+msgstr ""
+
+#. type: Sh
+#: mdoc.man:7
+#, no-wrap
+msgid "synopsis"
+msgstr ""
+
+#. type: Plain text
+#: mdoc.man:12
+msgid "E<.Nm> E<.Bk> E<.Op Ar option ...> E<.Ek>"
+msgstr ""
+
+#. type: Sh
+#: mdoc.man:12
+#, no-wrap
+msgid "description"
+msgstr ""
+
+#. type: Plain text
+#: mdoc.man:16
+msgid "This manual page documents E<.Nm>, a fake program."
+msgstr ""
+
+#. type: Ss
+#: mdoc.man:16
+#, no-wrap
+msgid "Sub-section"
+msgstr ""
+
+#. type: Plain text
+#: mdoc.man:21
+msgid "E<.Nm> and also another inline E<.Xr command 1 Ns 's> argument."
+msgstr ""
+
+#. type: Plain text
+#: mdoc.man:24
+msgid "Lets try some punctuation E<.Pa /etc/texmf/updmap.d/>."
+msgstr ""
+
+#. type: Plain text
+#: mdoc.man:31
+msgid ""
+"test2 E<.Pa ~/.texmf-config/updmap.d ),> and E<.Pa "
+"~/.texmf-var/web2c/updmap.cfg>); and E<.Pa ~/.texmf-var/web2c/updmap.cfg>)."
+msgstr ""
+
+#. type: Sh
+#: mdoc.man:31
+#, no-wrap
+msgid "authors"
+msgstr ""
+
+#. type: Plain text
+#: mdoc.man:37
+msgid ""
+"This manual page was written by E<.An -nosplit> E<.An me> and E<.An \"m y\" "
+"Aq self>"
+msgstr ""
+
+#. type: Plain text
+#: mdoc.man:39
+msgid "And lets play with fonts"
+msgstr ""
+
+#. type: Plain text
+#: mdoc.man:43
+msgid ""
+"E<.Fd #include E<lt>netdb.hE<gt> \\ \\ \\fP/* Or E<lt>unistd.hE<gt> on some "
+"systems */> E<.Ft int> E<.Fn rcmd \"char **ahost\" \"int inport\">"
+msgstr ""
+
+#. type: Plain text
+#: mdoc.man:44
+msgid "?"
+msgstr ""
diff --git a/t/fmt/man/mdoc.trans b/t/fmt/man/mdoc.trans
new file mode 100644
index 0000000..6d37c54
--- /dev/null
+++ b/t/fmt/man/mdoc.trans
@@ -0,0 +1,49 @@
+.\"*******************************************************************
+.\"
+.\" This file was generated with po4a. Translate the source file.
+.\"
+.\"*******************************************************************
+.Dd JUN 03, 2006
+.Os DEBIAN
+.Dt MDOC 1
+.Sh NAME
+.Nm mdoc
+.Nd TEST MAN PAGE IN MDOC
+.Sh SYNOPSIS
+.Nm
+.Bk
+.Op Ar option ...
+.Ek
+.Sh DESCRIPTION
+THIS MANUAL PAGE DOCUMENTS
+.Nm ,
+A FAKE PROGRAM.
+.Ss SUB-SECTION
+.Nm
+AND ALSO ANOTHER INLINE
+.Xr COMMAND 1 Ns 'S
+ARGUMENT.
+.
+LETS TRY SOME PUNCTUATION
+.Pa /etc/texmf/updmap.d/ .
+.Pp
+TEST2
+.Pa ~/.texmf-config/updmap.d ),
+AND
+.Pa ~/.texmf-var/web2c/updmap.cfg ) ;
+AND
+.Pa ~/.texmf-var/web2c/updmap.cfg ) .
+.Sh AUTHORS
+THIS MANUAL PAGE WAS WRITTEN BY
+.An -nosplit
+.An ME
+AND
+.An "M Y" Aq SELF
+
+AND LETS PLAY WITH FONTS
+.br
+.Fd #include <netdb.h> \ \ \fP/* Or <unistd.h> on some systems */
+.Ft int
+.Fn rcmd "char **ahost" "int inport"
+.br
+?
diff --git a/t/fmt/man/null.man b/t/fmt/man/null.man
new file mode 100644
index 0000000..495f0e7
--- /dev/null
+++ b/t/fmt/man/null.man
@@ -0,0 +1,22 @@
+.TH null 1
+.\" This unit test may trigger errors when string is tested instead of
+.\" testing if it is defined, with a non-null length
+.SH 0
+
+0
+
+.IP 0
+null argument
+
+.nf
+foo1
+.fi
+\fP
+foo2
+
+.I foo
+.nf
+foo1
+.fi
+\fP
+foo2
diff --git a/t/fmt/man/null.norm b/t/fmt/man/null.norm
new file mode 100644
index 0000000..4010eb7
--- /dev/null
+++ b/t/fmt/man/null.norm
@@ -0,0 +1,26 @@
+.\"*******************************************************************
+.\"
+.\" This file was generated with po4a. Translate the source file.
+.\"
+.\"*******************************************************************
+.TH null 1
+.\" This unit test may trigger errors when string is tested instead of
+.\" testing if it is defined, with a non-null length
+.SH 0
+
+0
+
+.IP 0
+null argument
+
+.nf
+foo1
+.fi
+
+foo2
+
+\fIfoo\fP
+.nf
+foo1
+.fi
+\fI foo2\fP
diff --git a/t/fmt/man/null.po b/t/fmt/man/null.po
new file mode 100644
index 0000000..4ed9e22
--- /dev/null
+++ b/t/fmt/man/null.po
@@ -0,0 +1,55 @@
+# SOME DESCRIPTIVE TITLE
+# Copyright (C) YEAR Free Software Foundation, Inc.
+# This file is distributed under the same license as the PACKAGE package.
+# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
+#
+#, fuzzy
+msgid ""
+msgstr ""
+"Project-Id-Version: PACKAGE VERSION\n"
+"POT-Creation-Date: 2004-11-28 21:00+0100\n"
+"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
+"Language-Team: LANGUAGE <LL@li.org>\n"
+"Language: \n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+
+#. type: TH
+#: null.man:1
+#, no-wrap
+msgid "null"
+msgstr "NULL"
+
+#. type: IP
+#: null.man:4 null.man:7 null.man:8
+#, no-wrap
+msgid "0"
+msgstr "0"
+
+#. type: Plain text
+#: null.man:10
+msgid "null argument"
+msgstr "NULL ARGUMENT"
+
+#. type: Plain text
+#: null.man:13 null.man:20
+#, no-wrap
+msgid "foo1\n"
+msgstr "FOO1\n"
+
+#. type: Plain text
+#: null.man:16
+msgid "foo2"
+msgstr "FOO2"
+
+#. type: Plain text
+#: null.man:18
+msgid "I<foo>"
+msgstr "I<FOO>"
+
+#. type: Plain text
+#: null.man:22
+msgid "I< foo2>"
+msgstr "I< FOO2>"
diff --git a/t/fmt/man/null.pot b/t/fmt/man/null.pot
new file mode 100644
index 0000000..2b4b9e6
--- /dev/null
+++ b/t/fmt/man/null.pot
@@ -0,0 +1,55 @@
+# SOME DESCRIPTIVE TITLE
+# Copyright (C) YEAR Free Software Foundation, Inc.
+# This file is distributed under the same license as the PACKAGE package.
+# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
+#
+#, fuzzy
+msgid ""
+msgstr ""
+"Project-Id-Version: PACKAGE VERSION\n"
+"POT-Creation-Date: 2004-11-28 21:00+0100\n"
+"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
+"Language-Team: LANGUAGE <LL@li.org>\n"
+"Language: \n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+
+#. type: TH
+#: null.man:1
+#, no-wrap
+msgid "null"
+msgstr ""
+
+#. type: IP
+#: null.man:4 null.man:7 null.man:8
+#, no-wrap
+msgid "0"
+msgstr ""
+
+#. type: Plain text
+#: null.man:10
+msgid "null argument"
+msgstr ""
+
+#. type: Plain text
+#: null.man:13 null.man:20
+#, no-wrap
+msgid "foo1\n"
+msgstr ""
+
+#. type: Plain text
+#: null.man:16
+msgid "foo2"
+msgstr ""
+
+#. type: Plain text
+#: null.man:18
+msgid "I<foo>"
+msgstr ""
+
+#. type: Plain text
+#: null.man:22
+msgid "I< foo2>"
+msgstr ""
diff --git a/t/fmt/man/null.trans b/t/fmt/man/null.trans
new file mode 100644
index 0000000..9f73b54
--- /dev/null
+++ b/t/fmt/man/null.trans
@@ -0,0 +1,26 @@
+.\"*******************************************************************
+.\"
+.\" This file was generated with po4a. Translate the source file.
+.\"
+.\"*******************************************************************
+.TH NULL 1
+.\" This unit test may trigger errors when string is tested instead of
+.\" testing if it is defined, with a non-null length
+.SH 0
+
+0
+
+.IP 0
+NULL ARGUMENT
+
+.nf
+FOO1
+.fi
+
+FOO2
+
+\fIFOO\fP
+.nf
+FOO1
+.fi
+\fI FOO2\fP
diff --git a/t/fmt/man/quoted-comment.man b/t/fmt/man/quoted-comment.man
new file mode 100644
index 0000000..64d3cf4
--- /dev/null
+++ b/t/fmt/man/quoted-comment.man
@@ -0,0 +1,6 @@
+'\" t
+.\" This test aims at ensuring that the line before this one still
+.\" starts with a single quote and not a dot.
+.\" That's important to groff especially for the --warnings used by
+.\" lintian. See also:
+.\" https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=744366
diff --git a/t/fmt/man/quoted-comment.norm b/t/fmt/man/quoted-comment.norm
new file mode 100644
index 0000000..64d3cf4
--- /dev/null
+++ b/t/fmt/man/quoted-comment.norm
@@ -0,0 +1,6 @@
+'\" t
+.\" This test aims at ensuring that the line before this one still
+.\" starts with a single quote and not a dot.
+.\" That's important to groff especially for the --warnings used by
+.\" lintian. See also:
+.\" https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=744366
diff --git a/t/fmt/man/quoted-comment.po b/t/fmt/man/quoted-comment.po
new file mode 100644
index 0000000..8a70e25
--- /dev/null
+++ b/t/fmt/man/quoted-comment.po
@@ -0,0 +1,18 @@
+# SOME DESCRIPTIVE TITLE
+# Copyright (C) YEAR Free Software Foundation, Inc.
+# This file is distributed under the same license as the PACKAGE package.
+# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
+#
+#, fuzzy
+msgid ""
+msgstr ""
+"Project-Id-Version: PACKAGE VERSION\n"
+"POT-Creation-Date: 2017-03-30 22:02+0200\n"
+"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
+"Language-Team: LANGUAGE <LL@li.org>\n"
+"Language: \n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+
diff --git a/t/fmt/man/quoted-comment.pot b/t/fmt/man/quoted-comment.pot
new file mode 100644
index 0000000..8a70e25
--- /dev/null
+++ b/t/fmt/man/quoted-comment.pot
@@ -0,0 +1,18 @@
+# SOME DESCRIPTIVE TITLE
+# Copyright (C) YEAR Free Software Foundation, Inc.
+# This file is distributed under the same license as the PACKAGE package.
+# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
+#
+#, fuzzy
+msgid ""
+msgstr ""
+"Project-Id-Version: PACKAGE VERSION\n"
+"POT-Creation-Date: 2017-03-30 22:02+0200\n"
+"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
+"Language-Team: LANGUAGE <LL@li.org>\n"
+"Language: \n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+
diff --git a/t/fmt/man/quoted-comment.trans b/t/fmt/man/quoted-comment.trans
new file mode 100644
index 0000000..64d3cf4
--- /dev/null
+++ b/t/fmt/man/quoted-comment.trans
@@ -0,0 +1,6 @@
+'\" t
+.\" This test aims at ensuring that the line before this one still
+.\" starts with a single quote and not a dot.
+.\" That's important to groff especially for the --warnings used by
+.\" lintian. See also:
+.\" https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=744366
diff --git a/t/fmt/man/quotes.man b/t/fmt/man/quotes.man
new file mode 100644
index 0000000..103223f
--- /dev/null
+++ b/t/fmt/man/quotes.man
@@ -0,0 +1,35 @@
+.TH test 1 test test
+.SH Section1
+
+.\" double quotes in a quoted arguments
+.B """"""
+
+.\" Other similar ugly quotes
+.BR """c""" " and " """posix""" .
+.BR 1. " ""libvga.config"" options"
+
+.SH 1. """libvga.config""" OPTIONS
+
+.\" this works, but inserts a space between the quotes and the parenthesis
+.B setlocale(lc_all, """""")
+
+.\" However, I recommend to use these quotes:
+.B setlocale(lc_all, \(dq\(dq)
+
+.\" Lets be nasty
+This:
+
+.BI -help , -h , -? , /?
+
+should be equivalent to:
+
+.BI "-help", "-h", "-?", "/?"
+
+This also:
+
+.BI -help" a -h a -? a /?
+
+should be equivalent to:
+
+.BI "-help"""a "-h"a "-?"a "/?"
+
diff --git a/t/fmt/man/quotes.norm b/t/fmt/man/quotes.norm
new file mode 100644
index 0000000..b053183
--- /dev/null
+++ b/t/fmt/man/quotes.norm
@@ -0,0 +1,39 @@
+.\"*******************************************************************
+.\"
+.\" This file was generated with po4a. Translate the source file.
+.\"
+.\"*******************************************************************
+.TH test 1 test test
+.SH Section1
+
+.\" double quotes in a quoted arguments
+\fB""\fP
+
+.\" Other similar ugly quotes
+\fB"c"\fP and \fB"posix"\fP. \fB1.\fP "libvga.config" options
+
+.SH "1. \(dqlibvga.config\(dq OPTIONS"
+
+.\" this works, but inserts a space between the quotes and the parenthesis
+\fBsetlocale(lc_all, "" )\fP
+
+.\" However, I recommend to use these quotes:
+\fBsetlocale(lc_all, "")\fP
+
+.\" Lets be nasty
+This:
+
+\fB\-help\fP\fI,\fP\fB\-h\fP\fI,\fP\fB\-?\fP\fI,\fP\fB/?\fP
+
+should be equivalent to:
+
+\fB\-help\fP\fI,\fP\fB\-h\fP\fI,\fP\fB\-?\fP\fI,\fP\fB/?\fP
+
+This also:
+
+\fB\-help"\fP\fIa\fP\fB\-h\fP\fIa\fP\fB\-?\fP\fIa\fP\fB/?\fP
+
+should be equivalent to:
+
+\fB\-help"\fP\fIa\fP\fB\-h\fP\fIa\fP\fB\-?\fP\fIa\fP\fB/?\fP
+
diff --git a/t/fmt/man/quotes.po b/t/fmt/man/quotes.po
new file mode 100644
index 0000000..485ed85
--- /dev/null
+++ b/t/fmt/man/quotes.po
@@ -0,0 +1,85 @@
+# SOME DESCRIPTIVE TITLE
+# Copyright (C) YEAR Free Software Foundation, Inc.
+# This file is distributed under the same license as the PACKAGE package.
+# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
+#
+#, fuzzy
+msgid ""
+msgstr ""
+"Project-Id-Version: PACKAGE VERSION\n"
+"POT-Creation-Date: 2020-04-26 22:14+0200\n"
+"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
+"Language-Team: LANGUAGE <LL@li.org>\n"
+"Language: \n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+
+#. type: TH
+#: quotes.man:1
+#, no-wrap
+msgid "test"
+msgstr "TEST"
+
+#. type: SH
+#: quotes.man:2
+#, no-wrap
+msgid "Section1"
+msgstr "SECTION1"
+
+#. double quotes in a quoted arguments
+#. type: Plain text
+#: quotes.man:6
+msgid "B<\"\">"
+msgstr "B<\"\">"
+
+#. Other similar ugly quotes
+#. type: Plain text
+#: quotes.man:10
+msgid "B<\"c\"> and B<\"posix\">. B<1.> \"libvga.config\" options"
+msgstr "B<\"C\"> AND B<\"POSIX\">. B<1.> \"LIBVGA.CONFIG\" OPTIONS"
+
+#. type: SH
+#: quotes.man:11
+#, no-wrap
+msgid "1. \"libvga.config\" OPTIONS"
+msgstr "1. \"LIBVGA.CONFIG\" OPTIONS"
+
+#. this works, but inserts a space between the quotes and the parenthesis
+#. type: Plain text
+#: quotes.man:15
+msgid "B<setlocale(lc_all, \"\" )>"
+msgstr "B<SETLOCALE(LC_ALL, \"\" )>"
+
+#. However, I recommend to use these quotes:
+#. type: Plain text
+#: quotes.man:18
+msgid "B<setlocale(lc_all, \"\")>"
+msgstr "B<SETLOCALE(LC_ALL, \"\")>"
+
+#. Lets be nasty
+#. type: Plain text
+#: quotes.man:21
+msgid "This:"
+msgstr "THIS:"
+
+#. type: Plain text
+#: quotes.man:23 quotes.man:27
+msgid "B<-help>I<,>B<-h>I<,>B<-?>I<,>B</?>"
+msgstr "B<-HELP>I<,>B<-H>I<,>B<-?>I<,>B</?>"
+
+#. type: Plain text
+#: quotes.man:25 quotes.man:33
+msgid "should be equivalent to:"
+msgstr "SHOULD BE EQUIVALENT TO:"
+
+#. type: Plain text
+#: quotes.man:29
+msgid "This also:"
+msgstr "THIS ALSO:"
+
+#. type: Plain text
+#: quotes.man:31 quotes.man:35
+msgid "B<-help\">I<a>B<-h>I<a>B<-?>I<a>B</?>"
+msgstr "B<-HELP\">I<1>B<-h>I<1>B<-?>I<1>B</?>"
diff --git a/t/fmt/man/quotes.pot b/t/fmt/man/quotes.pot
new file mode 100644
index 0000000..f211c13
--- /dev/null
+++ b/t/fmt/man/quotes.pot
@@ -0,0 +1,85 @@
+# SOME DESCRIPTIVE TITLE
+# Copyright (C) YEAR Free Software Foundation, Inc.
+# This file is distributed under the same license as the PACKAGE package.
+# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
+#
+#, fuzzy
+msgid ""
+msgstr ""
+"Project-Id-Version: PACKAGE VERSION\n"
+"POT-Creation-Date: 2020-04-26 22:14+0200\n"
+"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
+"Language-Team: LANGUAGE <LL@li.org>\n"
+"Language: \n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+
+#. type: TH
+#: quotes.man:1
+#, no-wrap
+msgid "test"
+msgstr ""
+
+#. type: SH
+#: quotes.man:2
+#, no-wrap
+msgid "Section1"
+msgstr ""
+
+#. double quotes in a quoted arguments
+#. type: Plain text
+#: quotes.man:6
+msgid "B<\"\">"
+msgstr ""
+
+#. Other similar ugly quotes
+#. type: Plain text
+#: quotes.man:10
+msgid "B<\"c\"> and B<\"posix\">. B<1.> \"libvga.config\" options"
+msgstr ""
+
+#. type: SH
+#: quotes.man:11
+#, no-wrap
+msgid "1. \"libvga.config\" OPTIONS"
+msgstr ""
+
+#. this works, but inserts a space between the quotes and the parenthesis
+#. type: Plain text
+#: quotes.man:15
+msgid "B<setlocale(lc_all, \"\" )>"
+msgstr ""
+
+#. However, I recommend to use these quotes:
+#. type: Plain text
+#: quotes.man:18
+msgid "B<setlocale(lc_all, \"\")>"
+msgstr ""
+
+#. Lets be nasty
+#. type: Plain text
+#: quotes.man:21
+msgid "This:"
+msgstr ""
+
+#. type: Plain text
+#: quotes.man:23 quotes.man:27
+msgid "B<-help>I<,>B<-h>I<,>B<-?>I<,>B</?>"
+msgstr ""
+
+#. type: Plain text
+#: quotes.man:25 quotes.man:33
+msgid "should be equivalent to:"
+msgstr ""
+
+#. type: Plain text
+#: quotes.man:29
+msgid "This also:"
+msgstr ""
+
+#. type: Plain text
+#: quotes.man:31 quotes.man:35
+msgid "B<-help\">I<a>B<-h>I<a>B<-?>I<a>B</?>"
+msgstr ""
diff --git a/t/fmt/man/quotes.trans b/t/fmt/man/quotes.trans
new file mode 100644
index 0000000..c3ce82d
--- /dev/null
+++ b/t/fmt/man/quotes.trans
@@ -0,0 +1,39 @@
+.\"*******************************************************************
+.\"
+.\" This file was generated with po4a. Translate the source file.
+.\"
+.\"*******************************************************************
+.TH TEST 1 TEST TEST
+.SH SECTION1
+
+.\" double quotes in a quoted arguments
+\fB""\fP
+
+.\" Other similar ugly quotes
+\fB"C"\fP AND \fB"POSIX"\fP. \fB1.\fP "LIBVGA.CONFIG" OPTIONS
+
+.SH "1. \(dqLIBVGA.CONFIG\(dq OPTIONS"
+
+.\" this works, but inserts a space between the quotes and the parenthesis
+\fBSETLOCALE(LC_ALL, "" )\fP
+
+.\" However, I recommend to use these quotes:
+\fBSETLOCALE(LC_ALL, "")\fP
+
+.\" Lets be nasty
+THIS:
+
+\fB\-HELP\fP\fI,\fP\fB\-H\fP\fI,\fP\fB\-?\fP\fI,\fP\fB/?\fP
+
+SHOULD BE EQUIVALENT TO:
+
+\fB\-HELP\fP\fI,\fP\fB\-H\fP\fI,\fP\fB\-?\fP\fI,\fP\fB/?\fP
+
+THIS ALSO:
+
+\fB\-HELP"\fP\fI1\fP\fB\-h\fP\fI1\fP\fB\-?\fP\fI1\fP\fB/?\fP
+
+SHOULD BE EQUIVALENT TO:
+
+\fB\-HELP"\fP\fI1\fP\fB\-h\fP\fI1\fP\fB\-?\fP\fI1\fP\fB/?\fP
+
diff --git a/t/fmt/man/spaces.man b/t/fmt/man/spaces.man
new file mode 100644
index 0000000..8e46e03
--- /dev/null
+++ b/t/fmt/man/spaces.man
@@ -0,0 +1,16 @@
+.TH SPACES 1
+.SH NAME
+.BR a " " b
+
+.BR a \ b
+
+.BR a\ b
+
+a\ b
+
+.\" There are no non breaking space in EUC-JP, so 0xA0 was converted to ?
+.\" by Encode::from_to
+a?b
+
+.\" No-break space in translation must not be removed
+a
diff --git a/t/fmt/man/spaces.norm b/t/fmt/man/spaces.norm
new file mode 100644
index 0000000..2e5283c
--- /dev/null
+++ b/t/fmt/man/spaces.norm
@@ -0,0 +1,21 @@
+.\"*******************************************************************
+.\"
+.\" This file was generated with po4a. Translate the source file.
+.\"
+.\"*******************************************************************
+.TH SPACES 1
+.SH NAME
+\fBa\fP \fBb\fP
+
+\fBa\fP\ \fBb\fP
+
+\fBa\ b\fP
+
+a\ b
+
+.\" There are no non breaking space in EUC-JP, so 0xA0 was converted to ?
+.\" by Encode::from_to
+a?b
+
+.\" No-break space in translation must not be removed
+a
diff --git a/t/fmt/man/spaces.po b/t/fmt/man/spaces.po
new file mode 100644
index 0000000..95a014b
--- /dev/null
+++ b/t/fmt/man/spaces.po
@@ -0,0 +1,62 @@
+# SOME DESCRIPTIVE TITLE
+# Copyright (C) YEAR Free Software Foundation, Inc.
+# This file is distributed under the same license as the PACKAGE package.
+# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
+#
+#, fuzzy
+msgid ""
+msgstr ""
+"Project-Id-Version: PACKAGE VERSION\n"
+"POT-Creation-Date: 2010-08-14 13:10+0300\n"
+"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
+"Language-Team: LANGUAGE <LL@li.org>\n"
+"Language: \n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+
+#. type: TH
+#: spaces.man:1
+#, no-wrap
+msgid "SPACES"
+msgstr "SPACES"
+
+#. type: SH
+#: spaces.man:2
+#, no-wrap
+msgid "NAME"
+msgstr "name"
+
+#. type: Plain text
+#: spaces.man:4
+msgid "B<a> B<b>"
+msgstr "B<A> B<B>"
+
+#. type: Plain text
+#: spaces.man:6
+msgid "B<a>\\ B<b>"
+msgstr "B<A>\\ B<B>"
+
+#. type: Plain text
+#: spaces.man:8
+msgid "B<a\\ b>"
+msgstr "B<A\\ B>"
+
+#. type: Plain text
+#: spaces.man:10
+msgid "a\\ b"
+msgstr "A\\ B"
+
+#. There are no non breaking space in EUC-JP, so 0xA0 was converted to ?
+#. by Encode::from_to
+#. type: Plain text
+#: spaces.man:14
+msgid "a?b"
+msgstr "A?B"
+
+#. No-break space in translation must not be removed
+#. type: Plain text
+#: spaces.man:16
+msgid "a"
+msgstr "A"
diff --git a/t/fmt/man/spaces.pot b/t/fmt/man/spaces.pot
new file mode 100644
index 0000000..f333a39
--- /dev/null
+++ b/t/fmt/man/spaces.pot
@@ -0,0 +1,62 @@
+# SOME DESCRIPTIVE TITLE
+# Copyright (C) YEAR Free Software Foundation, Inc.
+# This file is distributed under the same license as the PACKAGE package.
+# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
+#
+#, fuzzy
+msgid ""
+msgstr ""
+"Project-Id-Version: PACKAGE VERSION\n"
+"POT-Creation-Date: 2010-08-14 13:10+0300\n"
+"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
+"Language-Team: LANGUAGE <LL@li.org>\n"
+"Language: \n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+
+#. type: TH
+#: spaces.man:1
+#, no-wrap
+msgid "SPACES"
+msgstr ""
+
+#. type: SH
+#: spaces.man:2
+#, no-wrap
+msgid "NAME"
+msgstr ""
+
+#. type: Plain text
+#: spaces.man:4
+msgid "B<a> B<b>"
+msgstr ""
+
+#. type: Plain text
+#: spaces.man:6
+msgid "B<a>\\ B<b>"
+msgstr ""
+
+#. type: Plain text
+#: spaces.man:8
+msgid "B<a\\ b>"
+msgstr ""
+
+#. type: Plain text
+#: spaces.man:10
+msgid "a\\ b"
+msgstr ""
+
+#. There are no non breaking space in EUC-JP, so 0xA0 was converted to ?
+#. by Encode::from_to
+#. type: Plain text
+#: spaces.man:14
+msgid "a?b"
+msgstr ""
+
+#. No-break space in translation must not be removed
+#. type: Plain text
+#: spaces.man:16
+msgid "a"
+msgstr ""
diff --git a/t/fmt/man/spaces.trans b/t/fmt/man/spaces.trans
new file mode 100644
index 0000000..d27839c
--- /dev/null
+++ b/t/fmt/man/spaces.trans
@@ -0,0 +1,21 @@
+.\"*******************************************************************
+.\"
+.\" This file was generated with po4a. Translate the source file.
+.\"
+.\"*******************************************************************
+.TH SPACES 1
+.SH name
+\fBA\fP \fBB\fP
+
+\fBA\fP\ \fBB\fP
+
+\fBA\ B\fP
+
+A\ B
+
+.\" There are no non breaking space in EUC-JP, so 0xA0 was converted to ?
+.\" by Encode::from_to
+A?B
+
+.\" No-break space in translation must not be removed
+A
diff --git a/t/fmt/man/tbl-mdoc-mixed1.man b/t/fmt/man/tbl-mdoc-mixed1.man
new file mode 100644
index 0000000..db4f6cf
--- /dev/null
+++ b/t/fmt/man/tbl-mdoc-mixed1.man
@@ -0,0 +1,6 @@
+.\" Commentaire1
+.TH MIXED 1
+.SH NAME
+mixed \- test
+\fI
+.\" Commentaire2
diff --git a/t/fmt/man/tbl-mdoc-mixed1.norm b/t/fmt/man/tbl-mdoc-mixed1.norm
new file mode 100644
index 0000000..66fd40b
--- /dev/null
+++ b/t/fmt/man/tbl-mdoc-mixed1.norm
@@ -0,0 +1,10 @@
+.\" Commentaire1
+.\"*******************************************************************
+.\"
+.\" This file was generated with po4a. Translate the source file.
+.\"
+.\"*******************************************************************
+.TH MIXED 1
+.SH NAME
+mixed \- test
+.\" Commentaire2
diff --git a/t/fmt/man/tbl-mdoc-mixed1.po b/t/fmt/man/tbl-mdoc-mixed1.po
new file mode 100644
index 0000000..a03ca16
--- /dev/null
+++ b/t/fmt/man/tbl-mdoc-mixed1.po
@@ -0,0 +1,46 @@
+# SOME DESCRIPTIVE TITLE
+# Copyright (C) YEAR Free Software Foundation, Inc.
+# This file is distributed under the same license as the PACKAGE package.
+# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
+#
+#, fuzzy
+msgid ""
+msgstr ""
+"Project-Id-Version: PACKAGE VERSION\n"
+"POT-Creation-Date: 2020-04-27 17:14+0200\n"
+"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
+"Language-Team: LANGUAGE <LL@li.org>\n"
+"Language: \n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+
+#. type: TH
+#: tbl-mdoc-mixed1.man:2
+#, no-wrap
+msgid "MIXED"
+msgstr "mixed"
+
+#. type: SH
+#: tbl-mdoc-mixed1.man:3
+#, no-wrap
+msgid "NAME"
+msgstr "name"
+
+#. type: Plain text
+#: tbl-mdoc-mixed1.man:5
+msgid "mixed - test"
+msgstr "MIXED - TEST"
+
+#~ msgid "11 24, 1979"
+#~ msgstr "11 24, 1979"
+
+#~ msgid "MIXED 2"
+#~ msgstr "mixed 2"
+
+#~ msgid "E<.Nm mixed2>"
+#~ msgstr "E<.Nm MIXED2>"
+
+#~ msgid "test2"
+#~ msgstr "TEST2"
diff --git a/t/fmt/man/tbl-mdoc-mixed1.pot b/t/fmt/man/tbl-mdoc-mixed1.pot
new file mode 100644
index 0000000..8653303
--- /dev/null
+++ b/t/fmt/man/tbl-mdoc-mixed1.pot
@@ -0,0 +1,34 @@
+# SOME DESCRIPTIVE TITLE
+# Copyright (C) YEAR Free Software Foundation, Inc.
+# This file is distributed under the same license as the PACKAGE package.
+# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
+#
+#, fuzzy
+msgid ""
+msgstr ""
+"Project-Id-Version: PACKAGE VERSION\n"
+"POT-Creation-Date: 2020-04-27 17:14+0200\n"
+"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
+"Language-Team: LANGUAGE <LL@li.org>\n"
+"Language: \n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+
+#. type: TH
+#: tbl-mdoc-mixed1.man:2
+#, no-wrap
+msgid "MIXED"
+msgstr ""
+
+#. type: SH
+#: tbl-mdoc-mixed1.man:3
+#, no-wrap
+msgid "NAME"
+msgstr ""
+
+#. type: Plain text
+#: tbl-mdoc-mixed1.man:5
+msgid "mixed - test"
+msgstr ""
diff --git a/t/fmt/man/tbl-mdoc-mixed1.trans b/t/fmt/man/tbl-mdoc-mixed1.trans
new file mode 100644
index 0000000..80436f5
--- /dev/null
+++ b/t/fmt/man/tbl-mdoc-mixed1.trans
@@ -0,0 +1,10 @@
+.\" Commentaire1
+.\"*******************************************************************
+.\"
+.\" This file was generated with po4a. Translate the source file.
+.\"
+.\"*******************************************************************
+.TH mixed 1
+.SH name
+MIXED \- TEST
+.\" Commentaire2
diff --git a/t/fmt/man/tbl-mdoc-mixed2.man b/t/fmt/man/tbl-mdoc-mixed2.man
new file mode 100644
index 0000000..f7c08f9
--- /dev/null
+++ b/t/fmt/man/tbl-mdoc-mixed2.man
@@ -0,0 +1,8 @@
+.\" Commentaire3
+.Dd 11 24, 1979
+.Dt MIXED 2
+.Os
+.Sh NAME
+.Nm mixed2
+.Nd test2
+.\" Commentaire4
diff --git a/t/fmt/man/tbl-mdoc-mixed2.norm b/t/fmt/man/tbl-mdoc-mixed2.norm
new file mode 100644
index 0000000..a5a4cf0
--- /dev/null
+++ b/t/fmt/man/tbl-mdoc-mixed2.norm
@@ -0,0 +1,13 @@
+.\" Commentaire3
+.\"*******************************************************************
+.\"
+.\" This file was generated with po4a. Translate the source file.
+.\"
+.\"*******************************************************************
+.Dd 11 24, 1979
+.Dt MIXED 2
+.Os
+.Sh NAME
+.Nm mixed2
+.Nd test2
+.\" Commentaire4
diff --git a/t/fmt/man/tbl-mdoc-mixed2.po b/t/fmt/man/tbl-mdoc-mixed2.po
new file mode 100644
index 0000000..bc4e2ec
--- /dev/null
+++ b/t/fmt/man/tbl-mdoc-mixed2.po
@@ -0,0 +1,52 @@
+# SOME DESCRIPTIVE TITLE
+# Copyright (C) YEAR Free Software Foundation, Inc.
+# This file is distributed under the same license as the PACKAGE package.
+# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
+#
+#, fuzzy
+msgid ""
+msgstr ""
+"Project-Id-Version: PACKAGE VERSION\n"
+"POT-Creation-Date: 2020-04-27 17:14+0200\n"
+"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
+"Language-Team: LANGUAGE <LL@li.org>\n"
+"Language: \n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+
+#. type: Dd
+#: tbl-mdoc-mixed2.man:2
+#, no-wrap
+msgid "11 24, 1979"
+msgstr "11 24, 1979"
+
+#. type: Dt
+#: tbl-mdoc-mixed2.man:3
+#, no-wrap
+msgid "MIXED 2"
+msgstr "mixed 2"
+
+#. type: Sh
+#: tbl-mdoc-mixed2.man:5
+#, no-wrap
+msgid "NAME"
+msgstr "NAME"
+
+#. type: Plain text
+#: tbl-mdoc-mixed2.man:7
+msgid "E<.Nm mixed2>"
+msgstr "E<.Nm MIXED2>"
+
+#. type: Nd
+#: tbl-mdoc-mixed2.man:7
+#, no-wrap
+msgid "test2"
+msgstr "TEST2"
+
+#~ msgid "MIXED"
+#~ msgstr "mixed"
+
+#~ msgid "mixed - test"
+#~ msgstr "MIXED - TEST"
diff --git a/t/fmt/man/tbl-mdoc-mixed2.pot b/t/fmt/man/tbl-mdoc-mixed2.pot
new file mode 100644
index 0000000..b1cbe2e
--- /dev/null
+++ b/t/fmt/man/tbl-mdoc-mixed2.pot
@@ -0,0 +1,46 @@
+# SOME DESCRIPTIVE TITLE
+# Copyright (C) YEAR Free Software Foundation, Inc.
+# This file is distributed under the same license as the PACKAGE package.
+# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
+#
+#, fuzzy
+msgid ""
+msgstr ""
+"Project-Id-Version: PACKAGE VERSION\n"
+"POT-Creation-Date: 2020-04-27 17:14+0200\n"
+"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
+"Language-Team: LANGUAGE <LL@li.org>\n"
+"Language: \n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+
+#. type: Dd
+#: tbl-mdoc-mixed2.man:2
+#, no-wrap
+msgid "11 24, 1979"
+msgstr ""
+
+#. type: Dt
+#: tbl-mdoc-mixed2.man:3
+#, no-wrap
+msgid "MIXED 2"
+msgstr ""
+
+#. type: Sh
+#: tbl-mdoc-mixed2.man:5
+#, no-wrap
+msgid "NAME"
+msgstr ""
+
+#. type: Plain text
+#: tbl-mdoc-mixed2.man:7
+msgid "E<.Nm mixed2>"
+msgstr ""
+
+#. type: Nd
+#: tbl-mdoc-mixed2.man:7
+#, no-wrap
+msgid "test2"
+msgstr ""
diff --git a/t/fmt/man/tbl-mdoc-mixed2.trans b/t/fmt/man/tbl-mdoc-mixed2.trans
new file mode 100644
index 0000000..6ee2f01
--- /dev/null
+++ b/t/fmt/man/tbl-mdoc-mixed2.trans
@@ -0,0 +1,13 @@
+.\" Commentaire3
+.\"*******************************************************************
+.\"
+.\" This file was generated with po4a. Translate the source file.
+.\"
+.\"*******************************************************************
+.Dd 11 24, 1979
+.Dt mixed 2
+.Os
+.Sh NAME
+.Nm MIXED2
+.Nd TEST2
+.\" Commentaire4
diff --git a/t/fmt/man/tbl-mdoc-mixed3.man b/t/fmt/man/tbl-mdoc-mixed3.man
new file mode 100644
index 0000000..bf5300f
--- /dev/null
+++ b/t/fmt/man/tbl-mdoc-mixed3.man
@@ -0,0 +1,6 @@
+.\" Commentaire5
+.TH MIXED 1
+.SH NAME
+mixed \- test
+\fI
+.\" Commentaire6
diff --git a/t/fmt/man/tbl-mdoc-mixed3.norm b/t/fmt/man/tbl-mdoc-mixed3.norm
new file mode 100644
index 0000000..c7b4e54
--- /dev/null
+++ b/t/fmt/man/tbl-mdoc-mixed3.norm
@@ -0,0 +1,10 @@
+.\" Commentaire5
+.\"*******************************************************************
+.\"
+.\" This file was generated with po4a. Translate the source file.
+.\"
+.\"*******************************************************************
+.TH MIXED 1
+.SH NAME
+mixed \- test
+.\" Commentaire6
diff --git a/t/fmt/man/tbl-mdoc-mixed3.po b/t/fmt/man/tbl-mdoc-mixed3.po
new file mode 100644
index 0000000..3f8c2c4
--- /dev/null
+++ b/t/fmt/man/tbl-mdoc-mixed3.po
@@ -0,0 +1,46 @@
+# SOME DESCRIPTIVE TITLE
+# Copyright (C) YEAR Free Software Foundation, Inc.
+# This file is distributed under the same license as the PACKAGE package.
+# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
+#
+#, fuzzy
+msgid ""
+msgstr ""
+"Project-Id-Version: PACKAGE VERSION\n"
+"POT-Creation-Date: 2020-04-27 17:14+0200\n"
+"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
+"Language-Team: LANGUAGE <LL@li.org>\n"
+"Language: \n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+
+#. type: TH
+#: tbl-mdoc-mixed3.man:2
+#, no-wrap
+msgid "MIXED"
+msgstr "mixed"
+
+#. type: SH
+#: tbl-mdoc-mixed3.man:3
+#, no-wrap
+msgid "NAME"
+msgstr "name"
+
+#. type: Plain text
+#: tbl-mdoc-mixed3.man:5
+msgid "mixed - test"
+msgstr "MIXED - TEST"
+
+#~ msgid "11 24, 1979"
+#~ msgstr "11 24, 1979"
+
+#~ msgid "MIXED 2"
+#~ msgstr "mixed 2"
+
+#~ msgid "E<.Nm mixed2>"
+#~ msgstr "E<.Nm MIXED2>"
+
+#~ msgid "test2"
+#~ msgstr "TEST2"
diff --git a/t/fmt/man/tbl-mdoc-mixed3.pot b/t/fmt/man/tbl-mdoc-mixed3.pot
new file mode 100644
index 0000000..8b8e206
--- /dev/null
+++ b/t/fmt/man/tbl-mdoc-mixed3.pot
@@ -0,0 +1,34 @@
+# SOME DESCRIPTIVE TITLE
+# Copyright (C) YEAR Free Software Foundation, Inc.
+# This file is distributed under the same license as the PACKAGE package.
+# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
+#
+#, fuzzy
+msgid ""
+msgstr ""
+"Project-Id-Version: PACKAGE VERSION\n"
+"POT-Creation-Date: 2020-04-27 17:14+0200\n"
+"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
+"Language-Team: LANGUAGE <LL@li.org>\n"
+"Language: \n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+
+#. type: TH
+#: tbl-mdoc-mixed3.man:2
+#, no-wrap
+msgid "MIXED"
+msgstr ""
+
+#. type: SH
+#: tbl-mdoc-mixed3.man:3
+#, no-wrap
+msgid "NAME"
+msgstr ""
+
+#. type: Plain text
+#: tbl-mdoc-mixed3.man:5
+msgid "mixed - test"
+msgstr ""
diff --git a/t/fmt/man/tbl-mdoc-mixed3.trans b/t/fmt/man/tbl-mdoc-mixed3.trans
new file mode 100644
index 0000000..3644111
--- /dev/null
+++ b/t/fmt/man/tbl-mdoc-mixed3.trans
@@ -0,0 +1,10 @@
+.\" Commentaire5
+.\"*******************************************************************
+.\"
+.\" This file was generated with po4a. Translate the source file.
+.\"
+.\"*******************************************************************
+.TH mixed 1
+.SH name
+MIXED \- TEST
+.\" Commentaire6
diff --git a/t/fmt/man/tbl-mdoc-mixed4.man b/t/fmt/man/tbl-mdoc-mixed4.man
new file mode 100644
index 0000000..50a285e
--- /dev/null
+++ b/t/fmt/man/tbl-mdoc-mixed4.man
@@ -0,0 +1,6 @@
+.\" Commentaire7
+.TH MIXED 1
+.SH NAME
+mixed \- test
+\fI
+.\" Commentaire8
diff --git a/t/fmt/man/tbl-mdoc-mixed4.norm b/t/fmt/man/tbl-mdoc-mixed4.norm
new file mode 100644
index 0000000..51de9c6
--- /dev/null
+++ b/t/fmt/man/tbl-mdoc-mixed4.norm
@@ -0,0 +1,10 @@
+.\" Commentaire7
+.\"*******************************************************************
+.\"
+.\" This file was generated with po4a. Translate the source file.
+.\"
+.\"*******************************************************************
+.TH MIXED 1
+.SH NAME
+mixed \- test
+.\" Commentaire8
diff --git a/t/fmt/man/tbl-mdoc-mixed4.po b/t/fmt/man/tbl-mdoc-mixed4.po
new file mode 100644
index 0000000..754802c
--- /dev/null
+++ b/t/fmt/man/tbl-mdoc-mixed4.po
@@ -0,0 +1,46 @@
+# SOME DESCRIPTIVE TITLE
+# Copyright (C) YEAR Free Software Foundation, Inc.
+# This file is distributed under the same license as the PACKAGE package.
+# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
+#
+#, fuzzy
+msgid ""
+msgstr ""
+"Project-Id-Version: PACKAGE VERSION\n"
+"POT-Creation-Date: 2020-04-27 17:15+0200\n"
+"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
+"Language-Team: LANGUAGE <LL@li.org>\n"
+"Language: \n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+
+#. type: TH
+#: tbl-mdoc-mixed4.man:2
+#, no-wrap
+msgid "MIXED"
+msgstr "mixed"
+
+#. type: SH
+#: tbl-mdoc-mixed4.man:3
+#, no-wrap
+msgid "NAME"
+msgstr "name"
+
+#. type: Plain text
+#: tbl-mdoc-mixed4.man:5
+msgid "mixed - test"
+msgstr "MIXED - TEST"
+
+#~ msgid "11 24, 1979"
+#~ msgstr "11 24, 1979"
+
+#~ msgid "MIXED 2"
+#~ msgstr "mixed 2"
+
+#~ msgid "E<.Nm mixed2>"
+#~ msgstr "E<.Nm MIXED2>"
+
+#~ msgid "test2"
+#~ msgstr "TEST2"
diff --git a/t/fmt/man/tbl-mdoc-mixed4.pot b/t/fmt/man/tbl-mdoc-mixed4.pot
new file mode 100644
index 0000000..979006c
--- /dev/null
+++ b/t/fmt/man/tbl-mdoc-mixed4.pot
@@ -0,0 +1,34 @@
+# SOME DESCRIPTIVE TITLE
+# Copyright (C) YEAR Free Software Foundation, Inc.
+# This file is distributed under the same license as the PACKAGE package.
+# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
+#
+#, fuzzy
+msgid ""
+msgstr ""
+"Project-Id-Version: PACKAGE VERSION\n"
+"POT-Creation-Date: 2020-04-27 17:15+0200\n"
+"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
+"Language-Team: LANGUAGE <LL@li.org>\n"
+"Language: \n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+
+#. type: TH
+#: tbl-mdoc-mixed4.man:2
+#, no-wrap
+msgid "MIXED"
+msgstr ""
+
+#. type: SH
+#: tbl-mdoc-mixed4.man:3
+#, no-wrap
+msgid "NAME"
+msgstr ""
+
+#. type: Plain text
+#: tbl-mdoc-mixed4.man:5
+msgid "mixed - test"
+msgstr ""
diff --git a/t/fmt/man/tbl-mdoc-mixed4.trans b/t/fmt/man/tbl-mdoc-mixed4.trans
new file mode 100644
index 0000000..db796b2
--- /dev/null
+++ b/t/fmt/man/tbl-mdoc-mixed4.trans
@@ -0,0 +1,10 @@
+.\" Commentaire7
+.\"*******************************************************************
+.\"
+.\" This file was generated with po4a. Translate the source file.
+.\"
+.\"*******************************************************************
+.TH mixed 1
+.SH name
+MIXED \- TEST
+.\" Commentaire8
diff --git a/t/fmt/man/tbl-option-tab.man b/t/fmt/man/tbl-option-tab.man
new file mode 100644
index 0000000..2168135
--- /dev/null
+++ b/t/fmt/man/tbl-option-tab.man
@@ -0,0 +1,20 @@
+.\" This chunk comes from mandb(8).
+
+.TS
+tab (@);
+l l l l.
+Name@Type@Async@Filename
+_
+Berkeley db@T{
+Binary tree
+T}@Yes@\fIindex.bt\fR
+GNU gdbm v >= 1.6@T{
+Hashed
+T}@Yes@\fIindex.db\fR
+GNU gdbm v < 1.6@T{
+Hashed
+T}@No@\fIindex.db\fR
+UNIX ndbm@T{
+Hashed
+T}@No@\fIindex.(dir|pag)\fR
+.TE
diff --git a/t/fmt/man/tbl-option-tab.norm b/t/fmt/man/tbl-option-tab.norm
new file mode 100644
index 0000000..1bbd993
--- /dev/null
+++ b/t/fmt/man/tbl-option-tab.norm
@@ -0,0 +1,20 @@
+
+.\" This chunk comes from mandb(8).
+.TS
+tab (@);
+l l l l.
+Name@Type@Async@Filename
+_
+Berkeley db@T{
+Binary tree
+T}@Yes@\fIindex.bt\fP
+GNU gdbm v >= 1.6@T{
+Hashed
+T}@Yes@\fIindex.db\fP
+GNU gdbm v < 1.6@T{
+Hashed
+T}@No@\fIindex.db\fP
+UNIX ndbm@T{
+Hashed
+T}@No@\fIindex.(dir|pag)\fP
+.TE
diff --git a/t/fmt/man/tbl-option-tab.po b/t/fmt/man/tbl-option-tab.po
new file mode 100644
index 0000000..2d638a0
--- /dev/null
+++ b/t/fmt/man/tbl-option-tab.po
@@ -0,0 +1,113 @@
+# SOME DESCRIPTIVE TITLE
+# Copyright (C) YEAR Free Software Foundation, Inc.
+# This file is distributed under the same license as the PACKAGE package.
+# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
+#
+#, fuzzy
+msgid ""
+msgstr ""
+"Project-Id-Version: PACKAGE VERSION\n"
+"POT-Creation-Date: 2016-12-11 11:35+0000\n"
+"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
+"Language-Team: LANGUAGE <LL@li.org>\n"
+"Language: \n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+
+#. type: tbl table
+#: tbl-option-tab.man:6
+#, no-wrap
+msgid "Name"
+msgstr "NAME"
+
+#. type: tbl table
+#: tbl-option-tab.man:6
+#, no-wrap
+msgid "Type"
+msgstr "TYPE"
+
+#. type: tbl table
+#: tbl-option-tab.man:6
+#, no-wrap
+msgid "Async"
+msgstr "ASYNC"
+
+#. type: tbl table
+#: tbl-option-tab.man:6
+#, no-wrap
+msgid "Filename"
+msgstr "FILENAME"
+
+#. type: tbl table
+#: tbl-option-tab.man:7
+#, no-wrap
+msgid "_"
+msgstr "_"
+
+#. type: tbl table
+#: tbl-option-tab.man:8
+#, no-wrap
+msgid "Berkeley db"
+msgstr "BERKELEY DB"
+
+#. type: tbl table
+#: tbl-option-tab.man:10
+#, no-wrap
+msgid "Binary tree"
+msgstr "BINARY TREE"
+
+#. type: tbl table
+#: tbl-option-tab.man:10 tbl-option-tab.man:13
+#, no-wrap
+msgid "Yes"
+msgstr "YES"
+
+#. type: tbl table
+#: tbl-option-tab.man:10
+#, no-wrap
+msgid "I<index.bt>"
+msgstr "I<INDEX.BT>"
+
+#. type: tbl table
+#: tbl-option-tab.man:11
+#, no-wrap
+msgid "GNU gdbm v E<gt>= 1.6"
+msgstr "GNU GDBM V E<gt>= 1.6"
+
+#. type: tbl table
+#: tbl-option-tab.man:13 tbl-option-tab.man:16 tbl-option-tab.man:19
+#, no-wrap
+msgid "Hashed"
+msgstr "HASHED"
+
+#. type: tbl table
+#: tbl-option-tab.man:13 tbl-option-tab.man:16
+#, no-wrap
+msgid "I<index.db>"
+msgstr "I<INDEX.DB>"
+
+#. type: tbl table
+#: tbl-option-tab.man:14
+#, no-wrap
+msgid "GNU gdbm v E<lt> 1.6"
+msgstr "GNU GDBM V E<lt> 1.6"
+
+#. type: tbl table
+#: tbl-option-tab.man:16 tbl-option-tab.man:19
+#, no-wrap
+msgid "No"
+msgstr "NO"
+
+#. type: tbl table
+#: tbl-option-tab.man:17
+#, no-wrap
+msgid "UNIX ndbm"
+msgstr "UNIX NDBM"
+
+#. type: tbl table
+#: tbl-option-tab.man:19
+#, no-wrap
+msgid "I<index.(dir|pag)>"
+msgstr "I<INDEX.(DIR|PAG)>"
diff --git a/t/fmt/man/tbl-option-tab.pot b/t/fmt/man/tbl-option-tab.pot
new file mode 100644
index 0000000..34df49f
--- /dev/null
+++ b/t/fmt/man/tbl-option-tab.pot
@@ -0,0 +1,113 @@
+# SOME DESCRIPTIVE TITLE
+# Copyright (C) YEAR Free Software Foundation, Inc.
+# This file is distributed under the same license as the PACKAGE package.
+# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
+#
+#, fuzzy
+msgid ""
+msgstr ""
+"Project-Id-Version: PACKAGE VERSION\n"
+"POT-Creation-Date: 2016-12-11 11:35+0000\n"
+"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
+"Language-Team: LANGUAGE <LL@li.org>\n"
+"Language: \n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+
+#. type: tbl table
+#: tbl-option-tab.man:6
+#, no-wrap
+msgid "Name"
+msgstr ""
+
+#. type: tbl table
+#: tbl-option-tab.man:6
+#, no-wrap
+msgid "Type"
+msgstr ""
+
+#. type: tbl table
+#: tbl-option-tab.man:6
+#, no-wrap
+msgid "Async"
+msgstr ""
+
+#. type: tbl table
+#: tbl-option-tab.man:6
+#, no-wrap
+msgid "Filename"
+msgstr ""
+
+#. type: tbl table
+#: tbl-option-tab.man:7
+#, no-wrap
+msgid "_"
+msgstr ""
+
+#. type: tbl table
+#: tbl-option-tab.man:8
+#, no-wrap
+msgid "Berkeley db"
+msgstr ""
+
+#. type: tbl table
+#: tbl-option-tab.man:10
+#, no-wrap
+msgid "Binary tree"
+msgstr ""
+
+#. type: tbl table
+#: tbl-option-tab.man:10 tbl-option-tab.man:13
+#, no-wrap
+msgid "Yes"
+msgstr ""
+
+#. type: tbl table
+#: tbl-option-tab.man:10
+#, no-wrap
+msgid "I<index.bt>"
+msgstr ""
+
+#. type: tbl table
+#: tbl-option-tab.man:11
+#, no-wrap
+msgid "GNU gdbm v E<gt>= 1.6"
+msgstr ""
+
+#. type: tbl table
+#: tbl-option-tab.man:13 tbl-option-tab.man:16 tbl-option-tab.man:19
+#, no-wrap
+msgid "Hashed"
+msgstr ""
+
+#. type: tbl table
+#: tbl-option-tab.man:13 tbl-option-tab.man:16
+#, no-wrap
+msgid "I<index.db>"
+msgstr ""
+
+#. type: tbl table
+#: tbl-option-tab.man:14
+#, no-wrap
+msgid "GNU gdbm v E<lt> 1.6"
+msgstr ""
+
+#. type: tbl table
+#: tbl-option-tab.man:16 tbl-option-tab.man:19
+#, no-wrap
+msgid "No"
+msgstr ""
+
+#. type: tbl table
+#: tbl-option-tab.man:17
+#, no-wrap
+msgid "UNIX ndbm"
+msgstr ""
+
+#. type: tbl table
+#: tbl-option-tab.man:19
+#, no-wrap
+msgid "I<index.(dir|pag)>"
+msgstr ""
diff --git a/t/fmt/man/tbl-option-tab.trans b/t/fmt/man/tbl-option-tab.trans
new file mode 100644
index 0000000..ef15b52
--- /dev/null
+++ b/t/fmt/man/tbl-option-tab.trans
@@ -0,0 +1,20 @@
+
+.\" This chunk comes from mandb(8).
+.TS
+tab (@);
+l l l l.
+NAME@TYPE@ASYNC@FILENAME
+_
+BERKELEY DB@T{
+BINARY TREE
+T}@YES@\fIINDEX.BT\fP
+GNU GDBM V >= 1.6@T{
+HASHED
+T}@YES@\fIINDEX.DB\fP
+GNU GDBM V < 1.6@T{
+HASHED
+T}@NO@\fIINDEX.DB\fP
+UNIX NDBM@T{
+HASHED
+T}@NO@\fIINDEX.(DIR|PAG)\fP
+.TE
diff --git a/t/fmt/man/tbl-textblock.man b/t/fmt/man/tbl-textblock.man
new file mode 100644
index 0000000..7926860
--- /dev/null
+++ b/t/fmt/man/tbl-textblock.man
@@ -0,0 +1,32 @@
+.\" This chunk comes from ps(1). It is intented to test
+.\" https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=748601
+
+.TS
+expand;
+lB1 lB1 lBw(\n[ColSize]n)
+lB1 l1 l.
+code header description
+
+%cpu %CPU T{
+cpu utilization of the process in "##.#" format. It is the CPU time.
+(alias\ \fBpcpu\fR).
+T}
+
+
+class CLS T{
+scheduling class of the process. (alias\ \fBpolicy\fR,\ \fBcls\fR).
+Field's possible values are:
+.br
+\- not reported
+.br
+TS sched_other
+.br
+FF sched_fifo
+.br
+RR sched_rr
+.br
+? unknown value
+T}
+
+.TE
+.\" #######################################################################
diff --git a/t/fmt/man/tbl-textblock.norm b/t/fmt/man/tbl-textblock.norm
new file mode 100644
index 0000000..0e24bdd
--- /dev/null
+++ b/t/fmt/man/tbl-textblock.norm
@@ -0,0 +1,32 @@
+
+.\" This chunk comes from ps(1). It is intented to test
+.\" https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=748601
+.TS
+expand;
+lB1 lB1 lBw(\n[ColSize]n)
+lB1 l1 l.
+code header description
+
+%cpu %CPU T{
+cpu utilization of the process in "##.#" format. It is the CPU time.
+(alias\ \fBpcpu\fP).
+T}
+
+
+class CLS T{
+scheduling class of the process. (alias\ \fBpolicy\fP,\ \fBcls\fP).
+Field's possible values are:
+.br
+\- not reported
+.br
+TS sched_other
+.br
+FF sched_fifo
+.br
+RR sched_rr
+.br
+? unknown value
+T}
+
+.TE
+.\" #######################################################################
diff --git a/t/fmt/man/tbl-textblock.po b/t/fmt/man/tbl-textblock.po
new file mode 100644
index 0000000..403b89b
--- /dev/null
+++ b/t/fmt/man/tbl-textblock.po
@@ -0,0 +1,92 @@
+# SOME DESCRIPTIVE TITLE
+# Copyright (C) YEAR Free Software Foundation, Inc.
+# This file is distributed under the same license as the PACKAGE package.
+# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
+#
+#, fuzzy
+msgid ""
+msgstr ""
+"Project-Id-Version: PACKAGE VERSION\n"
+"POT-Creation-Date: 2020-04-27 16:40+0200\n"
+"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
+"Language-Team: LANGUAGE <LL@li.org>\n"
+"Language: \n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+
+#. type: tbl table
+#: tbl-textblock.man:8
+#, no-wrap
+msgid "code header description"
+msgstr "CODE HEADER DESCRIPTIVE"
+
+#. type: tbl table
+#: tbl-textblock.man:10
+#, no-wrap
+msgid "%cpu %CPU"
+msgstr "%CPU %CPU"
+
+#. type: tbl table
+#: tbl-textblock.man:13
+#, no-wrap
+msgid ""
+"cpu utilization of the process in \"##.#\" format. It is the CPU time.\n"
+"(alias\\ B<pcpu>)."
+msgstr ""
+"CPU UTILIZATION OF THE PROCESS IN \"##.#\" FORMAT. IT IS THE CPUT TIME.\n"
+"(ALIAS\\ B<PCPU>)."
+
+#. type: tbl table
+#: tbl-textblock.man:16
+#, no-wrap
+msgid "class CLS"
+msgstr "CLASS CLS"
+
+#. type: tbl table
+#: tbl-textblock.man:19
+#, no-wrap
+msgid ""
+"scheduling class of the process. (alias\\ B<policy>,\\ B<cls>).\n"
+"Field's possible values are:\n"
+msgstr ""
+"SCHEDULING CLASS OF tHE PROCESS. (ALIAS\\ B<POLICY>,\\ B<CLS>).\n"
+"FIELD'S POSSIBLE VALUES ARE:\n"
+
+#. type: tbl table
+#: tbl-textblock.man:19 tbl-textblock.man:21 tbl-textblock.man:23
+#: tbl-textblock.man:25 tbl-textblock.man:27
+#, no-wrap
+msgid ".br\n"
+msgstr ".br\n"
+
+#. type: tbl table
+#: tbl-textblock.man:21
+#, no-wrap
+msgid "- not reported\n"
+msgstr "- NOT REPORTED\n"
+
+#. type: tbl table
+#: tbl-textblock.man:23
+#, no-wrap
+msgid "TS sched_other\n"
+msgstr "TS SCHED_OTHER\n"
+
+#. type: tbl table
+#: tbl-textblock.man:25
+#, no-wrap
+msgid "FF sched_fifo\n"
+msgstr "FF SCHED_FIFO\n"
+
+#. type: tbl table
+#: tbl-textblock.man:27
+#, no-wrap
+msgid "RR sched_rr\n"
+msgstr "RR SCHED_RR\n"
+
+#. type: tbl table
+#: tbl-textblock.man:29
+#, no-wrap
+msgid "? unknown value"
+msgstr "? UNKNOWN VALUE"
diff --git a/t/fmt/man/tbl-textblock.pot b/t/fmt/man/tbl-textblock.pot
new file mode 100644
index 0000000..31937a0
--- /dev/null
+++ b/t/fmt/man/tbl-textblock.pot
@@ -0,0 +1,88 @@
+# SOME DESCRIPTIVE TITLE
+# Copyright (C) YEAR Free Software Foundation, Inc.
+# This file is distributed under the same license as the PACKAGE package.
+# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
+#
+#, fuzzy
+msgid ""
+msgstr ""
+"Project-Id-Version: PACKAGE VERSION\n"
+"POT-Creation-Date: 2020-04-27 16:38+0200\n"
+"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
+"Language-Team: LANGUAGE <LL@li.org>\n"
+"Language: \n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+
+#. type: tbl table
+#: tbl-textblock.man:8
+#, no-wrap
+msgid "code header description"
+msgstr ""
+
+#. type: tbl table
+#: tbl-textblock.man:10
+#, no-wrap
+msgid "%cpu %CPU"
+msgstr ""
+
+#. type: tbl table
+#: tbl-textblock.man:13
+#, no-wrap
+msgid ""
+"cpu utilization of the process in \"##.#\" format. It is the CPU time.\n"
+"(alias\\ B<pcpu>)."
+msgstr ""
+
+#. type: tbl table
+#: tbl-textblock.man:16
+#, no-wrap
+msgid "class CLS"
+msgstr ""
+
+#. type: tbl table
+#: tbl-textblock.man:19
+#, no-wrap
+msgid ""
+"scheduling class of the process. (alias\\ B<policy>,\\ B<cls>).\n"
+"Field's possible values are:\n"
+msgstr ""
+
+#. type: tbl table
+#: tbl-textblock.man:19 tbl-textblock.man:21 tbl-textblock.man:23
+#: tbl-textblock.man:25 tbl-textblock.man:27
+#, no-wrap
+msgid ".br\n"
+msgstr ""
+
+#. type: tbl table
+#: tbl-textblock.man:21
+#, no-wrap
+msgid "- not reported\n"
+msgstr ""
+
+#. type: tbl table
+#: tbl-textblock.man:23
+#, no-wrap
+msgid "TS sched_other\n"
+msgstr ""
+
+#. type: tbl table
+#: tbl-textblock.man:25
+#, no-wrap
+msgid "FF sched_fifo\n"
+msgstr ""
+
+#. type: tbl table
+#: tbl-textblock.man:27
+#, no-wrap
+msgid "RR sched_rr\n"
+msgstr ""
+
+#. type: tbl table
+#: tbl-textblock.man:29
+#, no-wrap
+msgid "? unknown value"
+msgstr ""
diff --git a/t/fmt/man/tbl-textblock.trans b/t/fmt/man/tbl-textblock.trans
new file mode 100644
index 0000000..1dab331
--- /dev/null
+++ b/t/fmt/man/tbl-textblock.trans
@@ -0,0 +1,32 @@
+
+.\" This chunk comes from ps(1). It is intented to test
+.\" https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=748601
+.TS
+expand;
+lB1 lB1 lBw(\n[ColSize]n)
+lB1 l1 l.
+CODE HEADER DESCRIPTIVE
+
+%CPU %CPU T{
+CPU UTILIZATION OF THE PROCESS IN "##.#" FORMAT. IT IS THE CPUT TIME.
+(ALIAS\ \fBPCPU\fP).
+T}
+
+
+CLASS CLS T{
+SCHEDULING CLASS OF tHE PROCESS. (ALIAS\ \fBPOLICY\fP,\ \fBCLS\fP).
+FIELD'S POSSIBLE VALUES ARE:
+.br
+\- NOT REPORTED
+.br
+TS SCHED_OTHER
+.br
+FF SCHED_FIFO
+.br
+RR SCHED_RR
+.br
+? UNKNOWN VALUE
+T}
+
+.TE
+.\" #######################################################################
diff --git a/t/fmt/pod/basic.norm b/t/fmt/pod/basic.norm
new file mode 100644
index 0000000..9b141d4
--- /dev/null
+++ b/t/fmt/pod/basic.norm
@@ -0,0 +1,32 @@
+
+ *****************************************************
+ * GENERATED FILE, DO NOT EDIT *
+ * THIS IS NO SOURCE FILE, BUT RESULT OF COMPILATION *
+ *****************************************************
+
+This file was generated by po4a(7). Do not store it (in VCS, for example),
+but store the PO file used as source file by po4a-translate.
+
+In fact, consider this as a binary, and the PO file as a regular .c file:
+If the PO get lost, keeping this translation up-to-date will be harder.
+
+=encoding UTF-8
+
+=head1 This is a test title
+
+This is a test paragraph. This is a test paragraph. This is a test paragraph. This is a test paragraph. This is a test paragraph. This is a test paragraph. This is a test paragraph. This is a test paragraph. This is a test paragraph. This is a test paragraph. This is a test paragraph. This is a test paragraph.
+
+=over 4
+
+=item this is a test item
+
+This is a test item text, but
+ it shouldn't be wrapped
+ since one of its lines is
+ indented. Does it work?
+
+=back
+
+The default is "^([ \n\t]*[|E<gt>:}#])+"
+
+ This is a verbatim paragraph.
diff --git a/t/fmt/pod/basic.po b/t/fmt/pod/basic.po
new file mode 100644
index 0000000..f0017a7
--- /dev/null
+++ b/t/fmt/pod/basic.po
@@ -0,0 +1,71 @@
+# SOME DESCRIPTIVE TITLE
+# Copyright (C) YEAR Free Software Foundation, Inc.
+# This file is distributed under the same license as the PACKAGE package.
+# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
+#
+#, fuzzy
+msgid ""
+msgstr ""
+"Project-Id-Version: PACKAGE VERSION\n"
+"POT-Creation-Date: 2020-04-27 18:41+0200\n"
+"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
+"Language-Team: LANGUAGE <LL@li.org>\n"
+"Language: \n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+
+#. type: =head1
+#: basic.pod:1
+msgid "This is a test title"
+msgstr "Ceci est un titre de test"
+
+#. type: textblock
+#: basic.pod:3
+msgid ""
+"This is a test paragraph. This is a test paragraph. This is a test "
+"paragraph. This is a test paragraph. This is a test paragraph. This is a "
+"test paragraph. This is a test paragraph. This is a test paragraph. This "
+"is a test paragraph. This is a test paragraph. This is a test paragraph. "
+"This is a test paragraph."
+msgstr ""
+"Ceci est un paragraphe de test. Ceci est un paragraphe de test. Ceci est un "
+"paragraphe de test. Ceci est un paragraphe de test. Ceci est un paragraphe "
+"de test. Ceci est un paragraphe de test. Ceci est un paragraphe de test. "
+"Ceci est un paragraphe de test. Ceci est un paragraphe de test. Ceci est un "
+"paragraphe de test. Ceci est un paragraphe de test. Ceci est un paragraphe "
+"de test. Ceci est un paragraphe de test. Ceci est un paragraphe de test."
+
+#. type: =item
+#: basic.pod:11
+msgid "this is a test item"
+msgstr "ceci est un item de test"
+
+#. type: verbatim
+#: basic.pod:13
+#, no-wrap
+msgid ""
+"This is a test item text, but\n"
+" it shouldn't be wrapped\n"
+" since one of its lines is\n"
+" indented. Does it work?\n"
+"\n"
+msgstr ""
+"Ceci est un texte d'item de test,\n"
+" mais il ne devrait pas etre \n"
+" remis en forme automatiquement\n"
+" puisque certaines de ses lignes\n"
+" sont indentees. Cela fonctionne-t-il ?\n"
+"\n"
+
+#. type: textblock
+#: basic.pod:20
+msgid "The default is \"^([ \\n\\t]*[|E<gt>:}#])+\""
+msgstr "Le réglage par defaut est \"^([ \\n\\t]*[|E<gt>:}#])+\""
+
+#. type: verbatim
+#: basic.pod:22
+#, no-wrap
+msgid " This is a verbatim paragraph.\n"
+msgstr " Ceci est un paragraphe verbatim.\n"
diff --git a/t/fmt/pod/basic.pod b/t/fmt/pod/basic.pod
new file mode 100644
index 0000000..a507ec5
--- /dev/null
+++ b/t/fmt/pod/basic.pod
@@ -0,0 +1,22 @@
+=head1 This is a test title
+
+This is a test paragraph. This is a test paragraph. This is a test
+paragraph. This is a test paragraph. This is a test paragraph. This is a
+test paragraph. This is a test paragraph. This is a test paragraph. This
+is a test paragraph. This is a test paragraph. This is a test paragraph.
+This is a test paragraph.
+
+=over 4
+
+=item this is a test item
+
+This is a test item text, but
+ it shouldn't be wrapped
+ since one of its lines is
+ indented. Does it work?
+
+=back
+
+The default is "^([ \n\t]*[|E<gt>:}#])+"
+
+ This is a verbatim paragraph.
diff --git a/t/fmt/pod/basic.pot b/t/fmt/pod/basic.pot
new file mode 100644
index 0000000..269fc00
--- /dev/null
+++ b/t/fmt/pod/basic.pot
@@ -0,0 +1,59 @@
+# SOME DESCRIPTIVE TITLE
+# Copyright (C) YEAR Free Software Foundation, Inc.
+# This file is distributed under the same license as the PACKAGE package.
+# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
+#
+#, fuzzy
+msgid ""
+msgstr ""
+"Project-Id-Version: PACKAGE VERSION\n"
+"POT-Creation-Date: 2020-04-23 15:53+0200\n"
+"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
+"Language-Team: LANGUAGE <LL@li.org>\n"
+"Language: \n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+
+#. type: =head1
+#: basic.pod:1
+msgid "This is a test title"
+msgstr ""
+
+#. type: textblock
+#: basic.pod:3
+msgid ""
+"This is a test paragraph. This is a test paragraph. This is a test "
+"paragraph. This is a test paragraph. This is a test paragraph. This is a "
+"test paragraph. This is a test paragraph. This is a test paragraph. This "
+"is a test paragraph. This is a test paragraph. This is a test paragraph. "
+"This is a test paragraph."
+msgstr ""
+
+#. type: =item
+#: basic.pod:11
+msgid "this is a test item"
+msgstr ""
+
+#. type: verbatim
+#: basic.pod:13
+#, no-wrap
+msgid ""
+"This is a test item text, but\n"
+" it shouldn't be wrapped\n"
+" since one of its lines is\n"
+" indented. Does it work?\n"
+"\n"
+msgstr ""
+
+#. type: textblock
+#: basic.pod:20
+msgid "The default is \"^([ \\n\\t]*[|E<gt>:}#])+\""
+msgstr ""
+
+#. type: verbatim
+#: basic.pod:22
+#, no-wrap
+msgid " This is a verbatim paragraph.\n"
+msgstr ""
diff --git a/t/fmt/pod/basic.trans b/t/fmt/pod/basic.trans
new file mode 100644
index 0000000..d508afd
--- /dev/null
+++ b/t/fmt/pod/basic.trans
@@ -0,0 +1,33 @@
+
+ *****************************************************
+ * GENERATED FILE, DO NOT EDIT *
+ * THIS IS NO SOURCE FILE, BUT RESULT OF COMPILATION *
+ *****************************************************
+
+This file was generated by po4a(7). Do not store it (in VCS, for example),
+but store the PO file used as source file by po4a-translate.
+
+In fact, consider this as a binary, and the PO file as a regular .c file:
+If the PO get lost, keeping this translation up-to-date will be harder.
+
+=encoding UTF-8
+
+=head1 Ceci est un titre de test
+
+Ceci est un paragraphe de test. Ceci est un paragraphe de test. Ceci est un paragraphe de test. Ceci est un paragraphe de test. Ceci est un paragraphe de test. Ceci est un paragraphe de test. Ceci est un paragraphe de test. Ceci est un paragraphe de test. Ceci est un paragraphe de test. Ceci est un paragraphe de test. Ceci est un paragraphe de test. Ceci est un paragraphe de test. Ceci est un paragraphe de test. Ceci est un paragraphe de test.
+
+=over 4
+
+=item ceci est un item de test
+
+Ceci est un texte d'item de test,
+ mais il ne devrait pas etre
+ remis en forme automatiquement
+ puisque certaines de ses lignes
+ sont indentees. Cela fonctionne-t-il ?
+
+=back
+
+Le réglage par defaut est "^([ \n\t]*[|E<gt>:}#])+"
+
+ Ceci est un paragraphe verbatim.
diff --git a/t/fmt/rubydoc/Headlines.norm b/t/fmt/rubydoc/Headlines.norm
new file mode 100644
index 0000000..11e5326
--- /dev/null
+++ b/t/fmt/rubydoc/Headlines.norm
@@ -0,0 +1,41 @@
+#
+# *****************************************************
+# * GENERATED FILE, DO NOT EDIT *
+# * THIS IS NO SOURCE FILE, BUT RESULT OF COMPILATION *
+# *****************************************************
+#
+# This file was generated by po4a-translate(1). Do not store it (in VCS,
+# for example), but store the PO file used as source file by po4a-translate.
+#
+# In fact, consider this as a binary, and the PO file as a regular source file:
+# If the PO gets lost, keeping this translation up-to-date will be harder.
+#
+=begin
+= Big headline
+
+Fictitious textblock
+
+== Level 2 headline
+
+This document talks about nothing, but it's interesting to test some
+features of the Ruby Document format.
+
+=== Level 3 headline
+
+Add some more text:
+<<< add.rd
+
+==== Level 4 headline
+
+More wasted words...
+
+=end
+=begin
++ Level 5 headline
+
+See you another time!
+
+++ Level 6 headline
+
+Bye.
+=end
diff --git a/t/fmt/rubydoc/Headlines.po b/t/fmt/rubydoc/Headlines.po
new file mode 100644
index 0000000..ca69b3d
--- /dev/null
+++ b/t/fmt/rubydoc/Headlines.po
@@ -0,0 +1,81 @@
+# SOME DESCRIPTIVE TITLE
+# Copyright (C) YEAR Free Software Foundation, Inc.
+# This file is distributed under the same license as the PACKAGE package.
+# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
+#
+#, fuzzy
+msgid ""
+msgstr ""
+"Project-Id-Version: PACKAGE VERSION\n"
+"POT-Creation-Date: 2017-04-03 23:12+0200\n"
+"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
+"Language-Team: LANGUAGE <LL@li.org>\n"
+"Language: \n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+
+#. type: Headline =
+#: Headlines.rd:5
+msgid "Big headline"
+msgstr "BIG HEADLINE"
+
+#. type: TextBlock
+#: Headlines.rd:7
+msgid "Fictitious textblock"
+msgstr "FICTITIOUS TEXTBLOCK"
+
+#. type: Headline ==
+#: Headlines.rd:9
+msgid "Level 2 headline"
+msgstr "LEVEL 2 HEADLINE"
+
+#. type: TextBlock
+#: Headlines.rd:11
+msgid ""
+"This document talks about nothing, but it's interesting to test some "
+"features of the Ruby Document format."
+msgstr ""
+"THIS DOCUMENT TALKS ABOUT NOTHING, BUT IT'S INTERESTING TO TEST SOME "
+"FEATURES OF THE RUBY DOCUMENT FORMAT."
+
+#. type: Headline ===
+#: Headlines.rd:15
+msgid "Level 3 headline"
+msgstr "LEVEL 3 HEADLINE"
+
+#. type: TextBlock
+#: Headlines.rd:17
+msgid "Add some more text:"
+msgstr "ADD SOME MORE TEXT:"
+
+#. type: Headline ====
+#: Headlines.rd:20
+msgid "Level 4 headline"
+msgstr "LEVEL 4 HEADLINE"
+
+#. type: TextBlock
+#: Headlines.rd:22
+msgid "More wasted words..."
+msgstr "MORE WASTED WORDS..."
+
+#. type: Headline +
+#: Headlines.rd:28
+msgid "Level 5 headline"
+msgstr "LEVEL 5 HEADLINE"
+
+#. type: TextBlock
+#: Headlines.rd:30
+msgid "See you another time!"
+msgstr "SEE YOU ANOTHER TIME!"
+
+#. type: Headline ++
+#: Headlines.rd:32
+msgid "Level 6 headline"
+msgstr "LEVEL 6 HEADLINE"
+
+#. type: TextBlock
+#: Headlines.rd:34
+msgid "Bye."
+msgstr "BYE."
diff --git a/t/fmt/rubydoc/Headlines.pot b/t/fmt/rubydoc/Headlines.pot
new file mode 100644
index 0000000..7e08b2a
--- /dev/null
+++ b/t/fmt/rubydoc/Headlines.pot
@@ -0,0 +1,79 @@
+# SOME DESCRIPTIVE TITLE
+# Copyright (C) YEAR Free Software Foundation, Inc.
+# This file is distributed under the same license as the PACKAGE package.
+# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
+#
+#, fuzzy
+msgid ""
+msgstr ""
+"Project-Id-Version: PACKAGE VERSION\n"
+"POT-Creation-Date: 2017-04-03 23:12+0200\n"
+"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
+"Language-Team: LANGUAGE <LL@li.org>\n"
+"Language: \n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+
+#. type: Headline =
+#: Headlines.rd:5
+msgid "Big headline"
+msgstr ""
+
+#. type: TextBlock
+#: Headlines.rd:7
+msgid "Fictitious textblock"
+msgstr ""
+
+#. type: Headline ==
+#: Headlines.rd:9
+msgid "Level 2 headline"
+msgstr ""
+
+#. type: TextBlock
+#: Headlines.rd:11
+msgid ""
+"This document talks about nothing, but it's interesting to test some "
+"features of the Ruby Document format."
+msgstr ""
+
+#. type: Headline ===
+#: Headlines.rd:15
+msgid "Level 3 headline"
+msgstr ""
+
+#. type: TextBlock
+#: Headlines.rd:17
+msgid "Add some more text:"
+msgstr ""
+
+#. type: Headline ====
+#: Headlines.rd:20
+msgid "Level 4 headline"
+msgstr ""
+
+#. type: TextBlock
+#: Headlines.rd:22
+msgid "More wasted words..."
+msgstr ""
+
+#. type: Headline +
+#: Headlines.rd:28
+msgid "Level 5 headline"
+msgstr ""
+
+#. type: TextBlock
+#: Headlines.rd:30
+msgid "See you another time!"
+msgstr ""
+
+#. type: Headline ++
+#: Headlines.rd:32
+msgid "Level 6 headline"
+msgstr ""
+
+#. type: TextBlock
+#: Headlines.rd:34
+msgid "Bye."
+msgstr ""
diff --git a/t/fmt/rubydoc/Headlines.rd b/t/fmt/rubydoc/Headlines.rd
new file mode 100644
index 0000000..9ce55a9
--- /dev/null
+++ b/t/fmt/rubydoc/Headlines.rd
@@ -0,0 +1,36 @@
+What is written here is immaterial!
+Yada yada yada...
+
+=begin
+= Big headline
+
+Fictitious textblock
+
+== Level 2 headline
+
+This document talks about nothing, but it's
+# This is a comment
+interesting to test some features of the Ruby Document format.
+
+=== Level 3 headline
+
+Add some more text:
+<<< add.rd
+
+==== Level 4 headline
+
+More wasted words...
+
+=end
+Ignored text! :-p
+
+=begin
++ Level 5 headline
+
+See you another time!
+
+++ Level 6 headline
+
+Bye.
+=end
+More senseless text...
diff --git a/t/fmt/rubydoc/Headlines.trans b/t/fmt/rubydoc/Headlines.trans
new file mode 100644
index 0000000..a07850a
--- /dev/null
+++ b/t/fmt/rubydoc/Headlines.trans
@@ -0,0 +1,41 @@
+#
+# *****************************************************
+# * GENERATED FILE, DO NOT EDIT *
+# * THIS IS NO SOURCE FILE, BUT RESULT OF COMPILATION *
+# *****************************************************
+#
+# This file was generated by po4a-translate(1). Do not store it (in VCS,
+# for example), but store the PO file used as source file by po4a-translate.
+#
+# In fact, consider this as a binary, and the PO file as a regular source file:
+# If the PO gets lost, keeping this translation up-to-date will be harder.
+#
+=begin
+= BIG HEADLINE
+
+FICTITIOUS TEXTBLOCK
+
+== LEVEL 2 HEADLINE
+
+THIS DOCUMENT TALKS ABOUT NOTHING, BUT IT'S INTERESTING TO TEST SOME
+FEATURES OF THE RUBY DOCUMENT FORMAT.
+
+=== LEVEL 3 HEADLINE
+
+ADD SOME MORE TEXT:
+<<< add.rd
+
+==== LEVEL 4 HEADLINE
+
+MORE WASTED WORDS...
+
+=end
+=begin
++ LEVEL 5 HEADLINE
+
+SEE YOU ANOTHER TIME!
+
+++ LEVEL 6 HEADLINE
+
+BYE.
+=end
diff --git a/t/fmt/rubydoc/Lists.norm b/t/fmt/rubydoc/Lists.norm
new file mode 100644
index 0000000..0ecd0ea
--- /dev/null
+++ b/t/fmt/rubydoc/Lists.norm
@@ -0,0 +1,63 @@
+#
+# *****************************************************
+# * GENERATED FILE, DO NOT EDIT *
+# * THIS IS NO SOURCE FILE, BUT RESULT OF COMPILATION *
+# *****************************************************
+#
+# This file was generated by po4a-translate(1). Do not store it (in VCS,
+# for example), but store the PO file used as source file by po4a-translate.
+#
+# In fact, consider this as a binary, and the PO file as a regular source file:
+# If the PO gets lost, keeping this translation up-to-date will be harder.
+#
+=begin RD
+= List test
+
+One textblock...
+ * this is an item of an itemlist
+ * first sublist item
+ * second sublist item
+ * this is a second item for the same itemlist
+ (1) item 1 of an enumlist nested inside
+ (2) item 2 of the enumlist
+ (5) item 3
+ (4) item 4
+ * a third item with different indentation
+ verbatim
+ block
+ nested
+ inside
+ the
+ item
+ some more text for the item
+
+ This is another textblock inside the itemlist item. Since I need to
+ test how indentation works for multi-line output, this textblock is a
+ bit long...
+
+ : odd word
+
+ this is an explanation of the odd word
+
+ * further clarification
+
+ * another long long clarification (this is so long that it will end
+ up taking more than one line in the output...)
+
+ a final note
+
+ : weird word
+ this is an explanation of the weird word
+
+ : awkward word
+ (1) this word cannot be explained
+ (2) see previous point
+
+ --- MyClass#mymethod(val)
+ This method operates on val and turns it into magic!
+ --- MyClass#othermethod1()
+ --- MyClass#othermethod2()
+ These methods are useless.
+
+Bye.
+=end RD
diff --git a/t/fmt/rubydoc/Lists.po b/t/fmt/rubydoc/Lists.po
new file mode 100644
index 0000000..b5f98d6
--- /dev/null
+++ b/t/fmt/rubydoc/Lists.po
@@ -0,0 +1,173 @@
+# SOME DESCRIPTIVE TITLE
+# Copyright (C) YEAR Free Software Foundation, Inc.
+# This file is distributed under the same license as the PACKAGE package.
+# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
+#
+#, fuzzy
+msgid ""
+msgstr ""
+"Project-Id-Version: PACKAGE VERSION\n"
+"POT-Creation-Date: 2017-04-06 00:25+0200\n"
+"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
+"Language-Team: LANGUAGE <LL@li.org>\n"
+"Language: \n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+
+#. type: Headline =
+#: Lists.rd:3
+msgid "List test"
+msgstr "LIST TEST"
+
+#. type: TextBlock
+#: Lists.rd:5
+msgid "One textblock..."
+msgstr "ONE TEXTBLOCK..."
+
+#. type: ItemListItem *
+#: Lists.rd:6
+msgid "this is an item of an itemlist"
+msgstr "THIS IS AN ITEM OF AN ITEMLIST"
+
+#. type: ItemListItem *
+#: Lists.rd:7
+msgid "first sublist item"
+msgstr "FIRST SUBLIST ITEM"
+
+#. type: ItemListItem *
+#: Lists.rd:8
+msgid "second sublist item"
+msgstr "SECOND SUBLIST ITEM"
+
+#. type: ItemListItem *
+#: Lists.rd:9
+msgid "this is a second item for the same itemlist"
+msgstr "THIS IS A SECOND ITEM FOR THE SAME ITEMLIST"
+
+#. type: EnumListItem (1)
+#: Lists.rd:12
+msgid "item 1 of an enumlist nested inside"
+msgstr "ITEM 1 OF AN ENUMLIST NESTED INSIDE"
+
+#. type: EnumListItem (2)
+#: Lists.rd:13
+msgid "item 2 of the enumlist"
+msgstr "ITEM 2 OF AN ENUMLIST"
+
+#. type: EnumListItem (5)
+#: Lists.rd:15
+msgid "item 3"
+msgstr "ITEM 3"
+
+#. type: EnumListItem (4)
+#: Lists.rd:16
+msgid "item 4"
+msgstr "ITEM 4"
+
+#. type: ItemListItem *
+#: Lists.rd:17
+msgid "a third item with different indentation"
+msgstr "A THIRD ITEM WITH DIFFERENT INDENTATION"
+
+#. type: Verbatim
+#: Lists.rd:18
+#, no-wrap
+msgid ""
+" verbatim\n"
+" block\n"
+" nested\n"
+" inside\n"
+" the\n"
+" item\n"
+msgstr ""
+" VERBATIM\n"
+" BLOCK\n"
+" NESTED\n"
+" INSIDE\n"
+" THE\n"
+" ITEM\n"
+
+#. type: TextBlock
+#: Lists.rd:24
+msgid "some more text for the item"
+msgstr "SOME MORE TEXT FOR THE ITEM"
+
+#. type: TextBlock
+#: Lists.rd:26
+msgid ""
+"This is another textblock inside the itemlist item. Since I need to test how "
+"indentation works for multi-line output, this textblock is a bit long..."
+msgstr ""
+"THIS IS ANOTHER TEXTBLOCK INSIDE THE ITEMLIST ITEM. SINCE I NEED TO TEST HOW "
+"INDENTATION WORKS FOR MULTI-LINE OUTPUT, THIS TEXTBLOCK IS A BIT LONG..."
+
+#. type: DescListItem Term :
+#: Lists.rd:30
+msgid "odd word"
+msgstr "ODD WORD"
+
+#. type: DescListItem Description
+#: Lists.rd:32
+msgid "this is an explanation of the odd word"
+msgstr "THIS IS AN EXPLANATION OF THE ODD WORD"
+
+#. type: ItemListItem *
+#: Lists.rd:34
+msgid "further clarification"
+msgstr "FURTHER CLARIFICATION"
+
+#. type: ItemListItem *
+#: Lists.rd:36
+msgid ""
+"another long long clarification (this is so long that it will end up taking "
+"more than one line in the output...)"
+msgstr ""
+"ANOTHER LONG LONG CLARIFICATION (THIS IS SO LONG THAT IT WILL END UP TAKING "
+"MORE THAN ONE LINE IN THE OUTPUT...)"
+
+#. type: TextBlock
+#: Lists.rd:39
+msgid "a final note"
+msgstr "A FINAL NOTE"
+
+#. type: DescListItem Term :
+#: Lists.rd:41
+msgid "weird word"
+msgstr "WEIRD WORD"
+
+#. type: DescListItem Description
+#: Lists.rd:42
+msgid "this is an explanation of the weird word"
+msgstr "THIS IS AN EXPLANATION OF THE WEIRD WORD"
+
+#. type: DescListItem Term :
+#: Lists.rd:46
+msgid "awkward word"
+msgstr "AWKWARD WORD"
+
+#. type: EnumListItem (1)
+#: Lists.rd:47
+msgid "this word cannot be explained"
+msgstr "THIS WORD CANNOT BE EXPLAINED"
+
+#. type: EnumListItem (2)
+#: Lists.rd:48
+msgid "see previous point"
+msgstr "SEE PREVIOUS POINT"
+
+#. type: MethodListItem Description --- MyClass#mymethod(val)
+#: Lists.rd:51
+msgid "This method operates on val and turns it into magic!"
+msgstr "THIS METHOD OPERATES ON VAL AND TURNS IT INTO MAGIC!"
+
+#. type: MethodListItem Description --- MyClass#othermethod2()
+#: Lists.rd:54
+msgid "These methods are useless."
+msgstr "THESE METHODS ARE USELESS."
+
+#. type: TextBlock
+#: Lists.rd:56
+msgid "Bye."
+msgstr "BYE."
diff --git a/t/fmt/rubydoc/Lists.pot b/t/fmt/rubydoc/Lists.pot
new file mode 100644
index 0000000..93a993f
--- /dev/null
+++ b/t/fmt/rubydoc/Lists.pot
@@ -0,0 +1,163 @@
+# SOME DESCRIPTIVE TITLE
+# Copyright (C) YEAR Free Software Foundation, Inc.
+# This file is distributed under the same license as the PACKAGE package.
+# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
+#
+#, fuzzy
+msgid ""
+msgstr ""
+"Project-Id-Version: PACKAGE VERSION\n"
+"POT-Creation-Date: 2017-04-06 00:25+0200\n"
+"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
+"Language-Team: LANGUAGE <LL@li.org>\n"
+"Language: \n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+
+#. type: Headline =
+#: Lists.rd:3
+msgid "List test"
+msgstr ""
+
+#. type: TextBlock
+#: Lists.rd:5
+msgid "One textblock..."
+msgstr ""
+
+#. type: ItemListItem *
+#: Lists.rd:6
+msgid "this is an item of an itemlist"
+msgstr ""
+
+#. type: ItemListItem *
+#: Lists.rd:7
+msgid "first sublist item"
+msgstr ""
+
+#. type: ItemListItem *
+#: Lists.rd:8
+msgid "second sublist item"
+msgstr ""
+
+#. type: ItemListItem *
+#: Lists.rd:9
+msgid "this is a second item for the same itemlist"
+msgstr ""
+
+#. type: EnumListItem (1)
+#: Lists.rd:12
+msgid "item 1 of an enumlist nested inside"
+msgstr ""
+
+#. type: EnumListItem (2)
+#: Lists.rd:13
+msgid "item 2 of the enumlist"
+msgstr ""
+
+#. type: EnumListItem (5)
+#: Lists.rd:15
+msgid "item 3"
+msgstr ""
+
+#. type: EnumListItem (4)
+#: Lists.rd:16
+msgid "item 4"
+msgstr ""
+
+#. type: ItemListItem *
+#: Lists.rd:17
+msgid "a third item with different indentation"
+msgstr ""
+
+#. type: Verbatim
+#: Lists.rd:18
+#, no-wrap
+msgid ""
+" verbatim\n"
+" block\n"
+" nested\n"
+" inside\n"
+" the\n"
+" item\n"
+msgstr ""
+
+#. type: TextBlock
+#: Lists.rd:24
+msgid "some more text for the item"
+msgstr ""
+
+#. type: TextBlock
+#: Lists.rd:26
+msgid ""
+"This is another textblock inside the itemlist item. Since I need to test how "
+"indentation works for multi-line output, this textblock is a bit long..."
+msgstr ""
+
+#. type: DescListItem Term :
+#: Lists.rd:30
+msgid "odd word"
+msgstr ""
+
+#. type: DescListItem Description
+#: Lists.rd:32
+msgid "this is an explanation of the odd word"
+msgstr ""
+
+#. type: ItemListItem *
+#: Lists.rd:34
+msgid "further clarification"
+msgstr ""
+
+#. type: ItemListItem *
+#: Lists.rd:36
+msgid ""
+"another long long clarification (this is so long that it will end up taking "
+"more than one line in the output...)"
+msgstr ""
+
+#. type: TextBlock
+#: Lists.rd:39
+msgid "a final note"
+msgstr ""
+
+#. type: DescListItem Term :
+#: Lists.rd:41
+msgid "weird word"
+msgstr ""
+
+#. type: DescListItem Description
+#: Lists.rd:42
+msgid "this is an explanation of the weird word"
+msgstr ""
+
+#. type: DescListItem Term :
+#: Lists.rd:46
+msgid "awkward word"
+msgstr ""
+
+#. type: EnumListItem (1)
+#: Lists.rd:47
+msgid "this word cannot be explained"
+msgstr ""
+
+#. type: EnumListItem (2)
+#: Lists.rd:48
+msgid "see previous point"
+msgstr ""
+
+#. type: MethodListItem Description --- MyClass#mymethod(val)
+#: Lists.rd:51
+msgid "This method operates on val and turns it into magic!"
+msgstr ""
+
+#. type: MethodListItem Description --- MyClass#othermethod2()
+#: Lists.rd:54
+msgid "These methods are useless."
+msgstr ""
+
+#. type: TextBlock
+#: Lists.rd:56
+msgid "Bye."
+msgstr ""
diff --git a/t/fmt/rubydoc/Lists.rd b/t/fmt/rubydoc/Lists.rd
new file mode 100644
index 0000000..af7d4e4
--- /dev/null
+++ b/t/fmt/rubydoc/Lists.rd
@@ -0,0 +1,58 @@
+Nothing will be considered here...
+=begin RD
+= List test
+
+One textblock...
+ * this is an item of an itemlist
+ * first sublist item
+ * second sublist item
+ * this is a second
+ item for the same
+ itemlist
+ (1) item 1 of an enumlist nested inside
+ (2) item 2 of the
+ enumlist
+ (5) item 3
+ (4) item 4
+ * a third item with different indentation
+ verbatim
+ block
+ nested
+ inside
+ the
+ item
+ some more text for the item
+
+ This is another textblock inside the itemlist item. Since I need to
+ test how indentation works for multi-line output, this textblock
+ is a bit long...
+
+ : odd word
+
+ this is an explanation of the odd word
+
+ * further clarification
+
+ * another long long clarification (this is so long that it will
+ end up taking more than one line in the output...)
+
+ a final note
+
+ : weird word
+ this is an explanation of
+ the weird
+ word
+
+ : awkward word
+ (1) this word cannot be explained
+ (2) see previous point
+
+ --- MyClass#mymethod(val)
+ This method operates on val and turns it into magic!
+ --- MyClass#othermethod1()
+ --- MyClass#othermethod2()
+ These methods are useless.
+
+Bye.
+=end RD
+No more text will be considered.
diff --git a/t/fmt/rubydoc/Lists.trans b/t/fmt/rubydoc/Lists.trans
new file mode 100644
index 0000000..532df04
--- /dev/null
+++ b/t/fmt/rubydoc/Lists.trans
@@ -0,0 +1,63 @@
+#
+# *****************************************************
+# * GENERATED FILE, DO NOT EDIT *
+# * THIS IS NO SOURCE FILE, BUT RESULT OF COMPILATION *
+# *****************************************************
+#
+# This file was generated by po4a-translate(1). Do not store it (in VCS,
+# for example), but store the PO file used as source file by po4a-translate.
+#
+# In fact, consider this as a binary, and the PO file as a regular source file:
+# If the PO gets lost, keeping this translation up-to-date will be harder.
+#
+=begin RD
+= LIST TEST
+
+ONE TEXTBLOCK...
+ * THIS IS AN ITEM OF AN ITEMLIST
+ * FIRST SUBLIST ITEM
+ * SECOND SUBLIST ITEM
+ * THIS IS A SECOND ITEM FOR THE SAME ITEMLIST
+ (1) ITEM 1 OF AN ENUMLIST NESTED INSIDE
+ (2) ITEM 2 OF AN ENUMLIST
+ (5) ITEM 3
+ (4) ITEM 4
+ * A THIRD ITEM WITH DIFFERENT INDENTATION
+ VERBATIM
+ BLOCK
+ NESTED
+ INSIDE
+ THE
+ ITEM
+ SOME MORE TEXT FOR THE ITEM
+
+ THIS IS ANOTHER TEXTBLOCK INSIDE THE ITEMLIST ITEM. SINCE I NEED TO
+ TEST HOW INDENTATION WORKS FOR MULTI-LINE OUTPUT, THIS TEXTBLOCK IS A
+ BIT LONG...
+
+ : ODD WORD
+
+ THIS IS AN EXPLANATION OF THE ODD WORD
+
+ * FURTHER CLARIFICATION
+
+ * ANOTHER LONG LONG CLARIFICATION (THIS IS SO LONG THAT IT WILL END
+ UP TAKING MORE THAN ONE LINE IN THE OUTPUT...)
+
+ A FINAL NOTE
+
+ : WEIRD WORD
+ THIS IS AN EXPLANATION OF THE WEIRD WORD
+
+ : AWKWARD WORD
+ (1) THIS WORD CANNOT BE EXPLAINED
+ (2) SEE PREVIOUS POINT
+
+ --- MyClass#mymethod(val)
+ THIS METHOD OPERATES ON VAL AND TURNS IT INTO MAGIC!
+ --- MyClass#othermethod1()
+ --- MyClass#othermethod2()
+ THESE METHODS ARE USELESS.
+
+BYE.
+=end RD
diff --git a/t/fmt/rubydoc/Verbatim.norm b/t/fmt/rubydoc/Verbatim.norm
new file mode 100644
index 0000000..0c175e3
--- /dev/null
+++ b/t/fmt/rubydoc/Verbatim.norm
@@ -0,0 +1,22 @@
+#
+# *****************************************************
+# * GENERATED FILE, DO NOT EDIT *
+# * THIS IS NO SOURCE FILE, BUT RESULT OF COMPILATION *
+# *****************************************************
+#
+# This file was generated by po4a-translate(1). Do not store it (in VCS,
+# for example), but store the PO file used as source file by po4a-translate.
+#
+# In fact, consider this as a binary, and the PO file as a regular source file:
+# If the PO gets lost, keeping this translation up-to-date will be harder.
+#
+= Puredoc verbatim test
+
+Fancy lines to test more textblock features.
+ We also have
+ to test the features of
+ * verbatim *
+ Does it work as intended?
+ What's
+ this?
+Another textblock? Really?
diff --git a/t/fmt/rubydoc/Verbatim.po b/t/fmt/rubydoc/Verbatim.po
new file mode 100644
index 0000000..d26fe27
--- /dev/null
+++ b/t/fmt/rubydoc/Verbatim.po
@@ -0,0 +1,56 @@
+# SOME DESCRIPTIVE TITLE
+# Copyright (C) YEAR Free Software Foundation, Inc.
+# This file is distributed under the same license as the PACKAGE package.
+# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
+#
+#, fuzzy
+msgid ""
+msgstr ""
+"Project-Id-Version: PACKAGE VERSION\n"
+"POT-Creation-Date: 2017-04-03 23:52+0200\n"
+"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
+"Language-Team: LANGUAGE <LL@li.org>\n"
+"Language: \n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+
+#. type: Headline =
+#: Verbatim.rd:1
+msgid "Puredoc verbatim test"
+msgstr "PUREDOC VERBATIM TEST"
+
+#. type: TextBlock
+#: Verbatim.rd:3
+msgid "Fancy lines to test more textblock features."
+msgstr "FANCY LINES TO TEST MORE TEXTBLOCK FEATURES."
+
+#. type: Verbatim
+#: Verbatim.rd:5
+#, no-wrap
+msgid ""
+" We also have\n"
+" to test the features of\n"
+" * verbatim *\n"
+" Does it work as intended?\n"
+msgstr ""
+" WE ALSO HAVE\n"
+" TO TEST THE FEATURES OF\n"
+" * VERBATIM *\n"
+" DOES IT WORK AS INTENDED?\n"
+
+#. type: Verbatim
+#: Verbatim.rd:9
+#, no-wrap
+msgid ""
+" What's\n"
+" this?\n"
+msgstr ""
+" WHAT'S\n"
+" THIS?\n"
+
+#. type: TextBlock
+#: Verbatim.rd:11
+msgid "Another textblock? Really?"
+msgstr "ANOTHER TEXTBLOCK? REALLY?"
diff --git a/t/fmt/rubydoc/Verbatim.pot b/t/fmt/rubydoc/Verbatim.pot
new file mode 100644
index 0000000..7ba92a0
--- /dev/null
+++ b/t/fmt/rubydoc/Verbatim.pot
@@ -0,0 +1,50 @@
+# SOME DESCRIPTIVE TITLE
+# Copyright (C) YEAR Free Software Foundation, Inc.
+# This file is distributed under the same license as the PACKAGE package.
+# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
+#
+#, fuzzy
+msgid ""
+msgstr ""
+"Project-Id-Version: PACKAGE VERSION\n"
+"POT-Creation-Date: 2017-04-03 23:52+0200\n"
+"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
+"Language-Team: LANGUAGE <LL@li.org>\n"
+"Language: \n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+
+#. type: Headline =
+#: Verbatim.rd:1
+msgid "Puredoc verbatim test"
+msgstr ""
+
+#. type: TextBlock
+#: Verbatim.rd:3
+msgid "Fancy lines to test more textblock features."
+msgstr ""
+
+#. type: Verbatim
+#: Verbatim.rd:5
+#, no-wrap
+msgid ""
+" We also have\n"
+" to test the features of\n"
+" * verbatim *\n"
+" Does it work as intended?\n"
+msgstr ""
+
+#. type: Verbatim
+#: Verbatim.rd:9
+#, no-wrap
+msgid ""
+" What's\n"
+" this?\n"
+msgstr ""
+
+#. type: TextBlock
+#: Verbatim.rd:11
+msgid "Another textblock? Really?"
+msgstr ""
diff --git a/t/fmt/rubydoc/Verbatim.rd b/t/fmt/rubydoc/Verbatim.rd
new file mode 100644
index 0000000..20f6078
--- /dev/null
+++ b/t/fmt/rubydoc/Verbatim.rd
@@ -0,0 +1,12 @@
+= Puredoc verbatim test
+
+Fancy lines to test
+more textblock features.
+ We also have
+ to test the features of
+ * verbatim *
+ Does it work as intended?
+ What's
+ this?
+Another textblock?
+Really?
diff --git a/t/fmt/rubydoc/Verbatim.trans b/t/fmt/rubydoc/Verbatim.trans
new file mode 100644
index 0000000..b20c6d1
--- /dev/null
+++ b/t/fmt/rubydoc/Verbatim.trans
@@ -0,0 +1,22 @@
+#
+# *****************************************************
+# * GENERATED FILE, DO NOT EDIT *
+# * THIS IS NO SOURCE FILE, BUT RESULT OF COMPILATION *
+# *****************************************************
+#
+# This file was generated by po4a-translate(1). Do not store it (in VCS,
+# for example), but store the PO file used as source file by po4a-translate.
+#
+# In fact, consider this as a binary, and the PO file as a regular source file:
+# If the PO gets lost, keeping this translation up-to-date will be harder.
+#
+= PUREDOC VERBATIM TEST
+
+FANCY LINES TO TEST MORE TEXTBLOCK FEATURES.
+ WE ALSO HAVE
+ TO TEST THE FEATURES OF
+ * VERBATIM *
+ DOES IT WORK AS INTENDED?
+ WHAT'S
+ THIS?
+ANOTHER TEXTBLOCK? REALLY?
diff --git a/t/fmt/sgml/attributes-order.norm b/t/fmt/sgml/attributes-order.norm
new file mode 100644
index 0000000..1d97864
--- /dev/null
+++ b/t/fmt/sgml/attributes-order.norm
@@ -0,0 +1,39 @@
+<!DOCTYPE refentry PUBLIC "-//OASIS//DTD DocBook V4.1//EN"><refentry>
+ <refnamediv>
+ <refname>test</refname>
+ <refpurpose>test refentry</refpurpose>
+ </refnamediv>
+ <refsect1>
+ <title>refsect1</title>
+ <para>
+ <link lang="en-US" linkend="next" os="linux" vendor="billy"></link>
+
+ </para>
+ <para>
+ <link lang="en-US" linkend="next" os="linux" vendor="billy"></link>
+
+ </para>
+ <para>
+ <link lang="en-US" linkend="next" os="linux" vendor="billy"></link>
+
+ </para>
+ <para>
+ <link lang="en-US" linkend="next" os="linux" vendor="billy"></link>
+
+ </para>
+ <para>
+ <link lang="en-US" linkend="next" os="linux" vendor="billy"></link>
+
+ </para>
+ <para>
+ <link lang="en-US" linkend="next" os="linux" vendor="billy"></link>
+
+ </para>
+ </refsect1>
+ <refsect1 id="next">
+ <title>another refsect1</title>
+ <para>
+ tetrahedron
+ </para>
+ </refsect1>
+</refentry>
diff --git a/t/fmt/sgml/attributes-order.po b/t/fmt/sgml/attributes-order.po
new file mode 100644
index 0000000..3a19d0e
--- /dev/null
+++ b/t/fmt/sgml/attributes-order.po
@@ -0,0 +1,46 @@
+# SOME DESCRIPTIVE TITLE
+# Copyright (C) YEAR Free Software Foundation, Inc.
+# This file is distributed under the same license as the PACKAGE package.
+# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
+#
+#, fuzzy
+msgid ""
+msgstr ""
+"Project-Id-Version: PACKAGE VERSION\n"
+"POT-Creation-Date: 2021-11-17 08:55+0100\n"
+"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
+"Language-Team: LANGUAGE <LL@li.org>\n"
+"Language: \n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+
+#. type: <refname></refname>
+#: attributes-order.sgml:5
+#, no-wrap
+msgid "test"
+msgstr "TEST"
+
+#. type: <refpurpose></refpurpose>
+#: attributes-order.sgml:6
+#, no-wrap
+msgid "test refentry"
+msgstr "TEST REFENTRY"
+
+#. type: <title></title>
+#: attributes-order.sgml:9
+#, no-wrap
+msgid "refsect1"
+msgstr "REFSECT1"
+
+#. type: <title></title>
+#: attributes-order.sgml:18
+#, no-wrap
+msgid "another refsect1"
+msgstr "ANOTHER REFSECT1"
+
+#. type: <para></para>
+#: attributes-order.sgml:19
+msgid "tetrahedron"
+msgstr "TETRAHEDRON"
diff --git a/t/fmt/sgml/attributes-order.pot b/t/fmt/sgml/attributes-order.pot
new file mode 100644
index 0000000..7e30ec9
--- /dev/null
+++ b/t/fmt/sgml/attributes-order.pot
@@ -0,0 +1,46 @@
+# SOME DESCRIPTIVE TITLE
+# Copyright (C) YEAR Free Software Foundation, Inc.
+# This file is distributed under the same license as the PACKAGE package.
+# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
+#
+#, fuzzy
+msgid ""
+msgstr ""
+"Project-Id-Version: PACKAGE VERSION\n"
+"POT-Creation-Date: 2021-11-17 08:55+0100\n"
+"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
+"Language-Team: LANGUAGE <LL@li.org>\n"
+"Language: \n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+
+#. type: <refname></refname>
+#: attributes-order.sgml:5
+#, no-wrap
+msgid "test"
+msgstr ""
+
+#. type: <refpurpose></refpurpose>
+#: attributes-order.sgml:6
+#, no-wrap
+msgid "test refentry"
+msgstr ""
+
+#. type: <title></title>
+#: attributes-order.sgml:9
+#, no-wrap
+msgid "refsect1"
+msgstr ""
+
+#. type: <title></title>
+#: attributes-order.sgml:18
+#, no-wrap
+msgid "another refsect1"
+msgstr ""
+
+#. type: <para></para>
+#: attributes-order.sgml:19
+msgid "tetrahedron"
+msgstr ""
diff --git a/t/fmt/sgml/attributes-order.sgml b/t/fmt/sgml/attributes-order.sgml
new file mode 100644
index 0000000..0a675c6
--- /dev/null
+++ b/t/fmt/sgml/attributes-order.sgml
@@ -0,0 +1,21 @@
+<!DOCTYPE refentry PUBLIC "-//OASIS//DTD DocBook V4.1//EN">
+
+<refentry>
+ <refnamediv>
+ <refname>test</refname>
+ <refpurpose>test refentry</refpurpose>
+ </refnamediv>
+ <refsect1>
+ <title>refsect1</title>
+ <para><link linkend="next" OS="linux" vendor="billy" Lang="en-US"></link></para>
+ <para><link linkend="next" OS="linux" vendor="billy" Lang="en-US"></link></para>
+ <para><link linkend="next" OS="linux" vendor="billy" Lang="en-US"></link></para>
+ <para><link linkend="next" OS="linux" vendor="billy" Lang="en-US"></link></para>
+ <para><link linkend="next" OS="linux" vendor="billy" Lang="en-US"></link></para>
+ <para><link linkend="next" OS="linux" vendor="billy" Lang="en-US"></link></para>
+ </refsect1>
+ <refsect1 id="next">
+ <title>another refsect1</title>
+ <para>tetrahedron</para>
+ </refsect1>
+</refentry>
diff --git a/t/fmt/sgml/attributes-order.trans b/t/fmt/sgml/attributes-order.trans
new file mode 100644
index 0000000..99f93b3
--- /dev/null
+++ b/t/fmt/sgml/attributes-order.trans
@@ -0,0 +1,39 @@
+<!DOCTYPE refentry PUBLIC "-//OASIS//DTD DocBook V4.1//EN"><refentry>
+ <refnamediv>
+ <refname>TEST</refname>
+ <refpurpose>TEST REFENTRY</refpurpose>
+ </refnamediv>
+ <refsect1>
+ <title>REFSECT1</title>
+ <para>
+ <link lang="en-US" linkend="next" os="linux" vendor="billy"></link>
+
+ </para>
+ <para>
+ <link lang="en-US" linkend="next" os="linux" vendor="billy"></link>
+
+ </para>
+ <para>
+ <link lang="en-US" linkend="next" os="linux" vendor="billy"></link>
+
+ </para>
+ <para>
+ <link lang="en-US" linkend="next" os="linux" vendor="billy"></link>
+
+ </para>
+ <para>
+ <link lang="en-US" linkend="next" os="linux" vendor="billy"></link>
+
+ </para>
+ <para>
+ <link lang="en-US" linkend="next" os="linux" vendor="billy"></link>
+
+ </para>
+ </refsect1>
+ <refsect1 id="next">
+ <title>ANOTHER REFSECT1</title>
+ <para>
+ TETRAHEDRON
+ </para>
+ </refsect1>
+</refentry>
diff --git a/t/fmt/sgml/basic.norm b/t/fmt/sgml/basic.norm
new file mode 100644
index 0000000..b42bfdf
--- /dev/null
+++ b/t/fmt/sgml/basic.norm
@@ -0,0 +1,50 @@
+<!DOCTYPE refentry PUBLIC "-//OASIS//DTD DocBook V4.1//EN" [
+
+ <!ENTITY dhfirstname "<firstname>fname</firstname>">
+ <!ENTITY dhsurname "<surname>Surname</surname>">
+ <!ENTITY dhemail "<email>email@1.com</email>">
+ <!ENTITY dhuemail "<email>email@2.com</email>">
+ <!ENTITY dhusername "Jane Doe">
+ <!ENTITY dhuusername "John Doe">
+]>
+<refentry>
+ <refentryinfo>
+<address>
+ &dhemail; and &dhuemail;
+ </address>
+
+ <author>
+ &dhfirstname; &dhsurname;
+ </author>
+ <copyright>
+ <year>2004, 2007</year>
+ <holder>&dhusername; and &dhuusername;</holder>
+ </copyright>
+ </refentryinfo>
+ <refnamediv>
+ <refname>test</refname>
+ <refpurpose>test refentry</refpurpose>
+ </refnamediv>
+ <refsect1>
+ <title>refsect1</title>
+ <para>
+ Help Options:
+ </para>
+ <variablelist>
+ <varlistentry>
+ <term><option>-?</option> <option>--help</option></term>
+ <listitem>
+ <para>
+ Show help options.
+ </para>
+ </listitem>
+ </varlistentry>
+ </variablelist>
+ <para>
+ Test test1 test2 test3 test4.
+ </para>
+ <para>
+ Test test1 test2 test3 test4.
+ </para>
+ </refsect1>
+</refentry>
diff --git a/t/fmt/sgml/basic.po b/t/fmt/sgml/basic.po
new file mode 100644
index 0000000..fbbe1a0
--- /dev/null
+++ b/t/fmt/sgml/basic.po
@@ -0,0 +1,114 @@
+# SOME DESCRIPTIVE TITLE
+# Copyright (C) YEAR Free Software Foundation, Inc.
+# This file is distributed under the same license as the PACKAGE package.
+# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
+#
+#, fuzzy
+msgid ""
+msgstr ""
+"Project-Id-Version: PACKAGE VERSION\n"
+"POT-Creation-Date: 2021-11-16 22:40+0100\n"
+"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
+"Language-Team: LANGUAGE <LL@li.org>\n"
+"Language: \n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+
+#. type: definition of entity &dhfirstname;
+#, no-wrap
+msgid "<firstname>fname</firstname>"
+msgstr "<firstname>FNAME</firstname>"
+
+#. type: definition of entity &dhsurname;
+#, no-wrap
+msgid "<surname>Surname</surname>"
+msgstr "<surname>SURNAME</surname>"
+
+#. type: definition of entity &dhemail;
+#, no-wrap
+msgid "<email>email@1.com</email>"
+msgstr "<email>EMAIL@1.COM</email>"
+
+#. type: definition of entity &dhuemail;
+#, no-wrap
+msgid "<email>email@2.com</email>"
+msgstr "<email>EMAIL@2.COM</email>"
+
+#. type: definition of entity &dhusername;
+#, no-wrap
+msgid "Jane Doe"
+msgstr "JANE DOE"
+
+#. type: definition of entity &dhuusername;
+#, no-wrap
+msgid "John Doe"
+msgstr "JOHN DOE"
+
+#. type: <address></address>
+#: basic.sgml:13
+#, no-wrap
+msgid ""
+"<address>\n"
+" &dhemail; and &dhuemail;\n"
+" "
+msgstr ""
+"<address>\n"
+" &dhemail; AND &dhuemail;\n"
+" "
+
+#. type: <author></author>
+#: basic.sgml:21
+msgid "&dhfirstname; &dhsurname;"
+msgstr "&dhfirstname; &dhsurname;"
+
+#. type: <copyright><holder>
+#: basic.sgml:25
+msgid "<year>2004, 2007</year>"
+msgstr "<year>2004, 2007</year>"
+
+#. type: <holder></holder>
+#: basic.sgml:25
+#, no-wrap
+msgid "&dhusername; and &dhuusername;"
+msgstr "&dhusername; and &dhuusername;"
+
+#. type: <refname></refname>
+#: basic.sgml:30
+#, no-wrap
+msgid "test"
+msgstr "TEST"
+
+#. type: <refpurpose></refpurpose>
+#: basic.sgml:31
+#, no-wrap
+msgid "test refentry"
+msgstr "TEST REFENTRY"
+
+#. type: <title></title>
+#: basic.sgml:34
+#, no-wrap
+msgid "refsect1"
+msgstr "REFSECT1"
+
+#. type: <para></para>
+#: basic.sgml:35
+msgid "Help Options:"
+msgstr "HELP OPTIONS:"
+
+#. type: <term></term>
+#: basic.sgml:38
+#, no-wrap
+msgid "<option>-?</option> <option>--help</option>"
+msgstr ""
+
+#. type: <para></para>
+#: basic.sgml:40
+msgid "Show help options."
+msgstr "SHOW HELP OPTIONS."
+
+#. type: <para></para>
+#: basic.sgml:46 basic.sgml:48
+msgid "Test test1 test2 test3 test4."
+msgstr "TEST TEST1 TEST2 TEST3 TEST4."
diff --git a/t/fmt/sgml/basic.pot b/t/fmt/sgml/basic.pot
new file mode 100644
index 0000000..ece2a0b
--- /dev/null
+++ b/t/fmt/sgml/basic.pot
@@ -0,0 +1,111 @@
+# SOME DESCRIPTIVE TITLE
+# Copyright (C) YEAR Free Software Foundation, Inc.
+# This file is distributed under the same license as the PACKAGE package.
+# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
+#
+#, fuzzy
+msgid ""
+msgstr ""
+"Project-Id-Version: PACKAGE VERSION\n"
+"POT-Creation-Date: 2021-11-16 22:40+0100\n"
+"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
+"Language-Team: LANGUAGE <LL@li.org>\n"
+"Language: \n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+
+#. type: definition of entity &dhfirstname;
+#, no-wrap
+msgid "<firstname>fname</firstname>"
+msgstr ""
+
+#. type: definition of entity &dhsurname;
+#, no-wrap
+msgid "<surname>Surname</surname>"
+msgstr ""
+
+#. type: definition of entity &dhemail;
+#, no-wrap
+msgid "<email>email@1.com</email>"
+msgstr ""
+
+#. type: definition of entity &dhuemail;
+#, no-wrap
+msgid "<email>email@2.com</email>"
+msgstr ""
+
+#. type: definition of entity &dhusername;
+#, no-wrap
+msgid "Jane Doe"
+msgstr ""
+
+#. type: definition of entity &dhuusername;
+#, no-wrap
+msgid "John Doe"
+msgstr ""
+
+#. type: <address></address>
+#: basic.sgml:13
+#, no-wrap
+msgid ""
+"<address>\n"
+" &dhemail; and &dhuemail;\n"
+" "
+msgstr ""
+
+#. type: <author></author>
+#: basic.sgml:21
+msgid "&dhfirstname; &dhsurname;"
+msgstr ""
+
+#. type: <copyright><holder>
+#: basic.sgml:25
+msgid "<year>2004, 2007</year>"
+msgstr ""
+
+#. type: <holder></holder>
+#: basic.sgml:25
+#, no-wrap
+msgid "&dhusername; and &dhuusername;"
+msgstr ""
+
+#. type: <refname></refname>
+#: basic.sgml:30
+#, no-wrap
+msgid "test"
+msgstr ""
+
+#. type: <refpurpose></refpurpose>
+#: basic.sgml:31
+#, no-wrap
+msgid "test refentry"
+msgstr ""
+
+#. type: <title></title>
+#: basic.sgml:34
+#, no-wrap
+msgid "refsect1"
+msgstr ""
+
+#. type: <para></para>
+#: basic.sgml:35
+msgid "Help Options:"
+msgstr ""
+
+#. type: <term></term>
+#: basic.sgml:38
+#, no-wrap
+msgid "<option>-?</option> <option>--help</option>"
+msgstr ""
+
+#. type: <para></para>
+#: basic.sgml:40
+msgid "Show help options."
+msgstr ""
+
+#. type: <para></para>
+#: basic.sgml:46 basic.sgml:48
+msgid "Test test1 test2 test3 test4."
+msgstr ""
diff --git a/t/fmt/sgml/basic.sgml b/t/fmt/sgml/basic.sgml
new file mode 100644
index 0000000..abd7640
--- /dev/null
+++ b/t/fmt/sgml/basic.sgml
@@ -0,0 +1,51 @@
+<!DOCTYPE refentry PUBLIC "-//OASIS//DTD DocBook V4.1//EN" [
+ <!ENTITY dhfirstname "<firstname>fname</firstname>">
+ <!ENTITY dhsurname "<surname>Surname</surname>">
+ <!ENTITY dhemail "<email>email@1.com</email>">
+ <!ENTITY dhuemail "<email>email@2.com</email>">
+ <!ENTITY dhusername "Jane Doe">
+ <!ENTITY dhuusername "John Doe">
+]>
+
+<refentry>
+ <refentryinfo>
+ <address>
+ &dhemail; and &dhuemail;
+ </address>
+ <author>
+ &dhfirstname;
+ &dhsurname;
+ <!--
+ and
+ &dhufirstname;
+ &dhusurname; -->
+ </author>
+ <copyright>
+ <year>2004, 2007</year>
+ <holder>&dhusername; and &dhuusername;</holder>
+ </copyright>
+
+ </refentryinfo>
+ <refnamediv>
+ <refname>test</refname>
+ <refpurpose>test refentry</refpurpose>
+ </refnamediv>
+ <refsect1>
+ <title>refsect1</title>
+ <para>Help Options:</para>
+ <variablelist>
+ <varlistentry>
+ <term><option>-?</option> <option>--help</option></term>
+ <listitem>
+ <para>Show help options.</para>
+ </listitem>
+ </varlistentry>
+ </variablelist>
+ <para>Test test1 test2
+ test3
+test4.</para>
+ <para>
+ Test test1 test2 test3 test4.
+ </para>
+ </refsect1>
+</refentry>
diff --git a/t/fmt/sgml/basic.trans b/t/fmt/sgml/basic.trans
new file mode 100644
index 0000000..3090a00
--- /dev/null
+++ b/t/fmt/sgml/basic.trans
@@ -0,0 +1,50 @@
+<!DOCTYPE refentry PUBLIC "-//OASIS//DTD DocBook V4.1//EN" [
+
+ <!ENTITY dhfirstname "<firstname>FNAME</firstname>">
+ <!ENTITY dhsurname "<surname>SURNAME</surname>">
+ <!ENTITY dhemail "<email>EMAIL@1.COM</email>">
+ <!ENTITY dhuemail "<email>EMAIL@2.COM</email>">
+ <!ENTITY dhusername "JANE DOE">
+ <!ENTITY dhuusername "JOHN DOE">
+]>
+<refentry>
+ <refentryinfo>
+<address>
+ &dhemail; AND &dhuemail;
+ </address>
+
+ <author>
+ &dhfirstname; &dhsurname;
+ </author>
+ <copyright>
+ <year>2004, 2007</year>
+ <holder>&dhusername; and &dhuusername;</holder>
+ </copyright>
+ </refentryinfo>
+ <refnamediv>
+ <refname>TEST</refname>
+ <refpurpose>TEST REFENTRY</refpurpose>
+ </refnamediv>
+ <refsect1>
+ <title>REFSECT1</title>
+ <para>
+ HELP OPTIONS:
+ </para>
+ <variablelist>
+ <varlistentry>
+ <term><option>-?</option> <option>--help</option></term>
+ <listitem>
+ <para>
+ SHOW HELP OPTIONS.
+ </para>
+ </listitem>
+ </varlistentry>
+ </variablelist>
+ <para>
+ TEST TEST1 TEST2 TEST3 TEST4.
+ </para>
+ <para>
+ TEST TEST1 TEST2 TEST3 TEST4.
+ </para>
+ </refsect1>
+</refentry>
diff --git a/t/fmt/sgml/entity.pot b/t/fmt/sgml/entity.pot
new file mode 100644
index 0000000..4d0336c
--- /dev/null
+++ b/t/fmt/sgml/entity.pot
@@ -0,0 +1,22 @@
+# SOME DESCRIPTIVE TITLE
+# Copyright (C) YEAR Free Software Foundation, Inc.
+# This file is distributed under the same license as the PACKAGE package.
+# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
+#
+#, fuzzy
+msgid ""
+msgstr ""
+"Project-Id-Version: PACKAGE VERSION\n"
+"POT-Creation-Date: 2004-04-27 16:26+0200\n"
+"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
+"Language-Team: LANGUAGE <LL@li.org>\n"
+"Language: \n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+
+#. type: definition of entity &myentity;
+#, no-wrap
+msgid "mydeclaration"
+msgstr ""
diff --git a/t/fmt/tex/basic.norm b/t/fmt/tex/basic.norm
new file mode 100644
index 0000000..89c7ddc
--- /dev/null
+++ b/t/fmt/tex/basic.norm
@@ -0,0 +1,27 @@
+% This file was generated with po4a. Translate the source file.
+%
+\documentclass[12pt]{article-wrong}
+\begin{document}
+
+\section*{first section}
+
+first paragraph.
+
+\noindent second paragraph
+
+\section{second section}
+
+\begin{verbatim}
+Verbatim
+ text
+ azerty azerty azerty azerty azerty azerty azerty azerty azerty azerty azerty azerty azerty azerty azerty azerty azerty azerty azerty
+foo bar
+\end{verbatim}
+
+\subsection{an empty subsection}
+
+\subsubsection{an empty subsubsection}
+in fact...not so empty
+
+
+\end{document}
diff --git a/t/fmt/tex/basic.norm.stderr b/t/fmt/tex/basic.norm.stderr
new file mode 100644
index 0000000..edb6c84
--- /dev/null
+++ b/t/fmt/tex/basic.norm.stderr
@@ -0,0 +1 @@
+po4a::tex: kpsewhich cannot find article-wrong.cls
diff --git a/t/fmt/tex/basic.po b/t/fmt/tex/basic.po
new file mode 100644
index 0000000..5c333d3
--- /dev/null
+++ b/t/fmt/tex/basic.po
@@ -0,0 +1,71 @@
+# SOME DESCRIPTIVE TITLE
+# Copyright (C) YEAR Free Software Foundation, Inc.
+# This file is distributed under the same license as the PACKAGE package.
+# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
+#
+#, fuzzy
+msgid ""
+msgstr ""
+"Project-Id-Version: PACKAGE VERSION\n"
+"POT-Creation-Date: 2005-04-24 17:45+0200\n"
+"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
+"Language-Team: LANGUAGE <LL@li.org>\n"
+"Language: \n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+
+#. type: section{#2}
+#: basic.tex:5
+msgid "first section"
+msgstr "FIRST SECTION"
+
+#. type: document
+#: basic.tex:7
+msgid "first paragraph."
+msgstr "FIRST PARAGRAPH."
+
+#. comment
+#. type: document
+#: basic.tex:10
+msgid "\\noindent second paragraph"
+msgstr "\\noindent SECOND PARAGRAPH"
+
+#. type: section{#2}
+#: basic.tex:12
+msgid "second section"
+msgstr "SECOND SECTION"
+
+#. type: verbatim
+#: basic.tex:18
+#, no-wrap
+msgid ""
+"Verbatim\n"
+" text\n"
+"\tazerty azerty azerty azerty azerty azerty azerty azerty azerty azerty "
+"azerty azerty azerty azerty azerty azerty azerty azerty azerty\n"
+"foo bar"
+msgstr ""
+"VERBATIM\n"
+" TEXT\n"
+"\tAZERTY AZERTY AZERTY AZERTY AZERTY AZERTY AZERTY AZERTY AZERTY AZERTY "
+"AZERTY AZERTY AZERTY AZERTY AZERTY AZERTY AZERTY AZERTY AZERTY\n"
+"FOO BAR"
+
+#. type: subsection{#2}
+#: basic.tex:21
+msgid "an empty subsection"
+msgstr "AN EMPTY SUBSECTION"
+
+#. some comments
+#. line continuation
+#. type: subsubsection{#2}
+#: basic.tex:26
+msgid "an empty subsubsection"
+msgstr "AN EMPTY SUBSUBSECTION"
+
+#. type: document
+#: basic.tex:26
+msgid "in fact...not so empty"
+msgstr "IN FACT... NOT SO EMPTY"
diff --git a/t/fmt/tex/basic.pot b/t/fmt/tex/basic.pot
new file mode 100644
index 0000000..4d15156
--- /dev/null
+++ b/t/fmt/tex/basic.pot
@@ -0,0 +1,66 @@
+# SOME DESCRIPTIVE TITLE
+# Copyright (C) YEAR Free Software Foundation, Inc.
+# This file is distributed under the same license as the PACKAGE package.
+# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
+#
+#, fuzzy
+msgid ""
+msgstr ""
+"Project-Id-Version: PACKAGE VERSION\n"
+"POT-Creation-Date: 2005-04-24 17:45+0200\n"
+"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
+"Language-Team: LANGUAGE <LL@li.org>\n"
+"Language: \n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+
+#. type: section{#2}
+#: basic.tex:5
+msgid "first section"
+msgstr ""
+
+#. type: document
+#: basic.tex:7
+msgid "first paragraph."
+msgstr ""
+
+#. comment
+#. type: document
+#: basic.tex:10
+msgid "\\noindent second paragraph"
+msgstr ""
+
+#. type: section{#2}
+#: basic.tex:12
+msgid "second section"
+msgstr ""
+
+#. type: verbatim
+#: basic.tex:18
+#, no-wrap
+msgid ""
+"Verbatim\n"
+" text\n"
+"\tazerty azerty azerty azerty azerty azerty azerty azerty azerty azerty "
+"azerty azerty azerty azerty azerty azerty azerty azerty azerty\n"
+"foo bar"
+msgstr ""
+
+#. type: subsection{#2}
+#: basic.tex:21
+msgid "an empty subsection"
+msgstr ""
+
+#. some comments
+#. line continuation
+#. type: subsubsection{#2}
+#: basic.tex:26
+msgid "an empty subsubsection"
+msgstr ""
+
+#. type: document
+#: basic.tex:26
+msgid "in fact...not so empty"
+msgstr ""
diff --git a/t/fmt/tex/basic.tex b/t/fmt/tex/basic.tex
new file mode 100644
index 0000000..49fe8e2
--- /dev/null
+++ b/t/fmt/tex/basic.tex
@@ -0,0 +1,28 @@
+\documentclass[12pt]{article-wrong}
+\begin{document}
+
+\section*{first section}
+
+first paragraph.
+
+\noindent
+second paragraph%comment
+
+\section{second section}
+
+\begin{verbatim}
+Verbatim
+ text
+ azerty azerty azerty azerty azerty azerty azerty azerty azerty azerty azerty azerty azerty azerty azerty azerty azerty azerty azerty
+foo bar
+\end{verbatim}
+
+\subsection{an empty subsection}
+
+% some comments
+\subsubsection{an empty subsubsection}
+in fact% line continuation
+ ...not so empty
+
+
+\end{document}
diff --git a/t/fmt/tex/basic.trans b/t/fmt/tex/basic.trans
new file mode 100644
index 0000000..599a9f7
--- /dev/null
+++ b/t/fmt/tex/basic.trans
@@ -0,0 +1,27 @@
+% This file was generated with po4a. Translate the source file.
+%
+\documentclass[12pt]{article-wrong}
+\begin{document}
+
+\section*{FIRST SECTION}
+
+FIRST PARAGRAPH.
+
+\noindent SECOND PARAGRAPH
+
+\section{SECOND SECTION}
+
+\begin{verbatim}
+VERBATIM
+ TEXT
+ AZERTY AZERTY AZERTY AZERTY AZERTY AZERTY AZERTY AZERTY AZERTY AZERTY AZERTY AZERTY AZERTY AZERTY AZERTY AZERTY AZERTY AZERTY AZERTY
+FOO BAR
+\end{verbatim}
+
+\subsection{AN EMPTY SUBSECTION}
+
+\subsubsection{AN EMPTY SUBSUBSECTION}
+IN FACT... NOT SO EMPTY
+
+
+\end{document}
diff --git a/t/fmt/tex/basic.trans.stderr b/t/fmt/tex/basic.trans.stderr
new file mode 100644
index 0000000..edb6c84
--- /dev/null
+++ b/t/fmt/tex/basic.trans.stderr
@@ -0,0 +1 @@
+po4a::tex: kpsewhich cannot find article-wrong.cls
diff --git a/t/fmt/tex/input-in-verbatim.norm b/t/fmt/tex/input-in-verbatim.norm
new file mode 100644
index 0000000..24ce935
--- /dev/null
+++ b/t/fmt/tex/input-in-verbatim.norm
@@ -0,0 +1,11 @@
+% This file was generated with po4a. Translate the source file.
+%
+\documentclass[12pt]{article}
+\begin{document}
+
+\begin{verbatim}
+\documentclass[ignorenonframetext]{beamer}
+\input{main.tex}
+\end{verbatim}
+
+\end{document}
diff --git a/t/fmt/tex/input-in-verbatim.po b/t/fmt/tex/input-in-verbatim.po
new file mode 100644
index 0000000..e3f8fac
--- /dev/null
+++ b/t/fmt/tex/input-in-verbatim.po
@@ -0,0 +1,27 @@
+# SOME DESCRIPTIVE TITLE
+# Copyright (C) YEAR Free Software Foundation, Inc.
+# This file is distributed under the same license as the PACKAGE package.
+# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
+#
+#, fuzzy
+msgid ""
+msgstr ""
+"Project-Id-Version: PACKAGE VERSION\n"
+"POT-Creation-Date: 2024-01-04 01:52+0100\n"
+"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
+"Language-Team: LANGUAGE <LL@li.org>\n"
+"Language: \n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+
+#. type: verbatim
+#: input-in-verbatim.tex:7
+#, no-wrap
+msgid ""
+"\\documentclass[ignorenonframetext]{beamer}\n"
+"\\input{main.tex}"
+msgstr ""
+"\\documentclass[ignorenonframetext]{beamer}\n"
+"\\input{main.tex}"
diff --git a/t/fmt/tex/input-in-verbatim.pot b/t/fmt/tex/input-in-verbatim.pot
new file mode 100644
index 0000000..554bc7a
--- /dev/null
+++ b/t/fmt/tex/input-in-verbatim.pot
@@ -0,0 +1,25 @@
+# SOME DESCRIPTIVE TITLE
+# Copyright (C) YEAR Free Software Foundation, Inc.
+# This file is distributed under the same license as the PACKAGE package.
+# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
+#
+#, fuzzy
+msgid ""
+msgstr ""
+"Project-Id-Version: PACKAGE VERSION\n"
+"POT-Creation-Date: 2024-01-04 01:50+0100\n"
+"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
+"Language-Team: LANGUAGE <LL@li.org>\n"
+"Language: \n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+
+#. type: verbatim
+#: input-in-verbatim.tex:7
+#, no-wrap
+msgid ""
+"\\documentclass[ignorenonframetext]{beamer}\n"
+"\\input{main.tex}"
+msgstr ""
diff --git a/t/fmt/tex/input-in-verbatim.stderr-without-ignore b/t/fmt/tex/input-in-verbatim.stderr-without-ignore
new file mode 100644
index 0000000..c930e27
--- /dev/null
+++ b/t/fmt/tex/input-in-verbatim.stderr-without-ignore
@@ -0,0 +1 @@
+po4a::tex: Cannot find 'main.tex' with kpsewhich. To prevent this file to be included, add '-o exclude_include=main.tex' to the options, either on the command line or in your po4a.conf file.
diff --git a/t/fmt/tex/input-in-verbatim.tex b/t/fmt/tex/input-in-verbatim.tex
new file mode 100644
index 0000000..6383bce
--- /dev/null
+++ b/t/fmt/tex/input-in-verbatim.tex
@@ -0,0 +1,9 @@
+\documentclass[12pt]{article}
+\begin{document}
+
+\begin{verbatim}
+\documentclass[ignorenonframetext]{beamer}
+\input{main.tex}
+\end{verbatim}
+
+\end{document} \ No newline at end of file
diff --git a/t/fmt/tex/input-in-verbatim.trans b/t/fmt/tex/input-in-verbatim.trans
new file mode 100644
index 0000000..24ce935
--- /dev/null
+++ b/t/fmt/tex/input-in-verbatim.trans
@@ -0,0 +1,11 @@
+% This file was generated with po4a. Translate the source file.
+%
+\documentclass[12pt]{article}
+\begin{document}
+
+\begin{verbatim}
+\documentclass[ignorenonframetext]{beamer}
+\input{main.tex}
+\end{verbatim}
+
+\end{document}
diff --git a/t/fmt/tex/theorem.norm b/t/fmt/tex/theorem.norm
new file mode 100644
index 0000000..a9827a8
--- /dev/null
+++ b/t/fmt/tex/theorem.norm
@@ -0,0 +1,9 @@
+% This file was generated with po4a. Translate the source file.
+%
+\documentclass{article}
+\newtheorem{theorem}{Theorem}
+\newtheorem{lemma}[theorem]{Lemma}
+
+\begin{document}
+\end{document}
+
diff --git a/t/fmt/tex/theorem.po b/t/fmt/tex/theorem.po
new file mode 100644
index 0000000..7354992
--- /dev/null
+++ b/t/fmt/tex/theorem.po
@@ -0,0 +1,27 @@
+# SOME DESCRIPTIVE TITLE
+# Copyright (C) YEAR Free Software Foundation, Inc.
+# This file is distributed under the same license as the PACKAGE package.
+# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
+#
+#, fuzzy
+msgid ""
+msgstr ""
+"Project-Id-Version: PACKAGE VERSION\n"
+"POT-Creation-Date: 2013-07-14 18:20+0200\n"
+"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
+"Language-Team: LANGUAGE <LL@li.org>\n"
+"Language: \n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+
+#. type: newtheorem{#3}
+#: theorem.tex:4
+msgid "Theorem"
+msgstr "tHEOREM"
+
+#. type: newtheorem{#3}
+#: theorem.tex:4
+msgid "Lemma"
+msgstr "lEMMA"
diff --git a/t/fmt/tex/theorem.pot b/t/fmt/tex/theorem.pot
new file mode 100644
index 0000000..3097045
--- /dev/null
+++ b/t/fmt/tex/theorem.pot
@@ -0,0 +1,27 @@
+# SOME DESCRIPTIVE TITLE
+# Copyright (C) YEAR Free Software Foundation, Inc.
+# This file is distributed under the same license as the PACKAGE package.
+# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
+#
+#, fuzzy
+msgid ""
+msgstr ""
+"Project-Id-Version: PACKAGE VERSION\n"
+"POT-Creation-Date: 2013-07-14 18:20+0200\n"
+"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
+"Language-Team: LANGUAGE <LL@li.org>\n"
+"Language: \n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+
+#. type: newtheorem{#3}
+#: theorem.tex:4
+msgid "Theorem"
+msgstr ""
+
+#. type: newtheorem{#3}
+#: theorem.tex:4
+msgid "Lemma"
+msgstr ""
diff --git a/t/fmt/tex/theorem.tex b/t/fmt/tex/theorem.tex
new file mode 100644
index 0000000..e5ebd9d
--- /dev/null
+++ b/t/fmt/tex/theorem.tex
@@ -0,0 +1,7 @@
+\documentclass{article}
+\newtheorem{theorem}{Theorem}
+\newtheorem{lemma}[theorem]{Lemma}
+
+\begin{document}
+\end{document}
+
diff --git a/t/fmt/tex/theorem.trans b/t/fmt/tex/theorem.trans
new file mode 100644
index 0000000..39ce606
--- /dev/null
+++ b/t/fmt/tex/theorem.trans
@@ -0,0 +1,9 @@
+% This file was generated with po4a. Translate the source file.
+%
+\documentclass{article}
+\newtheorem{theorem}{tHEOREM}
+\newtheorem{lemma}[theorem]{lEMMA}
+
+\begin{document}
+\end{document}
+
diff --git a/t/fmt/texinfo/comments.norm b/t/fmt/texinfo/comments.norm
new file mode 100644
index 0000000..646b7ba
--- /dev/null
+++ b/t/fmt/texinfo/comments.norm
@@ -0,0 +1,22 @@
+\input texinfo @c -*-texinfo-*-
+@c ===========================================================================
+@c
+@c This file was generated with po4a. Translate the source file.
+@c
+@c ===========================================================================
+
+@comment $Id@w{$}
+@comment %**start of header
+@settitle GNU Sample 1.0
+@syncodeindex pg cp
+@comment %**end of header
+
+@node Top
+@top GNU Sample
+
+@c TRANSLATORS: This is a comment for the translators
+@comment TRANSLATORS: This one also
+@c Not this one, it should not be shown to the translators
+This manual is for GNU Sample (version 1.0, UPDATED).
+
+@bye
diff --git a/t/fmt/texinfo/comments.po b/t/fmt/texinfo/comments.po
new file mode 100644
index 0000000..05f30b5
--- /dev/null
+++ b/t/fmt/texinfo/comments.po
@@ -0,0 +1,42 @@
+# SOME DESCRIPTIVE TITLE
+# Copyright (C) YEAR Free Software Foundation, Inc.
+# This file is distributed under the same license as the PACKAGE package.
+# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
+#
+#, fuzzy
+msgid ""
+msgstr ""
+"Project-Id-Version: PACKAGE VERSION\n"
+"POT-Creation-Date: 2020-04-03 02:00+0200\n"
+"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
+"Language-Team: LANGUAGE <LL@LI.ORG>\n"
+"Language: \n"
+"MIME-Version: 1.0\n"
+"Content-Type: TEXT/PLAIN; CHARSET=UTF-8\n"
+"Content-Transfer-Encoding: 8BIT\n"
+
+#. type: settitle
+#: comments.texi:4
+#, no-wrap
+msgid "GNU Sample 1.0"
+msgstr "GNU SAMPLE 1.0"
+
+#. type: node
+#: comments.texi:8
+#, no-wrap
+msgid "Top"
+msgstr "TOP"
+
+#. type: top
+#: comments.texi:9
+#, no-wrap
+msgid "GNU Sample"
+msgstr "GNU SAMPLE"
+
+#. This is a comment for the translators
+#. This one also
+#. type: Plain text
+#: comments.texi:15
+msgid "This manual is for GNU Sample (version 1.0, UPDATED)."
+msgstr "THIS MANUAL IS FOR GNU SAMPLE (VERSION 1.0, UPDATED)."
diff --git a/t/fmt/texinfo/comments.pot b/t/fmt/texinfo/comments.pot
new file mode 100644
index 0000000..d146a4e
--- /dev/null
+++ b/t/fmt/texinfo/comments.pot
@@ -0,0 +1,42 @@
+# SOME DESCRIPTIVE TITLE
+# Copyright (C) YEAR Free Software Foundation, Inc.
+# This file is distributed under the same license as the PACKAGE package.
+# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
+#
+#, fuzzy
+msgid ""
+msgstr ""
+"Project-Id-Version: PACKAGE VERSION\n"
+"POT-Creation-Date: 2020-04-03 02:00+0200\n"
+"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
+"Language-Team: LANGUAGE <LL@li.org>\n"
+"Language: \n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+
+#. type: settitle
+#: comments.texi:4
+#, no-wrap
+msgid "GNU Sample 1.0"
+msgstr ""
+
+#. type: node
+#: comments.texi:8
+#, no-wrap
+msgid "Top"
+msgstr ""
+
+#. type: top
+#: comments.texi:9
+#, no-wrap
+msgid "GNU Sample"
+msgstr ""
+
+#. This is a comment for the translators
+#. This one also
+#. type: Plain text
+#: comments.texi:15
+msgid "This manual is for GNU Sample (version 1.0, UPDATED)."
+msgstr ""
diff --git a/t/fmt/texinfo/comments.texi b/t/fmt/texinfo/comments.texi
new file mode 100644
index 0000000..5d24172
--- /dev/null
+++ b/t/fmt/texinfo/comments.texi
@@ -0,0 +1,16 @@
+\input texinfo @c -*-texinfo-*-
+@comment $Id@w{$}
+@comment %**start of header
+@settitle GNU Sample 1.0
+@syncodeindex pg cp
+@comment %**end of header
+
+@node Top
+@top GNU Sample
+
+@c TRANSLATORS: This is a comment for the translators
+@comment TRANSLATORS: This one also
+@c Not this one, it should not be shown to the translators
+This manual is for GNU Sample (version 1.0, UPDATED).
+
+@bye
diff --git a/t/fmt/texinfo/comments.trans b/t/fmt/texinfo/comments.trans
new file mode 100644
index 0000000..9064046
--- /dev/null
+++ b/t/fmt/texinfo/comments.trans
@@ -0,0 +1,22 @@
+\input texinfo @c -*-texinfo-*-
+@c ===========================================================================
+@c
+@c This file was generated with po4a. Translate the source file.
+@c
+@c ===========================================================================
+
+@comment $Id@w{$}
+@comment %**start of header
+@settitle GNU SAMPLE 1.0
+@syncodeindex pg cp
+@comment %**end of header
+
+@node TOP
+@top GNU SAMPLE
+
+@c TRANSLATORS: This is a comment for the translators
+@comment TRANSLATORS: This one also
+@c Not this one, it should not be shown to the translators
+THIS MANUAL IS FOR GNU SAMPLE (VERSION 1.0, UPDATED).
+
+@bye
diff --git a/t/fmt/texinfo/longmenu.norm b/t/fmt/texinfo/longmenu.norm
new file mode 100644
index 0000000..7f5777f
--- /dev/null
+++ b/t/fmt/texinfo/longmenu.norm
@@ -0,0 +1,16 @@
+\input texinfo
+@c ===========================================================================
+@c
+@c This file was generated with po4a. Translate the source file.
+@c
+@c ===========================================================================
+
+
+@menu
+* Compiling For Multiple Architectures:: How to compile Bash for more than
+ one kind of system from the same
+ source tree.
+@end menu
+
+@node Compiling For Multiple Architectures
+@chapter Compiling For Multiple Architectures
diff --git a/t/fmt/texinfo/longmenu.po b/t/fmt/texinfo/longmenu.po
new file mode 100644
index 0000000..2eaf55e
--- /dev/null
+++ b/t/fmt/texinfo/longmenu.po
@@ -0,0 +1,32 @@
+# SOME DESCRIPTIVE TITLE
+# Copyright (C) YEAR Free Software Foundation, Inc.
+# This file is distributed under the same license as the PACKAGE package.
+# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
+#
+#, fuzzy
+msgid ""
+msgstr ""
+"Project-Id-Version: PACKAGE VERSION\n"
+"POT-Creation-Date: 2018-05-31 21:47+0200\n"
+"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
+"Language-Team: LANGUAGE <LL@LI.ORG>\n"
+"Language: \n"
+"MIME-Version: 1.0\n"
+"Content-Type: TEXT/PLAIN; CHARSET=UTF-8\n"
+"Content-Transfer-Encoding: 8BIT\n"
+
+#. type: chapter
+#: longmenu.texi:7 longmenu.texi:9 longmenu.texi:10
+#, no-wrap
+msgid "Compiling For Multiple Architectures"
+msgstr "COMPILING FOR MULTIPLE ARCHITECTURES"
+
+#. type: menuentry
+#: longmenu.texi:7
+msgid ""
+"How to compile Bash for more than one kind of system from the same source "
+"tree."
+msgstr ""
+"HOW TO COMPILE BASH FOR MORE THAN ONE KIND OF SYSTEM FROM THE SAME SOURCE "
+"TREE."
diff --git a/t/fmt/texinfo/longmenu.pot b/t/fmt/texinfo/longmenu.pot
new file mode 100644
index 0000000..4969481
--- /dev/null
+++ b/t/fmt/texinfo/longmenu.pot
@@ -0,0 +1,30 @@
+# SOME DESCRIPTIVE TITLE
+# Copyright (C) YEAR Free Software Foundation, Inc.
+# This file is distributed under the same license as the PACKAGE package.
+# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
+#
+#, fuzzy
+msgid ""
+msgstr ""
+"Project-Id-Version: PACKAGE VERSION\n"
+"POT-Creation-Date: 2018-05-31 21:47+0200\n"
+"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
+"Language-Team: LANGUAGE <LL@li.org>\n"
+"Language: \n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+
+#. type: chapter
+#: longmenu.texi:7 longmenu.texi:9 longmenu.texi:10
+#, no-wrap
+msgid "Compiling For Multiple Architectures"
+msgstr ""
+
+#. type: menuentry
+#: longmenu.texi:7
+msgid ""
+"How to compile Bash for more than one kind of system from the same source "
+"tree."
+msgstr ""
diff --git a/t/fmt/texinfo/longmenu.texi b/t/fmt/texinfo/longmenu.texi
new file mode 100644
index 0000000..400e631
--- /dev/null
+++ b/t/fmt/texinfo/longmenu.texi
@@ -0,0 +1,10 @@
+\input texinfo
+
+@menu
+* Compiling For Multiple Architectures:: How to compile Bash for more
+ than one kind of system from
+ the same source tree.
+@end menu
+
+@node Compiling For Multiple Architectures
+@chapter Compiling For Multiple Architectures
diff --git a/t/fmt/texinfo/longmenu.trans b/t/fmt/texinfo/longmenu.trans
new file mode 100644
index 0000000..6e03603
--- /dev/null
+++ b/t/fmt/texinfo/longmenu.trans
@@ -0,0 +1,16 @@
+\input texinfo
+@c ===========================================================================
+@c
+@c This file was generated with po4a. Translate the source file.
+@c
+@c ===========================================================================
+
+
+@menu
+* COMPILING FOR MULTIPLE ARCHITECTURES:: HOW TO COMPILE BASH FOR MORE THAN
+ ONE KIND OF SYSTEM FROM THE SAME
+ SOURCE TREE.
+@end menu
+
+@node COMPILING FOR MULTIPLE ARCHITECTURES
+@chapter COMPILING FOR MULTIPLE ARCHITECTURES
diff --git a/t/fmt/texinfo/partialmenus.norm b/t/fmt/texinfo/partialmenus.norm
new file mode 100644
index 0000000..9924068
--- /dev/null
+++ b/t/fmt/texinfo/partialmenus.norm
@@ -0,0 +1,21 @@
+\input texinfo
+@c ===========================================================================
+@c
+@c This file was generated with po4a. Translate the source file.
+@c
+@c ===========================================================================
+
+
+@c These menus do not contain a description, which used to cause a
+@c Texinfo menu entry to not be translated.
+@menu
+* A menu entry without any description:: A menu entry without any
+ description
+* Optional menu name: The menu node:: Optional menu name: The menu node
+@end menu
+
+@node A menu entry without any description
+@chapter A menu entry without any description
+
+@node The menu node
+@chapter Optional menu name
diff --git a/t/fmt/texinfo/partialmenus.po b/t/fmt/texinfo/partialmenus.po
new file mode 100644
index 0000000..31a1444
--- /dev/null
+++ b/t/fmt/texinfo/partialmenus.po
@@ -0,0 +1,40 @@
+# SOME DESCRIPTIVE TITLE
+# Copyright (C) YEAR Free Software Foundation, Inc.
+# This file is distributed under the same license as the PACKAGE package.
+# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
+#
+#, fuzzy
+msgid ""
+msgstr ""
+"Project-Id-Version: PACKAGE VERSION\n"
+"POT-Creation-Date: 2023-07-27 17:29-0400\n"
+"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
+"Language-Team: LANGUAGE <LL@li.org>\n"
+"Language: \n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+
+#. type: chapter
+#: partialmenus.texi:8 partialmenus.texi:10 partialmenus.texi:11
+#, no-wrap
+msgid "A menu entry without any description"
+msgstr "A MENU ENTRY WITHOUT ANY DESCRIPTION"
+
+#. type: menuentry
+#: partialmenus.texi:8
+msgid "Optional menu name: The menu node"
+msgstr "OPTIONAL MENU NAME: THE MENU NODE"
+
+#. type: node
+#: partialmenus.texi:13
+#, no-wrap
+msgid "The menu node"
+msgstr "THE MENU NODE"
+
+#. type: chapter
+#: partialmenus.texi:14
+#, no-wrap
+msgid "Optional menu name"
+msgstr "OPTIONAL MENU NAME"
diff --git a/t/fmt/texinfo/partialmenus.pot b/t/fmt/texinfo/partialmenus.pot
new file mode 100644
index 0000000..0379f80
--- /dev/null
+++ b/t/fmt/texinfo/partialmenus.pot
@@ -0,0 +1,40 @@
+# SOME DESCRIPTIVE TITLE
+# Copyright (C) YEAR Free Software Foundation, Inc.
+# This file is distributed under the same license as the PACKAGE package.
+# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
+#
+#, fuzzy
+msgid ""
+msgstr ""
+"Project-Id-Version: PACKAGE VERSION\n"
+"POT-Creation-Date: 2023-08-16 09:47-0400\n"
+"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
+"Language-Team: LANGUAGE <LL@li.org>\n"
+"Language: \n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+
+#. type: chapter
+#: partialmenus.texi:8 partialmenus.texi:10 partialmenus.texi:11
+#, no-wrap
+msgid "A menu entry without any description"
+msgstr ""
+
+#. type: menuentry
+#: partialmenus.texi:8
+msgid "Optional menu name: The menu node"
+msgstr ""
+
+#. type: node
+#: partialmenus.texi:13
+#, no-wrap
+msgid "The menu node"
+msgstr ""
+
+#. type: chapter
+#: partialmenus.texi:14
+#, no-wrap
+msgid "Optional menu name"
+msgstr ""
diff --git a/t/fmt/texinfo/partialmenus.texi b/t/fmt/texinfo/partialmenus.texi
new file mode 100644
index 0000000..f8663a2
--- /dev/null
+++ b/t/fmt/texinfo/partialmenus.texi
@@ -0,0 +1,14 @@
+\input texinfo
+
+@c These menus do not contain a description, which used to cause a
+@c Texinfo menu entry to not be translated.
+@menu
+* A menu entry without any description::
+* Optional menu name: The menu node::
+@end menu
+
+@node A menu entry without any description
+@chapter A menu entry without any description
+
+@node The menu node
+@chapter Optional menu name
diff --git a/t/fmt/texinfo/partialmenus.trans b/t/fmt/texinfo/partialmenus.trans
new file mode 100644
index 0000000..0ef742a
--- /dev/null
+++ b/t/fmt/texinfo/partialmenus.trans
@@ -0,0 +1,21 @@
+\input texinfo
+@c ===========================================================================
+@c
+@c This file was generated with po4a. Translate the source file.
+@c
+@c ===========================================================================
+
+
+@c These menus do not contain a description, which used to cause a
+@c Texinfo menu entry to not be translated.
+@menu
+* A MENU ENTRY WITHOUT ANY DESCRIPTION:: A MENU ENTRY WITHOUT ANY
+ DESCRIPTION
+* OPTIONAL MENU NAME: THE MENU NODE:: OPTIONAL MENU NAME: THE MENU NODE
+@end menu
+
+@node A MENU ENTRY WITHOUT ANY DESCRIPTION
+@chapter A MENU ENTRY WITHOUT ANY DESCRIPTION
+
+@node THE MENU NODE
+@chapter OPTIONAL MENU NAME
diff --git a/t/fmt/texinfo/tindex.norm b/t/fmt/texinfo/tindex.norm
new file mode 100644
index 0000000..acb1a60
--- /dev/null
+++ b/t/fmt/texinfo/tindex.norm
@@ -0,0 +1,13 @@
+\input texinfo
+@c ===========================================================================
+@c
+@c This file was generated with po4a. Translate the source file.
+@c
+@c ===========================================================================
+
+
+@cindex parameters in python
+@cindex python parameters
+@tindex gdb.Parameter
+@tindex Parameter
+You can implement new @value{GDBN} parameters using Python.
diff --git a/t/fmt/texinfo/tindex.po b/t/fmt/texinfo/tindex.po
new file mode 100644
index 0000000..72b7925
--- /dev/null
+++ b/t/fmt/texinfo/tindex.po
@@ -0,0 +1,46 @@
+# SOME DESCRIPTIVE TITLE
+# Copyright (C) YEAR Free Software Foundation, Inc.
+# This file is distributed under the same license as the PACKAGE package.
+# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
+#
+#, fuzzy
+msgid ""
+msgstr ""
+"Project-Id-Version: PACKAGE VERSION\n"
+"POT-Creation-Date: 2020-12-14 12:16+0900\n"
+"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
+"Language-Team: LANGUAGE <LL@li.org>\n"
+"Language: \n"
+"MIME-Version: 1.0\n"
+"Content-Type: TEXT/PLAIN; CHARSET=UTF-8\n"
+"Content-Transfer-Encoding: 8BIT\n"
+
+#. type: cindex
+#: tindex.texi:3
+#, no-wrap
+msgid "parameters in python"
+msgstr "PARAMETERS IN PYTHON"
+
+#. type: cindex
+#: tindex.texi:4
+#, no-wrap
+msgid "python parameters"
+msgstr "PYTHON PARAMETERS"
+
+#. type: tindex
+#: tindex.texi:5
+#, no-wrap
+msgid "gdb.Parameter"
+msgstr "GDB.PARAMETER"
+
+#. type: tindex
+#: tindex.texi:6
+#, no-wrap
+msgid "Parameter"
+msgstr "PARAMETER"
+
+#. type: Plain text
+#: tindex.texi:7
+msgid "You can implement new @value{GDBN} parameters using Python."
+msgstr "YOU CAN IMPLEMENT NEW @value{GDBN} PARAMETERS USING PYTHON."
diff --git a/t/fmt/texinfo/tindex.pot b/t/fmt/texinfo/tindex.pot
new file mode 100644
index 0000000..1d2c018
--- /dev/null
+++ b/t/fmt/texinfo/tindex.pot
@@ -0,0 +1,46 @@
+# SOME DESCRIPTIVE TITLE
+# Copyright (C) YEAR Free Software Foundation, Inc.
+# This file is distributed under the same license as the PACKAGE package.
+# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
+#
+#, fuzzy
+msgid ""
+msgstr ""
+"Project-Id-Version: PACKAGE VERSION\n"
+"POT-Creation-Date: 2020-12-14 12:16+0900\n"
+"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
+"Language-Team: LANGUAGE <LL@li.org>\n"
+"Language: \n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+
+#. type: cindex
+#: tindex.texi:3
+#, no-wrap
+msgid "parameters in python"
+msgstr ""
+
+#. type: cindex
+#: tindex.texi:4
+#, no-wrap
+msgid "python parameters"
+msgstr ""
+
+#. type: tindex
+#: tindex.texi:5
+#, no-wrap
+msgid "gdb.Parameter"
+msgstr ""
+
+#. type: tindex
+#: tindex.texi:6
+#, no-wrap
+msgid "Parameter"
+msgstr ""
+
+#. type: Plain text
+#: tindex.texi:7
+msgid "You can implement new @value{GDBN} parameters using Python."
+msgstr ""
diff --git a/t/fmt/texinfo/tindex.texi b/t/fmt/texinfo/tindex.texi
new file mode 100644
index 0000000..6c04b67
--- /dev/null
+++ b/t/fmt/texinfo/tindex.texi
@@ -0,0 +1,7 @@
+\input texinfo
+
+@cindex parameters in python
+@cindex python parameters
+@tindex gdb.Parameter
+@tindex Parameter
+You can implement new @value{GDBN} parameters using Python.
diff --git a/t/fmt/texinfo/tindex.trans b/t/fmt/texinfo/tindex.trans
new file mode 100644
index 0000000..304163f
--- /dev/null
+++ b/t/fmt/texinfo/tindex.trans
@@ -0,0 +1,13 @@
+\input texinfo
+@c ===========================================================================
+@c
+@c This file was generated with po4a. Translate the source file.
+@c
+@c ===========================================================================
+
+
+@cindex PARAMETERS IN PYTHON
+@cindex PYTHON PARAMETERS
+@tindex GDB.PARAMETER
+@tindex PARAMETER
+YOU CAN IMPLEMENT NEW @value{GDBN} PARAMETERS USING PYTHON.
diff --git a/t/fmt/txt-fortunes/MultipleLines.norm b/t/fmt/txt-fortunes/MultipleLines.norm
new file mode 100644
index 0000000..720b241
--- /dev/null
+++ b/t/fmt/txt-fortunes/MultipleLines.norm
@@ -0,0 +1,23 @@
+This is the first line,
+here comes the second line.
+%
+And here is yet another wisdom.
+%
+Now it gets tricky:
+
+There's an empty line between
+these two paragraphs.
+
+ -- Author
+%
+%A fortune might start with
+the % sign.
+%%
+Two % signs should be recognized as separator.
+%
+% And a % sign with a trailing space should be handled well.
+%
+And
+ * some
+ * bullets
+ * as well.
diff --git a/t/fmt/txt-fortunes/MultipleLines.po b/t/fmt/txt-fortunes/MultipleLines.po
new file mode 100644
index 0000000..8356a3b
--- /dev/null
+++ b/t/fmt/txt-fortunes/MultipleLines.po
@@ -0,0 +1,87 @@
+# SOME DESCRIPTIVE TITLE
+# Copyright (C) YEAR Free Software Foundation, Inc.
+# This file is distributed under the same license as the PACKAGE package.
+# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
+#
+#, fuzzy
+msgid ""
+msgstr ""
+"Project-Id-Version: PACKAGE VERSION\n"
+"POT-Creation-Date: 2018-06-04 17:30+0000\n"
+"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
+"Language-Team: LANGUAGE <LL@li.org>\n"
+"Language: \n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+
+#. type: Plain text
+#: MultipleLines.txt:3
+#, no-wrap
+msgid ""
+"This is the first line,\n"
+"here comes the second line."
+msgstr ""
+"THIS IS THE FIRST LINE,\n"
+"HERE COMES THE SECOND LINE."
+
+#. type: Plain text
+#: MultipleLines.txt:5
+#, no-wrap
+msgid "And here is yet another wisdom."
+msgstr "AND HERE IS YET ANOTHER WISDOM."
+
+#. type: Plain text
+#: MultipleLines.txt:12
+#, no-wrap
+msgid ""
+"Now it gets tricky:\n"
+"\n"
+"There's an empty line between\n"
+"these two paragraphs.\n"
+"\n"
+" -- Author"
+msgstr ""
+"NOW IT GETS TRICKY:\n"
+"\n"
+"THERE'S AN EMPTY LINE BETWEEN\n"
+"THESE TWO PARAGRAPHS.\n"
+"\n"
+" -- AUTHOR"
+
+#. type: Plain text
+#: MultipleLines.txt:15
+#, no-wrap
+msgid ""
+"%A fortune might start with\n"
+"the % sign."
+msgstr ""
+"%A FORTUNE MIGHT START WITH\n"
+"THE % SIGN."
+
+#. type: Plain text
+#: MultipleLines.txt:17
+#, no-wrap
+msgid "Two % signs should be recognized as separator."
+msgstr "TWO % SIGNS SHOULD BE RECOGNIZED AS SEPARATOR."
+
+#. type: Plain text
+#: MultipleLines.txt:19
+#, no-wrap
+msgid "% And a % sign with a trailing space should be handled well."
+msgstr "% AND A % SIGN WITH A TRAILING SPACE SHOULD BE HANDLED WELL."
+
+#. type: Plain text
+#: MultipleLines.txt:23
+#, no-wrap
+msgid ""
+"And\n"
+" * some\n"
+" * bullets\n"
+" * as well."
+msgstr ""
+"AND\n"
+" * SOME\n"
+" * BULLETS\n"
+" * AS WELL."
diff --git a/t/fmt/txt-fortunes/MultipleLines.pot b/t/fmt/txt-fortunes/MultipleLines.pot
new file mode 100644
index 0000000..393801b
--- /dev/null
+++ b/t/fmt/txt-fortunes/MultipleLines.pot
@@ -0,0 +1,73 @@
+# SOME DESCRIPTIVE TITLE
+# Copyright (C) YEAR Free Software Foundation, Inc.
+# This file is distributed under the same license as the PACKAGE package.
+# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
+#
+#, fuzzy
+msgid ""
+msgstr ""
+"Project-Id-Version: PACKAGE VERSION\n"
+"POT-Creation-Date: 2018-06-04 17:30+0000\n"
+"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
+"Language-Team: LANGUAGE <LL@li.org>\n"
+"Language: \n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+
+#. type: Plain text
+#: MultipleLines.txt:3
+#, no-wrap
+msgid ""
+"This is the first line,\n"
+"here comes the second line."
+msgstr ""
+
+#. type: Plain text
+#: MultipleLines.txt:5
+#, no-wrap
+msgid "And here is yet another wisdom."
+msgstr ""
+
+#. type: Plain text
+#: MultipleLines.txt:12
+#, no-wrap
+msgid ""
+"Now it gets tricky:\n"
+"\n"
+"There's an empty line between\n"
+"these two paragraphs.\n"
+"\n"
+" -- Author"
+msgstr ""
+
+#. type: Plain text
+#: MultipleLines.txt:15
+#, no-wrap
+msgid ""
+"%A fortune might start with\n"
+"the % sign."
+msgstr ""
+
+#. type: Plain text
+#: MultipleLines.txt:17
+#, no-wrap
+msgid "Two % signs should be recognized as separator."
+msgstr ""
+
+#. type: Plain text
+#: MultipleLines.txt:19
+#, no-wrap
+msgid "% And a % sign with a trailing space should be handled well."
+msgstr ""
+
+#. type: Plain text
+#: MultipleLines.txt:23
+#, no-wrap
+msgid ""
+"And\n"
+" * some\n"
+" * bullets\n"
+" * as well."
+msgstr ""
diff --git a/t/fmt/txt-fortunes/MultipleLines.trans b/t/fmt/txt-fortunes/MultipleLines.trans
new file mode 100644
index 0000000..27226f7
--- /dev/null
+++ b/t/fmt/txt-fortunes/MultipleLines.trans
@@ -0,0 +1,23 @@
+THIS IS THE FIRST LINE,
+HERE COMES THE SECOND LINE.
+%
+AND HERE IS YET ANOTHER WISDOM.
+%
+NOW IT GETS TRICKY:
+
+THERE'S AN EMPTY LINE BETWEEN
+THESE TWO PARAGRAPHS.
+
+ -- AUTHOR
+%
+%A FORTUNE MIGHT START WITH
+THE % SIGN.
+%%
+TWO % SIGNS SHOULD BE RECOGNIZED AS SEPARATOR.
+%
+% AND A % SIGN WITH A TRAILING SPACE SHOULD BE HANDLED WELL.
+%
+AND
+ * SOME
+ * BULLETS
+ * AS WELL.
diff --git a/t/fmt/txt-fortunes/MultipleLines.txt b/t/fmt/txt-fortunes/MultipleLines.txt
new file mode 100644
index 0000000..720b241
--- /dev/null
+++ b/t/fmt/txt-fortunes/MultipleLines.txt
@@ -0,0 +1,23 @@
+This is the first line,
+here comes the second line.
+%
+And here is yet another wisdom.
+%
+Now it gets tricky:
+
+There's an empty line between
+these two paragraphs.
+
+ -- Author
+%
+%A fortune might start with
+the % sign.
+%%
+Two % signs should be recognized as separator.
+%
+% And a % sign with a trailing space should be handled well.
+%
+And
+ * some
+ * bullets
+ * as well.
diff --git a/t/fmt/txt-fortunes/SeveralFortunes.norm b/t/fmt/txt-fortunes/SeveralFortunes.norm
new file mode 100644
index 0000000..03bdb04
--- /dev/null
+++ b/t/fmt/txt-fortunes/SeveralFortunes.norm
@@ -0,0 +1,5 @@
+This is the first line.
+%
+Here is another fortune.
+%
+And here is yet another wisdom.
diff --git a/t/fmt/txt-fortunes/SeveralFortunes.po b/t/fmt/txt-fortunes/SeveralFortunes.po
new file mode 100644
index 0000000..4fa32c2
--- /dev/null
+++ b/t/fmt/txt-fortunes/SeveralFortunes.po
@@ -0,0 +1,35 @@
+# SOME DESCRIPTIVE TITLE
+# Copyright (C) YEAR Free Software Foundation, Inc.
+# This file is distributed under the same license as the PACKAGE package.
+# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
+#
+#, fuzzy
+msgid ""
+msgstr ""
+"Project-Id-Version: PACKAGE VERSION\n"
+"POT-Creation-Date: 2018-06-04 17:30+0000\n"
+"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
+"Language-Team: LANGUAGE <LL@li.org>\n"
+"Language: \n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+
+#. type: Plain text
+#: SeveralFortunes.txt:2
+#, no-wrap
+msgid "This is the first line."
+msgstr "THIS IS THE FIRST LINE."
+
+#. type: Plain text
+#: SeveralFortunes.txt:4
+#, no-wrap
+msgid "Here is another fortune."
+msgstr "HERE IS ANOTHER FORTUNE."
+
+#. type: Plain text
+#: SeveralFortunes.txt:5
+#, no-wrap
+msgid "And here is yet another wisdom."
+msgstr "AND HERE IS YET ANOTHER WISDOM."
diff --git a/t/fmt/txt-fortunes/SeveralFortunes.pot b/t/fmt/txt-fortunes/SeveralFortunes.pot
new file mode 100644
index 0000000..d0b8023
--- /dev/null
+++ b/t/fmt/txt-fortunes/SeveralFortunes.pot
@@ -0,0 +1,35 @@
+# SOME DESCRIPTIVE TITLE
+# Copyright (C) YEAR Free Software Foundation, Inc.
+# This file is distributed under the same license as the PACKAGE package.
+# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
+#
+#, fuzzy
+msgid ""
+msgstr ""
+"Project-Id-Version: PACKAGE VERSION\n"
+"POT-Creation-Date: 2018-06-04 17:30+0000\n"
+"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
+"Language-Team: LANGUAGE <LL@li.org>\n"
+"Language: \n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+
+#. type: Plain text
+#: SeveralFortunes.txt:2
+#, no-wrap
+msgid "This is the first line."
+msgstr ""
+
+#. type: Plain text
+#: SeveralFortunes.txt:4
+#, no-wrap
+msgid "Here is another fortune."
+msgstr ""
+
+#. type: Plain text
+#: SeveralFortunes.txt:5
+#, no-wrap
+msgid "And here is yet another wisdom."
+msgstr ""
diff --git a/t/fmt/txt-fortunes/SeveralFortunes.trans b/t/fmt/txt-fortunes/SeveralFortunes.trans
new file mode 100644
index 0000000..acec55f
--- /dev/null
+++ b/t/fmt/txt-fortunes/SeveralFortunes.trans
@@ -0,0 +1,5 @@
+THIS IS THE FIRST LINE.
+%
+HERE IS ANOTHER FORTUNE.
+%
+AND HERE IS YET ANOTHER WISDOM.
diff --git a/t/fmt/txt-fortunes/SeveralFortunes.txt b/t/fmt/txt-fortunes/SeveralFortunes.txt
new file mode 100644
index 0000000..03bdb04
--- /dev/null
+++ b/t/fmt/txt-fortunes/SeveralFortunes.txt
@@ -0,0 +1,5 @@
+This is the first line.
+%
+Here is another fortune.
+%
+And here is yet another wisdom.
diff --git a/t/fmt/txt-fortunes/SingleFortune.norm b/t/fmt/txt-fortunes/SingleFortune.norm
new file mode 100644
index 0000000..35ec1de
--- /dev/null
+++ b/t/fmt/txt-fortunes/SingleFortune.norm
@@ -0,0 +1 @@
+This is only one line.
diff --git a/t/fmt/txt-fortunes/SingleFortune.po b/t/fmt/txt-fortunes/SingleFortune.po
new file mode 100644
index 0000000..03ce89f
--- /dev/null
+++ b/t/fmt/txt-fortunes/SingleFortune.po
@@ -0,0 +1,23 @@
+# SOME DESCRIPTIVE TITLE
+# Copyright (C) YEAR Free Software Foundation, Inc.
+# This file is distributed under the same license as the PACKAGE package.
+# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
+#
+#, fuzzy
+msgid ""
+msgstr ""
+"Project-Id-Version: PACKAGE VERSION\n"
+"POT-Creation-Date: 2018-06-04 17:30+0000\n"
+"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
+"Language-Team: LANGUAGE <LL@li.org>\n"
+"Language: \n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+
+#. type: Plain text
+#: SingleFortune.txt:1
+#, no-wrap
+msgid "This is only one line."
+msgstr "THIS IS ONLY ONE LINE."
diff --git a/t/fmt/txt-fortunes/SingleFortune.pot b/t/fmt/txt-fortunes/SingleFortune.pot
new file mode 100644
index 0000000..972a7ed
--- /dev/null
+++ b/t/fmt/txt-fortunes/SingleFortune.pot
@@ -0,0 +1,23 @@
+# SOME DESCRIPTIVE TITLE
+# Copyright (C) YEAR Free Software Foundation, Inc.
+# This file is distributed under the same license as the PACKAGE package.
+# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
+#
+#, fuzzy
+msgid ""
+msgstr ""
+"Project-Id-Version: PACKAGE VERSION\n"
+"POT-Creation-Date: 2018-06-04 17:30+0000\n"
+"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
+"Language-Team: LANGUAGE <LL@li.org>\n"
+"Language: \n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+
+#. type: Plain text
+#: SingleFortune.txt:1
+#, no-wrap
+msgid "This is only one line."
+msgstr ""
diff --git a/t/fmt/txt-fortunes/SingleFortune.trans b/t/fmt/txt-fortunes/SingleFortune.trans
new file mode 100644
index 0000000..989dfdc
--- /dev/null
+++ b/t/fmt/txt-fortunes/SingleFortune.trans
@@ -0,0 +1 @@
+THIS IS ONLY ONE LINE.
diff --git a/t/fmt/txt-fortunes/SingleFortune.txt b/t/fmt/txt-fortunes/SingleFortune.txt
new file mode 100644
index 0000000..35ec1de
--- /dev/null
+++ b/t/fmt/txt-fortunes/SingleFortune.txt
@@ -0,0 +1 @@
+This is only one line.
diff --git a/t/fmt/txt-markdown/Basic.md b/t/fmt/txt-markdown/Basic.md
new file mode 100644
index 0000000..de0425a
--- /dev/null
+++ b/t/fmt/txt-markdown/Basic.md
@@ -0,0 +1,24 @@
+% The document title
+% The document first author; The document second author
+
+A nice title
+============
+
+The first paragraph.
+
+The second paragraph.
+
+ * Some bullet point
+ * Another bullet point with a second line, which is so long that it should
+ get wrapped by the output of po4a
+ * A third bullet point
+
+# Another title with different markup
+
+## Subtitle
+
+And more text in a paragraph.
+
+This is a [link][] with long URL.
+
+[link]: https://example.com/sooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo/long
diff --git a/t/fmt/txt-markdown/Basic.norm b/t/fmt/txt-markdown/Basic.norm
new file mode 100644
index 0000000..5653495
--- /dev/null
+++ b/t/fmt/txt-markdown/Basic.norm
@@ -0,0 +1,25 @@
+% The document title
+% The document first author
+ The document second author
+
+A nice title
+============
+
+The first paragraph.
+
+The second paragraph.
+
+ * Some bullet point
+ * Another bullet point with a second line, which is so long that it should
+ get wrapped by the output of po4a
+ * A third bullet point
+
+# Another title with different markup
+
+## Subtitle
+
+And more text in a paragraph.
+
+This is a [link][] with long URL.
+
+[link]: https://example.com/sooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo/long
diff --git a/t/fmt/txt-markdown/Basic.po b/t/fmt/txt-markdown/Basic.po
new file mode 100644
index 0000000..43a6474
--- /dev/null
+++ b/t/fmt/txt-markdown/Basic.po
@@ -0,0 +1,97 @@
+# SOME DESCRIPTIVE TITLE
+# Copyright (C) YEAR Free Software Foundation, Inc.
+# This file is distributed under the same license as the PACKAGE package.
+# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
+#
+#, fuzzy
+msgid ""
+msgstr ""
+"Project-Id-Version: PACKAGE VERSION\n"
+"POT-Creation-Date: 2023-06-01 01:27+0900\n"
+"PO-Revision-Date: 2023-06-01 01:32+0900\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
+"Language-Team: LANGUAGE <LL@LI.ORG>\n"
+"Language: \n"
+"MIME-Version: 1.0\n"
+"Content-Type: TEXT/PLAIN; CHARSET=UTF-8\n"
+"Content-Transfer-Encoding: 8BIT\n"
+
+#. type: Pandoc title block
+#: Basic.md:1
+msgid "The document title"
+msgstr "THE DOCUMENT TITLE"
+
+#. type: Pandoc title block
+#: Basic.md:2
+#, no-wrap
+msgid "The document first author"
+msgstr "THE DOCUMENT FIRST AUTHOR"
+
+#. type: Pandoc title block
+#: Basic.md:2
+#, no-wrap
+msgid "The document second author"
+msgstr "THE DOCUMENT SECOND AUTHOR"
+
+#. type: Title =
+#: Basic.md:5
+#, no-wrap
+msgid "A nice title"
+msgstr "A NICE TITLE"
+
+#. type: Plain text
+#: Basic.md:8
+msgid "The first paragraph."
+msgstr "THE FIRST PARAGRAPH."
+
+#. type: Plain text
+#: Basic.md:10
+msgid "The second paragraph."
+msgstr "THE SECOND PARAGRAPH."
+
+#. type: Bullet: ' * '
+#: Basic.md:15
+msgid "Some bullet point"
+msgstr "SOME BULLET POINT"
+
+#. type: Bullet: ' * '
+#: Basic.md:15
+msgid ""
+"Another bullet point with a second line, which is so long that it should get "
+"wrapped by the output of po4a"
+msgstr ""
+"ANOTHER BULLET POINT WITH A SECOND LINE, WHICH IS SO LONG THAT IT SHOULD GET "
+"WRAPPED BY THE OUTPUT OF PO4A"
+
+#. type: Bullet: ' * '
+#: Basic.md:15
+msgid "A third bullet point"
+msgstr "A THIRD BULLET POINT"
+
+#. type: Title #
+#: Basic.md:16
+#, no-wrap
+msgid "Another title with different markup"
+msgstr "ANOTHER TITLE WITH DIFFERENT MARKUP"
+
+#. type: Title ##
+#: Basic.md:18
+#, no-wrap
+msgid "Subtitle"
+msgstr "SUBTITLE"
+
+#. type: Plain text
+#: Basic.md:21
+msgid "And more text in a paragraph."
+msgstr "AND MORE TEXT IN A PARAGRAPH."
+
+#. type: Plain text
+#: Basic.md:23
+msgid "This is a [link][] with long URL."
+msgstr "THIS IS A [LINK][] WITH LONG URL."
+
+#. type: Link reference
+#: Basic.md:24
+#, no-wrap
+msgid "[link]: https://example.com/sooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo/long"
+msgstr "[LINK]: https://example.com/sooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo/long"
diff --git a/t/fmt/txt-markdown/Basic.pot b/t/fmt/txt-markdown/Basic.pot
new file mode 100644
index 0000000..b5e809e
--- /dev/null
+++ b/t/fmt/txt-markdown/Basic.pot
@@ -0,0 +1,104 @@
+# SOME DESCRIPTIVE TITLE
+# Copyright (C) YEAR Free Software Foundation, Inc.
+# This file is distributed under the same license as the PACKAGE package.
+# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
+#
+#, fuzzy
+msgid ""
+msgstr ""
+"Project-Id-Version: PACKAGE VERSION\n"
+"POT-Creation-Date: 2023-06-01 01:43+0900\n"
+"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
+"Language-Team: LANGUAGE <LL@li.org>\n"
+"Language: \n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+
+#. type: Pandoc title block
+#: Basic.md:1
+msgid "The document title"
+msgstr ""
+
+#. type: Pandoc title block
+#: Basic.md:2
+#, no-wrap
+msgid "The document first author"
+msgstr ""
+
+#. type: Pandoc title block
+#: Basic.md:2
+#, no-wrap
+msgid "The document second author"
+msgstr ""
+
+#. type: Title =
+#: Basic.md:5
+#, markdown-text, no-wrap
+msgid "A nice title"
+msgstr ""
+
+#. type: Plain text
+#: Basic.md:8
+#, markdown-text
+msgid "The first paragraph."
+msgstr ""
+
+#. type: Plain text
+#: Basic.md:10
+#, markdown-text
+msgid "The second paragraph."
+msgstr ""
+
+#. type: Bullet: ' * '
+#: Basic.md:15
+#, markdown-text
+msgid "Some bullet point"
+msgstr ""
+
+#. type: Bullet: ' * '
+#: Basic.md:15
+#, markdown-text
+msgid ""
+"Another bullet point with a second line, which is so long that it should get "
+"wrapped by the output of po4a"
+msgstr ""
+
+#. type: Bullet: ' * '
+#: Basic.md:15
+#, markdown-text
+msgid "A third bullet point"
+msgstr ""
+
+#. type: Title #
+#: Basic.md:16
+#, markdown-text, no-wrap
+msgid "Another title with different markup"
+msgstr ""
+
+#. type: Title ##
+#: Basic.md:18
+#, markdown-text, no-wrap
+msgid "Subtitle"
+msgstr ""
+
+#. type: Plain text
+#: Basic.md:21
+#, markdown-text
+msgid "And more text in a paragraph."
+msgstr ""
+
+#. type: Plain text
+#: Basic.md:23
+#, markdown-text
+msgid "This is a [link][] with long URL."
+msgstr ""
+
+#. type: Link reference
+#: Basic.md:24
+#, no-wrap
+msgid ""
+"[link]: "
+"https://example.com/sooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo/long"
+msgstr ""
diff --git a/t/fmt/txt-markdown/Basic.trans b/t/fmt/txt-markdown/Basic.trans
new file mode 100644
index 0000000..4d5b4e9
--- /dev/null
+++ b/t/fmt/txt-markdown/Basic.trans
@@ -0,0 +1,25 @@
+% THE DOCUMENT TITLE
+% THE DOCUMENT FIRST AUTHOR
+ THE DOCUMENT SECOND AUTHOR
+
+A NICE TITLE
+============
+
+THE FIRST PARAGRAPH.
+
+THE SECOND PARAGRAPH.
+
+ * SOME BULLET POINT
+ * ANOTHER BULLET POINT WITH A SECOND LINE, WHICH IS SO LONG THAT IT SHOULD
+ GET WRAPPED BY THE OUTPUT OF PO4A
+ * A THIRD BULLET POINT
+
+# ANOTHER TITLE WITH DIFFERENT MARKUP
+
+## SUBTITLE
+
+AND MORE TEXT IN A PARAGRAPH.
+
+THIS IS A [LINK][] WITH LONG URL.
+
+[LINK]: https://example.com/sooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo/long
diff --git a/t/fmt/txt-markdown/NestedLists.md b/t/fmt/txt-markdown/NestedLists.md
new file mode 100644
index 0000000..a953efb
--- /dev/null
+++ b/t/fmt/txt-markdown/NestedLists.md
@@ -0,0 +1,28 @@
+This serves as testcase for simple lists.
+
+ * Item 1
+ * This item paragraph runs over
+ several lines.
+
+This serves as testcase for nested lists.
+
+ * Item 1
+ * This item paragraph runs over
+ several lines.
+ * Nested item 1
+ * Sub-sub item
+ * Nested item 2
+
+Leading spaces are optional, and hyphen or plus can be used as list markers.
+
+- This item paragraph runs over
+ several lines.
++ This item paragraph runs over
+ several lines.
+* This item paragraph runs over
+ several lines.
+ - Nested item 1
+ + Sub-sub item
+ + Nested item 2
+
+Normal paragraph.
diff --git a/t/fmt/txt-markdown/NestedLists.norm b/t/fmt/txt-markdown/NestedLists.norm
new file mode 100644
index 0000000..b41fd81
--- /dev/null
+++ b/t/fmt/txt-markdown/NestedLists.norm
@@ -0,0 +1,23 @@
+This serves as testcase for simple lists.
+
+ * Item 1
+ * This item paragraph runs over several lines.
+
+This serves as testcase for nested lists.
+
+ * Item 1
+ * This item paragraph runs over several lines.
+ * Nested item 1
+ * Sub-sub item
+ * Nested item 2
+
+Leading spaces are optional, and hyphen or plus can be used as list markers.
+
+- This item paragraph runs over several lines.
++ This item paragraph runs over several lines.
+* This item paragraph runs over several lines.
+ - Nested item 1
+ + Sub-sub item
+ + Nested item 2
+
+Normal paragraph.
diff --git a/t/fmt/txt-markdown/NestedLists.po b/t/fmt/txt-markdown/NestedLists.po
new file mode 100644
index 0000000..62ad91d
--- /dev/null
+++ b/t/fmt/txt-markdown/NestedLists.po
@@ -0,0 +1,64 @@
+# SOME DESCRIPTIVE TITLE
+# Copyright (C) YEAR Free Software Foundation, Inc.
+# This file is distributed under the same license as the PACKAGE package.
+# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
+#
+#, fuzzy
+msgid ""
+msgstr ""
+"Project-Id-Version: PACKAGE VERSION\n"
+"POT-Creation-Date: 2018-06-17 12:06+0200\n"
+"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
+"Language-Team: LANGUAGE <LL@LI.ORG>\n"
+"Language: \n"
+"MIME-Version: 1.0\n"
+"Content-Type: TEXT/PLAIN; CHARSET=UTF-8\n"
+"Content-Transfer-Encoding: 8BIT\n"
+
+#. type: Plain text
+#: NestedLists.md:2
+msgid "This serves as testcase for simple lists."
+msgstr "THIS SERVES AS TESTCASE FOR SIMPLE LISTS."
+
+#. type: Bullet: ' * '
+#: NestedLists.md:6 NestedLists.md:15
+msgid "Item 1"
+msgstr "ITEM 1"
+
+#. type: Bullet: '* '
+#: NestedLists.md:6 NestedLists.md:15 NestedLists.md:27
+msgid "This item paragraph runs over several lines."
+msgstr "THIS ITEM PARAGRAPH RUNS OVER SEVERAL LINES."
+
+#. type: Plain text
+#: NestedLists.md:8
+msgid "This serves as testcase for nested lists."
+msgstr "THIS SERVES AS TESTCASE FOR NESTED LISTS."
+
+#. type: Bullet: ' - '
+#: NestedLists.md:15 NestedLists.md:27
+msgid "Nested item 1"
+msgstr "NESTED ITEM 1"
+
+#. type: Bullet: ' + '
+#: NestedLists.md:15 NestedLists.md:27
+msgid "Sub-sub item"
+msgstr "SUB-SUB ITEM"
+
+#. type: Bullet: ' + '
+#: NestedLists.md:15 NestedLists.md:27
+msgid "Nested item 2"
+msgstr "NESTED ITEM 2"
+
+#. type: Plain text
+#: NestedLists.md:17
+msgid ""
+"Leading spaces are optional, and hyphen or plus can be used as list markers."
+msgstr ""
+"lEADING SPACES ARE OPTIONAL, AND HYPHEN OR PLUS CAN BE USED AS LIST MARKERS."
+
+#. type: Plain text
+#: NestedLists.md:28
+msgid "Normal paragraph."
+msgstr "NORMAL PARAGRAPH."
diff --git a/t/fmt/txt-markdown/NestedLists.pot b/t/fmt/txt-markdown/NestedLists.pot
new file mode 100644
index 0000000..664a81e
--- /dev/null
+++ b/t/fmt/txt-markdown/NestedLists.pot
@@ -0,0 +1,71 @@
+# SOME DESCRIPTIVE TITLE
+# Copyright (C) YEAR Free Software Foundation, Inc.
+# This file is distributed under the same license as the PACKAGE package.
+# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
+#
+#, fuzzy
+msgid ""
+msgstr ""
+"Project-Id-Version: PACKAGE VERSION\n"
+"POT-Creation-Date: 2018-06-17 12:06+0200\n"
+"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
+"Language-Team: LANGUAGE <LL@li.org>\n"
+"Language: \n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+
+#. type: Plain text
+#: NestedLists.md:2
+#, markdown-text
+msgid "This serves as testcase for simple lists."
+msgstr ""
+
+#. type: Bullet: ' * '
+#: NestedLists.md:6 NestedLists.md:15
+#, markdown-text
+msgid "Item 1"
+msgstr ""
+
+#. type: Bullet: '* '
+#: NestedLists.md:6 NestedLists.md:15 NestedLists.md:27
+#, markdown-text
+msgid "This item paragraph runs over several lines."
+msgstr ""
+
+#. type: Plain text
+#: NestedLists.md:8
+#, markdown-text
+msgid "This serves as testcase for nested lists."
+msgstr ""
+
+#. type: Bullet: ' - '
+#: NestedLists.md:15 NestedLists.md:27
+#, markdown-text
+msgid "Nested item 1"
+msgstr ""
+
+#. type: Bullet: ' + '
+#: NestedLists.md:15 NestedLists.md:27
+#, markdown-text
+msgid "Sub-sub item"
+msgstr ""
+
+#. type: Bullet: ' + '
+#: NestedLists.md:15 NestedLists.md:27
+#, markdown-text
+msgid "Nested item 2"
+msgstr ""
+
+#. type: Plain text
+#: NestedLists.md:17
+#, markdown-text
+msgid "Leading spaces are optional, and hyphen or plus can be used as list markers."
+msgstr ""
+
+#. type: Plain text
+#: NestedLists.md:28
+#, markdown-text
+msgid "Normal paragraph."
+msgstr ""
diff --git a/t/fmt/txt-markdown/NestedLists.trans b/t/fmt/txt-markdown/NestedLists.trans
new file mode 100644
index 0000000..30b91c8
--- /dev/null
+++ b/t/fmt/txt-markdown/NestedLists.trans
@@ -0,0 +1,23 @@
+THIS SERVES AS TESTCASE FOR SIMPLE LISTS.
+
+ * ITEM 1
+ * THIS ITEM PARAGRAPH RUNS OVER SEVERAL LINES.
+
+THIS SERVES AS TESTCASE FOR NESTED LISTS.
+
+ * ITEM 1
+ * THIS ITEM PARAGRAPH RUNS OVER SEVERAL LINES.
+ * NESTED ITEM 1
+ * SUB-SUB ITEM
+ * NESTED ITEM 2
+
+lEADING SPACES ARE OPTIONAL, AND HYPHEN OR PLUS CAN BE USED AS LIST MARKERS.
+
+- THIS ITEM PARAGRAPH RUNS OVER SEVERAL LINES.
++ THIS ITEM PARAGRAPH RUNS OVER SEVERAL LINES.
+* THIS ITEM PARAGRAPH RUNS OVER SEVERAL LINES.
+ - NESTED ITEM 1
+ + SUB-SUB ITEM
+ + NESTED ITEM 2
+
+NORMAL PARAGRAPH.
diff --git a/t/fmt/txt-markdown/NoWrap.md b/t/fmt/txt-markdown/NoWrap.md
new file mode 100644
index 0000000..5f0aef5
--- /dev/null
+++ b/t/fmt/txt-markdown/NoWrap.md
@@ -0,0 +1,39 @@
+
+# All About Descriptions, Graphics, and Screenshots
+
+Each app can have complete app store content, including localized descriptions, feature graphics, and screenshots (as of v0.103 of the F-Droid client app and v0.8 of _fdroidserver_).
+This is possible both when apps are added via [build metadata](../Build_Metadata_Reference) as well as when including pre-built files in a simple repository.
+There are three paths to including app store content for apps (in order of preference):
+
+* Do not remove this line (it will not be displayed)
+{:toc}
+
+
+```
+- <fdroiddata>/
+ └── metadata/
+ └── <package-id>/
+ └── <locale>/
+ ├── full_description.txt
+ ├── short_description.txt
+ ├── title.txt
+ ├── video.txt
+ ├── changelogs/
+ │ ├── <version-code>.txt
+ │ └── <version-code>.txt
+ └── images/
+ ├── featureGraphic.png
+ ├── icon.png
+ ├── promoGraphic.png
+ ├── tvBanner.png
+ ├── phoneScreenshots/
+ │ └── *.png
+ ├── sevenInchScreenshots/
+ │ └── *.png
+ ├── tenInchScreenshots/
+ │ └── *.png
+ ├── tvScreenshots/
+ │ └── *.png
+ └── wearScreenshots/
+ └── *.png
+```
diff --git a/t/fmt/txt-markdown/NoWrap.norm b/t/fmt/txt-markdown/NoWrap.norm
new file mode 100644
index 0000000..5f0aef5
--- /dev/null
+++ b/t/fmt/txt-markdown/NoWrap.norm
@@ -0,0 +1,39 @@
+
+# All About Descriptions, Graphics, and Screenshots
+
+Each app can have complete app store content, including localized descriptions, feature graphics, and screenshots (as of v0.103 of the F-Droid client app and v0.8 of _fdroidserver_).
+This is possible both when apps are added via [build metadata](../Build_Metadata_Reference) as well as when including pre-built files in a simple repository.
+There are three paths to including app store content for apps (in order of preference):
+
+* Do not remove this line (it will not be displayed)
+{:toc}
+
+
+```
+- <fdroiddata>/
+ └── metadata/
+ └── <package-id>/
+ └── <locale>/
+ ├── full_description.txt
+ ├── short_description.txt
+ ├── title.txt
+ ├── video.txt
+ ├── changelogs/
+ │ ├── <version-code>.txt
+ │ └── <version-code>.txt
+ └── images/
+ ├── featureGraphic.png
+ ├── icon.png
+ ├── promoGraphic.png
+ ├── tvBanner.png
+ ├── phoneScreenshots/
+ │ └── *.png
+ ├── sevenInchScreenshots/
+ │ └── *.png
+ ├── tenInchScreenshots/
+ │ └── *.png
+ ├── tvScreenshots/
+ │ └── *.png
+ └── wearScreenshots/
+ └── *.png
+```
diff --git a/t/fmt/txt-markdown/NoWrap.po b/t/fmt/txt-markdown/NoWrap.po
new file mode 100644
index 0000000..2f2d5ea
--- /dev/null
+++ b/t/fmt/txt-markdown/NoWrap.po
@@ -0,0 +1,103 @@
+# SOME DESCRIPTIVE TITLE
+# Copyright (C) YEAR Free Software Foundation, Inc.
+# This file is distributed under the same license as the PACKAGE package.
+# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
+#
+#, fuzzy
+msgid ""
+msgstr ""
+"Project-Id-Version: PACKAGE VERSION\n"
+"POT-Creation-Date: 2020-04-28 18:56+0200\n"
+"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
+"Language-Team: LANGUAGE <LL@LI.ORG>\n"
+"Language: \n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8BIT\n"
+
+#. type: Title #
+#: NoWrap.md:2
+#, no-wrap
+msgid "All About Descriptions, Graphics, and Screenshots"
+msgstr "ALL ABOUT DESCRIPTIONS, GRAPHICS, AND SCREENSHOTS"
+
+#. type: Plain text
+#: NoWrap.md:7
+#, no-wrap
+msgid ""
+"Each app can have complete app store content, including localized descriptions, feature graphics, and screenshots (as of v0.103 of the F-Droid client app and v0.8 of _fdroidserver_).\n"
+"This is possible both when apps are added via [build metadata](../Build_Metadata_Reference) as well as when including pre-built files in a simple repository.\n"
+"There are three paths to including app store content for apps (in order of preference):\n"
+msgstr ""
+"EACH APP CAN HAVE COMPLETE APP STORE CONTENT, INCLUDING LOCALIZED DESCRIPTIONS, FEATURE GRAPHICS, AND SCREENSHOTS (AS OF V0.103 OF THE F-DROID CLIENT APP AND V0.8 OF _FDROIDSERVER_).\n"
+"THIS IS POSSIBLE BOTH WHEN APPS ARE ADDED VIA [BUILD METADATA](../BUILD_METADATA_REFERENCE) AS WELL AS WHEN INCLUDING PRE-BUILT FILES IN A SIMPLE REPOSITORY.\n"
+"THERE ARE THREE PATHS TO INCLUDING APP STORE CONTENT FOR APPS (IN ORDER OF PREFERENCE):\n"
+
+#. type: Plain text
+#: NoWrap.md:10
+#, no-wrap
+msgid ""
+"* Do not remove this line (it will not be displayed)\n"
+"{:toc}\n"
+msgstr ""
+"* DO NOT REMOVE THIS LINE (IT WILL NOT BE DISPLAYED)\n"
+"{:TOC}\n"
+
+#. type: Fenced code block
+#: NoWrap.md:12
+#, no-wrap
+msgid ""
+"- <fdroiddata>/\n"
+" └── metadata/\n"
+" └── <package-id>/\n"
+" └── <locale>/\n"
+" ├── full_description.txt\n"
+" ├── short_description.txt\n"
+" ├── title.txt\n"
+" ├── video.txt\n"
+" ├── changelogs/\n"
+" │ ├── <version-code>.txt\n"
+" │ └── <version-code>.txt\n"
+" └── images/\n"
+" ├── featureGraphic.png\n"
+" ├── icon.png\n"
+" ├── promoGraphic.png\n"
+" ├── tvBanner.png\n"
+" ├── phoneScreenshots/\n"
+" │ └── *.png\n"
+" ├── sevenInchScreenshots/\n"
+" │ └── *.png\n"
+" ├── tenInchScreenshots/\n"
+" │ └── *.png\n"
+" ├── tvScreenshots/\n"
+" │ └── *.png\n"
+" └── wearScreenshots/\n"
+" └── *.png\n"
+msgstr ""
+"- <FDROIDDATA>/\n"
+" └── METADATA/\n"
+" └── <PACKAGE-ID>/\n"
+" └── <LOCALIZED>/\n"
+" ├── FULL_DESCRIPTION.TXT\n"
+" ├── SHORT_DESCRIPTION.TXT\n"
+" ├── TITLE.TXT\n"
+" ├── VIDEO.TXT\n"
+" ├── CHANGELOGS/\n"
+" │ ├── <VERSION-CODE>.TXT\n"
+" │ └── <VERSION-CODE>.TXT\n"
+" └── IMAGES/\n"
+" ├── FEATUREGRAPHIC.PNG\n"
+" ├── ICON.PNG\n"
+" ├── PROMOGRAPHIC.PNG\n"
+" ├── TVBANNER.PNG\n"
+" ├── PHONESCREENSHOTS/\n"
+" │ └── *.PNG\n"
+" ├── SEVENINCHSCREENSHOTS/\n"
+" │ └── *.PNG\n"
+" ├── TENINCHSCREENSHOTS/\n"
+" │ └── *.PNG\n"
+" ├── TVSCREENSHOTS/\n"
+" │ └── *.PNG\n"
+" └── WEARSCREENSHOTS/\n"
+" └── *.PNG\n"
diff --git a/t/fmt/txt-markdown/NoWrap.pot b/t/fmt/txt-markdown/NoWrap.pot
new file mode 100644
index 0000000..98e6a86
--- /dev/null
+++ b/t/fmt/txt-markdown/NoWrap.pot
@@ -0,0 +1,72 @@
+# SOME DESCRIPTIVE TITLE
+# Copyright (C) YEAR Free Software Foundation, Inc.
+# This file is distributed under the same license as the PACKAGE package.
+# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
+#
+#, fuzzy
+msgid ""
+msgstr ""
+"Project-Id-Version: PACKAGE VERSION\n"
+"POT-Creation-Date: 2020-04-28 18:56+0200\n"
+"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
+"Language-Team: LANGUAGE <LL@li.org>\n"
+"Language: \n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+
+#. type: Title #
+#: NoWrap.md:2
+#, markdown-text, no-wrap
+msgid "All About Descriptions, Graphics, and Screenshots"
+msgstr ""
+
+#. type: Plain text
+#: NoWrap.md:7
+#, markdown-text, no-wrap
+msgid ""
+"Each app can have complete app store content, including localized descriptions, feature graphics, and screenshots (as of v0.103 of the F-Droid client app and v0.8 of _fdroidserver_).\n"
+"This is possible both when apps are added via [build metadata](../Build_Metadata_Reference) as well as when including pre-built files in a simple repository.\n"
+"There are three paths to including app store content for apps (in order of preference):\n"
+msgstr ""
+
+#. type: Plain text
+#: NoWrap.md:10
+#, markdown-text, no-wrap
+msgid ""
+"* Do not remove this line (it will not be displayed)\n"
+"{:toc}\n"
+msgstr ""
+
+#. type: Fenced code block
+#: NoWrap.md:12
+#, no-wrap
+msgid ""
+"- <fdroiddata>/\n"
+" └── metadata/\n"
+" └── <package-id>/\n"
+" └── <locale>/\n"
+" ├── full_description.txt\n"
+" ├── short_description.txt\n"
+" ├── title.txt\n"
+" ├── video.txt\n"
+" ├── changelogs/\n"
+" │ ├── <version-code>.txt\n"
+" │ └── <version-code>.txt\n"
+" └── images/\n"
+" ├── featureGraphic.png\n"
+" ├── icon.png\n"
+" ├── promoGraphic.png\n"
+" ├── tvBanner.png\n"
+" ├── phoneScreenshots/\n"
+" │ └── *.png\n"
+" ├── sevenInchScreenshots/\n"
+" │ └── *.png\n"
+" ├── tenInchScreenshots/\n"
+" │ └── *.png\n"
+" ├── tvScreenshots/\n"
+" │ └── *.png\n"
+" └── wearScreenshots/\n"
+" └── *.png\n"
+msgstr ""
diff --git a/t/fmt/txt-markdown/NoWrap.trans b/t/fmt/txt-markdown/NoWrap.trans
new file mode 100644
index 0000000..e95190c
--- /dev/null
+++ b/t/fmt/txt-markdown/NoWrap.trans
@@ -0,0 +1,39 @@
+
+# ALL ABOUT DESCRIPTIONS, GRAPHICS, AND SCREENSHOTS
+
+EACH APP CAN HAVE COMPLETE APP STORE CONTENT, INCLUDING LOCALIZED DESCRIPTIONS, FEATURE GRAPHICS, AND SCREENSHOTS (AS OF V0.103 OF THE F-DROID CLIENT APP AND V0.8 OF _FDROIDSERVER_).
+THIS IS POSSIBLE BOTH WHEN APPS ARE ADDED VIA [BUILD METADATA](../BUILD_METADATA_REFERENCE) AS WELL AS WHEN INCLUDING PRE-BUILT FILES IN A SIMPLE REPOSITORY.
+THERE ARE THREE PATHS TO INCLUDING APP STORE CONTENT FOR APPS (IN ORDER OF PREFERENCE):
+
+* DO NOT REMOVE THIS LINE (IT WILL NOT BE DISPLAYED)
+{:TOC}
+
+
+```
+- <FDROIDDATA>/
+ └── METADATA/
+ └── <PACKAGE-ID>/
+ └── <LOCALIZED>/
+ ├── FULL_DESCRIPTION.TXT
+ ├── SHORT_DESCRIPTION.TXT
+ ├── TITLE.TXT
+ ├── VIDEO.TXT
+ ├── CHANGELOGS/
+ │ ├── <VERSION-CODE>.TXT
+ │ └── <VERSION-CODE>.TXT
+ └── IMAGES/
+ ├── FEATUREGRAPHIC.PNG
+ ├── ICON.PNG
+ ├── PROMOGRAPHIC.PNG
+ ├── TVBANNER.PNG
+ ├── PHONESCREENSHOTS/
+ │ └── *.PNG
+ ├── SEVENINCHSCREENSHOTS/
+ │ └── *.PNG
+ ├── TENINCHSCREENSHOTS/
+ │ └── *.PNG
+ ├── TVSCREENSHOTS/
+ │ └── *.PNG
+ └── WEARSCREENSHOTS/
+ └── *.PNG
+```
diff --git a/t/fmt/txt-markdown/PandocFencedCodeBlocks.md b/t/fmt/txt-markdown/PandocFencedCodeBlocks.md
new file mode 100644
index 0000000..8098a83
--- /dev/null
+++ b/t/fmt/txt-markdown/PandocFencedCodeBlocks.md
@@ -0,0 +1,68 @@
+~~~~~~~
+if (a > 3) {
+ moveShip(5 * gravity, DOWN);
+}
+~~~~~~~
+
+~~~~~~~~~~~~~~~~
+~~~~~~~~~~
+code including tildes
+line2
+~~~~~~~~~~
+~~~~~~~~~~~~~~~~
+
+~~~~ {#mycode .haskell .numberLines startFrom="100"}
+qsort [] = []
+qsort (x:xs) = qsort (filter (< x) xs) ++ [x] ++
+ qsort (filter (>= x) xs)
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+~~~haskell
+qsort [] = []
+qsort (x:xs) = qsort (filter (< x) xs) ++ [x] ++
+ qsort (filter (>= x) xs)
+~~~
+
+```````
+if (a > 3) {
+ moveShip(5 * gravity, DOWN);
+}
+```````
+
+````````````````
+``````````
+code including backticks
+line2
+``````````
+````````````````
+
+```` {#mycode .haskell .numberLines startFrom="100"}
+qsort [] = []
+qsort (x:xs) = qsort (filter (< x) xs) ++ [x] ++
+ qsort (filter (>= x) xs)
+`````````````````````````````````````````````````
+
+```haskell
+qsort [] = []
+qsort (x:xs) = qsort (filter (< x) xs) ++ [x] ++
+ qsort (filter (>= x) xs)
+```
+
+This first pandoc fenced_div is non-nested.
+
+::::: {#special .sidebar}
+Here is a paragraph.
+
+And another.
+:::::
+The second pandoc fenced div is nested.
+
+::: Warning ::::::
+This is a warning.
+
+::: Danger
+This is a warning within a warning.
+:::
+::::::::::::::::::
+
+Some extra text.
diff --git a/t/fmt/txt-markdown/PandocFencedCodeBlocks.norm b/t/fmt/txt-markdown/PandocFencedCodeBlocks.norm
new file mode 100644
index 0000000..8098a83
--- /dev/null
+++ b/t/fmt/txt-markdown/PandocFencedCodeBlocks.norm
@@ -0,0 +1,68 @@
+~~~~~~~
+if (a > 3) {
+ moveShip(5 * gravity, DOWN);
+}
+~~~~~~~
+
+~~~~~~~~~~~~~~~~
+~~~~~~~~~~
+code including tildes
+line2
+~~~~~~~~~~
+~~~~~~~~~~~~~~~~
+
+~~~~ {#mycode .haskell .numberLines startFrom="100"}
+qsort [] = []
+qsort (x:xs) = qsort (filter (< x) xs) ++ [x] ++
+ qsort (filter (>= x) xs)
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+~~~haskell
+qsort [] = []
+qsort (x:xs) = qsort (filter (< x) xs) ++ [x] ++
+ qsort (filter (>= x) xs)
+~~~
+
+```````
+if (a > 3) {
+ moveShip(5 * gravity, DOWN);
+}
+```````
+
+````````````````
+``````````
+code including backticks
+line2
+``````````
+````````````````
+
+```` {#mycode .haskell .numberLines startFrom="100"}
+qsort [] = []
+qsort (x:xs) = qsort (filter (< x) xs) ++ [x] ++
+ qsort (filter (>= x) xs)
+`````````````````````````````````````````````````
+
+```haskell
+qsort [] = []
+qsort (x:xs) = qsort (filter (< x) xs) ++ [x] ++
+ qsort (filter (>= x) xs)
+```
+
+This first pandoc fenced_div is non-nested.
+
+::::: {#special .sidebar}
+Here is a paragraph.
+
+And another.
+:::::
+The second pandoc fenced div is nested.
+
+::: Warning ::::::
+This is a warning.
+
+::: Danger
+This is a warning within a warning.
+:::
+::::::::::::::::::
+
+Some extra text.
diff --git a/t/fmt/txt-markdown/PandocFencedCodeBlocks.po b/t/fmt/txt-markdown/PandocFencedCodeBlocks.po
new file mode 100644
index 0000000..a16a350
--- /dev/null
+++ b/t/fmt/txt-markdown/PandocFencedCodeBlocks.po
@@ -0,0 +1,116 @@
+# SOME DESCRIPTIVE TITLE
+# Copyright (C) YEAR Free Software Foundation, Inc.
+# This file is distributed under the same license as the PACKAGE package.
+# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
+#
+#, fuzzy
+msgid ""
+msgstr ""
+"Project-Id-Version: PACKAGE VERSION\n"
+"POT-Creation-Date: 2020-04-28 18:23+0200\n"
+"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
+"Language-Team: LANGUAGE <LL@LI.ORG>\n"
+"Language: \n"
+"MIME-Version: 1.0\n"
+"Content-Type: TEXT/PLAIN; CHARSET=UTF-8\n"
+"Content-Transfer-Encoding: 8BIT\n"
+
+#. type: Fenced code block
+#: PandocFencedCodeBlocks.md:1 PandocFencedCodeBlocks.md:26
+#, no-wrap
+msgid ""
+"if (a > 3) {\n"
+" moveShip(5 * gravity, DOWN);\n"
+"}\n"
+msgstr ""
+"IF (A > 3) {\n"
+" MOVESHIP(5 * GRAVITY, DOWN);\n"
+"}\n"
+
+#. type: Fenced code block
+#: PandocFencedCodeBlocks.md:7
+#, no-wrap
+msgid ""
+"~~~~~~~~~~\n"
+"code including tildes\n"
+"line2\n"
+"~~~~~~~~~~\n"
+msgstr ""
+"~~~~~~~~~~\n"
+"CODE INCLUDING TILDES\n"
+"LINE2\n"
+"~~~~~~~~~~\n"
+
+#. type: Fenced code block (haskell)
+#: PandocFencedCodeBlocks.md:14 PandocFencedCodeBlocks.md:20
+#: PandocFencedCodeBlocks.md:39 PandocFencedCodeBlocks.md:45
+#, no-wrap
+msgid ""
+"qsort [] = []\n"
+"qsort (x:xs) = qsort (filter (< x) xs) ++ [x] ++\n"
+" qsort (filter (>= x) xs)\n"
+msgstr ""
+"QSORT [] = []\n"
+"QSORT (X:XS) = QSORT (FILTER (< X) XS) ++ [X] ++\n"
+" QSORT (FILTER (>= X) XS)\n"
+
+#. type: Fenced code block
+#: PandocFencedCodeBlocks.md:32
+#, no-wrap
+msgid ""
+"``````````\n"
+"code including backticks\n"
+"line2\n"
+"``````````\n"
+msgstr ""
+"``````````\n"
+"CODE INCLUDING BACKTICKS\n"
+"LINE2\n"
+"``````````\n"
+
+#. type: Plain text
+#: PandocFencedCodeBlocks.md:52
+#, markdown-text
+msgid "This first pandoc fenced_div is non-nested."
+msgstr "tHIS FIRST PANDOC FENCED DIV IS NON-NESTED."
+
+#. type: Fenced div block ({#special .sidebar})
+#: PandocFencedCodeBlocks.md:53
+#, no-wrap
+msgid ""
+"Here is a paragraph.\n"
+"\n"
+"And another.\n"
+msgstr ""
+"hERE IS A PARAGRAPH.\n"
+"\n"
+"aND ANOTHER.\n"
+
+#. type: Plain text
+#: PandocFencedCodeBlocks.md:59
+#, markdown-text
+msgid "The second pandoc fenced div is nested."
+msgstr "tHE SECOND PANDOC FENCED DIV IS NESTED."
+
+#. type: Fenced div block (Warning ::::::)
+#: PandocFencedCodeBlocks.md:60
+#, no-wrap
+msgid ""
+"This is a warning.\n"
+"\n"
+msgstr ""
+"tHIS IS A WARNING.\n"
+"\n"
+
+#. type: Fenced div block (Warning ::::::|Danger)
+#: PandocFencedCodeBlocks.md:60
+#, no-wrap
+msgid "This is a warning within a warning.\n"
+msgstr "tHIS IS A WARNING WITHIN A WARNING.\n"
+
+#. type: Plain text
+#: PandocFencedCodeBlocks.md:68
+#, markdown-text
+msgid "Some extra text."
+msgstr "sOME EXTRA TEXT."
diff --git a/t/fmt/txt-markdown/PandocFencedCodeBlocks.pot b/t/fmt/txt-markdown/PandocFencedCodeBlocks.pot
new file mode 100644
index 0000000..289814b
--- /dev/null
+++ b/t/fmt/txt-markdown/PandocFencedCodeBlocks.pot
@@ -0,0 +1,97 @@
+# SOME DESCRIPTIVE TITLE
+# Copyright (C) YEAR Free Software Foundation, Inc.
+# This file is distributed under the same license as the PACKAGE package.
+# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
+#
+#, fuzzy
+msgid ""
+msgstr ""
+"Project-Id-Version: PACKAGE VERSION\n"
+"POT-Creation-Date: 2020-04-28 18:23+0200\n"
+"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
+"Language-Team: LANGUAGE <LL@li.org>\n"
+"Language: \n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+
+#. type: Fenced code block
+#: PandocFencedCodeBlocks.md:1 PandocFencedCodeBlocks.md:26
+#, no-wrap
+msgid ""
+"if (a > 3) {\n"
+" moveShip(5 * gravity, DOWN);\n"
+"}\n"
+msgstr ""
+
+#. type: Fenced code block
+#: PandocFencedCodeBlocks.md:7
+#, no-wrap
+msgid ""
+"~~~~~~~~~~\n"
+"code including tildes\n"
+"line2\n"
+"~~~~~~~~~~\n"
+msgstr ""
+
+#. type: Fenced code block (haskell)
+#: PandocFencedCodeBlocks.md:14 PandocFencedCodeBlocks.md:20
+#: PandocFencedCodeBlocks.md:39 PandocFencedCodeBlocks.md:45
+#, no-wrap
+msgid ""
+"qsort [] = []\n"
+"qsort (x:xs) = qsort (filter (< x) xs) ++ [x] ++\n"
+" qsort (filter (>= x) xs)\n"
+msgstr ""
+
+#. type: Fenced code block
+#: PandocFencedCodeBlocks.md:32
+#, no-wrap
+msgid ""
+"``````````\n"
+"code including backticks\n"
+"line2\n"
+"``````````\n"
+msgstr ""
+
+#. type: Plain text
+#: PandocFencedCodeBlocks.md:52
+#, markdown-text
+msgid "This first pandoc fenced_div is non-nested."
+msgstr ""
+
+#. type: Fenced div block ({#special .sidebar})
+#: PandocFencedCodeBlocks.md:53
+#, no-wrap
+msgid ""
+"Here is a paragraph.\n"
+"\n"
+"And another.\n"
+msgstr ""
+
+#. type: Plain text
+#: PandocFencedCodeBlocks.md:59
+#, markdown-text
+msgid "The second pandoc fenced div is nested."
+msgstr ""
+
+#. type: Fenced div block (Warning ::::::)
+#: PandocFencedCodeBlocks.md:60
+#, no-wrap
+msgid ""
+"This is a warning.\n"
+"\n"
+msgstr ""
+
+#. type: Fenced div block (Warning ::::::|Danger)
+#: PandocFencedCodeBlocks.md:60
+#, no-wrap
+msgid "This is a warning within a warning.\n"
+msgstr ""
+
+#. type: Plain text
+#: PandocFencedCodeBlocks.md:68
+#, markdown-text
+msgid "Some extra text."
+msgstr ""
diff --git a/t/fmt/txt-markdown/PandocFencedCodeBlocks.trans b/t/fmt/txt-markdown/PandocFencedCodeBlocks.trans
new file mode 100644
index 0000000..9e8ce46
--- /dev/null
+++ b/t/fmt/txt-markdown/PandocFencedCodeBlocks.trans
@@ -0,0 +1,68 @@
+~~~~~~~
+IF (A > 3) {
+ MOVESHIP(5 * GRAVITY, DOWN);
+}
+~~~~~~~
+
+~~~~~~~~~~~~~~~~
+~~~~~~~~~~
+CODE INCLUDING TILDES
+LINE2
+~~~~~~~~~~
+~~~~~~~~~~~~~~~~
+
+~~~~ {#mycode .haskell .numberLines startFrom="100"}
+QSORT [] = []
+QSORT (X:XS) = QSORT (FILTER (< X) XS) ++ [X] ++
+ QSORT (FILTER (>= X) XS)
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+~~~haskell
+QSORT [] = []
+QSORT (X:XS) = QSORT (FILTER (< X) XS) ++ [X] ++
+ QSORT (FILTER (>= X) XS)
+~~~
+
+```````
+IF (A > 3) {
+ MOVESHIP(5 * GRAVITY, DOWN);
+}
+```````
+
+````````````````
+``````````
+CODE INCLUDING BACKTICKS
+LINE2
+``````````
+````````````````
+
+```` {#mycode .haskell .numberLines startFrom="100"}
+QSORT [] = []
+QSORT (X:XS) = QSORT (FILTER (< X) XS) ++ [X] ++
+ QSORT (FILTER (>= X) XS)
+`````````````````````````````````````````````````
+
+```haskell
+QSORT [] = []
+QSORT (X:XS) = QSORT (FILTER (< X) XS) ++ [X] ++
+ QSORT (FILTER (>= X) XS)
+```
+
+tHIS FIRST PANDOC FENCED DIV IS NON-NESTED.
+
+::::: {#special .sidebar}
+hERE IS A PARAGRAPH.
+
+aND ANOTHER.
+:::::
+tHE SECOND PANDOC FENCED DIV IS NESTED.
+
+::: Warning ::::::
+tHIS IS A WARNING.
+
+::: Danger
+tHIS IS A WARNING WITHIN A WARNING.
+:::
+::::::::::::::::::
+
+sOME EXTRA TEXT.
diff --git a/t/fmt/txt-markdown/PandocHeaderOnlyAuthor.md b/t/fmt/txt-markdown/PandocHeaderOnlyAuthor.md
new file mode 100644
index 0000000..535c4ae
--- /dev/null
+++ b/t/fmt/txt-markdown/PandocHeaderOnlyAuthor.md
@@ -0,0 +1,4 @@
+%
+% Only author, no title
+
+Other text.
diff --git a/t/fmt/txt-markdown/PandocHeaderOnlyAuthor.norm b/t/fmt/txt-markdown/PandocHeaderOnlyAuthor.norm
new file mode 100644
index 0000000..535c4ae
--- /dev/null
+++ b/t/fmt/txt-markdown/PandocHeaderOnlyAuthor.norm
@@ -0,0 +1,4 @@
+%
+% Only author, no title
+
+Other text.
diff --git a/t/fmt/txt-markdown/PandocHeaderOnlyAuthor.po b/t/fmt/txt-markdown/PandocHeaderOnlyAuthor.po
new file mode 100644
index 0000000..403fe3b
--- /dev/null
+++ b/t/fmt/txt-markdown/PandocHeaderOnlyAuthor.po
@@ -0,0 +1,28 @@
+# SOME DESCRIPTIVE TITLE
+# Copyright (C) YEAR Free Software Foundation, Inc.
+# This file is distributed under the same license as the PACKAGE package.
+# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
+#
+#, fuzzy
+msgid ""
+msgstr ""
+"Project-Id-Version: PACKAGE VERSION\n"
+"POT-Creation-Date: 2020-04-28 18:19+0200\n"
+"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
+"Language-Team: LANGUAGE <LL@LI.ORG>\n"
+"Language: \n"
+"MIME-Version: 1.0\n"
+"Content-Type: TEXT/PLAIN; CHARSET=UTF-8\n"
+"Content-Transfer-Encoding: 8BIT\n"
+
+#. type: Pandoc title block
+#: PandocHeaderOnlyAuthor.md:2
+#, no-wrap
+msgid "Only author, no title"
+msgstr "ONLY AUTHOR, NO TITLE"
+
+#. type: Plain text
+#: PandocHeaderOnlyAuthor.md:4
+msgid "Other text."
+msgstr "OTHER TEXT."
diff --git a/t/fmt/txt-markdown/PandocHeaderOnlyAuthor.pot b/t/fmt/txt-markdown/PandocHeaderOnlyAuthor.pot
new file mode 100644
index 0000000..03271a5
--- /dev/null
+++ b/t/fmt/txt-markdown/PandocHeaderOnlyAuthor.pot
@@ -0,0 +1,29 @@
+# SOME DESCRIPTIVE TITLE
+# Copyright (C) YEAR Free Software Foundation, Inc.
+# This file is distributed under the same license as the PACKAGE package.
+# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
+#
+#, fuzzy
+msgid ""
+msgstr ""
+"Project-Id-Version: PACKAGE VERSION\n"
+"POT-Creation-Date: 2020-04-28 18:16+0200\n"
+"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
+"Language-Team: LANGUAGE <LL@li.org>\n"
+"Language: \n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+
+#. type: Pandoc title block
+#: PandocHeaderOnlyAuthor.md:2
+#, no-wrap
+msgid "Only author, no title"
+msgstr ""
+
+#. type: Plain text
+#: PandocHeaderOnlyAuthor.md:4
+#, markdown-text
+msgid "Other text."
+msgstr ""
diff --git a/t/fmt/txt-markdown/PandocHeaderOnlyAuthor.trans b/t/fmt/txt-markdown/PandocHeaderOnlyAuthor.trans
new file mode 100644
index 0000000..1c570fe
--- /dev/null
+++ b/t/fmt/txt-markdown/PandocHeaderOnlyAuthor.trans
@@ -0,0 +1,4 @@
+%
+% ONLY AUTHOR, NO TITLE
+
+OTHER TEXT.
diff --git a/t/fmt/txt-markdown/PandocHeaderTitle.md b/t/fmt/txt-markdown/PandocHeaderTitle.md
new file mode 100644
index 0000000..b10659d
--- /dev/null
+++ b/t/fmt/txt-markdown/PandocHeaderTitle.md
@@ -0,0 +1,3 @@
+% Only title
+
+Other text.
diff --git a/t/fmt/txt-markdown/PandocHeaderTitle.norm b/t/fmt/txt-markdown/PandocHeaderTitle.norm
new file mode 100644
index 0000000..b10659d
--- /dev/null
+++ b/t/fmt/txt-markdown/PandocHeaderTitle.norm
@@ -0,0 +1,3 @@
+% Only title
+
+Other text.
diff --git a/t/fmt/txt-markdown/PandocHeaderTitle.po b/t/fmt/txt-markdown/PandocHeaderTitle.po
new file mode 100644
index 0000000..942a181
--- /dev/null
+++ b/t/fmt/txt-markdown/PandocHeaderTitle.po
@@ -0,0 +1,27 @@
+# SOME DESCRIPTIVE TITLE
+# Copyright (C) YEAR Free Software Foundation, Inc.
+# This file is distributed under the same license as the PACKAGE package.
+# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
+#
+#, fuzzy
+msgid ""
+msgstr ""
+"Project-Id-Version: PACKAGE VERSION\n"
+"POT-Creation-Date: 2020-04-28 18:15+0200\n"
+"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
+"Language-Team: LANGUAGE <LL@LI.ORG>\n"
+"Language: \n"
+"MIME-Version: 1.0\n"
+"Content-Type: TEXT/PLAIN; CHARSET=UTF-8\n"
+"Content-Transfer-Encoding: 8BIT\n"
+
+#. type: Pandoc title block
+#: PandocHeaderTitle.md:1
+msgid "Only title"
+msgstr "ONLY TITLE"
+
+#. type: Plain text
+#: PandocHeaderTitle.md:3
+msgid "Other text."
+msgstr "OTHER TEXT."
diff --git a/t/fmt/txt-markdown/PandocHeaderTitle.pot b/t/fmt/txt-markdown/PandocHeaderTitle.pot
new file mode 100644
index 0000000..7aee824
--- /dev/null
+++ b/t/fmt/txt-markdown/PandocHeaderTitle.pot
@@ -0,0 +1,28 @@
+# SOME DESCRIPTIVE TITLE
+# Copyright (C) YEAR Free Software Foundation, Inc.
+# This file is distributed under the same license as the PACKAGE package.
+# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
+#
+#, fuzzy
+msgid ""
+msgstr ""
+"Project-Id-Version: PACKAGE VERSION\n"
+"POT-Creation-Date: 2020-04-28 18:15+0200\n"
+"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
+"Language-Team: LANGUAGE <LL@li.org>\n"
+"Language: \n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+
+#. type: Pandoc title block
+#: PandocHeaderTitle.md:1
+msgid "Only title"
+msgstr ""
+
+#. type: Plain text
+#: PandocHeaderTitle.md:3
+#, markdown-text
+msgid "Other text."
+msgstr ""
diff --git a/t/fmt/txt-markdown/PandocHeaderTitle.trans b/t/fmt/txt-markdown/PandocHeaderTitle.trans
new file mode 100644
index 0000000..bf06b2c
--- /dev/null
+++ b/t/fmt/txt-markdown/PandocHeaderTitle.trans
@@ -0,0 +1,3 @@
+% ONLY TITLE
+
+OTHER TEXT.
diff --git a/t/fmt/txt-markdown/PandocHeaderTitleAuthors.md b/t/fmt/txt-markdown/PandocHeaderTitleAuthors.md
new file mode 100644
index 0000000..1301113
--- /dev/null
+++ b/t/fmt/txt-markdown/PandocHeaderTitleAuthors.md
@@ -0,0 +1,9 @@
+% Title
+ over
+ some
+ lines
+% Author 1;
+ Author 2
+% The Date
+
+Other text.
diff --git a/t/fmt/txt-markdown/PandocHeaderTitleAuthors.norm b/t/fmt/txt-markdown/PandocHeaderTitleAuthors.norm
new file mode 100644
index 0000000..0805a14
--- /dev/null
+++ b/t/fmt/txt-markdown/PandocHeaderTitleAuthors.norm
@@ -0,0 +1,6 @@
+% Title over some lines
+% Author 1
+ Author 2
+% The Date
+
+Other text.
diff --git a/t/fmt/txt-markdown/PandocHeaderTitleAuthors.po b/t/fmt/txt-markdown/PandocHeaderTitleAuthors.po
new file mode 100644
index 0000000..08c157c
--- /dev/null
+++ b/t/fmt/txt-markdown/PandocHeaderTitleAuthors.po
@@ -0,0 +1,45 @@
+# SOME DESCRIPTIVE TITLE
+# Copyright (C) YEAR Free Software Foundation, Inc.
+# This file is distributed under the same license as the PACKAGE package.
+# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
+#
+#, fuzzy
+msgid ""
+msgstr ""
+"Project-Id-Version: PACKAGE VERSION\n"
+"POT-Creation-Date: 2020-04-28 18:19+0200\n"
+"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
+"Language-Team: LANGUAGE <LL@LI.ORG>\n"
+"Language: \n"
+"MIME-Version: 1.0\n"
+"Content-Type: TEXT/PLAIN; CHARSET=UTF-8\n"
+"Content-Transfer-Encoding: 8BIT\n"
+
+#. type: Pandoc title block
+#: PandocHeaderTitleAuthors.md:1
+msgid "Title over some lines"
+msgstr "TITLE OVER SOME LINES"
+
+#. type: Pandoc title block
+#: PandocHeaderTitleAuthors.md:5
+#, no-wrap
+msgid "Author 1"
+msgstr "AUTHOR 1"
+
+#. type: Pandoc title block
+#: PandocHeaderTitleAuthors.md:5
+#, no-wrap
+msgid "Author 2"
+msgstr "AUTHOR 2"
+
+#. type: Pandoc title block
+#: PandocHeaderTitleAuthors.md:7
+#, no-wrap
+msgid "The Date"
+msgstr "THE DATE"
+
+#. type: Plain text
+#: PandocHeaderTitleAuthors.md:9
+msgid "Other text."
+msgstr "OTHER TEXT."
diff --git a/t/fmt/txt-markdown/PandocHeaderTitleAuthors.pot b/t/fmt/txt-markdown/PandocHeaderTitleAuthors.pot
new file mode 100644
index 0000000..08bd655
--- /dev/null
+++ b/t/fmt/txt-markdown/PandocHeaderTitleAuthors.pot
@@ -0,0 +1,46 @@
+# SOME DESCRIPTIVE TITLE
+# Copyright (C) YEAR Free Software Foundation, Inc.
+# This file is distributed under the same license as the PACKAGE package.
+# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
+#
+#, fuzzy
+msgid ""
+msgstr ""
+"Project-Id-Version: PACKAGE VERSION\n"
+"POT-Creation-Date: 2020-04-28 18:16+0200\n"
+"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
+"Language-Team: LANGUAGE <LL@li.org>\n"
+"Language: \n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+
+#. type: Pandoc title block
+#: PandocHeaderTitleAuthors.md:1
+msgid "Title over some lines"
+msgstr ""
+
+#. type: Pandoc title block
+#: PandocHeaderTitleAuthors.md:5
+#, no-wrap
+msgid "Author 1"
+msgstr ""
+
+#. type: Pandoc title block
+#: PandocHeaderTitleAuthors.md:5
+#, no-wrap
+msgid "Author 2"
+msgstr ""
+
+#. type: Pandoc title block
+#: PandocHeaderTitleAuthors.md:7
+#, no-wrap
+msgid "The Date"
+msgstr ""
+
+#. type: Plain text
+#: PandocHeaderTitleAuthors.md:9
+#, markdown-text
+msgid "Other text."
+msgstr ""
diff --git a/t/fmt/txt-markdown/PandocHeaderTitleAuthors.trans b/t/fmt/txt-markdown/PandocHeaderTitleAuthors.trans
new file mode 100644
index 0000000..345a47c
--- /dev/null
+++ b/t/fmt/txt-markdown/PandocHeaderTitleAuthors.trans
@@ -0,0 +1,6 @@
+% TITLE OVER SOME LINES
+% AUTHOR 1
+ AUTHOR 2
+% THE DATE
+
+OTHER TEXT.
diff --git a/t/fmt/txt-markdown/PandocHeaderTitleDate.md b/t/fmt/txt-markdown/PandocHeaderTitleDate.md
new file mode 100644
index 0000000..5ad2833
--- /dev/null
+++ b/t/fmt/txt-markdown/PandocHeaderTitleDate.md
@@ -0,0 +1,5 @@
+% Only title
+%
+% and date.
+
+Other text.
diff --git a/t/fmt/txt-markdown/PandocHeaderTitleDate.norm b/t/fmt/txt-markdown/PandocHeaderTitleDate.norm
new file mode 100644
index 0000000..5ad2833
--- /dev/null
+++ b/t/fmt/txt-markdown/PandocHeaderTitleDate.norm
@@ -0,0 +1,5 @@
+% Only title
+%
+% and date.
+
+Other text.
diff --git a/t/fmt/txt-markdown/PandocHeaderTitleDate.po b/t/fmt/txt-markdown/PandocHeaderTitleDate.po
new file mode 100644
index 0000000..eedd222
--- /dev/null
+++ b/t/fmt/txt-markdown/PandocHeaderTitleDate.po
@@ -0,0 +1,33 @@
+# SOME DESCRIPTIVE TITLE
+# Copyright (C) YEAR Free Software Foundation, Inc.
+# This file is distributed under the same license as the PACKAGE package.
+# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
+#
+#, fuzzy
+msgid ""
+msgstr ""
+"Project-Id-Version: PACKAGE VERSION\n"
+"POT-Creation-Date: 2020-04-28 18:19+0200\n"
+"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
+"Language-Team: LANGUAGE <LL@LI.ORG>\n"
+"Language: \n"
+"MIME-Version: 1.0\n"
+"Content-Type: TEXT/PLAIN; CHARSET=UTF-8\n"
+"Content-Transfer-Encoding: 8BIT\n"
+
+#. type: Pandoc title block
+#: PandocHeaderTitleDate.md:1
+msgid "Only title"
+msgstr "ONLY TITLE"
+
+#. type: Pandoc title block
+#: PandocHeaderTitleDate.md:3
+#, no-wrap
+msgid "and date."
+msgstr "AND DATE."
+
+#. type: Plain text
+#: PandocHeaderTitleDate.md:5
+msgid "Other text."
+msgstr "OTHER TEXT."
diff --git a/t/fmt/txt-markdown/PandocHeaderTitleDate.pot b/t/fmt/txt-markdown/PandocHeaderTitleDate.pot
new file mode 100644
index 0000000..c28d4b2
--- /dev/null
+++ b/t/fmt/txt-markdown/PandocHeaderTitleDate.pot
@@ -0,0 +1,34 @@
+# SOME DESCRIPTIVE TITLE
+# Copyright (C) YEAR Free Software Foundation, Inc.
+# This file is distributed under the same license as the PACKAGE package.
+# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
+#
+#, fuzzy
+msgid ""
+msgstr ""
+"Project-Id-Version: PACKAGE VERSION\n"
+"POT-Creation-Date: 2020-04-28 18:16+0200\n"
+"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
+"Language-Team: LANGUAGE <LL@li.org>\n"
+"Language: \n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+
+#. type: Pandoc title block
+#: PandocHeaderTitleDate.md:1
+msgid "Only title"
+msgstr ""
+
+#. type: Pandoc title block
+#: PandocHeaderTitleDate.md:3
+#, no-wrap
+msgid "and date."
+msgstr ""
+
+#. type: Plain text
+#: PandocHeaderTitleDate.md:5
+#, markdown-text
+msgid "Other text."
+msgstr ""
diff --git a/t/fmt/txt-markdown/PandocHeaderTitleDate.trans b/t/fmt/txt-markdown/PandocHeaderTitleDate.trans
new file mode 100644
index 0000000..9506c97
--- /dev/null
+++ b/t/fmt/txt-markdown/PandocHeaderTitleDate.trans
@@ -0,0 +1,5 @@
+% ONLY TITLE
+%
+% AND DATE.
+
+OTHER TEXT.
diff --git a/t/fmt/txt-markdown/PandocHeaderTitleMultilines.md b/t/fmt/txt-markdown/PandocHeaderTitleMultilines.md
new file mode 100644
index 0000000..1cc04b0
--- /dev/null
+++ b/t/fmt/txt-markdown/PandocHeaderTitleMultilines.md
@@ -0,0 +1,9 @@
+% The document title
+ which spans
+ multiple lines and is actually so long that it
+ will get wrapped by po4a in the output document in order to
+ test the wrapping of the output.
+% Author
+% June 14, 2018
+
+Other text.
diff --git a/t/fmt/txt-markdown/PandocHeaderTitleMultilines.norm b/t/fmt/txt-markdown/PandocHeaderTitleMultilines.norm
new file mode 100644
index 0000000..2661449
--- /dev/null
+++ b/t/fmt/txt-markdown/PandocHeaderTitleMultilines.norm
@@ -0,0 +1,7 @@
+% The document title which spans multiple lines and is actually so long that
+ it will get wrapped by po4a in the output document in order to test the
+ wrapping of the output.
+% Author
+% June 14, 2018
+
+Other text.
diff --git a/t/fmt/txt-markdown/PandocHeaderTitleMultilines.po b/t/fmt/txt-markdown/PandocHeaderTitleMultilines.po
new file mode 100644
index 0000000..4f5c871
--- /dev/null
+++ b/t/fmt/txt-markdown/PandocHeaderTitleMultilines.po
@@ -0,0 +1,45 @@
+# SOME DESCRIPTIVE TITLE
+# Copyright (C) YEAR Free Software Foundation, Inc.
+# This file is distributed under the same license as the PACKAGE package.
+# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
+#
+#, fuzzy
+msgid ""
+msgstr ""
+"Project-Id-Version: PACKAGE VERSION\n"
+"POT-Creation-Date: 2020-04-28 18:18+0200\n"
+"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
+"Language-Team: LANGUAGE <LL@LI.ORG>\n"
+"Language: \n"
+"MIME-Version: 1.0\n"
+"Content-Type: TEXT/PLAIN; CHARSET=UTF-8\n"
+"Content-Transfer-Encoding: 8BIT\n"
+
+#. type: Pandoc title block
+#: PandocHeaderTitleMultilines.md:1
+msgid ""
+"The document title which spans multiple lines and is actually so long that "
+"it will get wrapped by po4a in the output document in order to test the "
+"wrapping of the output."
+msgstr ""
+"THE DOCUMENT TITLE WHICH SPANS MULTIPLE LINES AND IS ACTUALLY SO LONG THAT "
+"IT WILL GET WRAPPED BY PO4A IN THE OUTPUT DOCUMENT IN ORDER TO TEST THE "
+"WRAPPING OF THE OUTPUT."
+
+#. type: Pandoc title block
+#: PandocHeaderTitleMultilines.md:6
+#, no-wrap
+msgid "Author"
+msgstr "AUTHOR"
+
+#. type: Pandoc title block
+#: PandocHeaderTitleMultilines.md:7
+#, no-wrap
+msgid "June 14, 2018"
+msgstr "JUNE 14, 2018"
+
+#. type: Plain text
+#: PandocHeaderTitleMultilines.md:9
+msgid "Other text."
+msgstr "OTHER TEXT."
diff --git a/t/fmt/txt-markdown/PandocHeaderTitleMultilines.pot b/t/fmt/txt-markdown/PandocHeaderTitleMultilines.pot
new file mode 100644
index 0000000..27453dd
--- /dev/null
+++ b/t/fmt/txt-markdown/PandocHeaderTitleMultilines.pot
@@ -0,0 +1,43 @@
+# SOME DESCRIPTIVE TITLE
+# Copyright (C) YEAR Free Software Foundation, Inc.
+# This file is distributed under the same license as the PACKAGE package.
+# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
+#
+#, fuzzy
+msgid ""
+msgstr ""
+"Project-Id-Version: PACKAGE VERSION\n"
+"POT-Creation-Date: 2020-04-28 18:15+0200\n"
+"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
+"Language-Team: LANGUAGE <LL@li.org>\n"
+"Language: \n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+
+#. type: Pandoc title block
+#: PandocHeaderTitleMultilines.md:1
+msgid ""
+"The document title which spans multiple lines and is actually so long that "
+"it will get wrapped by po4a in the output document in order to test the "
+"wrapping of the output."
+msgstr ""
+
+#. type: Pandoc title block
+#: PandocHeaderTitleMultilines.md:6
+#, no-wrap
+msgid "Author"
+msgstr ""
+
+#. type: Pandoc title block
+#: PandocHeaderTitleMultilines.md:7
+#, no-wrap
+msgid "June 14, 2018"
+msgstr ""
+
+#. type: Plain text
+#: PandocHeaderTitleMultilines.md:9
+#, markdown-text
+msgid "Other text."
+msgstr ""
diff --git a/t/fmt/txt-markdown/PandocHeaderTitleMultilines.trans b/t/fmt/txt-markdown/PandocHeaderTitleMultilines.trans
new file mode 100644
index 0000000..6baa01b
--- /dev/null
+++ b/t/fmt/txt-markdown/PandocHeaderTitleMultilines.trans
@@ -0,0 +1,7 @@
+% THE DOCUMENT TITLE WHICH SPANS MULTIPLE LINES AND IS ACTUALLY SO LONG THAT
+ IT WILL GET WRAPPED BY PO4A IN THE OUTPUT DOCUMENT IN ORDER TO TEST THE
+ WRAPPING OF THE OUTPUT.
+% AUTHOR
+% JUNE 14, 2018
+
+OTHER TEXT.
diff --git a/t/fmt/txt-markdown/PandocHeaderTitleMultipleAuthors.md b/t/fmt/txt-markdown/PandocHeaderTitleMultipleAuthors.md
new file mode 100644
index 0000000..e66eb3f
--- /dev/null
+++ b/t/fmt/txt-markdown/PandocHeaderTitleMultipleAuthors.md
@@ -0,0 +1,5 @@
+% Title
+% Author 1
+ Author 2
+
+Other text.
diff --git a/t/fmt/txt-markdown/PandocHeaderTitleMultipleAuthors.norm b/t/fmt/txt-markdown/PandocHeaderTitleMultipleAuthors.norm
new file mode 100644
index 0000000..e66eb3f
--- /dev/null
+++ b/t/fmt/txt-markdown/PandocHeaderTitleMultipleAuthors.norm
@@ -0,0 +1,5 @@
+% Title
+% Author 1
+ Author 2
+
+Other text.
diff --git a/t/fmt/txt-markdown/PandocHeaderTitleMultipleAuthors.po b/t/fmt/txt-markdown/PandocHeaderTitleMultipleAuthors.po
new file mode 100644
index 0000000..418c02f
--- /dev/null
+++ b/t/fmt/txt-markdown/PandocHeaderTitleMultipleAuthors.po
@@ -0,0 +1,39 @@
+# SOME DESCRIPTIVE TITLE
+# Copyright (C) YEAR Free Software Foundation, Inc.
+# This file is distributed under the same license as the PACKAGE package.
+# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
+#
+#, fuzzy
+msgid ""
+msgstr ""
+"Project-Id-Version: PACKAGE VERSION\n"
+"POT-Creation-Date: 2020-04-28 18:20+0200\n"
+"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
+"Language-Team: LANGUAGE <LL@LI.ORG>\n"
+"Language: \n"
+"MIME-Version: 1.0\n"
+"Content-Type: TEXT/PLAIN; CHARSET=UTF-8\n"
+"Content-Transfer-Encoding: 8BIT\n"
+
+#. type: Pandoc title block
+#: PandocHeaderTitleMultipleAuthors.md:1
+msgid "Title"
+msgstr "TITLE"
+
+#. type: Pandoc title block
+#: PandocHeaderTitleMultipleAuthors.md:2
+#, no-wrap
+msgid "Author 1"
+msgstr "AUTHOR 1"
+
+#. type: Pandoc title block
+#: PandocHeaderTitleMultipleAuthors.md:2
+#, no-wrap
+msgid "Author 2"
+msgstr "AUTHOR 2"
+
+#. type: Plain text
+#: PandocHeaderTitleMultipleAuthors.md:5
+msgid "Other text."
+msgstr "OTHER TEXT."
diff --git a/t/fmt/txt-markdown/PandocHeaderTitleMultipleAuthors.pot b/t/fmt/txt-markdown/PandocHeaderTitleMultipleAuthors.pot
new file mode 100644
index 0000000..970832d
--- /dev/null
+++ b/t/fmt/txt-markdown/PandocHeaderTitleMultipleAuthors.pot
@@ -0,0 +1,40 @@
+# SOME DESCRIPTIVE TITLE
+# Copyright (C) YEAR Free Software Foundation, Inc.
+# This file is distributed under the same license as the PACKAGE package.
+# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
+#
+#, fuzzy
+msgid ""
+msgstr ""
+"Project-Id-Version: PACKAGE VERSION\n"
+"POT-Creation-Date: 2020-04-28 18:19+0200\n"
+"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
+"Language-Team: LANGUAGE <LL@li.org>\n"
+"Language: \n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+
+#. type: Pandoc title block
+#: PandocHeaderTitleMultipleAuthors.md:1
+msgid "Title"
+msgstr ""
+
+#. type: Pandoc title block
+#: PandocHeaderTitleMultipleAuthors.md:2
+#, no-wrap
+msgid "Author 1"
+msgstr ""
+
+#. type: Pandoc title block
+#: PandocHeaderTitleMultipleAuthors.md:2
+#, no-wrap
+msgid "Author 2"
+msgstr ""
+
+#. type: Plain text
+#: PandocHeaderTitleMultipleAuthors.md:5
+#, markdown-text
+msgid "Other text."
+msgstr ""
diff --git a/t/fmt/txt-markdown/PandocHeaderTitleMultipleAuthors.trans b/t/fmt/txt-markdown/PandocHeaderTitleMultipleAuthors.trans
new file mode 100644
index 0000000..4d45d26
--- /dev/null
+++ b/t/fmt/txt-markdown/PandocHeaderTitleMultipleAuthors.trans
@@ -0,0 +1,5 @@
+% TITLE
+% AUTHOR 1
+ AUTHOR 2
+
+OTHER TEXT.
diff --git a/t/fmt/txt-markdown/Rules.md b/t/fmt/txt-markdown/Rules.md
new file mode 100644
index 0000000..818dbfd
--- /dev/null
+++ b/t/fmt/txt-markdown/Rules.md
@@ -0,0 +1,71 @@
+Here are three horisontal rules / thematic breaks:
+***
+---
+___
+This is a paragraph
++++
+which continues
+===
+and continues
+--
+**
+__
+until here
+
+Here are three more rules:
+ ***
+ ***
+ ***
+but this is code:
+
+ ***
+
+and this is a paragraph:
+
+Foo
+ ***
+
+here are 5 rules:
+_____________________________________
+ - - -
+ ** * ** * ** * **
+- - - -
+- - - -
+but these are not rules:
+
+_ _ _ _ a
+
+a------
+
+---a---
+
+ *-*
+
+Below is an interrupting rule:
+
+- foo
+***
+- bar
+
+Below is an interrupting rule:
+
+Foo
+***
+bar
+
+But this is a header:
+
+Foo
+---
+bar
+
+This is interrupted by rule:
+
+* Foo
+* * *
+* Bar
+
+This is a list:
+
+- Foo
+- * * *
diff --git a/t/fmt/txt-markdown/Rules.norm b/t/fmt/txt-markdown/Rules.norm
new file mode 100644
index 0000000..818dbfd
--- /dev/null
+++ b/t/fmt/txt-markdown/Rules.norm
@@ -0,0 +1,71 @@
+Here are three horisontal rules / thematic breaks:
+***
+---
+___
+This is a paragraph
++++
+which continues
+===
+and continues
+--
+**
+__
+until here
+
+Here are three more rules:
+ ***
+ ***
+ ***
+but this is code:
+
+ ***
+
+and this is a paragraph:
+
+Foo
+ ***
+
+here are 5 rules:
+_____________________________________
+ - - -
+ ** * ** * ** * **
+- - - -
+- - - -
+but these are not rules:
+
+_ _ _ _ a
+
+a------
+
+---a---
+
+ *-*
+
+Below is an interrupting rule:
+
+- foo
+***
+- bar
+
+Below is an interrupting rule:
+
+Foo
+***
+bar
+
+But this is a header:
+
+Foo
+---
+bar
+
+This is interrupted by rule:
+
+* Foo
+* * *
+* Bar
+
+This is a list:
+
+- Foo
+- * * *
diff --git a/t/fmt/txt-markdown/Rules.po b/t/fmt/txt-markdown/Rules.po
new file mode 100644
index 0000000..4afa0cd
--- /dev/null
+++ b/t/fmt/txt-markdown/Rules.po
@@ -0,0 +1,168 @@
+# SOME DESCRIPTIVE TITLE
+# Copyright (C) YEAR Free Software Foundation, Inc.
+# This file is distributed under the same license as the PACKAGE package.
+# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
+#
+#, fuzzy
+msgid ""
+msgstr ""
+"Project-Id-Version: PACKAGE VERSION\n"
+"POT-Creation-Date: 2020-04-28 18:25+0200\n"
+"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
+"Language-Team: LANGUAGE <LL@LI.ORG>\n"
+"Language: \n"
+"MIME-Version: 1.0\n"
+"Content-Type: TEXT/PLAIN; CHARSET=UTF-8\n"
+"Content-Transfer-Encoding: 8BIT\n"
+
+#. type: Plain text
+#: Rules.md:2
+msgid "Here are three horisontal rules / thematic breaks:"
+msgstr "HERE ARE THREE HORISONTAL RULES / THEMATIC BREAKS:"
+
+#. type: Plain text
+#: Rules.md:8
+#, no-wrap
+msgid ""
+"This is a paragraph\n"
+"+++\n"
+"which continues\n"
+"===\n"
+msgstr ""
+"THIS IS A PARAGRAPH\n"
+"+++\n"
+"WHICH CONTINUES\n"
+"===\n"
+
+#. type: Plain text
+#: Rules.md:10
+#, no-wrap
+msgid ""
+"and continues\n"
+"--\n"
+msgstr ""
+"AND CONTINUES\n"
+"--\n"
+
+#. type: Plain text
+#: Rules.md:12
+#, no-wrap
+msgid ""
+"**\n"
+"__\n"
+msgstr ""
+"**\n"
+"__\n"
+
+#. type: Plain text
+#: Rules.md:14
+msgid "until here"
+msgstr "UNTIL HERE"
+
+#. type: Plain text
+#: Rules.md:16
+msgid "Here are three more rules:"
+msgstr "HERE ARE THREE MORE RULES:"
+
+#. type: Plain text
+#: Rules.md:20
+msgid "but this is code:"
+msgstr "BUT THIS IS CODE:"
+
+#. type: Plain text
+#: Rules.md:22
+#, no-wrap
+msgid " ***\n"
+msgstr " ***\n"
+
+#. type: Plain text
+#: Rules.md:24
+msgid "and this is a paragraph:"
+msgstr "AND THIS IS A PARAGRAPH:"
+
+#. type: Plain text
+#: Rules.md:27
+#, no-wrap
+msgid ""
+"Foo\n"
+" ***\n"
+msgstr ""
+"FOO\n"
+" ***\n"
+
+#. type: Plain text
+#: Rules.md:29
+msgid "here are 5 rules:"
+msgstr "HERE ARE 5 RULES:"
+
+#. type: Plain text
+#: Rules.md:35
+msgid "but these are not rules:"
+msgstr "BUT THESE ARE NOT RULES:"
+
+#. type: Plain text
+#: Rules.md:37
+msgid "_ _ _ _ a"
+msgstr "_ _ _ _ A"
+
+#. type: Plain text
+#: Rules.md:39
+msgid "a------"
+msgstr "A------"
+
+#. type: Plain text
+#: Rules.md:41
+msgid "---a---"
+msgstr "---A---"
+
+#. type: Plain text
+#: Rules.md:43
+#, no-wrap
+msgid " *-*\n"
+msgstr " *-*\n"
+
+#. type: Plain text
+#: Rules.md:45 Rules.md:51
+msgid "Below is an interrupting rule:"
+msgstr "BELOW IS AN INTERRUPTING RULE:"
+
+#. type: Bullet: '- '
+#: Rules.md:47
+msgid "foo"
+msgstr "FOO"
+
+#. type: Plain text
+#: Rules.md:49 Rules.md:55 Rules.md:61
+msgid "bar"
+msgstr "BAR"
+
+#. type: Bullet: '- '
+#: Rules.md:53 Rules.md:59 Rules.md:65 Rules.md:71
+msgid "Foo"
+msgstr "FOO"
+
+#. type: Plain text
+#: Rules.md:57
+msgid "But this is a header:"
+msgstr "BUT THIS IS A HEADER:"
+
+#. type: Plain text
+#: Rules.md:63
+msgid "This is interrupted by rule:"
+msgstr "THIS IS INTERRUPTED BY RULE:"
+
+#. type: Bullet: '* '
+#: Rules.md:67
+msgid "Bar"
+msgstr "BAR"
+
+#. type: Plain text
+#: Rules.md:69
+msgid "This is a list:"
+msgstr "THIS IS A LIST:"
+
+#. type: Bullet: '- '
+#: Rules.md:71
+msgid "* * *"
+msgstr "* * *"
diff --git a/t/fmt/txt-markdown/Rules.pot b/t/fmt/txt-markdown/Rules.pot
new file mode 100644
index 0000000..b710667
--- /dev/null
+++ b/t/fmt/txt-markdown/Rules.pot
@@ -0,0 +1,177 @@
+# SOME DESCRIPTIVE TITLE
+# Copyright (C) YEAR Free Software Foundation, Inc.
+# This file is distributed under the same license as the PACKAGE package.
+# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
+#
+#, fuzzy
+msgid ""
+msgstr ""
+"Project-Id-Version: PACKAGE VERSION\n"
+"POT-Creation-Date: 2020-04-28 18:25+0200\n"
+"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
+"Language-Team: LANGUAGE <LL@li.org>\n"
+"Language: \n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+
+#. type: Plain text
+#: Rules.md:2
+#, markdown-text
+msgid "Here are three horisontal rules / thematic breaks:"
+msgstr ""
+
+#. type: Plain text
+#: Rules.md:8
+#, markdown-text, no-wrap
+msgid ""
+"This is a paragraph\n"
+"+++\n"
+"which continues\n"
+"===\n"
+msgstr ""
+
+#. type: Plain text
+#: Rules.md:10
+#, markdown-text, no-wrap
+msgid ""
+"and continues\n"
+"--\n"
+msgstr ""
+
+#. type: Plain text
+#: Rules.md:12
+#, markdown-text, no-wrap
+msgid ""
+"**\n"
+"__\n"
+msgstr ""
+
+#. type: Plain text
+#: Rules.md:14
+#, markdown-text
+msgid "until here"
+msgstr ""
+
+#. type: Plain text
+#: Rules.md:16
+#, markdown-text
+msgid "Here are three more rules:"
+msgstr ""
+
+#. type: Plain text
+#: Rules.md:20
+#, markdown-text
+msgid "but this is code:"
+msgstr ""
+
+#. type: Plain text
+#: Rules.md:22
+#, markdown-text, no-wrap
+msgid " ***\n"
+msgstr ""
+
+#. type: Plain text
+#: Rules.md:24
+#, markdown-text
+msgid "and this is a paragraph:"
+msgstr ""
+
+#. type: Plain text
+#: Rules.md:27
+#, markdown-text, no-wrap
+msgid ""
+"Foo\n"
+" ***\n"
+msgstr ""
+
+#. type: Plain text
+#: Rules.md:29
+#, markdown-text
+msgid "here are 5 rules:"
+msgstr ""
+
+#. type: Plain text
+#: Rules.md:35
+#, markdown-text
+msgid "but these are not rules:"
+msgstr ""
+
+#. type: Plain text
+#: Rules.md:37
+#, markdown-text
+msgid "_ _ _ _ a"
+msgstr ""
+
+#. type: Plain text
+#: Rules.md:39
+#, markdown-text
+msgid "a------"
+msgstr ""
+
+#. type: Plain text
+#: Rules.md:41
+#, markdown-text
+msgid "---a---"
+msgstr ""
+
+#. type: Plain text
+#: Rules.md:43
+#, markdown-text, no-wrap
+msgid " *-*\n"
+msgstr ""
+
+#. type: Plain text
+#: Rules.md:45 Rules.md:51
+#, markdown-text
+msgid "Below is an interrupting rule:"
+msgstr ""
+
+#. type: Bullet: '- '
+#: Rules.md:47
+#, markdown-text
+msgid "foo"
+msgstr ""
+
+#. type: Plain text
+#: Rules.md:49 Rules.md:55 Rules.md:61
+#, markdown-text
+msgid "bar"
+msgstr ""
+
+#. type: Bullet: '- '
+#: Rules.md:53 Rules.md:59 Rules.md:65 Rules.md:71
+#, markdown-text
+msgid "Foo"
+msgstr ""
+
+#. type: Plain text
+#: Rules.md:57
+#, markdown-text
+msgid "But this is a header:"
+msgstr ""
+
+#. type: Plain text
+#: Rules.md:63
+#, markdown-text
+msgid "This is interrupted by rule:"
+msgstr ""
+
+#. type: Bullet: '* '
+#: Rules.md:67
+#, markdown-text
+msgid "Bar"
+msgstr ""
+
+#. type: Plain text
+#: Rules.md:69
+#, markdown-text
+msgid "This is a list:"
+msgstr ""
+
+#. type: Bullet: '- '
+#: Rules.md:71
+#, markdown-text
+msgid "* * *"
+msgstr ""
diff --git a/t/fmt/txt-markdown/Rules.trans b/t/fmt/txt-markdown/Rules.trans
new file mode 100644
index 0000000..5b14202
--- /dev/null
+++ b/t/fmt/txt-markdown/Rules.trans
@@ -0,0 +1,71 @@
+HERE ARE THREE HORISONTAL RULES / THEMATIC BREAKS:
+***
+---
+___
+THIS IS A PARAGRAPH
++++
+WHICH CONTINUES
+===
+AND CONTINUES
+--
+**
+__
+UNTIL HERE
+
+HERE ARE THREE MORE RULES:
+ ***
+ ***
+ ***
+BUT THIS IS CODE:
+
+ ***
+
+AND THIS IS A PARAGRAPH:
+
+FOO
+ ***
+
+HERE ARE 5 RULES:
+_____________________________________
+ - - -
+ ** * ** * ** * **
+- - - -
+- - - -
+BUT THESE ARE NOT RULES:
+
+_ _ _ _ A
+
+A------
+
+---A---
+
+ *-*
+
+BELOW IS AN INTERRUPTING RULE:
+
+- FOO
+***
+- BAR
+
+BELOW IS AN INTERRUPTING RULE:
+
+FOO
+***
+BAR
+
+BUT THIS IS A HEADER:
+
+FOO
+---
+BAR
+
+THIS IS INTERRUPTED BY RULE:
+
+* FOO
+* * *
+* BAR
+
+THIS IS A LIST:
+
+- FOO
+- * * *
diff --git a/t/fmt/txt-markdown/Tables.md b/t/fmt/txt-markdown/Tables.md
new file mode 100644
index 0000000..b550432
--- /dev/null
+++ b/t/fmt/txt-markdown/Tables.md
@@ -0,0 +1,11 @@
+# This is a test about tables
+
+| Head 1 | Head 2 |
+| ------ | ------ |
+| Cell 1 | Cell 2 |
+
+This should probably not be a table.
+| even if | it looks |
+| ------- | -------- |
+| quite | similar |
+But I'm not sure either. \ No newline at end of file
diff --git a/t/fmt/txt-markdown/Tables.norm b/t/fmt/txt-markdown/Tables.norm
new file mode 100644
index 0000000..cd8c0a9
--- /dev/null
+++ b/t/fmt/txt-markdown/Tables.norm
@@ -0,0 +1,8 @@
+# This is a test about tables
+
+| Head 1 | Head 2 |
+| ------ | ------ |
+| Cell 1 | Cell 2 |
+
+This should probably not be a table. | even if | it looks | | ------- |
+-------- | | quite | similar | But I'm not sure either.
diff --git a/t/fmt/txt-markdown/Tables.po b/t/fmt/txt-markdown/Tables.po
new file mode 100644
index 0000000..4a04cf1
--- /dev/null
+++ b/t/fmt/txt-markdown/Tables.po
@@ -0,0 +1,45 @@
+# SOME DESCRIPTIVE TITLE
+# Copyright (C) YEAR Free Software Foundation, Inc.
+# This file is distributed under the same license as the PACKAGE package.
+# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
+#
+#, fuzzy
+msgid ""
+msgstr ""
+"Project-Id-Version: PACKAGE VERSION\n"
+"POT-Creation-Date: 2024-05-09 23:17+0200\n"
+"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
+"Language-Team: LANGUAGE <LL@li.org>\n"
+"Language: \n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+
+#. type: Title #
+#: Tables.md:1
+#, markdown-text, no-wrap
+msgid "This is a test about tables"
+msgstr "THIS IS A TEST ABOUT TABLES"
+
+#. type: Plain text
+#: Tables.md:6
+#, markdown-text, no-wrap
+msgid ""
+"| Head 1 | Head 2 |\n"
+"| ------ | ------ |\n"
+"| Cell 1 | Cell 2 |\n"
+msgstr ""
+"| HEAD 1 | HEAD 2 |\n"
+"| ------ | ------ |\n"
+"| CELL 1 | CELL 2 |\n"
+
+#. type: Plain text
+#: Tables.md:11
+#, markdown-text
+msgid ""
+"This should probably not be a table. | even if | it looks | | ------- | "
+"-------- | | quite | similar | But I'm not sure either."
+msgstr ""
+"THIS SHOULD PROBABLY NOT BE A TABLE. | EVEN IF | IT LOOKS | | ------- | "
+"-------- | | QUITE | SIMILAR | BUT I'M NOT SURE EITHER."
diff --git a/t/fmt/txt-markdown/Tables.pot b/t/fmt/txt-markdown/Tables.pot
new file mode 100644
index 0000000..87f614e
--- /dev/null
+++ b/t/fmt/txt-markdown/Tables.pot
@@ -0,0 +1,40 @@
+# SOME DESCRIPTIVE TITLE
+# Copyright (C) YEAR Free Software Foundation, Inc.
+# This file is distributed under the same license as the PACKAGE package.
+# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
+#
+#, fuzzy
+msgid ""
+msgstr ""
+"Project-Id-Version: PACKAGE VERSION\n"
+"POT-Creation-Date: 2024-05-09 23:17+0200\n"
+"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
+"Language-Team: LANGUAGE <LL@li.org>\n"
+"Language: \n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+
+#. type: Title #
+#: Tables.md:1
+#, markdown-text, no-wrap
+msgid "This is a test about tables"
+msgstr ""
+
+#. type: Plain text
+#: Tables.md:6
+#, markdown-text, no-wrap
+msgid ""
+"| Head 1 | Head 2 |\n"
+"| ------ | ------ |\n"
+"| Cell 1 | Cell 2 |\n"
+msgstr ""
+
+#. type: Plain text
+#: Tables.md:11
+#, markdown-text
+msgid ""
+"This should probably not be a table. | even if | it looks | | ------- | "
+"-------- | | quite | similar | But I'm not sure either."
+msgstr ""
diff --git a/t/fmt/txt-markdown/Tables.trans b/t/fmt/txt-markdown/Tables.trans
new file mode 100644
index 0000000..d40301f
--- /dev/null
+++ b/t/fmt/txt-markdown/Tables.trans
@@ -0,0 +1,8 @@
+# THIS IS A TEST ABOUT TABLES
+
+| HEAD 1 | HEAD 2 |
+| ------ | ------ |
+| CELL 1 | CELL 2 |
+
+THIS SHOULD PROBABLY NOT BE A TABLE. | EVEN IF | IT LOOKS | | ------- |
+-------- | | QUITE | SIMILAR | BUT I'M NOT SURE EITHER.
diff --git a/t/fmt/txt-markdown/Width.md b/t/fmt/txt-markdown/Width.md
new file mode 100644
index 0000000..c088ea6
--- /dev/null
+++ b/t/fmt/txt-markdown/Width.md
@@ -0,0 +1,45 @@
+% The document title with length over 40 symbols
+% The document first author; The document second author
+
+A nice long title which shouldn't be rewrapped
+==============================================
+
+This paragraph is 39 columns width.....
+
+This paragraph is 40 columns width......
+
+This paragraph is 41 columns width.......
+
+This paragraph is 39 columns
+width.....
+
+This paragraph is 40 columns
+width......
+
+This paragraph is 41 columns
+width.......
+
+
+# List items should be rewrapped two symbols shorter to accomodate the bullet marker
+
+* This list item is 37 columns width...
+* This list item is 38 columns width....
+* This list item is 39 columns width.....
+ * Nested items should be rewrapped even shorter.
+ * Like this: nested items should be
+ rewrapped even shorter.
+ * Or even as short as this one here....
+ * But not like this one..............
+
+* This list item is 37 columns width.
+
+This paragraph is 42 columns [width][link]
+
+ This is a very long verbatim paragraph that shouldn't be rewraped no matter how long it is.
+
+```
+This is a very long verbatim paragraph that shouldn't
+be rewraped no matter how long it is.
+```
+
+[link]: https://example.com/sooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo/long
diff --git a/t/fmt/txt-markdown/Width.norm b/t/fmt/txt-markdown/Width.norm
new file mode 100644
index 0000000..93d4923
--- /dev/null
+++ b/t/fmt/txt-markdown/Width.norm
@@ -0,0 +1,50 @@
+% The document title with length over 40
+ symbols
+% The document first author
+ The document second author
+
+A nice long title which shouldn't be rewrapped
+==============================================
+
+This paragraph is 39 columns width.....
+
+This paragraph is 40 columns width......
+
+This paragraph is 41 columns
+width.......
+
+This paragraph is 39 columns width.....
+
+This paragraph is 40 columns width......
+
+This paragraph is 41 columns
+width.......
+
+
+# List items should be rewrapped two symbols shorter to accomodate the bullet marker
+
+* This list item is 37 columns width...
+* This list item is 38 columns width....
+* This list item is 39 columns
+ width.....
+ * Nested items should be rewrapped
+ even shorter.
+ * Like this: nested items should be
+ rewrapped even shorter.
+ * Or even as short as this one
+ here....
+ * But not like this one..............
+
+* This list item is 37 columns width.
+
+This paragraph is 42 columns
+[width][link]
+
+ This is a very long verbatim paragraph that shouldn't be rewraped no matter how long it is.
+
+```
+This is a very long verbatim paragraph that shouldn't
+be rewraped no matter how long it is.
+```
+
+[link]: https://example.com/sooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo/long
diff --git a/t/fmt/txt-markdown/Width.po b/t/fmt/txt-markdown/Width.po
new file mode 100644
index 0000000..3555cd9
--- /dev/null
+++ b/t/fmt/txt-markdown/Width.po
@@ -0,0 +1,152 @@
+# SOME DESCRIPTIVE TITLE
+# Copyright (C) YEAR Free Software Foundation, Inc.
+# This file is distributed under the same license as the PACKAGE package.
+# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
+#
+#, fuzzy
+msgid ""
+msgstr ""
+"Project-Id-Version: PACKAGE VERSION\n"
+"POT-Creation-Date: 2024-03-24 22:33+0300\n"
+"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
+"Language-Team: LANGUAGE <LL@li.org>\n"
+"Language: \n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+
+#. type: Pandoc title block
+#: Width.md:1
+msgid "The document title with length over 40 symbols"
+msgstr "THE DOCUMENT TITLE WITH LENGTH OVER 40 SYMBOLS"
+
+#. type: Pandoc title block
+#: Width.md:2
+#, no-wrap
+msgid "The document first author"
+msgstr "THE DOCUMENT FIRST AUTHOR"
+
+#. type: Pandoc title block
+#: Width.md:2
+#, no-wrap
+msgid "The document second author"
+msgstr "THE DOCUMENT SECOND AUTHOR"
+
+#. type: Title =
+#: Width.md:5
+#, markdown-text, no-wrap
+msgid "A nice long title which shouldn't be rewrapped"
+msgstr "A NICE LONG TITLE WHICH SHOULDN'T BE REWRAPPED"
+
+#. type: Plain text
+#: Width.md:8 Width.md:15
+#, markdown-text
+msgid "This paragraph is 39 columns width....."
+msgstr "THIS PARAGRAPH IS 39 COLUMNS WIDTH....."
+
+#. type: Plain text
+#: Width.md:10 Width.md:18
+#, markdown-text
+msgid "This paragraph is 40 columns width......"
+msgstr "THIS PARAGRAPH IS 40 COLUMNS WIDTH......"
+
+#. type: Plain text
+#: Width.md:12 Width.md:21
+#, markdown-text
+msgid "This paragraph is 41 columns width......."
+msgstr "THIS PARAGRAPH IS 41 COLUMNS WIDTH......."
+
+#. type: Title #
+#: Width.md:23
+#, markdown-text, no-wrap
+msgid ""
+"List items should be rewrapped two symbols shorter to accomodate the bullet "
+"marker"
+msgstr ""
+"LIST ITEMS SHOULD BE REWRAPPED TWO SYMBOLS SHORTER TO ACCOMODATE THE BULLET "
+"MARKER"
+
+#. type: Bullet: '* '
+#: Width.md:33
+#, markdown-text
+msgid "This list item is 37 columns width..."
+msgstr "THIS LIST ITEM IS 37 COLUMNS WIDTH..."
+
+#. type: Bullet: '* '
+#: Width.md:33
+#, markdown-text
+msgid "This list item is 38 columns width...."
+msgstr "THIS LIST ITEM IS 38 COLUMNS WIDTH...."
+
+#. type: Bullet: '* '
+#: Width.md:33
+#, markdown-text
+msgid "This list item is 39 columns width....."
+msgstr "THIS LIST ITEM IS 39 COLUMNS WIDTH....."
+
+#. type: Bullet: ' * '
+#: Width.md:33
+#, markdown-text
+msgid "Nested items should be rewrapped even shorter."
+msgstr "NESTED ITEMS SHOULD BE REWRAPPED EVEN SHORTER."
+
+#. type: Bullet: ' * '
+#: Width.md:33
+#, markdown-text
+msgid "Like this: nested items should be rewrapped even shorter."
+msgstr "LIKE THIS: NESTED ITEMS SHOULD BE REWRAPPED EVEN SHORTER."
+
+#. type: Bullet: ' * '
+#: Width.md:33
+#, markdown-text
+msgid "Or even as short as this one here...."
+msgstr "OR EVEN AS SHORT AS THIS ONE HERE...."
+
+#. type: Bullet: ' * '
+#: Width.md:33
+#, markdown-text
+msgid "But not like this one.............."
+msgstr "BUT NOT LIKE THIS ONE.............."
+
+#. type: Bullet: '* '
+#: Width.md:35
+#, markdown-text
+msgid "This list item is 37 columns width."
+msgstr "THIS LIST ITEM IS 37 COLUMNS WIDTH."
+
+#. type: Plain text
+#: Width.md:37
+#, markdown-text
+msgid "This paragraph is 42 columns [width][link]"
+msgstr "THIS PARAGRAPH IS 42 COLUMNS [WIDTH][LINK]"
+
+#. type: Plain text
+#: Width.md:39
+#, markdown-text, no-wrap
+msgid ""
+" This is a very long verbatim paragraph that shouldn't be rewraped no "
+"matter how long it is.\n"
+msgstr ""
+" THIS IS A VERY LONG VERBATIM PARAGRAPH THAT SHOULDN'T BE REWRAPED NO "
+"MATTER HOW LONG IT IS.\n"
+
+#. type: Fenced code block
+#: Width.md:40
+#, no-wrap
+msgid ""
+"This is a very long verbatim paragraph that shouldn't\n"
+"be rewraped no matter how long it is.\n"
+msgstr ""
+"THIS IS A VERY LONG VERBATIM PARAGRAPH THAT SHOULDN'T\n"
+"BE REWRAPED NO MATTER HOW LONG IT IS.\n"
+
+#. type: Link reference
+#: Width.md:45
+#, no-wrap
+msgid ""
+"[link]: "
+"https://example.com/sooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo/long"
+msgstr ""
+"[LINK]: "
+"HTTPS://EXAMPLE.COM/SOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO/LONG"
diff --git a/t/fmt/txt-markdown/Width.pot b/t/fmt/txt-markdown/Width.pot
new file mode 100644
index 0000000..eff7691
--- /dev/null
+++ b/t/fmt/txt-markdown/Width.pot
@@ -0,0 +1,144 @@
+# SOME DESCRIPTIVE TITLE
+# Copyright (C) YEAR Free Software Foundation, Inc.
+# This file is distributed under the same license as the PACKAGE package.
+# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
+#
+#, fuzzy
+msgid ""
+msgstr ""
+"Project-Id-Version: PACKAGE VERSION\n"
+"POT-Creation-Date: 2024-03-24 22:33+0300\n"
+"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
+"Language-Team: LANGUAGE <LL@li.org>\n"
+"Language: \n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+
+#. type: Pandoc title block
+#: Width.md:1
+msgid "The document title with length over 40 symbols"
+msgstr ""
+
+#. type: Pandoc title block
+#: Width.md:2
+#, no-wrap
+msgid "The document first author"
+msgstr ""
+
+#. type: Pandoc title block
+#: Width.md:2
+#, no-wrap
+msgid "The document second author"
+msgstr ""
+
+#. type: Title =
+#: Width.md:5
+#, markdown-text, no-wrap
+msgid "A nice long title which shouldn't be rewrapped"
+msgstr ""
+
+#. type: Plain text
+#: Width.md:8 Width.md:15
+#, markdown-text
+msgid "This paragraph is 39 columns width....."
+msgstr ""
+
+#. type: Plain text
+#: Width.md:10 Width.md:18
+#, markdown-text
+msgid "This paragraph is 40 columns width......"
+msgstr ""
+
+#. type: Plain text
+#: Width.md:12 Width.md:21
+#, markdown-text
+msgid "This paragraph is 41 columns width......."
+msgstr ""
+
+#. type: Title #
+#: Width.md:23
+#, markdown-text, no-wrap
+msgid ""
+"List items should be rewrapped two symbols shorter to accomodate the bullet "
+"marker"
+msgstr ""
+
+#. type: Bullet: '* '
+#: Width.md:33
+#, markdown-text
+msgid "This list item is 37 columns width..."
+msgstr ""
+
+#. type: Bullet: '* '
+#: Width.md:33
+#, markdown-text
+msgid "This list item is 38 columns width...."
+msgstr ""
+
+#. type: Bullet: '* '
+#: Width.md:33
+#, markdown-text
+msgid "This list item is 39 columns width....."
+msgstr ""
+
+#. type: Bullet: ' * '
+#: Width.md:33
+#, markdown-text
+msgid "Nested items should be rewrapped even shorter."
+msgstr ""
+
+#. type: Bullet: ' * '
+#: Width.md:33
+#, markdown-text
+msgid "Like this: nested items should be rewrapped even shorter."
+msgstr ""
+
+#. type: Bullet: ' * '
+#: Width.md:33
+#, markdown-text
+msgid "Or even as short as this one here...."
+msgstr ""
+
+#. type: Bullet: ' * '
+#: Width.md:33
+#, markdown-text
+msgid "But not like this one.............."
+msgstr ""
+
+#. type: Bullet: '* '
+#: Width.md:35
+#, markdown-text
+msgid "This list item is 37 columns width."
+msgstr ""
+
+#. type: Plain text
+#: Width.md:37
+#, markdown-text
+msgid "This paragraph is 42 columns [width][link]"
+msgstr ""
+
+#. type: Plain text
+#: Width.md:39
+#, markdown-text, no-wrap
+msgid ""
+" This is a very long verbatim paragraph that shouldn't be rewraped no "
+"matter how long it is.\n"
+msgstr ""
+
+#. type: Fenced code block
+#: Width.md:40
+#, no-wrap
+msgid ""
+"This is a very long verbatim paragraph that shouldn't\n"
+"be rewraped no matter how long it is.\n"
+msgstr ""
+
+#. type: Link reference
+#: Width.md:45
+#, no-wrap
+msgid ""
+"[link]: "
+"https://example.com/sooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo/long"
+msgstr ""
diff --git a/t/fmt/txt-markdown/Width.trans b/t/fmt/txt-markdown/Width.trans
new file mode 100644
index 0000000..d3f6557
--- /dev/null
+++ b/t/fmt/txt-markdown/Width.trans
@@ -0,0 +1,50 @@
+% THE DOCUMENT TITLE WITH LENGTH OVER 40
+ SYMBOLS
+% THE DOCUMENT FIRST AUTHOR
+ THE DOCUMENT SECOND AUTHOR
+
+A NICE LONG TITLE WHICH SHOULDN'T BE REWRAPPED
+==============================================
+
+THIS PARAGRAPH IS 39 COLUMNS WIDTH.....
+
+THIS PARAGRAPH IS 40 COLUMNS WIDTH......
+
+THIS PARAGRAPH IS 41 COLUMNS
+WIDTH.......
+
+THIS PARAGRAPH IS 39 COLUMNS WIDTH.....
+
+THIS PARAGRAPH IS 40 COLUMNS WIDTH......
+
+THIS PARAGRAPH IS 41 COLUMNS
+WIDTH.......
+
+
+# LIST ITEMS SHOULD BE REWRAPPED TWO SYMBOLS SHORTER TO ACCOMODATE THE BULLET MARKER
+
+* THIS LIST ITEM IS 37 COLUMNS WIDTH...
+* THIS LIST ITEM IS 38 COLUMNS WIDTH....
+* THIS LIST ITEM IS 39 COLUMNS
+ WIDTH.....
+ * NESTED ITEMS SHOULD BE REWRAPPED
+ EVEN SHORTER.
+ * LIKE THIS: NESTED ITEMS SHOULD BE
+ REWRAPPED EVEN SHORTER.
+ * OR EVEN AS SHORT AS THIS ONE
+ HERE....
+ * BUT NOT LIKE THIS ONE..............
+
+* THIS LIST ITEM IS 37 COLUMNS WIDTH.
+
+THIS PARAGRAPH IS 42 COLUMNS
+[WIDTH][LINK]
+
+ THIS IS A VERY LONG VERBATIM PARAGRAPH THAT SHOULDN'T BE REWRAPED NO MATTER HOW LONG IT IS.
+
+```
+THIS IS A VERY LONG VERBATIM PARAGRAPH THAT SHOULDN'T
+BE REWRAPED NO MATTER HOW LONG IT IS.
+```
+
+[LINK]: HTTPS://EXAMPLE.COM/SOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO/LONG
diff --git a/t/fmt/txt-markdown/YamlFrontMatter.md b/t/fmt/txt-markdown/YamlFrontMatter.md
new file mode 100644
index 0000000..68038c2
--- /dev/null
+++ b/t/fmt/txt-markdown/YamlFrontMatter.md
@@ -0,0 +1,43 @@
+---
+title: "YAML: does it fit in Markdown?"
+author: test
+tags:
+- yaml
+- markdown
+wrappedtext: >
+ this is really a
+ single line of text
+ despite appearances
+include_newlines: |
+ exactly as you see
+ will appear these three
+ lines of poetry
+bool: false
+people:
+ -
+ name: John D'vloper
+ job: Developer
+ alive: true
+ hobbies:
+ - Amateur radio
+ - Pet adoption & fostering
+ - Puzzle
+ -
+ name: Tabitha Bitumen
+ job: Developer
+ hobbies:
+ - Ice skating
+ - Water polo
+ - Caving
+---
+
+# YAML: does it fit in Markdown?
+
+Lots of Static Site Generators like Jekyll, Hugo, Lektor and more use
+a standard format: Markdown with YAML Front Matter.
+
+Why
+---
+
+Because blog posts need metadata!
+
diff --git a/t/fmt/txt-markdown/YamlFrontMatter.norm b/t/fmt/txt-markdown/YamlFrontMatter.norm
new file mode 100644
index 0000000..30681f5
--- /dev/null
+++ b/t/fmt/txt-markdown/YamlFrontMatter.norm
@@ -0,0 +1,37 @@
+---
+author: test
+bool: false
+include_newlines: "exactly as you see\nwill appear these three\nlines of poetry\n"
+people:
+ -
+ alive: true
+ hobbies:
+ - 'Amateur radio'
+ - 'Pet adoption & fostering'
+ - Puzzle
+ job: Developer
+ name: "John D'vloper"
+ -
+ hobbies:
+ - 'Ice skating'
+ - 'Water polo'
+ - Caving
+ job: Developer
+ name: 'Tabitha Bitumen'
+tags:
+ - yaml
+ - markdown
+title: 'YAML: does it fit in Markdown?'
+wrappedtext: "this is really a single line of text despite appearances\n"
+---
+
+# YAML: does it fit in Markdown?
+
+Lots of Static Site Generators like Jekyll, Hugo, Lektor and more use a
+standard format: Markdown with YAML Front Matter.
+
+Why
+---
+
+Because blog posts need metadata!
+
diff --git a/t/fmt/txt-markdown/YamlFrontMatter.po b/t/fmt/txt-markdown/YamlFrontMatter.po
new file mode 100644
index 0000000..41928da
--- /dev/null
+++ b/t/fmt/txt-markdown/YamlFrontMatter.po
@@ -0,0 +1,132 @@
+# SOME DESCRIPTIVE TITLE
+# Copyright (C) YEAR Free Software Foundation, Inc.
+# This file is distributed under the same license as the PACKAGE package.
+# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
+#
+#, fuzzy
+msgid ""
+msgstr ""
+"Project-Id-Version: PACKAGE VERSION\n"
+"POT-Creation-Date: 2022-07-09 23:23+0200\n"
+"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
+"Language-Team: LANGUAGE <LL@LI.ORG>\n"
+"Language: \n"
+"MIME-Version: 1.0\n"
+"Content-Type: TEXT/PLAIN; CHARSET=UTF-8\n"
+"Content-Transfer-Encoding: 8BIT\n"
+
+#. type: Yaml Front Matter Hash Value: author
+#: YamlFrontMatter.md:1
+#, no-wrap
+msgid "test"
+msgstr "TEST"
+
+#. type: Yaml Front Matter Hash Value: include_newlines
+#: YamlFrontMatter.md:1
+#, no-wrap
+msgid ""
+"exactly as you see\n"
+"will appear these three\n"
+"lines of poetry\n"
+msgstr ""
+"EXACTLY AS YOU SEE\n"
+"WILL APPEAR THESE THREE\n"
+"LINES OF POETRY\n"
+
+#. type: Yaml Front Matter Array Element: people hobbies
+#: YamlFrontMatter.md:1
+#, no-wrap
+msgid "Amateur radio"
+msgstr "AMATEUR RADIO"
+
+#. type: Yaml Front Matter Array Element: people hobbies
+#: YamlFrontMatter.md:1
+#, no-wrap
+msgid "Pet adoption & fostering"
+msgstr "PET ADOPTION & FOSTERING"
+
+#. type: Yaml Front Matter Array Element: people hobbies
+#: YamlFrontMatter.md:1
+#, no-wrap
+msgid "Puzzle"
+msgstr "PUZZLE"
+
+#. type: Yaml Front Matter Hash Value: people job
+#: YamlFrontMatter.md:1
+#, no-wrap
+msgid "Developer"
+msgstr "DEVELOPER"
+
+#. type: Yaml Front Matter Hash Value: people name
+#: YamlFrontMatter.md:1
+#, no-wrap
+msgid "John D'vloper"
+msgstr "JOHN D'VLOPER"
+
+#. type: Yaml Front Matter Array Element: people hobbies
+#: YamlFrontMatter.md:1
+#, no-wrap
+msgid "Ice skating"
+msgstr "ICE SKATING"
+
+#. type: Yaml Front Matter Array Element: people hobbies
+#: YamlFrontMatter.md:1
+#, no-wrap
+msgid "Water polo"
+msgstr "WATER POLO"
+
+#. type: Yaml Front Matter Array Element: people hobbies
+#: YamlFrontMatter.md:1
+#, no-wrap
+msgid "Caving"
+msgstr "CAVING"
+
+#. type: Yaml Front Matter Hash Value: people name
+#: YamlFrontMatter.md:1
+#, no-wrap
+msgid "Tabitha Bitumen"
+msgstr "TABITHA BITUMEN"
+
+#. type: Yaml Front Matter Array Element: tags
+#: YamlFrontMatter.md:1
+#, no-wrap
+msgid "yaml"
+msgstr "YAML"
+
+#. type: Yaml Front Matter Array Element: tags
+#: YamlFrontMatter.md:1
+#, no-wrap
+msgid "markdown"
+msgstr "MARKDOWN"
+
+#. type: Title #
+#: YamlFrontMatter.md:1 YamlFrontMatter.md:34
+#, no-wrap
+msgid "YAML: does it fit in Markdown?"
+msgstr "YAML: DOES IT FIT IN MARKDOWN?"
+
+#. type: Yaml Front Matter Hash Value: wrappedtext
+#: YamlFrontMatter.md:1
+#, no-wrap
+msgid "this is really a single line of text despite appearances\n"
+msgstr "THIS IS REALLY A SINGLE LINE OF TEXT DESPITE APPEARANCES\n"
+
+#. type: Plain text
+#: YamlFrontMatter.md:38
+msgid ""
+"Lots of Static Site Generators like Jekyll, Hugo, Lektor and more use a "
+"standard format: Markdown with YAML Front Matter."
+msgstr ""
+"LOTS OF STATIC SITE GENERATORS LIKE JEKYLL, HUGO, LEKTOR AND MORE USE A "
+"STANDARD FORMAT: MARKDOWN WITH YAML FRONT MATTER."
+
+#. type: Plain text
+#: YamlFrontMatter.md:40
+msgid "Why"
+msgstr "WHY"
+
+#. type: Plain text
+#: YamlFrontMatter.md:43
+msgid "Because blog posts need metadata!"
+msgstr "BECAUSE BLOG POSTS NEED METADATA!"
diff --git a/t/fmt/txt-markdown/YamlFrontMatter.pot b/t/fmt/txt-markdown/YamlFrontMatter.pot
new file mode 100644
index 0000000..9c3632d
--- /dev/null
+++ b/t/fmt/txt-markdown/YamlFrontMatter.pot
@@ -0,0 +1,130 @@
+# SOME DESCRIPTIVE TITLE
+# Copyright (C) YEAR Free Software Foundation, Inc.
+# This file is distributed under the same license as the PACKAGE package.
+# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
+#
+#, fuzzy
+msgid ""
+msgstr ""
+"Project-Id-Version: PACKAGE VERSION\n"
+"POT-Creation-Date: 2022-07-09 23:33+0200\n"
+"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
+"Language-Team: LANGUAGE <LL@li.org>\n"
+"Language: \n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+
+#. type: Yaml Front Matter Hash Value: author
+#: YamlFrontMatter.md:1
+#, no-wrap
+msgid "test"
+msgstr ""
+
+#. type: Yaml Front Matter Hash Value: include_newlines
+#: YamlFrontMatter.md:1
+#, no-wrap
+msgid ""
+"exactly as you see\n"
+"will appear these three\n"
+"lines of poetry\n"
+msgstr ""
+
+#. type: Yaml Front Matter Array Element: people hobbies
+#: YamlFrontMatter.md:1
+#, no-wrap
+msgid "Amateur radio"
+msgstr ""
+
+#. type: Yaml Front Matter Array Element: people hobbies
+#: YamlFrontMatter.md:1
+#, no-wrap
+msgid "Pet adoption & fostering"
+msgstr ""
+
+#. type: Yaml Front Matter Array Element: people hobbies
+#: YamlFrontMatter.md:1
+#, no-wrap
+msgid "Puzzle"
+msgstr ""
+
+#. type: Yaml Front Matter Hash Value: people job
+#: YamlFrontMatter.md:1
+#, no-wrap
+msgid "Developer"
+msgstr ""
+
+#. type: Yaml Front Matter Hash Value: people name
+#: YamlFrontMatter.md:1
+#, no-wrap
+msgid "John D'vloper"
+msgstr ""
+
+#. type: Yaml Front Matter Array Element: people hobbies
+#: YamlFrontMatter.md:1
+#, no-wrap
+msgid "Ice skating"
+msgstr ""
+
+#. type: Yaml Front Matter Array Element: people hobbies
+#: YamlFrontMatter.md:1
+#, no-wrap
+msgid "Water polo"
+msgstr ""
+
+#. type: Yaml Front Matter Array Element: people hobbies
+#: YamlFrontMatter.md:1
+#, no-wrap
+msgid "Caving"
+msgstr ""
+
+#. type: Yaml Front Matter Hash Value: people name
+#: YamlFrontMatter.md:1
+#, no-wrap
+msgid "Tabitha Bitumen"
+msgstr ""
+
+#. type: Yaml Front Matter Array Element: tags
+#: YamlFrontMatter.md:1
+#, no-wrap
+msgid "yaml"
+msgstr ""
+
+#. type: Yaml Front Matter Array Element: tags
+#: YamlFrontMatter.md:1
+#, no-wrap
+msgid "markdown"
+msgstr ""
+
+#. type: Title #
+#: YamlFrontMatter.md:1 YamlFrontMatter.md:34
+#, markdown-text, no-wrap
+msgid "YAML: does it fit in Markdown?"
+msgstr ""
+
+#. type: Yaml Front Matter Hash Value: wrappedtext
+#: YamlFrontMatter.md:1
+#, no-wrap
+msgid "this is really a single line of text despite appearances\n"
+msgstr ""
+
+#. type: Plain text
+#: YamlFrontMatter.md:38
+#, markdown-text
+msgid ""
+"Lots of Static Site Generators like Jekyll, Hugo, Lektor and more use a "
+"standard format: Markdown with YAML Front Matter."
+msgstr ""
+
+#. type: Plain text
+#: YamlFrontMatter.md:40
+#, markdown-text
+msgid "Why"
+msgstr ""
+
+#. type: Plain text
+#: YamlFrontMatter.md:43
+#, markdown-text
+msgid "Because blog posts need metadata!"
+msgstr ""
diff --git a/t/fmt/txt-markdown/YamlFrontMatter.trans b/t/fmt/txt-markdown/YamlFrontMatter.trans
new file mode 100644
index 0000000..dee5252
--- /dev/null
+++ b/t/fmt/txt-markdown/YamlFrontMatter.trans
@@ -0,0 +1,37 @@
+---
+author: TEST
+bool: false
+include_newlines: "EXACTLY AS YOU SEE\nWILL APPEAR THESE THREE\nLINES OF POETRY\n"
+people:
+ -
+ alive: true
+ hobbies:
+ - 'AMATEUR RADIO'
+ - 'PET ADOPTION & FOSTERING'
+ - PUZZLE
+ job: DEVELOPER
+ name: "JOHN D'VLOPER"
+ -
+ hobbies:
+ - 'ICE SKATING'
+ - 'WATER POLO'
+ - CAVING
+ job: DEVELOPER
+ name: 'TABITHA BITUMEN'
+tags:
+ - YAML
+ - MARKDOWN
+title: 'YAML: DOES IT FIT IN MARKDOWN?'
+wrappedtext: "THIS IS REALLY A SINGLE LINE OF TEXT DESPITE APPEARANCES\n"
+---
+
+# YAML: DOES IT FIT IN MARKDOWN?
+
+LOTS OF STATIC SITE GENERATORS LIKE JEKYLL, HUGO, LEKTOR AND MORE USE A
+STANDARD FORMAT: MARKDOWN WITH YAML FRONT MATTER.
+
+WHY
+---
+
+BECAUSE BLOG POSTS NEED METADATA!
+
diff --git a/t/fmt/txt-markdown/YamlFrontMatter_KeysPaths.md b/t/fmt/txt-markdown/YamlFrontMatter_KeysPaths.md
new file mode 100644
index 0000000..8b21706
--- /dev/null
+++ b/t/fmt/txt-markdown/YamlFrontMatter_KeysPaths.md
@@ -0,0 +1,38 @@
+---
+title: "YAML: does it fit in Markdown?"
+subtitle: "I mean: why not?"
+author: test
+numeric_ignored_value: 22
+tags:
+- yaml
+- markdown
+emptytag:
+people:
+ -
+ name: John D'vloper
+ title: Developer
+ hobbies:
+ - Amateur radio
+ - Pet adoption & fostering
+ - Puzzle
+ -
+ name: Tabitha Bitumen
+ title: Developer
+ hobbies:
+ - Ice skating
+ - Water polo
+ - Caving
+paragraph: >
+ Some text to translate, please.
+---
+
+# YAML: does it fit in Markdown?
+
+Lots of Static Site Generators like Jekyll, Hugo, Lektor and more use
+a standard format: Markdown with YAML Front Matter.
+
+Why
+---
+
+Because blog posts need metadata!
+
diff --git a/t/fmt/txt-markdown/YamlFrontMatter_KeysPaths.norm b/t/fmt/txt-markdown/YamlFrontMatter_KeysPaths.norm
new file mode 100644
index 0000000..d58bfc2
--- /dev/null
+++ b/t/fmt/txt-markdown/YamlFrontMatter_KeysPaths.norm
@@ -0,0 +1,37 @@
+---
+author: test
+emptytag:
+numeric_ignored_value: 22
+paragraph: "Some text to translate, please.\n"
+people:
+ -
+ hobbies:
+ - 'Amateur radio'
+ - 'Pet adoption & fostering'
+ - Puzzle
+ name: "John D'vloper"
+ title: Developer
+ -
+ hobbies:
+ - 'Ice skating'
+ - 'Water polo'
+ - Caving
+ name: 'Tabitha Bitumen'
+ title: Developer
+subtitle: 'I mean: why not?'
+tags:
+ - yaml
+ - markdown
+title: 'YAML: does it fit in Markdown?'
+---
+
+# YAML: does it fit in Markdown?
+
+Lots of Static Site Generators like Jekyll, Hugo, Lektor and more use a
+standard format: Markdown with YAML Front Matter.
+
+Why
+---
+
+Because blog posts need metadata!
+
diff --git a/t/fmt/txt-markdown/YamlFrontMatter_KeysPaths.po b/t/fmt/txt-markdown/YamlFrontMatter_KeysPaths.po
new file mode 100644
index 0000000..f015725
--- /dev/null
+++ b/t/fmt/txt-markdown/YamlFrontMatter_KeysPaths.po
@@ -0,0 +1,60 @@
+# SOME DESCRIPTIVE TITLE
+# Copyright (C) YEAR Free Software Foundation, Inc.
+# This file is distributed under the same license as the PACKAGE package.
+# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
+#
+#, fuzzy
+msgid ""
+msgstr ""
+"Project-Id-Version: PACKAGE VERSION\n"
+"POT-Creation-Date: 2020-04-28 19:10+0200\n"
+"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
+"Language-Team: LANGUAGE <LL@LI.ORG>\n"
+"Language: \n"
+"MIME-Version: 1.0\n"
+"Content-Type: TEXT/PLAIN; CHARSET=UTF-8\n"
+"Content-Transfer-Encoding: 8BIT\n"
+
+#. type: Yaml Front Matter Hash Value: paragraph
+#: YamlFrontMatter_KeysPaths.md:1
+#, no-wrap
+msgid "Some text to translate, please.\n"
+msgstr "SOME TEXT TO TRANSLATE, PLEASE.\n"
+
+#. type: Yaml Front Matter Hash Value: people title
+#: YamlFrontMatter_KeysPaths.md:1
+#, no-wrap
+msgid "Developer"
+msgstr "DEVELOPER"
+
+#. type: Yaml Front Matter Hash Value: subtitle
+#: YamlFrontMatter_KeysPaths.md:1
+#, no-wrap
+msgid "I mean: why not?"
+msgstr "I MEAN: WHY NOT?"
+
+#. type: Title #
+#: YamlFrontMatter_KeysPaths.md:29
+#, no-wrap
+msgid "YAML: does it fit in Markdown?"
+msgstr "YAML: DOES IT FIT IN MARKDOWN?"
+
+#. type: Plain text
+#: YamlFrontMatter_KeysPaths.md:33
+msgid ""
+"Lots of Static Site Generators like Jekyll, Hugo, Lektor and more use a "
+"standard format: Markdown with YAML Front Matter."
+msgstr ""
+"LOTS OF STATIC SITE GENERATORS LIKE JEKYLL, HUGO, LEKTOR AND MORE USE A "
+"STANDARD FORMAT: MARKDOWN WITH YAML FRONT MATTER."
+
+#. type: Plain text
+#: YamlFrontMatter_KeysPaths.md:35
+msgid "Why"
+msgstr "WHY"
+
+#. type: Plain text
+#: YamlFrontMatter_KeysPaths.md:38
+msgid "Because blog posts need metadata!"
+msgstr "BECAUSE BLOG POSTS NEED METADATA!"
diff --git a/t/fmt/txt-markdown/YamlFrontMatter_KeysPaths.pot b/t/fmt/txt-markdown/YamlFrontMatter_KeysPaths.pot
new file mode 100644
index 0000000..8f56bfa
--- /dev/null
+++ b/t/fmt/txt-markdown/YamlFrontMatter_KeysPaths.pot
@@ -0,0 +1,61 @@
+# SOME DESCRIPTIVE TITLE
+# Copyright (C) YEAR Free Software Foundation, Inc.
+# This file is distributed under the same license as the PACKAGE package.
+# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
+#
+#, fuzzy
+msgid ""
+msgstr ""
+"Project-Id-Version: PACKAGE VERSION\n"
+"POT-Creation-Date: 2020-04-28 19:10+0200\n"
+"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
+"Language-Team: LANGUAGE <LL@li.org>\n"
+"Language: \n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+
+#. type: Yaml Front Matter Hash Value: paragraph
+#: YamlFrontMatter_KeysPaths.md:1
+#, no-wrap
+msgid "Some text to translate, please.\n"
+msgstr ""
+
+#. type: Yaml Front Matter Hash Value: people title
+#: YamlFrontMatter_KeysPaths.md:1
+#, no-wrap
+msgid "Developer"
+msgstr ""
+
+#. type: Yaml Front Matter Hash Value: subtitle
+#: YamlFrontMatter_KeysPaths.md:1
+#, no-wrap
+msgid "I mean: why not?"
+msgstr ""
+
+#. type: Title #
+#: YamlFrontMatter_KeysPaths.md:29
+#, markdown-text, no-wrap
+msgid "YAML: does it fit in Markdown?"
+msgstr ""
+
+#. type: Plain text
+#: YamlFrontMatter_KeysPaths.md:33
+#, markdown-text
+msgid ""
+"Lots of Static Site Generators like Jekyll, Hugo, Lektor and more use a "
+"standard format: Markdown with YAML Front Matter."
+msgstr ""
+
+#. type: Plain text
+#: YamlFrontMatter_KeysPaths.md:35
+#, markdown-text
+msgid "Why"
+msgstr ""
+
+#. type: Plain text
+#: YamlFrontMatter_KeysPaths.md:38
+#, markdown-text
+msgid "Because blog posts need metadata!"
+msgstr ""
diff --git a/t/fmt/txt-markdown/YamlFrontMatter_KeysPaths.trans b/t/fmt/txt-markdown/YamlFrontMatter_KeysPaths.trans
new file mode 100644
index 0000000..1cc159e
--- /dev/null
+++ b/t/fmt/txt-markdown/YamlFrontMatter_KeysPaths.trans
@@ -0,0 +1,37 @@
+---
+author: test
+emptytag:
+numeric_ignored_value: 22
+paragraph: "SOME TEXT TO TRANSLATE, PLEASE.\n"
+people:
+ -
+ hobbies:
+ - 'Amateur radio'
+ - 'Pet adoption & fostering'
+ - Puzzle
+ name: "John D'vloper"
+ title: DEVELOPER
+ -
+ hobbies:
+ - 'Ice skating'
+ - 'Water polo'
+ - Caving
+ name: 'Tabitha Bitumen'
+ title: DEVELOPER
+subtitle: 'I MEAN: WHY NOT?'
+tags:
+ - yaml
+ - markdown
+title: 'YAML: does it fit in Markdown?'
+---
+
+# YAML: DOES IT FIT IN MARKDOWN?
+
+LOTS OF STATIC SITE GENERATORS LIKE JEKYLL, HUGO, LEKTOR AND MORE USE A
+STANDARD FORMAT: MARKDOWN WITH YAML FRONT MATTER.
+
+WHY
+---
+
+BECAUSE BLOG POSTS NEED METADATA!
+
diff --git a/t/fmt/txt-markdown/YamlFrontMatter_Options.md b/t/fmt/txt-markdown/YamlFrontMatter_Options.md
new file mode 100644
index 0000000..a3b9a62
--- /dev/null
+++ b/t/fmt/txt-markdown/YamlFrontMatter_Options.md
@@ -0,0 +1,37 @@
+---
+title: "YAML: does it fit in Markdown?"
+subtitle: "I mean: why not?"
+author: test
+numeric_ignored_value: 22
+tags:
+- yaml
+- markdown
+people:
+ -
+ name: John D'vloper
+ title: Developer
+ hobbies:
+ - Amateur radio
+ - Pet adoption & fostering
+ - Puzzle
+ -
+ name: Tabitha Bitumen
+ title: Developer
+ hobbies:
+ - Ice skating
+ - Water polo
+ - Caving
+paragraph: >
+ Some text to translate, please.
+---
+
+# YAML: does it fit in Markdown?
+
+Lots of Static Site Generators like Jekyll, Hugo, Lektor and more use
+a standard format: Markdown with YAML Front Matter.
+
+Why
+---
+
+Because blog posts need metadata!
+
diff --git a/t/fmt/txt-markdown/YamlFrontMatter_Options.norm b/t/fmt/txt-markdown/YamlFrontMatter_Options.norm
new file mode 100644
index 0000000..03654cd
--- /dev/null
+++ b/t/fmt/txt-markdown/YamlFrontMatter_Options.norm
@@ -0,0 +1,36 @@
+---
+author: test
+numeric_ignored_value: 22
+paragraph: "Some text to translate, please.\n"
+people:
+ -
+ hobbies:
+ - 'Amateur radio'
+ - 'Pet adoption & fostering'
+ - Puzzle
+ name: "John D'vloper"
+ title: Developer
+ -
+ hobbies:
+ - 'Ice skating'
+ - 'Water polo'
+ - Caving
+ name: 'Tabitha Bitumen'
+ title: Developer
+subtitle: 'I mean: why not?'
+tags:
+ - yaml
+ - markdown
+title: 'YAML: does it fit in Markdown?'
+---
+
+# YAML: does it fit in Markdown?
+
+Lots of Static Site Generators like Jekyll, Hugo, Lektor and more use a
+standard format: Markdown with YAML Front Matter.
+
+Why
+---
+
+Because blog posts need metadata!
+
diff --git a/t/fmt/txt-markdown/YamlFrontMatter_Options.po b/t/fmt/txt-markdown/YamlFrontMatter_Options.po
new file mode 100644
index 0000000..e18ed1b
--- /dev/null
+++ b/t/fmt/txt-markdown/YamlFrontMatter_Options.po
@@ -0,0 +1,60 @@
+# SOME DESCRIPTIVE TITLE
+# Copyright (C) YEAR Free Software Foundation, Inc.
+# This file is distributed under the same license as the PACKAGE package.
+# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
+#
+#, fuzzy
+msgid ""
+msgstr ""
+"Project-Id-Version: PACKAGE VERSION\n"
+"POT-Creation-Date: 2020-04-28 19:10+0200\n"
+"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
+"Language-Team: LANGUAGE <LL@LI.ORG>\n"
+"Language: \n"
+"MIME-Version: 1.0\n"
+"Content-Type: TEXT/PLAIN; CHARSET=UTF-8\n"
+"Content-Transfer-Encoding: 8BIT\n"
+
+#. type: Yaml Front Matter Hash Value: paragraph
+#: YamlFrontMatter_Options.md:1
+#, no-wrap
+msgid "Some text to translate, please.\n"
+msgstr "SOME TEXT TO TRANSLATE, PLEASE.\n"
+
+#. type: Yaml Front Matter Hash Value: people title
+#: YamlFrontMatter_Options.md:1
+#, no-wrap
+msgid "Developer"
+msgstr "DEVELOPER"
+
+#. type: Yaml Front Matter Hash Value: subtitle
+#: YamlFrontMatter_Options.md:1
+#, no-wrap
+msgid "I mean: why not?"
+msgstr "I MEAN: WHY NOT?"
+
+#. type: Title #
+#: YamlFrontMatter_Options.md:1 YamlFrontMatter_Options.md:28
+#, no-wrap
+msgid "YAML: does it fit in Markdown?"
+msgstr "YAML: DOES IT FIT IN MARKDOWN?"
+
+#. type: Plain text
+#: YamlFrontMatter_Options.md:32
+msgid ""
+"Lots of Static Site Generators like Jekyll, Hugo, Lektor and more use a "
+"standard format: Markdown with YAML Front Matter."
+msgstr ""
+"LOTS OF STATIC SITE GENERATORS LIKE JEKYLL, HUGO, LEKTOR AND MORE USE A "
+"STANDARD FORMAT: MARKDOWN WITH YAML FRONT MATTER."
+
+#. type: Plain text
+#: YamlFrontMatter_Options.md:34
+msgid "Why"
+msgstr "WHY"
+
+#. type: Plain text
+#: YamlFrontMatter_Options.md:37
+msgid "Because blog posts need metadata!"
+msgstr "BECAUSE BLOG POSTS NEED METADATA!"
diff --git a/t/fmt/txt-markdown/YamlFrontMatter_Options.pot b/t/fmt/txt-markdown/YamlFrontMatter_Options.pot
new file mode 100644
index 0000000..c048c34
--- /dev/null
+++ b/t/fmt/txt-markdown/YamlFrontMatter_Options.pot
@@ -0,0 +1,61 @@
+# SOME DESCRIPTIVE TITLE
+# Copyright (C) YEAR Free Software Foundation, Inc.
+# This file is distributed under the same license as the PACKAGE package.
+# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
+#
+#, fuzzy
+msgid ""
+msgstr ""
+"Project-Id-Version: PACKAGE VERSION\n"
+"POT-Creation-Date: 2020-04-28 19:10+0200\n"
+"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
+"Language-Team: LANGUAGE <LL@li.org>\n"
+"Language: \n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+
+#. type: Yaml Front Matter Hash Value: paragraph
+#: YamlFrontMatter_Options.md:1
+#, no-wrap
+msgid "Some text to translate, please.\n"
+msgstr ""
+
+#. type: Yaml Front Matter Hash Value: people title
+#: YamlFrontMatter_Options.md:1
+#, no-wrap
+msgid "Developer"
+msgstr ""
+
+#. type: Yaml Front Matter Hash Value: subtitle
+#: YamlFrontMatter_Options.md:1
+#, no-wrap
+msgid "I mean: why not?"
+msgstr ""
+
+#. type: Title #
+#: YamlFrontMatter_Options.md:1 YamlFrontMatter_Options.md:28
+#, markdown-text, no-wrap
+msgid "YAML: does it fit in Markdown?"
+msgstr ""
+
+#. type: Plain text
+#: YamlFrontMatter_Options.md:32
+#, markdown-text
+msgid ""
+"Lots of Static Site Generators like Jekyll, Hugo, Lektor and more use a "
+"standard format: Markdown with YAML Front Matter."
+msgstr ""
+
+#. type: Plain text
+#: YamlFrontMatter_Options.md:34
+#, markdown-text
+msgid "Why"
+msgstr ""
+
+#. type: Plain text
+#: YamlFrontMatter_Options.md:37
+#, markdown-text
+msgid "Because blog posts need metadata!"
+msgstr ""
diff --git a/t/fmt/txt-markdown/YamlFrontMatter_Options.trans b/t/fmt/txt-markdown/YamlFrontMatter_Options.trans
new file mode 100644
index 0000000..0069809
--- /dev/null
+++ b/t/fmt/txt-markdown/YamlFrontMatter_Options.trans
@@ -0,0 +1,36 @@
+---
+author: test
+numeric_ignored_value: 22
+paragraph: "SOME TEXT TO TRANSLATE, PLEASE.\n"
+people:
+ -
+ hobbies:
+ - 'Amateur radio'
+ - 'Pet adoption & fostering'
+ - Puzzle
+ name: "John D'vloper"
+ title: DEVELOPER
+ -
+ hobbies:
+ - 'Ice skating'
+ - 'Water polo'
+ - Caving
+ name: 'Tabitha Bitumen'
+ title: DEVELOPER
+subtitle: 'I MEAN: WHY NOT?'
+tags:
+ - yaml
+ - markdown
+title: 'YAML: DOES IT FIT IN MARKDOWN?'
+---
+
+# YAML: DOES IT FIT IN MARKDOWN?
+
+LOTS OF STATIC SITE GENERATORS LIKE JEKYLL, HUGO, LEKTOR AND MORE USE A
+STANDARD FORMAT: MARKDOWN WITH YAML FRONT MATTER.
+
+WHY
+---
+
+BECAUSE BLOG POSTS NEED METADATA!
+
diff --git a/t/fmt/txt-markdown/YamlFrontMatter_fake.md b/t/fmt/txt-markdown/YamlFrontMatter_fake.md
new file mode 100644
index 0000000..8b307f4
--- /dev/null
+++ b/t/fmt/txt-markdown/YamlFrontMatter_fake.md
@@ -0,0 +1,11 @@
+---
+
+This file begins with three dash, but not because there is a Yaml Front Matter.
+
+Intead, this file is a footer that should start with an horizontal ruler.
+
+third paragraph.
+
+---
+
+Why shouldn't pages be allowed to include horizontal rulers on top and then somewhere else?
diff --git a/t/fmt/txt-markdown/YamlFrontMatter_fake.norm b/t/fmt/txt-markdown/YamlFrontMatter_fake.norm
new file mode 100644
index 0000000..0510e43
--- /dev/null
+++ b/t/fmt/txt-markdown/YamlFrontMatter_fake.norm
@@ -0,0 +1,13 @@
+---
+
+This file begins with three dash, but not because there is a Yaml Front
+Matter.
+
+Intead, this file is a footer that should start with an horizontal ruler.
+
+third paragraph.
+
+---
+
+Why shouldn't pages be allowed to include horizontal rulers on top and then
+somewhere else?
diff --git a/t/fmt/txt-markdown/YamlFrontMatter_fake.norm.stderr b/t/fmt/txt-markdown/YamlFrontMatter_fake.norm.stderr
new file mode 100644
index 0000000..0c215ad
--- /dev/null
+++ b/t/fmt/txt-markdown/YamlFrontMatter_fake.norm.stderr
@@ -0,0 +1,2 @@
+po4a::text: Proceeding even if the YAML Front Matter could not be parsed. Remove the 'yfm_lenient' option for a stricter behavior.
+Ignored error: YAML::Tiny failed to classify line 'This file begins with three dash, but not because there is a Yaml Front Matter.'
diff --git a/t/fmt/txt-markdown/YamlFrontMatter_fake.po b/t/fmt/txt-markdown/YamlFrontMatter_fake.po
new file mode 100644
index 0000000..e149e17
--- /dev/null
+++ b/t/fmt/txt-markdown/YamlFrontMatter_fake.po
@@ -0,0 +1,49 @@
+# SOME DESCRIPTIVE TITLE
+# Copyright (C) YEAR Free Software Foundation, Inc.
+# This file is distributed under the same license as the PACKAGE package.
+# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
+#
+#, fuzzy
+msgid ""
+msgstr ""
+"Project-Id-Version: PACKAGE VERSION\n"
+"POT-Creation-Date: 2022-07-09 16:12+0200\n"
+"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
+"Language-Team: LANGUAGE <LL@li.org>\n"
+"Language: \n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+
+#. type: Plain text
+#: YamlFrontMatter_fake.md:4
+#, markdown-text
+msgid ""
+"This file begins with three dash, but not because there is a Yaml Front "
+"Matter."
+msgstr ""
+"tHIS FILE BEGINS WITH THREE DASH, BUT NOT BECAUSE THERE IS A yAML fRONT "
+"mATTER."
+
+#. type: Plain text
+#: YamlFrontMatter_fake.md:6
+#, markdown-text
+msgid "Intead, this file is a footer that should start with an horizontal ruler."
+msgstr "iNSTEAD, THIS FILE IS A FOOTET THAT SHOULD START WITH AN HORIZONTAL RULER."
+
+#. type: Plain text
+#: YamlFrontMatter_fake.md:8
+#, markdown-text
+msgid "third paragraph."
+msgstr "THIRD PARAGRAPH"
+
+#. type: Plain text
+#: YamlFrontMatter_fake.md:11
+#, markdown-text
+msgid ""
+"Why shouldn't pages be allowed to include horizontal rulers on top and then "
+"somewhere else?"
+msgstr ""
+"wHY SHOULDN'T PAGES BE ALLOWED TO INCLUDE HORIZONTAL RULERS ON TOP AND THEN "
+"SOMEWHERE ELSE?"
diff --git a/t/fmt/txt-markdown/YamlFrontMatter_fake.pot b/t/fmt/txt-markdown/YamlFrontMatter_fake.pot
new file mode 100644
index 0000000..692cf4c
--- /dev/null
+++ b/t/fmt/txt-markdown/YamlFrontMatter_fake.pot
@@ -0,0 +1,45 @@
+# SOME DESCRIPTIVE TITLE
+# Copyright (C) YEAR Free Software Foundation, Inc.
+# This file is distributed under the same license as the PACKAGE package.
+# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
+#
+#, fuzzy
+msgid ""
+msgstr ""
+"Project-Id-Version: PACKAGE VERSION\n"
+"POT-Creation-Date: 2022-07-09 16:04+0200\n"
+"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
+"Language-Team: LANGUAGE <LL@li.org>\n"
+"Language: \n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+
+#. type: Plain text
+#: YamlFrontMatter_fake.md:4
+#, markdown-text
+msgid ""
+"This file begins with three dash, but not because there is a Yaml Front "
+"Matter."
+msgstr ""
+
+#. type: Plain text
+#: YamlFrontMatter_fake.md:6
+#, markdown-text
+msgid "Intead, this file is a footer that should start with an horizontal ruler."
+msgstr ""
+
+#. type: Plain text
+#: YamlFrontMatter_fake.md:8
+#, markdown-text
+msgid "third paragraph."
+msgstr ""
+
+#. type: Plain text
+#: YamlFrontMatter_fake.md:11
+#, markdown-text
+msgid ""
+"Why shouldn't pages be allowed to include horizontal rulers on top and then "
+"somewhere else?"
+msgstr ""
diff --git a/t/fmt/txt-markdown/YamlFrontMatter_fake.trans b/t/fmt/txt-markdown/YamlFrontMatter_fake.trans
new file mode 100644
index 0000000..88cfa6b
--- /dev/null
+++ b/t/fmt/txt-markdown/YamlFrontMatter_fake.trans
@@ -0,0 +1,13 @@
+---
+
+tHIS FILE BEGINS WITH THREE DASH, BUT NOT BECAUSE THERE IS A yAML fRONT
+mATTER.
+
+iNSTEAD, THIS FILE IS A FOOTET THAT SHOULD START WITH AN HORIZONTAL RULER.
+
+THIRD PARAGRAPH
+
+---
+
+wHY SHOULDN'T PAGES BE ALLOWED TO INCLUDE HORIZONTAL RULERS ON TOP AND THEN
+SOMEWHERE ELSE?
diff --git a/t/fmt/txt-markdown/YamlFrontMatter_fake.trans.stderr b/t/fmt/txt-markdown/YamlFrontMatter_fake.trans.stderr
new file mode 100644
index 0000000..0c215ad
--- /dev/null
+++ b/t/fmt/txt-markdown/YamlFrontMatter_fake.trans.stderr
@@ -0,0 +1,2 @@
+po4a::text: Proceeding even if the YAML Front Matter could not be parsed. Remove the 'yfm_lenient' option for a stricter behavior.
+Ignored error: YAML::Tiny failed to classify line 'This file begins with three dash, but not because there is a Yaml Front Matter.'
diff --git a/t/fmt/txt/KeyValue.norm b/t/fmt/txt/KeyValue.norm
new file mode 100644
index 0000000..55b3192
--- /dev/null
+++ b/t/fmt/txt/KeyValue.norm
@@ -0,0 +1,12 @@
+Leading:Key
+Key: Value
+
+Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod
+tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam,
+quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo
+consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse
+cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat
+non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.
+
+Inline:Value
+Another: Value
diff --git a/t/fmt/txt/KeyValue.po b/t/fmt/txt/KeyValue.po
new file mode 100644
index 0000000..fd0d9bd
--- /dev/null
+++ b/t/fmt/txt/KeyValue.po
@@ -0,0 +1,54 @@
+# SOME DESCRIPTIVE TITLE
+# Copyright (C) YEAR Free Software Foundation, Inc.
+# This file is distributed under the same license as the PACKAGE package.
+# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
+#
+#, fuzzy
+msgid ""
+msgstr ""
+"Project-Id-Version: PACKAGE VERSION\n"
+"POT-Creation-Date: 2017-04-11 11:16+0200\n"
+"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
+"Language-Team: LANGUAGE <LL@LI.ORG>\n"
+"Language: \n"
+"MIME-Version: 1.0\n"
+"Content-Type: TEXT/PLAIN; CHARSET=UTF-8\n"
+"Content-Transfer-Encoding: 8BIT\n"
+
+#. type: Plain text
+#: KeyValue.text:3
+#, no-wrap
+msgid ""
+"Leading:Key\n"
+"Key: Value\n"
+msgstr ""
+"LEADING:KEY\n"
+"KEY: VALUE\n"
+
+#. type: Plain text
+#: KeyValue.text:11
+msgid ""
+"Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod "
+"tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, "
+"quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo "
+"consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse "
+"cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat "
+"non proident, sunt in culpa qui officia deserunt mollit anim id est laborum."
+msgstr ""
+"LOREM IPSUM DOLOR SIT AMET, CONSECTETUR ADIPISICING ELIT, SED DO EIUSMOD "
+"TEMPOR INCIDIDUNT UT LABORE ET DOLORE MAGNA ALIQUA. UT ENIM AD MINIM VENIAM, "
+"QUIS NOSTRUD EXERCITATION ULLAMCO LABORIS NISI UT ALIQUIP EX EA COMMODO "
+"CONSEQUAT. DUIS AUTE IRURE DOLOR IN REPREHENDERIT IN VOLUPTATE VELIT ESSE "
+"CILLUM DOLORE EU FUGIAT NULLA PARIATUR. EXCEPTEUR SINT OCCAECAT CUPIDATAT "
+"NON PROIDENT, SUNT IN CULPA QUI OFFICIA DESERUNT MOLLIT ANIM ID EST LABORUM."
+
+#. type: Plain text
+#: KeyValue.text:13
+#, no-wrap
+msgid ""
+"Inline:Value\n"
+"Another: Value\n"
+msgstr ""
+"INLINE:VALUE\n"
+"ANOTHER: VALUE\n"
diff --git a/t/fmt/txt/KeyValue.pot b/t/fmt/txt/KeyValue.pot
new file mode 100644
index 0000000..cc1c3bc
--- /dev/null
+++ b/t/fmt/txt/KeyValue.pot
@@ -0,0 +1,44 @@
+# SOME DESCRIPTIVE TITLE
+# Copyright (C) YEAR Free Software Foundation, Inc.
+# This file is distributed under the same license as the PACKAGE package.
+# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
+#
+#, fuzzy
+msgid ""
+msgstr ""
+"Project-Id-Version: PACKAGE VERSION\n"
+"POT-Creation-Date: 2017-04-11 11:16+0200\n"
+"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
+"Language-Team: LANGUAGE <LL@li.org>\n"
+"Language: \n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+
+#. type: Plain text
+#: KeyValue.text:3
+#, no-wrap
+msgid ""
+"Leading:Key\n"
+"Key: Value\n"
+msgstr ""
+
+#. type: Plain text
+#: KeyValue.text:11
+msgid ""
+"Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod "
+"tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, "
+"quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo "
+"consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse "
+"cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat "
+"non proident, sunt in culpa qui officia deserunt mollit anim id est laborum."
+msgstr ""
+
+#. type: Plain text
+#: KeyValue.text:13
+#, no-wrap
+msgid ""
+"Inline:Value\n"
+"Another: Value\n"
+msgstr ""
diff --git a/t/fmt/txt/KeyValue.text b/t/fmt/txt/KeyValue.text
new file mode 100644
index 0000000..1544638
--- /dev/null
+++ b/t/fmt/txt/KeyValue.text
@@ -0,0 +1,13 @@
+Leading:Key
+Key: Value
+
+Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod
+tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim
+veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea
+commodo consequat. Duis aute irure dolor in reprehenderit in voluptate
+velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat
+cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id
+est laborum.
+
+Inline:Value
+Another: Value
diff --git a/t/fmt/txt/KeyValue.trans b/t/fmt/txt/KeyValue.trans
new file mode 100644
index 0000000..a35bbb5
--- /dev/null
+++ b/t/fmt/txt/KeyValue.trans
@@ -0,0 +1,12 @@
+LEADING:KEY
+KEY: VALUE
+
+LOREM IPSUM DOLOR SIT AMET, CONSECTETUR ADIPISICING ELIT, SED DO EIUSMOD
+TEMPOR INCIDIDUNT UT LABORE ET DOLORE MAGNA ALIQUA. UT ENIM AD MINIM VENIAM,
+QUIS NOSTRUD EXERCITATION ULLAMCO LABORIS NISI UT ALIQUIP EX EA COMMODO
+CONSEQUAT. DUIS AUTE IRURE DOLOR IN REPREHENDERIT IN VOLUPTATE VELIT ESSE
+CILLUM DOLORE EU FUGIAT NULLA PARIATUR. EXCEPTEUR SINT OCCAECAT CUPIDATAT
+NON PROIDENT, SUNT IN CULPA QUI OFFICIA DESERUNT MOLLIT ANIM ID EST LABORUM.
+
+INLINE:VALUE
+ANOTHER: VALUE
diff --git a/t/fmt/txt/Width-nowrap.norm b/t/fmt/txt/Width-nowrap.norm
new file mode 100644
index 0000000..ab61c81
--- /dev/null
+++ b/t/fmt/txt/Width-nowrap.norm
@@ -0,0 +1,16 @@
+This paragraph is 39 columns width.....
+
+This paragraph is 40 columns width......
+
+This paragraph is 41 columns width.......
+
+This paragraph is 39 columns width.....
+
+This paragraph is 40 columns width......
+
+This paragraph is 41 columns width.......
+
+ This is a very long verbatim paragraph that shouldn't be rewraped no matter how long it is.
+
+ This is a very long verbatim paragraph that shouldn't
+ be rewraped no matter how long it is.
diff --git a/t/fmt/txt/Width-nowrap.trans b/t/fmt/txt/Width-nowrap.trans
new file mode 100644
index 0000000..233a40e
--- /dev/null
+++ b/t/fmt/txt/Width-nowrap.trans
@@ -0,0 +1,16 @@
+THIS PARAGRAPH IS 39 COLUMNS WIDTH.....
+
+THIS PARAGRAPH IS 40 COLUMNS WIDTH......
+
+THIS PARAGRAPH IS 41 COLUMNS WIDTH.......
+
+THIS PARAGRAPH IS 39 COLUMNS WIDTH.....
+
+THIS PARAGRAPH IS 40 COLUMNS WIDTH......
+
+THIS PARAGRAPH IS 41 COLUMNS WIDTH.......
+
+ THIS IS A VERY LONG VERBATIM PARAGRAPH THAT SHOULDN'T BE REWRAPED NO MATTER HOW LONG IT IS.
+
+ THIS IS A VERY LONG VERBATIM PARAGRAPH THAT SHOULDN'T
+ BE REWRAPED NO MATTER HOW LONG IT IS.
diff --git a/t/fmt/txt/Width.norm b/t/fmt/txt/Width.norm
new file mode 100644
index 0000000..50bfb52
--- /dev/null
+++ b/t/fmt/txt/Width.norm
@@ -0,0 +1,18 @@
+This paragraph is 39 columns width.....
+
+This paragraph is 40 columns width......
+
+This paragraph is 41 columns
+width.......
+
+This paragraph is 39 columns width.....
+
+This paragraph is 40 columns width......
+
+This paragraph is 41 columns
+width.......
+
+ This is a very long verbatim paragraph that shouldn't be rewraped no matter how long it is.
+
+ This is a very long verbatim paragraph that shouldn't
+ be rewraped no matter how long it is.
diff --git a/t/fmt/txt/Width.po b/t/fmt/txt/Width.po
new file mode 100644
index 0000000..19475f7
--- /dev/null
+++ b/t/fmt/txt/Width.po
@@ -0,0 +1,52 @@
+# SOME DESCRIPTIVE TITLE
+# Copyright (C) YEAR Free Software Foundation, Inc.
+# This file is distributed under the same license as the PACKAGE package.
+# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
+#
+#, fuzzy
+msgid ""
+msgstr ""
+"Project-Id-Version: PACKAGE VERSION\n"
+"POT-Creation-Date: 2024-03-24 18:24+0300\n"
+"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
+"Language-Team: LANGUAGE <LL@li.org>\n"
+"Language: \n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+
+#. type: Plain text
+#: Width.text:2 Width.text:9
+msgid "This paragraph is 39 columns width....."
+msgstr "THIS PARAGRAPH IS 39 COLUMNS WIDTH....."
+
+#. type: Plain text
+#: Width.text:4 Width.text:12
+msgid "This paragraph is 40 columns width......"
+msgstr "THIS PARAGRAPH IS 40 COLUMNS WIDTH......"
+
+#. type: Plain text
+#: Width.text:6 Width.text:15
+msgid "This paragraph is 41 columns width......."
+msgstr "THIS PARAGRAPH IS 41 COLUMNS WIDTH......."
+
+#. type: Plain text
+#: Width.text:17
+#, no-wrap
+msgid ""
+" This is a very long verbatim paragraph that shouldn't be rewraped no matter "
+"how long it is.\n"
+msgstr ""
+" THIS IS A VERY LONG VERBATIM PARAGRAPH THAT SHOULDN'T BE REWRAPED NO MATTER "
+"HOW LONG IT IS.\n"
+
+#. type: Plain text
+#: Width.text:19
+#, no-wrap
+msgid ""
+" This is a very long verbatim paragraph that shouldn't\n"
+" be rewraped no matter how long it is.\n"
+msgstr ""
+" THIS IS A VERY LONG VERBATIM PARAGRAPH THAT SHOULDN'T\n"
+" BE REWRAPED NO MATTER HOW LONG IT IS.\n"
diff --git a/t/fmt/txt/Width.pot b/t/fmt/txt/Width.pot
new file mode 100644
index 0000000..1d2a8ad
--- /dev/null
+++ b/t/fmt/txt/Width.pot
@@ -0,0 +1,48 @@
+# SOME DESCRIPTIVE TITLE
+# Copyright (C) YEAR Free Software Foundation, Inc.
+# This file is distributed under the same license as the PACKAGE package.
+# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
+#
+#, fuzzy
+msgid ""
+msgstr ""
+"Project-Id-Version: PACKAGE VERSION\n"
+"POT-Creation-Date: 2024-03-24 17:52+0300\n"
+"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
+"Language-Team: LANGUAGE <LL@li.org>\n"
+"Language: \n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+
+#. type: Plain text
+#: Width.text:2 Width.text:9
+msgid "This paragraph is 39 columns width....."
+msgstr ""
+
+#. type: Plain text
+#: Width.text:4 Width.text:12
+msgid "This paragraph is 40 columns width......"
+msgstr ""
+
+#. type: Plain text
+#: Width.text:6 Width.text:15
+msgid "This paragraph is 41 columns width......."
+msgstr ""
+
+#. type: Plain text
+#: Width.text:17
+#, no-wrap
+msgid ""
+" This is a very long verbatim paragraph that shouldn't be rewraped no matter "
+"how long it is.\n"
+msgstr ""
+
+#. type: Plain text
+#: Width.text:19
+#, no-wrap
+msgid ""
+" This is a very long verbatim paragraph that shouldn't\n"
+" be rewraped no matter how long it is.\n"
+msgstr ""
diff --git a/t/fmt/txt/Width.text b/t/fmt/txt/Width.text
new file mode 100644
index 0000000..0651665
--- /dev/null
+++ b/t/fmt/txt/Width.text
@@ -0,0 +1,19 @@
+This paragraph is 39 columns width.....
+
+This paragraph is 40 columns width......
+
+This paragraph is 41 columns width.......
+
+This paragraph is 39 columns
+width.....
+
+This paragraph is 40 columns
+width......
+
+This paragraph is 41 columns
+width.......
+
+ This is a very long verbatim paragraph that shouldn't be rewraped no matter how long it is.
+
+ This is a very long verbatim paragraph that shouldn't
+ be rewraped no matter how long it is.
diff --git a/t/fmt/txt/Width.trans b/t/fmt/txt/Width.trans
new file mode 100644
index 0000000..180cb66
--- /dev/null
+++ b/t/fmt/txt/Width.trans
@@ -0,0 +1,18 @@
+THIS PARAGRAPH IS 39 COLUMNS WIDTH.....
+
+THIS PARAGRAPH IS 40 COLUMNS WIDTH......
+
+THIS PARAGRAPH IS 41 COLUMNS
+WIDTH.......
+
+THIS PARAGRAPH IS 39 COLUMNS WIDTH.....
+
+THIS PARAGRAPH IS 40 COLUMNS WIDTH......
+
+THIS PARAGRAPH IS 41 COLUMNS
+WIDTH.......
+
+ THIS IS A VERY LONG VERBATIM PARAGRAPH THAT SHOULDN'T BE REWRAPED NO MATTER HOW LONG IT IS.
+
+ THIS IS A VERY LONG VERBATIM PARAGRAPH THAT SHOULDN'T
+ BE REWRAPED NO MATTER HOW LONG IT IS.
diff --git a/t/fmt/wml/basic.norm b/t/fmt/wml/basic.norm
new file mode 100644
index 0000000..655b6ef
--- /dev/null
+++ b/t/fmt/wml/basic.norm
@@ -0,0 +1,48 @@
+# based on security/2008/dsa-1444.wml.
+#use wml::debian::template title="My awesome title"
+#include "$(ENGLISHDIR)/security/2008/dsa-1444.data"
+<define-tag description>some vulnerability info</define-tag>
+<define-tag moreinfo>
+
+<p>
+foo bar foo bar foo bar foo bar foo bar foo bar foo bar foo bar.
+</p>
+
+<p>
+bar foo bar foo bar foo bar foo bar foo bar foo bar foo bar foo.
+</p>
+
+<ul>
+
+<li><a href="http://example.com/">CVE-foo-bar</a>
+
+ <p>
+ cve foo bar cve foo bar cve foo bar cve foo bar.
+ </p></li>
+
+</ul>
+
+</define-tag>
+
+
+
+
+# based on devel/debian-installer/News/2007/20070720.wml.
+#use wml::debian::news
+<define-tag pagetitle>Some page title</define-tag>
+<define-tag release_date>2007-07-20</define-tag>
+
+<p>
+some description including line breaks,<br />
+<q>quotations</q>, <a href="$(DEVEL)/debian-installer/">links</a>, and <a
+href="#n1">in-page links</a>.
+</p>
+<ul>
+ <li>item a</li>
+ <li>item b</li>
+</ul>
+
+<p><strong>Notes</strong></p>
+<ol>
+<li><a name="n1"></a>an anchor provided here.</li>
+</ol>
diff --git a/t/fmt/wml/basic.po b/t/fmt/wml/basic.po
new file mode 100644
index 0000000..19bead3
--- /dev/null
+++ b/t/fmt/wml/basic.po
@@ -0,0 +1,86 @@
+# SOME DESCRIPTIVE TITLE
+# Copyright (C) YEAR Free Software Foundation, Inc.
+# This file is distributed under the same license as the PACKAGE package.
+msgid ""
+msgstr ""
+"Project-Id-Version: \n"
+"POT-Creation-Date: 2008-03-20 11:58+0900\n"
+"PO-Revision-Date: 2018-11-06 19:13+0100\n"
+"Last-Translator: Dr. Tobias Quathamer <toddy@debian.org>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+
+#. type: Content of: <title>
+#: basic.wml:1
+msgid "My awesome title"
+msgstr "MY AWESOME TRANSLATED TITLE"
+
+#. type: Content of: <define-tag>
+#: basic.wml:6
+msgid "some vulnerability info"
+msgstr "SOME TRANSLATED VULNERABILITY INFO"
+
+#. type: Content of: <define-tag><p>
+#: basic.wml:10
+msgid "foo bar foo bar foo bar foo bar foo bar foo bar foo bar foo bar."
+msgstr "TRANSLATED FOO BAR FOO BAR FOO BAR FOO BAR FOO BAR FOO BAR FOO BAR FOO BAR."
+
+#. type: Content of: <define-tag><p>
+#: basic.wml:15
+msgid "bar foo bar foo bar foo bar foo bar foo bar foo bar foo bar foo."
+msgstr "TRANSLATED BAR FOO BAR FOO BAR FOO BAR FOO BAR FOO BAR FOO BAR FOO BAR FOO."
+
+#. type: Content of: <define-tag><ul><li>
+#: basic.wml:21
+msgid "<a href=\"http://example.com/\">CVE-foo-bar</a>"
+msgstr "<a href=\"http://example.com/\">TRANSLATED CVE-FOO-BAR</a>"
+
+#. type: Content of: <define-tag><ul><li><p>
+#: basic.wml:24
+msgid "cve foo bar cve foo bar cve foo bar cve foo bar."
+msgstr "TRANSLATED CVE FOO BAR CVE FOO BAR CVE FOO BAR CVE FOO BAR."
+
+#. type: Content of: <define-tag>
+#: basic.wml:35
+msgid "Some page title"
+msgstr "SOME TRANSLATED PAGE TITLE"
+
+#. type: Content of: <define-tag>
+#: basic.wml:36
+msgid "2007-07-20"
+msgstr "TRANSLATED 2007-07-20"
+
+#. type: Content of: <p>
+#: basic.wml:39
+msgid "some description including line breaks,"
+msgstr "SOME TRANSLATED DESCRIPTION INCLUDING LINE BREAKS,"
+
+#. type: Content of: <p>
+#: basic.wml:40
+msgid ""
+"<q>quotations</q>, <a href=\"$(DEVEL)/debian-installer/\">links</a>, and <a "
+"href=\"#n1\">in-page links</a>."
+msgstr ""
+"<q>QUOTATIONS</q>, <a href=\"$(DEVEL)/debian-installer/\">LINKS</a>, AND <a "
+"href=\"#n1\">IN-PAGE LINKS</a>."
+
+#. type: Content of: <ul><li>
+#: basic.wml:45
+msgid "item a"
+msgstr "TRANSLATED ITEM A"
+
+#. type: Content of: <ul><li>
+#: basic.wml:46
+msgid "item b"
+msgstr "TRANSLATED ITEM B"
+
+#. type: Content of: <p>
+#: basic.wml:49
+msgid "<strong>Notes</strong>"
+msgstr "<strong>TRANSLATED NOTES</strong>"
+
+#. type: Content of: <ol><li>
+#: basic.wml:51
+msgid "<a name=\"n1\"></a>an anchor provided here."
+msgstr "<a name=\"n1\"></a>A TRANSLATED ANCHOR PROVIDED HERE."
diff --git a/t/fmt/wml/basic.pot b/t/fmt/wml/basic.pot
new file mode 100644
index 0000000..2291eb0
--- /dev/null
+++ b/t/fmt/wml/basic.pot
@@ -0,0 +1,89 @@
+# SOME DESCRIPTIVE TITLE
+# Copyright (C) YEAR Free Software Foundation, Inc.
+# This file is distributed under the same license as the PACKAGE package.
+# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
+#
+#, fuzzy
+msgid ""
+msgstr ""
+"Project-Id-Version: PACKAGE VERSION\n"
+"POT-Creation-Date: 2008-03-20 11:58+0900\n"
+"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
+"Language-Team: LANGUAGE <LL@li.org>\n"
+"Language: \n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+
+#. type: Content of: <title>
+#: basic.wml:1
+msgid "My awesome title"
+msgstr ""
+
+#. type: Content of: <define-tag>
+#: basic.wml:6
+msgid "some vulnerability info"
+msgstr ""
+
+#. type: Content of: <define-tag><p>
+#: basic.wml:10
+msgid "foo bar foo bar foo bar foo bar foo bar foo bar foo bar foo bar."
+msgstr ""
+
+#. type: Content of: <define-tag><p>
+#: basic.wml:15
+msgid "bar foo bar foo bar foo bar foo bar foo bar foo bar foo bar foo."
+msgstr ""
+
+#. type: Content of: <define-tag><ul><li>
+#: basic.wml:21
+msgid "<a href=\"http://example.com/\">CVE-foo-bar</a>"
+msgstr ""
+
+#. type: Content of: <define-tag><ul><li><p>
+#: basic.wml:24
+msgid "cve foo bar cve foo bar cve foo bar cve foo bar."
+msgstr ""
+
+#. type: Content of: <define-tag>
+#: basic.wml:35
+msgid "Some page title"
+msgstr ""
+
+#. type: Content of: <define-tag>
+#: basic.wml:36
+msgid "2007-07-20"
+msgstr ""
+
+#. type: Content of: <p>
+#: basic.wml:39
+msgid "some description including line breaks,"
+msgstr ""
+
+#. type: Content of: <p>
+#: basic.wml:40
+msgid ""
+"<q>quotations</q>, <a href=\"$(DEVEL)/debian-installer/\">links</a>, and <a "
+"href=\"#n1\">in-page links</a>."
+msgstr ""
+
+#. type: Content of: <ul><li>
+#: basic.wml:45
+msgid "item a"
+msgstr ""
+
+#. type: Content of: <ul><li>
+#: basic.wml:46
+msgid "item b"
+msgstr ""
+
+#. type: Content of: <p>
+#: basic.wml:49
+msgid "<strong>Notes</strong>"
+msgstr ""
+
+#. type: Content of: <ol><li>
+#: basic.wml:51
+msgid "<a name=\"n1\"></a>an anchor provided here."
+msgstr ""
diff --git a/t/fmt/wml/basic.trans b/t/fmt/wml/basic.trans
new file mode 100644
index 0000000..f647532
--- /dev/null
+++ b/t/fmt/wml/basic.trans
@@ -0,0 +1,48 @@
+# based on security/2008/dsa-1444.wml.
+#use wml::debian::template title="MY AWESOME TRANSLATED TITLE"
+#include "$(ENGLISHDIR)/security/2008/dsa-1444.data"
+<define-tag description>SOME TRANSLATED VULNERABILITY INFO</define-tag>
+<define-tag moreinfo>
+
+<p>
+TRANSLATED FOO BAR FOO BAR FOO BAR FOO BAR FOO BAR FOO BAR FOO BAR FOO BAR.
+</p>
+
+<p>
+TRANSLATED BAR FOO BAR FOO BAR FOO BAR FOO BAR FOO BAR FOO BAR FOO BAR FOO.
+</p>
+
+<ul>
+
+<li><a href="http://example.com/">TRANSLATED CVE-FOO-BAR</a>
+
+ <p>
+ TRANSLATED CVE FOO BAR CVE FOO BAR CVE FOO BAR CVE FOO BAR.
+ </p></li>
+
+</ul>
+
+</define-tag>
+
+
+
+
+# based on devel/debian-installer/News/2007/20070720.wml.
+#use wml::debian::news
+<define-tag pagetitle>SOME TRANSLATED PAGE TITLE</define-tag>
+<define-tag release_date>TRANSLATED 2007-07-20</define-tag>
+
+<p>
+SOME TRANSLATED DESCRIPTION INCLUDING LINE BREAKS,<br />
+<q>QUOTATIONS</q>, <a href="$(DEVEL)/debian-installer/">LINKS</a>, AND <a
+href="#n1">IN-PAGE LINKS</a>.
+</p>
+<ul>
+ <li>TRANSLATED ITEM A</li>
+ <li>TRANSLATED ITEM B</li>
+</ul>
+
+<p><strong>TRANSLATED NOTES</strong></p>
+<ol>
+<li><a name="n1"></a>A TRANSLATED ANCHOR PROVIDED HERE.</li>
+</ol>
diff --git a/t/fmt/wml/basic.wml b/t/fmt/wml/basic.wml
new file mode 100644
index 0000000..3c6ea5a
--- /dev/null
+++ b/t/fmt/wml/basic.wml
@@ -0,0 +1,51 @@
+# based on security/2008/dsa-1444.wml.
+#use wml::debian::template title="My awesome title"
+#include "$(ENGLISHDIR)/security/2008/dsa-1444.data"
+
+<define-tag description>some vulnerability info</define-tag>
+<define-tag moreinfo>
+
+<p>
+foo bar foo bar foo bar foo bar
+foo bar foo bar foo bar foo bar.
+</p>
+
+<p>
+bar foo bar foo bar foo bar foo
+bar foo bar foo bar foo bar foo.
+</p>
+
+<ul>
+
+<li><a href="http://example.com/">CVE-foo-bar</a>
+
+ <p>
+ cve foo bar cve foo bar
+ cve foo bar cve foo bar.
+ </p></li>
+
+</ul>
+
+</define-tag>
+
+# based on devel/debian-installer/News/2007/20070720.wml.
+#use wml::debian::news
+
+<define-tag pagetitle>Some page title</define-tag>
+<define-tag release_date>2007-07-20</define-tag>
+
+<p>
+some description including line breaks,<br />
+<q>quotations</q>,
+<a href="$(DEVEL)/debian-installer/">links</a>,
+and <a href="#n1">in-page links</a>.
+</p>
+<ul>
+ <li>item a</li>
+ <li>item b</li>
+</ul>
+
+<p><strong>Notes</strong></p>
+<ol>
+<li><a name="n1"></a>an anchor provided here.</li>
+</ol>
diff --git a/t/fmt/xhtml/basic.html b/t/fmt/xhtml/basic.html
new file mode 100644
index 0000000..98eb2ff
--- /dev/null
+++ b/t/fmt/xhtml/basic.html
@@ -0,0 +1,35 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+
+<html>
+ <head>
+ <!--#set var="blah" value="1" -->
+ <!--#include virtual="header.shtml"-->
+ <title>Title string</title>
+ </head>
+
+ <body>
+ <div class="content">
+ <h1>Header</h1>
+ <img src="somepicture.jpg" class="left"
+ alt="Some text" title="My picture" />
+
+ <p><strong>Strong</strong>not strong</p>
+ <p><strong>Another line</strong> with space and no closing.</p>
+ <p>
+ <a href="somelink.html">My link</a>,
+ <a href="nextline.html">link on next line</a>, <a href="sameline.html">line on same line</a>.
+ </p>
+
+ <img src="picture.jpg" alt="picture" />
+
+ and some text without a paragraph mark.
+ </div>
+ <div class="content">
+ <p>A paragraph with an
+ <!--#include virtual="header.shtml"-->
+ SSI statement inside</p>
+ </div>
+ </body>
+</html>
+
diff --git a/t/fmt/xhtml/basic.norm b/t/fmt/xhtml/basic.norm
new file mode 100644
index 0000000..2673d28
--- /dev/null
+++ b/t/fmt/xhtml/basic.norm
@@ -0,0 +1,36 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+
+<html>
+ <head>
+
+
+ <!--#set var="blah" value="1" -->
+<!--#include virtual="header.shtml"-->
+<title>Title string</title>
+ </head>
+
+ <body>
+ <div class="content">
+ <h1>Header</h1>
+ <img src="somepicture.jpg" class="left"
+ alt="Some text" title="My picture" />
+
+ <p><strong>Strong</strong>not strong</p>
+ <p><strong>Another line</strong> with space and no closing.</p>
+ <p>
+ <a href="somelink.html">My link</a>, <a href="nextline.html">link on next
+line</a>, <a href="sameline.html">line on same line</a>.
+ </p>
+
+ <img src="picture.jpg" alt="picture" />
+
+ and some text without a paragraph mark.
+ </div>
+ <div class="content">
+ <p><!--#include virtual="header.shtml"-->
+A paragraph with an SSI statement inside</p>
+ </div>
+ </body>
+</html>
+
diff --git a/t/fmt/xhtml/basic.po b/t/fmt/xhtml/basic.po
new file mode 100644
index 0000000..48bdfbf
--- /dev/null
+++ b/t/fmt/xhtml/basic.po
@@ -0,0 +1,72 @@
+# SOME DESCRIPTIVE TITLE
+# Copyright (C) YEAR Free Software Foundation, Inc.
+# This file is distributed under the same license as the PACKAGE package.
+# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
+#
+#, fuzzy
+msgid ""
+msgstr ""
+"Project-Id-Version: PACKAGE VERSION\n"
+"POT-Creation-Date: 2006-06-14 0:50+0200\n"
+"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
+"Language-Team: LANGUAGE <LL@li.org>\n"
+"Language: \n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+
+#. type: Content of: <html><head><title>
+#: basic.html:8
+msgid "Title string"
+msgstr "TITLE STRING"
+
+#. type: Content of: <html><body><div><h1>
+#: basic.html:13
+msgid "Header"
+msgstr "HEADER"
+
+#. type: Attribute 'alt' of: <html><body><div><img>
+#: basic.html:15
+msgid "Some text"
+msgstr "SOME TEXT"
+
+#. type: Attribute 'title' of: <html><body><div><img>
+#: basic.html:15
+msgid "My picture"
+msgstr "MY PICTURE"
+
+#. type: Content of: <html><body><div><p>
+#: basic.html:17
+msgid "<strong>Strong</strong>not strong"
+msgstr "<strong>STRONG</strong>NOT STRONG"
+
+#. type: Content of: <html><body><div><p>
+#: basic.html:18
+msgid "<strong>Another line</strong> with space and no closing."
+msgstr "<strong>ANOTHER LINE</strong> WITH SPACE AND NO CLOSING."
+
+#. type: Content of: <html><body><div><p>
+#: basic.html:20
+msgid ""
+"<a href=\"somelink.html\">My link</a>, <a href=\"nextline.html\">link on "
+"next line</a>, <a href=\"sameline.html\">line on same line</a>."
+msgstr ""
+"<a href=\"somelink.html\">MY LINK</a>, <a href=\"nextline.html\">LINK ON "
+"NEXT LINE</a>, <a href=\"sameline.html\">LINE ON SAME LINE</a>."
+
+#. type: Attribute 'alt' of: <html><body><div><img>
+#: basic.html:24
+msgid "picture"
+msgstr "PICTURE"
+
+#. type: Content of: <html><body><div>
+#: basic.html:26
+msgid "and some text without a paragraph mark."
+msgstr "AND SOME TEXT WITHOUT A PARAGRAPH MARK."
+
+#. #include virtual="header.shtml"
+#. type: Content of: <html><body><div><p>
+#: basic.html:29
+msgid "A paragraph with an SSI statement inside"
+msgstr "A PARAGRAPH WITH AN SSI STATEMENT INSIDE"
diff --git a/t/fmt/xhtml/basic.pot b/t/fmt/xhtml/basic.pot
new file mode 100644
index 0000000..a5cd2fd
--- /dev/null
+++ b/t/fmt/xhtml/basic.pot
@@ -0,0 +1,70 @@
+# SOME DESCRIPTIVE TITLE
+# Copyright (C) YEAR Free Software Foundation, Inc.
+# This file is distributed under the same license as the PACKAGE package.
+# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
+#
+#, fuzzy
+msgid ""
+msgstr ""
+"Project-Id-Version: PACKAGE VERSION\n"
+"POT-Creation-Date: 2006-06-14 0:50+0200\n"
+"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
+"Language-Team: LANGUAGE <LL@li.org>\n"
+"Language: \n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+
+#. type: Content of: <html><head><title>
+#: basic.html:8
+msgid "Title string"
+msgstr ""
+
+#. type: Content of: <html><body><div><h1>
+#: basic.html:13
+msgid "Header"
+msgstr ""
+
+#. type: Attribute 'alt' of: <html><body><div><img>
+#: basic.html:15
+msgid "Some text"
+msgstr ""
+
+#. type: Attribute 'title' of: <html><body><div><img>
+#: basic.html:15
+msgid "My picture"
+msgstr ""
+
+#. type: Content of: <html><body><div><p>
+#: basic.html:17
+msgid "<strong>Strong</strong>not strong"
+msgstr ""
+
+#. type: Content of: <html><body><div><p>
+#: basic.html:18
+msgid "<strong>Another line</strong> with space and no closing."
+msgstr ""
+
+#. type: Content of: <html><body><div><p>
+#: basic.html:20
+msgid ""
+"<a href=\"somelink.html\">My link</a>, <a href=\"nextline.html\">link on "
+"next line</a>, <a href=\"sameline.html\">line on same line</a>."
+msgstr ""
+
+#. type: Attribute 'alt' of: <html><body><div><img>
+#: basic.html:24
+msgid "picture"
+msgstr ""
+
+#. type: Content of: <html><body><div>
+#: basic.html:26
+msgid "and some text without a paragraph mark."
+msgstr ""
+
+#. #include virtual="header.shtml"
+#. type: Content of: <html><body><div><p>
+#: basic.html:29
+msgid "A paragraph with an SSI statement inside"
+msgstr ""
diff --git a/t/fmt/xhtml/basic.trans b/t/fmt/xhtml/basic.trans
new file mode 100644
index 0000000..a267590
--- /dev/null
+++ b/t/fmt/xhtml/basic.trans
@@ -0,0 +1,36 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+
+<html>
+ <head>
+
+
+ <!--#set var="blah" value="1" -->
+<!--#include virtual="header.shtml"-->
+<title>TITLE STRING</title>
+ </head>
+
+ <body>
+ <div class="content">
+ <h1>HEADER</h1>
+ <img src="somepicture.jpg" class="left"
+ alt="SOME TEXT" title="MY PICTURE" />
+
+ <p><strong>STRONG</strong>NOT STRONG</p>
+ <p><strong>ANOTHER LINE</strong> WITH SPACE AND NO CLOSING.</p>
+ <p>
+ <a href="somelink.html">MY LINK</a>, <a href="nextline.html">LINK ON NEXT
+LINE</a>, <a href="sameline.html">LINE ON SAME LINE</a>.
+ </p>
+
+ <img src="picture.jpg" alt="PICTURE" />
+
+ AND SOME TEXT WITHOUT A PARAGRAPH MARK.
+ </div>
+ <div class="content">
+ <p><!--#include virtual="header.shtml"-->
+A PARAGRAPH WITH AN SSI STATEMENT INSIDE</p>
+ </div>
+ </body>
+</html>
+
diff --git a/t/fmt/xhtml/closing-tag.html b/t/fmt/xhtml/closing-tag.html
new file mode 100644
index 0000000..a67767e
--- /dev/null
+++ b/t/fmt/xhtml/closing-tag.html
@@ -0,0 +1,10 @@
+<!DOCTYPE html>
+<html lang="en" dir="ltr" xmlns="http://www.w3.org/1999/xhtml">
+<head>
+ <title>Video</title>
+</head>
+<body class="en">
+ <video width="640" height="360" poster="https://tails.boum.org/install/inc/videos/boot-menu-key.png">
+ <source src="https://tails.boum.org/install/inc/videos/boot-menu-key.webm" type="video/webm">
+ </video>
+</body> \ No newline at end of file
diff --git a/t/fmt/xhtml/closing-tag.norm b/t/fmt/xhtml/closing-tag.norm
new file mode 100644
index 0000000..a67767e
--- /dev/null
+++ b/t/fmt/xhtml/closing-tag.norm
@@ -0,0 +1,10 @@
+<!DOCTYPE html>
+<html lang="en" dir="ltr" xmlns="http://www.w3.org/1999/xhtml">
+<head>
+ <title>Video</title>
+</head>
+<body class="en">
+ <video width="640" height="360" poster="https://tails.boum.org/install/inc/videos/boot-menu-key.png">
+ <source src="https://tails.boum.org/install/inc/videos/boot-menu-key.webm" type="video/webm">
+ </video>
+</body> \ No newline at end of file
diff --git a/t/fmt/xhtml/closing-tag.po b/t/fmt/xhtml/closing-tag.po
new file mode 100644
index 0000000..32a0688
--- /dev/null
+++ b/t/fmt/xhtml/closing-tag.po
@@ -0,0 +1,27 @@
+# SOME DESCRIPTIVE TITLE
+# Copyright (C) YEAR Free Software Foundation, Inc.
+# This file is distributed under the same license as the PACKAGE package.
+# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
+#
+#, fuzzy
+msgid ""
+msgstr ""
+"Project-Id-Version: PACKAGE VERSION\n"
+"POT-Creation-Date: 2020-04-22 02:25+0200\n"
+"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
+"Language-Team: LANGUAGE <LL@li.org>\n"
+"Language: \n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+
+#. type: Attribute 'lang' of: <html>
+#: closing-tag.html:2
+msgid "en"
+msgstr "EN"
+
+#. type: Content of: <html><head><title>
+#: closing-tag.html:4
+msgid "Video"
+msgstr "VIDEO"
diff --git a/t/fmt/xhtml/closing-tag.pot b/t/fmt/xhtml/closing-tag.pot
new file mode 100644
index 0000000..dd59d7a
--- /dev/null
+++ b/t/fmt/xhtml/closing-tag.pot
@@ -0,0 +1,27 @@
+# SOME DESCRIPTIVE TITLE
+# Copyright (C) YEAR Free Software Foundation, Inc.
+# This file is distributed under the same license as the PACKAGE package.
+# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
+#
+#, fuzzy
+msgid ""
+msgstr ""
+"Project-Id-Version: PACKAGE VERSION\n"
+"POT-Creation-Date: 2020-04-22 02:25+0200\n"
+"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
+"Language-Team: LANGUAGE <LL@li.org>\n"
+"Language: \n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+
+#. type: Attribute 'lang' of: <html>
+#: closing-tag.html:2
+msgid "en"
+msgstr ""
+
+#. type: Content of: <html><head><title>
+#: closing-tag.html:4
+msgid "Video"
+msgstr ""
diff --git a/t/fmt/xhtml/closing-tag.trans b/t/fmt/xhtml/closing-tag.trans
new file mode 100644
index 0000000..f3534de
--- /dev/null
+++ b/t/fmt/xhtml/closing-tag.trans
@@ -0,0 +1,10 @@
+<!DOCTYPE html>
+<html lang="EN" dir="ltr" xmlns="http://www.w3.org/1999/xhtml">
+<head>
+ <title>VIDEO</title>
+</head>
+<body class="en">
+ <video width="640" height="360" poster="https://tails.boum.org/install/inc/videos/boot-menu-key.png">
+ <source src="https://tails.boum.org/install/inc/videos/boot-menu-key.webm" type="video/webm">
+ </video>
+</body> \ No newline at end of file
diff --git a/t/fmt/xhtml/includessi.desc b/t/fmt/xhtml/includessi.desc
new file mode 100644
index 0000000..4afe385
--- /dev/null
+++ b/t/fmt/xhtml/includessi.desc
@@ -0,0 +1 @@
+-o includessi
diff --git a/t/fmt/xhtml/includessi.html b/t/fmt/xhtml/includessi.html
new file mode 100644
index 0000000..c585502
--- /dev/null
+++ b/t/fmt/xhtml/includessi.html
@@ -0,0 +1,35 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+
+<html>
+ <head>
+ <!--#set var="BLAH" value="1" -->
+ <!--#include virtual="header.shtml"-->
+ <title>Title string</title>
+ </head>
+
+ <body>
+ <div class="content">
+ <h1>Header</h1>
+ <img src="somepicture.jpg" class="left"
+ alt="Some text" title="My picture" />
+
+ <p><strong>Strong</strong>not strong</p>
+ <p><strong>Another line</strong> with space and no closing.</p>
+ <p>
+ <a href="somelink.html">My link</a>,
+ <a href="nextline.html">link on next line</a>, <a href="sameline.html">line on same line</a>.
+ </p>
+
+ <img src="picture.jpg" alt="picture" />
+
+ and some text without a paragraph mark.
+ </div>
+ <div class="content">
+ <p>A paragraph with an
+ <!--#include virtual="header.shtml"-->
+ SSI statement inside</p>
+ </div>
+ </body>
+</html>
+
diff --git a/t/fmt/xhtml/includessi.norm b/t/fmt/xhtml/includessi.norm
new file mode 100644
index 0000000..6954544
--- /dev/null
+++ b/t/fmt/xhtml/includessi.norm
@@ -0,0 +1,33 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+
+<html>
+ <head>
+ <!--#set var="BLAH" value="1" --> <!--#include virtual="header.shtml"-->
+ <title>Title string</title>
+ </head>
+
+ <body>
+ <div class="content">
+ <h1>Header</h1>
+ <img src="somepicture.jpg" class="left"
+ alt="Some text" title="My picture" />
+
+ <p><strong>Strong</strong>not strong</p>
+ <p><strong>Another line</strong> with space and no closing.</p>
+ <p>
+ <a href="somelink.html">My link</a>, <a href="nextline.html">link on next
+line</a>, <a href="sameline.html">line on same line</a>.
+ </p>
+
+ <img src="picture.jpg" alt="picture" />
+
+ and some text without a paragraph mark.
+ </div>
+ <div class="content">
+ <p>A paragraph with an <!--#include virtual="header.shtml"--> SSI statement
+inside</p>
+ </div>
+ </body>
+</html>
+
diff --git a/t/fmt/xhtml/includessi.po b/t/fmt/xhtml/includessi.po
new file mode 100644
index 0000000..ca2fc9f
--- /dev/null
+++ b/t/fmt/xhtml/includessi.po
@@ -0,0 +1,84 @@
+# SOME DESCRIPTIVE TITLE
+# Copyright (C) YEAR Free Software Foundation, Inc.
+# This file is distributed under the same license as the PACKAGE package.
+# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
+#
+#, fuzzy
+msgid ""
+msgstr ""
+"Project-Id-Version: PACKAGE VERSION\n"
+"POT-Creation-Date: 2008-03-15 01:36+0100\n"
+"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
+"Language-Team: LANGUAGE <LL@li.org>\n"
+"Language: \n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+
+#. type: Content of: <html><head>
+#: includessi.html:6
+msgid ""
+"<!--#set var=\"BLAH\" value=\"1\" --> <!--#include "
+"virtual=\"header.shtml\"-->"
+msgstr ""
+"<!--#set var=\"BLAH\" value=\"1\" --> <!--#include "
+"virtual=\"HEADER.SHTML\"-->"
+
+#. type: Content of: <html><head><title>
+#: includessi.html:8
+msgid "Title string"
+msgstr "TITLE STRING"
+
+#. type: Content of: <html><body><div><h1>
+#: includessi.html:13
+msgid "Header"
+msgstr "HEADER"
+
+#. type: Attribute 'alt' of: <html><body><div><img>
+#: includessi.html:15
+msgid "Some text"
+msgstr "SOME TEXT"
+
+#. type: Attribute 'title' of: <html><body><div><img>
+#: includessi.html:15
+msgid "My picture"
+msgstr "MY PICTURE"
+
+#. type: Content of: <html><body><div><p>
+#: includessi.html:17
+msgid "<strong>Strong</strong>not strong"
+msgstr "<strong>STRONG</strong>NOT STRONG"
+
+#. type: Content of: <html><body><div><p>
+#: includessi.html:18
+msgid "<strong>Another line</strong> with space and no closing."
+msgstr "<strong>ANOTHER LINE</strong> WITH SPACE AND NO CLOSING."
+
+#. type: Content of: <html><body><div><p>
+#: includessi.html:20
+msgid ""
+"<a href=\"somelink.html\">My link</a>, <a href=\"nextline.html\">link on "
+"next line</a>, <a href=\"sameline.html\">line on same line</a>."
+msgstr ""
+"<a href=\"somelink.html\">MY LINK</a>, <a href=\"nextline.html\">LINK ON "
+"NEXT LINE</a>, <a href=\"sameline.html\">LINE ON SAME LINE</a>."
+
+#. type: Attribute 'alt' of: <html><body><div><img>
+#: includessi.html:24
+msgid "picture"
+msgstr "PICTURE"
+
+#. type: Content of: <html><body><div>
+#: includessi.html:26
+msgid "and some text without a paragraph mark."
+msgstr "AND SOME TEXT WITHOUT A PARAGRAPH MARK."
+
+#. type: Content of: <html><body><div><p>
+#: includessi.html:29
+msgid ""
+"A paragraph with an <!--#include virtual=\"header.shtml\"--> SSI statement "
+"inside"
+msgstr ""
+"A PARAGRAPH WITH AN <!--#include virtual=\"HEADER.SHTML\"--> SSI STATEMENT "
+"INSIDE"
diff --git a/t/fmt/xhtml/includessi.pot b/t/fmt/xhtml/includessi.pot
new file mode 100644
index 0000000..5b28adb
--- /dev/null
+++ b/t/fmt/xhtml/includessi.pot
@@ -0,0 +1,78 @@
+# SOME DESCRIPTIVE TITLE
+# Copyright (C) YEAR Free Software Foundation, Inc.
+# This file is distributed under the same license as the PACKAGE package.
+# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
+#
+#, fuzzy
+msgid ""
+msgstr ""
+"Project-Id-Version: PACKAGE VERSION\n"
+"POT-Creation-Date: 2008-03-15 01:36+0100\n"
+"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
+"Language-Team: LANGUAGE <LL@li.org>\n"
+"Language: \n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+
+#. type: Content of: <html><head>
+#: includessi.html:6
+msgid ""
+"<!--#set var=\"BLAH\" value=\"1\" --> <!--#include "
+"virtual=\"header.shtml\"-->"
+msgstr ""
+
+#. type: Content of: <html><head><title>
+#: includessi.html:8
+msgid "Title string"
+msgstr ""
+
+#. type: Content of: <html><body><div><h1>
+#: includessi.html:13
+msgid "Header"
+msgstr ""
+
+#. type: Attribute 'alt' of: <html><body><div><img>
+#: includessi.html:15
+msgid "Some text"
+msgstr ""
+
+#. type: Attribute 'title' of: <html><body><div><img>
+#: includessi.html:15
+msgid "My picture"
+msgstr ""
+
+#. type: Content of: <html><body><div><p>
+#: includessi.html:17
+msgid "<strong>Strong</strong>not strong"
+msgstr ""
+
+#. type: Content of: <html><body><div><p>
+#: includessi.html:18
+msgid "<strong>Another line</strong> with space and no closing."
+msgstr ""
+
+#. type: Content of: <html><body><div><p>
+#: includessi.html:20
+msgid ""
+"<a href=\"somelink.html\">My link</a>, <a href=\"nextline.html\">link on "
+"next line</a>, <a href=\"sameline.html\">line on same line</a>."
+msgstr ""
+
+#. type: Attribute 'alt' of: <html><body><div><img>
+#: includessi.html:24
+msgid "picture"
+msgstr ""
+
+#. type: Content of: <html><body><div>
+#: includessi.html:26
+msgid "and some text without a paragraph mark."
+msgstr ""
+
+#. type: Content of: <html><body><div><p>
+#: includessi.html:29
+msgid ""
+"A paragraph with an <!--#include virtual=\"header.shtml\"--> SSI statement "
+"inside"
+msgstr ""
diff --git a/t/fmt/xhtml/includessi.trans b/t/fmt/xhtml/includessi.trans
new file mode 100644
index 0000000..88ae965
--- /dev/null
+++ b/t/fmt/xhtml/includessi.trans
@@ -0,0 +1,33 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+
+<html>
+ <head>
+ <!--#set var="BLAH" value="1" --> <!--#include virtual="HEADER.SHTML"-->
+ <title>TITLE STRING</title>
+ </head>
+
+ <body>
+ <div class="content">
+ <h1>HEADER</h1>
+ <img src="somepicture.jpg" class="left"
+ alt="SOME TEXT" title="MY PICTURE" />
+
+ <p><strong>STRONG</strong>NOT STRONG</p>
+ <p><strong>ANOTHER LINE</strong> WITH SPACE AND NO CLOSING.</p>
+ <p>
+ <a href="somelink.html">MY LINK</a>, <a href="nextline.html">LINK ON NEXT
+LINE</a>, <a href="sameline.html">LINE ON SAME LINE</a>.
+ </p>
+
+ <img src="picture.jpg" alt="PICTURE" />
+
+ AND SOME TEXT WITHOUT A PARAGRAPH MARK.
+ </div>
+ <div class="content">
+ <p>A PARAGRAPH WITH AN <!--#include virtual="HEADER.SHTML"--> SSI STATEMENT
+INSIDE</p>
+ </div>
+ </body>
+</html>
+
diff --git a/t/fmt/xhtml/table.html b/t/fmt/xhtml/table.html
new file mode 100644
index 0000000..ae4be2d
--- /dev/null
+++ b/t/fmt/xhtml/table.html
@@ -0,0 +1,21 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html>
+ <head>
+ <title>Simple test table</title>
+ </head>
+
+ <body>
+ <table id="ref1">
+ <caption>The table caption</caption>
+ <colgroup>
+ <col id="group"/> <col id="code"/> <col id="params"/> <col id="description"/>
+ </colgroup>
+ <tbody>
+ <tr id="titlerow"> <th>Code </th><th>Parameters </th><th>Description </th></tr>
+ <tr><th>Group</th><td colspan="2">Group note</td></tr>
+ <tr><td>Term</td><td/><td>Description</td></tr>
+ </tbody>
+ </table>
+ </body>
+</html>
diff --git a/t/fmt/xhtml/table.norm b/t/fmt/xhtml/table.norm
new file mode 100644
index 0000000..ae4be2d
--- /dev/null
+++ b/t/fmt/xhtml/table.norm
@@ -0,0 +1,21 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html>
+ <head>
+ <title>Simple test table</title>
+ </head>
+
+ <body>
+ <table id="ref1">
+ <caption>The table caption</caption>
+ <colgroup>
+ <col id="group"/> <col id="code"/> <col id="params"/> <col id="description"/>
+ </colgroup>
+ <tbody>
+ <tr id="titlerow"> <th>Code </th><th>Parameters </th><th>Description </th></tr>
+ <tr><th>Group</th><td colspan="2">Group note</td></tr>
+ <tr><td>Term</td><td/><td>Description</td></tr>
+ </tbody>
+ </table>
+ </body>
+</html>
diff --git a/t/fmt/xhtml/table.po b/t/fmt/xhtml/table.po
new file mode 100644
index 0000000..a3960c4
--- /dev/null
+++ b/t/fmt/xhtml/table.po
@@ -0,0 +1,57 @@
+# SOME DESCRIPTIVE TITLE
+# Copyright (C) YEAR Free Software Foundation, Inc.
+# This file is distributed under the same license as the PACKAGE package.
+# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
+#
+#, fuzzy
+msgid ""
+msgstr ""
+"Project-Id-Version: PACKAGE VERSION\n"
+"POT-Creation-Date: 2022-07-09 09:42+0200\n"
+"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
+"Language-Team: LANGUAGE <LL@li.org>\n"
+"Language: \n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+
+#. type: Content of: <html><head><title>
+#: table.html:5
+msgid "Simple test table"
+msgstr "SIMPLE TEST TABLE"
+
+#. type: Content of: <html><body><table><caption>
+#: table.html:10
+msgid "The table caption"
+msgstr "THE TABLE CAPTION"
+
+#. type: Content of: <html><body><table><tbody><tr><th>
+#: table.html:15
+msgid "Code"
+msgstr "CODE"
+
+#. type: Content of: <html><body><table><tbody><tr><th>
+#: table.html:15
+msgid "Parameters"
+msgstr "PARAMETERS"
+
+#. type: Content of: <html><body><table><tbody><tr><td>
+#: table.html:15 table.html:17
+msgid "Description"
+msgstr "DESCRIPTION"
+
+#. type: Content of: <html><body><table><tbody><tr><th>
+#: table.html:16
+msgid "Group"
+msgstr "GROUP"
+
+#. type: Content of: <html><body><table><tbody><tr><td>
+#: table.html:16
+msgid "Group note"
+msgstr "GROUP NOTE"
+
+#. type: Content of: <html><body><table><tbody><tr><td>
+#: table.html:17
+msgid "Term"
+msgstr "TERM"
diff --git a/t/fmt/xhtml/table.pot b/t/fmt/xhtml/table.pot
new file mode 100644
index 0000000..129fd6f
--- /dev/null
+++ b/t/fmt/xhtml/table.pot
@@ -0,0 +1,57 @@
+# SOME DESCRIPTIVE TITLE
+# Copyright (C) YEAR Free Software Foundation, Inc.
+# This file is distributed under the same license as the PACKAGE package.
+# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
+#
+#, fuzzy
+msgid ""
+msgstr ""
+"Project-Id-Version: PACKAGE VERSION\n"
+"POT-Creation-Date: 2022-07-09 09:45+0200\n"
+"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
+"Language-Team: LANGUAGE <LL@li.org>\n"
+"Language: \n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+
+#. type: Content of: <html><head><title>
+#: table.html:5
+msgid "Simple test table"
+msgstr ""
+
+#. type: Content of: <html><body><table><caption>
+#: table.html:10
+msgid "The table caption"
+msgstr ""
+
+#. type: Content of: <html><body><table><tbody><tr><th>
+#: table.html:15
+msgid "Code"
+msgstr ""
+
+#. type: Content of: <html><body><table><tbody><tr><th>
+#: table.html:15
+msgid "Parameters"
+msgstr ""
+
+#. type: Content of: <html><body><table><tbody><tr><td>
+#: table.html:15 table.html:17
+msgid "Description"
+msgstr ""
+
+#. type: Content of: <html><body><table><tbody><tr><th>
+#: table.html:16
+msgid "Group"
+msgstr ""
+
+#. type: Content of: <html><body><table><tbody><tr><td>
+#: table.html:16
+msgid "Group note"
+msgstr ""
+
+#. type: Content of: <html><body><table><tbody><tr><td>
+#: table.html:17
+msgid "Term"
+msgstr ""
diff --git a/t/fmt/xhtml/table.trans b/t/fmt/xhtml/table.trans
new file mode 100644
index 0000000..3f1d490
--- /dev/null
+++ b/t/fmt/xhtml/table.trans
@@ -0,0 +1,21 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html>
+ <head>
+ <title>SIMPLE TEST TABLE</title>
+ </head>
+
+ <body>
+ <table id="ref1">
+ <caption>THE TABLE CAPTION</caption>
+ <colgroup>
+ <col id="group"/> <col id="code"/> <col id="params"/> <col id="description"/>
+ </colgroup>
+ <tbody>
+ <tr id="titlerow"> <th>CODE </th><th>PARAMETERS </th><th>DESCRIPTION </th></tr>
+ <tr><th>GROUP</th><td colspan="2">GROUP NOTE</td></tr>
+ <tr><td>TERM</td><td/><td>DESCRIPTION</td></tr>
+ </tbody>
+ </table>
+ </body>
+</html>
diff --git a/t/fmt/xml-dia/basic.dia b/t/fmt/xml-dia/basic.dia
new file mode 100644
index 0000000..bf1a892
--- /dev/null
+++ b/t/fmt/xml-dia/basic.dia
@@ -0,0 +1,3 @@
+<?xml version="1.0" encoding="UTF-8"?><dia:string>#Test
+string 1#</dia:string><dia:diagramdata><dia:string>#Test string 2#</dia:string><dia:string>#Test
+string 3#</dia:string><dia:string>#Test string 4#</dia:string></dia:diagramdata><dia:string>#Test string 5#</dia:string><dia:string>#Test string 6#</dia:string><dia:diagramdata><dia:string>#Test string 7#</dia:string></dia:diagramdata><dia:string>#Test string 8#</dia:string>
diff --git a/t/fmt/xml-dia/basic.norm b/t/fmt/xml-dia/basic.norm
new file mode 100644
index 0000000..bf1a892
--- /dev/null
+++ b/t/fmt/xml-dia/basic.norm
@@ -0,0 +1,3 @@
+<?xml version="1.0" encoding="UTF-8"?><dia:string>#Test
+string 1#</dia:string><dia:diagramdata><dia:string>#Test string 2#</dia:string><dia:string>#Test
+string 3#</dia:string><dia:string>#Test string 4#</dia:string></dia:diagramdata><dia:string>#Test string 5#</dia:string><dia:string>#Test string 6#</dia:string><dia:diagramdata><dia:string>#Test string 7#</dia:string></dia:diagramdata><dia:string>#Test string 8#</dia:string>
diff --git a/t/fmt/xml-dia/basic.po b/t/fmt/xml-dia/basic.po
new file mode 100644
index 0000000..2b003ee
--- /dev/null
+++ b/t/fmt/xml-dia/basic.po
@@ -0,0 +1,45 @@
+# SOME DESCRIPTIVE TITLE
+# Copyright (C) YEAR Free Software Foundation, Inc.
+# This file is distributed under the same license as the PACKAGE package.
+# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
+#
+#, fuzzy
+msgid ""
+msgstr ""
+"Project-Id-Version: PACKAGE VERSION\n"
+"POT-Creation-Date: 2004-05-22 12:39+0200\n"
+"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
+"Language-Team: LANGUAGE <LL@li.org>\n"
+"Language: \n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+
+#. type: String
+#: basic.dia:1
+#, no-wrap
+msgid ""
+"Test\n"
+"string 1"
+msgstr ""
+"TEST\n"
+"STRING 1"
+
+#. type: String
+#: basic.dia:3
+#, no-wrap
+msgid "Test string 5"
+msgstr "TEST STRING 5"
+
+#. type: String
+#: basic.dia:3
+#, no-wrap
+msgid "Test string 6"
+msgstr "TEST STRING 6"
+
+#. type: String
+#: basic.dia:3
+#, no-wrap
+msgid "Test string 8"
+msgstr "TEST STRING 8"
diff --git a/t/fmt/xml-dia/basic.pot b/t/fmt/xml-dia/basic.pot
new file mode 100644
index 0000000..627b5a7
--- /dev/null
+++ b/t/fmt/xml-dia/basic.pot
@@ -0,0 +1,43 @@
+# SOME DESCRIPTIVE TITLE
+# Copyright (C) YEAR Free Software Foundation, Inc.
+# This file is distributed under the same license as the PACKAGE package.
+# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
+#
+#, fuzzy
+msgid ""
+msgstr ""
+"Project-Id-Version: PACKAGE VERSION\n"
+"POT-Creation-Date: 2004-05-22 12:39+0200\n"
+"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
+"Language-Team: LANGUAGE <LL@li.org>\n"
+"Language: \n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+
+#. type: String
+#: basic.dia:1
+#, no-wrap
+msgid ""
+"Test\n"
+"string 1"
+msgstr ""
+
+#. type: String
+#: basic.dia:3
+#, no-wrap
+msgid "Test string 5"
+msgstr ""
+
+#. type: String
+#: basic.dia:3
+#, no-wrap
+msgid "Test string 6"
+msgstr ""
+
+#. type: String
+#: basic.dia:3
+#, no-wrap
+msgid "Test string 8"
+msgstr ""
diff --git a/t/fmt/xml-dia/basic.trans b/t/fmt/xml-dia/basic.trans
new file mode 100644
index 0000000..51905b0
--- /dev/null
+++ b/t/fmt/xml-dia/basic.trans
@@ -0,0 +1,3 @@
+<?xml version="1.0" encoding="UTF-8"?><dia:string>#TEST
+STRING 1#</dia:string><dia:diagramdata><dia:string>#Test string 2#</dia:string><dia:string>#Test
+string 3#</dia:string><dia:string>#Test string 4#</dia:string></dia:diagramdata><dia:string>#TEST STRING 5#</dia:string><dia:string>#TEST STRING 6#</dia:string><dia:diagramdata><dia:string>#Test string 7#</dia:string></dia:diagramdata><dia:string>#TEST STRING 8#</dia:string>
diff --git a/t/fmt/xml-dia/transl.dia b/t/fmt/xml-dia/transl.dia
new file mode 100644
index 0000000..752d754
--- /dev/null
+++ b/t/fmt/xml-dia/transl.dia
@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="UTF-8"?><dia:string>#First test string#</dia:string><dia:diagramdata><dia:string>#String not translateable#</dia:string></dia:diagramdata><dia:string>#Test string in
+two lines#</dia:string>
+ <dia:string>#Test string
+in three
+lines#</dia:string>
+ <dia:string>#Last test string#</dia:string>
diff --git a/t/fmt/xml-dia/transl.norm b/t/fmt/xml-dia/transl.norm
new file mode 100644
index 0000000..752d754
--- /dev/null
+++ b/t/fmt/xml-dia/transl.norm
@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="UTF-8"?><dia:string>#First test string#</dia:string><dia:diagramdata><dia:string>#String not translateable#</dia:string></dia:diagramdata><dia:string>#Test string in
+two lines#</dia:string>
+ <dia:string>#Test string
+in three
+lines#</dia:string>
+ <dia:string>#Last test string#</dia:string>
diff --git a/t/fmt/xml-dia/transl.po b/t/fmt/xml-dia/transl.po
new file mode 100644
index 0000000..8f54b58
--- /dev/null
+++ b/t/fmt/xml-dia/transl.po
@@ -0,0 +1,50 @@
+# SOME DESCRIPTIVE TITLE
+# Copyright (C) YEAR Free Software Foundation, Inc.
+# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
+#
+#, fuzzy
+msgid ""
+msgstr ""
+"Project-Id-Version: PACKAGE VERSION\n"
+"POT-Creation-Date: 2004-05-22 12:49+0200\n"
+"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
+"Language-Team: LANGUAGE <LL@li.org>\n"
+"Language: \n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+
+#. type: String
+#: transl.dia:1
+#, no-wrap
+msgid "First test string"
+msgstr "FIRST TEST STRING"
+
+#. type: String
+#: transl.dia:1
+#, no-wrap
+msgid ""
+"Test string in\n"
+"two lines"
+msgstr "TRANSLATED STRING IN ONE LINE"
+
+#. type: String
+#: transl.dia:3
+#, no-wrap
+msgid ""
+"Test string\n"
+"in three\n"
+"lines"
+msgstr ""
+"TRANSLATED STRING\n"
+"IN TWO LINES"
+
+#. type: String
+#: transl.dia:6
+#, no-wrap
+msgid "Last test string"
+msgstr ""
+"TRANSLATED STRING\n"
+"IN THREE\n"
+"LINES"
diff --git a/t/fmt/xml-dia/transl.pot b/t/fmt/xml-dia/transl.pot
new file mode 100644
index 0000000..0c97007
--- /dev/null
+++ b/t/fmt/xml-dia/transl.pot
@@ -0,0 +1,46 @@
+# SOME DESCRIPTIVE TITLE
+# Copyright (C) YEAR Free Software Foundation, Inc.
+# This file is distributed under the same license as the PACKAGE package.
+# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
+#
+#, fuzzy
+msgid ""
+msgstr ""
+"Project-Id-Version: PACKAGE VERSION\n"
+"POT-Creation-Date: 2020-04-24 11:19+0200\n"
+"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
+"Language-Team: LANGUAGE <LL@li.org>\n"
+"Language: \n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+
+#. type: String
+#: transl.dia:1
+#, no-wrap
+msgid "First test string"
+msgstr ""
+
+#. type: String
+#: transl.dia:1
+#, no-wrap
+msgid ""
+"Test string in\n"
+"two lines"
+msgstr ""
+
+#. type: String
+#: transl.dia:3
+#, no-wrap
+msgid ""
+"Test string\n"
+"in three\n"
+"lines"
+msgstr ""
+
+#. type: String
+#: transl.dia:6
+#, no-wrap
+msgid "Last test string"
+msgstr ""
diff --git a/t/fmt/xml-dia/transl.trans b/t/fmt/xml-dia/transl.trans
new file mode 100644
index 0000000..4816fd5
--- /dev/null
+++ b/t/fmt/xml-dia/transl.trans
@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="UTF-8"?><dia:string>#FIRST TEST STRING#</dia:string><dia:diagramdata><dia:string>#String not translateable#</dia:string></dia:diagramdata><dia:string>#TRANSLATED STRING IN ONE LINE#</dia:string>
+ <dia:string>#TRANSLATED STRING
+IN TWO LINES#</dia:string>
+ <dia:string>#TRANSLATED STRING
+IN THREE
+LINES#</dia:string>
diff --git a/t/fmt/xml/attribute-novalue.desc b/t/fmt/xml/attribute-novalue.desc
new file mode 100644
index 0000000..df7c5fe
--- /dev/null
+++ b/t/fmt/xml/attribute-novalue.desc
@@ -0,0 +1,2 @@
+# Test that XML allows attributes with no value when instructed to
+-o attributes='<video>text'
diff --git a/t/fmt/xml/attribute-novalue.norm b/t/fmt/xml/attribute-novalue.norm
new file mode 100644
index 0000000..975fc5f
--- /dev/null
+++ b/t/fmt/xml/attribute-novalue.norm
@@ -0,0 +1,8 @@
+<!-- po4a used to choke on '<video controls' tag, reporting Bad attribute syntax -->
+<!-- See also https://github.com/mquinson/po4a/issues/178 -->
+
+
+<?xml version='1.0' encoding="UTF-8"?>
+<doc>
+ <video controls text="some text to translate"/>
+</doc>
diff --git a/t/fmt/xml/attribute-novalue.po b/t/fmt/xml/attribute-novalue.po
new file mode 100644
index 0000000..7dcfa32
--- /dev/null
+++ b/t/fmt/xml/attribute-novalue.po
@@ -0,0 +1,22 @@
+# SOME DESCRIPTIVE TITLE
+# Copyright (C) YEAR Free Software Foundation, Inc.
+# This file is distributed under the same license as the PACKAGE package.
+# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
+#
+#, fuzzy
+msgid ""
+msgstr ""
+"Project-Id-Version: PACKAGE VERSION\n"
+"POT-Creation-Date: 2010-11-03 22:18+0100\n"
+"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
+"Language-Team: LANGUAGE <LL@li.org>\n"
+"Language: \n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+
+#. type: Attribute 'text' of: <doc><video>
+#: attribute-novalue.xml:5
+msgid "some text to translate"
+msgstr "SOME TEXT TO TRANSLATE"
diff --git a/t/fmt/xml/attribute-novalue.pot b/t/fmt/xml/attribute-novalue.pot
new file mode 100644
index 0000000..901afad
--- /dev/null
+++ b/t/fmt/xml/attribute-novalue.pot
@@ -0,0 +1,22 @@
+# SOME DESCRIPTIVE TITLE
+# Copyright (C) YEAR Free Software Foundation, Inc.
+# This file is distributed under the same license as the PACKAGE package.
+# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
+#
+#, fuzzy
+msgid ""
+msgstr ""
+"Project-Id-Version: PACKAGE VERSION\n"
+"POT-Creation-Date: 2010-11-03 22:18+0100\n"
+"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
+"Language-Team: LANGUAGE <LL@li.org>\n"
+"Language: \n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+
+#. type: Attribute 'text' of: <doc><video>
+#: attribute-novalue.xml:5
+msgid "some text to translate"
+msgstr ""
diff --git a/t/fmt/xml/attribute-novalue.trans b/t/fmt/xml/attribute-novalue.trans
new file mode 100644
index 0000000..4a0730c
--- /dev/null
+++ b/t/fmt/xml/attribute-novalue.trans
@@ -0,0 +1,8 @@
+<!-- po4a used to choke on '<video controls' tag, reporting Bad attribute syntax -->
+<!-- See also https://github.com/mquinson/po4a/issues/178 -->
+
+
+<?xml version='1.0' encoding="UTF-8"?>
+<doc>
+ <video controls text="SOME TEXT TO TRANSLATE"/>
+</doc>
diff --git a/t/fmt/xml/attribute-novalue.xml b/t/fmt/xml/attribute-novalue.xml
new file mode 100644
index 0000000..37c3922
--- /dev/null
+++ b/t/fmt/xml/attribute-novalue.xml
@@ -0,0 +1,6 @@
+<!-- po4a used to choke on '<video controls' tag, reporting Bad attribute syntax -->
+<!-- See also https://github.com/mquinson/po4a/issues/178 -->
+<?xml version='1.0' encoding="UTF-8"?>
+<doc>
+ <video controls text="some text to translate"/>
+</doc>
diff --git a/t/fmt/xml/basic.norm b/t/fmt/xml/basic.norm
new file mode 100644
index 0000000..cfbdd0e
--- /dev/null
+++ b/t/fmt/xml/basic.norm
@@ -0,0 +1,96 @@
+<?xml version='1.0' encoding="UTF-8"?>
+
+<!-- $Header: foo,v 1.1 2006/12/31 23:59:59 noone Exp $ -->
+
+
+<!DOCTYPE guide SYSTEM "/dtd/guide.dtd">
+
+<guide link="/links/link.xml">
+<title>A Guide</title>
+
+<author title="Author">
+ <mail link="first.mail.org">First Author</mail>
+</author>
+
+<abstract>
+An Abstract
+</abstract>
+
+<!-- The content of this document is licensed under the XXX license -->
+<!-- See bla bla -->
+
+
+<license/>
+
+<version>1.2</version>
+<date>2006-012-31</date>
+
+<chapter>
+<title>About foo</title>
+<section>
+<title>Fist Title</title>
+<body>
+
+<p>
+The <c>foo</c> is a <e>foo</e> foo. foo foo foo foo foo foo foo foo foo foo
+foo foo foo foo foo foo foo foo foo foo foo foo foo foo.
+</p>
+
+<p>
+bar bar foo bar bar bar foo bar bar bar foo bar bar bar foo bar bar bar foo
+bar. bar bar foo bar bar bar foo bar bar bar foo bar bar bar foo bar bar
+bar foo bar.
+</p>
+
+</body>
+</section>
+<section>
+<title>Second Title</title>
+<body>
+
+<p>
+bar bar foo bar bar bar foo bar bar bar foo bar bar bar foo bar bar bar foo
+bar. bar bar foo bar bar bar foo bar bar bar foo bar bar bar foo bar bar
+bar foo bar.
+</p>
+
+</body>
+</section>
+<section>
+<title>Third Title</title>
+<body>
+
+<p>
+<!--
+ Some comment that is added to the PO file
+-->
+bar bar foo bar bar bar foo bar bar bar foo bar bar bar foo bar bar bar foo
+bar. bar <brite>bar foo</brite> bar bar bar foo bar bar bar foo bar bar bar
+foo bar bar bar foo bar. The <path>file</path> foo.
+</p>
+
+<pre caption="My caption">
+a command
+verbatim
+text
+</pre>
+
+<!--
+ Another comment that is not added to the PO file
+-->
+
+<p>foo</p>
+
+<pre caption="My caption">
+a <i>command</i>
+ verbatim
+text
+toto <comment>tata tutu</comment>.
+titi
+</pre>
+
+</body>
+</section>
+</chapter>
+
+</guide>
diff --git a/t/fmt/xml/basic.po b/t/fmt/xml/basic.po
new file mode 100644
index 0000000..35549f9
--- /dev/null
+++ b/t/fmt/xml/basic.po
@@ -0,0 +1,161 @@
+# SOME DESCRIPTIVE TITLE
+# Copyright (C) YEAR Free Software Foundation, Inc.
+# This file is distributed under the same license as the PACKAGE package.
+# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
+#
+#, fuzzy
+msgid ""
+msgstr ""
+"Project-Id-Version: PACKAGE VERSION\n"
+"POT-Creation-Date: 2006-12-31 17:11+0100\n"
+"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
+"Language-Team: LANGUAGE <LL@li.org>\n"
+"Language: \n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+
+#. type: Attribute 'link' of: <guide>
+#: basic.xml:7
+msgid "/links/link.xml"
+msgstr ""
+
+#. type: Content of: <guide><title>
+#: basic.xml:8
+msgid "A Guide"
+msgstr "A GUIDE"
+
+#. type: Attribute 'title' of: <guide><author>
+#: basic.xml:10
+msgid "Author"
+msgstr "AUTHOR"
+
+#. type: Content of: <guide><author>
+#: basic.xml:11
+#, no-wrap
+msgid " <mail link=\"first.mail.org\">First Author</mail>\n"
+msgstr " <mail link=\"first.mail.org\">FIRST AUTHOR</mail>\n"
+
+#. type: Content of: <guide><abstract>
+#: basic.xml:15
+msgid "An Abstract"
+msgstr "AN ABSTRACT"
+
+#. type: Content of: <guide><version>
+#: basic.xml:23
+#, no-wrap
+msgid "1.2"
+msgstr "1.2"
+
+#. type: Content of: <guide><date>
+#: basic.xml:24
+#, no-wrap
+msgid "2006-012-31"
+msgstr ""
+
+#. type: Content of: <guide><chapter><title>
+#: basic.xml:27
+msgid "About foo"
+msgstr "ABOUT FOO"
+
+#. type: Content of: <guide><chapter><section><title>
+#: basic.xml:29
+msgid "Fist Title"
+msgstr "FIRST TITLE"
+
+#. type: Content of: <guide><chapter><section><body><p>
+#: basic.xml:33
+msgid ""
+"The <c>foo</c> is a <e>foo</e> foo. foo foo foo foo foo foo foo foo foo foo "
+"foo foo foo foo foo foo foo foo foo foo foo foo foo foo."
+msgstr ""
+"THE <c>FOO</c> IS A <e>FOO</e> FOO. FOO FOO FOO FOO FOO FOO FOO FOO FOO FOO "
+"FOO FOO FOO FOO FOO FOO FOO FOO FOO FOO FOO FOO FOO FOO."
+
+#. type: Content of: <guide><chapter><section><body><p>
+#: basic.xml:39 basic.xml:51
+msgid ""
+"bar bar foo bar bar bar foo bar bar bar foo bar bar bar foo bar bar bar foo "
+"bar. bar bar foo bar bar bar foo bar bar bar foo bar bar bar foo bar bar "
+"bar foo bar."
+msgstr ""
+"BAR BAR FOO BAR BAR BAR FOO BAR BAR BAR FOO BAR BAR BAR FOO BAR BAR BAR FOO "
+"BAR. BAR BAR FOO BAR BAR BAR FOO BAR BAR BAR FOO BAR BAR BAR FOO BAR BAR "
+"BAR FOO BAR."
+
+#. type: Content of: <guide><chapter><section><title>
+#: basic.xml:47
+msgid "Second Title"
+msgstr "SECOND TITLE"
+
+#. type: Content of: <guide><chapter><section><title>
+#: basic.xml:59
+msgid "Third Title"
+msgstr "THIRD TITLE"
+
+#
+#. Some comment that is added to the PO file
+#
+#. type: Content of: <guide><chapter><section><body><p>
+#: basic.xml:63
+msgid ""
+"bar bar foo bar bar bar foo bar bar bar foo bar bar bar foo bar bar bar foo "
+"bar. bar <brite>bar foo</brite> bar bar bar foo bar bar bar foo bar bar bar "
+"foo bar bar bar foo bar. The <path>file</path> foo."
+msgstr ""
+"BAR BAR FOO BAR BAR BAR FOO BAR BAR BAR FOO BAR BAR BAR FOO BAR BAR BAR FOO "
+"BAR. BAR <brite>BAR FOO</brite> BAR BAR BAR FOO BAR BAR BAR FOO BAR BAR BAR "
+"FOO BAR BAR BAR FOO BAR. THE <path>FILE</path> FOO."
+
+#. type: Attribute 'caption' of: <guide><chapter><section><body><pre>
+#: basic.xml:71 basic.xml:82
+msgid "My caption"
+msgstr "MY CAPTION"
+
+#. type: Content of: <guide><chapter><section><body><pre>
+#: basic.xml:72
+#, no-wrap
+msgid ""
+"a command\n"
+"verbatim\n"
+"text\n"
+msgstr ""
+"A COMMAND\n"
+"VERBATIM\n"
+"TEXT\n"
+
+#. type: Content of: <guide><chapter><section><body><p>
+#: basic.xml:80
+msgid "foo"
+msgstr "FOO"
+
+#. type: Content of: <guide><chapter><section><body><pre>
+#: basic.xml:83
+#, no-wrap
+msgid ""
+"a <i>command</i>\n"
+" verbatim\n"
+"text\n"
+"toto "
+msgstr ""
+"A <i>COMMAND</i>\n"
+" VERBATIM\n"
+"TEXT\n"
+"TOTO "
+
+#. type: Content of: <guide><chapter><section><body><pre><comment>
+#: basic.xml:86
+#, no-wrap
+msgid "tata tutu"
+msgstr "TATA TUTU"
+
+#. type: Content of: <guide><chapter><section><body><pre>
+#: basic.xml:86
+#, no-wrap
+msgid ""
+".\n"
+"titi\n"
+msgstr ""
+".\n"
+"TITI\n"
diff --git a/t/fmt/xml/basic.pot b/t/fmt/xml/basic.pot
new file mode 100644
index 0000000..5afe2fb
--- /dev/null
+++ b/t/fmt/xml/basic.pot
@@ -0,0 +1,144 @@
+# SOME DESCRIPTIVE TITLE
+# Copyright (C) YEAR Free Software Foundation, Inc.
+# This file is distributed under the same license as the PACKAGE package.
+# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
+#
+#, fuzzy
+msgid ""
+msgstr ""
+"Project-Id-Version: PACKAGE VERSION\n"
+"POT-Creation-Date: 2006-12-31 17:11+0100\n"
+"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
+"Language-Team: LANGUAGE <LL@li.org>\n"
+"Language: \n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+
+#. type: Attribute 'link' of: <guide>
+#: basic.xml:7
+msgid "/links/link.xml"
+msgstr ""
+
+#. type: Content of: <guide><title>
+#: basic.xml:8
+msgid "A Guide"
+msgstr ""
+
+#. type: Attribute 'title' of: <guide><author>
+#: basic.xml:10
+msgid "Author"
+msgstr ""
+
+#. type: Content of: <guide><author>
+#: basic.xml:11
+#, no-wrap
+msgid " <mail link=\"first.mail.org\">First Author</mail>\n"
+msgstr ""
+
+#. type: Content of: <guide><abstract>
+#: basic.xml:15
+msgid "An Abstract"
+msgstr ""
+
+#. type: Content of: <guide><version>
+#: basic.xml:23
+#, no-wrap
+msgid "1.2"
+msgstr ""
+
+#. type: Content of: <guide><date>
+#: basic.xml:24
+#, no-wrap
+msgid "2006-012-31"
+msgstr ""
+
+#. type: Content of: <guide><chapter><title>
+#: basic.xml:27
+msgid "About foo"
+msgstr ""
+
+#. type: Content of: <guide><chapter><section><title>
+#: basic.xml:29
+msgid "Fist Title"
+msgstr ""
+
+#. type: Content of: <guide><chapter><section><body><p>
+#: basic.xml:33
+msgid ""
+"The <c>foo</c> is a <e>foo</e> foo. foo foo foo foo foo foo foo foo foo foo "
+"foo foo foo foo foo foo foo foo foo foo foo foo foo foo."
+msgstr ""
+
+#. type: Content of: <guide><chapter><section><body><p>
+#: basic.xml:39 basic.xml:51
+msgid ""
+"bar bar foo bar bar bar foo bar bar bar foo bar bar bar foo bar bar bar foo "
+"bar. bar bar foo bar bar bar foo bar bar bar foo bar bar bar foo bar bar "
+"bar foo bar."
+msgstr ""
+
+#. type: Content of: <guide><chapter><section><title>
+#: basic.xml:47
+msgid "Second Title"
+msgstr ""
+
+#. type: Content of: <guide><chapter><section><title>
+#: basic.xml:59
+msgid "Third Title"
+msgstr ""
+
+#
+#. Some comment that is added to the PO file
+#
+#. type: Content of: <guide><chapter><section><body><p>
+#: basic.xml:63
+msgid ""
+"bar bar foo bar bar bar foo bar bar bar foo bar bar bar foo bar bar bar foo "
+"bar. bar <brite>bar foo</brite> bar bar bar foo bar bar bar foo bar bar bar "
+"foo bar bar bar foo bar. The <path>file</path> foo."
+msgstr ""
+
+#. type: Attribute 'caption' of: <guide><chapter><section><body><pre>
+#: basic.xml:71 basic.xml:82
+msgid "My caption"
+msgstr ""
+
+#. type: Content of: <guide><chapter><section><body><pre>
+#: basic.xml:72
+#, no-wrap
+msgid ""
+"a command\n"
+"verbatim\n"
+"text\n"
+msgstr ""
+
+#. type: Content of: <guide><chapter><section><body><p>
+#: basic.xml:80
+msgid "foo"
+msgstr ""
+
+#. type: Content of: <guide><chapter><section><body><pre>
+#: basic.xml:83
+#, no-wrap
+msgid ""
+"a <i>command</i>\n"
+" verbatim\n"
+"text\n"
+"toto "
+msgstr ""
+
+#. type: Content of: <guide><chapter><section><body><pre><comment>
+#: basic.xml:86
+#, no-wrap
+msgid "tata tutu"
+msgstr ""
+
+#. type: Content of: <guide><chapter><section><body><pre>
+#: basic.xml:86
+#, no-wrap
+msgid ""
+".\n"
+"titi\n"
+msgstr ""
diff --git a/t/fmt/xml/basic.trans b/t/fmt/xml/basic.trans
new file mode 100644
index 0000000..a7b5fbc
--- /dev/null
+++ b/t/fmt/xml/basic.trans
@@ -0,0 +1,96 @@
+<?xml version='1.0' encoding="UTF-8"?>
+
+<!-- $Header: foo,v 1.1 2006/12/31 23:59:59 noone Exp $ -->
+
+
+<!DOCTYPE guide SYSTEM "/dtd/guide.dtd">
+
+<guide link="/links/link.xml">
+<title>A GUIDE</title>
+
+<author title="AUTHOR">
+ <mail link="first.mail.org">FIRST AUTHOR</mail>
+</author>
+
+<abstract>
+AN ABSTRACT
+</abstract>
+
+<!-- The content of this document is licensed under the XXX license -->
+<!-- See bla bla -->
+
+
+<license/>
+
+<version>1.2</version>
+<date>2006-012-31</date>
+
+<chapter>
+<title>ABOUT FOO</title>
+<section>
+<title>FIRST TITLE</title>
+<body>
+
+<p>
+THE <c>FOO</c> IS A <e>FOO</e> FOO. FOO FOO FOO FOO FOO FOO FOO FOO FOO FOO
+FOO FOO FOO FOO FOO FOO FOO FOO FOO FOO FOO FOO FOO FOO.
+</p>
+
+<p>
+BAR BAR FOO BAR BAR BAR FOO BAR BAR BAR FOO BAR BAR BAR FOO BAR BAR BAR FOO
+BAR. BAR BAR FOO BAR BAR BAR FOO BAR BAR BAR FOO BAR BAR BAR FOO BAR BAR
+BAR FOO BAR.
+</p>
+
+</body>
+</section>
+<section>
+<title>SECOND TITLE</title>
+<body>
+
+<p>
+BAR BAR FOO BAR BAR BAR FOO BAR BAR BAR FOO BAR BAR BAR FOO BAR BAR BAR FOO
+BAR. BAR BAR FOO BAR BAR BAR FOO BAR BAR BAR FOO BAR BAR BAR FOO BAR BAR
+BAR FOO BAR.
+</p>
+
+</body>
+</section>
+<section>
+<title>THIRD TITLE</title>
+<body>
+
+<p>
+<!--
+ Some comment that is added to the PO file
+-->
+BAR BAR FOO BAR BAR BAR FOO BAR BAR BAR FOO BAR BAR BAR FOO BAR BAR BAR FOO
+BAR. BAR <brite>BAR FOO</brite> BAR BAR BAR FOO BAR BAR BAR FOO BAR BAR BAR
+FOO BAR BAR BAR FOO BAR. THE <path>FILE</path> FOO.
+</p>
+
+<pre caption="MY CAPTION">
+A COMMAND
+VERBATIM
+TEXT
+</pre>
+
+<!--
+ Another comment that is not added to the PO file
+-->
+
+<p>FOO</p>
+
+<pre caption="MY CAPTION">
+A <i>COMMAND</i>
+ VERBATIM
+TEXT
+TOTO <comment>TATA TUTU</comment>.
+TITI
+</pre>
+
+</body>
+</section>
+</chapter>
+
+</guide>
diff --git a/t/fmt/xml/basic.xml b/t/fmt/xml/basic.xml
new file mode 100644
index 0000000..61998b7
--- /dev/null
+++ b/t/fmt/xml/basic.xml
@@ -0,0 +1,94 @@
+<?xml version='1.0' encoding="UTF-8"?>
+
+<!-- $Header: foo,v 1.1 2006/12/31 23:59:59 noone Exp $ -->
+
+<!DOCTYPE guide SYSTEM "/dtd/guide.dtd">
+
+<guide link="/links/link.xml">
+<title>A Guide</title>
+
+<author title="Author">
+ <mail link="first.mail.org">First Author</mail>
+</author>
+
+<abstract>
+An
+Abstract
+</abstract>
+
+<!-- The content of this document is licensed under the XXX license -->
+<!-- See bla bla -->
+<license/>
+
+<version>1.2</version>
+<date>2006-012-31</date>
+
+<chapter>
+<title>About foo</title>
+<section>
+<title>Fist Title</title>
+<body>
+
+<p>
+The <c>foo</c> is a <e>foo</e> foo.
+foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo
+foo foo foo foo foo foo.
+</p>
+
+<p>
+bar bar foo bar bar bar foo bar bar bar foo bar bar bar foo bar bar bar
+foo bar. bar bar foo bar bar bar foo bar bar bar foo bar bar bar foo bar
+bar bar foo bar.
+</p>
+
+</body>
+</section>
+<section>
+<title>Second Title</title>
+<body>
+
+<p>
+bar bar foo bar bar bar foo bar bar bar foo bar bar bar foo bar bar bar
+foo bar. bar bar foo bar bar bar foo bar bar bar foo bar bar bar foo bar
+bar bar foo bar.
+</p>
+
+</body>
+</section>
+<section>
+<title>Third Title</title>
+<body>
+
+<p>
+bar bar foo bar bar bar foo bar bar bar foo bar bar bar foo bar bar bar
+foo bar. bar <brite>bar foo</brite> bar bar bar foo bar bar bar foo bar bar bar foo bar
+<!--
+ Some comment that is added to the PO file
+-->
+bar bar foo bar. The <path>file</path> foo.
+</p>
+
+<pre caption="My caption">
+a command
+verbatim
+text
+</pre>
+
+<!--
+ Another comment that is not added to the PO file
+-->
+<p>foo</p>
+
+<pre caption="My caption">
+a <i>command</i>
+ verbatim
+text
+toto <comment>tata tutu</comment>.
+titi
+</pre>
+
+</body>
+</section>
+</chapter>
+
+</guide>
diff --git a/t/fmt/xml/cdata.norm b/t/fmt/xml/cdata.norm
new file mode 100644
index 0000000..58f3fb8
--- /dev/null
+++ b/t/fmt/xml/cdata.norm
@@ -0,0 +1,9 @@
+<?xml version='1.0' encoding="UTF-8"?>
+<doc>
+ <foo>brackets ]] inside a tag </foo>
+ <![CDATA[Example on a single line]]>
+ <![CDATA[
+Example on
+multiple lines
+]]>
+</doc>
diff --git a/t/fmt/xml/cdata.po b/t/fmt/xml/cdata.po
new file mode 100644
index 0000000..276e5a0
--- /dev/null
+++ b/t/fmt/xml/cdata.po
@@ -0,0 +1,39 @@
+# SOME DESCRIPTIVE TITLE
+# Copyright (C) YEAR Free Software Foundation, Inc.
+# This file is distributed under the same license as the PACKAGE package.
+# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
+#
+#, fuzzy
+msgid ""
+msgstr ""
+"Project-Id-Version: PACKAGE VERSION\n"
+"POT-Creation-Date: 2010-11-03 22:18+0100\n"
+"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
+"Language-Team: LANGUAGE <LL@li.org>\n"
+"Language: \n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+
+#. type: Content of: <doc><foo>
+#: cdata.xml:3
+#, no-wrap
+msgid "brackets ]] inside a tag "
+msgstr "BRACKETS ]] INSIDE A TAG "
+
+#. type: CDATA
+#: cdata.xml:4
+#, no-wrap
+msgid "Example on a single line"
+msgstr "EXAMPLE ON A SINGLE LINE"
+
+#. type: CDATA
+#: cdata.xml:5
+#, no-wrap
+msgid ""
+"Example on\n"
+"multiple lines\n"
+msgstr ""
+"EXAMPLE ON\n"
+"MULTIPLE LINES\n"
diff --git a/t/fmt/xml/cdata.pot b/t/fmt/xml/cdata.pot
new file mode 100644
index 0000000..a1ac962
--- /dev/null
+++ b/t/fmt/xml/cdata.pot
@@ -0,0 +1,37 @@
+# SOME DESCRIPTIVE TITLE
+# Copyright (C) YEAR Free Software Foundation, Inc.
+# This file is distributed under the same license as the PACKAGE package.
+# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
+#
+#, fuzzy
+msgid ""
+msgstr ""
+"Project-Id-Version: PACKAGE VERSION\n"
+"POT-Creation-Date: 2010-11-03 22:18+0100\n"
+"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
+"Language-Team: LANGUAGE <LL@li.org>\n"
+"Language: \n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+
+#. type: Content of: <doc><foo>
+#: cdata.xml:3
+#, no-wrap
+msgid "brackets ]] inside a tag "
+msgstr ""
+
+#. type: CDATA
+#: cdata.xml:4
+#, no-wrap
+msgid "Example on a single line"
+msgstr ""
+
+#. type: CDATA
+#: cdata.xml:5
+#, no-wrap
+msgid ""
+"Example on\n"
+"multiple lines\n"
+msgstr ""
diff --git a/t/fmt/xml/cdata.trans b/t/fmt/xml/cdata.trans
new file mode 100644
index 0000000..b827144
--- /dev/null
+++ b/t/fmt/xml/cdata.trans
@@ -0,0 +1,9 @@
+<?xml version='1.0' encoding="UTF-8"?>
+<doc>
+ <foo>BRACKETS ]] INSIDE A TAG </foo>
+ <![CDATA[EXAMPLE ON A SINGLE LINE]]>
+ <![CDATA[
+EXAMPLE ON
+MULTIPLE LINES
+]]>
+</doc>
diff --git a/t/fmt/xml/cdata.xml b/t/fmt/xml/cdata.xml
new file mode 100644
index 0000000..58f3fb8
--- /dev/null
+++ b/t/fmt/xml/cdata.xml
@@ -0,0 +1,9 @@
+<?xml version='1.0' encoding="UTF-8"?>
+<doc>
+ <foo>brackets ]] inside a tag </foo>
+ <![CDATA[Example on a single line]]>
+ <![CDATA[
+Example on
+multiple lines
+]]>
+</doc>
diff --git a/t/fmt/xml/comments.norm b/t/fmt/xml/comments.norm
new file mode 100644
index 0000000..7388505
--- /dev/null
+++ b/t/fmt/xml/comments.norm
@@ -0,0 +1,21 @@
+<?xml version='1.0' encoding="UTF-8"?>
+ <p>
+
+
+ <!-- first comment -->
+<!-- second comment
+ multiline -->
+<!-- comment inside the paragraph -->
+<!-- comment after the paragraph -->
+paragraph foo bar bar qux
+
+ </p>
+
+<pre>
+<!-- comment pre -->
+a command
+
+verbatim
+text
+</pre>
+
diff --git a/t/fmt/xml/comments.po b/t/fmt/xml/comments.po
new file mode 100644
index 0000000..d5e82e0
--- /dev/null
+++ b/t/fmt/xml/comments.po
@@ -0,0 +1,42 @@
+# SOME DESCRIPTIVE TITLE
+# Copyright (C) YEAR Free Software Foundation, Inc.
+# This file is distributed under the same license as the PACKAGE package.
+# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
+#
+#, fuzzy
+msgid ""
+msgstr ""
+"Project-Id-Version: PACKAGE VERSION\n"
+"POT-Creation-Date: 2008-02-29 22:20+0100\n"
+"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
+"Language-Team: LANGUAGE <LL@li.org>\n"
+"Language: \n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+
+#. first comment
+#. second comment
+#. multiline
+#. comment inside the paragraph
+#. comment after the paragraph
+#. type: Content of: <p>
+#: comments.xml:6
+msgid "paragraph foo bar bar qux"
+msgstr "PARAGRAPH FOO BAR BAR QUX"
+
+#. comment pre
+#. type: Content of: <pre>
+#: comments.xml:14
+#, no-wrap
+msgid ""
+"a command\n"
+" \n"
+"verbatim\n"
+"text\n"
+msgstr ""
+"A COMMAND\n"
+" \n"
+"VERBATIM\n"
+"TEXT\n"
diff --git a/t/fmt/xml/comments.pot b/t/fmt/xml/comments.pot
new file mode 100644
index 0000000..cde411a
--- /dev/null
+++ b/t/fmt/xml/comments.pot
@@ -0,0 +1,38 @@
+# SOME DESCRIPTIVE TITLE
+# Copyright (C) YEAR Free Software Foundation, Inc.
+# This file is distributed under the same license as the PACKAGE package.
+# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
+#
+#, fuzzy
+msgid ""
+msgstr ""
+"Project-Id-Version: PACKAGE VERSION\n"
+"POT-Creation-Date: 2008-02-29 22:20+0100\n"
+"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
+"Language-Team: LANGUAGE <LL@li.org>\n"
+"Language: \n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+
+#. first comment
+#. second comment
+#. multiline
+#. comment inside the paragraph
+#. comment after the paragraph
+#. type: Content of: <p>
+#: comments.xml:6
+msgid "paragraph foo bar bar qux"
+msgstr ""
+
+#. comment pre
+#. type: Content of: <pre>
+#: comments.xml:14
+#, no-wrap
+msgid ""
+"a command\n"
+" \n"
+"verbatim\n"
+"text\n"
+msgstr ""
diff --git a/t/fmt/xml/comments.trans b/t/fmt/xml/comments.trans
new file mode 100644
index 0000000..89440b6
--- /dev/null
+++ b/t/fmt/xml/comments.trans
@@ -0,0 +1,21 @@
+<?xml version='1.0' encoding="UTF-8"?>
+ <p>
+
+
+ <!-- first comment -->
+<!-- second comment
+ multiline -->
+<!-- comment inside the paragraph -->
+<!-- comment after the paragraph -->
+PARAGRAPH FOO BAR BAR QUX
+
+ </p>
+
+<pre>
+<!-- comment pre -->
+A COMMAND
+
+VERBATIM
+TEXT
+</pre>
+
diff --git a/t/fmt/xml/comments.xml b/t/fmt/xml/comments.xml
new file mode 100644
index 0000000..c5dc7b4
--- /dev/null
+++ b/t/fmt/xml/comments.xml
@@ -0,0 +1,19 @@
+<?xml version='1.0' encoding="UTF-8"?>
+ <p>
+ <!-- first comment -->
+ <!-- second comment
+ multiline -->
+ paragraph foo
+ bar
+ <!-- comment inside the paragraph -->
+ bar qux
+ <!-- comment after the paragraph -->
+ </p>
+
+<pre>
+a command
+ <!-- comment pre -->
+verbatim
+text
+</pre>
+
diff --git a/t/fmt/xml/inside-foldattribute.norm b/t/fmt/xml/inside-foldattribute.norm
new file mode 100644
index 0000000..312f4b5
--- /dev/null
+++ b/t/fmt/xml/inside-foldattribute.norm
@@ -0,0 +1,8 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<doc>
+ <p>
+ Here I put an image.
+ <image src="path/to/image.png" alt="This information is important for blind users." />
+ If the image is not shown, please see the alternative text.
+ </p>
+</doc>
diff --git a/t/fmt/xml/inside-foldattribute.po b/t/fmt/xml/inside-foldattribute.po
new file mode 100644
index 0000000..668d2a4
--- /dev/null
+++ b/t/fmt/xml/inside-foldattribute.po
@@ -0,0 +1,35 @@
+# SOME DESCRIPTIVE TITLE
+# Copyright (C) YEAR Free Software Foundation, Inc.
+# This file is distributed under the same license as the PACKAGE package.
+# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
+#
+#, fuzzy
+msgid ""
+msgstr ""
+"Project-Id-Version: PACKAGE VERSION\n"
+"POT-Creation-Date: 2022-12-27 15:50+0100\n"
+"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
+"Language-Team: LANGUAGE <LL@li.org>\n"
+"Language: \n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+
+#. type: Attribute 'alt' of: <doc><p><image>
+msgid "This information is important for blind users."
+msgstr "tHIS INFORMATION IS IMPORTANT FOR BLIND USERS."
+
+#. type: Content of: <doc><p>
+#: inside-foldattribute.xml:4
+#, no-wrap
+msgid ""
+" Here I put an image.\n"
+" <image po4a-id=0>\n"
+" If the image is not shown, please see the alternative text.\n"
+" "
+msgstr ""
+" hERE i PUT AN IMAGE.\n"
+" <image po4a-id=0>\n"
+" iF THE IMAGE IS NOT SHOWN, PLEASE SEE THE ALTERNATIVE TEXT.\n"
+" "
diff --git a/t/fmt/xml/inside-foldattribute.pot b/t/fmt/xml/inside-foldattribute.pot
new file mode 100644
index 0000000..a2eb8da
--- /dev/null
+++ b/t/fmt/xml/inside-foldattribute.pot
@@ -0,0 +1,31 @@
+# SOME DESCRIPTIVE TITLE
+# Copyright (C) YEAR Free Software Foundation, Inc.
+# This file is distributed under the same license as the PACKAGE package.
+# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
+#
+#, fuzzy
+msgid ""
+msgstr ""
+"Project-Id-Version: PACKAGE VERSION\n"
+"POT-Creation-Date: 2022-12-27 15:50+0100\n"
+"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
+"Language-Team: LANGUAGE <LL@li.org>\n"
+"Language: \n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+
+#. type: Attribute 'alt' of: <doc><p><image>
+msgid "This information is important for blind users."
+msgstr ""
+
+#. type: Content of: <doc><p>
+#: inside-foldattribute.xml:4
+#, no-wrap
+msgid ""
+" Here I put an image.\n"
+" <image po4a-id=0>\n"
+" If the image is not shown, please see the alternative text.\n"
+" "
+msgstr ""
diff --git a/t/fmt/xml/inside-foldattribute.trans b/t/fmt/xml/inside-foldattribute.trans
new file mode 100644
index 0000000..c32ce45
--- /dev/null
+++ b/t/fmt/xml/inside-foldattribute.trans
@@ -0,0 +1,8 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<doc>
+ <p>
+ hERE i PUT AN IMAGE.
+ <image src="path/to/image.png" alt="tHIS INFORMATION IS IMPORTANT FOR BLIND USERS." />
+ iF THE IMAGE IS NOT SHOWN, PLEASE SEE THE ALTERNATIVE TEXT.
+ </p>
+</doc>
diff --git a/t/fmt/xml/inside-foldattribute.xml b/t/fmt/xml/inside-foldattribute.xml
new file mode 100644
index 0000000..f330c0b
--- /dev/null
+++ b/t/fmt/xml/inside-foldattribute.xml
@@ -0,0 +1,8 @@
+<?xml version="1.0" encoding="utf-8"?>
+<doc>
+ <p>
+ Here I put an image.
+ <image src="path/to/image.png" alt="This information is important for blind users." />
+ If the image is not shown, please see the alternative text.
+ </p>
+</doc>
diff --git a/t/fmt/xml/options.desc b/t/fmt/xml/options.desc
new file mode 100644
index 0000000..6e06af9
--- /dev/null
+++ b/t/fmt/xml/options.desc
@@ -0,0 +1 @@
+-o translated='w<translate1w> W<translate2W> <translate5> i<inline6> ' -o untranslated='<untranslated4>'
diff --git a/t/fmt/xml/options.norm b/t/fmt/xml/options.norm
new file mode 100644
index 0000000..1f601bc
--- /dev/null
+++ b/t/fmt/xml/options.norm
@@ -0,0 +1,31 @@
+<?xml version='1.0' encoding="UTF-8"?>
+ <translate1w>
+ foo bar translate1w
+ </translate1w>
+ <translate2W>
+ foo bar translate2W
+ </translate2W>
+ <default3>
+ foo bar default3
+ </default3>
+ <untranslated4>
+ foo bar untranslated4
+ </untranslated4>
+ <untranslated4>
+ foo bar untranslated4
+ <translate5>
+ foo bar translate5
+ </translate5>
+ </untranslated4>
+ <translate2W>
+ foo bar translate2W <inline6>foo bar inline6</inline6>
+ </translate2W>
+ <translate2W>
+ <inline6>foo bar inline6</inline6>
+ </translate2W>
+ <translate1w>
+ foo bar translate1w <inline6>foo bar inline6</inline6>
+ </translate1w>
+ <translate1w>
+ <inline6>foo bar inline6</inline6>
+ </translate1w>
diff --git a/t/fmt/xml/options.po b/t/fmt/xml/options.po
new file mode 100644
index 0000000..667a0bc
--- /dev/null
+++ b/t/fmt/xml/options.po
@@ -0,0 +1,82 @@
+# SOME DESCRIPTIVE TITLE
+# Copyright (C) YEAR Free Software Foundation, Inc.
+# This file is distributed under the same license as the PACKAGE package.
+# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
+#
+#, fuzzy
+msgid ""
+msgstr ""
+"Project-Id-Version: PACKAGE VERSION\n"
+"POT-Creation-Date: 2008-03-02 14:56+0100\n"
+"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
+"Language-Team: LANGUAGE <LL@li.org>\n"
+"Language: \n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+
+#. type: Content of: <translate1w>
+#: options.xml:3
+msgid "foo bar translate1w"
+msgstr "FOO BAR TRANSLATE1W"
+
+#. type: Content of: <translate2W>
+#: options.xml:6
+#, no-wrap
+msgid ""
+" foo bar translate2W\n"
+" "
+msgstr ""
+" FOO BAR TRANSLATE2W\n"
+" "
+
+#. type: Content of: <default3>
+#: options.xml:9
+#, no-wrap
+msgid ""
+" foo bar default3\n"
+" "
+msgstr ""
+" FOO BAR DEFAULT3\n"
+" "
+
+#. type: Content of: <untranslated4><translate5>
+#: options.xml:17
+#, no-wrap
+msgid ""
+" foo bar translate5\n"
+" "
+msgstr ""
+" FOO BAR TRANSLATE5\n"
+" "
+
+#. type: Content of: <translate2W>
+#: options.xml:21
+#, no-wrap
+msgid ""
+" foo bar translate2W <inline6>foo bar inline6</inline6>\n"
+" "
+msgstr ""
+" FOO BAR TRANSLATE2W <inline6>FOO BAR INLINE6</inline6>\n"
+" "
+
+#. type: Content of: <translate2W>
+#: options.xml:24
+#, no-wrap
+msgid ""
+" <inline6>foo bar inline6</inline6>\n"
+" "
+msgstr ""
+" <inline6>FOO BAR INLINE6</inline6>\n"
+" "
+
+#. type: Content of: <translate1w>
+#: options.xml:27
+msgid "foo bar translate1w <inline6>foo bar inline6</inline6>"
+msgstr "FOO BAR TRANSLATE1W <inline6>FOO BAR INLINE6</inline6>"
+
+#. type: Content of: <translate1w>
+#: options.xml:30
+msgid "<inline6>foo bar inline6</inline6>"
+msgstr "<inline6>FOO BAR INLINE6</inline6>"
diff --git a/t/fmt/xml/options.pot b/t/fmt/xml/options.pot
new file mode 100644
index 0000000..61399de
--- /dev/null
+++ b/t/fmt/xml/options.pot
@@ -0,0 +1,72 @@
+# SOME DESCRIPTIVE TITLE
+# Copyright (C) YEAR Free Software Foundation, Inc.
+# This file is distributed under the same license as the PACKAGE package.
+# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
+#
+#, fuzzy
+msgid ""
+msgstr ""
+"Project-Id-Version: PACKAGE VERSION\n"
+"POT-Creation-Date: 2008-03-02 14:56+0100\n"
+"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
+"Language-Team: LANGUAGE <LL@li.org>\n"
+"Language: \n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+
+#. type: Content of: <translate1w>
+#: options.xml:3
+msgid "foo bar translate1w"
+msgstr ""
+
+#. type: Content of: <translate2W>
+#: options.xml:6
+#, no-wrap
+msgid ""
+" foo bar translate2W\n"
+" "
+msgstr ""
+
+#. type: Content of: <default3>
+#: options.xml:9
+#, no-wrap
+msgid ""
+" foo bar default3\n"
+" "
+msgstr ""
+
+#. type: Content of: <untranslated4><translate5>
+#: options.xml:17
+#, no-wrap
+msgid ""
+" foo bar translate5\n"
+" "
+msgstr ""
+
+#. type: Content of: <translate2W>
+#: options.xml:21
+#, no-wrap
+msgid ""
+" foo bar translate2W <inline6>foo bar inline6</inline6>\n"
+" "
+msgstr ""
+
+#. type: Content of: <translate2W>
+#: options.xml:24
+#, no-wrap
+msgid ""
+" <inline6>foo bar inline6</inline6>\n"
+" "
+msgstr ""
+
+#. type: Content of: <translate1w>
+#: options.xml:27
+msgid "foo bar translate1w <inline6>foo bar inline6</inline6>"
+msgstr ""
+
+#. type: Content of: <translate1w>
+#: options.xml:30
+msgid "<inline6>foo bar inline6</inline6>"
+msgstr ""
diff --git a/t/fmt/xml/options.trans b/t/fmt/xml/options.trans
new file mode 100644
index 0000000..f5e368a
--- /dev/null
+++ b/t/fmt/xml/options.trans
@@ -0,0 +1,31 @@
+<?xml version='1.0' encoding="UTF-8"?>
+ <translate1w>
+ FOO BAR TRANSLATE1W
+ </translate1w>
+ <translate2W>
+ FOO BAR TRANSLATE2W
+ </translate2W>
+ <default3>
+ FOO BAR DEFAULT3
+ </default3>
+ <untranslated4>
+ foo bar untranslated4
+ </untranslated4>
+ <untranslated4>
+ foo bar untranslated4
+ <translate5>
+ FOO BAR TRANSLATE5
+ </translate5>
+ </untranslated4>
+ <translate2W>
+ FOO BAR TRANSLATE2W <inline6>FOO BAR INLINE6</inline6>
+ </translate2W>
+ <translate2W>
+ <inline6>FOO BAR INLINE6</inline6>
+ </translate2W>
+ <translate1w>
+ FOO BAR TRANSLATE1W <inline6>FOO BAR INLINE6</inline6>
+ </translate1w>
+ <translate1w>
+ <inline6>FOO BAR INLINE6</inline6>
+ </translate1w>
diff --git a/t/fmt/xml/options.xml b/t/fmt/xml/options.xml
new file mode 100644
index 0000000..1f601bc
--- /dev/null
+++ b/t/fmt/xml/options.xml
@@ -0,0 +1,31 @@
+<?xml version='1.0' encoding="UTF-8"?>
+ <translate1w>
+ foo bar translate1w
+ </translate1w>
+ <translate2W>
+ foo bar translate2W
+ </translate2W>
+ <default3>
+ foo bar default3
+ </default3>
+ <untranslated4>
+ foo bar untranslated4
+ </untranslated4>
+ <untranslated4>
+ foo bar untranslated4
+ <translate5>
+ foo bar translate5
+ </translate5>
+ </untranslated4>
+ <translate2W>
+ foo bar translate2W <inline6>foo bar inline6</inline6>
+ </translate2W>
+ <translate2W>
+ <inline6>foo bar inline6</inline6>
+ </translate2W>
+ <translate1w>
+ foo bar translate1w <inline6>foo bar inline6</inline6>
+ </translate1w>
+ <translate1w>
+ <inline6>foo bar inline6</inline6>
+ </translate1w>
diff --git a/t/fmt/xml/placeholder-empty.norm b/t/fmt/xml/placeholder-empty.norm
new file mode 100644
index 0000000..38602df
--- /dev/null
+++ b/t/fmt/xml/placeholder-empty.norm
@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<doc>
+ <p>
+ A <place attr="value1"/> B <place attr="value2"/> C <place attr="value3">and</place> D.
+ </p>
+</doc>
diff --git a/t/fmt/xml/placeholder-empty.po b/t/fmt/xml/placeholder-empty.po
new file mode 100644
index 0000000..995b599
--- /dev/null
+++ b/t/fmt/xml/placeholder-empty.po
@@ -0,0 +1,35 @@
+# SOME DESCRIPTIVE TITLE
+# Copyright (C) YEAR Free Software Foundation, Inc.
+# This file is distributed under the same license as the PACKAGE package.
+# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
+#
+#, fuzzy
+msgid ""
+msgstr ""
+"Project-Id-Version: PACKAGE VERSION\n"
+"POT-Creation-Date: 2022-12-27 15:42+0100\n"
+"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
+"Language-Team: LANGUAGE <LL@li.org>\n"
+"Language: \n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+
+#. type: Content of: <doc><p><place>
+#: placeholder-empty.xml:4
+#, no-wrap
+msgid "and"
+msgstr "AND"
+
+#. type: Content of: <doc><p>
+#: placeholder-empty.xml:4
+#, no-wrap
+msgid ""
+" A <placeholder type=\"place\" id=\"0\"/> B <placeholder type=\"place\" "
+"id=\"1\"/> C <placeholder type=\"place\" id=\"2\"/> D.\n"
+" "
+msgstr ""
+" a <placeholder type=\"place\" id=\"0\"/> b <placeholder type=\"place\" "
+"id=\"1\"/> c <placeholder type=\"place\" id=\"2\"/> d.\n"
+" "
diff --git a/t/fmt/xml/placeholder-empty.pot b/t/fmt/xml/placeholder-empty.pot
new file mode 100644
index 0000000..fb2ad20
--- /dev/null
+++ b/t/fmt/xml/placeholder-empty.pot
@@ -0,0 +1,32 @@
+# SOME DESCRIPTIVE TITLE
+# Copyright (C) YEAR Free Software Foundation, Inc.
+# This file is distributed under the same license as the PACKAGE package.
+# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
+#
+#, fuzzy
+msgid ""
+msgstr ""
+"Project-Id-Version: PACKAGE VERSION\n"
+"POT-Creation-Date: 2022-12-27 15:42+0100\n"
+"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
+"Language-Team: LANGUAGE <LL@li.org>\n"
+"Language: \n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+
+#. type: Content of: <doc><p><place>
+#: placeholder-empty.xml:4
+#, no-wrap
+msgid "and"
+msgstr ""
+
+#. type: Content of: <doc><p>
+#: placeholder-empty.xml:4
+#, no-wrap
+msgid ""
+" A <placeholder type=\"place\" id=\"0\"/> B <placeholder type=\"place\" "
+"id=\"1\"/> C <placeholder type=\"place\" id=\"2\"/> D.\n"
+" "
+msgstr ""
diff --git a/t/fmt/xml/placeholder-empty.trans b/t/fmt/xml/placeholder-empty.trans
new file mode 100644
index 0000000..9999393
--- /dev/null
+++ b/t/fmt/xml/placeholder-empty.trans
@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<doc>
+ <p>
+ a <place attr="value1"/> b <place attr="value2"/> c <place attr="value3">AND</place> d.
+ </p>
+</doc>
diff --git a/t/fmt/xml/placeholder-empty.xml b/t/fmt/xml/placeholder-empty.xml
new file mode 100644
index 0000000..b8780fd
--- /dev/null
+++ b/t/fmt/xml/placeholder-empty.xml
@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="utf-8"?>
+<doc>
+ <p>
+ A <place attr="value1"/> B <place attr="value2"/> C <place attr="value3">and</place> D.
+ </p>
+</doc>
diff --git a/t/fmt/yaml/arraylikestring.norm b/t/fmt/yaml/arraylikestring.norm
new file mode 100644
index 0000000..c2efe7c
--- /dev/null
+++ b/t/fmt/yaml/arraylikestring.norm
@@ -0,0 +1,4 @@
+---
+double: '[copy]'
+single: '[cut]'
+---
diff --git a/t/fmt/yaml/arraylikestring.po b/t/fmt/yaml/arraylikestring.po
new file mode 100644
index 0000000..37b4175
--- /dev/null
+++ b/t/fmt/yaml/arraylikestring.po
@@ -0,0 +1,29 @@
+# SOME DESCRIPTIVE TITLE
+# Copyright (C) YEAR Free Software Foundation, Inc.
+# This file is distributed under the same license as the PACKAGE package.
+# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
+#
+#, fuzzy
+msgid ""
+msgstr ""
+"Project-Id-Version: PACKAGE VERSION\n"
+"POT-Creation-Date: 2023-08-24 20:47+0900\n"
+"PO-Revision-Date: 2023-08-24 20:47+0900\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
+"Language-Team: LANGUAGE <LL@li.org>\n"
+"Language: \n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+
+#. type: Hash Value: double
+#: arraylikestring.yaml:1
+#, no-wrap
+msgid "[copy]"
+msgstr "[COPY]"
+
+#. type: Hash Value: single
+#: arraylikestring.yaml:1
+#, no-wrap
+msgid "[cut]"
+msgstr "[CUT]"
diff --git a/t/fmt/yaml/arraylikestring.pot b/t/fmt/yaml/arraylikestring.pot
new file mode 100644
index 0000000..e5d6cfb
--- /dev/null
+++ b/t/fmt/yaml/arraylikestring.pot
@@ -0,0 +1,29 @@
+# SOME DESCRIPTIVE TITLE
+# Copyright (C) YEAR Free Software Foundation, Inc.
+# This file is distributed under the same license as the PACKAGE package.
+# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
+#
+#, fuzzy
+msgid ""
+msgstr ""
+"Project-Id-Version: PACKAGE VERSION\n"
+"POT-Creation-Date: 2023-08-24 20:47+0900\n"
+"PO-Revision-Date: 2023-08-24 20:47+0900\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
+"Language-Team: LANGUAGE <LL@li.org>\n"
+"Language: \n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+
+#. type: Hash Value: double
+#: arraylikestring.yaml:1
+#, no-wrap
+msgid "[copy]"
+msgstr ""
+
+#. type: Hash Value: single
+#: arraylikestring.yaml:1
+#, no-wrap
+msgid "[cut]"
+msgstr ""
diff --git a/t/fmt/yaml/arraylikestring.trans b/t/fmt/yaml/arraylikestring.trans
new file mode 100644
index 0000000..159d8ce
--- /dev/null
+++ b/t/fmt/yaml/arraylikestring.trans
@@ -0,0 +1,4 @@
+---
+double: '[COPY]'
+single: '[CUT]'
+---
diff --git a/t/fmt/yaml/arraylikestring.yaml b/t/fmt/yaml/arraylikestring.yaml
new file mode 100644
index 0000000..b574ece
--- /dev/null
+++ b/t/fmt/yaml/arraylikestring.yaml
@@ -0,0 +1,4 @@
+---
+double: "[copy]"
+single: '[cut]'
+---
diff --git a/t/fmt/yaml/basic.norm b/t/fmt/yaml/basic.norm
new file mode 100644
index 0000000..6999db6
--- /dev/null
+++ b/t/fmt/yaml/basic.norm
@@ -0,0 +1,103 @@
+---
+Dir: en-US
+Level1:
+ -
+ File: index
+ Name: 'Book Information'
+ -
+ File: Preface
+ Name: Preface
+ -
+ File: Introduction
+ Name: Introduction
+ -
+ Done: true
+ File: Downloading_Fedora
+ Name: 'Downloading Fedora'
+ -
+ Dir: install
+ Level2-a:
+ -
+ File: Preparing_for_Installation
+ Name: 'Preparing for Installation'
+ -
+ File: Booting_the_Installation
+ Name: 'Booting the Installation'
+ -
+ File: Installing_Using_Anaconda
+ Name: 'Installing Using Anaconda'
+ -
+ File: After_Installation
+ Name: 'After the Installation'
+ -
+ File: Troubleshooting
+ Name: Troubleshooting
+ Name: 'Installing Fedora'
+ -
+ Dir: advanced
+ Level2-b:
+ -
+ File: Boot_Options
+ Name: 'Boot Options'
+ -
+ File: Kickstart_Installations
+ Name: 'Automating the Installation with Kickstart'
+ -
+ File: Network_based_Installations
+ Name: 'Setting Up an Installation Server'
+ -
+ File: VNC_Installations
+ Name: 'Installing Using VNC'
+ -
+ File: Upgrading_Your_Current_System
+ Name: 'Upgrading Your Current System'
+ Name: 'Advanced Installation Options'
+ -
+ Dir: appendixes
+ Level2-c:
+ -
+ File: Kickstart_Syntax_Reference
+ Name: 'Kickstart Syntax Reference'
+ -
+ File: Disk_Partitions
+ Name: 'An Introduction to Disk Partitions'
+ -
+ File: Understanding_LVM
+ Name: 'Understanding LVM'
+ Name: 'Technical Appendixes'
+ -
+ File: Revision_History
+ Name: 'Revision History'
+Name: 'Fedora Installation Guide'
+---
+bill-to:
+ address:
+ city: 'Royal Oak'
+ lines: "458 Walkman Dr.\nSuite #292\n"
+ postal: 48046
+ state: MI
+ family: Dumars
+ given: Chris
+date: 2001-01-23
+invoice: 34843
+paid: false
+product:
+ -
+ description: Basketball
+ price: 450.00
+ quantity: 4
+ sku: BL394D
+ -
+ description: 'Super Hoop'
+ price: 2392.00
+ quantity: 1
+ sku: BL4438H
+tax: 251.42
+total: 4443.52
+---
+- 'Mark McGwire'
+- 'Sammy Sosa'
+- 'Ken Griffey'
+---
+- 'Chicago Cubs'
+- 'St Louis Cardinals'
diff --git a/t/fmt/yaml/basic.po b/t/fmt/yaml/basic.po
new file mode 100644
index 0000000..fc34ff9
--- /dev/null
+++ b/t/fmt/yaml/basic.po
@@ -0,0 +1,405 @@
+# SOME DESCRIPTIVE TITLE
+# Copyright (C) YEAR Free Software Foundation, Inc.
+# This file is distributed under the same license as the PACKAGE package.
+# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
+#
+#, fuzzy
+msgid ""
+msgstr ""
+"Project-Id-Version: PACKAGE VERSION\n"
+"POT-Creation-Date: 2021-02-08 08:12+0100\n"
+"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
+"Language-Team: LANGUAGE <LL@li.org>\n"
+"Language: \n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+
+#. type: Hash Value: Dir
+#: basic.yaml:1
+#, no-wrap
+msgid "en-US"
+msgstr ""
+
+#. type: Hash Value: Level1 File
+#: basic.yaml:1
+#, no-wrap
+msgid "index"
+msgstr "INDEX"
+
+#. type: Hash Value: Level1 Name
+#: basic.yaml:1
+#, no-wrap
+msgid "Book Information"
+msgstr "BOOK INFORMATION"
+
+#. type: Hash Value: Level1 Name
+#: basic.yaml:1
+#, no-wrap
+msgid "Preface"
+msgstr "PREFACE"
+
+#. type: Hash Value: Level1 Name
+#: basic.yaml:1
+#, no-wrap
+msgid "Introduction"
+msgstr "INTRODUCTION"
+
+#. type: Hash Value: Level1 File
+#: basic.yaml:1
+#, no-wrap
+msgid "Downloading_Fedora"
+msgstr "DOWNLOADING_FEDORA"
+
+#. type: Hash Value: Level1 Name
+#: basic.yaml:1
+#, no-wrap
+msgid "Downloading Fedora"
+msgstr "DOWNLOADING FEDORA"
+
+#. type: Hash Value: Level1 Dir
+#: basic.yaml:1
+#, no-wrap
+msgid "install"
+msgstr "INSTALL"
+
+#. type: Hash Value: Level1 Level2-a File
+#: basic.yaml:1
+#, no-wrap
+msgid "Preparing_for_Installation"
+msgstr "PREPARING_FOR_INSTALLATION"
+
+#. type: Hash Value: Level1 Level2-a Name
+#: basic.yaml:1
+#, no-wrap
+msgid "Preparing for Installation"
+msgstr "PREPARING FOR INSTALLATION"
+
+#. type: Hash Value: Level1 Level2-a File
+#: basic.yaml:1
+#, no-wrap
+msgid "Booting_the_Installation"
+msgstr "BOOTING_THE_INSTALLATION"
+
+#. type: Hash Value: Level1 Level2-a Name
+#: basic.yaml:1
+#, no-wrap
+msgid "Booting the Installation"
+msgstr "BOOTING THE INSTALLATION"
+
+#. type: Hash Value: Level1 Level2-a File
+#: basic.yaml:1
+#, no-wrap
+msgid "Installing_Using_Anaconda"
+msgstr "INSTALLING USING ANACONDA"
+
+#. type: Hash Value: Level1 Level2-a Name
+#: basic.yaml:1
+#, no-wrap
+msgid "Installing Using Anaconda"
+msgstr "INSTALLING USING ANACONDA"
+
+#. type: Hash Value: Level1 Level2-a File
+#: basic.yaml:1
+#, no-wrap
+msgid "After_Installation"
+msgstr "AFTER_INSTALLATION"
+
+#. type: Hash Value: Level1 Level2-a Name
+#: basic.yaml:1
+#, no-wrap
+msgid "After the Installation"
+msgstr "AFTER THE INSTALLATION"
+
+#. type: Hash Value: Level1 Level2-a Name
+#: basic.yaml:1
+#, no-wrap
+msgid "Troubleshooting"
+msgstr "TROUBLESHOOTING"
+
+#. type: Hash Value: Level1 Name
+#: basic.yaml:1
+#, no-wrap
+msgid "Installing Fedora"
+msgstr "INSTALLING FEDORA"
+
+#. type: Hash Value: Level1 Dir
+#: basic.yaml:1
+#, no-wrap
+msgid "advanced"
+msgstr "ADVANCED"
+
+#. type: Hash Value: Level1 Level2-b File
+#: basic.yaml:1
+#, no-wrap
+msgid "Boot_Options"
+msgstr "BOOT_OPTIONS"
+
+#. type: Hash Value: Level1 Level2-b Name
+#: basic.yaml:1
+#, no-wrap
+msgid "Boot Options"
+msgstr "BOOT OPTIONS"
+
+#. type: Hash Value: Level1 Level2-b File
+#: basic.yaml:1
+#, no-wrap
+msgid "Kickstart_Installations"
+msgstr "KICKSTART_INSTALLATIONS"
+
+#. type: Hash Value: Level1 Level2-b Name
+#: basic.yaml:1
+#, no-wrap
+msgid "Automating the Installation with Kickstart"
+msgstr "AUTOMATING THE INSTALLATION WITH KICKSTART"
+
+#. type: Hash Value: Level1 Level2-b File
+#: basic.yaml:1
+#, no-wrap
+msgid "Network_based_Installations"
+msgstr "NETWORK_BASED_INSTALLATIONS"
+
+#. type: Hash Value: Level1 Level2-b Name
+#: basic.yaml:1
+#, no-wrap
+msgid "Setting Up an Installation Server"
+msgstr "SETTING UP AN INSTALLATION SERVER"
+
+#. type: Hash Value: Level1 Level2-b File
+#: basic.yaml:1
+#, no-wrap
+msgid "VNC_Installations"
+msgstr "VNC_INSTALLATIONS"
+
+#. type: Hash Value: Level1 Level2-b Name
+#: basic.yaml:1
+#, no-wrap
+msgid "Installing Using VNC"
+msgstr "INSTALLING USING VNC"
+
+#. type: Hash Value: Level1 Level2-b File
+#: basic.yaml:1
+#, no-wrap
+msgid "Upgrading_Your_Current_System"
+msgstr "UPGRADING_YOUR_CURRENT_SYSTEM"
+
+#. type: Hash Value: Level1 Level2-b Name
+#: basic.yaml:1
+#, no-wrap
+msgid "Upgrading Your Current System"
+msgstr "UPGRADING YOUR CURRENT SYSTEM"
+
+#. type: Hash Value: Level1 Name
+#: basic.yaml:1
+#, no-wrap
+msgid "Advanced Installation Options"
+msgstr "ADVANCED INSTALLATION OPTIONS"
+
+#. type: Hash Value: Level1 Dir
+#: basic.yaml:1
+#, no-wrap
+msgid "appendixes"
+msgstr "APPENDIXES"
+
+#. type: Hash Value: Level1 Level2-c File
+#: basic.yaml:1
+#, no-wrap
+msgid "Kickstart_Syntax_Reference"
+msgstr "KICKSTART_SYNTAX_REFERENCE"
+
+#. type: Hash Value: Level1 Level2-c Name
+#: basic.yaml:1
+#, no-wrap
+msgid "Kickstart Syntax Reference"
+msgstr "KICKSTART SYNTAX REFERENCE"
+
+#. type: Hash Value: Level1 Level2-c File
+#: basic.yaml:1
+#, no-wrap
+msgid "Disk_Partitions"
+msgstr "DISK_PARTITIONS"
+
+#. type: Hash Value: Level1 Level2-c Name
+#: basic.yaml:1
+#, no-wrap
+msgid "An Introduction to Disk Partitions"
+msgstr "AN INTRODUCTION TO DISK PARTITIONS"
+
+#. type: Hash Value: Level1 Level2-c File
+#: basic.yaml:1
+#, no-wrap
+msgid "Understanding_LVM"
+msgstr "UNDERSTANDING_LVM"
+
+#. type: Hash Value: Level1 Level2-c Name
+#: basic.yaml:1
+#, no-wrap
+msgid "Understanding LVM"
+msgstr "UNDERSTANDING LVM"
+
+#. type: Hash Value: Level1 Name
+#: basic.yaml:1
+#, no-wrap
+msgid "Technical Appendixes"
+msgstr "TECHNICAL APPENDIXES"
+
+#. type: Hash Value: Level1 File
+#: basic.yaml:1
+#, no-wrap
+msgid "Revision_History"
+msgstr "REVISION_HISTORY"
+
+#. type: Hash Value: Level1 Name
+#: basic.yaml:1
+#, no-wrap
+msgid "Revision History"
+msgstr "REVISION HISTORY"
+
+#. type: Hash Value: Name
+#: basic.yaml:1
+#, no-wrap
+msgid "Fedora Installation Guide"
+msgstr "FEDORA INSTALLATION GUIDE"
+
+#. type: Hash Value: bill-to address city
+#: basic.yaml:1
+#, no-wrap
+msgid "Royal Oak"
+msgstr "ROYAL OAK"
+
+#. type: Hash Value: bill-to address lines
+#: basic.yaml:1
+#, no-wrap
+msgid ""
+"458 Walkman Dr.\n"
+"Suite #292\n"
+msgstr ""
+"458 WALKMAN DR.\n"
+"SUITE #292\n"
+
+#. type: Hash Value: bill-to address postal
+#: basic.yaml:1
+#, no-wrap
+msgid "48046"
+msgstr "48046"
+
+#. type: Hash Value: bill-to address state
+#: basic.yaml:1
+#, no-wrap
+msgid "MI"
+msgstr "MI"
+
+#. type: Hash Value: bill-to family
+#: basic.yaml:1
+#, no-wrap
+msgid "Dumars"
+msgstr "DUMARS"
+
+#. type: Hash Value: bill-to given
+#: basic.yaml:1
+#, no-wrap
+msgid "Chris"
+msgstr "CHRIS"
+
+#. type: Hash Value: date
+#: basic.yaml:1
+#, no-wrap
+msgid "2001-01-23"
+msgstr "2001-01-23"
+
+#. type: Hash Value: invoice
+#: basic.yaml:1
+#, no-wrap
+msgid "34843"
+msgstr "34843"
+
+#. type: Hash Value: product description
+#: basic.yaml:1
+#, no-wrap
+msgid "Basketball"
+msgstr "BASKETBALL"
+
+#. type: Hash Value: product price
+#: basic.yaml:1
+#, no-wrap
+msgid "450.00"
+msgstr ""
+
+#. type: Hash Value: product quantity
+#: basic.yaml:1
+#, no-wrap
+msgid "4"
+msgstr ""
+
+#. type: Hash Value: product sku
+#: basic.yaml:1
+#, no-wrap
+msgid "BL394D"
+msgstr ""
+
+#. type: Hash Value: product description
+#: basic.yaml:1
+#, no-wrap
+msgid "Super Hoop"
+msgstr "SUPER HOOP"
+
+#. type: Hash Value: product price
+#: basic.yaml:1
+#, no-wrap
+msgid "2392.00"
+msgstr ""
+
+#. type: Hash Value: product quantity
+#: basic.yaml:1
+#, no-wrap
+msgid "1"
+msgstr ""
+
+#. type: Hash Value: product sku
+#: basic.yaml:1
+#, no-wrap
+msgid "BL4438H"
+msgstr ""
+
+#. type: Hash Value: tax
+#: basic.yaml:1
+#, no-wrap
+msgid "251.42"
+msgstr ""
+
+#. type: Hash Value: total
+#: basic.yaml:1
+#, no-wrap
+msgid "4443.52"
+msgstr ""
+
+#. type: Array Element:
+#: basic.yaml:1
+#, no-wrap
+msgid "Mark McGwire"
+msgstr "MARK MCGWIRE"
+
+#. type: Array Element:
+#: basic.yaml:1
+#, no-wrap
+msgid "Sammy Sosa"
+msgstr "SAMMY SOSA"
+
+#. type: Array Element:
+#: basic.yaml:1
+#, no-wrap
+msgid "Ken Griffey"
+msgstr "KEN GRIFFEY"
+
+#. type: Array Element:
+#: basic.yaml:1
+#, no-wrap
+msgid "Chicago Cubs"
+msgstr "CHICAGO CUBS"
+
+#. type: Array Element:
+#: basic.yaml:1
+#, no-wrap
+msgid "St Louis Cardinals"
+msgstr "ST LOUIS CARDINALS"
diff --git a/t/fmt/yaml/basic.pot b/t/fmt/yaml/basic.pot
new file mode 100644
index 0000000..273d935
--- /dev/null
+++ b/t/fmt/yaml/basic.pot
@@ -0,0 +1,403 @@
+# SOME DESCRIPTIVE TITLE
+# Copyright (C) YEAR Free Software Foundation, Inc.
+# This file is distributed under the same license as the PACKAGE package.
+# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
+#
+#, fuzzy
+msgid ""
+msgstr ""
+"Project-Id-Version: PACKAGE VERSION\n"
+"POT-Creation-Date: 2021-02-08 08:12+0100\n"
+"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
+"Language-Team: LANGUAGE <LL@li.org>\n"
+"Language: \n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+
+#. type: Hash Value: Dir
+#: basic.yaml:1
+#, no-wrap
+msgid "en-US"
+msgstr ""
+
+#. type: Hash Value: Level1 File
+#: basic.yaml:1
+#, no-wrap
+msgid "index"
+msgstr ""
+
+#. type: Hash Value: Level1 Name
+#: basic.yaml:1
+#, no-wrap
+msgid "Book Information"
+msgstr ""
+
+#. type: Hash Value: Level1 Name
+#: basic.yaml:1
+#, no-wrap
+msgid "Preface"
+msgstr ""
+
+#. type: Hash Value: Level1 Name
+#: basic.yaml:1
+#, no-wrap
+msgid "Introduction"
+msgstr ""
+
+#. type: Hash Value: Level1 File
+#: basic.yaml:1
+#, no-wrap
+msgid "Downloading_Fedora"
+msgstr ""
+
+#. type: Hash Value: Level1 Name
+#: basic.yaml:1
+#, no-wrap
+msgid "Downloading Fedora"
+msgstr ""
+
+#. type: Hash Value: Level1 Dir
+#: basic.yaml:1
+#, no-wrap
+msgid "install"
+msgstr ""
+
+#. type: Hash Value: Level1 Level2-a File
+#: basic.yaml:1
+#, no-wrap
+msgid "Preparing_for_Installation"
+msgstr ""
+
+#. type: Hash Value: Level1 Level2-a Name
+#: basic.yaml:1
+#, no-wrap
+msgid "Preparing for Installation"
+msgstr ""
+
+#. type: Hash Value: Level1 Level2-a File
+#: basic.yaml:1
+#, no-wrap
+msgid "Booting_the_Installation"
+msgstr ""
+
+#. type: Hash Value: Level1 Level2-a Name
+#: basic.yaml:1
+#, no-wrap
+msgid "Booting the Installation"
+msgstr ""
+
+#. type: Hash Value: Level1 Level2-a File
+#: basic.yaml:1
+#, no-wrap
+msgid "Installing_Using_Anaconda"
+msgstr ""
+
+#. type: Hash Value: Level1 Level2-a Name
+#: basic.yaml:1
+#, no-wrap
+msgid "Installing Using Anaconda"
+msgstr ""
+
+#. type: Hash Value: Level1 Level2-a File
+#: basic.yaml:1
+#, no-wrap
+msgid "After_Installation"
+msgstr ""
+
+#. type: Hash Value: Level1 Level2-a Name
+#: basic.yaml:1
+#, no-wrap
+msgid "After the Installation"
+msgstr ""
+
+#. type: Hash Value: Level1 Level2-a Name
+#: basic.yaml:1
+#, no-wrap
+msgid "Troubleshooting"
+msgstr ""
+
+#. type: Hash Value: Level1 Name
+#: basic.yaml:1
+#, no-wrap
+msgid "Installing Fedora"
+msgstr ""
+
+#. type: Hash Value: Level1 Dir
+#: basic.yaml:1
+#, no-wrap
+msgid "advanced"
+msgstr ""
+
+#. type: Hash Value: Level1 Level2-b File
+#: basic.yaml:1
+#, no-wrap
+msgid "Boot_Options"
+msgstr ""
+
+#. type: Hash Value: Level1 Level2-b Name
+#: basic.yaml:1
+#, no-wrap
+msgid "Boot Options"
+msgstr ""
+
+#. type: Hash Value: Level1 Level2-b File
+#: basic.yaml:1
+#, no-wrap
+msgid "Kickstart_Installations"
+msgstr ""
+
+#. type: Hash Value: Level1 Level2-b Name
+#: basic.yaml:1
+#, no-wrap
+msgid "Automating the Installation with Kickstart"
+msgstr ""
+
+#. type: Hash Value: Level1 Level2-b File
+#: basic.yaml:1
+#, no-wrap
+msgid "Network_based_Installations"
+msgstr ""
+
+#. type: Hash Value: Level1 Level2-b Name
+#: basic.yaml:1
+#, no-wrap
+msgid "Setting Up an Installation Server"
+msgstr ""
+
+#. type: Hash Value: Level1 Level2-b File
+#: basic.yaml:1
+#, no-wrap
+msgid "VNC_Installations"
+msgstr ""
+
+#. type: Hash Value: Level1 Level2-b Name
+#: basic.yaml:1
+#, no-wrap
+msgid "Installing Using VNC"
+msgstr ""
+
+#. type: Hash Value: Level1 Level2-b File
+#: basic.yaml:1
+#, no-wrap
+msgid "Upgrading_Your_Current_System"
+msgstr ""
+
+#. type: Hash Value: Level1 Level2-b Name
+#: basic.yaml:1
+#, no-wrap
+msgid "Upgrading Your Current System"
+msgstr ""
+
+#. type: Hash Value: Level1 Name
+#: basic.yaml:1
+#, no-wrap
+msgid "Advanced Installation Options"
+msgstr ""
+
+#. type: Hash Value: Level1 Dir
+#: basic.yaml:1
+#, no-wrap
+msgid "appendixes"
+msgstr ""
+
+#. type: Hash Value: Level1 Level2-c File
+#: basic.yaml:1
+#, no-wrap
+msgid "Kickstart_Syntax_Reference"
+msgstr ""
+
+#. type: Hash Value: Level1 Level2-c Name
+#: basic.yaml:1
+#, no-wrap
+msgid "Kickstart Syntax Reference"
+msgstr ""
+
+#. type: Hash Value: Level1 Level2-c File
+#: basic.yaml:1
+#, no-wrap
+msgid "Disk_Partitions"
+msgstr ""
+
+#. type: Hash Value: Level1 Level2-c Name
+#: basic.yaml:1
+#, no-wrap
+msgid "An Introduction to Disk Partitions"
+msgstr ""
+
+#. type: Hash Value: Level1 Level2-c File
+#: basic.yaml:1
+#, no-wrap
+msgid "Understanding_LVM"
+msgstr ""
+
+#. type: Hash Value: Level1 Level2-c Name
+#: basic.yaml:1
+#, no-wrap
+msgid "Understanding LVM"
+msgstr ""
+
+#. type: Hash Value: Level1 Name
+#: basic.yaml:1
+#, no-wrap
+msgid "Technical Appendixes"
+msgstr ""
+
+#. type: Hash Value: Level1 File
+#: basic.yaml:1
+#, no-wrap
+msgid "Revision_History"
+msgstr ""
+
+#. type: Hash Value: Level1 Name
+#: basic.yaml:1
+#, no-wrap
+msgid "Revision History"
+msgstr ""
+
+#. type: Hash Value: Name
+#: basic.yaml:1
+#, no-wrap
+msgid "Fedora Installation Guide"
+msgstr ""
+
+#. type: Hash Value: bill-to address city
+#: basic.yaml:1
+#, no-wrap
+msgid "Royal Oak"
+msgstr ""
+
+#. type: Hash Value: bill-to address lines
+#: basic.yaml:1
+#, no-wrap
+msgid ""
+"458 Walkman Dr.\n"
+"Suite #292\n"
+msgstr ""
+
+#. type: Hash Value: bill-to address postal
+#: basic.yaml:1
+#, no-wrap
+msgid "48046"
+msgstr ""
+
+#. type: Hash Value: bill-to address state
+#: basic.yaml:1
+#, no-wrap
+msgid "MI"
+msgstr ""
+
+#. type: Hash Value: bill-to family
+#: basic.yaml:1
+#, no-wrap
+msgid "Dumars"
+msgstr ""
+
+#. type: Hash Value: bill-to given
+#: basic.yaml:1
+#, no-wrap
+msgid "Chris"
+msgstr ""
+
+#. type: Hash Value: date
+#: basic.yaml:1
+#, no-wrap
+msgid "2001-01-23"
+msgstr ""
+
+#. type: Hash Value: invoice
+#: basic.yaml:1
+#, no-wrap
+msgid "34843"
+msgstr ""
+
+#. type: Hash Value: product description
+#: basic.yaml:1
+#, no-wrap
+msgid "Basketball"
+msgstr ""
+
+#. type: Hash Value: product price
+#: basic.yaml:1
+#, no-wrap
+msgid "450.00"
+msgstr ""
+
+#. type: Hash Value: product quantity
+#: basic.yaml:1
+#, no-wrap
+msgid "4"
+msgstr ""
+
+#. type: Hash Value: product sku
+#: basic.yaml:1
+#, no-wrap
+msgid "BL394D"
+msgstr ""
+
+#. type: Hash Value: product description
+#: basic.yaml:1
+#, no-wrap
+msgid "Super Hoop"
+msgstr ""
+
+#. type: Hash Value: product price
+#: basic.yaml:1
+#, no-wrap
+msgid "2392.00"
+msgstr ""
+
+#. type: Hash Value: product quantity
+#: basic.yaml:1
+#, no-wrap
+msgid "1"
+msgstr ""
+
+#. type: Hash Value: product sku
+#: basic.yaml:1
+#, no-wrap
+msgid "BL4438H"
+msgstr ""
+
+#. type: Hash Value: tax
+#: basic.yaml:1
+#, no-wrap
+msgid "251.42"
+msgstr ""
+
+#. type: Hash Value: total
+#: basic.yaml:1
+#, no-wrap
+msgid "4443.52"
+msgstr ""
+
+#. type: Array Element:
+#: basic.yaml:1
+#, no-wrap
+msgid "Mark McGwire"
+msgstr ""
+
+#. type: Array Element:
+#: basic.yaml:1
+#, no-wrap
+msgid "Sammy Sosa"
+msgstr ""
+
+#. type: Array Element:
+#: basic.yaml:1
+#, no-wrap
+msgid "Ken Griffey"
+msgstr ""
+
+#. type: Array Element:
+#: basic.yaml:1
+#, no-wrap
+msgid "Chicago Cubs"
+msgstr ""
+
+#. type: Array Element:
+#: basic.yaml:1
+#, no-wrap
+msgid "St Louis Cardinals"
+msgstr ""
diff --git a/t/fmt/yaml/basic.trans b/t/fmt/yaml/basic.trans
new file mode 100644
index 0000000..3d3022b
--- /dev/null
+++ b/t/fmt/yaml/basic.trans
@@ -0,0 +1,103 @@
+---
+Dir: en-US
+Level1:
+ -
+ File: INDEX
+ Name: 'BOOK INFORMATION'
+ -
+ File: PREFACE
+ Name: PREFACE
+ -
+ File: INTRODUCTION
+ Name: INTRODUCTION
+ -
+ Done: true
+ File: DOWNLOADING_FEDORA
+ Name: 'DOWNLOADING FEDORA'
+ -
+ Dir: INSTALL
+ Level2-a:
+ -
+ File: PREPARING_FOR_INSTALLATION
+ Name: 'PREPARING FOR INSTALLATION'
+ -
+ File: BOOTING_THE_INSTALLATION
+ Name: 'BOOTING THE INSTALLATION'
+ -
+ File: 'INSTALLING USING ANACONDA'
+ Name: 'INSTALLING USING ANACONDA'
+ -
+ File: AFTER_INSTALLATION
+ Name: 'AFTER THE INSTALLATION'
+ -
+ File: TROUBLESHOOTING
+ Name: TROUBLESHOOTING
+ Name: 'INSTALLING FEDORA'
+ -
+ Dir: ADVANCED
+ Level2-b:
+ -
+ File: BOOT_OPTIONS
+ Name: 'BOOT OPTIONS'
+ -
+ File: KICKSTART_INSTALLATIONS
+ Name: 'AUTOMATING THE INSTALLATION WITH KICKSTART'
+ -
+ File: NETWORK_BASED_INSTALLATIONS
+ Name: 'SETTING UP AN INSTALLATION SERVER'
+ -
+ File: VNC_INSTALLATIONS
+ Name: 'INSTALLING USING VNC'
+ -
+ File: UPGRADING_YOUR_CURRENT_SYSTEM
+ Name: 'UPGRADING YOUR CURRENT SYSTEM'
+ Name: 'ADVANCED INSTALLATION OPTIONS'
+ -
+ Dir: APPENDIXES
+ Level2-c:
+ -
+ File: KICKSTART_SYNTAX_REFERENCE
+ Name: 'KICKSTART SYNTAX REFERENCE'
+ -
+ File: DISK_PARTITIONS
+ Name: 'AN INTRODUCTION TO DISK PARTITIONS'
+ -
+ File: UNDERSTANDING_LVM
+ Name: 'UNDERSTANDING LVM'
+ Name: 'TECHNICAL APPENDIXES'
+ -
+ File: REVISION_HISTORY
+ Name: 'REVISION HISTORY'
+Name: 'FEDORA INSTALLATION GUIDE'
+---
+bill-to:
+ address:
+ city: 'ROYAL OAK'
+ lines: "458 WALKMAN DR.\nSUITE #292\n"
+ postal: 48046
+ state: MI
+ family: DUMARS
+ given: CHRIS
+date: 2001-01-23
+invoice: 34843
+paid: false
+product:
+ -
+ description: BASKETBALL
+ price: 450.00
+ quantity: 4
+ sku: BL394D
+ -
+ description: 'SUPER HOOP'
+ price: 2392.00
+ quantity: 1
+ sku: BL4438H
+tax: 251.42
+total: 4443.52
+---
+- 'MARK MCGWIRE'
+- 'SAMMY SOSA'
+- 'KEN GRIFFEY'
+---
+- 'CHICAGO CUBS'
+- 'ST LOUIS CARDINALS'
diff --git a/t/fmt/yaml/basic.yaml b/t/fmt/yaml/basic.yaml
new file mode 100644
index 0000000..646c212
--- /dev/null
+++ b/t/fmt/yaml/basic.yaml
@@ -0,0 +1,107 @@
+# This configuration file dictates the organization of the topic groups and
+# topics on the main page of the doc site for this branch. Each record
+# consists of the following:
+#
+# --- <= Record delimiter
+# Name: Origin of the Species <= Display name of topic group
+# Dir: origin_of_the_species <= Directory name of topic group
+# Topics:
+# - Name: The Majestic Marmoset <= Topic name
+# File: the_majestic_marmoset <= Topic file under group dir +/-
+# - Name: The Curious Crocodile <= Topic 2 name
+# File: the_curious_crocodile <= Topic 2 file
+# - Name: The Numerous Nematodes <= Sub-topic group name
+# Dir: the_numerous_nematodes <= Sub-topic group dir
+# Topics:
+# - Name: The Wily Worm <= Sub-topic name
+# File: the_wily_worm <= Sub-topic file under <group dir>/<subtopic dir>
+# - Name: The Acrobatic Ascarid <= Sub-topic 2 name
+# File: the_acrobatic_ascarid <= Sub-topic 2 file under <group dir>/<subtopic dir>
+#
+# The ordering of the records in this document determines the ordering of the
+# topic groups and topics on the main page.
+---
+Name: Fedora Installation Guide
+Dir: en-US
+Level1:
+ - Name: Book Information
+ File: index
+ - Name: Preface
+ File: Preface
+ - Name: Introduction
+ File: Introduction
+ - Name: Downloading Fedora
+ File: Downloading_Fedora
+ Done: true
+ - Name: Installing Fedora
+ Dir: install
+ Level2-a:
+ - Name: Preparing for Installation
+ File: Preparing_for_Installation
+ - Name: Booting the Installation
+ File: Booting_the_Installation
+ - Name: Installing Using Anaconda
+ File: Installing_Using_Anaconda
+ - Name: After the Installation
+ File: After_Installation
+ - Name: Troubleshooting
+ File: Troubleshooting
+ - Name: Advanced Installation Options
+ Dir: advanced
+ Level2-b:
+ - Name: Boot Options
+ File: Boot_Options
+ - Name: Automating the Installation with Kickstart
+ File: Kickstart_Installations
+ - Name: Setting Up an Installation Server
+ File: Network_based_Installations
+ - Name: Installing Using VNC
+ File: VNC_Installations
+ - Name: Upgrading Your Current System
+ File: Upgrading_Your_Current_System
+ - Name: Technical Appendixes
+ Dir: appendixes
+ Level2-c:
+ - Name: Kickstart Syntax Reference
+ File: Kickstart_Syntax_Reference
+ - Name: An Introduction to Disk Partitions
+ File: Disk_Partitions
+ - Name: Understanding LVM
+ File: Understanding_LVM
+ - Name: Revision History
+ File: Revision_History
+---
+invoice: 34843
+date : 2001-01-23
+paid : false
+bill-to:
+ given : Chris
+ family : Dumars
+ address:
+ lines: |
+ 458 Walkman Dr.
+ Suite #292
+ city : Royal Oak
+ state : MI
+ postal : 48046
+product:
+ - sku : BL394D
+ quantity : 4
+ description : Basketball
+ price : 450.00
+ - sku : BL4438H
+ quantity : 1
+ description : Super Hoop
+ price : 2392.00
+tax : 251.42
+total: 4443.52
+---
+- Mark McGwire
+- Sammy Sosa
+- Ken Griffey
+
+
+# Team ranking
+---
+- Chicago Cubs
+- St Louis Cardinals
diff --git a/t/fmt/yaml/keysandpaths1.po b/t/fmt/yaml/keysandpaths1.po
new file mode 100644
index 0000000..5a18509
--- /dev/null
+++ b/t/fmt/yaml/keysandpaths1.po
@@ -0,0 +1,179 @@
+# SOME DESCRIPTIVE TITLE
+# Copyright (C) YEAR Free Software Foundation, Inc.
+# This file is distributed under the same license as the PACKAGE package.
+# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
+#
+#, fuzzy
+msgid ""
+msgstr ""
+"Project-Id-Version: PACKAGE VERSION\n"
+"POT-Creation-Date: 2021-11-24 16:50+0100\n"
+"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
+"Language-Team: LANGUAGE <LL@li.org>\n"
+"Language: \n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+
+#. type: Hash Value: Level1 Name
+#: basic.yaml:1
+#, no-wrap
+msgid "Book Information"
+msgstr "BOOK INFORMATION"
+
+#. type: Hash Value: Level1 Name
+#: basic.yaml:1
+#, no-wrap
+msgid "Preface"
+msgstr "PREFACE"
+
+#. type: Hash Value: Level1 Name
+#: basic.yaml:1
+#, no-wrap
+msgid "Introduction"
+msgstr "INTRODUCTION"
+
+#. type: Hash Value: Level1 Name
+#: basic.yaml:1
+#, no-wrap
+msgid "Downloading Fedora"
+msgstr "DOWNLOADING FEDORA"
+
+#. type: Hash Value: Level1 Dir
+#: basic.yaml:1
+#, no-wrap
+msgid "install"
+msgstr "INSTALL"
+
+#. type: Hash Value: Level1 Level2-a Name
+#: basic.yaml:1
+#, no-wrap
+msgid "Preparing for Installation"
+msgstr "PREPARING FOR INSTALLATION"
+
+#. type: Hash Value: Level1 Level2-a Name
+#: basic.yaml:1
+#, no-wrap
+msgid "Booting the Installation"
+msgstr "BOOTING THE INSTALLATION"
+
+#. type: Hash Value: Level1 Level2-a Name
+#: basic.yaml:1
+#, no-wrap
+msgid "Installing Using Anaconda"
+msgstr "INSTALLING USING ANACONDA"
+
+#. type: Hash Value: Level1 Level2-a Name
+#: basic.yaml:1
+#, no-wrap
+msgid "After the Installation"
+msgstr "AFTER THE INSTALLATION"
+
+#. type: Hash Value: Level1 Level2-a Name
+#: basic.yaml:1
+#, no-wrap
+msgid "Troubleshooting"
+msgstr "TROUBLESHOOTING"
+
+#. type: Hash Value: Level1 Name
+#: basic.yaml:1
+#, no-wrap
+msgid "Installing Fedora"
+msgstr "INSTALLING FEDORA"
+
+#. type: Hash Value: Level1 Dir
+#: basic.yaml:1
+#, no-wrap
+msgid "advanced"
+msgstr "ADVANCED"
+
+#. type: Hash Value: Level1 Level2-b Name
+#: basic.yaml:1
+#, no-wrap
+msgid "Boot Options"
+msgstr "BOOT OPTIONS"
+
+#. type: Hash Value: Level1 Level2-b Name
+#: basic.yaml:1
+#, no-wrap
+msgid "Automating the Installation with Kickstart"
+msgstr "AUTOMATING THE INSTALLATION WITH KICKSTART"
+
+#. type: Hash Value: Level1 Level2-b Name
+#: basic.yaml:1
+#, no-wrap
+msgid "Setting Up an Installation Server"
+msgstr "SETTING UP AN INSTALLATION SERVER"
+
+#. type: Hash Value: Level1 Level2-b Name
+#: basic.yaml:1
+#, no-wrap
+msgid "Installing Using VNC"
+msgstr "INSTALLING USING VNC"
+
+#. type: Hash Value: Level1 Level2-b Name
+#: basic.yaml:1
+#, no-wrap
+msgid "Upgrading Your Current System"
+msgstr "UPGRAINDG YOUR CURRENT SYSTEM"
+
+#. type: Hash Value: Level1 Name
+#: basic.yaml:1
+#, no-wrap
+msgid "Advanced Installation Options"
+msgstr "ADVANCED INSTALLATION OPTIONS"
+
+#. type: Hash Value: Level1 Dir
+#: basic.yaml:1
+#, no-wrap
+msgid "appendixes"
+msgstr "APPENDIXES"
+
+#. type: Hash Value: Level1 Level2-c Name
+#: basic.yaml:1
+#, no-wrap
+msgid "Kickstart Syntax Reference"
+msgstr "KICKSTART SYNTAX REFERENCE"
+
+#. type: Hash Value: Level1 Level2-c Name
+#: basic.yaml:1
+#, no-wrap
+msgid "An Introduction to Disk Partitions"
+msgstr "AN INTRODUCTION TO DISK PARTITIONS"
+
+#. type: Hash Value: Level1 Level2-c Name
+#: basic.yaml:1
+#, no-wrap
+msgid "Understanding LVM"
+msgstr "UNDERSTANDING LVM"
+
+#. type: Hash Value: Level1 Name
+#: basic.yaml:1
+#, no-wrap
+msgid "Technical Appendixes"
+msgstr "TECHNICAL APPENDIXES"
+
+#. type: Hash Value: Level1 Name
+#: basic.yaml:1
+#, no-wrap
+msgid "Revision History"
+msgstr "REVISION HISTORY"
+
+#. type: Hash Value: Name
+#: basic.yaml:1
+#, no-wrap
+msgid "Fedora Installation Guide"
+msgstr "FEDORA INSTALLATION GUIDE"
+
+#. type: Hash Value: bill-to address city
+#: basic.yaml:1
+#, no-wrap
+msgid "Royal Oak"
+msgstr "ROYAL OAK"
+
+#. type: Hash Value: invoice
+#: basic.yaml:1
+#, no-wrap
+msgid "34843"
+msgstr "#34843#"
diff --git a/t/fmt/yaml/keysandpaths1.pot b/t/fmt/yaml/keysandpaths1.pot
new file mode 100644
index 0000000..cc8ccdc
--- /dev/null
+++ b/t/fmt/yaml/keysandpaths1.pot
@@ -0,0 +1,179 @@
+# SOME DESCRIPTIVE TITLE
+# Copyright (C) YEAR Free Software Foundation, Inc.
+# This file is distributed under the same license as the PACKAGE package.
+# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
+#
+#, fuzzy
+msgid ""
+msgstr ""
+"Project-Id-Version: PACKAGE VERSION\n"
+"POT-Creation-Date: 2021-11-24 19:05+0100\n"
+"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
+"Language-Team: LANGUAGE <LL@li.org>\n"
+"Language: \n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+
+#. type: Hash Value: Level1 Name
+#: basic.yaml:1
+#, no-wrap
+msgid "Book Information"
+msgstr ""
+
+#. type: Hash Value: Level1 Name
+#: basic.yaml:1
+#, no-wrap
+msgid "Preface"
+msgstr ""
+
+#. type: Hash Value: Level1 Name
+#: basic.yaml:1
+#, no-wrap
+msgid "Introduction"
+msgstr ""
+
+#. type: Hash Value: Level1 Name
+#: basic.yaml:1
+#, no-wrap
+msgid "Downloading Fedora"
+msgstr ""
+
+#. type: Hash Value: Level1 Dir
+#: basic.yaml:1
+#, no-wrap
+msgid "install"
+msgstr ""
+
+#. type: Hash Value: Level1 Level2-a Name
+#: basic.yaml:1
+#, no-wrap
+msgid "Preparing for Installation"
+msgstr ""
+
+#. type: Hash Value: Level1 Level2-a Name
+#: basic.yaml:1
+#, no-wrap
+msgid "Booting the Installation"
+msgstr ""
+
+#. type: Hash Value: Level1 Level2-a Name
+#: basic.yaml:1
+#, no-wrap
+msgid "Installing Using Anaconda"
+msgstr ""
+
+#. type: Hash Value: Level1 Level2-a Name
+#: basic.yaml:1
+#, no-wrap
+msgid "After the Installation"
+msgstr ""
+
+#. type: Hash Value: Level1 Level2-a Name
+#: basic.yaml:1
+#, no-wrap
+msgid "Troubleshooting"
+msgstr ""
+
+#. type: Hash Value: Level1 Name
+#: basic.yaml:1
+#, no-wrap
+msgid "Installing Fedora"
+msgstr ""
+
+#. type: Hash Value: Level1 Dir
+#: basic.yaml:1
+#, no-wrap
+msgid "advanced"
+msgstr ""
+
+#. type: Hash Value: Level1 Level2-b Name
+#: basic.yaml:1
+#, no-wrap
+msgid "Boot Options"
+msgstr ""
+
+#. type: Hash Value: Level1 Level2-b Name
+#: basic.yaml:1
+#, no-wrap
+msgid "Automating the Installation with Kickstart"
+msgstr ""
+
+#. type: Hash Value: Level1 Level2-b Name
+#: basic.yaml:1
+#, no-wrap
+msgid "Setting Up an Installation Server"
+msgstr ""
+
+#. type: Hash Value: Level1 Level2-b Name
+#: basic.yaml:1
+#, no-wrap
+msgid "Installing Using VNC"
+msgstr ""
+
+#. type: Hash Value: Level1 Level2-b Name
+#: basic.yaml:1
+#, no-wrap
+msgid "Upgrading Your Current System"
+msgstr ""
+
+#. type: Hash Value: Level1 Name
+#: basic.yaml:1
+#, no-wrap
+msgid "Advanced Installation Options"
+msgstr ""
+
+#. type: Hash Value: Level1 Dir
+#: basic.yaml:1
+#, no-wrap
+msgid "appendixes"
+msgstr ""
+
+#. type: Hash Value: Level1 Level2-c Name
+#: basic.yaml:1
+#, no-wrap
+msgid "Kickstart Syntax Reference"
+msgstr ""
+
+#. type: Hash Value: Level1 Level2-c Name
+#: basic.yaml:1
+#, no-wrap
+msgid "An Introduction to Disk Partitions"
+msgstr ""
+
+#. type: Hash Value: Level1 Level2-c Name
+#: basic.yaml:1
+#, no-wrap
+msgid "Understanding LVM"
+msgstr ""
+
+#. type: Hash Value: Level1 Name
+#: basic.yaml:1
+#, no-wrap
+msgid "Technical Appendixes"
+msgstr ""
+
+#. type: Hash Value: Level1 Name
+#: basic.yaml:1
+#, no-wrap
+msgid "Revision History"
+msgstr ""
+
+#. type: Hash Value: Name
+#: basic.yaml:1
+#, no-wrap
+msgid "Fedora Installation Guide"
+msgstr ""
+
+#. type: Hash Value: bill-to address city
+#: basic.yaml:1
+#, no-wrap
+msgid "Royal Oak"
+msgstr ""
+
+#. type: Hash Value: invoice
+#: basic.yaml:1
+#, no-wrap
+msgid "34843"
+msgstr ""
diff --git a/t/fmt/yaml/keysandpaths1.trans b/t/fmt/yaml/keysandpaths1.trans
new file mode 100644
index 0000000..2f4d3ea
--- /dev/null
+++ b/t/fmt/yaml/keysandpaths1.trans
@@ -0,0 +1,103 @@
+---
+Dir: en-US
+Level1:
+ -
+ File: index
+ Name: 'BOOK INFORMATION'
+ -
+ File: Preface
+ Name: PREFACE
+ -
+ File: Introduction
+ Name: INTRODUCTION
+ -
+ Done: true
+ File: Downloading_Fedora
+ Name: 'DOWNLOADING FEDORA'
+ -
+ Dir: INSTALL
+ Level2-a:
+ -
+ File: Preparing_for_Installation
+ Name: 'PREPARING FOR INSTALLATION'
+ -
+ File: Booting_the_Installation
+ Name: 'BOOTING THE INSTALLATION'
+ -
+ File: Installing_Using_Anaconda
+ Name: 'INSTALLING USING ANACONDA'
+ -
+ File: After_Installation
+ Name: 'AFTER THE INSTALLATION'
+ -
+ File: Troubleshooting
+ Name: TROUBLESHOOTING
+ Name: 'INSTALLING FEDORA'
+ -
+ Dir: ADVANCED
+ Level2-b:
+ -
+ File: Boot_Options
+ Name: 'BOOT OPTIONS'
+ -
+ File: Kickstart_Installations
+ Name: 'AUTOMATING THE INSTALLATION WITH KICKSTART'
+ -
+ File: Network_based_Installations
+ Name: 'SETTING UP AN INSTALLATION SERVER'
+ -
+ File: VNC_Installations
+ Name: 'INSTALLING USING VNC'
+ -
+ File: Upgrading_Your_Current_System
+ Name: 'UPGRAINDG YOUR CURRENT SYSTEM'
+ Name: 'ADVANCED INSTALLATION OPTIONS'
+ -
+ Dir: APPENDIXES
+ Level2-c:
+ -
+ File: Kickstart_Syntax_Reference
+ Name: 'KICKSTART SYNTAX REFERENCE'
+ -
+ File: Disk_Partitions
+ Name: 'AN INTRODUCTION TO DISK PARTITIONS'
+ -
+ File: Understanding_LVM
+ Name: 'UNDERSTANDING LVM'
+ Name: 'TECHNICAL APPENDIXES'
+ -
+ File: Revision_History
+ Name: 'REVISION HISTORY'
+Name: 'FEDORA INSTALLATION GUIDE'
+---
+bill-to:
+ address:
+ city: 'ROYAL OAK'
+ lines: "458 Walkman Dr.\nSuite #292\n"
+ postal: 48046
+ state: MI
+ family: Dumars
+ given: Chris
+date: 2001-01-23
+invoice: '#34843#'
+paid: false
+product:
+ -
+ description: Basketball
+ price: 450.00
+ quantity: 4
+ sku: BL394D
+ -
+ description: 'Super Hoop'
+ price: 2392.00
+ quantity: 1
+ sku: BL4438H
+tax: 251.42
+total: 4443.52
+---
+- 'Mark McGwire'
+- 'Sammy Sosa'
+- 'Ken Griffey'
+---
+- 'Chicago Cubs'
+- 'St Louis Cardinals'
diff --git a/t/fmt/yaml/keysoption.norm b/t/fmt/yaml/keysoption.norm
new file mode 100644
index 0000000..1f2533c
--- /dev/null
+++ b/t/fmt/yaml/keysoption.norm
@@ -0,0 +1,25 @@
+---
+Name: Fedora Installation Guide
+Dir: en-US
+Topics:
+ - Name: Book Information
+ File: index
+ - Name: Preface
+ File: Preface
+ - Name: Introduction
+ File: Introduction
+ - Name: Downloading Fedora
+ File: Downloading_Fedora
+ - Name: Installing Fedora
+ Dir: install
+ Sub-Topics:
+ - Name: Preparing for Installation
+ File: Preparing_for_Installation
+ - Name: Booting the Installation
+ File: Booting_the_Installation
+ - Name: Installing Using Anaconda
+ File: Installing_Using_Anaconda
+ - Name: After the Installation
+ File: After_Installation
+ - Name: Troubleshooting
+ File: Troubleshooting
diff --git a/t/fmt/yaml/keysoption.yaml b/t/fmt/yaml/keysoption.yaml
new file mode 100644
index 0000000..1f2533c
--- /dev/null
+++ b/t/fmt/yaml/keysoption.yaml
@@ -0,0 +1,25 @@
+---
+Name: Fedora Installation Guide
+Dir: en-US
+Topics:
+ - Name: Book Information
+ File: index
+ - Name: Preface
+ File: Preface
+ - Name: Introduction
+ File: Introduction
+ - Name: Downloading Fedora
+ File: Downloading_Fedora
+ - Name: Installing Fedora
+ Dir: install
+ Sub-Topics:
+ - Name: Preparing for Installation
+ File: Preparing_for_Installation
+ - Name: Booting the Installation
+ File: Booting_the_Installation
+ - Name: Installing Using Anaconda
+ File: Installing_Using_Anaconda
+ - Name: After the Installation
+ File: After_Installation
+ - Name: Troubleshooting
+ File: Troubleshooting
diff --git a/t/fmt/yaml/keysoption1.po b/t/fmt/yaml/keysoption1.po
new file mode 100644
index 0000000..8a57b1b
--- /dev/null
+++ b/t/fmt/yaml/keysoption1.po
@@ -0,0 +1,267 @@
+# SOME DESCRIPTIVE TITLE
+# Copyright (C) YEAR Free Software Foundation, Inc.
+# This file is distributed under the same license as the PACKAGE package.
+# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
+#
+#, fuzzy
+msgid ""
+msgstr ""
+"Project-Id-Version: PACKAGE VERSION\n"
+"POT-Creation-Date: 2021-02-08 08:15+0100\n"
+"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
+"Language-Team: LANGUAGE <LL@li.org>\n"
+"Language: \n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+
+#. type: Hash Value: Level1 Name
+#: basic.yaml:1
+#, no-wrap
+msgid "Book Information"
+msgstr "BOOK INFORMATION"
+
+#. type: Hash Value: Level1 Name
+#: basic.yaml:1
+#, no-wrap
+msgid "Preface"
+msgstr "PREFACE"
+
+#. type: Hash Value: Level1 Name
+#: basic.yaml:1
+#, no-wrap
+msgid "Introduction"
+msgstr "INTRODUCTION"
+
+#. type: Hash Value: Level1 Name
+#: basic.yaml:1
+#, no-wrap
+msgid "Downloading Fedora"
+msgstr "DOWNLOADING FEDORA"
+
+#. type: Hash Value: Level1 Level2-a Name
+#: basic.yaml:1
+#, no-wrap
+msgid "Preparing for Installation"
+msgstr "PREPARING FOR INSTALLATION"
+
+#. type: Hash Value: Level1 Level2-a Name
+#: basic.yaml:1
+#, no-wrap
+msgid "Booting the Installation"
+msgstr "BOOTING THE INSTALLATION"
+
+#. type: Hash Value: Level1 Level2-a Name
+#: basic.yaml:1
+#, no-wrap
+msgid "Installing Using Anaconda"
+msgstr "INSTALLING USING ANACONDA"
+
+#. type: Hash Value: Level1 Level2-a Name
+#: basic.yaml:1
+#, no-wrap
+msgid "After the Installation"
+msgstr "AFTER THE INSTALLATION"
+
+#. type: Hash Value: Level1 Level2-a Name
+#: basic.yaml:1
+#, no-wrap
+msgid "Troubleshooting"
+msgstr "TROUBLESHOOTING"
+
+#. type: Hash Value: Level1 Name
+#: basic.yaml:1
+#, no-wrap
+msgid "Installing Fedora"
+msgstr "INSTALLING FEDORA"
+
+#. type: Hash Value: Level1 Level2-b Name
+#: basic.yaml:1
+#, no-wrap
+msgid "Boot Options"
+msgstr "BOOT OPTIONS"
+
+#. type: Hash Value: Level1 Level2-b Name
+#: basic.yaml:1
+#, no-wrap
+msgid "Automating the Installation with Kickstart"
+msgstr "AUTOMATING THE INSTALLATION WITH KICKSTART"
+
+#. type: Hash Value: Level1 Level2-b Name
+#: basic.yaml:1
+#, no-wrap
+msgid "Setting Up an Installation Server"
+msgstr "SETTING UP AN INSTALLATION SERVER"
+
+#. type: Hash Value: Level1 Level2-b Name
+#: basic.yaml:1
+#, no-wrap
+msgid "Installing Using VNC"
+msgstr "INSTALLING USING VNC"
+
+#. type: Hash Value: Level1 Level2-b Name
+#: basic.yaml:1
+#, no-wrap
+msgid "Upgrading Your Current System"
+msgstr "UPGRADING YOUR CURRENT SYSTEM"
+
+#. type: Hash Value: Level1 Name
+#: basic.yaml:1
+#, no-wrap
+msgid "Advanced Installation Options"
+msgstr "ADVANCED INSTALLATION OPTIONS"
+
+#. type: Hash Value: Level1 Level2-c Name
+#: basic.yaml:1
+#, no-wrap
+msgid "Kickstart Syntax Reference"
+msgstr "KICKSTART SYNTAX REFERENCE"
+
+#. type: Hash Value: Level1 Level2-c Name
+#: basic.yaml:1
+#, no-wrap
+msgid "An Introduction to Disk Partitions"
+msgstr "AN INTRODUCTION TO DISK PARTITIONS"
+
+#. type: Hash Value: Level1 Level2-c Name
+#: basic.yaml:1
+#, no-wrap
+msgid "Understanding LVM"
+msgstr "UNDERSTANDING LVM"
+
+#. type: Hash Value: Level1 Name
+#: basic.yaml:1
+#, no-wrap
+msgid "Technical Appendixes"
+msgstr "TECHNICAL APPENDIXES"
+
+#. type: Hash Value: Level1 Name
+#: basic.yaml:1
+#, no-wrap
+msgid "Revision History"
+msgstr "REVISION HISTORY"
+
+#. type: Hash Value: Name
+#: basic.yaml:1
+#, no-wrap
+msgid "Fedora Installation Guide"
+msgstr "FEDORA INSTALLATION GUIDE"
+
+#. type: Array Element:
+#: basic.yaml:1
+#, no-wrap
+msgid "Mark McGwire"
+msgstr "MARK MCGWIRE"
+
+#. type: Array Element:
+#: basic.yaml:1
+#, no-wrap
+msgid "Sammy Sosa"
+msgstr "SAMMY SOSA"
+
+#. type: Array Element:
+#: basic.yaml:1
+#, no-wrap
+msgid "Ken Griffey"
+msgstr "KEN GRIFFEY"
+
+#. type: Array Element:
+#: basic.yaml:1
+#, no-wrap
+msgid "Chicago Cubs"
+msgstr "CHICAGO CUBS"
+
+#. type: Array Element:
+#: basic.yaml:1
+#, no-wrap
+msgid "St Louis Cardinals"
+msgstr "ST LOUIS CARDINALS"
+
+#~ msgid "index"
+#~ msgstr "INDEX"
+
+#~ msgid "Downloading_Fedora"
+#~ msgstr "DOWNLOADING_FEDORA"
+
+#~ msgid "install"
+#~ msgstr "INSTALL"
+
+#~ msgid "Preparing_for_Installation"
+#~ msgstr "PREPARING_FOR_INSTALLATION"
+
+#~ msgid "Booting_the_Installation"
+#~ msgstr "BOOTING_THE_INSTALLATION"
+
+#~ msgid "Installing_Using_Anaconda"
+#~ msgstr "INSTALLING USING ANACONDA"
+
+#~ msgid "After_Installation"
+#~ msgstr "AFTER_INSTALLATION"
+
+#~ msgid "advanced"
+#~ msgstr "ADVANCED"
+
+#~ msgid "Boot_Options"
+#~ msgstr "BOOT_OPTIONS"
+
+#~ msgid "Kickstart_Installations"
+#~ msgstr "KICKSTART_INSTALLATIONS"
+
+#~ msgid "Network_based_Installations"
+#~ msgstr "NETWORK_BASED_INSTALLATIONS"
+
+#~ msgid "VNC_Installations"
+#~ msgstr "VNC_INSTALLATIONS"
+
+#~ msgid "Upgrading_Your_Current_System"
+#~ msgstr "UPGRADING_YOUR_CURRENT_SYSTEM"
+
+#~ msgid "appendixes"
+#~ msgstr "APPENDIXES"
+
+#~ msgid "Kickstart_Syntax_Reference"
+#~ msgstr "KICKSTART_SYNTAX_REFERENCE"
+
+#~ msgid "Disk_Partitions"
+#~ msgstr "DISK_PARTITIONS"
+
+#~ msgid "Understanding_LVM"
+#~ msgstr "UNDERSTANDING_LVM"
+
+#~ msgid "Revision_History"
+#~ msgstr "REVISION_HISTORY"
+
+#~ msgid "Royal Oak"
+#~ msgstr "ROYAL OAK"
+
+#~ msgid ""
+#~ "458 Walkman Dr.\n"
+#~ "Suite #292\n"
+#~ msgstr ""
+#~ "458 WALKMAN DR.\n"
+#~ "SUITE #292\n"
+
+#~ msgid "48046"
+#~ msgstr "48046"
+
+#~ msgid "MI"
+#~ msgstr "MI"
+
+#~ msgid "Dumars"
+#~ msgstr "DUMARS"
+
+#~ msgid "Chris"
+#~ msgstr "CHRIS"
+
+#~ msgid "2001-01-23"
+#~ msgstr "2001-01-23"
+
+#~ msgid "34843"
+#~ msgstr "34843"
+
+#~ msgid "Basketball"
+#~ msgstr "BASKETBALL"
+
+#~ msgid "Super Hoop"
+#~ msgstr "SUPER HOOP"
diff --git a/t/fmt/yaml/keysoption1.pot b/t/fmt/yaml/keysoption1.pot
new file mode 100644
index 0000000..f656196
--- /dev/null
+++ b/t/fmt/yaml/keysoption1.pot
@@ -0,0 +1,179 @@
+# SOME DESCRIPTIVE TITLE
+# Copyright (C) YEAR Free Software Foundation, Inc.
+# This file is distributed under the same license as the PACKAGE package.
+# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
+#
+#, fuzzy
+msgid ""
+msgstr ""
+"Project-Id-Version: PACKAGE VERSION\n"
+"POT-Creation-Date: 2021-02-08 08:15+0100\n"
+"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
+"Language-Team: LANGUAGE <LL@li.org>\n"
+"Language: \n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+
+#. type: Hash Value: Level1 Name
+#: basic.yaml:1
+#, no-wrap
+msgid "Book Information"
+msgstr ""
+
+#. type: Hash Value: Level1 Name
+#: basic.yaml:1
+#, no-wrap
+msgid "Preface"
+msgstr ""
+
+#. type: Hash Value: Level1 Name
+#: basic.yaml:1
+#, no-wrap
+msgid "Introduction"
+msgstr ""
+
+#. type: Hash Value: Level1 Name
+#: basic.yaml:1
+#, no-wrap
+msgid "Downloading Fedora"
+msgstr ""
+
+#. type: Hash Value: Level1 Level2-a Name
+#: basic.yaml:1
+#, no-wrap
+msgid "Preparing for Installation"
+msgstr ""
+
+#. type: Hash Value: Level1 Level2-a Name
+#: basic.yaml:1
+#, no-wrap
+msgid "Booting the Installation"
+msgstr ""
+
+#. type: Hash Value: Level1 Level2-a Name
+#: basic.yaml:1
+#, no-wrap
+msgid "Installing Using Anaconda"
+msgstr ""
+
+#. type: Hash Value: Level1 Level2-a Name
+#: basic.yaml:1
+#, no-wrap
+msgid "After the Installation"
+msgstr ""
+
+#. type: Hash Value: Level1 Level2-a Name
+#: basic.yaml:1
+#, no-wrap
+msgid "Troubleshooting"
+msgstr ""
+
+#. type: Hash Value: Level1 Name
+#: basic.yaml:1
+#, no-wrap
+msgid "Installing Fedora"
+msgstr ""
+
+#. type: Hash Value: Level1 Level2-b Name
+#: basic.yaml:1
+#, no-wrap
+msgid "Boot Options"
+msgstr ""
+
+#. type: Hash Value: Level1 Level2-b Name
+#: basic.yaml:1
+#, no-wrap
+msgid "Automating the Installation with Kickstart"
+msgstr ""
+
+#. type: Hash Value: Level1 Level2-b Name
+#: basic.yaml:1
+#, no-wrap
+msgid "Setting Up an Installation Server"
+msgstr ""
+
+#. type: Hash Value: Level1 Level2-b Name
+#: basic.yaml:1
+#, no-wrap
+msgid "Installing Using VNC"
+msgstr ""
+
+#. type: Hash Value: Level1 Level2-b Name
+#: basic.yaml:1
+#, no-wrap
+msgid "Upgrading Your Current System"
+msgstr ""
+
+#. type: Hash Value: Level1 Name
+#: basic.yaml:1
+#, no-wrap
+msgid "Advanced Installation Options"
+msgstr ""
+
+#. type: Hash Value: Level1 Level2-c Name
+#: basic.yaml:1
+#, no-wrap
+msgid "Kickstart Syntax Reference"
+msgstr ""
+
+#. type: Hash Value: Level1 Level2-c Name
+#: basic.yaml:1
+#, no-wrap
+msgid "An Introduction to Disk Partitions"
+msgstr ""
+
+#. type: Hash Value: Level1 Level2-c Name
+#: basic.yaml:1
+#, no-wrap
+msgid "Understanding LVM"
+msgstr ""
+
+#. type: Hash Value: Level1 Name
+#: basic.yaml:1
+#, no-wrap
+msgid "Technical Appendixes"
+msgstr ""
+
+#. type: Hash Value: Level1 Name
+#: basic.yaml:1
+#, no-wrap
+msgid "Revision History"
+msgstr ""
+
+#. type: Hash Value: Name
+#: basic.yaml:1
+#, no-wrap
+msgid "Fedora Installation Guide"
+msgstr ""
+
+#. type: Array Element:
+#: basic.yaml:1
+#, no-wrap
+msgid "Mark McGwire"
+msgstr ""
+
+#. type: Array Element:
+#: basic.yaml:1
+#, no-wrap
+msgid "Sammy Sosa"
+msgstr ""
+
+#. type: Array Element:
+#: basic.yaml:1
+#, no-wrap
+msgid "Ken Griffey"
+msgstr ""
+
+#. type: Array Element:
+#: basic.yaml:1
+#, no-wrap
+msgid "Chicago Cubs"
+msgstr ""
+
+#. type: Array Element:
+#: basic.yaml:1
+#, no-wrap
+msgid "St Louis Cardinals"
+msgstr ""
diff --git a/t/fmt/yaml/keysoption1.trans b/t/fmt/yaml/keysoption1.trans
new file mode 100644
index 0000000..73a517b
--- /dev/null
+++ b/t/fmt/yaml/keysoption1.trans
@@ -0,0 +1,103 @@
+---
+Dir: en-US
+Level1:
+ -
+ File: index
+ Name: 'BOOK INFORMATION'
+ -
+ File: Preface
+ Name: PREFACE
+ -
+ File: Introduction
+ Name: INTRODUCTION
+ -
+ Done: true
+ File: Downloading_Fedora
+ Name: 'DOWNLOADING FEDORA'
+ -
+ Dir: install
+ Level2-a:
+ -
+ File: Preparing_for_Installation
+ Name: 'PREPARING FOR INSTALLATION'
+ -
+ File: Booting_the_Installation
+ Name: 'BOOTING THE INSTALLATION'
+ -
+ File: Installing_Using_Anaconda
+ Name: 'INSTALLING USING ANACONDA'
+ -
+ File: After_Installation
+ Name: 'AFTER THE INSTALLATION'
+ -
+ File: Troubleshooting
+ Name: TROUBLESHOOTING
+ Name: 'INSTALLING FEDORA'
+ -
+ Dir: advanced
+ Level2-b:
+ -
+ File: Boot_Options
+ Name: 'BOOT OPTIONS'
+ -
+ File: Kickstart_Installations
+ Name: 'AUTOMATING THE INSTALLATION WITH KICKSTART'
+ -
+ File: Network_based_Installations
+ Name: 'SETTING UP AN INSTALLATION SERVER'
+ -
+ File: VNC_Installations
+ Name: 'INSTALLING USING VNC'
+ -
+ File: Upgrading_Your_Current_System
+ Name: 'UPGRADING YOUR CURRENT SYSTEM'
+ Name: 'ADVANCED INSTALLATION OPTIONS'
+ -
+ Dir: appendixes
+ Level2-c:
+ -
+ File: Kickstart_Syntax_Reference
+ Name: 'KICKSTART SYNTAX REFERENCE'
+ -
+ File: Disk_Partitions
+ Name: 'AN INTRODUCTION TO DISK PARTITIONS'
+ -
+ File: Understanding_LVM
+ Name: 'UNDERSTANDING LVM'
+ Name: 'TECHNICAL APPENDIXES'
+ -
+ File: Revision_History
+ Name: 'REVISION HISTORY'
+Name: 'FEDORA INSTALLATION GUIDE'
+---
+bill-to:
+ address:
+ city: 'Royal Oak'
+ lines: "458 Walkman Dr.\nSuite #292\n"
+ postal: 48046
+ state: MI
+ family: Dumars
+ given: Chris
+date: 2001-01-23
+invoice: 34843
+paid: false
+product:
+ -
+ description: Basketball
+ price: 450.00
+ quantity: 4
+ sku: BL394D
+ -
+ description: 'Super Hoop'
+ price: 2392.00
+ quantity: 1
+ sku: BL4438H
+tax: 251.42
+total: 4443.52
+---
+- 'MARK MCGWIRE'
+- 'SAMMY SOSA'
+- 'KEN GRIFFEY'
+---
+- 'CHICAGO CUBS'
+- 'ST LOUIS CARDINALS'
diff --git a/t/fmt/yaml/keysoption1.yaml b/t/fmt/yaml/keysoption1.yaml
new file mode 100644
index 0000000..1f2533c
--- /dev/null
+++ b/t/fmt/yaml/keysoption1.yaml
@@ -0,0 +1,25 @@
+---
+Name: Fedora Installation Guide
+Dir: en-US
+Topics:
+ - Name: Book Information
+ File: index
+ - Name: Preface
+ File: Preface
+ - Name: Introduction
+ File: Introduction
+ - Name: Downloading Fedora
+ File: Downloading_Fedora
+ - Name: Installing Fedora
+ Dir: install
+ Sub-Topics:
+ - Name: Preparing for Installation
+ File: Preparing_for_Installation
+ - Name: Booting the Installation
+ File: Booting_the_Installation
+ - Name: Installing Using Anaconda
+ File: Installing_Using_Anaconda
+ - Name: After the Installation
+ File: After_Installation
+ - Name: Troubleshooting
+ File: Troubleshooting
diff --git a/t/fmt/yaml/keysoption2.po b/t/fmt/yaml/keysoption2.po
new file mode 100644
index 0000000..9eb563c
--- /dev/null
+++ b/t/fmt/yaml/keysoption2.po
@@ -0,0 +1,312 @@
+# SOME DESCRIPTIVE TITLE
+# Copyright (C) YEAR Free Software Foundation, Inc.
+# This file is distributed under the same license as the PACKAGE package.
+# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
+#
+#, fuzzy
+msgid ""
+msgstr ""
+"Project-Id-Version: PACKAGE VERSION\n"
+"POT-Creation-Date: 2021-02-08 08:16+0100\n"
+"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
+"Language-Team: LANGUAGE <LL@li.org>\n"
+"Language: \n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+
+#. type: Hash Value: Level1 File
+#: basic.yaml:1
+#, no-wrap
+msgid "index"
+msgstr "INDEX"
+
+#. type: Hash Value: Level1 Name
+#: basic.yaml:1
+#, no-wrap
+msgid "Book Information"
+msgstr "BOOK INFORMATION"
+
+#. type: Hash Value: Level1 Name
+#: basic.yaml:1
+#, no-wrap
+msgid "Preface"
+msgstr "PREFACE"
+
+#. type: Hash Value: Level1 Name
+#: basic.yaml:1
+#, no-wrap
+msgid "Introduction"
+msgstr "INTRODUCTION"
+
+#. type: Hash Value: Level1 File
+#: basic.yaml:1
+#, no-wrap
+msgid "Downloading_Fedora"
+msgstr "DOWNLOADING_FEDORA"
+
+#. type: Hash Value: Level1 Name
+#: basic.yaml:1
+#, no-wrap
+msgid "Downloading Fedora"
+msgstr "DOWNLOADING FEDORA"
+
+#. type: Hash Value: Level1 Level2-a File
+#: basic.yaml:1
+#, no-wrap
+msgid "Preparing_for_Installation"
+msgstr "PREPARING_FOR_INSTALLATION"
+
+#. type: Hash Value: Level1 Level2-a Name
+#: basic.yaml:1
+#, no-wrap
+msgid "Preparing for Installation"
+msgstr "PREPARING FOR INSTALLATION"
+
+#. type: Hash Value: Level1 Level2-a File
+#: basic.yaml:1
+#, no-wrap
+msgid "Booting_the_Installation"
+msgstr "BOOTING_THE_INSTALLATION"
+
+#. type: Hash Value: Level1 Level2-a Name
+#: basic.yaml:1
+#, no-wrap
+msgid "Booting the Installation"
+msgstr "BOOTING THE INSTALLATION"
+
+#. type: Hash Value: Level1 Level2-a File
+#: basic.yaml:1
+#, no-wrap
+msgid "Installing_Using_Anaconda"
+msgstr "INSTALLING USING ANACONDA"
+
+#. type: Hash Value: Level1 Level2-a Name
+#: basic.yaml:1
+#, no-wrap
+msgid "Installing Using Anaconda"
+msgstr "INSTALLING USING ANACONDA"
+
+#. type: Hash Value: Level1 Level2-a File
+#: basic.yaml:1
+#, no-wrap
+msgid "After_Installation"
+msgstr "AFTER_INSTALLATION"
+
+#. type: Hash Value: Level1 Level2-a Name
+#: basic.yaml:1
+#, no-wrap
+msgid "After the Installation"
+msgstr "AFTER THE INSTALLATION"
+
+#. type: Hash Value: Level1 Level2-a Name
+#: basic.yaml:1
+#, no-wrap
+msgid "Troubleshooting"
+msgstr "TROUBLESHOOTING"
+
+#. type: Hash Value: Level1 Name
+#: basic.yaml:1
+#, no-wrap
+msgid "Installing Fedora"
+msgstr "INSTALLING FEDORA"
+
+#. type: Hash Value: Level1 Level2-b File
+#: basic.yaml:1
+#, no-wrap
+msgid "Boot_Options"
+msgstr "BOOT_OPTIONS"
+
+#. type: Hash Value: Level1 Level2-b Name
+#: basic.yaml:1
+#, no-wrap
+msgid "Boot Options"
+msgstr "BOOT OPTIONS"
+
+#. type: Hash Value: Level1 Level2-b File
+#: basic.yaml:1
+#, no-wrap
+msgid "Kickstart_Installations"
+msgstr "KICKSTART_INSTALLATIONS"
+
+#. type: Hash Value: Level1 Level2-b Name
+#: basic.yaml:1
+#, no-wrap
+msgid "Automating the Installation with Kickstart"
+msgstr "AUTOMATING THE INSTALLATION WITH KICKSTART"
+
+#. type: Hash Value: Level1 Level2-b File
+#: basic.yaml:1
+#, no-wrap
+msgid "Network_based_Installations"
+msgstr "NETWORK_BASED_INSTALLATIONS"
+
+#. type: Hash Value: Level1 Level2-b Name
+#: basic.yaml:1
+#, no-wrap
+msgid "Setting Up an Installation Server"
+msgstr "SETTING UP AN INSTALLATION SERVER"
+
+#. type: Hash Value: Level1 Level2-b File
+#: basic.yaml:1
+#, no-wrap
+msgid "VNC_Installations"
+msgstr "VNC_INSTALLATIONS"
+
+#. type: Hash Value: Level1 Level2-b Name
+#: basic.yaml:1
+#, no-wrap
+msgid "Installing Using VNC"
+msgstr "INSTALLING USING VNC"
+
+#. type: Hash Value: Level1 Level2-b File
+#: basic.yaml:1
+#, no-wrap
+msgid "Upgrading_Your_Current_System"
+msgstr "UPGRADING_YOUR_CURRENT_SYSTEM"
+
+#. type: Hash Value: Level1 Level2-b Name
+#: basic.yaml:1
+#, no-wrap
+msgid "Upgrading Your Current System"
+msgstr "UPGRADING YOUR CURRENT SYSTEM"
+
+#. type: Hash Value: Level1 Name
+#: basic.yaml:1
+#, no-wrap
+msgid "Advanced Installation Options"
+msgstr "ADVANCED INSTALLATION OPTIONS"
+
+#. type: Hash Value: Level1 Level2-c File
+#: basic.yaml:1
+#, no-wrap
+msgid "Kickstart_Syntax_Reference"
+msgstr "KICKSTART_SYNTAX_REFERENCE"
+
+#. type: Hash Value: Level1 Level2-c Name
+#: basic.yaml:1
+#, no-wrap
+msgid "Kickstart Syntax Reference"
+msgstr "KICKSTART SYNTAX REFERENCE"
+
+#. type: Hash Value: Level1 Level2-c File
+#: basic.yaml:1
+#, no-wrap
+msgid "Disk_Partitions"
+msgstr "DISK_PARTITIONS"
+
+#. type: Hash Value: Level1 Level2-c Name
+#: basic.yaml:1
+#, no-wrap
+msgid "An Introduction to Disk Partitions"
+msgstr "AN INTRODUCTION TO DISK PARTITIONS"
+
+#. type: Hash Value: Level1 Level2-c File
+#: basic.yaml:1
+#, no-wrap
+msgid "Understanding_LVM"
+msgstr "UNDERSTANDING_LVM"
+
+#. type: Hash Value: Level1 Level2-c Name
+#: basic.yaml:1
+#, no-wrap
+msgid "Understanding LVM"
+msgstr "UNDERSTANDING LVM"
+
+#. type: Hash Value: Level1 Name
+#: basic.yaml:1
+#, no-wrap
+msgid "Technical Appendixes"
+msgstr "TECHNICAL APPENDIXES"
+
+#. type: Hash Value: Level1 File
+#: basic.yaml:1
+#, no-wrap
+msgid "Revision_History"
+msgstr "REVISION_HISTORY"
+
+#. type: Hash Value: Level1 Name
+#: basic.yaml:1
+#, no-wrap
+msgid "Revision History"
+msgstr "REVISION HISTORY"
+
+#. type: Hash Value: Name
+#: basic.yaml:1
+#, no-wrap
+msgid "Fedora Installation Guide"
+msgstr "FEDORA INSTALLATION GUIDE"
+
+#. type: Array Element:
+#: basic.yaml:1
+#, no-wrap
+msgid "Mark McGwire"
+msgstr "MARK MCGWIRE"
+
+#. type: Array Element:
+#: basic.yaml:1
+#, no-wrap
+msgid "Sammy Sosa"
+msgstr "SAMMY SOSA"
+
+#. type: Array Element:
+#: basic.yaml:1
+#, no-wrap
+msgid "Ken Griffey"
+msgstr "KEN GRIFFEY"
+
+#. type: Array Element:
+#: basic.yaml:1
+#, no-wrap
+msgid "Chicago Cubs"
+msgstr "CHICAGO CUBS"
+
+#. type: Array Element:
+#: basic.yaml:1
+#, no-wrap
+msgid "St Louis Cardinals"
+msgstr "ST LOUIS CARDINALS"
+
+#~ msgid "install"
+#~ msgstr "INSTALL"
+
+#~ msgid "advanced"
+#~ msgstr "ADVANCED"
+
+#~ msgid "appendixes"
+#~ msgstr "APPENDIXES"
+
+#~ msgid "Royal Oak"
+#~ msgstr "ROYAL OAK"
+
+#~ msgid ""
+#~ "458 Walkman Dr.\n"
+#~ "Suite #292\n"
+#~ msgstr ""
+#~ "458 WALKMAN DR.\n"
+#~ "SUITE #292\n"
+
+#~ msgid "48046"
+#~ msgstr "48046"
+
+#~ msgid "MI"
+#~ msgstr "MI"
+
+#~ msgid "Dumars"
+#~ msgstr "DUMARS"
+
+#~ msgid "Chris"
+#~ msgstr "CHRIS"
+
+#~ msgid "2001-01-23"
+#~ msgstr "2001-01-23"
+
+#~ msgid "34843"
+#~ msgstr "34843"
+
+#~ msgid "Basketball"
+#~ msgstr "BASKETBALL"
+
+#~ msgid "Super Hoop"
+#~ msgstr "SUPER HOOP"
diff --git a/t/fmt/yaml/keysoption2.pot b/t/fmt/yaml/keysoption2.pot
new file mode 100644
index 0000000..017b98f
--- /dev/null
+++ b/t/fmt/yaml/keysoption2.pot
@@ -0,0 +1,269 @@
+# SOME DESCRIPTIVE TITLE
+# Copyright (C) YEAR Free Software Foundation, Inc.
+# This file is distributed under the same license as the PACKAGE package.
+# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
+#
+#, fuzzy
+msgid ""
+msgstr ""
+"Project-Id-Version: PACKAGE VERSION\n"
+"POT-Creation-Date: 2021-02-08 08:16+0100\n"
+"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
+"Language-Team: LANGUAGE <LL@li.org>\n"
+"Language: \n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+
+#. type: Hash Value: Level1 File
+#: basic.yaml:1
+#, no-wrap
+msgid "index"
+msgstr ""
+
+#. type: Hash Value: Level1 Name
+#: basic.yaml:1
+#, no-wrap
+msgid "Book Information"
+msgstr ""
+
+#. type: Hash Value: Level1 Name
+#: basic.yaml:1
+#, no-wrap
+msgid "Preface"
+msgstr ""
+
+#. type: Hash Value: Level1 Name
+#: basic.yaml:1
+#, no-wrap
+msgid "Introduction"
+msgstr ""
+
+#. type: Hash Value: Level1 File
+#: basic.yaml:1
+#, no-wrap
+msgid "Downloading_Fedora"
+msgstr ""
+
+#. type: Hash Value: Level1 Name
+#: basic.yaml:1
+#, no-wrap
+msgid "Downloading Fedora"
+msgstr ""
+
+#. type: Hash Value: Level1 Level2-a File
+#: basic.yaml:1
+#, no-wrap
+msgid "Preparing_for_Installation"
+msgstr ""
+
+#. type: Hash Value: Level1 Level2-a Name
+#: basic.yaml:1
+#, no-wrap
+msgid "Preparing for Installation"
+msgstr ""
+
+#. type: Hash Value: Level1 Level2-a File
+#: basic.yaml:1
+#, no-wrap
+msgid "Booting_the_Installation"
+msgstr ""
+
+#. type: Hash Value: Level1 Level2-a Name
+#: basic.yaml:1
+#, no-wrap
+msgid "Booting the Installation"
+msgstr ""
+
+#. type: Hash Value: Level1 Level2-a File
+#: basic.yaml:1
+#, no-wrap
+msgid "Installing_Using_Anaconda"
+msgstr ""
+
+#. type: Hash Value: Level1 Level2-a Name
+#: basic.yaml:1
+#, no-wrap
+msgid "Installing Using Anaconda"
+msgstr ""
+
+#. type: Hash Value: Level1 Level2-a File
+#: basic.yaml:1
+#, no-wrap
+msgid "After_Installation"
+msgstr ""
+
+#. type: Hash Value: Level1 Level2-a Name
+#: basic.yaml:1
+#, no-wrap
+msgid "After the Installation"
+msgstr ""
+
+#. type: Hash Value: Level1 Level2-a Name
+#: basic.yaml:1
+#, no-wrap
+msgid "Troubleshooting"
+msgstr ""
+
+#. type: Hash Value: Level1 Name
+#: basic.yaml:1
+#, no-wrap
+msgid "Installing Fedora"
+msgstr ""
+
+#. type: Hash Value: Level1 Level2-b File
+#: basic.yaml:1
+#, no-wrap
+msgid "Boot_Options"
+msgstr ""
+
+#. type: Hash Value: Level1 Level2-b Name
+#: basic.yaml:1
+#, no-wrap
+msgid "Boot Options"
+msgstr ""
+
+#. type: Hash Value: Level1 Level2-b File
+#: basic.yaml:1
+#, no-wrap
+msgid "Kickstart_Installations"
+msgstr ""
+
+#. type: Hash Value: Level1 Level2-b Name
+#: basic.yaml:1
+#, no-wrap
+msgid "Automating the Installation with Kickstart"
+msgstr ""
+
+#. type: Hash Value: Level1 Level2-b File
+#: basic.yaml:1
+#, no-wrap
+msgid "Network_based_Installations"
+msgstr ""
+
+#. type: Hash Value: Level1 Level2-b Name
+#: basic.yaml:1
+#, no-wrap
+msgid "Setting Up an Installation Server"
+msgstr ""
+
+#. type: Hash Value: Level1 Level2-b File
+#: basic.yaml:1
+#, no-wrap
+msgid "VNC_Installations"
+msgstr ""
+
+#. type: Hash Value: Level1 Level2-b Name
+#: basic.yaml:1
+#, no-wrap
+msgid "Installing Using VNC"
+msgstr ""
+
+#. type: Hash Value: Level1 Level2-b File
+#: basic.yaml:1
+#, no-wrap
+msgid "Upgrading_Your_Current_System"
+msgstr ""
+
+#. type: Hash Value: Level1 Level2-b Name
+#: basic.yaml:1
+#, no-wrap
+msgid "Upgrading Your Current System"
+msgstr ""
+
+#. type: Hash Value: Level1 Name
+#: basic.yaml:1
+#, no-wrap
+msgid "Advanced Installation Options"
+msgstr ""
+
+#. type: Hash Value: Level1 Level2-c File
+#: basic.yaml:1
+#, no-wrap
+msgid "Kickstart_Syntax_Reference"
+msgstr ""
+
+#. type: Hash Value: Level1 Level2-c Name
+#: basic.yaml:1
+#, no-wrap
+msgid "Kickstart Syntax Reference"
+msgstr ""
+
+#. type: Hash Value: Level1 Level2-c File
+#: basic.yaml:1
+#, no-wrap
+msgid "Disk_Partitions"
+msgstr ""
+
+#. type: Hash Value: Level1 Level2-c Name
+#: basic.yaml:1
+#, no-wrap
+msgid "An Introduction to Disk Partitions"
+msgstr ""
+
+#. type: Hash Value: Level1 Level2-c File
+#: basic.yaml:1
+#, no-wrap
+msgid "Understanding_LVM"
+msgstr ""
+
+#. type: Hash Value: Level1 Level2-c Name
+#: basic.yaml:1
+#, no-wrap
+msgid "Understanding LVM"
+msgstr ""
+
+#. type: Hash Value: Level1 Name
+#: basic.yaml:1
+#, no-wrap
+msgid "Technical Appendixes"
+msgstr ""
+
+#. type: Hash Value: Level1 File
+#: basic.yaml:1
+#, no-wrap
+msgid "Revision_History"
+msgstr ""
+
+#. type: Hash Value: Level1 Name
+#: basic.yaml:1
+#, no-wrap
+msgid "Revision History"
+msgstr ""
+
+#. type: Hash Value: Name
+#: basic.yaml:1
+#, no-wrap
+msgid "Fedora Installation Guide"
+msgstr ""
+
+#. type: Array Element:
+#: basic.yaml:1
+#, no-wrap
+msgid "Mark McGwire"
+msgstr ""
+
+#. type: Array Element:
+#: basic.yaml:1
+#, no-wrap
+msgid "Sammy Sosa"
+msgstr ""
+
+#. type: Array Element:
+#: basic.yaml:1
+#, no-wrap
+msgid "Ken Griffey"
+msgstr ""
+
+#. type: Array Element:
+#: basic.yaml:1
+#, no-wrap
+msgid "Chicago Cubs"
+msgstr ""
+
+#. type: Array Element:
+#: basic.yaml:1
+#, no-wrap
+msgid "St Louis Cardinals"
+msgstr ""
diff --git a/t/fmt/yaml/keysoption2.trans b/t/fmt/yaml/keysoption2.trans
new file mode 100644
index 0000000..dffcf83
--- /dev/null
+++ b/t/fmt/yaml/keysoption2.trans
@@ -0,0 +1,103 @@
+---
+Dir: en-US
+Level1:
+ -
+ File: INDEX
+ Name: 'BOOK INFORMATION'
+ -
+ File: PREFACE
+ Name: PREFACE
+ -
+ File: INTRODUCTION
+ Name: INTRODUCTION
+ -
+ Done: true
+ File: DOWNLOADING_FEDORA
+ Name: 'DOWNLOADING FEDORA'
+ -
+ Dir: install
+ Level2-a:
+ -
+ File: PREPARING_FOR_INSTALLATION
+ Name: 'PREPARING FOR INSTALLATION'
+ -
+ File: BOOTING_THE_INSTALLATION
+ Name: 'BOOTING THE INSTALLATION'
+ -
+ File: 'INSTALLING USING ANACONDA'
+ Name: 'INSTALLING USING ANACONDA'
+ -
+ File: AFTER_INSTALLATION
+ Name: 'AFTER THE INSTALLATION'
+ -
+ File: TROUBLESHOOTING
+ Name: TROUBLESHOOTING
+ Name: 'INSTALLING FEDORA'
+ -
+ Dir: advanced
+ Level2-b:
+ -
+ File: BOOT_OPTIONS
+ Name: 'BOOT OPTIONS'
+ -
+ File: KICKSTART_INSTALLATIONS
+ Name: 'AUTOMATING THE INSTALLATION WITH KICKSTART'
+ -
+ File: NETWORK_BASED_INSTALLATIONS
+ Name: 'SETTING UP AN INSTALLATION SERVER'
+ -
+ File: VNC_INSTALLATIONS
+ Name: 'INSTALLING USING VNC'
+ -
+ File: UPGRADING_YOUR_CURRENT_SYSTEM
+ Name: 'UPGRADING YOUR CURRENT SYSTEM'
+ Name: 'ADVANCED INSTALLATION OPTIONS'
+ -
+ Dir: appendixes
+ Level2-c:
+ -
+ File: KICKSTART_SYNTAX_REFERENCE
+ Name: 'KICKSTART SYNTAX REFERENCE'
+ -
+ File: DISK_PARTITIONS
+ Name: 'AN INTRODUCTION TO DISK PARTITIONS'
+ -
+ File: UNDERSTANDING_LVM
+ Name: 'UNDERSTANDING LVM'
+ Name: 'TECHNICAL APPENDIXES'
+ -
+ File: REVISION_HISTORY
+ Name: 'REVISION HISTORY'
+Name: 'FEDORA INSTALLATION GUIDE'
+---
+bill-to:
+ address:
+ city: 'Royal Oak'
+ lines: "458 Walkman Dr.\nSuite #292\n"
+ postal: 48046
+ state: MI
+ family: Dumars
+ given: Chris
+date: 2001-01-23
+invoice: 34843
+paid: false
+product:
+ -
+ description: Basketball
+ price: 450.00
+ quantity: 4
+ sku: BL394D
+ -
+ description: 'Super Hoop'
+ price: 2392.00
+ quantity: 1
+ sku: BL4438H
+tax: 251.42
+total: 4443.52
+---
+- 'MARK MCGWIRE'
+- 'SAMMY SOSA'
+- 'KEN GRIFFEY'
+---
+- 'CHICAGO CUBS'
+- 'ST LOUIS CARDINALS'
diff --git a/t/fmt/yaml/pathsoption1.po b/t/fmt/yaml/pathsoption1.po
new file mode 100644
index 0000000..9fbeca2
--- /dev/null
+++ b/t/fmt/yaml/pathsoption1.po
@@ -0,0 +1,41 @@
+# SOME DESCRIPTIVE TITLE
+# Copyright (C) YEAR Free Software Foundation, Inc.
+# This file is distributed under the same license as the PACKAGE package.
+# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
+#
+#, fuzzy
+msgid ""
+msgstr ""
+"Project-Id-Version: PACKAGE VERSION\n"
+"POT-Creation-Date: 2021-11-24 19:05+0100\n"
+"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
+"Language-Team: LANGUAGE <LL@li.org>\n"
+"Language: \n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+
+#. type: Hash Value: Level1 Dir
+#: basic.yaml:1
+#, no-wrap
+msgid "install"
+msgstr "INSTALL"
+
+#. type: Hash Value: Level1 Dir
+#: basic.yaml:1
+#, no-wrap
+msgid "advanced"
+msgstr "ADVANCED"
+
+#. type: Hash Value: Level1 Dir
+#: basic.yaml:1
+#, no-wrap
+msgid "appendixes"
+msgstr "APPENDIXES"
+
+#. type: Hash Value: Name
+#: basic.yaml:1
+#, no-wrap
+msgid "Fedora Installation Guide"
+msgstr "FEDORA INSTALLATION GUIDE"
diff --git a/t/fmt/yaml/pathsoption1.pot b/t/fmt/yaml/pathsoption1.pot
new file mode 100644
index 0000000..f7bc151
--- /dev/null
+++ b/t/fmt/yaml/pathsoption1.pot
@@ -0,0 +1,41 @@
+# SOME DESCRIPTIVE TITLE
+# Copyright (C) YEAR Free Software Foundation, Inc.
+# This file is distributed under the same license as the PACKAGE package.
+# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
+#
+#, fuzzy
+msgid ""
+msgstr ""
+"Project-Id-Version: PACKAGE VERSION\n"
+"POT-Creation-Date: 2021-11-24 19:05+0100\n"
+"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
+"Language-Team: LANGUAGE <LL@li.org>\n"
+"Language: \n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+
+#. type: Hash Value: Level1 Dir
+#: basic.yaml:1
+#, no-wrap
+msgid "install"
+msgstr ""
+
+#. type: Hash Value: Level1 Dir
+#: basic.yaml:1
+#, no-wrap
+msgid "advanced"
+msgstr ""
+
+#. type: Hash Value: Level1 Dir
+#: basic.yaml:1
+#, no-wrap
+msgid "appendixes"
+msgstr ""
+
+#. type: Hash Value: Name
+#: basic.yaml:1
+#, no-wrap
+msgid "Fedora Installation Guide"
+msgstr ""
diff --git a/t/fmt/yaml/pathsoption1.trans b/t/fmt/yaml/pathsoption1.trans
new file mode 100644
index 0000000..fba1f1b
--- /dev/null
+++ b/t/fmt/yaml/pathsoption1.trans
@@ -0,0 +1,103 @@
+---
+Dir: en-US
+Level1:
+ -
+ File: index
+ Name: 'Book Information'
+ -
+ File: Preface
+ Name: Preface
+ -
+ File: Introduction
+ Name: Introduction
+ -
+ Done: true
+ File: Downloading_Fedora
+ Name: 'Downloading Fedora'
+ -
+ Dir: INSTALL
+ Level2-a:
+ -
+ File: Preparing_for_Installation
+ Name: 'Preparing for Installation'
+ -
+ File: Booting_the_Installation
+ Name: 'Booting the Installation'
+ -
+ File: Installing_Using_Anaconda
+ Name: 'Installing Using Anaconda'
+ -
+ File: After_Installation
+ Name: 'After the Installation'
+ -
+ File: Troubleshooting
+ Name: Troubleshooting
+ Name: 'Installing Fedora'
+ -
+ Dir: ADVANCED
+ Level2-b:
+ -
+ File: Boot_Options
+ Name: 'Boot Options'
+ -
+ File: Kickstart_Installations
+ Name: 'Automating the Installation with Kickstart'
+ -
+ File: Network_based_Installations
+ Name: 'Setting Up an Installation Server'
+ -
+ File: VNC_Installations
+ Name: 'Installing Using VNC'
+ -
+ File: Upgrading_Your_Current_System
+ Name: 'Upgrading Your Current System'
+ Name: 'Advanced Installation Options'
+ -
+ Dir: APPENDIXES
+ Level2-c:
+ -
+ File: Kickstart_Syntax_Reference
+ Name: 'Kickstart Syntax Reference'
+ -
+ File: Disk_Partitions
+ Name: 'An Introduction to Disk Partitions'
+ -
+ File: Understanding_LVM
+ Name: 'Understanding LVM'
+ Name: 'Technical Appendixes'
+ -
+ File: Revision_History
+ Name: 'Revision History'
+Name: 'FEDORA INSTALLATION GUIDE'
+---
+bill-to:
+ address:
+ city: 'Royal Oak'
+ lines: "458 Walkman Dr.\nSuite #292\n"
+ postal: 48046
+ state: MI
+ family: Dumars
+ given: Chris
+date: 2001-01-23
+invoice: 34843
+paid: false
+product:
+ -
+ description: Basketball
+ price: 450.00
+ quantity: 4
+ sku: BL394D
+ -
+ description: 'Super Hoop'
+ price: 2392.00
+ quantity: 1
+ sku: BL4438H
+tax: 251.42
+total: 4443.52
+---
+- 'Mark McGwire'
+- 'Sammy Sosa'
+- 'Ken Griffey'
+---
+- 'Chicago Cubs'
+- 'St Louis Cardinals'
diff --git a/t/fmt/yaml/skiparray.norm b/t/fmt/yaml/skiparray.norm
new file mode 100644
index 0000000..1426102
--- /dev/null
+++ b/t/fmt/yaml/skiparray.norm
@@ -0,0 +1,7 @@
+---
+name: project
+nav:
+ - modules/ROOT/nav.adoc
+start_page: ROOT:index
+title: 'Fedora Project'
+version: master
diff --git a/t/fmt/yaml/skiparray.po b/t/fmt/yaml/skiparray.po
new file mode 100644
index 0000000..d6a92a7
--- /dev/null
+++ b/t/fmt/yaml/skiparray.po
@@ -0,0 +1,23 @@
+# SOME DESCRIPTIVE TITLE
+# Copyright (C) YEAR Free Software Foundation, Inc.
+# This file is distributed under the same license as the PACKAGE package.
+# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
+#
+#, fuzzy
+msgid ""
+msgstr ""
+"Project-Id-Version: PACKAGE VERSION\n"
+"POT-Creation-Date: 2021-02-08 08:17+0100\n"
+"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
+"Language-Team: LANGUAGE <LL@li.org>\n"
+"Language: \n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+
+#. type: Hash Value: title
+#: skiparray.yaml:1
+#, no-wrap
+msgid "Fedora Project"
+msgstr "FEDORA PROJECT"
diff --git a/t/fmt/yaml/skiparray.pot b/t/fmt/yaml/skiparray.pot
new file mode 100644
index 0000000..82758c6
--- /dev/null
+++ b/t/fmt/yaml/skiparray.pot
@@ -0,0 +1,23 @@
+# SOME DESCRIPTIVE TITLE
+# Copyright (C) YEAR Free Software Foundation, Inc.
+# This file is distributed under the same license as the PACKAGE package.
+# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
+#
+#, fuzzy
+msgid ""
+msgstr ""
+"Project-Id-Version: PACKAGE VERSION\n"
+"POT-Creation-Date: 2021-02-08 08:17+0100\n"
+"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
+"Language-Team: LANGUAGE <LL@li.org>\n"
+"Language: \n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+
+#. type: Hash Value: title
+#: skiparray.yaml:1
+#, no-wrap
+msgid "Fedora Project"
+msgstr ""
diff --git a/t/fmt/yaml/skiparray.trans b/t/fmt/yaml/skiparray.trans
new file mode 100644
index 0000000..a84ca43
--- /dev/null
+++ b/t/fmt/yaml/skiparray.trans
@@ -0,0 +1,7 @@
+---
+name: project
+nav:
+ - modules/ROOT/nav.adoc
+start_page: ROOT:index
+title: 'FEDORA PROJECT'
+version: master
diff --git a/t/fmt/yaml/skiparray.yaml b/t/fmt/yaml/skiparray.yaml
new file mode 100644
index 0000000..5737320
--- /dev/null
+++ b/t/fmt/yaml/skiparray.yaml
@@ -0,0 +1,17 @@
+---
+# Name will be mostly visible in the URL. Treat it as an indentifier.
+# Tip: If you want to use the local preview scripts that come with this repository, please change this value in the site.yml file as well. (under site/start_page)
+name: project
+
+# Title will be visible on the page.
+title: Fedora Project
+
+# If you don't plan to have multiple versions of the docs (for example, to document multiple versions of some software), you can ignore this field. Otherwise, change "master" to a specific version.
+version: master
+
+# We encourage you to name the index page as "index.adoc". If you absolutely have to use a different name, please reflect it here. You can ignore this field otherwise.
+start_page: ROOT:index
+
+# This lists all the menu definitions of your component.
+nav:
+- modules/ROOT/nav.adoc
diff --git a/t/gettextize.t b/t/gettextize.t
new file mode 100644
index 0000000..f490707
--- /dev/null
+++ b/t/gettextize.t
@@ -0,0 +1,39 @@
+#! /usr/bin/perl
+# po4a-gettextize tester.
+
+#########################
+
+use strict;
+use warnings;
+
+use lib q(t);
+use Testhelper;
+
+my @tests;
+
+my $diff_pod_flags = " -I 'This file was generated by po4a' ";
+
+# msginit annoyances, see https://github.com/mquinson/po4a/issues/338
+my $PODIFF =
+ "-I'^\"Project-Id-Version:' -I'^\"POT-Creation-Date:' -I'^\"PO-Revision-Date:' "
+ . "-I'^# [^[:blank:]]* translations for ' -I'^# Language [^[:blank:]]* translations for ' -I'Copyright (C) 20.. Free Software Foundation, Inc.' -I'^# This file is distributed under the same license as the' -I'^# Automatically generated, 20...' ";
+
+$PODIFF .= " -I ^#:";
+
+push @tests,
+ {
+ 'run' =>
+ "cd tmp ; perl ../../po4a-gettextize -f text -o markdown -m ../gettextize/test_ok.md -l ../gettextize/TEST_OK.md -p ./generated.po 2> ./err",
+ 'tests' => [ "diff $PODIFF -u gettextize/test_ok.po tmp/generated.po", "diff -u gettextize/test_ok.err tmp/err" ],
+ 'doc' => "Gettextize a simple file.",
+ },
+ {
+ 'run' =>
+ "cd tmp ; perl ../../po4a-gettextize -f text -o markdown -m ../gettextize/test_dups.md -l ../gettextize/TEST_OK.md -p ./generated.po 2> ./err",
+ 'tests' =>
+ [ "diff $PODIFF -u gettextize/test_dups.po tmp/generated.po", "diff -u gettextize/test_dups.err tmp/err" ],
+ 'doc' => "Gettextize a file with dupplicate entries.",
+ };
+
+run_all_tests(@tests);
+0;
diff --git a/t/gettextize/TEST_OK.md b/t/gettextize/TEST_OK.md
new file mode 100644
index 0000000..3165aa4
--- /dev/null
+++ b/t/gettextize/TEST_OK.md
@@ -0,0 +1,5 @@
+# HELLO
+
+## SUBTITLE
+
+SAMPLE PARAGRAPH. \ No newline at end of file
diff --git a/t/gettextize/test_dups.err b/t/gettextize/test_dups.err
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/t/gettextize/test_dups.err
diff --git a/t/gettextize/test_dups.md b/t/gettextize/test_dups.md
new file mode 100644
index 0000000..333705f
--- /dev/null
+++ b/t/gettextize/test_dups.md
@@ -0,0 +1,5 @@
+# hello
+
+## hello
+
+hello
diff --git a/t/gettextize/test_dups.po b/t/gettextize/test_dups.po
new file mode 100644
index 0000000..059c751
--- /dev/null
+++ b/t/gettextize/test_dups.po
@@ -0,0 +1,30 @@
+# SOME DESCRIPTIVE TITLE
+# Copyright (C) YEAR Free Software Foundation, Inc.
+# This file is distributed under the same license as the PACKAGE package.
+# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
+#
+#, fuzzy
+msgid ""
+msgstr ""
+"Project-Id-Version: PACKAGE VERSION\n"
+"POT-Creation-Date: 2022-07-03 18:58+0200\n"
+"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
+"Language-Team: LANGUAGE <LL@li.org>\n"
+"Language: \n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+
+#. type: Plain text
+#: ../gettextize/test_dups.md:1 ../gettextize/test_dups.md:3
+#: ../gettextize/test_dups.md:5
+#, fuzzy, markdown-text, no-wrap
+msgid "hello"
+msgstr ""
+"#-#-#-#-# ../gettextize/TEST_OK.md:1 (type Title #) #-#-#-#-#\n"
+"HELLO\n"
+"#-#-#-#-# ../gettextize/TEST_OK.md:3 (type: Title ##) #-#-#-#-#\n"
+"SUBTITLE\n"
+"#-#-#-#-# ../gettextize/TEST_OK.md:5 (type: Plain text) #-#-#-#-#\n"
+"SAMPLE PARAGRAPH."
diff --git a/t/gettextize/test_ok.err b/t/gettextize/test_ok.err
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/t/gettextize/test_ok.err
diff --git a/t/gettextize/test_ok.md b/t/gettextize/test_ok.md
new file mode 100644
index 0000000..93627e1
--- /dev/null
+++ b/t/gettextize/test_ok.md
@@ -0,0 +1,5 @@
+# hello
+
+## subtitle
+
+sample paragraph. \ No newline at end of file
diff --git a/t/gettextize/test_ok.po b/t/gettextize/test_ok.po
new file mode 100644
index 0000000..01bfad1
--- /dev/null
+++ b/t/gettextize/test_ok.po
@@ -0,0 +1,35 @@
+# SOME DESCRIPTIVE TITLE
+# Copyright (C) YEAR Free Software Foundation, Inc.
+# This file is distributed under the same license as the PACKAGE package.
+# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
+#
+#, fuzzy
+msgid ""
+msgstr ""
+"Project-Id-Version: PACKAGE VERSION\n"
+"POT-Creation-Date: 2022-07-03 18:24+0200\n"
+"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
+"Language-Team: LANGUAGE <LL@li.org>\n"
+"Language: \n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+
+#. type: Title #
+#: gettextize/test_ok.md:1
+#, fuzzy, markdown-text, no-wrap
+msgid "hello"
+msgstr "HELLO"
+
+#. type: Title ##
+#: gettextize/test_ok.md:3
+#, fuzzy, markdown-text, no-wrap
+msgid "subtitle"
+msgstr "SUBTITLE"
+
+#. type: Plain text
+#: gettextize/test_ok.md:5
+#, fuzzy, markdown-text
+msgid "sample paragraph."
+msgstr "SAMPLE PARAGRAPH."
diff --git a/t/pod.t b/t/pod.t
new file mode 100644
index 0000000..e7cae75
--- /dev/null
+++ b/t/pod.t
@@ -0,0 +1,4 @@
+use Test::More;
+eval "use Test::Pod";
+plan skip_all => "Test::Pod required for testing POD" if $@;
+all_pod_files_ok();
diff --git a/t/t-12-msguntypot/test1.new.po b/t/t-12-msguntypot/test1.new.po
new file mode 100644
index 0000000..2dbfbd1
--- /dev/null
+++ b/t/t-12-msguntypot/test1.new.po
@@ -0,0 +1,38 @@
+# SOME DESCRIPTIVE TITLE
+# Copyright (C) YEAR Free Software Foundation, Inc.
+# This file is distributed under the same license as the PACKAGE package.
+# Nicolas François <nicolas.francois@centraliens.net>
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: PACKAGE VERSION\n"
+"POT-Creation-Date: 2006-12-31 17:11+0100\n"
+"PO-Revision-Date: 2008-02-28 23:05+0100\n"
+"Last-Translator: Nicolas François <nicolas.francois@centraliens.net>\n"
+"Language-Team: French <debian-l10n-french@lists.debian.org>\n"
+"Language: fr\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+
+#. type: Content of: <guide><title>
+#: ../t-24-xml/general.xml:8
+msgid "foo"
+msgstr "tata"
+
+#. type: Attribute 'title' of: <guide><author>
+#: ../t-24-xml/general.xml:10
+#, no-wrap
+msgid "bar"
+msgstr "tete"
+
+#. type: Content of: <guide><abstract>
+#: ../t-24-xml/general.xml:15
+msgid "baz"
+msgstr "titi"
+
+#. type: Content of: <guide><version>
+#: ../t-24-xml/general.xml:23
+#, no-wrap
+msgid "qux"
+msgstr "toto"
diff --git a/t/t-12-msguntypot/test1.new.pot b/t/t-12-msguntypot/test1.new.pot
new file mode 100644
index 0000000..2114746
--- /dev/null
+++ b/t/t-12-msguntypot/test1.new.pot
@@ -0,0 +1,38 @@
+# SOME DESCRIPTIVE TITLE
+# Copyright (C) YEAR Free Software Foundation, Inc.
+# This file is distributed under the same license as the PACKAGE package.
+# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
+#
+#, fuzzy
+msgid ""
+msgstr ""
+"Project-Id-Version: PACKAGE VERSION\n"
+"POT-Creation-Date: 2006-12-31 17:11+0100\n"
+"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
+"Language-Team: LANGUAGE <LL@li.org>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: ENCODING"
+
+#. type: Content of: <guide><title>
+#: ../t-24-xml/general.xml:8
+msgid "foo"
+msgstr ""
+
+#. type: Attribute 'title' of: <guide><author>
+#: ../t-24-xml/general.xml:10
+#, no-wrap
+msgid "bar"
+msgstr ""
+
+#. type: Content of: <guide><abstract>
+#: ../t-24-xml/general.xml:15
+msgid "baz"
+msgstr ""
+
+#. type: Content of: <guide><version>
+#: ../t-24-xml/general.xml:23
+#, no-wrap
+msgid "qux"
+msgstr ""
diff --git a/t/t-12-msguntypot/test1.old.pot b/t/t-12-msguntypot/test1.old.pot
new file mode 100644
index 0000000..9d2033b
--- /dev/null
+++ b/t/t-12-msguntypot/test1.old.pot
@@ -0,0 +1,38 @@
+# SOME DESCRIPTIVE TITLE
+# Copyright (C) YEAR Free Software Foundation, Inc.
+# This file is distributed under the same license as the PACKAGE package.
+# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
+#
+#, fuzzy
+msgid ""
+msgstr ""
+"Project-Id-Version: PACKAGE VERSION\n"
+"POT-Creation-Date: 2006-12-31 17:11+0100\n"
+"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
+"Language-Team: LANGUAGE <LL@li.org>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: ENCODING"
+
+#. type: Content of: <guide><title>
+#: ../t-24-xml/general.xml:8
+msgid "foo"
+msgstr ""
+
+#. type: Attribute 'title' of: <guide><author>
+#: ../t-24-xml/general.xml:10
+#, no-wrap
+msgid "bar"
+msgstr ""
+
+#. type: Content of: <guide><abstract>
+#: ../t-24-xml/general.xml:15
+msgid "baaz"
+msgstr ""
+
+#. type: Content of: <guide><version>
+#: ../t-24-xml/general.xml:23
+#, no-wrap
+msgid "qux"
+msgstr ""
diff --git a/t/t-12-msguntypot/test1.po b/t/t-12-msguntypot/test1.po
new file mode 100644
index 0000000..3844f4e
--- /dev/null
+++ b/t/t-12-msguntypot/test1.po
@@ -0,0 +1,37 @@
+# SOME DESCRIPTIVE TITLE
+# Copyright (C) YEAR Free Software Foundation, Inc.
+# This file is distributed under the same license as the PACKAGE package.
+# Nicolas François <nicolas.francois@centraliens.net>
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: PACKAGE VERSION\n"
+"POT-Creation-Date: 2006-12-31 17:11+0100\n"
+"PO-Revision-Date: 2008-02-28 23:05+0100\n"
+"Last-Translator: Nicolas François <nicolas.francois@centraliens.net>\n"
+"Language-Team: French <debian-l10n-french@lists.debian.org>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+
+#. type: Content of: <guide><title>
+#: ../t-24-xml/general.xml:8
+msgid "foo"
+msgstr "tata"
+
+#. type: Attribute 'title' of: <guide><author>
+#: ../t-24-xml/general.xml:10
+#, no-wrap
+msgid "bar"
+msgstr "tete"
+
+#. type: Content of: <guide><abstract>
+#: ../t-24-xml/general.xml:15
+msgid "baaz"
+msgstr "titi"
+
+#. type: Content of: <guide><version>
+#: ../t-24-xml/general.xml:23
+#, no-wrap
+msgid "qux"
+msgstr "toto"
diff --git a/t/t-12-msguntypot/test2.new.po b/t/t-12-msguntypot/test2.new.po
new file mode 100644
index 0000000..0300c74
--- /dev/null
+++ b/t/t-12-msguntypot/test2.new.po
@@ -0,0 +1,39 @@
+# SOME DESCRIPTIVE TITLE
+# Copyright (C) YEAR Free Software Foundation, Inc.
+# This file is distributed under the same license as the PACKAGE package.
+# Nicolas François <nicolas.francois@centraliens.net>
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: PACKAGE VERSION\n"
+"POT-Creation-Date: 2006-12-31 17:11+0100\n"
+"PO-Revision-Date: 2008-02-28 21:16+0100\n"
+"Last-Translator: Nicolas François <nicolas.francois@centraliens.net>\n"
+"Language-Team: French <debian-l10n-french@lists.debian.org>\n"
+"Language: fr\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+
+#. type: Content of: <guide><title>
+#: ../t-24-xml/general.xml:8
+msgid "foo"
+msgstr "tata"
+
+#. type: Attribute 'title' of: <guide><author>
+#: ../t-24-xml/general.xml:10
+#, no-wrap
+msgid "bar"
+msgstr "tete"
+
+#. type: Content of: <guide><abstract>
+#: ../t-24-xml/general.xml:15
+#, fuzzy
+msgid "baz"
+msgstr "titi"
+
+#. type: Content of: <guide><version>
+#: ../t-24-xml/general.xml:23
+#, no-wrap
+msgid "qux"
+msgstr "toto"
diff --git a/t/t-12-msguntypot/test2.new.pot b/t/t-12-msguntypot/test2.new.pot
new file mode 100644
index 0000000..2114746
--- /dev/null
+++ b/t/t-12-msguntypot/test2.new.pot
@@ -0,0 +1,38 @@
+# SOME DESCRIPTIVE TITLE
+# Copyright (C) YEAR Free Software Foundation, Inc.
+# This file is distributed under the same license as the PACKAGE package.
+# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
+#
+#, fuzzy
+msgid ""
+msgstr ""
+"Project-Id-Version: PACKAGE VERSION\n"
+"POT-Creation-Date: 2006-12-31 17:11+0100\n"
+"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
+"Language-Team: LANGUAGE <LL@li.org>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: ENCODING"
+
+#. type: Content of: <guide><title>
+#: ../t-24-xml/general.xml:8
+msgid "foo"
+msgstr ""
+
+#. type: Attribute 'title' of: <guide><author>
+#: ../t-24-xml/general.xml:10
+#, no-wrap
+msgid "bar"
+msgstr ""
+
+#. type: Content of: <guide><abstract>
+#: ../t-24-xml/general.xml:15
+msgid "baz"
+msgstr ""
+
+#. type: Content of: <guide><version>
+#: ../t-24-xml/general.xml:23
+#, no-wrap
+msgid "qux"
+msgstr ""
diff --git a/t/t-12-msguntypot/test2.old.pot b/t/t-12-msguntypot/test2.old.pot
new file mode 100644
index 0000000..9d2033b
--- /dev/null
+++ b/t/t-12-msguntypot/test2.old.pot
@@ -0,0 +1,38 @@
+# SOME DESCRIPTIVE TITLE
+# Copyright (C) YEAR Free Software Foundation, Inc.
+# This file is distributed under the same license as the PACKAGE package.
+# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
+#
+#, fuzzy
+msgid ""
+msgstr ""
+"Project-Id-Version: PACKAGE VERSION\n"
+"POT-Creation-Date: 2006-12-31 17:11+0100\n"
+"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
+"Language-Team: LANGUAGE <LL@li.org>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: ENCODING"
+
+#. type: Content of: <guide><title>
+#: ../t-24-xml/general.xml:8
+msgid "foo"
+msgstr ""
+
+#. type: Attribute 'title' of: <guide><author>
+#: ../t-24-xml/general.xml:10
+#, no-wrap
+msgid "bar"
+msgstr ""
+
+#. type: Content of: <guide><abstract>
+#: ../t-24-xml/general.xml:15
+msgid "baaz"
+msgstr ""
+
+#. type: Content of: <guide><version>
+#: ../t-24-xml/general.xml:23
+#, no-wrap
+msgid "qux"
+msgstr ""
diff --git a/t/t-12-msguntypot/test2.po b/t/t-12-msguntypot/test2.po
new file mode 100644
index 0000000..a4c18eb
--- /dev/null
+++ b/t/t-12-msguntypot/test2.po
@@ -0,0 +1,38 @@
+# SOME DESCRIPTIVE TITLE
+# Copyright (C) YEAR Free Software Foundation, Inc.
+# This file is distributed under the same license as the PACKAGE package.
+# Nicolas François <nicolas.francois@centraliens.net>
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: PACKAGE VERSION\n"
+"POT-Creation-Date: 2006-12-31 17:11+0100\n"
+"PO-Revision-Date: 2008-02-28 21:16+0100\n"
+"Last-Translator: Nicolas François <nicolas.francois@centraliens.net>\n"
+"Language-Team: French <debian-l10n-french@lists.debian.org>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+
+#. type: Content of: <guide><title>
+#: ../t-24-xml/general.xml:8
+msgid "foo"
+msgstr "tata"
+
+#. type: Attribute 'title' of: <guide><author>
+#: ../t-24-xml/general.xml:10
+#, no-wrap
+msgid "bar"
+msgstr "tete"
+
+#. type: Content of: <guide><abstract>
+#: ../t-24-xml/general.xml:15
+#, fuzzy
+msgid "baaz"
+msgstr "titi"
+
+#. type: Content of: <guide><version>
+#: ../t-24-xml/general.xml:23
+#, no-wrap
+msgid "qux"
+msgstr "toto"
diff --git a/t/t-12-msguntypot/test3.new.po b/t/t-12-msguntypot/test3.new.po
new file mode 100644
index 0000000..3beaf4c
--- /dev/null
+++ b/t/t-12-msguntypot/test3.new.po
@@ -0,0 +1,32 @@
+# SOME DESCRIPTIVE TITLE
+# Copyright (C) YEAR Free Software Foundation, Inc.
+# This file is distributed under the same license as the PACKAGE package.
+# Nicolas François <nicolas.francois@centraliens.net>
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: PACKAGE VERSION\n"
+"POT-Creation-Date: 2006-12-31 17:11+0100\n"
+"PO-Revision-Date: 2008-02-28 21:19+0100\n"
+"Last-Translator: Nicolas François <nicolas.francois@centraliens.net>\n"
+"Language-Team: French <debian-l10n-french@lists.debian.org>\n"
+"Language: fr\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+
+#. type: Content of: <guide><title>
+#: ../t-24-xml/general.xml:8
+msgid "foo"
+msgstr "tata"
+
+#. type: Attribute 'title' of: <guide><author>
+#: ../t-24-xml/general.xml:10
+#, no-wrap
+msgid "bar"
+msgstr "tete"
+
+#. type: Content of: <guide><abstract>
+#: ../t-24-xml/general.xml:15
+msgid "qux"
+msgstr "titi"
diff --git a/t/t-12-msguntypot/test3.new.pot b/t/t-12-msguntypot/test3.new.pot
new file mode 100644
index 0000000..af7d323
--- /dev/null
+++ b/t/t-12-msguntypot/test3.new.pot
@@ -0,0 +1,38 @@
+# SOME DESCRIPTIVE TITLE
+# Copyright (C) YEAR Free Software Foundation, Inc.
+# This file is distributed under the same license as the PACKAGE package.
+# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
+#
+#, fuzzy
+msgid ""
+msgstr ""
+"Project-Id-Version: PACKAGE VERSION\n"
+"POT-Creation-Date: 2006-12-31 17:11+0100\n"
+"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
+"Language-Team: LANGUAGE <LL@li.org>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: ENCODING"
+
+#. type: Content of: <guide><title>
+#: ../t-24-xml/general.xml:8
+msgid "foo"
+msgstr ""
+
+#. type: Attribute 'title' of: <guide><author>
+#: ../t-24-xml/general.xml:10
+#, no-wrap
+msgid "bar"
+msgstr ""
+
+#. type: Content of: <guide><version>
+#: ../t-24-xml/general.xml:23
+#, no-wrap
+msgid "qux"
+msgstr ""
+
+#. type: Content of: <guide><abstract>
+#: ../t-24-xml/general.xml:15
+msgid "baz"
+msgstr ""
diff --git a/t/t-12-msguntypot/test3.old.pot b/t/t-12-msguntypot/test3.old.pot
new file mode 100644
index 0000000..9d2033b
--- /dev/null
+++ b/t/t-12-msguntypot/test3.old.pot
@@ -0,0 +1,38 @@
+# SOME DESCRIPTIVE TITLE
+# Copyright (C) YEAR Free Software Foundation, Inc.
+# This file is distributed under the same license as the PACKAGE package.
+# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
+#
+#, fuzzy
+msgid ""
+msgstr ""
+"Project-Id-Version: PACKAGE VERSION\n"
+"POT-Creation-Date: 2006-12-31 17:11+0100\n"
+"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
+"Language-Team: LANGUAGE <LL@li.org>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: ENCODING"
+
+#. type: Content of: <guide><title>
+#: ../t-24-xml/general.xml:8
+msgid "foo"
+msgstr ""
+
+#. type: Attribute 'title' of: <guide><author>
+#: ../t-24-xml/general.xml:10
+#, no-wrap
+msgid "bar"
+msgstr ""
+
+#. type: Content of: <guide><abstract>
+#: ../t-24-xml/general.xml:15
+msgid "baaz"
+msgstr ""
+
+#. type: Content of: <guide><version>
+#: ../t-24-xml/general.xml:23
+#, no-wrap
+msgid "qux"
+msgstr ""
diff --git a/t/t-12-msguntypot/test3.po b/t/t-12-msguntypot/test3.po
new file mode 100644
index 0000000..65390f6
--- /dev/null
+++ b/t/t-12-msguntypot/test3.po
@@ -0,0 +1,37 @@
+# SOME DESCRIPTIVE TITLE
+# Copyright (C) YEAR Free Software Foundation, Inc.
+# This file is distributed under the same license as the PACKAGE package.
+# Nicolas François <nicolas.francois@centraliens.net>
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: PACKAGE VERSION\n"
+"POT-Creation-Date: 2006-12-31 17:11+0100\n"
+"PO-Revision-Date: 2008-02-28 21:19+0100\n"
+"Last-Translator: Nicolas François <nicolas.francois@centraliens.net>\n"
+"Language-Team: French <debian-l10n-french@lists.debian.org>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+
+#. type: Content of: <guide><title>
+#: ../t-24-xml/general.xml:8
+msgid "foo"
+msgstr "tata"
+
+#. type: Attribute 'title' of: <guide><author>
+#: ../t-24-xml/general.xml:10
+#, no-wrap
+msgid "bar"
+msgstr "tete"
+
+#. type: Content of: <guide><abstract>
+#: ../t-24-xml/general.xml:15
+msgid "baaz"
+msgstr "titi"
+
+#. type: Content of: <guide><version>
+#: ../t-24-xml/general.xml:23
+#, no-wrap
+msgid "qux"
+msgstr "toto"
diff --git a/t/t-12-msguntypot/test4.new.po b/t/t-12-msguntypot/test4.new.po
new file mode 100644
index 0000000..8992eed
--- /dev/null
+++ b/t/t-12-msguntypot/test4.new.po
@@ -0,0 +1,40 @@
+# SOME DESCRIPTIVE TITLE
+# Copyright (C) YEAR Free Software Foundation, Inc.
+# This file is distributed under the same license as the PACKAGE package.
+# Nicolas François <nicolas.francois@centraliens.net>
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: PACKAGE VERSION\n"
+"POT-Creation-Date: 2006-12-31 17:11+0100\n"
+"PO-Revision-Date: 2008-02-29 21:49+0100\n"
+"Last-Translator: Nicolas François <nicolas.francois@centraliens.net>\n"
+"Language-Team: French <debian-l10n-french@lists.debian.org>\n"
+"Language: fr\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+
+#. type: Content of: <guide><title>
+#: ../t-24-xml/general.xml:8
+msgid "foo"
+msgstr "tata"
+
+#. type: Attribute 'title' of: <guide><author>
+#: ../t-24-xml/general.xml:10
+#, no-wrap
+msgid "bar"
+msgstr "tete"
+
+#. type: Content of: <guide><abstract>
+#: ../t-24-xml/general.xml:15
+msgid "baz1"
+msgid_plural "baz2"
+msgstr[0] "titi1"
+msgstr[1] "titi2"
+
+#. type: Content of: <guide><version>
+#: ../t-24-xml/general.xml:23
+#, no-wrap
+msgid "qux"
+msgstr "toto"
diff --git a/t/t-12-msguntypot/test4.new.pot b/t/t-12-msguntypot/test4.new.pot
new file mode 100644
index 0000000..3e7a3e4
--- /dev/null
+++ b/t/t-12-msguntypot/test4.new.pot
@@ -0,0 +1,39 @@
+# SOME DESCRIPTIVE TITLE
+# Copyright (C) YEAR Free Software Foundation, Inc.
+# This file is distributed under the same license as the PACKAGE package.
+# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
+#
+#, fuzzy
+msgid ""
+msgstr ""
+"Project-Id-Version: PACKAGE VERSION\n"
+"POT-Creation-Date: 2006-12-31 17:11+0100\n"
+"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
+"Language-Team: LANGUAGE <LL@li.org>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: ENCODING"
+
+#. type: Content of: <guide><title>
+#: ../t-24-xml/general.xml:8
+msgid "foo"
+msgstr ""
+
+#. type: Attribute 'title' of: <guide><author>
+#: ../t-24-xml/general.xml:10
+#, no-wrap
+msgid "bar"
+msgstr ""
+
+#. type: Content of: <guide><abstract>
+#: ../t-24-xml/general.xml:15
+msgid "baz1"
+msgid_plural "baz2"
+msgstr[0] ""
+
+#. type: Content of: <guide><version>
+#: ../t-24-xml/general.xml:23
+#, no-wrap
+msgid "qux"
+msgstr ""
diff --git a/t/t-12-msguntypot/test4.old.pot b/t/t-12-msguntypot/test4.old.pot
new file mode 100644
index 0000000..5e81639
--- /dev/null
+++ b/t/t-12-msguntypot/test4.old.pot
@@ -0,0 +1,39 @@
+# SOME DESCRIPTIVE TITLE
+# Copyright (C) YEAR Free Software Foundation, Inc.
+# This file is distributed under the same license as the PACKAGE package.
+# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
+#
+#, fuzzy
+msgid ""
+msgstr ""
+"Project-Id-Version: PACKAGE VERSION\n"
+"POT-Creation-Date: 2006-12-31 17:11+0100\n"
+"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
+"Language-Team: LANGUAGE <LL@li.org>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: ENCODING"
+
+#. type: Content of: <guide><title>
+#: ../t-24-xml/general.xml:8
+msgid "foo"
+msgstr ""
+
+#. type: Attribute 'title' of: <guide><author>
+#: ../t-24-xml/general.xml:10
+#, no-wrap
+msgid "bar"
+msgstr ""
+
+#. type: Content of: <guide><abstract>
+#: ../t-24-xml/general.xml:15
+msgid "baaz1"
+msgid_plural "baz2"
+msgstr[0] ""
+
+#. type: Content of: <guide><version>
+#: ../t-24-xml/general.xml:23
+#, no-wrap
+msgid "qux"
+msgstr ""
diff --git a/t/t-12-msguntypot/test4.po b/t/t-12-msguntypot/test4.po
new file mode 100644
index 0000000..54873bf
--- /dev/null
+++ b/t/t-12-msguntypot/test4.po
@@ -0,0 +1,39 @@
+# SOME DESCRIPTIVE TITLE
+# Copyright (C) YEAR Free Software Foundation, Inc.
+# This file is distributed under the same license as the PACKAGE package.
+# Nicolas François <nicolas.francois@centraliens.net>
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: PACKAGE VERSION\n"
+"POT-Creation-Date: 2006-12-31 17:11+0100\n"
+"PO-Revision-Date: 2008-02-29 21:49+0100\n"
+"Last-Translator: Nicolas François <nicolas.francois@centraliens.net>\n"
+"Language-Team: French <debian-l10n-french@lists.debian.org>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+
+#. type: Content of: <guide><title>
+#: ../t-24-xml/general.xml:8
+msgid "foo"
+msgstr "tata"
+
+#. type: Attribute 'title' of: <guide><author>
+#: ../t-24-xml/general.xml:10
+#, no-wrap
+msgid "bar"
+msgstr "tete"
+
+#. type: Content of: <guide><abstract>
+#: ../t-24-xml/general.xml:15
+msgid "baaz1"
+msgid_plural "baz2"
+msgstr[0] "titi1"
+msgstr[1] "titi2"
+
+#. type: Content of: <guide><version>
+#: ../t-24-xml/general.xml:23
+#, no-wrap
+msgid "qux"
+msgstr "toto"
diff --git a/t/t-12-msguntypot/test5.new.po b/t/t-12-msguntypot/test5.new.po
new file mode 100644
index 0000000..8992eed
--- /dev/null
+++ b/t/t-12-msguntypot/test5.new.po
@@ -0,0 +1,40 @@
+# SOME DESCRIPTIVE TITLE
+# Copyright (C) YEAR Free Software Foundation, Inc.
+# This file is distributed under the same license as the PACKAGE package.
+# Nicolas François <nicolas.francois@centraliens.net>
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: PACKAGE VERSION\n"
+"POT-Creation-Date: 2006-12-31 17:11+0100\n"
+"PO-Revision-Date: 2008-02-29 21:49+0100\n"
+"Last-Translator: Nicolas François <nicolas.francois@centraliens.net>\n"
+"Language-Team: French <debian-l10n-french@lists.debian.org>\n"
+"Language: fr\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+
+#. type: Content of: <guide><title>
+#: ../t-24-xml/general.xml:8
+msgid "foo"
+msgstr "tata"
+
+#. type: Attribute 'title' of: <guide><author>
+#: ../t-24-xml/general.xml:10
+#, no-wrap
+msgid "bar"
+msgstr "tete"
+
+#. type: Content of: <guide><abstract>
+#: ../t-24-xml/general.xml:15
+msgid "baz1"
+msgid_plural "baz2"
+msgstr[0] "titi1"
+msgstr[1] "titi2"
+
+#. type: Content of: <guide><version>
+#: ../t-24-xml/general.xml:23
+#, no-wrap
+msgid "qux"
+msgstr "toto"
diff --git a/t/t-12-msguntypot/test5.new.pot b/t/t-12-msguntypot/test5.new.pot
new file mode 100644
index 0000000..3e7a3e4
--- /dev/null
+++ b/t/t-12-msguntypot/test5.new.pot
@@ -0,0 +1,39 @@
+# SOME DESCRIPTIVE TITLE
+# Copyright (C) YEAR Free Software Foundation, Inc.
+# This file is distributed under the same license as the PACKAGE package.
+# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
+#
+#, fuzzy
+msgid ""
+msgstr ""
+"Project-Id-Version: PACKAGE VERSION\n"
+"POT-Creation-Date: 2006-12-31 17:11+0100\n"
+"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
+"Language-Team: LANGUAGE <LL@li.org>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: ENCODING"
+
+#. type: Content of: <guide><title>
+#: ../t-24-xml/general.xml:8
+msgid "foo"
+msgstr ""
+
+#. type: Attribute 'title' of: <guide><author>
+#: ../t-24-xml/general.xml:10
+#, no-wrap
+msgid "bar"
+msgstr ""
+
+#. type: Content of: <guide><abstract>
+#: ../t-24-xml/general.xml:15
+msgid "baz1"
+msgid_plural "baz2"
+msgstr[0] ""
+
+#. type: Content of: <guide><version>
+#: ../t-24-xml/general.xml:23
+#, no-wrap
+msgid "qux"
+msgstr ""
diff --git a/t/t-12-msguntypot/test5.old.pot b/t/t-12-msguntypot/test5.old.pot
new file mode 100644
index 0000000..dcce9a2
--- /dev/null
+++ b/t/t-12-msguntypot/test5.old.pot
@@ -0,0 +1,39 @@
+# SOME DESCRIPTIVE TITLE
+# Copyright (C) YEAR Free Software Foundation, Inc.
+# This file is distributed under the same license as the PACKAGE package.
+# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
+#
+#, fuzzy
+msgid ""
+msgstr ""
+"Project-Id-Version: PACKAGE VERSION\n"
+"POT-Creation-Date: 2006-12-31 17:11+0100\n"
+"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
+"Language-Team: LANGUAGE <LL@li.org>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: ENCODING"
+
+#. type: Content of: <guide><title>
+#: ../t-24-xml/general.xml:8
+msgid "foo"
+msgstr ""
+
+#. type: Attribute 'title' of: <guide><author>
+#: ../t-24-xml/general.xml:10
+#, no-wrap
+msgid "bar"
+msgstr ""
+
+#. type: Content of: <guide><abstract>
+#: ../t-24-xml/general.xml:15
+msgid "baz1"
+msgid_plural "baaz2"
+msgstr[0] ""
+
+#. type: Content of: <guide><version>
+#: ../t-24-xml/general.xml:23
+#, no-wrap
+msgid "qux"
+msgstr ""
diff --git a/t/t-12-msguntypot/test5.po b/t/t-12-msguntypot/test5.po
new file mode 100644
index 0000000..b32fcc3
--- /dev/null
+++ b/t/t-12-msguntypot/test5.po
@@ -0,0 +1,39 @@
+# SOME DESCRIPTIVE TITLE
+# Copyright (C) YEAR Free Software Foundation, Inc.
+# This file is distributed under the same license as the PACKAGE package.
+# Nicolas François <nicolas.francois@centraliens.net>
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: PACKAGE VERSION\n"
+"POT-Creation-Date: 2006-12-31 17:11+0100\n"
+"PO-Revision-Date: 2008-02-29 21:49+0100\n"
+"Last-Translator: Nicolas François <nicolas.francois@centraliens.net>\n"
+"Language-Team: French <debian-l10n-french@lists.debian.org>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+
+#. type: Content of: <guide><title>
+#: ../t-24-xml/general.xml:8
+msgid "foo"
+msgstr "tata"
+
+#. type: Attribute 'title' of: <guide><author>
+#: ../t-24-xml/general.xml:10
+#, no-wrap
+msgid "bar"
+msgstr "tete"
+
+#. type: Content of: <guide><abstract>
+#: ../t-24-xml/general.xml:15
+msgid "baz1"
+msgid_plural "baaz2"
+msgstr[0] "titi1"
+msgstr[1] "titi2"
+
+#. type: Content of: <guide><version>
+#: ../t-24-xml/general.xml:23
+#, no-wrap
+msgid "qux"
+msgstr "toto"
diff --git a/t/t-12-msguntypot/test6.new.po b/t/t-12-msguntypot/test6.new.po
new file mode 100644
index 0000000..f44266a
--- /dev/null
+++ b/t/t-12-msguntypot/test6.new.po
@@ -0,0 +1,40 @@
+# SOME DESCRIPTIVE TITLE
+# Copyright (C) YEAR Free Software Foundation, Inc.
+# This file is distributed under the same license as the PACKAGE package.
+# Nicolas François <nicolas.francois@centraliens.net>
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: PACKAGE VERSION\n"
+"POT-Creation-Date: 2006-12-31 17:11+0100\n"
+"PO-Revision-Date: 2008-02-29 00:53+0100\n"
+"Last-Translator: Nicolas François <nicolas.francois@centraliens.net>\n"
+"Language-Team: French <debian-l10n-french@lists.debian.org>\n"
+"Language: fr\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+
+#. type: Content of: <guide><title>
+#: ../t-24-xml/general.xml:8
+msgid "foo"
+msgstr "tata"
+
+#. type: Attribute 'title' of: <guide><author>
+#: ../t-24-xml/general.xml:10
+#, no-wrap
+msgid "bar"
+msgstr "tete"
+
+#. type: Content of: <guide><abstract>
+#: ../t-24-xml/general.xml:15
+msgid "baz1"
+msgid_plural "baz2"
+msgstr[0] "titi1"
+msgstr[1] "titi2"
+
+#. type: Content of: <guide><version>
+#: ../t-24-xml/general.xml:23
+#, no-wrap
+msgid "qux"
+msgstr "toto"
diff --git a/t/t-12-msguntypot/test6.new.pot b/t/t-12-msguntypot/test6.new.pot
new file mode 100644
index 0000000..3e7a3e4
--- /dev/null
+++ b/t/t-12-msguntypot/test6.new.pot
@@ -0,0 +1,39 @@
+# SOME DESCRIPTIVE TITLE
+# Copyright (C) YEAR Free Software Foundation, Inc.
+# This file is distributed under the same license as the PACKAGE package.
+# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
+#
+#, fuzzy
+msgid ""
+msgstr ""
+"Project-Id-Version: PACKAGE VERSION\n"
+"POT-Creation-Date: 2006-12-31 17:11+0100\n"
+"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
+"Language-Team: LANGUAGE <LL@li.org>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: ENCODING"
+
+#. type: Content of: <guide><title>
+#: ../t-24-xml/general.xml:8
+msgid "foo"
+msgstr ""
+
+#. type: Attribute 'title' of: <guide><author>
+#: ../t-24-xml/general.xml:10
+#, no-wrap
+msgid "bar"
+msgstr ""
+
+#. type: Content of: <guide><abstract>
+#: ../t-24-xml/general.xml:15
+msgid "baz1"
+msgid_plural "baz2"
+msgstr[0] ""
+
+#. type: Content of: <guide><version>
+#: ../t-24-xml/general.xml:23
+#, no-wrap
+msgid "qux"
+msgstr ""
diff --git a/t/t-12-msguntypot/test6.old.pot b/t/t-12-msguntypot/test6.old.pot
new file mode 100644
index 0000000..e93c82b
--- /dev/null
+++ b/t/t-12-msguntypot/test6.old.pot
@@ -0,0 +1,39 @@
+# SOME DESCRIPTIVE TITLE
+# Copyright (C) YEAR Free Software Foundation, Inc.
+# This file is distributed under the same license as the PACKAGE package.
+# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
+#
+#, fuzzy
+msgid ""
+msgstr ""
+"Project-Id-Version: PACKAGE VERSION\n"
+"POT-Creation-Date: 2006-12-31 17:11+0100\n"
+"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
+"Language-Team: LANGUAGE <LL@li.org>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: ENCODING"
+
+#. type: Content of: <guide><title>
+#: ../t-24-xml/general.xml:8
+msgid "foo"
+msgstr ""
+
+#. type: Attribute 'title' of: <guide><author>
+#: ../t-24-xml/general.xml:10
+#, no-wrap
+msgid "bar"
+msgstr ""
+
+#. type: Content of: <guide><abstract>
+#: ../t-24-xml/general.xml:15
+msgid "baz1"
+msgid_plural "baz2"
+msgstr[0] ""
+
+#. type: Content of: <guide><version>
+#: ../t-24-xml/general.xml:23
+#, no-wrap
+msgid "quux"
+msgstr ""
diff --git a/t/t-12-msguntypot/test6.po b/t/t-12-msguntypot/test6.po
new file mode 100644
index 0000000..19eb90f
--- /dev/null
+++ b/t/t-12-msguntypot/test6.po
@@ -0,0 +1,39 @@
+# SOME DESCRIPTIVE TITLE
+# Copyright (C) YEAR Free Software Foundation, Inc.
+# This file is distributed under the same license as the PACKAGE package.
+# Nicolas François <nicolas.francois@centraliens.net>
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: PACKAGE VERSION\n"
+"POT-Creation-Date: 2006-12-31 17:11+0100\n"
+"PO-Revision-Date: 2008-02-29 00:53+0100\n"
+"Last-Translator: Nicolas François <nicolas.francois@centraliens.net>\n"
+"Language-Team: French <debian-l10n-french@lists.debian.org>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+
+#. type: Content of: <guide><title>
+#: ../t-24-xml/general.xml:8
+msgid "foo"
+msgstr "tata"
+
+#. type: Attribute 'title' of: <guide><author>
+#: ../t-24-xml/general.xml:10
+#, no-wrap
+msgid "bar"
+msgstr "tete"
+
+#. type: Content of: <guide><abstract>
+#: ../t-24-xml/general.xml:15
+msgid "baz1"
+msgid_plural "baz2"
+msgstr[0] "titi1"
+msgstr[1] "titi2"
+
+#. type: Content of: <guide><version>
+#: ../t-24-xml/general.xml:23
+#, no-wrap
+msgid "quux"
+msgstr "toto"
diff --git a/t/t-12-msguntypot/test7.new.po b/t/t-12-msguntypot/test7.new.po
new file mode 100644
index 0000000..5ac3968
--- /dev/null
+++ b/t/t-12-msguntypot/test7.new.po
@@ -0,0 +1,41 @@
+# SOME DESCRIPTIVE TITLE
+# Copyright (C) YEAR Free Software Foundation, Inc.
+# This file is distributed under the same license as the PACKAGE package.
+# Nicolas François <nicolas.francois@centraliens.net>
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: PACKAGE VERSION\n"
+"POT-Creation-Date: 2006-12-31 17:11+0100\n"
+"PO-Revision-Date: 2008-02-29 00:51+0100\n"
+"Last-Translator: Nicolas François <nicolas.francois@centraliens.net>\n"
+"Language-Team: French <debian-l10n-french@lists.debian.org>\n"
+"Language: fr\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+
+#. type: Content of: <guide><title>
+#: ../t-24-xml/general.xml:8
+msgid "foo"
+msgstr "tata"
+
+#. type: Attribute 'title' of: <guide><author>
+#: ../t-24-xml/general.xml:10
+#, no-wrap
+msgid "bar"
+msgstr "tete"
+
+#. type: Content of: <guide><abstract>
+#: ../t-24-xml/general.xml:15
+#, fuzzy
+msgid "baz1"
+msgid_plural "baz2"
+msgstr[0] "titi1"
+msgstr[1] "titi2"
+
+#. type: Content of: <guide><version>
+#: ../t-24-xml/general.xml:23
+#, no-wrap
+msgid "qux"
+msgstr "toto"
diff --git a/t/t-12-msguntypot/test7.new.pot b/t/t-12-msguntypot/test7.new.pot
new file mode 100644
index 0000000..3e7a3e4
--- /dev/null
+++ b/t/t-12-msguntypot/test7.new.pot
@@ -0,0 +1,39 @@
+# SOME DESCRIPTIVE TITLE
+# Copyright (C) YEAR Free Software Foundation, Inc.
+# This file is distributed under the same license as the PACKAGE package.
+# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
+#
+#, fuzzy
+msgid ""
+msgstr ""
+"Project-Id-Version: PACKAGE VERSION\n"
+"POT-Creation-Date: 2006-12-31 17:11+0100\n"
+"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
+"Language-Team: LANGUAGE <LL@li.org>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: ENCODING"
+
+#. type: Content of: <guide><title>
+#: ../t-24-xml/general.xml:8
+msgid "foo"
+msgstr ""
+
+#. type: Attribute 'title' of: <guide><author>
+#: ../t-24-xml/general.xml:10
+#, no-wrap
+msgid "bar"
+msgstr ""
+
+#. type: Content of: <guide><abstract>
+#: ../t-24-xml/general.xml:15
+msgid "baz1"
+msgid_plural "baz2"
+msgstr[0] ""
+
+#. type: Content of: <guide><version>
+#: ../t-24-xml/general.xml:23
+#, no-wrap
+msgid "qux"
+msgstr ""
diff --git a/t/t-12-msguntypot/test7.old.pot b/t/t-12-msguntypot/test7.old.pot
new file mode 100644
index 0000000..5e81639
--- /dev/null
+++ b/t/t-12-msguntypot/test7.old.pot
@@ -0,0 +1,39 @@
+# SOME DESCRIPTIVE TITLE
+# Copyright (C) YEAR Free Software Foundation, Inc.
+# This file is distributed under the same license as the PACKAGE package.
+# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
+#
+#, fuzzy
+msgid ""
+msgstr ""
+"Project-Id-Version: PACKAGE VERSION\n"
+"POT-Creation-Date: 2006-12-31 17:11+0100\n"
+"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
+"Language-Team: LANGUAGE <LL@li.org>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: ENCODING"
+
+#. type: Content of: <guide><title>
+#: ../t-24-xml/general.xml:8
+msgid "foo"
+msgstr ""
+
+#. type: Attribute 'title' of: <guide><author>
+#: ../t-24-xml/general.xml:10
+#, no-wrap
+msgid "bar"
+msgstr ""
+
+#. type: Content of: <guide><abstract>
+#: ../t-24-xml/general.xml:15
+msgid "baaz1"
+msgid_plural "baz2"
+msgstr[0] ""
+
+#. type: Content of: <guide><version>
+#: ../t-24-xml/general.xml:23
+#, no-wrap
+msgid "qux"
+msgstr ""
diff --git a/t/t-12-msguntypot/test7.po b/t/t-12-msguntypot/test7.po
new file mode 100644
index 0000000..1924d84
--- /dev/null
+++ b/t/t-12-msguntypot/test7.po
@@ -0,0 +1,40 @@
+# SOME DESCRIPTIVE TITLE
+# Copyright (C) YEAR Free Software Foundation, Inc.
+# This file is distributed under the same license as the PACKAGE package.
+# Nicolas François <nicolas.francois@centraliens.net>
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: PACKAGE VERSION\n"
+"POT-Creation-Date: 2006-12-31 17:11+0100\n"
+"PO-Revision-Date: 2008-02-29 00:51+0100\n"
+"Last-Translator: Nicolas François <nicolas.francois@centraliens.net>\n"
+"Language-Team: French <debian-l10n-french@lists.debian.org>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+
+#. type: Content of: <guide><title>
+#: ../t-24-xml/general.xml:8
+msgid "foo"
+msgstr "tata"
+
+#. type: Attribute 'title' of: <guide><author>
+#: ../t-24-xml/general.xml:10
+#, no-wrap
+msgid "bar"
+msgstr "tete"
+
+#. type: Content of: <guide><abstract>
+#: ../t-24-xml/general.xml:15
+#, fuzzy
+msgid "baaz1"
+msgid_plural "baz2"
+msgstr[0] "titi1"
+msgstr[1] "titi2"
+
+#. type: Content of: <guide><version>
+#: ../t-24-xml/general.xml:23
+#, no-wrap
+msgid "qux"
+msgstr "toto"
diff --git a/t/t-12-msguntypot/test8.new.po b/t/t-12-msguntypot/test8.new.po
new file mode 100644
index 0000000..95a0d31
--- /dev/null
+++ b/t/t-12-msguntypot/test8.new.po
@@ -0,0 +1,41 @@
+# SOME DESCRIPTIVE TITLE
+# Copyright (C) YEAR Free Software Foundation, Inc.
+# This file is distributed under the same license as the PACKAGE package.
+# Nicolas François <nicolas.francois@centraliens.net>
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: PACKAGE VERSION\n"
+"POT-Creation-Date: 2006-12-31 17:11+0100\n"
+"PO-Revision-Date: 2008-02-29 00:54+0100\n"
+"Last-Translator: Nicolas François <nicolas.francois@centraliens.net>\n"
+"Language-Team: French <debian-l10n-french@lists.debian.org>\n"
+"Language: fr\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+
+#. type: Content of: <guide><title>
+#: ../t-24-xml/general.xml:8
+msgid "foo"
+msgstr "tata"
+
+#. type: Attribute 'title' of: <guide><author>
+#: ../t-24-xml/general.xml:10
+#, no-wrap
+msgid "bar"
+msgstr "tete"
+
+#. type: Content of: <guide><abstract>
+#: ../t-24-xml/general.xml:15
+#, fuzzy
+msgid "baz1"
+msgid_plural "baz2"
+msgstr[0] "titi1"
+msgstr[1] "titi2"
+
+#. type: Content of: <guide><version>
+#: ../t-24-xml/general.xml:23
+#, no-wrap
+msgid "qux"
+msgstr "toto"
diff --git a/t/t-12-msguntypot/test8.new.pot b/t/t-12-msguntypot/test8.new.pot
new file mode 100644
index 0000000..3e7a3e4
--- /dev/null
+++ b/t/t-12-msguntypot/test8.new.pot
@@ -0,0 +1,39 @@
+# SOME DESCRIPTIVE TITLE
+# Copyright (C) YEAR Free Software Foundation, Inc.
+# This file is distributed under the same license as the PACKAGE package.
+# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
+#
+#, fuzzy
+msgid ""
+msgstr ""
+"Project-Id-Version: PACKAGE VERSION\n"
+"POT-Creation-Date: 2006-12-31 17:11+0100\n"
+"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
+"Language-Team: LANGUAGE <LL@li.org>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: ENCODING"
+
+#. type: Content of: <guide><title>
+#: ../t-24-xml/general.xml:8
+msgid "foo"
+msgstr ""
+
+#. type: Attribute 'title' of: <guide><author>
+#: ../t-24-xml/general.xml:10
+#, no-wrap
+msgid "bar"
+msgstr ""
+
+#. type: Content of: <guide><abstract>
+#: ../t-24-xml/general.xml:15
+msgid "baz1"
+msgid_plural "baz2"
+msgstr[0] ""
+
+#. type: Content of: <guide><version>
+#: ../t-24-xml/general.xml:23
+#, no-wrap
+msgid "qux"
+msgstr ""
diff --git a/t/t-12-msguntypot/test8.old.pot b/t/t-12-msguntypot/test8.old.pot
new file mode 100644
index 0000000..dcce9a2
--- /dev/null
+++ b/t/t-12-msguntypot/test8.old.pot
@@ -0,0 +1,39 @@
+# SOME DESCRIPTIVE TITLE
+# Copyright (C) YEAR Free Software Foundation, Inc.
+# This file is distributed under the same license as the PACKAGE package.
+# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
+#
+#, fuzzy
+msgid ""
+msgstr ""
+"Project-Id-Version: PACKAGE VERSION\n"
+"POT-Creation-Date: 2006-12-31 17:11+0100\n"
+"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
+"Language-Team: LANGUAGE <LL@li.org>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: ENCODING"
+
+#. type: Content of: <guide><title>
+#: ../t-24-xml/general.xml:8
+msgid "foo"
+msgstr ""
+
+#. type: Attribute 'title' of: <guide><author>
+#: ../t-24-xml/general.xml:10
+#, no-wrap
+msgid "bar"
+msgstr ""
+
+#. type: Content of: <guide><abstract>
+#: ../t-24-xml/general.xml:15
+msgid "baz1"
+msgid_plural "baaz2"
+msgstr[0] ""
+
+#. type: Content of: <guide><version>
+#: ../t-24-xml/general.xml:23
+#, no-wrap
+msgid "qux"
+msgstr ""
diff --git a/t/t-12-msguntypot/test8.po b/t/t-12-msguntypot/test8.po
new file mode 100644
index 0000000..00ed860
--- /dev/null
+++ b/t/t-12-msguntypot/test8.po
@@ -0,0 +1,40 @@
+# SOME DESCRIPTIVE TITLE
+# Copyright (C) YEAR Free Software Foundation, Inc.
+# This file is distributed under the same license as the PACKAGE package.
+# Nicolas François <nicolas.francois@centraliens.net>
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: PACKAGE VERSION\n"
+"POT-Creation-Date: 2006-12-31 17:11+0100\n"
+"PO-Revision-Date: 2008-02-29 00:54+0100\n"
+"Last-Translator: Nicolas François <nicolas.francois@centraliens.net>\n"
+"Language-Team: French <debian-l10n-french@lists.debian.org>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+
+#. type: Content of: <guide><title>
+#: ../t-24-xml/general.xml:8
+msgid "foo"
+msgstr "tata"
+
+#. type: Attribute 'title' of: <guide><author>
+#: ../t-24-xml/general.xml:10
+#, no-wrap
+msgid "bar"
+msgstr "tete"
+
+#. type: Content of: <guide><abstract>
+#: ../t-24-xml/general.xml:15
+#, fuzzy
+msgid "baz1"
+msgid_plural "baaz2"
+msgstr[0] "titi1"
+msgstr[1] "titi2"
+
+#. type: Content of: <guide><version>
+#: ../t-24-xml/general.xml:23
+#, no-wrap
+msgid "qux"
+msgstr "toto"
diff --git a/t/t-13-plural/err1 b/t/t-13-plural/err1
new file mode 100644
index 0000000..91a9322
--- /dev/null
+++ b/t/t-13-plural/err1
@@ -0,0 +1,2 @@
+po4a gettextize: 'singular' is the singular form of a message, po4a will use the msgstr[0] translation (singulier).
+po4a gettextize: 'plural' is the plural form of a message, po4a will use the msgstr[1] translation (pluriel).
diff --git a/t/t-13-plural/pod1 b/t/t-13-plural/pod1
new file mode 100644
index 0000000..885d01f
--- /dev/null
+++ b/t/t-13-plural/pod1
@@ -0,0 +1,20 @@
+=head1 This is a test title
+
+This is a test paragraph. This is a test paragraph. This is a test
+paragraph. This is a test paragraph. This is a test paragraph. This is a
+test paragraph. This is a test paragraph. This is a test paragraph. This
+is a test paragraph. This is a test paragraph. This is a test paragraph.
+This is a test paragraph.
+
+=over 4
+
+=item this is a test item
+
+This is a test item text, but
+ it shouldn't be wrapped
+ since one of its lines is
+ indented. Does it work?
+
+=back
+
+ This is a verbatim paragraph.
diff --git a/t/t-13-plural/pod1.fr b/t/t-13-plural/pod1.fr
new file mode 100644
index 0000000..9376563
--- /dev/null
+++ b/t/t-13-plural/pod1.fr
@@ -0,0 +1,31 @@
+
+ *****************************************************
+ * GENERATED FILE, DO NOT EDIT *
+ * THIS IS NO SOURCE FILE, BUT RESULT OF COMPILATION *
+ *****************************************************
+
+This file was generated by po4a(7). Do not store it (in VSC, for example),
+but store the PO file used as source file by po4a-translate.
+
+In fact, consider this as a binary, and the PO file as a regular .c file:
+If the PO get lost, keeping this translation up-to-date will be harder.
+
+=encoding UTF-8
+
+=head1 Ceci est un titre de test
+
+Ceci est un paragraphe de test. Ceci est un paragraphe de test. Ceci est un paragraphe de test. Ceci est un paragraphe de test. Ceci est un paragraphe de test. Ceci est un paragraphe de test. Ceci est un paragraphe de test. Ceci est un paragraphe de test. Ceci est un paragraphe de test. Ceci est un paragraphe de test. Ceci est un paragraphe de test. Ceci est un paragraphe de test. Ceci est un paragraphe de test. Ceci est un paragraphe de test.
+
+=over 4
+
+=item ceci est un item de test
+
+Ceci est un texte d'item de test,
+ mais il ne devrait pas etre
+ remis en forme automatiquement
+ puisque certaines de ses lignes
+ sont indentees. Cela fonctionne il ?
+
+=back
+
+ This is a verbatim paragraph.
diff --git a/t/t-13-plural/pod1.po b/t/t-13-plural/pod1.po
new file mode 100644
index 0000000..c36d903
--- /dev/null
+++ b/t/t-13-plural/pod1.po
@@ -0,0 +1,73 @@
+# SOME DESCRIPTIVE TITLE
+# Copyright (C) YEAR Free Software Foundation, Inc.
+# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
+#
+#, fuzzy
+msgid ""
+msgstr ""
+"Project-Id-Version: PACKAGE VERSION\n"
+"POT-Creation-Date: 2003-11-01 0:32+0100\n"
+"PO-Revision-Date: 2007-09-15 15:47+0200\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
+"Language-Team: LANGUAGE <LL@li.org>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=CHARSET\n"
+"Content-Transfer-Encoding: ENCODING"
+
+#. type: =head1
+#: data/pod:1
+msgid "This is a test title"
+msgstr "Ceci est un titre de test"
+
+#. type: textblock
+#: data/pod:3
+msgid ""
+"This is a test paragraph. This is a test paragraph. This is a test "
+"paragraph. This is a test paragraph. This is a test paragraph. This is a "
+"test paragraph. This is a test paragraph. This is a test paragraph. This "
+"is a test paragraph. This is a test paragraph. This is a test paragraph. "
+"This is a test paragraph."
+msgstr ""
+"Ceci est un paragraphe de test. Ceci est un paragraphe de test. Ceci est un "
+"paragraphe de test. Ceci est un paragraphe de test. Ceci est un paragraphe "
+"de test. Ceci est un paragraphe de test. Ceci est un paragraphe de test. "
+"Ceci est un paragraphe de test. Ceci est un paragraphe de test. Ceci est un "
+"paragraphe de test. Ceci est un paragraphe de test. Ceci est un paragraphe "
+"de test. Ceci est un paragraphe de test. Ceci est un paragraphe de test."
+
+#. type: =item
+#: data/pod:11
+msgid "this is a test item"
+msgstr "ceci est un item de test"
+
+#. type: verbatim
+#: data/pod:13
+#, no-wrap
+msgid ""
+"This is a test item text, but\n"
+" it shouldn't be wrapped\n"
+" since one of its lines is\n"
+" indented. Does it work?\n"
+"\n"
+msgstr ""
+"Ceci est un texte d'item de test,\n"
+" mais il ne devrait pas etre \n"
+" remis en forme automatiquement\n"
+" puisque certaines de ses lignes\n"
+" sont indentees. Cela fonctionne il ?\n"
+"\n"
+
+#. type: verbatim
+#: data/pod:20
+#, no-wrap, fuzzy
+msgid ""
+" This is a verbatim paragraph.\n"
+"\n"
+msgstr " Ceci est un paragraphe verbatim.\n"
+
+#. type: =item
+#: data/other:11
+msgid "singular"
+msgid_plural "plural"
+msgstr[0] "singulier"
+msgstr[1] "pluriel"
diff --git a/t/t-13-plural/pod2 b/t/t-13-plural/pod2
new file mode 100644
index 0000000..7fd49ff
--- /dev/null
+++ b/t/t-13-plural/pod2
@@ -0,0 +1,22 @@
+=head1 This is a test title
+
+This is a test paragraph. This is a test paragraph. This is a test
+paragraph. This is a test paragraph. This is a test paragraph. This is a
+test paragraph. This is a test paragraph. This is a test paragraph. This
+is a test paragraph. This is a test paragraph. This is a test paragraph.
+This is a test paragraph.
+
+=over 4
+
+=item this is a test item
+
+This is a test item text, but
+ it shouldn't be wrapped
+ since one of its lines is
+ indented. Does it work?
+
+=back
+
+ This is a verbatim paragraph.
+
+=item singular
diff --git a/t/t-13-plural/pod2.fr b/t/t-13-plural/pod2.fr
new file mode 100644
index 0000000..54ffc9e
--- /dev/null
+++ b/t/t-13-plural/pod2.fr
@@ -0,0 +1,34 @@
+
+ *****************************************************
+ * GENERATED FILE, DO NOT EDIT *
+ * THIS IS NO SOURCE FILE, BUT RESULT OF COMPILATION *
+ *****************************************************
+
+This file was generated by po4a(7). Do not store it (in VSC, for example),
+but store the PO file used as source file by po4a-translate.
+
+In fact, consider this as a binary, and the PO file as a regular .c file:
+If the PO get lost, keeping this translation up-to-date will be harder.
+
+=encoding UTF-8
+
+=head1 Ceci est un titre de test
+
+Ceci est un paragraphe de test. Ceci est un paragraphe de test. Ceci est un paragraphe de test. Ceci est un paragraphe de test. Ceci est un paragraphe de test. Ceci est un paragraphe de test. Ceci est un paragraphe de test. Ceci est un paragraphe de test. Ceci est un paragraphe de test. Ceci est un paragraphe de test. Ceci est un paragraphe de test. Ceci est un paragraphe de test. Ceci est un paragraphe de test. Ceci est un paragraphe de test.
+
+=over 4
+
+=item ceci est un item de test
+
+Ceci est un texte d'item de test,
+ mais il ne devrait pas etre
+ remis en forme automatiquement
+ puisque certaines de ses lignes
+ sont indentees. Cela fonctionne il ?
+
+=back
+
+ This is a verbatim paragraph.
+
+=item singulier
+
diff --git a/t/t-13-plural/pod2.po b/t/t-13-plural/pod2.po
new file mode 100644
index 0000000..599c346
--- /dev/null
+++ b/t/t-13-plural/pod2.po
@@ -0,0 +1,73 @@
+# SOME DESCRIPTIVE TITLE
+# Copyright (C) YEAR Free Software Foundation, Inc.
+# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
+#
+#, fuzzy
+msgid ""
+msgstr ""
+"Project-Id-Version: PACKAGE VERSION\n"
+"POT-Creation-Date: 2003-11-01 0:32+0100\n"
+"PO-Revision-Date: 2007-09-15 16:05+0200\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
+"Language-Team: LANGUAGE <LL@li.org>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=CHARSET\n"
+"Content-Transfer-Encoding: ENCODING"
+
+#. type: =head1
+#: data/pod:1
+msgid "This is a test title"
+msgstr "Ceci est un titre de test"
+
+#. type: textblock
+#: data/pod:3
+msgid ""
+"This is a test paragraph. This is a test paragraph. This is a test "
+"paragraph. This is a test paragraph. This is a test paragraph. This is a "
+"test paragraph. This is a test paragraph. This is a test paragraph. This "
+"is a test paragraph. This is a test paragraph. This is a test paragraph. "
+"This is a test paragraph."
+msgstr ""
+"Ceci est un paragraphe de test. Ceci est un paragraphe de test. Ceci est un "
+"paragraphe de test. Ceci est un paragraphe de test. Ceci est un paragraphe "
+"de test. Ceci est un paragraphe de test. Ceci est un paragraphe de test. "
+"Ceci est un paragraphe de test. Ceci est un paragraphe de test. Ceci est un "
+"paragraphe de test. Ceci est un paragraphe de test. Ceci est un paragraphe "
+"de test. Ceci est un paragraphe de test. Ceci est un paragraphe de test."
+
+#. type: =item
+#: data/pod:11
+msgid "this is a test item"
+msgstr "ceci est un item de test"
+
+#. type: verbatim
+#: data/pod:13
+#, no-wrap
+msgid ""
+"This is a test item text, but\n"
+" it shouldn't be wrapped\n"
+" since one of its lines is\n"
+" indented. Does it work?\n"
+"\n"
+msgstr ""
+"Ceci est un texte d'item de test,\n"
+" mais il ne devrait pas etre \n"
+" remis en forme automatiquement\n"
+" puisque certaines de ses lignes\n"
+" sont indentees. Cela fonctionne il ?\n"
+"\n"
+
+#. type: verbatim
+#: data/pod:20
+#, no-wrap, fuzzy
+msgid " This is a verbatim paragraph.\n"
+msgstr " Ceci est un paragraphe verbatim.\n"
+
+#. type: =item
+#: data/other:11
+msgid "singular"
+msgid_plural "plural"
+msgstr[0] "singulier"
+msgstr[1] "pluriel"
+msgstr[2] "toto"
+
diff --git a/t/t-13-plural/pod3 b/t/t-13-plural/pod3
new file mode 100644
index 0000000..800f99c
--- /dev/null
+++ b/t/t-13-plural/pod3
@@ -0,0 +1,23 @@
+=head1 This is a test title
+
+This is a test paragraph. This is a test paragraph. This is a test
+paragraph. This is a test paragraph. This is a test paragraph. This is a
+test paragraph. This is a test paragraph. This is a test paragraph. This
+is a test paragraph. This is a test paragraph. This is a test paragraph.
+This is a test paragraph.
+
+=over 4
+
+=item this is a test item
+
+This is a test item text, but
+ it shouldn't be wrapped
+ since one of its lines is
+ indented. Does it work?
+
+=back
+
+ This is a verbatim paragraph.
+
+=item plural
+
diff --git a/t/t-13-plural/pod3.fr b/t/t-13-plural/pod3.fr
new file mode 100644
index 0000000..90d0a1c
--- /dev/null
+++ b/t/t-13-plural/pod3.fr
@@ -0,0 +1,34 @@
+
+ *****************************************************
+ * GENERATED FILE, DO NOT EDIT *
+ * THIS IS NO SOURCE FILE, BUT RESULT OF COMPILATION *
+ *****************************************************
+
+This file was generated by po4a(7). Do not store it (in VSC, for example),
+but store the PO file used as source file by po4a-translate.
+
+In fact, consider this as a binary, and the PO file as a regular .c file:
+If the PO get lost, keeping this translation up-to-date will be harder.
+
+=encoding UTF-8
+
+=head1 Ceci est un titre de test
+
+Ceci est un paragraphe de test. Ceci est un paragraphe de test. Ceci est un paragraphe de test. Ceci est un paragraphe de test. Ceci est un paragraphe de test. Ceci est un paragraphe de test. Ceci est un paragraphe de test. Ceci est un paragraphe de test. Ceci est un paragraphe de test. Ceci est un paragraphe de test. Ceci est un paragraphe de test. Ceci est un paragraphe de test. Ceci est un paragraphe de test. Ceci est un paragraphe de test.
+
+=over 4
+
+=item ceci est un item de test
+
+Ceci est un texte d'item de test,
+ mais il ne devrait pas etre
+ remis en forme automatiquement
+ puisque certaines de ses lignes
+ sont indentees. Cela fonctionne il ?
+
+=back
+
+ This is a verbatim paragraph.
+
+=item pluriel
+
diff --git a/t/t-13-plural/pod4 b/t/t-13-plural/pod4
new file mode 100644
index 0000000..ec1f0b0
--- /dev/null
+++ b/t/t-13-plural/pod4
@@ -0,0 +1,24 @@
+=head1 This is a test title
+
+This is a test paragraph. This is a test paragraph. This is a test
+paragraph. This is a test paragraph. This is a test paragraph. This is a
+test paragraph. This is a test paragraph. This is a test paragraph. This
+is a test paragraph. This is a test paragraph. This is a test paragraph.
+This is a test paragraph.
+
+=over 4
+
+=item this is a test item
+
+This is a test item text, but
+ it shouldn't be wrapped
+ since one of its lines is
+ indented. Does it work?
+
+=back
+
+ This is a verbatim paragraph.
+
+=item singular
+
+=item plural
diff --git a/t/t-13-plural/pod4.fr b/t/t-13-plural/pod4.fr
new file mode 100644
index 0000000..0750a02
--- /dev/null
+++ b/t/t-13-plural/pod4.fr
@@ -0,0 +1,36 @@
+
+ *****************************************************
+ * GENERATED FILE, DO NOT EDIT *
+ * THIS IS NO SOURCE FILE, BUT RESULT OF COMPILATION *
+ *****************************************************
+
+This file was generated by po4a(7). Do not store it (in VSC, for example),
+but store the PO file used as source file by po4a-translate.
+
+In fact, consider this as a binary, and the PO file as a regular .c file:
+If the PO get lost, keeping this translation up-to-date will be harder.
+
+=encoding UTF-8
+
+=head1 Ceci est un titre de test
+
+Ceci est un paragraphe de test. Ceci est un paragraphe de test. Ceci est un paragraphe de test. Ceci est un paragraphe de test. Ceci est un paragraphe de test. Ceci est un paragraphe de test. Ceci est un paragraphe de test. Ceci est un paragraphe de test. Ceci est un paragraphe de test. Ceci est un paragraphe de test. Ceci est un paragraphe de test. Ceci est un paragraphe de test. Ceci est un paragraphe de test. Ceci est un paragraphe de test.
+
+=over 4
+
+=item ceci est un item de test
+
+Ceci est un texte d'item de test,
+ mais il ne devrait pas etre
+ remis en forme automatiquement
+ puisque certaines de ses lignes
+ sont indentees. Cela fonctionne il ?
+
+=back
+
+ This is a verbatim paragraph.
+
+=item singulier
+
+=item pluriel
+
diff --git a/testsuite/check b/testsuite/check
new file mode 100755
index 0000000..03afc3b
--- /dev/null
+++ b/testsuite/check
@@ -0,0 +1,216 @@
+#! /bin/sh
+module=man
+
+DIFF="diff -uBb"
+WDIFF="wdiff -3 -n"
+
+if [ $# = 1 ] && [ $1 = "-h" ] ; then
+ if [ "$module" = "man" ] ; then
+ echo "\
+Compare how are displayed an original man page and the po4a-normalized one.
+Usage: $0
+ Check all man pages found in /usr/share/man/man[1-8]
+ $0 <space separated list of man pages>
+ Check the specified man pages.
+ $0 -f <file>
+ Check the man pages specified in <file> (one page per line).
+Man pages can be gzipped.
+$0 erases all LISTE.* files in the current directory and creates
+the following files:
+LISTE.TOTAL List of all the checked man pages
+LISTE.OK List of the man pages for which $DIFF does not see a difference.
+LISTE.OK2 $DIFF does not see a difference afetr converting hyphens
+ to minus signs, `` to \", and '' to \" (in both pages).
+LISTE.WOK1 $WDIFF doesn't see any difference after the same modifications
+LISTE.WOK2 This tries to detect changes in the hyphenation of words.
+LISTE.WOK3 This removes minus signs, and thus detects more changes in
+ hyphenation. It also mask font changes.
+LISTE.PBS po4a preferred to stop processing the man page (non
+ supported,...)
+LISTE.WDIFF These are probably bugs in po4a or in the man page
+LISTE.IGN man pages po4a refused to operate on (e.g. were generated by
+ Pod::Man)
+You may wish to use stats.sh to compare to runs of $0."
+ fi
+
+ exit 0
+fi
+
+rm -f LISTE.*
+touch LISTE.{TOTAL,OK,OK2,WDIFF,PBS,IGN,WOK1,WOK2,WOK3}
+
+if [ $# = 2 ] && [ $1 = "-f" ] ; then
+ cat $2 > LISTE.TOTAL
+elif [ $# != 0 ] ; then
+ echo $@ > LISTE.TOTAL
+else
+ if [ "$module" = "man" ] ; then
+ find /usr/share/man/man[1-9] /usr/X11R6/man/man[1-9] -type f | sort > LISTE.TOTAL
+ elif [ "$module" = "pod" ] ; then
+ locate pod|egrep '\.pod$' | sort > LISTE.TOTAL
+ fi
+fi
+
+tmp=/tmp/po4a-check-$module-$$
+mkdir -p $tmp
+if [ "$module" = "man" ] ; then
+ cmdtotxt="mantotxt"
+elif [ "$module" = "pod" ] ; then
+ cmdtotxt="podtotxt"
+fi
+
+
+mantotxt() {
+ `grog -Tutf8 $1` > $1.txt
+}
+
+podtotxt() { # $1 file to convert ; $2 name to pretend to have
+ if [ $1 != $2 ] ; then
+ mv $2 $2.old
+ mv $1 $2
+ fi
+ pod2man $2 > $2.man
+ man -Pcat -l $2.man > $2.txt
+ if [ $1 != $2 ] ; then
+ mv $2.txt $1.txt
+ mv $2 $1
+ mv $2.old $2
+ fi
+}
+
+
+for fich in `cat LISTE.TOTAL` ; do
+ if echo $fich | egrep '\.gz$' ; then
+ newfich=`basename $fich .gz`;
+ zcat $fich > $tmp/$newfich;
+ else
+ newfich=`basename $fich`
+ cat $fich > $tmp/$newfich;
+ fi
+
+ echo "####### $fich";
+ rm -f po4a-normalize.*
+ if PERLLIB=../lib ../po4a-normalize -f $module -M iso-8859-1 $tmp/$newfich \
+ -o groff_code=translate \
+ -o noarg=ny0,Sp,Pp,BS,BE,VE,ES,zZ,zY \
+ -o translate_each=TA,IN,hN,AS,OP,Tp,Ip,TQ \
+ -o no_wrap=Ds:De,Ex:Ee,CS:CE,Vb:Ve \
+ -o untranslated=Id,VS,rm \
+ -o translate_joined=FN,Sh,iX \
+ -o inline=ZN,Pn \
+ -o generated 2>&1 ; then
+ mv po4a-normalize.output $tmp/po4a-normalize.output
+ $cmdtotxt $tmp/po4a-normalize.output $tmp/$newfich;
+
+ $cmdtotxt $tmp/$newfich $tmp/$newfich;
+ echo $fich
+ echo "$DIFF $tmp/$newfich.txt $tmp/po4a-normalize.output.txt"
+ if $DIFF $tmp/$newfich.txt $tmp/po4a-normalize.output.txt ; then
+ echo ">ok"
+ echo $fich >> LISTE.OK
+ else
+ awk 'BEGIN{RS=" ";ORS=" "}
+ {gsub("\xE2\x80\x90","-"); # this is safe
+ gsub("\xE2\x88\x92","-"); # the minus sign in eqn
+ gsub("\xE2\x80\x98\xE2\x80\x98","\xE2\x80\x9C"); # this can
+ # be troublesome (e.g. two single quotes => " insteas of ""
+ gsub("\xE2\x80\x99\xE2\x80\x99","\xE2\x80\x9D");
+ print}' $tmp/$newfich.txt > $tmp/"$newfich"_ignore
+ awk 'BEGIN{RS=" ";ORS=" "}
+ {gsub("\xE2\x80\x90","-");
+ gsub("\xE2\x88\x92","-");
+ gsub("\xE2\x80\x98\xE2\x80\x98","\xE2\x80\x9C");
+ gsub("\xE2\x80\x99\xE2\x80\x99","\xE2\x80\x9D");
+ print}' $tmp/po4a-normalize.output.txt > $tmp/po4a-normalize.ignore
+ echo $fich
+ echo "$DIFF $tmp/"$newfich"_ignore $tmp/po4a-normalize.ignore"
+ if $DIFF $tmp/"$newfich"_ignore $tmp/po4a-normalize.ignore ; then
+ echo ">ok2"
+ echo $fich >> LISTE.OK2
+ else
+ echo $fich
+ echo "$WDIFF $tmp/"$newfich"_ignore $tmp/po4a-normalize.ignore"
+ if $WDIFF $tmp/"$newfich"_ignore $tmp/po4a-normalize.ignore; then
+ echo ">wok1"
+ echo $fich >> LISTE.WOK1
+ else
+ awk 'BEGIN{RS=";";ORS=";"}
+ {gsub("-\n[[:blank:]]+",""); # remove hyphen at the end of lines
+ # this permits to detect some diff due
+ # to word rewrapping (fails if a word
+ # containing a hyphen was wrapped)
+ print}' $tmp/"$newfich"_ignore > $tmp/"$newfich"_ignore2
+ awk 'BEGIN{RS=";";ORS=";"}
+ {gsub("-\n[[:blank:]]+","");
+ print}' $tmp/po4a-normalize.ignore > $tmp/po4a-normalize.ignore2
+ # the same, but for word wrapped on hyphen.
+ # This is useful only if there is either word wrapped on
+ # hyphen or word not wrapped on hyphen. But this may be
+ # usefull to classify the diff
+ awk 'BEGIN{RS=";";ORS=";"}
+ {gsub("-\n[[:blank:]]+","-");
+ print}' $tmp/"$newfich"_ignore > $tmp/"$newfich"_ignore2b
+ awk 'BEGIN{RS=";";ORS=";"}
+ {gsub("-\n[[:blank:]]+","-");
+ print}' $tmp/po4a-normalize.ignore > $tmp/po4a-normalize.ignore2b
+ echo $fich
+ echo "$WDIFF $tmp/"$newfich"_ignore2 $tmp/po4a-normalize.ignore2"
+ $WDIFF $tmp/"$newfich"_ignore2 $tmp/po4a-normalize.ignore2
+ ret1=$?
+ echo $fich
+ echo "$WDIFF $tmp/"$newfich"_ignore2b $tmp/po4a-normalize.ignore2b"
+ $WDIFF $tmp/"$newfich"_ignore2b $tmp/po4a-normalize.ignore2b
+ ret2=$?
+ if [ $ret1 = 0 ] || [ $ret2 = 0 ]; then
+ echo ">wok2"
+ echo $fich >> LISTE.WOK2
+ else
+ awk '{gsub(".\x08",""); # this hides font diff ?
+ print}' $tmp/"$newfich"_ignore > $tmp/"$newfich"_ignore3_tmp
+ awk 'BEGIN{RS=";";ORS=";"}
+ {gsub("-\n[[:blank:]]+","");
+ gsub("-","");
+ print}' $tmp/"$newfich"_ignore3_tmp > $tmp/"$newfich"_ignore3
+
+ awk '{gsub(".\x08",""); # this hides font diff ?
+ print}' $tmp/po4a-normalize.ignore > $tmp/po4a-normalize.ignore3_tmp
+ awk 'BEGIN{RS=";";ORS=";"}
+ {gsub("-\n[[:blank:]]+","");
+ gsub("-","");
+ print}' $tmp/po4a-normalize.ignore3_tmp > $tmp/po4a-normalize.ignore3
+
+ echo $fich
+ echo "$WDIFF $tmp/"$newfich"_ignore3 $tmp/po4a-normalize.ignore3"
+ if $WDIFF $tmp/"$newfich"_ignore3 $tmp/po4a-normalize.ignore3
+ then
+ echo ">wok3"
+ echo $fich >> LISTE.WOK3
+ else
+ echo ">wdiff"
+ echo $fich >> LISTE.WDIFF
+ fi
+ fi
+ fi
+ fi
+ fi
+ else
+ if [ $? = 254 ]; then
+ echo ">ign"
+ echo $fich >> LISTE.IGN
+ else
+ l=$(wc -l $tmp/$newfich|cut -d" " -f1)
+ egrep "^.so " $tmp/$newfich 2>&1 > /dev/null
+ if [ "$?" = "0" ] && [ "$l" = "1" ];
+ then
+ echo ">ign"
+ echo $fich >> LISTE.IGN
+ else
+ echo ">pbs"
+ echo $fich >> LISTE.PBS
+ fi
+ fi
+ fi
+ rm -f $tmp/$newfich* $tmp/po4a-normalize.*
+ echo '-------------------'
+done
+rm -r $tmp
diff --git a/testsuite/stats.man b/testsuite/stats.man
new file mode 100755
index 0000000..4305452
--- /dev/null
+++ b/testsuite/stats.man
@@ -0,0 +1,120 @@
+#! /usr/bin/perl -w
+
+# This script looks all installed man page, and report some stats about them
+# (usefull only to guide reflexions to po-man implementation)
+
+use strict;
+
+use File::Find ();
+
+# for the convenience of &wanted calls, including -eval statements:
+#use vars qw/*name *dir *prune/;
+#*name = *File::Find::name;
+#*dir = *File::Find::dir;
+#*prune = *File::Find::prune;
+
+my %page;
+$page{'pod'}{'desc'} = "generated by Pod::Man";
+$page{'help2man'}{'desc'} = "generated by help2man";
+$page{'docbook-to-man'}{'desc'} = "generated by docbook-to-man";
+$page{'docbook2man'}{'desc'} = "generated by docbook2man";
+$page{'latex2man'}{'desc'} = "generated by latex2man";
+$page{'db2man.xsl'}{'desc'} = "generated by db2man.xsl";
+$page{'mtex2man'}{'desc'} = "generated by mtex2man(1)";
+$page{'auto'}{'desc'} = "contains 'THIS FILE HAS BEEN AUTOMATICALLY GENERATED. DO NOT EDIT.'";
+$page{'notedit'}{'desc'} = "contains 'DO NOT EDIT' or 'generated', but I dunno by who.";
+$page{'man'}{'desc'} = "seem to be a source file";
+
+my %used=(); # used macros
+my %defined=(); # self defined macros
+
+foreach my $type (keys %page) {
+ $page{$type}{'defcount'} = 0;
+}
+
+sub wanted {
+ my ($dev,$ino,$mode,$nlink,$uid,$gid);
+
+ if ((($dev,$ino,$mode,$nlink,$uid,$gid) = lstat($_)) && -f $_) {
+ my $file = $File::Find::dir."/".$_;
+ return unless $file =~ m|/usr/share/man/man|; # pass translations
+ if ($file =~ /\.gz$/) {
+ open FILE,"zcat $file|" || die "Can't open $file\n";
+ } else {
+ open FILE,"<$file" || die "Can't open $file\n";
+ }
+
+ my $header="";
+ while ($_=<FILE>) {
+ last unless /^.."/;#"
+# chomp;
+ $header .= " $_";
+ }
+ $header = "\n$header" if (length $header);
+ my $define="";
+ while (<FILE>) {
+ if (m/^\.de (.*)$/) {
+ my $macro=$1;
+ $define .= $macro.",";
+ $defined{$macro} =(defined($defined{$macro}) ? $defined{$macro}+1 : 1);
+ next;
+ } elsif (m/^\.de/) {
+ print "DEF: $_";
+ } elsif (m/^\.([^ ]*)/) {
+ my $macro=$1;
+ chomp($macro);
+ $macro =~ s/\s*$//g;
+ $macro =~ s/^\s*//g;
+ $macro =~ s/.".*$/|"/;
+ next unless (length($macro));
+# unless ($define =~ m/$macro/) { # ignore self defined macro
+ $used{$macro} = (defined($used{$macro}) ? $used{$macro}+1 : 1);
+# }
+ }
+ }
+ close FILE;
+ my $type="man";
+ if ($header =~ /Pod::Man/) { $type="pod";
+ } elsif ($header =~ /generated by help2man/) { $type="help2man";
+ } elsif ($header =~ /with docbook-to-man/) { $type="docbook-to-man";
+ } elsif ($header =~ /generated by docbook2man/) { $type="docbook2man";
+ } elsif ($header =~ /created with latex2man/) { $type="latex2man";
+ } elsif ($header =~ /Generated by db2man.xsl/) { $type="db2man.xsl";
+ } elsif ($header =~ /generated automatically by mtex2man/) { $type="mtex2man";
+ } elsif ($header =~ /THIS FILE HAS BEEN AUTOMATICALLY GENERATED. DO NOT EDIT./) {
+ $type="auto";
+ } elsif ($header =~ /DO NOT EDIT/i || $header =~ /generated/i) {
+ $type="notedit";
+ }
+ if (length($define)) {
+ $page{$type}{'define'}{$file} = $define;
+ $page{$type}{'defcount'}++;
+ }
+ push @{$page{$type}{'files'}},$file;
+ push @{$page{$type}{'headers'}},"$file\n$header";
+ }
+}
+# Traverse desired filesystems
+File::Find::find({wanted => \&wanted}, '/usr/share/man');
+
+my $total=0;
+foreach my $type (sort keys %page) {
+ $page{$type}{'num'} = scalar @{$page{$type}{'files'}};
+ $total += $page{$type}{'num'};
+}
+print "Seen $total pages.\n";
+foreach my $type (sort {$page{$a}{'num'} <=> $page{$b}{'num'}} keys %page) {
+ print " ".$page{$type}{'num'}." ".$page{$type}{'desc'}.". ".
+ $page{$type}{'defcount'}." seem to define new macro.\n";
+}
+
+print "\nHere is a list of the (regular and self defined) macros used:\n";
+foreach my $macro (sort {$used{$a} <=> $used{$b}} keys %used) {
+ print " $macro (used ".$used{$macro}." times)\n";
+}
+
+#print "\nHere is the list of pages seeming to be source page, and defining new macros:\n";
+#foreach my $page(sort { $page{'man'}{'define'}{$a} cmp $page{'man'}{'define'}{$b}
+# } keys %{$page{'man'}{'define'}}) {
+# print $page{'man'}{'define'}{$page}.". in $page\n";
+#}
diff --git a/testsuite/stats.sh b/testsuite/stats.sh
new file mode 100755
index 0000000..d330106
--- /dev/null
+++ b/testsuite/stats.sh
@@ -0,0 +1,66 @@
+#!/bin/sh
+
+# see the 'check' script for the meaning of the categories.
+# You can tune the order of the categories to have all improvement in the
+# upper right or lower left corner of the table.
+types="IGN OK OK2 WOK1 WOK2 WOK3 PBS WDIFF"
+
+if [ "$#" != "2" ] ; then
+ echo "\
+Compare two executions of the 'check' script, and display the results in a
+table.
+
+Usage: $0 <directory1> <directory2>
+Were both directories contain the results (LISTE.* files) of two 'check'
+executions.
+
+The categories are configurable at the beginning of $0.
+
+$0 creates, in the stats_work directory, files named cat1_cat2, which
+indicate which man pages changed from the cat1 category to the cat2 one.
+"
+ exit 0
+fi
+
+old=$1
+new=$2
+[ -d stats_work ] || mkdir stats_work
+
+# copy the LISTE.* files in stats_work
+for i in $types
+do
+ sort $old/LISTE.$i > stats_work/old_$i
+ sort $new/LISTE.$i > stats_work/new_$i
+done
+
+# create the cat1_cat2 files which contain the common lines of two
+# categories.
+for i in $types
+do
+ for j in $types
+ do
+ cat stats_work/old_$i stats_work/new_$j | sort | uniq -d > stats_work/"$i"_"$j"
+ done
+done
+
+# display the report
+echo "dir1:$old"
+echo "dir2:$new"
+echo
+echo -n "dir1\\dir2"
+for i in $types
+do
+ printf "% 6s" $i
+done
+echo
+for i in $types
+do
+ printf "% 9s" $i
+ for j in $types
+ do
+ printf "% 6d" $(wc -l stats_work/"$i"_"$j"|cut -d" " -f1)
+ done
+ echo
+done
+echo -n "total: " $(for i in $types; do cat stats_work/old_$i; done | wc -l)
+echo " |" $(for i in $types; do cat stats_work/new_$i; done | wc -l)
diff --git a/testsuite/test.man b/testsuite/test.man
new file mode 100644
index 0000000..dda31a9
--- /dev/null
+++ b/testsuite/test.man
@@ -0,0 +1,23 @@
+.TH test 1 TEST test
+.SH Section1
+blibli
+.B blabla
+bloblo
+.
+.B blabla
+.
+0
+.
+1
+.fi
+.SH Section2
+Lalala
+ {
+ }
+.
+bliblu
+.fi
+.SH Section3
+.IR .i. .r. .I. .R. to\ be\ continued
+.fi
+.fi
diff --git a/testsuite/test.man.addendum b/testsuite/test.man.addendum
new file mode 100644
index 0000000..0ed5ba1
--- /dev/null
+++ b/testsuite/test.man.addendum
@@ -0,0 +1,7 @@
+PO4A-HEADER:position=Section2;mode=after;endboundary=^\.fi$
+PO4A-HEADER:position=Section2;mode=before;endboundary=^\.fi$
+PO4A-HEADER:position=Section2;mode=after;beginboundary=^\.fi$
+PO4A-HEADER:position=Section2;mode=after;beginboundary=^\.fiDFSSDGDSFGFSDGFD$
+.SH Added Section
+Some content
+.fi