capacitor-sora-editor 1.2.1 → 1.8.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 (571) hide show
  1. package/DEPENDENCY_SOLUTION.md +87 -87
  2. package/DEVELOPMENT.md +152 -152
  3. package/NO_JITPACK_WARNING.md +14 -14
  4. package/README.md +36 -0
  5. package/WORDWRAP_FLICKER_FIX.md +268 -205
  6. package/android/sora-editor/editor/src/main/AndroidManifest.xml +1 -1
  7. package/android/sora-editor/editor/src/main/java/io/github/abc15018045126/sora/I18nConfig.kt +42 -0
  8. package/android/sora-editor/editor/src/main/java/io/github/abc15018045126/sora/annotations/Experimental.kt +16 -0
  9. package/android/sora-editor/editor/src/main/java/io/github/abc15018045126/sora/annotations/InvalidateRequired.kt +10 -0
  10. package/android/sora-editor/editor/src/main/java/io/github/abc15018045126/sora/annotations/UnsupportedUserUsage.kt +14 -0
  11. package/android/sora-editor/editor/src/main/java/io/github/abc15018045126/sora/event/ClickEvent.kt +22 -0
  12. package/android/sora-editor/editor/src/main/java/io/github/abc15018045126/sora/event/ColorSchemeUpdateEvent.kt +1 -1
  13. package/android/sora-editor/editor/src/main/java/io/github/abc15018045126/sora/event/ContentChangeEvent.kt +41 -0
  14. package/android/sora-editor/editor/src/main/java/io/github/abc15018045126/sora/event/DoubleClickEvent.kt +23 -0
  15. package/android/sora-editor/editor/src/main/java/io/github/abc15018045126/sora/event/EditorKeyEvent.kt +103 -0
  16. package/android/sora-editor/editor/src/main/java/io/github/abc15018045126/sora/event/EditorMotionEvent.kt +111 -0
  17. package/android/sora-editor/editor/src/main/java/io/github/abc15018045126/sora/event/Event.kt +69 -0
  18. package/android/sora-editor/editor/src/main/java/io/github/abc15018045126/sora/event/EventManager.kt +267 -0
  19. package/android/sora-editor/editor/src/main/java/io/github/abc15018045126/sora/event/EventReceiver.kt +5 -0
  20. package/android/sora-editor/editor/src/main/java/io/github/abc15018045126/sora/event/HandleStateChangeEvent.kt +21 -0
  21. package/android/sora-editor/editor/src/main/java/io/github/abc15018045126/sora/event/InterceptTarget.kt +18 -0
  22. package/android/sora-editor/editor/src/main/java/io/github/abc15018045126/sora/event/KeyBindingEvent.kt +34 -0
  23. package/android/sora-editor/editor/src/main/java/io/github/abc15018045126/sora/event/LongPressEvent.kt +25 -0
  24. package/android/sora-editor/editor/src/main/java/io/github/abc15018045126/sora/event/ResultedEvent.kt +21 -0
  25. package/android/sora-editor/editor/src/main/java/io/github/abc15018045126/sora/event/ScrollEvent.kt +48 -0
  26. package/android/sora-editor/editor/src/main/java/io/github/abc15018045126/sora/event/SelectionChangeEvent.kt +81 -0
  27. package/android/sora-editor/editor/src/main/java/io/github/abc15018045126/sora/event/SideIconClickEvent.kt +1 -1
  28. package/android/sora-editor/editor/src/main/java/io/github/abc15018045126/sora/event/SnippetEvent.kt +41 -0
  29. package/android/sora-editor/editor/src/main/java/io/github/abc15018045126/sora/event/SubscriptionReceipt.kt +35 -0
  30. package/android/sora-editor/editor/src/main/java/io/github/abc15018045126/sora/event/Unsubscribe.kt +28 -0
  31. package/android/sora-editor/editor/src/main/java/io/github/abc15018045126/sora/event/Utils.kt +1 -1
  32. package/android/sora-editor/editor/src/main/java/io/github/abc15018045126/sora/event/editorMinorEvents.kt +1 -1
  33. package/android/sora-editor/editor/src/main/java/io/github/abc15018045126/sora/graphics/BubbleHelper.kt +59 -0
  34. package/android/sora-editor/editor/src/main/java/io/github/abc15018045126/sora/graphics/BufferedDrawPoints.kt +37 -0
  35. package/android/sora-editor/editor/src/main/java/io/github/abc15018045126/sora/graphics/GraphemeBoundsBreaker.kt +31 -0
  36. package/android/sora-editor/editor/src/main/java/io/github/abc15018045126/sora/graphics/GraphicCharacter.kt +28 -0
  37. package/android/sora-editor/editor/src/main/java/io/github/abc15018045126/sora/graphics/GraphicsCompat.kt +48 -0
  38. package/android/sora-editor/editor/src/main/java/io/github/abc15018045126/sora/graphics/Paint.kt +191 -0
  39. package/android/sora-editor/editor/src/main/java/io/github/abc15018045126/sora/graphics/RectUtils.kt +16 -0
  40. package/android/sora-editor/editor/src/main/java/io/github/abc15018045126/sora/graphics/SingleCharacterWidths.kt +156 -0
  41. package/android/sora-editor/editor/src/main/java/io/github/abc15018045126/sora/graphics/TextRow.kt +1465 -0
  42. package/android/sora-editor/editor/src/main/java/io/github/abc15018045126/sora/graphics/TextRowParams.kt +1 -1
  43. package/android/sora-editor/editor/src/main/java/io/github/abc15018045126/sora/graphics/inlayHint/ColorInlayHintRenderer.kt +1 -1
  44. package/android/sora-editor/editor/src/main/java/io/github/abc15018045126/sora/graphics/inlayHint/InlayHintRenderer.kt +2 -2
  45. package/android/sora-editor/editor/src/main/java/io/github/abc15018045126/sora/graphics/inlayHint/InlayHintRendererProvider.kt +1 -1
  46. package/android/sora-editor/editor/src/main/java/io/github/abc15018045126/sora/graphics/inlayHint/TextInlayHintRenderer.kt +2 -2
  47. package/android/sora-editor/editor/src/main/java/io/github/abc15018045126/sora/lang/EmptyLanguage.kt +94 -0
  48. package/android/sora-editor/editor/src/main/java/io/github/abc15018045126/sora/lang/Language.kt +188 -0
  49. package/android/sora-editor/editor/src/main/java/io/github/abc15018045126/sora/lang/QuickQuoteHandler.kt +46 -0
  50. package/android/sora-editor/editor/src/main/java/io/github/abc15018045126/sora/lang/analysis/AnalyzeManager.kt +67 -0
  51. package/android/sora-editor/editor/src/main/java/io/github/abc15018045126/sora/lang/analysis/AsyncIncrementalAnalyzeManager.kt +504 -0
  52. package/android/sora-editor/editor/src/main/java/io/github/abc15018045126/sora/lang/analysis/IncrementalAnalyzeManager.kt +93 -0
  53. package/android/sora-editor/editor/src/main/java/io/github/abc15018045126/sora/lang/analysis/SequenceUpdateRange.kt +1 -1
  54. package/android/sora-editor/editor/src/main/java/io/github/abc15018045126/sora/lang/analysis/SimpleAnalyzeManager.kt +194 -0
  55. package/android/sora-editor/editor/src/main/java/io/github/abc15018045126/sora/lang/analysis/StyleReceiver.kt +63 -0
  56. package/android/sora-editor/editor/src/main/java/io/github/abc15018045126/sora/lang/analysis/StyleUpdateRange.kt +1 -1
  57. package/android/sora-editor/editor/src/main/java/io/github/abc15018045126/sora/lang/brackets/BracketsProvider.kt +21 -0
  58. package/android/sora-editor/editor/src/main/java/io/github/abc15018045126/sora/lang/brackets/OnlineBracketsMatcher.kt +83 -0
  59. package/android/sora-editor/editor/src/main/java/io/github/abc15018045126/sora/lang/brackets/PairedBracket.kt +13 -0
  60. package/android/sora-editor/editor/src/main/java/io/github/abc15018045126/sora/lang/brackets/SimpleBracketsCollector.kt +53 -0
  61. package/android/sora-editor/editor/src/main/java/io/github/abc15018045126/sora/lang/completion/CompletionCancelledException.kt +14 -0
  62. package/android/sora-editor/editor/src/main/java/io/github/abc15018045126/sora/lang/completion/CompletionHelper.kt +48 -0
  63. package/android/sora-editor/editor/src/main/java/io/github/abc15018045126/sora/lang/completion/CompletionItem.kt +131 -0
  64. package/android/sora-editor/editor/src/main/java/io/github/abc15018045126/sora/lang/completion/CompletionItemKind.kt +1 -1
  65. package/android/sora-editor/editor/src/main/java/io/github/abc15018045126/sora/lang/completion/CompletionPublisher.kt +250 -0
  66. package/android/sora-editor/editor/src/main/java/io/github/abc15018045126/sora/lang/completion/IdentifierAutoComplete.kt +352 -0
  67. package/android/sora-editor/editor/src/main/java/io/github/abc15018045126/sora/lang/completion/MatchHelper.kt +126 -0
  68. package/android/sora-editor/editor/src/main/java/io/github/abc15018045126/sora/lang/completion/SimpleCompletionIconDrawer.kt +1 -1
  69. package/android/sora-editor/editor/src/main/java/io/github/abc15018045126/sora/lang/completion/SimpleCompletionItem.kt +77 -0
  70. package/android/sora-editor/editor/src/main/java/io/github/abc15018045126/sora/lang/completion/SimpleSnippetCompletionItem.kt +35 -0
  71. package/android/sora-editor/editor/src/main/java/io/github/abc15018045126/sora/lang/completion/SnippetDescription.kt +1 -1
  72. package/android/sora-editor/editor/src/main/java/io/github/abc15018045126/sora/lang/completion/comparators.kt +1 -1
  73. package/android/sora-editor/editor/src/main/java/io/github/abc15018045126/sora/lang/completion/filters.kt +3 -3
  74. package/android/sora-editor/editor/src/main/java/io/github/abc15018045126/sora/lang/completion/snippet/CodeSnippet.kt +171 -0
  75. package/android/sora-editor/editor/src/main/java/io/github/abc15018045126/sora/lang/completion/snippet/ConditionalFormat.kt +8 -0
  76. package/android/sora-editor/editor/src/main/java/io/github/abc15018045126/sora/lang/completion/snippet/FormatString.kt +3 -0
  77. package/android/sora-editor/editor/src/main/java/io/github/abc15018045126/sora/lang/completion/snippet/InterpolatedShellItem.kt +13 -0
  78. package/android/sora-editor/editor/src/main/java/io/github/abc15018045126/sora/lang/completion/snippet/NextUpperCaseFormat.kt +3 -0
  79. package/android/sora-editor/editor/src/main/java/io/github/abc15018045126/sora/lang/completion/snippet/NoFormat.kt +3 -0
  80. package/android/sora-editor/editor/src/main/java/io/github/abc15018045126/sora/lang/completion/snippet/PlaceHolderElement.kt +1 -1
  81. package/android/sora-editor/editor/src/main/java/io/github/abc15018045126/sora/lang/completion/snippet/PlaceholderDefinition.kt +2 -2
  82. package/android/sora-editor/editor/src/main/java/io/github/abc15018045126/sora/lang/completion/snippet/PlaceholderItem.kt +22 -0
  83. package/android/sora-editor/editor/src/main/java/io/github/abc15018045126/sora/lang/completion/snippet/PlainPlaceholderElement.kt +1 -1
  84. package/android/sora-editor/editor/src/main/java/io/github/abc15018045126/sora/lang/completion/snippet/PlainTextItem.kt +17 -0
  85. package/android/sora-editor/editor/src/main/java/io/github/abc15018045126/sora/lang/completion/snippet/SnippetItem.kt +33 -0
  86. package/android/sora-editor/editor/src/main/java/io/github/abc15018045126/sora/lang/completion/snippet/Transform.kt +15 -0
  87. package/android/sora-editor/editor/src/main/java/io/github/abc15018045126/sora/lang/completion/snippet/VariableItem.kt +15 -0
  88. package/android/sora-editor/editor/src/main/java/io/github/abc15018045126/sora/lang/completion/snippet/parser/CodeSnippetParser.kt +544 -0
  89. package/android/sora-editor/editor/src/main/java/io/github/abc15018045126/sora/lang/completion/snippet/parser/CodeSnippetTokenizer.kt +108 -0
  90. package/android/sora-editor/editor/src/main/java/io/github/abc15018045126/sora/lang/completion/snippet/parser/Token.kt +7 -0
  91. package/android/sora-editor/editor/src/main/java/io/github/abc15018045126/sora/lang/completion/snippet/parser/TokenType.kt +20 -0
  92. package/android/sora-editor/editor/src/main/java/io/github/abc15018045126/sora/lang/diagnostic/DiagnosticDetail.kt +1 -1
  93. package/android/sora-editor/editor/src/main/java/io/github/abc15018045126/sora/lang/diagnostic/DiagnosticRegion.kt +56 -0
  94. package/android/sora-editor/editor/src/main/java/io/github/abc15018045126/sora/lang/diagnostic/DiagnosticsContainer.kt +109 -0
  95. package/android/sora-editor/editor/src/main/java/io/github/abc15018045126/sora/lang/diagnostic/Quickfix.kt +1 -1
  96. package/android/sora-editor/editor/src/main/java/io/github/abc15018045126/sora/lang/folding/FoldingRegion.kt +50 -0
  97. package/android/sora-editor/editor/src/main/java/io/github/abc15018045126/sora/lang/format/AsyncFormatter.kt +182 -0
  98. package/android/sora-editor/editor/src/main/java/io/github/abc15018045126/sora/lang/format/Formatter.kt +72 -0
  99. package/android/sora-editor/editor/src/main/java/io/github/abc15018045126/sora/lang/smartEnter/NewlineHandleResult.kt +18 -0
  100. package/android/sora-editor/editor/src/main/java/io/github/abc15018045126/sora/lang/smartEnter/NewlineHandler.kt +32 -0
  101. package/android/sora-editor/editor/src/main/java/io/github/abc15018045126/sora/lang/styling/BlocksUpdater.kt +34 -0
  102. package/android/sora-editor/editor/src/main/java/io/github/abc15018045126/sora/lang/styling/CodeBlock.kt +165 -0
  103. package/android/sora-editor/editor/src/main/java/io/github/abc15018045126/sora/lang/styling/EmptyReader.kt +30 -0
  104. package/android/sora-editor/editor/src/main/java/io/github/abc15018045126/sora/lang/styling/HighlightTextContainer.kt +1 -1
  105. package/android/sora-editor/editor/src/main/java/io/github/abc15018045126/sora/lang/styling/MappedSpanUpdater.kt +180 -0
  106. package/android/sora-editor/editor/src/main/java/io/github/abc15018045126/sora/lang/styling/MappedSpans.kt +210 -0
  107. package/android/sora-editor/editor/src/main/java/io/github/abc15018045126/sora/lang/styling/Span.kt +139 -0
  108. package/android/sora-editor/editor/src/main/java/io/github/abc15018045126/sora/lang/styling/SpanFactory.kt +41 -0
  109. package/android/sora-editor/editor/src/main/java/io/github/abc15018045126/sora/lang/styling/SpanPool.kt +1 -1
  110. package/android/sora-editor/editor/src/main/java/io/github/abc15018045126/sora/lang/styling/Spans.kt +104 -0
  111. package/android/sora-editor/editor/src/main/java/io/github/abc15018045126/sora/lang/styling/Styles.kt +219 -0
  112. package/android/sora-editor/editor/src/main/java/io/github/abc15018045126/sora/lang/styling/StylesUtils.kt +82 -0
  113. package/android/sora-editor/editor/src/main/java/io/github/abc15018045126/sora/lang/styling/TextStyle.kt +130 -31
  114. package/android/sora-editor/editor/src/main/java/io/github/abc15018045126/sora/lang/styling/color/ConstColor.kt +1 -1
  115. package/android/sora-editor/editor/src/main/java/io/github/abc15018045126/sora/lang/styling/color/EditorColor.kt +1 -1
  116. package/android/sora-editor/editor/src/main/java/io/github/abc15018045126/sora/lang/styling/color/ResolvableColor.kt +1 -1
  117. package/android/sora-editor/editor/src/main/java/io/github/abc15018045126/sora/lang/styling/inlayHint/InlayHint.kt +1 -1
  118. package/android/sora-editor/editor/src/main/java/io/github/abc15018045126/sora/lang/styling/inlayHint/InlayHintsContainer.kt +1 -1
  119. package/android/sora-editor/editor/src/main/java/io/github/abc15018045126/sora/lang/styling/inlayHint/IntSetUpdateRange.kt +1 -1
  120. package/android/sora-editor/editor/src/main/java/io/github/abc15018045126/sora/lang/styling/inlayHint/SparseUpdateRange.kt +1 -1
  121. package/android/sora-editor/editor/src/main/java/io/github/abc15018045126/sora/lang/styling/inlayHint/inlayHints.kt +1 -1
  122. package/android/sora-editor/editor/src/main/java/io/github/abc15018045126/sora/lang/styling/line/LineAnchorStyle.kt +2 -2
  123. package/android/sora-editor/editor/src/main/java/io/github/abc15018045126/sora/lang/styling/line/LineBackground.kt +2 -2
  124. package/android/sora-editor/editor/src/main/java/io/github/abc15018045126/sora/lang/styling/line/LineGutterBackground.kt +1 -1
  125. package/android/sora-editor/editor/src/main/java/io/github/abc15018045126/sora/lang/styling/line/LineSideIcon.kt +1 -1
  126. package/android/sora-editor/editor/src/main/java/io/github/abc15018045126/sora/lang/styling/line/LineStyles.kt +1 -1
  127. package/android/sora-editor/editor/src/main/java/io/github/abc15018045126/sora/lang/styling/patching/SparseStylePatches.kt +2 -2
  128. package/android/sora-editor/editor/src/main/java/io/github/abc15018045126/sora/lang/styling/patching/StylePatch.kt +1 -1
  129. package/android/sora-editor/editor/src/main/java/io/github/abc15018045126/sora/lang/styling/span/SpanClickableUrl.kt +1 -1
  130. package/android/sora-editor/editor/src/main/java/io/github/abc15018045126/sora/lang/styling/span/SpanColorResolver.kt +1 -1
  131. package/android/sora-editor/editor/src/main/java/io/github/abc15018045126/sora/lang/styling/span/SpanConstColorResolver.kt +1 -1
  132. package/android/sora-editor/editor/src/main/java/io/github/abc15018045126/sora/lang/styling/span/SpanExt.kt +1 -1
  133. package/android/sora-editor/editor/src/main/java/io/github/abc15018045126/sora/lang/styling/span/SpanExtAttrs.kt +39 -0
  134. package/android/sora-editor/editor/src/main/java/io/github/abc15018045126/sora/lang/styling/span/SpanExternalRenderer.kt +1 -1
  135. package/android/sora-editor/editor/src/main/java/io/github/abc15018045126/sora/lang/styling/span/SpanInteractionInfo.kt +1 -1
  136. package/android/sora-editor/editor/src/main/java/io/github/abc15018045126/sora/lang/styling/span/internal/NoExtSpanImpl.kt +89 -0
  137. package/android/sora-editor/editor/src/main/java/io/github/abc15018045126/sora/lang/styling/span/internal/SpanImpl.kt +103 -0
  138. package/android/sora-editor/editor/src/main/java/io/github/abc15018045126/sora/lang/styling/util/PointAnchorContainer.kt +1 -1
  139. package/android/sora-editor/editor/src/main/java/io/github/abc15018045126/sora/lang/util/BaseAnalyzeManager.kt +44 -0
  140. package/android/sora-editor/editor/src/main/java/io/github/abc15018045126/sora/lang/util/PlainTextAnalyzeManager.kt +30 -0
  141. package/android/sora-editor/editor/src/main/java/io/github/abc15018045126/sora/lang/util/PlainTextSpans.kt +42 -0
  142. package/android/sora-editor/editor/src/main/java/io/github/abc15018045126/sora/text/{AndroidEmoji.java → AndroidEmoji.kt} +29 -27
  143. package/android/sora-editor/editor/src/main/java/io/github/abc15018045126/sora/text/CachedIndexer.kt +408 -0
  144. package/android/sora-editor/editor/src/main/java/io/github/abc15018045126/sora/text/CharArrayWrapper.kt +40 -0
  145. package/android/sora-editor/editor/src/main/java/io/github/abc15018045126/sora/text/CharPosition.kt +97 -0
  146. package/android/sora-editor/editor/src/main/java/io/github/abc15018045126/sora/text/CharSequenceIterator.kt +66 -0
  147. package/android/sora-editor/editor/src/main/java/io/github/abc15018045126/sora/text/ComposingText.kt +72 -0
  148. package/android/sora-editor/editor/src/main/java/io/github/abc15018045126/sora/text/Content.kt +889 -33
  149. package/android/sora-editor/editor/src/main/java/io/github/abc15018045126/sora/{widget/component/EditorBuiltinComponent.java → text/ContentExtensions.kt} +14 -24
  150. package/android/sora-editor/editor/src/main/java/io/github/abc15018045126/sora/text/ContentIO.kt +149 -0
  151. package/android/sora-editor/editor/src/main/java/io/github/abc15018045126/sora/text/ContentLine.kt +252 -0
  152. package/android/sora-editor/editor/src/main/java/io/github/abc15018045126/sora/text/ContentListener.kt +67 -0
  153. package/android/sora-editor/editor/src/main/java/io/github/abc15018045126/sora/text/ContentReference.kt +177 -0
  154. package/android/sora-editor/editor/src/main/java/io/github/abc15018045126/sora/text/Cursor.kt +316 -0
  155. package/android/sora-editor/editor/src/main/java/io/github/abc15018045126/sora/text/FunctionCharacters.kt +46 -0
  156. package/android/sora-editor/editor/src/main/java/io/github/abc15018045126/sora/text/ICUUtils.kt +58 -0
  157. package/android/sora-editor/editor/src/main/java/io/github/abc15018045126/sora/text/Indexer.kt +63 -0
  158. package/android/sora-editor/editor/src/main/java/io/github/abc15018045126/sora/text/InsertTextHelper.kt +95 -0
  159. package/android/sora-editor/editor/src/main/java/io/github/abc15018045126/sora/text/LineSeparator.kt +51 -0
  160. package/android/sora-editor/editor/src/main/java/io/github/abc15018045126/sora/text/SpanRecycler.kt +71 -0
  161. package/android/sora-editor/editor/src/main/java/io/github/abc15018045126/sora/text/TextLayoutHelper.kt +105 -0
  162. package/android/sora-editor/editor/src/main/java/io/github/abc15018045126/sora/text/TextRange.kt +48 -0
  163. package/android/sora-editor/editor/src/main/java/io/github/abc15018045126/sora/text/TextReference.kt +91 -0
  164. package/android/sora-editor/editor/src/main/java/io/github/abc15018045126/sora/text/TextUtils.kt +181 -0
  165. package/android/sora-editor/editor/src/main/java/io/github/abc15018045126/sora/text/TextUtilsP.kt +232 -0
  166. package/android/sora-editor/editor/src/main/java/io/github/abc15018045126/sora/text/UndoManager.kt +569 -0
  167. package/android/sora-editor/editor/src/main/java/io/github/abc15018045126/sora/text/UnicodeIterator.kt +69 -0
  168. package/android/sora-editor/editor/src/main/java/io/github/abc15018045126/sora/text/bidi/BidiRequirementChecker.kt +5 -0
  169. package/android/sora-editor/editor/src/main/java/io/github/abc15018045126/sora/text/bidi/ContentBidi.kt +104 -0
  170. package/android/sora-editor/editor/src/main/java/io/github/abc15018045126/sora/text/bidi/Directions.kt +43 -0
  171. package/android/sora-editor/editor/src/main/java/io/github/abc15018045126/sora/text/bidi/IDirections.kt +9 -0
  172. package/android/sora-editor/editor/src/main/java/io/github/abc15018045126/sora/text/bidi/TextBidi.kt +67 -0
  173. package/android/sora-editor/editor/src/main/java/io/github/abc15018045126/sora/text/bidi/VisualDirections.kt +45 -0
  174. package/android/sora-editor/editor/src/main/java/io/github/abc15018045126/sora/text/breaker/WordBreaker.kt +19 -0
  175. package/android/sora-editor/editor/src/main/java/io/github/abc15018045126/sora/text/breaker/WordBreakerEmpty.kt +13 -0
  176. package/android/sora-editor/editor/src/main/java/io/github/abc15018045126/sora/text/breaker/WordBreakerIcu.kt +36 -0
  177. package/android/sora-editor/editor/src/main/java/io/github/abc15018045126/sora/text/breaker/WordBreakerProgram.kt +23 -0
  178. package/android/sora-editor/editor/src/main/java/io/github/abc15018045126/sora/text/method/KeyMetaStates.kt +55 -0
  179. package/android/sora-editor/editor/src/main/java/io/github/abc15018045126/sora/util/BinaryHeap.kt +216 -0
  180. package/android/sora-editor/editor/src/main/java/io/github/abc15018045126/sora/util/BlockIntList.kt +314 -0
  181. package/android/sora-editor/editor/src/main/java/io/github/abc15018045126/sora/util/CharCode.kt +1 -1
  182. package/android/sora-editor/editor/src/main/java/io/github/abc15018045126/sora/util/Chars.kt +1 -1
  183. package/android/sora-editor/editor/src/main/java/io/github/abc15018045126/sora/util/ClipDataUtils.kt +29 -0
  184. package/android/sora-editor/editor/src/main/java/io/github/abc15018045126/sora/util/EditorHandler.kt +1 -1
  185. package/android/sora-editor/editor/src/main/java/io/github/abc15018045126/sora/util/Floats.kt +10 -0
  186. package/android/sora-editor/editor/src/main/java/io/github/abc15018045126/sora/util/IntPair.kt +76 -0
  187. package/android/sora-editor/editor/src/main/java/io/github/abc15018045126/sora/util/KeyboardUtils.kt +1 -1
  188. package/android/sora-editor/editor/src/main/java/io/github/abc15018045126/sora/util/Logger.kt +78 -0
  189. package/android/sora-editor/editor/src/main/java/io/github/abc15018045126/sora/util/LongArrayList.kt +104 -0
  190. package/android/sora-editor/editor/src/main/java/io/github/abc15018045126/sora/util/MutableInt.kt +14 -0
  191. package/android/sora-editor/editor/src/main/java/io/github/abc15018045126/sora/util/MutableIntList.kt +35 -0
  192. package/android/sora-editor/editor/src/main/java/io/github/abc15018045126/sora/util/MutableLongLongMap.kt +36 -0
  193. package/android/sora-editor/editor/src/main/java/io/github/abc15018045126/sora/util/MyCharacter.kt +127 -0
  194. package/android/sora-editor/editor/src/main/java/io/github/abc15018045126/sora/util/Numbers.kt +109 -0
  195. package/android/sora-editor/editor/src/main/java/io/github/abc15018045126/sora/util/ObjectPool.kt +44 -0
  196. package/android/sora-editor/editor/src/main/java/io/github/abc15018045126/sora/util/RegionIterator.kt +123 -0
  197. package/android/sora-editor/editor/src/main/java/io/github/abc15018045126/sora/util/RendererUtils.kt +1 -1
  198. package/android/sora-editor/editor/src/main/java/io/github/abc15018045126/sora/util/ReversedListView.kt +1 -1
  199. package/android/sora-editor/editor/src/main/java/io/github/abc15018045126/sora/util/SegmentList.kt +273 -0
  200. package/android/sora-editor/editor/src/main/java/io/github/abc15018045126/sora/util/ShareableData.kt +1 -1
  201. package/android/sora-editor/editor/src/main/java/io/github/abc15018045126/sora/util/TemporaryCharBuffer.kt +31 -0
  202. package/android/sora-editor/editor/src/main/java/io/github/abc15018045126/sora/util/TemporaryFloatBuffer.kt +44 -0
  203. package/android/sora-editor/editor/src/main/java/io/github/abc15018045126/sora/util/ThemeUtils.kt +14 -0
  204. package/android/sora-editor/editor/src/main/java/io/github/abc15018045126/sora/util/TrieTree.kt +137 -0
  205. package/android/sora-editor/editor/src/main/java/io/github/abc15018045126/sora/util/ViewUtils.kt +39 -0
  206. package/android/sora-editor/editor/src/main/java/io/github/abc15018045126/sora/util/regex/RegexBackrefGrammar.kt +11 -0
  207. package/android/sora-editor/editor/src/main/java/io/github/abc15018045126/sora/util/regex/RegexBackrefHelper.kt +27 -0
  208. package/android/sora-editor/editor/src/main/java/io/github/abc15018045126/sora/util/regex/RegexBackrefParser.kt +89 -0
  209. package/android/sora-editor/editor/src/main/java/io/github/abc15018045126/sora/util/regex/RegexBackrefToken.kt +16 -0
  210. package/android/sora-editor/editor/src/main/java/io/github/abc15018045126/sora/widget/CodeEditor.kt +5509 -0
  211. package/android/sora-editor/editor/src/main/java/io/github/abc15018045126/sora/widget/CursorBlink.kt +78 -0
  212. package/android/sora-editor/editor/src/main/java/io/github/abc15018045126/sora/widget/DirectAccessProps.kt +604 -0
  213. package/android/sora-editor/editor/src/main/java/io/github/abc15018045126/sora/widget/Editor.kt +1 -1
  214. package/android/sora-editor/editor/src/main/java/io/github/abc15018045126/sora/widget/EditorInputConnection.kt +708 -0
  215. package/android/sora-editor/editor/src/main/java/io/github/abc15018045126/sora/widget/EditorKeyEventHandler.kt +678 -0
  216. package/android/sora-editor/editor/src/main/java/io/github/abc15018045126/sora/widget/EditorRenderer.kt +3542 -0
  217. package/android/sora-editor/editor/src/main/java/io/github/abc15018045126/sora/widget/EditorScroller.kt +89 -0
  218. package/android/sora-editor/editor/src/main/java/io/github/abc15018045126/sora/widget/EditorSearcher.kt +531 -0
  219. package/android/sora-editor/editor/src/main/java/io/github/abc15018045126/sora/widget/EditorStyleDelegate.kt +109 -0
  220. package/android/sora-editor/editor/src/main/java/io/github/abc15018045126/sora/widget/EditorTouchEventHandler.kt +1349 -0
  221. package/android/sora-editor/editor/src/main/java/io/github/abc15018045126/sora/widget/LanguageHelper.kt +38 -0
  222. package/android/sora-editor/editor/src/main/java/io/github/abc15018045126/sora/widget/RegionResolver.kt +1 -1
  223. package/android/sora-editor/editor/src/main/java/io/github/abc15018045126/sora/widget/SelectionMovement.kt +27 -37
  224. package/android/sora-editor/editor/src/main/java/io/github/abc15018045126/sora/widget/SymbolInputView.kt +103 -0
  225. package/android/sora-editor/editor/src/main/java/io/github/abc15018045126/sora/widget/SymbolPairMatch.kt +261 -0
  226. package/android/sora-editor/editor/src/main/java/io/github/abc15018045126/sora/widget/base/EditorPopupWindow.kt +244 -0
  227. package/android/sora-editor/editor/src/main/java/io/github/abc15018045126/sora/widget/component/CompletionLayout.kt +59 -0
  228. package/android/sora-editor/editor/src/main/java/io/github/abc15018045126/sora/widget/component/DefaultCompletionItemAdapter.kt +60 -0
  229. package/android/sora-editor/editor/src/main/java/io/github/abc15018045126/sora/widget/component/DefaultCompletionLayout.kt +225 -0
  230. package/android/sora-editor/editor/src/main/java/io/github/abc15018045126/sora/widget/component/EditorAutoCompletion.kt +300 -0
  231. package/android/sora-editor/editor/src/main/java/io/github/abc15018045126/sora/widget/component/EditorBuiltinComponent.kt +15 -0
  232. package/android/sora-editor/editor/src/main/java/io/github/abc15018045126/sora/widget/component/EditorCompletionAdapter.kt +87 -0
  233. package/android/sora-editor/editor/src/main/java/io/github/abc15018045126/sora/widget/component/EditorContextMenuCreator.kt +6 -28
  234. package/android/sora-editor/editor/src/main/java/io/github/abc15018045126/sora/widget/component/EditorDiagnosticTooltipWindow.kt +27 -20
  235. package/android/sora-editor/editor/src/main/java/io/github/abc15018045126/sora/widget/component/EditorTextActionWindow.kt +358 -0
  236. package/android/sora-editor/editor/src/main/java/io/github/abc15018045126/sora/widget/component/Magnifier.kt +354 -0
  237. package/android/sora-editor/editor/src/main/java/io/github/abc15018045126/sora/widget/ext/EditorSpanInteractionHandler.kt +3 -3
  238. package/android/sora-editor/editor/src/main/java/io/github/abc15018045126/sora/widget/layout/AbstractLayout.kt +126 -0
  239. package/android/sora-editor/editor/src/main/java/io/github/abc15018045126/sora/widget/layout/{Layout.java → Layout.kt} +30 -63
  240. package/android/sora-editor/editor/src/main/java/io/github/abc15018045126/sora/widget/layout/LineBreakLayout.kt +370 -0
  241. package/android/sora-editor/editor/src/main/java/io/github/abc15018045126/sora/widget/layout/Row.kt +57 -0
  242. package/android/sora-editor/editor/src/main/java/io/github/abc15018045126/sora/widget/layout/RowElement.kt +52 -0
  243. package/android/sora-editor/editor/src/main/java/io/github/abc15018045126/sora/widget/layout/RowElementTypes.kt +18 -0
  244. package/android/sora-editor/editor/src/main/java/io/github/abc15018045126/sora/widget/layout/RowIterator.kt +38 -0
  245. package/android/sora-editor/editor/src/main/java/io/github/abc15018045126/sora/widget/layout/ViewMeasureHelper.kt +135 -0
  246. package/android/sora-editor/editor/src/main/java/io/github/abc15018045126/sora/widget/layout/WordwrapLayout.kt +703 -0
  247. package/android/sora-editor/editor/src/main/java/io/github/abc15018045126/sora/widget/rendering/MeasureCacheItem.kt +1 -1
  248. package/android/sora-editor/editor/src/main/java/io/github/abc15018045126/sora/widget/rendering/RenderCache.kt +1 -1
  249. package/android/sora-editor/editor/src/main/java/io/github/abc15018045126/sora/widget/rendering/RenderContext.kt +1 -1
  250. package/android/sora-editor/editor/src/main/java/io/github/abc15018045126/sora/widget/rendering/RenderNodeHolder.kt +3 -25
  251. package/android/sora-editor/editor/src/main/java/io/github/abc15018045126/sora/widget/rendering/RenderingConstants.kt +53 -0
  252. package/android/sora-editor/editor/src/main/java/io/github/abc15018045126/sora/widget/rendering/TextAdvancesCache.kt +89 -0
  253. package/android/sora-editor/editor/src/main/java/io/github/abc15018045126/sora/widget/schemes/EditorColorScheme.kt +393 -0
  254. package/android/sora-editor/editor/src/main/java/io/github/abc15018045126/sora/widget/schemes/SchemeDarcula.kt +40 -0
  255. package/android/sora-editor/editor/src/main/java/io/github/abc15018045126/sora/widget/schemes/SchemeEclipse.kt +34 -0
  256. package/android/sora-editor/editor/src/main/java/io/github/abc15018045126/sora/widget/schemes/SchemeGitHub.kt +28 -0
  257. package/android/sora-editor/editor/src/main/java/io/github/abc15018045126/sora/widget/schemes/SchemeNotepadXX.kt +34 -0
  258. package/android/sora-editor/editor/src/main/java/io/github/abc15018045126/sora/widget/schemes/SchemeVS2019.kt +40 -0
  259. package/android/sora-editor/editor/src/main/java/io/github/abc15018045126/sora/widget/snippet/SnippetController.kt +4 -3
  260. package/android/sora-editor/editor/src/main/java/io/github/abc15018045126/sora/widget/snippet/TransformApplier.kt +103 -0
  261. package/android/sora-editor/editor/src/main/java/io/github/abc15018045126/sora/widget/snippet/variable/ClipboardBasedSnippetVariableResolver.kt +21 -0
  262. package/android/sora-editor/editor/src/main/java/io/github/abc15018045126/sora/widget/snippet/variable/CommentBasedSnippetVariableResolver.kt +23 -0
  263. package/android/sora-editor/editor/src/main/java/io/github/abc15018045126/sora/widget/snippet/variable/CompositeSnippetVariableResolver.kt +35 -0
  264. package/android/sora-editor/editor/src/main/java/io/github/abc15018045126/sora/widget/snippet/variable/EditorBasedSnippetVariableResolver.kt +36 -0
  265. package/android/sora-editor/editor/src/main/java/io/github/abc15018045126/sora/widget/snippet/variable/FileBasedSnippetVariableResolver.kt +11 -0
  266. package/android/sora-editor/editor/src/main/java/io/github/abc15018045126/sora/widget/snippet/variable/ISnippetVariableResolver.kt +21 -0
  267. package/android/sora-editor/editor/src/main/java/io/github/abc15018045126/sora/widget/snippet/variable/RandomBasedSnippetVariableResolver.kt +22 -0
  268. package/android/sora-editor/editor/src/main/java/io/github/abc15018045126/sora/widget/snippet/variable/TimeBasedSnippetVariableResolver.kt +58 -0
  269. package/android/sora-editor/editor/src/main/java/io/github/abc15018045126/sora/widget/snippet/variable/WorkspaceBasedSnippetVariableResolver.kt +11 -0
  270. package/android/sora-editor/editor/src/main/java/io/github/abc15018045126/sora/widget/style/CursorAnimator.kt +54 -0
  271. package/android/sora-editor/editor/src/main/java/io/github/abc15018045126/sora/widget/style/DiagnosticIndicatorStyle.kt +13 -0
  272. package/android/sora-editor/editor/src/main/java/io/github/abc15018045126/sora/widget/style/LineInfoPanelPosition.kt +9 -0
  273. package/android/sora-editor/editor/src/main/java/io/github/abc15018045126/sora/widget/style/LineInfoPanelPositionMode.kt +6 -0
  274. package/android/sora-editor/editor/src/main/java/io/github/abc15018045126/sora/widget/style/LineNumberTipTextProvider.kt +1 -1
  275. package/android/sora-editor/editor/src/main/java/io/github/abc15018045126/sora/widget/style/SelectionHandleStyle.kt +82 -0
  276. package/android/sora-editor/editor/src/main/java/io/github/abc15018045126/sora/widget/style/builtin/DefaultLineNumberTip.kt +1 -1
  277. package/android/sora-editor/editor/src/main/java/io/github/abc15018045126/sora/widget/style/builtin/FadeCursorAnimator.kt +143 -0
  278. package/android/sora-editor/editor/src/main/java/io/github/abc15018045126/sora/widget/style/builtin/HandleStyleDrop.kt +66 -0
  279. package/android/sora-editor/editor/src/main/java/io/github/abc15018045126/sora/widget/style/builtin/HandleStyleNone.kt +30 -0
  280. package/android/sora-editor/editor/src/main/java/io/github/abc15018045126/sora/widget/style/builtin/HandleStyleSideDrop.kt +62 -0
  281. package/android/sora-editor/editor/src/main/java/io/github/abc15018045126/sora/widget/style/builtin/MoveCursorAnimator.kt +127 -0
  282. package/android/sora-editor/editor/src/main/java/io/github/abc15018045126/sora/widget/style/builtin/ScaleCursorAnimator.kt +134 -0
  283. package/android/sora-editor/editor/src/main/res/anim/anim_diagnostic_tooltip_window_enter.xml +1 -1
  284. package/android/sora-editor/editor/src/main/res/anim/anim_diagnostic_tooltip_window_exit.xml +1 -1
  285. package/android/sora-editor/editor/src/main/res/anim/anim_text_action_popup_enter.xml +1 -1
  286. package/android/sora-editor/editor/src/main/res/anim/anim_text_action_popup_exit.xml +1 -1
  287. package/android/sora-editor/editor/src/main/res/drawable/baseline_more_vert_24.xml +1 -1
  288. package/android/sora-editor/editor/src/main/res/drawable/editor_text_select_start.xml +1 -1
  289. package/android/sora-editor/editor/src/main/res/drawable/ic_more_vert_black_20dp.xml +1 -1
  290. package/android/sora-editor/editor/src/main/res/drawable/ic_sora_handle_drop.xml +1 -1
  291. package/android/sora-editor/editor/src/main/res/drawable/line_break.xml +1 -1
  292. package/android/sora-editor/editor/src/main/res/drawable/magnifier_background.xml +1 -1
  293. package/android/sora-editor/editor/src/main/res/drawable/round_content_copy_20.xml +1 -1
  294. package/android/sora-editor/editor/src/main/res/drawable/round_content_cut_20.xml +1 -1
  295. package/android/sora-editor/editor/src/main/res/drawable/round_content_paste_20.xml +1 -1
  296. package/android/sora-editor/editor/src/main/res/drawable/round_save_20.xml +1 -1
  297. package/android/sora-editor/editor/src/main/res/drawable/round_select_all_20.xml +1 -1
  298. package/android/sora-editor/editor/src/main/res/drawable/softwrap_left.xml +1 -1
  299. package/android/sora-editor/editor/src/main/res/drawable/softwrap_right.xml +1 -1
  300. package/android/sora-editor/editor/src/main/res/layout/default_completion_result_item.xml +1 -1
  301. package/android/sora-editor/editor/src/main/res/layout/diagnostic_tooltip_window.xml +1 -1
  302. package/android/sora-editor/editor/src/main/res/layout/magnifier_popup.xml +1 -1
  303. package/android/sora-editor/editor/src/main/res/layout/text_compose_panel.xml +2 -1
  304. package/android/sora-editor/editor/src/main/res/values/attrs.xml +1 -1
  305. package/android/sora-editor/editor/src/main/res/values/colors.xml +1 -1
  306. package/android/sora-editor/editor/src/main/res/values/dimens.xml +1 -1
  307. package/android/sora-editor/editor/src/main/res/values/strings.xml +1 -1
  308. package/android/sora-editor/editor/src/main/res/values/style.xml +1 -1
  309. package/android/sora-editor/editor/src/main/res/values-night/colors.xml +1 -1
  310. package/android/sora-editor/editor/src/main/res/values-zh/strings.xml +1 -1
  311. package/android/sora-editor/language-textmate/src/main/AndroidManifest.xml +1 -1
  312. package/android/sora-editor/language-textmate/src/main/java/io/github/abc15018045126/sora/langs/textmate/MyState.kt +11 -0
  313. package/android/sora-editor/language-textmate/src/main/java/io/github/abc15018045126/sora/langs/textmate/TextMateAnalyzer.kt +269 -0
  314. package/android/sora-editor/language-textmate/src/main/java/io/github/abc15018045126/sora/langs/textmate/TextMateColorScheme.kt +298 -0
  315. package/android/sora-editor/language-textmate/src/main/java/io/github/abc15018045126/sora/langs/textmate/TextMateLanguage.kt +219 -0
  316. package/android/sora-editor/language-textmate/src/main/java/io/github/abc15018045126/sora/langs/textmate/TextMateNewlineHandler.kt +268 -0
  317. package/android/sora-editor/language-textmate/src/main/java/io/github/abc15018045126/sora/langs/textmate/TextMateSymbolPairMatch.kt +167 -0
  318. package/android/sora-editor/{editor/src/main/java/io/github/abc15018045126/sora/event/EventReceiver.java → language-textmate/src/main/java/io/github/abc15018045126/sora/langs/textmate/folding/FoldingHelper.kt} +7 -6
  319. package/android/sora-editor/{editor/src/main/java/io/github/abc15018045126/sora/util/MutableInt.java → language-textmate/src/main/java/io/github/abc15018045126/sora/langs/textmate/folding/FoldingRegion.kt} +12 -14
  320. package/android/sora-editor/language-textmate/src/main/java/io/github/abc15018045126/sora/langs/textmate/folding/FoldingRegions.kt +93 -0
  321. package/android/sora-editor/language-textmate/src/main/java/io/github/abc15018045126/sora/langs/textmate/folding/IndentRange.kt +156 -0
  322. package/android/sora-editor/language-textmate/src/main/java/io/github/abc15018045126/sora/langs/textmate/folding/PreviousRegion.kt +7 -0
  323. package/android/sora-editor/language-textmate/src/main/java/io/github/abc15018045126/sora/langs/textmate/folding/RangesCollector.kt +25 -0
  324. package/android/sora-editor/language-textmate/src/main/java/io/github/abc15018045126/sora/langs/textmate/registry/FileProviderRegistry.kt +53 -0
  325. package/android/sora-editor/language-textmate/src/main/java/io/github/abc15018045126/sora/langs/textmate/registry/GrammarRegistry.kt +222 -0
  326. package/android/sora-editor/language-textmate/src/main/java/io/github/abc15018045126/sora/langs/textmate/registry/ThemeRegistry.kt +121 -0
  327. package/android/sora-editor/language-textmate/src/main/java/io/github/abc15018045126/sora/langs/textmate/registry/dsl/GrammarDefinitionDSL.kt +1 -1
  328. package/android/sora-editor/language-textmate/src/main/java/io/github/abc15018045126/sora/langs/textmate/registry/model/DefaultGrammarDefinition.kt +68 -0
  329. package/android/sora-editor/language-textmate/src/main/java/io/github/abc15018045126/sora/langs/textmate/registry/model/GrammarDefinition.kt +12 -0
  330. package/android/sora-editor/language-textmate/src/main/java/io/github/abc15018045126/sora/langs/textmate/registry/model/ThemeModel.kt +50 -0
  331. package/android/sora-editor/language-textmate/src/main/java/io/github/abc15018045126/sora/langs/textmate/registry/provider/AssetsFileResolver.java +1 -23
  332. package/android/sora-editor/language-textmate/src/main/java/io/github/abc15018045126/sora/langs/textmate/registry/provider/FileResolver.java +1 -23
  333. package/android/sora-editor/language-textmate/src/main/java/io/github/abc15018045126/sora/langs/textmate/registry/reader/LanguageDefinitionReader.java +1 -23
  334. package/android/sora-editor/language-textmate/src/main/java/io/github/abc15018045126/sora/langs/textmate/utils/ColorUtils.kt +57 -0
  335. package/android/sora-editor/language-textmate/src/main/java/io/github/abc15018045126/sora/langs/textmate/utils/MatcherUtils.kt +29 -0
  336. package/android/sora-editor/language-textmate/src/main/java/io/github/abc15018045126/sora/langs/textmate/utils/StringUtils.kt +46 -0
  337. package/android/sora-editor/oniguruma-native/src/main/java/io/github/abc15018045126/oniguruma/OnigNative.kt +95 -0
  338. package/android/src/main/java/com/abc15018045126/capacitor/soraeditor/SoraEditorPlugin.kt +342 -337
  339. package/android/src/main/java/com/abc15018045126/capacitor/soraeditor/compose/ComposeEditorActivity.kt +63 -63
  340. package/android/src/main/java/com/abc15018045126/capacitor/soraeditor/compose/EditorViewModel.kt +141 -5
  341. package/android/src/main/java/com/abc15018045126/capacitor/soraeditor/compose/ui/EditorColorSettings.kt +190 -0
  342. package/android/src/main/java/com/abc15018045126/capacitor/soraeditor/compose/ui/EditorScreen.kt +390 -234
  343. package/android/src/main/java/com/abc15018045126/capacitor/soraeditor/compose/ui/SoraEditorWrapper.kt +104 -104
  344. package/android/src/main/java/com/abc15018045126/capacitor/soraeditor/compose/ui/theme/Theme.kt +38 -38
  345. package/package.json +1 -1
  346. package/android/sora-editor/editor/src/main/java/io/github/abc15018045126/sora/I18nConfig.java +0 -69
  347. package/android/sora-editor/editor/src/main/java/io/github/abc15018045126/sora/annotations/Experimental.java +0 -41
  348. package/android/sora-editor/editor/src/main/java/io/github/abc15018045126/sora/annotations/InvalidateRequired.java +0 -40
  349. package/android/sora-editor/editor/src/main/java/io/github/abc15018045126/sora/annotations/UnsupportedUserUsage.java +0 -39
  350. package/android/sora-editor/editor/src/main/java/io/github/abc15018045126/sora/event/ClickEvent.java +0 -49
  351. package/android/sora-editor/editor/src/main/java/io/github/abc15018045126/sora/event/ContentChangeEvent.java +0 -122
  352. package/android/sora-editor/editor/src/main/java/io/github/abc15018045126/sora/event/DoubleClickEvent.java +0 -50
  353. package/android/sora-editor/editor/src/main/java/io/github/abc15018045126/sora/event/EditorKeyEvent.java +0 -157
  354. package/android/sora-editor/editor/src/main/java/io/github/abc15018045126/sora/event/EditorMotionEvent.java +0 -212
  355. package/android/sora-editor/editor/src/main/java/io/github/abc15018045126/sora/event/Event.java +0 -132
  356. package/android/sora-editor/editor/src/main/java/io/github/abc15018045126/sora/event/EventManager.java +0 -328
  357. package/android/sora-editor/editor/src/main/java/io/github/abc15018045126/sora/event/HandleStateChangeEvent.java +0 -67
  358. package/android/sora-editor/editor/src/main/java/io/github/abc15018045126/sora/event/InterceptTarget.java +0 -44
  359. package/android/sora-editor/editor/src/main/java/io/github/abc15018045126/sora/event/KeyBindingEvent.java +0 -77
  360. package/android/sora-editor/editor/src/main/java/io/github/abc15018045126/sora/event/LongPressEvent.java +0 -53
  361. package/android/sora-editor/editor/src/main/java/io/github/abc15018045126/sora/event/ResultedEvent.java +0 -63
  362. package/android/sora-editor/editor/src/main/java/io/github/abc15018045126/sora/event/ScrollEvent.java +0 -126
  363. package/android/sora-editor/editor/src/main/java/io/github/abc15018045126/sora/event/SelectionChangeEvent.java +0 -155
  364. package/android/sora-editor/editor/src/main/java/io/github/abc15018045126/sora/event/SnippetEvent.java +0 -92
  365. package/android/sora-editor/editor/src/main/java/io/github/abc15018045126/sora/event/SubscriptionReceipt.java +0 -67
  366. package/android/sora-editor/editor/src/main/java/io/github/abc15018045126/sora/event/Unsubscribe.java +0 -60
  367. package/android/sora-editor/editor/src/main/java/io/github/abc15018045126/sora/graphics/BubbleHelper.java +0 -76
  368. package/android/sora-editor/editor/src/main/java/io/github/abc15018045126/sora/graphics/BufferedDrawPoints.java +0 -66
  369. package/android/sora-editor/editor/src/main/java/io/github/abc15018045126/sora/graphics/GraphemeBoundsBreaker.java +0 -55
  370. package/android/sora-editor/editor/src/main/java/io/github/abc15018045126/sora/graphics/GraphicCharacter.java +0 -52
  371. package/android/sora-editor/editor/src/main/java/io/github/abc15018045126/sora/graphics/GraphicsCompat.java +0 -55
  372. package/android/sora-editor/editor/src/main/java/io/github/abc15018045126/sora/graphics/Paint.java +0 -159
  373. package/android/sora-editor/editor/src/main/java/io/github/abc15018045126/sora/graphics/RectUtils.java +0 -39
  374. package/android/sora-editor/editor/src/main/java/io/github/abc15018045126/sora/graphics/SingleCharacterWidths.java +0 -160
  375. package/android/sora-editor/editor/src/main/java/io/github/abc15018045126/sora/graphics/TextRow.java +0 -1402
  376. package/android/sora-editor/editor/src/main/java/io/github/abc15018045126/sora/lang/EmptyLanguage.java +0 -159
  377. package/android/sora-editor/editor/src/main/java/io/github/abc15018045126/sora/lang/Language.java +0 -215
  378. package/android/sora-editor/editor/src/main/java/io/github/abc15018045126/sora/lang/QuickQuoteHandler.java +0 -78
  379. package/android/sora-editor/editor/src/main/java/io/github/abc15018045126/sora/lang/analysis/AnalyzeManager.java +0 -97
  380. package/android/sora-editor/editor/src/main/java/io/github/abc15018045126/sora/lang/analysis/AsyncIncrementalAnalyzeManager.java +0 -604
  381. package/android/sora-editor/editor/src/main/java/io/github/abc15018045126/sora/lang/analysis/IncrementalAnalyzeManager.java +0 -120
  382. package/android/sora-editor/editor/src/main/java/io/github/abc15018045126/sora/lang/analysis/SimpleAnalyzeManager.java +0 -238
  383. package/android/sora-editor/editor/src/main/java/io/github/abc15018045126/sora/lang/analysis/StyleReceiver.java +0 -90
  384. package/android/sora-editor/editor/src/main/java/io/github/abc15018045126/sora/lang/brackets/BracketsProvider.java +0 -49
  385. package/android/sora-editor/editor/src/main/java/io/github/abc15018045126/sora/lang/brackets/OnlineBracketsMatcher.java +0 -112
  386. package/android/sora-editor/editor/src/main/java/io/github/abc15018045126/sora/lang/brackets/PairedBracket.java +0 -57
  387. package/android/sora-editor/editor/src/main/java/io/github/abc15018045126/sora/lang/brackets/SimpleBracketsCollector.java +0 -83
  388. package/android/sora-editor/editor/src/main/java/io/github/abc15018045126/sora/lang/completion/CompletionCancelledException.java +0 -44
  389. package/android/sora-editor/editor/src/main/java/io/github/abc15018045126/sora/lang/completion/CompletionHelper.java +0 -72
  390. package/android/sora-editor/editor/src/main/java/io/github/abc15018045126/sora/lang/completion/CompletionItem.java +0 -163
  391. package/android/sora-editor/editor/src/main/java/io/github/abc15018045126/sora/lang/completion/CompletionPublisher.java +0 -284
  392. package/android/sora-editor/editor/src/main/java/io/github/abc15018045126/sora/lang/completion/IdentifierAutoComplete.java +0 -359
  393. package/android/sora-editor/editor/src/main/java/io/github/abc15018045126/sora/lang/completion/MatchHelper.java +0 -131
  394. package/android/sora-editor/editor/src/main/java/io/github/abc15018045126/sora/lang/completion/SimpleCompletionItem.java +0 -112
  395. package/android/sora-editor/editor/src/main/java/io/github/abc15018045126/sora/lang/completion/SimpleSnippetCompletionItem.java +0 -71
  396. package/android/sora-editor/editor/src/main/java/io/github/abc15018045126/sora/lang/completion/snippet/CodeSnippet.java +0 -223
  397. package/android/sora-editor/editor/src/main/java/io/github/abc15018045126/sora/lang/completion/snippet/ConditionalFormat.java +0 -68
  398. package/android/sora-editor/editor/src/main/java/io/github/abc15018045126/sora/lang/completion/snippet/FormatString.java +0 -30
  399. package/android/sora-editor/editor/src/main/java/io/github/abc15018045126/sora/lang/completion/snippet/InterpolatedShellItem.java +0 -55
  400. package/android/sora-editor/editor/src/main/java/io/github/abc15018045126/sora/lang/completion/snippet/NextUpperCaseFormat.java +0 -28
  401. package/android/sora-editor/editor/src/main/java/io/github/abc15018045126/sora/lang/completion/snippet/NoFormat.java +0 -43
  402. package/android/sora-editor/editor/src/main/java/io/github/abc15018045126/sora/lang/completion/snippet/PlaceholderItem.java +0 -58
  403. package/android/sora-editor/editor/src/main/java/io/github/abc15018045126/sora/lang/completion/snippet/PlainTextItem.java +0 -56
  404. package/android/sora-editor/editor/src/main/java/io/github/abc15018045126/sora/lang/completion/snippet/SnippetItem.java +0 -70
  405. package/android/sora-editor/editor/src/main/java/io/github/abc15018045126/sora/lang/completion/snippet/Transform.java +0 -54
  406. package/android/sora-editor/editor/src/main/java/io/github/abc15018045126/sora/lang/completion/snippet/VariableItem.java +0 -81
  407. package/android/sora-editor/editor/src/main/java/io/github/abc15018045126/sora/lang/completion/snippet/parser/CodeSnippetParser.java +0 -571
  408. package/android/sora-editor/editor/src/main/java/io/github/abc15018045126/sora/lang/completion/snippet/parser/CodeSnippetTokenizer.java +0 -131
  409. package/android/sora-editor/editor/src/main/java/io/github/abc15018045126/sora/lang/completion/snippet/parser/Token.java +0 -47
  410. package/android/sora-editor/editor/src/main/java/io/github/abc15018045126/sora/lang/completion/snippet/parser/TokenType.java +0 -59
  411. package/android/sora-editor/editor/src/main/java/io/github/abc15018045126/sora/lang/diagnostic/DiagnosticRegion.java +0 -95
  412. package/android/sora-editor/editor/src/main/java/io/github/abc15018045126/sora/lang/diagnostic/DiagnosticsContainer.java +0 -148
  413. package/android/sora-editor/editor/src/main/java/io/github/abc15018045126/sora/lang/folding/FoldingRegion.java +0 -89
  414. package/android/sora-editor/editor/src/main/java/io/github/abc15018045126/sora/lang/format/AsyncFormatter.java +0 -198
  415. package/android/sora-editor/editor/src/main/java/io/github/abc15018045126/sora/lang/format/Formatter.java +0 -104
  416. package/android/sora-editor/editor/src/main/java/io/github/abc15018045126/sora/lang/smartEnter/NewlineHandleResult.java +0 -47
  417. package/android/sora-editor/editor/src/main/java/io/github/abc15018045126/sora/lang/smartEnter/NewlineHandler.java +0 -60
  418. package/android/sora-editor/editor/src/main/java/io/github/abc15018045126/sora/lang/styling/BlocksUpdater.java +0 -60
  419. package/android/sora-editor/editor/src/main/java/io/github/abc15018045126/sora/lang/styling/CodeBlock.java +0 -182
  420. package/android/sora-editor/editor/src/main/java/io/github/abc15018045126/sora/lang/styling/EmptyReader.java +0 -66
  421. package/android/sora-editor/editor/src/main/java/io/github/abc15018045126/sora/lang/styling/MappedSpanUpdater.java +0 -190
  422. package/android/sora-editor/editor/src/main/java/io/github/abc15018045126/sora/lang/styling/MappedSpans.java +0 -264
  423. package/android/sora-editor/editor/src/main/java/io/github/abc15018045126/sora/lang/styling/Span.java +0 -203
  424. package/android/sora-editor/editor/src/main/java/io/github/abc15018045126/sora/lang/styling/SpanFactory.java +0 -73
  425. package/android/sora-editor/editor/src/main/java/io/github/abc15018045126/sora/lang/styling/Spans.java +0 -133
  426. package/android/sora-editor/editor/src/main/java/io/github/abc15018045126/sora/lang/styling/Styles.java +0 -280
  427. package/android/sora-editor/editor/src/main/java/io/github/abc15018045126/sora/lang/styling/StylesUtils.java +0 -108
  428. package/android/sora-editor/editor/src/main/java/io/github/abc15018045126/sora/lang/styling/TextStyle.java +0 -141
  429. package/android/sora-editor/editor/src/main/java/io/github/abc15018045126/sora/lang/styling/span/SpanExtAttrs.java +0 -67
  430. package/android/sora-editor/editor/src/main/java/io/github/abc15018045126/sora/lang/styling/span/internal/NoExtSpanImpl.java +0 -165
  431. package/android/sora-editor/editor/src/main/java/io/github/abc15018045126/sora/lang/styling/span/internal/SpanImpl.java +0 -188
  432. package/android/sora-editor/editor/src/main/java/io/github/abc15018045126/sora/lang/util/BaseAnalyzeManager.java +0 -95
  433. package/android/sora-editor/editor/src/main/java/io/github/abc15018045126/sora/lang/util/PlainTextAnalyzeManager.java +0 -65
  434. package/android/sora-editor/editor/src/main/java/io/github/abc15018045126/sora/lang/util/PlainTextSpans.java +0 -78
  435. package/android/sora-editor/editor/src/main/java/io/github/abc15018045126/sora/text/CachedIndexer.java +0 -458
  436. package/android/sora-editor/editor/src/main/java/io/github/abc15018045126/sora/text/CharArrayWrapper.java +0 -81
  437. package/android/sora-editor/editor/src/main/java/io/github/abc15018045126/sora/text/CharPosition.java +0 -150
  438. package/android/sora-editor/editor/src/main/java/io/github/abc15018045126/sora/text/CharSequenceIterator.java +0 -109
  439. package/android/sora-editor/editor/src/main/java/io/github/abc15018045126/sora/text/ComposingText.java +0 -91
  440. package/android/sora-editor/editor/src/main/java/io/github/abc15018045126/sora/text/Content.java +0 -1306
  441. package/android/sora-editor/editor/src/main/java/io/github/abc15018045126/sora/text/ContentIO.java +0 -173
  442. package/android/sora-editor/editor/src/main/java/io/github/abc15018045126/sora/text/ContentLine.java +0 -405
  443. package/android/sora-editor/editor/src/main/java/io/github/abc15018045126/sora/text/ContentListener.java +0 -81
  444. package/android/sora-editor/editor/src/main/java/io/github/abc15018045126/sora/text/ContentReference.java +0 -212
  445. package/android/sora-editor/editor/src/main/java/io/github/abc15018045126/sora/text/Cursor.java +0 -374
  446. package/android/sora-editor/editor/src/main/java/io/github/abc15018045126/sora/text/FunctionCharacters.java +0 -71
  447. package/android/sora-editor/editor/src/main/java/io/github/abc15018045126/sora/text/ICUUtils.java +0 -85
  448. package/android/sora-editor/editor/src/main/java/io/github/abc15018045126/sora/text/Indexer.java +0 -92
  449. package/android/sora-editor/editor/src/main/java/io/github/abc15018045126/sora/text/InsertTextHelper.java +0 -117
  450. package/android/sora-editor/editor/src/main/java/io/github/abc15018045126/sora/text/LineSeparator.java +0 -123
  451. package/android/sora-editor/editor/src/main/java/io/github/abc15018045126/sora/text/SpanRecycler.java +0 -103
  452. package/android/sora-editor/editor/src/main/java/io/github/abc15018045126/sora/text/TextLayoutHelper.java +0 -122
  453. package/android/sora-editor/editor/src/main/java/io/github/abc15018045126/sora/text/TextRange.java +0 -85
  454. package/android/sora-editor/editor/src/main/java/io/github/abc15018045126/sora/text/TextReference.java +0 -132
  455. package/android/sora-editor/editor/src/main/java/io/github/abc15018045126/sora/text/TextUtils.java +0 -196
  456. package/android/sora-editor/editor/src/main/java/io/github/abc15018045126/sora/text/TextUtilsP.java +0 -236
  457. package/android/sora-editor/editor/src/main/java/io/github/abc15018045126/sora/text/UndoManager.java +0 -750
  458. package/android/sora-editor/editor/src/main/java/io/github/abc15018045126/sora/text/UnicodeIterator.java +0 -106
  459. package/android/sora-editor/editor/src/main/java/io/github/abc15018045126/sora/text/bidi/BidiRequirementChecker.java +0 -31
  460. package/android/sora-editor/editor/src/main/java/io/github/abc15018045126/sora/text/bidi/ContentBidi.java +0 -143
  461. package/android/sora-editor/editor/src/main/java/io/github/abc15018045126/sora/text/bidi/Directions.java +0 -79
  462. package/android/sora-editor/editor/src/main/java/io/github/abc15018045126/sora/text/bidi/IDirections.java +0 -39
  463. package/android/sora-editor/editor/src/main/java/io/github/abc15018045126/sora/text/bidi/TextBidi.java +0 -93
  464. package/android/sora-editor/editor/src/main/java/io/github/abc15018045126/sora/text/bidi/VisualDirections.java +0 -88
  465. package/android/sora-editor/editor/src/main/java/io/github/abc15018045126/sora/text/breaker/WordBreaker.java +0 -47
  466. package/android/sora-editor/editor/src/main/java/io/github/abc15018045126/sora/text/breaker/WordBreakerEmpty.java +0 -38
  467. package/android/sora-editor/editor/src/main/java/io/github/abc15018045126/sora/text/breaker/WordBreakerIcu.java +0 -62
  468. package/android/sora-editor/editor/src/main/java/io/github/abc15018045126/sora/text/breaker/WordBreakerProgram.java +0 -54
  469. package/android/sora-editor/editor/src/main/java/io/github/abc15018045126/sora/text/method/KeyMetaStates.java +0 -93
  470. package/android/sora-editor/editor/src/main/java/io/github/abc15018045126/sora/util/BinaryHeap.java +0 -239
  471. package/android/sora-editor/editor/src/main/java/io/github/abc15018045126/sora/util/BlockIntList.java +0 -366
  472. package/android/sora-editor/editor/src/main/java/io/github/abc15018045126/sora/util/ClipDataUtils.java +0 -55
  473. package/android/sora-editor/editor/src/main/java/io/github/abc15018045126/sora/util/Floats.java +0 -33
  474. package/android/sora-editor/editor/src/main/java/io/github/abc15018045126/sora/util/IntPair.java +0 -96
  475. package/android/sora-editor/editor/src/main/java/io/github/abc15018045126/sora/util/Logger.java +0 -109
  476. package/android/sora-editor/editor/src/main/java/io/github/abc15018045126/sora/util/LongArrayList.java +0 -132
  477. package/android/sora-editor/editor/src/main/java/io/github/abc15018045126/sora/util/MyCharacter.java +0 -143
  478. package/android/sora-editor/editor/src/main/java/io/github/abc15018045126/sora/util/Numbers.java +0 -123
  479. package/android/sora-editor/editor/src/main/java/io/github/abc15018045126/sora/util/ObjectPool.java +0 -77
  480. package/android/sora-editor/editor/src/main/java/io/github/abc15018045126/sora/util/RegionIterator.java +0 -162
  481. package/android/sora-editor/editor/src/main/java/io/github/abc15018045126/sora/util/SegmentList.java +0 -323
  482. package/android/sora-editor/editor/src/main/java/io/github/abc15018045126/sora/util/TemporaryCharBuffer.java +0 -52
  483. package/android/sora-editor/editor/src/main/java/io/github/abc15018045126/sora/util/TemporaryFloatBuffer.java +0 -68
  484. package/android/sora-editor/editor/src/main/java/io/github/abc15018045126/sora/util/ThemeUtils.java +0 -38
  485. package/android/sora-editor/editor/src/main/java/io/github/abc15018045126/sora/util/TrieTree.java +0 -177
  486. package/android/sora-editor/editor/src/main/java/io/github/abc15018045126/sora/util/ViewUtils.java +0 -67
  487. package/android/sora-editor/editor/src/main/java/io/github/abc15018045126/sora/util/regex/RegexBackrefGrammar.java +0 -40
  488. package/android/sora-editor/editor/src/main/java/io/github/abc15018045126/sora/util/regex/RegexBackrefHelper.java +0 -53
  489. package/android/sora-editor/editor/src/main/java/io/github/abc15018045126/sora/util/regex/RegexBackrefParser.java +0 -119
  490. package/android/sora-editor/editor/src/main/java/io/github/abc15018045126/sora/util/regex/RegexBackrefToken.java +0 -65
  491. package/android/sora-editor/editor/src/main/java/io/github/abc15018045126/sora/widget/CodeEditor.java +0 -5433
  492. package/android/sora-editor/editor/src/main/java/io/github/abc15018045126/sora/widget/CursorBlink.java +0 -98
  493. package/android/sora-editor/editor/src/main/java/io/github/abc15018045126/sora/widget/DirectAccessProps.java +0 -561
  494. package/android/sora-editor/editor/src/main/java/io/github/abc15018045126/sora/widget/EditorInputConnection.java +0 -714
  495. package/android/sora-editor/editor/src/main/java/io/github/abc15018045126/sora/widget/EditorKeyEventHandler.java +0 -646
  496. package/android/sora-editor/editor/src/main/java/io/github/abc15018045126/sora/widget/EditorRenderer.java +0 -2620
  497. package/android/sora-editor/editor/src/main/java/io/github/abc15018045126/sora/widget/EditorScroller.java +0 -119
  498. package/android/sora-editor/editor/src/main/java/io/github/abc15018045126/sora/widget/EditorSearcher.java +0 -553
  499. package/android/sora-editor/editor/src/main/java/io/github/abc15018045126/sora/widget/EditorStyleDelegate.java +0 -143
  500. package/android/sora-editor/editor/src/main/java/io/github/abc15018045126/sora/widget/EditorTouchEventHandler.java +0 -1306
  501. package/android/sora-editor/editor/src/main/java/io/github/abc15018045126/sora/widget/LanguageHelper.java +0 -66
  502. package/android/sora-editor/editor/src/main/java/io/github/abc15018045126/sora/widget/SymbolInputView.java +0 -154
  503. package/android/sora-editor/editor/src/main/java/io/github/abc15018045126/sora/widget/SymbolPairMatch.java +0 -334
  504. package/android/sora-editor/editor/src/main/java/io/github/abc15018045126/sora/widget/base/EditorPopupWindow.java +0 -351
  505. package/android/sora-editor/editor/src/main/java/io/github/abc15018045126/sora/widget/component/CompletionLayout.java +0 -89
  506. package/android/sora-editor/editor/src/main/java/io/github/abc15018045126/sora/widget/component/DefaultCompletionItemAdapter.java +0 -76
  507. package/android/sora-editor/editor/src/main/java/io/github/abc15018045126/sora/widget/component/DefaultCompletionLayout.java +0 -206
  508. package/android/sora-editor/editor/src/main/java/io/github/abc15018045126/sora/widget/component/EditorAutoCompletion.java +0 -684
  509. package/android/sora-editor/editor/src/main/java/io/github/abc15018045126/sora/widget/component/EditorCompletionAdapter.java +0 -118
  510. package/android/sora-editor/editor/src/main/java/io/github/abc15018045126/sora/widget/component/EditorTextActionWindow.java +0 -362
  511. package/android/sora-editor/editor/src/main/java/io/github/abc15018045126/sora/widget/component/Magnifier.java +0 -396
  512. package/android/sora-editor/editor/src/main/java/io/github/abc15018045126/sora/widget/layout/AbstractLayout.java +0 -158
  513. package/android/sora-editor/editor/src/main/java/io/github/abc15018045126/sora/widget/layout/LineBreakLayout.java +0 -393
  514. package/android/sora-editor/editor/src/main/java/io/github/abc15018045126/sora/widget/layout/Row.java +0 -77
  515. package/android/sora-editor/editor/src/main/java/io/github/abc15018045126/sora/widget/layout/RowElement.java +0 -70
  516. package/android/sora-editor/editor/src/main/java/io/github/abc15018045126/sora/widget/layout/RowElementTypes.java +0 -41
  517. package/android/sora-editor/editor/src/main/java/io/github/abc15018045126/sora/widget/layout/RowIterator.java +0 -67
  518. package/android/sora-editor/editor/src/main/java/io/github/abc15018045126/sora/widget/layout/ViewMeasureHelper.java +0 -123
  519. package/android/sora-editor/editor/src/main/java/io/github/abc15018045126/sora/widget/layout/WordwrapLayout.java +0 -683
  520. package/android/sora-editor/editor/src/main/java/io/github/abc15018045126/sora/widget/rendering/RenderingConstants.java +0 -79
  521. package/android/sora-editor/editor/src/main/java/io/github/abc15018045126/sora/widget/rendering/TextAdvancesCache.java +0 -122
  522. package/android/sora-editor/editor/src/main/java/io/github/abc15018045126/sora/widget/rendering/package-info.java +0 -30
  523. package/android/sora-editor/editor/src/main/java/io/github/abc15018045126/sora/widget/schemes/EditorColorScheme.java +0 -544
  524. package/android/sora-editor/editor/src/main/java/io/github/abc15018045126/sora/widget/schemes/SchemeDarcula.java +0 -70
  525. package/android/sora-editor/editor/src/main/java/io/github/abc15018045126/sora/widget/schemes/SchemeEclipse.java +0 -60
  526. package/android/sora-editor/editor/src/main/java/io/github/abc15018045126/sora/widget/schemes/SchemeGitHub.java +0 -54
  527. package/android/sora-editor/editor/src/main/java/io/github/abc15018045126/sora/widget/schemes/SchemeNotepadXX.java +0 -60
  528. package/android/sora-editor/editor/src/main/java/io/github/abc15018045126/sora/widget/schemes/SchemeVS2019.java +0 -70
  529. package/android/sora-editor/editor/src/main/java/io/github/abc15018045126/sora/widget/snippet/TransformApplier.java +0 -134
  530. package/android/sora-editor/editor/src/main/java/io/github/abc15018045126/sora/widget/snippet/variable/ClipboardBasedSnippetVariableResolver.java +0 -61
  531. package/android/sora-editor/editor/src/main/java/io/github/abc15018045126/sora/widget/snippet/variable/CommentBasedSnippetVariableResolver.java +0 -77
  532. package/android/sora-editor/editor/src/main/java/io/github/abc15018045126/sora/widget/snippet/variable/CompositeSnippetVariableResolver.java +0 -79
  533. package/android/sora-editor/editor/src/main/java/io/github/abc15018045126/sora/widget/snippet/variable/EditorBasedSnippetVariableResolver.java +0 -76
  534. package/android/sora-editor/editor/src/main/java/io/github/abc15018045126/sora/widget/snippet/variable/FileBasedSnippetVariableResolver.java +0 -39
  535. package/android/sora-editor/editor/src/main/java/io/github/abc15018045126/sora/widget/snippet/variable/ISnippetVariableResolver.java +0 -49
  536. package/android/sora-editor/editor/src/main/java/io/github/abc15018045126/sora/widget/snippet/variable/RandomBasedSnippetVariableResolver.java +0 -55
  537. package/android/sora-editor/editor/src/main/java/io/github/abc15018045126/sora/widget/snippet/variable/TimeBasedSnippetVariableResolver.java +0 -101
  538. package/android/sora-editor/editor/src/main/java/io/github/abc15018045126/sora/widget/snippet/variable/WorkspaceBasedSnippetVariableResolver.java +0 -39
  539. package/android/sora-editor/editor/src/main/java/io/github/abc15018045126/sora/widget/style/CursorAnimator.java +0 -78
  540. package/android/sora-editor/editor/src/main/java/io/github/abc15018045126/sora/widget/style/DiagnosticIndicatorStyle.java +0 -37
  541. package/android/sora-editor/editor/src/main/java/io/github/abc15018045126/sora/widget/style/LineInfoPanelPosition.java +0 -33
  542. package/android/sora-editor/editor/src/main/java/io/github/abc15018045126/sora/widget/style/LineInfoPanelPositionMode.java +0 -30
  543. package/android/sora-editor/editor/src/main/java/io/github/abc15018045126/sora/widget/style/SelectionHandleStyle.java +0 -98
  544. package/android/sora-editor/editor/src/main/java/io/github/abc15018045126/sora/widget/style/builtin/FadeCursorAnimator.java +0 -179
  545. package/android/sora-editor/editor/src/main/java/io/github/abc15018045126/sora/widget/style/builtin/HandleStyleDrop.java +0 -80
  546. package/android/sora-editor/editor/src/main/java/io/github/abc15018045126/sora/widget/style/builtin/HandleStyleNone.java +0 -28
  547. package/android/sora-editor/editor/src/main/java/io/github/abc15018045126/sora/widget/style/builtin/HandleStyleSideDrop.java +0 -60
  548. package/android/sora-editor/editor/src/main/java/io/github/abc15018045126/sora/widget/style/builtin/MoveCursorAnimator.java +0 -159
  549. package/android/sora-editor/editor/src/main/java/io/github/abc15018045126/sora/widget/style/builtin/ScaleCursorAnimator.java +0 -166
  550. package/android/sora-editor/language-textmate/src/main/java/io/github/abc15018045126/sora/langs/textmate/MyState.java +0 -46
  551. package/android/sora-editor/language-textmate/src/main/java/io/github/abc15018045126/sora/langs/textmate/TextMateAnalyzer.java +0 -301
  552. package/android/sora-editor/language-textmate/src/main/java/io/github/abc15018045126/sora/langs/textmate/TextMateColorScheme.java +0 -369
  553. package/android/sora-editor/language-textmate/src/main/java/io/github/abc15018045126/sora/langs/textmate/TextMateLanguage.java +0 -314
  554. package/android/sora-editor/language-textmate/src/main/java/io/github/abc15018045126/sora/langs/textmate/TextMateNewlineHandler.java +0 -547
  555. package/android/sora-editor/language-textmate/src/main/java/io/github/abc15018045126/sora/langs/textmate/TextMateSymbolPairMatch.java +0 -240
  556. package/android/sora-editor/language-textmate/src/main/java/io/github/abc15018045126/sora/langs/textmate/folding/FoldingHelper.java +0 -35
  557. package/android/sora-editor/language-textmate/src/main/java/io/github/abc15018045126/sora/langs/textmate/folding/FoldingRegion.java +0 -51
  558. package/android/sora-editor/language-textmate/src/main/java/io/github/abc15018045126/sora/langs/textmate/folding/FoldingRegions.java +0 -96
  559. package/android/sora-editor/language-textmate/src/main/java/io/github/abc15018045126/sora/langs/textmate/folding/IndentRange.java +0 -169
  560. package/android/sora-editor/language-textmate/src/main/java/io/github/abc15018045126/sora/langs/textmate/folding/PreviousRegion.java +0 -41
  561. package/android/sora-editor/language-textmate/src/main/java/io/github/abc15018045126/sora/langs/textmate/folding/RangesCollector.java +0 -71
  562. package/android/sora-editor/language-textmate/src/main/java/io/github/abc15018045126/sora/langs/textmate/registry/FileProviderRegistry.java +0 -83
  563. package/android/sora-editor/language-textmate/src/main/java/io/github/abc15018045126/sora/langs/textmate/registry/GrammarRegistry.java +0 -321
  564. package/android/sora-editor/language-textmate/src/main/java/io/github/abc15018045126/sora/langs/textmate/registry/ThemeRegistry.java +0 -186
  565. package/android/sora-editor/language-textmate/src/main/java/io/github/abc15018045126/sora/langs/textmate/registry/model/DefaultGrammarDefinition.java +0 -121
  566. package/android/sora-editor/language-textmate/src/main/java/io/github/abc15018045126/sora/langs/textmate/registry/model/GrammarDefinition.java +0 -51
  567. package/android/sora-editor/language-textmate/src/main/java/io/github/abc15018045126/sora/langs/textmate/registry/model/ThemeModel.java +0 -106
  568. package/android/sora-editor/language-textmate/src/main/java/io/github/abc15018045126/sora/langs/textmate/utils/ColorUtils.java +0 -79
  569. package/android/sora-editor/language-textmate/src/main/java/io/github/abc15018045126/sora/langs/textmate/utils/MatcherUtils.java +0 -54
  570. package/android/sora-editor/language-textmate/src/main/java/io/github/abc15018045126/sora/langs/textmate/utils/StringUtils.java +0 -64
  571. package/android/sora-editor/oniguruma-native/src/main/java/io/github/abc15018045126/oniguruma/OnigNative.java +0 -121
