From d6d279189546b0698b5c9dc6d3fc0797554c255f Mon Sep 17 00:00:00 2001 From: brian d foy Date: Sun, 18 Dec 2011 07:45:48 -0600 Subject: [PATCH 01/12] Rearrange the order of roofers for OpenBSD OpenBSD 5.0 only has mandoc, so try that first --- lib/Pod/Perldoc/ToMan.pm | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/lib/Pod/Perldoc/ToMan.pm b/lib/Pod/Perldoc/ToMan.pm index ff045cc..0c0ada2 100644 --- a/lib/Pod/Perldoc/ToMan.pm +++ b/lib/Pod/Perldoc/ToMan.pm @@ -61,12 +61,14 @@ sub init { } sub _roffer_candidates { + my( $self ) = @_; + # OpenBSD is weird, and I'm punting for the moment. Using # nroff will work just like it did before, but openbsd # people won't get the benefit of the UTF-8 fixes. # - if( $^O eq 'openbsd' ) { qw( nroff ) } - else { qw( groff nroff mandoc ) } + if( $self->is_openbsd ) { qw( mandoc nroff groff ) } + else { qw( groff nroff mandoc ) } } sub _find_roffer { From c6aa5a5e6952293094ed9bbee970453f52dbb91f Mon Sep 17 00:00:00 2001 From: brian d foy Date: Sun, 18 Dec 2011 07:46:10 -0600 Subject: [PATCH 02/12] Add a method for is_openbsd --- lib/Pod/Perldoc/BaseTo.pm | 15 ++++++++------- 1 file changed, 8 insertions(+), 7 deletions(-) diff --git a/lib/Pod/Perldoc/BaseTo.pm b/lib/Pod/Perldoc/BaseTo.pm index 902fbda..3cdcdfa 100644 --- a/lib/Pod/Perldoc/BaseTo.pm +++ b/lib/Pod/Perldoc/BaseTo.pm @@ -25,13 +25,14 @@ sub TRUE () {1} sub FALSE () {return} BEGIN { - *is_vms = $^O eq 'VMS' ? \&TRUE : \&FALSE unless defined &is_vms; - *is_mswin32 = $^O eq 'MSWin32' ? \&TRUE : \&FALSE unless defined &is_mswin32; - *is_dos = $^O eq 'dos' ? \&TRUE : \&FALSE unless defined &is_dos; - *is_os2 = $^O eq 'os2' ? \&TRUE : \&FALSE unless defined &is_os2; - *is_cygwin = $^O eq 'cygwin' ? \&TRUE : \&FALSE unless defined &is_cygwin; - *is_linux = $^O eq 'linux' ? \&TRUE : \&FALSE unless defined &is_linux; - *is_hpux = $^O =~ m/hpux/ ? \&TRUE : \&FALSE unless defined &is_hpux; + *is_vms = $^O eq 'VMS' ? \&TRUE : \&FALSE unless defined &is_vms; + *is_mswin32 = $^O eq 'MSWin32' ? \&TRUE : \&FALSE unless defined &is_mswin32; + *is_dos = $^O eq 'dos' ? \&TRUE : \&FALSE unless defined &is_dos; + *is_os2 = $^O eq 'os2' ? \&TRUE : \&FALSE unless defined &is_os2; + *is_cygwin = $^O eq 'cygwin' ? \&TRUE : \&FALSE unless defined &is_cygwin; + *is_linux = $^O eq 'linux' ? \&TRUE : \&FALSE unless defined &is_linux; + *is_hpux = $^O =~ m/hpux/ ? \&TRUE : \&FALSE unless defined &is_hpux; + *is_openbsd = $^O =~ m/openbsd/ ? \&TRUE : \&FALSE unless defined &is_openbsd; } sub _perldoc_elem { From d6c50ae7a19d85538b632c89e45d364c472e237a Mon Sep 17 00:00:00 2001 From: brian d foy Date: Sun, 18 Dec 2011 07:46:24 -0600 Subject: [PATCH 03/12] debugging should be true if the -D switch is set --- lib/Pod/Perldoc/BaseTo.pm | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/lib/Pod/Perldoc/BaseTo.pm b/lib/Pod/Perldoc/BaseTo.pm index 3cdcdfa..442584e 100644 --- a/lib/Pod/Perldoc/BaseTo.pm +++ b/lib/Pod/Perldoc/BaseTo.pm @@ -45,7 +45,11 @@ sub _perldoc_elem { } sub debugging { - defined(&Pod::Perldoc::DEBUG) and &Pod::Perldoc::DEBUG() + my( $self, @messages ) = @_; + + $self->opt_D + || + ( defined(&Pod::Perldoc::DEBUG) and &Pod::Perldoc::DEBUG() ) } sub debug { From 276bb958afdc97614194a7d99a88a7f46d99e5e0 Mon Sep 17 00:00:00 2001 From: brian d foy Date: Sun, 18 Dec 2011 08:19:47 -0600 Subject: [PATCH 04/12] Fix that scoping error --- lib/Pod/Perldoc/ToMan.pm | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/Pod/Perldoc/ToMan.pm b/lib/Pod/Perldoc/ToMan.pm index 0c0ada2..031d76c 100644 --- a/lib/Pod/Perldoc/ToMan.pm +++ b/lib/Pod/Perldoc/ToMan.pm @@ -174,9 +174,9 @@ sub _save_pod_man_output { $fh = do { my $file = "podman.out.$$.txt"; + $self->debug( "Writing $file with Pod::Man output\n" ); open my $fh2, '>', $file; } unless $fh; - $self->debug( "Writing $file with Pod::Man output\n" ); print { $fh } ${ $self->{_text_ref} }; } From 208b5e1189f0ab1baee91db1d1bde720d0a62da3 Mon Sep 17 00:00:00 2001 From: brian d foy Date: Sun, 18 Dec 2011 08:25:33 -0600 Subject: [PATCH 05/12] There's no opt_D available in BaseTo --- lib/Pod/Perldoc/BaseTo.pm | 2 -- 1 file changed, 2 deletions(-) diff --git a/lib/Pod/Perldoc/BaseTo.pm b/lib/Pod/Perldoc/BaseTo.pm index 442584e..463e8a7 100644 --- a/lib/Pod/Perldoc/BaseTo.pm +++ b/lib/Pod/Perldoc/BaseTo.pm @@ -47,8 +47,6 @@ sub _perldoc_elem { sub debugging { my( $self, @messages ) = @_; - $self->opt_D - || ( defined(&Pod::Perldoc::DEBUG) and &Pod::Perldoc::DEBUG() ) } From f7ba5e48efeab5b259207c65fd1d76993ed8b71e Mon Sep 17 00:00:00 2001 From: brian d foy Date: Sun, 18 Dec 2011 08:27:17 -0600 Subject: [PATCH 06/12] Return the filehandle for saving the intermediate output --- lib/Pod/Perldoc/ToMan.pm | 1 + 1 file changed, 1 insertion(+) diff --git a/lib/Pod/Perldoc/ToMan.pm b/lib/Pod/Perldoc/ToMan.pm index 031d76c..6786453 100644 --- a/lib/Pod/Perldoc/ToMan.pm +++ b/lib/Pod/Perldoc/ToMan.pm @@ -176,6 +176,7 @@ sub _save_pod_man_output { my $file = "podman.out.$$.txt"; $self->debug( "Writing $file with Pod::Man output\n" ); open my $fh2, '>', $file; + $fh2; } unless $fh; print { $fh } ${ $self->{_text_ref} }; From 5ba59cb012ec27d038da721b75b3ab434907c65c Mon Sep 17 00:00:00 2001 From: brian d foy Date: Sun, 18 Dec 2011 08:43:21 -0600 Subject: [PATCH 07/12] Remove OpenBSD special handling for roffer candidates --- lib/Pod/Perldoc/ToMan.pm | 7 +------ 1 file changed, 1 insertion(+), 6 deletions(-) diff --git a/lib/Pod/Perldoc/ToMan.pm b/lib/Pod/Perldoc/ToMan.pm index 6786453..e62f864 100644 --- a/lib/Pod/Perldoc/ToMan.pm +++ b/lib/Pod/Perldoc/ToMan.pm @@ -63,12 +63,7 @@ sub init { sub _roffer_candidates { my( $self ) = @_; - # OpenBSD is weird, and I'm punting for the moment. Using - # nroff will work just like it did before, but openbsd - # people won't get the benefit of the UTF-8 fixes. - # - if( $self->is_openbsd ) { qw( mandoc nroff groff ) } - else { qw( groff nroff mandoc ) } + qw( groff nroff mandoc ); } sub _find_roffer { From 10d1d0b198aaa62c7871147e4d72bc8868b35e16 Mon Sep 17 00:00:00 2001 From: brian d foy Date: Sun, 18 Dec 2011 09:26:04 -0600 Subject: [PATCH 08/12] Check the mandoc version. The -Tutf8 switch doesn't work with 1.10 in OpenBSD 4.9. --- lib/Pod/Perldoc/ToMan.pm | 35 ++++++++++++++++++++++++++++++----- 1 file changed, 30 insertions(+), 5 deletions(-) diff --git a/lib/Pod/Perldoc/ToMan.pm b/lib/Pod/Perldoc/ToMan.pm index e62f864..1676813 100644 --- a/lib/Pod/Perldoc/ToMan.pm +++ b/lib/Pod/Perldoc/ToMan.pm @@ -201,6 +201,31 @@ sub _have_groff_with_utf8 { $version gt $minimum_groff_version; } +sub _have_mandoc_with_utf8 { + my( $self ) = @_; + + return 0 unless $self->_is_mandoc; + my $roffer = $self->__nroffer; + + my $minimum_mandoc_version = '1.11'; + + my $version_string = `$roffer -V`; + my( $version ) = $version_string =~ /mandoc (\d+)\.(\d+)/; + $self->debug( "Found mandoc $version\n" ); + + # is a string comparison good enough? + if( $version lt $minimum_mandoc_version ) { + $self->warn( + "You have an older mandoc." . + " Update to version $minimum_mandoc_version for good Unicode support.\n" . + "If you don't upgrade, wide characters may come out oddly.\n", + "Your results still might be odd. If you have groff, that's even better.\n", + ); + } + + $version gt $minimum_groff_version; + } + sub _collect_nroff_switches { my( $self ) = shift; @@ -227,11 +252,11 @@ sub _collect_nroff_switches { sub _get_device_switches { my( $self ) = @_; - if( $self->_is_nroff ) { qw() } - elsif( $self->_have_groff_with_utf8 ) { qw(-Kutf8 -Tutf8) } - elsif( $self->_is_mandoc ) { qw(-Tutf8) } - elsif( $self->_is_ebcdic ) { qw(-Tcp1047) } - else { qw(-Tlatin1) } + if( $self->_is_nroff ) { qw() } + elsif( $self->_have_groff_with_utf8 ) { qw(-Kutf8 -Tutf8) } + elsif( $self->_is_ebcdic ) { qw(-Tcp1047) } + elsif( $self->_have_mandoc_with_utf8 ) { qw(-Tutf8) } + else { qw(-Tlatin1) } } sub _is_roff { From 4f586530e20e905648eaa676ef28f984328b06af Mon Sep 17 00:00:00 2001 From: brian d foy Date: Sun, 18 Dec 2011 09:33:49 -0600 Subject: [PATCH 09/12] No, we really need mandoc first for OpenBSD. groff is hopelessly out of date on OpenBSD. --- lib/Pod/Perldoc/ToMan.pm | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/lib/Pod/Perldoc/ToMan.pm b/lib/Pod/Perldoc/ToMan.pm index 1676813..e691df2 100644 --- a/lib/Pod/Perldoc/ToMan.pm +++ b/lib/Pod/Perldoc/ToMan.pm @@ -63,7 +63,8 @@ sub init { sub _roffer_candidates { my( $self ) = @_; - qw( groff nroff mandoc ); + if( $self->is_openbsd ) { qw( mandoc groff nroff ) } + else { qw( groff nroff mandoc ) } } sub _find_roffer { From 563a1be00ac6f50815c53dd4f6f0a831c4fc8c2b Mon Sep 17 00:00:00 2001 From: brian d foy Date: Sun, 18 Dec 2011 09:35:38 -0600 Subject: [PATCH 10/12] Fix minimum_mandoc_version return value I had a variable left over from cut and paste. --- lib/Pod/Perldoc/ToMan.pm | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/Pod/Perldoc/ToMan.pm b/lib/Pod/Perldoc/ToMan.pm index e691df2..8290fad 100644 --- a/lib/Pod/Perldoc/ToMan.pm +++ b/lib/Pod/Perldoc/ToMan.pm @@ -224,7 +224,7 @@ sub _have_mandoc_with_utf8 { ); } - $version gt $minimum_groff_version; + $version gt $minimum_mandoc_version; } sub _collect_nroff_switches { From 094ed5b164c4ffa705461ac827beebeaeb5991cd Mon Sep 17 00:00:00 2001 From: brian d foy Date: Sun, 18 Dec 2011 09:37:50 -0600 Subject: [PATCH 11/12] Need a branch for older maniocs. They don't get any switches. --- lib/Pod/Perldoc/ToMan.pm | 1 + 1 file changed, 1 insertion(+) diff --git a/lib/Pod/Perldoc/ToMan.pm b/lib/Pod/Perldoc/ToMan.pm index 8290fad..6612572 100644 --- a/lib/Pod/Perldoc/ToMan.pm +++ b/lib/Pod/Perldoc/ToMan.pm @@ -257,6 +257,7 @@ sub _get_device_switches { elsif( $self->_have_groff_with_utf8 ) { qw(-Kutf8 -Tutf8) } elsif( $self->_is_ebcdic ) { qw(-Tcp1047) } elsif( $self->_have_mandoc_with_utf8 ) { qw(-Tutf8) } + elsif( $self->_is_mandoc ) { qw() } else { qw(-Tlatin1) } } From 6d0f641115ceaf5c7a21b4d8b3121d050003e0d7 Mon Sep 17 00:00:00 2001 From: brian d foy Date: Sun, 18 Dec 2011 09:40:10 -0600 Subject: [PATCH 12/12] Fix version regex in _have_mandoc_with_utf8 --- lib/Pod/Perldoc/ToMan.pm | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/lib/Pod/Perldoc/ToMan.pm b/lib/Pod/Perldoc/ToMan.pm index 6612572..b10f5d0 100644 --- a/lib/Pod/Perldoc/ToMan.pm +++ b/lib/Pod/Perldoc/ToMan.pm @@ -195,7 +195,7 @@ sub _have_groff_with_utf8 { $self->warn( "You have an old groff." . " Update to version $minimum_groff_version for good Unicode support.\n" . - "If you don't upgrade, wide characters may come out oddly.\n", + "If you don't upgrade, wide characters may come out oddly.\n" ); } @@ -211,16 +211,16 @@ sub _have_mandoc_with_utf8 { my $minimum_mandoc_version = '1.11'; my $version_string = `$roffer -V`; - my( $version ) = $version_string =~ /mandoc (\d+)\.(\d+)/; + my( $version ) = $version_string =~ /mandoc ((\d+)\.(\d+))/; $self->debug( "Found mandoc $version\n" ); # is a string comparison good enough? if( $version lt $minimum_mandoc_version ) { $self->warn( "You have an older mandoc." . - " Update to version $minimum_mandoc_version for good Unicode support.\n" . - "If you don't upgrade, wide characters may come out oddly.\n", - "Your results still might be odd. If you have groff, that's even better.\n", + " Update to version $minimum_mandoc_version for better Unicode support.\n" . + "If you don't upgrade, wide characters may come out oddly.\n" . + "Your results still might be odd. If you have groff, that's even better.\n" ); }