Class: PDF::Reader::Encoding::ZapfDingbatsEncoding

Inherits:
PDF::Reader::Encoding show all
Defined in:
lib/pdf/reader/encoding.rb

Constant Summary

Constants inherited from PDF::Reader::Encoding

UNKNOWN_CHAR

Instance Attribute Summary

Attributes inherited from PDF::Reader::Encoding

#differences

Instance Method Summary collapse

Methods inherited from PDF::Reader::Encoding

factory

Instance Method Details

#to_utf8(str, tounicode = nil) ⇒ Object

convert a ZapfDingbatsEncoding string into UTF-8



842
843
844
845
846
847
848
849
850
851
852
853
854
855
856
857
858
859
860
861
862
863
864
865
866
867
868
869
870
871
872
873
874
875
876
877
878
879
880
881
882
883
884
885
886
887
888
889
890
891
892
893
894
895
896
897
898
899
900
901
902
903
904
905
906
907
908
909
910
911
912
913
914
915
916
917
918
919
920
921
922
923
924
925
926
927
928
929
930
931
932
933
934
935
936
937
938
939
940
941
942
943
944
945
946
947
948
949
950
951
952
953
954
955
956
957
958
959
960
961
962
963
964
965
966
967
968
969
970
971
972
973
974
975
976
977
978
979
980
981
982
983
984
985
986
987
988
989
990
991
992
993
994
995
996
997
998
999
1000
1001
1002
1003
1004
1005
1006
1007
1008
1009
1010
1011
1012
1013
1014
1015
1016
1017
1018
1019
1020
1021
1022
1023
1024
1025
1026
1027
1028
1029
1030
1031
1032
1033
1034
1035
1036
1037
1038
1039
1040
1041
1042
1043
1044
1045
1046
1047
1048
1049
1050
1051
1052
1053
1054
1055
1056
1057
1058
1059
1060
1061
1062
1063
1064
1065
1066
1067
1068
1069
1070
1071
1072
1073
1074
1075
# File 'lib/pdf/reader/encoding.rb', line 842