@@ -0,0 +1,1349 @@
1
+ package io.github.abc15018045126.sora.widget
2
+
3
+ import android.content.res.Resources
4
+ import android.graphics.PointF
5
+ import android.graphics.RectF
6
+ import android.os.Build
7
+ import android.os.SystemClock
8
+ import android.util.TypedValue
9
+ import android.view.GestureDetector
10
+ import android.view.HapticFeedbackConstants
11
+ import android.view.MotionEvent
12
+ import android.view.ScaleGestureDetector
13
+ import android.view.ViewConfiguration
14
+ import androidx.annotation.NonNull
15
+ import androidx.annotation.Nullable
16
+ import io.github.abc15018045126.sora.event.*
17
+ import io.github.abc15018045126.sora.graphics.RectUtils
18
+ import io.github.abc15018045126.sora.lang.styling.Span
19
+ import io.github.abc15018045126.sora.lang.styling.StylesUtils
20
+ import io.github.abc15018045126.sora.lang.styling.line.LineSideIcon
21
+ import io.github.abc15018045126.sora.text.CharPosition
22
+ import io.github.abc15018045126.sora.text.TextRange
23
+ import io.github.abc15018045126.sora.util.IntPair
24
+ import io.github.abc15018045126.sora.util.Numbers
25
+ import io.github.abc15018045126.sora.widget.component.Magnifier
26
+ import io.github.abc15018045126.sora.widget.style.SelectionHandleStyle
27
+ import java.util.Objects
28
+ import kotlin.jvm.functions.Function7
29
+ import kotlin.math.abs
30
+ import kotlin.math.max
31
+ import kotlin.math.min
32
+ import kotlin.math.sqrt
33
+
34
+ fun interface EditorMotionEventConstructor {
35
+ fun create(
36
+ editor: CodeEditor,
37
+ pos: CharPosition,
38
+ event: MotionEvent,
39
+ span: Span?,
40
+ spanRange: TextRange?,
41
+ motionRegion: Int,
42
+ motionBound: Int
43
+ ): EditorMotionEvent
44
+ }
45
+
46
+ /**
47
+ * Handles touch events of editor
48
+ *
49
+ * @author abc15018045126
50
+ */
51
+ class EditorTouchEventHandler(@NonNull private val editor: CodeEditor) :
52
+ GestureDetector.OnGestureListener, GestureDetector.OnDoubleTapListener,
53
+ ScaleGestureDetector.OnScaleGestureListener {
54
+
55
+ private val scroller: EditorScroller = EditorScroller(editor)
56
+ private val insertHandle: SelectionHandle = SelectionHandle(BOTH)
57
+ @JvmField
58
+ internal var editorMagnifier: Magnifier = Magnifier(editor)
59
+ @JvmField
60
+ internal var selHandleType: Int = -1
61
+ @JvmField
62
+ internal var selHandleMoving: Boolean = false
63
+ @JvmField
64
+ internal var motionX: Float = 0f
65
+ @JvmField
66
+ internal var motionY: Float = 0f
67
+ @JvmField
68
+ internal var glowTopOrBottom: Boolean = false //true for bottom
69
+ @JvmField
70
+ internal var glowLeftOrRight: Boolean = false //true for right
71
+ @JvmField
72
+ @get:JvmName("isScaling")
73
+ var isScaling: Boolean = false
74
+ @JvmField
75
+ internal var scaleMaxSize: Float
76
+ @JvmField
77
+ internal var scaleMinSize: Float
78
+ private var textSizeStart: Float = 0f
79
+ private var timeLastScroll: Long = 0
80
+ private var timeLastSetSelection: Long = 0
81
+ private var holdingScrollbarVertical: Boolean = false
82
+ private var holdingScrollbarHorizontal: Boolean = false
83
+ private var thumbDownY: Float = 0f
84
+ private var thumbDownX: Float = 0f
85
+ private var leftHandle: SelectionHandle = SelectionHandle(LEFT)
86
+ private var rightHandle: SelectionHandle = SelectionHandle(RIGHT)
87
+ private var edgeFieldSize: Float
88
+ private var edgeFlags: Int = 0
89
+ private val touchSlop: Int
90
+ private var thumbMotionRecord: MotionEvent? = null
91
+ private var mouseDownX: Float = 0f
92
+ private var mouseDownY: Float = 0f
93
+ private var mouseDownButtonState: Int = 0
94
+ private var lastTimeMousePrimaryClickUp: Long = 0
95
+ private var mouseDoubleClick: Boolean = false
96
+ internal var lastContextClickPosition: PointF? = null
97
+ @JvmField
98
+ internal var mouseClick: Boolean = false
99
+ @JvmField
100
+ internal var mouseCanMoveText: Boolean = false
101
+ @JvmField
102
+ internal var draggingSelection: CharPosition? = null
103
+
104
+ /* dragging selection fields */
105
+ private var dragSelectActive: Boolean = false
106
+ private var dragSelectStarted: Boolean = false
107
+ private var dragSelectInitialCharIndex: Int = -1
108
+ private var dragSelectInitialLeftIndex: Int = -1
109
+ private var dragSelectInitialRightIndex: Int = -1
110
+ private var dragSelectLastDragIndex: Int = -1
111
+
112
+ init {
113
+ edgeFieldSize = editor.dpUnit * 18
114
+ scaleMaxSize = TypedValue.applyDimension(
115
+ TypedValue.COMPLEX_UNIT_SP,
116
+ 26f,
117
+ Resources.getSystem().displayMetrics
118
+ )
119
+ scaleMinSize = TypedValue.applyDimension(
120
+ TypedValue.COMPLEX_UNIT_SP,
121
+ 8f,
122
+ Resources.getSystem().displayMetrics
123
+ )
124
+ val config = ViewConfiguration.get(editor.context)
125
+ touchSlop = config.scaledTouchSlop
126
+ }
127
+
128
+ fun hasAnyHeldHandle(): Boolean {
129
+ return selHandleType != -1
130
+ }
131
+
132
+ fun isHandleMoving(): Boolean {
133
+ return selHandleMoving
134
+ }
135
+
136
+ /**
137
+ * Whether we should draw scroll bars
138
+ *
139
+ * @return whether draw scroll bars
140
+ */
141
+ fun shouldDrawScrollBarForTouch(): Boolean {
142
+ return System.currentTimeMillis() - timeLastScroll < EditorTouchEventHandler.HIDE_DELAY + EditorTouchEventHandler.SCROLLBAR_FADE_ANIMATION_TIME || holdingScrollbarVertical || holdingScrollbarHorizontal
143
+ }
144
+
145
+ fun getScrollBarFadeOutPercentageForTouch(): Float {
146
+ val now = System.currentTimeMillis()
147
+ if (now - timeLastScroll < EditorTouchEventHandler.HIDE_DELAY || holdingScrollbarVertical || holdingScrollbarHorizontal) {
148
+ return 0f
149
+ } else if (now - timeLastScroll >= EditorTouchEventHandler.HIDE_DELAY && now - timeLastScroll < EditorTouchEventHandler.HIDE_DELAY + EditorTouchEventHandler.SCROLLBAR_FADE_ANIMATION_TIME) {
150
+ editor.postInvalidateOnAnimation()
151
+ return (now - timeLastScroll - EditorTouchEventHandler.HIDE_DELAY).toFloat() / EditorTouchEventHandler.SCROLLBAR_FADE_ANIMATION_TIME
152
+ }
153
+ return 1f
154
+ }
155
+
156
+ /**
157
+ * Hide the insert handle at once
158
+ */
159
+ fun hideInsertHandle() {
160
+ if (!shouldDrawInsertHandle()) {
161
+ return
162
+ }
163
+ timeLastSetSelection = 0
164
+ editor.invalidate()
165
+ }
166
+
167
+ /**
168
+ * Whether the vertical scroll bar is touched
169
+ *
170
+ * @return Whether touched
171
+ */
172
+ fun holdVerticalScrollBar(): Boolean {
173
+ return holdingScrollbarVertical
174
+ }
175
+
176
+ /**
177
+ * Whether the horizontal scroll bar is touched
178
+ *
179
+ * @return Whether touched
180
+ */
181
+ fun holdHorizontalScrollBar(): Boolean {
182
+ return holdingScrollbarHorizontal
183
+ }
184
+
185
+ /**
186
+ * Whether insert handle is touched
187
+ *
188
+ * @return Whether touched
189
+ */
190
+ fun holdInsertHandle(): Boolean {
191
+ return selHandleType == BOTH
192
+ }
193
+
194
+ /**
195
+ * Whether the editor should draw insert handler
196
+ *
197
+ * @return Whether to draw
198
+ */
199
+ fun shouldDrawInsertHandle(): Boolean {
200
+ return System.currentTimeMillis() - timeLastSetSelection < HIDE_DELAY_HANDLE || holdInsertHandle()
201
+ }
202
+
203
+ /**
204
+ * Notify the editor later to hide scroll bars
205
+ */
206
+ fun notifyScrolled() {
207
+ timeLastScroll = System.currentTimeMillis()
208
+ val scrollNotifier = Runnable {
209
+ if (System.currentTimeMillis() - timeLastScroll >= HIDE_DELAY) {
210
+ editor.invalidate()
211
+ }
212
+ }
213
+ io.github.abc15018045126.sora.util.EditorHandler.postDelayed(scrollNotifier, HIDE_DELAY.toLong())
214
+ }
215
+
216
+
217
+
218
+ /**
219
+ * Notify the editor later to hide insert handle
220
+ */
221
+ fun notifyLater() {
222
+ timeLastSetSelection = System.currentTimeMillis()
223
+ val invalidateNotifier = Runnable {
224
+ if (System.currentTimeMillis() - timeLastSetSelection >= HIDE_DELAY_HANDLE) {
225
+ editor.invalidate()
226
+ }
227
+ }
228
+ io.github.abc15018045126.sora.util.EditorHandler.postDelayed({
229
+ if (editor.isReleased) return@postDelayed
230
+ invalidateNotifier.run()
231
+ }, HIDE_DELAY_HANDLE.toLong())
232
+ }
233
+
234
+
235
+ /**
236
+ * Called by editor
237
+ * Whether this class is handling motions by user
238
+ *
239
+ * @return Whether handling
240
+ */
241
+ fun handlingMotions(): Boolean {
242
+ return holdHorizontalScrollBar() || holdVerticalScrollBar() || hasAnyHeldHandle()
243
+ }
244
+
245
+ /**
246
+ * Get scroller for editor
247
+ *
248
+ * @return Scroller using
249
+ */
250
+ fun getScroller(): EditorScroller {
251
+ return scroller
252
+ }
253
+
254
+ /**
255
+ * Reset states of handler
256
+ */
257
+ fun reset() {
258
+ scroller.startScroll(0, 0, 0, 0, 0)
259
+ reset2()
260
+ }
261
+
262
+ /**
263
+ * Reset states of handler, except scrolling state
264
+ */
265
+ fun reset2() {
266
+ holdingScrollbarHorizontal = false
267
+ holdingScrollbarVertical = false
268
+ selHandleType = -1
269
+ finishDragSelect()
270
+ dismissMagnifier()
271
+ }
272
+
273
+ private fun getHandleDescriptorByType(type: Int): SelectionHandleStyle.HandleDescriptor? {
274
+ return when (type) {
275
+ BOTH -> editor.insertHandleDescriptor
276
+ LEFT -> editor.leftHandleDescriptor
277
+ RIGHT -> editor.rightHandleDescriptor
278
+ else -> null
279
+ }
280
+ }
281
+
282
+ fun updateMagnifier(e: MotionEvent) {
283
+ if (edgeFlags != 0 || !hasAnyHeldHandle() || !editorMagnifier.isEnabled) {
284
+ dismissMagnifier()
285
+ return
286
+ }
287
+ // A handle is already held
288
+ val desc = getHandleDescriptorByType(selHandleType) ?: return
289
+ val pos = desc.position
290
+
291
+ val height = pos.height()
292
+ val x: Int
293
+ val y: Int
294
+ if (editor.isStickyTextSelection) {
295
+ x = min(e.x.toInt(), pos.right.toInt())
296
+ y = (pos.top - height / 2).toInt()
297
+ } else {
298
+ x = e.x.toInt()
299
+ y = (e.y - height / 2 - editor.rowHeight).toInt()
300
+ }
301
+ editorMagnifier.show(x, y)
302
+ }
303
+
304
+ fun dismissMagnifier() {
305
+ editorMagnifier.dismiss()
306
+ }
307
+
308
+ private fun beginDragSelect(line: Int, column: Int) {
309
+ if (!editor.props!!.dragSelectAfterLongPress) {
310
+
311
+ return
312
+ }
313
+ val text = editor.text
314
+ dragSelectInitialCharIndex = text.getCharIndex(line, column)
315
+ val cursor = editor.cursor!!
316
+
317
+ dragSelectInitialLeftIndex = text.getCharIndex(cursor.leftLine, cursor.leftColumn)
318
+ dragSelectInitialRightIndex = text.getCharIndex(cursor.rightLine, cursor.rightColumn)
319
+ dragSelectLastDragIndex = dragSelectInitialCharIndex
320
+ dragSelectActive = true
321
+ dragSelectStarted = false
322
+ }
323
+
324
+
325
+ fun isDragSelecting(): Boolean {
326
+ return dragSelectActive
327
+ }
328
+
329
+ private fun updateDragSelectMagnifier(e: MotionEvent) {
330
+ if (!editor.props!!.dragSelectAfterLongPress ||
331
+
332
+ edgeFlags != 0 || !editorMagnifier.isEnabled || !dragSelectStarted
333
+ ) {
334
+ dismissMagnifier()
335
+ return
336
+ }
337
+ if (!editorMagnifier.isShowing()) {
338
+ val dx = e.x - thumbDownX
339
+ val dy = e.y - thumbDownY
340
+ if (sqrt((dx * dx + dy * dy).toDouble()) < EditorTouchEventHandler.MAGNIFIER_TOUCH_SLOP) {
341
+ return
342
+ }
343
+ }
344
+ val x = e.x.toInt()
345
+ val y = (e.y - editor.rowHeight).toInt()
346
+ editorMagnifier.show(x, y)
347
+ }
348
+
349
+ private fun handleDragSelect(e: MotionEvent, fromEdgeScroll: Boolean): Boolean {
350
+ if (!editor.props!!.dragSelectAfterLongPress || !dragSelectActive) {
351
+
352
+ return false
353
+ }
354
+ val text = editor.text
355
+ if (text.length == 0) {
356
+ return true
357
+ }
358
+ val res = editor.getPointPositionOnScreen(e.x, e.y)
359
+ val line = IntPair.getFirst(res)
360
+ val column = IntPair.getSecond(res)
361
+ val currentIndex = text.getCharIndex(line, column)
362
+ if (!dragSelectStarted) {
363
+ if (currentIndex == dragSelectInitialCharIndex) {
364
+ if (!fromEdgeScroll)
365
+ scrollIfThumbReachesEdge(e)
366
+ return true
367
+ }
368
+ dragSelectStarted = true
369
+ }
370
+ if (currentIndex == dragSelectLastDragIndex) {
371
+ updateDragSelectMagnifier(e)
372
+ if (!fromEdgeScroll)
373
+ scrollIfThumbReachesEdge(e)
374
+ return true
375
+ }
376
+ var anchorIndex = if (currentIndex <= dragSelectInitialCharIndex) dragSelectInitialRightIndex else dragSelectInitialLeftIndex
377
+ anchorIndex = Numbers.coerceIn(anchorIndex, 0, text.length)
378
+ val startIndex = min(anchorIndex, currentIndex)
379
+ val endIndex = max(anchorIndex, currentIndex)
380
+ val indexer = text.indexer
381
+ if (startIndex == endIndex) {
382
+ val pos = indexer.getCharPosition(startIndex)
383
+ editor.setSelection(pos.line, pos.column, false, SelectionChangeEvent.CAUSE_SELECTION_HANDLE)
384
+ } else {
385
+ val startPos = indexer.getCharPosition(startIndex)
386
+ val endPos = indexer.getCharPosition(endIndex)
387
+ editor.setSelectionRegion(startPos.line, startPos.column, endPos.line, endPos.column, false, SelectionChangeEvent.CAUSE_SELECTION_HANDLE)
388
+ }
389
+ dragSelectLastDragIndex = currentIndex
390
+ updateDragSelectMagnifier(e)
391
+ if (!fromEdgeScroll)
392
+ scrollIfThumbReachesEdge(e)
393
+ return true
394
+ }
395
+
396
+ private fun finishDragSelect() {
397
+ val startedBefore = dragSelectStarted
398
+ dragSelectActive = false
399
+ dragSelectStarted = false
400
+ dragSelectInitialCharIndex = -1
401
+ dragSelectInitialLeftIndex = -1
402
+ dragSelectInitialRightIndex = -1
403
+ dragSelectLastDragIndex = -1
404
+ if (startedBefore) {
405
+ editor.dispatchEvent(DragSelectStopEvent(editor))
406
+ }
407
+ }
408
+
409
+ /**
410
+ * Handle events apart from detectors
411
+ *
412
+ * @param e The event editor received
413
+ * @return Whether this touch event is handled by this class
414
+ */
415
+ fun onTouchEvent(e: MotionEvent): Boolean {
416
+ motionY = e.y
417
+ motionX = e.x
418
+ when (e.action) {
419
+ MotionEvent.ACTION_DOWN -> {
420
+ finishDragSelect()
421
+ thumbDownY = e.y
422
+ thumbDownX = e.x
423
+ holdingScrollbarHorizontal = false
424
+ holdingScrollbarVertical = false
425
+ var rect = editor.renderer.verticalScrollBarRect
426
+ if (RectUtils.contains(rect, e.x, e.y, editor.dpUnit * 10)) {
427
+ holdingScrollbarVertical = true
428
+ }
429
+ rect = editor.renderer.horizontalScrollBarRect
430
+ if (rect.contains(e.x, e.y)) {
431
+ holdingScrollbarHorizontal = true
432
+ }
433
+ if (holdingScrollbarVertical || holdingScrollbarHorizontal) {
434
+ if (holdingScrollbarVertical && holdingScrollbarHorizontal) {
435
+ holdingScrollbarHorizontal = false
436
+ }
437
+ editor.invalidate()
438
+ } else {
439
+ val allowedDistance = editor.dpUnit * 7
440
+ if (shouldDrawInsertHandle() && RectUtils.almostContains(editor.insertHandleDescriptor!!.position, e.x, e.y, allowedDistance)) {
441
+
442
+ selHandleType = BOTH
443
+ }
444
+ val left = RectUtils.almostContains(editor.leftHandleDescriptor!!.position, e.x, e.y, allowedDistance)
445
+
446
+ val right = RectUtils.almostContains(editor.rightHandleDescriptor!!.position, e.x, e.y, allowedDistance)
447
+
448
+ if (left) {
449
+ selHandleType = LEFT
450
+ } else if (right) {
451
+ selHandleType = RIGHT
452
+ }
453
+ if (selHandleType != -1) {
454
+ selHandleMoving = false
455
+ dispatchHandleStateChange(selHandleType, true)
456
+ }
457
+ }
458
+ return true
459
+ }
460
+ MotionEvent.ACTION_MOVE -> {
461
+ if (holdingScrollbarVertical) {
462
+ val movedDis = e.y - thumbDownY
463
+ thumbDownY = e.y
464
+ val all = editor.scrollMaxY.toFloat()
465
+ val dy = movedDis / (editor.height - editor.renderer.verticalScrollBarRect.height()) * all
466
+ scrollBy(0f, dy)
467
+ return true
468
+ }
469
+ if (holdingScrollbarHorizontal) {
470
+ val movedDis = e.x - thumbDownX
471
+ thumbDownX = e.x
472
+ val all = (editor.scrollMaxX + editor.width).toFloat()
473
+ val dx: Float
474
+ if (editor.renderer.horizontalScrollBarRect.width() <= 60 * editor.dpUnit) {
475
+ dx = movedDis / (editor.width - editor.renderer.horizontalScrollBarRect.width()) * all
476
+ } else {
477
+ dx = movedDis / editor.width * all
478
+ }
479
+ scrollBy(dx, 0f)
480
+ return true
481
+ }
482
+ if (handleDragSelect(e, false)) {
483
+ return true
484
+ }
485
+ if (!selHandleMoving && (abs(e.x - thumbDownX) > touchSlop || abs(e.y - thumbDownY) > touchSlop)) {
486
+ selHandleMoving = true
487
+ }
488
+ if (selHandleMoving && handleSelectionChange(e)) {
489
+ if (editorMagnifier.isShowing() || sqrt(((e.x - thumbDownX) * (e.x - thumbDownX) +
490
+ (e.y - thumbDownY) * (e.y - thumbDownY)).toDouble()) >= EditorTouchEventHandler.MAGNIFIER_TOUCH_SLOP) {
491
+ updateMagnifier(e)
492
+ }
493
+ editor.invalidate()
494
+ return true
495
+ }
496
+ return false
497
+ }
498
+ MotionEvent.ACTION_UP, MotionEvent.ACTION_CANCEL -> {
499
+ if (holdingScrollbarVertical || holdingScrollbarHorizontal) {
500
+ holdingScrollbarVertical = false
501
+ holdingScrollbarHorizontal = false
502
+ timeLastScroll = System.currentTimeMillis()
503
+ notifyScrolled()
504
+ }
505
+ finishDragSelect()
506
+ if (selHandleType != -1) {
507
+ dispatchHandleStateChange(selHandleType, false)
508
+ if (selHandleType == BOTH)
509
+ notifyLater()
510
+ selHandleType = -1
511
+ }
512
+ editor.invalidate()
513
+ stopEdgeScroll()
514
+ dismissMagnifier()
515
+ }
516
+ }
517
+ return false
518
+ }
519
+
520
+ private fun shouldForwardToTouch(): Boolean {
521
+ return holdingScrollbarHorizontal || holdingScrollbarVertical
522
+ }
523
+
524
+ /**
525
+ * Entry for mouse motion events
526
+ */
527
+ fun onMouseEvent(event: MotionEvent): Boolean {
528
+ if (editor.isFormatting) {
529
+ resetMouse()
530
+ return false
531
+ }
532
+
533
+ if (shouldForwardToTouch()) {
534
+ return onTouchEvent(event)
535
+ }
536
+ lastContextClickPosition = null
537
+ when (event.actionMasked) {
538
+ MotionEvent.ACTION_DOWN -> {
539
+ mouseDownX = event.x
540
+ mouseDownY = event.y
541
+ mouseDownButtonState = event.buttonState
542
+ mouseClick = true
543
+ if ((mouseDownButtonState and MotionEvent.BUTTON_PRIMARY) != 0) {
544
+ if (onTouchEvent(event) && shouldForwardToTouch()) {
545
+ return true
546
+ }
547
+ if (SystemClock.uptimeMillis() - lastTimeMousePrimaryClickUp < ViewConfiguration.getDoubleTapTimeout()) {
548
+ mouseDoubleClick = true
549
+ onDoubleTap(event)
550
+ return true
551
+ }
552
+ val pos = editor.getPointPositionOnScreen(mouseDownX, mouseDownY)
553
+ val line = IntPair.getFirst(pos)
554
+ val column = IntPair.getSecond(pos)
555
+ val charPos = editor.text.indexer.getCharPosition(line, column)
556
+ mouseCanMoveText = if (editor.isTextSelected && editor.cursorRange.isPositionInside(charPos) && editor.isScreenPointOnText(mouseDownX, mouseDownY)) {
557
+ true
558
+ } else {
559
+ editor.setSelection(line, column, SelectionChangeEvent.CAUSE_MOUSE_INPUT)
560
+ editor.requestFocus()
561
+ false
562
+ }
563
+ draggingSelection = charPos
564
+ editor.postInvalidate()
565
+ }
566
+ }
567
+ MotionEvent.ACTION_MOVE -> {
568
+ if (mouseDoubleClick) {
569
+ return true
570
+ }
571
+ if (abs(event.x - mouseDownX) > touchSlop || abs(event.y - mouseDownY) > touchSlop) {
572
+ mouseClick = false
573
+ }
574
+ if ((mouseDownButtonState and MotionEvent.BUTTON_PRIMARY) != 0) {
575
+ val pos = editor.getPointPositionOnScreen(event.x, event.y)
576
+ val line = IntPair.getFirst(pos)
577
+ val column = IntPair.getSecond(pos)
578
+ val charPos = editor.text.indexer.getCharPosition(line, column)
579
+ if (!mouseClick && !mouseCanMoveText) {
580
+ val anchor = editor.selectionAnchor!!
581
+ editor.setSelectionRegion(anchor.line, anchor.column, line, column, SelectionChangeEvent.CAUSE_MOUSE_INPUT)
582
+
583
+ }
584
+ draggingSelection = charPos
585
+ editor.postInvalidate()
586
+ scrollIfThumbReachesEdge(event)
587
+ }
588
+ }
589
+ MotionEvent.ACTION_UP -> {
590
+ if (event.eventTime - event.downTime > ViewConfiguration.getTapTimeout() * 2f) {
591
+ mouseClick = false
592
+ }
593
+ if (!mouseDoubleClick) {
594
+ if (mouseCanMoveText && !mouseClick && (mouseDownButtonState and MotionEvent.BUTTON_PRIMARY) != 0) {
595
+ val pos = editor.getPointPositionOnScreen(event.x, event.y)
596
+ val line = IntPair.getFirst(pos)
597
+ val column = IntPair.getSecond(pos)
598
+ val dest = editor.text.indexer.getCharPosition(line, column)
599
+ val curRange = editor.cursorRange
600
+ if (!curRange.isPositionInside(dest) && (editor.getKeyMetaStates().isCtrlPressed || curRange.end != dest)) {
601
+ val length = curRange.endIndex - curRange.startIndex
602
+ val insIndex = if (editor.getKeyMetaStates().isCtrlPressed) dest.index else if (dest.index < curRange.startIndex) dest.index else dest.index - length
603
+ val text = editor.text
604
+ val insText = text.substring(curRange.startIndex, curRange.endIndex)
605
+ val insPos: CharPosition
606
+ if (editor.getKeyMetaStates().isCtrlPressed) {
607
+ text.insert(dest.line, dest.column, insText)
608
+ insPos = dest
609
+ } else {
610
+ text.beginBatchEdit()
611
+ editor.deleteText()
612
+ insPos = text.indexer.getCharPosition(insIndex)
613
+ text.insert(insPos.line, insPos.column, insText)
614
+ text.endBatchEdit()
615
+ }
616
+ val endPos = text.indexer.getCharPosition(insIndex + length)
617
+ editor.setSelectionRegion(insPos.line, insPos.column, endPos.line, endPos.column, SelectionChangeEvent.CAUSE_MOUSE_INPUT)
618
+ }
619
+ }
620
+ if (mouseClick) {
621
+ if ((mouseDownButtonState and MotionEvent.BUTTON_PRIMARY) != 0) {
622
+ onSingleTapUp(event)
623
+ lastTimeMousePrimaryClickUp = event.eventTime
624
+ } else if ((mouseDownButtonState and MotionEvent.BUTTON_SECONDARY) != 0) {
625
+ onContextClick(event)
626
+ }
627
+ }
628
+ }
629
+ resetMouse()
630
+ stopEdgeScroll()
631
+ }
632
+ MotionEvent.ACTION_CANCEL -> {
633
+ resetMouse()
634
+ stopEdgeScroll()
635
+ }
636
+ }
637
+ return true
638
+ }
639
+
640
+ /**
641
+ * Reset mouse handling state
642
+ */
643
+ fun resetMouse() {
644
+ mouseDownX = 0f
645
+ mouseDownY = 0f
646
+ mouseClick = false
647
+ mouseCanMoveText = false
648
+ draggingSelection = null
649
+ if (mouseDoubleClick) {
650
+ mouseDoubleClick = false
651
+ lastTimeMousePrimaryClickUp = 0L
652
+ }
653
+ }
654
+
655
+ /**
656
+ * Context click
657
+ */
658
+ fun onContextClick(event: MotionEvent) {
659
+ lastContextClickPosition = PointF(event.x, event.y)
660
+ if ((dispatchEditorMotionEvent(::ContextClickEvent, null, event) and InterceptTarget.TARGET_EDITOR) != 0) {
661
+ return
662
+ }
663
+
664
+ if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) {
665
+ editor.performContextClick(event.x, event.y)
666
+ } else if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
667
+ editor.performContextClick()
668
+ }
669
+
670
+ if (editor.props!!.mouseContextMenu) {
671
+
672
+ if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) {
673
+ editor.showContextMenu(event.x, event.y)
674
+ } else {
675
+ editor.showContextMenu()
676
+ }
677
+ }
678
+ }
679
+
680
+ @Nullable
681
+ fun getLastContextClickPosition(): PointF? {
682
+ return lastContextClickPosition
683
+ }
684
+
685
+ private fun dispatchHandleStateChange(type: Int, held: Boolean) {
686
+ editor.dispatchEvent(HandleStateChangeEvent(editor, type, held))
687
+ }
688
+
689
+ fun dispatchEditorMotionEvent(
690
+ constructor: EditorMotionEventConstructor,
691
+ @Nullable pos: CharPosition?,
692
+ @NonNull event: MotionEvent
693
+ ): Int {
694
+ val region = editor.resolveTouchRegion(event)
695
+ return dispatchEditorMotionEvent(constructor, pos, event, IntPair.getFirst(region), IntPair.getSecond(region))
696
+ }
697
+
698
+ fun dispatchEditorMotionEvent(
699
+ constructor: EditorMotionEventConstructor,
700
+ @Nullable pos: CharPosition?,
701
+ @NonNull event: MotionEvent,
702
+ motionRegion: Int,
703
+ motionBound: Int
704
+ ): Int {
705
+ var currentPos = pos
706
+ if (currentPos == null) {
707
+ val pt = editor.getPointPositionOnScreen(event.x, event.y)
708
+ currentPos = editor.text.indexer.getCharPosition(IntPair.getFirst(pt), IntPair.getSecond(pt))
709
+ }
710
+ val styles = editor.styles
711
+ val text = editor.text
712
+ val span = StylesUtils.getSpanForPosition(styles, currentPos)
713
+ val nextSpan = StylesUtils.getFollowingSpanForPosition(styles, currentPos)
714
+ var range: TextRange? = null
715
+ if (span != null) {
716
+ val startPos = text.indexer.getCharPosition(currentPos.line, Numbers.coerceIn(span.column, 0, text.getColumnCount(currentPos.line)))
717
+ val endPos = if (nextSpan != null)
718
+ text.indexer.getCharPosition(currentPos.line, Numbers.coerceIn(nextSpan.column, 0, text.getColumnCount(currentPos.line)))
719
+ else text.indexer.getCharPosition(currentPos.line, text.getColumnCount(currentPos.line))
720
+ range = TextRange(startPos, endPos)
721
+ }
722
+ return editor.dispatchEvent(constructor.create(editor, currentPos, event, span, range, motionRegion, motionBound))
723
+ }
724
+
725
+ private fun handleSelectionChange(e: MotionEvent): Boolean {
726
+ when (selHandleType) {
727
+ BOTH -> {
728
+ insertHandle.applyPosition(e)
729
+ scrollIfThumbReachesEdge(e)
730
+ return true
731
+ }
732
+ LEFT -> {
733
+ editor.selectionAnchor = editor.cursor!!.right()
734
+
735
+ leftHandle.applyPosition(e)
736
+ scrollIfThumbReachesEdge(e)
737
+ return true
738
+ }
739
+ RIGHT -> {
740
+ editor.selectionAnchor = editor.cursor!!.left()
741
+
742
+ rightHandle.applyPosition(e)
743
+ scrollIfThumbReachesEdge(e)
744
+ return true
745
+ }
746
+ }
747
+ return false
748
+ }
749
+
750
+ private fun handleSelectionChange2(e: MotionEvent) {
751
+ when (selHandleType) {
752
+ BOTH -> insertHandle.applyPosition(e)
753
+ LEFT -> leftHandle.applyPosition(e)
754
+ RIGHT -> rightHandle.applyPosition(e)
755
+ }
756
+ }
757
+
758
+ private fun computeEdgeFlags(x: Float, y: Float): Int {
759
+ var flags = 0
760
+ if (x < edgeFieldSize) {
761
+ flags = flags or LEFT_EDGE
762
+ }
763
+ if (y < edgeFieldSize) {
764
+ flags = flags or TOP_EDGE
765
+ }
766
+ if (x > editor.width - edgeFieldSize) {
767
+ flags = flags or RIGHT_EDGE
768
+ }
769
+ if (y > editor.height - edgeFieldSize) {
770
+ flags = flags or BOTTOM_EDGE
771
+ }
772
+ return flags
773
+ }
774
+
775
+ fun scrollIfThumbReachesEdge(@Nullable e: MotionEvent?) {
776
+ scrollIfReachesEdge(e, 0f, 0f)
777
+ }
778
+
779
+ fun scrollIfReachesEdge(@Nullable e: MotionEvent?, x: Float, y: Float) {
780
+ var currentX = x
781
+ var currentY = y
782
+ if (e != null) {
783
+ currentX = e.x
784
+ currentY = e.y
785
+ }
786
+ val flag = computeEdgeFlags(currentX, currentY)
787
+ if (flag != 0) {
788
+ val oldFlags = edgeFlags
789
+ edgeFlags = flag
790
+ thumbMotionRecord = if (e == null) null else MotionEvent.obtain(e)
791
+ if (oldFlags == 0) {
792
+ val initialDelta = (8 * editor.dpUnit).toInt()
793
+ io.github.abc15018045126.sora.util.EditorHandler.post {
794
+ if (editor.isReleased) return@post
795
+ EdgeScrollRunnable(initialDelta).run()
796
+ }
797
+
798
+ }
799
+ } else {
800
+ stopEdgeScroll()
801
+ }
802
+ }
803
+
804
+ private fun isSameSign(a: Float, b: Float): Boolean {
805
+ if (abs(a) < 1e-5f || abs(b) < 1e-5f) {
806
+ return false
807
+ }
808
+ return (a < 0 && b < 0) || (a > 0 && b > 0)
809
+ }
810
+
811
+ fun stopEdgeScroll() {
812
+ edgeFlags = 0
813
+ }
814
+
815
+ @JvmOverloads
816
+ fun scrollBy(distanceX: Float, distanceY: Float, smooth: Boolean = false) {
817
+ var endX = scroller.getCurrX() + distanceX.toInt()
818
+ var endY = scroller.getCurrY() + distanceY.toInt()
819
+ endX = max(endX, 0)
820
+ endY = max(endY, 0)
821
+ endY = min(endY, editor.scrollMaxY)
822
+ endX = min(endX, editor.scrollMaxX)
823
+ editor.dispatchEvent(
824
+ ScrollEvent(
825
+ editor, scroller.getCurrX(),
826
+ scroller.getCurrY(), endX, endY, ScrollEvent.CAUSE_USER_DRAG
827
+ )
828
+ )
829
+ if (smooth) {
830
+ scroller.startScroll(
831
+ scroller.getCurrX(),
832
+ scroller.getCurrY(),
833
+ endX - scroller.getCurrX(),
834
+ endY - scroller.getCurrY()
835
+ )
836
+ } else {
837
+ scroller.startScroll(
838
+ scroller.getCurrX(),
839
+ scroller.getCurrY(),
840
+ endX - scroller.getCurrX(),
841
+ endY - scroller.getCurrY(), 0
842
+ )
843
+ scroller.abortAnimation()
844
+ }
845
+ editor.invalidate()
846
+ }
847
+
848
+ fun getTouchedHandleType(): Int {
849
+ return selHandleType
850
+ }
851
+
852
+ override fun onSingleTapUp(@NonNull e: MotionEvent): Boolean {
853
+ scroller.forceFinished(true)
854
+ if (editor.isFormatting) {
855
+ return true
856
+ }
857
+
858
+ val resolved = editor.resolveTouchRegion(e)
859
+ val region = IntPair.getFirst(resolved)
860
+ val regionBound = IntPair.getSecond(resolved)
861
+ val res = editor.getPointPositionOnScreen(e.x, e.y)
862
+ val line = IntPair.getFirst(res)
863
+ val column = IntPair.getSecond(res)
864
+ editor.performClick()
865
+ if (region == REGION_SIDE_ICON) {
866
+ val layout: io.github.abc15018045126.sora.widget.layout.Layout = editor.layout!!
867
+ var row = (e.y + editor.offsetX).toInt() / editor.rowHeight
868
+ row = max(0, min(row, layout.rowCount - 1))
869
+ val inf = layout.getRowAt(row)
870
+
871
+ if (inf.isLeadingRow) {
872
+ val style = editor.renderer.getLineStyle(inf.lineIndex, LineSideIcon::class.java)
873
+ if (style != null) {
874
+ if ((editor.dispatchEvent(SideIconClickEvent(editor, style)) and InterceptTarget.TARGET_EDITOR) != 0) {
875
+ return true
876
+ }
877
+ }
878
+ }
879
+ }
880
+ val position = editor.text.indexer.getCharPosition(line, column)
881
+ if ((dispatchEditorMotionEvent(::ClickEvent, position, e, region, regionBound) and InterceptTarget.TARGET_EDITOR) != 0) {
882
+ return true
883
+ }
884
+ editor.showSoftInput()
885
+ notifyLater()
886
+ val lnAction = editor.props!!.actionWhenLineNumberClicked
887
+
888
+ if (region == REGION_TEXT) {
889
+ if (editor.isInLongSelect) {
890
+ val cursor = editor.cursor!!
891
+ editor.setSelectionRegion(cursor.leftLine, cursor.leftColumn, line, column, false, SelectionChangeEvent.CAUSE_TAP)
892
+
893
+ editor.endLongSelect()
894
+ } else {
895
+ editor.setSelection(line, column, SelectionChangeEvent.CAUSE_TAP)
896
+ }
897
+ } else if (region == REGION_LINE_NUMBER) {
898
+ when (lnAction) {
899
+ DirectAccessProps.LN_ACTION_SELECT_LINE -> editor.setSelectionRegion(line, 0, line, editor.text.getColumnCount(line), false, SelectionChangeEvent.CAUSE_TAP)
900
+ DirectAccessProps.LN_ACTION_PLACE_SELECTION_HOME -> editor.setSelection(line, column, SelectionChangeEvent.CAUSE_TAP)
901
+ DirectAccessProps.LN_ACTION_NOTHING -> {}
902
+ else -> {}
903
+ }
904
+ }
905
+ return true
906
+ }
907
+
908
+ override fun onLongPress(@NonNull e: MotionEvent) {
909
+ scroller.forceFinished(true)
910
+ editor.releaseEdgeEffects()
911
+ if (editor.isFormatting) {
912
+ return
913
+ }
914
+
915
+ val res = editor.getPointPositionOnScreen(e.x, e.y)
916
+ val line = IntPair.getFirst(res)
917
+ val column = IntPair.getSecond(res)
918
+ if ((dispatchEditorMotionEvent(::LongPressEvent, editor.text.indexer.getCharPosition(line, column), e) and InterceptTarget.TARGET_EDITOR) != 0) {
919
+ return
920
+ }
921
+ if ((!editor.props!!.reselectOnLongPress && editor.cursor.isSelected()) || e.pointerCount != 1) {
922
+
923
+ return
924
+ }
925
+ editor.performHapticFeedback(HapticFeedbackConstants.LONG_PRESS)
926
+ editor.selectWord(line, column)
927
+ if (editor.cursor.isSelected()) {
928
+ beginDragSelect(line, column)
929
+ }
930
+ }
931
+
932
+ override fun onScroll(e1: MotionEvent?, @NonNull e2: MotionEvent, distanceX: Float, distanceY: Float): Boolean {
933
+ var dx = distanceX
934
+ var dy = distanceY
935
+ if (editor.props!!.singleDirectionDragging) {
936
+
937
+ if (abs(dx) > abs(dy)) {
938
+ dy = 0f
939
+ } else {
940
+ dx = 0f
941
+ }
942
+ }
943
+ var endX = scroller.getCurrX() + dx.toInt()
944
+ var endY = scroller.getCurrY() + dy.toInt()
945
+ endX = max(endX, 0)
946
+ endY = max(endY, 0)
947
+ endY = min(endY, editor.scrollMaxY)
948
+ endX = min(endX, editor.scrollMaxX)
949
+ var notifyY = true
950
+ var notifyX = true
951
+ if (!editor.verticalEdgeEffect.isFinished) {
952
+ val displacement = max(0f, min(1f, e2.x / editor.width))
953
+ val distance = (if (glowTopOrBottom) dy else -dy) / editor.measuredHeight
954
+ if (distance > 0) {
955
+ endY = scroller.getCurrY()
956
+ editor.verticalEdgeEffect.onPull(distance, if (!glowTopOrBottom) displacement else 1 - displacement)
957
+ } else if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.S) {
958
+ val edgeEffect = editor.verticalEdgeEffect
959
+ edgeEffect.onPullDistance(distance, if (!glowTopOrBottom) displacement else 1 - displacement)
960
+ if (edgeEffect.distance != 0f) {
961
+ endY = scroller.getCurrY()
962
+ }
963
+ } else {
964
+ editor.verticalEdgeEffect.finish()
965
+ }
966
+ notifyY = false
967
+ }
968
+ if (!editor.horizontalEdgeEffect.isFinished) {
969
+ val displacement = max(0f, min(1f, e2.y / editor.height))
970
+ val distance = (if (glowLeftOrRight) dx else -dx) / editor.measuredWidth
971
+ if (distance > 0) {
972
+ endX = scroller.getCurrX()
973
+ editor.horizontalEdgeEffect.onPull(distance, if (!glowLeftOrRight) 1 - displacement else displacement)
974
+ } else if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.S) {
975
+ val edgeEffect = editor.horizontalEdgeEffect
976
+ edgeEffect.onPullDistance(distance, if (!glowLeftOrRight) 1 - displacement else displacement)
977
+ if (edgeEffect.distance != 0f) {
978
+ endX = scroller.getCurrX()
979
+ }
980
+ } else {
981
+ editor.horizontalEdgeEffect.finish()
982
+ }
983
+ notifyX = false
984
+ }
985
+ scroller.startScroll(
986
+ scroller.getCurrX(),
987
+ scroller.getCurrY(),
988
+ endX - scroller.getCurrX(),
989
+ endY - scroller.getCurrY(), 0
990
+ )
991
+ val minOverPull = 2f
992
+ if (notifyY && scroller.getCurrY().toFloat() + dy < -minOverPull) {
993
+ editor.verticalEdgeEffect.onPull(-dy / editor.measuredHeight, max(0f, min(1f, e2.x / editor.width)))
994
+ glowTopOrBottom = false
995
+ }
996
+ if (notifyY && scroller.getCurrY().toFloat() + dy > editor.scrollMaxY.toFloat() + minOverPull) {
997
+ editor.verticalEdgeEffect.onPull(dy / editor.measuredHeight, max(0f, min(1f, e2.x / editor.width)))
998
+ glowTopOrBottom = true
999
+ }
1000
+ if (notifyX && scroller.getCurrX().toFloat() + dx < -minOverPull) {
1001
+ editor.horizontalEdgeEffect.onPull(-dx / editor.measuredWidth, max(0f, min(1f, e2.y / editor.height)))
1002
+ glowLeftOrRight = false
1003
+ }
1004
+ if (notifyX && scroller.getCurrX().toFloat() + dx > editor.scrollMaxX.toFloat() + minOverPull) {
1005
+ editor.horizontalEdgeEffect.onPull(dx / editor.measuredWidth, max(0f, min(1f, e2.y / editor.height)))
1006
+ glowLeftOrRight = true
1007
+ }
1008
+ editor.invalidate()
1009
+ editor.dispatchEvent(
1010
+ ScrollEvent(
1011
+ editor, scroller.getCurrX(),
1012
+ scroller.getCurrY(), endX, endY, ScrollEvent.CAUSE_USER_DRAG
1013
+ )
1014
+ )
1015
+ return true
1016
+ }
1017
+
1018
+ override fun onFling(e1: MotionEvent?, @NonNull e2: MotionEvent, velocityX: Float, velocityY: Float): Boolean {
1019
+ var vx = velocityX
1020
+ var vy = velocityY
1021
+ if (editor.props!!.singleDirectionFling) {
1022
+
1023
+ if (abs(vx) > abs(vy)) {
1024
+ vy = 0f
1025
+ } else {
1026
+ vx = 0f
1027
+ }
1028
+ }
1029
+ if (!editor.props!!.scrollFling) {
1030
+ return false
1031
+ }
1032
+
1033
+ // If we do not finish it here, it can produce a high speed and cause the final scroll range to be broken, even a NaN for velocity
1034
+ scroller.forceFinished(true)
1035
+ scroller.fling(
1036
+ scroller.getCurrX(),
1037
+ scroller.getCurrY(),
1038
+ (-vx).toInt(),
1039
+ (-vy).toInt(),
1040
+ 0,
1041
+ editor.scrollMaxX,
1042
+ 0,
1043
+ editor.scrollMaxY,
1044
+ if (editor.props!!.overScrollEnabled && !editor.isWordwrap) (20 * editor.dpUnit).toInt() else 0,
1045
+ if (editor.props!!.overScrollEnabled) (20 * editor.dpUnit).toInt() else 0
1046
+ )
1047
+
1048
+ val minVe = editor.dpUnit * 2000
1049
+ if (abs(vx) >= minVe || abs(vy) >= minVe) {
1050
+ notifyScrolled()
1051
+ }
1052
+ editor.releaseEdgeEffects()
1053
+ editor.dispatchEvent(
1054
+ ScrollEvent(
1055
+ editor, scroller.getCurrX(),
1056
+ scroller.getCurrY(), scroller.getFinalX(), scroller.getFinalY(), ScrollEvent.CAUSE_USER_FLING
1057
+ )
1058
+ )
1059
+ editor.postInvalidateOnAnimation()
1060
+ return false
1061
+ }
1062
+
1063
+ override fun onScale(@NonNull detector: ScaleGestureDetector): Boolean {
1064
+ if (editor.isFormatting) {
1065
+ return true
1066
+ }
1067
+ if (editor.isScalable) {
1068
+ val newSize = editor.textSizePx * detector.scaleFactor
1069
+ if (newSize < scaleMinSize || newSize > scaleMaxSize) {
1070
+ return true
1071
+ }
1072
+ val focusX = detector.focusX
1073
+ val focusY = detector.focusY
1074
+ val originHeight = editor.rowHeight
1075
+ editor.setTextSizePxDirect(newSize)
1076
+ val heightFactor = editor.rowHeight.toFloat() / originHeight
1077
+ var afterScrollY = (scroller.getCurrY().toFloat() + focusY) * heightFactor - focusY
1078
+ var afterScrollX = (scroller.getCurrX().toFloat() + focusX) * detector.scaleFactor - focusX
1079
+ afterScrollX = max(0f, min(afterScrollX, editor.scrollMaxX.toFloat()))
1080
+ afterScrollY = max(0f, min(afterScrollY, editor.scrollMaxY.toFloat()))
1081
+ editor.dispatchEvent(
1082
+ ScrollEvent(
1083
+ editor, scroller.getCurrX(),
1084
+ scroller.getCurrY(), afterScrollX.toInt(), afterScrollY.toInt(), ScrollEvent.CAUSE_SCALE_TEXT
1085
+ )
1086
+ )
1087
+ scroller.startScroll(afterScrollX.toInt(), afterScrollY.toInt(), 0, 0, 0)
1088
+ scroller.abortAnimation()
1089
+ isScaling = true
1090
+ editor.invalidate()
1091
+ return true
1092
+ }
1093
+ return false
1094
+ }
1095
+
1096
+ override fun onScaleBegin(@NonNull detector: ScaleGestureDetector): Boolean {
1097
+ scroller.forceFinished(true)
1098
+ textSizeStart = editor.textSizePx
1099
+ return editor.isScalable && !editor.isFormatting && !hasAnyHeldHandle()
1100
+ }
1101
+
1102
+
1103
+ @JvmField
1104
+ internal var memoryPosition: Long = 0
1105
+ @JvmField
1106
+ internal var positionNotApplied: Boolean = false
1107
+ @JvmField
1108
+ internal var focusY: Float = 0f
1109
+
1110
+ override fun onScaleEnd(@NonNull detector: ScaleGestureDetector) {
1111
+ isScaling = false
1112
+ if (textSizeStart == editor.textSizePx) {
1113
+ return
1114
+ }
1115
+ editor.renderer.forcedRecreateLayout = true
1116
+ if (editor.isWordwrap) {
1117
+ focusY = detector.focusY
1118
+ memoryPosition = editor.getPointPositionOnScreen(detector.focusX, detector.focusY)
1119
+ positionNotApplied = true
1120
+ } else {
1121
+ positionNotApplied = false
1122
+ }
1123
+ editor.renderContext!!.invalidateRenderNodes()
1124
+ editor.renderer.updateTimestamp()
1125
+
1126
+ editor.invalidate()
1127
+ }
1128
+
1129
+ override fun onDown(e: MotionEvent): Boolean {
1130
+ return editor.isEnabled
1131
+ }
1132
+
1133
+ override fun onShowPress(@NonNull e: MotionEvent) {}
1134
+
1135
+ override fun onSingleTapConfirmed(@NonNull e: MotionEvent): Boolean {
1136
+ return true
1137
+ }
1138
+
1139
+ override fun onDoubleTap(@NonNull e: MotionEvent): Boolean {
1140
+ if (editor.isFormatting) {
1141
+ return true
1142
+ }
1143
+
1144
+ val res = editor.getPointPositionOnScreen(e.x, e.y)
1145
+ val line = IntPair.getFirst(res)
1146
+ val column = IntPair.getSecond(res)
1147
+ if ((dispatchEditorMotionEvent(::DoubleClickEvent, editor.text.indexer.getCharPosition(line, column), e) and InterceptTarget.TARGET_EDITOR) != 0) {
1148
+ return true
1149
+ }
1150
+ if (editor.cursor.isSelected() || e.pointerCount != 1) {
1151
+ return true
1152
+ }
1153
+ editor.selectWord(line, column)
1154
+ return true
1155
+ }
1156
+
1157
+ override fun onDoubleTapEvent(@NonNull e: MotionEvent): Boolean {
1158
+ return true
1159
+ }
1160
+
1161
+ /**
1162
+ * This is a helper for EventHandler to control handles
1163
+ */
1164
+ inner class SelectionHandle(var type: Int) {
1165
+
1166
+ private fun checkNoIntersection(
1167
+ one: SelectionHandleStyle.HandleDescriptor,
1168
+ another: SelectionHandleStyle.HandleDescriptor
1169
+ ): Boolean {
1170
+ return !RectF.intersects(one.position, another.position)
1171
+ }
1172
+
1173
+ /**
1174
+ * Handle the event
1175
+ *
1176
+ * @param e Event sent by EventHandler
1177
+ */
1178
+ fun applyPosition(e: MotionEvent) {
1179
+ val descriptor = when (type) {
1180
+ LEFT -> editor.leftHandleDescriptor!!
1181
+ RIGHT -> editor.rightHandleDescriptor!!
1182
+ else -> editor.insertHandleDescriptor!!
1183
+ }
1184
+ val anotherDesc = if (type == LEFT) editor.rightHandleDescriptor!! else editor.leftHandleDescriptor!!
1185
+
1186
+ val targetX = scroller.getCurrX().toFloat() + e.x + (if (descriptor.alignment != SelectionHandleStyle.ALIGN_CENTER) descriptor.position.width() else 0f) * (if (descriptor.alignment == SelectionHandleStyle.ALIGN_LEFT) 1 else -1)
1187
+ val targetY = scroller.getCurrY().toFloat() + e.y - descriptor.position.height()
1188
+ val coord = editor.getPointPosition(targetX, targetY)
1189
+ val line = IntPair.getFirst(coord)
1190
+ if (line >= 0 && line < editor.lineCount) {
1191
+ val column = IntPair.getSecond(coord)
1192
+ val cursor = editor.cursor!!
1193
+ val lastLine = if (type == RIGHT) cursor.rightLine else cursor.leftLine
1194
+ val lastColumn = if (type == RIGHT) cursor.rightColumn else cursor.leftColumn
1195
+ val anotherLine = if (type != RIGHT) cursor.rightLine else cursor.leftLine
1196
+ val anotherColumn = if (type != RIGHT) cursor.rightColumn else cursor.leftColumn
1197
+
1198
+
1199
+ if ((line != lastLine || column != lastColumn) && (type == BOTH || (line != anotherLine || column != anotherColumn))) {
1200
+ when (type) {
1201
+ BOTH -> {
1202
+ editor.cancelAnimation()
1203
+ editor.setSelection(line, column, false, SelectionChangeEvent.CAUSE_SELECTION_HANDLE)
1204
+ }
1205
+ RIGHT -> {
1206
+ if (anotherLine > line || (anotherLine == line && anotherColumn > column)) {
1207
+ //Swap type
1208
+ if (checkNoIntersection(descriptor, anotherDesc)) {
1209
+ dispatchHandleStateChange(this@EditorTouchEventHandler.selHandleType, false)
1210
+ this@EditorTouchEventHandler.selHandleType = LEFT
1211
+ dispatchHandleStateChange(this@EditorTouchEventHandler.selHandleType, true)
1212
+ this.type = LEFT
1213
+ leftHandle.type = RIGHT
1214
+ val tmp = rightHandle
1215
+ rightHandle = leftHandle
1216
+ leftHandle = tmp
1217
+ editor.setSelectionRegion(line, column, anotherLine, anotherColumn, false, SelectionChangeEvent.CAUSE_SELECTION_HANDLE)
1218
+ }
1219
+ } else {
1220
+ editor.setSelectionRegion(anotherLine, anotherColumn, line, column, false, SelectionChangeEvent.CAUSE_SELECTION_HANDLE)
1221
+ }
1222
+ }
1223
+ LEFT -> {
1224
+ if (anotherLine < line || (anotherLine == line && anotherColumn < column)) {
1225
+ //Swap type
1226
+ if (checkNoIntersection(descriptor, anotherDesc)) {
1227
+ dispatchHandleStateChange(this@EditorTouchEventHandler.selHandleType, false)
1228
+ this@EditorTouchEventHandler.selHandleType = RIGHT
1229
+ dispatchHandleStateChange(this@EditorTouchEventHandler.selHandleType, true)
1230
+ this.type = RIGHT
1231
+ rightHandle.type = LEFT
1232
+ val tmp = rightHandle
1233
+ rightHandle = leftHandle
1234
+ leftHandle = tmp
1235
+ editor.setSelectionRegion(anotherLine, anotherColumn, line, column, false, SelectionChangeEvent.CAUSE_SELECTION_HANDLE)
1236
+ }
1237
+ } else {
1238
+ editor.setSelectionRegion(line, column, anotherLine, anotherColumn, false, SelectionChangeEvent.CAUSE_SELECTION_HANDLE)
1239
+ }
1240
+ }
1241
+ }
1242
+ }
1243
+ }
1244
+ }
1245
+
1246
+ }
1247
+
1248
+ /**
1249
+ * Runnable for controlling auto-scrolling when thumb reaches the edges of editor
1250
+ */
1251
+ private inner class EdgeScrollRunnable(initDelta: Int) : Runnable {
1252
+ private val initialDelta: Float = initDelta.toFloat()
1253
+ private var deltaHorizontal: Float = initDelta.toFloat()
1254
+ private var deltaVertical: Float = initDelta.toFloat()
1255
+ private var lastDx: Float = 0f
1256
+ private var lastDy: Float = 0f
1257
+ private var factorX: Float = 0f
1258
+ private var factorY: Float = 0f
1259
+ private var postTimes: Long = 0
1260
+
1261
+ override fun run() {
1262
+ var dx = (if ((edgeFlags and LEFT_EDGE) != 0) -deltaHorizontal else 0f) + (if ((edgeFlags and RIGHT_EDGE) != 0) deltaHorizontal else 0f)
1263
+ var dy = (if ((edgeFlags and TOP_EDGE) != 0) -deltaVertical else 0f) + (if ((edgeFlags and BOTTOM_EDGE) != 0) deltaVertical else 0f)
1264
+ if (dx > 0) {
1265
+ // Check whether there is content at right
1266
+ val cursor = editor.cursor!!
1267
+ val line: Int = if (selHandleType == BOTH || selHandleType == LEFT) {
1268
+ cursor.leftLine
1269
+ } else {
1270
+ cursor.rightLine
1271
+ }
1272
+
1273
+ val column = editor.text.getColumnCount(line)
1274
+ // Do not scroll too far from text region of this line
1275
+ val layout: io.github.abc15018045126.sora.widget.layout.Layout = editor.layout!!
1276
+ val maxOffset = editor.measureTextRegionOffset() + layout.getCharLayoutOffset(line, column)[1] - editor.width * 0.85f
1277
+
1278
+ if (scroller.getCurrX().toFloat() > maxOffset) {
1279
+ dx = 0f
1280
+ }
1281
+ }
1282
+ scrollBy(dx, dy)
1283
+ if (editorMagnifier.isShowing()) {
1284
+ editorMagnifier.dismiss()
1285
+ }
1286
+
1287
+ // Speed up if we are scrolling in the direction
1288
+ if (isSameSign(dx, lastDx)) {
1289
+ if (factorX < MAX_FACTOR && postTimes % 2 == 0L) {
1290
+ factorX++
1291
+ deltaHorizontal *= INCREASE_FACTOR
1292
+ }
1293
+ } else {
1294
+ // Recover initial speed because direction changed
1295
+ deltaHorizontal = initialDelta
1296
+ factorX = 0f
1297
+ }
1298
+ if (isSameSign(dy, lastDy)) {
1299
+ if (factorY < MAX_FACTOR && postTimes % 2 == 0L) {
1300
+ factorY++
1301
+ deltaVertical *= INCREASE_FACTOR
1302
+ }
1303
+ } else {
1304
+ deltaVertical = initialDelta
1305
+ factorY = 0f
1306
+ }
1307
+ lastDx = dx
1308
+ lastDy = dy
1309
+
1310
+ // Update selection
1311
+ thumbMotionRecord?.let {
1312
+ if (!handleDragSelect(it, true)) {
1313
+ handleSelectionChange2(it)
1314
+ }
1315
+ }
1316
+
1317
+ postTimes++
1318
+ // Post for animation
1319
+ if (edgeFlags != 0) {
1320
+ io.github.abc15018045126.sora.util.EditorHandler.postDelayed({
1321
+ if (editor.isReleased) return@postDelayed
1322
+ this.run()
1323
+ }, 10)
1324
+
1325
+ }
1326
+ }
1327
+
1328
+ }
1329
+
1330
+ companion object {
1331
+ const val HIDE_DELAY = 3000
1332
+ const val HIDE_DELAY_HANDLE = 3500
1333
+
1334
+ const val SCROLLBAR_FADE_ANIMATION_TIME = 200
1335
+ const val MAGNIFIER_TOUCH_SLOP = 4
1336
+
1337
+ const val LEFT_EDGE = 1
1338
+ const val RIGHT_EDGE = 1 shl 1
1339
+ const val TOP_EDGE = 1 shl 2
1340
+ const val BOTTOM_EDGE = 1 shl 3
1341
+
1342
+ const val LEFT = HandleStateChangeEvent.HANDLE_TYPE_LEFT
1343
+ const val RIGHT = HandleStateChangeEvent.HANDLE_TYPE_RIGHT
1344
+ const val BOTH = HandleStateChangeEvent.HANDLE_TYPE_INSERT
1345
+
1346
+ const val MAX_FACTOR = 32
1347
+ const val INCREASE_FACTOR = 1.06f
1348
+ }
1349
+ }