slidge-whatsapp 0.2.5__cp312-cp312-manylinux_2_36_aarch64.whl → 0.2.6__cp312-cp312-manylinux_2_36_aarch64.whl

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.

Potentially problematic release.


This version of slidge-whatsapp might be problematic. Click here for more details.

Files changed (320) hide show
  1. slidge_whatsapp/config.py +3 -0
  2. slidge_whatsapp/event.go +23 -24
  3. slidge_whatsapp/gateway.go +13 -9
  4. slidge_whatsapp/gateway.py +2 -2
  5. slidge_whatsapp/generated/_whatsapp.cpython-312-aarch64-linux-gnu.h +169 -169
  6. slidge_whatsapp/generated/_whatsapp.cpython-312-aarch64-linux-gnu.so +0 -0
  7. slidge_whatsapp/generated/build.py +135 -135
  8. slidge_whatsapp/generated/whatsapp.c +1455 -1455
  9. slidge_whatsapp/generated/whatsapp.go +737 -737
  10. slidge_whatsapp/generated/whatsapp.py +1038 -1038
  11. slidge_whatsapp/generated/whatsapp_go.h +169 -169
  12. slidge_whatsapp/go.mod +15 -12
  13. slidge_whatsapp/go.sum +41 -29
  14. slidge_whatsapp/media/media.go +16 -10
  15. slidge_whatsapp/session.go +73 -66
  16. slidge_whatsapp/vendor/github.com/ebitengine/purego/dlfcn.go +4 -4
  17. slidge_whatsapp/vendor/github.com/ebitengine/purego/dlfcn_darwin.go +0 -5
  18. slidge_whatsapp/vendor/github.com/ebitengine/purego/internal/fakecgo/go_libinit.go +3 -0
  19. slidge_whatsapp/vendor/github.com/ebitengine/purego/internal/fakecgo/symbols.go +40 -20
  20. slidge_whatsapp/vendor/github.com/jupiterrider/ffi/CHANGELOG.md +14 -1
  21. slidge_whatsapp/vendor/github.com/jupiterrider/ffi/ffi.go +2 -2
  22. slidge_whatsapp/vendor/github.com/jupiterrider/ffi/fun.go +10 -2
  23. slidge_whatsapp/vendor/github.com/jupiterrider/ffi/lib.go +1 -1
  24. slidge_whatsapp/vendor/github.com/jupiterrider/ffi/lib_unix.go +1 -1
  25. slidge_whatsapp/vendor/github.com/jupiterrider/ffi/lib_windows.go +1 -1
  26. slidge_whatsapp/vendor/github.com/mattn/go-sqlite3/README.md +2 -7
  27. slidge_whatsapp/vendor/github.com/mattn/go-sqlite3/callback.go +2 -1
  28. slidge_whatsapp/vendor/github.com/mattn/go-sqlite3/sqlite3-binding.c +8510 -5090
  29. slidge_whatsapp/vendor/github.com/mattn/go-sqlite3/sqlite3-binding.h +344 -150
  30. slidge_whatsapp/vendor/github.com/mattn/go-sqlite3/sqlite3.go +57 -23
  31. slidge_whatsapp/vendor/github.com/mattn/go-sqlite3/sqlite3_opt_unlock_notify.c +4 -0
  32. slidge_whatsapp/vendor/github.com/mattn/go-sqlite3/sqlite3_opt_unlock_notify.go +4 -0
  33. slidge_whatsapp/vendor/github.com/petermattis/goid/.gitignore +4 -0
  34. slidge_whatsapp/vendor/github.com/petermattis/goid/LICENSE +202 -0
  35. slidge_whatsapp/vendor/github.com/petermattis/goid/README.md +4 -0
  36. slidge_whatsapp/vendor/github.com/petermattis/goid/goid.go +35 -0
  37. slidge_whatsapp/vendor/github.com/petermattis/goid/goid_gccgo.go +26 -0
  38. slidge_whatsapp/vendor/github.com/petermattis/goid/goid_go1.3.c +23 -0
  39. slidge_whatsapp/vendor/github.com/petermattis/goid/goid_go1.3.go +22 -0
  40. slidge_whatsapp/vendor/github.com/petermattis/goid/goid_go1.4.go +35 -0
  41. slidge_whatsapp/vendor/github.com/petermattis/goid/goid_go1.4.s +18 -0
  42. slidge_whatsapp/vendor/github.com/petermattis/goid/goid_go1.5.go +28 -0
  43. slidge_whatsapp/vendor/github.com/petermattis/goid/goid_go1.5.s +44 -0
  44. slidge_whatsapp/vendor/github.com/petermattis/goid/goid_slow.go +24 -0
  45. slidge_whatsapp/vendor/github.com/petermattis/goid/runtime_gccgo_go1.8.go +17 -0
  46. slidge_whatsapp/vendor/github.com/petermattis/goid/runtime_go1.23.go +38 -0
  47. slidge_whatsapp/vendor/github.com/petermattis/goid/runtime_go1.5.go +57 -0
  48. slidge_whatsapp/vendor/github.com/petermattis/goid/runtime_go1.6.go +43 -0
  49. slidge_whatsapp/vendor/github.com/petermattis/goid/runtime_go1.9.go +37 -0
  50. slidge_whatsapp/vendor/github.com/rs/zerolog/CONTRIBUTING.md +43 -0
  51. slidge_whatsapp/vendor/github.com/rs/zerolog/README.md +31 -0
  52. slidge_whatsapp/vendor/github.com/rs/zerolog/console.go +20 -5
  53. slidge_whatsapp/vendor/github.com/rs/zerolog/log/log.go +131 -0
  54. slidge_whatsapp/vendor/github.com/rs/zerolog/log.go +1 -1
  55. slidge_whatsapp/vendor/github.com/rs/zerolog/sampler.go +4 -1
  56. slidge_whatsapp/vendor/github.com/rs/zerolog/writer.go +9 -0
  57. slidge_whatsapp/vendor/go.mau.fi/libsignal/groups/GroupCipher.go +17 -6
  58. slidge_whatsapp/vendor/go.mau.fi/libsignal/groups/GroupSessionBuilder.go +17 -7
  59. slidge_whatsapp/vendor/go.mau.fi/libsignal/groups/state/store/SenderKeyStore.go +4 -2
  60. slidge_whatsapp/vendor/go.mau.fi/libsignal/keys/chain/ChainKey.go +1 -0
  61. slidge_whatsapp/vendor/go.mau.fi/libsignal/keys/identity/IdentityKey.go +1 -0
  62. slidge_whatsapp/vendor/go.mau.fi/libsignal/logger/DefaultLogger.go +2 -2
  63. slidge_whatsapp/vendor/go.mau.fi/libsignal/serialize/FingerprintProtocol.pb.go +3 -2
  64. slidge_whatsapp/vendor/go.mau.fi/libsignal/serialize/LocalStorageProtocol.pb.go +3 -2
  65. slidge_whatsapp/vendor/go.mau.fi/libsignal/serialize/WhisperTextProtocol.pb.go +3 -2
  66. slidge_whatsapp/vendor/go.mau.fi/libsignal/session/Session.go +41 -17
  67. slidge_whatsapp/vendor/go.mau.fi/libsignal/session/SessionCipher.go +64 -30
  68. slidge_whatsapp/vendor/go.mau.fi/libsignal/state/store/IdentityKeyStore.go +5 -3
  69. slidge_whatsapp/vendor/go.mau.fi/libsignal/state/store/MessageKeyStore.go +6 -4
  70. slidge_whatsapp/vendor/go.mau.fi/libsignal/state/store/PreKeyStore.go +6 -4
  71. slidge_whatsapp/vendor/go.mau.fi/libsignal/state/store/SessionStore.go +8 -6
  72. slidge_whatsapp/vendor/go.mau.fi/libsignal/state/store/SignedPreKeyStore.go +7 -5
  73. slidge_whatsapp/vendor/go.mau.fi/util/dbutil/connlog.go +257 -0
  74. slidge_whatsapp/vendor/go.mau.fi/util/dbutil/database.go +309 -0
  75. slidge_whatsapp/vendor/go.mau.fi/util/dbutil/iter.go +233 -0
  76. slidge_whatsapp/vendor/go.mau.fi/util/dbutil/json.go +47 -0
  77. slidge_whatsapp/vendor/go.mau.fi/util/dbutil/log.go +129 -0
  78. slidge_whatsapp/vendor/go.mau.fi/util/dbutil/massinsert.go +164 -0
  79. slidge_whatsapp/vendor/go.mau.fi/util/dbutil/queryhelper.go +137 -0
  80. slidge_whatsapp/vendor/go.mau.fi/util/dbutil/reflectscan.go +30 -0
  81. slidge_whatsapp/vendor/go.mau.fi/util/dbutil/transaction.go +180 -0
  82. slidge_whatsapp/vendor/go.mau.fi/util/dbutil/upgrades.go +250 -0
  83. slidge_whatsapp/vendor/go.mau.fi/util/dbutil/upgradetable.go +331 -0
  84. slidge_whatsapp/vendor/go.mau.fi/util/exerrors/dualerror.go +33 -0
  85. slidge_whatsapp/vendor/go.mau.fi/util/exerrors/must.go +23 -0
  86. slidge_whatsapp/vendor/go.mau.fi/util/exhttp/cors.go +32 -0
  87. slidge_whatsapp/vendor/go.mau.fi/util/exhttp/handleerrors.go +64 -0
  88. slidge_whatsapp/vendor/go.mau.fi/util/exhttp/json.go +41 -0
  89. slidge_whatsapp/vendor/go.mau.fi/util/exhttp/middleware.go +30 -0
  90. slidge_whatsapp/vendor/go.mau.fi/util/exhttp/networkerror.go +37 -0
  91. slidge_whatsapp/vendor/go.mau.fi/util/exsync/event.go +88 -0
  92. slidge_whatsapp/vendor/go.mau.fi/util/exsync/returnonce.go +25 -0
  93. slidge_whatsapp/vendor/go.mau.fi/util/exsync/ringbuffer.go +139 -0
  94. slidge_whatsapp/vendor/go.mau.fi/util/exsync/syncmap.go +94 -0
  95. slidge_whatsapp/vendor/go.mau.fi/util/exsync/syncset.go +136 -0
  96. slidge_whatsapp/vendor/go.mau.fi/util/exzerolog/callermarshal.go +28 -0
  97. slidge_whatsapp/vendor/go.mau.fi/util/exzerolog/defaults.go +32 -0
  98. slidge_whatsapp/vendor/go.mau.fi/util/exzerolog/generics.go +45 -0
  99. slidge_whatsapp/vendor/go.mau.fi/util/exzerolog/writer.go +81 -0
  100. slidge_whatsapp/vendor/go.mau.fi/util/ptr/ptr.go +43 -0
  101. slidge_whatsapp/vendor/go.mau.fi/whatsmeow/appstate/decode.go +27 -26
  102. slidge_whatsapp/vendor/go.mau.fi/whatsmeow/appstate/encode.go +4 -3
  103. slidge_whatsapp/vendor/go.mau.fi/whatsmeow/appstate/keys.go +5 -4
  104. slidge_whatsapp/vendor/go.mau.fi/whatsmeow/appstate.go +27 -25
  105. slidge_whatsapp/vendor/go.mau.fi/whatsmeow/armadillomessage.go +3 -2
  106. slidge_whatsapp/vendor/go.mau.fi/whatsmeow/broadcast.go +5 -4
  107. slidge_whatsapp/vendor/go.mau.fi/whatsmeow/client.go +60 -15
  108. slidge_whatsapp/vendor/go.mau.fi/whatsmeow/connectionevents.go +25 -9
  109. slidge_whatsapp/vendor/go.mau.fi/whatsmeow/download-to-file.go +45 -19
  110. slidge_whatsapp/vendor/go.mau.fi/whatsmeow/download.go +52 -28
  111. slidge_whatsapp/vendor/go.mau.fi/whatsmeow/errors.go +1 -0
  112. slidge_whatsapp/vendor/go.mau.fi/whatsmeow/group.go +59 -29
  113. slidge_whatsapp/vendor/go.mau.fi/whatsmeow/internals.go +166 -146
  114. slidge_whatsapp/vendor/go.mau.fi/whatsmeow/keepalive.go +2 -2
  115. slidge_whatsapp/vendor/go.mau.fi/whatsmeow/mediaconn.go +5 -3
  116. slidge_whatsapp/vendor/go.mau.fi/whatsmeow/mediaretry.go +2 -1
  117. slidge_whatsapp/vendor/go.mau.fi/whatsmeow/message.go +270 -111
  118. slidge_whatsapp/vendor/go.mau.fi/whatsmeow/msgsecret.go +118 -31
  119. slidge_whatsapp/vendor/go.mau.fi/whatsmeow/notification.go +67 -36
  120. slidge_whatsapp/vendor/go.mau.fi/whatsmeow/pair-code.go +7 -4
  121. slidge_whatsapp/vendor/go.mau.fi/whatsmeow/pair.go +42 -18
  122. slidge_whatsapp/vendor/go.mau.fi/whatsmeow/prekeys.go +9 -5
  123. slidge_whatsapp/vendor/go.mau.fi/whatsmeow/presence.go +2 -1
  124. slidge_whatsapp/vendor/go.mau.fi/whatsmeow/privacysettings.go +10 -11
  125. slidge_whatsapp/vendor/go.mau.fi/whatsmeow/proto/waAdv/WAAdv.pb.go +39 -9
  126. slidge_whatsapp/vendor/go.mau.fi/whatsmeow/proto/waArmadilloApplication/WAArmadilloApplication.pb.go +354 -175
  127. slidge_whatsapp/vendor/go.mau.fi/whatsmeow/proto/waArmadilloApplication/WAArmadilloApplication.proto +5 -5
  128. slidge_whatsapp/vendor/go.mau.fi/whatsmeow/proto/waArmadilloXMA/WAArmadilloXMA.pb.go +158 -15
  129. slidge_whatsapp/vendor/go.mau.fi/whatsmeow/proto/waArmadilloXMA/WAArmadilloXMA.proto +1 -0
  130. slidge_whatsapp/vendor/go.mau.fi/whatsmeow/proto/waCert/WACert.pb.go +29 -9
  131. slidge_whatsapp/vendor/go.mau.fi/whatsmeow/proto/waChatLockSettings/WAProtobufsChatLockSettings.pb.go +13 -9
  132. slidge_whatsapp/vendor/go.mau.fi/whatsmeow/proto/waCommon/WACommon.pb.go +344 -31
  133. slidge_whatsapp/vendor/go.mau.fi/whatsmeow/proto/waCommon/WACommon.proto +26 -0
  134. slidge_whatsapp/vendor/go.mau.fi/whatsmeow/proto/waCompanionReg/{WAWebProtobufsCompanionReg.pb.go → WACompanionReg.pb.go} +170 -84
  135. slidge_whatsapp/vendor/go.mau.fi/whatsmeow/proto/waCompanionReg/{WAWebProtobufsCompanionReg.proto → WACompanionReg.proto} +1 -1
  136. slidge_whatsapp/vendor/go.mau.fi/whatsmeow/proto/waConsumerApplication/WAConsumerApplication.pb.go +173 -9
  137. slidge_whatsapp/vendor/go.mau.fi/whatsmeow/proto/waDeviceCapabilities/WAProtobufsDeviceCapabilities.pb.go +78 -16
  138. slidge_whatsapp/vendor/go.mau.fi/whatsmeow/proto/waDeviceCapabilities/WAProtobufsDeviceCapabilities.proto +5 -0
  139. slidge_whatsapp/vendor/go.mau.fi/whatsmeow/proto/waE2E/WAWebProtobufsE2E.pb.go +6747 -2230
  140. slidge_whatsapp/vendor/go.mau.fi/whatsmeow/proto/waE2E/WAWebProtobufsE2E.proto +294 -43
  141. slidge_whatsapp/vendor/go.mau.fi/whatsmeow/proto/waHistorySync/WAWebProtobufsHistorySync.pb.go +456 -135
  142. slidge_whatsapp/vendor/go.mau.fi/whatsmeow/proto/waHistorySync/WAWebProtobufsHistorySync.proto +14 -0
  143. slidge_whatsapp/vendor/go.mau.fi/whatsmeow/proto/waMediaTransport/WAMediaTransport.pb.go +162 -9
  144. slidge_whatsapp/vendor/go.mau.fi/whatsmeow/proto/waMediaTransport/WAMediaTransport.proto +1 -0
  145. slidge_whatsapp/vendor/go.mau.fi/whatsmeow/proto/waMmsRetry/WAMmsRetry.pb.go +32 -9
  146. slidge_whatsapp/vendor/go.mau.fi/whatsmeow/proto/waMmsRetry/WAMmsRetry.proto +1 -0
  147. slidge_whatsapp/vendor/go.mau.fi/whatsmeow/proto/waMsgApplication/WAMsgApplication.pb.go +192 -52
  148. slidge_whatsapp/vendor/go.mau.fi/whatsmeow/proto/waMsgApplication/WAMsgApplication.proto +8 -0
  149. slidge_whatsapp/vendor/go.mau.fi/whatsmeow/proto/waMsgTransport/WAMsgTransport.pb.go +60 -9
  150. slidge_whatsapp/vendor/go.mau.fi/whatsmeow/proto/waMultiDevice/WAMultiDevice.pb.go +39 -9
  151. slidge_whatsapp/vendor/go.mau.fi/whatsmeow/proto/waServerSync/WAServerSync.pb.go +61 -9
  152. slidge_whatsapp/vendor/go.mau.fi/whatsmeow/proto/waSyncAction/WASyncAction.pb.go +1051 -382
  153. slidge_whatsapp/vendor/go.mau.fi/whatsmeow/proto/waSyncAction/WASyncAction.proto +32 -0
  154. slidge_whatsapp/vendor/go.mau.fi/whatsmeow/proto/waUserPassword/WAProtobufsUserPassword.pb.go +27 -9
  155. slidge_whatsapp/vendor/go.mau.fi/whatsmeow/proto/waVnameCert/WAWebProtobufsVnameCert.pb.go +59 -9
  156. slidge_whatsapp/vendor/go.mau.fi/whatsmeow/proto/waWa6/WAWebProtobufsWa6.pb.go +382 -78
  157. slidge_whatsapp/vendor/go.mau.fi/whatsmeow/proto/waWa6/WAWebProtobufsWa6.proto +8 -0
  158. slidge_whatsapp/vendor/go.mau.fi/whatsmeow/proto/waWeb/WAWebProtobufsWeb.pb.go +555 -9
  159. slidge_whatsapp/vendor/go.mau.fi/whatsmeow/proto/waWeb/WAWebProtobufsWeb.proto +2 -0
  160. slidge_whatsapp/vendor/go.mau.fi/whatsmeow/receipt.go +13 -3
  161. slidge_whatsapp/vendor/go.mau.fi/whatsmeow/retry.go +29 -19
  162. slidge_whatsapp/vendor/go.mau.fi/whatsmeow/send.go +244 -73
  163. slidge_whatsapp/vendor/go.mau.fi/whatsmeow/sendfb.go +27 -16
  164. slidge_whatsapp/vendor/go.mau.fi/whatsmeow/store/clientpayload.go +3 -1
  165. slidge_whatsapp/vendor/go.mau.fi/whatsmeow/store/noop.go +85 -43
  166. slidge_whatsapp/vendor/go.mau.fi/whatsmeow/store/signal.go +75 -88
  167. slidge_whatsapp/vendor/go.mau.fi/whatsmeow/store/sqlstore/container.go +79 -61
  168. slidge_whatsapp/vendor/go.mau.fi/whatsmeow/store/sqlstore/lidmap.go +186 -0
  169. slidge_whatsapp/vendor/go.mau.fi/whatsmeow/store/sqlstore/store.go +291 -167
  170. slidge_whatsapp/vendor/go.mau.fi/whatsmeow/store/sqlstore/upgrades/00-latest-schema.sql +153 -0
  171. slidge_whatsapp/vendor/go.mau.fi/whatsmeow/store/sqlstore/upgrades/03-message-secrets.sql +11 -0
  172. slidge_whatsapp/vendor/go.mau.fi/whatsmeow/store/sqlstore/upgrades/04-privacy-tokens.sql +8 -0
  173. slidge_whatsapp/vendor/go.mau.fi/whatsmeow/store/sqlstore/upgrades/05-account-jid-format.sql +2 -0
  174. slidge_whatsapp/vendor/go.mau.fi/whatsmeow/store/sqlstore/upgrades/06-facebook-uuid.sql +2 -0
  175. slidge_whatsapp/vendor/go.mau.fi/whatsmeow/store/sqlstore/upgrades/07-account-lid.sql +2 -0
  176. slidge_whatsapp/vendor/go.mau.fi/whatsmeow/store/sqlstore/upgrades/08-lid-mapping.sql +5 -0
  177. slidge_whatsapp/vendor/go.mau.fi/whatsmeow/store/sqlstore/upgrades/09-decryption-buffer.sql +10 -0
  178. slidge_whatsapp/vendor/go.mau.fi/whatsmeow/store/sqlstore/upgrades/upgrades.go +22 -0
  179. slidge_whatsapp/vendor/go.mau.fi/whatsmeow/store/store.go +105 -56
  180. slidge_whatsapp/vendor/go.mau.fi/whatsmeow/types/botmap.go +210 -0
  181. slidge_whatsapp/vendor/go.mau.fi/whatsmeow/types/events/events.go +8 -0
  182. slidge_whatsapp/vendor/go.mau.fi/whatsmeow/types/group.go +15 -6
  183. slidge_whatsapp/vendor/go.mau.fi/whatsmeow/types/jid.go +7 -8
  184. slidge_whatsapp/vendor/go.mau.fi/whatsmeow/types/message.go +17 -0
  185. slidge_whatsapp/vendor/go.mau.fi/whatsmeow/update.go +3 -2
  186. slidge_whatsapp/vendor/go.mau.fi/whatsmeow/upload.go +1 -1
  187. slidge_whatsapp/vendor/go.mau.fi/whatsmeow/user.go +45 -29
  188. slidge_whatsapp/vendor/golang.org/x/exp/LICENSE +27 -0
  189. slidge_whatsapp/vendor/golang.org/x/exp/PATENTS +22 -0
  190. slidge_whatsapp/vendor/golang.org/x/exp/constraints/constraints.go +54 -0
  191. slidge_whatsapp/vendor/golang.org/x/net/http/httpguts/guts.go +50 -0
  192. slidge_whatsapp/vendor/golang.org/x/net/http/httpguts/httplex.go +347 -0
  193. slidge_whatsapp/vendor/golang.org/x/net/http2/.gitignore +2 -0
  194. slidge_whatsapp/vendor/golang.org/x/net/http2/ascii.go +53 -0
  195. slidge_whatsapp/vendor/golang.org/x/net/http2/ciphers.go +641 -0
  196. slidge_whatsapp/vendor/golang.org/x/net/http2/client_conn_pool.go +311 -0
  197. slidge_whatsapp/vendor/golang.org/x/net/http2/config.go +122 -0
  198. slidge_whatsapp/vendor/golang.org/x/net/http2/config_go124.go +61 -0
  199. slidge_whatsapp/vendor/golang.org/x/net/http2/config_pre_go124.go +16 -0
  200. slidge_whatsapp/vendor/golang.org/x/net/http2/databuffer.go +149 -0
  201. slidge_whatsapp/vendor/golang.org/x/net/http2/errors.go +145 -0
  202. slidge_whatsapp/vendor/golang.org/x/net/http2/flow.go +120 -0
  203. slidge_whatsapp/vendor/golang.org/x/net/http2/frame.go +1702 -0
  204. slidge_whatsapp/vendor/golang.org/x/net/http2/gotrack.go +170 -0
  205. slidge_whatsapp/vendor/golang.org/x/net/http2/hpack/encode.go +245 -0
  206. slidge_whatsapp/vendor/golang.org/x/net/http2/hpack/hpack.go +523 -0
  207. slidge_whatsapp/vendor/golang.org/x/net/http2/hpack/huffman.go +226 -0
  208. slidge_whatsapp/vendor/golang.org/x/net/http2/hpack/static_table.go +188 -0
  209. slidge_whatsapp/vendor/golang.org/x/net/http2/hpack/tables.go +403 -0
  210. slidge_whatsapp/vendor/golang.org/x/net/http2/http2.go +432 -0
  211. slidge_whatsapp/vendor/golang.org/x/net/http2/pipe.go +184 -0
  212. slidge_whatsapp/vendor/golang.org/x/net/http2/server.go +3350 -0
  213. slidge_whatsapp/vendor/golang.org/x/net/http2/timer.go +20 -0
  214. slidge_whatsapp/vendor/golang.org/x/net/http2/transport.go +3287 -0
  215. slidge_whatsapp/vendor/golang.org/x/net/http2/unencrypted.go +32 -0
  216. slidge_whatsapp/vendor/golang.org/x/net/http2/write.go +381 -0
  217. slidge_whatsapp/vendor/golang.org/x/net/http2/writesched.go +251 -0
  218. slidge_whatsapp/vendor/golang.org/x/net/http2/writesched_priority.go +451 -0
  219. slidge_whatsapp/vendor/golang.org/x/net/http2/writesched_random.go +77 -0
  220. slidge_whatsapp/vendor/golang.org/x/net/http2/writesched_roundrobin.go +119 -0
  221. slidge_whatsapp/vendor/golang.org/x/net/idna/go118.go +13 -0
  222. slidge_whatsapp/vendor/golang.org/x/net/idna/idna10.0.0.go +769 -0
  223. slidge_whatsapp/vendor/golang.org/x/net/idna/idna9.0.0.go +717 -0
  224. slidge_whatsapp/vendor/golang.org/x/net/idna/pre_go118.go +11 -0
  225. slidge_whatsapp/vendor/golang.org/x/net/idna/punycode.go +217 -0
  226. slidge_whatsapp/vendor/golang.org/x/net/idna/tables10.0.0.go +4559 -0
  227. slidge_whatsapp/vendor/golang.org/x/net/idna/tables11.0.0.go +4653 -0
  228. slidge_whatsapp/vendor/golang.org/x/net/idna/tables12.0.0.go +4733 -0
  229. slidge_whatsapp/vendor/golang.org/x/net/idna/tables13.0.0.go +4959 -0
  230. slidge_whatsapp/vendor/golang.org/x/net/idna/tables15.0.0.go +5144 -0
  231. slidge_whatsapp/vendor/golang.org/x/net/idna/tables9.0.0.go +4486 -0
  232. slidge_whatsapp/vendor/golang.org/x/net/idna/trie.go +51 -0
  233. slidge_whatsapp/vendor/golang.org/x/net/idna/trie12.0.0.go +30 -0
  234. slidge_whatsapp/vendor/golang.org/x/net/idna/trie13.0.0.go +30 -0
  235. slidge_whatsapp/vendor/golang.org/x/net/idna/trieval.go +119 -0
  236. slidge_whatsapp/vendor/golang.org/x/net/internal/httpcommon/ascii.go +53 -0
  237. slidge_whatsapp/vendor/golang.org/x/net/internal/httpcommon/headermap.go +115 -0
  238. slidge_whatsapp/vendor/golang.org/x/net/internal/httpcommon/request.go +467 -0
  239. slidge_whatsapp/vendor/golang.org/x/sys/unix/syscall_darwin.go +148 -1
  240. slidge_whatsapp/vendor/golang.org/x/sys/unix/syscall_linux.go +16 -26
  241. slidge_whatsapp/vendor/golang.org/x/sys/unix/zsyscall_darwin_amd64.go +84 -0
  242. slidge_whatsapp/vendor/golang.org/x/sys/unix/zsyscall_darwin_amd64.s +20 -0
  243. slidge_whatsapp/vendor/golang.org/x/sys/unix/zsyscall_darwin_arm64.go +84 -0
  244. slidge_whatsapp/vendor/golang.org/x/sys/unix/zsyscall_darwin_arm64.s +20 -0
  245. slidge_whatsapp/vendor/golang.org/x/sys/windows/security_windows.go +44 -5
  246. slidge_whatsapp/vendor/golang.org/x/sys/windows/syscall_windows.go +4 -2
  247. slidge_whatsapp/vendor/golang.org/x/sys/windows/types_windows.go +239 -0
  248. slidge_whatsapp/vendor/golang.org/x/sys/windows/zsyscall_windows.go +9 -0
  249. slidge_whatsapp/vendor/golang.org/x/text/LICENSE +27 -0
  250. slidge_whatsapp/vendor/golang.org/x/text/PATENTS +22 -0
  251. slidge_whatsapp/vendor/golang.org/x/text/secure/bidirule/bidirule.go +336 -0
  252. slidge_whatsapp/vendor/golang.org/x/text/secure/bidirule/bidirule10.0.0.go +11 -0
  253. slidge_whatsapp/vendor/golang.org/x/text/secure/bidirule/bidirule9.0.0.go +14 -0
  254. slidge_whatsapp/vendor/golang.org/x/text/transform/transform.go +709 -0
  255. slidge_whatsapp/vendor/golang.org/x/text/unicode/bidi/bidi.go +359 -0
  256. slidge_whatsapp/vendor/golang.org/x/text/unicode/bidi/bracket.go +335 -0
  257. slidge_whatsapp/vendor/golang.org/x/text/unicode/bidi/core.go +1071 -0
  258. slidge_whatsapp/vendor/golang.org/x/text/unicode/bidi/prop.go +206 -0
  259. slidge_whatsapp/vendor/golang.org/x/text/unicode/bidi/tables10.0.0.go +1815 -0
  260. slidge_whatsapp/vendor/golang.org/x/text/unicode/bidi/tables11.0.0.go +1887 -0
  261. slidge_whatsapp/vendor/golang.org/x/text/unicode/bidi/tables12.0.0.go +1923 -0
  262. slidge_whatsapp/vendor/golang.org/x/text/unicode/bidi/tables13.0.0.go +1955 -0
  263. slidge_whatsapp/vendor/golang.org/x/text/unicode/bidi/tables15.0.0.go +2042 -0
  264. slidge_whatsapp/vendor/golang.org/x/text/unicode/bidi/tables9.0.0.go +1781 -0
  265. slidge_whatsapp/vendor/golang.org/x/text/unicode/bidi/trieval.go +48 -0
  266. slidge_whatsapp/vendor/golang.org/x/text/unicode/norm/composition.go +512 -0
  267. slidge_whatsapp/vendor/golang.org/x/text/unicode/norm/forminfo.go +279 -0
  268. slidge_whatsapp/vendor/golang.org/x/text/unicode/norm/input.go +109 -0
  269. slidge_whatsapp/vendor/golang.org/x/text/unicode/norm/iter.go +458 -0
  270. slidge_whatsapp/vendor/golang.org/x/text/unicode/norm/normalize.go +610 -0
  271. slidge_whatsapp/vendor/golang.org/x/text/unicode/norm/readwriter.go +125 -0
  272. slidge_whatsapp/vendor/golang.org/x/text/unicode/norm/tables10.0.0.go +7657 -0
  273. slidge_whatsapp/vendor/golang.org/x/text/unicode/norm/tables11.0.0.go +7693 -0
  274. slidge_whatsapp/vendor/golang.org/x/text/unicode/norm/tables12.0.0.go +7710 -0
  275. slidge_whatsapp/vendor/golang.org/x/text/unicode/norm/tables13.0.0.go +7760 -0
  276. slidge_whatsapp/vendor/golang.org/x/text/unicode/norm/tables15.0.0.go +7907 -0
  277. slidge_whatsapp/vendor/golang.org/x/text/unicode/norm/tables9.0.0.go +7637 -0
  278. slidge_whatsapp/vendor/golang.org/x/text/unicode/norm/transform.go +88 -0
  279. slidge_whatsapp/vendor/golang.org/x/text/unicode/norm/trie.go +54 -0
  280. slidge_whatsapp/vendor/google.golang.org/protobuf/internal/editiondefaults/editions_defaults.binpb +0 -0
  281. slidge_whatsapp/vendor/google.golang.org/protobuf/internal/filedesc/editions.go +3 -0
  282. slidge_whatsapp/vendor/google.golang.org/protobuf/internal/genid/descriptor_gen.go +16 -0
  283. slidge_whatsapp/vendor/google.golang.org/protobuf/internal/strs/{strings_unsafe_go121.go → strings_unsafe.go} +0 -2
  284. slidge_whatsapp/vendor/google.golang.org/protobuf/internal/version/version.go +1 -1
  285. slidge_whatsapp/vendor/google.golang.org/protobuf/proto/merge.go +6 -0
  286. slidge_whatsapp/vendor/google.golang.org/protobuf/reflect/protoreflect/source_gen.go +2 -0
  287. slidge_whatsapp/vendor/google.golang.org/protobuf/reflect/protoreflect/{value_unsafe_go121.go → value_unsafe.go} +0 -2
  288. slidge_whatsapp/vendor/modules.txt +38 -13
  289. {slidge_whatsapp-0.2.5.dist-info → slidge_whatsapp-0.2.6.dist-info}/METADATA +1 -1
  290. {slidge_whatsapp-0.2.5.dist-info → slidge_whatsapp-0.2.6.dist-info}/RECORD +293 -180
  291. {slidge_whatsapp-0.2.5.dist-info → slidge_whatsapp-0.2.6.dist-info}/WHEEL +1 -1
  292. slidge_whatsapp/vendor/github.com/rs/zerolog/CNAME +0 -1
  293. slidge_whatsapp/vendor/github.com/rs/zerolog/_config.yml +0 -1
  294. slidge_whatsapp/vendor/go.mau.fi/whatsmeow/proto/waAdv/WAAdv.pb.raw +0 -0
  295. slidge_whatsapp/vendor/go.mau.fi/whatsmeow/proto/waArmadilloApplication/WAArmadilloApplication.pb.raw +0 -0
  296. slidge_whatsapp/vendor/go.mau.fi/whatsmeow/proto/waArmadilloXMA/WAArmadilloXMA.pb.raw +0 -0
  297. slidge_whatsapp/vendor/go.mau.fi/whatsmeow/proto/waCert/WACert.pb.raw +0 -23
  298. slidge_whatsapp/vendor/go.mau.fi/whatsmeow/proto/waChatLockSettings/WAProtobufsChatLockSettings.pb.raw +0 -7
  299. slidge_whatsapp/vendor/go.mau.fi/whatsmeow/proto/waCommon/WACommon.pb.raw +0 -0
  300. slidge_whatsapp/vendor/go.mau.fi/whatsmeow/proto/waCompanionReg/WAWebProtobufsCompanionReg.pb.raw +0 -0
  301. slidge_whatsapp/vendor/go.mau.fi/whatsmeow/proto/waConsumerApplication/WAConsumerApplication.pb.raw +0 -0
  302. slidge_whatsapp/vendor/go.mau.fi/whatsmeow/proto/waDeviceCapabilities/WAProtobufsDeviceCapabilities.pb.raw +0 -0
  303. slidge_whatsapp/vendor/go.mau.fi/whatsmeow/proto/waE2E/WAWebProtobufsE2E.pb.raw +0 -0
  304. slidge_whatsapp/vendor/go.mau.fi/whatsmeow/proto/waHistorySync/WAWebProtobufsHistorySync.pb.raw +0 -0
  305. slidge_whatsapp/vendor/go.mau.fi/whatsmeow/proto/waMediaTransport/WAMediaTransport.pb.raw +0 -0
  306. slidge_whatsapp/vendor/go.mau.fi/whatsmeow/proto/waMmsRetry/WAMmsRetry.pb.raw +0 -0
  307. slidge_whatsapp/vendor/go.mau.fi/whatsmeow/proto/waMsgApplication/WAMsgApplication.pb.raw +0 -0
  308. slidge_whatsapp/vendor/go.mau.fi/whatsmeow/proto/waMsgTransport/WAMsgTransport.pb.raw +0 -0
  309. slidge_whatsapp/vendor/go.mau.fi/whatsmeow/proto/waMultiDevice/WAMultiDevice.pb.raw +0 -0
  310. slidge_whatsapp/vendor/go.mau.fi/whatsmeow/proto/waServerSync/WAServerSync.pb.raw +0 -0
  311. slidge_whatsapp/vendor/go.mau.fi/whatsmeow/proto/waSyncAction/WASyncAction.pb.raw +0 -0
  312. slidge_whatsapp/vendor/go.mau.fi/whatsmeow/proto/waUserPassword/WAProtobufsUserPassword.pb.raw +0 -0
  313. slidge_whatsapp/vendor/go.mau.fi/whatsmeow/proto/waVnameCert/WAWebProtobufsVnameCert.pb.raw +0 -0
  314. slidge_whatsapp/vendor/go.mau.fi/whatsmeow/proto/waWa6/WAWebProtobufsWa6.pb.raw +0 -0
  315. slidge_whatsapp/vendor/go.mau.fi/whatsmeow/proto/waWeb/WAWebProtobufsWeb.pb.raw +0 -0
  316. slidge_whatsapp/vendor/go.mau.fi/whatsmeow/store/sqlstore/upgrade.go +0 -296
  317. slidge_whatsapp/vendor/google.golang.org/protobuf/internal/strs/strings_unsafe_go120.go +0 -94
  318. slidge_whatsapp/vendor/google.golang.org/protobuf/reflect/protoreflect/value_unsafe_go120.go +0 -98
  319. {slidge_whatsapp-0.2.5.dist-info → slidge_whatsapp-0.2.6.dist-info}/LICENSE +0 -0
  320. {slidge_whatsapp-0.2.5.dist-info → slidge_whatsapp-0.2.6.dist-info}/entry_points.txt +0 -0
