I18N.pm.svn-base
上传用户:market2
上传日期:2018-11-18
资源大小:18786k
文件大小:4k
源码类别:

外挂编程

开发平台:

Windows_Unix

  1. #########################################################################
  2. #  OpenKore - Ragnarok Online Assistent
  3. #
  4. #  This software is open source, licensed under the GNU General Public
  5. #  License, version 2.
  6. #  Basically, this means that you're allowed to modify and distribute
  7. #  this software. However, if you distribute modified versions, you MUST
  8. #  also distribute the source code.
  9. #  See http://www.gnu.org/licenses/gpl.html for the full license.
  10. #
  11. #  $Revision$
  12. #  $Id$
  13. #
  14. #########################################################################
  15. ##
  16. # MODULE DESCRIPTION: Internationalization support
  17. #
  18. # This module provides functions for internationalization support
  19. # (conversion between character sets).
  20. package I18N;
  21. use strict;
  22. use Globals qw(%config);
  23. use Exporter;
  24. use base qw(Exporter);
  25. use Encode;
  26. use Encode::Alias;
  27. our @EXPORT_OK = qw(bytesToString stringToBytes stringToUTF8 UTF8ToString isUTF8);
  28. define_alias('Western'             => 'CP1252');
  29. define_alias('Tagalog'             => 'CP1252');
  30. define_alias('Simplified Chinese'  => 'GBK');
  31. define_alias('Traditional Chinese' => 'Big5');
  32. define_alias('Korean'              => 'CP949');
  33. define_alias('Russian'             => 'CP1251');
  34. define_alias('Cyrillic'            => 'CP1251');
  35. define_alias('Japanese'            => 'Shift_JIS');
  36. define_alias('Thai'                => 'CP874');
  37. ##
  38. # String I18N::bytesToString(Bytes data)
  39. # data: The data to convert.
  40. # Returns: $data converted to a String.
  41. # Requires:
  42. #     defined($data)
  43. #     $config{serverEncoding} must be a correct encoding name, or empty.
  44. # Ensures:
  45. #     defined(result)
  46. #     I18N::isUTF8(result)
  47. #
  48. # Convert a human-readable message (sent by the RO server) into a String.
  49. # This function uses $config{serverEncoding} to determine the encoding.
  50. #
  51. # This function should only be used for strings sent by the RO server.
  52. #
  53. # This symbol is exportable.
  54. sub bytesToString {
  55. return Encode::decode($config{serverEncoding} || 'Western', $_[0]);
  56. }
  57. ##
  58. # Bytes I18N::stringToBytes(String str)
  59. # str: The string to convert.
  60. # Requires:
  61. #     defined($str)
  62. #     $config{serverEncoding} must be a correct encoding name, or empty.
  63. # Ensures: defined(result)
  64. #
  65. # Convert a String into a text encoding used by the RO server.
  66. # This function should be used before sending a string to the RO server.
  67. #
  68. # This symbol is exportable.
  69. sub stringToBytes {
  70. return Encode::encode($config{serverEncoding} || 'Western', $_[0]);
  71. }
  72. ##
  73. # UtfBytes I18N::stringToUTF8(String str)
  74. # Requires: defined($str)
  75. # Ensures:
  76. #     defined(result)
  77. #     I18N::isUTF8(result)
  78. #
  79. # Convert a String into UTF-8 data.
  80. #
  81. # This symbol is exportable.
  82. sub stringToUTF8 {
  83. return Encode::encode("UTF-8", $_[0]);
  84. }
  85. ##
  86. # String I18N::UTF8ToString(Utf8Bytes data)
  87. # Requires: defined($data) && I18N::isUTF8($data)
  88. # Ensures:
  89. #     defined(result)
  90. #     I18N::isUTF8(result)
  91. #
  92. # Convert UTF-8 data into a String.
  93. #
  94. # This symbol is exportable.
  95. sub UTF8ToString {
  96. return Encode::decode("UTF-8", $_[0]);
  97. }
  98. ##
  99. # boolean I18N::isUTF8(str)
  100. # str: A binary string containing UTF-8 data, or a UTF-8 character string.
  101. # Requires: defined($str)
  102. #
  103. # Checks whether $str is a valid UTF-8 string.
  104. #
  105. # This symbol is exportable.
  106. sub isUTF8 {
  107. use bytes;
  108. return $_[0] =~
  109.   m/^(
  110.      [x09x0Ax0Dx20-x7E]            # ASCII
  111.    | [xC2-xDF][x80-xBF]             # non-overlong 2-byte
  112.    |  xE0[xA0-xBF][x80-xBF]        # excluding overlongs
  113.    | [xE1-xECxEExEF][x80-xBF]{2}  # straight 3-byte
  114.    |  xED[x80-x9F][x80-xBF]        # excluding surrogates
  115.    |  xF0[x90-xBF][x80-xBF]{2}     # planes 1-3
  116.    | [xF1-xF3][x80-xBF]{3}          # planes 4-15
  117.    |  xF4[x80-x8F][x80-xBF]{2}     # plane 16
  118.   )*$/x;
  119. }
  120. 1;