def to_utf8(str, tounicode = nil)
  # mapping to unicode taken from:
  #   http://unicode.org/Public/MAPPINGS/VENDORS/ADOBE/zdingbat.txt
  array_symbol = str.unpack('C*')
  array_symbol = self.process_differences(array_symbol)
  array_enc = []
  array_symbol.each do |num|
    if tounicode && (code = tounicode.decode(num))
      array_enc << code
    elsif tounicode
      array_enc << PDF::Reader::Encoding::UNKNOWN_CHAR
    else
      case num
      when 0x21; array_enc << 0x2701
      when 0x22; array_enc << 0x2702
      when 0x23; array_enc << 0x2703
      when 0x24; array_enc << 0x2704
      when 0x25; array_enc << 0x260E
      when 0x26; array_enc << 0x2706
      when 0x27; array_enc << 0x2707
      when 0x28; array_enc << 0x2708
      when 0x29; array_enc << 0x2709
      when 0x2A; array_enc << 0x261B
      when 0x2B; array_enc << 0x261E
      when 0x2C; array_enc << 0x270C
      when 0x2D; array_enc << 0x270D
      when 0x2E; array_enc << 0x270E
      when 0x2F; array_enc << 0x270F
      when 0x30; array_enc << 0x2710
      when 0x31; array_enc << 0x2711
      when 0x32; array_enc << 0x2712
      when 0x33; array_enc << 0x2713
      when 0x34; array_enc << 0x2714
      when 0x35; array_enc << 0x2715
      when 0x36; array_enc << 0x2716
      when 0x37; array_enc << 0x2717
      when 0x38; array_enc << 0x2718
      when 0x39; array_enc << 0x2719
      when 0x3A; array_enc << 0x271A
      when 0x3B; array_enc << 0x271B
      when 0x3C; array_enc << 0x271C
      when 0x3D; array_enc << 0x271D
      when 0x3E; array_enc << 0x271E
      when 0x3F; array_enc << 0x271E
      when 0x40; array_enc << 0x2720
      when 0x41; array_enc << 0x2721
      when 0x42; array_enc << 0x2722
      when 0x43; array_enc << 0x2723
      when 0x44; array_enc << 0x2724
      when 0x45; array_enc << 0x2725
      when 0x46; array_enc << 0x2726
      when 0x47; array_enc << 0x2727
      when 0x48; array_enc << 0x2605
      when 0x49; array_enc << 0x2729
      when 0x4A; array_enc << 0x272A
      when 0x4B; array_enc << 0x272B
      when 0x4C; array_enc << 0x272C
      when 0x4D; array_enc << 0x272D
      when 0x4E; array_enc << 0x272E
      when 0x4F; array_enc << 0x272F
      when 0x50; array_enc << 0x2730
      when 0x51; array_enc << 0x2731
      when 0x52; array_enc << 0x2732
      when 0x53; array_enc << 0x2733
      when 0x54; array_enc << 0x2734
      when 0x55; array_enc << 0x2735
      when 0x56; array_enc << 0x2736
      when 0x57; array_enc << 0x2737
      when 0x58; array_enc << 0x2738
      when 0x59; array_enc << 0x2739
      when 0x5A; array_enc << 0x273A
      when 0x5B; array_enc << 0x273B
      when 0x5C; array_enc << 0x273C
      when 0x5D; array_enc << 0x273D
      when 0x5E; array_enc << 0x273E
      when 0x5F; array_enc << 0x273F
      when 0x60; array_enc << 0x2740
      when 0x61; array_enc << 0x2741
      when 0x62; array_enc << 0x2742
      when 0x63; array_enc << 0x2743
      when 0x64; array_enc << 0x2744
      when 0x65; array_enc << 0x2745
      when 0x66; array_enc << 0x2746
      when 0x67; array_enc << 0x2747
      when 0x68; array_enc << 0x2748
      when 0x69; array_enc << 0x2749
      when 0x6A; array_enc << 0x274A
      when 0x6B; array_enc << 0x274B
      when 0x6C; array_enc << 0x25CF
      when 0x6D; array_enc << 0x274D
      when 0x6E; array_enc << 0x25A0
      when 0x6F; array_enc << 0x274F
      when 0x70; array_enc << 0x2750
      when 0x71; array_enc << 0x2751
      when 0x72; array_enc << 0x2752
      when 0x73; array_enc << 0x2753
      when 0x74; array_enc << 0x2754
      when 0x75; array_enc << 0x2755
      when 0x76; array_enc << 0x2756
      when 0x77; array_enc << 0x2757
      when 0x78; array_enc << 0x2758
      when 0x79; array_enc << 0x2759
      when 0x7A; array_enc << 0x275A
      when 0x7B; array_enc << 0x275B
      when 0x7C; array_enc << 0x275C
      when 0x7D; array_enc << 0x275D
      when 0x7E; array_enc << 0x275E
      when 0x80; array_enc << 0xF8D7
      when 0x81; array_enc << 0xF8D8
      when 0x82; array_enc << 0xF8D9
      when 0x83; array_enc << 0xF8DA
      when 0x84; array_enc << 0xF8DB
      when 0x85; array_enc << 0xF8DC
      when 0x86; array_enc << 0xF8DD
      when 0x87; array_enc << 0xF8DE
      when 0x88; array_enc << 0xF8DF
      when 0x89; array_enc << 0xF8E0
      when 0x8A; array_enc << 0xF8E1
      when 0x8B; array_enc << 0xF8E2
      when 0x8C; array_enc << 0xF8E3
      when 0x8D; array_enc << 0xF8E4
      when 0xA1; array_enc << 0x2761
      when 0xA2; array_enc << 0x2762
      when 0xA3; array_enc << 0x2763
      when 0xA4; array_enc << 0x2764
      when 0xA5; array_enc << 0x2765
      when 0xA6; array_enc << 0x2766
      when 0xA7; array_enc << 0x2767
      when 0xA8; array_enc << 0x2663
      when 0xA9; array_enc << 0x2666
      when 0xAA; array_enc << 0x2665
      when 0xAB; array_enc << 0x2660
      when 0xAC; array_enc << 0x2460
      when 0xAD; array_enc << 0x2461
      when 0xAE; array_enc << 0x2462
      when 0xAF; array_enc << 0x2463
      when 0xB0; array_enc << 0x2464
      when 0xB1; array_enc << 0x2465
      when 0xB2; array_enc << 0x2466
      when 0xB3; array_enc << 0x2467
      when 0xB4; array_enc << 0x2468
      when 0xB5; array_enc << 0x2469
      when 0xB6; array_enc << 0x2776
      when 0xB7; array_enc << 0x2777
      when 0xB8; array_enc << 0x2778
      when 0xB9; array_enc << 0x2779
      when 0xBA; array_enc << 0x277A
      when 0xBB; array_enc << 0x277B
      when 0xBC; array_enc << 0x277C
      when 0xBD; array_enc << 0x277D
      when 0xBE; array_enc << 0x277E
      when 0xBF; array_enc << 0x277F
      when 0xC0; array_enc << 0x2780
      when 0xC1; array_enc << 0x2781
      when 0xC2; array_enc << 0x2782
      when 0xC3; array_enc << 0x2783
      when 0xC4; array_enc << 0x2784
      when 0xC5; array_enc << 0x2785
      when 0xC6; array_enc << 0x2786
      when 0xC7; array_enc << 0x2787
      when 0xC8; array_enc << 0x2788
      when 0xC9; array_enc << 0x2789
      when 0xCA; array_enc << 0x278A
      when 0xCB; array_enc << 0x278B
      when 0xCC; array_enc << 0x278C
      when 0xCD; array_enc << 0x278D
      when 0xCE; array_enc << 0x278E
      when 0xCF; array_enc << 0x278F
      when 0xD0; array_enc << 0x2790
      when 0xD1; array_enc << 0x2791
      when 0xD2; array_enc << 0x2792
      when 0xD3; array_enc << 0x2793
      when 0xD4; array_enc << 0x2794
      when 0xD5; array_enc << 0x2795
      when 0xD6; array_enc << 0x2796
      when 0xD7; array_enc << 0x2797
      when 0xD8; array_enc << 0x2798
      when 0xD9; array_enc << 0x2799
      when 0xDA; array_enc << 0x279A
      when 0xDB; array_enc << 0x279B
      when 0xDC; array_enc << 0x279C
      when 0xDD; array_enc << 0x279D
      when 0xDE; array_enc << 0x279E
      when 0xDF; array_enc << 0x279F
      when 0xE0; array_enc << 0x27A0
      when 0xE1; array_enc << 0x27A1
      when 0xE2; array_enc << 0x27A2
      when 0xE3; array_enc << 0x27A3
      when 0xE4; array_enc << 0x27A4
      when 0xE5; array_enc << 0x27A5
      when 0xE6; array_enc << 0x27A6
      when 0xE7; array_enc << 0x27A7
      when 0xE8; array_enc << 0x27A8
      when 0xE9; array_enc << 0x27A9
      when 0xEA; array_enc << 0x27AA
      when 0xEB; array_enc << 0x27AB
      when 0xEC; array_enc << 0x27AC
      when 0xED; array_enc << 0x27AD
      when 0xEE; array_enc << 0x27AE
      when 0xEF; array_enc << 0x27AF
      when 0xF1; array_enc << 0x27B1
      when 0xF2; array_enc << 0x27B2
      when 0xF3; array_enc << 0x27B3
      when 0xF4; array_enc << 0x27B4
      when 0xF5; array_enc << 0x27B5
      when 0xF6; array_enc << 0x27B6
      when 0xF7; array_enc << 0x27B7
      when 0xF8; array_enc << 0x27B8
      when 0xF9; array_enc << 0x27B9
      when 0xFA; array_enc << 0x27BA
      when 0xFB; array_enc << 0x27BB
      when 0xFC; array_enc << 0x27BC
      when 0xFD; array_enc << 0x27BD
      when 0xFE; array_enc << 0x27BE
      else
        array_enc << num
      end
    end
  end

  # convert any glyph names to unicode codepoints
  array_enc = self.process_glyphnames(array_enc)

  # replace charcters that didn't convert to unicode nicely with something valid
  array_enc.collect! { |c| c ? c : PDF::Reader::Encoding::UNKNOWN_CHAR }

  # pack all our Unicode codepoints into a UTF-8 string
  ret = array_enc.pack("U*")

  # set the strings encoding correctly under ruby 1.9+
  ret.force_encoding("UTF-8") if ret.respond_to?(:force_encoding)

  return ret
end