passbolt-browser-extension 3.0.6 → 4.6.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (1168) hide show
  1. package/.eslintrc.json +34 -18
  2. package/.github/workflows/release.yaml +17 -0
  3. package/.github/workflows/release_candidate.yaml +17 -0
  4. package/.gitlab-ci/jobs/build.yml +42 -0
  5. package/.gitlab-ci/jobs/publish.yml +38 -0
  6. package/.gitlab-ci/jobs/release.yml +21 -0
  7. package/.gitlab-ci/jobs/review.yml +25 -0
  8. package/.gitlab-ci/jobs/test.yml +32 -0
  9. package/.gitlab-ci/scripts/bin/publish.sh +63 -0
  10. package/.gitlab-ci/scripts/bin/review.sh +52 -0
  11. package/.gitlab-ci/scripts/bin/slack-status-messages.sh +33 -0
  12. package/.gitlab-ci/scripts/lib/git-helpers.sh +29 -0
  13. package/.gitlab-ci/scripts/lib/set-env.sh +25 -0
  14. package/.gitlab-ci/scripts/lib/version-check.sh +25 -0
  15. package/.gitlab-ci.yml +15 -16
  16. package/.jpmignore +5 -1
  17. package/CHANGELOG.md +993 -6
  18. package/Gruntfile.js +239 -149
  19. package/README.md +18 -1
  20. package/RELEASE_NOTES.md +23 -0
  21. package/crowdin.yml +21 -0
  22. package/i18next-parser.config.js +22 -0
  23. package/jest.config.json +29 -0
  24. package/package.json +95 -55
  25. package/src/all/_locales/de/messages.json +10 -0
  26. package/src/all/_locales/en/messages.json +10 -0
  27. package/src/all/_locales/es/messages.json +10 -0
  28. package/src/all/_locales/fr/messages.json +10 -0
  29. package/src/all/_locales/it/messages.json +10 -0
  30. package/src/all/_locales/ja/messages.json +10 -0
  31. package/src/all/_locales/ko/messages.json +10 -0
  32. package/src/all/_locales/locales.test.js +43 -0
  33. package/src/all/_locales/lt/messages.json +10 -0
  34. package/src/all/_locales/nl/messages.json +10 -0
  35. package/src/all/_locales/pl/messages.json +10 -0
  36. package/src/all/_locales/pt/messages.json +10 -0
  37. package/src/all/_locales/ro/messages.json +10 -0
  38. package/src/all/_locales/ru/messages.json +10 -0
  39. package/src/all/_locales/sv/messages.json +10 -0
  40. package/src/all/background_page/controller/InformMenuController/InformMenuController.js +147 -0
  41. package/src/all/background_page/controller/account/getAccountController.js +55 -0
  42. package/src/all/background_page/controller/account/getAccountController.test.js +91 -0
  43. package/src/all/background_page/controller/account/getAndInitializeAccountLocaleController.js +70 -0
  44. package/src/all/background_page/controller/account/getAndInitializeAccountLocaleController.test.js +75 -0
  45. package/src/all/background_page/controller/account/updatePrivateKeyController.js +127 -0
  46. package/src/all/background_page/controller/account/updatePrivateKeyController.test.js +317 -0
  47. package/src/all/background_page/controller/account/verifyAccountPassphraseController.js +68 -0
  48. package/src/all/background_page/controller/account/verifyAccountPassphraseController.test.js +59 -0
  49. package/src/all/background_page/controller/accountRecovery/abortAndInitiateNewAccountRecoveryController.js +61 -0
  50. package/src/all/background_page/controller/accountRecovery/abortAndInitiateNewAccountRecoveryControllerr.test.js +46 -0
  51. package/src/all/background_page/controller/accountRecovery/accountRecoveryGenerateOrganizationKeyController.js +73 -0
  52. package/src/all/background_page/controller/accountRecovery/accountRecoveryGenerateOrganizationKeyController.test.js +48 -0
  53. package/src/all/background_page/controller/accountRecovery/accountRecoveryGetRequestController.js +69 -0
  54. package/src/all/background_page/controller/accountRecovery/accountRecoveryGetRequestController.test.js +57 -0
  55. package/src/all/background_page/controller/accountRecovery/accountRecoveryGetUserRequestsController.js +64 -0
  56. package/src/all/background_page/controller/accountRecovery/accountRecoveryGetUserRequestsController.test.js +78 -0
  57. package/src/all/background_page/controller/accountRecovery/accountRecoverySaveOrganizationPolicyController.js +210 -0
  58. package/src/all/background_page/controller/accountRecovery/accountRecoverySaveOrganizationPolicyController.test.js +304 -0
  59. package/src/all/background_page/controller/accountRecovery/accountRecoverySaveUserSettingController.js +104 -0
  60. package/src/all/background_page/controller/accountRecovery/accountRecoverySaveUserSettingController.test.js +110 -0
  61. package/src/all/background_page/controller/accountRecovery/accountRecoveryValidateOrganizationPrivateKeyController.js +64 -0
  62. package/src/all/background_page/controller/accountRecovery/accountRecoveryValidateOrganizationPrivateKeyController.test.js +113 -0
  63. package/src/all/background_page/controller/accountRecovery/accountRecoveryValidatePublicKeyController.js +53 -0
  64. package/src/all/background_page/controller/accountRecovery/accountRecoveryValidatePublicKeyController.test.js +89 -0
  65. package/src/all/background_page/controller/accountRecovery/continueAccountRecoveryController.js +68 -0
  66. package/src/all/background_page/controller/accountRecovery/continueAccountRecoveryController.test.js +66 -0
  67. package/src/all/background_page/controller/accountRecovery/getOrganizationPolicyController.js +56 -0
  68. package/src/all/background_page/controller/accountRecovery/getOrganizationPolicyController.test.js +41 -0
  69. package/src/all/background_page/controller/accountRecovery/hasUserPostponedUserSettingInvitationController.js +50 -0
  70. package/src/all/background_page/controller/accountRecovery/hasUserPostponedUserSettingInvitationController.test.js +32 -0
  71. package/src/all/background_page/controller/accountRecovery/isLostPassphraseCaseController.js +53 -0
  72. package/src/all/background_page/controller/accountRecovery/isLostPassphraseCaseController.test.js +58 -0
  73. package/src/all/background_page/controller/accountRecovery/postponeUserSettingInvitationController.js +50 -0
  74. package/src/all/background_page/controller/accountRecovery/postponeUserSettingInvitationController.test.js +28 -0
  75. package/src/all/background_page/controller/accountRecovery/recoverAccountController.js +199 -0
  76. package/src/all/background_page/controller/accountRecovery/recoverAccountController.test.js +204 -0
  77. package/src/all/background_page/controller/accountRecovery/reviewRequestController.js +236 -0
  78. package/src/all/background_page/controller/accountRecovery/reviewRequestController.test.js +306 -0
  79. package/src/all/background_page/controller/app/appInitController.js +39 -10
  80. package/src/all/background_page/controller/app/appInitController.test.js +98 -0
  81. package/src/all/background_page/controller/auth/authCheckStatusController.js +3 -4
  82. package/src/all/background_page/controller/auth/authIsAuthenticatedController.js +2 -3
  83. package/src/all/background_page/controller/auth/authIsMfaRequiredController.js +2 -4
  84. package/src/all/background_page/controller/auth/authLoginController.js +130 -0
  85. package/src/all/background_page/controller/auth/authLoginController.test.js +164 -0
  86. package/src/all/background_page/controller/auth/authLogoutController.js +62 -0
  87. package/src/all/background_page/controller/auth/authLogoutController.test.js +55 -0
  88. package/src/all/background_page/controller/auth/authVerifyServerKeyController.js +120 -0
  89. package/src/all/background_page/controller/auth/authVerifyServerKeyController.test.js +61 -0
  90. package/src/all/background_page/controller/auth/authenticationEventController.js +67 -0
  91. package/src/all/background_page/controller/auth/generateSsoKitController.js +80 -0
  92. package/src/all/background_page/controller/auth/generateSsoKitController.test.js +100 -0
  93. package/src/all/background_page/controller/auth/requestHelpCredentialsLostController.js +54 -0
  94. package/src/all/background_page/controller/auth/requestHelpCredentialsLostController.test.js +42 -0
  95. package/src/all/background_page/controller/autofill/AutofillController.js +134 -0
  96. package/src/all/background_page/controller/autofill/AutofillController.test.js +149 -0
  97. package/src/all/background_page/controller/clipboard/clipboardController.js +53 -0
  98. package/src/all/background_page/controller/clipboard/clipboardController.test.js +68 -0
  99. package/src/all/background_page/controller/comment/createCommentController.js +57 -0
  100. package/src/all/background_page/controller/comment/createCommentController.test.js +105 -0
  101. package/src/all/background_page/controller/comment/deleteCommentController.js +66 -0
  102. package/src/all/background_page/controller/comment/deleteCommentController.test.js +105 -0
  103. package/src/all/background_page/controller/comment/getCommentsByRessourceIdController.js +68 -0
  104. package/src/all/background_page/controller/comment/getCommentsByRessourceidController.test.js +99 -0
  105. package/src/all/background_page/controller/crypto/checkPassphraseController.js +61 -0
  106. package/src/all/background_page/controller/crypto/checkPassphraseController.test.js +47 -0
  107. package/src/all/background_page/controller/crypto/downloadUserPrivateKeyController.js +70 -0
  108. package/src/all/background_page/controller/crypto/downloadUserPrivateKeyController.test.js +70 -0
  109. package/src/all/background_page/controller/crypto/downloadUserPublicKeyController.js +67 -0
  110. package/src/all/background_page/controller/crypto/downloadUserPublicKeyController.test.js +64 -0
  111. package/src/all/background_page/controller/crypto/getKeyInfoController.js +63 -0
  112. package/src/all/background_page/controller/crypto/getKeyInfoController.test.js +39 -0
  113. package/src/all/background_page/controller/crypto/getUserKeyInfoController.js +71 -0
  114. package/src/all/background_page/controller/crypto/getUserKeyInfoController.test.js +61 -0
  115. package/src/all/background_page/controller/crypto/getUserPrivateKeyController.js +63 -0
  116. package/src/all/background_page/controller/crypto/getUserPrivateKeyController.test.js +64 -0
  117. package/src/all/background_page/controller/crypto/validatePrivateGpgKeyRecoverController.js +74 -0
  118. package/src/all/background_page/controller/crypto/validatePrivateGpgKeyRecoverController.test.js +70 -0
  119. package/src/all/background_page/controller/crypto/validatePrivateGpgKeySetupController.js +114 -0
  120. package/src/all/background_page/controller/crypto/validatePrivateGpgKeySetupController.test.js +142 -0
  121. package/src/all/background_page/controller/export/exportResourcesFileController.js +50 -70
  122. package/src/all/background_page/controller/exportAccount/exportDesktopAccountController.js +75 -0
  123. package/src/all/background_page/controller/exportAccount/exportDesktopAccountController.test.data.js +25 -0
  124. package/src/all/background_page/controller/exportAccount/exportDesktopAccountController.test.js +104 -0
  125. package/src/all/background_page/controller/extension/getExtensionVersionController.js +51 -0
  126. package/src/all/background_page/controller/extension/getExtensionVersionController.test.js +28 -0
  127. package/src/all/background_page/controller/extension/isExtensionFirstInstallController.js +51 -0
  128. package/src/all/background_page/controller/extension/isExtensionFirstInstallController.test.js +45 -0
  129. package/src/all/background_page/controller/extension/onExtensionInstalledController.js +107 -0
  130. package/src/all/background_page/controller/extension/onExtensionInstalledController.test.js +109 -0
  131. package/src/all/background_page/controller/extension/onExtensionUpdateAvailableController.js +56 -0
  132. package/src/all/background_page/controller/extension/onExtensionUpdateAvailableController.test.js +76 -0
  133. package/src/all/background_page/controller/folder/folderCreateController.js +24 -21
  134. package/src/all/background_page/controller/group/groupUpdateController.js +53 -43
  135. package/src/all/background_page/controller/group/groupUpdateController.test.data.js +70 -0
  136. package/src/all/background_page/controller/group/groupUpdateController.test.js +169 -0
  137. package/src/all/background_page/controller/import/importResourcesFileController.js +75 -76
  138. package/src/all/background_page/controller/informCallToActionController/informCallToActionController.js +99 -0
  139. package/src/all/background_page/controller/locale/getLocaleController.js +58 -0
  140. package/src/all/background_page/controller/mfaPolicy/hasUserPostponedUserSettingInvitationController.js +50 -0
  141. package/src/all/background_page/controller/mfaPolicy/hasUserPostponedUserSettingInvitationController.test.js +32 -0
  142. package/src/all/background_page/controller/mfaPolicy/mfaGetMfaSettingsController.js +51 -0
  143. package/src/all/background_page/controller/mfaPolicy/mfaGetMfaSettingsController.test.data.js +21 -0
  144. package/src/all/background_page/controller/mfaPolicy/mfaGetMfaSettingsController.test.js +37 -0
  145. package/src/all/background_page/controller/mfaPolicy/mfaGetPolicyController.js +51 -0
  146. package/src/all/background_page/controller/mfaPolicy/mfaGetPolicyController.test.js +38 -0
  147. package/src/all/background_page/controller/mfaPolicy/postponeUserSettingMfaInvitationController.js +49 -0
  148. package/src/all/background_page/controller/mfaPolicy/postponeUserSettingMfaInvitationController.test.js +28 -0
  149. package/src/all/background_page/controller/mfaSetup/MfaSetupGetTotpCodeController.js +54 -0
  150. package/src/all/background_page/controller/mfaSetup/MfaSetupGetTotpCodeController.test.js +44 -0
  151. package/src/all/background_page/controller/mfaSetup/MfaSetupRemoveProviderController.js +58 -0
  152. package/src/all/background_page/controller/mfaSetup/MfaSetupRemoveProviderController.test.js +56 -0
  153. package/src/all/background_page/controller/mfaSetup/MfaSetupVerifyOtpCodeController.js +56 -0
  154. package/src/all/background_page/controller/mfaSetup/MfaSetupVerifyOtpCodeController.test.js +57 -0
  155. package/src/all/background_page/controller/mfaSetup/MfaSetupVerifyProviderController.js +58 -0
  156. package/src/all/background_page/controller/mfaSetup/MfaSetupVerifyProviderController.test.js +59 -0
  157. package/src/all/background_page/controller/mfaSetup/MfaSetupVerifyTotpCodeController.js +56 -0
  158. package/src/all/background_page/controller/mfaSetup/MfaSetupVerifyTotpCodeController.test.js +57 -0
  159. package/src/all/background_page/controller/mfaSetup/MfaSetupVerifyYubikeyCodeController.js +59 -0
  160. package/src/all/background_page/controller/mfaSetup/MfaSetupVerifyYubikeyCodeController.test.js +56 -0
  161. package/src/all/background_page/controller/move/moveController.js +17 -15
  162. package/src/all/background_page/controller/move/moveFolderController.js +80 -71
  163. package/src/all/background_page/controller/move/moveResourcesController.js +83 -62
  164. package/src/all/background_page/controller/move/moveResourcesController.test.js +117 -0
  165. package/src/all/background_page/controller/organizationSettings/getOrganizationSettingsController.js +55 -0
  166. package/src/all/background_page/controller/organizationSettings/getOrganizationSettingsController.test.js +45 -0
  167. package/src/all/background_page/controller/passwordExpiry/deletePasswordExpirySettingsController.js +55 -0
  168. package/src/all/background_page/controller/passwordExpiry/deletePasswordExpirySettingsController.test.js +66 -0
  169. package/src/all/background_page/controller/passwordExpiry/getOrFindPasswordExpirySettingsController.js +56 -0
  170. package/src/all/background_page/controller/passwordExpiry/getOrFindPasswordExpirySettingsController.test.js +113 -0
  171. package/src/all/background_page/controller/passwordExpiry/savePasswordExpirySettingsController.js +62 -0
  172. package/src/all/background_page/controller/passwordExpiry/savePasswordExpirySettingsController.test.js +108 -0
  173. package/src/all/background_page/controller/passwordPolicies/findPasswordPoliciesController.js +58 -0
  174. package/src/all/background_page/controller/passwordPolicies/findPasswordPoliciesController.test.js +90 -0
  175. package/src/all/background_page/controller/passwordPolicies/getOrFindPasswordPoliciesController.js +88 -0
  176. package/src/all/background_page/controller/passwordPolicies/getOrFindPasswordPoliciesController.test.js +177 -0
  177. package/src/all/background_page/controller/passwordPolicies/savePasswordPoliciesController.js +54 -0
  178. package/src/all/background_page/controller/passwordPolicies/savePasswordPoliciesController.test.js +87 -0
  179. package/src/all/background_page/controller/port/generatePortIdController.js +91 -0
  180. package/src/all/background_page/controller/port/generatePortIdController.test.js +123 -0
  181. package/src/all/background_page/controller/port/removePortController.js +105 -0
  182. package/src/all/background_page/controller/port/removePortController.test.js +162 -0
  183. package/src/all/background_page/controller/publicWebsiteSignIn/publicWebsiteSignInController.js +50 -0
  184. package/src/all/background_page/controller/publicWebsiteSignIn/publicWebsiteSignInController.test.js +45 -0
  185. package/src/all/background_page/controller/rbac/findMeController.js +55 -0
  186. package/src/all/background_page/controller/rbac/findMeController.test.js +49 -0
  187. package/src/all/background_page/controller/recover/abortAndRequestHelpController.js +55 -0
  188. package/src/all/background_page/controller/recover/abortAndRequestHelpController.test.js +42 -0
  189. package/src/all/background_page/controller/recover/completeRecoverController.js +64 -0
  190. package/src/all/background_page/controller/recover/completeRecoverController.test.js +77 -0
  191. package/src/all/background_page/controller/recover/generateRecoverAccountRecoveryRequestKeyController.js +74 -0
  192. package/src/all/background_page/controller/recover/generateRecoverAccountRecoveryRequestKeyController.test.js +52 -0
  193. package/src/all/background_page/controller/recover/hasRecoverUserEnabledAccountRecoveryController.js +51 -0
  194. package/src/all/background_page/controller/recover/hasRecoverUserEnabledAccountRecoveryController.test.js +42 -0
  195. package/src/all/background_page/controller/recover/importRecoverPrivateKeyController.js +86 -0
  196. package/src/all/background_page/controller/recover/importRecoverPrivateKeyController.test.js +148 -0
  197. package/src/all/background_page/controller/recover/requestAccountRecoveryController.js +74 -0
  198. package/src/all/background_page/controller/recover/requestAccountRecoveryController.test.js +66 -0
  199. package/src/all/background_page/controller/recover/startRecoverController.js +114 -0
  200. package/src/all/background_page/controller/recover/startRecoverController.test.js +137 -0
  201. package/src/all/background_page/controller/rememberMe/getUserRememberMeLatestChoiceController.js +55 -0
  202. package/src/all/background_page/controller/rememberMe/getUserRememberMeLatestChoiceController.test.js +50 -0
  203. package/src/all/background_page/controller/resource/resourceCreateController.js +53 -47
  204. package/src/all/background_page/controller/resource/resourceUpdateController.js +44 -39
  205. package/src/all/background_page/controller/resource/setResourcesExpiryDateController.js +74 -0
  206. package/src/all/background_page/controller/resource/setResourcesExpiryDateController.test.js +94 -0
  207. package/src/all/background_page/controller/resourceGridSetting/getResourceGridUserSettingController.js +53 -0
  208. package/src/all/background_page/controller/resourceGridSetting/getResourceGridUserSettingController.test.js +60 -0
  209. package/src/all/background_page/controller/resourceGridSetting/setResourceGridUserSettingController.js +56 -0
  210. package/src/all/background_page/controller/resourceGridSetting/setResourceGridUserSettingController.test.js +51 -0
  211. package/src/all/background_page/controller/secret/pownedPasswordController.js +54 -0
  212. package/src/all/background_page/controller/secret/pownedPasswordController.test.js +61 -0
  213. package/src/all/background_page/controller/secret/secretDecryptController.js +39 -46
  214. package/src/all/background_page/controller/secret/secretDecryptController.test.js +180 -0
  215. package/src/all/background_page/controller/setup/completeSetupController.js +63 -0
  216. package/src/all/background_page/controller/setup/completeSetupController.test.js +77 -0
  217. package/src/all/background_page/controller/setup/downloadRecoverKitController.js +59 -0
  218. package/src/all/background_page/controller/setup/downloadRecoverKitController.test.js +57 -0
  219. package/src/all/background_page/controller/setup/generateSetupKeyPairController.js +93 -0
  220. package/src/all/background_page/controller/setup/generateSetupKeyPairController.test.js +98 -0
  221. package/src/all/background_page/controller/setup/getAccountRecoveryOrganizationPolicyController.js +51 -0
  222. package/src/all/background_page/controller/setup/getAccountRecoveryOrganizationPolicyController.test.js +41 -0
  223. package/src/all/background_page/controller/setup/getAndInitSetupLocaleController.js +76 -0
  224. package/src/all/background_page/controller/setup/getAndInitSetupLocaleController.test.js +107 -0
  225. package/src/all/background_page/controller/setup/getUserPassphrasePoliciesController.js +54 -0
  226. package/src/all/background_page/controller/setup/getUserPassphrasePoliciesController.test.js +40 -0
  227. package/src/all/background_page/controller/setup/importSetupPrivateKeyController.js +94 -0
  228. package/src/all/background_page/controller/setup/importSetupPrivateKeyController.test.js +153 -0
  229. package/src/all/background_page/controller/setup/setSetupAccountRecoveryUserSettingController.js +98 -0
  230. package/src/all/background_page/controller/setup/setSetupAccountRecoveryUserSettingController.test.js +71 -0
  231. package/src/all/background_page/controller/setup/setSetupLocaleController.js +63 -0
  232. package/src/all/background_page/controller/setup/setSetupLocaleController.test.js +57 -0
  233. package/src/all/background_page/controller/setup/setSetupSecurityTokenController.js +55 -0
  234. package/src/all/background_page/controller/setup/setSetupSecurityTokenController.test.js +32 -0
  235. package/src/all/background_page/controller/setup/signInSetupController.js +85 -0
  236. package/src/all/background_page/controller/setup/signInSetupController.test.js +104 -0
  237. package/src/all/background_page/controller/setup/startSetupController.js +120 -0
  238. package/src/all/background_page/controller/setup/startSetupController.test.js +168 -0
  239. package/src/all/background_page/controller/setup/verifyImportedKeyPassphraseController.js +72 -0
  240. package/src/all/background_page/controller/setup/verifyImportedKeyPassphraseController.test.js +63 -0
  241. package/src/all/background_page/controller/share/shareFoldersController.js +62 -53
  242. package/src/all/background_page/controller/share/shareFoldersController.test.data.js +113 -0
  243. package/src/all/background_page/controller/share/shareFoldersController.test.js +242 -0
  244. package/src/all/background_page/controller/share/shareResourcesController.js +32 -32
  245. package/src/all/background_page/controller/share/shareResourcesController.test.data.js +129 -0
  246. package/src/all/background_page/controller/share/shareResourcesController.test.js +255 -0
  247. package/src/all/background_page/controller/sso/activateSsoSettingsController.js +61 -0
  248. package/src/all/background_page/controller/sso/activateSsoSettingsController.test.js +72 -0
  249. package/src/all/background_page/controller/sso/deleteLocalSsoKitController.js +52 -0
  250. package/src/all/background_page/controller/sso/deleteLocalSsoKitController.test.js +29 -0
  251. package/src/all/background_page/controller/sso/deleteSsoSettingsController.js +59 -0
  252. package/src/all/background_page/controller/sso/deleteSsoSettingsController.test.js +52 -0
  253. package/src/all/background_page/controller/sso/getCurrentSsoSettingsController.js +56 -0
  254. package/src/all/background_page/controller/sso/getCurrentSsoSettingsController.test.data.js +51 -0
  255. package/src/all/background_page/controller/sso/getCurrentSsoSettingsController.test.js +38 -0
  256. package/src/all/background_page/controller/sso/getLocalSsoProviderConfiguredController.js +62 -0
  257. package/src/all/background_page/controller/sso/getLocalSsoProviderConfiguredController.test.js +51 -0
  258. package/src/all/background_page/controller/sso/getQualifiedSsoLoginErrorController.js +56 -0
  259. package/src/all/background_page/controller/sso/getQualifiedSsoLoginErrorController.test.js +75 -0
  260. package/src/all/background_page/controller/sso/hasSsoLoginErrorController.js +53 -0
  261. package/src/all/background_page/controller/sso/hasSsoLoginErrorController.test.js +46 -0
  262. package/src/all/background_page/controller/sso/saveSsoSettingsAsDraftController.js +58 -0
  263. package/src/all/background_page/controller/sso/saveSsoSettingsAsDraftController.test.data.js +35 -0
  264. package/src/all/background_page/controller/sso/saveSsoSettingsAsDraftController.test.js +67 -0
  265. package/src/all/background_page/controller/sso/ssoAuthenticationController.js +159 -0
  266. package/src/all/background_page/controller/sso/ssoAuthenticationController.test.js +342 -0
  267. package/src/all/background_page/controller/sso/testSsoAuthenticationController.js +72 -0
  268. package/src/all/background_page/controller/sso/testSsoAuthenticationController.test.js +109 -0
  269. package/src/all/background_page/controller/sso/updateLocalSsoProviderController.js +56 -0
  270. package/src/all/background_page/controller/sso/updateLocalSsoProviderController.test.js +53 -0
  271. package/src/all/background_page/controller/subscription/subscriptionController.js +53 -0
  272. package/src/all/background_page/controller/tabsController.js +15 -14
  273. package/src/all/background_page/controller/tag/tagController.js +115 -0
  274. package/src/all/background_page/controller/toolbarController.js +228 -39
  275. package/src/all/background_page/controller/toolbarController.test.js +210 -0
  276. package/src/all/background_page/controller/user/getOrFindLoggedInUserController.js +56 -0
  277. package/src/all/background_page/controller/user/getOrFindLoggedInUserController.test.js +92 -0
  278. package/src/all/background_page/controller/user/updateUserController.js +57 -0
  279. package/src/all/background_page/controller/user/updateUserController.test.js +88 -0
  280. package/src/all/background_page/controller/user/updateUserLocalStorageController.js +56 -0
  281. package/src/all/background_page/controller/user/updateUserLocalStorageController.test.js +62 -0
  282. package/src/all/background_page/controller/userPassphrasePolicies/findUserPassphrasePoliciesController.js +52 -0
  283. package/src/all/background_page/controller/userPassphrasePolicies/findUserPassphrasePoliciesController.test.js +70 -0
  284. package/src/all/background_page/controller/userPassphrasePolicies/saveUserPassphrasePoliciesController.js +55 -0
  285. package/src/all/background_page/controller/userPassphrasePolicies/saveUserPassphrasePoliciesController.test.js +76 -0
  286. package/src/all/background_page/controller/webIntegration/webIntegrationController.js +54 -0
  287. package/src/all/background_page/error/GpgKeyError.js +1 -1
  288. package/src/all/background_page/error/badSignatureMessageGpgKeyError.js +22 -0
  289. package/src/all/background_page/error/deleteDryRunError.js +10 -8
  290. package/src/all/background_page/error/error.js +14 -6
  291. package/src/all/background_page/error/externalServiceError.js +17 -0
  292. package/src/all/background_page/error/externalServiceUnavailableError.js +17 -0
  293. package/src/all/background_page/error/fileFormatError.js +1 -1
  294. package/src/all/background_page/error/fileTypeError.js +1 -1
  295. package/src/all/background_page/error/importError.js +2 -2
  296. package/src/all/background_page/error/invalidMasterPasswordError.js +4 -4
  297. package/src/all/background_page/error/keyIsExpiredError.js +1 -1
  298. package/src/all/background_page/error/mfaAuthenticationRequiredError.js +10 -4
  299. package/src/all/background_page/error/notFoundError.js +3 -4
  300. package/src/all/background_page/error/outdatedSsoKitError.js +22 -0
  301. package/src/all/background_page/error/passboltBadResponseError.js +7 -3
  302. package/src/all/background_page/error/passboltServiceUnavailableError.js +4 -3
  303. package/src/all/background_page/error/passboltSubscriptionError.js +19 -0
  304. package/src/all/background_page/error/serverKeyChangedError.js +1 -1
  305. package/src/all/background_page/error/ssoDisabledError.js +21 -0
  306. package/src/all/background_page/error/ssoProviderMismatchError.js +22 -0
  307. package/src/all/background_page/error/ssoSettingsChangedError.js +21 -0
  308. package/src/all/background_page/error/userAbortsOperationError.js +2 -2
  309. package/src/all/background_page/error/userAlreadyLoggedInError.js +21 -0
  310. package/src/all/background_page/error/wrongOrganizationRecoveryKeyError.js +23 -0
  311. package/src/all/background_page/event/accountRecoveryEvents.js +89 -0
  312. package/src/all/background_page/event/actionLogEvents.js +11 -8
  313. package/src/all/background_page/event/appBootstrapEvents.js +6 -6
  314. package/src/all/background_page/event/appEvents.js +250 -5
  315. package/src/all/background_page/event/authEvents.js +125 -74
  316. package/src/all/background_page/event/clipboardEvents.js +21 -17
  317. package/src/all/background_page/event/commentEvents.js +25 -38
  318. package/src/all/background_page/event/configEvents.js +31 -24
  319. package/src/all/background_page/event/exportResourcesEvents.js +13 -30
  320. package/src/all/background_page/event/favoriteEvents.js +8 -12
  321. package/src/all/background_page/event/folderEvents.js +25 -25
  322. package/src/all/background_page/event/groupEvents.js +32 -31
  323. package/src/all/background_page/event/importResourcesEvents.js +12 -7
  324. package/src/all/background_page/event/informCallToActionEvents.js +60 -0
  325. package/src/all/background_page/event/informMenuEvents.js +99 -0
  326. package/src/all/background_page/event/keyringEvents.js +56 -95
  327. package/src/all/background_page/event/localeEvents.js +61 -0
  328. package/src/all/background_page/event/mfaEvents.js +77 -0
  329. package/src/all/background_page/event/mobileEvents.js +77 -0
  330. package/src/all/background_page/event/multiFactorAuthenticationEvents.js +11 -8
  331. package/src/all/background_page/event/organizationSettingsEvents.js +38 -0
  332. package/src/all/background_page/event/passwordPoliciesEvents.js +41 -0
  333. package/src/all/background_page/event/portEvents.js +30 -0
  334. package/src/all/background_page/event/pownedPasswordEvents.js +30 -0
  335. package/src/all/background_page/event/publicWebsiteSignInEvents.js +30 -0
  336. package/src/all/background_page/event/quickAccessEvents.js +110 -30
  337. package/src/all/background_page/event/recoverEvents.js +114 -102
  338. package/src/all/background_page/event/rememberMeEvents.js +29 -0
  339. package/src/all/background_page/event/resourceEvents.js +59 -27
  340. package/src/all/background_page/event/resourceTypeEvents.js +10 -7
  341. package/src/all/background_page/event/roleEvents.js +15 -13
  342. package/src/all/background_page/event/secretEvents.js +25 -17
  343. package/src/all/background_page/event/setupEvents.js +98 -131
  344. package/src/all/background_page/event/shareEvents.js +23 -46
  345. package/src/all/background_page/event/subscriptionEvents.js +57 -0
  346. package/src/all/background_page/event/tabEvents.js +13 -29
  347. package/src/all/background_page/event/tagEvents.js +32 -18
  348. package/src/all/background_page/event/themeEvents.js +15 -13
  349. package/src/all/background_page/event/userEvents.js +95 -74
  350. package/src/all/background_page/event/webIntegrationEvents.js +38 -0
  351. package/src/all/background_page/index.html +0 -1
  352. package/src/all/background_page/index.js +68 -88
  353. package/src/all/background_page/model/account/accountModel.js +46 -10
  354. package/src/all/background_page/model/accountRecovery/accountRecoveryModel.js +181 -0
  355. package/src/all/background_page/model/actionLog/actionLogModel.js +9 -7
  356. package/src/all/background_page/model/auth/authModel.js +33 -29
  357. package/src/all/background_page/model/auth/authModel.test.js +40 -0
  358. package/src/all/background_page/model/comment/commentModel.js +4 -4
  359. package/src/all/background_page/model/config.js +33 -28
  360. package/src/all/background_page/model/desktopTransfer/desktopTransferModel.js +34 -0
  361. package/src/all/background_page/model/desktopTransfer/desktopTransferModel.test.js +50 -0
  362. package/src/all/background_page/model/entity/account/abstractAccountEntity.js +312 -0
  363. package/src/all/background_page/model/entity/account/accountAccountRecoveryEntity.js +268 -0
  364. package/src/all/background_page/model/entity/account/accountAccountRecoveryEntity.test.data.js +51 -0
  365. package/src/all/background_page/model/entity/account/accountAccountRecoveryEntity.test.js +123 -0
  366. package/src/all/background_page/model/entity/account/accountEntity.js +112 -112
  367. package/src/all/background_page/model/entity/account/accountEntity.test.data.js +60 -0
  368. package/src/all/background_page/model/entity/account/accountEntity.test.js +126 -0
  369. package/src/all/background_page/model/entity/account/accountKitEntity.js +118 -0
  370. package/src/all/background_page/model/entity/account/accountKitEntity.test.data.js +25 -0
  371. package/src/all/background_page/model/entity/account/accountKitEntity.test.js +101 -0
  372. package/src/all/background_page/model/entity/account/accountRecoverEntity.js +260 -0
  373. package/src/all/background_page/model/entity/account/accountRecoverEntity.test.data.js +72 -0
  374. package/src/all/background_page/model/entity/account/accountSetupEntity.js +242 -0
  375. package/src/all/background_page/model/entity/account/accountSetupEntity.test.data.js +65 -0
  376. package/src/all/background_page/model/entity/accountRecovery/accountRecoveryOrganizationPolicyChangeEntity.js +159 -0
  377. package/src/all/background_page/model/entity/accountRecovery/accountRecoveryOrganizationPolicyChangeEntity.test.data.js +50 -0
  378. package/src/all/background_page/model/entity/accountRecovery/accountRecoveryOrganizationPolicyChangeEntity.test.js +62 -0
  379. package/src/all/background_page/model/entity/accountRecovery/accountRecoveryOrganizationPolicyEntity.js +375 -0
  380. package/src/all/background_page/model/entity/accountRecovery/accountRecoveryOrganizationPolicyEntity.test.data.js +170 -0
  381. package/src/all/background_page/model/entity/accountRecovery/accountRecoveryOrganizationPolicyEntity.test.js +179 -0
  382. package/src/all/background_page/model/entity/accountRecovery/accountRecoveryOrganizationPublicKeyEntity.js +175 -0
  383. package/src/all/background_page/model/entity/accountRecovery/accountRecoveryOrganizationPublicKeyEntity.test.data.js +85 -0
  384. package/src/all/background_page/model/entity/accountRecovery/accountRecoveryOrganizationPublicKeyEntity.test.js +117 -0
  385. package/src/all/background_page/model/entity/accountRecovery/accountRecoveryPrivateKeyEntity.js +177 -0
  386. package/src/all/background_page/model/entity/accountRecovery/accountRecoveryPrivateKeyEntity.test.data.js +76 -0
  387. package/src/all/background_page/model/entity/accountRecovery/accountRecoveryPrivateKeyEntity.test.js +41 -0
  388. package/src/all/background_page/model/entity/accountRecovery/accountRecoveryPrivateKeyPasswordDecryptedDataEntity.js +166 -0
  389. package/src/all/background_page/model/entity/accountRecovery/accountRecoveryPrivateKeyPasswordDecryptedDataEntity.test.data.js +29 -0
  390. package/src/all/background_page/model/entity/accountRecovery/accountRecoveryPrivateKeyPasswordEntity.js +172 -0
  391. package/src/all/background_page/model/entity/accountRecovery/accountRecoveryPrivateKeyPasswordEntity.test.data.js +75 -0
  392. package/src/all/background_page/model/entity/accountRecovery/accountRecoveryPrivateKeyPasswordEntity.test.js +87 -0
  393. package/src/all/background_page/model/entity/accountRecovery/accountRecoveryPrivateKeyPasswordsCollection.js +205 -0
  394. package/src/all/background_page/model/entity/accountRecovery/accountRecoveryPrivateKeyPasswordsCollection.test.js +160 -0
  395. package/src/all/background_page/model/entity/accountRecovery/accountRecoveryRequestCreateEntity.js +126 -0
  396. package/src/all/background_page/model/entity/accountRecovery/accountRecoveryRequestEntity.js +232 -0
  397. package/src/all/background_page/model/entity/accountRecovery/accountRecoveryRequestEntity.test.data.js +102 -0
  398. package/src/all/background_page/model/entity/accountRecovery/accountRecoveryRequestEntity.test.fixtures.js +38 -0
  399. package/src/all/background_page/model/entity/accountRecovery/accountRecoveryRequestEntity.test.js +101 -0
  400. package/src/all/background_page/model/entity/accountRecovery/accountRecoveryRequestsCollection.js +196 -0
  401. package/src/all/background_page/model/entity/accountRecovery/accountRecoveryRequestsCollection.test.js +165 -0
  402. package/src/all/background_page/model/entity/accountRecovery/accountRecoveryResponseEntity.js +189 -0
  403. package/src/all/background_page/model/entity/accountRecovery/accountRecoveryResponseEntity.test.data.js +92 -0
  404. package/src/all/background_page/model/entity/accountRecovery/accountRecoveryResponseEntity.test.js +65 -0
  405. package/src/all/background_page/model/entity/accountRecovery/accountRecoveryResponsesCollection.js +196 -0
  406. package/src/all/background_page/model/entity/accountRecovery/accountRecoveryUserSettingEntity.js +193 -0
  407. package/src/all/background_page/model/entity/accountRecovery/accountRecoveryUserSettingEntity.test.data.js +45 -0
  408. package/src/all/background_page/model/entity/accountRecovery/accountRecoveryUserSettingEntity.test.js +125 -0
  409. package/src/all/background_page/model/entity/accountRecovery/pendingAccountRecoveryRequestEntity.js +106 -0
  410. package/src/all/background_page/model/entity/accountRecovery/pendingAccountRecoveryRequestEntity.test.js +72 -0
  411. package/src/all/background_page/model/entity/actionLog/abstractActionLogEntity.js +31 -24
  412. package/src/all/background_page/model/entity/actionLog/actionLogsCollection.js +39 -32
  413. package/src/all/background_page/model/entity/actionLog/defaultActionLog.test.js +9 -16
  414. package/src/all/background_page/model/entity/actionLog/defaultActionLogEntity.js +11 -13
  415. package/src/all/background_page/model/entity/actionLog/permissionsUpdatedActionLogEntity.js +28 -26
  416. package/src/all/background_page/model/entity/auth/auth.test.data.js +23 -0
  417. package/src/all/background_page/model/entity/authenticationToken/authenticationTokenEntity.js +94 -20
  418. package/src/all/background_page/model/entity/authenticationToken/authenticationTokenEntity.test.js +99 -0
  419. package/src/all/background_page/model/entity/avatar/avatarEntity.js +17 -44
  420. package/src/all/background_page/model/entity/avatar/avatarEntity.test.js +126 -49
  421. package/src/all/background_page/model/entity/avatar/update/avatarUpdateEntity.js +22 -18
  422. package/src/all/background_page/model/entity/comment/commentEntity.js +32 -27
  423. package/src/all/background_page/model/entity/comment/commentEntity.test.js +18 -25
  424. package/src/all/background_page/model/entity/comment/comments.test.data.js +45 -0
  425. package/src/all/background_page/model/entity/comment/commentsCollection.js +34 -27
  426. package/src/all/background_page/model/entity/comment/commentsCollection.test.js +5 -12
  427. package/src/all/background_page/model/entity/export/exportResourcesFileEntity.js +130 -42
  428. package/src/all/background_page/model/entity/favorite/favoriteEntity.js +18 -42
  429. package/src/all/background_page/model/entity/favorite/favoriteEntity.test.js +113 -59
  430. package/src/all/background_page/model/entity/folder/external/externalFolderEntity.js +87 -41
  431. package/src/all/background_page/model/entity/folder/external/externalFolderEntity.test.js +85 -20
  432. package/src/all/background_page/model/entity/folder/external/externalFoldersCollection.js +73 -31
  433. package/src/all/background_page/model/entity/folder/external/externalFoldersCollection.test.js +16 -15
  434. package/src/all/background_page/model/entity/folder/folderEntity.js +55 -46
  435. package/src/all/background_page/model/entity/folder/folderEntity.test.js +364 -205
  436. package/src/all/background_page/model/entity/folder/foldersCollection.js +53 -41
  437. package/src/all/background_page/model/entity/folder/foldersCollection.test.js +21 -26
  438. package/src/all/background_page/model/entity/gpgkey/external/externalGpgKeyCollection.js +88 -0
  439. package/src/all/background_page/model/entity/gpgkey/external/externalGpgKeyCollection.test.js +40 -0
  440. package/src/all/background_page/model/entity/gpgkey/external/externalGpgKeyEntity.js +309 -0
  441. package/src/all/background_page/model/entity/gpgkey/external/externalGpgKeyEntity.test.data.js +33 -0
  442. package/src/all/background_page/model/entity/gpgkey/external/externalGpgKeyEntity.test.fixtures.js +111 -0
  443. package/src/all/background_page/model/entity/gpgkey/external/externalGpgKeyEntity.test.js +89 -0
  444. package/src/all/background_page/model/entity/gpgkey/external/externalGpgKeyPairEntity.js +140 -0
  445. package/src/all/background_page/model/entity/gpgkey/external/externalGpgKeyPairEntity.test.js +57 -0
  446. package/src/all/background_page/model/entity/gpgkey/generate/generateGpgKeyPairOptionsEntity.js +215 -0
  447. package/src/all/background_page/model/entity/gpgkey/generate/generateGpgKeyPairOptionsEntity.test.data.js +33 -0
  448. package/src/all/background_page/model/entity/gpgkey/generate/generateGpgKeyPairOptionsEntity.test.js +87 -0
  449. package/src/all/background_page/model/entity/gpgkey/gpgkeyEntity.js +22 -20
  450. package/src/all/background_page/model/entity/gpgkey/gpgkeyEntity.test.fixtures.js +17 -2
  451. package/src/all/background_page/model/entity/gpgkey/gpgkeyEntity.test.js +4 -12
  452. package/src/all/background_page/model/entity/gpgkey/privateGpgkeyEntity.js +83 -0
  453. package/src/all/background_page/model/entity/gpgkey/privateGpgkeyEntity.test.js +49 -0
  454. package/src/all/background_page/model/entity/group/groupEntity.js +37 -31
  455. package/src/all/background_page/model/entity/group/groupEntity.test.data.js +42 -0
  456. package/src/all/background_page/model/entity/group/groupEntity.test.fixtures.js +1 -1
  457. package/src/all/background_page/model/entity/group/groupEntity.test.js +2 -9
  458. package/src/all/background_page/model/entity/group/groupsCollection.js +44 -34
  459. package/src/all/background_page/model/entity/group/groupsCollection.test.js +5 -12
  460. package/src/all/background_page/model/entity/group/transfer/groupDeleteTransfer.js +29 -24
  461. package/src/all/background_page/model/entity/group/transfer/groupDeleteTransfer.test.js +6 -15
  462. package/src/all/background_page/model/entity/group/update/groupUpdateDryRunResultEntity.js +27 -24
  463. package/src/all/background_page/model/entity/group/update/groupUpdateDryRunResultEntity.test.data.js +24 -0
  464. package/src/all/background_page/model/entity/group/update/groupUpdateDryRunResultEntity.test.js +1 -8
  465. package/src/all/background_page/model/entity/group/update/groupUpdateEntity.js +35 -30
  466. package/src/all/background_page/model/entity/group/update/groupUpdateEntity.test.js +6 -13
  467. package/src/all/background_page/model/entity/groupUser/change/groupUserChangeEntity.js +19 -18
  468. package/src/all/background_page/model/entity/groupUser/change/groupUserChangeEntity.test.js +2 -9
  469. package/src/all/background_page/model/entity/groupUser/change/groupUserChangesCollection.js +25 -22
  470. package/src/all/background_page/model/entity/groupUser/groupUserEntity.js +28 -22
  471. package/src/all/background_page/model/entity/groupUser/groupUserEntity.test.fixtures.js +1 -1
  472. package/src/all/background_page/model/entity/groupUser/groupUserEntity.test.js +2 -9
  473. package/src/all/background_page/model/entity/groupUser/groupUsersEntity.test.data.js +38 -0
  474. package/src/all/background_page/model/entity/groupUser/groupsUsersCollection.js +36 -28
  475. package/src/all/background_page/model/entity/groupUser/groupsUsersCollection.test.fixtures.js +1 -1
  476. package/src/all/background_page/model/entity/groupUser/groupsUsersCollection.test.js +2 -9
  477. package/src/all/background_page/model/entity/groupUser/transfer/groupUserTransfer.test.js +9 -16
  478. package/src/all/background_page/model/entity/groupUser/transfer/groupUserTransferEntity.js +17 -17
  479. package/src/all/background_page/model/entity/groupUser/transfer/groupUserTransfersCollection.js +19 -17
  480. package/src/all/background_page/model/entity/groupUser/transfer/groupUserTransfersCollection.test.js +3 -10
  481. package/src/all/background_page/model/entity/import/importResourcesFileEntity.js +39 -32
  482. package/src/all/background_page/model/entity/import/importResourcesFileEntity.test.js +10 -15
  483. package/src/all/background_page/model/entity/locale/localeEntity.js +91 -0
  484. package/src/all/background_page/model/entity/locale/localeEntity.test.js +55 -0
  485. package/src/all/background_page/model/entity/locale/localesCollection.js +96 -0
  486. package/src/all/background_page/model/entity/mfa/mfaCombinedEnabledProvidersEntity.data.js +42 -0
  487. package/src/all/background_page/model/entity/mfa/mfaCombinedEnabledProvidersEntity.js +142 -0
  488. package/src/all/background_page/model/entity/mfa/mfaCombinedEnabledProvidersEntity.test.js +66 -0
  489. package/src/all/background_page/model/entity/mfa/mfaEnabledProviderEntity.js +104 -0
  490. package/src/all/background_page/model/entity/mfa/mfaEnabledProviderEntity.test.js +45 -0
  491. package/src/all/background_page/model/entity/mfa/mfaPolicyEntity.data.js +24 -0
  492. package/src/all/background_page/model/entity/mfa/mfaPolicyEntity.js +120 -0
  493. package/src/all/background_page/model/entity/mfa/mfaProviderEntity.js +86 -0
  494. package/src/all/background_page/model/entity/mfa/mfaProviderEntity.test.data.js +21 -0
  495. package/src/all/background_page/model/entity/mfa/mfaProviderEntity.test.js +49 -0
  496. package/src/all/background_page/model/entity/mfa/mfaSetupTotpEntity.js +70 -0
  497. package/src/all/background_page/model/entity/mfa/mfaSetupTotpEntity.test.data.js +29 -0
  498. package/src/all/background_page/model/entity/mfa/mfaSetupTotpEntity.test.js +51 -0
  499. package/src/all/background_page/model/entity/mfa/mfaSetupYubikeyEntity.js +66 -0
  500. package/src/all/background_page/model/entity/mfa/mfaSetupYubikeyEntity.test.data.js +21 -0
  501. package/src/all/background_page/model/entity/mfa/mfaSetupYubikeyEntity.test.js +54 -0
  502. package/src/all/background_page/model/entity/mfa/mfaTotpSetupInfoEntity.js +67 -0
  503. package/src/all/background_page/model/entity/mfa/mfaTotpSetupInfoEntity.test.data.js +20 -0
  504. package/src/all/background_page/model/entity/mfa/mfaTotpSetupInfoEntity.test.js +67 -0
  505. package/src/all/background_page/model/entity/mfa/mfaVerifyProviderEntity.js +66 -0
  506. package/src/all/background_page/model/entity/mfa/mfaVerifyProviderEntity.test.data.js +21 -0
  507. package/src/all/background_page/model/entity/mfa/mfaVerifyProviderEntity.test.js +49 -0
  508. package/src/all/background_page/model/entity/organizationSettings/organizationSettingsEntity.js +256 -0
  509. package/src/all/background_page/model/entity/organizationSettings/organizationSettingsEntity.test.data.js +254 -0
  510. package/src/all/background_page/model/entity/organizationSettings/organizationSettingsEntity.test.js +53 -0
  511. package/src/all/background_page/model/entity/passwordExpiry/passwordExpiryResourceCollection.test.data.js +22 -0
  512. package/src/all/background_page/model/entity/passwordExpiry/passwordExpiryResourceCollection.test.js +46 -0
  513. package/src/all/background_page/model/entity/passwordExpiry/passwordExpiryResourceEntity.js +110 -0
  514. package/src/all/background_page/model/entity/passwordExpiry/passwordExpiryResourceEntity.test.data.js +36 -0
  515. package/src/all/background_page/model/entity/passwordExpiry/passwordExpiryResourceEntity.test.js +104 -0
  516. package/src/all/background_page/model/entity/passwordExpiry/passwordExpiryResourcesCollection.js +147 -0
  517. package/src/all/background_page/model/entity/passwordExpiry/passwordExpiryResourcesCollection.test.js +69 -0
  518. package/src/all/background_page/model/entity/passwordPolicies/passphraseGeneratorSettingsEntity.js +110 -0
  519. package/src/all/background_page/model/entity/passwordPolicies/passphraseGeneratorSettingsEntity.test.data.js +24 -0
  520. package/src/all/background_page/model/entity/passwordPolicies/passphraseGeneratorSettingsEntity.test.js +80 -0
  521. package/src/all/background_page/model/entity/passwordPolicies/passwordGeneratorSettingsEntity.js +145 -0
  522. package/src/all/background_page/model/entity/passwordPolicies/passwordGeneratorSettingsEntity.test.data.js +33 -0
  523. package/src/all/background_page/model/entity/passwordPolicies/passwordGeneratorSettingsEntity.test.js +88 -0
  524. package/src/all/background_page/model/entity/passwordPolicies/passwordPoliciesEntity.js +204 -0
  525. package/src/all/background_page/model/entity/passwordPolicies/passwordPoliciesEntity.test.data.js +26 -0
  526. package/src/all/background_page/model/entity/passwordPolicies/passwordPoliciesEntity.test.js +106 -0
  527. package/src/all/background_page/model/entity/permission/actionLog/updatedPermissionEntity.js +28 -26
  528. package/src/all/background_page/model/entity/permission/actionLog/updatedPermissionEntity.test.js +6 -13
  529. package/src/all/background_page/model/entity/permission/actionLog/updatedPermissionsCollection.js +33 -27
  530. package/src/all/background_page/model/entity/permission/change/permissionChangeEntity.js +26 -22
  531. package/src/all/background_page/model/entity/permission/change/permissionChangesCollection.js +37 -32
  532. package/src/all/background_page/model/entity/permission/change/permissionChangesCollection.test.js +88 -105
  533. package/src/all/background_page/model/entity/permission/permissionEntity.js +53 -39
  534. package/src/all/background_page/model/entity/permission/permissionEntity.test.js +9 -16
  535. package/src/all/background_page/model/entity/permission/permissionsCollection.js +89 -70
  536. package/src/all/background_page/model/entity/permission/permissionsCollection.test.js +49 -55
  537. package/src/all/background_page/model/entity/permission/transfer/permissionTransfer.test.js +9 -16
  538. package/src/all/background_page/model/entity/permission/transfer/permissionTransferEntity.js +17 -17
  539. package/src/all/background_page/model/entity/permission/transfer/permissionTransfersCollection.js +19 -17
  540. package/src/all/background_page/model/entity/permission/transfer/permissionTransfersCollection.test.js +3 -10
  541. package/src/all/background_page/model/entity/plaintext/plaintextEntity.js +50 -8
  542. package/src/all/background_page/model/entity/profile/profileEntity.js +36 -30
  543. package/src/all/background_page/model/entity/profile/profileEntity.test.js +198 -114
  544. package/src/all/background_page/model/entity/rememberMe/userRememberMeLatestChoiceEntity.js +81 -0
  545. package/src/all/background_page/model/entity/rememberMe/userRememberMeLatestChoiceEntity.test.data.js +20 -0
  546. package/src/all/background_page/model/entity/rememberMe/userRememberMeLatestChoiceEntity.test.js +44 -0
  547. package/src/all/background_page/model/entity/resource/external/externalResourceEntity.js +70 -36
  548. package/src/all/background_page/model/entity/resource/external/externalResourceEntity.test.js +50 -16
  549. package/src/all/background_page/model/entity/resource/external/externalResourcesCollection.js +32 -28
  550. package/src/all/background_page/model/entity/resource/external/externalResourcesCollection.test.js +4 -11
  551. package/src/all/background_page/model/entity/resource/resourceEntity.js +115 -57
  552. package/src/all/background_page/model/entity/resource/resourceEntity.test.js +8 -15
  553. package/src/all/background_page/model/entity/resource/resourcesCollection.js +148 -39
  554. package/src/all/background_page/model/entity/resource/resourcesCollection.test.data.js +66 -0
  555. package/src/all/background_page/model/entity/resource/resourcesCollection.test.js +135 -26
  556. package/src/all/background_page/model/entity/resourceType/resourceTypeEntity.js +23 -17
  557. package/src/all/background_page/model/entity/resourceType/resourceTypeEntity.test.js +9 -16
  558. package/src/all/background_page/model/entity/resourceType/resourceTypesCollection.js +95 -30
  559. package/src/all/background_page/model/entity/resourceType/resourceTypesCollection.test.js +158 -0
  560. package/src/all/background_page/model/entity/secret/needed/neededSecretEntity.js +20 -18
  561. package/src/all/background_page/model/entity/secret/needed/neededSecretsCollection.js +23 -20
  562. package/src/all/background_page/model/entity/secret/resource/resourceSecretsCollection.js +37 -28
  563. package/src/all/background_page/model/entity/secret/secretEntity.js +20 -19
  564. package/src/all/background_page/model/entity/secret/secretEntity.test.data.js +27 -0
  565. package/src/all/background_page/model/entity/secret/secretEntity.test.js +13 -20
  566. package/src/all/background_page/model/entity/secret/secretsCollection.js +37 -28
  567. package/src/all/background_page/model/entity/securityToken/SecurityTokenEntity.test.data.js +23 -0
  568. package/src/all/background_page/model/entity/securityToken/securityTokenEntity.js +17 -16
  569. package/src/all/background_page/model/entity/securityToken/securityTokenEntity.test.js +7 -14
  570. package/src/all/background_page/model/entity/sso/ssoKitClientPart.test.data.js +31 -0
  571. package/src/all/background_page/model/entity/sso/ssoKitClientPartEntity.js +274 -0
  572. package/src/all/background_page/model/entity/sso/ssoKitClientPartEntity.test.js +131 -0
  573. package/src/all/background_page/model/entity/sso/ssoKitServerPart.test.data.js +18 -0
  574. package/src/all/background_page/model/entity/sso/ssoKitServerPartEntity.js +169 -0
  575. package/src/all/background_page/model/entity/sso/ssoKitServerPartEntity.test.js +87 -0
  576. package/src/all/background_page/model/entity/sso/ssoLoginUrlEntity.js +127 -0
  577. package/src/all/background_page/model/entity/sso/ssoLoginUrlEntity.test.js +89 -0
  578. package/src/all/background_page/model/entity/subscription/subscriptionEntity.js +113 -0
  579. package/src/all/background_page/model/entity/subscription/subscriptionEntity.test.js +75 -0
  580. package/src/all/background_page/model/entity/subscription/update/updateSubscriptionEntity.js +108 -0
  581. package/src/all/background_page/model/entity/subscription/update/updateSubscriptionEntity.test.js +55 -0
  582. package/src/all/background_page/model/entity/tag/tagEntity.js +20 -17
  583. package/src/all/background_page/model/entity/tag/tagEntity.test.data.js +31 -0
  584. package/src/all/background_page/model/entity/tag/tagEntity.test.js +16 -23
  585. package/src/all/background_page/model/entity/tag/tagsCollection.js +87 -46
  586. package/src/all/background_page/model/entity/tag/tagsCollection.test.js +199 -133
  587. package/src/all/background_page/model/entity/theme/change/ChangeThemeEntity.js +18 -18
  588. package/src/all/background_page/model/entity/theme/themeEntity.js +18 -17
  589. package/src/all/background_page/model/entity/theme/themeEntity.test.js +18 -17
  590. package/src/all/background_page/model/entity/theme/themesCollection.js +37 -28
  591. package/src/all/background_page/model/entity/totp/totpDto.test.data.js +29 -0
  592. package/src/all/background_page/model/entity/totp/totpEntity.js +202 -0
  593. package/src/all/background_page/model/entity/totp/totpEntity.test.js +111 -0
  594. package/src/all/background_page/model/entity/transfer/transferEntity.js +218 -0
  595. package/src/all/background_page/model/entity/transfer/transferEntity.test.js +111 -0
  596. package/src/all/background_page/model/entity/user/actionLog/loggedUserEntity.js +27 -24
  597. package/src/all/background_page/model/entity/user/actionLog/loggedUserEntity.test.js +6 -13
  598. package/src/all/background_page/model/entity/user/transfer/userDeleteTransfer.js +28 -25
  599. package/src/all/background_page/model/entity/user/transfer/userDeleteTransfer.test.js +9 -18
  600. package/src/all/background_page/model/entity/user/userEntity.js +113 -40
  601. package/src/all/background_page/model/entity/user/userEntity.test.fixtures.js +40 -5
  602. package/src/all/background_page/model/entity/user/userEntity.test.js +49 -20
  603. package/src/all/background_page/model/entity/user/usersCollection.js +41 -34
  604. package/src/all/background_page/model/entity/user/usersCollection.test.fixtures.js +18 -2
  605. package/src/all/background_page/model/entity/user/usersCollection.test.js +7 -14
  606. package/src/all/background_page/model/entity/worker/workerEntity.js +194 -0
  607. package/src/all/background_page/model/entity/worker/workerEntity.test.data.js +26 -0
  608. package/src/all/background_page/model/entity/worker/workerEntity.test.js +97 -0
  609. package/src/all/background_page/model/export/resources/argon2.test-lib.js +50 -0
  610. package/src/all/background_page/model/export/resources/csvRowComposer/abstractRowComposer.js +3 -1
  611. package/src/all/background_page/model/export/resources/csvRowComposer/csv1PasswordRowComposer.test.js +3 -10
  612. package/src/all/background_page/model/export/resources/csvRowComposer/csv1passwordRowComposer.js +4 -5
  613. package/src/all/background_page/model/export/resources/csvRowComposer/csvBitWardenRowComposer.js +52 -0
  614. package/src/all/background_page/model/export/resources/csvRowComposer/csvBitWardenRowComposer.test.js +36 -0
  615. package/src/all/background_page/model/export/resources/csvRowComposer/csvChromiumRowComposer.js +52 -0
  616. package/src/all/background_page/model/export/resources/csvRowComposer/csvChromiumRowComposer.test.js +34 -0
  617. package/src/all/background_page/model/export/resources/csvRowComposer/csvDashlaneRowComposer.js +52 -0
  618. package/src/all/background_page/model/export/resources/csvRowComposer/csvDashlaneRowComposer.test.js +35 -0
  619. package/src/all/background_page/model/export/resources/csvRowComposer/csvKdbxRowComposer.js +12 -6
  620. package/src/all/background_page/model/export/resources/csvRowComposer/csvKdbxRowComposer.test.js +30 -10
  621. package/src/all/background_page/model/export/resources/csvRowComposer/csvLastPassRowComposer.js +4 -5
  622. package/src/all/background_page/model/export/resources/csvRowComposer/csvLastPassRowComposer.test.js +2 -9
  623. package/src/all/background_page/model/export/resources/csvRowComposer/csvLogMeOnceRowComposer.js +52 -0
  624. package/src/all/background_page/model/export/resources/csvRowComposer/csvLogMeOnceRowComposer.test.js +36 -0
  625. package/src/all/background_page/model/export/resources/csvRowComposer/csvMozillaPlatformRowComposer.js +61 -0
  626. package/src/all/background_page/model/export/resources/csvRowComposer/csvMozillaPlatformRowComposer.test.js +39 -0
  627. package/src/all/background_page/model/export/resources/csvRowComposer/csvNordpassRowComposer.js +52 -0
  628. package/src/all/background_page/model/export/resources/csvRowComposer/csvNordpassRowComposer.test.js +36 -0
  629. package/src/all/background_page/model/export/resources/csvRowComposer/csvSafariRowComposer.js +52 -0
  630. package/src/all/background_page/model/export/resources/csvRowComposer/csvSafariRowComposer.test.js +35 -0
  631. package/src/all/background_page/model/export/resources/resourcesCsvExporter.js +22 -7
  632. package/src/all/background_page/model/export/resources/resourcesCsvExporter.test.js +24 -21
  633. package/src/all/background_page/model/export/resources/resourcesKdbxExporter.js +55 -11
  634. package/src/all/background_page/model/export/resources/resourcesKdbxExporter.test.js +127 -29
  635. package/src/all/background_page/model/export/resourcesExporter.js +4 -4
  636. package/src/all/background_page/model/favorite/favoriteModel.js +8 -6
  637. package/src/all/background_page/model/folder/folderModel.js +73 -55
  638. package/src/all/background_page/model/folder/folderModel.test.js +25 -29
  639. package/src/all/background_page/model/gpgAuthHeader.js +31 -34
  640. package/src/all/background_page/model/gpgAuthToken.js +13 -12
  641. package/src/all/background_page/model/gpgauth.js +72 -133
  642. package/src/all/background_page/model/group/groupModel.js +11 -13
  643. package/src/all/background_page/model/import/resources/csvRowParser/abstractCsvRowParser.js +4 -2
  644. package/src/all/background_page/model/import/resources/csvRowParser/csv1PasswordRowParser.js +6 -6
  645. package/src/all/background_page/model/import/resources/csvRowParser/csv1PasswordRowParser.test.js +7 -14
  646. package/src/all/background_page/model/import/resources/csvRowParser/csvBitWardenRowParser.js +65 -0
  647. package/src/all/background_page/model/import/resources/csvRowParser/csvBitWardenRowParser.test.js +74 -0
  648. package/src/all/background_page/model/import/resources/csvRowParser/csvChromiumRowParser.js +63 -0
  649. package/src/all/background_page/model/import/resources/csvRowParser/csvChromiumRowParser.test.js +69 -0
  650. package/src/all/background_page/model/import/resources/csvRowParser/csvDashlaneRowParser.js +68 -0
  651. package/src/all/background_page/model/import/resources/csvRowParser/csvDashlaneRowParser.test.js +71 -0
  652. package/src/all/background_page/model/import/resources/csvRowParser/csvKdbxRowParser.js +39 -15
  653. package/src/all/background_page/model/import/resources/csvRowParser/csvKdbxRowParser.test.js +53 -10
  654. package/src/all/background_page/model/import/resources/csvRowParser/csvLastPassRowParser.js +10 -8
  655. package/src/all/background_page/model/import/resources/csvRowParser/csvLastPassRowParser.test.js +2 -9
  656. package/src/all/background_page/model/import/resources/csvRowParser/csvLogMeOnceRowParser.js +66 -0
  657. package/src/all/background_page/model/import/resources/csvRowParser/csvLogMeOnceRowParser.test.js +74 -0
  658. package/src/all/background_page/model/import/resources/csvRowParser/csvMozillaPlatformRowParser.js +63 -0
  659. package/src/all/background_page/model/import/resources/csvRowParser/csvMozillaPlatformRowParser.test.js +67 -0
  660. package/src/all/background_page/model/import/resources/csvRowParser/csvNordpassRowParser.js +79 -0
  661. package/src/all/background_page/model/import/resources/csvRowParser/csvNordpassRowParser.test.js +74 -0
  662. package/src/all/background_page/model/import/resources/csvRowParser/csvSafariRowParser.js +65 -0
  663. package/src/all/background_page/model/import/resources/csvRowParser/csvSafariRowParser.test.js +71 -0
  664. package/src/all/background_page/model/import/resources/kdbx/kdbx-content-error-not-protected.kdbx +0 -0
  665. package/src/all/background_page/model/import/resources/kdbx/kdbx-protected-password.kdbx +0 -0
  666. package/src/all/background_page/model/import/resources/kdbx/kdbx-windows-with-totp-protected-password.kdbx +0 -0
  667. package/src/all/background_page/model/import/resources/kdbx/kdbx-with-totp-protected-password.kdbx +0 -0
  668. package/src/all/background_page/model/import/resources/resourcesCsvImportParser.js +36 -20
  669. package/src/all/background_page/model/import/resources/resourcesCsvImportParser.test.js +46 -40
  670. package/src/all/background_page/model/import/resources/resourcesKdbxImportParser.js +64 -35
  671. package/src/all/background_page/model/import/resources/resourcesKdbxImportParser.test.js +125 -35
  672. package/src/all/background_page/model/import/resourcesImportParser.js +6 -6
  673. package/src/all/background_page/model/import/resourcesImportParser.test.js +6 -16
  674. package/src/all/background_page/model/keyring.js +90 -214
  675. package/src/all/background_page/model/locale/localeModel.js +137 -0
  676. package/src/all/background_page/model/log.js +14 -35
  677. package/src/all/background_page/model/mobileTransfer/mobileTransferModel.js +63 -0
  678. package/src/all/background_page/model/multiFactorAuthentication/multiFactorAuthenticationModel.js +84 -4
  679. package/src/all/background_page/model/multiFactorAuthentication/multiFactorAuthenticationModel.test.js +84 -0
  680. package/src/all/background_page/model/organizationSettings/organizationSettingsModel.js +94 -0
  681. package/src/all/background_page/model/passwordExpiry/passwordExpiryResourceModel.js +49 -0
  682. package/src/all/background_page/model/passwordExpiry/passwordExpiryResourceModel.test.js +62 -0
  683. package/src/all/background_page/model/passwordExpiry/passwordExpirySettingsModel.js +110 -0
  684. package/src/all/background_page/model/passwordExpiry/passwordExpirySettingsModel.test.js +243 -0
  685. package/src/all/background_page/model/passwordPolicies/passwordPoliciesModel.js +86 -0
  686. package/src/all/background_page/model/passwordPolicies/passwordPoliciesModel.test.js +231 -0
  687. package/src/all/background_page/model/rbac/RbacModel.js +75 -0
  688. package/src/all/background_page/model/request.js +3 -3
  689. package/src/all/background_page/model/resource/resourceModel.js +186 -138
  690. package/src/all/background_page/model/resourceType/resourceTypeModel.js +20 -9
  691. package/src/all/background_page/model/role/roleModel.js +6 -6
  692. package/src/all/background_page/model/setup/setupModel.js +94 -41
  693. package/src/all/background_page/model/share/shareModel.js +165 -0
  694. package/src/all/background_page/model/sso/ssoDryRunModel.js +53 -0
  695. package/src/all/background_page/model/sso/ssoKitServerPartModel.js +71 -0
  696. package/src/all/background_page/model/sso/ssoLoginModel.js +46 -0
  697. package/src/all/background_page/model/sso/ssoSettingsModel.js +88 -0
  698. package/src/all/background_page/model/subscription/subscriptionModel.js +81 -0
  699. package/src/all/background_page/model/tag/tagModel.js +21 -17
  700. package/src/all/background_page/model/theme/themeModel.js +16 -11
  701. package/src/all/background_page/model/toolbar.js +8 -16
  702. package/src/all/background_page/model/user/userModel.js +88 -29
  703. package/src/all/background_page/model/user.js +78 -191
  704. package/src/all/background_page/model/userPassphrasePolicies/userPassphrasePoliciesModel.js +57 -0
  705. package/src/all/background_page/model/userPassphrasePolicies/userPassphrasePoliciesModel.test.js +136 -0
  706. package/src/all/background_page/model/userSettings/userSettings.js +80 -34
  707. package/src/all/background_page/model/userSettings/userSettings.test.js +26 -25
  708. package/src/all/background_page/pagemod/accountRecoveryBootstrapPagemod.js +79 -0
  709. package/src/all/background_page/pagemod/accountRecoveryBootstrapPagemod.test.js +96 -0
  710. package/src/all/background_page/pagemod/accountRecoveryPagemod.js +61 -0
  711. package/src/all/background_page/pagemod/accountRecoveryPagemod.test.js +87 -0
  712. package/src/all/background_page/pagemod/appBootstrapPagemod.js +104 -0
  713. package/src/all/background_page/pagemod/appBootstrapPagemod.test.js +124 -0
  714. package/src/all/background_page/pagemod/appPagemod.js +111 -56
  715. package/src/all/background_page/pagemod/appPagemod.test.js +184 -0
  716. package/src/all/background_page/pagemod/authBootstrapPagemod.js +77 -51
  717. package/src/all/background_page/pagemod/authBootstrapPagemod.test.js +110 -0
  718. package/src/all/background_page/pagemod/authPagemod.js +61 -35
  719. package/src/all/background_page/pagemod/authPagemod.test.js +86 -0
  720. package/src/all/background_page/pagemod/filePagemod.js +24 -31
  721. package/src/all/background_page/pagemod/filePagemod.test.js +53 -0
  722. package/src/all/background_page/pagemod/informCallToActionPagemod.js +59 -0
  723. package/src/all/background_page/pagemod/informCallToActionPagemod.test.js +67 -0
  724. package/src/all/background_page/pagemod/informMenuPagemod.js +59 -0
  725. package/src/all/background_page/pagemod/informMenuPagemod.test.js +69 -0
  726. package/src/all/background_page/pagemod/pagemod.js +127 -0
  727. package/src/all/background_page/pagemod/pagemod.test.js +58 -0
  728. package/src/all/background_page/pagemod/pagemodManager.js +110 -0
  729. package/src/all/background_page/pagemod/pagemodManager.test.js +197 -0
  730. package/src/all/background_page/pagemod/publicWebsiteSignInPagemod.js +100 -0
  731. package/src/all/background_page/pagemod/publicWebsiteSignInPagemod.test.js +111 -0
  732. package/src/all/background_page/pagemod/quickAccessPagemod.js +74 -38
  733. package/src/all/background_page/pagemod/quickAccessPagemod.test.js +104 -0
  734. package/src/all/background_page/pagemod/recoverBootstrapPagemod.js +75 -41
  735. package/src/all/background_page/pagemod/recoverBootstrapPagemod.test.js +98 -0
  736. package/src/all/background_page/pagemod/recoverPagemod.js +48 -35
  737. package/src/all/background_page/pagemod/recoverPagemod.test.js +73 -0
  738. package/src/all/background_page/pagemod/setupBootstrapPagemod.js +75 -41
  739. package/src/all/background_page/pagemod/setupBootstrapPagemod.test.js +98 -0
  740. package/src/all/background_page/pagemod/setupPagemod.js +46 -35
  741. package/src/all/background_page/pagemod/setupPagemod.test.js +73 -0
  742. package/src/all/background_page/pagemod/webIntegrationPagemod.js +82 -35
  743. package/src/all/background_page/pagemod/webIntegrationPagemod.test.js +119 -0
  744. package/src/all/background_page/sdk/i18n.js +68 -0
  745. package/src/all/background_page/sdk/port/portManager.js +187 -0
  746. package/src/all/background_page/sdk/port/portManager.test.data.js +32 -0
  747. package/src/all/background_page/sdk/port/portManager.test.js +160 -0
  748. package/src/all/background_page/sdk/port.js +154 -74
  749. package/src/all/background_page/sdk/port.test.js +158 -0
  750. package/src/all/background_page/sdk/scriptExecution.js +125 -94
  751. package/src/all/background_page/sdk/scriptExecution.test.js +143 -0
  752. package/src/all/background_page/sdk/storage.js +16 -16
  753. package/src/all/background_page/service/account/buildApiClientOptionsService.js +37 -0
  754. package/src/all/background_page/service/account/buildApiClientOptionsService.test.js +83 -0
  755. package/src/all/background_page/service/account/getDecryptedUserPrivateKeyService.js +38 -0
  756. package/src/all/background_page/service/account/getDecryptedUserPrivateKeyService.test.js +44 -0
  757. package/src/all/background_page/service/account/getLegacyAccountService.js +67 -0
  758. package/src/all/background_page/service/account/updateSsoCredentialsService.js +88 -0
  759. package/src/all/background_page/service/accountRecovery/buildApprovedAccountRecoveryUserSettingEntityService.js +115 -0
  760. package/src/all/background_page/service/accountRecovery/buildApprovedAccountRecoveryUserSettingEntityService.service.test.js +83 -0
  761. package/src/all/background_page/service/accountRecovery/decryptPrivateKeyPasswordDataService.js +74 -0
  762. package/src/all/background_page/service/accountRecovery/decryptPrivateKeyPasswordDataService.test.js +125 -0
  763. package/src/all/background_page/service/accountRecovery/decryptResponseDataService.js +66 -0
  764. package/src/all/background_page/service/accountRecovery/decryptResponseDataService.test.js +112 -0
  765. package/src/all/background_page/service/accountRecovery/getRequestLocalAccountService.js +52 -0
  766. package/src/all/background_page/service/accountRecovery/getRequestLocalAccountService.test.js +77 -0
  767. package/src/all/background_page/service/accountRecovery/parseAccountRecoveryUrlService.js +61 -0
  768. package/src/all/background_page/service/accountRecovery/parseAccountRecoveryUrlService.test.js +60 -0
  769. package/src/all/background_page/service/api/abstract/abstractService.js +13 -10
  770. package/src/all/background_page/service/api/abstract/abstractService.test.js +8 -16
  771. package/src/all/background_page/service/api/accountRecovery/accountRecoveryContinueService.js +52 -0
  772. package/src/all/background_page/service/api/accountRecovery/accountRecoveryOrganizationPolicyService.js +155 -0
  773. package/src/all/background_page/service/api/accountRecovery/accountRecoveryOrganizationPolicyService.test.data.js +25 -0
  774. package/src/all/background_page/service/api/accountRecovery/accountRecoveryOrganizationPolicyService.test.js +59 -0
  775. package/src/all/background_page/service/api/accountRecovery/accountRecoveryPrivateKeyPasswordService.js +52 -0
  776. package/src/all/background_page/service/api/accountRecovery/accountRecoveryRequestService.js +122 -0
  777. package/src/all/background_page/service/api/accountRecovery/accountRecoveryResponseService.js +50 -0
  778. package/src/all/background_page/service/api/accountRecovery/accountRecoveryUserService.js +54 -0
  779. package/src/all/background_page/service/api/accountRecovery/validateAccountRecoveryOrganizationPrivateKeyService.js +47 -0
  780. package/src/all/background_page/service/api/accountRecovery/validateAccountRecoveryOrganizationPrivateKeyService.test.data.js +69 -0
  781. package/src/all/background_page/service/api/accountRecovery/validateAccountRecoveryOrganizationPrivateKeyService.test.js +52 -0
  782. package/src/all/background_page/service/api/accountSettings/accountSettingsService.js +31 -4
  783. package/src/all/background_page/service/api/actionLog/actionLogService.js +3 -3
  784. package/src/all/background_page/service/api/auth/authService.js +47 -13
  785. package/src/all/background_page/service/api/auth/authService.test.js +103 -0
  786. package/src/all/background_page/service/api/comment/commentService.js +4 -3
  787. package/src/all/background_page/service/api/favorite/favoriteService.js +4 -4
  788. package/src/all/background_page/service/api/folder/folderService.js +8 -9
  789. package/src/all/background_page/service/api/group/groupService.js +16 -12
  790. package/src/all/background_page/service/api/group/groupService.test.js +6 -11
  791. package/src/all/background_page/service/api/mobileTransferService/mobileTransferService.js +84 -0
  792. package/src/all/background_page/service/api/move/moveService.js +5 -5
  793. package/src/all/background_page/service/api/multiFactorAuthentication/multiFactorAuthenticationPolicyService.js +53 -0
  794. package/src/all/background_page/service/api/multiFactorAuthentication/multiFactorAuthenticationService.js +82 -2
  795. package/src/all/background_page/service/api/organizationSettings/organizationSettingsService.js +58 -0
  796. package/src/all/background_page/service/api/passwordExpiry/passwordExpiryResourceService.js +52 -0
  797. package/src/all/background_page/service/api/passwordExpiry/passwordExpiryResourceService.test.js +82 -0
  798. package/src/all/background_page/service/api/passwordExpiry/passwordExpirySettingsService.js +72 -0
  799. package/src/all/background_page/service/api/passwordExpiry/passwordExpirySettingsService.test.js +157 -0
  800. package/src/all/background_page/service/api/passwordPolicies/passwordPoliciesService.js +92 -0
  801. package/src/all/background_page/service/api/passwordPolicies/passwordPoliciesService.test.js +127 -0
  802. package/src/all/background_page/service/api/resource/resourceLocalStorageUpdateService.js +112 -0
  803. package/src/all/background_page/service/api/resource/resourceLocalStorageUpdateService.test.js +109 -0
  804. package/src/all/background_page/service/api/resource/resourceService.js +6 -6
  805. package/src/all/background_page/service/api/resourceType/resourceTypeService.js +2 -2
  806. package/src/all/background_page/service/api/role/roleService.js +2 -2
  807. package/src/all/background_page/service/api/setup/setupService.js +51 -22
  808. package/src/all/background_page/service/api/share/shareService.js +35 -3
  809. package/src/all/background_page/service/api/sso/ssoDryRunService.js +68 -0
  810. package/src/all/background_page/service/api/sso/ssoKitServerPartService.js +81 -0
  811. package/src/all/background_page/service/api/sso/ssoLoginService.js +67 -0
  812. package/src/all/background_page/service/api/sso/ssoSettingsService.js +105 -0
  813. package/src/all/background_page/service/api/subscription/subscriptionService.js +63 -0
  814. package/src/all/background_page/service/api/tag/tagService.js +3 -3
  815. package/src/all/background_page/service/api/user/userService.js +21 -58
  816. package/src/all/background_page/service/api/userPassphrasePolicies/userPassphrasePoliciesService.js +63 -0
  817. package/src/all/background_page/service/api/userPassphrasePolicies/userPassphrasePoliciesService.test.js +121 -0
  818. package/src/all/background_page/service/app/parseAppUrlService.js +66 -0
  819. package/src/all/background_page/service/app/parseAppUrlService.test.js +155 -0
  820. package/src/all/background_page/service/auth/parseAuthUrlService.js +37 -0
  821. package/src/all/background_page/service/auth/parseAuthUrlService.test.js +56 -0
  822. package/src/all/background_page/service/auth/startLoopAuthSessionCheckService.js +76 -0
  823. package/src/all/background_page/service/auth/startLoopAuthSessionCheckService.test.js +91 -0
  824. package/src/all/background_page/service/auth.js +20 -106
  825. package/src/all/background_page/service/cache/resourceInProgressCache.service.js +117 -0
  826. package/src/all/background_page/service/cache/resourceInProgressCache.service.test.js +102 -0
  827. package/src/all/background_page/service/crypto/checkPassphraseService.js +52 -0
  828. package/src/all/background_page/service/crypto/compareGpgKeyService.js +40 -0
  829. package/src/all/background_page/service/crypto/compareGpgKeyService.test.js +51 -0
  830. package/src/all/background_page/service/crypto/cryptoRandomValuesService.js +30 -0
  831. package/src/all/background_page/service/crypto/cryptoRandomValuesService.test.js +26 -0
  832. package/src/all/background_page/service/crypto/decryptMessageService.js +97 -0
  833. package/src/all/background_page/service/crypto/decryptMessageService.test.js +189 -0
  834. package/src/all/background_page/service/crypto/decryptPrivateKeyService.js +45 -0
  835. package/src/all/background_page/service/crypto/decryptPrivateKeyService.test.js +41 -0
  836. package/src/all/background_page/service/crypto/decryptSsoPassphraseService.js +77 -0
  837. package/src/all/background_page/service/crypto/decryptSsoPassphraseService.test.js +105 -0
  838. package/src/all/background_page/service/crypto/encryptMessageService.js +63 -0
  839. package/src/all/background_page/service/crypto/encryptMessageService.test.js +149 -0
  840. package/src/all/background_page/service/crypto/encryptPrivateKeyService.js +40 -0
  841. package/src/all/background_page/service/crypto/encryptPrivateKeyService.test.js +61 -0
  842. package/src/all/background_page/service/crypto/encryptSsoPassphraseService.js +52 -0
  843. package/src/all/background_page/service/crypto/encryptSsoPassphraseService.test.js +63 -0
  844. package/src/all/background_page/service/crypto/generateGpgKeyPairService.js +85 -0
  845. package/src/all/background_page/service/crypto/generateGpgKeyPairService.test.js +112 -0
  846. package/src/all/background_page/service/crypto/generateSsoIvService.js +27 -0
  847. package/src/all/background_page/service/crypto/generateSsoIvService.test.js +41 -0
  848. package/src/all/background_page/service/crypto/generateSsoKeyService.js +32 -0
  849. package/src/all/background_page/service/crypto/generateSsoKeyService.test.js +43 -0
  850. package/src/all/background_page/service/crypto/getGpgKeyCreationDateService.js +41 -0
  851. package/src/all/background_page/service/crypto/getGpgKeyCreationDateService.test.js +59 -0
  852. package/src/all/background_page/service/crypto/getGpgKeyInfoService.js +152 -0
  853. package/src/all/background_page/service/crypto/getGpgKeyInfoService.test.data.js +100 -0
  854. package/src/all/background_page/service/crypto/getGpgKeyInfoService.test.js +155 -0
  855. package/src/all/background_page/service/crypto/revokeGpgKeyService.js +35 -0
  856. package/src/all/background_page/service/crypto/revokeGpgKeyService.test.js +35 -0
  857. package/src/all/background_page/service/crypto/signGpgKeyService.js +31 -0
  858. package/src/all/background_page/service/crypto/signGpgKeyService.test.js +41 -0
  859. package/src/all/background_page/service/crypto/signMessageService.js +55 -0
  860. package/src/all/background_page/service/crypto/signMessageService.test.js +94 -0
  861. package/src/all/background_page/service/crypto/verifyGpgKeyService.js +34 -0
  862. package/src/all/background_page/service/crypto/verifyGpgKeyService.test.js +99 -0
  863. package/src/all/background_page/service/crypto/verifyMessageSign.js +56 -0
  864. package/src/all/background_page/service/crypto/verifyMessageSign.test.data.js +44 -0
  865. package/src/all/background_page/service/crypto/verifyMessageSign.test.js +116 -0
  866. package/src/all/background_page/service/file/fileService.js +67 -0
  867. package/src/all/background_page/service/file/fileService.test.js +66 -0
  868. package/src/all/background_page/service/indexedDB_storage/ssoDataStorage.js +290 -0
  869. package/src/all/background_page/service/invitation/postponeUserSettingInvitationService.js +60 -0
  870. package/src/all/background_page/service/invitation/postponeUserSettingInvitationService.test.js +52 -0
  871. package/src/all/background_page/service/localStorage/localStorageService.js +73 -0
  872. package/src/all/background_page/service/localStorage/localStorageService.test.js +102 -0
  873. package/src/all/background_page/service/local_storage/AccountLocalStorage.test.js +216 -0
  874. package/src/all/background_page/service/local_storage/accountLocalStorage.js +118 -0
  875. package/src/all/background_page/service/local_storage/authStatusLocalStorage.js +8 -21
  876. package/src/all/background_page/service/local_storage/folderLocalStorage.js +20 -34
  877. package/src/all/background_page/service/local_storage/groupLocalStorage.js +17 -31
  878. package/src/all/background_page/service/local_storage/passwordExpirySettingsLocalStorage.js +73 -0
  879. package/src/all/background_page/service/local_storage/passwordExpirySettingsLocalStorage.test.js +72 -0
  880. package/src/all/background_page/service/local_storage/passwordGeneratorLocalStorage.js +36 -0
  881. package/src/all/background_page/service/local_storage/passwordPoliciesLocalStorage.js +98 -0
  882. package/src/all/background_page/service/local_storage/rbacLocalStorage.js +109 -0
  883. package/src/all/background_page/service/local_storage/rbacLocalStorage.test.js +68 -0
  884. package/src/all/background_page/service/local_storage/resourceLocalStorage.js +89 -44
  885. package/src/all/background_page/service/local_storage/resourceTypeLocalStorage.js +17 -29
  886. package/src/all/background_page/service/local_storage/ressourceGridSettingLocalStorage.js +70 -0
  887. package/src/all/background_page/service/local_storage/rolesLocalStorage.js +17 -29
  888. package/src/all/background_page/service/local_storage/userLocalStorage.js +25 -36
  889. package/src/all/background_page/service/local_storage/userRememberMeLatestChoiceLocalStorage.js +82 -0
  890. package/src/all/background_page/service/local_storage/userRememberMeLatestChoiceLocalStorage.test.js +74 -0
  891. package/src/all/background_page/service/passphrase/getPassphraseService.js +152 -0
  892. package/src/all/background_page/service/passphrase/getPassphraseService.test.js +258 -0
  893. package/src/all/background_page/service/passwordExpirySettings/passwordExpirySettingsGetOrFindService.js +49 -0
  894. package/src/all/background_page/service/passwordExpirySettings/passwordExpirySettingsGetOrFindService.test.js +45 -0
  895. package/src/all/background_page/service/progress/progressService.js +120 -0
  896. package/src/all/background_page/service/progress/progressService.test.js +69 -0
  897. package/src/all/background_page/service/publicWebsite/parsePublicWebsiteUrlService.js +35 -0
  898. package/src/all/background_page/service/publicWebsite/parsePublicWebsiteUrlService.test.js +48 -0
  899. package/src/all/background_page/service/recover/buildAccountRecoverService.js +33 -0
  900. package/src/all/background_page/service/recover/buildAccountRecoverService.test.js +43 -0
  901. package/src/all/background_page/service/recover/parseRecoverUrlService.js +69 -0
  902. package/src/all/background_page/service/recover/parseRecoverUrlService.test.js +94 -0
  903. package/src/all/background_page/service/secret/decryptAndParseResourceSecretService.js +60 -0
  904. package/src/all/background_page/service/secret/decryptAndParseResourceSecretService.test.js +83 -0
  905. package/src/all/background_page/service/secret/pownedService.js +63 -0
  906. package/src/all/background_page/service/secret/pownedService.test.js +77 -0
  907. package/src/all/background_page/service/sessionStorage/userMeSessionStorageService.js +94 -0
  908. package/src/all/background_page/service/sessionStorage/userMeSessionStorageService.test.js +146 -0
  909. package/src/all/background_page/service/sessionStorage/workersSessionStorage.js +205 -0
  910. package/src/all/background_page/service/sessionStorage/workersSessionStorage.test.js +138 -0
  911. package/src/all/background_page/service/session_storage/passphraseStorageService.js +176 -0
  912. package/src/all/background_page/service/session_storage/passphraseStorageService.test.js +252 -0
  913. package/src/all/background_page/service/session_storage/ssoKitTemporaryStorageService.js +82 -0
  914. package/src/all/background_page/service/setup/buildAccountSetupService.js +32 -0
  915. package/src/all/background_page/service/setup/buildAccountSetupService.test.js +43 -0
  916. package/src/all/background_page/service/setup/parseSetupUrlService.js +62 -0
  917. package/src/all/background_page/service/setup/parseSetupUrlService.test.js +61 -0
  918. package/src/all/background_page/service/sso/generateSsoKitService.js +73 -0
  919. package/src/all/background_page/service/sso/generateSsoKitService.test.js +72 -0
  920. package/src/all/background_page/service/sso/popupHandlerService.js +164 -0
  921. package/src/all/background_page/service/sso/popupHandlerService.test.js +230 -0
  922. package/src/all/background_page/service/sso/qualifySsoLoginErrorService.js +49 -0
  923. package/src/all/background_page/service/systemRequirementService/systemRequirementService.js +30 -0
  924. package/src/all/background_page/service/systemRequirementService/systemRequirementService.test.js +37 -0
  925. package/src/all/background_page/service/tab/tabService.js +99 -0
  926. package/src/all/background_page/service/tab/tabService.test.js +239 -0
  927. package/src/all/background_page/service/ui/browserExtensionIcon.service.js +66 -0
  928. package/src/all/background_page/service/ui/browserTab.service.js +46 -0
  929. package/src/all/background_page/service/ui/browserTab.service.test.js +81 -0
  930. package/src/all/background_page/service/ui/quickAccess.service.js +94 -0
  931. package/src/all/background_page/service/validator/appEmailValidatorService.js +67 -0
  932. package/src/all/background_page/service/validator/appEmailValidatorService.test.js +61 -0
  933. package/src/all/background_page/service/webIntegration/parseWebIntegrationUrlService.js +44 -0
  934. package/src/all/background_page/service/webIntegration/parseWebIntegrationUrlService.test.js +56 -0
  935. package/src/all/background_page/service/webNavigation/webNavigationService.js +33 -0
  936. package/src/all/background_page/service/webNavigation/webNavigationService.test.js +58 -0
  937. package/src/all/background_page/service/worker/workerService.js +146 -0
  938. package/src/all/background_page/service/worker/workerService.test.js +191 -0
  939. package/src/all/background_page/utils/array/deduplicateObjects.js +8 -8
  940. package/src/all/background_page/utils/array/deduplicateObjects.test.js +13 -13
  941. package/src/all/background_page/utils/array/splitBySize.js +2 -2
  942. package/src/all/background_page/utils/assertions.js +161 -0
  943. package/src/all/background_page/utils/assertions.test.data.js +19 -0
  944. package/src/all/background_page/utils/assertions.test.js +238 -0
  945. package/src/all/background_page/utils/format/base64.js +10 -9
  946. package/src/all/background_page/utils/format/binaryConvert.js +47 -0
  947. package/src/all/background_page/utils/format/emailaddress.js +61 -50
  948. package/src/all/background_page/utils/format/string.js +202 -158
  949. package/src/all/background_page/utils/lock.js +33 -28
  950. package/src/all/background_page/utils/openpgp/openpgpAssertions.js +314 -0
  951. package/src/all/background_page/utils/openpgp/openpgpAssertions.test.js +576 -0
  952. package/src/all/background_page/utils/promise/promiseTimeoutService.js +71 -0
  953. package/src/all/background_page/utils/promise/promiseTimeoutService.test.js +105 -0
  954. package/src/all/{data/js/quickaccess/popup/components/HomePage → background_page/utils/url}/canSuggestUrl.js +57 -24
  955. package/src/all/{data/js/quickaccess/popup/components/HomePage → background_page/utils/url}/canSuggestUrl.test.js +14 -3
  956. package/src/all/background_page/utils/url/hasSameOriginUrl.js +27 -0
  957. package/src/all/background_page/utils/uuid.js +12 -11
  958. package/src/all/background_page/utils/validatorRules.js +4 -4
  959. package/src/all/common/polyfill/browserPolyfill.js +31 -0
  960. package/src/all/common/polyfill/scriptingPolyfill.js +115 -0
  961. package/src/all/common/polyfill/scriptingPolyfill.test.js +125 -0
  962. package/src/all/common/polyfill/sessionStoragePolyfill.js +78 -0
  963. package/src/all/common/polyfill/sessionStoragePolyfill.test.js +203 -0
  964. package/src/all/contentScripts/js/app/AccountRecovery.js +40 -0
  965. package/src/all/{content_scripts → contentScripts}/js/app/App.js +14 -23
  966. package/src/all/contentScripts/js/app/BrowserIntegration.js +26 -0
  967. package/src/all/{content_scripts → contentScripts}/js/app/Login.js +14 -22
  968. package/src/all/contentScripts/js/app/PublicWebsiteSignIn.js +26 -0
  969. package/src/all/{content_scripts → contentScripts}/js/app/Recover.js +14 -22
  970. package/src/all/{content_scripts → contentScripts}/js/app/Setup.js +15 -23
  971. package/src/all/contentScripts/js/controller/connectPortController.js +37 -0
  972. package/src/all/contentScripts/js/controller/connectPortController.test.js +51 -0
  973. package/src/all/contentScripts/js/message/messageEventHandler.js +63 -0
  974. package/src/all/contentScripts/js/message/messageEventHandler.test.data.js +30 -0
  975. package/src/all/contentScripts/js/message/messageEventHandler.test.js +154 -0
  976. package/src/all/contentScripts/js/message/messageEventHandlerConstructorMock.test.data.js +18 -0
  977. package/src/all/contentScripts/js/service/messageService.js +76 -0
  978. package/src/all/contentScripts/js/service/messageService.test.js +54 -0
  979. package/src/all/locales/de-DE/common.json +94 -0
  980. package/src/all/locales/en-UK/common.json +94 -0
  981. package/src/all/locales/es-ES/common.json +94 -0
  982. package/src/all/locales/fr-FR/common.json +94 -0
  983. package/src/all/locales/it-IT/common.json +94 -0
  984. package/src/all/locales/ja-JP/common.json +94 -0
  985. package/src/all/locales/ko-KR/common.json +94 -0
  986. package/src/all/locales/lt-LT/common.json +94 -0
  987. package/src/all/locales/nl-NL/common.json +94 -0
  988. package/src/all/locales/pl-PL/common.json +94 -0
  989. package/src/all/locales/pt-BR/common.json +94 -0
  990. package/src/all/locales/ro-RO/common.json +94 -0
  991. package/src/all/locales/ru-RU/common.json +94 -0
  992. package/src/all/locales/sv-SE/common.json +94 -0
  993. package/src/all/webAccessibleResources/js/app/AccountRecovery.js +30 -0
  994. package/src/all/{data → webAccessibleResources}/js/app/App.js +5 -25
  995. package/src/all/webAccessibleResources/js/app/Download.js +33 -0
  996. package/src/all/webAccessibleResources/js/app/InFormCallToAction.js +29 -0
  997. package/src/all/webAccessibleResources/js/app/InFormMenu.js +29 -0
  998. package/src/all/{data → webAccessibleResources}/js/app/Login.js +5 -24
  999. package/src/all/webAccessibleResources/js/app/QuickAccess.js +37 -0
  1000. package/src/all/{data → webAccessibleResources}/js/app/Recover.js +4 -21
  1001. package/src/all/{data → webAccessibleResources}/js/app/Setup.js +4 -21
  1002. package/src/all/webAccessibleResources/js/lib/port.js +187 -0
  1003. package/src/all/webAccessibleResources/js/lib/port.test.js +152 -0
  1004. package/src/all/{data → webAccessibleResources}/js/themes/stylesheet.js +49 -34
  1005. package/src/all/webAccessibleResources/passbolt-iframe-account-recovery.html +24 -0
  1006. package/src/all/webAccessibleResources/passbolt-iframe-app.html +67 -0
  1007. package/src/all/webAccessibleResources/passbolt-iframe-file.html +10 -0
  1008. package/src/all/webAccessibleResources/passbolt-iframe-in-form-call-to-action.html +12 -0
  1009. package/src/all/webAccessibleResources/passbolt-iframe-in-form-menu.html +12 -0
  1010. package/src/all/{data → webAccessibleResources}/passbolt-iframe-login.html +2 -2
  1011. package/src/all/{data → webAccessibleResources}/passbolt-iframe-recover.html +2 -2
  1012. package/src/all/{data → webAccessibleResources}/passbolt-iframe-setup.html +2 -2
  1013. package/src/all/webAccessibleResources/quickaccess.html +16 -0
  1014. package/src/chrome/manifest.json +18 -14
  1015. package/src/chrome-mv3/index.js +60 -0
  1016. package/src/chrome-mv3/manifest.json +60 -0
  1017. package/src/chrome-mv3/serviceWorker.js +14 -0
  1018. package/src/firefox/manifest.json +21 -16
  1019. package/src/safari/manifest.json +50 -0
  1020. package/test/fixtures/pgpKeys/keys.js +419 -0
  1021. package/test/jest-webextension-force-runtime-id-setup-files.js +5 -0
  1022. package/{.jest.custom-kdbx-environment.js → test/jest.custom-kdbx-environment.js} +3 -15
  1023. package/test/jest.setup.js +60 -0
  1024. package/test/matchers/extendExpect.js +31 -0
  1025. package/test/matchers/toBeEqualToOpenpgpKey.js +46 -0
  1026. package/test/matchers/toBeOpenpgpKeySignedBy.js +42 -0
  1027. package/test/matchers/toBeOpenpgpPrivateKey.js +34 -0
  1028. package/test/matchers/toBeOpenpgpPublicKey.js +34 -0
  1029. package/test/matchers/toBeOpenpgpRevokedKey.js +34 -0
  1030. package/test/matchers/toThrowEntityValidationErrorOnProperties.js +41 -0
  1031. package/test/mocks/mockAlarms.js +101 -0
  1032. package/test/mocks/mockApiResponse.js +31 -0
  1033. package/test/mocks/mockCryptoKey.js +62 -0
  1034. package/test/mocks/mockEventListener.js +40 -0
  1035. package/test/mocks/mockExtension.js +60 -0
  1036. package/test/mocks/mockNavigatorLocks.js +30 -0
  1037. package/test/mocks/mockSsoDataStorage.js +86 -0
  1038. package/test/mocks/mockStorage.js +74 -0
  1039. package/test/mocks/mockTextEncoder.js +18 -0
  1040. package/test/mocks/mockWebExtensionPolyfill.js +77 -0
  1041. package/webpack-content-scripts.browser-integration.config.js +57 -0
  1042. package/webpack-content-scripts.config.js +16 -5
  1043. package/webpack-content-scripts.public-website-sign-in.config.js +57 -0
  1044. package/webpack-data.config.js +24 -7
  1045. package/webpack-data.download.config.js +59 -0
  1046. package/webpack-data.in-form-call-to-action.config.js +63 -0
  1047. package/webpack-data.in-form-menu.config.js +63 -0
  1048. package/webpack.background-page.config.js +62 -0
  1049. package/webpack.service-worker.config.js +62 -0
  1050. package/.jest.config.json +0 -5
  1051. package/.jest.transform.js +0 -7
  1052. package/dist/chrome/empty +0 -0
  1053. package/dist/chrome/passbolt-3.0.6-debug.crx +0 -0
  1054. package/dist/chrome/passbolt-3.0.6.crx +0 -0
  1055. package/dist/chrome/passbolt-3.0.6.zip +0 -0
  1056. package/dist/firefox/empty +0 -0
  1057. package/dist/firefox/passbolt-3.0.6-debug.zip +0 -0
  1058. package/dist/firefox/passbolt-3.0.6.zip +0 -0
  1059. package/src/all/background_page/app.js +0 -162
  1060. package/src/all/background_page/controller/authController.js +0 -92
  1061. package/src/all/background_page/controller/browserSettingsController.js +0 -47
  1062. package/src/all/background_page/controller/fileController.js +0 -134
  1063. package/src/all/background_page/controller/passphrase/passphraseController.js +0 -82
  1064. package/src/all/background_page/controller/progress/progressController.js +0 -65
  1065. package/src/all/background_page/controller/recover/recoverController.js +0 -167
  1066. package/src/all/background_page/controller/setup/setupController.js +0 -199
  1067. package/src/all/background_page/error/passboltApiFetchError.js +0 -16
  1068. package/src/all/background_page/event/debugEvents.js +0 -169
  1069. package/src/all/background_page/event/pagmodEvents.js +0 -23
  1070. package/src/all/background_page/event/siteSettingsEvents.js +0 -61
  1071. package/src/all/background_page/model/crypto.js +0 -179
  1072. package/src/all/background_page/model/entity/abstract/entity.js +0 -99
  1073. package/src/all/background_page/model/entity/abstract/entity.test.js +0 -86
  1074. package/src/all/background_page/model/entity/abstract/entityCollection.js +0 -144
  1075. package/src/all/background_page/model/entity/abstract/entityCollection.test.js +0 -107
  1076. package/src/all/background_page/model/entity/abstract/entityCollectionError.js +0 -40
  1077. package/src/all/background_page/model/entity/abstract/entityCollectionError.test.js +0 -55
  1078. package/src/all/background_page/model/entity/abstract/entitySchema.js +0 -412
  1079. package/src/all/background_page/model/entity/abstract/entitySchema.test.js +0 -266
  1080. package/src/all/background_page/model/entity/abstract/entityValidationError.js +0 -81
  1081. package/src/all/background_page/model/entity/abstract/entityValidationError.test.js +0 -64
  1082. package/src/all/background_page/model/entity/gpgkey/generate/generateGpgkeyEntity.js +0 -128
  1083. package/src/all/background_page/model/entity/role/roleEntity.js +0 -162
  1084. package/src/all/background_page/model/entity/role/roleEntity.test.js +0 -84
  1085. package/src/all/background_page/model/entity/role/rolesCollection.js +0 -140
  1086. package/src/all/background_page/model/entity/setup/setupEntity.js +0 -360
  1087. package/src/all/background_page/model/entity/setup/setupEntity.test.js +0 -87
  1088. package/src/all/background_page/model/entity/user/account/userAcountEntity.js +0 -131
  1089. package/src/all/background_page/model/group.js +0 -165
  1090. package/src/all/background_page/model/groupForm.js +0 -331
  1091. package/src/all/background_page/model/key.js +0 -337
  1092. package/src/all/background_page/model/openpgp/OpenpgpModel.js +0 -73
  1093. package/src/all/background_page/model/share.js +0 -171
  1094. package/src/all/background_page/model/siteSettings.js +0 -80
  1095. package/src/all/background_page/model/tabStorage.js +0 -82
  1096. package/src/all/background_page/model/worker.js +0 -124
  1097. package/src/all/background_page/pagemod/appBoostrapPagemod.js +0 -100
  1098. package/src/all/background_page/pagemod/clipboardPagemod.js +0 -37
  1099. package/src/all/background_page/pagemod/debugPagemod.js +0 -45
  1100. package/src/all/background_page/sdk/jsonQ.js +0 -66
  1101. package/src/all/background_page/sdk/l10n.js +0 -17
  1102. package/src/all/background_page/sdk/page-mod.js +0 -337
  1103. package/src/all/background_page/sdk/random.js +0 -11
  1104. package/src/all/background_page/sdk/self.js +0 -10
  1105. package/src/all/background_page/sdk/tab.js +0 -77
  1106. package/src/all/background_page/sdk/worker.js +0 -84
  1107. package/src/all/background_page/service/api/apiClient/apiClient.js +0 -351
  1108. package/src/all/background_page/service/api/apiClient/apiClient.test.js +0 -92
  1109. package/src/all/background_page/service/api/apiClient/apiClientOptions.js +0 -111
  1110. package/src/all/background_page/service/api/apiClient/apiClientOptions.test.js +0 -48
  1111. package/src/all/background_page/service/group.js +0 -72
  1112. package/src/all/background_page/service/share.js +0 -216
  1113. package/src/all/background_page/utils/csrfToken/csrfToken.js +0 -61
  1114. package/src/all/background_page/vendors.js +0 -32
  1115. package/src/all/content_scripts/js/bootstrap.js +0 -81
  1116. package/src/all/data/config-debug.html +0 -308
  1117. package/src/all/data/js/clipboard/clipboard.js +0 -29
  1118. package/src/all/data/js/debug/common.js +0 -76
  1119. package/src/all/data/js/debug/debug.js +0 -387
  1120. package/src/all/data/js/debug/file.js +0 -82
  1121. package/src/all/data/js/debug/profiles.js +0 -820
  1122. package/src/all/data/js/file/fileIframe.js +0 -29
  1123. package/src/all/data/js/include/config-debug.js +0 -20
  1124. package/src/all/data/js/lib/loadscript.js +0 -38
  1125. package/src/all/data/js/lib/message.js +0 -120
  1126. package/src/all/data/js/lib/port.js +0 -231
  1127. package/src/all/data/js/lib/pwnedpasswords.js +0 -34
  1128. package/src/all/data/js/lib/request.js +0 -151
  1129. package/src/all/data/js/lib/secretComplexity.js +0 -209
  1130. package/src/all/data/js/quickaccess/popup/Popup.js +0 -215
  1131. package/src/all/data/js/quickaccess/popup/components/AnimatedSwitch/AnimatedSwitch.js +0 -189
  1132. package/src/all/data/js/quickaccess/popup/components/FilterResourcesByFavoritePage/FilterResourcesByFavoritePage.js +0 -210
  1133. package/src/all/data/js/quickaccess/popup/components/FilterResourcesByGroupPage/FilterResourcesByGroupPage.js +0 -329
  1134. package/src/all/data/js/quickaccess/popup/components/FilterResourcesByItemsIOwnPage/FilterResourcesByItemsIOwnPage.js +0 -210
  1135. package/src/all/data/js/quickaccess/popup/components/FilterResourcesByRecentlyModifiedPage/FilterResourcesByRecentlyModifiedPage.js +0 -204
  1136. package/src/all/data/js/quickaccess/popup/components/FilterResourcesBySharedWithMePage/FilterResourcesBySharedWithMePage.js +0 -210
  1137. package/src/all/data/js/quickaccess/popup/components/FilterResourcesByTagPage/FilterResourcesByTagPage.js +0 -329
  1138. package/src/all/data/js/quickaccess/popup/components/Header/Header.js +0 -50
  1139. package/src/all/data/js/quickaccess/popup/components/HomePage/HomePage.js +0 -296
  1140. package/src/all/data/js/quickaccess/popup/components/LoginPage/LoginPage.js +0 -142
  1141. package/src/all/data/js/quickaccess/popup/components/MoreFiltersPage/MoreFiltersPage.js +0 -84
  1142. package/src/all/data/js/quickaccess/popup/components/PassphraseDialog/PassphraseDialog.js +0 -181
  1143. package/src/all/data/js/quickaccess/popup/components/PassphraseDialog/PassphraseDialog.test.js +0 -49
  1144. package/src/all/data/js/quickaccess/popup/components/PrivateRoute/PrivateRoute.js +0 -37
  1145. package/src/all/data/js/quickaccess/popup/components/ResourceCreatePage/ResourceCreatePage.js +0 -274
  1146. package/src/all/data/js/quickaccess/popup/components/ResourceCreatePage/ResourceCreatePage.test.js +0 -186
  1147. package/src/all/data/js/quickaccess/popup/components/ResourceViewPage/ResourceViewPage.js +0 -296
  1148. package/src/all/data/js/quickaccess/popup/components/Search/Search.js +0 -41
  1149. package/src/all/data/js/quickaccess/popup/components/Search/Search.test.js +0 -44
  1150. package/src/all/data/js/quickaccess/popup/components/SimpleBar/SimpleBar.js +0 -35
  1151. package/src/all/data/js/quickaccess/popup/contexts/AppContext.js +0 -6
  1152. package/src/all/data/js/quickaccess/quickaccess.js +0 -335
  1153. package/src/all/data/js/themes/stylesheet_legacy.js +0 -86
  1154. package/src/all/data/passbolt-iframe-app.html +0 -52
  1155. package/src/all/data/passbolt-iframe-clipboard.html +0 -14
  1156. package/src/all/data/passbolt-iframe-file.html +0 -14
  1157. package/src/all/data/quickaccess.html +0 -15
  1158. package/src/all/data/vendors/browser-polyfill.js +0 -1187
  1159. package/src/all/data/vendors/dom-testing-library-event.js +0 -363
  1160. package/src/all/data/vendors/download.js +0 -167
  1161. package/src/all/data/vendors/farbtastic.js +0 -345
  1162. package/src/all/data/vendors/jquery-filestyle.js +0 -387
  1163. package/src/all/data/vendors/jquery.js +0 -10872
  1164. package/src/all/data/vendors/react-dom.production.min.js +0 -239
  1165. package/src/all/data/vendors/react.production.min.js +0 -32
  1166. package/src/all/data/vendors/sha.js +0 -45
  1167. package/src/all/data/vendors/validator.js +0 -817
  1168. package/src/all/data/vendors/xregexp-all.js +0 -4487
@@ -1,4487 +0,0 @@
1
- /*!
2
- * XRegExp-All 3.0.0
3
- * <http://xregexp.com/>
4
- * Steven Levithan (c) 2012-2015 MIT License
5
- */
6
-
7
- // Module systems magic dance. Don't use strict mode for this function, so it can assign to global.
8
- ;(function(root, definition) {
9
- var self;
10
-
11
- // RequireJS
12
- if (typeof define === 'function') {
13
- define(definition);
14
- // CommonJS
15
- } else if (typeof exports === 'object') {
16
- self = definition();
17
- // Use Node.js's `module.exports`. This supports both `require('xregexp')` and
18
- // `require('xregexp').XRegExp`
19
- (typeof module === 'object' ? (module.exports = self) : exports).XRegExp = self;
20
- // <script>
21
- } else {
22
- // Create global
23
- root.XRegExp = definition();
24
- }
25
- }(this, function() {
26
-
27
- /*!
28
- * XRegExp 3.0.0
29
- * <http://xregexp.com/>
30
- * Steven Levithan (c) 2007-2015 MIT License
31
- */
32
-
33
- /**
34
- * XRegExp provides augmented, extensible regular expressions. You get additional regex syntax and
35
- * flags, beyond what browsers support natively. XRegExp is also a regex utility belt with tools to
36
- * make your client-side grepping simpler and more powerful, while freeing you from related
37
- * cross-browser inconsistencies.
38
- */
39
- var XRegExp = (function(undefined) {
40
- 'use strict';
41
-
42
- /* ==============================
43
- * Private variables
44
- * ============================== */
45
-
46
- var // Internal reference to the `XRegExp` object
47
- self,
48
- // Property name used for extended regex instance data
49
- REGEX_DATA = 'xregexp',
50
- // Optional features that can be installed and uninstalled
51
- features = {
52
- astral: false,
53
- natives: false
54
- },
55
- // Native methods to use and restore ('native' is an ES3 reserved keyword)
56
- nativ = {
57
- exec: RegExp.prototype.exec,
58
- test: RegExp.prototype.test,
59
- match: String.prototype.match,
60
- replace: String.prototype.replace,
61
- split: String.prototype.split
62
- },
63
- // Storage for fixed/extended native methods
64
- fixed = {},
65
- // Storage for regexes cached by `XRegExp.cache`
66
- regexCache = {},
67
- // Storage for pattern details cached by the `XRegExp` constructor
68
- patternCache = {},
69
- // Storage for regex syntax tokens added internally or by `XRegExp.addToken`
70
- tokens = [],
71
- // Token scopes
72
- defaultScope = 'default',
73
- classScope = 'class',
74
- // Regexes that match native regex syntax, including octals
75
- nativeTokens = {
76
- // Any native multicharacter token in default scope, or any single character
77
- 'default': /\\(?:0(?:[0-3][0-7]{0,2}|[4-7][0-7]?)?|[1-9]\d*|x[\dA-Fa-f]{2}|u(?:[\dA-Fa-f]{4}|{[\dA-Fa-f]+})|c[A-Za-z]|[\s\S])|\(\?[:=!]|[?*+]\?|{\d+(?:,\d*)?}\??|[\s\S]/,
78
- // Any native multicharacter token in character class scope, or any single character
79
- 'class': /\\(?:[0-3][0-7]{0,2}|[4-7][0-7]?|x[\dA-Fa-f]{2}|u(?:[\dA-Fa-f]{4}|{[\dA-Fa-f]+})|c[A-Za-z]|[\s\S])|[\s\S]/
80
- },
81
- // Any backreference or dollar-prefixed character in replacement strings
82
- replacementToken = /\$(?:{([\w$]+)}|(\d\d?|[\s\S]))/g,
83
- // Check for correct `exec` handling of nonparticipating capturing groups
84
- correctExecNpcg = nativ.exec.call(/()??/, '')[1] === undefined,
85
- // Check for ES6 `u` flag support
86
- hasNativeU = (function() {
87
- var isSupported = true;
88
- try {
89
- new RegExp('', 'u');
90
- } catch (exception) {
91
- isSupported = false;
92
- }
93
- return isSupported;
94
- }()),
95
- // Check for ES6 `y` flag support
96
- hasNativeY = (function() {
97
- var isSupported = true;
98
- try {
99
- new RegExp('', 'y');
100
- } catch (exception) {
101
- isSupported = false;
102
- }
103
- return isSupported;
104
- }()),
105
- // Check for ES6 `flags` prop support
106
- hasFlagsProp = /a/.flags !== undefined,
107
- // Tracker for known flags, including addon flags
108
- registeredFlags = {
109
- g: true,
110
- i: true,
111
- m: true,
112
- u: hasNativeU,
113
- y: hasNativeY
114
- },
115
- // Shortcut to `Object.prototype.toString`
116
- toString = {}.toString,
117
- // Shortcut to `XRegExp.addToken`
118
- add;
119
-
120
- /* ==============================
121
- * Private functions
122
- * ============================== */
123
-
124
- /**
125
- * Attaches extended data and `XRegExp.prototype` properties to a regex object.
126
- *
127
- * @private
128
- * @param {RegExp} regex Regex to augment.
129
- * @param {Array} captureNames Array with capture names, or `null`.
130
- * @param {String} xSource XRegExp pattern used to generate `regex`, or `null` if N/A.
131
- * @param {String} xFlags XRegExp flags used to generate `regex`, or `null` if N/A.
132
- * @param {Boolean} [isInternalOnly=false] Whether the regex will be used only for internal
133
- * operations, and never exposed to users. For internal-only regexes, we can improve perf by
134
- * skipping some operations like attaching `XRegExp.prototype` properties.
135
- * @returns {RegExp} Augmented regex.
136
- */
137
- function augment(regex, captureNames, xSource, xFlags, isInternalOnly) {
138
- var p;
139
-
140
- regex[REGEX_DATA] = {
141
- captureNames: captureNames
142
- };
143
-
144
- if (isInternalOnly) {
145
- return regex;
146
- }
147
-
148
- // Can't auto-inherit these since the XRegExp constructor returns a nonprimitive value
149
- if (regex.__proto__) {
150
- regex.__proto__ = self.prototype;
151
- } else {
152
- for (p in self.prototype) {
153
- // A `self.prototype.hasOwnProperty(p)` check wouldn't be worth it here, since this
154
- // is performance sensitive, and enumerable `Object.prototype` or `RegExp.prototype`
155
- // extensions exist on `regex.prototype` anyway
156
- regex[p] = self.prototype[p];
157
- }
158
- }
159
-
160
- regex[REGEX_DATA].source = xSource;
161
- // Emulate the ES6 `flags` prop by ensuring flags are in alphabetical order
162
- regex[REGEX_DATA].flags = xFlags ? xFlags.split('').sort().join('') : xFlags;
163
-
164
- return regex;
165
- }
166
-
167
- /**
168
- * Removes any duplicate characters from the provided string.
169
- *
170
- * @private
171
- * @param {String} str String to remove duplicate characters from.
172
- * @returns {String} String with any duplicate characters removed.
173
- */
174
- function clipDuplicates(str) {
175
- return nativ.replace.call(str, /([\s\S])(?=[\s\S]*\1)/g, '');
176
- }
177
-
178
- /**
179
- * Copies a regex object while preserving extended data and augmenting with `XRegExp.prototype`
180
- * properties. The copy has a fresh `lastIndex` property (set to zero). Allows adding and removing
181
- * flags g and y while copying the regex.
182
- *
183
- * @private
184
- * @param {RegExp} regex Regex to copy.
185
- * @param {Object} [options] Options object with optional properties:
186
- * <li>`addG` {Boolean} Add flag g while copying the regex.
187
- * <li>`addY` {Boolean} Add flag y while copying the regex.
188
- * <li>`removeG` {Boolean} Remove flag g while copying the regex.
189
- * <li>`removeY` {Boolean} Remove flag y while copying the regex.
190
- * <li>`isInternalOnly` {Boolean} Whether the copied regex will be used only for internal
191
- * operations, and never exposed to users. For internal-only regexes, we can improve perf by
192
- * skipping some operations like attaching `XRegExp.prototype` properties.
193
- * @returns {RegExp} Copy of the provided regex, possibly with modified flags.
194
- */
195
- function copyRegex(regex, options) {
196
- if (!self.isRegExp(regex)) {
197
- throw new TypeError('Type RegExp expected');
198
- }
199
-
200
- var xData = regex[REGEX_DATA] || {},
201
- flags = getNativeFlags(regex),
202
- flagsToAdd = '',
203
- flagsToRemove = '',
204
- xregexpSource = null,
205
- xregexpFlags = null;
206
-
207
- options = options || {};
208
-
209
- if (options.removeG) {flagsToRemove += 'g';}
210
- if (options.removeY) {flagsToRemove += 'y';}
211
- if (flagsToRemove) {
212
- flags = nativ.replace.call(flags, new RegExp('[' + flagsToRemove + ']+', 'g'), '');
213
- }
214
-
215
- if (options.addG) {flagsToAdd += 'g';}
216
- if (options.addY) {flagsToAdd += 'y';}
217
- if (flagsToAdd) {
218
- flags = clipDuplicates(flags + flagsToAdd);
219
- }
220
-
221
- if (!options.isInternalOnly) {
222
- if (xData.source !== undefined) {
223
- xregexpSource = xData.source;
224
- }
225
- // null or undefined; don't want to add to `flags` if the previous value was null, since
226
- // that indicates we're not tracking original precompilation flags
227
- if (xData.flags != null) {
228
- // Flags are only added for non-internal regexes by `XRegExp.globalize`. Flags are
229
- // never removed for non-internal regexes, so don't need to handle it
230
- xregexpFlags = flagsToAdd ? clipDuplicates(xData.flags + flagsToAdd) : xData.flags;
231
- }
232
- }
233
-
234
- // Augment with `XRegExp.prototype` properties, but use the native `RegExp` constructor to
235
- // avoid searching for special tokens. That would be wrong for regexes constructed by
236
- // `RegExp`, and unnecessary for regexes constructed by `XRegExp` because the regex has
237
- // already undergone the translation to native regex syntax
238
- regex = augment(
239
- new RegExp(regex.source, flags),
240
- hasNamedCapture(regex) ? xData.captureNames.slice(0) : null,
241
- xregexpSource,
242
- xregexpFlags,
243
- options.isInternalOnly
244
- );
245
-
246
- return regex;
247
- }
248
-
249
- /**
250
- * Converts hexadecimal to decimal.
251
- *
252
- * @private
253
- * @param {String} hex
254
- * @returns {Number}
255
- */
256
- function dec(hex) {
257
- return parseInt(hex, 16);
258
- }
259
-
260
- /**
261
- * Returns native `RegExp` flags used by a regex object.
262
- *
263
- * @private
264
- * @param {RegExp} regex Regex to check.
265
- * @returns {String} Native flags in use.
266
- */
267
- function getNativeFlags(regex) {
268
- return hasFlagsProp ?
269
- regex.flags :
270
- // Explicitly using `RegExp.prototype.toString` (rather than e.g. `String` or
271
- // concatenation with an empty string) allows this to continue working predictably when
272
- // `XRegExp.proptotype.toString` is overriden
273
- nativ.exec.call(/\/([a-z]*)$/i, RegExp.prototype.toString.call(regex))[1];
274
- }
275
-
276
- /**
277
- * Determines whether a regex has extended instance data used to track capture names.
278
- *
279
- * @private
280
- * @param {RegExp} regex Regex to check.
281
- * @returns {Boolean} Whether the regex uses named capture.
282
- */
283
- function hasNamedCapture(regex) {
284
- return !!(regex[REGEX_DATA] && regex[REGEX_DATA].captureNames);
285
- }
286
-
287
- /**
288
- * Converts decimal to hexadecimal.
289
- *
290
- * @private
291
- * @param {Number|String} dec
292
- * @returns {String}
293
- */
294
- function hex(dec) {
295
- return parseInt(dec, 10).toString(16);
296
- }
297
-
298
- /**
299
- * Returns the first index at which a given value can be found in an array.
300
- *
301
- * @private
302
- * @param {Array} array Array to search.
303
- * @param {*} value Value to locate in the array.
304
- * @returns {Number} Zero-based index at which the item is found, or -1.
305
- */
306
- function indexOf(array, value) {
307
- var len = array.length, i;
308
-
309
- for (i = 0; i < len; ++i) {
310
- if (array[i] === value) {
311
- return i;
312
- }
313
- }
314
-
315
- return -1;
316
- }
317
-
318
- /**
319
- * Determines whether a value is of the specified type, by resolving its internal [[Class]].
320
- *
321
- * @private
322
- * @param {*} value Object to check.
323
- * @param {String} type Type to check for, in TitleCase.
324
- * @returns {Boolean} Whether the object matches the type.
325
- */
326
- function isType(value, type) {
327
- return toString.call(value) === '[object ' + type + ']';
328
- }
329
-
330
- /**
331
- * Checks whether the next nonignorable token after the specified position is a quantifier.
332
- *
333
- * @private
334
- * @param {String} pattern Pattern to search within.
335
- * @param {Number} pos Index in `pattern` to search at.
336
- * @param {String} flags Flags used by the pattern.
337
- * @returns {Boolean} Whether the next token is a quantifier.
338
- */
339
- function isQuantifierNext(pattern, pos, flags) {
340
- return nativ.test.call(
341
- flags.indexOf('x') > -1 ?
342
- // Ignore any leading whitespace, line comments, and inline comments
343
- /^(?:\s+|#.*|\(\?#[^)]*\))*(?:[?*+]|{\d+(?:,\d*)?})/ :
344
- // Ignore any leading inline comments
345
- /^(?:\(\?#[^)]*\))*(?:[?*+]|{\d+(?:,\d*)?})/,
346
- pattern.slice(pos)
347
- );
348
- }
349
-
350
- /**
351
- * Pads the provided string with as many leading zeros as needed to get to length 4. Used to produce
352
- * fixed-length hexadecimal values.
353
- *
354
- * @private
355
- * @param {String} str
356
- * @returns {String}
357
- */
358
- function pad4(str) {
359
- while (str.length < 4) {
360
- str = '0' + str;
361
- }
362
- return str;
363
- }
364
-
365
- /**
366
- * Checks for flag-related errors, and strips/applies flags in a leading mode modifier. Offloads
367
- * the flag preparation logic from the `XRegExp` constructor.
368
- *
369
- * @private
370
- * @param {String} pattern Regex pattern, possibly with a leading mode modifier.
371
- * @param {String} flags Any combination of flags.
372
- * @returns {Object} Object with properties `pattern` and `flags`.
373
- */
374
- function prepareFlags(pattern, flags) {
375
- var i;
376
-
377
- // Recent browsers throw on duplicate flags, so copy this behavior for nonnative flags
378
- if (clipDuplicates(flags) !== flags) {
379
- throw new SyntaxError('Invalid duplicate regex flag ' + flags);
380
- }
381
-
382
- // Strip and apply a leading mode modifier with any combination of flags except g or y
383
- pattern = nativ.replace.call(pattern, /^\(\?([\w$]+)\)/, function($0, $1) {
384
- if (nativ.test.call(/[gy]/, $1)) {
385
- throw new SyntaxError('Cannot use flag g or y in mode modifier ' + $0);
386
- }
387
- // Allow duplicate flags within the mode modifier
388
- flags = clipDuplicates(flags + $1);
389
- return '';
390
- });
391
-
392
- // Throw on unknown native or nonnative flags
393
- for (i = 0; i < flags.length; ++i) {
394
- if (!registeredFlags[flags.charAt(i)]) {
395
- throw new SyntaxError('Unknown regex flag ' + flags.charAt(i));
396
- }
397
- }
398
-
399
- return {
400
- pattern: pattern,
401
- flags: flags
402
- };
403
- }
404
-
405
- /**
406
- * Prepares an options object from the given value.
407
- *
408
- * @private
409
- * @param {String|Object} value Value to convert to an options object.
410
- * @returns {Object} Options object.
411
- */
412
- function prepareOptions(value) {
413
- var options = {};
414
-
415
- if (isType(value, 'String')) {
416
- self.forEach(value, /[^\s,]+/, function(match) {
417
- options[match] = true;
418
- });
419
-
420
- return options;
421
- }
422
-
423
- return value;
424
- }
425
-
426
- /**
427
- * Registers a flag so it doesn't throw an 'unknown flag' error.
428
- *
429
- * @private
430
- * @param {String} flag Single-character flag to register.
431
- */
432
- function registerFlag(flag) {
433
- if (!/^[\w$]$/.test(flag)) {
434
- throw new Error('Flag must be a single character A-Za-z0-9_$');
435
- }
436
-
437
- registeredFlags[flag] = true;
438
- }
439
-
440
- /**
441
- * Runs built-in and custom regex syntax tokens in reverse insertion order at the specified
442
- * position, until a match is found.
443
- *
444
- * @private
445
- * @param {String} pattern Original pattern from which an XRegExp object is being built.
446
- * @param {String} flags Flags being used to construct the regex.
447
- * @param {Number} pos Position to search for tokens within `pattern`.
448
- * @param {Number} scope Regex scope to apply: 'default' or 'class'.
449
- * @param {Object} context Context object to use for token handler functions.
450
- * @returns {Object} Object with properties `matchLength`, `output`, and `reparse`; or `null`.
451
- */
452
- function runTokens(pattern, flags, pos, scope, context) {
453
- var i = tokens.length,
454
- leadChar = pattern.charAt(pos),
455
- result = null,
456
- match,
457
- t;
458
-
459
- // Run in reverse insertion order
460
- while (i--) {
461
- t = tokens[i];
462
- if (
463
- (t.leadChar && t.leadChar !== leadChar) ||
464
- (t.scope !== scope && t.scope !== 'all') ||
465
- (t.flag && flags.indexOf(t.flag) === -1)
466
- ) {
467
- continue;
468
- }
469
-
470
- match = self.exec(pattern, t.regex, pos, 'sticky');
471
- if (match) {
472
- result = {
473
- matchLength: match[0].length,
474
- output: t.handler.call(context, match, scope, flags),
475
- reparse: t.reparse
476
- };
477
- // Finished with token tests
478
- break;
479
- }
480
- }
481
-
482
- return result;
483
- }
484
-
485
- /**
486
- * Enables or disables implicit astral mode opt-in. When enabled, flag A is automatically added to
487
- * all new regexes created by XRegExp. This causes an error to be thrown when creating regexes if
488
- * the Unicode Base addon is not available, since flag A is registered by that addon.
489
- *
490
- * @private
491
- * @param {Boolean} on `true` to enable; `false` to disable.
492
- */
493
- function setAstral(on) {
494
- features.astral = on;
495
- }
496
-
497
- /**
498
- * Enables or disables native method overrides.
499
- *
500
- * @private
501
- * @param {Boolean} on `true` to enable; `false` to disable.
502
- */
503
- function setNatives(on) {
504
- RegExp.prototype.exec = (on ? fixed : nativ).exec;
505
- RegExp.prototype.test = (on ? fixed : nativ).test;
506
- String.prototype.match = (on ? fixed : nativ).match;
507
- String.prototype.replace = (on ? fixed : nativ).replace;
508
- String.prototype.split = (on ? fixed : nativ).split;
509
-
510
- features.natives = on;
511
- }
512
-
513
- /**
514
- * Returns the object, or throws an error if it is `null` or `undefined`. This is used to follow
515
- * the ES5 abstract operation `ToObject`.
516
- *
517
- * @private
518
- * @param {*} value Object to check and return.
519
- * @returns {*} The provided object.
520
- */
521
- function toObject(value) {
522
- // null or undefined
523
- if (value == null) {
524
- throw new TypeError('Cannot convert null or undefined to object');
525
- }
526
-
527
- return value;
528
- }
529
-
530
- /* ==============================
531
- * Constructor
532
- * ============================== */
533
-
534
- /**
535
- * Creates an extended regular expression object for matching text with a pattern. Differs from a
536
- * native regular expression in that additional syntax and flags are supported. The returned object
537
- * is in fact a native `RegExp` and works with all native methods.
538
- *
539
- * @class XRegExp
540
- * @constructor
541
- * @param {String|RegExp} pattern Regex pattern string, or an existing regex object to copy.
542
- * @param {String} [flags] Any combination of flags.
543
- * Native flags:
544
- * <li>`g` - global
545
- * <li>`i` - ignore case
546
- * <li>`m` - multiline anchors
547
- * <li>`u` - unicode (ES6)
548
- * <li>`y` - sticky (Firefox 3+, ES6)
549
- * Additional XRegExp flags:
550
- * <li>`n` - explicit capture
551
- * <li>`s` - dot matches all (aka singleline)
552
- * <li>`x` - free-spacing and line comments (aka extended)
553
- * <li>`A` - astral (requires the Unicode Base addon)
554
- * Flags cannot be provided when constructing one `RegExp` from another.
555
- * @returns {RegExp} Extended regular expression object.
556
- * @example
557
- *
558
- * // With named capture and flag x
559
- * XRegExp('(?<year> [0-9]{4} ) -? # year \n\
560
- * (?<month> [0-9]{2} ) -? # month \n\
561
- * (?<day> [0-9]{2} ) # day ', 'x');
562
- *
563
- * // Providing a regex object copies it. Native regexes are recompiled using native (not XRegExp)
564
- * // syntax. Copies maintain extended data, are augmented with `XRegExp.prototype` properties, and
565
- * // have fresh `lastIndex` properties (set to zero).
566
- * XRegExp(/regex/);
567
- */
568
- self = function(pattern, flags) {
569
- var context = {
570
- hasNamedCapture: false,
571
- captureNames: []
572
- },
573
- scope = defaultScope,
574
- output = '',
575
- pos = 0,
576
- result,
577
- token,
578
- generated,
579
- appliedPattern,
580
- appliedFlags;
581
-
582
- if (self.isRegExp(pattern)) {
583
- if (flags !== undefined) {
584
- throw new TypeError('Cannot supply flags when copying a RegExp');
585
- }
586
- return copyRegex(pattern);
587
- }
588
-
589
- // Copy the argument behavior of `RegExp`
590
- pattern = pattern === undefined ? '' : String(pattern);
591
- flags = flags === undefined ? '' : String(flags);
592
-
593
- if (self.isInstalled('astral') && flags.indexOf('A') === -1) {
594
- // This causes an error to be thrown if the Unicode Base addon is not available
595
- flags += 'A';
596
- }
597
-
598
- if (!patternCache[pattern]) {
599
- patternCache[pattern] = {};
600
- }
601
-
602
- if (!patternCache[pattern][flags]) {
603
- // Check for flag-related errors, and strip/apply flags in a leading mode modifier
604
- result = prepareFlags(pattern, flags);
605
- appliedPattern = result.pattern;
606
- appliedFlags = result.flags;
607
-
608
- // Use XRegExp's tokens to translate the pattern to a native regex pattern.
609
- // `appliedPattern.length` may change on each iteration if tokens use `reparse`
610
- while (pos < appliedPattern.length) {
611
- do {
612
- // Check for custom tokens at the current position
613
- result = runTokens(appliedPattern, appliedFlags, pos, scope, context);
614
- // If the matched token used the `reparse` option, splice its output into the
615
- // pattern before running tokens again at the same position
616
- if (result && result.reparse) {
617
- appliedPattern = appliedPattern.slice(0, pos) +
618
- result.output +
619
- appliedPattern.slice(pos + result.matchLength);
620
- }
621
- } while (result && result.reparse);
622
-
623
- if (result) {
624
- output += result.output;
625
- pos += (result.matchLength || 1);
626
- } else {
627
- // Get the native token at the current position
628
- token = self.exec(appliedPattern, nativeTokens[scope], pos, 'sticky')[0];
629
- output += token;
630
- pos += token.length;
631
- if (token === '[' && scope === defaultScope) {
632
- scope = classScope;
633
- } else if (token === ']' && scope === classScope) {
634
- scope = defaultScope;
635
- }
636
- }
637
- }
638
-
639
- patternCache[pattern][flags] = {
640
- // Cleanup token cruft: repeated `(?:)(?:)` and leading/trailing `(?:)`
641
- pattern: nativ.replace.call(output, /\(\?:\)(?=\(\?:\))|^\(\?:\)|\(\?:\)$/g, ''),
642
- // Strip all but native flags
643
- flags: nativ.replace.call(appliedFlags, /[^gimuy]+/g, ''),
644
- // `context.captureNames` has an item for each capturing group, even if unnamed
645
- captures: context.hasNamedCapture ? context.captureNames : null
646
- };
647
- }
648
-
649
- generated = patternCache[pattern][flags];
650
- return augment(
651
- new RegExp(generated.pattern, generated.flags),
652
- generated.captures,
653
- pattern,
654
- flags
655
- );
656
- };
657
-
658
- // Add `RegExp.prototype` to the prototype chain
659
- self.prototype = new RegExp();
660
-
661
- /* ==============================
662
- * Public properties
663
- * ============================== */
664
-
665
- /**
666
- * The XRegExp version number.
667
- *
668
- * @static
669
- * @memberOf XRegExp
670
- * @type String
671
- */
672
- self.version = '3.0.0';
673
-
674
- /* ==============================
675
- * Public methods
676
- * ============================== */
677
-
678
- /**
679
- * Extends XRegExp syntax and allows custom flags. This is used internally and can be used to
680
- * create XRegExp addons. If more than one token can match the same string, the last added wins.
681
- *
682
- * @memberOf XRegExp
683
- * @param {RegExp} regex Regex object that matches the new token.
684
- * @param {Function} handler Function that returns a new pattern string (using native regex syntax)
685
- * to replace the matched token within all future XRegExp regexes. Has access to persistent
686
- * properties of the regex being built, through `this`. Invoked with three arguments:
687
- * <li>The match array, with named backreference properties.
688
- * <li>The regex scope where the match was found: 'default' or 'class'.
689
- * <li>The flags used by the regex, including any flags in a leading mode modifier.
690
- * The handler function becomes part of the XRegExp construction process, so be careful not to
691
- * construct XRegExps within the function or you will trigger infinite recursion.
692
- * @param {Object} [options] Options object with optional properties:
693
- * <li>`scope` {String} Scope where the token applies: 'default', 'class', or 'all'.
694
- * <li>`flag` {String} Single-character flag that triggers the token. This also registers the
695
- * flag, which prevents XRegExp from throwing an 'unknown flag' error when the flag is used.
696
- * <li>`optionalFlags` {String} Any custom flags checked for within the token `handler` that are
697
- * not required to trigger the token. This registers the flags, to prevent XRegExp from
698
- * throwing an 'unknown flag' error when any of the flags are used.
699
- * <li>`reparse` {Boolean} Whether the `handler` function's output should not be treated as
700
- * final, and instead be reparseable by other tokens (including the current token). Allows
701
- * token chaining or deferring.
702
- * <li>`leadChar` {String} Single character that occurs at the beginning of any successful match
703
- * of the token (not always applicable). This doesn't change the behavior of the token unless
704
- * you provide an erroneous value. However, providing it can increase the token's performance.
705
- * @example
706
- *
707
- * // Basic usage: Add \a for the ALERT control code
708
- * XRegExp.addToken(
709
- * /\\a/,
710
- * function() {return '\\x07';},
711
- * {scope: 'all'}
712
- * );
713
- * XRegExp('\\a[\\a-\\n]+').test('\x07\n\x07'); // -> true
714
- *
715
- * // Add the U (ungreedy) flag from PCRE and RE2, which reverses greedy and lazy quantifiers
716
- * XRegExp.addToken(
717
- * /([?*+]|{\d+(?:,\d*)?})(\??)/,
718
- * function(match) {return match[1] + (match[2] ? '' : '?');},
719
- * {flag: 'U'}
720
- * );
721
- * XRegExp('a+', 'U').exec('aaa')[0]; // -> 'a'
722
- * XRegExp('a+?', 'U').exec('aaa')[0]; // -> 'aaa'
723
- */
724
- self.addToken = function(regex, handler, options) {
725
- options = options || {};
726
- var optionalFlags = options.optionalFlags, i;
727
-
728
- if (options.flag) {
729
- registerFlag(options.flag);
730
- }
731
-
732
- if (optionalFlags) {
733
- optionalFlags = nativ.split.call(optionalFlags, '');
734
- for (i = 0; i < optionalFlags.length; ++i) {
735
- registerFlag(optionalFlags[i]);
736
- }
737
- }
738
-
739
- // Add to the private list of syntax tokens
740
- tokens.push({
741
- regex: copyRegex(regex, {
742
- addG: true,
743
- addY: hasNativeY,
744
- isInternalOnly: true
745
- }),
746
- handler: handler,
747
- scope: options.scope || defaultScope,
748
- flag: options.flag,
749
- reparse: options.reparse,
750
- leadChar: options.leadChar
751
- });
752
-
753
- // Reset the pattern cache used by the `XRegExp` constructor, since the same pattern and
754
- // flags might now produce different results
755
- self.cache.flush('patterns');
756
- };
757
-
758
- /**
759
- * Caches and returns the result of calling `XRegExp(pattern, flags)`. On any subsequent call with
760
- * the same pattern and flag combination, the cached copy of the regex is returned.
761
- *
762
- * @memberOf XRegExp
763
- * @param {String} pattern Regex pattern string.
764
- * @param {String} [flags] Any combination of XRegExp flags.
765
- * @returns {RegExp} Cached XRegExp object.
766
- * @example
767
- *
768
- * while (match = XRegExp.cache('.', 'gs').exec(str)) {
769
- * // The regex is compiled once only
770
- * }
771
- */
772
- self.cache = function(pattern, flags) {
773
- if (!regexCache[pattern]) {
774
- regexCache[pattern] = {};
775
- }
776
- return regexCache[pattern][flags] || (
777
- regexCache[pattern][flags] = self(pattern, flags)
778
- );
779
- };
780
-
781
- // Intentionally undocumented
782
- self.cache.flush = function(cacheName) {
783
- if (cacheName === 'patterns') {
784
- // Flush the pattern cache used by the `XRegExp` constructor
785
- patternCache = {};
786
- } else {
787
- // Flush the regex cache populated by `XRegExp.cache`
788
- regexCache = {};
789
- }
790
- };
791
-
792
- /**
793
- * Escapes any regular expression metacharacters, for use when matching literal strings. The result
794
- * can safely be used at any point within a regex that uses any flags.
795
- *
796
- * @memberOf XRegExp
797
- * @param {String} str String to escape.
798
- * @returns {String} String with regex metacharacters escaped.
799
- * @example
800
- *
801
- * XRegExp.escape('Escaped? <.>');
802
- * // -> 'Escaped\?\ <\.>'
803
- */
804
- self.escape = function(str) {
805
- return nativ.replace.call(toObject(str), /[-[\]{}()*+?.,\\^$|#\s]/g, '\\$&');
806
- };
807
-
808
- /**
809
- * Executes a regex search in a specified string. Returns a match array or `null`. If the provided
810
- * regex uses named capture, named backreference properties are included on the match array.
811
- * Optional `pos` and `sticky` arguments specify the search start position, and whether the match
812
- * must start at the specified position only. The `lastIndex` property of the provided regex is not
813
- * used, but is updated for compatibility. Also fixes browser bugs compared to the native
814
- * `RegExp.prototype.exec` and can be used reliably cross-browser.
815
- *
816
- * @memberOf XRegExp
817
- * @param {String} str String to search.
818
- * @param {RegExp} regex Regex to search with.
819
- * @param {Number} [pos=0] Zero-based index at which to start the search.
820
- * @param {Boolean|String} [sticky=false] Whether the match must start at the specified position
821
- * only. The string `'sticky'` is accepted as an alternative to `true`.
822
- * @returns {Array} Match array with named backreference properties, or `null`.
823
- * @example
824
- *
825
- * // Basic use, with named backreference
826
- * var match = XRegExp.exec('U+2620', XRegExp('U\\+(?<hex>[0-9A-F]{4})'));
827
- * match.hex; // -> '2620'
828
- *
829
- * // With pos and sticky, in a loop
830
- * var pos = 2, result = [], match;
831
- * while (match = XRegExp.exec('<1><2><3><4>5<6>', /<(\d)>/, pos, 'sticky')) {
832
- * result.push(match[1]);
833
- * pos = match.index + match[0].length;
834
- * }
835
- * // result -> ['2', '3', '4']
836
- */
837
- self.exec = function(str, regex, pos, sticky) {
838
- var cacheKey = 'g',
839
- addY = false,
840
- match,
841
- r2;
842
-
843
- addY = hasNativeY && !!(sticky || (regex.sticky && sticky !== false));
844
- if (addY) {
845
- cacheKey += 'y';
846
- }
847
-
848
- regex[REGEX_DATA] = regex[REGEX_DATA] || {};
849
-
850
- // Shares cached copies with `XRegExp.match`/`replace`
851
- r2 = regex[REGEX_DATA][cacheKey] || (
852
- regex[REGEX_DATA][cacheKey] = copyRegex(regex, {
853
- addG: true,
854
- addY: addY,
855
- removeY: sticky === false,
856
- isInternalOnly: true
857
- })
858
- );
859
-
860
- r2.lastIndex = pos = pos || 0;
861
-
862
- // Fixed `exec` required for `lastIndex` fix, named backreferences, etc.
863
- match = fixed.exec.call(r2, str);
864
-
865
- if (sticky && match && match.index !== pos) {
866
- match = null;
867
- }
868
-
869
- if (regex.global) {
870
- regex.lastIndex = match ? r2.lastIndex : 0;
871
- }
872
-
873
- return match;
874
- };
875
-
876
- /**
877
- * Executes a provided function once per regex match.
878
- *
879
- * @memberOf XRegExp
880
- * @param {String} str String to search.
881
- * @param {RegExp} regex Regex to search with.
882
- * @param {Function} callback Function to execute for each match. Invoked with four arguments:
883
- * <li>The match array, with named backreference properties.
884
- * <li>The zero-based match index.
885
- * <li>The string being traversed.
886
- * <li>The regex object being used to traverse the string.
887
- * @example
888
- *
889
- * // Extracts every other digit from a string
890
- * XRegExp.forEach('1a2345', /\d/, function(match, i) {
891
- * if (i % 2) this.push(+match[0]);
892
- * }, []);
893
- * // -> [2, 4]
894
- */
895
- self.forEach = function(str, regex, callback) {
896
- var pos = 0,
897
- i = -1,
898
- match;
899
-
900
- while ((match = self.exec(str, regex, pos))) {
901
- // Because `regex` is provided to `callback`, the function could use the deprecated/
902
- // nonstandard `RegExp.prototype.compile` to mutate the regex. However, since
903
- // `XRegExp.exec` doesn't use `lastIndex` to set the search position, this can't lead
904
- // to an infinite loop, at least. Actually, because of the way `XRegExp.exec` caches
905
- // globalized versions of regexes, mutating the regex will not have any effect on the
906
- // iteration or matched strings, which is a nice side effect that brings extra safety
907
- callback(match, ++i, str, regex);
908
-
909
- pos = match.index + (match[0].length || 1);
910
- }
911
- };
912
-
913
- /**
914
- * Copies a regex object and adds flag `g`. The copy maintains extended data, is augmented with
915
- * `XRegExp.prototype` properties, and has a fresh `lastIndex` property (set to zero). Native
916
- * regexes are not recompiled using XRegExp syntax.
917
- *
918
- * @memberOf XRegExp
919
- * @param {RegExp} regex Regex to globalize.
920
- * @returns {RegExp} Copy of the provided regex with flag `g` added.
921
- * @example
922
- *
923
- * var globalCopy = XRegExp.globalize(/regex/);
924
- * globalCopy.global; // -> true
925
- */
926
- self.globalize = function(regex) {
927
- return copyRegex(regex, {addG: true});
928
- };
929
-
930
- /**
931
- * Installs optional features according to the specified options. Can be undone using
932
- * {@link #XRegExp.uninstall}.
933
- *
934
- * @memberOf XRegExp
935
- * @param {Object|String} options Options object or string.
936
- * @example
937
- *
938
- * // With an options object
939
- * XRegExp.install({
940
- * // Enables support for astral code points in Unicode addons (implicitly sets flag A)
941
- * astral: true,
942
- *
943
- * // Overrides native regex methods with fixed/extended versions that support named
944
- * // backreferences and fix numerous cross-browser bugs
945
- * natives: true
946
- * });
947
- *
948
- * // With an options string
949
- * XRegExp.install('astral natives');
950
- */
951
- self.install = function(options) {
952
- options = prepareOptions(options);
953
-
954
- if (!features.astral && options.astral) {
955
- setAstral(true);
956
- }
957
-
958
- if (!features.natives && options.natives) {
959
- setNatives(true);
960
- }
961
- };
962
-
963
- /**
964
- * Checks whether an individual optional feature is installed.
965
- *
966
- * @memberOf XRegExp
967
- * @param {String} feature Name of the feature to check. One of:
968
- * <li>`natives`
969
- * <li>`astral`
970
- * @returns {Boolean} Whether the feature is installed.
971
- * @example
972
- *
973
- * XRegExp.isInstalled('natives');
974
- */
975
- self.isInstalled = function(feature) {
976
- return !!(features[feature]);
977
- };
978
-
979
- /**
980
- * Returns `true` if an object is a regex; `false` if it isn't. This works correctly for regexes
981
- * created in another frame, when `instanceof` and `constructor` checks would fail.
982
- *
983
- * @memberOf XRegExp
984
- * @param {*} value Object to check.
985
- * @returns {Boolean} Whether the object is a `RegExp` object.
986
- * @example
987
- *
988
- * XRegExp.isRegExp('string'); // -> false
989
- * XRegExp.isRegExp(/regex/i); // -> true
990
- * XRegExp.isRegExp(RegExp('^', 'm')); // -> true
991
- * XRegExp.isRegExp(XRegExp('(?s).')); // -> true
992
- */
993
- self.isRegExp = function(value) {
994
- return toString.call(value) === '[object RegExp]';
995
- //return isType(value, 'RegExp');
996
- };
997
-
998
- /**
999
- * Returns the first matched string, or in global mode, an array containing all matched strings.
1000
- * This is essentially a more convenient re-implementation of `String.prototype.match` that gives
1001
- * the result types you actually want (string instead of `exec`-style array in match-first mode,
1002
- * and an empty array instead of `null` when no matches are found in match-all mode). It also lets
1003
- * you override flag g and ignore `lastIndex`, and fixes browser bugs.
1004
- *
1005
- * @memberOf XRegExp
1006
- * @param {String} str String to search.
1007
- * @param {RegExp} regex Regex to search with.
1008
- * @param {String} [scope='one'] Use 'one' to return the first match as a string. Use 'all' to
1009
- * return an array of all matched strings. If not explicitly specified and `regex` uses flag g,
1010
- * `scope` is 'all'.
1011
- * @returns {String|Array} In match-first mode: First match as a string, or `null`. In match-all
1012
- * mode: Array of all matched strings, or an empty array.
1013
- * @example
1014
- *
1015
- * // Match first
1016
- * XRegExp.match('abc', /\w/); // -> 'a'
1017
- * XRegExp.match('abc', /\w/g, 'one'); // -> 'a'
1018
- * XRegExp.match('abc', /x/g, 'one'); // -> null
1019
- *
1020
- * // Match all
1021
- * XRegExp.match('abc', /\w/g); // -> ['a', 'b', 'c']
1022
- * XRegExp.match('abc', /\w/, 'all'); // -> ['a', 'b', 'c']
1023
- * XRegExp.match('abc', /x/, 'all'); // -> []
1024
- */
1025
- self.match = function(str, regex, scope) {
1026
- var global = (regex.global && scope !== 'one') || scope === 'all',
1027
- cacheKey = ((global ? 'g' : '') + (regex.sticky ? 'y' : '')) || 'noGY',
1028
- result,
1029
- r2;
1030
-
1031
- regex[REGEX_DATA] = regex[REGEX_DATA] || {};
1032
-
1033
- // Shares cached copies with `XRegExp.exec`/`replace`
1034
- r2 = regex[REGEX_DATA][cacheKey] || (
1035
- regex[REGEX_DATA][cacheKey] = copyRegex(regex, {
1036
- addG: !!global,
1037
- addY: !!regex.sticky,
1038
- removeG: scope === 'one',
1039
- isInternalOnly: true
1040
- })
1041
- );
1042
-
1043
- result = nativ.match.call(toObject(str), r2);
1044
-
1045
- if (regex.global) {
1046
- regex.lastIndex = (
1047
- (scope === 'one' && result) ?
1048
- // Can't use `r2.lastIndex` since `r2` is nonglobal in this case
1049
- (result.index + result[0].length) : 0
1050
- );
1051
- }
1052
-
1053
- return global ? (result || []) : (result && result[0]);
1054
- };
1055
-
1056
- /**
1057
- * Retrieves the matches from searching a string using a chain of regexes that successively search
1058
- * within previous matches. The provided `chain` array can contain regexes and objects with `regex`
1059
- * and `backref` properties. When a backreference is specified, the named or numbered backreference
1060
- * is passed forward to the next regex or returned.
1061
- *
1062
- * @memberOf XRegExp
1063
- * @param {String} str String to search.
1064
- * @param {Array} chain Regexes that each search for matches within preceding results.
1065
- * @returns {Array} Matches by the last regex in the chain, or an empty array.
1066
- * @example
1067
- *
1068
- * // Basic usage; matches numbers within <b> tags
1069
- * XRegExp.matchChain('1 <b>2</b> 3 <b>4 a 56</b>', [
1070
- * XRegExp('(?is)<b>.*?</b>'),
1071
- * /\d+/
1072
- * ]);
1073
- * // -> ['2', '4', '56']
1074
- *
1075
- * // Passing forward and returning specific backreferences
1076
- * html = '<a href="http://xregexp.com/api/">XRegExp</a>\
1077
- * <a href="http://www.google.com/">Google</a>';
1078
- * XRegExp.matchChain(html, [
1079
- * {regex: /<a href="([^"]+)">/i, backref: 1},
1080
- * {regex: XRegExp('(?i)^https?://(?<domain>[^/?#]+)'), backref: 'domain'}
1081
- * ]);
1082
- * // -> ['xregexp.com', 'www.google.com']
1083
- */
1084
- self.matchChain = function(str, chain) {
1085
- return (function recurseChain(values, level) {
1086
- var item = chain[level].regex ? chain[level] : {regex: chain[level]},
1087
- matches = [],
1088
- addMatch = function(match) {
1089
- if (item.backref) {
1090
- /* Safari 4.0.5 (but not 5.0.5+) inappropriately uses sparse arrays to hold
1091
- * the `undefined`s for backreferences to nonparticipating capturing
1092
- * groups. In such cases, a `hasOwnProperty` or `in` check on its own would
1093
- * inappropriately throw the exception, so also check if the backreference
1094
- * is a number that is within the bounds of the array.
1095
- */
1096
- if (!(match.hasOwnProperty(item.backref) || +item.backref < match.length)) {
1097
- throw new ReferenceError('Backreference to undefined group: ' + item.backref);
1098
- }
1099
-
1100
- matches.push(match[item.backref] || '');
1101
- } else {
1102
- matches.push(match[0]);
1103
- }
1104
- },
1105
- i;
1106
-
1107
- for (i = 0; i < values.length; ++i) {
1108
- self.forEach(values[i], item.regex, addMatch);
1109
- }
1110
-
1111
- return ((level === chain.length - 1) || !matches.length) ?
1112
- matches :
1113
- recurseChain(matches, level + 1);
1114
- }([str], 0));
1115
- };
1116
-
1117
- /**
1118
- * Returns a new string with one or all matches of a pattern replaced. The pattern can be a string
1119
- * or regex, and the replacement can be a string or a function to be called for each match. To
1120
- * perform a global search and replace, use the optional `scope` argument or include flag g if using
1121
- * a regex. Replacement strings can use `${n}` for named and numbered backreferences. Replacement
1122
- * functions can use named backreferences via `arguments[0].name`. Also fixes browser bugs compared
1123
- * to the native `String.prototype.replace` and can be used reliably cross-browser.
1124
- *
1125
- * @memberOf XRegExp
1126
- * @param {String} str String to search.
1127
- * @param {RegExp|String} search Search pattern to be replaced.
1128
- * @param {String|Function} replacement Replacement string or a function invoked to create it.
1129
- * Replacement strings can include special replacement syntax:
1130
- * <li>$$ - Inserts a literal $ character.
1131
- * <li>$&, $0 - Inserts the matched substring.
1132
- * <li>$` - Inserts the string that precedes the matched substring (left context).
1133
- * <li>$' - Inserts the string that follows the matched substring (right context).
1134
- * <li>$n, $nn - Where n/nn are digits referencing an existent capturing group, inserts
1135
- * backreference n/nn.
1136
- * <li>${n} - Where n is a name or any number of digits that reference an existent capturing
1137
- * group, inserts backreference n.
1138
- * Replacement functions are invoked with three or more arguments:
1139
- * <li>The matched substring (corresponds to $& above). Named backreferences are accessible as
1140
- * properties of this first argument.
1141
- * <li>0..n arguments, one for each backreference (corresponding to $1, $2, etc. above).
1142
- * <li>The zero-based index of the match within the total search string.
1143
- * <li>The total string being searched.
1144
- * @param {String} [scope='one'] Use 'one' to replace the first match only, or 'all'. If not
1145
- * explicitly specified and using a regex with flag g, `scope` is 'all'.
1146
- * @returns {String} New string with one or all matches replaced.
1147
- * @example
1148
- *
1149
- * // Regex search, using named backreferences in replacement string
1150
- * var name = XRegExp('(?<first>\\w+) (?<last>\\w+)');
1151
- * XRegExp.replace('John Smith', name, '${last}, ${first}');
1152
- * // -> 'Smith, John'
1153
- *
1154
- * // Regex search, using named backreferences in replacement function
1155
- * XRegExp.replace('John Smith', name, function(match) {
1156
- * return match.last + ', ' + match.first;
1157
- * });
1158
- * // -> 'Smith, John'
1159
- *
1160
- * // String search, with replace-all
1161
- * XRegExp.replace('RegExp builds RegExps', 'RegExp', 'XRegExp', 'all');
1162
- * // -> 'XRegExp builds XRegExps'
1163
- */
1164
- self.replace = function(str, search, replacement, scope) {
1165
- var isRegex = self.isRegExp(search),
1166
- global = (search.global && scope !== 'one') || scope === 'all',
1167
- cacheKey = ((global ? 'g' : '') + (search.sticky ? 'y' : '')) || 'noGY',
1168
- s2 = search,
1169
- result;
1170
-
1171
- if (isRegex) {
1172
- search[REGEX_DATA] = search[REGEX_DATA] || {};
1173
-
1174
- // Shares cached copies with `XRegExp.exec`/`match`. Since a copy is used, `search`'s
1175
- // `lastIndex` isn't updated *during* replacement iterations
1176
- s2 = search[REGEX_DATA][cacheKey] || (
1177
- search[REGEX_DATA][cacheKey] = copyRegex(search, {
1178
- addG: !!global,
1179
- addY: !!search.sticky,
1180
- removeG: scope === 'one',
1181
- isInternalOnly: true
1182
- })
1183
- );
1184
- } else if (global) {
1185
- s2 = new RegExp(self.escape(String(search)), 'g');
1186
- }
1187
-
1188
- // Fixed `replace` required for named backreferences, etc.
1189
- result = fixed.replace.call(toObject(str), s2, replacement);
1190
-
1191
- if (isRegex && search.global) {
1192
- // Fixes IE, Safari bug (last tested IE 9, Safari 5.1)
1193
- search.lastIndex = 0;
1194
- }
1195
-
1196
- return result;
1197
- };
1198
-
1199
- /**
1200
- * Performs batch processing of string replacements. Used like {@link #XRegExp.replace}, but
1201
- * accepts an array of replacement details. Later replacements operate on the output of earlier
1202
- * replacements. Replacement details are accepted as an array with a regex or string to search for,
1203
- * the replacement string or function, and an optional scope of 'one' or 'all'. Uses the XRegExp
1204
- * replacement text syntax, which supports named backreference properties via `${name}`.
1205
- *
1206
- * @memberOf XRegExp
1207
- * @param {String} str String to search.
1208
- * @param {Array} replacements Array of replacement detail arrays.
1209
- * @returns {String} New string with all replacements.
1210
- * @example
1211
- *
1212
- * str = XRegExp.replaceEach(str, [
1213
- * [XRegExp('(?<name>a)'), 'z${name}'],
1214
- * [/b/gi, 'y'],
1215
- * [/c/g, 'x', 'one'], // scope 'one' overrides /g
1216
- * [/d/, 'w', 'all'], // scope 'all' overrides lack of /g
1217
- * ['e', 'v', 'all'], // scope 'all' allows replace-all for strings
1218
- * [/f/g, function($0) {
1219
- * return $0.toUpperCase();
1220
- * }]
1221
- * ]);
1222
- */
1223
- self.replaceEach = function(str, replacements) {
1224
- var i, r;
1225
-
1226
- for (i = 0; i < replacements.length; ++i) {
1227
- r = replacements[i];
1228
- str = self.replace(str, r[0], r[1], r[2]);
1229
- }
1230
-
1231
- return str;
1232
- };
1233
-
1234
- /**
1235
- * Splits a string into an array of strings using a regex or string separator. Matches of the
1236
- * separator are not included in the result array. However, if `separator` is a regex that contains
1237
- * capturing groups, backreferences are spliced into the result each time `separator` is matched.
1238
- * Fixes browser bugs compared to the native `String.prototype.split` and can be used reliably
1239
- * cross-browser.
1240
- *
1241
- * @memberOf XRegExp
1242
- * @param {String} str String to split.
1243
- * @param {RegExp|String} separator Regex or string to use for separating the string.
1244
- * @param {Number} [limit] Maximum number of items to include in the result array.
1245
- * @returns {Array} Array of substrings.
1246
- * @example
1247
- *
1248
- * // Basic use
1249
- * XRegExp.split('a b c', ' ');
1250
- * // -> ['a', 'b', 'c']
1251
- *
1252
- * // With limit
1253
- * XRegExp.split('a b c', ' ', 2);
1254
- * // -> ['a', 'b']
1255
- *
1256
- * // Backreferences in result array
1257
- * XRegExp.split('..word1..', /([a-z]+)(\d+)/i);
1258
- * // -> ['..', 'word', '1', '..']
1259
- */
1260
- self.split = function(str, separator, limit) {
1261
- return fixed.split.call(toObject(str), separator, limit);
1262
- };
1263
-
1264
- /**
1265
- * Executes a regex search in a specified string. Returns `true` or `false`. Optional `pos` and
1266
- * `sticky` arguments specify the search start position, and whether the match must start at the
1267
- * specified position only. The `lastIndex` property of the provided regex is not used, but is
1268
- * updated for compatibility. Also fixes browser bugs compared to the native
1269
- * `RegExp.prototype.test` and can be used reliably cross-browser.
1270
- *
1271
- * @memberOf XRegExp
1272
- * @param {String} str String to search.
1273
- * @param {RegExp} regex Regex to search with.
1274
- * @param {Number} [pos=0] Zero-based index at which to start the search.
1275
- * @param {Boolean|String} [sticky=false] Whether the match must start at the specified position
1276
- * only. The string `'sticky'` is accepted as an alternative to `true`.
1277
- * @returns {Boolean} Whether the regex matched the provided value.
1278
- * @example
1279
- *
1280
- * // Basic use
1281
- * XRegExp.test('abc', /c/); // -> true
1282
- *
1283
- * // With pos and sticky
1284
- * XRegExp.test('abc', /c/, 0, 'sticky'); // -> false
1285
- */
1286
- self.test = function(str, regex, pos, sticky) {
1287
- // Do this the easy way :-)
1288
- return !!self.exec(str, regex, pos, sticky);
1289
- };
1290
-
1291
- /**
1292
- * Uninstalls optional features according to the specified options. All optional features start out
1293
- * uninstalled, so this is used to undo the actions of {@link #XRegExp.install}.
1294
- *
1295
- * @memberOf XRegExp
1296
- * @param {Object|String} options Options object or string.
1297
- * @example
1298
- *
1299
- * // With an options object
1300
- * XRegExp.uninstall({
1301
- * // Disables support for astral code points in Unicode addons
1302
- * astral: true,
1303
- *
1304
- * // Restores native regex methods
1305
- * natives: true
1306
- * });
1307
- *
1308
- * // With an options string
1309
- * XRegExp.uninstall('astral natives');
1310
- */
1311
- self.uninstall = function(options) {
1312
- options = prepareOptions(options);
1313
-
1314
- if (features.astral && options.astral) {
1315
- setAstral(false);
1316
- }
1317
-
1318
- if (features.natives && options.natives) {
1319
- setNatives(false);
1320
- }
1321
- };
1322
-
1323
- /**
1324
- * Returns an XRegExp object that is the union of the given patterns. Patterns can be provided as
1325
- * regex objects or strings. Metacharacters are escaped in patterns provided as strings.
1326
- * Backreferences in provided regex objects are automatically renumbered to work correctly within
1327
- * the larger combined pattern. Native flags used by provided regexes are ignored in favor of the
1328
- * `flags` argument.
1329
- *
1330
- * @memberOf XRegExp
1331
- * @param {Array} patterns Regexes and strings to combine.
1332
- * @param {String} [flags] Any combination of XRegExp flags.
1333
- * @returns {RegExp} Union of the provided regexes and strings.
1334
- * @example
1335
- *
1336
- * XRegExp.union(['a+b*c', /(dogs)\1/, /(cats)\1/], 'i');
1337
- * // -> /a\+b\*c|(dogs)\1|(cats)\2/i
1338
- */
1339
- self.union = function(patterns, flags) {
1340
- var parts = /(\()(?!\?)|\\([1-9]\d*)|\\[\s\S]|\[(?:[^\\\]]|\\[\s\S])*]/g,
1341
- output = [],
1342
- numCaptures = 0,
1343
- numPriorCaptures,
1344
- captureNames,
1345
- pattern,
1346
- rewrite = function(match, paren, backref) {
1347
- var name = captureNames[numCaptures - numPriorCaptures];
1348
-
1349
- // Capturing group
1350
- if (paren) {
1351
- ++numCaptures;
1352
- // If the current capture has a name, preserve the name
1353
- if (name) {
1354
- return '(?<' + name + '>';
1355
- }
1356
- // Backreference
1357
- } else if (backref) {
1358
- // Rewrite the backreference
1359
- return '\\' + (+backref + numPriorCaptures);
1360
- }
1361
-
1362
- return match;
1363
- },
1364
- i;
1365
-
1366
- if (!(isType(patterns, 'Array') && patterns.length)) {
1367
- throw new TypeError('Must provide a nonempty array of patterns to merge');
1368
- }
1369
-
1370
- for (i = 0; i < patterns.length; ++i) {
1371
- pattern = patterns[i];
1372
-
1373
- if (self.isRegExp(pattern)) {
1374
- numPriorCaptures = numCaptures;
1375
- captureNames = (pattern[REGEX_DATA] && pattern[REGEX_DATA].captureNames) || [];
1376
-
1377
- // Rewrite backreferences. Passing to XRegExp dies on octals and ensures patterns
1378
- // are independently valid; helps keep this simple. Named captures are put back
1379
- output.push(nativ.replace.call(self(pattern.source).source, parts, rewrite));
1380
- } else {
1381
- output.push(self.escape(pattern));
1382
- }
1383
- }
1384
-
1385
- return self(output.join('|'), flags);
1386
- };
1387
-
1388
- /* ==============================
1389
- * Fixed/extended native methods
1390
- * ============================== */
1391
-
1392
- /**
1393
- * Adds named capture support (with backreferences returned as `result.name`), and fixes browser
1394
- * bugs in the native `RegExp.prototype.exec`. Calling `XRegExp.install('natives')` uses this to
1395
- * override the native method. Use via `XRegExp.exec` without overriding natives.
1396
- *
1397
- * @private
1398
- * @param {String} str String to search.
1399
- * @returns {Array} Match array with named backreference properties, or `null`.
1400
- */
1401
- fixed.exec = function(str) {
1402
- var origLastIndex = this.lastIndex,
1403
- match = nativ.exec.apply(this, arguments),
1404
- name,
1405
- r2,
1406
- i;
1407
-
1408
- if (match) {
1409
- // Fix browsers whose `exec` methods don't return `undefined` for nonparticipating
1410
- // capturing groups. This fixes IE 5.5-8, but not IE 9's quirks mode or emulation of
1411
- // older IEs. IE 9 in standards mode follows the spec
1412
- if (!correctExecNpcg && match.length > 1 && indexOf(match, '') > -1) {
1413
- r2 = copyRegex(this, {
1414
- removeG: true,
1415
- isInternalOnly: true
1416
- });
1417
- // Using `str.slice(match.index)` rather than `match[0]` in case lookahead allowed
1418
- // matching due to characters outside the match
1419
- nativ.replace.call(String(str).slice(match.index), r2, function() {
1420
- var len = arguments.length, i;
1421
- // Skip index 0 and the last 2
1422
- for (i = 1; i < len - 2; ++i) {
1423
- if (arguments[i] === undefined) {
1424
- match[i] = undefined;
1425
- }
1426
- }
1427
- });
1428
- }
1429
-
1430
- // Attach named capture properties
1431
- if (this[REGEX_DATA] && this[REGEX_DATA].captureNames) {
1432
- // Skip index 0
1433
- for (i = 1; i < match.length; ++i) {
1434
- name = this[REGEX_DATA].captureNames[i - 1];
1435
- if (name) {
1436
- match[name] = match[i];
1437
- }
1438
- }
1439
- }
1440
-
1441
- // Fix browsers that increment `lastIndex` after zero-length matches
1442
- if (this.global && !match[0].length && (this.lastIndex > match.index)) {
1443
- this.lastIndex = match.index;
1444
- }
1445
- }
1446
-
1447
- if (!this.global) {
1448
- // Fixes IE, Opera bug (last tested IE 9, Opera 11.6)
1449
- this.lastIndex = origLastIndex;
1450
- }
1451
-
1452
- return match;
1453
- };
1454
-
1455
- /**
1456
- * Fixes browser bugs in the native `RegExp.prototype.test`. Calling `XRegExp.install('natives')`
1457
- * uses this to override the native method.
1458
- *
1459
- * @private
1460
- * @param {String} str String to search.
1461
- * @returns {Boolean} Whether the regex matched the provided value.
1462
- */
1463
- fixed.test = function(str) {
1464
- // Do this the easy way :-)
1465
- return !!fixed.exec.call(this, str);
1466
- };
1467
-
1468
- /**
1469
- * Adds named capture support (with backreferences returned as `result.name`), and fixes browser
1470
- * bugs in the native `String.prototype.match`. Calling `XRegExp.install('natives')` uses this to
1471
- * override the native method.
1472
- *
1473
- * @private
1474
- * @param {RegExp|*} regex Regex to search with. If not a regex object, it is passed to `RegExp`.
1475
- * @returns {Array} If `regex` uses flag g, an array of match strings or `null`. Without flag g,
1476
- * the result of calling `regex.exec(this)`.
1477
- */
1478
- fixed.match = function(regex) {
1479
- var result;
1480
-
1481
- if (!self.isRegExp(regex)) {
1482
- // Use the native `RegExp` rather than `XRegExp`
1483
- regex = new RegExp(regex);
1484
- } else if (regex.global) {
1485
- result = nativ.match.apply(this, arguments);
1486
- // Fixes IE bug
1487
- regex.lastIndex = 0;
1488
-
1489
- return result;
1490
- }
1491
-
1492
- return fixed.exec.call(regex, toObject(this));
1493
- };
1494
-
1495
- /**
1496
- * Adds support for `${n}` tokens for named and numbered backreferences in replacement text, and
1497
- * provides named backreferences to replacement functions as `arguments[0].name`. Also fixes browser
1498
- * bugs in replacement text syntax when performing a replacement using a nonregex search value, and
1499
- * the value of a replacement regex's `lastIndex` property during replacement iterations and upon
1500
- * completion. Calling `XRegExp.install('natives')` uses this to override the native method. Note
1501
- * that this doesn't support SpiderMonkey's proprietary third (`flags`) argument. Use via
1502
- * `XRegExp.replace` without overriding natives.
1503
- *
1504
- * @private
1505
- * @param {RegExp|String} search Search pattern to be replaced.
1506
- * @param {String|Function} replacement Replacement string or a function invoked to create it.
1507
- * @returns {String} New string with one or all matches replaced.
1508
- */
1509
- fixed.replace = function(search, replacement) {
1510
- var isRegex = self.isRegExp(search),
1511
- origLastIndex,
1512
- captureNames,
1513
- result;
1514
-
1515
- if (isRegex) {
1516
- if (search[REGEX_DATA]) {
1517
- captureNames = search[REGEX_DATA].captureNames;
1518
- }
1519
- // Only needed if `search` is nonglobal
1520
- origLastIndex = search.lastIndex;
1521
- } else {
1522
- search += ''; // Type-convert
1523
- }
1524
-
1525
- // Don't use `typeof`; some older browsers return 'function' for regex objects
1526
- if (isType(replacement, 'Function')) {
1527
- // Stringifying `this` fixes a bug in IE < 9 where the last argument in replacement
1528
- // functions isn't type-converted to a string
1529
- result = nativ.replace.call(String(this), search, function() {
1530
- var args = arguments, i;
1531
- if (captureNames) {
1532
- // Change the `arguments[0]` string primitive to a `String` object that can
1533
- // store properties. This really does need to use `String` as a constructor
1534
- args[0] = new String(args[0]);
1535
- // Store named backreferences on the first argument
1536
- for (i = 0; i < captureNames.length; ++i) {
1537
- if (captureNames[i]) {
1538
- args[0][captureNames[i]] = args[i + 1];
1539
- }
1540
- }
1541
- }
1542
- // Update `lastIndex` before calling `replacement`. Fixes IE, Chrome, Firefox,
1543
- // Safari bug (last tested IE 9, Chrome 17, Firefox 11, Safari 5.1)
1544
- if (isRegex && search.global) {
1545
- search.lastIndex = args[args.length - 2] + args[0].length;
1546
- }
1547
- // ES6 specs the context for replacement functions as `undefined`
1548
- return replacement.apply(undefined, args);
1549
- });
1550
- } else {
1551
- // Ensure that the last value of `args` will be a string when given nonstring `this`,
1552
- // while still throwing on null or undefined context
1553
- result = nativ.replace.call(this == null ? this : String(this), search, function() {
1554
- // Keep this function's `arguments` available through closure
1555
- var args = arguments;
1556
- return nativ.replace.call(String(replacement), replacementToken, function($0, $1, $2) {
1557
- var n;
1558
- // Named or numbered backreference with curly braces
1559
- if ($1) {
1560
- // XRegExp behavior for `${n}`:
1561
- // 1. Backreference to numbered capture, if `n` is an integer. Use `0` for
1562
- // for the entire match. Any number of leading zeros may be used.
1563
- // 2. Backreference to named capture `n`, if it exists and is not an
1564
- // integer overridden by numbered capture. In practice, this does not
1565
- // overlap with numbered capture since XRegExp does not allow named
1566
- // capture to use a bare integer as the name.
1567
- // 3. If the name or number does not refer to an existing capturing group,
1568
- // it's an error.
1569
- n = +$1; // Type-convert; drop leading zeros
1570
- if (n <= args.length - 3) {
1571
- return args[n] || '';
1572
- }
1573
- // Groups with the same name is an error, else would need `lastIndexOf`
1574
- n = captureNames ? indexOf(captureNames, $1) : -1;
1575
- if (n < 0) {
1576
- throw new SyntaxError('Backreference to undefined group ' + $0);
1577
- }
1578
- return args[n + 1] || '';
1579
- }
1580
- // Else, special variable or numbered backreference without curly braces
1581
- if ($2 === '$') { // $$
1582
- return '$';
1583
- }
1584
- if ($2 === '&' || +$2 === 0) { // $&, $0 (not followed by 1-9), $00
1585
- return args[0];
1586
- }
1587
- if ($2 === '`') { // $` (left context)
1588
- return args[args.length - 1].slice(0, args[args.length - 2]);
1589
- }
1590
- if ($2 === "'") { // $' (right context)
1591
- return args[args.length - 1].slice(args[args.length - 2] + args[0].length);
1592
- }
1593
- // Else, numbered backreference without curly braces
1594
- $2 = +$2; // Type-convert; drop leading zero
1595
- // XRegExp behavior for `$n` and `$nn`:
1596
- // - Backrefs end after 1 or 2 digits. Use `${..}` for more digits.
1597
- // - `$1` is an error if no capturing groups.
1598
- // - `$10` is an error if less than 10 capturing groups. Use `${1}0` instead.
1599
- // - `$01` is `$1` if at least one capturing group, else it's an error.
1600
- // - `$0` (not followed by 1-9) and `$00` are the entire match.
1601
- // Native behavior, for comparison:
1602
- // - Backrefs end after 1 or 2 digits. Cannot reference capturing group 100+.
1603
- // - `$1` is a literal `$1` if no capturing groups.
1604
- // - `$10` is `$1` followed by a literal `0` if less than 10 capturing groups.
1605
- // - `$01` is `$1` if at least one capturing group, else it's a literal `$01`.
1606
- // - `$0` is a literal `$0`.
1607
- if (!isNaN($2)) {
1608
- if ($2 > args.length - 3) {
1609
- throw new SyntaxError('Backreference to undefined group ' + $0);
1610
- }
1611
- return args[$2] || '';
1612
- }
1613
- // `$` followed by an unsupported char is an error, unlike native JS
1614
- throw new SyntaxError('Invalid token ' + $0);
1615
- });
1616
- });
1617
- }
1618
-
1619
- if (isRegex) {
1620
- if (search.global) {
1621
- // Fixes IE, Safari bug (last tested IE 9, Safari 5.1)
1622
- search.lastIndex = 0;
1623
- } else {
1624
- // Fixes IE, Opera bug (last tested IE 9, Opera 11.6)
1625
- search.lastIndex = origLastIndex;
1626
- }
1627
- }
1628
-
1629
- return result;
1630
- };
1631
-
1632
- /**
1633
- * Fixes browser bugs in the native `String.prototype.split`. Calling `XRegExp.install('natives')`
1634
- * uses this to override the native method. Use via `XRegExp.split` without overriding natives.
1635
- *
1636
- * @private
1637
- * @param {RegExp|String} separator Regex or string to use for separating the string.
1638
- * @param {Number} [limit] Maximum number of items to include in the result array.
1639
- * @returns {Array} Array of substrings.
1640
- */
1641
- fixed.split = function(separator, limit) {
1642
- if (!self.isRegExp(separator)) {
1643
- // Browsers handle nonregex split correctly, so use the faster native method
1644
- return nativ.split.apply(this, arguments);
1645
- }
1646
-
1647
- var str = String(this),
1648
- output = [],
1649
- origLastIndex = separator.lastIndex,
1650
- lastLastIndex = 0,
1651
- lastLength;
1652
-
1653
- // Values for `limit`, per the spec:
1654
- // If undefined: pow(2,32) - 1
1655
- // If 0, Infinity, or NaN: 0
1656
- // If positive number: limit = floor(limit); if (limit >= pow(2,32)) limit -= pow(2,32);
1657
- // If negative number: pow(2,32) - floor(abs(limit))
1658
- // If other: Type-convert, then use the above rules
1659
- // This line fails in very strange ways for some values of `limit` in Opera 10.5-10.63,
1660
- // unless Opera Dragonfly is open (go figure). It works in at least Opera 9.5-10.1 and 11+
1661
- limit = (limit === undefined ? -1 : limit) >>> 0;
1662
-
1663
- self.forEach(str, separator, function(match) {
1664
- // This condition is not the same as `if (match[0].length)`
1665
- if ((match.index + match[0].length) > lastLastIndex) {
1666
- output.push(str.slice(lastLastIndex, match.index));
1667
- if (match.length > 1 && match.index < str.length) {
1668
- Array.prototype.push.apply(output, match.slice(1));
1669
- }
1670
- lastLength = match[0].length;
1671
- lastLastIndex = match.index + lastLength;
1672
- }
1673
- });
1674
-
1675
- if (lastLastIndex === str.length) {
1676
- if (!nativ.test.call(separator, '') || lastLength) {
1677
- output.push('');
1678
- }
1679
- } else {
1680
- output.push(str.slice(lastLastIndex));
1681
- }
1682
-
1683
- separator.lastIndex = origLastIndex;
1684
- return output.length > limit ? output.slice(0, limit) : output;
1685
- };
1686
-
1687
- /* ==============================
1688
- * Built-in syntax/flag tokens
1689
- * ============================== */
1690
-
1691
- add = self.addToken;
1692
-
1693
- /*
1694
- * Letter escapes that natively match literal characters: `\a`, `\A`, etc. These should be
1695
- * SyntaxErrors but are allowed in web reality. XRegExp makes them errors for cross-browser
1696
- * consistency and to reserve their syntax, but lets them be superseded by addons.
1697
- */
1698
- add(
1699
- /\\([ABCE-RTUVXYZaeg-mopqyz]|c(?![A-Za-z])|u(?![\dA-Fa-f]{4}|{[\dA-Fa-f]+})|x(?![\dA-Fa-f]{2}))/,
1700
- function(match, scope) {
1701
- // \B is allowed in default scope only
1702
- if (match[1] === 'B' && scope === defaultScope) {
1703
- return match[0];
1704
- }
1705
- throw new SyntaxError('Invalid escape ' + match[0]);
1706
- },
1707
- {
1708
- scope: 'all',
1709
- leadChar: '\\'
1710
- }
1711
- );
1712
-
1713
- /*
1714
- * Unicode code point escape with curly braces: `\u{N..}`. `N..` is any one or more digit
1715
- * hexadecimal number from 0-10FFFF, and can include leading zeros. Requires the native ES6 `u` flag
1716
- * to support code points greater than U+FFFF. Avoids converting code points above U+FFFF to
1717
- * surrogate pairs (which could be done without flag `u`), since that could lead to broken behavior
1718
- * if you follow a `\u{N..}` token that references a code point above U+FFFF with a quantifier, or
1719
- * if you use the same in a character class.
1720
- */
1721
- add(
1722
- /\\u{([\dA-Fa-f]+)}/,
1723
- function(match, scope, flags) {
1724
- var code = dec(match[1]);
1725
- if (code > 0x10FFFF) {
1726
- throw new SyntaxError('Invalid Unicode code point ' + match[0]);
1727
- }
1728
- if (code <= 0xFFFF) {
1729
- // Converting to \uNNNN avoids needing to escape the literal character and keep it
1730
- // separate from preceding tokens
1731
- return '\\u' + pad4(hex(code));
1732
- }
1733
- // If `code` is between 0xFFFF and 0x10FFFF, require and defer to native handling
1734
- if (hasNativeU && flags.indexOf('u') > -1) {
1735
- return match[0];
1736
- }
1737
- throw new SyntaxError('Cannot use Unicode code point above \\u{FFFF} without flag u');
1738
- },
1739
- {
1740
- scope: 'all',
1741
- leadChar: '\\'
1742
- }
1743
- );
1744
-
1745
- /*
1746
- * Empty character class: `[]` or `[^]`. This fixes a critical cross-browser syntax inconsistency.
1747
- * Unless this is standardized (per the ES spec), regex syntax can't be accurately parsed because
1748
- * character class endings can't be determined.
1749
- */
1750
- add(
1751
- /\[(\^?)]/,
1752
- function(match) {
1753
- // For cross-browser compatibility with ES3, convert [] to \b\B and [^] to [\s\S].
1754
- // (?!) should work like \b\B, but is unreliable in some versions of Firefox
1755
- return match[1] ? '[\\s\\S]' : '\\b\\B';
1756
- },
1757
- {leadChar: '['}
1758
- );
1759
-
1760
- /*
1761
- * Comment pattern: `(?# )`. Inline comments are an alternative to the line comments allowed in
1762
- * free-spacing mode (flag x).
1763
- */
1764
- add(
1765
- /\(\?#[^)]*\)/,
1766
- function(match, scope, flags) {
1767
- // Keep tokens separated unless the following token is a quantifier
1768
- return isQuantifierNext(match.input, match.index + match[0].length, flags) ?
1769
- '' : '(?:)';
1770
- },
1771
- {leadChar: '('}
1772
- );
1773
-
1774
- /*
1775
- * Whitespace and line comments, in free-spacing mode (aka extended mode, flag x) only.
1776
- */
1777
- add(
1778
- /\s+|#.*/,
1779
- function(match, scope, flags) {
1780
- // Keep tokens separated unless the following token is a quantifier
1781
- return isQuantifierNext(match.input, match.index + match[0].length, flags) ?
1782
- '' : '(?:)';
1783
- },
1784
- {flag: 'x'}
1785
- );
1786
-
1787
- /*
1788
- * Dot, in dotall mode (aka singleline mode, flag s) only.
1789
- */
1790
- add(
1791
- /\./,
1792
- function() {
1793
- return '[\\s\\S]';
1794
- },
1795
- {
1796
- flag: 's',
1797
- leadChar: '.'
1798
- }
1799
- );
1800
-
1801
- /*
1802
- * Named backreference: `\k<name>`. Backreference names can use the characters A-Z, a-z, 0-9, _,
1803
- * and $ only. Also allows numbered backreferences as `\k<n>`.
1804
- */
1805
- add(
1806
- /\\k<([\w$]+)>/,
1807
- function(match) {
1808
- // Groups with the same name is an error, else would need `lastIndexOf`
1809
- var index = isNaN(match[1]) ? (indexOf(this.captureNames, match[1]) + 1) : +match[1],
1810
- endIndex = match.index + match[0].length;
1811
- if (!index || index > this.captureNames.length) {
1812
- throw new SyntaxError('Backreference to undefined group ' + match[0]);
1813
- }
1814
- // Keep backreferences separate from subsequent literal numbers
1815
- return '\\' + index + (
1816
- endIndex === match.input.length || isNaN(match.input.charAt(endIndex)) ?
1817
- '' : '(?:)'
1818
- );
1819
- },
1820
- {leadChar: '\\'}
1821
- );
1822
-
1823
- /*
1824
- * Numbered backreference or octal, plus any following digits: `\0`, `\11`, etc. Octals except `\0`
1825
- * not followed by 0-9 and backreferences to unopened capture groups throw an error. Other matches
1826
- * are returned unaltered. IE < 9 doesn't support backreferences above `\99` in regex syntax.
1827
- */
1828
- add(
1829
- /\\(\d+)/,
1830
- function(match, scope) {
1831
- if (
1832
- !(
1833
- scope === defaultScope &&
1834
- /^[1-9]/.test(match[1]) &&
1835
- +match[1] <= this.captureNames.length
1836
- ) &&
1837
- match[1] !== '0'
1838
- ) {
1839
- throw new SyntaxError('Cannot use octal escape or backreference to undefined group ' +
1840
- match[0]);
1841
- }
1842
- return match[0];
1843
- },
1844
- {
1845
- scope: 'all',
1846
- leadChar: '\\'
1847
- }
1848
- );
1849
-
1850
- /*
1851
- * Named capturing group; match the opening delimiter only: `(?<name>`. Capture names can use the
1852
- * characters A-Z, a-z, 0-9, _, and $ only. Names can't be integers. Supports Python-style
1853
- * `(?P<name>` as an alternate syntax to avoid issues in some older versions of Opera which natively
1854
- * supported the Python-style syntax. Otherwise, XRegExp might treat numbered backreferences to
1855
- * Python-style named capture as octals.
1856
- */
1857
- add(
1858
- /\(\?P?<([\w$]+)>/,
1859
- function(match) {
1860
- // Disallow bare integers as names because named backreferences are added to match
1861
- // arrays and therefore numeric properties may lead to incorrect lookups
1862
- if (!isNaN(match[1])) {
1863
- throw new SyntaxError('Cannot use integer as capture name ' + match[0]);
1864
- }
1865
- if (match[1] === 'length' || match[1] === '__proto__') {
1866
- throw new SyntaxError('Cannot use reserved word as capture name ' + match[0]);
1867
- }
1868
- if (indexOf(this.captureNames, match[1]) > -1) {
1869
- throw new SyntaxError('Cannot use same name for multiple groups ' + match[0]);
1870
- }
1871
- this.captureNames.push(match[1]);
1872
- this.hasNamedCapture = true;
1873
- return '(';
1874
- },
1875
- {leadChar: '('}
1876
- );
1877
-
1878
- /*
1879
- * Capturing group; match the opening parenthesis only. Required for support of named capturing
1880
- * groups. Also adds explicit capture mode (flag n).
1881
- */
1882
- add(
1883
- /\((?!\?)/,
1884
- function(match, scope, flags) {
1885
- if (flags.indexOf('n') > -1) {
1886
- return '(?:';
1887
- }
1888
- this.captureNames.push(null);
1889
- return '(';
1890
- },
1891
- {
1892
- optionalFlags: 'n',
1893
- leadChar: '('
1894
- }
1895
- );
1896
-
1897
- /* ==============================
1898
- * Expose XRegExp
1899
- * ============================== */
1900
-
1901
- return self;
1902
-
1903
- }());
1904
-
1905
- /*!
1906
- * XRegExp.build 3.0.0
1907
- * <http://xregexp.com/>
1908
- * Steven Levithan (c) 2012-2015 MIT License
1909
- * Inspired by Lea Verou's RegExp.create <http://lea.verou.me/>
1910
- */
1911
-
1912
- (function(XRegExp) {
1913
- 'use strict';
1914
-
1915
- var REGEX_DATA = 'xregexp',
1916
- subParts = /(\()(?!\?)|\\([1-9]\d*)|\\[\s\S]|\[(?:[^\\\]]|\\[\s\S])*]/g,
1917
- parts = XRegExp.union([/\({{([\w$]+)}}\)|{{([\w$]+)}}/, subParts], 'g');
1918
-
1919
- /**
1920
- * Strips a leading `^` and trailing unescaped `$`, if both are present.
1921
- *
1922
- * @private
1923
- * @param {String} pattern Pattern to process.
1924
- * @returns {String} Pattern with edge anchors removed.
1925
- */
1926
- function deanchor(pattern) {
1927
- var leadingAnchor = /^\^/,
1928
- trailingAnchor = /\$$/;
1929
-
1930
- // Ensure that the trailing `$` isn't escaped
1931
- if (leadingAnchor.test(pattern) && trailingAnchor.test(pattern.replace(/\\[\s\S]/g, ''))) {
1932
- return pattern.replace(leadingAnchor, '').replace(trailingAnchor, '');
1933
- }
1934
-
1935
- return pattern;
1936
- }
1937
-
1938
- /**
1939
- * Converts the provided value to an XRegExp. Native RegExp flags are not preserved.
1940
- *
1941
- * @private
1942
- * @param {String|RegExp} value Value to convert.
1943
- * @returns {RegExp} XRegExp object with XRegExp syntax applied.
1944
- */
1945
- function asXRegExp(value) {
1946
- return XRegExp.isRegExp(value) ?
1947
- (value[REGEX_DATA] && value[REGEX_DATA].captureNames ?
1948
- // Don't recompile, to preserve capture names
1949
- value :
1950
- // Recompile as XRegExp
1951
- XRegExp(value.source)
1952
- ) :
1953
- // Compile string as XRegExp
1954
- XRegExp(value);
1955
- }
1956
-
1957
- /**
1958
- * Builds regexes using named subpatterns, for readability and pattern reuse. Backreferences in the
1959
- * outer pattern and provided subpatterns are automatically renumbered to work correctly. Native
1960
- * flags used by provided subpatterns are ignored in favor of the `flags` argument.
1961
- *
1962
- * @memberOf XRegExp
1963
- * @param {String} pattern XRegExp pattern using `{{name}}` for embedded subpatterns. Allows
1964
- * `({{name}})` as shorthand for `(?<name>{{name}})`. Patterns cannot be embedded within
1965
- * character classes.
1966
- * @param {Object} subs Lookup object for named subpatterns. Values can be strings or regexes. A
1967
- * leading `^` and trailing unescaped `$` are stripped from subpatterns, if both are present.
1968
- * @param {String} [flags] Any combination of XRegExp flags.
1969
- * @returns {RegExp} Regex with interpolated subpatterns.
1970
- * @example
1971
- *
1972
- * var time = XRegExp.build('(?x)^ {{hours}} ({{minutes}}) $', {
1973
- * hours: XRegExp.build('{{h12}} : | {{h24}}', {
1974
- * h12: /1[0-2]|0?[1-9]/,
1975
- * h24: /2[0-3]|[01][0-9]/
1976
- * }, 'x'),
1977
- * minutes: /^[0-5][0-9]$/
1978
- * });
1979
- * time.test('10:59'); // -> true
1980
- * XRegExp.exec('10:59', time).minutes; // -> '59'
1981
- */
1982
- XRegExp.build = function(pattern, subs, flags) {
1983
- var inlineFlags = /^\(\?([\w$]+)\)/.exec(pattern),
1984
- data = {},
1985
- numCaps = 0, // 'Caps' is short for captures
1986
- numPriorCaps,
1987
- numOuterCaps = 0,
1988
- outerCapsMap = [0],
1989
- outerCapNames,
1990
- sub,
1991
- p;
1992
-
1993
- // Add flags within a leading mode modifier to the overall pattern's flags
1994
- if (inlineFlags) {
1995
- flags = flags || '';
1996
- inlineFlags[1].replace(/./g, function(flag) {
1997
- // Don't add duplicates
1998
- flags += (flags.indexOf(flag) > -1 ? '' : flag);
1999
- });
2000
- }
2001
-
2002
- for (p in subs) {
2003
- if (subs.hasOwnProperty(p)) {
2004
- // Passing to XRegExp enables extended syntax and ensures independent validity,
2005
- // lest an unescaped `(`, `)`, `[`, or trailing `\` breaks the `(?:)` wrapper. For
2006
- // subpatterns provided as native regexes, it dies on octals and adds the property
2007
- // used to hold extended regex instance data, for simplicity
2008
- sub = asXRegExp(subs[p]);
2009
- data[p] = {
2010
- // Deanchoring allows embedding independently useful anchored regexes. If you
2011
- // really need to keep your anchors, double them (i.e., `^^...$$`)
2012
- pattern: deanchor(sub.source),
2013
- names: sub[REGEX_DATA].captureNames || []
2014
- };
2015
- }
2016
- }
2017
-
2018
- // Passing to XRegExp dies on octals and ensures the outer pattern is independently valid;
2019
- // helps keep this simple. Named captures will be put back
2020
- pattern = asXRegExp(pattern);
2021
- outerCapNames = pattern[REGEX_DATA].captureNames || [];
2022
- pattern = pattern.source.replace(parts, function($0, $1, $2, $3, $4) {
2023
- var subName = $1 || $2, capName, intro;
2024
- // Named subpattern
2025
- if (subName) {
2026
- if (!data.hasOwnProperty(subName)) {
2027
- throw new ReferenceError('Undefined property ' + $0);
2028
- }
2029
- // Named subpattern was wrapped in a capturing group
2030
- if ($1) {
2031
- capName = outerCapNames[numOuterCaps];
2032
- outerCapsMap[++numOuterCaps] = ++numCaps;
2033
- // If it's a named group, preserve the name. Otherwise, use the subpattern name
2034
- // as the capture name
2035
- intro = '(?<' + (capName || subName) + '>';
2036
- } else {
2037
- intro = '(?:';
2038
- }
2039
- numPriorCaps = numCaps;
2040
- return intro + data[subName].pattern.replace(subParts, function(match, paren, backref) {
2041
- // Capturing group
2042
- if (paren) {
2043
- capName = data[subName].names[numCaps - numPriorCaps];
2044
- ++numCaps;
2045
- // If the current capture has a name, preserve the name
2046
- if (capName) {
2047
- return '(?<' + capName + '>';
2048
- }
2049
- // Backreference
2050
- } else if (backref) {
2051
- // Rewrite the backreference
2052
- return '\\' + (+backref + numPriorCaps);
2053
- }
2054
- return match;
2055
- }) + ')';
2056
- }
2057
- // Capturing group
2058
- if ($3) {
2059
- capName = outerCapNames[numOuterCaps];
2060
- outerCapsMap[++numOuterCaps] = ++numCaps;
2061
- // If the current capture has a name, preserve the name
2062
- if (capName) {
2063
- return '(?<' + capName + '>';
2064
- }
2065
- // Backreference
2066
- } else if ($4) {
2067
- // Rewrite the backreference
2068
- return '\\' + outerCapsMap[+$4];
2069
- }
2070
- return $0;
2071
- });
2072
-
2073
- return XRegExp(pattern, flags);
2074
- };
2075
-
2076
- }(XRegExp));
2077
-
2078
- /*!
2079
- * XRegExp.matchRecursive 3.0.0
2080
- * <http://xregexp.com/>
2081
- * Steven Levithan (c) 2009-2015 MIT License
2082
- */
2083
-
2084
- (function(XRegExp) {
2085
- 'use strict';
2086
-
2087
- /**
2088
- * Returns a match detail object composed of the provided values.
2089
- *
2090
- * @private
2091
- */
2092
- function row(name, value, start, end) {
2093
- return {
2094
- name: name,
2095
- value: value,
2096
- start: start,
2097
- end: end
2098
- };
2099
- }
2100
-
2101
- /**
2102
- * Returns an array of match strings between outermost left and right delimiters, or an array of
2103
- * objects with detailed match parts and position data. An error is thrown if delimiters are
2104
- * unbalanced within the data.
2105
- *
2106
- * @memberOf XRegExp
2107
- * @param {String} str String to search.
2108
- * @param {String} left Left delimiter as an XRegExp pattern.
2109
- * @param {String} right Right delimiter as an XRegExp pattern.
2110
- * @param {String} [flags] Any native or XRegExp flags, used for the left and right delimiters.
2111
- * @param {Object} [options] Lets you specify `valueNames` and `escapeChar` options.
2112
- * @returns {Array} Array of matches, or an empty array.
2113
- * @example
2114
- *
2115
- * // Basic usage
2116
- * var str = '(t((e))s)t()(ing)';
2117
- * XRegExp.matchRecursive(str, '\\(', '\\)', 'g');
2118
- * // -> ['t((e))s', '', 'ing']
2119
- *
2120
- * // Extended information mode with valueNames
2121
- * str = 'Here is <div> <div>an</div></div> example';
2122
- * XRegExp.matchRecursive(str, '<div\\s*>', '</div>', 'gi', {
2123
- * valueNames: ['between', 'left', 'match', 'right']
2124
- * });
2125
- * // -> [
2126
- * // {name: 'between', value: 'Here is ', start: 0, end: 8},
2127
- * // {name: 'left', value: '<div>', start: 8, end: 13},
2128
- * // {name: 'match', value: ' <div>an</div>', start: 13, end: 27},
2129
- * // {name: 'right', value: '</div>', start: 27, end: 33},
2130
- * // {name: 'between', value: ' example', start: 33, end: 41}
2131
- * // ]
2132
- *
2133
- * // Omitting unneeded parts with null valueNames, and using escapeChar
2134
- * str = '...{1}\\{{function(x,y){return y+x;}}';
2135
- * XRegExp.matchRecursive(str, '{', '}', 'g', {
2136
- * valueNames: ['literal', null, 'value', null],
2137
- * escapeChar: '\\'
2138
- * });
2139
- * // -> [
2140
- * // {name: 'literal', value: '...', start: 0, end: 3},
2141
- * // {name: 'value', value: '1', start: 4, end: 5},
2142
- * // {name: 'literal', value: '\\{', start: 6, end: 8},
2143
- * // {name: 'value', value: 'function(x,y){return y+x;}', start: 9, end: 35}
2144
- * // ]
2145
- *
2146
- * // Sticky mode via flag y
2147
- * str = '<1><<<2>>><3>4<5>';
2148
- * XRegExp.matchRecursive(str, '<', '>', 'gy');
2149
- * // -> ['1', '<<2>>', '3']
2150
- */
2151
- XRegExp.matchRecursive = function(str, left, right, flags, options) {
2152
- flags = flags || '';
2153
- options = options || {};
2154
- var global = flags.indexOf('g') > -1,
2155
- sticky = flags.indexOf('y') > -1,
2156
- // Flag `y` is controlled internally
2157
- basicFlags = flags.replace(/y/g, ''),
2158
- escapeChar = options.escapeChar,
2159
- vN = options.valueNames,
2160
- output = [],
2161
- openTokens = 0,
2162
- delimStart = 0,
2163
- delimEnd = 0,
2164
- lastOuterEnd = 0,
2165
- outerStart,
2166
- innerStart,
2167
- leftMatch,
2168
- rightMatch,
2169
- esc;
2170
- left = XRegExp(left, basicFlags);
2171
- right = XRegExp(right, basicFlags);
2172
-
2173
- if (escapeChar) {
2174
- if (escapeChar.length > 1) {
2175
- throw new Error('Cannot use more than one escape character');
2176
- }
2177
- escapeChar = XRegExp.escape(escapeChar);
2178
- // Using `XRegExp.union` safely rewrites backreferences in `left` and `right`
2179
- esc = new RegExp(
2180
- '(?:' + escapeChar + '[\\S\\s]|(?:(?!' +
2181
- XRegExp.union([left, right]).source +
2182
- ')[^' + escapeChar + '])+)+',
2183
- // Flags `gy` not needed here
2184
- flags.replace(/[^imu]+/g, '')
2185
- );
2186
- }
2187
-
2188
- while (true) {
2189
- // If using an escape character, advance to the delimiter's next starting position,
2190
- // skipping any escaped characters in between
2191
- if (escapeChar) {
2192
- delimEnd += (XRegExp.exec(str, esc, delimEnd, 'sticky') || [''])[0].length;
2193
- }
2194
- leftMatch = XRegExp.exec(str, left, delimEnd);
2195
- rightMatch = XRegExp.exec(str, right, delimEnd);
2196
- // Keep the leftmost match only
2197
- if (leftMatch && rightMatch) {
2198
- if (leftMatch.index <= rightMatch.index) {
2199
- rightMatch = null;
2200
- } else {
2201
- leftMatch = null;
2202
- }
2203
- }
2204
- // Paths (LM: leftMatch, RM: rightMatch, OT: openTokens):
2205
- // LM | RM | OT | Result
2206
- // 1 | 0 | 1 | loop
2207
- // 1 | 0 | 0 | loop
2208
- // 0 | 1 | 1 | loop
2209
- // 0 | 1 | 0 | throw
2210
- // 0 | 0 | 1 | throw
2211
- // 0 | 0 | 0 | break
2212
- // The paths above don't include the sticky mode special case. The loop ends after the
2213
- // first completed match if not `global`.
2214
- if (leftMatch || rightMatch) {
2215
- delimStart = (leftMatch || rightMatch).index;
2216
- delimEnd = delimStart + (leftMatch || rightMatch)[0].length;
2217
- } else if (!openTokens) {
2218
- break;
2219
- }
2220
- if (sticky && !openTokens && delimStart > lastOuterEnd) {
2221
- break;
2222
- }
2223
- if (leftMatch) {
2224
- if (!openTokens) {
2225
- outerStart = delimStart;
2226
- innerStart = delimEnd;
2227
- }
2228
- ++openTokens;
2229
- } else if (rightMatch && openTokens) {
2230
- if (!--openTokens) {
2231
- if (vN) {
2232
- if (vN[0] && outerStart > lastOuterEnd) {
2233
- output.push(row(vN[0], str.slice(lastOuterEnd, outerStart), lastOuterEnd, outerStart));
2234
- }
2235
- if (vN[1]) {
2236
- output.push(row(vN[1], str.slice(outerStart, innerStart), outerStart, innerStart));
2237
- }
2238
- if (vN[2]) {
2239
- output.push(row(vN[2], str.slice(innerStart, delimStart), innerStart, delimStart));
2240
- }
2241
- if (vN[3]) {
2242
- output.push(row(vN[3], str.slice(delimStart, delimEnd), delimStart, delimEnd));
2243
- }
2244
- } else {
2245
- output.push(str.slice(innerStart, delimStart));
2246
- }
2247
- lastOuterEnd = delimEnd;
2248
- if (!global) {
2249
- break;
2250
- }
2251
- }
2252
- } else {
2253
- throw new Error('Unbalanced delimiter found in string');
2254
- }
2255
- // If the delimiter matched an empty string, avoid an infinite loop
2256
- if (delimStart === delimEnd) {
2257
- ++delimEnd;
2258
- }
2259
- }
2260
-
2261
- if (global && !sticky && vN && vN[0] && str.length > lastOuterEnd) {
2262
- output.push(row(vN[0], str.slice(lastOuterEnd), lastOuterEnd, str.length));
2263
- }
2264
-
2265
- return output;
2266
- };
2267
-
2268
- }(XRegExp));
2269
-
2270
- /*!
2271
- * XRegExp Unicode Base 3.0.0
2272
- * <http://xregexp.com/>
2273
- * Steven Levithan (c) 2008-2015 MIT License
2274
- */
2275
-
2276
- /**
2277
- * Adds base support for Unicode matching:
2278
- * - Adds syntax `\p{..}` for matching Unicode tokens. Tokens can be inverted using `\P{..}` or
2279
- * `\p{^..}`. Token names ignore case, spaces, hyphens, and underscores. You can omit the brackets
2280
- * for token names that are a single letter (e.g. `\pL` or `PL`).
2281
- * - Adds flag A (astral), which enables 21-bit Unicode support.
2282
- * - Adds the `XRegExp.addUnicodeData` method used by other addons to provide character data.
2283
- *
2284
- * Unicode Base relies on externally provided Unicode character data. Official addons are available
2285
- * to provide data for Unicode categories, scripts, blocks, and properties.
2286
- *
2287
- * @requires XRegExp
2288
- */
2289
- (function(XRegExp) {
2290
- 'use strict';
2291
-
2292
- // Storage for Unicode data
2293
- var unicode = {};
2294
-
2295
- /* ==============================
2296
- * Private functions
2297
- * ============================== */
2298
-
2299
- // Generates a token lookup name: lowercase, with hyphens, spaces, and underscores removed
2300
- function normalize(name) {
2301
- return name.replace(/[- _]+/g, '').toLowerCase();
2302
- }
2303
-
2304
- // Adds leading zeros if shorter than four characters
2305
- function pad4(str) {
2306
- while (str.length < 4) {
2307
- str = '0' + str;
2308
- }
2309
- return str;
2310
- }
2311
-
2312
- // Converts a hexadecimal number to decimal
2313
- function dec(hex) {
2314
- return parseInt(hex, 16);
2315
- }
2316
-
2317
- // Converts a decimal number to hexadecimal
2318
- function hex(dec) {
2319
- return parseInt(dec, 10).toString(16);
2320
- }
2321
-
2322
- // Gets the decimal code of a literal code unit, \xHH, \uHHHH, or a backslash-escaped literal
2323
- function charCode(chr) {
2324
- var esc = /^\\[xu](.+)/.exec(chr);
2325
- return esc ?
2326
- dec(esc[1]) :
2327
- chr.charCodeAt(chr.charAt(0) === '\\' ? 1 : 0);
2328
- }
2329
-
2330
- // Inverts a list of ordered BMP characters and ranges
2331
- function invertBmp(range) {
2332
- var output = '',
2333
- lastEnd = -1,
2334
- start;
2335
- XRegExp.forEach(range, /(\\x..|\\u....|\\?[\s\S])(?:-(\\x..|\\u....|\\?[\s\S]))?/, function(m) {
2336
- start = charCode(m[1]);
2337
- if (start > (lastEnd + 1)) {
2338
- output += '\\u' + pad4(hex(lastEnd + 1));
2339
- if (start > (lastEnd + 2)) {
2340
- output += '-\\u' + pad4(hex(start - 1));
2341
- }
2342
- }
2343
- lastEnd = charCode(m[2] || m[1]);
2344
- });
2345
- if (lastEnd < 0xFFFF) {
2346
- output += '\\u' + pad4(hex(lastEnd + 1));
2347
- if (lastEnd < 0xFFFE) {
2348
- output += '-\\uFFFF';
2349
- }
2350
- }
2351
- return output;
2352
- }
2353
-
2354
- // Generates an inverted BMP range on first use
2355
- function cacheInvertedBmp(slug) {
2356
- var prop = 'b!';
2357
- return unicode[slug][prop] || (
2358
- unicode[slug][prop] = invertBmp(unicode[slug].bmp)
2359
- );
2360
- }
2361
-
2362
- // Combines and optionally negates BMP and astral data
2363
- function buildAstral(slug, isNegated) {
2364
- var item = unicode[slug],
2365
- combined = '';
2366
- if (item.bmp && !item.isBmpLast) {
2367
- combined = '[' + item.bmp + ']' + (item.astral ? '|' : '');
2368
- }
2369
- if (item.astral) {
2370
- combined += item.astral;
2371
- }
2372
- if (item.isBmpLast && item.bmp) {
2373
- combined += (item.astral ? '|' : '') + '[' + item.bmp + ']';
2374
- }
2375
- // Astral Unicode tokens always match a code point, never a code unit
2376
- return isNegated ?
2377
- '(?:(?!' + combined + ')(?:[\uD800-\uDBFF][\uDC00-\uDFFF]|[\0-\uFFFF]))' :
2378
- '(?:' + combined + ')';
2379
- }
2380
-
2381
- // Builds a complete astral pattern on first use
2382
- function cacheAstral(slug, isNegated) {
2383
- var prop = isNegated ? 'a!' : 'a=';
2384
- return unicode[slug][prop] || (
2385
- unicode[slug][prop] = buildAstral(slug, isNegated)
2386
- );
2387
- }
2388
-
2389
- /* ==============================
2390
- * Core functionality
2391
- * ============================== */
2392
-
2393
- /*
2394
- * Add Unicode token syntax: \p{..}, \P{..}, \p{^..}. Also add astral mode (flag A).
2395
- */
2396
- XRegExp.addToken(
2397
- // Use `*` instead of `+` to avoid capturing `^` as the token name in `\p{^}`
2398
- /\\([pP])(?:{(\^?)([^}]*)}|([A-Za-z]))/,
2399
- function(match, scope, flags) {
2400
- var ERR_DOUBLE_NEG = 'Invalid double negation ',
2401
- ERR_UNKNOWN_NAME = 'Unknown Unicode token ',
2402
- ERR_UNKNOWN_REF = 'Unicode token missing data ',
2403
- ERR_ASTRAL_ONLY = 'Astral mode required for Unicode token ',
2404
- ERR_ASTRAL_IN_CLASS = 'Astral mode does not support Unicode tokens within character classes',
2405
- // Negated via \P{..} or \p{^..}
2406
- isNegated = match[1] === 'P' || !!match[2],
2407
- // Switch from BMP (0-FFFF) to astral (0-10FFFF) mode via flag A
2408
- isAstralMode = flags.indexOf('A') > -1,
2409
- // Token lookup name. Check `[4]` first to avoid passing `undefined` via `\p{}`
2410
- slug = normalize(match[4] || match[3]),
2411
- // Token data object
2412
- item = unicode[slug];
2413
-
2414
- if (match[1] === 'P' && match[2]) {
2415
- throw new SyntaxError(ERR_DOUBLE_NEG + match[0]);
2416
- }
2417
- if (!unicode.hasOwnProperty(slug)) {
2418
- throw new SyntaxError(ERR_UNKNOWN_NAME + match[0]);
2419
- }
2420
-
2421
- // Switch to the negated form of the referenced Unicode token
2422
- if (item.inverseOf) {
2423
- slug = normalize(item.inverseOf);
2424
- if (!unicode.hasOwnProperty(slug)) {
2425
- throw new ReferenceError(ERR_UNKNOWN_REF + match[0] + ' -> ' + item.inverseOf);
2426
- }
2427
- item = unicode[slug];
2428
- isNegated = !isNegated;
2429
- }
2430
-
2431
- if (!(item.bmp || isAstralMode)) {
2432
- throw new SyntaxError(ERR_ASTRAL_ONLY + match[0]);
2433
- }
2434
- if (isAstralMode) {
2435
- if (scope === 'class') {
2436
- throw new SyntaxError(ERR_ASTRAL_IN_CLASS);
2437
- }
2438
-
2439
- return cacheAstral(slug, isNegated);
2440
- }
2441
-
2442
- return scope === 'class' ?
2443
- (isNegated ? cacheInvertedBmp(slug) : item.bmp) :
2444
- (isNegated ? '[^' : '[') + item.bmp + ']';
2445
- },
2446
- {
2447
- scope: 'all',
2448
- optionalFlags: 'A',
2449
- leadChar: '\\'
2450
- }
2451
- );
2452
-
2453
- /**
2454
- * Adds to the list of Unicode tokens that XRegExp regexes can match via `\p` or `\P`.
2455
- *
2456
- * @memberOf XRegExp
2457
- * @param {Array} data Objects with named character ranges. Each object may have properties `name`,
2458
- * `alias`, `isBmpLast`, `inverseOf`, `bmp`, and `astral`. All but `name` are optional, although
2459
- * one of `bmp` or `astral` is required (unless `inverseOf` is set). If `astral` is absent, the
2460
- * `bmp` data is used for BMP and astral modes. If `bmp` is absent, the name errors in BMP mode
2461
- * but works in astral mode. If both `bmp` and `astral` are provided, the `bmp` data only is used
2462
- * in BMP mode, and the combination of `bmp` and `astral` data is used in astral mode.
2463
- * `isBmpLast` is needed when a token matches orphan high surrogates *and* uses surrogate pairs
2464
- * to match astral code points. The `bmp` and `astral` data should be a combination of literal
2465
- * characters and `\xHH` or `\uHHHH` escape sequences, with hyphens to create ranges. Any regex
2466
- * metacharacters in the data should be escaped, apart from range-creating hyphens. The `astral`
2467
- * data can additionally use character classes and alternation, and should use surrogate pairs to
2468
- * represent astral code points. `inverseOf` can be used to avoid duplicating character data if a
2469
- * Unicode token is defined as the exact inverse of another token.
2470
- * @example
2471
- *
2472
- * // Basic use
2473
- * XRegExp.addUnicodeData([{
2474
- * name: 'XDigit',
2475
- * alias: 'Hexadecimal',
2476
- * bmp: '0-9A-Fa-f'
2477
- * }]);
2478
- * XRegExp('\\p{XDigit}:\\p{Hexadecimal}+').test('0:3D'); // -> true
2479
- */
2480
- XRegExp.addUnicodeData = function(data) {
2481
- var ERR_NO_NAME = 'Unicode token requires name',
2482
- ERR_NO_DATA = 'Unicode token has no character data ',
2483
- item,
2484
- i;
2485
-
2486
- for (i = 0; i < data.length; ++i) {
2487
- item = data[i];
2488
- if (!item.name) {
2489
- throw new Error(ERR_NO_NAME);
2490
- }
2491
- if (!(item.inverseOf || item.bmp || item.astral)) {
2492
- throw new Error(ERR_NO_DATA + item.name);
2493
- }
2494
- unicode[normalize(item.name)] = item;
2495
- if (item.alias) {
2496
- unicode[normalize(item.alias)] = item;
2497
- }
2498
- }
2499
-
2500
- // Reset the pattern cache used by the `XRegExp` constructor, since the same pattern and
2501
- // flags might now produce different results
2502
- XRegExp.cache.flush('patterns');
2503
- };
2504
-
2505
- }(XRegExp));
2506
-
2507
- /*!
2508
- * XRegExp Unicode Blocks 3.0.0
2509
- * <http://xregexp.com/>
2510
- * Steven Levithan (c) 2010-2015 MIT License
2511
- * Unicode data provided by Mathias Bynens <http://mathiasbynens.be/>
2512
- */
2513
-
2514
- /**
2515
- * Adds support for all Unicode blocks. Block names use the prefix 'In'. E.g., `\p{InBasicLatin}`.
2516
- * Token names are case insensitive, and any spaces, hyphens, and underscores are ignored.
2517
- *
2518
- * Uses Unicode 8.0.0.
2519
- *
2520
- * @requires XRegExp, Unicode Base
2521
- */
2522
- (function(XRegExp) {
2523
- 'use strict';
2524
-
2525
- if (!XRegExp.addUnicodeData) {
2526
- throw new ReferenceError('Unicode Base must be loaded before Unicode Blocks');
2527
- }
2528
-
2529
- XRegExp.addUnicodeData([
2530
- {
2531
- name: 'InAegean_Numbers',
2532
- astral: '\uD800[\uDD00-\uDD3F]'
2533
- },
2534
- {
2535
- name: 'InAhom',
2536
- astral: '\uD805[\uDF00-\uDF3F]'
2537
- },
2538
- {
2539
- name: 'InAlchemical_Symbols',
2540
- astral: '\uD83D[\uDF00-\uDF7F]'
2541
- },
2542
- {
2543
- name: 'InAlphabetic_Presentation_Forms',
2544
- bmp: '\uFB00-\uFB4F'
2545
- },
2546
- {
2547
- name: 'InAnatolian_Hieroglyphs',
2548
- astral: '\uD811[\uDC00-\uDE7F]'
2549
- },
2550
- {
2551
- name: 'InAncient_Greek_Musical_Notation',
2552
- astral: '\uD834[\uDE00-\uDE4F]'
2553
- },
2554
- {
2555
- name: 'InAncient_Greek_Numbers',
2556
- astral: '\uD800[\uDD40-\uDD8F]'
2557
- },
2558
- {
2559
- name: 'InAncient_Symbols',
2560
- astral: '\uD800[\uDD90-\uDDCF]'
2561
- },
2562
- {
2563
- name: 'InArabic',
2564
- bmp: '\u0600-\u06FF'
2565
- },
2566
- {
2567
- name: 'InArabic_Extended_A',
2568
- bmp: '\u08A0-\u08FF'
2569
- },
2570
- {
2571
- name: 'InArabic_Mathematical_Alphabetic_Symbols',
2572
- astral: '\uD83B[\uDE00-\uDEFF]'
2573
- },
2574
- {
2575
- name: 'InArabic_Presentation_Forms_A',
2576
- bmp: '\uFB50-\uFDFF'
2577
- },
2578
- {
2579
- name: 'InArabic_Presentation_Forms_B',
2580
- bmp: '\uFE70-\uFEFF'
2581
- },
2582
- {
2583
- name: 'InArabic_Supplement',
2584
- bmp: '\u0750-\u077F'
2585
- },
2586
- {
2587
- name: 'InArmenian',
2588
- bmp: '\u0530-\u058F'
2589
- },
2590
- {
2591
- name: 'InArrows',
2592
- bmp: '\u2190-\u21FF'
2593
- },
2594
- {
2595
- name: 'InAvestan',
2596
- astral: '\uD802[\uDF00-\uDF3F]'
2597
- },
2598
- {
2599
- name: 'InBalinese',
2600
- bmp: '\u1B00-\u1B7F'
2601
- },
2602
- {
2603
- name: 'InBamum',
2604
- bmp: '\uA6A0-\uA6FF'
2605
- },
2606
- {
2607
- name: 'InBamum_Supplement',
2608
- astral: '\uD81A[\uDC00-\uDE3F]'
2609
- },
2610
- {
2611
- name: 'InBasic_Latin',
2612
- bmp: '\0-\x7F'
2613
- },
2614
- {
2615
- name: 'InBassa_Vah',
2616
- astral: '\uD81A[\uDED0-\uDEFF]'
2617
- },
2618
- {
2619
- name: 'InBatak',
2620
- bmp: '\u1BC0-\u1BFF'
2621
- },
2622
- {
2623
- name: 'InBengali',
2624
- bmp: '\u0980-\u09FF'
2625
- },
2626
- {
2627
- name: 'InBlock_Elements',
2628
- bmp: '\u2580-\u259F'
2629
- },
2630
- {
2631
- name: 'InBopomofo',
2632
- bmp: '\u3100-\u312F'
2633
- },
2634
- {
2635
- name: 'InBopomofo_Extended',
2636
- bmp: '\u31A0-\u31BF'
2637
- },
2638
- {
2639
- name: 'InBox_Drawing',
2640
- bmp: '\u2500-\u257F'
2641
- },
2642
- {
2643
- name: 'InBrahmi',
2644
- astral: '\uD804[\uDC00-\uDC7F]'
2645
- },
2646
- {
2647
- name: 'InBraille_Patterns',
2648
- bmp: '\u2800-\u28FF'
2649
- },
2650
- {
2651
- name: 'InBuginese',
2652
- bmp: '\u1A00-\u1A1F'
2653
- },
2654
- {
2655
- name: 'InBuhid',
2656
- bmp: '\u1740-\u175F'
2657
- },
2658
- {
2659
- name: 'InByzantine_Musical_Symbols',
2660
- astral: '\uD834[\uDC00-\uDCFF]'
2661
- },
2662
- {
2663
- name: 'InCJK_Compatibility',
2664
- bmp: '\u3300-\u33FF'
2665
- },
2666
- {
2667
- name: 'InCJK_Compatibility_Forms',
2668
- bmp: '\uFE30-\uFE4F'
2669
- },
2670
- {
2671
- name: 'InCJK_Compatibility_Ideographs',
2672
- bmp: '\uF900-\uFAFF'
2673
- },
2674
- {
2675
- name: 'InCJK_Compatibility_Ideographs_Supplement',
2676
- astral: '\uD87E[\uDC00-\uDE1F]'
2677
- },
2678
- {
2679
- name: 'InCJK_Radicals_Supplement',
2680
- bmp: '\u2E80-\u2EFF'
2681
- },
2682
- {
2683
- name: 'InCJK_Strokes',
2684
- bmp: '\u31C0-\u31EF'
2685
- },
2686
- {
2687
- name: 'InCJK_Symbols_and_Punctuation',
2688
- bmp: '\u3000-\u303F'
2689
- },
2690
- {
2691
- name: 'InCJK_Unified_Ideographs',
2692
- bmp: '\u4E00-\u9FFF'
2693
- },
2694
- {
2695
- name: 'InCJK_Unified_Ideographs_Extension_A',
2696
- bmp: '\u3400-\u4DBF'
2697
- },
2698
- {
2699
- name: 'InCJK_Unified_Ideographs_Extension_B',
2700
- astral: '[\uD840-\uD868][\uDC00-\uDFFF]|\uD869[\uDC00-\uDEDF]'
2701
- },
2702
- {
2703
- name: 'InCJK_Unified_Ideographs_Extension_C',
2704
- astral: '\uD86D[\uDC00-\uDF3F]|[\uD86A-\uD86C][\uDC00-\uDFFF]|\uD869[\uDF00-\uDFFF]'
2705
- },
2706
- {
2707
- name: 'InCJK_Unified_Ideographs_Extension_D',
2708
- astral: '\uD86D[\uDF40-\uDFFF]|\uD86E[\uDC00-\uDC1F]'
2709
- },
2710
- {
2711
- name: 'InCJK_Unified_Ideographs_Extension_E',
2712
- astral: '[\uD86F-\uD872][\uDC00-\uDFFF]|\uD873[\uDC00-\uDEAF]|\uD86E[\uDC20-\uDFFF]'
2713
- },
2714
- {
2715
- name: 'InCarian',
2716
- astral: '\uD800[\uDEA0-\uDEDF]'
2717
- },
2718
- {
2719
- name: 'InCaucasian_Albanian',
2720
- astral: '\uD801[\uDD30-\uDD6F]'
2721
- },
2722
- {
2723
- name: 'InChakma',
2724
- astral: '\uD804[\uDD00-\uDD4F]'
2725
- },
2726
- {
2727
- name: 'InCham',
2728
- bmp: '\uAA00-\uAA5F'
2729
- },
2730
- {
2731
- name: 'InCherokee',
2732
- bmp: '\u13A0-\u13FF'
2733
- },
2734
- {
2735
- name: 'InCherokee_Supplement',
2736
- bmp: '\uAB70-\uABBF'
2737
- },
2738
- {
2739
- name: 'InCombining_Diacritical_Marks',
2740
- bmp: '\u0300-\u036F'
2741
- },
2742
- {
2743
- name: 'InCombining_Diacritical_Marks_Extended',
2744
- bmp: '\u1AB0-\u1AFF'
2745
- },
2746
- {
2747
- name: 'InCombining_Diacritical_Marks_Supplement',
2748
- bmp: '\u1DC0-\u1DFF'
2749
- },
2750
- {
2751
- name: 'InCombining_Diacritical_Marks_for_Symbols',
2752
- bmp: '\u20D0-\u20FF'
2753
- },
2754
- {
2755
- name: 'InCombining_Half_Marks',
2756
- bmp: '\uFE20-\uFE2F'
2757
- },
2758
- {
2759
- name: 'InCommon_Indic_Number_Forms',
2760
- bmp: '\uA830-\uA83F'
2761
- },
2762
- {
2763
- name: 'InControl_Pictures',
2764
- bmp: '\u2400-\u243F'
2765
- },
2766
- {
2767
- name: 'InCoptic',
2768
- bmp: '\u2C80-\u2CFF'
2769
- },
2770
- {
2771
- name: 'InCoptic_Epact_Numbers',
2772
- astral: '\uD800[\uDEE0-\uDEFF]'
2773
- },
2774
- {
2775
- name: 'InCounting_Rod_Numerals',
2776
- astral: '\uD834[\uDF60-\uDF7F]'
2777
- },
2778
- {
2779
- name: 'InCuneiform',
2780
- astral: '\uD808[\uDC00-\uDFFF]'
2781
- },
2782
- {
2783
- name: 'InCuneiform_Numbers_and_Punctuation',
2784
- astral: '\uD809[\uDC00-\uDC7F]'
2785
- },
2786
- {
2787
- name: 'InCurrency_Symbols',
2788
- bmp: '\u20A0-\u20CF'
2789
- },
2790
- {
2791
- name: 'InCypriot_Syllabary',
2792
- astral: '\uD802[\uDC00-\uDC3F]'
2793
- },
2794
- {
2795
- name: 'InCyrillic',
2796
- bmp: '\u0400-\u04FF'
2797
- },
2798
- {
2799
- name: 'InCyrillic_Extended_A',
2800
- bmp: '\u2DE0-\u2DFF'
2801
- },
2802
- {
2803
- name: 'InCyrillic_Extended_B',
2804
- bmp: '\uA640-\uA69F'
2805
- },
2806
- {
2807
- name: 'InCyrillic_Supplement',
2808
- bmp: '\u0500-\u052F'
2809
- },
2810
- {
2811
- name: 'InDeseret',
2812
- astral: '\uD801[\uDC00-\uDC4F]'
2813
- },
2814
- {
2815
- name: 'InDevanagari',
2816
- bmp: '\u0900-\u097F'
2817
- },
2818
- {
2819
- name: 'InDevanagari_Extended',
2820
- bmp: '\uA8E0-\uA8FF'
2821
- },
2822
- {
2823
- name: 'InDingbats',
2824
- bmp: '\u2700-\u27BF'
2825
- },
2826
- {
2827
- name: 'InDomino_Tiles',
2828
- astral: '\uD83C[\uDC30-\uDC9F]'
2829
- },
2830
- {
2831
- name: 'InDuployan',
2832
- astral: '\uD82F[\uDC00-\uDC9F]'
2833
- },
2834
- {
2835
- name: 'InEarly_Dynastic_Cuneiform',
2836
- astral: '\uD809[\uDC80-\uDD4F]'
2837
- },
2838
- {
2839
- name: 'InEgyptian_Hieroglyphs',
2840
- astral: '\uD80C[\uDC00-\uDFFF]|\uD80D[\uDC00-\uDC2F]'
2841
- },
2842
- {
2843
- name: 'InElbasan',
2844
- astral: '\uD801[\uDD00-\uDD2F]'
2845
- },
2846
- {
2847
- name: 'InEmoticons',
2848
- astral: '\uD83D[\uDE00-\uDE4F]'
2849
- },
2850
- {
2851
- name: 'InEnclosed_Alphanumeric_Supplement',
2852
- astral: '\uD83C[\uDD00-\uDDFF]'
2853
- },
2854
- {
2855
- name: 'InEnclosed_Alphanumerics',
2856
- bmp: '\u2460-\u24FF'
2857
- },
2858
- {
2859
- name: 'InEnclosed_CJK_Letters_and_Months',
2860
- bmp: '\u3200-\u32FF'
2861
- },
2862
- {
2863
- name: 'InEnclosed_Ideographic_Supplement',
2864
- astral: '\uD83C[\uDE00-\uDEFF]'
2865
- },
2866
- {
2867
- name: 'InEthiopic',
2868
- bmp: '\u1200-\u137F'
2869
- },
2870
- {
2871
- name: 'InEthiopic_Extended',
2872
- bmp: '\u2D80-\u2DDF'
2873
- },
2874
- {
2875
- name: 'InEthiopic_Extended_A',
2876
- bmp: '\uAB00-\uAB2F'
2877
- },
2878
- {
2879
- name: 'InEthiopic_Supplement',
2880
- bmp: '\u1380-\u139F'
2881
- },
2882
- {
2883
- name: 'InGeneral_Punctuation',
2884
- bmp: '\u2000-\u206F'
2885
- },
2886
- {
2887
- name: 'InGeometric_Shapes',
2888
- bmp: '\u25A0-\u25FF'
2889
- },
2890
- {
2891
- name: 'InGeometric_Shapes_Extended',
2892
- astral: '\uD83D[\uDF80-\uDFFF]'
2893
- },
2894
- {
2895
- name: 'InGeorgian',
2896
- bmp: '\u10A0-\u10FF'
2897
- },
2898
- {
2899
- name: 'InGeorgian_Supplement',
2900
- bmp: '\u2D00-\u2D2F'
2901
- },
2902
- {
2903
- name: 'InGlagolitic',
2904
- bmp: '\u2C00-\u2C5F'
2905
- },
2906
- {
2907
- name: 'InGothic',
2908
- astral: '\uD800[\uDF30-\uDF4F]'
2909
- },
2910
- {
2911
- name: 'InGrantha',
2912
- astral: '\uD804[\uDF00-\uDF7F]'
2913
- },
2914
- {
2915
- name: 'InGreek_Extended',
2916
- bmp: '\u1F00-\u1FFF'
2917
- },
2918
- {
2919
- name: 'InGreek_and_Coptic',
2920
- bmp: '\u0370-\u03FF'
2921
- },
2922
- {
2923
- name: 'InGujarati',
2924
- bmp: '\u0A80-\u0AFF'
2925
- },
2926
- {
2927
- name: 'InGurmukhi',
2928
- bmp: '\u0A00-\u0A7F'
2929
- },
2930
- {
2931
- name: 'InHalfwidth_and_Fullwidth_Forms',
2932
- bmp: '\uFF00-\uFFEF'
2933
- },
2934
- {
2935
- name: 'InHangul_Compatibility_Jamo',
2936
- bmp: '\u3130-\u318F'
2937
- },
2938
- {
2939
- name: 'InHangul_Jamo',
2940
- bmp: '\u1100-\u11FF'
2941
- },
2942
- {
2943
- name: 'InHangul_Jamo_Extended_A',
2944
- bmp: '\uA960-\uA97F'
2945
- },
2946
- {
2947
- name: 'InHangul_Jamo_Extended_B',
2948
- bmp: '\uD7B0-\uD7FF'
2949
- },
2950
- {
2951
- name: 'InHangul_Syllables',
2952
- bmp: '\uAC00-\uD7AF'
2953
- },
2954
- {
2955
- name: 'InHanunoo',
2956
- bmp: '\u1720-\u173F'
2957
- },
2958
- {
2959
- name: 'InHatran',
2960
- astral: '\uD802[\uDCE0-\uDCFF]'
2961
- },
2962
- {
2963
- name: 'InHebrew',
2964
- bmp: '\u0590-\u05FF'
2965
- },
2966
- {
2967
- name: 'InHigh_Private_Use_Surrogates',
2968
- bmp: '\uDB80-\uDBFF'
2969
- },
2970
- {
2971
- name: 'InHigh_Surrogates',
2972
- bmp: '\uD800-\uDB7F'
2973
- },
2974
- {
2975
- name: 'InHiragana',
2976
- bmp: '\u3040-\u309F'
2977
- },
2978
- {
2979
- name: 'InIPA_Extensions',
2980
- bmp: '\u0250-\u02AF'
2981
- },
2982
- {
2983
- name: 'InIdeographic_Description_Characters',
2984
- bmp: '\u2FF0-\u2FFF'
2985
- },
2986
- {
2987
- name: 'InImperial_Aramaic',
2988
- astral: '\uD802[\uDC40-\uDC5F]'
2989
- },
2990
- {
2991
- name: 'InInscriptional_Pahlavi',
2992
- astral: '\uD802[\uDF60-\uDF7F]'
2993
- },
2994
- {
2995
- name: 'InInscriptional_Parthian',
2996
- astral: '\uD802[\uDF40-\uDF5F]'
2997
- },
2998
- {
2999
- name: 'InJavanese',
3000
- bmp: '\uA980-\uA9DF'
3001
- },
3002
- {
3003
- name: 'InKaithi',
3004
- astral: '\uD804[\uDC80-\uDCCF]'
3005
- },
3006
- {
3007
- name: 'InKana_Supplement',
3008
- astral: '\uD82C[\uDC00-\uDCFF]'
3009
- },
3010
- {
3011
- name: 'InKanbun',
3012
- bmp: '\u3190-\u319F'
3013
- },
3014
- {
3015
- name: 'InKangxi_Radicals',
3016
- bmp: '\u2F00-\u2FDF'
3017
- },
3018
- {
3019
- name: 'InKannada',
3020
- bmp: '\u0C80-\u0CFF'
3021
- },
3022
- {
3023
- name: 'InKatakana',
3024
- bmp: '\u30A0-\u30FF'
3025
- },
3026
- {
3027
- name: 'InKatakana_Phonetic_Extensions',
3028
- bmp: '\u31F0-\u31FF'
3029
- },
3030
- {
3031
- name: 'InKayah_Li',
3032
- bmp: '\uA900-\uA92F'
3033
- },
3034
- {
3035
- name: 'InKharoshthi',
3036
- astral: '\uD802[\uDE00-\uDE5F]'
3037
- },
3038
- {
3039
- name: 'InKhmer',
3040
- bmp: '\u1780-\u17FF'
3041
- },
3042
- {
3043
- name: 'InKhmer_Symbols',
3044
- bmp: '\u19E0-\u19FF'
3045
- },
3046
- {
3047
- name: 'InKhojki',
3048
- astral: '\uD804[\uDE00-\uDE4F]'
3049
- },
3050
- {
3051
- name: 'InKhudawadi',
3052
- astral: '\uD804[\uDEB0-\uDEFF]'
3053
- },
3054
- {
3055
- name: 'InLao',
3056
- bmp: '\u0E80-\u0EFF'
3057
- },
3058
- {
3059
- name: 'InLatin_Extended_Additional',
3060
- bmp: '\u1E00-\u1EFF'
3061
- },
3062
- {
3063
- name: 'InLatin_Extended_A',
3064
- bmp: '\u0100-\u017F'
3065
- },
3066
- {
3067
- name: 'InLatin_Extended_B',
3068
- bmp: '\u0180-\u024F'
3069
- },
3070
- {
3071
- name: 'InLatin_Extended_C',
3072
- bmp: '\u2C60-\u2C7F'
3073
- },
3074
- {
3075
- name: 'InLatin_Extended_D',
3076
- bmp: '\uA720-\uA7FF'
3077
- },
3078
- {
3079
- name: 'InLatin_Extended_E',
3080
- bmp: '\uAB30-\uAB6F'
3081
- },
3082
- {
3083
- name: 'InLatin_1_Supplement',
3084
- bmp: '\x80-\xFF'
3085
- },
3086
- {
3087
- name: 'InLepcha',
3088
- bmp: '\u1C00-\u1C4F'
3089
- },
3090
- {
3091
- name: 'InLetterlike_Symbols',
3092
- bmp: '\u2100-\u214F'
3093
- },
3094
- {
3095
- name: 'InLimbu',
3096
- bmp: '\u1900-\u194F'
3097
- },
3098
- {
3099
- name: 'InLinear_A',
3100
- astral: '\uD801[\uDE00-\uDF7F]'
3101
- },
3102
- {
3103
- name: 'InLinear_B_Ideograms',
3104
- astral: '\uD800[\uDC80-\uDCFF]'
3105
- },
3106
- {
3107
- name: 'InLinear_B_Syllabary',
3108
- astral: '\uD800[\uDC00-\uDC7F]'
3109
- },
3110
- {
3111
- name: 'InLisu',
3112
- bmp: '\uA4D0-\uA4FF'
3113
- },
3114
- {
3115
- name: 'InLow_Surrogates',
3116
- bmp: '\uDC00-\uDFFF'
3117
- },
3118
- {
3119
- name: 'InLycian',
3120
- astral: '\uD800[\uDE80-\uDE9F]'
3121
- },
3122
- {
3123
- name: 'InLydian',
3124
- astral: '\uD802[\uDD20-\uDD3F]'
3125
- },
3126
- {
3127
- name: 'InMahajani',
3128
- astral: '\uD804[\uDD50-\uDD7F]'
3129
- },
3130
- {
3131
- name: 'InMahjong_Tiles',
3132
- astral: '\uD83C[\uDC00-\uDC2F]'
3133
- },
3134
- {
3135
- name: 'InMalayalam',
3136
- bmp: '\u0D00-\u0D7F'
3137
- },
3138
- {
3139
- name: 'InMandaic',
3140
- bmp: '\u0840-\u085F'
3141
- },
3142
- {
3143
- name: 'InManichaean',
3144
- astral: '\uD802[\uDEC0-\uDEFF]'
3145
- },
3146
- {
3147
- name: 'InMathematical_Alphanumeric_Symbols',
3148
- astral: '\uD835[\uDC00-\uDFFF]'
3149
- },
3150
- {
3151
- name: 'InMathematical_Operators',
3152
- bmp: '\u2200-\u22FF'
3153
- },
3154
- {
3155
- name: 'InMeetei_Mayek',
3156
- bmp: '\uABC0-\uABFF'
3157
- },
3158
- {
3159
- name: 'InMeetei_Mayek_Extensions',
3160
- bmp: '\uAAE0-\uAAFF'
3161
- },
3162
- {
3163
- name: 'InMende_Kikakui',
3164
- astral: '\uD83A[\uDC00-\uDCDF]'
3165
- },
3166
- {
3167
- name: 'InMeroitic_Cursive',
3168
- astral: '\uD802[\uDDA0-\uDDFF]'
3169
- },
3170
- {
3171
- name: 'InMeroitic_Hieroglyphs',
3172
- astral: '\uD802[\uDD80-\uDD9F]'
3173
- },
3174
- {
3175
- name: 'InMiao',
3176
- astral: '\uD81B[\uDF00-\uDF9F]'
3177
- },
3178
- {
3179
- name: 'InMiscellaneous_Mathematical_Symbols_A',
3180
- bmp: '\u27C0-\u27EF'
3181
- },
3182
- {
3183
- name: 'InMiscellaneous_Mathematical_Symbols_B',
3184
- bmp: '\u2980-\u29FF'
3185
- },
3186
- {
3187
- name: 'InMiscellaneous_Symbols',
3188
- bmp: '\u2600-\u26FF'
3189
- },
3190
- {
3191
- name: 'InMiscellaneous_Symbols_and_Arrows',
3192
- bmp: '\u2B00-\u2BFF'
3193
- },
3194
- {
3195
- name: 'InMiscellaneous_Symbols_and_Pictographs',
3196
- astral: '\uD83D[\uDC00-\uDDFF]|\uD83C[\uDF00-\uDFFF]'
3197
- },
3198
- {
3199
- name: 'InMiscellaneous_Technical',
3200
- bmp: '\u2300-\u23FF'
3201
- },
3202
- {
3203
- name: 'InModi',
3204
- astral: '\uD805[\uDE00-\uDE5F]'
3205
- },
3206
- {
3207
- name: 'InModifier_Tone_Letters',
3208
- bmp: '\uA700-\uA71F'
3209
- },
3210
- {
3211
- name: 'InMongolian',
3212
- bmp: '\u1800-\u18AF'
3213
- },
3214
- {
3215
- name: 'InMro',
3216
- astral: '\uD81A[\uDE40-\uDE6F]'
3217
- },
3218
- {
3219
- name: 'InMultani',
3220
- astral: '\uD804[\uDE80-\uDEAF]'
3221
- },
3222
- {
3223
- name: 'InMusical_Symbols',
3224
- astral: '\uD834[\uDD00-\uDDFF]'
3225
- },
3226
- {
3227
- name: 'InMyanmar',
3228
- bmp: '\u1000-\u109F'
3229
- },
3230
- {
3231
- name: 'InMyanmar_Extended_A',
3232
- bmp: '\uAA60-\uAA7F'
3233
- },
3234
- {
3235
- name: 'InMyanmar_Extended_B',
3236
- bmp: '\uA9E0-\uA9FF'
3237
- },
3238
- {
3239
- name: 'InNKo',
3240
- bmp: '\u07C0-\u07FF'
3241
- },
3242
- {
3243
- name: 'InNabataean',
3244
- astral: '\uD802[\uDC80-\uDCAF]'
3245
- },
3246
- {
3247
- name: 'InNew_Tai_Lue',
3248
- bmp: '\u1980-\u19DF'
3249
- },
3250
- {
3251
- name: 'InNumber_Forms',
3252
- bmp: '\u2150-\u218F'
3253
- },
3254
- {
3255
- name: 'InOgham',
3256
- bmp: '\u1680-\u169F'
3257
- },
3258
- {
3259
- name: 'InOl_Chiki',
3260
- bmp: '\u1C50-\u1C7F'
3261
- },
3262
- {
3263
- name: 'InOld_Hungarian',
3264
- astral: '\uD803[\uDC80-\uDCFF]'
3265
- },
3266
- {
3267
- name: 'InOld_Italic',
3268
- astral: '\uD800[\uDF00-\uDF2F]'
3269
- },
3270
- {
3271
- name: 'InOld_North_Arabian',
3272
- astral: '\uD802[\uDE80-\uDE9F]'
3273
- },
3274
- {
3275
- name: 'InOld_Permic',
3276
- astral: '\uD800[\uDF50-\uDF7F]'
3277
- },
3278
- {
3279
- name: 'InOld_Persian',
3280
- astral: '\uD800[\uDFA0-\uDFDF]'
3281
- },
3282
- {
3283
- name: 'InOld_South_Arabian',
3284
- astral: '\uD802[\uDE60-\uDE7F]'
3285
- },
3286
- {
3287
- name: 'InOld_Turkic',
3288
- astral: '\uD803[\uDC00-\uDC4F]'
3289
- },
3290
- {
3291
- name: 'InOptical_Character_Recognition',
3292
- bmp: '\u2440-\u245F'
3293
- },
3294
- {
3295
- name: 'InOriya',
3296
- bmp: '\u0B00-\u0B7F'
3297
- },
3298
- {
3299
- name: 'InOrnamental_Dingbats',
3300
- astral: '\uD83D[\uDE50-\uDE7F]'
3301
- },
3302
- {
3303
- name: 'InOsmanya',
3304
- astral: '\uD801[\uDC80-\uDCAF]'
3305
- },
3306
- {
3307
- name: 'InPahawh_Hmong',
3308
- astral: '\uD81A[\uDF00-\uDF8F]'
3309
- },
3310
- {
3311
- name: 'InPalmyrene',
3312
- astral: '\uD802[\uDC60-\uDC7F]'
3313
- },
3314
- {
3315
- name: 'InPau_Cin_Hau',
3316
- astral: '\uD806[\uDEC0-\uDEFF]'
3317
- },
3318
- {
3319
- name: 'InPhags_pa',
3320
- bmp: '\uA840-\uA87F'
3321
- },
3322
- {
3323
- name: 'InPhaistos_Disc',
3324
- astral: '\uD800[\uDDD0-\uDDFF]'
3325
- },
3326
- {
3327
- name: 'InPhoenician',
3328
- astral: '\uD802[\uDD00-\uDD1F]'
3329
- },
3330
- {
3331
- name: 'InPhonetic_Extensions',
3332
- bmp: '\u1D00-\u1D7F'
3333
- },
3334
- {
3335
- name: 'InPhonetic_Extensions_Supplement',
3336
- bmp: '\u1D80-\u1DBF'
3337
- },
3338
- {
3339
- name: 'InPlaying_Cards',
3340
- astral: '\uD83C[\uDCA0-\uDCFF]'
3341
- },
3342
- {
3343
- name: 'InPrivate_Use_Area',
3344
- bmp: '\uE000-\uF8FF'
3345
- },
3346
- {
3347
- name: 'InPsalter_Pahlavi',
3348
- astral: '\uD802[\uDF80-\uDFAF]'
3349
- },
3350
- {
3351
- name: 'InRejang',
3352
- bmp: '\uA930-\uA95F'
3353
- },
3354
- {
3355
- name: 'InRumi_Numeral_Symbols',
3356
- astral: '\uD803[\uDE60-\uDE7F]'
3357
- },
3358
- {
3359
- name: 'InRunic',
3360
- bmp: '\u16A0-\u16FF'
3361
- },
3362
- {
3363
- name: 'InSamaritan',
3364
- bmp: '\u0800-\u083F'
3365
- },
3366
- {
3367
- name: 'InSaurashtra',
3368
- bmp: '\uA880-\uA8DF'
3369
- },
3370
- {
3371
- name: 'InSharada',
3372
- astral: '\uD804[\uDD80-\uDDDF]'
3373
- },
3374
- {
3375
- name: 'InShavian',
3376
- astral: '\uD801[\uDC50-\uDC7F]'
3377
- },
3378
- {
3379
- name: 'InShorthand_Format_Controls',
3380
- astral: '\uD82F[\uDCA0-\uDCAF]'
3381
- },
3382
- {
3383
- name: 'InSiddham',
3384
- astral: '\uD805[\uDD80-\uDDFF]'
3385
- },
3386
- {
3387
- name: 'InSinhala',
3388
- bmp: '\u0D80-\u0DFF'
3389
- },
3390
- {
3391
- name: 'InSinhala_Archaic_Numbers',
3392
- astral: '\uD804[\uDDE0-\uDDFF]'
3393
- },
3394
- {
3395
- name: 'InSmall_Form_Variants',
3396
- bmp: '\uFE50-\uFE6F'
3397
- },
3398
- {
3399
- name: 'InSora_Sompeng',
3400
- astral: '\uD804[\uDCD0-\uDCFF]'
3401
- },
3402
- {
3403
- name: 'InSpacing_Modifier_Letters',
3404
- bmp: '\u02B0-\u02FF'
3405
- },
3406
- {
3407
- name: 'InSpecials',
3408
- bmp: '\uFFF0-\uFFFF'
3409
- },
3410
- {
3411
- name: 'InSundanese',
3412
- bmp: '\u1B80-\u1BBF'
3413
- },
3414
- {
3415
- name: 'InSundanese_Supplement',
3416
- bmp: '\u1CC0-\u1CCF'
3417
- },
3418
- {
3419
- name: 'InSuperscripts_and_Subscripts',
3420
- bmp: '\u2070-\u209F'
3421
- },
3422
- {
3423
- name: 'InSupplemental_Arrows_A',
3424
- bmp: '\u27F0-\u27FF'
3425
- },
3426
- {
3427
- name: 'InSupplemental_Arrows_B',
3428
- bmp: '\u2900-\u297F'
3429
- },
3430
- {
3431
- name: 'InSupplemental_Arrows_C',
3432
- astral: '\uD83E[\uDC00-\uDCFF]'
3433
- },
3434
- {
3435
- name: 'InSupplemental_Mathematical_Operators',
3436
- bmp: '\u2A00-\u2AFF'
3437
- },
3438
- {
3439
- name: 'InSupplemental_Punctuation',
3440
- bmp: '\u2E00-\u2E7F'
3441
- },
3442
- {
3443
- name: 'InSupplemental_Symbols_and_Pictographs',
3444
- astral: '\uD83E[\uDD00-\uDDFF]'
3445
- },
3446
- {
3447
- name: 'InSupplementary_Private_Use_Area_A',
3448
- astral: '[\uDB80-\uDBBF][\uDC00-\uDFFF]'
3449
- },
3450
- {
3451
- name: 'InSupplementary_Private_Use_Area_B',
3452
- astral: '[\uDBC0-\uDBFF][\uDC00-\uDFFF]'
3453
- },
3454
- {
3455
- name: 'InSutton_SignWriting',
3456
- astral: '\uD836[\uDC00-\uDEAF]'
3457
- },
3458
- {
3459
- name: 'InSyloti_Nagri',
3460
- bmp: '\uA800-\uA82F'
3461
- },
3462
- {
3463
- name: 'InSyriac',
3464
- bmp: '\u0700-\u074F'
3465
- },
3466
- {
3467
- name: 'InTagalog',
3468
- bmp: '\u1700-\u171F'
3469
- },
3470
- {
3471
- name: 'InTagbanwa',
3472
- bmp: '\u1760-\u177F'
3473
- },
3474
- {
3475
- name: 'InTags',
3476
- astral: '\uDB40[\uDC00-\uDC7F]'
3477
- },
3478
- {
3479
- name: 'InTai_Le',
3480
- bmp: '\u1950-\u197F'
3481
- },
3482
- {
3483
- name: 'InTai_Tham',
3484
- bmp: '\u1A20-\u1AAF'
3485
- },
3486
- {
3487
- name: 'InTai_Viet',
3488
- bmp: '\uAA80-\uAADF'
3489
- },
3490
- {
3491
- name: 'InTai_Xuan_Jing_Symbols',
3492
- astral: '\uD834[\uDF00-\uDF5F]'
3493
- },
3494
- {
3495
- name: 'InTakri',
3496
- astral: '\uD805[\uDE80-\uDECF]'
3497
- },
3498
- {
3499
- name: 'InTamil',
3500
- bmp: '\u0B80-\u0BFF'
3501
- },
3502
- {
3503
- name: 'InTelugu',
3504
- bmp: '\u0C00-\u0C7F'
3505
- },
3506
- {
3507
- name: 'InThaana',
3508
- bmp: '\u0780-\u07BF'
3509
- },
3510
- {
3511
- name: 'InThai',
3512
- bmp: '\u0E00-\u0E7F'
3513
- },
3514
- {
3515
- name: 'InTibetan',
3516
- bmp: '\u0F00-\u0FFF'
3517
- },
3518
- {
3519
- name: 'InTifinagh',
3520
- bmp: '\u2D30-\u2D7F'
3521
- },
3522
- {
3523
- name: 'InTirhuta',
3524
- astral: '\uD805[\uDC80-\uDCDF]'
3525
- },
3526
- {
3527
- name: 'InTransport_and_Map_Symbols',
3528
- astral: '\uD83D[\uDE80-\uDEFF]'
3529
- },
3530
- {
3531
- name: 'InUgaritic',
3532
- astral: '\uD800[\uDF80-\uDF9F]'
3533
- },
3534
- {
3535
- name: 'InUnified_Canadian_Aboriginal_Syllabics',
3536
- bmp: '\u1400-\u167F'
3537
- },
3538
- {
3539
- name: 'InUnified_Canadian_Aboriginal_Syllabics_Extended',
3540
- bmp: '\u18B0-\u18FF'
3541
- },
3542
- {
3543
- name: 'InVai',
3544
- bmp: '\uA500-\uA63F'
3545
- },
3546
- {
3547
- name: 'InVariation_Selectors',
3548
- bmp: '\uFE00-\uFE0F'
3549
- },
3550
- {
3551
- name: 'InVariation_Selectors_Supplement',
3552
- astral: '\uDB40[\uDD00-\uDDEF]'
3553
- },
3554
- {
3555
- name: 'InVedic_Extensions',
3556
- bmp: '\u1CD0-\u1CFF'
3557
- },
3558
- {
3559
- name: 'InVertical_Forms',
3560
- bmp: '\uFE10-\uFE1F'
3561
- },
3562
- {
3563
- name: 'InWarang_Citi',
3564
- astral: '\uD806[\uDCA0-\uDCFF]'
3565
- },
3566
- {
3567
- name: 'InYi_Radicals',
3568
- bmp: '\uA490-\uA4CF'
3569
- },
3570
- {
3571
- name: 'InYi_Syllables',
3572
- bmp: '\uA000-\uA48F'
3573
- },
3574
- {
3575
- name: 'InYijing_Hexagram_Symbols',
3576
- bmp: '\u4DC0-\u4DFF'
3577
- }
3578
- ]);
3579
-
3580
- }(XRegExp));
3581
-
3582
- /*!
3583
- * XRegExp Unicode Categories 3.0.0
3584
- * <http://xregexp.com/>
3585
- * Steven Levithan (c) 2010-2015 MIT License
3586
- * Unicode data provided by Mathias Bynens <http://mathiasbynens.be/>
3587
- */
3588
-
3589
- /**
3590
- * Adds support for Unicode's general categories. E.g., `\p{Lu}` or `\p{Uppercase Letter}`. See
3591
- * category descriptions in UAX #44 <http://unicode.org/reports/tr44/#GC_Values_Table>. Token names
3592
- * are case insensitive, and any spaces, hyphens, and underscores are ignored.
3593
- *
3594
- * Uses Unicode 8.0.0.
3595
- *
3596
- * @requires XRegExp, Unicode Base
3597
- */
3598
- (function(XRegExp) {
3599
- 'use strict';
3600
-
3601
- if (!XRegExp.addUnicodeData) {
3602
- throw new ReferenceError('Unicode Base must be loaded before Unicode Categories');
3603
- }
3604
-
3605
- XRegExp.addUnicodeData([
3606
- {
3607
- name: 'C',
3608
- alias: 'Other',
3609
- isBmpLast: true,
3610
- bmp: '\0-\x1F\x7F-\x9F\xAD\u0378\u0379\u0380-\u0383\u038B\u038D\u03A2\u0530\u0557\u0558\u0560\u0588\u058B\u058C\u0590\u05C8-\u05CF\u05EB-\u05EF\u05F5-\u0605\u061C\u061D\u06DD\u070E\u070F\u074B\u074C\u07B2-\u07BF\u07FB-\u07FF\u082E\u082F\u083F\u085C\u085D\u085F-\u089F\u08B5-\u08E2\u0984\u098D\u098E\u0991\u0992\u09A9\u09B1\u09B3-\u09B5\u09BA\u09BB\u09C5\u09C6\u09C9\u09CA\u09CF-\u09D6\u09D8-\u09DB\u09DE\u09E4\u09E5\u09FC-\u0A00\u0A04\u0A0B-\u0A0E\u0A11\u0A12\u0A29\u0A31\u0A34\u0A37\u0A3A\u0A3B\u0A3D\u0A43-\u0A46\u0A49\u0A4A\u0A4E-\u0A50\u0A52-\u0A58\u0A5D\u0A5F-\u0A65\u0A76-\u0A80\u0A84\u0A8E\u0A92\u0AA9\u0AB1\u0AB4\u0ABA\u0ABB\u0AC6\u0ACA\u0ACE\u0ACF\u0AD1-\u0ADF\u0AE4\u0AE5\u0AF2-\u0AF8\u0AFA-\u0B00\u0B04\u0B0D\u0B0E\u0B11\u0B12\u0B29\u0B31\u0B34\u0B3A\u0B3B\u0B45\u0B46\u0B49\u0B4A\u0B4E-\u0B55\u0B58-\u0B5B\u0B5E\u0B64\u0B65\u0B78-\u0B81\u0B84\u0B8B-\u0B8D\u0B91\u0B96-\u0B98\u0B9B\u0B9D\u0BA0-\u0BA2\u0BA5-\u0BA7\u0BAB-\u0BAD\u0BBA-\u0BBD\u0BC3-\u0BC5\u0BC9\u0BCE\u0BCF\u0BD1-\u0BD6\u0BD8-\u0BE5\u0BFB-\u0BFF\u0C04\u0C0D\u0C11\u0C29\u0C3A-\u0C3C\u0C45\u0C49\u0C4E-\u0C54\u0C57\u0C5B-\u0C5F\u0C64\u0C65\u0C70-\u0C77\u0C80\u0C84\u0C8D\u0C91\u0CA9\u0CB4\u0CBA\u0CBB\u0CC5\u0CC9\u0CCE-\u0CD4\u0CD7-\u0CDD\u0CDF\u0CE4\u0CE5\u0CF0\u0CF3-\u0D00\u0D04\u0D0D\u0D11\u0D3B\u0D3C\u0D45\u0D49\u0D4F-\u0D56\u0D58-\u0D5E\u0D64\u0D65\u0D76-\u0D78\u0D80\u0D81\u0D84\u0D97-\u0D99\u0DB2\u0DBC\u0DBE\u0DBF\u0DC7-\u0DC9\u0DCB-\u0DCE\u0DD5\u0DD7\u0DE0-\u0DE5\u0DF0\u0DF1\u0DF5-\u0E00\u0E3B-\u0E3E\u0E5C-\u0E80\u0E83\u0E85\u0E86\u0E89\u0E8B\u0E8C\u0E8E-\u0E93\u0E98\u0EA0\u0EA4\u0EA6\u0EA8\u0EA9\u0EAC\u0EBA\u0EBE\u0EBF\u0EC5\u0EC7\u0ECE\u0ECF\u0EDA\u0EDB\u0EE0-\u0EFF\u0F48\u0F6D-\u0F70\u0F98\u0FBD\u0FCD\u0FDB-\u0FFF\u10C6\u10C8-\u10CC\u10CE\u10CF\u1249\u124E\u124F\u1257\u1259\u125E\u125F\u1289\u128E\u128F\u12B1\u12B6\u12B7\u12BF\u12C1\u12C6\u12C7\u12D7\u1311\u1316\u1317\u135B\u135C\u137D-\u137F\u139A-\u139F\u13F6\u13F7\u13FE\u13FF\u169D-\u169F\u16F9-\u16FF\u170D\u1715-\u171F\u1737-\u173F\u1754-\u175F\u176D\u1771\u1774-\u177F\u17DE\u17DF\u17EA-\u17EF\u17FA-\u17FF\u180E\u180F\u181A-\u181F\u1878-\u187F\u18AB-\u18AF\u18F6-\u18FF\u191F\u192C-\u192F\u193C-\u193F\u1941-\u1943\u196E\u196F\u1975-\u197F\u19AC-\u19AF\u19CA-\u19CF\u19DB-\u19DD\u1A1C\u1A1D\u1A5F\u1A7D\u1A7E\u1A8A-\u1A8F\u1A9A-\u1A9F\u1AAE\u1AAF\u1ABF-\u1AFF\u1B4C-\u1B4F\u1B7D-\u1B7F\u1BF4-\u1BFB\u1C38-\u1C3A\u1C4A-\u1C4C\u1C80-\u1CBF\u1CC8-\u1CCF\u1CF7\u1CFA-\u1CFF\u1DF6-\u1DFB\u1F16\u1F17\u1F1E\u1F1F\u1F46\u1F47\u1F4E\u1F4F\u1F58\u1F5A\u1F5C\u1F5E\u1F7E\u1F7F\u1FB5\u1FC5\u1FD4\u1FD5\u1FDC\u1FF0\u1FF1\u1FF5\u1FFF\u200B-\u200F\u202A-\u202E\u2060-\u206F\u2072\u2073\u208F\u209D-\u209F\u20BF-\u20CF\u20F1-\u20FF\u218C-\u218F\u23FB-\u23FF\u2427-\u243F\u244B-\u245F\u2B74\u2B75\u2B96\u2B97\u2BBA-\u2BBC\u2BC9\u2BD2-\u2BEB\u2BF0-\u2BFF\u2C2F\u2C5F\u2CF4-\u2CF8\u2D26\u2D28-\u2D2C\u2D2E\u2D2F\u2D68-\u2D6E\u2D71-\u2D7E\u2D97-\u2D9F\u2DA7\u2DAF\u2DB7\u2DBF\u2DC7\u2DCF\u2DD7\u2DDF\u2E43-\u2E7F\u2E9A\u2EF4-\u2EFF\u2FD6-\u2FEF\u2FFC-\u2FFF\u3040\u3097\u3098\u3100-\u3104\u312E-\u3130\u318F\u31BB-\u31BF\u31E4-\u31EF\u321F\u32FF\u4DB6-\u4DBF\u9FD6-\u9FFF\uA48D-\uA48F\uA4C7-\uA4CF\uA62C-\uA63F\uA6F8-\uA6FF\uA7AE\uA7AF\uA7B8-\uA7F6\uA82C-\uA82F\uA83A-\uA83F\uA878-\uA87F\uA8C5-\uA8CD\uA8DA-\uA8DF\uA8FE\uA8FF\uA954-\uA95E\uA97D-\uA97F\uA9CE\uA9DA-\uA9DD\uA9FF\uAA37-\uAA3F\uAA4E\uAA4F\uAA5A\uAA5B\uAAC3-\uAADA\uAAF7-\uAB00\uAB07\uAB08\uAB0F\uAB10\uAB17-\uAB1F\uAB27\uAB2F\uAB66-\uAB6F\uABEE\uABEF\uABFA-\uABFF\uD7A4-\uD7AF\uD7C7-\uD7CA\uD7FC-\uF8FF\uFA6E\uFA6F\uFADA-\uFAFF\uFB07-\uFB12\uFB18-\uFB1C\uFB37\uFB3D\uFB3F\uFB42\uFB45\uFBC2-\uFBD2\uFD40-\uFD4F\uFD90\uFD91\uFDC8-\uFDEF\uFDFE\uFDFF\uFE1A-\uFE1F\uFE53\uFE67\uFE6C-\uFE6F\uFE75\uFEFD-\uFF00\uFFBF-\uFFC1\uFFC8\uFFC9\uFFD0\uFFD1\uFFD8\uFFD9\uFFDD-\uFFDF\uFFE7\uFFEF-\uFFFB\uFFFE\uFFFF',
3611
- astral: '\uD834[\uDCF6-\uDCFF\uDD27\uDD28\uDD73-\uDD7A\uDDE9-\uDDFF\uDE46-\uDEFF\uDF57-\uDF5F\uDF72-\uDFFF]|\uD836[\uDE8C-\uDE9A\uDEA0\uDEB0-\uDFFF]|\uD83C[\uDC2C-\uDC2F\uDC94-\uDC9F\uDCAF\uDCB0\uDCC0\uDCD0\uDCF6-\uDCFF\uDD0D-\uDD0F\uDD2F\uDD6C-\uDD6F\uDD9B-\uDDE5\uDE03-\uDE0F\uDE3B-\uDE3F\uDE49-\uDE4F\uDE52-\uDEFF]|\uD81A[\uDE39-\uDE3F\uDE5F\uDE6A-\uDE6D\uDE70-\uDECF\uDEEE\uDEEF\uDEF6-\uDEFF\uDF46-\uDF4F\uDF5A\uDF62\uDF78-\uDF7C\uDF90-\uDFFF]|\uD809[\uDC6F\uDC75-\uDC7F\uDD44-\uDFFF]|\uD81B[\uDC00-\uDEFF\uDF45-\uDF4F\uDF7F-\uDF8E\uDFA0-\uDFFF]|\uD86E[\uDC1E\uDC1F]|\uD83D[\uDD7A\uDDA4\uDED1-\uDEDF\uDEED-\uDEEF\uDEF4-\uDEFF\uDF74-\uDF7F\uDFD5-\uDFFF]|\uD801[\uDC9E\uDC9F\uDCAA-\uDCFF\uDD28-\uDD2F\uDD64-\uDD6E\uDD70-\uDDFF\uDF37-\uDF3F\uDF56-\uDF5F\uDF68-\uDFFF]|\uD800[\uDC0C\uDC27\uDC3B\uDC3E\uDC4E\uDC4F\uDC5E-\uDC7F\uDCFB-\uDCFF\uDD03-\uDD06\uDD34-\uDD36\uDD8D-\uDD8F\uDD9C-\uDD9F\uDDA1-\uDDCF\uDDFE-\uDE7F\uDE9D-\uDE9F\uDED1-\uDEDF\uDEFC-\uDEFF\uDF24-\uDF2F\uDF4B-\uDF4F\uDF7B-\uDF7F\uDF9E\uDFC4-\uDFC7\uDFD6-\uDFFF]|\uD869[\uDED7-\uDEFF]|\uD83B[\uDC00-\uDDFF\uDE04\uDE20\uDE23\uDE25\uDE26\uDE28\uDE33\uDE38\uDE3A\uDE3C-\uDE41\uDE43-\uDE46\uDE48\uDE4A\uDE4C\uDE50\uDE53\uDE55\uDE56\uDE58\uDE5A\uDE5C\uDE5E\uDE60\uDE63\uDE65\uDE66\uDE6B\uDE73\uDE78\uDE7D\uDE7F\uDE8A\uDE9C-\uDEA0\uDEA4\uDEAA\uDEBC-\uDEEF\uDEF2-\uDFFF]|\uD87E[\uDE1E-\uDFFF]|\uDB40[\uDC00-\uDCFF\uDDF0-\uDFFF]|\uD804[\uDC4E-\uDC51\uDC70-\uDC7E\uDCBD\uDCC2-\uDCCF\uDCE9-\uDCEF\uDCFA-\uDCFF\uDD35\uDD44-\uDD4F\uDD77-\uDD7F\uDDCE\uDDCF\uDDE0\uDDF5-\uDDFF\uDE12\uDE3E-\uDE7F\uDE87\uDE89\uDE8E\uDE9E\uDEAA-\uDEAF\uDEEB-\uDEEF\uDEFA-\uDEFF\uDF04\uDF0D\uDF0E\uDF11\uDF12\uDF29\uDF31\uDF34\uDF3A\uDF3B\uDF45\uDF46\uDF49\uDF4A\uDF4E\uDF4F\uDF51-\uDF56\uDF58-\uDF5C\uDF64\uDF65\uDF6D-\uDF6F\uDF75-\uDFFF]|\uD83A[\uDCC5\uDCC6\uDCD7-\uDFFF]|\uD80D[\uDC2F-\uDFFF]|\uD86D[\uDF35-\uDF3F]|[\uD807\uD80A\uD80B\uD80E-\uD810\uD812-\uD819\uD81C-\uD82B\uD82D\uD82E\uD830-\uD833\uD837-\uD839\uD83F\uD874-\uD87D\uD87F-\uDB3F\uDB41-\uDBFF][\uDC00-\uDFFF]|\uD806[\uDC00-\uDC9F\uDCF3-\uDCFE\uDD00-\uDEBF\uDEF9-\uDFFF]|\uD803[\uDC49-\uDC7F\uDCB3-\uDCBF\uDCF3-\uDCF9\uDD00-\uDE5F\uDE7F-\uDFFF]|\uD835[\uDC55\uDC9D\uDCA0\uDCA1\uDCA3\uDCA4\uDCA7\uDCA8\uDCAD\uDCBA\uDCBC\uDCC4\uDD06\uDD0B\uDD0C\uDD15\uDD1D\uDD3A\uDD3F\uDD45\uDD47-\uDD49\uDD51\uDEA6\uDEA7\uDFCC\uDFCD]|\uD805[\uDC00-\uDC7F\uDCC8-\uDCCF\uDCDA-\uDD7F\uDDB6\uDDB7\uDDDE-\uDDFF\uDE45-\uDE4F\uDE5A-\uDE7F\uDEB8-\uDEBF\uDECA-\uDEFF\uDF1A-\uDF1C\uDF2C-\uDF2F\uDF40-\uDFFF]|\uD802[\uDC06\uDC07\uDC09\uDC36\uDC39-\uDC3B\uDC3D\uDC3E\uDC56\uDC9F-\uDCA6\uDCB0-\uDCDF\uDCF3\uDCF6-\uDCFA\uDD1C-\uDD1E\uDD3A-\uDD3E\uDD40-\uDD7F\uDDB8-\uDDBB\uDDD0\uDDD1\uDE04\uDE07-\uDE0B\uDE14\uDE18\uDE34-\uDE37\uDE3B-\uDE3E\uDE48-\uDE4F\uDE59-\uDE5F\uDEA0-\uDEBF\uDEE7-\uDEEA\uDEF7-\uDEFF\uDF36-\uDF38\uDF56\uDF57\uDF73-\uDF77\uDF92-\uDF98\uDF9D-\uDFA8\uDFB0-\uDFFF]|\uD808[\uDF9A-\uDFFF]|\uD82F[\uDC6B-\uDC6F\uDC7D-\uDC7F\uDC89-\uDC8F\uDC9A\uDC9B\uDCA0-\uDFFF]|\uD82C[\uDC02-\uDFFF]|\uD811[\uDE47-\uDFFF]|\uD83E[\uDC0C-\uDC0F\uDC48-\uDC4F\uDC5A-\uDC5F\uDC88-\uDC8F\uDCAE-\uDD0F\uDD19-\uDD7F\uDD85-\uDDBF\uDDC1-\uDFFF]|\uD873[\uDEA2-\uDFFF]'
3612
- },
3613
- {
3614
- name: 'Cc',
3615
- alias: 'Control',
3616
- bmp: '\0-\x1F\x7F-\x9F'
3617
- },
3618
- {
3619
- name: 'Cf',
3620
- alias: 'Format',
3621
- bmp: '\xAD\u0600-\u0605\u061C\u06DD\u070F\u180E\u200B-\u200F\u202A-\u202E\u2060-\u2064\u2066-\u206F\uFEFF\uFFF9-\uFFFB',
3622
- astral: '\uDB40[\uDC01\uDC20-\uDC7F]|\uD82F[\uDCA0-\uDCA3]|\uD834[\uDD73-\uDD7A]|\uD804\uDCBD'
3623
- },
3624
- {
3625
- name: 'Cn',
3626
- alias: 'Unassigned',
3627
- bmp: '\u0378\u0379\u0380-\u0383\u038B\u038D\u03A2\u0530\u0557\u0558\u0560\u0588\u058B\u058C\u0590\u05C8-\u05CF\u05EB-\u05EF\u05F5-\u05FF\u061D\u070E\u074B\u074C\u07B2-\u07BF\u07FB-\u07FF\u082E\u082F\u083F\u085C\u085D\u085F-\u089F\u08B5-\u08E2\u0984\u098D\u098E\u0991\u0992\u09A9\u09B1\u09B3-\u09B5\u09BA\u09BB\u09C5\u09C6\u09C9\u09CA\u09CF-\u09D6\u09D8-\u09DB\u09DE\u09E4\u09E5\u09FC-\u0A00\u0A04\u0A0B-\u0A0E\u0A11\u0A12\u0A29\u0A31\u0A34\u0A37\u0A3A\u0A3B\u0A3D\u0A43-\u0A46\u0A49\u0A4A\u0A4E-\u0A50\u0A52-\u0A58\u0A5D\u0A5F-\u0A65\u0A76-\u0A80\u0A84\u0A8E\u0A92\u0AA9\u0AB1\u0AB4\u0ABA\u0ABB\u0AC6\u0ACA\u0ACE\u0ACF\u0AD1-\u0ADF\u0AE4\u0AE5\u0AF2-\u0AF8\u0AFA-\u0B00\u0B04\u0B0D\u0B0E\u0B11\u0B12\u0B29\u0B31\u0B34\u0B3A\u0B3B\u0B45\u0B46\u0B49\u0B4A\u0B4E-\u0B55\u0B58-\u0B5B\u0B5E\u0B64\u0B65\u0B78-\u0B81\u0B84\u0B8B-\u0B8D\u0B91\u0B96-\u0B98\u0B9B\u0B9D\u0BA0-\u0BA2\u0BA5-\u0BA7\u0BAB-\u0BAD\u0BBA-\u0BBD\u0BC3-\u0BC5\u0BC9\u0BCE\u0BCF\u0BD1-\u0BD6\u0BD8-\u0BE5\u0BFB-\u0BFF\u0C04\u0C0D\u0C11\u0C29\u0C3A-\u0C3C\u0C45\u0C49\u0C4E-\u0C54\u0C57\u0C5B-\u0C5F\u0C64\u0C65\u0C70-\u0C77\u0C80\u0C84\u0C8D\u0C91\u0CA9\u0CB4\u0CBA\u0CBB\u0CC5\u0CC9\u0CCE-\u0CD4\u0CD7-\u0CDD\u0CDF\u0CE4\u0CE5\u0CF0\u0CF3-\u0D00\u0D04\u0D0D\u0D11\u0D3B\u0D3C\u0D45\u0D49\u0D4F-\u0D56\u0D58-\u0D5E\u0D64\u0D65\u0D76-\u0D78\u0D80\u0D81\u0D84\u0D97-\u0D99\u0DB2\u0DBC\u0DBE\u0DBF\u0DC7-\u0DC9\u0DCB-\u0DCE\u0DD5\u0DD7\u0DE0-\u0DE5\u0DF0\u0DF1\u0DF5-\u0E00\u0E3B-\u0E3E\u0E5C-\u0E80\u0E83\u0E85\u0E86\u0E89\u0E8B\u0E8C\u0E8E-\u0E93\u0E98\u0EA0\u0EA4\u0EA6\u0EA8\u0EA9\u0EAC\u0EBA\u0EBE\u0EBF\u0EC5\u0EC7\u0ECE\u0ECF\u0EDA\u0EDB\u0EE0-\u0EFF\u0F48\u0F6D-\u0F70\u0F98\u0FBD\u0FCD\u0FDB-\u0FFF\u10C6\u10C8-\u10CC\u10CE\u10CF\u1249\u124E\u124F\u1257\u1259\u125E\u125F\u1289\u128E\u128F\u12B1\u12B6\u12B7\u12BF\u12C1\u12C6\u12C7\u12D7\u1311\u1316\u1317\u135B\u135C\u137D-\u137F\u139A-\u139F\u13F6\u13F7\u13FE\u13FF\u169D-\u169F\u16F9-\u16FF\u170D\u1715-\u171F\u1737-\u173F\u1754-\u175F\u176D\u1771\u1774-\u177F\u17DE\u17DF\u17EA-\u17EF\u17FA-\u17FF\u180F\u181A-\u181F\u1878-\u187F\u18AB-\u18AF\u18F6-\u18FF\u191F\u192C-\u192F\u193C-\u193F\u1941-\u1943\u196E\u196F\u1975-\u197F\u19AC-\u19AF\u19CA-\u19CF\u19DB-\u19DD\u1A1C\u1A1D\u1A5F\u1A7D\u1A7E\u1A8A-\u1A8F\u1A9A-\u1A9F\u1AAE\u1AAF\u1ABF-\u1AFF\u1B4C-\u1B4F\u1B7D-\u1B7F\u1BF4-\u1BFB\u1C38-\u1C3A\u1C4A-\u1C4C\u1C80-\u1CBF\u1CC8-\u1CCF\u1CF7\u1CFA-\u1CFF\u1DF6-\u1DFB\u1F16\u1F17\u1F1E\u1F1F\u1F46\u1F47\u1F4E\u1F4F\u1F58\u1F5A\u1F5C\u1F5E\u1F7E\u1F7F\u1FB5\u1FC5\u1FD4\u1FD5\u1FDC\u1FF0\u1FF1\u1FF5\u1FFF\u2065\u2072\u2073\u208F\u209D-\u209F\u20BF-\u20CF\u20F1-\u20FF\u218C-\u218F\u23FB-\u23FF\u2427-\u243F\u244B-\u245F\u2B74\u2B75\u2B96\u2B97\u2BBA-\u2BBC\u2BC9\u2BD2-\u2BEB\u2BF0-\u2BFF\u2C2F\u2C5F\u2CF4-\u2CF8\u2D26\u2D28-\u2D2C\u2D2E\u2D2F\u2D68-\u2D6E\u2D71-\u2D7E\u2D97-\u2D9F\u2DA7\u2DAF\u2DB7\u2DBF\u2DC7\u2DCF\u2DD7\u2DDF\u2E43-\u2E7F\u2E9A\u2EF4-\u2EFF\u2FD6-\u2FEF\u2FFC-\u2FFF\u3040\u3097\u3098\u3100-\u3104\u312E-\u3130\u318F\u31BB-\u31BF\u31E4-\u31EF\u321F\u32FF\u4DB6-\u4DBF\u9FD6-\u9FFF\uA48D-\uA48F\uA4C7-\uA4CF\uA62C-\uA63F\uA6F8-\uA6FF\uA7AE\uA7AF\uA7B8-\uA7F6\uA82C-\uA82F\uA83A-\uA83F\uA878-\uA87F\uA8C5-\uA8CD\uA8DA-\uA8DF\uA8FE\uA8FF\uA954-\uA95E\uA97D-\uA97F\uA9CE\uA9DA-\uA9DD\uA9FF\uAA37-\uAA3F\uAA4E\uAA4F\uAA5A\uAA5B\uAAC3-\uAADA\uAAF7-\uAB00\uAB07\uAB08\uAB0F\uAB10\uAB17-\uAB1F\uAB27\uAB2F\uAB66-\uAB6F\uABEE\uABEF\uABFA-\uABFF\uD7A4-\uD7AF\uD7C7-\uD7CA\uD7FC-\uD7FF\uFA6E\uFA6F\uFADA-\uFAFF\uFB07-\uFB12\uFB18-\uFB1C\uFB37\uFB3D\uFB3F\uFB42\uFB45\uFBC2-\uFBD2\uFD40-\uFD4F\uFD90\uFD91\uFDC8-\uFDEF\uFDFE\uFDFF\uFE1A-\uFE1F\uFE53\uFE67\uFE6C-\uFE6F\uFE75\uFEFD\uFEFE\uFF00\uFFBF-\uFFC1\uFFC8\uFFC9\uFFD0\uFFD1\uFFD8\uFFD9\uFFDD-\uFFDF\uFFE7\uFFEF-\uFFF8\uFFFE\uFFFF',
3628
- astral: '\uDB40[\uDC00\uDC02-\uDC1F\uDC80-\uDCFF\uDDF0-\uDFFF]|\uD834[\uDCF6-\uDCFF\uDD27\uDD28\uDDE9-\uDDFF\uDE46-\uDEFF\uDF57-\uDF5F\uDF72-\uDFFF]|\uD83C[\uDC2C-\uDC2F\uDC94-\uDC9F\uDCAF\uDCB0\uDCC0\uDCD0\uDCF6-\uDCFF\uDD0D-\uDD0F\uDD2F\uDD6C-\uDD6F\uDD9B-\uDDE5\uDE03-\uDE0F\uDE3B-\uDE3F\uDE49-\uDE4F\uDE52-\uDEFF]|\uD81A[\uDE39-\uDE3F\uDE5F\uDE6A-\uDE6D\uDE70-\uDECF\uDEEE\uDEEF\uDEF6-\uDEFF\uDF46-\uDF4F\uDF5A\uDF62\uDF78-\uDF7C\uDF90-\uDFFF]|\uD809[\uDC6F\uDC75-\uDC7F\uDD44-\uDFFF]|\uD81B[\uDC00-\uDEFF\uDF45-\uDF4F\uDF7F-\uDF8E\uDFA0-\uDFFF]|\uD86E[\uDC1E\uDC1F]|\uD83D[\uDD7A\uDDA4\uDED1-\uDEDF\uDEED-\uDEEF\uDEF4-\uDEFF\uDF74-\uDF7F\uDFD5-\uDFFF]|\uD801[\uDC9E\uDC9F\uDCAA-\uDCFF\uDD28-\uDD2F\uDD64-\uDD6E\uDD70-\uDDFF\uDF37-\uDF3F\uDF56-\uDF5F\uDF68-\uDFFF]|\uD800[\uDC0C\uDC27\uDC3B\uDC3E\uDC4E\uDC4F\uDC5E-\uDC7F\uDCFB-\uDCFF\uDD03-\uDD06\uDD34-\uDD36\uDD8D-\uDD8F\uDD9C-\uDD9F\uDDA1-\uDDCF\uDDFE-\uDE7F\uDE9D-\uDE9F\uDED1-\uDEDF\uDEFC-\uDEFF\uDF24-\uDF2F\uDF4B-\uDF4F\uDF7B-\uDF7F\uDF9E\uDFC4-\uDFC7\uDFD6-\uDFFF]|\uD869[\uDED7-\uDEFF]|\uD83B[\uDC00-\uDDFF\uDE04\uDE20\uDE23\uDE25\uDE26\uDE28\uDE33\uDE38\uDE3A\uDE3C-\uDE41\uDE43-\uDE46\uDE48\uDE4A\uDE4C\uDE50\uDE53\uDE55\uDE56\uDE58\uDE5A\uDE5C\uDE5E\uDE60\uDE63\uDE65\uDE66\uDE6B\uDE73\uDE78\uDE7D\uDE7F\uDE8A\uDE9C-\uDEA0\uDEA4\uDEAA\uDEBC-\uDEEF\uDEF2-\uDFFF]|[\uDBBF\uDBFF][\uDFFE\uDFFF]|\uD87E[\uDE1E-\uDFFF]|\uD82F[\uDC6B-\uDC6F\uDC7D-\uDC7F\uDC89-\uDC8F\uDC9A\uDC9B\uDCA4-\uDFFF]|\uD83A[\uDCC5\uDCC6\uDCD7-\uDFFF]|\uD80D[\uDC2F-\uDFFF]|\uD86D[\uDF35-\uDF3F]|[\uD807\uD80A\uD80B\uD80E-\uD810\uD812-\uD819\uD81C-\uD82B\uD82D\uD82E\uD830-\uD833\uD837-\uD839\uD83F\uD874-\uD87D\uD87F-\uDB3F\uDB41-\uDB7F][\uDC00-\uDFFF]|\uD806[\uDC00-\uDC9F\uDCF3-\uDCFE\uDD00-\uDEBF\uDEF9-\uDFFF]|\uD803[\uDC49-\uDC7F\uDCB3-\uDCBF\uDCF3-\uDCF9\uDD00-\uDE5F\uDE7F-\uDFFF]|\uD835[\uDC55\uDC9D\uDCA0\uDCA1\uDCA3\uDCA4\uDCA7\uDCA8\uDCAD\uDCBA\uDCBC\uDCC4\uDD06\uDD0B\uDD0C\uDD15\uDD1D\uDD3A\uDD3F\uDD45\uDD47-\uDD49\uDD51\uDEA6\uDEA7\uDFCC\uDFCD]|\uD836[\uDE8C-\uDE9A\uDEA0\uDEB0-\uDFFF]|\uD805[\uDC00-\uDC7F\uDCC8-\uDCCF\uDCDA-\uDD7F\uDDB6\uDDB7\uDDDE-\uDDFF\uDE45-\uDE4F\uDE5A-\uDE7F\uDEB8-\uDEBF\uDECA-\uDEFF\uDF1A-\uDF1C\uDF2C-\uDF2F\uDF40-\uDFFF]|\uD802[\uDC06\uDC07\uDC09\uDC36\uDC39-\uDC3B\uDC3D\uDC3E\uDC56\uDC9F-\uDCA6\uDCB0-\uDCDF\uDCF3\uDCF6-\uDCFA\uDD1C-\uDD1E\uDD3A-\uDD3E\uDD40-\uDD7F\uDDB8-\uDDBB\uDDD0\uDDD1\uDE04\uDE07-\uDE0B\uDE14\uDE18\uDE34-\uDE37\uDE3B-\uDE3E\uDE48-\uDE4F\uDE59-\uDE5F\uDEA0-\uDEBF\uDEE7-\uDEEA\uDEF7-\uDEFF\uDF36-\uDF38\uDF56\uDF57\uDF73-\uDF77\uDF92-\uDF98\uDF9D-\uDFA8\uDFB0-\uDFFF]|\uD808[\uDF9A-\uDFFF]|\uD804[\uDC4E-\uDC51\uDC70-\uDC7E\uDCC2-\uDCCF\uDCE9-\uDCEF\uDCFA-\uDCFF\uDD35\uDD44-\uDD4F\uDD77-\uDD7F\uDDCE\uDDCF\uDDE0\uDDF5-\uDDFF\uDE12\uDE3E-\uDE7F\uDE87\uDE89\uDE8E\uDE9E\uDEAA-\uDEAF\uDEEB-\uDEEF\uDEFA-\uDEFF\uDF04\uDF0D\uDF0E\uDF11\uDF12\uDF29\uDF31\uDF34\uDF3A\uDF3B\uDF45\uDF46\uDF49\uDF4A\uDF4E\uDF4F\uDF51-\uDF56\uDF58-\uDF5C\uDF64\uDF65\uDF6D-\uDF6F\uDF75-\uDFFF]|\uD82C[\uDC02-\uDFFF]|\uD811[\uDE47-\uDFFF]|\uD83E[\uDC0C-\uDC0F\uDC48-\uDC4F\uDC5A-\uDC5F\uDC88-\uDC8F\uDCAE-\uDD0F\uDD19-\uDD7F\uDD85-\uDDBF\uDDC1-\uDFFF]|\uD873[\uDEA2-\uDFFF]'
3629
- },
3630
- {
3631
- name: 'Co',
3632
- alias: 'Private_Use',
3633
- bmp: '\uE000-\uF8FF',
3634
- astral: '[\uDB80-\uDBBE\uDBC0-\uDBFE][\uDC00-\uDFFF]|[\uDBBF\uDBFF][\uDC00-\uDFFD]'
3635
- },
3636
- {
3637
- name: 'Cs',
3638
- alias: 'Surrogate',
3639
- bmp: '\uD800-\uDFFF'
3640
- },
3641
- {
3642
- name: 'L',
3643
- alias: 'Letter',
3644
- bmp: 'A-Za-z\xAA\xB5\xBA\xC0-\xD6\xD8-\xF6\xF8-\u02C1\u02C6-\u02D1\u02E0-\u02E4\u02EC\u02EE\u0370-\u0374\u0376\u0377\u037A-\u037D\u037F\u0386\u0388-\u038A\u038C\u038E-\u03A1\u03A3-\u03F5\u03F7-\u0481\u048A-\u052F\u0531-\u0556\u0559\u0561-\u0587\u05D0-\u05EA\u05F0-\u05F2\u0620-\u064A\u066E\u066F\u0671-\u06D3\u06D5\u06E5\u06E6\u06EE\u06EF\u06FA-\u06FC\u06FF\u0710\u0712-\u072F\u074D-\u07A5\u07B1\u07CA-\u07EA\u07F4\u07F5\u07FA\u0800-\u0815\u081A\u0824\u0828\u0840-\u0858\u08A0-\u08B4\u0904-\u0939\u093D\u0950\u0958-\u0961\u0971-\u0980\u0985-\u098C\u098F\u0990\u0993-\u09A8\u09AA-\u09B0\u09B2\u09B6-\u09B9\u09BD\u09CE\u09DC\u09DD\u09DF-\u09E1\u09F0\u09F1\u0A05-\u0A0A\u0A0F\u0A10\u0A13-\u0A28\u0A2A-\u0A30\u0A32\u0A33\u0A35\u0A36\u0A38\u0A39\u0A59-\u0A5C\u0A5E\u0A72-\u0A74\u0A85-\u0A8D\u0A8F-\u0A91\u0A93-\u0AA8\u0AAA-\u0AB0\u0AB2\u0AB3\u0AB5-\u0AB9\u0ABD\u0AD0\u0AE0\u0AE1\u0AF9\u0B05-\u0B0C\u0B0F\u0B10\u0B13-\u0B28\u0B2A-\u0B30\u0B32\u0B33\u0B35-\u0B39\u0B3D\u0B5C\u0B5D\u0B5F-\u0B61\u0B71\u0B83\u0B85-\u0B8A\u0B8E-\u0B90\u0B92-\u0B95\u0B99\u0B9A\u0B9C\u0B9E\u0B9F\u0BA3\u0BA4\u0BA8-\u0BAA\u0BAE-\u0BB9\u0BD0\u0C05-\u0C0C\u0C0E-\u0C10\u0C12-\u0C28\u0C2A-\u0C39\u0C3D\u0C58-\u0C5A\u0C60\u0C61\u0C85-\u0C8C\u0C8E-\u0C90\u0C92-\u0CA8\u0CAA-\u0CB3\u0CB5-\u0CB9\u0CBD\u0CDE\u0CE0\u0CE1\u0CF1\u0CF2\u0D05-\u0D0C\u0D0E-\u0D10\u0D12-\u0D3A\u0D3D\u0D4E\u0D5F-\u0D61\u0D7A-\u0D7F\u0D85-\u0D96\u0D9A-\u0DB1\u0DB3-\u0DBB\u0DBD\u0DC0-\u0DC6\u0E01-\u0E30\u0E32\u0E33\u0E40-\u0E46\u0E81\u0E82\u0E84\u0E87\u0E88\u0E8A\u0E8D\u0E94-\u0E97\u0E99-\u0E9F\u0EA1-\u0EA3\u0EA5\u0EA7\u0EAA\u0EAB\u0EAD-\u0EB0\u0EB2\u0EB3\u0EBD\u0EC0-\u0EC4\u0EC6\u0EDC-\u0EDF\u0F00\u0F40-\u0F47\u0F49-\u0F6C\u0F88-\u0F8C\u1000-\u102A\u103F\u1050-\u1055\u105A-\u105D\u1061\u1065\u1066\u106E-\u1070\u1075-\u1081\u108E\u10A0-\u10C5\u10C7\u10CD\u10D0-\u10FA\u10FC-\u1248\u124A-\u124D\u1250-\u1256\u1258\u125A-\u125D\u1260-\u1288\u128A-\u128D\u1290-\u12B0\u12B2-\u12B5\u12B8-\u12BE\u12C0\u12C2-\u12C5\u12C8-\u12D6\u12D8-\u1310\u1312-\u1315\u1318-\u135A\u1380-\u138F\u13A0-\u13F5\u13F8-\u13FD\u1401-\u166C\u166F-\u167F\u1681-\u169A\u16A0-\u16EA\u16F1-\u16F8\u1700-\u170C\u170E-\u1711\u1720-\u1731\u1740-\u1751\u1760-\u176C\u176E-\u1770\u1780-\u17B3\u17D7\u17DC\u1820-\u1877\u1880-\u18A8\u18AA\u18B0-\u18F5\u1900-\u191E\u1950-\u196D\u1970-\u1974\u1980-\u19AB\u19B0-\u19C9\u1A00-\u1A16\u1A20-\u1A54\u1AA7\u1B05-\u1B33\u1B45-\u1B4B\u1B83-\u1BA0\u1BAE\u1BAF\u1BBA-\u1BE5\u1C00-\u1C23\u1C4D-\u1C4F\u1C5A-\u1C7D\u1CE9-\u1CEC\u1CEE-\u1CF1\u1CF5\u1CF6\u1D00-\u1DBF\u1E00-\u1F15\u1F18-\u1F1D\u1F20-\u1F45\u1F48-\u1F4D\u1F50-\u1F57\u1F59\u1F5B\u1F5D\u1F5F-\u1F7D\u1F80-\u1FB4\u1FB6-\u1FBC\u1FBE\u1FC2-\u1FC4\u1FC6-\u1FCC\u1FD0-\u1FD3\u1FD6-\u1FDB\u1FE0-\u1FEC\u1FF2-\u1FF4\u1FF6-\u1FFC\u2071\u207F\u2090-\u209C\u2102\u2107\u210A-\u2113\u2115\u2119-\u211D\u2124\u2126\u2128\u212A-\u212D\u212F-\u2139\u213C-\u213F\u2145-\u2149\u214E\u2183\u2184\u2C00-\u2C2E\u2C30-\u2C5E\u2C60-\u2CE4\u2CEB-\u2CEE\u2CF2\u2CF3\u2D00-\u2D25\u2D27\u2D2D\u2D30-\u2D67\u2D6F\u2D80-\u2D96\u2DA0-\u2DA6\u2DA8-\u2DAE\u2DB0-\u2DB6\u2DB8-\u2DBE\u2DC0-\u2DC6\u2DC8-\u2DCE\u2DD0-\u2DD6\u2DD8-\u2DDE\u2E2F\u3005\u3006\u3031-\u3035\u303B\u303C\u3041-\u3096\u309D-\u309F\u30A1-\u30FA\u30FC-\u30FF\u3105-\u312D\u3131-\u318E\u31A0-\u31BA\u31F0-\u31FF\u3400-\u4DB5\u4E00-\u9FD5\uA000-\uA48C\uA4D0-\uA4FD\uA500-\uA60C\uA610-\uA61F\uA62A\uA62B\uA640-\uA66E\uA67F-\uA69D\uA6A0-\uA6E5\uA717-\uA71F\uA722-\uA788\uA78B-\uA7AD\uA7B0-\uA7B7\uA7F7-\uA801\uA803-\uA805\uA807-\uA80A\uA80C-\uA822\uA840-\uA873\uA882-\uA8B3\uA8F2-\uA8F7\uA8FB\uA8FD\uA90A-\uA925\uA930-\uA946\uA960-\uA97C\uA984-\uA9B2\uA9CF\uA9E0-\uA9E4\uA9E6-\uA9EF\uA9FA-\uA9FE\uAA00-\uAA28\uAA40-\uAA42\uAA44-\uAA4B\uAA60-\uAA76\uAA7A\uAA7E-\uAAAF\uAAB1\uAAB5\uAAB6\uAAB9-\uAABD\uAAC0\uAAC2\uAADB-\uAADD\uAAE0-\uAAEA\uAAF2-\uAAF4\uAB01-\uAB06\uAB09-\uAB0E\uAB11-\uAB16\uAB20-\uAB26\uAB28-\uAB2E\uAB30-\uAB5A\uAB5C-\uAB65\uAB70-\uABE2\uAC00-\uD7A3\uD7B0-\uD7C6\uD7CB-\uD7FB\uF900-\uFA6D\uFA70-\uFAD9\uFB00-\uFB06\uFB13-\uFB17\uFB1D\uFB1F-\uFB28\uFB2A-\uFB36\uFB38-\uFB3C\uFB3E\uFB40\uFB41\uFB43\uFB44\uFB46-\uFBB1\uFBD3-\uFD3D\uFD50-\uFD8F\uFD92-\uFDC7\uFDF0-\uFDFB\uFE70-\uFE74\uFE76-\uFEFC\uFF21-\uFF3A\uFF41-\uFF5A\uFF66-\uFFBE\uFFC2-\uFFC7\uFFCA-\uFFCF\uFFD2-\uFFD7\uFFDA-\uFFDC',
3645
- astral: '\uD86E[\uDC00-\uDC1D\uDC20-\uDFFF]|\uD86D[\uDC00-\uDF34\uDF40-\uDFFF]|\uD869[\uDC00-\uDED6\uDF00-\uDFFF]|\uD803[\uDC00-\uDC48\uDC80-\uDCB2\uDCC0-\uDCF2]|\uD83A[\uDC00-\uDCC4]|\uD801[\uDC00-\uDC9D\uDD00-\uDD27\uDD30-\uDD63\uDE00-\uDF36\uDF40-\uDF55\uDF60-\uDF67]|\uD800[\uDC00-\uDC0B\uDC0D-\uDC26\uDC28-\uDC3A\uDC3C\uDC3D\uDC3F-\uDC4D\uDC50-\uDC5D\uDC80-\uDCFA\uDE80-\uDE9C\uDEA0-\uDED0\uDF00-\uDF1F\uDF30-\uDF40\uDF42-\uDF49\uDF50-\uDF75\uDF80-\uDF9D\uDFA0-\uDFC3\uDFC8-\uDFCF]|\uD80D[\uDC00-\uDC2E]|\uD87E[\uDC00-\uDE1D]|\uD81B[\uDF00-\uDF44\uDF50\uDF93-\uDF9F]|[\uD80C\uD840-\uD868\uD86A-\uD86C\uD86F-\uD872][\uDC00-\uDFFF]|\uD805[\uDC80-\uDCAF\uDCC4\uDCC5\uDCC7\uDD80-\uDDAE\uDDD8-\uDDDB\uDE00-\uDE2F\uDE44\uDE80-\uDEAA\uDF00-\uDF19]|\uD81A[\uDC00-\uDE38\uDE40-\uDE5E\uDED0-\uDEED\uDF00-\uDF2F\uDF40-\uDF43\uDF63-\uDF77\uDF7D-\uDF8F]|\uD809[\uDC80-\uDD43]|\uD802[\uDC00-\uDC05\uDC08\uDC0A-\uDC35\uDC37\uDC38\uDC3C\uDC3F-\uDC55\uDC60-\uDC76\uDC80-\uDC9E\uDCE0-\uDCF2\uDCF4\uDCF5\uDD00-\uDD15\uDD20-\uDD39\uDD80-\uDDB7\uDDBE\uDDBF\uDE00\uDE10-\uDE13\uDE15-\uDE17\uDE19-\uDE33\uDE60-\uDE7C\uDE80-\uDE9C\uDEC0-\uDEC7\uDEC9-\uDEE4\uDF00-\uDF35\uDF40-\uDF55\uDF60-\uDF72\uDF80-\uDF91]|\uD835[\uDC00-\uDC54\uDC56-\uDC9C\uDC9E\uDC9F\uDCA2\uDCA5\uDCA6\uDCA9-\uDCAC\uDCAE-\uDCB9\uDCBB\uDCBD-\uDCC3\uDCC5-\uDD05\uDD07-\uDD0A\uDD0D-\uDD14\uDD16-\uDD1C\uDD1E-\uDD39\uDD3B-\uDD3E\uDD40-\uDD44\uDD46\uDD4A-\uDD50\uDD52-\uDEA5\uDEA8-\uDEC0\uDEC2-\uDEDA\uDEDC-\uDEFA\uDEFC-\uDF14\uDF16-\uDF34\uDF36-\uDF4E\uDF50-\uDF6E\uDF70-\uDF88\uDF8A-\uDFA8\uDFAA-\uDFC2\uDFC4-\uDFCB]|\uD804[\uDC03-\uDC37\uDC83-\uDCAF\uDCD0-\uDCE8\uDD03-\uDD26\uDD50-\uDD72\uDD76\uDD83-\uDDB2\uDDC1-\uDDC4\uDDDA\uDDDC\uDE00-\uDE11\uDE13-\uDE2B\uDE80-\uDE86\uDE88\uDE8A-\uDE8D\uDE8F-\uDE9D\uDE9F-\uDEA8\uDEB0-\uDEDE\uDF05-\uDF0C\uDF0F\uDF10\uDF13-\uDF28\uDF2A-\uDF30\uDF32\uDF33\uDF35-\uDF39\uDF3D\uDF50\uDF5D-\uDF61]|\uD808[\uDC00-\uDF99]|\uD83B[\uDE00-\uDE03\uDE05-\uDE1F\uDE21\uDE22\uDE24\uDE27\uDE29-\uDE32\uDE34-\uDE37\uDE39\uDE3B\uDE42\uDE47\uDE49\uDE4B\uDE4D-\uDE4F\uDE51\uDE52\uDE54\uDE57\uDE59\uDE5B\uDE5D\uDE5F\uDE61\uDE62\uDE64\uDE67-\uDE6A\uDE6C-\uDE72\uDE74-\uDE77\uDE79-\uDE7C\uDE7E\uDE80-\uDE89\uDE8B-\uDE9B\uDEA1-\uDEA3\uDEA5-\uDEA9\uDEAB-\uDEBB]|\uD806[\uDCA0-\uDCDF\uDCFF\uDEC0-\uDEF8]|\uD811[\uDC00-\uDE46]|\uD82F[\uDC00-\uDC6A\uDC70-\uDC7C\uDC80-\uDC88\uDC90-\uDC99]|\uD82C[\uDC00\uDC01]|\uD873[\uDC00-\uDEA1]'
3646
- },
3647
- {
3648
- name: 'Ll',
3649
- alias: 'Lowercase_Letter',
3650
- bmp: 'a-z\xB5\xDF-\xF6\xF8-\xFF\u0101\u0103\u0105\u0107\u0109\u010B\u010D\u010F\u0111\u0113\u0115\u0117\u0119\u011B\u011D\u011F\u0121\u0123\u0125\u0127\u0129\u012B\u012D\u012F\u0131\u0133\u0135\u0137\u0138\u013A\u013C\u013E\u0140\u0142\u0144\u0146\u0148\u0149\u014B\u014D\u014F\u0151\u0153\u0155\u0157\u0159\u015B\u015D\u015F\u0161\u0163\u0165\u0167\u0169\u016B\u016D\u016F\u0171\u0173\u0175\u0177\u017A\u017C\u017E-\u0180\u0183\u0185\u0188\u018C\u018D\u0192\u0195\u0199-\u019B\u019E\u01A1\u01A3\u01A5\u01A8\u01AA\u01AB\u01AD\u01B0\u01B4\u01B6\u01B9\u01BA\u01BD-\u01BF\u01C6\u01C9\u01CC\u01CE\u01D0\u01D2\u01D4\u01D6\u01D8\u01DA\u01DC\u01DD\u01DF\u01E1\u01E3\u01E5\u01E7\u01E9\u01EB\u01ED\u01EF\u01F0\u01F3\u01F5\u01F9\u01FB\u01FD\u01FF\u0201\u0203\u0205\u0207\u0209\u020B\u020D\u020F\u0211\u0213\u0215\u0217\u0219\u021B\u021D\u021F\u0221\u0223\u0225\u0227\u0229\u022B\u022D\u022F\u0231\u0233-\u0239\u023C\u023F\u0240\u0242\u0247\u0249\u024B\u024D\u024F-\u0293\u0295-\u02AF\u0371\u0373\u0377\u037B-\u037D\u0390\u03AC-\u03CE\u03D0\u03D1\u03D5-\u03D7\u03D9\u03DB\u03DD\u03DF\u03E1\u03E3\u03E5\u03E7\u03E9\u03EB\u03ED\u03EF-\u03F3\u03F5\u03F8\u03FB\u03FC\u0430-\u045F\u0461\u0463\u0465\u0467\u0469\u046B\u046D\u046F\u0471\u0473\u0475\u0477\u0479\u047B\u047D\u047F\u0481\u048B\u048D\u048F\u0491\u0493\u0495\u0497\u0499\u049B\u049D\u049F\u04A1\u04A3\u04A5\u04A7\u04A9\u04AB\u04AD\u04AF\u04B1\u04B3\u04B5\u04B7\u04B9\u04BB\u04BD\u04BF\u04C2\u04C4\u04C6\u04C8\u04CA\u04CC\u04CE\u04CF\u04D1\u04D3\u04D5\u04D7\u04D9\u04DB\u04DD\u04DF\u04E1\u04E3\u04E5\u04E7\u04E9\u04EB\u04ED\u04EF\u04F1\u04F3\u04F5\u04F7\u04F9\u04FB\u04FD\u04FF\u0501\u0503\u0505\u0507\u0509\u050B\u050D\u050F\u0511\u0513\u0515\u0517\u0519\u051B\u051D\u051F\u0521\u0523\u0525\u0527\u0529\u052B\u052D\u052F\u0561-\u0587\u13F8-\u13FD\u1D00-\u1D2B\u1D6B-\u1D77\u1D79-\u1D9A\u1E01\u1E03\u1E05\u1E07\u1E09\u1E0B\u1E0D\u1E0F\u1E11\u1E13\u1E15\u1E17\u1E19\u1E1B\u1E1D\u1E1F\u1E21\u1E23\u1E25\u1E27\u1E29\u1E2B\u1E2D\u1E2F\u1E31\u1E33\u1E35\u1E37\u1E39\u1E3B\u1E3D\u1E3F\u1E41\u1E43\u1E45\u1E47\u1E49\u1E4B\u1E4D\u1E4F\u1E51\u1E53\u1E55\u1E57\u1E59\u1E5B\u1E5D\u1E5F\u1E61\u1E63\u1E65\u1E67\u1E69\u1E6B\u1E6D\u1E6F\u1E71\u1E73\u1E75\u1E77\u1E79\u1E7B\u1E7D\u1E7F\u1E81\u1E83\u1E85\u1E87\u1E89\u1E8B\u1E8D\u1E8F\u1E91\u1E93\u1E95-\u1E9D\u1E9F\u1EA1\u1EA3\u1EA5\u1EA7\u1EA9\u1EAB\u1EAD\u1EAF\u1EB1\u1EB3\u1EB5\u1EB7\u1EB9\u1EBB\u1EBD\u1EBF\u1EC1\u1EC3\u1EC5\u1EC7\u1EC9\u1ECB\u1ECD\u1ECF\u1ED1\u1ED3\u1ED5\u1ED7\u1ED9\u1EDB\u1EDD\u1EDF\u1EE1\u1EE3\u1EE5\u1EE7\u1EE9\u1EEB\u1EED\u1EEF\u1EF1\u1EF3\u1EF5\u1EF7\u1EF9\u1EFB\u1EFD\u1EFF-\u1F07\u1F10-\u1F15\u1F20-\u1F27\u1F30-\u1F37\u1F40-\u1F45\u1F50-\u1F57\u1F60-\u1F67\u1F70-\u1F7D\u1F80-\u1F87\u1F90-\u1F97\u1FA0-\u1FA7\u1FB0-\u1FB4\u1FB6\u1FB7\u1FBE\u1FC2-\u1FC4\u1FC6\u1FC7\u1FD0-\u1FD3\u1FD6\u1FD7\u1FE0-\u1FE7\u1FF2-\u1FF4\u1FF6\u1FF7\u210A\u210E\u210F\u2113\u212F\u2134\u2139\u213C\u213D\u2146-\u2149\u214E\u2184\u2C30-\u2C5E\u2C61\u2C65\u2C66\u2C68\u2C6A\u2C6C\u2C71\u2C73\u2C74\u2C76-\u2C7B\u2C81\u2C83\u2C85\u2C87\u2C89\u2C8B\u2C8D\u2C8F\u2C91\u2C93\u2C95\u2C97\u2C99\u2C9B\u2C9D\u2C9F\u2CA1\u2CA3\u2CA5\u2CA7\u2CA9\u2CAB\u2CAD\u2CAF\u2CB1\u2CB3\u2CB5\u2CB7\u2CB9\u2CBB\u2CBD\u2CBF\u2CC1\u2CC3\u2CC5\u2CC7\u2CC9\u2CCB\u2CCD\u2CCF\u2CD1\u2CD3\u2CD5\u2CD7\u2CD9\u2CDB\u2CDD\u2CDF\u2CE1\u2CE3\u2CE4\u2CEC\u2CEE\u2CF3\u2D00-\u2D25\u2D27\u2D2D\uA641\uA643\uA645\uA647\uA649\uA64B\uA64D\uA64F\uA651\uA653\uA655\uA657\uA659\uA65B\uA65D\uA65F\uA661\uA663\uA665\uA667\uA669\uA66B\uA66D\uA681\uA683\uA685\uA687\uA689\uA68B\uA68D\uA68F\uA691\uA693\uA695\uA697\uA699\uA69B\uA723\uA725\uA727\uA729\uA72B\uA72D\uA72F-\uA731\uA733\uA735\uA737\uA739\uA73B\uA73D\uA73F\uA741\uA743\uA745\uA747\uA749\uA74B\uA74D\uA74F\uA751\uA753\uA755\uA757\uA759\uA75B\uA75D\uA75F\uA761\uA763\uA765\uA767\uA769\uA76B\uA76D\uA76F\uA771-\uA778\uA77A\uA77C\uA77F\uA781\uA783\uA785\uA787\uA78C\uA78E\uA791\uA793-\uA795\uA797\uA799\uA79B\uA79D\uA79F\uA7A1\uA7A3\uA7A5\uA7A7\uA7A9\uA7B5\uA7B7\uA7FA\uAB30-\uAB5A\uAB60-\uAB65\uAB70-\uABBF\uFB00-\uFB06\uFB13-\uFB17\uFF41-\uFF5A',
3651
- astral: '\uD803[\uDCC0-\uDCF2]|\uD835[\uDC1A-\uDC33\uDC4E-\uDC54\uDC56-\uDC67\uDC82-\uDC9B\uDCB6-\uDCB9\uDCBB\uDCBD-\uDCC3\uDCC5-\uDCCF\uDCEA-\uDD03\uDD1E-\uDD37\uDD52-\uDD6B\uDD86-\uDD9F\uDDBA-\uDDD3\uDDEE-\uDE07\uDE22-\uDE3B\uDE56-\uDE6F\uDE8A-\uDEA5\uDEC2-\uDEDA\uDEDC-\uDEE1\uDEFC-\uDF14\uDF16-\uDF1B\uDF36-\uDF4E\uDF50-\uDF55\uDF70-\uDF88\uDF8A-\uDF8F\uDFAA-\uDFC2\uDFC4-\uDFC9\uDFCB]|\uD801[\uDC28-\uDC4F]|\uD806[\uDCC0-\uDCDF]'
3652
- },
3653
- {
3654
- name: 'Lm',
3655
- alias: 'Modifier_Letter',
3656
- bmp: '\u02B0-\u02C1\u02C6-\u02D1\u02E0-\u02E4\u02EC\u02EE\u0374\u037A\u0559\u0640\u06E5\u06E6\u07F4\u07F5\u07FA\u081A\u0824\u0828\u0971\u0E46\u0EC6\u10FC\u17D7\u1843\u1AA7\u1C78-\u1C7D\u1D2C-\u1D6A\u1D78\u1D9B-\u1DBF\u2071\u207F\u2090-\u209C\u2C7C\u2C7D\u2D6F\u2E2F\u3005\u3031-\u3035\u303B\u309D\u309E\u30FC-\u30FE\uA015\uA4F8-\uA4FD\uA60C\uA67F\uA69C\uA69D\uA717-\uA71F\uA770\uA788\uA7F8\uA7F9\uA9CF\uA9E6\uAA70\uAADD\uAAF3\uAAF4\uAB5C-\uAB5F\uFF70\uFF9E\uFF9F',
3657
- astral: '\uD81A[\uDF40-\uDF43]|\uD81B[\uDF93-\uDF9F]'
3658
- },
3659
- {
3660
- name: 'Lo',
3661
- alias: 'Other_Letter',
3662
- bmp: '\xAA\xBA\u01BB\u01C0-\u01C3\u0294\u05D0-\u05EA\u05F0-\u05F2\u0620-\u063F\u0641-\u064A\u066E\u066F\u0671-\u06D3\u06D5\u06EE\u06EF\u06FA-\u06FC\u06FF\u0710\u0712-\u072F\u074D-\u07A5\u07B1\u07CA-\u07EA\u0800-\u0815\u0840-\u0858\u08A0-\u08B4\u0904-\u0939\u093D\u0950\u0958-\u0961\u0972-\u0980\u0985-\u098C\u098F\u0990\u0993-\u09A8\u09AA-\u09B0\u09B2\u09B6-\u09B9\u09BD\u09CE\u09DC\u09DD\u09DF-\u09E1\u09F0\u09F1\u0A05-\u0A0A\u0A0F\u0A10\u0A13-\u0A28\u0A2A-\u0A30\u0A32\u0A33\u0A35\u0A36\u0A38\u0A39\u0A59-\u0A5C\u0A5E\u0A72-\u0A74\u0A85-\u0A8D\u0A8F-\u0A91\u0A93-\u0AA8\u0AAA-\u0AB0\u0AB2\u0AB3\u0AB5-\u0AB9\u0ABD\u0AD0\u0AE0\u0AE1\u0AF9\u0B05-\u0B0C\u0B0F\u0B10\u0B13-\u0B28\u0B2A-\u0B30\u0B32\u0B33\u0B35-\u0B39\u0B3D\u0B5C\u0B5D\u0B5F-\u0B61\u0B71\u0B83\u0B85-\u0B8A\u0B8E-\u0B90\u0B92-\u0B95\u0B99\u0B9A\u0B9C\u0B9E\u0B9F\u0BA3\u0BA4\u0BA8-\u0BAA\u0BAE-\u0BB9\u0BD0\u0C05-\u0C0C\u0C0E-\u0C10\u0C12-\u0C28\u0C2A-\u0C39\u0C3D\u0C58-\u0C5A\u0C60\u0C61\u0C85-\u0C8C\u0C8E-\u0C90\u0C92-\u0CA8\u0CAA-\u0CB3\u0CB5-\u0CB9\u0CBD\u0CDE\u0CE0\u0CE1\u0CF1\u0CF2\u0D05-\u0D0C\u0D0E-\u0D10\u0D12-\u0D3A\u0D3D\u0D4E\u0D5F-\u0D61\u0D7A-\u0D7F\u0D85-\u0D96\u0D9A-\u0DB1\u0DB3-\u0DBB\u0DBD\u0DC0-\u0DC6\u0E01-\u0E30\u0E32\u0E33\u0E40-\u0E45\u0E81\u0E82\u0E84\u0E87\u0E88\u0E8A\u0E8D\u0E94-\u0E97\u0E99-\u0E9F\u0EA1-\u0EA3\u0EA5\u0EA7\u0EAA\u0EAB\u0EAD-\u0EB0\u0EB2\u0EB3\u0EBD\u0EC0-\u0EC4\u0EDC-\u0EDF\u0F00\u0F40-\u0F47\u0F49-\u0F6C\u0F88-\u0F8C\u1000-\u102A\u103F\u1050-\u1055\u105A-\u105D\u1061\u1065\u1066\u106E-\u1070\u1075-\u1081\u108E\u10D0-\u10FA\u10FD-\u1248\u124A-\u124D\u1250-\u1256\u1258\u125A-\u125D\u1260-\u1288\u128A-\u128D\u1290-\u12B0\u12B2-\u12B5\u12B8-\u12BE\u12C0\u12C2-\u12C5\u12C8-\u12D6\u12D8-\u1310\u1312-\u1315\u1318-\u135A\u1380-\u138F\u1401-\u166C\u166F-\u167F\u1681-\u169A\u16A0-\u16EA\u16F1-\u16F8\u1700-\u170C\u170E-\u1711\u1720-\u1731\u1740-\u1751\u1760-\u176C\u176E-\u1770\u1780-\u17B3\u17DC\u1820-\u1842\u1844-\u1877\u1880-\u18A8\u18AA\u18B0-\u18F5\u1900-\u191E\u1950-\u196D\u1970-\u1974\u1980-\u19AB\u19B0-\u19C9\u1A00-\u1A16\u1A20-\u1A54\u1B05-\u1B33\u1B45-\u1B4B\u1B83-\u1BA0\u1BAE\u1BAF\u1BBA-\u1BE5\u1C00-\u1C23\u1C4D-\u1C4F\u1C5A-\u1C77\u1CE9-\u1CEC\u1CEE-\u1CF1\u1CF5\u1CF6\u2135-\u2138\u2D30-\u2D67\u2D80-\u2D96\u2DA0-\u2DA6\u2DA8-\u2DAE\u2DB0-\u2DB6\u2DB8-\u2DBE\u2DC0-\u2DC6\u2DC8-\u2DCE\u2DD0-\u2DD6\u2DD8-\u2DDE\u3006\u303C\u3041-\u3096\u309F\u30A1-\u30FA\u30FF\u3105-\u312D\u3131-\u318E\u31A0-\u31BA\u31F0-\u31FF\u3400-\u4DB5\u4E00-\u9FD5\uA000-\uA014\uA016-\uA48C\uA4D0-\uA4F7\uA500-\uA60B\uA610-\uA61F\uA62A\uA62B\uA66E\uA6A0-\uA6E5\uA78F\uA7F7\uA7FB-\uA801\uA803-\uA805\uA807-\uA80A\uA80C-\uA822\uA840-\uA873\uA882-\uA8B3\uA8F2-\uA8F7\uA8FB\uA8FD\uA90A-\uA925\uA930-\uA946\uA960-\uA97C\uA984-\uA9B2\uA9E0-\uA9E4\uA9E7-\uA9EF\uA9FA-\uA9FE\uAA00-\uAA28\uAA40-\uAA42\uAA44-\uAA4B\uAA60-\uAA6F\uAA71-\uAA76\uAA7A\uAA7E-\uAAAF\uAAB1\uAAB5\uAAB6\uAAB9-\uAABD\uAAC0\uAAC2\uAADB\uAADC\uAAE0-\uAAEA\uAAF2\uAB01-\uAB06\uAB09-\uAB0E\uAB11-\uAB16\uAB20-\uAB26\uAB28-\uAB2E\uABC0-\uABE2\uAC00-\uD7A3\uD7B0-\uD7C6\uD7CB-\uD7FB\uF900-\uFA6D\uFA70-\uFAD9\uFB1D\uFB1F-\uFB28\uFB2A-\uFB36\uFB38-\uFB3C\uFB3E\uFB40\uFB41\uFB43\uFB44\uFB46-\uFBB1\uFBD3-\uFD3D\uFD50-\uFD8F\uFD92-\uFDC7\uFDF0-\uFDFB\uFE70-\uFE74\uFE76-\uFEFC\uFF66-\uFF6F\uFF71-\uFF9D\uFFA0-\uFFBE\uFFC2-\uFFC7\uFFCA-\uFFCF\uFFD2-\uFFD7\uFFDA-\uFFDC',
3663
- astral: '\uD86E[\uDC00-\uDC1D\uDC20-\uDFFF]|\uD86D[\uDC00-\uDF34\uDF40-\uDFFF]|\uD869[\uDC00-\uDED6\uDF00-\uDFFF]|\uD83A[\uDC00-\uDCC4]|\uD803[\uDC00-\uDC48]|\uD800[\uDC00-\uDC0B\uDC0D-\uDC26\uDC28-\uDC3A\uDC3C\uDC3D\uDC3F-\uDC4D\uDC50-\uDC5D\uDC80-\uDCFA\uDE80-\uDE9C\uDEA0-\uDED0\uDF00-\uDF1F\uDF30-\uDF40\uDF42-\uDF49\uDF50-\uDF75\uDF80-\uDF9D\uDFA0-\uDFC3\uDFC8-\uDFCF]|\uD80D[\uDC00-\uDC2E]|\uD87E[\uDC00-\uDE1D]|\uD81B[\uDF00-\uDF44\uDF50]|[\uD80C\uD840-\uD868\uD86A-\uD86C\uD86F-\uD872][\uDC00-\uDFFF]|\uD805[\uDC80-\uDCAF\uDCC4\uDCC5\uDCC7\uDD80-\uDDAE\uDDD8-\uDDDB\uDE00-\uDE2F\uDE44\uDE80-\uDEAA\uDF00-\uDF19]|\uD806[\uDCFF\uDEC0-\uDEF8]|\uD809[\uDC80-\uDD43]|\uD802[\uDC00-\uDC05\uDC08\uDC0A-\uDC35\uDC37\uDC38\uDC3C\uDC3F-\uDC55\uDC60-\uDC76\uDC80-\uDC9E\uDCE0-\uDCF2\uDCF4\uDCF5\uDD00-\uDD15\uDD20-\uDD39\uDD80-\uDDB7\uDDBE\uDDBF\uDE00\uDE10-\uDE13\uDE15-\uDE17\uDE19-\uDE33\uDE60-\uDE7C\uDE80-\uDE9C\uDEC0-\uDEC7\uDEC9-\uDEE4\uDF00-\uDF35\uDF40-\uDF55\uDF60-\uDF72\uDF80-\uDF91]|\uD804[\uDC03-\uDC37\uDC83-\uDCAF\uDCD0-\uDCE8\uDD03-\uDD26\uDD50-\uDD72\uDD76\uDD83-\uDDB2\uDDC1-\uDDC4\uDDDA\uDDDC\uDE00-\uDE11\uDE13-\uDE2B\uDE80-\uDE86\uDE88\uDE8A-\uDE8D\uDE8F-\uDE9D\uDE9F-\uDEA8\uDEB0-\uDEDE\uDF05-\uDF0C\uDF0F\uDF10\uDF13-\uDF28\uDF2A-\uDF30\uDF32\uDF33\uDF35-\uDF39\uDF3D\uDF50\uDF5D-\uDF61]|\uD808[\uDC00-\uDF99]|\uD83B[\uDE00-\uDE03\uDE05-\uDE1F\uDE21\uDE22\uDE24\uDE27\uDE29-\uDE32\uDE34-\uDE37\uDE39\uDE3B\uDE42\uDE47\uDE49\uDE4B\uDE4D-\uDE4F\uDE51\uDE52\uDE54\uDE57\uDE59\uDE5B\uDE5D\uDE5F\uDE61\uDE62\uDE64\uDE67-\uDE6A\uDE6C-\uDE72\uDE74-\uDE77\uDE79-\uDE7C\uDE7E\uDE80-\uDE89\uDE8B-\uDE9B\uDEA1-\uDEA3\uDEA5-\uDEA9\uDEAB-\uDEBB]|\uD81A[\uDC00-\uDE38\uDE40-\uDE5E\uDED0-\uDEED\uDF00-\uDF2F\uDF63-\uDF77\uDF7D-\uDF8F]|\uD801[\uDC50-\uDC9D\uDD00-\uDD27\uDD30-\uDD63\uDE00-\uDF36\uDF40-\uDF55\uDF60-\uDF67]|\uD811[\uDC00-\uDE46]|\uD82F[\uDC00-\uDC6A\uDC70-\uDC7C\uDC80-\uDC88\uDC90-\uDC99]|\uD82C[\uDC00\uDC01]|\uD873[\uDC00-\uDEA1]'
3664
- },
3665
- {
3666
- name: 'Lt',
3667
- alias: 'Titlecase_Letter',
3668
- bmp: '\u01C5\u01C8\u01CB\u01F2\u1F88-\u1F8F\u1F98-\u1F9F\u1FA8-\u1FAF\u1FBC\u1FCC\u1FFC'
3669
- },
3670
- {
3671
- name: 'Lu',
3672
- alias: 'Uppercase_Letter',
3673
- bmp: 'A-Z\xC0-\xD6\xD8-\xDE\u0100\u0102\u0104\u0106\u0108\u010A\u010C\u010E\u0110\u0112\u0114\u0116\u0118\u011A\u011C\u011E\u0120\u0122\u0124\u0126\u0128\u012A\u012C\u012E\u0130\u0132\u0134\u0136\u0139\u013B\u013D\u013F\u0141\u0143\u0145\u0147\u014A\u014C\u014E\u0150\u0152\u0154\u0156\u0158\u015A\u015C\u015E\u0160\u0162\u0164\u0166\u0168\u016A\u016C\u016E\u0170\u0172\u0174\u0176\u0178\u0179\u017B\u017D\u0181\u0182\u0184\u0186\u0187\u0189-\u018B\u018E-\u0191\u0193\u0194\u0196-\u0198\u019C\u019D\u019F\u01A0\u01A2\u01A4\u01A6\u01A7\u01A9\u01AC\u01AE\u01AF\u01B1-\u01B3\u01B5\u01B7\u01B8\u01BC\u01C4\u01C7\u01CA\u01CD\u01CF\u01D1\u01D3\u01D5\u01D7\u01D9\u01DB\u01DE\u01E0\u01E2\u01E4\u01E6\u01E8\u01EA\u01EC\u01EE\u01F1\u01F4\u01F6-\u01F8\u01FA\u01FC\u01FE\u0200\u0202\u0204\u0206\u0208\u020A\u020C\u020E\u0210\u0212\u0214\u0216\u0218\u021A\u021C\u021E\u0220\u0222\u0224\u0226\u0228\u022A\u022C\u022E\u0230\u0232\u023A\u023B\u023D\u023E\u0241\u0243-\u0246\u0248\u024A\u024C\u024E\u0370\u0372\u0376\u037F\u0386\u0388-\u038A\u038C\u038E\u038F\u0391-\u03A1\u03A3-\u03AB\u03CF\u03D2-\u03D4\u03D8\u03DA\u03DC\u03DE\u03E0\u03E2\u03E4\u03E6\u03E8\u03EA\u03EC\u03EE\u03F4\u03F7\u03F9\u03FA\u03FD-\u042F\u0460\u0462\u0464\u0466\u0468\u046A\u046C\u046E\u0470\u0472\u0474\u0476\u0478\u047A\u047C\u047E\u0480\u048A\u048C\u048E\u0490\u0492\u0494\u0496\u0498\u049A\u049C\u049E\u04A0\u04A2\u04A4\u04A6\u04A8\u04AA\u04AC\u04AE\u04B0\u04B2\u04B4\u04B6\u04B8\u04BA\u04BC\u04BE\u04C0\u04C1\u04C3\u04C5\u04C7\u04C9\u04CB\u04CD\u04D0\u04D2\u04D4\u04D6\u04D8\u04DA\u04DC\u04DE\u04E0\u04E2\u04E4\u04E6\u04E8\u04EA\u04EC\u04EE\u04F0\u04F2\u04F4\u04F6\u04F8\u04FA\u04FC\u04FE\u0500\u0502\u0504\u0506\u0508\u050A\u050C\u050E\u0510\u0512\u0514\u0516\u0518\u051A\u051C\u051E\u0520\u0522\u0524\u0526\u0528\u052A\u052C\u052E\u0531-\u0556\u10A0-\u10C5\u10C7\u10CD\u13A0-\u13F5\u1E00\u1E02\u1E04\u1E06\u1E08\u1E0A\u1E0C\u1E0E\u1E10\u1E12\u1E14\u1E16\u1E18\u1E1A\u1E1C\u1E1E\u1E20\u1E22\u1E24\u1E26\u1E28\u1E2A\u1E2C\u1E2E\u1E30\u1E32\u1E34\u1E36\u1E38\u1E3A\u1E3C\u1E3E\u1E40\u1E42\u1E44\u1E46\u1E48\u1E4A\u1E4C\u1E4E\u1E50\u1E52\u1E54\u1E56\u1E58\u1E5A\u1E5C\u1E5E\u1E60\u1E62\u1E64\u1E66\u1E68\u1E6A\u1E6C\u1E6E\u1E70\u1E72\u1E74\u1E76\u1E78\u1E7A\u1E7C\u1E7E\u1E80\u1E82\u1E84\u1E86\u1E88\u1E8A\u1E8C\u1E8E\u1E90\u1E92\u1E94\u1E9E\u1EA0\u1EA2\u1EA4\u1EA6\u1EA8\u1EAA\u1EAC\u1EAE\u1EB0\u1EB2\u1EB4\u1EB6\u1EB8\u1EBA\u1EBC\u1EBE\u1EC0\u1EC2\u1EC4\u1EC6\u1EC8\u1ECA\u1ECC\u1ECE\u1ED0\u1ED2\u1ED4\u1ED6\u1ED8\u1EDA\u1EDC\u1EDE\u1EE0\u1EE2\u1EE4\u1EE6\u1EE8\u1EEA\u1EEC\u1EEE\u1EF0\u1EF2\u1EF4\u1EF6\u1EF8\u1EFA\u1EFC\u1EFE\u1F08-\u1F0F\u1F18-\u1F1D\u1F28-\u1F2F\u1F38-\u1F3F\u1F48-\u1F4D\u1F59\u1F5B\u1F5D\u1F5F\u1F68-\u1F6F\u1FB8-\u1FBB\u1FC8-\u1FCB\u1FD8-\u1FDB\u1FE8-\u1FEC\u1FF8-\u1FFB\u2102\u2107\u210B-\u210D\u2110-\u2112\u2115\u2119-\u211D\u2124\u2126\u2128\u212A-\u212D\u2130-\u2133\u213E\u213F\u2145\u2183\u2C00-\u2C2E\u2C60\u2C62-\u2C64\u2C67\u2C69\u2C6B\u2C6D-\u2C70\u2C72\u2C75\u2C7E-\u2C80\u2C82\u2C84\u2C86\u2C88\u2C8A\u2C8C\u2C8E\u2C90\u2C92\u2C94\u2C96\u2C98\u2C9A\u2C9C\u2C9E\u2CA0\u2CA2\u2CA4\u2CA6\u2CA8\u2CAA\u2CAC\u2CAE\u2CB0\u2CB2\u2CB4\u2CB6\u2CB8\u2CBA\u2CBC\u2CBE\u2CC0\u2CC2\u2CC4\u2CC6\u2CC8\u2CCA\u2CCC\u2CCE\u2CD0\u2CD2\u2CD4\u2CD6\u2CD8\u2CDA\u2CDC\u2CDE\u2CE0\u2CE2\u2CEB\u2CED\u2CF2\uA640\uA642\uA644\uA646\uA648\uA64A\uA64C\uA64E\uA650\uA652\uA654\uA656\uA658\uA65A\uA65C\uA65E\uA660\uA662\uA664\uA666\uA668\uA66A\uA66C\uA680\uA682\uA684\uA686\uA688\uA68A\uA68C\uA68E\uA690\uA692\uA694\uA696\uA698\uA69A\uA722\uA724\uA726\uA728\uA72A\uA72C\uA72E\uA732\uA734\uA736\uA738\uA73A\uA73C\uA73E\uA740\uA742\uA744\uA746\uA748\uA74A\uA74C\uA74E\uA750\uA752\uA754\uA756\uA758\uA75A\uA75C\uA75E\uA760\uA762\uA764\uA766\uA768\uA76A\uA76C\uA76E\uA779\uA77B\uA77D\uA77E\uA780\uA782\uA784\uA786\uA78B\uA78D\uA790\uA792\uA796\uA798\uA79A\uA79C\uA79E\uA7A0\uA7A2\uA7A4\uA7A6\uA7A8\uA7AA-\uA7AD\uA7B0-\uA7B4\uA7B6\uFF21-\uFF3A',
3674
- astral: '\uD806[\uDCA0-\uDCBF]|\uD803[\uDC80-\uDCB2]|\uD801[\uDC00-\uDC27]|\uD835[\uDC00-\uDC19\uDC34-\uDC4D\uDC68-\uDC81\uDC9C\uDC9E\uDC9F\uDCA2\uDCA5\uDCA6\uDCA9-\uDCAC\uDCAE-\uDCB5\uDCD0-\uDCE9\uDD04\uDD05\uDD07-\uDD0A\uDD0D-\uDD14\uDD16-\uDD1C\uDD38\uDD39\uDD3B-\uDD3E\uDD40-\uDD44\uDD46\uDD4A-\uDD50\uDD6C-\uDD85\uDDA0-\uDDB9\uDDD4-\uDDED\uDE08-\uDE21\uDE3C-\uDE55\uDE70-\uDE89\uDEA8-\uDEC0\uDEE2-\uDEFA\uDF1C-\uDF34\uDF56-\uDF6E\uDF90-\uDFA8\uDFCA]'
3675
- },
3676
- {
3677
- name: 'M',
3678
- alias: 'Mark',
3679
- bmp: '\u0300-\u036F\u0483-\u0489\u0591-\u05BD\u05BF\u05C1\u05C2\u05C4\u05C5\u05C7\u0610-\u061A\u064B-\u065F\u0670\u06D6-\u06DC\u06DF-\u06E4\u06E7\u06E8\u06EA-\u06ED\u0711\u0730-\u074A\u07A6-\u07B0\u07EB-\u07F3\u0816-\u0819\u081B-\u0823\u0825-\u0827\u0829-\u082D\u0859-\u085B\u08E3-\u0903\u093A-\u093C\u093E-\u094F\u0951-\u0957\u0962\u0963\u0981-\u0983\u09BC\u09BE-\u09C4\u09C7\u09C8\u09CB-\u09CD\u09D7\u09E2\u09E3\u0A01-\u0A03\u0A3C\u0A3E-\u0A42\u0A47\u0A48\u0A4B-\u0A4D\u0A51\u0A70\u0A71\u0A75\u0A81-\u0A83\u0ABC\u0ABE-\u0AC5\u0AC7-\u0AC9\u0ACB-\u0ACD\u0AE2\u0AE3\u0B01-\u0B03\u0B3C\u0B3E-\u0B44\u0B47\u0B48\u0B4B-\u0B4D\u0B56\u0B57\u0B62\u0B63\u0B82\u0BBE-\u0BC2\u0BC6-\u0BC8\u0BCA-\u0BCD\u0BD7\u0C00-\u0C03\u0C3E-\u0C44\u0C46-\u0C48\u0C4A-\u0C4D\u0C55\u0C56\u0C62\u0C63\u0C81-\u0C83\u0CBC\u0CBE-\u0CC4\u0CC6-\u0CC8\u0CCA-\u0CCD\u0CD5\u0CD6\u0CE2\u0CE3\u0D01-\u0D03\u0D3E-\u0D44\u0D46-\u0D48\u0D4A-\u0D4D\u0D57\u0D62\u0D63\u0D82\u0D83\u0DCA\u0DCF-\u0DD4\u0DD6\u0DD8-\u0DDF\u0DF2\u0DF3\u0E31\u0E34-\u0E3A\u0E47-\u0E4E\u0EB1\u0EB4-\u0EB9\u0EBB\u0EBC\u0EC8-\u0ECD\u0F18\u0F19\u0F35\u0F37\u0F39\u0F3E\u0F3F\u0F71-\u0F84\u0F86\u0F87\u0F8D-\u0F97\u0F99-\u0FBC\u0FC6\u102B-\u103E\u1056-\u1059\u105E-\u1060\u1062-\u1064\u1067-\u106D\u1071-\u1074\u1082-\u108D\u108F\u109A-\u109D\u135D-\u135F\u1712-\u1714\u1732-\u1734\u1752\u1753\u1772\u1773\u17B4-\u17D3\u17DD\u180B-\u180D\u18A9\u1920-\u192B\u1930-\u193B\u1A17-\u1A1B\u1A55-\u1A5E\u1A60-\u1A7C\u1A7F\u1AB0-\u1ABE\u1B00-\u1B04\u1B34-\u1B44\u1B6B-\u1B73\u1B80-\u1B82\u1BA1-\u1BAD\u1BE6-\u1BF3\u1C24-\u1C37\u1CD0-\u1CD2\u1CD4-\u1CE8\u1CED\u1CF2-\u1CF4\u1CF8\u1CF9\u1DC0-\u1DF5\u1DFC-\u1DFF\u20D0-\u20F0\u2CEF-\u2CF1\u2D7F\u2DE0-\u2DFF\u302A-\u302F\u3099\u309A\uA66F-\uA672\uA674-\uA67D\uA69E\uA69F\uA6F0\uA6F1\uA802\uA806\uA80B\uA823-\uA827\uA880\uA881\uA8B4-\uA8C4\uA8E0-\uA8F1\uA926-\uA92D\uA947-\uA953\uA980-\uA983\uA9B3-\uA9C0\uA9E5\uAA29-\uAA36\uAA43\uAA4C\uAA4D\uAA7B-\uAA7D\uAAB0\uAAB2-\uAAB4\uAAB7\uAAB8\uAABE\uAABF\uAAC1\uAAEB-\uAAEF\uAAF5\uAAF6\uABE3-\uABEA\uABEC\uABED\uFB1E\uFE00-\uFE0F\uFE20-\uFE2F',
3680
- astral: '\uD805[\uDCB0-\uDCC3\uDDAF-\uDDB5\uDDB8-\uDDC0\uDDDC\uDDDD\uDE30-\uDE40\uDEAB-\uDEB7\uDF1D-\uDF2B]|\uD834[\uDD65-\uDD69\uDD6D-\uDD72\uDD7B-\uDD82\uDD85-\uDD8B\uDDAA-\uDDAD\uDE42-\uDE44]|\uD804[\uDC00-\uDC02\uDC38-\uDC46\uDC7F-\uDC82\uDCB0-\uDCBA\uDD00-\uDD02\uDD27-\uDD34\uDD73\uDD80-\uDD82\uDDB3-\uDDC0\uDDCA-\uDDCC\uDE2C-\uDE37\uDEDF-\uDEEA\uDF00-\uDF03\uDF3C\uDF3E-\uDF44\uDF47\uDF48\uDF4B-\uDF4D\uDF57\uDF62\uDF63\uDF66-\uDF6C\uDF70-\uDF74]|\uD81B[\uDF51-\uDF7E\uDF8F-\uDF92]|\uD81A[\uDEF0-\uDEF4\uDF30-\uDF36]|\uD82F[\uDC9D\uDC9E]|\uD800[\uDDFD\uDEE0\uDF76-\uDF7A]|\uD836[\uDE00-\uDE36\uDE3B-\uDE6C\uDE75\uDE84\uDE9B-\uDE9F\uDEA1-\uDEAF]|\uD802[\uDE01-\uDE03\uDE05\uDE06\uDE0C-\uDE0F\uDE38-\uDE3A\uDE3F\uDEE5\uDEE6]|\uD83A[\uDCD0-\uDCD6]|\uDB40[\uDD00-\uDDEF]'
3681
- },
3682
- {
3683
- name: 'Mc',
3684
- alias: 'Spacing_Mark',
3685
- bmp: '\u0903\u093B\u093E-\u0940\u0949-\u094C\u094E\u094F\u0982\u0983\u09BE-\u09C0\u09C7\u09C8\u09CB\u09CC\u09D7\u0A03\u0A3E-\u0A40\u0A83\u0ABE-\u0AC0\u0AC9\u0ACB\u0ACC\u0B02\u0B03\u0B3E\u0B40\u0B47\u0B48\u0B4B\u0B4C\u0B57\u0BBE\u0BBF\u0BC1\u0BC2\u0BC6-\u0BC8\u0BCA-\u0BCC\u0BD7\u0C01-\u0C03\u0C41-\u0C44\u0C82\u0C83\u0CBE\u0CC0-\u0CC4\u0CC7\u0CC8\u0CCA\u0CCB\u0CD5\u0CD6\u0D02\u0D03\u0D3E-\u0D40\u0D46-\u0D48\u0D4A-\u0D4C\u0D57\u0D82\u0D83\u0DCF-\u0DD1\u0DD8-\u0DDF\u0DF2\u0DF3\u0F3E\u0F3F\u0F7F\u102B\u102C\u1031\u1038\u103B\u103C\u1056\u1057\u1062-\u1064\u1067-\u106D\u1083\u1084\u1087-\u108C\u108F\u109A-\u109C\u17B6\u17BE-\u17C5\u17C7\u17C8\u1923-\u1926\u1929-\u192B\u1930\u1931\u1933-\u1938\u1A19\u1A1A\u1A55\u1A57\u1A61\u1A63\u1A64\u1A6D-\u1A72\u1B04\u1B35\u1B3B\u1B3D-\u1B41\u1B43\u1B44\u1B82\u1BA1\u1BA6\u1BA7\u1BAA\u1BE7\u1BEA-\u1BEC\u1BEE\u1BF2\u1BF3\u1C24-\u1C2B\u1C34\u1C35\u1CE1\u1CF2\u1CF3\u302E\u302F\uA823\uA824\uA827\uA880\uA881\uA8B4-\uA8C3\uA952\uA953\uA983\uA9B4\uA9B5\uA9BA\uA9BB\uA9BD-\uA9C0\uAA2F\uAA30\uAA33\uAA34\uAA4D\uAA7B\uAA7D\uAAEB\uAAEE\uAAEF\uAAF5\uABE3\uABE4\uABE6\uABE7\uABE9\uABEA\uABEC',
3686
- astral: '\uD834[\uDD65\uDD66\uDD6D-\uDD72]|\uD804[\uDC00\uDC02\uDC82\uDCB0-\uDCB2\uDCB7\uDCB8\uDD2C\uDD82\uDDB3-\uDDB5\uDDBF\uDDC0\uDE2C-\uDE2E\uDE32\uDE33\uDE35\uDEE0-\uDEE2\uDF02\uDF03\uDF3E\uDF3F\uDF41-\uDF44\uDF47\uDF48\uDF4B-\uDF4D\uDF57\uDF62\uDF63]|\uD805[\uDCB0-\uDCB2\uDCB9\uDCBB-\uDCBE\uDCC1\uDDAF-\uDDB1\uDDB8-\uDDBB\uDDBE\uDE30-\uDE32\uDE3B\uDE3C\uDE3E\uDEAC\uDEAE\uDEAF\uDEB6\uDF20\uDF21\uDF26]|\uD81B[\uDF51-\uDF7E]'
3687
- },
3688
- {
3689
- name: 'Me',
3690
- alias: 'Enclosing_Mark',
3691
- bmp: '\u0488\u0489\u1ABE\u20DD-\u20E0\u20E2-\u20E4\uA670-\uA672'
3692
- },
3693
- {
3694
- name: 'Mn',
3695
- alias: 'Nonspacing_Mark',
3696
- bmp: '\u0300-\u036F\u0483-\u0487\u0591-\u05BD\u05BF\u05C1\u05C2\u05C4\u05C5\u05C7\u0610-\u061A\u064B-\u065F\u0670\u06D6-\u06DC\u06DF-\u06E4\u06E7\u06E8\u06EA-\u06ED\u0711\u0730-\u074A\u07A6-\u07B0\u07EB-\u07F3\u0816-\u0819\u081B-\u0823\u0825-\u0827\u0829-\u082D\u0859-\u085B\u08E3-\u0902\u093A\u093C\u0941-\u0948\u094D\u0951-\u0957\u0962\u0963\u0981\u09BC\u09C1-\u09C4\u09CD\u09E2\u09E3\u0A01\u0A02\u0A3C\u0A41\u0A42\u0A47\u0A48\u0A4B-\u0A4D\u0A51\u0A70\u0A71\u0A75\u0A81\u0A82\u0ABC\u0AC1-\u0AC5\u0AC7\u0AC8\u0ACD\u0AE2\u0AE3\u0B01\u0B3C\u0B3F\u0B41-\u0B44\u0B4D\u0B56\u0B62\u0B63\u0B82\u0BC0\u0BCD\u0C00\u0C3E-\u0C40\u0C46-\u0C48\u0C4A-\u0C4D\u0C55\u0C56\u0C62\u0C63\u0C81\u0CBC\u0CBF\u0CC6\u0CCC\u0CCD\u0CE2\u0CE3\u0D01\u0D41-\u0D44\u0D4D\u0D62\u0D63\u0DCA\u0DD2-\u0DD4\u0DD6\u0E31\u0E34-\u0E3A\u0E47-\u0E4E\u0EB1\u0EB4-\u0EB9\u0EBB\u0EBC\u0EC8-\u0ECD\u0F18\u0F19\u0F35\u0F37\u0F39\u0F71-\u0F7E\u0F80-\u0F84\u0F86\u0F87\u0F8D-\u0F97\u0F99-\u0FBC\u0FC6\u102D-\u1030\u1032-\u1037\u1039\u103A\u103D\u103E\u1058\u1059\u105E-\u1060\u1071-\u1074\u1082\u1085\u1086\u108D\u109D\u135D-\u135F\u1712-\u1714\u1732-\u1734\u1752\u1753\u1772\u1773\u17B4\u17B5\u17B7-\u17BD\u17C6\u17C9-\u17D3\u17DD\u180B-\u180D\u18A9\u1920-\u1922\u1927\u1928\u1932\u1939-\u193B\u1A17\u1A18\u1A1B\u1A56\u1A58-\u1A5E\u1A60\u1A62\u1A65-\u1A6C\u1A73-\u1A7C\u1A7F\u1AB0-\u1ABD\u1B00-\u1B03\u1B34\u1B36-\u1B3A\u1B3C\u1B42\u1B6B-\u1B73\u1B80\u1B81\u1BA2-\u1BA5\u1BA8\u1BA9\u1BAB-\u1BAD\u1BE6\u1BE8\u1BE9\u1BED\u1BEF-\u1BF1\u1C2C-\u1C33\u1C36\u1C37\u1CD0-\u1CD2\u1CD4-\u1CE0\u1CE2-\u1CE8\u1CED\u1CF4\u1CF8\u1CF9\u1DC0-\u1DF5\u1DFC-\u1DFF\u20D0-\u20DC\u20E1\u20E5-\u20F0\u2CEF-\u2CF1\u2D7F\u2DE0-\u2DFF\u302A-\u302D\u3099\u309A\uA66F\uA674-\uA67D\uA69E\uA69F\uA6F0\uA6F1\uA802\uA806\uA80B\uA825\uA826\uA8C4\uA8E0-\uA8F1\uA926-\uA92D\uA947-\uA951\uA980-\uA982\uA9B3\uA9B6-\uA9B9\uA9BC\uA9E5\uAA29-\uAA2E\uAA31\uAA32\uAA35\uAA36\uAA43\uAA4C\uAA7C\uAAB0\uAAB2-\uAAB4\uAAB7\uAAB8\uAABE\uAABF\uAAC1\uAAEC\uAAED\uAAF6\uABE5\uABE8\uABED\uFB1E\uFE00-\uFE0F\uFE20-\uFE2F',
3697
- astral: '\uD805[\uDCB3-\uDCB8\uDCBA\uDCBF\uDCC0\uDCC2\uDCC3\uDDB2-\uDDB5\uDDBC\uDDBD\uDDBF\uDDC0\uDDDC\uDDDD\uDE33-\uDE3A\uDE3D\uDE3F\uDE40\uDEAB\uDEAD\uDEB0-\uDEB5\uDEB7\uDF1D-\uDF1F\uDF22-\uDF25\uDF27-\uDF2B]|\uD834[\uDD67-\uDD69\uDD7B-\uDD82\uDD85-\uDD8B\uDDAA-\uDDAD\uDE42-\uDE44]|\uD81A[\uDEF0-\uDEF4\uDF30-\uDF36]|\uD81B[\uDF8F-\uDF92]|\uD82F[\uDC9D\uDC9E]|\uD800[\uDDFD\uDEE0\uDF76-\uDF7A]|\uD836[\uDE00-\uDE36\uDE3B-\uDE6C\uDE75\uDE84\uDE9B-\uDE9F\uDEA1-\uDEAF]|\uD802[\uDE01-\uDE03\uDE05\uDE06\uDE0C-\uDE0F\uDE38-\uDE3A\uDE3F\uDEE5\uDEE6]|\uD804[\uDC01\uDC38-\uDC46\uDC7F-\uDC81\uDCB3-\uDCB6\uDCB9\uDCBA\uDD00-\uDD02\uDD27-\uDD2B\uDD2D-\uDD34\uDD73\uDD80\uDD81\uDDB6-\uDDBE\uDDCA-\uDDCC\uDE2F-\uDE31\uDE34\uDE36\uDE37\uDEDF\uDEE3-\uDEEA\uDF00\uDF01\uDF3C\uDF40\uDF66-\uDF6C\uDF70-\uDF74]|\uD83A[\uDCD0-\uDCD6]|\uDB40[\uDD00-\uDDEF]'
3698
- },
3699
- {
3700
- name: 'N',
3701
- alias: 'Number',
3702
- bmp: '0-9\xB2\xB3\xB9\xBC-\xBE\u0660-\u0669\u06F0-\u06F9\u07C0-\u07C9\u0966-\u096F\u09E6-\u09EF\u09F4-\u09F9\u0A66-\u0A6F\u0AE6-\u0AEF\u0B66-\u0B6F\u0B72-\u0B77\u0BE6-\u0BF2\u0C66-\u0C6F\u0C78-\u0C7E\u0CE6-\u0CEF\u0D66-\u0D75\u0DE6-\u0DEF\u0E50-\u0E59\u0ED0-\u0ED9\u0F20-\u0F33\u1040-\u1049\u1090-\u1099\u1369-\u137C\u16EE-\u16F0\u17E0-\u17E9\u17F0-\u17F9\u1810-\u1819\u1946-\u194F\u19D0-\u19DA\u1A80-\u1A89\u1A90-\u1A99\u1B50-\u1B59\u1BB0-\u1BB9\u1C40-\u1C49\u1C50-\u1C59\u2070\u2074-\u2079\u2080-\u2089\u2150-\u2182\u2185-\u2189\u2460-\u249B\u24EA-\u24FF\u2776-\u2793\u2CFD\u3007\u3021-\u3029\u3038-\u303A\u3192-\u3195\u3220-\u3229\u3248-\u324F\u3251-\u325F\u3280-\u3289\u32B1-\u32BF\uA620-\uA629\uA6E6-\uA6EF\uA830-\uA835\uA8D0-\uA8D9\uA900-\uA909\uA9D0-\uA9D9\uA9F0-\uA9F9\uAA50-\uAA59\uABF0-\uABF9\uFF10-\uFF19',
3703
- astral: '\uD800[\uDD07-\uDD33\uDD40-\uDD78\uDD8A\uDD8B\uDEE1-\uDEFB\uDF20-\uDF23\uDF41\uDF4A\uDFD1-\uDFD5]|\uD801[\uDCA0-\uDCA9]|\uD803[\uDCFA-\uDCFF\uDE60-\uDE7E]|\uD835[\uDFCE-\uDFFF]|\uD83A[\uDCC7-\uDCCF]|\uD81A[\uDE60-\uDE69\uDF50-\uDF59\uDF5B-\uDF61]|\uD806[\uDCE0-\uDCF2]|\uD804[\uDC52-\uDC6F\uDCF0-\uDCF9\uDD36-\uDD3F\uDDD0-\uDDD9\uDDE1-\uDDF4\uDEF0-\uDEF9]|\uD834[\uDF60-\uDF71]|\uD83C[\uDD00-\uDD0C]|\uD809[\uDC00-\uDC6E]|\uD802[\uDC58-\uDC5F\uDC79-\uDC7F\uDCA7-\uDCAF\uDCFB-\uDCFF\uDD16-\uDD1B\uDDBC\uDDBD\uDDC0-\uDDCF\uDDD2-\uDDFF\uDE40-\uDE47\uDE7D\uDE7E\uDE9D-\uDE9F\uDEEB-\uDEEF\uDF58-\uDF5F\uDF78-\uDF7F\uDFA9-\uDFAF]|\uD805[\uDCD0-\uDCD9\uDE50-\uDE59\uDEC0-\uDEC9\uDF30-\uDF3B]'
3704
- },
3705
- {
3706
- name: 'Nd',
3707
- alias: 'Decimal_Number',
3708
- bmp: '0-9\u0660-\u0669\u06F0-\u06F9\u07C0-\u07C9\u0966-\u096F\u09E6-\u09EF\u0A66-\u0A6F\u0AE6-\u0AEF\u0B66-\u0B6F\u0BE6-\u0BEF\u0C66-\u0C6F\u0CE6-\u0CEF\u0D66-\u0D6F\u0DE6-\u0DEF\u0E50-\u0E59\u0ED0-\u0ED9\u0F20-\u0F29\u1040-\u1049\u1090-\u1099\u17E0-\u17E9\u1810-\u1819\u1946-\u194F\u19D0-\u19D9\u1A80-\u1A89\u1A90-\u1A99\u1B50-\u1B59\u1BB0-\u1BB9\u1C40-\u1C49\u1C50-\u1C59\uA620-\uA629\uA8D0-\uA8D9\uA900-\uA909\uA9D0-\uA9D9\uA9F0-\uA9F9\uAA50-\uAA59\uABF0-\uABF9\uFF10-\uFF19',
3709
- astral: '\uD801[\uDCA0-\uDCA9]|\uD835[\uDFCE-\uDFFF]|\uD805[\uDCD0-\uDCD9\uDE50-\uDE59\uDEC0-\uDEC9\uDF30-\uDF39]|\uD806[\uDCE0-\uDCE9]|\uD804[\uDC66-\uDC6F\uDCF0-\uDCF9\uDD36-\uDD3F\uDDD0-\uDDD9\uDEF0-\uDEF9]|\uD81A[\uDE60-\uDE69\uDF50-\uDF59]'
3710
- },
3711
- {
3712
- name: 'Nl',
3713
- alias: 'Letter_Number',
3714
- bmp: '\u16EE-\u16F0\u2160-\u2182\u2185-\u2188\u3007\u3021-\u3029\u3038-\u303A\uA6E6-\uA6EF',
3715
- astral: '\uD809[\uDC00-\uDC6E]|\uD800[\uDD40-\uDD74\uDF41\uDF4A\uDFD1-\uDFD5]'
3716
- },
3717
- {
3718
- name: 'No',
3719
- alias: 'Other_Number',
3720
- bmp: '\xB2\xB3\xB9\xBC-\xBE\u09F4-\u09F9\u0B72-\u0B77\u0BF0-\u0BF2\u0C78-\u0C7E\u0D70-\u0D75\u0F2A-\u0F33\u1369-\u137C\u17F0-\u17F9\u19DA\u2070\u2074-\u2079\u2080-\u2089\u2150-\u215F\u2189\u2460-\u249B\u24EA-\u24FF\u2776-\u2793\u2CFD\u3192-\u3195\u3220-\u3229\u3248-\u324F\u3251-\u325F\u3280-\u3289\u32B1-\u32BF\uA830-\uA835',
3721
- astral: '\uD804[\uDC52-\uDC65\uDDE1-\uDDF4]|\uD803[\uDCFA-\uDCFF\uDE60-\uDE7E]|\uD83C[\uDD00-\uDD0C]|\uD806[\uDCEA-\uDCF2]|\uD83A[\uDCC7-\uDCCF]|\uD802[\uDC58-\uDC5F\uDC79-\uDC7F\uDCA7-\uDCAF\uDCFB-\uDCFF\uDD16-\uDD1B\uDDBC\uDDBD\uDDC0-\uDDCF\uDDD2-\uDDFF\uDE40-\uDE47\uDE7D\uDE7E\uDE9D-\uDE9F\uDEEB-\uDEEF\uDF58-\uDF5F\uDF78-\uDF7F\uDFA9-\uDFAF]|\uD805[\uDF3A\uDF3B]|\uD81A[\uDF5B-\uDF61]|\uD834[\uDF60-\uDF71]|\uD800[\uDD07-\uDD33\uDD75-\uDD78\uDD8A\uDD8B\uDEE1-\uDEFB\uDF20-\uDF23]'
3722
- },
3723
- {
3724
- name: 'P',
3725
- alias: 'Punctuation',
3726
- bmp: '\x21-\x23\x25-\\x2A\x2C-\x2F\x3A\x3B\\x3F\x40\\x5B-\\x5D\x5F\\x7B\x7D\xA1\xA7\xAB\xB6\xB7\xBB\xBF\u037E\u0387\u055A-\u055F\u0589\u058A\u05BE\u05C0\u05C3\u05C6\u05F3\u05F4\u0609\u060A\u060C\u060D\u061B\u061E\u061F\u066A-\u066D\u06D4\u0700-\u070D\u07F7-\u07F9\u0830-\u083E\u085E\u0964\u0965\u0970\u0AF0\u0DF4\u0E4F\u0E5A\u0E5B\u0F04-\u0F12\u0F14\u0F3A-\u0F3D\u0F85\u0FD0-\u0FD4\u0FD9\u0FDA\u104A-\u104F\u10FB\u1360-\u1368\u1400\u166D\u166E\u169B\u169C\u16EB-\u16ED\u1735\u1736\u17D4-\u17D6\u17D8-\u17DA\u1800-\u180A\u1944\u1945\u1A1E\u1A1F\u1AA0-\u1AA6\u1AA8-\u1AAD\u1B5A-\u1B60\u1BFC-\u1BFF\u1C3B-\u1C3F\u1C7E\u1C7F\u1CC0-\u1CC7\u1CD3\u2010-\u2027\u2030-\u2043\u2045-\u2051\u2053-\u205E\u207D\u207E\u208D\u208E\u2308-\u230B\u2329\u232A\u2768-\u2775\u27C5\u27C6\u27E6-\u27EF\u2983-\u2998\u29D8-\u29DB\u29FC\u29FD\u2CF9-\u2CFC\u2CFE\u2CFF\u2D70\u2E00-\u2E2E\u2E30-\u2E42\u3001-\u3003\u3008-\u3011\u3014-\u301F\u3030\u303D\u30A0\u30FB\uA4FE\uA4FF\uA60D-\uA60F\uA673\uA67E\uA6F2-\uA6F7\uA874-\uA877\uA8CE\uA8CF\uA8F8-\uA8FA\uA8FC\uA92E\uA92F\uA95F\uA9C1-\uA9CD\uA9DE\uA9DF\uAA5C-\uAA5F\uAADE\uAADF\uAAF0\uAAF1\uABEB\uFD3E\uFD3F\uFE10-\uFE19\uFE30-\uFE52\uFE54-\uFE61\uFE63\uFE68\uFE6A\uFE6B\uFF01-\uFF03\uFF05-\uFF0A\uFF0C-\uFF0F\uFF1A\uFF1B\uFF1F\uFF20\uFF3B-\uFF3D\uFF3F\uFF5B\uFF5D\uFF5F-\uFF65',
3727
- astral: '\uD802[\uDC57\uDD1F\uDD3F\uDE50-\uDE58\uDE7F\uDEF0-\uDEF6\uDF39-\uDF3F\uDF99-\uDF9C]|\uD809[\uDC70-\uDC74]|\uD805[\uDCC6\uDDC1-\uDDD7\uDE41-\uDE43\uDF3C-\uDF3E]|\uD836[\uDE87-\uDE8B]|\uD801\uDD6F|\uD82F\uDC9F|\uD804[\uDC47-\uDC4D\uDCBB\uDCBC\uDCBE-\uDCC1\uDD40-\uDD43\uDD74\uDD75\uDDC5-\uDDC9\uDDCD\uDDDB\uDDDD-\uDDDF\uDE38-\uDE3D\uDEA9]|\uD800[\uDD00-\uDD02\uDF9F\uDFD0]|\uD81A[\uDE6E\uDE6F\uDEF5\uDF37-\uDF3B\uDF44]'
3728
- },
3729
- {
3730
- name: 'Pc',
3731
- alias: 'Connector_Punctuation',
3732
- bmp: '\x5F\u203F\u2040\u2054\uFE33\uFE34\uFE4D-\uFE4F\uFF3F'
3733
- },
3734
- {
3735
- name: 'Pd',
3736
- alias: 'Dash_Punctuation',
3737
- bmp: '\\x2D\u058A\u05BE\u1400\u1806\u2010-\u2015\u2E17\u2E1A\u2E3A\u2E3B\u2E40\u301C\u3030\u30A0\uFE31\uFE32\uFE58\uFE63\uFF0D'
3738
- },
3739
- {
3740
- name: 'Pe',
3741
- alias: 'Close_Punctuation',
3742
- bmp: '\\x29\\x5D\x7D\u0F3B\u0F3D\u169C\u2046\u207E\u208E\u2309\u230B\u232A\u2769\u276B\u276D\u276F\u2771\u2773\u2775\u27C6\u27E7\u27E9\u27EB\u27ED\u27EF\u2984\u2986\u2988\u298A\u298C\u298E\u2990\u2992\u2994\u2996\u2998\u29D9\u29DB\u29FD\u2E23\u2E25\u2E27\u2E29\u3009\u300B\u300D\u300F\u3011\u3015\u3017\u3019\u301B\u301E\u301F\uFD3E\uFE18\uFE36\uFE38\uFE3A\uFE3C\uFE3E\uFE40\uFE42\uFE44\uFE48\uFE5A\uFE5C\uFE5E\uFF09\uFF3D\uFF5D\uFF60\uFF63'
3743
- },
3744
- {
3745
- name: 'Pf',
3746
- alias: 'Final_Punctuation',
3747
- bmp: '\xBB\u2019\u201D\u203A\u2E03\u2E05\u2E0A\u2E0D\u2E1D\u2E21'
3748
- },
3749
- {
3750
- name: 'Pi',
3751
- alias: 'Initial_Punctuation',
3752
- bmp: '\xAB\u2018\u201B\u201C\u201F\u2039\u2E02\u2E04\u2E09\u2E0C\u2E1C\u2E20'
3753
- },
3754
- {
3755
- name: 'Po',
3756
- alias: 'Other_Punctuation',
3757
- bmp: '\x21-\x23\x25-\x27\\x2A\x2C\\x2E\x2F\x3A\x3B\\x3F\x40\\x5C\xA1\xA7\xB6\xB7\xBF\u037E\u0387\u055A-\u055F\u0589\u05C0\u05C3\u05C6\u05F3\u05F4\u0609\u060A\u060C\u060D\u061B\u061E\u061F\u066A-\u066D\u06D4\u0700-\u070D\u07F7-\u07F9\u0830-\u083E\u085E\u0964\u0965\u0970\u0AF0\u0DF4\u0E4F\u0E5A\u0E5B\u0F04-\u0F12\u0F14\u0F85\u0FD0-\u0FD4\u0FD9\u0FDA\u104A-\u104F\u10FB\u1360-\u1368\u166D\u166E\u16EB-\u16ED\u1735\u1736\u17D4-\u17D6\u17D8-\u17DA\u1800-\u1805\u1807-\u180A\u1944\u1945\u1A1E\u1A1F\u1AA0-\u1AA6\u1AA8-\u1AAD\u1B5A-\u1B60\u1BFC-\u1BFF\u1C3B-\u1C3F\u1C7E\u1C7F\u1CC0-\u1CC7\u1CD3\u2016\u2017\u2020-\u2027\u2030-\u2038\u203B-\u203E\u2041-\u2043\u2047-\u2051\u2053\u2055-\u205E\u2CF9-\u2CFC\u2CFE\u2CFF\u2D70\u2E00\u2E01\u2E06-\u2E08\u2E0B\u2E0E-\u2E16\u2E18\u2E19\u2E1B\u2E1E\u2E1F\u2E2A-\u2E2E\u2E30-\u2E39\u2E3C-\u2E3F\u2E41\u3001-\u3003\u303D\u30FB\uA4FE\uA4FF\uA60D-\uA60F\uA673\uA67E\uA6F2-\uA6F7\uA874-\uA877\uA8CE\uA8CF\uA8F8-\uA8FA\uA8FC\uA92E\uA92F\uA95F\uA9C1-\uA9CD\uA9DE\uA9DF\uAA5C-\uAA5F\uAADE\uAADF\uAAF0\uAAF1\uABEB\uFE10-\uFE16\uFE19\uFE30\uFE45\uFE46\uFE49-\uFE4C\uFE50-\uFE52\uFE54-\uFE57\uFE5F-\uFE61\uFE68\uFE6A\uFE6B\uFF01-\uFF03\uFF05-\uFF07\uFF0A\uFF0C\uFF0E\uFF0F\uFF1A\uFF1B\uFF1F\uFF20\uFF3C\uFF61\uFF64\uFF65',
3758
- astral: '\uD802[\uDC57\uDD1F\uDD3F\uDE50-\uDE58\uDE7F\uDEF0-\uDEF6\uDF39-\uDF3F\uDF99-\uDF9C]|\uD809[\uDC70-\uDC74]|\uD805[\uDCC6\uDDC1-\uDDD7\uDE41-\uDE43\uDF3C-\uDF3E]|\uD836[\uDE87-\uDE8B]|\uD801\uDD6F|\uD82F\uDC9F|\uD804[\uDC47-\uDC4D\uDCBB\uDCBC\uDCBE-\uDCC1\uDD40-\uDD43\uDD74\uDD75\uDDC5-\uDDC9\uDDCD\uDDDB\uDDDD-\uDDDF\uDE38-\uDE3D\uDEA9]|\uD800[\uDD00-\uDD02\uDF9F\uDFD0]|\uD81A[\uDE6E\uDE6F\uDEF5\uDF37-\uDF3B\uDF44]'
3759
- },
3760
- {
3761
- name: 'Ps',
3762
- alias: 'Open_Punctuation',
3763
- bmp: '\\x28\\x5B\\x7B\u0F3A\u0F3C\u169B\u201A\u201E\u2045\u207D\u208D\u2308\u230A\u2329\u2768\u276A\u276C\u276E\u2770\u2772\u2774\u27C5\u27E6\u27E8\u27EA\u27EC\u27EE\u2983\u2985\u2987\u2989\u298B\u298D\u298F\u2991\u2993\u2995\u2997\u29D8\u29DA\u29FC\u2E22\u2E24\u2E26\u2E28\u2E42\u3008\u300A\u300C\u300E\u3010\u3014\u3016\u3018\u301A\u301D\uFD3F\uFE17\uFE35\uFE37\uFE39\uFE3B\uFE3D\uFE3F\uFE41\uFE43\uFE47\uFE59\uFE5B\uFE5D\uFF08\uFF3B\uFF5B\uFF5F\uFF62'
3764
- },
3765
- {
3766
- name: 'S',
3767
- alias: 'Symbol',
3768
- bmp: '\\x24\\x2B\x3C-\x3E\\x5E\x60\\x7C\x7E\xA2-\xA6\xA8\xA9\xAC\xAE-\xB1\xB4\xB8\xD7\xF7\u02C2-\u02C5\u02D2-\u02DF\u02E5-\u02EB\u02ED\u02EF-\u02FF\u0375\u0384\u0385\u03F6\u0482\u058D-\u058F\u0606-\u0608\u060B\u060E\u060F\u06DE\u06E9\u06FD\u06FE\u07F6\u09F2\u09F3\u09FA\u09FB\u0AF1\u0B70\u0BF3-\u0BFA\u0C7F\u0D79\u0E3F\u0F01-\u0F03\u0F13\u0F15-\u0F17\u0F1A-\u0F1F\u0F34\u0F36\u0F38\u0FBE-\u0FC5\u0FC7-\u0FCC\u0FCE\u0FCF\u0FD5-\u0FD8\u109E\u109F\u1390-\u1399\u17DB\u1940\u19DE-\u19FF\u1B61-\u1B6A\u1B74-\u1B7C\u1FBD\u1FBF-\u1FC1\u1FCD-\u1FCF\u1FDD-\u1FDF\u1FED-\u1FEF\u1FFD\u1FFE\u2044\u2052\u207A-\u207C\u208A-\u208C\u20A0-\u20BE\u2100\u2101\u2103-\u2106\u2108\u2109\u2114\u2116-\u2118\u211E-\u2123\u2125\u2127\u2129\u212E\u213A\u213B\u2140-\u2144\u214A-\u214D\u214F\u218A\u218B\u2190-\u2307\u230C-\u2328\u232B-\u23FA\u2400-\u2426\u2440-\u244A\u249C-\u24E9\u2500-\u2767\u2794-\u27C4\u27C7-\u27E5\u27F0-\u2982\u2999-\u29D7\u29DC-\u29FB\u29FE-\u2B73\u2B76-\u2B95\u2B98-\u2BB9\u2BBD-\u2BC8\u2BCA-\u2BD1\u2BEC-\u2BEF\u2CE5-\u2CEA\u2E80-\u2E99\u2E9B-\u2EF3\u2F00-\u2FD5\u2FF0-\u2FFB\u3004\u3012\u3013\u3020\u3036\u3037\u303E\u303F\u309B\u309C\u3190\u3191\u3196-\u319F\u31C0-\u31E3\u3200-\u321E\u322A-\u3247\u3250\u3260-\u327F\u328A-\u32B0\u32C0-\u32FE\u3300-\u33FF\u4DC0-\u4DFF\uA490-\uA4C6\uA700-\uA716\uA720\uA721\uA789\uA78A\uA828-\uA82B\uA836-\uA839\uAA77-\uAA79\uAB5B\uFB29\uFBB2-\uFBC1\uFDFC\uFDFD\uFE62\uFE64-\uFE66\uFE69\uFF04\uFF0B\uFF1C-\uFF1E\uFF3E\uFF40\uFF5C\uFF5E\uFFE0-\uFFE6\uFFE8-\uFFEE\uFFFC\uFFFD',
3769
- astral: '\uD83E[\uDC00-\uDC0B\uDC10-\uDC47\uDC50-\uDC59\uDC60-\uDC87\uDC90-\uDCAD\uDD10-\uDD18\uDD80-\uDD84\uDDC0]|\uD83C[\uDC00-\uDC2B\uDC30-\uDC93\uDCA0-\uDCAE\uDCB1-\uDCBF\uDCC1-\uDCCF\uDCD1-\uDCF5\uDD10-\uDD2E\uDD30-\uDD6B\uDD70-\uDD9A\uDDE6-\uDE02\uDE10-\uDE3A\uDE40-\uDE48\uDE50\uDE51\uDF00-\uDFFF]|\uD83D[\uDC00-\uDD79\uDD7B-\uDDA3\uDDA5-\uDED0\uDEE0-\uDEEC\uDEF0-\uDEF3\uDF00-\uDF73\uDF80-\uDFD4]|\uD835[\uDEC1\uDEDB\uDEFB\uDF15\uDF35\uDF4F\uDF6F\uDF89\uDFA9\uDFC3]|\uD800[\uDD37-\uDD3F\uDD79-\uDD89\uDD8C\uDD90-\uDD9B\uDDA0\uDDD0-\uDDFC]|\uD82F\uDC9C|\uD805\uDF3F|\uD802[\uDC77\uDC78\uDEC8]|\uD81A[\uDF3C-\uDF3F\uDF45]|\uD836[\uDC00-\uDDFF\uDE37-\uDE3A\uDE6D-\uDE74\uDE76-\uDE83\uDE85\uDE86]|\uD834[\uDC00-\uDCF5\uDD00-\uDD26\uDD29-\uDD64\uDD6A-\uDD6C\uDD83\uDD84\uDD8C-\uDDA9\uDDAE-\uDDE8\uDE00-\uDE41\uDE45\uDF00-\uDF56]|\uD83B[\uDEF0\uDEF1]'
3770
- },
3771
- {
3772
- name: 'Sc',
3773
- alias: 'Currency_Symbol',
3774
- bmp: '\\x24\xA2-\xA5\u058F\u060B\u09F2\u09F3\u09FB\u0AF1\u0BF9\u0E3F\u17DB\u20A0-\u20BE\uA838\uFDFC\uFE69\uFF04\uFFE0\uFFE1\uFFE5\uFFE6'
3775
- },
3776
- {
3777
- name: 'Sk',
3778
- alias: 'Modifier_Symbol',
3779
- bmp: '\\x5E\x60\xA8\xAF\xB4\xB8\u02C2-\u02C5\u02D2-\u02DF\u02E5-\u02EB\u02ED\u02EF-\u02FF\u0375\u0384\u0385\u1FBD\u1FBF-\u1FC1\u1FCD-\u1FCF\u1FDD-\u1FDF\u1FED-\u1FEF\u1FFD\u1FFE\u309B\u309C\uA700-\uA716\uA720\uA721\uA789\uA78A\uAB5B\uFBB2-\uFBC1\uFF3E\uFF40\uFFE3',
3780
- astral: '\uD83C[\uDFFB-\uDFFF]'
3781
- },
3782
- {
3783
- name: 'Sm',
3784
- alias: 'Math_Symbol',
3785
- bmp: '\\x2B\x3C-\x3E\\x7C\x7E\xAC\xB1\xD7\xF7\u03F6\u0606-\u0608\u2044\u2052\u207A-\u207C\u208A-\u208C\u2118\u2140-\u2144\u214B\u2190-\u2194\u219A\u219B\u21A0\u21A3\u21A6\u21AE\u21CE\u21CF\u21D2\u21D4\u21F4-\u22FF\u2320\u2321\u237C\u239B-\u23B3\u23DC-\u23E1\u25B7\u25C1\u25F8-\u25FF\u266F\u27C0-\u27C4\u27C7-\u27E5\u27F0-\u27FF\u2900-\u2982\u2999-\u29D7\u29DC-\u29FB\u29FE-\u2AFF\u2B30-\u2B44\u2B47-\u2B4C\uFB29\uFE62\uFE64-\uFE66\uFF0B\uFF1C-\uFF1E\uFF5C\uFF5E\uFFE2\uFFE9-\uFFEC',
3786
- astral: '\uD83B[\uDEF0\uDEF1]|\uD835[\uDEC1\uDEDB\uDEFB\uDF15\uDF35\uDF4F\uDF6F\uDF89\uDFA9\uDFC3]'
3787
- },
3788
- {
3789
- name: 'So',
3790
- alias: 'Other_Symbol',
3791
- bmp: '\xA6\xA9\xAE\xB0\u0482\u058D\u058E\u060E\u060F\u06DE\u06E9\u06FD\u06FE\u07F6\u09FA\u0B70\u0BF3-\u0BF8\u0BFA\u0C7F\u0D79\u0F01-\u0F03\u0F13\u0F15-\u0F17\u0F1A-\u0F1F\u0F34\u0F36\u0F38\u0FBE-\u0FC5\u0FC7-\u0FCC\u0FCE\u0FCF\u0FD5-\u0FD8\u109E\u109F\u1390-\u1399\u1940\u19DE-\u19FF\u1B61-\u1B6A\u1B74-\u1B7C\u2100\u2101\u2103-\u2106\u2108\u2109\u2114\u2116\u2117\u211E-\u2123\u2125\u2127\u2129\u212E\u213A\u213B\u214A\u214C\u214D\u214F\u218A\u218B\u2195-\u2199\u219C-\u219F\u21A1\u21A2\u21A4\u21A5\u21A7-\u21AD\u21AF-\u21CD\u21D0\u21D1\u21D3\u21D5-\u21F3\u2300-\u2307\u230C-\u231F\u2322-\u2328\u232B-\u237B\u237D-\u239A\u23B4-\u23DB\u23E2-\u23FA\u2400-\u2426\u2440-\u244A\u249C-\u24E9\u2500-\u25B6\u25B8-\u25C0\u25C2-\u25F7\u2600-\u266E\u2670-\u2767\u2794-\u27BF\u2800-\u28FF\u2B00-\u2B2F\u2B45\u2B46\u2B4D-\u2B73\u2B76-\u2B95\u2B98-\u2BB9\u2BBD-\u2BC8\u2BCA-\u2BD1\u2BEC-\u2BEF\u2CE5-\u2CEA\u2E80-\u2E99\u2E9B-\u2EF3\u2F00-\u2FD5\u2FF0-\u2FFB\u3004\u3012\u3013\u3020\u3036\u3037\u303E\u303F\u3190\u3191\u3196-\u319F\u31C0-\u31E3\u3200-\u321E\u322A-\u3247\u3250\u3260-\u327F\u328A-\u32B0\u32C0-\u32FE\u3300-\u33FF\u4DC0-\u4DFF\uA490-\uA4C6\uA828-\uA82B\uA836\uA837\uA839\uAA77-\uAA79\uFDFD\uFFE4\uFFE8\uFFED\uFFEE\uFFFC\uFFFD',
3792
- astral: '\uD83E[\uDC00-\uDC0B\uDC10-\uDC47\uDC50-\uDC59\uDC60-\uDC87\uDC90-\uDCAD\uDD10-\uDD18\uDD80-\uDD84\uDDC0]|\uD83D[\uDC00-\uDD79\uDD7B-\uDDA3\uDDA5-\uDED0\uDEE0-\uDEEC\uDEF0-\uDEF3\uDF00-\uDF73\uDF80-\uDFD4]|\uD83C[\uDC00-\uDC2B\uDC30-\uDC93\uDCA0-\uDCAE\uDCB1-\uDCBF\uDCC1-\uDCCF\uDCD1-\uDCF5\uDD10-\uDD2E\uDD30-\uDD6B\uDD70-\uDD9A\uDDE6-\uDE02\uDE10-\uDE3A\uDE40-\uDE48\uDE50\uDE51\uDF00-\uDFFA]|\uD800[\uDD37-\uDD3F\uDD79-\uDD89\uDD8C\uDD90-\uDD9B\uDDA0\uDDD0-\uDDFC]|\uD82F\uDC9C|\uD805\uDF3F|\uD802[\uDC77\uDC78\uDEC8]|\uD81A[\uDF3C-\uDF3F\uDF45]|\uD836[\uDC00-\uDDFF\uDE37-\uDE3A\uDE6D-\uDE74\uDE76-\uDE83\uDE85\uDE86]|\uD834[\uDC00-\uDCF5\uDD00-\uDD26\uDD29-\uDD64\uDD6A-\uDD6C\uDD83\uDD84\uDD8C-\uDDA9\uDDAE-\uDDE8\uDE00-\uDE41\uDE45\uDF00-\uDF56]'
3793
- },
3794
- {
3795
- name: 'Z',
3796
- alias: 'Separator',
3797
- bmp: '\x20\xA0\u1680\u2000-\u200A\u2028\u2029\u202F\u205F\u3000'
3798
- },
3799
- {
3800
- name: 'Zl',
3801
- alias: 'Line_Separator',
3802
- bmp: '\u2028'
3803
- },
3804
- {
3805
- name: 'Zp',
3806
- alias: 'Paragraph_Separator',
3807
- bmp: '\u2029'
3808
- },
3809
- {
3810
- name: 'Zs',
3811
- alias: 'Space_Separator',
3812
- bmp: '\x20\xA0\u1680\u2000-\u200A\u202F\u205F\u3000'
3813
- }
3814
- ]);
3815
-
3816
- }(XRegExp));
3817
-
3818
- /*!
3819
- * XRegExp Unicode Properties 3.0.0
3820
- * <http://xregexp.com/>
3821
- * Steven Levithan (c) 2012-2015 MIT License
3822
- * Unicode data provided by Mathias Bynens <http://mathiasbynens.be/>
3823
- */
3824
-
3825
- /**
3826
- * Adds properties to meet the UTS #18 Level 1 RL1.2 requirements for Unicode regex support. See
3827
- * <http://unicode.org/reports/tr18/#RL1.2>. Following are definitions of these properties from UAX
3828
- * #44 <http://unicode.org/reports/tr44/>:
3829
- *
3830
- * - Alphabetic
3831
- * Characters with the Alphabetic property. Generated from: Lowercase + Uppercase + Lt + Lm + Lo +
3832
- * Nl + Other_Alphabetic.
3833
- *
3834
- * - Default_Ignorable_Code_Point
3835
- * For programmatic determination of default ignorable code points. New characters that should be
3836
- * ignored in rendering (unless explicitly supported) will be assigned in these ranges, permitting
3837
- * programs to correctly handle the default rendering of such characters when not otherwise
3838
- * supported.
3839
- *
3840
- * - Lowercase
3841
- * Characters with the Lowercase property. Generated from: Ll + Other_Lowercase.
3842
- *
3843
- * - Noncharacter_Code_Point
3844
- * Code points permanently reserved for internal use.
3845
- *
3846
- * - Uppercase
3847
- * Characters with the Uppercase property. Generated from: Lu + Other_Uppercase.
3848
- *
3849
- * - White_Space
3850
- * Spaces, separator characters and other control characters which should be treated by
3851
- * programming languages as "white space" for the purpose of parsing elements.
3852
- *
3853
- * The properties ASCII, Any, and Assigned are also included but are not defined in UAX #44. UTS #18
3854
- * RL1.2 additionally requires support for Unicode scripts and general categories. These are
3855
- * included in XRegExp's Unicode Categories and Unicode Scripts addons.
3856
- *
3857
- * Token names are case insensitive, and any spaces, hyphens, and underscores are ignored.
3858
- *
3859
- * Uses Unicode 8.0.0.
3860
- *
3861
- * @requires XRegExp, Unicode Base
3862
- */
3863
- (function(XRegExp) {
3864
- 'use strict';
3865
-
3866
- if (!XRegExp.addUnicodeData) {
3867
- throw new ReferenceError('Unicode Base must be loaded before Unicode Properties');
3868
- }
3869
-
3870
- var unicodeData = [
3871
- {
3872
- name: 'ASCII',
3873
- bmp: '\0-\x7F'
3874
- },
3875
- {
3876
- name: 'Alphabetic',
3877
- bmp: 'A-Za-z\xAA\xB5\xBA\xC0-\xD6\xD8-\xF6\xF8-\u02C1\u02C6-\u02D1\u02E0-\u02E4\u02EC\u02EE\u0345\u0370-\u0374\u0376\u0377\u037A-\u037D\u037F\u0386\u0388-\u038A\u038C\u038E-\u03A1\u03A3-\u03F5\u03F7-\u0481\u048A-\u052F\u0531-\u0556\u0559\u0561-\u0587\u05B0-\u05BD\u05BF\u05C1\u05C2\u05C4\u05C5\u05C7\u05D0-\u05EA\u05F0-\u05F2\u0610-\u061A\u0620-\u0657\u0659-\u065F\u066E-\u06D3\u06D5-\u06DC\u06E1-\u06E8\u06ED-\u06EF\u06FA-\u06FC\u06FF\u0710-\u073F\u074D-\u07B1\u07CA-\u07EA\u07F4\u07F5\u07FA\u0800-\u0817\u081A-\u082C\u0840-\u0858\u08A0-\u08B4\u08E3-\u08E9\u08F0-\u093B\u093D-\u094C\u094E-\u0950\u0955-\u0963\u0971-\u0983\u0985-\u098C\u098F\u0990\u0993-\u09A8\u09AA-\u09B0\u09B2\u09B6-\u09B9\u09BD-\u09C4\u09C7\u09C8\u09CB\u09CC\u09CE\u09D7\u09DC\u09DD\u09DF-\u09E3\u09F0\u09F1\u0A01-\u0A03\u0A05-\u0A0A\u0A0F\u0A10\u0A13-\u0A28\u0A2A-\u0A30\u0A32\u0A33\u0A35\u0A36\u0A38\u0A39\u0A3E-\u0A42\u0A47\u0A48\u0A4B\u0A4C\u0A51\u0A59-\u0A5C\u0A5E\u0A70-\u0A75\u0A81-\u0A83\u0A85-\u0A8D\u0A8F-\u0A91\u0A93-\u0AA8\u0AAA-\u0AB0\u0AB2\u0AB3\u0AB5-\u0AB9\u0ABD-\u0AC5\u0AC7-\u0AC9\u0ACB\u0ACC\u0AD0\u0AE0-\u0AE3\u0AF9\u0B01-\u0B03\u0B05-\u0B0C\u0B0F\u0B10\u0B13-\u0B28\u0B2A-\u0B30\u0B32\u0B33\u0B35-\u0B39\u0B3D-\u0B44\u0B47\u0B48\u0B4B\u0B4C\u0B56\u0B57\u0B5C\u0B5D\u0B5F-\u0B63\u0B71\u0B82\u0B83\u0B85-\u0B8A\u0B8E-\u0B90\u0B92-\u0B95\u0B99\u0B9A\u0B9C\u0B9E\u0B9F\u0BA3\u0BA4\u0BA8-\u0BAA\u0BAE-\u0BB9\u0BBE-\u0BC2\u0BC6-\u0BC8\u0BCA-\u0BCC\u0BD0\u0BD7\u0C00-\u0C03\u0C05-\u0C0C\u0C0E-\u0C10\u0C12-\u0C28\u0C2A-\u0C39\u0C3D-\u0C44\u0C46-\u0C48\u0C4A-\u0C4C\u0C55\u0C56\u0C58-\u0C5A\u0C60-\u0C63\u0C81-\u0C83\u0C85-\u0C8C\u0C8E-\u0C90\u0C92-\u0CA8\u0CAA-\u0CB3\u0CB5-\u0CB9\u0CBD-\u0CC4\u0CC6-\u0CC8\u0CCA-\u0CCC\u0CD5\u0CD6\u0CDE\u0CE0-\u0CE3\u0CF1\u0CF2\u0D01-\u0D03\u0D05-\u0D0C\u0D0E-\u0D10\u0D12-\u0D3A\u0D3D-\u0D44\u0D46-\u0D48\u0D4A-\u0D4C\u0D4E\u0D57\u0D5F-\u0D63\u0D7A-\u0D7F\u0D82\u0D83\u0D85-\u0D96\u0D9A-\u0DB1\u0DB3-\u0DBB\u0DBD\u0DC0-\u0DC6\u0DCF-\u0DD4\u0DD6\u0DD8-\u0DDF\u0DF2\u0DF3\u0E01-\u0E3A\u0E40-\u0E46\u0E4D\u0E81\u0E82\u0E84\u0E87\u0E88\u0E8A\u0E8D\u0E94-\u0E97\u0E99-\u0E9F\u0EA1-\u0EA3\u0EA5\u0EA7\u0EAA\u0EAB\u0EAD-\u0EB9\u0EBB-\u0EBD\u0EC0-\u0EC4\u0EC6\u0ECD\u0EDC-\u0EDF\u0F00\u0F40-\u0F47\u0F49-\u0F6C\u0F71-\u0F81\u0F88-\u0F97\u0F99-\u0FBC\u1000-\u1036\u1038\u103B-\u103F\u1050-\u1062\u1065-\u1068\u106E-\u1086\u108E\u109C\u109D\u10A0-\u10C5\u10C7\u10CD\u10D0-\u10FA\u10FC-\u1248\u124A-\u124D\u1250-\u1256\u1258\u125A-\u125D\u1260-\u1288\u128A-\u128D\u1290-\u12B0\u12B2-\u12B5\u12B8-\u12BE\u12C0\u12C2-\u12C5\u12C8-\u12D6\u12D8-\u1310\u1312-\u1315\u1318-\u135A\u135F\u1380-\u138F\u13A0-\u13F5\u13F8-\u13FD\u1401-\u166C\u166F-\u167F\u1681-\u169A\u16A0-\u16EA\u16EE-\u16F8\u1700-\u170C\u170E-\u1713\u1720-\u1733\u1740-\u1753\u1760-\u176C\u176E-\u1770\u1772\u1773\u1780-\u17B3\u17B6-\u17C8\u17D7\u17DC\u1820-\u1877\u1880-\u18AA\u18B0-\u18F5\u1900-\u191E\u1920-\u192B\u1930-\u1938\u1950-\u196D\u1970-\u1974\u1980-\u19AB\u19B0-\u19C9\u1A00-\u1A1B\u1A20-\u1A5E\u1A61-\u1A74\u1AA7\u1B00-\u1B33\u1B35-\u1B43\u1B45-\u1B4B\u1B80-\u1BA9\u1BAC-\u1BAF\u1BBA-\u1BE5\u1BE7-\u1BF1\u1C00-\u1C35\u1C4D-\u1C4F\u1C5A-\u1C7D\u1CE9-\u1CEC\u1CEE-\u1CF3\u1CF5\u1CF6\u1D00-\u1DBF\u1DE7-\u1DF4\u1E00-\u1F15\u1F18-\u1F1D\u1F20-\u1F45\u1F48-\u1F4D\u1F50-\u1F57\u1F59\u1F5B\u1F5D\u1F5F-\u1F7D\u1F80-\u1FB4\u1FB6-\u1FBC\u1FBE\u1FC2-\u1FC4\u1FC6-\u1FCC\u1FD0-\u1FD3\u1FD6-\u1FDB\u1FE0-\u1FEC\u1FF2-\u1FF4\u1FF6-\u1FFC\u2071\u207F\u2090-\u209C\u2102\u2107\u210A-\u2113\u2115\u2119-\u211D\u2124\u2126\u2128\u212A-\u212D\u212F-\u2139\u213C-\u213F\u2145-\u2149\u214E\u2160-\u2188\u24B6-\u24E9\u2C00-\u2C2E\u2C30-\u2C5E\u2C60-\u2CE4\u2CEB-\u2CEE\u2CF2\u2CF3\u2D00-\u2D25\u2D27\u2D2D\u2D30-\u2D67\u2D6F\u2D80-\u2D96\u2DA0-\u2DA6\u2DA8-\u2DAE\u2DB0-\u2DB6\u2DB8-\u2DBE\u2DC0-\u2DC6\u2DC8-\u2DCE\u2DD0-\u2DD6\u2DD8-\u2DDE\u2DE0-\u2DFF\u2E2F\u3005-\u3007\u3021-\u3029\u3031-\u3035\u3038-\u303C\u3041-\u3096\u309D-\u309F\u30A1-\u30FA\u30FC-\u30FF\u3105-\u312D\u3131-\u318E\u31A0-\u31BA\u31F0-\u31FF\u3400-\u4DB5\u4E00-\u9FD5\uA000-\uA48C\uA4D0-\uA4FD\uA500-\uA60C\uA610-\uA61F\uA62A\uA62B\uA640-\uA66E\uA674-\uA67B\uA67F-\uA6EF\uA717-\uA71F\uA722-\uA788\uA78B-\uA7AD\uA7B0-\uA7B7\uA7F7-\uA801\uA803-\uA805\uA807-\uA80A\uA80C-\uA827\uA840-\uA873\uA880-\uA8C3\uA8F2-\uA8F7\uA8FB\uA8FD\uA90A-\uA92A\uA930-\uA952\uA960-\uA97C\uA980-\uA9B2\uA9B4-\uA9BF\uA9CF\uA9E0-\uA9E4\uA9E6-\uA9EF\uA9FA-\uA9FE\uAA00-\uAA36\uAA40-\uAA4D\uAA60-\uAA76\uAA7A\uAA7E-\uAABE\uAAC0\uAAC2\uAADB-\uAADD\uAAE0-\uAAEF\uAAF2-\uAAF5\uAB01-\uAB06\uAB09-\uAB0E\uAB11-\uAB16\uAB20-\uAB26\uAB28-\uAB2E\uAB30-\uAB5A\uAB5C-\uAB65\uAB70-\uABEA\uAC00-\uD7A3\uD7B0-\uD7C6\uD7CB-\uD7FB\uF900-\uFA6D\uFA70-\uFAD9\uFB00-\uFB06\uFB13-\uFB17\uFB1D-\uFB28\uFB2A-\uFB36\uFB38-\uFB3C\uFB3E\uFB40\uFB41\uFB43\uFB44\uFB46-\uFBB1\uFBD3-\uFD3D\uFD50-\uFD8F\uFD92-\uFDC7\uFDF0-\uFDFB\uFE70-\uFE74\uFE76-\uFEFC\uFF21-\uFF3A\uFF41-\uFF5A\uFF66-\uFFBE\uFFC2-\uFFC7\uFFCA-\uFFCF\uFFD2-\uFFD7\uFFDA-\uFFDC',
3878
- astral: '\uD86E[\uDC00-\uDC1D\uDC20-\uDFFF]|\uD804[\uDC00-\uDC45\uDC82-\uDCB8\uDCD0-\uDCE8\uDD00-\uDD32\uDD50-\uDD72\uDD76\uDD80-\uDDBF\uDDC1-\uDDC4\uDDDA\uDDDC\uDE00-\uDE11\uDE13-\uDE34\uDE37\uDE80-\uDE86\uDE88\uDE8A-\uDE8D\uDE8F-\uDE9D\uDE9F-\uDEA8\uDEB0-\uDEE8\uDF00-\uDF03\uDF05-\uDF0C\uDF0F\uDF10\uDF13-\uDF28\uDF2A-\uDF30\uDF32\uDF33\uDF35-\uDF39\uDF3D-\uDF44\uDF47\uDF48\uDF4B\uDF4C\uDF50\uDF57\uDF5D-\uDF63]|\uD86D[\uDC00-\uDF34\uDF40-\uDFFF]|\uD869[\uDC00-\uDED6\uDF00-\uDFFF]|\uD803[\uDC00-\uDC48\uDC80-\uDCB2\uDCC0-\uDCF2]|\uD83A[\uDC00-\uDCC4]|\uD81A[\uDC00-\uDE38\uDE40-\uDE5E\uDED0-\uDEED\uDF00-\uDF36\uDF40-\uDF43\uDF63-\uDF77\uDF7D-\uDF8F]|\uD801[\uDC00-\uDC9D\uDD00-\uDD27\uDD30-\uDD63\uDE00-\uDF36\uDF40-\uDF55\uDF60-\uDF67]|\uD83C[\uDD30-\uDD49\uDD50-\uDD69\uDD70-\uDD89]|\uD80D[\uDC00-\uDC2E]|\uD87E[\uDC00-\uDE1D]|[\uD80C\uD840-\uD868\uD86A-\uD86C\uD86F-\uD872][\uDC00-\uDFFF]|\uD835[\uDC00-\uDC54\uDC56-\uDC9C\uDC9E\uDC9F\uDCA2\uDCA5\uDCA6\uDCA9-\uDCAC\uDCAE-\uDCB9\uDCBB\uDCBD-\uDCC3\uDCC5-\uDD05\uDD07-\uDD0A\uDD0D-\uDD14\uDD16-\uDD1C\uDD1E-\uDD39\uDD3B-\uDD3E\uDD40-\uDD44\uDD46\uDD4A-\uDD50\uDD52-\uDEA5\uDEA8-\uDEC0\uDEC2-\uDEDA\uDEDC-\uDEFA\uDEFC-\uDF14\uDF16-\uDF34\uDF36-\uDF4E\uDF50-\uDF6E\uDF70-\uDF88\uDF8A-\uDFA8\uDFAA-\uDFC2\uDFC4-\uDFCB]|\uD82F[\uDC00-\uDC6A\uDC70-\uDC7C\uDC80-\uDC88\uDC90-\uDC99\uDC9E]|\uD808[\uDC00-\uDF99]|\uD83B[\uDE00-\uDE03\uDE05-\uDE1F\uDE21\uDE22\uDE24\uDE27\uDE29-\uDE32\uDE34-\uDE37\uDE39\uDE3B\uDE42\uDE47\uDE49\uDE4B\uDE4D-\uDE4F\uDE51\uDE52\uDE54\uDE57\uDE59\uDE5B\uDE5D\uDE5F\uDE61\uDE62\uDE64\uDE67-\uDE6A\uDE6C-\uDE72\uDE74-\uDE77\uDE79-\uDE7C\uDE7E\uDE80-\uDE89\uDE8B-\uDE9B\uDEA1-\uDEA3\uDEA5-\uDEA9\uDEAB-\uDEBB]|\uD805[\uDC80-\uDCC1\uDCC4\uDCC5\uDCC7\uDD80-\uDDB5\uDDB8-\uDDBE\uDDD8-\uDDDD\uDE00-\uDE3E\uDE40\uDE44\uDE80-\uDEB5\uDF00-\uDF19\uDF1D-\uDF2A]|\uD809[\uDC00-\uDC6E\uDC80-\uDD43]|\uD806[\uDCA0-\uDCDF\uDCFF\uDEC0-\uDEF8]|\uD800[\uDC00-\uDC0B\uDC0D-\uDC26\uDC28-\uDC3A\uDC3C\uDC3D\uDC3F-\uDC4D\uDC50-\uDC5D\uDC80-\uDCFA\uDD40-\uDD74\uDE80-\uDE9C\uDEA0-\uDED0\uDF00-\uDF1F\uDF30-\uDF4A\uDF50-\uDF7A\uDF80-\uDF9D\uDFA0-\uDFC3\uDFC8-\uDFCF\uDFD1-\uDFD5]|\uD802[\uDC00-\uDC05\uDC08\uDC0A-\uDC35\uDC37\uDC38\uDC3C\uDC3F-\uDC55\uDC60-\uDC76\uDC80-\uDC9E\uDCE0-\uDCF2\uDCF4\uDCF5\uDD00-\uDD15\uDD20-\uDD39\uDD80-\uDDB7\uDDBE\uDDBF\uDE00-\uDE03\uDE05\uDE06\uDE0C-\uDE13\uDE15-\uDE17\uDE19-\uDE33\uDE60-\uDE7C\uDE80-\uDE9C\uDEC0-\uDEC7\uDEC9-\uDEE4\uDF00-\uDF35\uDF40-\uDF55\uDF60-\uDF72\uDF80-\uDF91]|\uD811[\uDC00-\uDE46]|\uD82C[\uDC00\uDC01]|\uD81B[\uDF00-\uDF44\uDF50-\uDF7E\uDF93-\uDF9F]|\uD873[\uDC00-\uDEA1]'
3879
- },
3880
- {
3881
- name: 'Any',
3882
- isBmpLast: true,
3883
- bmp: '\0-\uFFFF',
3884
- astral: '[\uD800-\uDBFF][\uDC00-\uDFFF]'
3885
- },
3886
- {
3887
- name: 'Default_Ignorable_Code_Point',
3888
- bmp: '\xAD\u034F\u061C\u115F\u1160\u17B4\u17B5\u180B-\u180E\u200B-\u200F\u202A-\u202E\u2060-\u206F\u3164\uFE00-\uFE0F\uFEFF\uFFA0\uFFF0-\uFFF8',
3889
- astral: '[\uDB40-\uDB43][\uDC00-\uDFFF]|\uD834[\uDD73-\uDD7A]|\uD82F[\uDCA0-\uDCA3]'
3890
- },
3891
- {
3892
- name: 'Lowercase',
3893
- bmp: 'a-z\xAA\xB5\xBA\xDF-\xF6\xF8-\xFF\u0101\u0103\u0105\u0107\u0109\u010B\u010D\u010F\u0111\u0113\u0115\u0117\u0119\u011B\u011D\u011F\u0121\u0123\u0125\u0127\u0129\u012B\u012D\u012F\u0131\u0133\u0135\u0137\u0138\u013A\u013C\u013E\u0140\u0142\u0144\u0146\u0148\u0149\u014B\u014D\u014F\u0151\u0153\u0155\u0157\u0159\u015B\u015D\u015F\u0161\u0163\u0165\u0167\u0169\u016B\u016D\u016F\u0171\u0173\u0175\u0177\u017A\u017C\u017E-\u0180\u0183\u0185\u0188\u018C\u018D\u0192\u0195\u0199-\u019B\u019E\u01A1\u01A3\u01A5\u01A8\u01AA\u01AB\u01AD\u01B0\u01B4\u01B6\u01B9\u01BA\u01BD-\u01BF\u01C6\u01C9\u01CC\u01CE\u01D0\u01D2\u01D4\u01D6\u01D8\u01DA\u01DC\u01DD\u01DF\u01E1\u01E3\u01E5\u01E7\u01E9\u01EB\u01ED\u01EF\u01F0\u01F3\u01F5\u01F9\u01FB\u01FD\u01FF\u0201\u0203\u0205\u0207\u0209\u020B\u020D\u020F\u0211\u0213\u0215\u0217\u0219\u021B\u021D\u021F\u0221\u0223\u0225\u0227\u0229\u022B\u022D\u022F\u0231\u0233-\u0239\u023C\u023F\u0240\u0242\u0247\u0249\u024B\u024D\u024F-\u0293\u0295-\u02B8\u02C0\u02C1\u02E0-\u02E4\u0345\u0371\u0373\u0377\u037A-\u037D\u0390\u03AC-\u03CE\u03D0\u03D1\u03D5-\u03D7\u03D9\u03DB\u03DD\u03DF\u03E1\u03E3\u03E5\u03E7\u03E9\u03EB\u03ED\u03EF-\u03F3\u03F5\u03F8\u03FB\u03FC\u0430-\u045F\u0461\u0463\u0465\u0467\u0469\u046B\u046D\u046F\u0471\u0473\u0475\u0477\u0479\u047B\u047D\u047F\u0481\u048B\u048D\u048F\u0491\u0493\u0495\u0497\u0499\u049B\u049D\u049F\u04A1\u04A3\u04A5\u04A7\u04A9\u04AB\u04AD\u04AF\u04B1\u04B3\u04B5\u04B7\u04B9\u04BB\u04BD\u04BF\u04C2\u04C4\u04C6\u04C8\u04CA\u04CC\u04CE\u04CF\u04D1\u04D3\u04D5\u04D7\u04D9\u04DB\u04DD\u04DF\u04E1\u04E3\u04E5\u04E7\u04E9\u04EB\u04ED\u04EF\u04F1\u04F3\u04F5\u04F7\u04F9\u04FB\u04FD\u04FF\u0501\u0503\u0505\u0507\u0509\u050B\u050D\u050F\u0511\u0513\u0515\u0517\u0519\u051B\u051D\u051F\u0521\u0523\u0525\u0527\u0529\u052B\u052D\u052F\u0561-\u0587\u13F8-\u13FD\u1D00-\u1DBF\u1E01\u1E03\u1E05\u1E07\u1E09\u1E0B\u1E0D\u1E0F\u1E11\u1E13\u1E15\u1E17\u1E19\u1E1B\u1E1D\u1E1F\u1E21\u1E23\u1E25\u1E27\u1E29\u1E2B\u1E2D\u1E2F\u1E31\u1E33\u1E35\u1E37\u1E39\u1E3B\u1E3D\u1E3F\u1E41\u1E43\u1E45\u1E47\u1E49\u1E4B\u1E4D\u1E4F\u1E51\u1E53\u1E55\u1E57\u1E59\u1E5B\u1E5D\u1E5F\u1E61\u1E63\u1E65\u1E67\u1E69\u1E6B\u1E6D\u1E6F\u1E71\u1E73\u1E75\u1E77\u1E79\u1E7B\u1E7D\u1E7F\u1E81\u1E83\u1E85\u1E87\u1E89\u1E8B\u1E8D\u1E8F\u1E91\u1E93\u1E95-\u1E9D\u1E9F\u1EA1\u1EA3\u1EA5\u1EA7\u1EA9\u1EAB\u1EAD\u1EAF\u1EB1\u1EB3\u1EB5\u1EB7\u1EB9\u1EBB\u1EBD\u1EBF\u1EC1\u1EC3\u1EC5\u1EC7\u1EC9\u1ECB\u1ECD\u1ECF\u1ED1\u1ED3\u1ED5\u1ED7\u1ED9\u1EDB\u1EDD\u1EDF\u1EE1\u1EE3\u1EE5\u1EE7\u1EE9\u1EEB\u1EED\u1EEF\u1EF1\u1EF3\u1EF5\u1EF7\u1EF9\u1EFB\u1EFD\u1EFF-\u1F07\u1F10-\u1F15\u1F20-\u1F27\u1F30-\u1F37\u1F40-\u1F45\u1F50-\u1F57\u1F60-\u1F67\u1F70-\u1F7D\u1F80-\u1F87\u1F90-\u1F97\u1FA0-\u1FA7\u1FB0-\u1FB4\u1FB6\u1FB7\u1FBE\u1FC2-\u1FC4\u1FC6\u1FC7\u1FD0-\u1FD3\u1FD6\u1FD7\u1FE0-\u1FE7\u1FF2-\u1FF4\u1FF6\u1FF7\u2071\u207F\u2090-\u209C\u210A\u210E\u210F\u2113\u212F\u2134\u2139\u213C\u213D\u2146-\u2149\u214E\u2170-\u217F\u2184\u24D0-\u24E9\u2C30-\u2C5E\u2C61\u2C65\u2C66\u2C68\u2C6A\u2C6C\u2C71\u2C73\u2C74\u2C76-\u2C7D\u2C81\u2C83\u2C85\u2C87\u2C89\u2C8B\u2C8D\u2C8F\u2C91\u2C93\u2C95\u2C97\u2C99\u2C9B\u2C9D\u2C9F\u2CA1\u2CA3\u2CA5\u2CA7\u2CA9\u2CAB\u2CAD\u2CAF\u2CB1\u2CB3\u2CB5\u2CB7\u2CB9\u2CBB\u2CBD\u2CBF\u2CC1\u2CC3\u2CC5\u2CC7\u2CC9\u2CCB\u2CCD\u2CCF\u2CD1\u2CD3\u2CD5\u2CD7\u2CD9\u2CDB\u2CDD\u2CDF\u2CE1\u2CE3\u2CE4\u2CEC\u2CEE\u2CF3\u2D00-\u2D25\u2D27\u2D2D\uA641\uA643\uA645\uA647\uA649\uA64B\uA64D\uA64F\uA651\uA653\uA655\uA657\uA659\uA65B\uA65D\uA65F\uA661\uA663\uA665\uA667\uA669\uA66B\uA66D\uA681\uA683\uA685\uA687\uA689\uA68B\uA68D\uA68F\uA691\uA693\uA695\uA697\uA699\uA69B-\uA69D\uA723\uA725\uA727\uA729\uA72B\uA72D\uA72F-\uA731\uA733\uA735\uA737\uA739\uA73B\uA73D\uA73F\uA741\uA743\uA745\uA747\uA749\uA74B\uA74D\uA74F\uA751\uA753\uA755\uA757\uA759\uA75B\uA75D\uA75F\uA761\uA763\uA765\uA767\uA769\uA76B\uA76D\uA76F-\uA778\uA77A\uA77C\uA77F\uA781\uA783\uA785\uA787\uA78C\uA78E\uA791\uA793-\uA795\uA797\uA799\uA79B\uA79D\uA79F\uA7A1\uA7A3\uA7A5\uA7A7\uA7A9\uA7B5\uA7B7\uA7F8-\uA7FA\uAB30-\uAB5A\uAB5C-\uAB65\uAB70-\uABBF\uFB00-\uFB06\uFB13-\uFB17\uFF41-\uFF5A',
3894
- astral: '\uD803[\uDCC0-\uDCF2]|\uD835[\uDC1A-\uDC33\uDC4E-\uDC54\uDC56-\uDC67\uDC82-\uDC9B\uDCB6-\uDCB9\uDCBB\uDCBD-\uDCC3\uDCC5-\uDCCF\uDCEA-\uDD03\uDD1E-\uDD37\uDD52-\uDD6B\uDD86-\uDD9F\uDDBA-\uDDD3\uDDEE-\uDE07\uDE22-\uDE3B\uDE56-\uDE6F\uDE8A-\uDEA5\uDEC2-\uDEDA\uDEDC-\uDEE1\uDEFC-\uDF14\uDF16-\uDF1B\uDF36-\uDF4E\uDF50-\uDF55\uDF70-\uDF88\uDF8A-\uDF8F\uDFAA-\uDFC2\uDFC4-\uDFC9\uDFCB]|\uD801[\uDC28-\uDC4F]|\uD806[\uDCC0-\uDCDF]'
3895
- },
3896
- {
3897
- name: 'Noncharacter_Code_Point',
3898
- bmp: '\uFDD0-\uFDEF\uFFFE\uFFFF',
3899
- astral: '[\uDB3F\uDB7F\uDBBF\uDBFF\uD83F\uD87F\uD8BF\uDAFF\uD97F\uD9BF\uD9FF\uDA3F\uD8FF\uDABF\uDA7F\uD93F][\uDFFE\uDFFF]'
3900
- },
3901
- {
3902
- name: 'Uppercase',
3903
- bmp: 'A-Z\xC0-\xD6\xD8-\xDE\u0100\u0102\u0104\u0106\u0108\u010A\u010C\u010E\u0110\u0112\u0114\u0116\u0118\u011A\u011C\u011E\u0120\u0122\u0124\u0126\u0128\u012A\u012C\u012E\u0130\u0132\u0134\u0136\u0139\u013B\u013D\u013F\u0141\u0143\u0145\u0147\u014A\u014C\u014E\u0150\u0152\u0154\u0156\u0158\u015A\u015C\u015E\u0160\u0162\u0164\u0166\u0168\u016A\u016C\u016E\u0170\u0172\u0174\u0176\u0178\u0179\u017B\u017D\u0181\u0182\u0184\u0186\u0187\u0189-\u018B\u018E-\u0191\u0193\u0194\u0196-\u0198\u019C\u019D\u019F\u01A0\u01A2\u01A4\u01A6\u01A7\u01A9\u01AC\u01AE\u01AF\u01B1-\u01B3\u01B5\u01B7\u01B8\u01BC\u01C4\u01C7\u01CA\u01CD\u01CF\u01D1\u01D3\u01D5\u01D7\u01D9\u01DB\u01DE\u01E0\u01E2\u01E4\u01E6\u01E8\u01EA\u01EC\u01EE\u01F1\u01F4\u01F6-\u01F8\u01FA\u01FC\u01FE\u0200\u0202\u0204\u0206\u0208\u020A\u020C\u020E\u0210\u0212\u0214\u0216\u0218\u021A\u021C\u021E\u0220\u0222\u0224\u0226\u0228\u022A\u022C\u022E\u0230\u0232\u023A\u023B\u023D\u023E\u0241\u0243-\u0246\u0248\u024A\u024C\u024E\u0370\u0372\u0376\u037F\u0386\u0388-\u038A\u038C\u038E\u038F\u0391-\u03A1\u03A3-\u03AB\u03CF\u03D2-\u03D4\u03D8\u03DA\u03DC\u03DE\u03E0\u03E2\u03E4\u03E6\u03E8\u03EA\u03EC\u03EE\u03F4\u03F7\u03F9\u03FA\u03FD-\u042F\u0460\u0462\u0464\u0466\u0468\u046A\u046C\u046E\u0470\u0472\u0474\u0476\u0478\u047A\u047C\u047E\u0480\u048A\u048C\u048E\u0490\u0492\u0494\u0496\u0498\u049A\u049C\u049E\u04A0\u04A2\u04A4\u04A6\u04A8\u04AA\u04AC\u04AE\u04B0\u04B2\u04B4\u04B6\u04B8\u04BA\u04BC\u04BE\u04C0\u04C1\u04C3\u04C5\u04C7\u04C9\u04CB\u04CD\u04D0\u04D2\u04D4\u04D6\u04D8\u04DA\u04DC\u04DE\u04E0\u04E2\u04E4\u04E6\u04E8\u04EA\u04EC\u04EE\u04F0\u04F2\u04F4\u04F6\u04F8\u04FA\u04FC\u04FE\u0500\u0502\u0504\u0506\u0508\u050A\u050C\u050E\u0510\u0512\u0514\u0516\u0518\u051A\u051C\u051E\u0520\u0522\u0524\u0526\u0528\u052A\u052C\u052E\u0531-\u0556\u10A0-\u10C5\u10C7\u10CD\u13A0-\u13F5\u1E00\u1E02\u1E04\u1E06\u1E08\u1E0A\u1E0C\u1E0E\u1E10\u1E12\u1E14\u1E16\u1E18\u1E1A\u1E1C\u1E1E\u1E20\u1E22\u1E24\u1E26\u1E28\u1E2A\u1E2C\u1E2E\u1E30\u1E32\u1E34\u1E36\u1E38\u1E3A\u1E3C\u1E3E\u1E40\u1E42\u1E44\u1E46\u1E48\u1E4A\u1E4C\u1E4E\u1E50\u1E52\u1E54\u1E56\u1E58\u1E5A\u1E5C\u1E5E\u1E60\u1E62\u1E64\u1E66\u1E68\u1E6A\u1E6C\u1E6E\u1E70\u1E72\u1E74\u1E76\u1E78\u1E7A\u1E7C\u1E7E\u1E80\u1E82\u1E84\u1E86\u1E88\u1E8A\u1E8C\u1E8E\u1E90\u1E92\u1E94\u1E9E\u1EA0\u1EA2\u1EA4\u1EA6\u1EA8\u1EAA\u1EAC\u1EAE\u1EB0\u1EB2\u1EB4\u1EB6\u1EB8\u1EBA\u1EBC\u1EBE\u1EC0\u1EC2\u1EC4\u1EC6\u1EC8\u1ECA\u1ECC\u1ECE\u1ED0\u1ED2\u1ED4\u1ED6\u1ED8\u1EDA\u1EDC\u1EDE\u1EE0\u1EE2\u1EE4\u1EE6\u1EE8\u1EEA\u1EEC\u1EEE\u1EF0\u1EF2\u1EF4\u1EF6\u1EF8\u1EFA\u1EFC\u1EFE\u1F08-\u1F0F\u1F18-\u1F1D\u1F28-\u1F2F\u1F38-\u1F3F\u1F48-\u1F4D\u1F59\u1F5B\u1F5D\u1F5F\u1F68-\u1F6F\u1FB8-\u1FBB\u1FC8-\u1FCB\u1FD8-\u1FDB\u1FE8-\u1FEC\u1FF8-\u1FFB\u2102\u2107\u210B-\u210D\u2110-\u2112\u2115\u2119-\u211D\u2124\u2126\u2128\u212A-\u212D\u2130-\u2133\u213E\u213F\u2145\u2160-\u216F\u2183\u24B6-\u24CF\u2C00-\u2C2E\u2C60\u2C62-\u2C64\u2C67\u2C69\u2C6B\u2C6D-\u2C70\u2C72\u2C75\u2C7E-\u2C80\u2C82\u2C84\u2C86\u2C88\u2C8A\u2C8C\u2C8E\u2C90\u2C92\u2C94\u2C96\u2C98\u2C9A\u2C9C\u2C9E\u2CA0\u2CA2\u2CA4\u2CA6\u2CA8\u2CAA\u2CAC\u2CAE\u2CB0\u2CB2\u2CB4\u2CB6\u2CB8\u2CBA\u2CBC\u2CBE\u2CC0\u2CC2\u2CC4\u2CC6\u2CC8\u2CCA\u2CCC\u2CCE\u2CD0\u2CD2\u2CD4\u2CD6\u2CD8\u2CDA\u2CDC\u2CDE\u2CE0\u2CE2\u2CEB\u2CED\u2CF2\uA640\uA642\uA644\uA646\uA648\uA64A\uA64C\uA64E\uA650\uA652\uA654\uA656\uA658\uA65A\uA65C\uA65E\uA660\uA662\uA664\uA666\uA668\uA66A\uA66C\uA680\uA682\uA684\uA686\uA688\uA68A\uA68C\uA68E\uA690\uA692\uA694\uA696\uA698\uA69A\uA722\uA724\uA726\uA728\uA72A\uA72C\uA72E\uA732\uA734\uA736\uA738\uA73A\uA73C\uA73E\uA740\uA742\uA744\uA746\uA748\uA74A\uA74C\uA74E\uA750\uA752\uA754\uA756\uA758\uA75A\uA75C\uA75E\uA760\uA762\uA764\uA766\uA768\uA76A\uA76C\uA76E\uA779\uA77B\uA77D\uA77E\uA780\uA782\uA784\uA786\uA78B\uA78D\uA790\uA792\uA796\uA798\uA79A\uA79C\uA79E\uA7A0\uA7A2\uA7A4\uA7A6\uA7A8\uA7AA-\uA7AD\uA7B0-\uA7B4\uA7B6\uFF21-\uFF3A',
3904
- astral: '\uD806[\uDCA0-\uDCBF]|\uD803[\uDC80-\uDCB2]|\uD835[\uDC00-\uDC19\uDC34-\uDC4D\uDC68-\uDC81\uDC9C\uDC9E\uDC9F\uDCA2\uDCA5\uDCA6\uDCA9-\uDCAC\uDCAE-\uDCB5\uDCD0-\uDCE9\uDD04\uDD05\uDD07-\uDD0A\uDD0D-\uDD14\uDD16-\uDD1C\uDD38\uDD39\uDD3B-\uDD3E\uDD40-\uDD44\uDD46\uDD4A-\uDD50\uDD6C-\uDD85\uDDA0-\uDDB9\uDDD4-\uDDED\uDE08-\uDE21\uDE3C-\uDE55\uDE70-\uDE89\uDEA8-\uDEC0\uDEE2-\uDEFA\uDF1C-\uDF34\uDF56-\uDF6E\uDF90-\uDFA8\uDFCA]|\uD801[\uDC00-\uDC27]|\uD83C[\uDD30-\uDD49\uDD50-\uDD69\uDD70-\uDD89]'
3905
- },
3906
- {
3907
- name: 'White_Space',
3908
- bmp: '\x09-\x0D\x20\x85\xA0\u1680\u2000-\u200A\u2028\u2029\u202F\u205F\u3000'
3909
- }
3910
- ];
3911
-
3912
- // Add non-generated data
3913
- unicodeData.push({
3914
- name: 'Assigned',
3915
- // Since this is defined as the inverse of Unicode category Cn (Unassigned), the Unicode
3916
- // Categories addon is required to use this property
3917
- inverseOf: 'Cn'
3918
- });
3919
-
3920
- XRegExp.addUnicodeData(unicodeData);
3921
-
3922
- }(XRegExp));
3923
-
3924
- /*!
3925
- * XRegExp Unicode Scripts 3.0.0
3926
- * <http://xregexp.com/>
3927
- * Steven Levithan (c) 2010-2015 MIT License
3928
- * Unicode data provided by Mathias Bynens <http://mathiasbynens.be/>
3929
- */
3930
-
3931
- /**
3932
- * Adds support for all Unicode scripts. E.g., `\p{Latin}`. Token names are case insensitive, and
3933
- * any spaces, hyphens, and underscores are ignored.
3934
- *
3935
- * Uses Unicode 8.0.0.
3936
- *
3937
- * @requires XRegExp, Unicode Base
3938
- */
3939
- (function(XRegExp) {
3940
- 'use strict';
3941
-
3942
- if (!XRegExp.addUnicodeData) {
3943
- throw new ReferenceError('Unicode Base must be loaded before Unicode Scripts');
3944
- }
3945
-
3946
- XRegExp.addUnicodeData([
3947
- {
3948
- name: 'Ahom',
3949
- astral: '\uD805[\uDF00-\uDF19\uDF1D-\uDF2B\uDF30-\uDF3F]'
3950
- },
3951
- {
3952
- name: 'Anatolian_Hieroglyphs',
3953
- astral: '\uD811[\uDC00-\uDE46]'
3954
- },
3955
- {
3956
- name: 'Arabic',
3957
- bmp: '\u0600-\u0604\u0606-\u060B\u060D-\u061A\u061E\u0620-\u063F\u0641-\u064A\u0656-\u066F\u0671-\u06DC\u06DE-\u06FF\u0750-\u077F\u08A0-\u08B4\u08E3-\u08FF\uFB50-\uFBC1\uFBD3-\uFD3D\uFD50-\uFD8F\uFD92-\uFDC7\uFDF0-\uFDFD\uFE70-\uFE74\uFE76-\uFEFC',
3958
- astral: '\uD803[\uDE60-\uDE7E]|\uD83B[\uDE00-\uDE03\uDE05-\uDE1F\uDE21\uDE22\uDE24\uDE27\uDE29-\uDE32\uDE34-\uDE37\uDE39\uDE3B\uDE42\uDE47\uDE49\uDE4B\uDE4D-\uDE4F\uDE51\uDE52\uDE54\uDE57\uDE59\uDE5B\uDE5D\uDE5F\uDE61\uDE62\uDE64\uDE67-\uDE6A\uDE6C-\uDE72\uDE74-\uDE77\uDE79-\uDE7C\uDE7E\uDE80-\uDE89\uDE8B-\uDE9B\uDEA1-\uDEA3\uDEA5-\uDEA9\uDEAB-\uDEBB\uDEF0\uDEF1]'
3959
- },
3960
- {
3961
- name: 'Armenian',
3962
- bmp: '\u0531-\u0556\u0559-\u055F\u0561-\u0587\u058A\u058D-\u058F\uFB13-\uFB17'
3963
- },
3964
- {
3965
- name: 'Avestan',
3966
- astral: '\uD802[\uDF00-\uDF35\uDF39-\uDF3F]'
3967
- },
3968
- {
3969
- name: 'Balinese',
3970
- bmp: '\u1B00-\u1B4B\u1B50-\u1B7C'
3971
- },
3972
- {
3973
- name: 'Bamum',
3974
- bmp: '\uA6A0-\uA6F7',
3975
- astral: '\uD81A[\uDC00-\uDE38]'
3976
- },
3977
- {
3978
- name: 'Bassa_Vah',
3979
- astral: '\uD81A[\uDED0-\uDEED\uDEF0-\uDEF5]'
3980
- },
3981
- {
3982
- name: 'Batak',
3983
- bmp: '\u1BC0-\u1BF3\u1BFC-\u1BFF'
3984
- },
3985
- {
3986
- name: 'Bengali',
3987
- bmp: '\u0980-\u0983\u0985-\u098C\u098F\u0990\u0993-\u09A8\u09AA-\u09B0\u09B2\u09B6-\u09B9\u09BC-\u09C4\u09C7\u09C8\u09CB-\u09CE\u09D7\u09DC\u09DD\u09DF-\u09E3\u09E6-\u09FB'
3988
- },
3989
- {
3990
- name: 'Bopomofo',
3991
- bmp: '\u02EA\u02EB\u3105-\u312D\u31A0-\u31BA'
3992
- },
3993
- {
3994
- name: 'Brahmi',
3995
- astral: '\uD804[\uDC00-\uDC4D\uDC52-\uDC6F\uDC7F]'
3996
- },
3997
- {
3998
- name: 'Braille',
3999
- bmp: '\u2800-\u28FF'
4000
- },
4001
- {
4002
- name: 'Buginese',
4003
- bmp: '\u1A00-\u1A1B\u1A1E\u1A1F'
4004
- },
4005
- {
4006
- name: 'Buhid',
4007
- bmp: '\u1740-\u1753'
4008
- },
4009
- {
4010
- name: 'Canadian_Aboriginal',
4011
- bmp: '\u1400-\u167F\u18B0-\u18F5'
4012
- },
4013
- {
4014
- name: 'Carian',
4015
- astral: '\uD800[\uDEA0-\uDED0]'
4016
- },
4017
- {
4018
- name: 'Caucasian_Albanian',
4019
- astral: '\uD801[\uDD30-\uDD63\uDD6F]'
4020
- },
4021
- {
4022
- name: 'Chakma',
4023
- astral: '\uD804[\uDD00-\uDD34\uDD36-\uDD43]'
4024
- },
4025
- {
4026
- name: 'Cham',
4027
- bmp: '\uAA00-\uAA36\uAA40-\uAA4D\uAA50-\uAA59\uAA5C-\uAA5F'
4028
- },
4029
- {
4030
- name: 'Cherokee',
4031
- bmp: '\u13A0-\u13F5\u13F8-\u13FD\uAB70-\uABBF'
4032
- },
4033
- {
4034
- name: 'Common',
4035
- bmp: '\0-\x40\\x5B-\x60\\x7B-\xA9\xAB-\xB9\xBB-\xBF\xD7\xF7\u02B9-\u02DF\u02E5-\u02E9\u02EC-\u02FF\u0374\u037E\u0385\u0387\u0589\u0605\u060C\u061B\u061C\u061F\u0640\u06DD\u0964\u0965\u0E3F\u0FD5-\u0FD8\u10FB\u16EB-\u16ED\u1735\u1736\u1802\u1803\u1805\u1CD3\u1CE1\u1CE9-\u1CEC\u1CEE-\u1CF3\u1CF5\u1CF6\u2000-\u200B\u200E-\u2064\u2066-\u2070\u2074-\u207E\u2080-\u208E\u20A0-\u20BE\u2100-\u2125\u2127-\u2129\u212C-\u2131\u2133-\u214D\u214F-\u215F\u2189-\u218B\u2190-\u23FA\u2400-\u2426\u2440-\u244A\u2460-\u27FF\u2900-\u2B73\u2B76-\u2B95\u2B98-\u2BB9\u2BBD-\u2BC8\u2BCA-\u2BD1\u2BEC-\u2BEF\u2E00-\u2E42\u2FF0-\u2FFB\u3000-\u3004\u3006\u3008-\u3020\u3030-\u3037\u303C-\u303F\u309B\u309C\u30A0\u30FB\u30FC\u3190-\u319F\u31C0-\u31E3\u3220-\u325F\u327F-\u32CF\u3358-\u33FF\u4DC0-\u4DFF\uA700-\uA721\uA788-\uA78A\uA830-\uA839\uA92E\uA9CF\uAB5B\uFD3E\uFD3F\uFE10-\uFE19\uFE30-\uFE52\uFE54-\uFE66\uFE68-\uFE6B\uFEFF\uFF01-\uFF20\uFF3B-\uFF40\uFF5B-\uFF65\uFF70\uFF9E\uFF9F\uFFE0-\uFFE6\uFFE8-\uFFEE\uFFF9-\uFFFD',
4036
- astral: '\uD83E[\uDC00-\uDC0B\uDC10-\uDC47\uDC50-\uDC59\uDC60-\uDC87\uDC90-\uDCAD\uDD10-\uDD18\uDD80-\uDD84\uDDC0]|\uD82F[\uDCA0-\uDCA3]|\uD835[\uDC00-\uDC54\uDC56-\uDC9C\uDC9E\uDC9F\uDCA2\uDCA5\uDCA6\uDCA9-\uDCAC\uDCAE-\uDCB9\uDCBB\uDCBD-\uDCC3\uDCC5-\uDD05\uDD07-\uDD0A\uDD0D-\uDD14\uDD16-\uDD1C\uDD1E-\uDD39\uDD3B-\uDD3E\uDD40-\uDD44\uDD46\uDD4A-\uDD50\uDD52-\uDEA5\uDEA8-\uDFCB\uDFCE-\uDFFF]|\uDB40[\uDC01\uDC20-\uDC7F]|\uD83D[\uDC00-\uDD79\uDD7B-\uDDA3\uDDA5-\uDED0\uDEE0-\uDEEC\uDEF0-\uDEF3\uDF00-\uDF73\uDF80-\uDFD4]|\uD800[\uDD00-\uDD02\uDD07-\uDD33\uDD37-\uDD3F\uDD90-\uDD9B\uDDD0-\uDDFC\uDEE1-\uDEFB]|\uD834[\uDC00-\uDCF5\uDD00-\uDD26\uDD29-\uDD66\uDD6A-\uDD7A\uDD83\uDD84\uDD8C-\uDDA9\uDDAE-\uDDE8\uDF00-\uDF56\uDF60-\uDF71]|\uD83C[\uDC00-\uDC2B\uDC30-\uDC93\uDCA0-\uDCAE\uDCB1-\uDCBF\uDCC1-\uDCCF\uDCD1-\uDCF5\uDD00-\uDD0C\uDD10-\uDD2E\uDD30-\uDD6B\uDD70-\uDD9A\uDDE6-\uDDFF\uDE01\uDE02\uDE10-\uDE3A\uDE40-\uDE48\uDE50\uDE51\uDF00-\uDFFF]'
4037
- },
4038
- {
4039
- name: 'Coptic',
4040
- bmp: '\u03E2-\u03EF\u2C80-\u2CF3\u2CF9-\u2CFF'
4041
- },
4042
- {
4043
- name: 'Cuneiform',
4044
- astral: '\uD809[\uDC00-\uDC6E\uDC70-\uDC74\uDC80-\uDD43]|\uD808[\uDC00-\uDF99]'
4045
- },
4046
- {
4047
- name: 'Cypriot',
4048
- astral: '\uD802[\uDC00-\uDC05\uDC08\uDC0A-\uDC35\uDC37\uDC38\uDC3C\uDC3F]'
4049
- },
4050
- {
4051
- name: 'Cyrillic',
4052
- bmp: '\u0400-\u0484\u0487-\u052F\u1D2B\u1D78\u2DE0-\u2DFF\uA640-\uA69F\uFE2E\uFE2F'
4053
- },
4054
- {
4055
- name: 'Deseret',
4056
- astral: '\uD801[\uDC00-\uDC4F]'
4057
- },
4058
- {
4059
- name: 'Devanagari',
4060
- bmp: '\u0900-\u0950\u0953-\u0963\u0966-\u097F\uA8E0-\uA8FD'
4061
- },
4062
- {
4063
- name: 'Duployan',
4064
- astral: '\uD82F[\uDC00-\uDC6A\uDC70-\uDC7C\uDC80-\uDC88\uDC90-\uDC99\uDC9C-\uDC9F]'
4065
- },
4066
- {
4067
- name: 'Egyptian_Hieroglyphs',
4068
- astral: '\uD80C[\uDC00-\uDFFF]|\uD80D[\uDC00-\uDC2E]'
4069
- },
4070
- {
4071
- name: 'Elbasan',
4072
- astral: '\uD801[\uDD00-\uDD27]'
4073
- },
4074
- {
4075
- name: 'Ethiopic',
4076
- bmp: '\u1200-\u1248\u124A-\u124D\u1250-\u1256\u1258\u125A-\u125D\u1260-\u1288\u128A-\u128D\u1290-\u12B0\u12B2-\u12B5\u12B8-\u12BE\u12C0\u12C2-\u12C5\u12C8-\u12D6\u12D8-\u1310\u1312-\u1315\u1318-\u135A\u135D-\u137C\u1380-\u1399\u2D80-\u2D96\u2DA0-\u2DA6\u2DA8-\u2DAE\u2DB0-\u2DB6\u2DB8-\u2DBE\u2DC0-\u2DC6\u2DC8-\u2DCE\u2DD0-\u2DD6\u2DD8-\u2DDE\uAB01-\uAB06\uAB09-\uAB0E\uAB11-\uAB16\uAB20-\uAB26\uAB28-\uAB2E'
4077
- },
4078
- {
4079
- name: 'Georgian',
4080
- bmp: '\u10A0-\u10C5\u10C7\u10CD\u10D0-\u10FA\u10FC-\u10FF\u2D00-\u2D25\u2D27\u2D2D'
4081
- },
4082
- {
4083
- name: 'Glagolitic',
4084
- bmp: '\u2C00-\u2C2E\u2C30-\u2C5E'
4085
- },
4086
- {
4087
- name: 'Gothic',
4088
- astral: '\uD800[\uDF30-\uDF4A]'
4089
- },
4090
- {
4091
- name: 'Grantha',
4092
- astral: '\uD804[\uDF00-\uDF03\uDF05-\uDF0C\uDF0F\uDF10\uDF13-\uDF28\uDF2A-\uDF30\uDF32\uDF33\uDF35-\uDF39\uDF3C-\uDF44\uDF47\uDF48\uDF4B-\uDF4D\uDF50\uDF57\uDF5D-\uDF63\uDF66-\uDF6C\uDF70-\uDF74]'
4093
- },
4094
- {
4095
- name: 'Greek',
4096
- bmp: '\u0370-\u0373\u0375-\u0377\u037A-\u037D\u037F\u0384\u0386\u0388-\u038A\u038C\u038E-\u03A1\u03A3-\u03E1\u03F0-\u03FF\u1D26-\u1D2A\u1D5D-\u1D61\u1D66-\u1D6A\u1DBF\u1F00-\u1F15\u1F18-\u1F1D\u1F20-\u1F45\u1F48-\u1F4D\u1F50-\u1F57\u1F59\u1F5B\u1F5D\u1F5F-\u1F7D\u1F80-\u1FB4\u1FB6-\u1FC4\u1FC6-\u1FD3\u1FD6-\u1FDB\u1FDD-\u1FEF\u1FF2-\u1FF4\u1FF6-\u1FFE\u2126\uAB65',
4097
- astral: '\uD800[\uDD40-\uDD8C\uDDA0]|\uD834[\uDE00-\uDE45]'
4098
- },
4099
- {
4100
- name: 'Gujarati',
4101
- bmp: '\u0A81-\u0A83\u0A85-\u0A8D\u0A8F-\u0A91\u0A93-\u0AA8\u0AAA-\u0AB0\u0AB2\u0AB3\u0AB5-\u0AB9\u0ABC-\u0AC5\u0AC7-\u0AC9\u0ACB-\u0ACD\u0AD0\u0AE0-\u0AE3\u0AE6-\u0AF1\u0AF9'
4102
- },
4103
- {
4104
- name: 'Gurmukhi',
4105
- bmp: '\u0A01-\u0A03\u0A05-\u0A0A\u0A0F\u0A10\u0A13-\u0A28\u0A2A-\u0A30\u0A32\u0A33\u0A35\u0A36\u0A38\u0A39\u0A3C\u0A3E-\u0A42\u0A47\u0A48\u0A4B-\u0A4D\u0A51\u0A59-\u0A5C\u0A5E\u0A66-\u0A75'
4106
- },
4107
- {
4108
- name: 'Han',
4109
- bmp: '\u2E80-\u2E99\u2E9B-\u2EF3\u2F00-\u2FD5\u3005\u3007\u3021-\u3029\u3038-\u303B\u3400-\u4DB5\u4E00-\u9FD5\uF900-\uFA6D\uFA70-\uFAD9',
4110
- astral: '\uD86E[\uDC00-\uDC1D\uDC20-\uDFFF]|[\uD840-\uD868\uD86A-\uD86C\uD86F-\uD872][\uDC00-\uDFFF]|\uD86D[\uDC00-\uDF34\uDF40-\uDFFF]|\uD87E[\uDC00-\uDE1D]|\uD869[\uDC00-\uDED6\uDF00-\uDFFF]|\uD873[\uDC00-\uDEA1]'
4111
- },
4112
- {
4113
- name: 'Hangul',
4114
- bmp: '\u1100-\u11FF\u302E\u302F\u3131-\u318E\u3200-\u321E\u3260-\u327E\uA960-\uA97C\uAC00-\uD7A3\uD7B0-\uD7C6\uD7CB-\uD7FB\uFFA0-\uFFBE\uFFC2-\uFFC7\uFFCA-\uFFCF\uFFD2-\uFFD7\uFFDA-\uFFDC'
4115
- },
4116
- {
4117
- name: 'Hanunoo',
4118
- bmp: '\u1720-\u1734'
4119
- },
4120
- {
4121
- name: 'Hatran',
4122
- astral: '\uD802[\uDCE0-\uDCF2\uDCF4\uDCF5\uDCFB-\uDCFF]'
4123
- },
4124
- {
4125
- name: 'Hebrew',
4126
- bmp: '\u0591-\u05C7\u05D0-\u05EA\u05F0-\u05F4\uFB1D-\uFB36\uFB38-\uFB3C\uFB3E\uFB40\uFB41\uFB43\uFB44\uFB46-\uFB4F'
4127
- },
4128
- {
4129
- name: 'Hiragana',
4130
- bmp: '\u3041-\u3096\u309D-\u309F',
4131
- astral: '\uD82C\uDC01|\uD83C\uDE00'
4132
- },
4133
- {
4134
- name: 'Imperial_Aramaic',
4135
- astral: '\uD802[\uDC40-\uDC55\uDC57-\uDC5F]'
4136
- },
4137
- {
4138
- name: 'Inherited',
4139
- bmp: '\u0300-\u036F\u0485\u0486\u064B-\u0655\u0670\u0951\u0952\u1AB0-\u1ABE\u1CD0-\u1CD2\u1CD4-\u1CE0\u1CE2-\u1CE8\u1CED\u1CF4\u1CF8\u1CF9\u1DC0-\u1DF5\u1DFC-\u1DFF\u200C\u200D\u20D0-\u20F0\u302A-\u302D\u3099\u309A\uFE00-\uFE0F\uFE20-\uFE2D',
4140
- astral: '\uD834[\uDD67-\uDD69\uDD7B-\uDD82\uDD85-\uDD8B\uDDAA-\uDDAD]|\uD800[\uDDFD\uDEE0]|\uDB40[\uDD00-\uDDEF]'
4141
- },
4142
- {
4143
- name: 'Inscriptional_Pahlavi',
4144
- astral: '\uD802[\uDF60-\uDF72\uDF78-\uDF7F]'
4145
- },
4146
- {
4147
- name: 'Inscriptional_Parthian',
4148
- astral: '\uD802[\uDF40-\uDF55\uDF58-\uDF5F]'
4149
- },
4150
- {
4151
- name: 'Javanese',
4152
- bmp: '\uA980-\uA9CD\uA9D0-\uA9D9\uA9DE\uA9DF'
4153
- },
4154
- {
4155
- name: 'Kaithi',
4156
- astral: '\uD804[\uDC80-\uDCC1]'
4157
- },
4158
- {
4159
- name: 'Kannada',
4160
- bmp: '\u0C81-\u0C83\u0C85-\u0C8C\u0C8E-\u0C90\u0C92-\u0CA8\u0CAA-\u0CB3\u0CB5-\u0CB9\u0CBC-\u0CC4\u0CC6-\u0CC8\u0CCA-\u0CCD\u0CD5\u0CD6\u0CDE\u0CE0-\u0CE3\u0CE6-\u0CEF\u0CF1\u0CF2'
4161
- },
4162
- {
4163
- name: 'Katakana',
4164
- bmp: '\u30A1-\u30FA\u30FD-\u30FF\u31F0-\u31FF\u32D0-\u32FE\u3300-\u3357\uFF66-\uFF6F\uFF71-\uFF9D',
4165
- astral: '\uD82C\uDC00'
4166
- },
4167
- {
4168
- name: 'Kayah_Li',
4169
- bmp: '\uA900-\uA92D\uA92F'
4170
- },
4171
- {
4172
- name: 'Kharoshthi',
4173
- astral: '\uD802[\uDE00-\uDE03\uDE05\uDE06\uDE0C-\uDE13\uDE15-\uDE17\uDE19-\uDE33\uDE38-\uDE3A\uDE3F-\uDE47\uDE50-\uDE58]'
4174
- },
4175
- {
4176
- name: 'Khmer',
4177
- bmp: '\u1780-\u17DD\u17E0-\u17E9\u17F0-\u17F9\u19E0-\u19FF'
4178
- },
4179
- {
4180
- name: 'Khojki',
4181
- astral: '\uD804[\uDE00-\uDE11\uDE13-\uDE3D]'
4182
- },
4183
- {
4184
- name: 'Khudawadi',
4185
- astral: '\uD804[\uDEB0-\uDEEA\uDEF0-\uDEF9]'
4186
- },
4187
- {
4188
- name: 'Lao',
4189
- bmp: '\u0E81\u0E82\u0E84\u0E87\u0E88\u0E8A\u0E8D\u0E94-\u0E97\u0E99-\u0E9F\u0EA1-\u0EA3\u0EA5\u0EA7\u0EAA\u0EAB\u0EAD-\u0EB9\u0EBB-\u0EBD\u0EC0-\u0EC4\u0EC6\u0EC8-\u0ECD\u0ED0-\u0ED9\u0EDC-\u0EDF'
4190
- },
4191
- {
4192
- name: 'Latin',
4193
- bmp: 'A-Za-z\xAA\xBA\xC0-\xD6\xD8-\xF6\xF8-\u02B8\u02E0-\u02E4\u1D00-\u1D25\u1D2C-\u1D5C\u1D62-\u1D65\u1D6B-\u1D77\u1D79-\u1DBE\u1E00-\u1EFF\u2071\u207F\u2090-\u209C\u212A\u212B\u2132\u214E\u2160-\u2188\u2C60-\u2C7F\uA722-\uA787\uA78B-\uA7AD\uA7B0-\uA7B7\uA7F7-\uA7FF\uAB30-\uAB5A\uAB5C-\uAB64\uFB00-\uFB06\uFF21-\uFF3A\uFF41-\uFF5A'
4194
- },
4195
- {
4196
- name: 'Lepcha',
4197
- bmp: '\u1C00-\u1C37\u1C3B-\u1C49\u1C4D-\u1C4F'
4198
- },
4199
- {
4200
- name: 'Limbu',
4201
- bmp: '\u1900-\u191E\u1920-\u192B\u1930-\u193B\u1940\u1944-\u194F'
4202
- },
4203
- {
4204
- name: 'Linear_A',
4205
- astral: '\uD801[\uDE00-\uDF36\uDF40-\uDF55\uDF60-\uDF67]'
4206
- },
4207
- {
4208
- name: 'Linear_B',
4209
- astral: '\uD800[\uDC00-\uDC0B\uDC0D-\uDC26\uDC28-\uDC3A\uDC3C\uDC3D\uDC3F-\uDC4D\uDC50-\uDC5D\uDC80-\uDCFA]'
4210
- },
4211
- {
4212
- name: 'Lisu',
4213
- bmp: '\uA4D0-\uA4FF'
4214
- },
4215
- {
4216
- name: 'Lycian',
4217
- astral: '\uD800[\uDE80-\uDE9C]'
4218
- },
4219
- {
4220
- name: 'Lydian',
4221
- astral: '\uD802[\uDD20-\uDD39\uDD3F]'
4222
- },
4223
- {
4224
- name: 'Mahajani',
4225
- astral: '\uD804[\uDD50-\uDD76]'
4226
- },
4227
- {
4228
- name: 'Malayalam',
4229
- bmp: '\u0D01-\u0D03\u0D05-\u0D0C\u0D0E-\u0D10\u0D12-\u0D3A\u0D3D-\u0D44\u0D46-\u0D48\u0D4A-\u0D4E\u0D57\u0D5F-\u0D63\u0D66-\u0D75\u0D79-\u0D7F'
4230
- },
4231
- {
4232
- name: 'Mandaic',
4233
- bmp: '\u0840-\u085B\u085E'
4234
- },
4235
- {
4236
- name: 'Manichaean',
4237
- astral: '\uD802[\uDEC0-\uDEE6\uDEEB-\uDEF6]'
4238
- },
4239
- {
4240
- name: 'Meetei_Mayek',
4241
- bmp: '\uAAE0-\uAAF6\uABC0-\uABED\uABF0-\uABF9'
4242
- },
4243
- {
4244
- name: 'Mende_Kikakui',
4245
- astral: '\uD83A[\uDC00-\uDCC4\uDCC7-\uDCD6]'
4246
- },
4247
- {
4248
- name: 'Meroitic_Cursive',
4249
- astral: '\uD802[\uDDA0-\uDDB7\uDDBC-\uDDCF\uDDD2-\uDDFF]'
4250
- },
4251
- {
4252
- name: 'Meroitic_Hieroglyphs',
4253
- astral: '\uD802[\uDD80-\uDD9F]'
4254
- },
4255
- {
4256
- name: 'Miao',
4257
- astral: '\uD81B[\uDF00-\uDF44\uDF50-\uDF7E\uDF8F-\uDF9F]'
4258
- },
4259
- {
4260
- name: 'Modi',
4261
- astral: '\uD805[\uDE00-\uDE44\uDE50-\uDE59]'
4262
- },
4263
- {
4264
- name: 'Mongolian',
4265
- bmp: '\u1800\u1801\u1804\u1806-\u180E\u1810-\u1819\u1820-\u1877\u1880-\u18AA'
4266
- },
4267
- {
4268
- name: 'Mro',
4269
- astral: '\uD81A[\uDE40-\uDE5E\uDE60-\uDE69\uDE6E\uDE6F]'
4270
- },
4271
- {
4272
- name: 'Multani',
4273
- astral: '\uD804[\uDE80-\uDE86\uDE88\uDE8A-\uDE8D\uDE8F-\uDE9D\uDE9F-\uDEA9]'
4274
- },
4275
- {
4276
- name: 'Myanmar',
4277
- bmp: '\u1000-\u109F\uA9E0-\uA9FE\uAA60-\uAA7F'
4278
- },
4279
- {
4280
- name: 'Nabataean',
4281
- astral: '\uD802[\uDC80-\uDC9E\uDCA7-\uDCAF]'
4282
- },
4283
- {
4284
- name: 'New_Tai_Lue',
4285
- bmp: '\u1980-\u19AB\u19B0-\u19C9\u19D0-\u19DA\u19DE\u19DF'
4286
- },
4287
- {
4288
- name: 'Nko',
4289
- bmp: '\u07C0-\u07FA'
4290
- },
4291
- {
4292
- name: 'Ogham',
4293
- bmp: '\u1680-\u169C'
4294
- },
4295
- {
4296
- name: 'Ol_Chiki',
4297
- bmp: '\u1C50-\u1C7F'
4298
- },
4299
- {
4300
- name: 'Old_Hungarian',
4301
- astral: '\uD803[\uDC80-\uDCB2\uDCC0-\uDCF2\uDCFA-\uDCFF]'
4302
- },
4303
- {
4304
- name: 'Old_Italic',
4305
- astral: '\uD800[\uDF00-\uDF23]'
4306
- },
4307
- {
4308
- name: 'Old_North_Arabian',
4309
- astral: '\uD802[\uDE80-\uDE9F]'
4310
- },
4311
- {
4312
- name: 'Old_Permic',
4313
- astral: '\uD800[\uDF50-\uDF7A]'
4314
- },
4315
- {
4316
- name: 'Old_Persian',
4317
- astral: '\uD800[\uDFA0-\uDFC3\uDFC8-\uDFD5]'
4318
- },
4319
- {
4320
- name: 'Old_South_Arabian',
4321
- astral: '\uD802[\uDE60-\uDE7F]'
4322
- },
4323
- {
4324
- name: 'Old_Turkic',
4325
- astral: '\uD803[\uDC00-\uDC48]'
4326
- },
4327
- {
4328
- name: 'Oriya',
4329
- bmp: '\u0B01-\u0B03\u0B05-\u0B0C\u0B0F\u0B10\u0B13-\u0B28\u0B2A-\u0B30\u0B32\u0B33\u0B35-\u0B39\u0B3C-\u0B44\u0B47\u0B48\u0B4B-\u0B4D\u0B56\u0B57\u0B5C\u0B5D\u0B5F-\u0B63\u0B66-\u0B77'
4330
- },
4331
- {
4332
- name: 'Osmanya',
4333
- astral: '\uD801[\uDC80-\uDC9D\uDCA0-\uDCA9]'
4334
- },
4335
- {
4336
- name: 'Pahawh_Hmong',
4337
- astral: '\uD81A[\uDF00-\uDF45\uDF50-\uDF59\uDF5B-\uDF61\uDF63-\uDF77\uDF7D-\uDF8F]'
4338
- },
4339
- {
4340
- name: 'Palmyrene',
4341
- astral: '\uD802[\uDC60-\uDC7F]'
4342
- },
4343
- {
4344
- name: 'Pau_Cin_Hau',
4345
- astral: '\uD806[\uDEC0-\uDEF8]'
4346
- },
4347
- {
4348
- name: 'Phags_Pa',
4349
- bmp: '\uA840-\uA877'
4350
- },
4351
- {
4352
- name: 'Phoenician',
4353
- astral: '\uD802[\uDD00-\uDD1B\uDD1F]'
4354
- },
4355
- {
4356
- name: 'Psalter_Pahlavi',
4357
- astral: '\uD802[\uDF80-\uDF91\uDF99-\uDF9C\uDFA9-\uDFAF]'
4358
- },
4359
- {
4360
- name: 'Rejang',
4361
- bmp: '\uA930-\uA953\uA95F'
4362
- },
4363
- {
4364
- name: 'Runic',
4365
- bmp: '\u16A0-\u16EA\u16EE-\u16F8'
4366
- },
4367
- {
4368
- name: 'Samaritan',
4369
- bmp: '\u0800-\u082D\u0830-\u083E'
4370
- },
4371
- {
4372
- name: 'Saurashtra',
4373
- bmp: '\uA880-\uA8C4\uA8CE-\uA8D9'
4374
- },
4375
- {
4376
- name: 'Sharada',
4377
- astral: '\uD804[\uDD80-\uDDCD\uDDD0-\uDDDF]'
4378
- },
4379
- {
4380
- name: 'Shavian',
4381
- astral: '\uD801[\uDC50-\uDC7F]'
4382
- },
4383
- {
4384
- name: 'Siddham',
4385
- astral: '\uD805[\uDD80-\uDDB5\uDDB8-\uDDDD]'
4386
- },
4387
- {
4388
- name: 'SignWriting',
4389
- astral: '\uD836[\uDC00-\uDE8B\uDE9B-\uDE9F\uDEA1-\uDEAF]'
4390
- },
4391
- {
4392
- name: 'Sinhala',
4393
- bmp: '\u0D82\u0D83\u0D85-\u0D96\u0D9A-\u0DB1\u0DB3-\u0DBB\u0DBD\u0DC0-\u0DC6\u0DCA\u0DCF-\u0DD4\u0DD6\u0DD8-\u0DDF\u0DE6-\u0DEF\u0DF2-\u0DF4',
4394
- astral: '\uD804[\uDDE1-\uDDF4]'
4395
- },
4396
- {
4397
- name: 'Sora_Sompeng',
4398
- astral: '\uD804[\uDCD0-\uDCE8\uDCF0-\uDCF9]'
4399
- },
4400
- {
4401
- name: 'Sundanese',
4402
- bmp: '\u1B80-\u1BBF\u1CC0-\u1CC7'
4403
- },
4404
- {
4405
- name: 'Syloti_Nagri',
4406
- bmp: '\uA800-\uA82B'
4407
- },
4408
- {
4409
- name: 'Syriac',
4410
- bmp: '\u0700-\u070D\u070F-\u074A\u074D-\u074F'
4411
- },
4412
- {
4413
- name: 'Tagalog',
4414
- bmp: '\u1700-\u170C\u170E-\u1714'
4415
- },
4416
- {
4417
- name: 'Tagbanwa',
4418
- bmp: '\u1760-\u176C\u176E-\u1770\u1772\u1773'
4419
- },
4420
- {
4421
- name: 'Tai_Le',
4422
- bmp: '\u1950-\u196D\u1970-\u1974'
4423
- },
4424
- {
4425
- name: 'Tai_Tham',
4426
- bmp: '\u1A20-\u1A5E\u1A60-\u1A7C\u1A7F-\u1A89\u1A90-\u1A99\u1AA0-\u1AAD'
4427
- },
4428
- {
4429
- name: 'Tai_Viet',
4430
- bmp: '\uAA80-\uAAC2\uAADB-\uAADF'
4431
- },
4432
- {
4433
- name: 'Takri',
4434
- astral: '\uD805[\uDE80-\uDEB7\uDEC0-\uDEC9]'
4435
- },
4436
- {
4437
- name: 'Tamil',
4438
- bmp: '\u0B82\u0B83\u0B85-\u0B8A\u0B8E-\u0B90\u0B92-\u0B95\u0B99\u0B9A\u0B9C\u0B9E\u0B9F\u0BA3\u0BA4\u0BA8-\u0BAA\u0BAE-\u0BB9\u0BBE-\u0BC2\u0BC6-\u0BC8\u0BCA-\u0BCD\u0BD0\u0BD7\u0BE6-\u0BFA'
4439
- },
4440
- {
4441
- name: 'Telugu',
4442
- bmp: '\u0C00-\u0C03\u0C05-\u0C0C\u0C0E-\u0C10\u0C12-\u0C28\u0C2A-\u0C39\u0C3D-\u0C44\u0C46-\u0C48\u0C4A-\u0C4D\u0C55\u0C56\u0C58-\u0C5A\u0C60-\u0C63\u0C66-\u0C6F\u0C78-\u0C7F'
4443
- },
4444
- {
4445
- name: 'Thaana',
4446
- bmp: '\u0780-\u07B1'
4447
- },
4448
- {
4449
- name: 'Thai',
4450
- bmp: '\u0E01-\u0E3A\u0E40-\u0E5B'
4451
- },
4452
- {
4453
- name: 'Tibetan',
4454
- bmp: '\u0F00-\u0F47\u0F49-\u0F6C\u0F71-\u0F97\u0F99-\u0FBC\u0FBE-\u0FCC\u0FCE-\u0FD4\u0FD9\u0FDA'
4455
- },
4456
- {
4457
- name: 'Tifinagh',
4458
- bmp: '\u2D30-\u2D67\u2D6F\u2D70\u2D7F'
4459
- },
4460
- {
4461
- name: 'Tirhuta',
4462
- astral: '\uD805[\uDC80-\uDCC7\uDCD0-\uDCD9]'
4463
- },
4464
- {
4465
- name: 'Ugaritic',
4466
- astral: '\uD800[\uDF80-\uDF9D\uDF9F]'
4467
- },
4468
- {
4469
- name: 'Vai',
4470
- bmp: '\uA500-\uA62B'
4471
- },
4472
- {
4473
- name: 'Warang_Citi',
4474
- astral: '\uD806[\uDCA0-\uDCF2\uDCFF]'
4475
- },
4476
- {
4477
- name: 'Yi',
4478
- bmp: '\uA000-\uA48C\uA490-\uA4C6'
4479
- }
4480
- ]);
4481
-
4482
- }(XRegExp));
4483
-
4484
- return XRegExp;
4485
-
4486
- }));
4487
-