charset: keep original endpoint during character overrides
authorMischa POSLAWSKY <perl@shiar.org>
Fri, 21 Apr 2017 20:08:05 +0000 (22:08 +0200)
committerMischa POSLAWSKY <perl@shiar.org>
Thu, 25 May 2017 20:10:23 +0000 (22:10 +0200)
charset.plp

index 381ea14..5358a37 100644 (file)
@@ -308,10 +308,9 @@ sub tabinput {
                        # substr strings is twice as fast as splitting to an array
                        $row{table} = Encode::decode($row{set}, pack 'C*', $row{offset} .. $row{endpoint});
                }
                        # substr strings is twice as fast as splitting to an array
                        $row{table} = Encode::decode($row{set}, pack 'C*', $row{offset} .. $row{endpoint});
                }
-               $row{endpoint} -= $row{offset};
 
                if ($row{set} eq 'cp437') {
 
                if ($row{set} eq 'cp437') {
-                       if ($row{offset} <= 0xED and $row{endpoint} >= 0xED - $row{offset}) {
+                       if ($row{offset} <= 0xED and $row{endpoint} >= 0xED) {
                                # replace phi glyph
                                substr($row{table}, 0xED - $row{offset}, 1) = 'ϕ';
                        }
                                # replace phi glyph
                                substr($row{table}, 0xED - $row{offset}, 1) = 'ϕ';
                        }
@@ -322,11 +321,11 @@ sub tabinput {
                        }
                }
                elsif ($row{set} eq 'symbol') {
                        }
                }
                elsif ($row{set} eq 'symbol') {
-                       if ($row{offset} <= 0x60 and $row{endpoint} >= 0x60 - $row{offset}) {
+                       if ($row{offset} <= 0x60 and $row{endpoint} >= 0x60) {
                                # replace radical extender by closest unicode equivalent
                                substr($row{table}, 0x60 - $row{offset},  1) = '│';
                        }
                                # replace radical extender by closest unicode equivalent
                                substr($row{table}, 0x60 - $row{offset},  1) = '│';
                        }
-                       if ($row{offset} <= 0xBD and $row{endpoint} >= 0xFF - $row{offset}) {
+                       if ($row{offset} <= 0xBD and $row{endpoint} >= 0xFF) {
                                substr($row{table}, 0xBD - $row{offset},  2) = '⏐⎯'; # arrow extenders
                                substr($row{table}, 0xD2 - $row{offset},  3) = '®©™'; # serif variants
                                substr($row{table}, 0xE0 - $row{offset},  1) = '◊'; # replace lookalike, should match AdobeSymbol
                                substr($row{table}, 0xBD - $row{offset},  2) = '⏐⎯'; # arrow extenders
                                substr($row{table}, 0xD2 - $row{offset},  3) = '®©™'; # serif variants
                                substr($row{table}, 0xE0 - $row{offset},  1) = '◊'; # replace lookalike, should match AdobeSymbol
@@ -337,6 +336,8 @@ sub tabinput {
                        }
                }
 
                        }
                }
 
+               $row{endpoint} -= $row{offset};
+
                $visible->{ascii} =  # assume common base
                $visible->{ $row{set} } = 1;
        }
                $visible->{ascii} =  # assume common base
                $visible->{ $row{set} } = 1;
        }