From 7ca5c909537ead4ccef2a451538c345544834b65 Mon Sep 17 00:00:00 2001 From: Mischa POSLAWSKY Date: Thu, 5 Feb 2009 00:43:28 +0000 Subject: [PATCH] common module for ascii compatibility of unicode signs --- Shiar_Sheet/KeySigns.pm | 72 +++++++++++++++++++++++++++++++++++++++++ nethack.plp | 39 ++++------------------ vim.plp | 36 ++++----------------- vimperator.plp | 36 ++++----------------- 4 files changed, 90 insertions(+), 93 deletions(-) create mode 100644 Shiar_Sheet/KeySigns.pm diff --git a/Shiar_Sheet/KeySigns.pm b/Shiar_Sheet/KeySigns.pm new file mode 100644 index 0000000..83289ab --- /dev/null +++ b/Shiar_Sheet/KeySigns.pm @@ -0,0 +1,72 @@ +package Shiar_Sheet::KeySigns; + +use utf8; +use strict; +use warnings; + +our $VERSION = '1.00'; + +sub import { + my $class = shift; + + my $ascii = undef; + if (exists $PLP::Script::get{ascii}) { + # manual override + $ascii = !defined $PLP::Script::get{ascii} || $PLP::Script::get{ascii} !~ /^0*$/; + } + elsif (defined $ENV{HTTP_ACCEPT_CHARSET}) { + $ascii = 1; + for (split q{,}, $ENV{HTTP_ACCEPT_CHARSET}) { + $ascii = undef, last if $_ eq '*' or m{utf-?8}i; + } + } + + my %sign = ( + -ascii => $ascii, + charset=> $ascii ? 'us-ascii' : 'utf-8', + arg => $ascii ? '.' : '·', # described as 'dot' + args => $ascii ? ':' : '⁚', + argi => $ascii ? "'" : '′', + argm => $ascii ? '|' : '↕', + motion => $ascii ? '|' : '↕', + alias => $ascii ? 'see: ' : '»', + up => $ascii ? 'up' : '▲', + right => $ascii ? 'right' : '▶', + down => $ascii ? 'down' : '▼', + left => $ascii ? 'left' : '◀', + sep => $ascii ? '*' : '•', + _ => defined $ascii && !$ascii ? "\x{200b}" : '', + # use the correct ZWNJ only when unicode is forced on + # default to use unofficial html for best support + ); + + my ($parent) = caller; + eval '*'.$parent.'::sign = \%sign'; +} + +1; + +__END__ + +=head1 NAME + +Shiar_Sheet::KeySigns - Common Unicode characters in user-preferred charset + +=head1 SYNOPSIS + + use Shiar_Sheet::KeySigns; + print "$sign{alias} some$sign{_}thing"; # see: something + + package PLP::Script; + our %get = (ascii => 0); # user input + Shiar_Sheet::KeySigns->import; + print "$sign{alias} some$sign{_}thing"; # »some( )thing + +=head1 AUTHOR + +Mischa POSLAWSKY + +=head1 LICENSE + +Copyright. All rights reserved. + diff --git a/nethack.plp b/nethack.plp index 8b48c85..dc8e616 100644 --- a/nethack.plp +++ b/nethack.plp @@ -5,21 +5,11 @@ use warnings; no warnings 'qw'; # you know what you doing no warnings 'uninitialized'; # save some useless checks for more legible code -our $VERSION = '1.0'; +use Shiar_Sheet::KeySigns qw(%sign); -our $ascii = 0; -if (exists $get{ascii}) { - $ascii = $get{ascii} ne '0'; # manual override -} elsif (defined $ENV{HTTP_ACCEPT_CHARSET}) { - $ascii = 1; - for (split q{,}, $ENV{HTTP_ACCEPT_CHARSET}) { - $ascii = 0, last if $_ eq '*' or m{utf-?8}i; - } -} +our $VERSION = '1.0'; -my $charset = $ascii ? 'us-ascii' : 'utf-8'; -my $ctype = "text/html; charset=$charset"; -$header{content_type} = $ctype; +$header{content_type} = "text/html; charset=$sign{charset}"; :> @@ -27,7 +17,7 @@ $header{content_type} = $ctype; nethack cheat sheet - + <: @@ -60,23 +50,6 @@ $header{content_type} = $ctype; <: -our %sign = ( - arg => $ascii ? '.' : '·', # described as 'dot' - args => $ascii ? ':' : '⁚', - argi => $ascii ? "'" : '′', - argm => $ascii ? '|' : '↕', - motion => $ascii ? '|' : '↕', - alias => $ascii ? 'see: ' : '»', - up => $ascii ? 'up' : '▲', - right => $ascii ? 'right' : '▶', - down => $ascii ? 'down' : '▼', - left => $ascii ? 'left' : '◀', - sep => $ascii ? '*' : '•', - _ => exists $get{ascii} && !$ascii ? "\x{200b}" : '', - # use the correct ZWNJ only when unicode is forced on - # default to use unofficial html for best support -); - use Shiar_Sheet::Keyboard; my $keys = Shiar_Sheet::Keyboard->new({do 'nethack.inc.pl'}); $keys->map($get{map}) or undef $get{map}; @@ -118,8 +91,8 @@ $keys->print_rows($get{static});
  • keyboard map is <:= $get{map} ? 'set to ' : '' :><:= $keys->{map} :>
  • ascii mode is - <:= exists $get{ascii} && 'forced ' :><:= - $ascii ? 'on' : 'off' :> + <:= defined $sign{-ascii} && 'forced ' :><:= + $sign{-ascii} ? 'on' : 'off' :>
  • keys are <:= $showkeys ? 'always shown' : 'hidden if unassigned' :><:= !exists $get{keys} && ' by default' :> diff --git a/vim.plp b/vim.plp index e2890bf..b8a1f5c 100644 --- a/vim.plp +++ b/vim.plp @@ -5,21 +5,11 @@ use warnings; no warnings 'qw'; # you know what you doing no warnings 'uninitialized'; # save some useless checks for more legible code -our $VERSION = '1.2'; +use Shiar_Sheet::KeySigns qw(%sign); # dependant on $get{ascii} -our $ascii = 0; -if (exists $get{ascii}) { - $ascii = $get{ascii} ne '0'; # manual override -} elsif (defined $ENV{HTTP_ACCEPT_CHARSET}) { - $ascii = 1; - for (split q{,}, $ENV{HTTP_ACCEPT_CHARSET}) { - $ascii = 0, last if $_ eq '*' or m{utf-?8}i; - } -} +our $VERSION = '1.2'; -my $charset = $ascii ? 'us-ascii' : 'utf-8'; -my $ctype = "text/html; charset=$charset"; -$header{content_type} = $ctype; +$header{content_type} = "text/html; charset=$sign{charset}"; :> @@ -27,7 +17,7 @@ $header{content_type} = $ctype; vi cheat sheet - + <: @@ -60,20 +50,6 @@ $header{content_type} = $ctype;
  • <: -our %sign = ( - arg => $ascii ? '.' : '·', # described as 'dot' - motion => $ascii ? '|' : '↕', - alias => $ascii ? 'see: ' : '»', - up => $ascii ? 'up' : '▲', - right => $ascii ? 'right' : '▶', - down => $ascii ? 'down' : '▼', - left => $ascii ? 'left' : '◀', - sep => $ascii ? '*' : '•', - _ => exists $get{ascii} && !$ascii ? "\x{200b}" : '', - # use the correct ZWNJ only when unicode is forced on - # default to use unofficial html for best support -); - use Shiar_Sheet::Keyboard; my $keys = Shiar_Sheet::Keyboard->new({do 'vim.inc.pl'}); $keys->map($get{map}) or undef $get{map}; @@ -121,8 +97,8 @@ $keys->print_rows($get{static});
  • keyboard map is <:= $get{map} ? 'set to ' : '' :><:= $keys->{map} :>
  • ascii mode is - <:= exists $get{ascii} && 'forced ' :><:= - $ascii ? 'on' : 'off' :> + <:= defined $sign{-ascii} && 'forced ' :><:= + $sign{-ascii} ? 'on' : 'off' :>
  • keys are <:= $showkeys ? 'always shown' : 'hidden if unassigned' :><:= !exists $get{keys} && ' by default' :> diff --git a/vimperator.plp b/vimperator.plp index 660d819..cdde680 100644 --- a/vimperator.plp +++ b/vimperator.plp @@ -5,21 +5,11 @@ use warnings; no warnings 'qw'; # you know what you doing no warnings 'uninitialized'; # save some useless checks for more legible code -our $VERSION = '1.0'; +use Shiar_Sheet::KeySigns qw(%sign); -our $ascii = 0; -if (exists $get{ascii}) { - $ascii = $get{ascii} ne '0'; # manual override -} elsif (defined $ENV{HTTP_ACCEPT_CHARSET}) { - $ascii = 1; - for (split q{,}, $ENV{HTTP_ACCEPT_CHARSET}) { - $ascii = 0, last if $_ eq '*' or m{utf-?8}i; - } -} +our $VERSION = '1.0'; -my $charset = $ascii ? 'us-ascii' : 'utf-8'; -my $ctype = "text/html; charset=$charset"; -$header{content_type} = $ctype; +$header{content_type} = "text/html; charset=$sign{charset}"; :> @@ -27,7 +17,7 @@ $header{content_type} = $ctype; vimperator cheat sheet - + <: @@ -60,20 +50,6 @@ $header{content_type} = $ctype;
  • <: -our %sign = ( - arg => $ascii ? '.' : '·', # described as 'dot' - args => $ascii ? ':' : '⁚', # described as 'two dots' - alias => $ascii ? 'see: ' : '»', - up => $ascii ? 'up' : '▲', - right => $ascii ? 'right' : '▶', - down => $ascii ? 'down' : '▼', - left => $ascii ? 'left' : '◀', - sep => $ascii ? '*' : '•', - _ => exists $get{ascii} && !$ascii ? "\x{200b}" : '', - # use the correct ZWNJ only when unicode is forced on - # default to use unofficial html for best support -); - use Shiar_Sheet::Keyboard; my $keys = Shiar_Sheet::Keyboard->new({do 'vimperator.inc.pl'}); $keys->map($get{map}) or undef $get{map}; @@ -119,8 +95,8 @@ $keys->print_rows($get{static});
  • keyboard map is <:= $get{map} ? 'set to ' : '' :><:= $keys->{map} :>
  • ascii mode is - <:= exists $get{ascii} && 'forced ' :><:= - $ascii ? 'on' : 'off' :> + <:= defined $sign{-ascii} && 'forced ' :><:= + $sign{-ascii} ? 'on' : 'off' :>
  • keys are <:= $showkeys ? 'always shown' : 'hidden if unassigned' :><:= !exists $get{keys} && ' by default' :> -- 2.30.0