Advertisement
Guest User

Untitled

a guest
Feb 19th, 2017
72
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 5.77 KB | None | 0 0
  1. class RightToLeft : CovalencePlugin
  2. {
  3. #region Chat Formatting
  4.  
  5. object OnUserChat(IPlayer player, string message)
  6. {
  7. if (!IsRightToLeft(message)) return null;
  8.  
  9. var color = player.IsAdmin ? "#aaff55" : "#55aaff";
  10. message = covalence.FormatText($"[{color}]{player.Name}[/#]") + ": " + RtlText(message);
  11.  
  12. ConsoleNetwork.BroadcastToAllClients("chat.add", player.Id, message);
  13.  
  14. server.Broadcast(message);
  15.  
  16. return true;
  17. }
  18.  
  19. #endregion
  20.  
  21. #region Helpers
  22.  
  23. string RtlText(string text)
  24. {
  25. var characters = text.ToCharArray();
  26. Array.Reverse(characters);
  27. string reversed = null;
  28. for (var i = 0; i <= characters.Length - 1; i++) reversed += characters.GetValue(i);
  29. return IsArabic(text) ? reversed.Trim(' ') : reversed;
  30. }
  31.  
  32. static bool IsArabic(string text)
  33. {
  34. var glyphs = text.ToCharArray();
  35. foreach (var glyph in glyphs)
  36. {
  37. if (glyph >= 0x600 && glyph <= 0x6ff) return true;
  38. if (glyph >= 0x750 && glyph <= 0x77f) return true;
  39. if (glyph >= 0xfb50 && glyph <= 0xfc3f) return true;
  40. if (glyph >= 0xfe70 && glyph <= 0xfefc) return true;
  41. }
  42. return false;
  43. }
  44.  
  45. #region RTL Check
  46.  
  47. bool IsRightToLeft(string text)
  48. {
  49. foreach (var c in text)
  50. {
  51. if (c >= 0x5BE && c <= 0x10B7F)
  52. {
  53. if (c <= 0x85E)
  54. {
  55. if (c == 0x5BE) return true;
  56. else if (c == 0x5C0) return true;
  57. else if (c == 0x5C3) return true;
  58. else if (c == 0x5C6) return true;
  59. else if (0x5D0 <= c && c <= 0x5EA) return true;
  60. else if (0x5F0 <= c && c <= 0x5F4) return true;
  61. else if (c == 0x608) return true;
  62. else if (c == 0x60B) return true;
  63. else if (c == 0x60D) return true;
  64. else if (c == 0x61B) return true;
  65. else if (0x61E <= c && c <= 0x64A) return true;
  66. else if (0x66D <= c && c <= 0x66F) return true;
  67. else if (0x671 <= c && c <= 0x6D5) return true;
  68. else if (0x6E5 <= c && c <= 0x6E6) return true;
  69. else if (0x6EE <= c && c <= 0x6EF) return true;
  70. else if (0x6FA <= c && c <= 0x70D) return true;
  71. else if (c == 0x710) return true;
  72. else if (0x712 <= c && c <= 0x72F) return true;
  73. else if (0x74D <= c && c <= 0x7A5) return true;
  74. else if (c == 0x7B1) return true;
  75. else if (0x7C0 <= c && c <= 0x7EA) return true;
  76. else if (0x7F4 <= c && c <= 0x7F5) return true;
  77. else if (c == 0x7FA) return true;
  78. else if (0x800 <= c && c <= 0x815) return true;
  79. else if (c == 0x81A) return true;
  80. else if (c == 0x824) return true;
  81. else if (c == 0x828) return true;
  82. else if (0x830 <= c && c <= 0x83E) return true;
  83. else if (0x840 <= c && c <= 0x858) return true;
  84. else if (c == 0x85E) return true;
  85. }
  86. else if (c == 0x200F) return true;
  87. else if (c >= 0xFB1D)
  88. {
  89. if (c == 0xFB1D) return true;
  90. else if (0xFB1F <= c && c <= 0xFB28) return true;
  91. else if (0xFB2A <= c && c <= 0xFB36) return true;
  92. else if (0xFB38 <= c && c <= 0xFB3C) return true;
  93. else if (c == 0xFB3E) return true;
  94. else if (0xFB40 <= c && c <= 0xFB41) return true;
  95. else if (0xFB43 <= c && c <= 0xFB44) return true;
  96. else if (0xFB46 <= c && c <= 0xFBC1) return true;
  97. else if (0xFBD3 <= c && c <= 0xFD3D) return true;
  98. else if (0xFD50 <= c && c <= 0xFD8F) return true;
  99. else if (0xFD92 <= c && c <= 0xFDC7) return true;
  100. else if (0xFDF0 <= c && c <= 0xFDFC) return true;
  101. else if (0xFE70 <= c && c <= 0xFE74) return true;
  102. else if (0xFE76 <= c && c <= 0xFEFC) return true;
  103. else if (0x10800 <= c && c <= 0x10805) return true;
  104. else if (c == 0x10808) return true;
  105. else if (0x1080A <= c && c <= 0x10835) return true;
  106. else if (0x10837 <= c && c <= 0x10838) return true;
  107. else if (c == 0x1083C) return true;
  108. else if (0x1083F <= c && c <= 0x10855) return true;
  109. else if (0x10857 <= c && c <= 0x1085F) return true;
  110. else if (0x10900 <= c && c <= 0x1091B) return true;
  111. else if (0x10920 <= c && c <= 0x10939) return true;
  112. else if (c == 0x1093F) return true;
  113. else if (c == 0x10A00) return true;
  114. else if (0x10A10 <= c && c <= 0x10A13) return true;
  115. else if (0x10A15 <= c && c <= 0x10A17) return true;
  116. else if (0x10A19 <= c && c <= 0x10A33) return true;
  117. else if (0x10A40 <= c && c <= 0x10A47) return true;
  118. else if (0x10A50 <= c && c <= 0x10A58) return true;
  119. else if (0x10A60 <= c && c <= 0x10A7F) return true;
  120. else if (0x10B00 <= c && c <= 0x10B35) return true;
  121. else if (0x10B40 <= c && c <= 0x10B55) return true;
  122. else if (0x10B58 <= c && c <= 0x10B72) return true;
  123. else if (0x10B78 <= c && c <= 0x10B7F) return true;
  124. }
  125. }
  126. }
  127. return false;
  128. }
  129.  
  130. #endregion
  131.  
  132. #endregion
  133. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement