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
@@ -1,1402 +0,0 @@
1
- /*
2
- * sora-editor - the awesome code editor for Android
3
- * https://github.com/abc15018045126/sora-editor
4
- * Copyright (C) 2020-2025 abc15018045126
5
- *
6
- * This library is free software; you can redistribute it and/or
7
- * modify it under the terms of the GNU Lesser General Public
8
- * License as published by the Free Software Foundation; either
9
- * version 2.1 of the License, or (at your option) any later version.
10
- *
11
- * This library is distributed in the hope that it will be useful,
12
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
13
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
14
- * Lesser General Public License for more details.
15
- *
16
- * You should have received a copy of the GNU Lesser General Public
17
- * License along with this library; if not, write to the Free Software
18
- * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301
19
- * USA
20
- *
21
- * Please contact abc15018045126 by email 2073412493@qq.com if you need
22
- * additional information or have any questions
23
- */
24
- package io.github.abc15018045126.sora.graphics;
25
-
26
- import android.graphics.Canvas;
27
- import android.graphics.Path;
28
- import android.graphics.RectF;
29
- import android.util.Log;
30
-
31
- import androidx.annotation.NonNull;
32
- import androidx.annotation.Nullable;
33
-
34
- import java.util.ArrayList;
35
- import java.util.Arrays;
36
- import java.util.Collections;
37
- import java.util.Comparator;
38
- import java.util.List;
39
-
40
- import io.github.abc15018045126.sora.lang.styling.Span;
41
- import io.github.abc15018045126.sora.lang.styling.SpanFactory;
42
- import io.github.abc15018045126.sora.lang.styling.TextStyle;
43
- import io.github.abc15018045126.sora.lang.styling.inlayHint.CharacterSide;
44
- import io.github.abc15018045126.sora.lang.styling.inlayHint.InlayHint;
45
- import io.github.abc15018045126.sora.lang.styling.span.SpanExtAttrs;
46
- import io.github.abc15018045126.sora.lang.styling.span.SpanExternalRenderer;
47
- import io.github.abc15018045126.sora.text.ContentLine;
48
- import io.github.abc15018045126.sora.text.FunctionCharacters;
49
- import io.github.abc15018045126.sora.text.bidi.Directions;
50
- import io.github.abc15018045126.sora.text.bidi.IDirections;
51
- import io.github.abc15018045126.sora.text.bidi.VisualDirections;
52
- import io.github.abc15018045126.sora.text.breaker.WordBreaker;
53
- import io.github.abc15018045126.sora.text.breaker.WordBreakerEmpty;
54
- import io.github.abc15018045126.sora.util.IntPair;
55
- import io.github.abc15018045126.sora.util.RendererUtils;
56
- import io.github.abc15018045126.sora.util.ReversedListView;
57
- import io.github.abc15018045126.sora.util.TemporaryFloatBuffer;
58
- import io.github.abc15018045126.sora.widget.layout.RowElement;
59
- import io.github.abc15018045126.sora.widget.layout.RowElementTypes;
60
- import io.github.abc15018045126.sora.widget.rendering.RenderingConstants;
61
- import io.github.abc15018045126.sora.widget.rendering.TextAdvancesCache;
62
- import io.github.abc15018045126.sora.widget.schemes.EditorColorScheme;
63
-
64
- /**
65
- * {@link TextRow} is a helper class for a single text row to shape, measure and draw.
66
- * <p>
67
- * Each row is firstly reordered according to the logical line directions analysis. Then
68
- * each run is processed from visually left to right. Elements in a run maybe a segment of text,
69
- * or an inlay hint (inline element).
70
- * <p>
71
- * A special case is text breaking, which happens in wordwrap mode. When breaking text, the runs are
72
- * processed logically because a single row must represent a logically continuous text segment.
73
- * <p>
74
- * The indices are mostly unchecked in this class, so caller have to duty to offer valid indices.
75
- *
76
- * @author abc15018045126
77
- */
78
- public class TextRow {
79
-
80
- private final static String LOG_TAG = "TextRow";
81
- private final static Comparator<Span> SPAN_COMPARATOR = (a, b) -> {
82
- if (a == null && b == null) return 0;
83
- if (a == null) return -1;
84
- if (b == null) return 1;
85
- return Integer.compare(a.getColumn(), b.getColumn());
86
- };
87
-
88
- /**
89
- * The minimum character count of a span to be auto-truncated.
90
- */
91
- private final static int MIN_AUTO_TRUNCATE_LENGTH = 64;
92
- /**
93
- * Max context length when text run is truncated
94
- */
95
- private final static int MAX_CONTEXT_LENGTH = 256;
96
-
97
- private final RectF tmpRect = new RectF();
98
- private final int[] tmpIndices = new int[4];
99
- private final Span tmpSpan = SpanFactory.obtainNoExt(0, 0);
100
- private ContentLine text;
101
- private Directions directions;
102
- private int textStart;
103
- private int textEnd;
104
- private List<Span> spans;
105
- private List<InlayHint> inlineElements;
106
- private TextRowParams params;
107
- private InlayHintRenderParams inlayHintRenderParams;
108
- private Paint paint;
109
- private TextAdvancesCache measureCache;
110
- private int selectedStart = -1;
111
- private int selectedEnd = -1;
112
-
113
- public TextRow() {
114
-
115
- }
116
-
117
- public void set(@NonNull ContentLine text,
118
- int start, int end, @Nullable List<Span> spans, @Nullable List<InlayHint> inlineElements,
119
- @NonNull Directions directions, @NonNull Paint paint,
120
- @Nullable TextAdvancesCache measureCache, @NonNull TextRowParams params) {
121
- this.text = text;
122
- textStart = start;
123
- textEnd = end;
124
- this.spans = spans;
125
- this.inlineElements = inlineElements;
126
- this.directions = directions;
127
- this.paint = paint;
128
- this.params = params;
129
- this.measureCache = measureCache;
130
- this.inlayHintRenderParams = params.toInlayHintRenderParams();
131
- }
132
-
133
- /**
134
- * Update the range of text
135
- */
136
- public void setRange(int start, int end) {
137
- this.textStart = start;
138
- this.textEnd = end;
139
- }
140
-
141
- public int getTextStart() {
142
- return textStart;
143
- }
144
-
145
- public int getTextEnd() {
146
- return textEnd;
147
- }
148
-
149
- public void setSelectedRange(int start, int end) {
150
- this.selectedStart = start;
151
- this.selectedEnd = end;
152
- }
153
-
154
- /**
155
- * Get character advances for text breaking, in a single run
156
- */
157
- private float getSingleRunAdvancesForBreaking(int start, int end, int contextStart, int contextEnd,
158
- boolean isRtl, float[] advances) {
159
- var chars = text.getBackingCharArray();
160
- int lastEnd = start;
161
- float tabWidth = params.getTabWidth() * paint.getSpaceWidth();
162
- float width = 0f;
163
- for (int i = start; i <= end; i++) {
164
- if (i == end || chars[i] == '\t') {
165
- // commit [lastEnd, i)
166
- if (i > lastEnd)
167
- width += paint.myGetTextRunAdvances(chars, lastEnd, i - lastEnd, contextStart, contextEnd - contextStart, isRtl, advances, (lastEnd - start));
168
- if (i < end) {
169
- width += tabWidth;
170
- if (advances != null)
171
- advances[i - start] = tabWidth;
172
- }
173
- lastEnd = i + 1;
174
- }
175
- }
176
- return width;
177
- }
178
-
179
- /**
180
- * Get the character advances and horizontal advance in a single text run
181
- */
182
- private float getTextRunAdvancesCacheable(int index, int count, int contextIndex, int contextCount, boolean isRtl, @Nullable float[] advances, int advancesIndex) {
183
- if (measureCache != null) {
184
- if (advances != null) {
185
- for (int i = 0; i < count; i++) {
186
- advances[advancesIndex + i] = measureCache.getAdvanceAt(index + i);
187
- }
188
- }
189
- return measureCache.getAdvancesSum(index, index + count);
190
- }
191
- return paint.myGetTextRunAdvances(text.getBackingCharArray(), index, count, contextIndex, contextCount, isRtl, advances, advancesIndex);
192
- }
193
-
194
- /**
195
- * Get the cursor horizontal advance in a single text run
196
- */
197
- private float getRunAdvanceCacheable(int offset, int start, int end,
198
- int contextStart, int contextEnd, boolean isRtl) {
199
- if (measureCache != null) {
200
- return measureCache.getAdvancesSum(start, offset);
201
- }
202
- return GraphicsCompat.getRunAdvance(paint, text.getBackingCharArray(), start, end, contextStart, contextEnd, isRtl, offset);
203
- }
204
-
205
- /**
206
- * Find the character index from cursor horizontal offset
207
- */
208
- private int findOffsetByAdvanceCacheable(int start, int end, int contextStart, int contextEnd, boolean isRtl, float advance) {
209
- if (measureCache != null) {
210
- var cache = measureCache;
211
- int left = start, right = end;
212
- var base = cache.getAdvancesSum(0, start);
213
- while (left <= right) {
214
- var mid = (left + right) / 2;
215
- if (mid < start || mid >= end) {
216
- left = mid;
217
- break;
218
- }
219
- var value = cache.getAdvancesSum(0, mid) - base;
220
- if (value > advance) {
221
- right = mid - 1;
222
- } else if (value < advance) {
223
- left = mid + 1;
224
- } else {
225
- left = mid;
226
- break;
227
- }
228
- }
229
- if (cache.getAdvancesSum(0, left) - base > advance) {
230
- left--;
231
- }
232
- left = Math.max(start, Math.min(end, left));
233
- return left;
234
- }
235
- return paint.findOffsetByRunAdvance(text, start, end, contextStart, contextEnd, isRtl, advance);
236
- }
237
-
238
- /**
239
- * Iterate the runs in the row
240
- *
241
- * @param reorderVisually {@code true} to reorder the elements visually. Otherwise, runs are consumed logically.
242
- */
243
- private void iterateRuns(RunElementsConsumer consumer, boolean reorderVisually) {
244
- ListPointers pointers = null;
245
- // Generally, reordering is not required
246
- IDirections dirs = reorderVisually && text.mayNeedBidi() ? new VisualDirections(directions) : directions;
247
- for (int i = 0; i < dirs.getRunCount(); i++) {
248
- int runEnd = dirs.getRunEnd(i);
249
- int runStart = dirs.getRunStart(i);
250
- int segmentStart = Math.max(runStart, textStart);
251
- int segmentEnd = Math.min(runEnd, textEnd);
252
- // We can not stop here because in multi-run text, directions are reordered and may not be logically continuous
253
- if (segmentStart >= segmentEnd) {
254
- continue;
255
- }
256
- pointers = seekStartIndices(segmentStart);
257
- if (!generateAndConsumeSingleRun(segmentStart, segmentEnd, dirs.isRunRtl(i), pointers, consumer)) {
258
- break;
259
- }
260
- }
261
- // handle trailing inline elements
262
- int currInlineIndex = pointers == null ? 0 : pointers.inlineElementIndex;
263
- List<RowElement> trailingInlineRun = new ArrayList<>();
264
- while (currInlineIndex < inlineElements.size() && getExpectedInlayHintColumn(inlineElements.get(currInlineIndex)) == textEnd) {
265
- var e = new RowElement();
266
- e.type = RowElementTypes.INLAY_HINT;
267
- e.displayColumnPosition = textEnd;
268
- e.inlayHint = inlineElements.get(currInlineIndex++);
269
- trailingInlineRun.add(e);
270
- }
271
- if (!trailingInlineRun.isEmpty()) {
272
- if (pointers == null) {
273
- pointers = seekStartIndices(textEnd);
274
- }
275
- pointers.inlineElementIndex = currInlineIndex;
276
- consumer.accept(trailingInlineRun, false, pointers);
277
- }
278
- }
279
-
280
- /**
281
- * Get the expected column position to render after.
282
- */
283
- private int getExpectedInlayHintColumn(InlayHint inlayHint) {
284
- int position = inlayHint.getColumn();
285
- if (inlayHint.getDisplaySide() == CharacterSide.RIGHT) {
286
- position++;
287
- }
288
- position = Math.min(position, textEnd);
289
- return position;
290
- }
291
-
292
- /**
293
- * Seek the start indices for {@code spans} and {@code inlineElements}
294
- */
295
- private ListPointers seekStartIndices(int segmentStart) {
296
- tmpSpan.setColumn(segmentStart);
297
- int spanIndex = Collections.binarySearch(spans, tmpSpan, SPAN_COMPARATOR);
298
- if (spanIndex < 0) {
299
- spanIndex = -(spanIndex + 1);
300
- }
301
- // spans is expected to have at least one element.
302
- if (spanIndex == spans.size()) {
303
- spanIndex--;
304
- }
305
- while (spanIndex > 0 && spans.get(spanIndex).getColumn() >= segmentStart) {
306
- spanIndex--;
307
- }
308
- int inlineIndex = 0;
309
- while (inlineIndex < inlineElements.size() && inlineElements.get(inlineIndex).getColumn() < segmentStart) {
310
- inlineIndex++;
311
- }
312
- return new ListPointers(spanIndex, inlineIndex);
313
- }
314
-
315
- /**
316
- * Generate elements in a unidirectional run, and consume them.
317
- */
318
- private boolean generateAndConsumeSingleRun(int segmentStart, int segmentEnd, boolean isRtl, ListPointers pointers, RunElementsConsumer consumer) {
319
- List<RowElement> runElements = new ArrayList<>();
320
- int lastEndIndex = segmentStart;
321
- while (true) {
322
- if (pointers.inlineElementIndex < inlineElements.size() && inlineElements.get(pointers.inlineElementIndex).getColumn() < segmentEnd) {
323
- var inlay = inlineElements.get(pointers.inlineElementIndex);
324
- var position = getExpectedInlayHintColumn(inlay);
325
- var element = new RowElement();
326
- if (lastEndIndex == position) {
327
- pointers.inlineElementIndex++;
328
- element.type = RowElementTypes.INLAY_HINT;
329
- element.inlayHint = inlay;
330
- element.displayColumnPosition = position;
331
- } else {
332
- // lastEndIndex < position
333
- element.type = RowElementTypes.TEXT;
334
- element.startColumn = lastEndIndex;
335
- element.endColumn = position;
336
- element.isRtlText = isRtl;
337
- lastEndIndex = position;
338
- }
339
- runElements.add(element);
340
- } else if (lastEndIndex < segmentEnd) {
341
- var element = new RowElement();
342
- element.type = RowElementTypes.TEXT;
343
- element.startColumn = lastEndIndex;
344
- element.endColumn = segmentEnd;
345
- element.isRtlText = isRtl;
346
- lastEndIndex = segmentEnd;
347
- runElements.add(element);
348
- } else {
349
- break;
350
- }
351
- }
352
- boolean result = consumer.accept(runElements, isRtl, pointers);
353
- int spansSize = spans.size();
354
- while (pointers.spanIndex + 1 < spansSize && spans.get(pointers.spanIndex + 1).getColumn() <= segmentEnd) {
355
- pointers.spanIndex++;
356
- }
357
- return result;
358
- }
359
-
360
- /**
361
- * Break the logical line into rows
362
- * @param width Max width of a row
363
- * @return At least one row is returned, even when the line is empty.
364
- */
365
- public List<WordwrapRow> breakText(int width, boolean antiWordBreaking) {
366
- List<WordwrapRow> rows = new ArrayList<>();
367
- var optimizer = antiWordBreaking ? WordBreaker.Factory.newInstance(text) : WordBreakerEmpty.INSTANCE;
368
- class TextBreaker implements RunElementsConsumer {
369
- /**
370
- * Current row to append elements. Maybe empty.
371
- */
372
- WordwrapRow currentRow = new WordwrapRow();
373
- /**
374
- * Width of current row
375
- */
376
- float currentWidth = 0f;
377
-
378
- @Override
379
- public boolean accept(List<RowElement> elements, boolean isRtl, ListPointers pointers) {
380
- for (var element : elements) {
381
- if (element.type == RowElementTypes.TEXT) {
382
- handleText(element);
383
- } else if (element.type == RowElementTypes.INLAY_HINT) {
384
- handleInlineElement(element);
385
- }
386
- }
387
- return true;
388
- }
389
-
390
- void commitRow() {
391
- currentRow.rowWidth = currentWidth;
392
- rows.add(currentRow);
393
- currentWidth = 0f;
394
- currentRow = new WordwrapRow();
395
- }
396
-
397
- void handleText(RowElement e) {
398
- var advances = TemporaryFloatBuffer.obtain(e.endColumn - e.startColumn);
399
- float runWidth = getSingleRunAdvancesForBreaking(e.startColumn, e.endColumn, e.startColumn, e.endColumn, e.isRtlText, advances);
400
-
401
- // Easy case: the whole run can be placed on the row
402
- if (currentWidth + runWidth < width) {
403
- if (currentRow.isEmpty) {
404
- currentRow.setInitialRange(e.startColumn, e.endColumn);
405
- } else {
406
- currentRow.setEndColumn(e.endColumn);
407
- }
408
- currentWidth += runWidth;
409
- TemporaryFloatBuffer.recycle(advances);
410
- return;
411
- }
412
-
413
- // Split by grapheme boundary and possible line boundaries
414
- var limit = e.endColumn - e.startColumn;
415
- var offset = 0;
416
- while (offset < limit) {
417
- int next = GraphemeBoundsBreaker.findGraphemeBreakPoint(advances, limit, (int) (width - currentWidth), offset);
418
- if (next == offset) {
419
- if (currentRow.isEmpty) {
420
- // Force to break the text, though no space is available
421
- next++;
422
- } else {
423
- // Switch to new row
424
- commitRow();
425
- continue;
426
- }
427
- }
428
- // do anti-word-breaking
429
- int beforeOptimization = next;
430
- next = optimizer.getOptimizedBreakPoint(e.startColumn + offset, e.startColumn + next) - e.startColumn;
431
- float advance = 0f;
432
- for (int j = offset; j < next; j++) {
433
- advance += advances[j];
434
- }
435
- if (currentRow.isEmpty) {
436
- currentRow.setInitialRange(e.startColumn + offset, e.startColumn + next);
437
- } else {
438
- // It's okay the directly set the end, because text elements are yielded in logical order
439
- currentRow.setEndColumn(e.startColumn + next);
440
- }
441
- currentWidth += advance;
442
- if (beforeOptimization != next) {
443
- // The row end is optimized, switch to new row
444
- commitRow();
445
- }
446
- offset = next;
447
- }
448
- TemporaryFloatBuffer.recycle(advances);
449
- }
450
-
451
- void handleInlineElement(RowElement e) {
452
- var inlay = e.inlayHint;
453
- var renderer = params.getInlayHintRendererProvider().getInlayHintRendererForType(inlay.getType());
454
- float w = 0f;
455
- if (renderer != null) {
456
- w = renderer.measure(inlay, paint, inlayHintRenderParams);
457
- w = Math.max(0f, w);
458
- }
459
- if (currentRow.isEmpty || currentWidth + w > width) {
460
- if (!currentRow.isEmpty) {
461
- commitRow();
462
- }
463
- // we don't care if the new row can actually display the whole inlay hint
464
- // because inlay hint can not split
465
- currentRow.setInitialRange(e.displayColumnPosition, e.displayColumnPosition);
466
- currentRow.addInlayHint(inlay);
467
- currentWidth = w;
468
- } else {
469
- currentRow.addInlayHint(inlay);
470
- currentWidth += w;
471
- }
472
- }
473
-
474
- void appendTailIfNeeded() {
475
- if (!currentRow.isEmpty) {
476
- commitRow();
477
- }
478
- }
479
- }
480
- var breaker = new TextBreaker();
481
- iterateRuns(breaker, false);
482
- // The line is empty, but there should be at least one row in the result
483
- if (rows.isEmpty() && breaker.currentRow.isEmpty) {
484
- breaker.currentRow.isEmpty = false;
485
- breaker.currentRow.startColumn = textStart;
486
- breaker.currentRow.endColumn = textEnd;
487
- }
488
- breaker.appendTailIfNeeded();
489
- return rows;
490
- }
491
-
492
- /**
493
- * The context for iterating in run elements.
494
- */
495
- private static class IteratingContext {
496
- /* for paint style update (avoid redundant style update native calls) */
497
- public long lastStyle = -1;
498
- /* for horizontal offset limiting */
499
- public float minOffset = 0f;
500
- public float maxOffset = Float.MAX_VALUE;
501
- /* for horizontal cursor offset seeking */
502
- public int targetCharOffset = -1;
503
- public float resultOffset = 0f;
504
- /* for horizontal char offset seeking */
505
- public float targetHorizontalOffset = -1f;
506
- public int resultCharOffset = -1;
507
- /* for background region iterating / text patching */
508
- public int startCharOffset;
509
- public int endCharOffset;
510
- /* for background region iterating */
511
- public RegionBuffer regionBuffer;
512
- /* for text patching */
513
- public boolean autoClip;
514
- public DrawTextConsumer drawTextConsumer;
515
- public Span currentSpan;
516
- /* for measure cache */
517
- public TextAdvancesCache advances;
518
- }
519
-
520
- /**
521
- * Check if cursor at given offset should be displayed in the text segment
522
- */
523
- private boolean checkCursorOffsetInSegment(int offset, int start, int end) {
524
- return (offset >= start && (offset < end || (offset == end && end == textEnd)));
525
- }
526
-
527
- /**
528
- * Clip text region to patch certain regions
529
- */
530
- private void clipRegionForPatchDrawing(float textOffset, float width, boolean italics, Canvas canvas) {
531
- if (!italics) {
532
- canvas.clipRect(textOffset, 0, textOffset + width, params.getRowHeight());
533
- return;
534
- }
535
- var path = new Path();
536
- var y = params.getTextBottom();
537
- path.moveTo(textOffset, y);
538
- path.lineTo(textOffset - RenderingConstants.TEXT_SKEW_X * y, 0f);
539
- path.lineTo(textOffset + width - RenderingConstants.TEXT_SKEW_X * y, 0f);
540
- path.lineTo(textOffset + width, y);
541
- path.close();
542
- canvas.clipPath(path);
543
- }
544
-
545
- /**
546
- * Draw a single function character
547
- */
548
- protected void drawFunctionCharacter(Canvas canvas, float offsetX, float width, char ch) {
549
- var paintGraph = params.getGraphPaint();
550
- var metricsGraph = params.getGraphMetrics();
551
- paintGraph.setTextAlign(android.graphics.Paint.Align.CENTER);
552
- float heightScaled = metricsGraph.descent - metricsGraph.ascent;
553
- float centerY = params.getRowHeight() / 2f;
554
- float baseline = centerY - heightScaled / 2f - metricsGraph.ascent;
555
- paintGraph.setColor(paint.getColor());
556
- canvas.drawText(FunctionCharacters.getNameForFunctionCharacter(ch), offsetX + width / 2f, baseline, paintGraph);
557
- paintGraph.setTextAlign(android.graphics.Paint.Align.LEFT);
558
-
559
- float actualWidth = paintGraph.measureText(FunctionCharacters.getNameForFunctionCharacter(ch));
560
- tmpRect.top = centerY - heightScaled / 2f;
561
- tmpRect.bottom = centerY + heightScaled / 2f;
562
- tmpRect.left = offsetX + width / 2f - actualWidth / 2f;
563
- tmpRect.right = offsetX + width / 2f + actualWidth / 2f;
564
- int color = paint.getColor();
565
- paint.setColor(params.getColorScheme().getColor(EditorColorScheme.FUNCTION_CHAR_BACKGROUND_STROKE));
566
- paint.setStyle(android.graphics.Paint.Style.STROKE);
567
- paint.setStrokeWidth(params.getRowHeight() * 0.05f);
568
- canvas.drawRoundRect(tmpRect, params.getRowHeight() * params.getRoundTextBackgroundFactor(), params.getRowHeight() * params.getRoundTextBackgroundFactor(), paint);
569
- paint.setStyle(android.graphics.Paint.Style.FILL);
570
- paint.setColor(color);
571
- }
572
-
573
- /**
574
- * Terminal function for a single-styled text run. Commit the given text region to Canvas.
575
- * This function also handles function characters rendering.
576
- */
577
- private void commitTextRunToCanvas(int paintStart, int paintEnd, int contextStart, int contextEnd, boolean isRtl,
578
- Canvas canvas, float offset, float width) {
579
- if (paint.isRenderFunctionCharacters()) {
580
- var chars = text.getBackingCharArray();
581
- int lastEnd = paintStart;
582
- float initOffset = offset + (isRtl ? width : 0f);
583
- float drawOffset = initOffset;
584
- for (int i = paintStart; i <= paintEnd; i++) {
585
- char ch = '\0';
586
- if (i == paintEnd || FunctionCharacters.isEditorFunctionChar(ch = chars[i])) {
587
- // commit [lastEnd, i)
588
- if (i - lastEnd > 0) {
589
- if (isRtl) {
590
- paint.setTextAlign(android.graphics.Paint.Align.RIGHT);
591
- }
592
- GraphicsCompat.drawTextRun(canvas, chars, lastEnd, i - lastEnd, contextStart, contextEnd - contextStart, drawOffset, params.getTextBaseline(), isRtl, paint);
593
- if (isRtl) {
594
- paint.setTextAlign(android.graphics.Paint.Align.LEFT);
595
- }
596
- }
597
- if (i == paintEnd) {
598
- break;
599
- }
600
- float chAdvance = paint.measureText(FunctionCharacters.getNameForFunctionCharacter(ch));
601
- float advance = getRunAdvanceCacheable(i, paintStart, paintEnd, paintStart, paintEnd, isRtl);
602
- drawFunctionCharacter(canvas, isRtl ? initOffset - advance - chAdvance : initOffset + advance, chAdvance, ch);
603
- advance += chAdvance;
604
- drawOffset = initOffset + (isRtl ? -advance : advance);
605
- lastEnd = i;
606
- }
607
- }
608
- } else {
609
- GraphicsCompat.drawTextRun(canvas, text.getBackingCharArray(), paintStart, paintEnd - paintStart, contextStart, contextEnd - contextStart, offset, params.getTextBaseline(), isRtl, paint);
610
- }
611
- }
612
-
613
- private void commitTextRunToConsumer(int paintStart, int paintEnd, int contextStart, int contextEnd, boolean isRtl,
614
- Canvas canvas, float offset, float width, IteratingContext ctx) {
615
- ctx.drawTextConsumer.drawText(canvas, text.getBackingCharArray(), paintStart, paintEnd - paintStart, contextStart, contextEnd - contextStart, isRtl, offset, width, params, ctx.currentSpan);
616
- }
617
-
618
- /**
619
- * Truncate the text run to be committed, try to limit the committed part to be in the visible region
620
- */
621
- private void commitTextRunAutoTruncated(int paintStart, int paintEnd, int contextStart, int contextEnd, boolean isRtl,
622
- Canvas canvas, float offset, float width, IteratingContext ctx) {
623
- if (paintEnd - paintStart < MIN_AUTO_TRUNCATE_LENGTH || measureCache == null) {
624
- if (ctx.drawTextConsumer != null) {
625
- commitTextRunToConsumer(paintStart, paintEnd, contextStart, contextEnd, isRtl, canvas, offset, width, ctx);
626
- } else {
627
- commitTextRunToCanvas(paintStart, paintEnd, contextStart, contextEnd, isRtl, canvas, offset, width);
628
- }
629
- } else {
630
- float runAdvanceLeft = Math.max(0, ctx.minOffset - offset) - paint.getSpaceWidth();
631
- float runAdvanceRight = Math.min(width, ctx.maxOffset - offset) + paint.getSpaceWidth();
632
- int boundForLeft = findOffsetByAdvanceCacheable(paintStart, paintEnd, contextStart, contextEnd, isRtl, runAdvanceLeft);
633
- int boundForRight = findOffsetByAdvanceCacheable(paintStart, paintEnd, contextStart, contextEnd, isRtl, runAdvanceRight);
634
- int commitStart = Math.min(boundForLeft, boundForRight);
635
- int commitEnd = Math.max(boundForLeft, boundForRight);
636
-
637
- if (commitStart < commitEnd) {
638
- int commitContextStart = commitStart, commitContextEnd = commitEnd;
639
- var chars = text.getBackingCharArray();
640
- while (commitContextStart - 1 >= contextStart && chars[commitContextStart - 1] != ' '
641
- && (commitContextEnd - commitContextStart) < MAX_CONTEXT_LENGTH) {
642
- commitContextStart--;
643
- }
644
- while (commitContextEnd + 1 < contextEnd && chars[commitContextEnd] != ' '
645
- && (commitContextEnd - commitContextStart) < MAX_CONTEXT_LENGTH) {
646
- commitContextEnd++;
647
- }
648
-
649
- float advanceStart = measureAdvanceInRun(commitStart, paintStart, paintEnd, contextStart, contextEnd, isRtl);
650
- float advanceEnd = measureAdvanceInRun(commitEnd, paintStart, paintEnd, contextStart, contextEnd, isRtl);
651
- float newWidth = Math.abs(advanceStart - advanceEnd);
652
- float commitOffset = isRtl ? offset + width - advanceEnd : offset + advanceStart;
653
- if (ctx.drawTextConsumer != null) {
654
- commitTextRunToConsumer(commitStart, commitEnd, contextStart, contextEnd, isRtl, canvas, commitOffset, newWidth, ctx);
655
- } else {
656
- commitTextRunToCanvas(commitStart, commitEnd, contextStart, contextEnd, isRtl, canvas, commitOffset, newWidth);
657
- }
658
- }
659
- }
660
- }
661
-
662
- /**
663
- * Split the region with breakpoints from selection, and commit them separately to achieve
664
- * different text color in selected region
665
- */
666
- private void splitRegionsAndCommit(int paintStart, int paintEnd, boolean isRtl,
667
- Canvas canvas, float offset, float width, int color, IteratingContext ctx) {
668
- int selectionStart = Math.max(paintStart, Math.min(paintEnd, selectedStart));
669
- int selectionEnd = Math.max(paintStart, Math.min(paintEnd, selectedEnd));
670
- tmpIndices[0] = paintStart;
671
- tmpIndices[1] = paintEnd;
672
- tmpIndices[2] = selectionStart;
673
- tmpIndices[3] = selectionEnd;
674
- Arrays.sort(tmpIndices);
675
- float advance = 0f;
676
- for (int i = 0; i + 1 < tmpIndices.length; i++) {
677
- int commitStart = tmpIndices[i], commitEnd = tmpIndices[i + 1];
678
- if (commitStart == commitEnd) {
679
- continue;
680
- }
681
- if (commitStart >= selectionStart && commitEnd <= selectionEnd) {
682
- paint.setColor(params.getColorScheme().getColor(EditorColorScheme.TEXT_SELECTED));
683
- } else {
684
- paint.setColor(color);
685
- }
686
- float segmentWidth = getRunAdvanceCacheable(commitEnd, commitStart, commitEnd, paintStart, paintEnd, isRtl);
687
- if (isRtl) {
688
- commitTextRunAutoTruncated(commitStart, commitEnd, paintStart, paintEnd, true, canvas, offset + width - advance - segmentWidth, segmentWidth, ctx);
689
- } else {
690
- commitTextRunAutoTruncated(commitStart, commitEnd, paintStart, paintEnd, false, canvas, offset + advance, segmentWidth, ctx);
691
- }
692
- advance += segmentWidth;
693
- }
694
- }
695
-
696
- /**
697
- * Terminal handler for text element.
698
- */
699
- private float handleSingleStyledText(int paintStart, int paintEnd, boolean isRtl, Span span,
700
- Canvas canvas, float offset, IteratingContext ctx) {
701
- var paintGeneral = paint;
702
-
703
- // Apply font style if required
704
- if ((canvas != null && ctx.drawTextConsumer == null) || measureCache == null) {
705
- long styleBits = span.getStyleBits();
706
- if (span.getStyleBits() != ctx.lastStyle) {
707
- paintGeneral.setFakeBoldText(TextStyle.isBold(styleBits));
708
- if (TextStyle.isItalics(styleBits)) {
709
- paintGeneral.setTextSkewX(RenderingConstants.TEXT_SKEW_X);
710
- } else {
711
- paintGeneral.setTextSkewX(0);
712
- }
713
- ctx.lastStyle = styleBits;
714
- }
715
- }
716
-
717
- float[] advances = null;
718
- if (ctx.advances != null) {
719
- advances = TemporaryFloatBuffer.obtain(paintEnd - paintStart);
720
- }
721
- float width = getTextRunAdvancesCacheable(paintStart, paintEnd - paintStart,
722
- paintStart, paintEnd - paintStart, isRtl,
723
- advances, 0);
724
- if (ctx.advances != null && advances != null) {
725
- for (int i = paintStart; i < paintEnd; i++) {
726
- ctx.advances.setAdvanceAt(i, advances[i - paintStart]);
727
- }
728
- TemporaryFloatBuffer.recycle(advances);
729
- }
730
- if (checkCursorOffsetInSegment(ctx.targetCharOffset, paintStart, paintEnd)) {
731
- // Immediately stop the iteration
732
- ctx.maxOffset = 0f;
733
- float advance = getRunAdvanceCacheable(ctx.targetCharOffset, paintStart, paintEnd, paintStart, paintEnd, isRtl);
734
- if (isRtl) {
735
- ctx.resultOffset = offset + width - advance;
736
- } else {
737
- ctx.resultOffset = offset + advance;
738
- }
739
- return width;
740
- }
741
-
742
- if (ctx.targetHorizontalOffset != -1f) {
743
- float runOffset = ctx.targetHorizontalOffset - offset;
744
- if (isRtl) {
745
- runOffset = width - runOffset;
746
- }
747
- // Do some easy checks to avoid expensive native calls
748
- if (runOffset > width) {
749
- ctx.resultCharOffset = paintEnd;
750
- } else if (runOffset <= 0) {
751
- ctx.resultCharOffset = paintStart;
752
- } else {
753
- ctx.resultCharOffset = findOffsetByAdvanceCacheable(paintStart, paintEnd, paintStart, paintEnd, isRtl, runOffset);
754
- }
755
- }
756
-
757
- float regionLeft = -1f, regionRight = -1f;
758
- if (ctx.regionBuffer != null || ctx.drawTextConsumer != null) {
759
- int sharedTextStart = Math.max(paintStart, ctx.startCharOffset);
760
- int sharedTextEnd = Math.min(paintEnd, ctx.endCharOffset);
761
- if (sharedTextStart < sharedTextEnd) {
762
- if (sharedTextStart == paintStart && sharedTextEnd == paintEnd) {
763
- regionLeft = offset;
764
- regionRight = offset + width;
765
- } else {
766
- float startAdvance = getRunAdvanceCacheable(sharedTextStart, paintStart, paintEnd, paintStart, paintEnd, isRtl);
767
- float endAdvance = getRunAdvanceCacheable(sharedTextEnd, paintStart, paintEnd, paintStart, paintEnd, isRtl);
768
- startAdvance = isRtl ? width - startAdvance : startAdvance;
769
- endAdvance = isRtl ? width - endAdvance : endAdvance;
770
- regionLeft = offset + Math.min(startAdvance, endAdvance);
771
- regionRight = offset + Math.max(startAdvance, endAdvance);
772
- }
773
- if (ctx.regionBuffer != null) {
774
- ctx.regionBuffer.commitRegion(regionLeft, regionRight);
775
- }
776
- }
777
- }
778
-
779
- // Check intersection for early return
780
- float sharedStart = Math.max(offset, ctx.minOffset);
781
- float sharedEnd = Math.min(offset + width, ctx.maxOffset);
782
- if (sharedStart >= sharedEnd) {
783
- return width;
784
- }
785
-
786
- if (canvas == null) {
787
- return width;
788
- }
789
-
790
- if (ctx.drawTextConsumer != null) {
791
- int sharedTextStart = Math.max(paintStart, ctx.startCharOffset);
792
- int sharedTextEnd = Math.min(paintEnd, ctx.endCharOffset);
793
- if (sharedTextStart >= sharedTextEnd) {
794
- return width;
795
- }
796
- if (ctx.autoClip) {
797
- canvas.save();
798
- clipRegionForPatchDrawing(regionLeft, regionRight - regionLeft, TextStyle.isItalics(span.getStyleBits()), canvas);
799
- }
800
- ctx.currentSpan = span;
801
- commitTextRunAutoTruncated(paintStart, paintEnd, paintStart, paintEnd, isRtl, canvas, offset, width, ctx);
802
- ctx.currentSpan = null;
803
- ctx.lastStyle = -1;
804
- if (ctx.autoClip) {
805
- canvas.restore();
806
- }
807
-
808
- // drawing virtually, we should not actually render to the canvas
809
- return width;
810
- }
811
-
812
- var paintOther = params.getMiscPaint();
813
- SpanExternalRenderer renderer = span.getSpanExt(SpanExtAttrs.EXT_EXTERNAL_RENDERER);
814
-
815
- // Invoke external renderer preDraw
816
- if (renderer != null && renderer.requirePreDraw()) {
817
- int saveCount = canvas.save();
818
- canvas.translate(offset, 0);
819
- canvas.clipRect(0f, params.getRowTop(), width, params.getRowHeight());
820
- try {
821
- renderer.draw(canvas, paintGeneral, params.getColorScheme(), true);
822
- } catch (Exception e) {
823
- Log.e(LOG_TAG, "Error while invoking external renderer", e);
824
- }
825
- canvas.restoreToCount(saveCount);
826
- }
827
-
828
- int backgroundColor = RendererUtils.getBackgroundColor(span, params.getColorScheme());
829
- if (backgroundColor != 0 && paintStart != paintEnd) {
830
- tmpRect.set(offset, params.getRowTop(), offset + width, params.getRowBottom());
831
- paintGeneral.setColor(backgroundColor);
832
- canvas.drawRoundRect(tmpRect, params.getRowHeight() * params.getRoundTextBackgroundFactor(), params.getRowHeight() * params.getRoundTextBackgroundFactor(), paintGeneral);
833
- }
834
-
835
- // Draw text
836
- int foregroundColor = RendererUtils.getForegroundColor(span, params.getColorScheme());
837
- if (selectedStart >= selectedEnd || selectedStart >= textEnd || selectedEnd <= textStart
838
- || params.getColorScheme().getColor(EditorColorScheme.TEXT_SELECTED) == 0) {
839
- // Easy case when there is no selected text in region
840
- paintGeneral.setColor(foregroundColor);
841
- commitTextRunAutoTruncated(paintStart, paintEnd, paintStart, paintEnd, isRtl, canvas, offset, width, ctx);
842
- } else {
843
- splitRegionsAndCommit(paintStart, paintEnd, isRtl, canvas, offset, width, foregroundColor, ctx);
844
- }
845
-
846
- // Draw strikethrough
847
- if (TextStyle.isStrikeThrough(span.getStyle())) {
848
- var strikethroughColor = params.getColorScheme().getColor(EditorColorScheme.STRIKETHROUGH);
849
- paintOther.setColor(strikethroughColor == 0 ? paintGeneral.getColor() : strikethroughColor);
850
- canvas.drawLine(offset, params.getRowTop() + params.getRowHeight() / 2f, offset + width, params.getRowTop() + params.getRowHeight() / 2f, paintOther);
851
- }
852
-
853
- // Draw underline
854
- var underlineColor = span.getUnderlineColor();
855
- int underlineColorInt;
856
- if (underlineColor != null && (underlineColorInt = underlineColor.resolve(params.getColorScheme())) != 0) {
857
- tmpRect.bottom = params.getTextBottom();
858
- tmpRect.top = tmpRect.bottom - params.getTextHeight() * RenderingConstants.TEXT_UNDERLINE_WIDTH_FACTOR;
859
- tmpRect.left = offset;
860
- tmpRect.right = offset + width;
861
- paintGeneral.setColor(underlineColorInt);
862
- canvas.drawRect(tmpRect, paintGeneral);
863
- }
864
-
865
- // Invoke external renderer postDraw
866
- if (renderer != null && renderer.requirePostDraw()) {
867
- int saveCount = canvas.save();
868
- canvas.translate(offset, params.getRowTop());
869
- canvas.clipRect(0f, 0f, width, params.getRowHeight());
870
- try {
871
- renderer.draw(canvas, paintGeneral, params.getColorScheme(), false);
872
- } catch (Exception e) {
873
- Log.e(LOG_TAG, "Error while invoking external renderer", e);
874
- }
875
- canvas.restoreToCount(saveCount);
876
- }
877
- return width;
878
- }
879
-
880
- /**
881
- * Split text in an unidirectional run with span boundaries
882
- */
883
- private float handleMultiStyledText(int start, int end, boolean isRtl, ListPointers pointers,
884
- Canvas canvas, float offset, IteratingContext ctx) {
885
- int spanIndex = pointers.spanIndex;
886
- int targetCharIndex = isRtl ? end - 1 : start;
887
- int spansSize = spans.size();
888
- while (spanIndex + 1 < spansSize && spans.get(spanIndex + 1).getColumn() <= targetCharIndex) {
889
- spanIndex++;
890
- }
891
- float localOffset = 0f;
892
- if (isRtl) {
893
- // spanIndex controls text starts at (end-1) or before
894
- int nextEnd = end;
895
- while (nextEnd > start) {
896
- boolean moveSpanIndex = true;
897
- int segmentStart;
898
-
899
- Span span = spans.get(spanIndex);
900
- if (spanIndex == 0) {
901
- moveSpanIndex = false;
902
- segmentStart = 0;
903
- } else {
904
- segmentStart = span.getColumn();
905
- }
906
- segmentStart = Math.max(start, segmentStart);
907
- int segmentEnd = nextEnd;
908
-
909
- localOffset += handleSingleStyledText(segmentStart, segmentEnd, isRtl, span, canvas, offset + localOffset, ctx);
910
-
911
- if (moveSpanIndex) {
912
- spanIndex--;
913
- }
914
- nextEnd = segmentStart;
915
-
916
- if (offset + localOffset > ctx.maxOffset) {
917
- break;
918
- }
919
- }
920
- } else {
921
- int lastEnd = start;
922
- while (lastEnd < end) {
923
- boolean moveSpanIndex = true;
924
- int segmentEnd;
925
- if (spanIndex + 1 >= spansSize) {
926
- moveSpanIndex = false;
927
- segmentEnd = textEnd;
928
- } else {
929
- segmentEnd = spans.get(spanIndex + 1).getColumn();
930
- }
931
- segmentEnd = Math.min(end, segmentEnd);
932
- int segmentStart = lastEnd;
933
- Span span = spans.get(spanIndex);
934
-
935
- localOffset += handleSingleStyledText(segmentStart, segmentEnd, isRtl, span, canvas, offset + localOffset, ctx);
936
-
937
- lastEnd = segmentEnd;
938
- if (moveSpanIndex) {
939
- spanIndex++;
940
- }
941
-
942
- if (offset + localOffset > ctx.maxOffset) {
943
- break;
944
- }
945
- }
946
- }
947
- return localOffset;
948
- }
949
-
950
- /**
951
- * Split text in an unidirectional run with tab.
952
- * Tab character is consumed as terminal text segment here.
953
- */
954
- private float handleSingleTextElement(RowElement e, ListPointers pointers,
955
- Canvas canvas, float offset, IteratingContext ctx) {
956
- var chars = text.getBackingCharArray();
957
- boolean isRtl = e.isRtlText;
958
- float localOffset = 0f;
959
- int lastEnd = isRtl ? e.endColumn : e.startColumn;
960
- int terminalIndex = isRtl ? (e.startColumn - 1) : e.endColumn;
961
- float tabWidth = params.getTabWidth() * paint.getSpaceWidth();
962
- for (int index = (isRtl ? e.endColumn - 1 : e.startColumn);
963
- isRtl ? (index >= terminalIndex) : (index <= terminalIndex);
964
- index += (isRtl ? -1 : 1)) {
965
- if (index == terminalIndex || chars[index] == '\t') {
966
- int regionStart = isRtl ? index + 1 : lastEnd;
967
- int regionEnd = isRtl ? lastEnd : index;
968
- localOffset += handleMultiStyledText(regionStart, regionEnd, isRtl, pointers, canvas, offset + localOffset, ctx);
969
- if (offset + localOffset > ctx.maxOffset) {
970
- break;
971
- }
972
- if (index != terminalIndex) {
973
- // tab consumed here
974
- // [index, index+1)
975
- if (index == ctx.targetCharOffset || (index + 1 == ctx.targetCharOffset && index + 1 == textEnd)) {
976
- float advance = index == ctx.targetCharOffset ? 0 : tabWidth;
977
- if (isRtl) {
978
- ctx.resultOffset = localOffset + tabWidth - advance;
979
- } else {
980
- ctx.resultOffset = localOffset + advance;
981
- }
982
- ctx.maxOffset = 0f;
983
- }
984
- if (ctx.targetHorizontalOffset != -1f) {
985
- float runOffset = ctx.targetHorizontalOffset - offset - localOffset;
986
- if (isRtl) {
987
- runOffset = tabWidth - runOffset;
988
- }
989
- if (runOffset > tabWidth / 2f) {
990
- ctx.resultCharOffset = index + 1;
991
- } else {
992
- ctx.resultCharOffset = index;
993
- }
994
- }
995
- if (ctx.regionBuffer != null && index >= ctx.startCharOffset && index < ctx.endCharOffset) {
996
- ctx.regionBuffer.commitRegion(offset + localOffset, offset + localOffset + tabWidth);
997
- }
998
- if (ctx.advances != null) {
999
- ctx.advances.setAdvanceAt(index, tabWidth);
1000
- }
1001
- if (ctx.drawTextConsumer != null && index >= ctx.startCharOffset && index < ctx.endCharOffset) {
1002
- ctx.drawTextConsumer.drawText(canvas, chars, index, 1, index, 1, isRtl, offset + localOffset, tabWidth, params, null);
1003
- }
1004
- // virtually drawn
1005
- localOffset += tabWidth;
1006
- }
1007
- lastEnd = isRtl ? index : index + 1;
1008
- if (offset + localOffset > ctx.maxOffset) {
1009
- break;
1010
- }
1011
- }
1012
- }
1013
- return localOffset;
1014
- }
1015
-
1016
- /**
1017
- * Handle a single inline element in an unidirectional run
1018
- */
1019
- private float handleSingleInlineElement(RowElement e,
1020
- Canvas canvas, float offset, IteratingContext ctx) {
1021
- var inlay = e.inlayHint;
1022
- var renderer = params.getInlayHintRendererProvider().getInlayHintRendererForType(inlay.getType());
1023
- float w = 0f;
1024
- if (renderer != null) {
1025
- w = renderer.measure(inlay, paint, inlayHintRenderParams);
1026
- w = Math.max(0f, w);
1027
- }
1028
- if (ctx.regionBuffer != null) {
1029
- ctx.regionBuffer.commitPossibleInterval(offset, offset + w);
1030
- }
1031
- if (canvas == null || ctx.drawTextConsumer != null) {
1032
- return w;
1033
- }
1034
- var regionLeft = offset;
1035
- var regionRight = offset + w;
1036
- var sharedStart = Math.max(regionLeft, ctx.minOffset);
1037
- var sharedEnd = Math.min(regionRight, ctx.maxOffset);
1038
- if (renderer != null && sharedStart < sharedEnd) {
1039
- int saveCount = canvas.save();
1040
- canvas.translate(offset, params.getRowTop());
1041
- renderer.render(inlay, canvas, paint, inlayHintRenderParams, params.getColorScheme(), w);
1042
- canvas.restoreToCount(saveCount);
1043
- ctx.lastStyle = -1;
1044
- }
1045
- return w;
1046
- }
1047
-
1048
- /**
1049
- * Handle elements in a unidirectional run
1050
- */
1051
- private float handleMultiElementRun(List<RowElement> e, boolean isRtl, ListPointers pointers,
1052
- Canvas canvas, float offset, IteratingContext ctx) {
1053
- var visualElements = isRtl ? new ReversedListView<>(e) : e;
1054
- float localOffset = 0f;
1055
- for (var element : visualElements) {
1056
- if (element.type == RowElementTypes.TEXT) {
1057
- localOffset += handleSingleTextElement(element, pointers, canvas, offset + localOffset, ctx);
1058
- } else if (element.type == RowElementTypes.INLAY_HINT) {
1059
- localOffset += handleSingleInlineElement(element, canvas, offset + localOffset, ctx);
1060
- }
1061
- if (offset + localOffset > ctx.maxOffset) {
1062
- break;
1063
- }
1064
- }
1065
- return localOffset;
1066
- }
1067
-
1068
- /**
1069
- * Draw text into the given canvas. Text metrics information is provided by previously set params.
1070
- * Text is rendered from horizontal offset 0 from left to right.
1071
- * @param canvas A pre-translated canvas to draw text
1072
- * @param minHorizontalOffset Min visible horizontal offset in text
1073
- * @param maxHorizontalOffset Max visible horizontal offset in text
1074
- * @return packed integer and float. The first value represents if the row end is drawn; the second represents the final horizontal offset.
1075
- */
1076
- public long draw(@NonNull Canvas canvas, float minHorizontalOffset, float maxHorizontalOffset) {
1077
- var ctx = new IteratingContext();
1078
- ctx.minOffset = minHorizontalOffset;
1079
- ctx.maxOffset = maxHorizontalOffset;
1080
- class DrawHandler implements RunElementsConsumer {
1081
-
1082
- float horizontalOffset = 0;
1083
-
1084
- boolean isExhausted = true;
1085
-
1086
- @Override
1087
- public boolean accept(List<RowElement> e, boolean isRtl, ListPointers pointers) {
1088
- float runWidth = handleMultiElementRun(e, isRtl, pointers, canvas, horizontalOffset, ctx);
1089
- horizontalOffset += runWidth;
1090
- return isExhausted = horizontalOffset < maxHorizontalOffset;
1091
- }
1092
-
1093
- }
1094
- var handler = new DrawHandler();
1095
- iterateRuns(handler, true);
1096
- return IntPair.packIntFloat(handler.isExhausted ? 1 : 0, handler.horizontalOffset);
1097
- }
1098
-
1099
- /**
1100
- * Get the horizontal offset of cursor at the given index
1101
- */
1102
- public float getCursorOffsetForIndex(int index) {
1103
- var ctx = new IteratingContext();
1104
- ctx.targetCharOffset = index;
1105
- class CursorOffsetHandler implements RunElementsConsumer {
1106
-
1107
- float horizontalOffset = 0;
1108
-
1109
- @Override
1110
- public boolean accept(List<RowElement> e, boolean isRtl, ListPointers pointers) {
1111
- float runWidth = handleMultiElementRun(e, isRtl, pointers, null, horizontalOffset, ctx);
1112
- horizontalOffset += runWidth;
1113
- return ctx.maxOffset != 0f;
1114
- }
1115
-
1116
- }
1117
- var handler = new CursorOffsetHandler();
1118
- iterateRuns(handler, true);
1119
- return ctx.resultOffset;
1120
- }
1121
-
1122
- /**
1123
- * Get text index from the given cursor horizontal offset
1124
- */
1125
- public int getIndexForCursorOffset(float offset) {
1126
- var ctx = new IteratingContext();
1127
- ctx.targetHorizontalOffset = offset;
1128
- ctx.maxOffset = offset;
1129
- iterateRuns(new MaxOffsetIterationConsumer(ctx), true);
1130
- return ctx.resultCharOffset == -1 ? textStart : ctx.resultCharOffset;
1131
- }
1132
-
1133
- /**
1134
- * Iterate over background regions. Visually consequent regions are merged into a single region.
1135
- *
1136
- * @param start Start of target background segment
1137
- * @param end End of target background segment
1138
- * @param allowLeadingBackground Allow leading inline elements to be included
1139
- * @param allowTrailingBackground Allow trailing inline elements to be included
1140
- */
1141
- public void iterateBackgroundRegions(int start, int end, boolean allowLeadingBackground, boolean allowTrailingBackground, @NonNull BackgroundRegionConsumer handler) {
1142
- var ctx = new IteratingContext();
1143
- ctx.startCharOffset = start;
1144
- ctx.endCharOffset = end;
1145
- ctx.regionBuffer = new RegionBuffer(ctx, handler, allowLeadingBackground, allowTrailingBackground);
1146
- iterateRuns(new MaxOffsetIterationConsumer(ctx), true);
1147
- ctx.regionBuffer.commitCurrentIfPresent();
1148
- }
1149
-
1150
- /**
1151
- * Iterate over terminal drawTextRun calls
1152
- * @param start Start of target text segment
1153
- * @param end End of target text segment
1154
- * @param canvas A pre-translated canvas to clip
1155
- * @param minHorizontalOffset Min visible horizontal offset in text
1156
- * @param maxHorizontalOffset Max visible horizontal offset in text
1157
- * @param autoClip Clip region outside the desired text segment
1158
- */
1159
- public void iterateDrawTextRegions(int start, int end, Canvas canvas,
1160
- float minHorizontalOffset, float maxHorizontalOffset,
1161
- boolean autoClip, @NonNull DrawTextConsumer consumer) {
1162
- var ctx = new IteratingContext();
1163
- ctx.startCharOffset = start;
1164
- ctx.endCharOffset = end;
1165
- ctx.minOffset = minHorizontalOffset;
1166
- ctx.maxOffset = maxHorizontalOffset;
1167
- ctx.autoClip = autoClip;
1168
- ctx.drawTextConsumer = consumer;
1169
- iterateRuns(new MaxOffsetIterationConsumer(ctx, canvas), true);
1170
- }
1171
-
1172
- /**
1173
- * Compute row width
1174
- */
1175
- public float computeRowWidth() {
1176
- var ctx = new IteratingContext();
1177
- var handler = new MaxOffsetIterationConsumer(ctx);
1178
- iterateRuns(handler, true);
1179
- return handler.horizontalOffset;
1180
- }
1181
-
1182
- /**
1183
- * Measure text advance in unidirectional run
1184
- */
1185
- public float measureAdvanceInRun(int offset, int start, int end,
1186
- int contextStart, int contextEnd, boolean isRtl) {
1187
- return getRunAdvanceCacheable(offset, start, end, contextStart, contextEnd, isRtl);
1188
- }
1189
-
1190
- /**
1191
- * Build measure of logical line for currently-set text range. A logical line maybe split into
1192
- * multiple rows, so each time only one row is measured.
1193
- * {@link #buildMeasureCacheTailor(TextAdvancesCache)} should always be called for each line.
1194
- * @see #buildMeasureCacheTailor(TextAdvancesCache)
1195
- * @param cache size must be bigger than text end
1196
- */
1197
- public void buildMeasureCacheStep(@NonNull TextAdvancesCache cache) {
1198
- var ctx = new IteratingContext();
1199
- ctx.advances = cache;
1200
- iterateRuns(new MaxOffsetIterationConsumer(ctx), true);
1201
- }
1202
-
1203
- /**
1204
- * Finish the logical line measure cache building.
1205
- * @see #buildMeasureCacheStep(TextAdvancesCache)
1206
- * @param cache size must be bigger than text end
1207
- */
1208
- public void buildMeasureCacheTailor(@NonNull TextAdvancesCache cache) {
1209
- cache.finishBuilding();
1210
- }
1211
-
1212
- /**
1213
- * Iteration consumer that stops when the horizontal offset exceeds the desired max offset
1214
- */
1215
- private class MaxOffsetIterationConsumer implements RunElementsConsumer {
1216
-
1217
- float horizontalOffset = 0f;
1218
- IteratingContext ctx;
1219
- Canvas canvas;
1220
-
1221
- MaxOffsetIterationConsumer(IteratingContext ctx) {
1222
- this.ctx = ctx;
1223
- }
1224
-
1225
- MaxOffsetIterationConsumer(IteratingContext ctx, Canvas canvas) {
1226
- this(ctx);
1227
- this.canvas = canvas;
1228
- }
1229
-
1230
- @Override
1231
- public boolean accept(List<RowElement> e, boolean isRtl, ListPointers pointers) {
1232
- horizontalOffset += handleMultiElementRun(e, isRtl, pointers, canvas, horizontalOffset, ctx);
1233
- return horizontalOffset < ctx.maxOffset;
1234
- }
1235
-
1236
- }
1237
-
1238
- /**
1239
- * Result of {@link #breakText(int, boolean)}
1240
- */
1241
- public static class WordwrapRow {
1242
- boolean isEmpty = true;
1243
- /**
1244
- * Start column (inclusive)
1245
- */
1246
- public int startColumn;
1247
- /**
1248
- * End column (exclusive)
1249
- */
1250
- public int endColumn;
1251
- /**
1252
- * Inlay hints on the row, maybe null or empty
1253
- */
1254
- public List<InlayHint> inlayHints;
1255
- public float rowWidth;
1256
-
1257
- void setInitialRange(int start, int end) {
1258
- isEmpty = false;
1259
- startColumn = start;
1260
- endColumn = end;
1261
- }
1262
-
1263
- void setEndColumn(int column) {
1264
- if (isEmpty) {
1265
- throw new IllegalStateException();
1266
- }
1267
- this.endColumn = column;
1268
- }
1269
-
1270
- void addInlayHint(InlayHint inlayHint) {
1271
- if (isEmpty) {
1272
- throw new IllegalStateException();
1273
- }
1274
- if (inlayHints == null) {
1275
- inlayHints = new ArrayList<>();
1276
- }
1277
- inlayHints.add(inlayHint);
1278
- }
1279
- }
1280
-
1281
- static class ListPointers {
1282
-
1283
- int spanIndex;
1284
- int inlineElementIndex;
1285
-
1286
- public ListPointers(int spanIndex, int inlineElementIndex) {
1287
- this.spanIndex = spanIndex;
1288
- this.inlineElementIndex = inlineElementIndex;
1289
- }
1290
-
1291
- @NonNull
1292
- protected ListPointers copy() {
1293
- return new ListPointers(spanIndex, inlineElementIndex);
1294
- }
1295
- }
1296
-
1297
- private static class RegionBuffer {
1298
- private final static float EPS = 1e-6f;
1299
- boolean isEmpty = true;
1300
- float currentLeft;
1301
- float currentRight;
1302
- boolean hasPossibleInterval = false;
1303
- float intervalLeft;
1304
- float intervalRight;
1305
- IteratingContext ctx;
1306
- BackgroundRegionConsumer consumer;
1307
- boolean allowLeadingBackground;
1308
- boolean allowTrailingBackground;
1309
-
1310
- RegionBuffer(IteratingContext ctx, BackgroundRegionConsumer consumer, boolean allowLeadingBackground, boolean allowTrailingBackground) {
1311
- this.ctx = ctx;
1312
- this.consumer = consumer;
1313
- this.allowLeadingBackground = allowLeadingBackground;
1314
- this.allowTrailingBackground = allowTrailingBackground;
1315
- }
1316
-
1317
- void commitRegion(float regionLeft, float regionRight) {
1318
- if (isEmpty) {
1319
- if (hasPossibleInterval && Math.abs(regionLeft - intervalRight) <= EPS) {
1320
- currentLeft = intervalLeft;
1321
- } else {
1322
- currentLeft = regionLeft;
1323
- }
1324
- currentRight = regionRight;
1325
- isEmpty = false;
1326
- hasPossibleInterval = false;
1327
- return;
1328
- }
1329
- if (!hasPossibleInterval && Math.abs(regionLeft - currentRight) <= EPS) {
1330
- currentRight = regionRight;
1331
- return;
1332
- } else if (hasPossibleInterval && Math.abs(regionLeft - intervalRight) <= EPS) {
1333
- currentRight = regionRight;
1334
- hasPossibleInterval = false;
1335
- return;
1336
- }
1337
- commitCurrentIfPresent();
1338
- isEmpty = false;
1339
- currentLeft = regionLeft;
1340
- currentRight = regionRight;
1341
- }
1342
-
1343
- void commitPossibleInterval(float regionLeft, float regionRight) {
1344
- if (isEmpty && !allowLeadingBackground) {
1345
- return;
1346
- }
1347
- if (hasPossibleInterval) {
1348
- if (Math.abs(regionLeft - intervalRight) <= EPS) {
1349
- intervalRight = regionRight;
1350
- } else {
1351
- hasPossibleInterval = false;
1352
- }
1353
- } else if (Math.abs(regionLeft - currentRight) <= EPS) {
1354
- intervalLeft = regionLeft;
1355
- intervalRight = regionRight;
1356
- hasPossibleInterval = true;
1357
- }
1358
- }
1359
-
1360
- void commitCurrentIfPresent() {
1361
- if (isEmpty) {
1362
- return;
1363
- }
1364
- if (hasPossibleInterval && allowTrailingBackground) {
1365
- currentRight = intervalRight;
1366
- }
1367
- if (!consumer.handleRegion(currentLeft, currentRight)) {
1368
- ctx.maxOffset = 0f;
1369
- }
1370
- isEmpty = true;
1371
- hasPossibleInterval = false;
1372
- }
1373
- }
1374
-
1375
- interface RunElementsConsumer {
1376
-
1377
- boolean accept(List<RowElement> e, boolean isRtl, ListPointers pointers);
1378
-
1379
- }
1380
-
1381
- public interface BackgroundRegionConsumer {
1382
-
1383
- /**
1384
- * Handle a background region
1385
- *
1386
- * @return true to continue the iteration; false otherwise.
1387
- */
1388
- boolean handleRegion(float left, float right);
1389
-
1390
- }
1391
-
1392
- public interface DrawTextConsumer {
1393
-
1394
- /**
1395
- * @param span may be null, when tab encountered.
1396
- */
1397
- void drawText(Canvas canvas, char[] text, int index, int count, int contextIndex, int contextCount, boolean isRtl,
1398
- float horizontalOffset, float width, TextRowParams params, Span span);
1399
-
1400
- }
1401
- }
1402
-