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,1465 @@
1
+ package io.github.abc15018045126.sora.graphics
2
+
3
+ import android.graphics.Canvas
4
+ import android.graphics.Path
5
+ import android.graphics.RectF
6
+ import android.util.Log
7
+ import io.github.abc15018045126.sora.lang.styling.Span
8
+ import io.github.abc15018045126.sora.lang.styling.SpanFactory
9
+ import io.github.abc15018045126.sora.lang.styling.TextStyle
10
+ import io.github.abc15018045126.sora.lang.styling.inlayHint.CharacterSide
11
+ import io.github.abc15018045126.sora.lang.styling.inlayHint.InlayHint
12
+ import io.github.abc15018045126.sora.lang.styling.span.SpanExtAttrs
13
+ import io.github.abc15018045126.sora.lang.styling.span.SpanExternalRenderer
14
+ import io.github.abc15018045126.sora.text.ContentLine
15
+ import io.github.abc15018045126.sora.text.FunctionCharacters
16
+ import io.github.abc15018045126.sora.text.bidi.Directions
17
+ import io.github.abc15018045126.sora.text.bidi.IDirections
18
+ import io.github.abc15018045126.sora.text.bidi.VisualDirections
19
+ import io.github.abc15018045126.sora.text.breaker.WordBreaker
20
+ import io.github.abc15018045126.sora.text.breaker.WordBreakerEmpty
21
+ import io.github.abc15018045126.sora.util.IntPair
22
+ import io.github.abc15018045126.sora.util.RendererUtils
23
+ import io.github.abc15018045126.sora.util.ReversedListView
24
+ import io.github.abc15018045126.sora.util.TemporaryFloatBuffer
25
+ import io.github.abc15018045126.sora.widget.layout.RowElement
26
+ import io.github.abc15018045126.sora.widget.layout.RowElementTypes
27
+ import io.github.abc15018045126.sora.widget.rendering.RenderingConstants
28
+ import io.github.abc15018045126.sora.widget.rendering.TextAdvancesCache
29
+ import io.github.abc15018045126.sora.widget.schemes.EditorColorScheme
30
+ import java.util.ArrayList
31
+ import java.util.Arrays
32
+ import java.util.Collections
33
+ import java.util.Comparator
34
+ import kotlin.math.abs
35
+ import kotlin.math.max
36
+ import kotlin.math.min
37
+
38
+ /**
39
+ * [TextRow] is a helper class for a single text row to shape, measure and draw.
40
+ */
41
+ class TextRow {
42
+ private val tmpRect: RectF = RectF()
43
+ private val tmpIndices = IntArray(4)
44
+ private val tmpSpan: Span = SpanFactory.obtainNoExt(0, 0)
45
+ private val reusableRunElements = ArrayList<RowElement?>()
46
+ private val rowElementPool = ArrayList<RowElement>()
47
+ private var poolIndex = 0
48
+ private val reusablePointers = ListPointers(0, 0)
49
+ private var text: ContentLine? = null
50
+ private var directions: Directions? = null
51
+ var textStart: Int = 0
52
+ private set
53
+ var textEnd: Int = 0
54
+ private set
55
+ private var spans: List<Span>? = null
56
+ private var inlineElements: List<InlayHint>? = null
57
+ private var params: TextRowParams? = null
58
+ private var inlayHintRenderParams: InlayHintRenderParams? = null
59
+ private var paint: Paint? = null
60
+ private var measureCache: TextAdvancesCache? = null
61
+ private var selectedStart = -1
62
+ private var selectedEnd = -1
63
+
64
+ fun set(
65
+ text: ContentLine,
66
+ start: Int, end: Int, spans: List<Span>?, inlineElements: List<InlayHint>?,
67
+ directions: Directions?, paint: Paint,
68
+ measureCache: TextAdvancesCache?, params: TextRowParams
69
+ ) {
70
+ this.text = text
71
+ textStart = start
72
+ textEnd = end
73
+ this.spans = spans
74
+ this.inlineElements = inlineElements
75
+ this.directions = directions
76
+ this.paint = paint
77
+ this.params = params
78
+ this.measureCache = measureCache
79
+ this.inlayHintRenderParams = params.toInlayHintRenderParams()
80
+ }
81
+
82
+ fun setRange(start: Int, end: Int) {
83
+ this.textStart = start
84
+ this.textEnd = end
85
+ }
86
+
87
+ fun setSelectedRange(start: Int, end: Int) {
88
+ this.selectedStart = start
89
+ this.selectedEnd = end
90
+ }
91
+
92
+ private fun getSingleRunAdvancesForBreaking(
93
+ start: Int, end: Int, contextStart: Int, contextEnd: Int,
94
+ isRtl: Boolean, advances: FloatArray?
95
+ ): Float {
96
+ val chars = text!!.backingCharArray
97
+ var lastEnd = start
98
+ val tabWidth = params!!.tabWidth * paint!!.spaceWidth
99
+ var width = 0f
100
+ val p = paint!!
101
+ for (i in start..end) {
102
+ if (i == end || chars[i] == '\t') {
103
+ if (i > lastEnd) width += p.getTextRunAdvances(
104
+ chars,
105
+ lastEnd,
106
+ i - lastEnd,
107
+ contextStart,
108
+ contextEnd - contextStart,
109
+ isRtl,
110
+ advances,
111
+ (lastEnd - start)
112
+ )
113
+ if (i < end) {
114
+ width += tabWidth
115
+ if (advances != null) advances[i - start] = tabWidth
116
+ }
117
+ lastEnd = i + 1
118
+ }
119
+ }
120
+ return width
121
+ }
122
+
123
+ private fun getTextRunAdvancesCacheable(
124
+ index: Int,
125
+ count: Int,
126
+ contextIndex: Int,
127
+ contextCount: Int,
128
+ isRtl: Boolean,
129
+ advances: FloatArray?,
130
+ advancesIndex: Int
131
+ ): Float {
132
+ val cache = measureCache
133
+ if (cache != null) {
134
+ if (advances != null) {
135
+ for (i in 0 until count) {
136
+ advances[advancesIndex + i] = cache.getAdvanceAt(index + i)
137
+ }
138
+ }
139
+ return cache.getAdvancesSum(index, index + count)
140
+ }
141
+ return paint!!.getTextRunAdvances(
142
+ text!!.backingCharArray,
143
+ index,
144
+ count,
145
+ contextIndex,
146
+ contextCount,
147
+ isRtl,
148
+ advances,
149
+ advancesIndex
150
+ )
151
+ }
152
+
153
+ private fun getRunAdvanceCacheable(
154
+ offset: Int, start: Int, end: Int,
155
+ contextStart: Int, contextEnd: Int, isRtl: Boolean
156
+ ): Float {
157
+ val cache = measureCache
158
+ if (cache != null) {
159
+ return cache.getAdvancesSum(start, offset)
160
+ }
161
+ return GraphicsCompat.getRunAdvance(
162
+ paint!!,
163
+ text!!.backingCharArray,
164
+ start,
165
+ end,
166
+ contextStart,
167
+ contextEnd,
168
+ isRtl,
169
+ offset
170
+ )
171
+ }
172
+
173
+ private fun findOffsetByAdvanceCacheable(
174
+ start: Int,
175
+ end: Int,
176
+ contextStart: Int,
177
+ contextEnd: Int,
178
+ isRtl: Boolean,
179
+ advance: Float
180
+ ): Int {
181
+ val cache = measureCache
182
+ if (cache != null) {
183
+ var left = start
184
+ var right = end
185
+ val base = cache.getAdvancesSum(0, start)
186
+ while (left <= right) {
187
+ val mid = (left + right) / 2
188
+ if (mid < start || mid >= end) {
189
+ left = mid
190
+ break
191
+ }
192
+ val value = cache.getAdvancesSum(0, mid) - base
193
+ if (value > advance) {
194
+ right = mid - 1
195
+ } else if (value < advance) {
196
+ left = mid + 1
197
+ } else {
198
+ left = mid
199
+ break
200
+ }
201
+ }
202
+ if (cache.getAdvancesSum(0, left) - base > advance) {
203
+ left--
204
+ }
205
+ left = max(start, min(end, left))
206
+ return left
207
+ }
208
+ return paint!!.findOffsetByRunAdvance(text!!, start, end, contextStart, contextEnd, isRtl, advance)
209
+ }
210
+
211
+ private fun obtainRowElement(): RowElement {
212
+ if (poolIndex >= rowElementPool.size) {
213
+ val e = RowElement()
214
+ rowElementPool.add(e)
215
+ poolIndex++
216
+ return e
217
+ }
218
+ return rowElementPool[poolIndex++]
219
+ }
220
+
221
+ private fun iterateRuns(consumer: RunElementsConsumer, reorderVisually: Boolean) {
222
+ poolIndex = 0
223
+ var pointers: ListPointers? = null
224
+ val dirs: IDirections = if (reorderVisually && text!!.mayNeedBidi()) VisualDirections(directions!!) else directions!!
225
+ for (i in 0 until dirs.runCount) {
226
+ val runEnd = dirs.getRunEnd(i)
227
+ val runStart = dirs.getRunStart(i)
228
+ val segmentStart = max(runStart, textStart)
229
+ val segmentEnd = min(runEnd, textEnd)
230
+ if (segmentStart >= segmentEnd) {
231
+ continue
232
+ }
233
+ pointers = seekStartIndices(segmentStart)
234
+ if (!generateAndConsumeSingleRun(segmentStart, segmentEnd, dirs.isRunRtl(i), pointers, consumer)) {
235
+ break
236
+ }
237
+ }
238
+ var currInlineIndex = if (pointers == null) 0 else pointers.inlineElementIndex
239
+ reusableRunElements.clear()
240
+ val elements = inlineElements
241
+ if (elements != null) {
242
+ while (currInlineIndex < elements.size && getExpectedInlayHintColumn(elements[currInlineIndex]) == textEnd) {
243
+ val e = obtainRowElement()
244
+ e.type = RowElementTypes.INLAY_HINT
245
+ e.displayColumnPosition = textEnd
246
+ e.inlayHint = elements[currInlineIndex++]
247
+ reusableRunElements.add(e)
248
+ }
249
+ }
250
+ if (reusableRunElements.isNotEmpty()) {
251
+ if (pointers == null) {
252
+ pointers = seekStartIndices(textEnd)
253
+ }
254
+ pointers.inlineElementIndex = currInlineIndex
255
+ consumer.accept(reusableRunElements, false, pointers)
256
+ }
257
+ }
258
+
259
+ private fun getExpectedInlayHintColumn(inlayHint: InlayHint): Int {
260
+ var position = inlayHint.column
261
+ if (inlayHint.displaySide == CharacterSide.RIGHT) {
262
+ position++
263
+ }
264
+ position = min(position, textEnd)
265
+ return position
266
+ }
267
+
268
+ private fun seekStartIndices(segmentStart: Int): ListPointers {
269
+ tmpSpan.column = segmentStart
270
+ val localSpans = spans!!
271
+ var spanIndex = Collections.binarySearch(
272
+ localSpans,
273
+ tmpSpan,
274
+ SPAN_COMPARATOR
275
+ )
276
+ if (spanIndex < 0) {
277
+ spanIndex = -(spanIndex + 1)
278
+ }
279
+ if (spanIndex == localSpans.size) {
280
+ spanIndex--
281
+ }
282
+ while (spanIndex > 0 && localSpans[spanIndex].column >= segmentStart) {
283
+ spanIndex--
284
+ }
285
+ var inlineIndex = 0
286
+ val localInline = inlineElements
287
+ if (localInline != null) {
288
+ while (inlineIndex < localInline.size && localInline[inlineIndex].column < segmentStart) {
289
+ inlineIndex++
290
+ }
291
+ }
292
+ reusablePointers.spanIndex = spanIndex
293
+ reusablePointers.inlineElementIndex = inlineIndex
294
+ return reusablePointers
295
+ }
296
+
297
+ private fun generateAndConsumeSingleRun(
298
+ segmentStart: Int,
299
+ segmentEnd: Int,
300
+ isRtl: Boolean,
301
+ pointers: ListPointers,
302
+ consumer: RunElementsConsumer
303
+ ): Boolean {
304
+ reusableRunElements.clear()
305
+ var lastEndIndex = segmentStart
306
+ val localInline = inlineElements
307
+ while (true) {
308
+ if (localInline != null && pointers.inlineElementIndex < localInline.size && localInline[pointers.inlineElementIndex]
309
+ .column < segmentEnd
310
+ ) {
311
+ val inlay = localInline[pointers.inlineElementIndex]
312
+ val position = getExpectedInlayHintColumn(inlay)
313
+ val element = obtainRowElement()
314
+ if (lastEndIndex == position) {
315
+ pointers.inlineElementIndex++
316
+ element.type = RowElementTypes.INLAY_HINT
317
+ element.inlayHint = inlay
318
+ element.displayColumnPosition = position
319
+ } else {
320
+ element.type = RowElementTypes.TEXT
321
+ element.startColumn = lastEndIndex
322
+ element.endColumn = position
323
+ element.isRtlText = isRtl
324
+ lastEndIndex = position
325
+ }
326
+ reusableRunElements.add(element)
327
+ } else if (lastEndIndex < segmentEnd) {
328
+ val element = obtainRowElement()
329
+ element.type = RowElementTypes.TEXT
330
+ element.startColumn = lastEndIndex
331
+ element.endColumn = segmentEnd
332
+ element.isRtlText = isRtl
333
+ lastEndIndex = segmentEnd
334
+ reusableRunElements.add(element)
335
+ } else {
336
+ break
337
+ }
338
+ }
339
+ val result = consumer.accept(reusableRunElements, isRtl, pointers)
340
+ val localSpans = spans!!
341
+ val spansSize = localSpans.size
342
+ while (pointers.spanIndex + 1 < spansSize && localSpans[pointers.spanIndex + 1].column <= segmentEnd) {
343
+ pointers.spanIndex++
344
+ }
345
+ return result
346
+ }
347
+
348
+ fun breakText(width: Int, antiWordBreaking: Boolean): List<WordwrapRow> {
349
+ val rows: MutableList<WordwrapRow> = ArrayList()
350
+ val optimizer: WordBreaker = if (antiWordBreaking) WordBreaker.Factory.newInstance(text!!) else WordBreakerEmpty.INSTANCE
351
+
352
+ class TextBreaker : RunElementsConsumer {
353
+ var currentRow: WordwrapRow = WordwrapRow()
354
+ var currentWidth: Float = 0f
355
+
356
+ override fun accept(elements: List<RowElement?>?, isRtl: Boolean, pointers: ListPointers?): Boolean {
357
+ if (elements != null) {
358
+ for (element in elements) {
359
+ if (element != null) {
360
+ if (element.type == RowElementTypes.TEXT) {
361
+ handleText(element)
362
+ } else if (element.type == RowElementTypes.INLAY_HINT) {
363
+ handleInlineElement(element)
364
+ }
365
+ }
366
+ }
367
+ }
368
+ return true
369
+ }
370
+
371
+ fun commitRow() {
372
+ currentRow.rowWidth = currentWidth
373
+ rows.add(currentRow)
374
+ currentWidth = 0f
375
+ currentRow = WordwrapRow()
376
+ }
377
+
378
+ fun handleText(e: RowElement) {
379
+ val advances = TemporaryFloatBuffer.obtain(e.endColumn - e.startColumn) // FloatArray
380
+ val runWidth = getSingleRunRunAdvancesForBreaking(
381
+ e.startColumn,
382
+ e.endColumn,
383
+ e.startColumn,
384
+ e.endColumn,
385
+ e.isRtlText,
386
+ advances
387
+ )
388
+
389
+ if (currentWidth + runWidth < width) {
390
+ if (currentRow.isEmpty) {
391
+ currentRow.setInitialRange(e.startColumn, e.endColumn)
392
+ } else {
393
+ currentRow.setEndColumnChecked(e.endColumn)
394
+ }
395
+ currentWidth += runWidth
396
+ TemporaryFloatBuffer.recycle(advances)
397
+ return
398
+ }
399
+
400
+ val limit = e.endColumn - e.startColumn
401
+ var offset = 0
402
+ while (offset < limit) {
403
+ var next = GraphemeBoundsBreaker.findGraphemeBreakPoint(
404
+ advances,
405
+ limit,
406
+ (width - currentWidth).toInt(),
407
+ offset
408
+ )
409
+ if (next == offset) {
410
+ if (currentRow.isEmpty) {
411
+ next++
412
+ } else {
413
+ commitRow()
414
+ continue
415
+ }
416
+ }
417
+ val beforeOptimization = next
418
+ next =
419
+ optimizer.getOptimizedBreakPoint(e.startColumn + offset, e.startColumn + next) - e.startColumn
420
+ var advance = 0f
421
+ for (j in offset until next) {
422
+ advance += advances[j]
423
+ }
424
+ if (currentRow.isEmpty) {
425
+ currentRow.setInitialRange(e.startColumn + offset, e.startColumn + next)
426
+ } else {
427
+ currentRow.setEndColumnChecked(e.startColumn + next)
428
+ }
429
+ currentWidth += advance
430
+ if (beforeOptimization != next) {
431
+ commitRow()
432
+ }
433
+ offset = next
434
+ }
435
+ TemporaryFloatBuffer.recycle(advances)
436
+ }
437
+
438
+ fun handleInlineElement(e: RowElement) {
439
+ val inlay = e.inlayHint!!
440
+ val renderer = params!!.inlayHintRendererProvider.getInlayHintRendererForType(inlay.type)
441
+ var w = 0f
442
+ if (renderer != null) {
443
+ w = renderer.measure(inlay, paint!!, inlayHintRenderParams!!)
444
+ w = max(0f, w)
445
+ }
446
+ if (currentRow.isEmpty || currentWidth + w > width) {
447
+ if (!currentRow.isEmpty) {
448
+ commitRow()
449
+ }
450
+ currentRow.setInitialRange(e.displayColumnPosition, e.displayColumnPosition)
451
+ currentRow.addInlayHint(inlay)
452
+ currentWidth = w
453
+ } else {
454
+ currentRow.addInlayHint(inlay)
455
+ currentWidth += w
456
+ }
457
+ }
458
+
459
+ private fun getSingleRunRunAdvancesForBreaking(
460
+ start: Int, end: Int, contextStart: Int, contextEnd: Int,
461
+ isRtl: Boolean, advances: FloatArray?
462
+ ): Float {
463
+ return getSingleRunAdvancesForBreaking(start, end, contextStart, contextEnd, isRtl, advances)
464
+ }
465
+
466
+ fun appendTailIfNeeded() {
467
+ if (!currentRow.isEmpty) {
468
+ commitRow()
469
+ }
470
+ }
471
+ }
472
+
473
+ val breaker = TextBreaker()
474
+ iterateRuns(breaker, false)
475
+ if (rows.isEmpty() && breaker.currentRow.isEmpty) {
476
+ breaker.currentRow.isEmpty = false
477
+ breaker.currentRow.startColumn = textStart
478
+ breaker.currentRow.endColumn = textEnd
479
+ }
480
+ breaker.appendTailIfNeeded()
481
+ return rows
482
+ }
483
+
484
+ private class IteratingContext {
485
+ var lastStyle: Long = -1
486
+ var minOffset: Float = 0f
487
+ var maxOffset: Float = Float.MAX_VALUE
488
+ var targetCharOffset: Int = -1
489
+ var resultOffset: Float = 0f
490
+ var targetHorizontalOffset: Float = -1f
491
+ var resultCharOffset: Int = -1
492
+ var startCharOffset: Int = 0
493
+ var endCharOffset: Int = 0
494
+ var regionBuffer: RegionBuffer? = null
495
+ var autoClip: Boolean = false
496
+ var drawTextConsumer: DrawTextConsumer? = null
497
+ var currentSpan: Span? = null
498
+ var advances: TextAdvancesCache? = null
499
+ }
500
+
501
+ private fun checkCursorOffsetInSegment(offset: Int, start: Int, end: Int): Boolean {
502
+ return (offset >= start && (offset < end || (offset == end && end == textEnd)))
503
+ }
504
+
505
+ private fun clipRegionForPatchDrawing(textOffset: Float, width: Float, italics: Boolean, canvas: Canvas) {
506
+ if (!italics) {
507
+ canvas.clipRect(textOffset, 0f, textOffset + width, params!!.rowHeight.toFloat())
508
+ return
509
+ }
510
+ val path = Path()
511
+ val y = params!!.textBottom.toFloat()
512
+ path.moveTo(textOffset, y)
513
+ path.lineTo(textOffset - RenderingConstants.TEXT_SKEW_X * y, 0f)
514
+ path.lineTo(textOffset + width - RenderingConstants.TEXT_SKEW_X * y, 0f)
515
+ path.lineTo(textOffset + width, y)
516
+ path.close()
517
+ canvas.clipPath(path)
518
+ }
519
+
520
+ protected fun drawFunctionCharacter(canvas: Canvas, offsetX: Float, width: Float, ch: Char) {
521
+ val paintGraph = params!!.graphPaint
522
+ val metricsGraph = params!!.graphMetrics
523
+ paintGraph.textAlign = android.graphics.Paint.Align.CENTER
524
+ val heightScaled = metricsGraph.descent - metricsGraph.ascent
525
+ val centerY = params!!.rowHeight / 2f
526
+ val baseline = centerY - heightScaled / 2f - metricsGraph.ascent
527
+ paintGraph.color = paint!!.color
528
+ canvas.drawText(FunctionCharacters.getNameForFunctionCharacter(ch), offsetX + width / 2f, baseline, paintGraph)
529
+ paintGraph.textAlign = android.graphics.Paint.Align.LEFT
530
+
531
+ val actualWidth = paintGraph.measureText(FunctionCharacters.getNameForFunctionCharacter(ch))
532
+ tmpRect.top = centerY - heightScaled / 2f
533
+ tmpRect.bottom = centerY + heightScaled / 2f
534
+ tmpRect.left = offsetX + width / 2f - actualWidth / 2f
535
+ tmpRect.right = offsetX + width / 2f + actualWidth / 2f
536
+ val color = paint!!.color
537
+ paint!!.color = params!!.colorScheme.getColor(EditorColorScheme.FUNCTION_CHAR_BACKGROUND_STROKE)
538
+ paint!!.style = android.graphics.Paint.Style.STROKE
539
+ paint!!.strokeWidth = params!!.rowHeight * 0.05f
540
+ val radius = params!!.rowHeight * params!!.roundTextBackgroundFactor
541
+ canvas.drawRoundRect(
542
+ tmpRect,
543
+ radius,
544
+ radius,
545
+ paint!!
546
+ )
547
+ paint!!.style = android.graphics.Paint.Style.FILL
548
+ paint!!.color = color
549
+ }
550
+
551
+ private fun commitTextRunToCanvas(
552
+ paintStart: Int, paintEnd: Int, contextStart: Int, contextEnd: Int, isRtl: Boolean,
553
+ canvas: Canvas, offset: Float, width: Float
554
+ ) {
555
+ val p = paint!!
556
+ if (p.isRenderFunctionCharacters) {
557
+ val chars = text!!.backingCharArray
558
+ var lastEnd = paintStart
559
+ val initOffset = offset + (if (isRtl) width else 0f)
560
+ var drawOffset = initOffset
561
+ for (i in paintStart..paintEnd) {
562
+ var ch = '\u0000'
563
+ if (i == paintEnd || FunctionCharacters.isEditorFunctionChar(chars[i].also { ch = it })) {
564
+ if (i - lastEnd > 0) {
565
+ if (isRtl) {
566
+ p.textAlign = android.graphics.Paint.Align.RIGHT
567
+ }
568
+ GraphicsCompat.drawTextRun(
569
+ canvas,
570
+ chars,
571
+ lastEnd,
572
+ i - lastEnd,
573
+ contextStart,
574
+ contextEnd - contextStart,
575
+ drawOffset,
576
+ params!!.textBaseline.toFloat(),
577
+ isRtl,
578
+ p
579
+ )
580
+ if (isRtl) {
581
+ p.textAlign = android.graphics.Paint.Align.LEFT
582
+ }
583
+ }
584
+ if (i == paintEnd) {
585
+ break
586
+ }
587
+ val chAdvance = p.measureText(FunctionCharacters.getNameForFunctionCharacter(ch))
588
+ var advance = getRunAdvanceCacheable(i, paintStart, paintEnd, paintStart, paintEnd, isRtl)
589
+ drawFunctionCharacter(
590
+ canvas,
591
+ if (isRtl) initOffset - advance - chAdvance else initOffset + advance,
592
+ chAdvance,
593
+ ch
594
+ )
595
+ advance += chAdvance
596
+ drawOffset = initOffset + (if (isRtl) -advance else advance)
597
+ lastEnd = i
598
+ }
599
+ }
600
+ } else {
601
+ GraphicsCompat.drawTextRun(
602
+ canvas,
603
+ text!!.backingCharArray,
604
+ paintStart,
605
+ paintEnd - paintStart,
606
+ contextStart,
607
+ contextEnd - contextStart,
608
+ offset,
609
+ params!!.textBaseline.toFloat(),
610
+ isRtl,
611
+ p
612
+ )
613
+ }
614
+ }
615
+
616
+ private fun commitTextRunToConsumer(
617
+ paintStart: Int, paintEnd: Int, contextStart: Int, contextEnd: Int, isRtl: Boolean,
618
+ canvas: Canvas?, offset: Float, width: Float, ctx: IteratingContext
619
+ ) {
620
+ ctx.drawTextConsumer!!.drawText(
621
+ canvas,
622
+ text!!.backingCharArray,
623
+ paintStart,
624
+ paintEnd - paintStart,
625
+ contextStart,
626
+ contextEnd - contextStart,
627
+ isRtl, // isRtl
628
+ offset,
629
+ width,
630
+ params,
631
+ ctx.currentSpan
632
+ )
633
+ }
634
+
635
+ private fun commitTextRunAutoTruncated(
636
+ paintStart: Int, paintEnd: Int, contextStart: Int, contextEnd: Int, isRtl: Boolean,
637
+ canvas: Canvas, offset: Float, width: Float, ctx: IteratingContext
638
+ ) {
639
+ if (paintEnd - paintStart < MIN_AUTO_TRUNCATE_LENGTH || measureCache == null) {
640
+ if (ctx.drawTextConsumer != null) {
641
+ commitTextRunToConsumer(
642
+ paintStart,
643
+ paintEnd,
644
+ contextStart,
645
+ contextEnd,
646
+ isRtl,
647
+ canvas,
648
+ offset,
649
+ width,
650
+ ctx
651
+ )
652
+ } else {
653
+ commitTextRunToCanvas(paintStart, paintEnd, contextStart, contextEnd, isRtl, canvas, offset, width)
654
+ }
655
+ } else {
656
+ val runAdvanceLeft = max(0f, ctx.minOffset - offset) - paint!!.spaceWidth
657
+ val runAdvanceRight = min(width, ctx.maxOffset - offset) + paint!!.spaceWidth
658
+ val boundForLeft =
659
+ findOffsetByAdvanceCacheable(paintStart, paintEnd, contextStart, contextEnd, isRtl, runAdvanceLeft)
660
+ val boundForRight =
661
+ findOffsetByAdvanceCacheable(paintStart, paintEnd, contextStart, contextEnd, isRtl, runAdvanceRight)
662
+ val commitStart = min(boundForLeft, boundForRight)
663
+ val commitEnd = max(boundForLeft, boundForRight)
664
+
665
+ if (commitStart < commitEnd) {
666
+ var commitContextStart = commitStart
667
+ var commitContextEnd = commitEnd
668
+ val chars = text!!.backingCharArray
669
+ while (commitContextStart - 1 >= contextStart && chars[commitContextStart - 1] != ' ' && (commitContextEnd - commitContextStart) < MAX_CONTEXT_LENGTH) {
670
+ commitContextStart--
671
+ }
672
+ while (commitContextEnd + 1 < contextEnd && chars[commitContextEnd] != ' ' && (commitContextEnd - commitContextStart) < MAX_CONTEXT_LENGTH) {
673
+ commitContextEnd++
674
+ }
675
+
676
+ val advanceStart =
677
+ measureAdvanceInRun(commitStart, paintStart, paintEnd, contextStart, contextEnd, isRtl)
678
+ val advanceEnd = measureAdvanceInRun(commitEnd, paintStart, paintEnd, contextStart, contextEnd, isRtl)
679
+ val newWidth = abs(advanceStart - advanceEnd)
680
+ val commitOffset = if (isRtl) offset + width - advanceEnd else offset + advanceStart
681
+ if (ctx.drawTextConsumer != null) {
682
+ commitTextRunToConsumer(
683
+ commitStart,
684
+ commitEnd,
685
+ contextStart,
686
+ contextEnd,
687
+ isRtl,
688
+ canvas,
689
+ commitOffset,
690
+ newWidth,
691
+ ctx
692
+ )
693
+ } else {
694
+ commitTextRunToCanvas(
695
+ commitStart,
696
+ commitEnd,
697
+ contextStart,
698
+ contextEnd,
699
+ isRtl,
700
+ canvas,
701
+ commitOffset,
702
+ newWidth
703
+ )
704
+ }
705
+ }
706
+ }
707
+ }
708
+
709
+ private fun splitRegionsAndCommit(
710
+ paintStart: Int, paintEnd: Int, isRtl: Boolean,
711
+ canvas: Canvas, offset: Float, width: Float, color: Int, ctx: IteratingContext
712
+ ) {
713
+ val selectionStartLocal = max(paintStart, min(paintEnd, selectedStart))
714
+ val selectionEndLocal = max(paintStart, min(paintEnd, selectedEnd))
715
+ tmpIndices[0] = paintStart
716
+ tmpIndices[1] = paintEnd
717
+ tmpIndices[2] = selectionStartLocal
718
+ tmpIndices[3] = selectionEndLocal
719
+ // Manual sort of 4 elements (optimized for typical selection order)
720
+ var a = tmpIndices[0]
721
+ var b = tmpIndices[1]
722
+ var c = tmpIndices[2]
723
+ var d = tmpIndices[3]
724
+ if (a > b) { val t = a; a = b; b = t }
725
+ if (c > d) { val t = c; c = d; d = t }
726
+ if (a > c) { val t = a; a = c; c = t }
727
+ if (b > d) { val t = b; b = d; d = t }
728
+ if (b > c) { val t = b; b = c; c = t }
729
+ tmpIndices[0] = a
730
+ tmpIndices[1] = b
731
+ tmpIndices[2] = c
732
+ tmpIndices[3] = d
733
+ var advance = 0f
734
+ var i = 0
735
+ while (i + 1 < tmpIndices.size) {
736
+ val commitStart = tmpIndices[i]
737
+ val commitEnd = tmpIndices[i + 1]
738
+ if (commitStart == commitEnd) {
739
+ i++
740
+ continue
741
+ }
742
+ if (commitStart >= selectionStartLocal && commitEnd <= selectionEndLocal) {
743
+ paint!!.color = params!!.colorScheme.getColor(EditorColorScheme.TEXT_SELECTED)
744
+ } else {
745
+ paint!!.color = color
746
+ }
747
+ val segmentWidth = getRunAdvanceCacheable(commitEnd, commitStart, commitEnd, paintStart, paintEnd, isRtl)
748
+ if (isRtl) {
749
+ commitTextRunAutoTruncated(
750
+ commitStart,
751
+ commitEnd,
752
+ paintStart,
753
+ paintEnd,
754
+ true,
755
+ canvas,
756
+ offset + width - advance - segmentWidth,
757
+ segmentWidth,
758
+ ctx
759
+ )
760
+ } else {
761
+ commitTextRunAutoTruncated(
762
+ commitStart,
763
+ commitEnd,
764
+ paintStart,
765
+ paintEnd,
766
+ false,
767
+ canvas,
768
+ offset + advance,
769
+ segmentWidth,
770
+ ctx
771
+ )
772
+ }
773
+ advance += segmentWidth
774
+ i++
775
+ }
776
+ }
777
+
778
+ private fun handleSingleStyledText(
779
+ paintStart: Int, paintEnd: Int, isRtl: Boolean, span: Span,
780
+ canvas: Canvas?, offset: Float, ctx: IteratingContext
781
+ ): Float {
782
+ val paintGeneral = paint!!
783
+
784
+ if ((canvas != null && ctx.drawTextConsumer == null) || measureCache == null) {
785
+ val styleBits = span.styleBits
786
+ if (styleBits != ctx.lastStyle) {
787
+ paintGeneral.isFakeBoldText = TextStyle.isBold(styleBits)
788
+ if (TextStyle.isItalics(styleBits)) {
789
+ paintGeneral.textSkewX = RenderingConstants.TEXT_SKEW_X
790
+ } else {
791
+ paintGeneral.textSkewX = 0f
792
+ }
793
+ ctx.lastStyle = styleBits
794
+ }
795
+ }
796
+
797
+ var advances: FloatArray? = null
798
+ if (ctx.advances != null) {
799
+ advances = TemporaryFloatBuffer.obtain(paintEnd - paintStart)
800
+ }
801
+ val width = getTextRunAdvancesCacheable(
802
+ paintStart, paintEnd - paintStart,
803
+ paintStart, paintEnd - paintStart, isRtl,
804
+ advances, 0
805
+ )
806
+ val ctxAdvances = ctx.advances
807
+ if (ctxAdvances != null && advances != null) {
808
+ for (i in paintStart until paintEnd) {
809
+ ctxAdvances.setAdvanceAt(i, advances[i - paintStart])
810
+ }
811
+ TemporaryFloatBuffer.recycle(advances)
812
+ }
813
+ if (checkCursorOffsetInSegment(ctx.targetCharOffset, paintStart, paintEnd)) {
814
+ ctx.maxOffset = 0f
815
+ val advance =
816
+ getRunAdvanceCacheable(ctx.targetCharOffset, paintStart, paintEnd, paintStart, paintEnd, isRtl)
817
+ if (isRtl) {
818
+ ctx.resultOffset = offset + width - advance
819
+ } else {
820
+ ctx.resultOffset = offset + advance
821
+ }
822
+ return width
823
+ }
824
+
825
+ if (ctx.targetHorizontalOffset != -1f) {
826
+ var runOffset = ctx.targetHorizontalOffset - offset
827
+ if (isRtl) {
828
+ runOffset = width - runOffset
829
+ }
830
+ if (runOffset > width) {
831
+ ctx.resultCharOffset = paintEnd
832
+ } else if (runOffset <= 0) {
833
+ ctx.resultCharOffset = paintStart
834
+ } else {
835
+ ctx.resultCharOffset =
836
+ findOffsetByAdvanceCacheable(paintStart, paintEnd, paintStart, paintEnd, isRtl, runOffset)
837
+ }
838
+ }
839
+
840
+ var regionLeft = -1f
841
+ var regionRight = -1f
842
+ val regionBuffer = ctx.regionBuffer
843
+ if (regionBuffer != null || ctx.drawTextConsumer != null) {
844
+ val sharedTextStart = max(paintStart, ctx.startCharOffset)
845
+ val sharedTextEnd = min(paintEnd, ctx.endCharOffset)
846
+ if (sharedTextStart < sharedTextEnd) {
847
+ if (sharedTextStart == paintStart && sharedTextEnd == paintEnd) {
848
+ regionLeft = offset
849
+ regionRight = offset + width
850
+ } else {
851
+ var startAdvance =
852
+ getRunAdvanceCacheable(sharedTextStart, paintStart, paintEnd, paintStart, paintEnd, isRtl)
853
+ var endAdvance =
854
+ getRunAdvanceCacheable(sharedTextEnd, paintStart, paintEnd, paintStart, paintEnd, isRtl)
855
+ startAdvance = if (isRtl) width - startAdvance else startAdvance
856
+ endAdvance = if (isRtl) width - endAdvance else endAdvance
857
+ regionLeft = offset + min(startAdvance, endAdvance)
858
+ regionRight = offset + max(startAdvance, endAdvance)
859
+ }
860
+ if (regionBuffer != null) {
861
+ regionBuffer.commitRegion(regionLeft, regionRight)
862
+ }
863
+ }
864
+ }
865
+
866
+ val sharedStart = max(offset, ctx.minOffset)
867
+ val sharedEnd = min(offset + width, ctx.maxOffset)
868
+ if (sharedStart >= sharedEnd) {
869
+ return width
870
+ }
871
+
872
+ if (canvas == null) {
873
+ return width
874
+ }
875
+
876
+ if (ctx.drawTextConsumer != null) {
877
+ val sharedTextStart = max(paintStart, ctx.startCharOffset)
878
+ val sharedTextEnd = min(paintEnd, ctx.endCharOffset)
879
+ if (sharedTextStart >= sharedTextEnd) {
880
+ return width
881
+ }
882
+ if (ctx.autoClip) {
883
+ canvas.save()
884
+ clipRegionForPatchDrawing(
885
+ regionLeft,
886
+ regionRight - regionLeft,
887
+ TextStyle.isItalics(span.styleBits),
888
+ canvas
889
+ )
890
+ }
891
+ ctx.currentSpan = span
892
+ commitTextRunAutoTruncated(paintStart, paintEnd, paintStart, paintEnd, isRtl, canvas, offset, width, ctx)
893
+ ctx.currentSpan = null
894
+ ctx.lastStyle = -1
895
+ if (ctx.autoClip) {
896
+ canvas.restore()
897
+ }
898
+ return width
899
+ }
900
+
901
+ val renderer = span.getSpanExt(SpanExtAttrs.EXT_EXTERNAL_RENDERER) as SpanExternalRenderer?
902
+
903
+ if (renderer != null && renderer.requirePreDraw()) {
904
+ val saveCount = canvas.save()
905
+ canvas.translate(offset, 0f)
906
+ canvas.clipRect(0f, params!!.rowTop.toFloat(), width, params!!.rowHeight.toFloat())
907
+ try {
908
+ renderer.draw(canvas, paintGeneral, params!!.colorScheme, true)
909
+ } catch (e: Exception) {
910
+ Log.e(LOG_TAG, "Error while invoking external renderer", e)
911
+ }
912
+ canvas.restoreToCount(saveCount)
913
+ }
914
+
915
+ val backgroundColor = RendererUtils.getBackgroundColor(span, params!!.colorScheme)
916
+ if (backgroundColor != 0 && paintStart != paintEnd) {
917
+ tmpRect.set(offset, params!!.rowTop.toFloat(), offset + width, params!!.rowBottom.toFloat())
918
+ paintGeneral.color = backgroundColor
919
+ val radius = params!!.rowHeight * params!!.roundTextBackgroundFactor
920
+ canvas.drawRoundRect(tmpRect, radius, radius, paintGeneral)
921
+ }
922
+
923
+ val foregroundColor = RendererUtils.getForegroundColor(span, params!!.colorScheme)
924
+ if (selectedStart >= selectedEnd || selectedStart >= textEnd || selectedEnd <= textStart || params!!.colorScheme
925
+ .getColor(EditorColorScheme.TEXT_SELECTED) == 0
926
+ ) {
927
+ paintGeneral.color = foregroundColor
928
+ commitTextRunAutoTruncated(paintStart, paintEnd, paintStart, paintEnd, isRtl, canvas, offset, width, ctx)
929
+ } else {
930
+ splitRegionsAndCommit(paintStart, paintEnd, isRtl, canvas, offset, width, foregroundColor, ctx)
931
+ }
932
+
933
+ if (TextStyle.isStrikeThrough(span.style)) {
934
+ val strikethroughColor = params!!.colorScheme.getColor(EditorColorScheme.STRIKETHROUGH)
935
+ val paintOther = params!!.miscPaint
936
+ paintOther.color = if (strikethroughColor == 0) paintGeneral.color else strikethroughColor
937
+ val y = params!!.rowTop + params!!.rowHeight / 2f
938
+ canvas.drawLine(
939
+ offset,
940
+ y,
941
+ offset + width,
942
+ y,
943
+ paintOther
944
+ )
945
+ }
946
+
947
+ val underlineColor = span.underlineColor
948
+ var underlineColorInt = 0
949
+ if (underlineColor != null && (underlineColor.resolve(params!!.colorScheme)
950
+ .also { underlineColorInt = it }) != 0
951
+ ) {
952
+ tmpRect.bottom = params!!.textBottom.toFloat()
953
+ tmpRect.top = tmpRect.bottom - params!!.textHeight * RenderingConstants.TEXT_UNDERLINE_WIDTH_FACTOR
954
+ tmpRect.left = offset
955
+ tmpRect.right = offset + width
956
+ paintGeneral.color = underlineColorInt
957
+ canvas.drawRect(tmpRect, paintGeneral)
958
+ }
959
+
960
+ if (renderer != null && renderer.requirePostDraw()) {
961
+ val saveCount = canvas.save()
962
+ canvas.translate(offset, params!!.rowTop.toFloat())
963
+ canvas.clipRect(0f, 0f, width, params!!.rowHeight.toFloat())
964
+ try {
965
+ renderer.draw(canvas, paintGeneral, params!!.colorScheme, false)
966
+ } catch (e: Exception) {
967
+ Log.e(LOG_TAG, "Error while invoking external renderer", e)
968
+ }
969
+ canvas.restoreToCount(saveCount)
970
+ }
971
+ return width
972
+ }
973
+
974
+ private fun handleMultiStyledText(
975
+ start: Int, end: Int, isRtl: Boolean, pointers: ListPointers,
976
+ canvas: Canvas?, offset: Float, ctx: IteratingContext
977
+ ): Float {
978
+ var spanIndex = pointers.spanIndex
979
+ val targetCharIndex = if (isRtl) end - 1 else start
980
+ val localSpans = spans!!
981
+ val spansSize = localSpans.size
982
+ while (spanIndex + 1 < spansSize && localSpans[spanIndex + 1].column <= targetCharIndex) {
983
+ spanIndex++
984
+ }
985
+ var localOffset = 0f
986
+ if (isRtl) {
987
+ var nextEnd = end
988
+ while (nextEnd > start) {
989
+ var moveSpanIndex = true
990
+ var segmentStart: Int
991
+
992
+ val span = localSpans[spanIndex]
993
+ if (spanIndex == 0) {
994
+ moveSpanIndex = false
995
+ segmentStart = 0
996
+ } else {
997
+ segmentStart = span.column
998
+ }
999
+ segmentStart = max(start, segmentStart)
1000
+ val segmentEnd = nextEnd
1001
+
1002
+ localOffset += handleSingleStyledText(
1003
+ segmentStart,
1004
+ segmentEnd,
1005
+ isRtl,
1006
+ span,
1007
+ canvas,
1008
+ offset + localOffset,
1009
+ ctx
1010
+ )
1011
+
1012
+ if (moveSpanIndex) {
1013
+ spanIndex--
1014
+ }
1015
+ nextEnd = segmentStart
1016
+
1017
+ if (offset + localOffset > ctx.maxOffset) {
1018
+ break
1019
+ }
1020
+ }
1021
+ } else {
1022
+ var lastEnd = start
1023
+ while (lastEnd < end) {
1024
+ var moveSpanIndex = true
1025
+ var segmentEnd: Int
1026
+ if (spanIndex + 1 >= spansSize) {
1027
+ moveSpanIndex = false
1028
+ segmentEnd = textEnd
1029
+ } else {
1030
+ segmentEnd = localSpans[spanIndex + 1].column
1031
+ }
1032
+ segmentEnd = min(end, segmentEnd)
1033
+ val segmentStart = lastEnd
1034
+ val span = localSpans[spanIndex]
1035
+
1036
+ localOffset += handleSingleStyledText(
1037
+ segmentStart,
1038
+ segmentEnd,
1039
+ isRtl,
1040
+ span,
1041
+ canvas,
1042
+ offset + localOffset,
1043
+ ctx
1044
+ )
1045
+
1046
+ lastEnd = segmentEnd
1047
+ if (moveSpanIndex) {
1048
+ spanIndex++
1049
+ }
1050
+
1051
+ if (offset + localOffset > ctx.maxOffset) {
1052
+ break
1053
+ }
1054
+ }
1055
+ }
1056
+ return localOffset
1057
+ }
1058
+
1059
+ private fun handleSingleTextElement(
1060
+ e: RowElement, pointers: ListPointers,
1061
+ canvas: Canvas?, offset: Float, ctx: IteratingContext
1062
+ ): Float {
1063
+ val chars = text!!.backingCharArray
1064
+ val isRtl = e.isRtlText
1065
+ var localOffset = 0f
1066
+ var lastEnd = if (isRtl) e.endColumn else e.startColumn
1067
+ val terminalIndex = if (isRtl) (e.startColumn - 1) else e.endColumn
1068
+ val tabWidth = params!!.tabWidth * paint!!.spaceWidth
1069
+ var index = (if (isRtl) e.endColumn - 1 else e.startColumn)
1070
+ while (if (isRtl) (index >= terminalIndex) else (index <= terminalIndex)
1071
+ ) {
1072
+ if (index == terminalIndex || chars[index] == '\t') {
1073
+ val regionStart = if (isRtl) index + 1 else lastEnd
1074
+ val regionEnd = if (isRtl) lastEnd else index
1075
+ localOffset += handleMultiStyledText(
1076
+ regionStart,
1077
+ regionEnd,
1078
+ isRtl,
1079
+ pointers,
1080
+ canvas,
1081
+ offset + localOffset,
1082
+ ctx
1083
+ )
1084
+ if (offset + localOffset > ctx.maxOffset) {
1085
+ break
1086
+ }
1087
+ if (index != terminalIndex) {
1088
+ // tab
1089
+ if (index == ctx.targetCharOffset || (index + 1 == ctx.targetCharOffset && index + 1 == textEnd)) {
1090
+ val advance = if (index == ctx.targetCharOffset) 0f else tabWidth
1091
+ if (isRtl) {
1092
+ ctx.resultOffset = localOffset + tabWidth - advance
1093
+ } else {
1094
+ ctx.resultOffset = localOffset + advance
1095
+ }
1096
+ ctx.maxOffset = 0f
1097
+ }
1098
+ if (ctx.targetHorizontalOffset != -1f) {
1099
+ var runOffset = ctx.targetHorizontalOffset - offset - localOffset
1100
+ if (isRtl) {
1101
+ runOffset = tabWidth - runOffset
1102
+ }
1103
+ if (runOffset > tabWidth / 2f) {
1104
+ ctx.resultCharOffset = index + 1
1105
+ } else {
1106
+ ctx.resultCharOffset = index
1107
+ }
1108
+ }
1109
+ val regionBuffer = ctx.regionBuffer
1110
+ if (regionBuffer != null && index >= ctx.startCharOffset && index < ctx.endCharOffset) {
1111
+ regionBuffer.commitRegion(offset + localOffset, offset + localOffset + tabWidth)
1112
+ }
1113
+ val ctxAdvances = ctx.advances
1114
+ if (ctxAdvances != null) {
1115
+ ctxAdvances.setAdvanceAt(index, tabWidth)
1116
+ }
1117
+ if (ctx.drawTextConsumer != null && index >= ctx.startCharOffset && index < ctx.endCharOffset) {
1118
+ ctx.drawTextConsumer!!.drawText(
1119
+ canvas,
1120
+ chars,
1121
+ index,
1122
+ 1,
1123
+ index,
1124
+ 1,
1125
+ isRtl,
1126
+ offset + localOffset,
1127
+ tabWidth,
1128
+ params,
1129
+ null
1130
+ )
1131
+ }
1132
+ localOffset += tabWidth
1133
+ }
1134
+ lastEnd = if (isRtl) index else index + 1
1135
+ if (offset + localOffset > ctx.maxOffset) {
1136
+ break
1137
+ }
1138
+ }
1139
+ index += (if (isRtl) -1 else 1)
1140
+ }
1141
+ return localOffset
1142
+ }
1143
+
1144
+ private fun handleSingleInlineElement(
1145
+ e: RowElement,
1146
+ canvas: Canvas?, offset: Float, ctx: IteratingContext
1147
+ ): Float {
1148
+ val inlay = e.inlayHint!!
1149
+ val renderer = params!!.inlayHintRendererProvider.getInlayHintRendererForType(inlay.type)
1150
+ var w = 0f
1151
+ if (renderer != null) {
1152
+ w = renderer.measure(inlay, paint!!, inlayHintRenderParams!!)
1153
+ w = max(0f, w)
1154
+ }
1155
+ val regionBuffer = ctx.regionBuffer
1156
+ if (regionBuffer != null) {
1157
+ regionBuffer.commitPossibleInterval(offset, offset + w)
1158
+ }
1159
+ if (canvas == null || ctx.drawTextConsumer != null) {
1160
+ return w
1161
+ }
1162
+ val regionLeft = offset
1163
+ val regionRight = offset + w
1164
+ val sharedStart = max(regionLeft, ctx.minOffset)
1165
+ val sharedEnd = min(regionRight, ctx.maxOffset)
1166
+ if (renderer != null && sharedStart < sharedEnd) {
1167
+ val saveCount = canvas.save()
1168
+ canvas.translate(offset, params!!.rowTop.toFloat())
1169
+ renderer.render(inlay, canvas, paint!!, inlayHintRenderParams!!, params!!.colorScheme, w)
1170
+ canvas.restoreToCount(saveCount)
1171
+ ctx.lastStyle = -1
1172
+ }
1173
+ return w
1174
+ }
1175
+
1176
+ private fun handleMultiElementRun(
1177
+ e: List<RowElement?>?, isRtl: Boolean, pointers: ListPointers,
1178
+ canvas: Canvas?, offset: Float, ctx: IteratingContext
1179
+ ): Float {
1180
+ if (e == null) return 0f
1181
+ // ReversedListView for ArrayList
1182
+ val visualElements = if (isRtl) ReversedListView(e) else e
1183
+ var localOffset = 0f
1184
+ for (element in visualElements) {
1185
+ if (element != null) {
1186
+ if (element.type == RowElementTypes.TEXT) {
1187
+ localOffset += handleSingleTextElement(element, pointers, canvas, offset + localOffset, ctx)
1188
+ } else if (element.type == RowElementTypes.INLAY_HINT) {
1189
+ localOffset += handleSingleInlineElement(element, canvas, offset + localOffset, ctx)
1190
+ }
1191
+ }
1192
+ if (offset + localOffset > ctx.maxOffset) {
1193
+ break
1194
+ }
1195
+ }
1196
+ return localOffset
1197
+ }
1198
+
1199
+ fun draw(canvas: Canvas?, minHorizontalOffset: Float, maxHorizontalOffset: Float): Long {
1200
+ val ctx = IteratingContext()
1201
+ ctx.minOffset = minHorizontalOffset
1202
+ ctx.maxOffset = maxHorizontalOffset
1203
+
1204
+ class DrawHandler : RunElementsConsumer {
1205
+ var horizontalOffset = 0f
1206
+ var isExhausted = true
1207
+
1208
+ override fun accept(e: List<RowElement?>?, isRtl: Boolean, pointers: ListPointers?): Boolean {
1209
+ if (pointers != null) {
1210
+ val runWidth = handleMultiElementRun(e, isRtl, pointers, canvas, horizontalOffset, ctx)
1211
+ horizontalOffset += runWidth
1212
+ val exhausted = horizontalOffset < maxHorizontalOffset
1213
+ isExhausted = exhausted
1214
+ return exhausted
1215
+ }
1216
+ return true
1217
+ }
1218
+ }
1219
+
1220
+ val handler = DrawHandler()
1221
+ iterateRuns(handler, true)
1222
+ return IntPair.packIntFloat(if (handler.isExhausted) 1 else 0, handler.horizontalOffset)
1223
+ }
1224
+
1225
+ fun getCursorOffsetForIndex(index: Int): Float {
1226
+ val ctx = IteratingContext()
1227
+ ctx.targetCharOffset = index
1228
+ class CursorOffsetHandler : RunElementsConsumer {
1229
+ var horizontalOffset = 0f
1230
+
1231
+ override fun accept(e: List<RowElement?>?, isRtl: Boolean, pointers: ListPointers?): Boolean {
1232
+ if (pointers != null) {
1233
+ val runWidth = handleMultiElementRun(e, isRtl, pointers, null, horizontalOffset, ctx)
1234
+ horizontalOffset += runWidth
1235
+ return ctx.maxOffset != 0f
1236
+ }
1237
+ return true
1238
+ }
1239
+ }
1240
+
1241
+ val handler = CursorOffsetHandler()
1242
+ iterateRuns(handler, true)
1243
+ return ctx.resultOffset
1244
+ }
1245
+
1246
+ fun getIndexForCursorOffset(offset: Float): Int {
1247
+ val ctx = IteratingContext()
1248
+ ctx.targetHorizontalOffset = offset
1249
+ ctx.maxOffset = offset
1250
+ iterateRuns(MaxOffsetIterationConsumer(ctx), true)
1251
+ return if (ctx.resultCharOffset == -1) textStart else ctx.resultCharOffset
1252
+ }
1253
+
1254
+ fun iterateBackgroundRegions(
1255
+ start: Int,
1256
+ end: Int,
1257
+ allowLeadingBackground: Boolean,
1258
+ allowTrailingBackground: Boolean,
1259
+ handler: BackgroundRegionConsumer
1260
+ ) {
1261
+ val ctx = IteratingContext()
1262
+ ctx.startCharOffset = start
1263
+ ctx.endCharOffset = end
1264
+ ctx.regionBuffer = RegionBuffer(
1265
+ ctx,
1266
+ handler,
1267
+ allowLeadingBackground,
1268
+ allowTrailingBackground
1269
+ )
1270
+ iterateRuns(MaxOffsetIterationConsumer(ctx), true)
1271
+ ctx.regionBuffer?.commitCurrentIfPresent()
1272
+ }
1273
+
1274
+ fun iterateDrawTextRegions(
1275
+ start: Int, end: Int, canvas: Canvas?,
1276
+ minHorizontalOffset: Float, maxHorizontalOffset: Float,
1277
+ autoClip: Boolean, consumer: DrawTextConsumer?
1278
+ ) {
1279
+ val ctx = IteratingContext()
1280
+ ctx.startCharOffset = start
1281
+ ctx.endCharOffset = end
1282
+ ctx.minOffset = minHorizontalOffset
1283
+ ctx.maxOffset = maxHorizontalOffset
1284
+ ctx.autoClip = autoClip
1285
+ ctx.drawTextConsumer = consumer
1286
+ iterateRuns(MaxOffsetIterationConsumer(ctx, canvas), true)
1287
+ }
1288
+
1289
+ fun computeRowWidth(): Float {
1290
+ val ctx = IteratingContext()
1291
+ val handler = MaxOffsetIterationConsumer(ctx)
1292
+ iterateRuns(handler, true)
1293
+ return handler.horizontalOffset
1294
+ }
1295
+
1296
+ fun measureAdvanceInRun(
1297
+ offset: Int, start: Int, end: Int,
1298
+ contextStart: Int, contextEnd: Int, isRtl: Boolean
1299
+ ): Float {
1300
+ return getRunAdvanceCacheable(offset, start, end, contextStart, contextEnd, isRtl)
1301
+ }
1302
+
1303
+ fun buildMeasureCacheStep(cache: TextAdvancesCache?) {
1304
+ val ctx = IteratingContext()
1305
+ ctx.advances = cache
1306
+ iterateRuns(MaxOffsetIterationConsumer(ctx), true)
1307
+ }
1308
+
1309
+ fun buildMeasureCacheTailor(cache: TextAdvancesCache) {
1310
+ cache.finishBuilding()
1311
+ }
1312
+
1313
+ private inner class MaxOffsetIterationConsumer(var ctx: IteratingContext, var canvas: Canvas? = null) : RunElementsConsumer {
1314
+ var horizontalOffset = 0f
1315
+
1316
+ override fun accept(e: List<RowElement?>?, isRtl: Boolean, pointers: ListPointers?): Boolean {
1317
+ if (pointers != null) {
1318
+ horizontalOffset += handleMultiElementRun(e, isRtl, pointers, canvas, horizontalOffset, ctx)
1319
+ }
1320
+ return horizontalOffset < ctx.maxOffset
1321
+ }
1322
+ }
1323
+
1324
+ class WordwrapRow {
1325
+ var isEmpty = true
1326
+ var startColumn = 0
1327
+ var endColumn = 0
1328
+ var inlayHints: MutableList<InlayHint>? = null
1329
+ var rowWidth = 0f
1330
+
1331
+ fun setInitialRange(start: Int, end: Int) {
1332
+ isEmpty = false
1333
+ startColumn = start
1334
+ endColumn = end
1335
+ }
1336
+
1337
+ fun setEndColumnChecked(column: Int) {
1338
+ check(!isEmpty)
1339
+ this.endColumn = column
1340
+ }
1341
+
1342
+ fun addInlayHint(inlayHint: InlayHint) {
1343
+ check(!isEmpty)
1344
+ if (inlayHints == null) {
1345
+ inlayHints = ArrayList()
1346
+ }
1347
+ inlayHints!!.add(inlayHint)
1348
+ }
1349
+ }
1350
+
1351
+ internal class ListPointers(var spanIndex: Int, var inlineElementIndex: Int) {
1352
+ fun copy(): ListPointers {
1353
+ return ListPointers(spanIndex, inlineElementIndex)
1354
+ }
1355
+ }
1356
+
1357
+ private class RegionBuffer(
1358
+ var ctx: IteratingContext,
1359
+ var consumer: BackgroundRegionConsumer,
1360
+ var allowLeadingBackground: Boolean,
1361
+ var allowTrailingBackground: Boolean
1362
+ ) {
1363
+ var isEmpty = true
1364
+ var currentLeft = 0f
1365
+ var currentRight = 0f
1366
+ var hasPossibleInterval = false
1367
+ var intervalLeft = 0f
1368
+ var intervalRight = 0f
1369
+
1370
+ fun commitRegion(regionLeft: Float, regionRight: Float) {
1371
+ if (isEmpty) {
1372
+ if (hasPossibleInterval && abs(regionLeft - intervalRight) <= EPS) {
1373
+ currentLeft = intervalLeft
1374
+ } else {
1375
+ currentLeft = regionLeft
1376
+ }
1377
+ currentRight = regionRight
1378
+ isEmpty = false
1379
+ hasPossibleInterval = false
1380
+ return
1381
+ }
1382
+ if (!hasPossibleInterval && abs(regionLeft - currentRight) <= EPS) {
1383
+ currentRight = regionRight
1384
+ return
1385
+ } else if (hasPossibleInterval && abs(regionLeft - intervalRight) <= EPS) {
1386
+ currentRight = regionRight
1387
+ hasPossibleInterval = false
1388
+ return
1389
+ }
1390
+ commitCurrentIfPresent()
1391
+ isEmpty = false
1392
+ currentLeft = regionLeft
1393
+ currentRight = regionRight
1394
+ }
1395
+
1396
+ fun commitPossibleInterval(regionLeft: Float, regionRight: Float) {
1397
+ if (isEmpty && !allowLeadingBackground) {
1398
+ return
1399
+ }
1400
+ if (hasPossibleInterval) {
1401
+ if (abs(regionLeft - intervalRight) <= EPS) {
1402
+ intervalRight = regionRight
1403
+ } else {
1404
+ hasPossibleInterval = false
1405
+ }
1406
+ } else if (abs(regionLeft - currentRight) <= EPS) {
1407
+ intervalLeft = regionLeft
1408
+ intervalRight = regionRight
1409
+ hasPossibleInterval = true
1410
+ }
1411
+ }
1412
+
1413
+ fun commitCurrentIfPresent() {
1414
+ if (isEmpty) {
1415
+ return
1416
+ }
1417
+ if (hasPossibleInterval && allowTrailingBackground) {
1418
+ currentRight = intervalRight
1419
+ }
1420
+ if (!consumer.handleRegion(currentLeft, currentRight)) {
1421
+ ctx.maxOffset = 0f
1422
+ }
1423
+ isEmpty = true
1424
+ hasPossibleInterval = false
1425
+ }
1426
+
1427
+ companion object {
1428
+ private const val EPS = 1e-6f
1429
+ }
1430
+ }
1431
+
1432
+ internal interface RunElementsConsumer {
1433
+ fun accept(e: List<RowElement?>?, isRtl: Boolean, pointers: ListPointers?): Boolean
1434
+ }
1435
+
1436
+ interface BackgroundRegionConsumer {
1437
+ fun handleRegion(left: Float, right: Float): Boolean
1438
+ }
1439
+
1440
+ interface DrawTextConsumer {
1441
+ fun drawText(
1442
+ canvas: Canvas?,
1443
+ text: CharArray?,
1444
+ index: Int,
1445
+ count: Int,
1446
+ contextIndex: Int,
1447
+ contextCount: Int,
1448
+ isRtl: Boolean,
1449
+ horizontalOffset: Float,
1450
+ width: Float,
1451
+ params: TextRowParams?,
1452
+ span: Span?
1453
+ )
1454
+ }
1455
+
1456
+ companion object {
1457
+ private const val LOG_TAG = "TextRow"
1458
+ private val SPAN_COMPARATOR = Comparator<Span> { a, b ->
1459
+ Integer.compare(a.column, b.column)
1460
+ }
1461
+
1462
+ private const val MIN_AUTO_TRUNCATE_LENGTH = 64
1463
+ private const val MAX_CONTEXT_LENGTH = 256
1464
+ }
1465
+ }