@@ -0,0 +1,359 @@
1
+ // Copyright 2015 The Go Authors. All rights reserved.
2
+ // Use of this source code is governed by a BSD-style
3
+ // license that can be found in the LICENSE file.
4
+
5
+ //go:generate go run gen.go gen_trieval.go gen_ranges.go
6
+
7
+ // Package bidi contains functionality for bidirectional text support.
8
+ //
9
+ // See https://www.unicode.org/reports/tr9.
10
+ //
11
+ // NOTE: UNDER CONSTRUCTION. This API may change in backwards incompatible ways
12
+ // and without notice.
13
+ package bidi // import "golang.org/x/text/unicode/bidi"
14
+
15
+ // TODO
16
+ // - Transformer for reordering?
17
+ // - Transformer (validator, really) for Bidi Rule.
18
+
19
+ import (
20
+ "bytes"
21
+ )
22
+
23
+ // This API tries to avoid dealing with embedding levels for now. Under the hood
24
+ // these will be computed, but the question is to which extent the user should
25
+ // know they exist. We should at some point allow the user to specify an
26
+ // embedding hierarchy, though.
27
+
28
+ // A Direction indicates the overall flow of text.
29
+ type Direction int
30
+
31
+ const (
32
+ // LeftToRight indicates the text contains no right-to-left characters and
33
+ // that either there are some left-to-right characters or the option
34
+ // DefaultDirection(LeftToRight) was passed.
35
+ LeftToRight Direction = iota
36
+
37
+ // RightToLeft indicates the text contains no left-to-right characters and
38
+ // that either there are some right-to-left characters or the option
39
+ // DefaultDirection(RightToLeft) was passed.
40
+ RightToLeft
41
+
42
+ // Mixed indicates text contains both left-to-right and right-to-left
43
+ // characters.
44
+ Mixed
45
+
46
+ // Neutral means that text contains no left-to-right and right-to-left
47
+ // characters and that no default direction has been set.
48
+ Neutral
49
+ )
50
+
51
+ type options struct {
52
+ defaultDirection Direction
53
+ }
54
+
55
+ // An Option is an option for Bidi processing.
56
+ type Option func(*options)
57
+
58
+ // ICU allows the user to define embedding levels. This may be used, for example,
59
+ // to use hierarchical structure of markup languages to define embeddings.
60
+ // The following option may be a way to expose this functionality in this API.
61
+ // // LevelFunc sets a function that associates nesting levels with the given text.
62
+ // // The levels function will be called with monotonically increasing values for p.
63
+ // func LevelFunc(levels func(p int) int) Option {
64
+ // panic("unimplemented")
65
+ // }
66
+
67
+ // DefaultDirection sets the default direction for a Paragraph. The direction is
68
+ // overridden if the text contains directional characters.
69
+ func DefaultDirection(d Direction) Option {
70
+ return func(opts *options) {
71
+ opts.defaultDirection = d
72
+ }
73
+ }
74
+
75
+ // A Paragraph holds a single Paragraph for Bidi processing.
76
+ type Paragraph struct {
77
+ p []byte
78
+ o Ordering
79
+ opts []Option
80
+ types []Class
81
+ pairTypes []bracketType
82
+ pairValues []rune
83
+ runes []rune
84
+ options options
85
+ }
86
+
87
+ // Initialize the p.pairTypes, p.pairValues and p.types from the input previously
88
+ // set by p.SetBytes() or p.SetString(). Also limit the input up to (and including) a paragraph
89
+ // separator (bidi class B).
90
+ //
91
+ // The function p.Order() needs these values to be set, so this preparation could be postponed.
92
+ // But since the SetBytes and SetStrings functions return the length of the input up to the paragraph
93
+ // separator, the whole input needs to be processed anyway and should not be done twice.
94
+ //
95
+ // The function has the same return values as SetBytes() / SetString()
96
+ func (p *Paragraph) prepareInput() (n int, err error) {
97
+ p.runes = bytes.Runes(p.p)
98
+ bytecount := 0
99
+ // clear slices from previous SetString or SetBytes
100
+ p.pairTypes = nil
101
+ p.pairValues = nil
102
+ p.types = nil
103
+
104
+ for _, r := range p.runes {
105
+ props, i := LookupRune(r)
106
+ bytecount += i
107
+ cls := props.Class()
108
+ if cls == B {
109
+ return bytecount, nil
110
+ }
111
+ p.types = append(p.types, cls)
112
+ if props.IsOpeningBracket() {
113
+ p.pairTypes = append(p.pairTypes, bpOpen)
114
+ p.pairValues = append(p.pairValues, r)
115
+ } else if props.IsBracket() {
116
+ // this must be a closing bracket,
117
+ // since IsOpeningBracket is not true
118
+ p.pairTypes = append(p.pairTypes, bpClose)
119
+ p.pairValues = append(p.pairValues, r)
120
+ } else {
121
+ p.pairTypes = append(p.pairTypes, bpNone)
122
+ p.pairValues = append(p.pairValues, 0)
123
+ }
124
+ }
125
+ return bytecount, nil
126
+ }
127
+
128
+ // SetBytes configures p for the given paragraph text. It replaces text
129
+ // previously set by SetBytes or SetString. If b contains a paragraph separator
130
+ // it will only process the first paragraph and report the number of bytes
131
+ // consumed from b including this separator. Error may be non-nil if options are
132
+ // given.
133
+ func (p *Paragraph) SetBytes(b []byte, opts ...Option) (n int, err error) {
134
+ p.p = b
135
+ p.opts = opts
136
+ return p.prepareInput()
137
+ }
138
+
139
+ // SetString configures s for the given paragraph text. It replaces text
140
+ // previously set by SetBytes or SetString. If s contains a paragraph separator
141
+ // it will only process the first paragraph and report the number of bytes
142
+ // consumed from s including this separator. Error may be non-nil if options are
143
+ // given.
144
+ func (p *Paragraph) SetString(s string, opts ...Option) (n int, err error) {
145
+ p.p = []byte(s)
146
+ p.opts = opts
147
+ return p.prepareInput()
148
+ }
149
+
150
+ // IsLeftToRight reports whether the principle direction of rendering for this
151
+ // paragraphs is left-to-right. If this returns false, the principle direction
152
+ // of rendering is right-to-left.
153
+ func (p *Paragraph) IsLeftToRight() bool {
154
+ return p.Direction() == LeftToRight
155
+ }
156
+
157
+ // Direction returns the direction of the text of this paragraph.
158
+ //
159
+ // The direction may be LeftToRight, RightToLeft, Mixed, or Neutral.
160
+ func (p *Paragraph) Direction() Direction {
161
+ return p.o.Direction()
162
+ }
163
+
164
+ // TODO: what happens if the position is > len(input)? This should return an error.
165
+
166
+ // RunAt reports the Run at the given position of the input text.
167
+ //
168
+ // This method can be used for computing line breaks on paragraphs.
169
+ func (p *Paragraph) RunAt(pos int) Run {
170
+ c := 0
171
+ runNumber := 0
172
+ for i, r := range p.o.runes {
173
+ c += len(r)
174
+ if pos < c {
175
+ runNumber = i
176
+ }
177
+ }
178
+ return p.o.Run(runNumber)
179
+ }
180
+
181
+ func calculateOrdering(levels []level, runes []rune) Ordering {
182
+ var curDir Direction
183
+
184
+ prevDir := Neutral
185
+ prevI := 0
186
+
187
+ o := Ordering{}
188
+ // lvl = 0,2,4,...: left to right
189
+ // lvl = 1,3,5,...: right to left
190
+ for i, lvl := range levels {
191
+ if lvl%2 == 0 {
192
+ curDir = LeftToRight
193
+ } else {
194
+ curDir = RightToLeft
195
+ }
196
+ if curDir != prevDir {
197
+ if i > 0 {
198
+ o.runes = append(o.runes, runes[prevI:i])
199
+ o.directions = append(o.directions, prevDir)
200
+ o.startpos = append(o.startpos, prevI)
201
+ }
202
+ prevI = i
203
+ prevDir = curDir
204
+ }
205
+ }
206
+ o.runes = append(o.runes, runes[prevI:])
207
+ o.directions = append(o.directions, prevDir)
208
+ o.startpos = append(o.startpos, prevI)
209
+ return o
210
+ }
211
+
212
+ // Order computes the visual ordering of all the runs in a Paragraph.
213
+ func (p *Paragraph) Order() (Ordering, error) {
214
+ if len(p.types) == 0 {
215
+ return Ordering{}, nil
216
+ }
217
+
218
+ for _, fn := range p.opts {
219
+ fn(&p.options)
220
+ }
221
+ lvl := level(-1)
222
+ if p.options.defaultDirection == RightToLeft {
223
+ lvl = 1
224
+ }
225
+ para, err := newParagraph(p.types, p.pairTypes, p.pairValues, lvl)
226
+ if err != nil {
227
+ return Ordering{}, err
228
+ }
229
+
230
+ levels := para.getLevels([]int{len(p.types)})
231
+
232
+ p.o = calculateOrdering(levels, p.runes)
233
+ return p.o, nil
234
+ }
235
+
236
+ // Line computes the visual ordering of runs for a single line starting and
237
+ // ending at the given positions in the original text.
238
+ func (p *Paragraph) Line(start, end int) (Ordering, error) {
239
+ lineTypes := p.types[start:end]
240
+ para, err := newParagraph(lineTypes, p.pairTypes[start:end], p.pairValues[start:end], -1)
241
+ if err != nil {
242
+ return Ordering{}, err
243
+ }
244
+ levels := para.getLevels([]int{len(lineTypes)})
245
+ o := calculateOrdering(levels, p.runes[start:end])
246
+ return o, nil
247
+ }
248
+
249
+ // An Ordering holds the computed visual order of runs of a Paragraph. Calling
250
+ // SetBytes or SetString on the originating Paragraph invalidates an Ordering.
251
+ // The methods of an Ordering should only be called by one goroutine at a time.
252
+ type Ordering struct {
253
+ runes [][]rune
254
+ directions []Direction
255
+ startpos []int
256
+ }
257
+
258
+ // Direction reports the directionality of the runs.
259
+ //
260
+ // The direction may be LeftToRight, RightToLeft, Mixed, or Neutral.
261
+ func (o *Ordering) Direction() Direction {
262
+ return o.directions[0]
263
+ }
264
+
265
+ // NumRuns returns the number of runs.
266
+ func (o *Ordering) NumRuns() int {
267
+ return len(o.runes)
268
+ }
269
+
270
+ // Run returns the ith run within the ordering.
271
+ func (o *Ordering) Run(i int) Run {
272
+ r := Run{
273
+ runes: o.runes[i],
274
+ direction: o.directions[i],
275
+ startpos: o.startpos[i],
276
+ }
277
+ return r
278
+ }
279
+
280
+ // TODO: perhaps with options.
281
+ // // Reorder creates a reader that reads the runes in visual order per character.
282
+ // // Modifiers remain after the runes they modify.
283
+ // func (l *Runs) Reorder() io.Reader {
284
+ // panic("unimplemented")
285
+ // }
286
+
287
+ // A Run is a continuous sequence of characters of a single direction.
288
+ type Run struct {
289
+ runes []rune
290
+ direction Direction
291
+ startpos int
292
+ }
293
+
294
+ // String returns the text of the run in its original order.
295
+ func (r *Run) String() string {
296
+ return string(r.runes)
297
+ }
298
+
299
+ // Bytes returns the text of the run in its original order.
300
+ func (r *Run) Bytes() []byte {
301
+ return []byte(r.String())
302
+ }
303
+
304
+ // TODO: methods for
305
+ // - Display order
306
+ // - headers and footers
307
+ // - bracket replacement.
308
+
309
+ // Direction reports the direction of the run.
310
+ func (r *Run) Direction() Direction {
311
+ return r.direction
312
+ }
313
+
314
+ // Pos returns the position of the Run within the text passed to SetBytes or SetString of the
315
+ // originating Paragraph value.
316
+ func (r *Run) Pos() (start, end int) {
317
+ return r.startpos, r.startpos + len(r.runes) - 1
318
+ }
319
+
320
+ // AppendReverse reverses the order of characters of in, appends them to out,
321
+ // and returns the result. Modifiers will still follow the runes they modify.
322
+ // Brackets are replaced with their counterparts.
323
+ func AppendReverse(out, in []byte) []byte {
324
+ ret := make([]byte, len(in)+len(out))
325
+ copy(ret, out)
326
+ inRunes := bytes.Runes(in)
327
+
328
+ for i, r := range inRunes {
329
+ prop, _ := LookupRune(r)
330
+ if prop.IsBracket() {
331
+ inRunes[i] = prop.reverseBracket(r)
332
+ }
333
+ }
334
+
335
+ for i, j := 0, len(inRunes)-1; i < j; i, j = i+1, j-1 {
336
+ inRunes[i], inRunes[j] = inRunes[j], inRunes[i]
337
+ }
338
+ copy(ret[len(out):], string(inRunes))
339
+
340
+ return ret
341
+ }
342
+
343
+ // ReverseString reverses the order of characters in s and returns a new string.
344
+ // Modifiers will still follow the runes they modify. Brackets are replaced with
345
+ // their counterparts.
346
+ func ReverseString(s string) string {
347
+ input := []rune(s)
348
+ li := len(input)
349
+ ret := make([]rune, li)
350
+ for i, r := range input {
351
+ prop, _ := LookupRune(r)
352
+ if prop.IsBracket() {
353
+ ret[li-i-1] = prop.reverseBracket(r)
354
+ } else {
355
+ ret[li-i-1] = r
356
+ }
357
+ }
358
+ return string(ret)
359
+ }
@@ -0,0 +1,335 @@
1
+ // Copyright 2015 The Go Authors. All rights reserved.
2
+ // Use of this source code is governed by a BSD-style
3
+ // license that can be found in the LICENSE file.
4
+
5
+ package bidi
6
+
7
+ import (
8
+ "container/list"
9
+ "fmt"
10
+ "sort"
11
+ )
12
+
13
+ // This file contains a port of the reference implementation of the
14
+ // Bidi Parentheses Algorithm:
15
+ // https://www.unicode.org/Public/PROGRAMS/BidiReferenceJava/BidiPBAReference.java
16
+ //
17
+ // The implementation in this file covers definitions BD14-BD16 and rule N0
18
+ // of UAX#9.
19
+ //
20
+ // Some preprocessing is done for each rune before data is passed to this
21
+ // algorithm:
22
+ // - opening and closing brackets are identified
23
+ // - a bracket pair type, like '(' and ')' is assigned a unique identifier that
24
+ // is identical for the opening and closing bracket. It is left to do these
25
+ // mappings.
26
+ // - The BPA algorithm requires that bracket characters that are canonical
27
+ // equivalents of each other be able to be substituted for each other.
28
+ // It is the responsibility of the caller to do this canonicalization.
29
+ //
30
+ // In implementing BD16, this implementation departs slightly from the "logical"
31
+ // algorithm defined in UAX#9. In particular, the stack referenced there
32
+ // supports operations that go beyond a "basic" stack. An equivalent
33
+ // implementation based on a linked list is used here.
34
+
35
+ // Bidi_Paired_Bracket_Type
36
+ // BD14. An opening paired bracket is a character whose
37
+ // Bidi_Paired_Bracket_Type property value is Open.
38
+ //
39
+ // BD15. A closing paired bracket is a character whose
40
+ // Bidi_Paired_Bracket_Type property value is Close.
41
+ type bracketType byte
42
+
43
+ const (
44
+ bpNone bracketType = iota
45
+ bpOpen
46
+ bpClose
47
+ )
48
+
49
+ // bracketPair holds a pair of index values for opening and closing bracket
50
+ // location of a bracket pair.
51
+ type bracketPair struct {
52
+ opener int
53
+ closer int
54
+ }
55
+
56
+ func (b *bracketPair) String() string {
57
+ return fmt.Sprintf("(%v, %v)", b.opener, b.closer)
58
+ }
59
+
60
+ // bracketPairs is a slice of bracketPairs with a sort.Interface implementation.
61
+ type bracketPairs []bracketPair
62
+
63
+ func (b bracketPairs) Len() int { return len(b) }
64
+ func (b bracketPairs) Swap(i, j int) { b[i], b[j] = b[j], b[i] }
65
+ func (b bracketPairs) Less(i, j int) bool { return b[i].opener < b[j].opener }
66
+
67
+ // resolvePairedBrackets runs the paired bracket part of the UBA algorithm.
68
+ //
69
+ // For each rune, it takes the indexes into the original string, the class the
70
+ // bracket type (in pairTypes) and the bracket identifier (pairValues). It also
71
+ // takes the direction type for the start-of-sentence and the embedding level.
72
+ //
73
+ // The identifiers for bracket types are the rune of the canonicalized opening
74
+ // bracket for brackets (open or close) or 0 for runes that are not brackets.
75
+ func resolvePairedBrackets(s *isolatingRunSequence) {
76
+ p := bracketPairer{
77
+ sos: s.sos,
78
+ openers: list.New(),
79
+ codesIsolatedRun: s.types,
80
+ indexes: s.indexes,
81
+ }
82
+ dirEmbed := L
83
+ if s.level&1 != 0 {
84
+ dirEmbed = R
85
+ }
86
+ p.locateBrackets(s.p.pairTypes, s.p.pairValues)
87
+ p.resolveBrackets(dirEmbed, s.p.initialTypes)
88
+ }
89
+
90
+ type bracketPairer struct {
91
+ sos Class // direction corresponding to start of sequence
92
+
93
+ // The following is a restatement of BD 16 using non-algorithmic language.
94
+ //
95
+ // A bracket pair is a pair of characters consisting of an opening
96
+ // paired bracket and a closing paired bracket such that the
97
+ // Bidi_Paired_Bracket property value of the former equals the latter,
98
+ // subject to the following constraints.
99
+ // - both characters of a pair occur in the same isolating run sequence
100
+ // - the closing character of a pair follows the opening character
101
+ // - any bracket character can belong at most to one pair, the earliest possible one
102
+ // - any bracket character not part of a pair is treated like an ordinary character
103
+ // - pairs may nest properly, but their spans may not overlap otherwise
104
+
105
+ // Bracket characters with canonical decompositions are supposed to be
106
+ // treated as if they had been normalized, to allow normalized and non-
107
+ // normalized text to give the same result. In this implementation that step
108
+ // is pushed out to the caller. The caller has to ensure that the pairValue
109
+ // slices contain the rune of the opening bracket after normalization for
110
+ // any opening or closing bracket.
111
+
112
+ openers *list.List // list of positions for opening brackets
113
+
114
+ // bracket pair positions sorted by location of opening bracket
115
+ pairPositions bracketPairs
116
+
117
+ codesIsolatedRun []Class // directional bidi codes for an isolated run
118
+ indexes []int // array of index values into the original string
119
+
120
+ }
121
+
122
+ // matchOpener reports whether characters at given positions form a matching
123
+ // bracket pair.
124
+ func (p *bracketPairer) matchOpener(pairValues []rune, opener, closer int) bool {
125
+ return pairValues[p.indexes[opener]] == pairValues[p.indexes[closer]]
126
+ }
127
+
128
+ const maxPairingDepth = 63
129
+
130
+ // locateBrackets locates matching bracket pairs according to BD16.
131
+ //
132
+ // This implementation uses a linked list instead of a stack, because, while
133
+ // elements are added at the front (like a push) they are not generally removed
134
+ // in atomic 'pop' operations, reducing the benefit of the stack archetype.
135
+ func (p *bracketPairer) locateBrackets(pairTypes []bracketType, pairValues []rune) {
136
+ // traverse the run
137
+ // do that explicitly (not in a for-each) so we can record position
138
+ for i, index := range p.indexes {
139
+
140
+ // look at the bracket type for each character
141
+ if pairTypes[index] == bpNone || p.codesIsolatedRun[i] != ON {
142
+ // continue scanning
143
+ continue
144
+ }
145
+ switch pairTypes[index] {
146
+ case bpOpen:
147
+ // check if maximum pairing depth reached
148
+ if p.openers.Len() == maxPairingDepth {
149
+ p.openers.Init()
150
+ return
151
+ }
152
+ // remember opener location, most recent first
153
+ p.openers.PushFront(i)
154
+
155
+ case bpClose:
156
+ // see if there is a match
157
+ count := 0
158
+ for elem := p.openers.Front(); elem != nil; elem = elem.Next() {
159
+ count++
160
+ opener := elem.Value.(int)
161
+ if p.matchOpener(pairValues, opener, i) {
162
+ // if the opener matches, add nested pair to the ordered list
163
+ p.pairPositions = append(p.pairPositions, bracketPair{opener, i})
164
+ // remove up to and including matched opener
165
+ for ; count > 0; count-- {
166
+ p.openers.Remove(p.openers.Front())
167
+ }
168
+ break
169
+ }
170
+ }
171
+ sort.Sort(p.pairPositions)
172
+ // if we get here, the closing bracket matched no openers
173
+ // and gets ignored
174
+ }
175
+ }
176
+ }
177
+
178
+ // Bracket pairs within an isolating run sequence are processed as units so
179
+ // that both the opening and the closing paired bracket in a pair resolve to
180
+ // the same direction.
181
+ //
182
+ // N0. Process bracket pairs in an isolating run sequence sequentially in
183
+ // the logical order of the text positions of the opening paired brackets
184
+ // using the logic given below. Within this scope, bidirectional types EN
185
+ // and AN are treated as R.
186
+ //
187
+ // Identify the bracket pairs in the current isolating run sequence
188
+ // according to BD16. For each bracket-pair element in the list of pairs of
189
+ // text positions:
190
+ //
191
+ // a Inspect the bidirectional types of the characters enclosed within the
192
+ // bracket pair.
193
+ //
194
+ // b If any strong type (either L or R) matching the embedding direction is
195
+ // found, set the type for both brackets in the pair to match the embedding
196
+ // direction.
197
+ //
198
+ // o [ e ] o -> o e e e o
199
+ //
200
+ // o [ o e ] -> o e o e e
201
+ //
202
+ // o [ NI e ] -> o e NI e e
203
+ //
204
+ // c Otherwise, if a strong type (opposite the embedding direction) is
205
+ // found, test for adjacent strong types as follows: 1 First, check
206
+ // backwards before the opening paired bracket until the first strong type
207
+ // (L, R, or sos) is found. If that first preceding strong type is opposite
208
+ // the embedding direction, then set the type for both brackets in the pair
209
+ // to that type. 2 Otherwise, set the type for both brackets in the pair to
210
+ // the embedding direction.
211
+ //
212
+ // o [ o ] e -> o o o o e
213
+ //
214
+ // o [ o NI ] o -> o o o NI o o
215
+ //
216
+ // e [ o ] o -> e e o e o
217
+ //
218
+ // e [ o ] e -> e e o e e
219
+ //
220
+ // e ( o [ o ] NI ) e -> e e o o o o NI e e
221
+ //
222
+ // d Otherwise, do not set the type for the current bracket pair. Note that
223
+ // if the enclosed text contains no strong types the paired brackets will
224
+ // both resolve to the same level when resolved individually using rules N1
225
+ // and N2.
226
+ //
227
+ // e ( NI ) o -> e ( NI ) o
228
+
229
+ // getStrongTypeN0 maps character's directional code to strong type as required
230
+ // by rule N0.
231
+ //
232
+ // TODO: have separate type for "strong" directionality.
233
+ func (p *bracketPairer) getStrongTypeN0(index int) Class {
234
+ switch p.codesIsolatedRun[index] {
235
+ // in the scope of N0, number types are treated as R
236
+ case EN, AN, AL, R:
237
+ return R
238
+ case L:
239
+ return L
240
+ default:
241
+ return ON
242
+ }
243
+ }
244
+
245
+ // classifyPairContent reports the strong types contained inside a Bracket Pair,
246
+ // assuming the given embedding direction.
247
+ //
248
+ // It returns ON if no strong type is found. If a single strong type is found,
249
+ // it returns this type. Otherwise it returns the embedding direction.
250
+ //
251
+ // TODO: use separate type for "strong" directionality.
252
+ func (p *bracketPairer) classifyPairContent(loc bracketPair, dirEmbed Class) Class {
253
+ dirOpposite := ON
254
+ for i := loc.opener + 1; i < loc.closer; i++ {
255
+ dir := p.getStrongTypeN0(i)
256
+ if dir == ON {
257
+ continue
258
+ }
259
+ if dir == dirEmbed {
260
+ return dir // type matching embedding direction found
261
+ }
262
+ dirOpposite = dir
263
+ }
264
+ // return ON if no strong type found, or class opposite to dirEmbed
265
+ return dirOpposite
266
+ }
267
+
268
+ // classBeforePair determines which strong types are present before a Bracket
269
+ // Pair. Return R or L if strong type found, otherwise ON.
270
+ func (p *bracketPairer) classBeforePair(loc bracketPair) Class {
271
+ for i := loc.opener - 1; i >= 0; i-- {
272
+ if dir := p.getStrongTypeN0(i); dir != ON {
273
+ return dir
274
+ }
275
+ }
276
+ // no strong types found, return sos
277
+ return p.sos
278
+ }
279
+
280
+ // assignBracketType implements rule N0 for a single bracket pair.
281
+ func (p *bracketPairer) assignBracketType(loc bracketPair, dirEmbed Class, initialTypes []Class) {
282
+ // rule "N0, a", inspect contents of pair
283
+ dirPair := p.classifyPairContent(loc, dirEmbed)
284
+
285
+ // dirPair is now L, R, or N (no strong type found)
286
+
287
+ // the following logical tests are performed out of order compared to
288
+ // the statement of the rules but yield the same results
289
+ if dirPair == ON {
290
+ return // case "d" - nothing to do
291
+ }
292
+
293
+ if dirPair != dirEmbed {
294
+ // case "c": strong type found, opposite - check before (c.1)
295
+ dirPair = p.classBeforePair(loc)
296
+ if dirPair == dirEmbed || dirPair == ON {
297
+ // no strong opposite type found before - use embedding (c.2)
298
+ dirPair = dirEmbed
299
+ }
300
+ }
301
+ // else: case "b", strong type found matching embedding,
302
+ // no explicit action needed, as dirPair is already set to embedding
303
+ // direction
304
+
305
+ // set the bracket types to the type found
306
+ p.setBracketsToType(loc, dirPair, initialTypes)
307
+ }
308
+
309
+ func (p *bracketPairer) setBracketsToType(loc bracketPair, dirPair Class, initialTypes []Class) {
310
+ p.codesIsolatedRun[loc.opener] = dirPair
311
+ p.codesIsolatedRun[loc.closer] = dirPair
312
+
313
+ for i := loc.opener + 1; i < loc.closer; i++ {
314
+ index := p.indexes[i]
315
+ if initialTypes[index] != NSM {
316
+ break
317
+ }
318
+ p.codesIsolatedRun[i] = dirPair
319
+ }
320
+
321
+ for i := loc.closer + 1; i < len(p.indexes); i++ {
322
+ index := p.indexes[i]
323
+ if initialTypes[index] != NSM {
324
+ break
325
+ }
326
+ p.codesIsolatedRun[i] = dirPair
327
+ }
328
+ }
329
+
330
+ // resolveBrackets implements rule N0 for a list of pairs.
331
+ func (p *bracketPairer) resolveBrackets(dirEmbed Class, initialTypes []Class) {
332
+ for _, loc := range p.pairPositions {
333
+ p.assignBracketType(loc, dirEmbed, initialTypes)
334
+ }
335
+ }