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
@@ -11,6 +11,7 @@ import androidx.compose.foundation.layout.*
11
11
  import androidx.compose.foundation.shape.RoundedCornerShape
12
12
  import androidx.compose.material.icons.Icons
13
13
  import androidx.compose.material.icons.filled.*
14
+ import androidx.compose.material.icons.automirrored.filled.*
14
15
  import androidx.compose.material3.*
15
16
  import androidx.compose.runtime.*
16
17
  import androidx.compose.ui.Alignment
@@ -35,6 +36,10 @@ import io.github.abc15018045126.sora.widget.schemes.EditorColorScheme
35
36
  import io.github.abc15018045126.sora.widget.style.builtin.HandleStyleDrop
36
37
  import io.github.abc15018045126.sora.widget.style.builtin.HandleStyleSideDrop
37
38
  import io.github.abc15018045126.sora.widget.style.builtin.HandleStyleNone
39
+ import androidx.lifecycle.Lifecycle
40
+ import androidx.lifecycle.LifecycleEventObserver
41
+ import androidx.lifecycle.compose.LocalLifecycleOwner
42
+ import androidx.compose.ui.platform.LocalLifecycleOwner as ComposeLifecycleOwner
38
43
 
39
44
  class EditorControl {
40
45
  private var editor: CodeEditor? = null
@@ -46,7 +51,7 @@ class EditorControl {
46
51
  fun jumpTo(pos: Int) {
47
52
  if (editor == null) return
48
53
  editor?.let {
49
- if (androidx.core.view.ViewCompat.isLaidOut(it)) {
54
+ if (it.isLaidOut) {
50
55
  performJump(it, pos)
51
56
  } else {
52
57
  it.addOnLayoutChangeListener(object : View.OnLayoutChangeListener {
@@ -62,9 +67,10 @@ class EditorControl {
62
67
  fun getCurrentCursorPosition(): Int {
63
68
  val editor = this.editor ?: return 0
64
69
  try {
65
- val cursor = editor.cursor
70
+ val cursor = editor.cursor!!
66
71
  val targetLine = cursor.leftLine
67
72
  val targetCol = cursor.leftColumn
73
+
68
74
  val text = editor.text.toString()
69
75
 
70
76
  var idx = 0
@@ -117,7 +123,13 @@ class EditorControl {
117
123
  } else {
118
124
  io.github.abc15018045126.sora.widget.EditorSearcher.SearchOptions.TYPE_NORMAL
119
125
  }
120
- editor?.searcher?.search(text, io.github.abc15018045126.sora.widget.EditorSearcher.SearchOptions(type, !matchCase))
126
+ // 清理输入文本:移除换行符和其他控制字符
127
+ val cleanedText = text.replace("\\r", "").replace("\\n", "").trim()
128
+ if (cleanedText.isEmpty()) {
129
+ stopSearch()
130
+ return
131
+ }
132
+ editor?.searcher?.search(cleanedText, io.github.abc15018045126.sora.widget.EditorSearcher.SearchOptions(type, !matchCase))
121
133
  } catch (e: Exception) {
122
134
  e.printStackTrace()
123
135
  }
@@ -141,7 +153,7 @@ class EditorControl {
141
153
 
142
154
  fun replace(text: String) {
143
155
  try {
144
- editor?.searcher?.replaceThis(text)
156
+ editor?.searcher?.replaceCurrentMatch(text)
145
157
  } catch (e: Exception) {
146
158
  e.printStackTrace()
147
159
  }
@@ -210,17 +222,67 @@ fun SoraEditorView(
210
222
  fontFamily: String = "Monospace",
211
223
  scrollbarColor: String = "#A0888888",
212
224
  showScrollLineInfo: Boolean = true,
213
- scrollbarStyle: String = "default"
225
+ scrollbarStyle: String = "default",
226
+ isFastMode: Boolean = false,
227
+ initialPreviewLines: Int = 20,
228
+ lineNumberAlign: String = "left",
229
+ isLineNumberRightOfDivider: Boolean = false,
230
+ isLineNumberPinned: Boolean = false,
231
+ lineNumberColor: String = "#FF000000",
232
+ lineDividerColor: String = "#A0888888",
233
+ editorTextColor: String = "auto",
234
+ textActionMenuItems: List<String> = listOf("select_all", "copy", "paste", "long_select", "cut"),
235
+ textActionMenuHidden: List<String> = emptyList(),
236
+ textActionMenuBgColor: String = "auto"
214
237
  ) {
215
238
  var editorInstance by remember { mutableStateOf<CodeEditor?>(null) }
216
239
 
217
240
  // Flag to prevent update loop when setting text programmatically
218
241
  val isSettingTextProgrammatically = remember { mutableStateOf(false) }
219
-
242
+ var lastAppliedFontFamily by remember { mutableStateOf("") }
243
+ var lastAppliedHandleStyle by remember { mutableStateOf("") }
244
+ var lastAppliedTextActionMenuItems by remember { mutableStateOf<List<String>>(emptyList()) }
245
+ var lastAppliedTextActionMenuHidden by remember { mutableStateOf<List<String>>(emptyList()) }
246
+ var lastAppliedTextActionMenuBgColor by remember { mutableStateOf("") }
247
+ var lastAppliedTextSize by remember { mutableStateOf(-1f) }
248
+ var lastAppliedCursorWidth by remember { mutableStateOf(-1f) }
249
+ var lastAppliedLineNumbers by remember { mutableStateOf<Boolean?>(null) }
250
+ var lastAppliedWordWrap by remember { mutableStateOf<Boolean?>(null) }
251
+ var lastAppliedEditable by remember { mutableStateOf<Boolean?>(null) }
252
+ var lastAppliedHighlightCurrentLine by remember { mutableStateOf<Boolean?>(null) }
253
+ var lastAppliedShowScrollLineInfo by remember { mutableStateOf<Boolean?>(null) }
254
+ var lastAppliedFastMode by remember { mutableStateOf<Boolean?>(null) }
255
+ var lastAppliedInitialPreviewLines by remember { mutableStateOf<Int?>(null) }
256
+ var lastAppliedLineNumberAlign by remember { mutableStateOf("") }
257
+ var lastAppliedIsLineNumberRightOfDivider by remember { mutableStateOf<Boolean?>(null) }
258
+ var lastAppliedIsLineNumberPinned by remember { mutableStateOf<Boolean?>(null) }
259
+ var lastAppliedLineNumberColor by remember { mutableStateOf("") }
260
+ var lastAppliedLineDividerColor by remember { mutableStateOf("") }
261
+
220
262
  // Ensure we always have the latest callbacks even if factory is not re-run
221
263
  val currentOnTap by rememberUpdatedState(onTap)
222
264
  val currentOnContentChange by rememberUpdatedState(onContentChange)
223
265
  val currentOnSelectionChange by rememberUpdatedState(onSelectionChange)
266
+
267
+ // Use LifecycleEffect to sync text back to ViewModel when app is paused
268
+ // This fixed auto-save on exit while keeping ContentChangeEvent disabled (avoiding flicker)
269
+ val lifecycleOwner = LocalLifecycleOwner.current
270
+ var editorInstanceForSync by remember { mutableStateOf<CodeEditor?>(null) }
271
+
272
+ DisposableEffect(lifecycleOwner) {
273
+ val observer = LifecycleEventObserver { _, event ->
274
+ if (event == Lifecycle.Event.ON_PAUSE) {
275
+ editorInstanceForSync?.let { view ->
276
+ val currentText = view.text.toString()
277
+ currentOnContentChange(currentText)
278
+ }
279
+ }
280
+ }
281
+ lifecycleOwner.lifecycle.addObserver(observer)
282
+ onDispose {
283
+ lifecycleOwner.lifecycle.removeObserver(observer)
284
+ }
285
+ }
224
286
 
225
287
  LaunchedEffect(editorInstance, control) {
226
288
  editorInstance?.let { control?.attach(it) }
@@ -232,16 +294,17 @@ fun SoraEditorView(
232
294
  setTextSize(fontSize)
233
295
  isLineNumberEnabled = showLineNumbers
234
296
  isWordwrap = wordWrap
235
- setEditable(editable)
236
- setHighlightCurrentLine(highlightCurrentLine)
297
+ isEditable = editable
298
+ isHighlightCurrentLine = highlightCurrentLine
237
299
  setCursorWidth(cursorWidth * dpUnit / 2f)
238
300
  isDisplayLnPanel = showScrollLineInfo
301
+
239
302
 
240
303
  // Set font family
241
304
  when (fontFamily) {
242
- "JetBrains Mono" -> typefaceText = Typeface.createFromAsset(context.assets, "JetBrainsMono-Regular.ttf")
243
- "Ubuntu" -> typefaceText = Typeface.createFromAsset(context.assets, "Ubuntu-Regular.ttf")
244
- "Roboto" -> typefaceText = Typeface.createFromAsset(context.assets, "Roboto-Regular.ttf")
305
+ "JetBrains Mono" -> setTypefaceText(Typeface.createFromAsset(context.assets, "JetBrainsMono-Regular.ttf"))
306
+ "Ubuntu" -> setTypefaceText(Typeface.createFromAsset(context.assets, "Ubuntu-Regular.ttf"))
307
+ "Roboto" -> setTypefaceText(Typeface.createFromAsset(context.assets, "Roboto-Regular.ttf"))
245
308
  else -> setTypefaceText(Typeface.MONOSPACE)
246
309
  }
247
310
 
@@ -262,7 +325,7 @@ fun SoraEditorView(
262
325
  }
263
326
 
264
327
  subscribeEvent(io.github.abc15018045126.sora.event.SelectionChangeEvent::class.java) { _, _ ->
265
- val cursor = this.cursor
328
+ val cursor = this.cursor!!
266
329
  val line = cursor.leftLine
267
330
  val col = cursor.leftColumn
268
331
 
@@ -311,8 +374,8 @@ fun SoraEditorView(
311
374
  setLineSpacing(lineSpacingExtra, lineSpacingMultiplier)
312
375
  setWrapLineSpacing(wrapLineSpacingExtra, wrapLineSpacingMultiplier)
313
376
  val dp = dpUnit
314
- setDividerMargin(0f, horizontalPadding * dp)
315
- setExtraMarginRight(horizontalPadding * dp)
377
+ dividerMarginRight = horizontalPadding * dp
378
+ extraMarginRight = horizontalPadding * dp
316
379
  setLineNumberMarginLeft(horizontalPadding * dp)
317
380
 
318
381
  try {
@@ -322,43 +385,49 @@ fun SoraEditorView(
322
385
  val b = android.graphics.Color.blue(color)
323
386
  val luminance = (0.299 * r + 0.587 * g + 0.114 * b) / 255.0
324
387
 
325
- colorScheme.setColor(EditorColorScheme.WHOLE_BACKGROUND, color)
326
- colorScheme.setColor(EditorColorScheme.LINE_NUMBER_BACKGROUND, color)
388
+ colorScheme?.setColor(EditorColorScheme.WHOLE_BACKGROUND, color)
389
+ colorScheme?.setColor(EditorColorScheme.LINE_NUMBER_BACKGROUND, color)
327
390
 
328
391
  if (luminance < 0.5) {
329
- colorScheme.setColor(EditorColorScheme.TEXT_NORMAL, android.graphics.Color.WHITE)
330
- colorScheme.setColor(EditorColorScheme.LINE_NUMBER, android.graphics.Color.GRAY)
392
+ colorScheme?.setColor(EditorColorScheme.TEXT_NORMAL, android.graphics.Color.WHITE)
393
+ colorScheme?.setColor(EditorColorScheme.LINE_NUMBER, android.graphics.Color.GRAY)
331
394
  } else {
332
- colorScheme.setColor(EditorColorScheme.TEXT_NORMAL, android.graphics.Color.BLACK)
333
- colorScheme.setColor(EditorColorScheme.LINE_NUMBER, android.graphics.Color.DKGRAY)
395
+ colorScheme?.setColor(EditorColorScheme.TEXT_NORMAL, android.graphics.Color.BLACK)
396
+ colorScheme?.setColor(EditorColorScheme.LINE_NUMBER, android.graphics.Color.DKGRAY)
397
+ }
398
+
399
+ if (editorTextColor != "auto" && editorTextColor.isNotEmpty()) {
400
+ try {
401
+ colorScheme?.setColor(EditorColorScheme.TEXT_NORMAL, android.graphics.Color.parseColor(editorTextColor))
402
+ } catch (e: Exception) {}
334
403
  }
335
404
 
336
405
  try {
337
406
  val searchMatchColor = android.graphics.Color.parseColor(searchMatchBackgroundColor)
338
- colorScheme.setColor(EditorColorScheme.MATCHED_TEXT_BACKGROUND, searchMatchColor)
407
+ colorScheme?.setColor(EditorColorScheme.MATCHED_TEXT_BACKGROUND, searchMatchColor)
339
408
  } catch (e: Exception) {
340
- colorScheme.setColor(EditorColorScheme.MATCHED_TEXT_BACKGROUND, 0xffffff00.toInt())
409
+ colorScheme?.setColor(EditorColorScheme.MATCHED_TEXT_BACKGROUND, 0xffffff00.toInt())
341
410
  }
342
411
 
343
412
  try {
344
413
  val currentLineColor = android.graphics.Color.parseColor(currentLineBackgroundColor)
345
- colorScheme.setColor(EditorColorScheme.CURRENT_LINE, currentLineColor)
414
+ colorScheme?.setColor(EditorColorScheme.CURRENT_LINE, currentLineColor)
346
415
  } catch (e: Exception) {
347
- colorScheme.setColor(EditorColorScheme.CURRENT_LINE, 0x10000000)
416
+ colorScheme?.setColor(EditorColorScheme.CURRENT_LINE, 0x10000000)
348
417
  }
349
418
 
350
419
  try {
351
420
  val cColor = android.graphics.Color.parseColor(cursorColor)
352
- colorScheme.setColor(EditorColorScheme.SELECTION_INSERT, cColor)
421
+ colorScheme?.setColor(EditorColorScheme.SELECTION_INSERT, cColor)
353
422
  } catch (e: Exception) {
354
- colorScheme.setColor(EditorColorScheme.SELECTION_INSERT, 0xFF000000.toInt())
423
+ colorScheme?.setColor(EditorColorScheme.SELECTION_INSERT, 0xFF000000.toInt())
355
424
  }
356
425
 
357
426
  try {
358
427
  val hColor = android.graphics.Color.parseColor(handleColor)
359
- colorScheme.setColor(EditorColorScheme.SELECTION_HANDLE, hColor)
428
+ colorScheme?.setColor(EditorColorScheme.SELECTION_HANDLE, hColor)
360
429
  } catch (e: Exception) {
361
- colorScheme.setColor(EditorColorScheme.SELECTION_HANDLE, 0xFF000000.toInt())
430
+ colorScheme?.setColor(EditorColorScheme.SELECTION_HANDLE, 0xFF000000.toInt())
362
431
  }
363
432
 
364
433
  setSelectionHandleStyle(when (handleStyle) {
@@ -369,11 +438,11 @@ fun SoraEditorView(
369
438
 
370
439
  try {
371
440
  val sColor = android.graphics.Color.parseColor(scrollbarColor)
372
- colorScheme.setColor(EditorColorScheme.SCROLL_BAR_THUMB, sColor)
373
- colorScheme.setColor(EditorColorScheme.SCROLL_BAR_THUMB_PRESSED, sColor)
441
+ colorScheme?.setColor(EditorColorScheme.SCROLL_BAR_THUMB, sColor)
442
+ colorScheme?.setColor(EditorColorScheme.SCROLL_BAR_THUMB_PRESSED, sColor)
374
443
  } catch (e: Exception) {
375
- colorScheme.setColor(EditorColorScheme.SCROLL_BAR_THUMB, 0xFFA0888888.toInt())
376
- colorScheme.setColor(EditorColorScheme.SCROLL_BAR_THUMB_PRESSED, 0xFFA0888888.toInt())
444
+ colorScheme?.setColor(EditorColorScheme.SCROLL_BAR_THUMB, 0xFFA0888888.toInt())
445
+ colorScheme?.setColor(EditorColorScheme.SCROLL_BAR_THUMB_PRESSED, 0xFFA0888888.toInt())
377
446
  }
378
447
 
379
448
  if (scrollbarStyle == "rounded") {
@@ -383,51 +452,135 @@ fun SoraEditorView(
383
452
  cornerRadius = 100f // Large radius for fully rounded ends
384
453
  setColor(sColor)
385
454
  }
386
- renderer.setVerticalScrollbarThumbDrawable(drawable)
387
- renderer.setHorizontalScrollbarThumbDrawable(drawable)
455
+ renderer?.setVerticalScrollbarThumbDrawable(drawable)
456
+ renderer?.setHorizontalScrollbarThumbDrawable(drawable)
388
457
  } else {
389
- renderer.setVerticalScrollbarThumbDrawable(null)
390
- renderer.setHorizontalScrollbarThumbDrawable(null)
458
+ renderer?.setVerticalScrollbarThumbDrawable(null)
459
+ renderer?.setHorizontalScrollbarThumbDrawable(null)
391
460
  }
461
+ isCursorAnimationEnabled = !isFastMode
462
+ setInitialPreviewLines(initialPreviewLines)
463
+ setLineNumberPaintAlign(if (lineNumberAlign == "right") android.graphics.Paint.Align.RIGHT else if (lineNumberAlign == "center") android.graphics.Paint.Align.CENTER else android.graphics.Paint.Align.LEFT)
464
+ setLineNumberRightOfDivider(isLineNumberRightOfDivider)
465
+ setPinLineNumber(isLineNumberPinned)
466
+ colorScheme.setColor(EditorColorScheme.LINE_NUMBER, android.graphics.Color.parseColor(lineNumberColor))
467
+ colorScheme.setColor(EditorColorScheme.LINE_DIVIDER, android.graphics.Color.parseColor(lineDividerColor))
392
468
  } catch (e: Exception) {}
393
469
 
394
470
  editorInstance = this
471
+ editorInstanceForSync = this
395
472
  control?.attach(this)
396
473
 
397
474
  // Auto-focus if requested (for new notes)
398
475
  if (autoFocus) {
399
476
  postDelayed({
400
477
  requestFocus()
401
- // Show keyboard with SHOW_FORCED to ensure it appears
478
+ // Show keyboard using input method manager
402
479
  val imm = context.getSystemService(android.content.Context.INPUT_METHOD_SERVICE) as? android.view.inputmethod.InputMethodManager
403
- imm?.showSoftInput(this, android.view.inputmethod.InputMethodManager.SHOW_FORCED)
480
+ imm?.showSoftInput(this, android.view.inputmethod.InputMethodManager.SHOW_IMPLICIT)
404
481
  }, 200) // Delay to ensure view is fully laid out
405
482
  }
406
483
  }
407
484
  },
408
485
  update = { view ->
409
- view.setTextSize(fontSize)
410
- view.isLineNumberEnabled = showLineNumbers
411
- // Only update wordwrap if it actually changed to avoid layout recalculation flicker
412
- if (view.isWordwrap != wordWrap) {
486
+ if (lastAppliedTextSize != fontSize) {
487
+ view.setTextSize(fontSize)
488
+ lastAppliedTextSize = fontSize
489
+ }
490
+ if (lastAppliedLineNumbers != showLineNumbers) {
491
+ view.isLineNumberEnabled = showLineNumbers
492
+ lastAppliedLineNumbers = showLineNumbers
493
+ }
494
+ if (lastAppliedWordWrap != wordWrap) {
413
495
  view.isWordwrap = wordWrap
496
+ lastAppliedWordWrap = wordWrap
497
+ }
498
+ if (lastAppliedEditable != editable) {
499
+ view.isEditable = editable
500
+ lastAppliedEditable = editable
501
+ }
502
+ if (lastAppliedHighlightCurrentLine != highlightCurrentLine) {
503
+ view.isHighlightCurrentLine = highlightCurrentLine
504
+ lastAppliedHighlightCurrentLine = highlightCurrentLine
505
+ }
506
+ val targetCursorWidth = cursorWidth * view.dpUnit / 2f
507
+ if (lastAppliedCursorWidth != targetCursorWidth) {
508
+ view.setCursorWidth(targetCursorWidth)
509
+ lastAppliedCursorWidth = targetCursorWidth
510
+ }
511
+ if (lastAppliedShowScrollLineInfo != showScrollLineInfo) {
512
+ view.isDisplayLnPanel = showScrollLineInfo
513
+ lastAppliedShowScrollLineInfo = showScrollLineInfo
514
+ }
515
+ if (lastAppliedFastMode != isFastMode) {
516
+ view.isCursorAnimationEnabled = !isFastMode
517
+ lastAppliedFastMode = isFastMode
518
+ }
519
+ if (lastAppliedInitialPreviewLines != initialPreviewLines) {
520
+ view.setInitialPreviewLines(initialPreviewLines)
521
+ lastAppliedInitialPreviewLines = initialPreviewLines
522
+ }
523
+ if (lastAppliedLineNumberAlign != lineNumberAlign) {
524
+ view.setLineNumberPaintAlign(if (lineNumberAlign == "right") android.graphics.Paint.Align.RIGHT else if (lineNumberAlign == "center") android.graphics.Paint.Align.CENTER else android.graphics.Paint.Align.LEFT)
525
+ lastAppliedLineNumberAlign = lineNumberAlign
526
+ }
527
+ if (lastAppliedIsLineNumberRightOfDivider != isLineNumberRightOfDivider) {
528
+ view.setLineNumberRightOfDivider(isLineNumberRightOfDivider)
529
+ lastAppliedIsLineNumberRightOfDivider = isLineNumberRightOfDivider
530
+ }
531
+ if (lastAppliedIsLineNumberPinned != isLineNumberPinned) {
532
+ view.setPinLineNumber(isLineNumberPinned)
533
+ lastAppliedIsLineNumberPinned = isLineNumberPinned
534
+ }
535
+ if (lastAppliedLineNumberColor != lineNumberColor) {
536
+ try { view.colorScheme.setColor(EditorColorScheme.LINE_NUMBER, android.graphics.Color.parseColor(lineNumberColor)) } catch(e: Exception) {}
537
+ lastAppliedLineNumberColor = lineNumberColor
538
+ }
539
+ if (lastAppliedLineDividerColor != lineDividerColor) {
540
+ try { view.colorScheme.setColor(EditorColorScheme.LINE_DIVIDER, android.graphics.Color.parseColor(lineDividerColor)) } catch(e: Exception) {}
541
+ lastAppliedLineDividerColor = lineDividerColor
542
+ }
543
+
544
+ try {
545
+ if (editorTextColor != "auto" && editorTextColor.isNotEmpty()) {
546
+ view.colorScheme.setColor(EditorColorScheme.TEXT_NORMAL, android.graphics.Color.parseColor(editorTextColor))
547
+ }
548
+ } catch (e: Exception) {}
549
+
550
+ if (lastAppliedTextActionMenuItems != textActionMenuItems) {
551
+ view.textActionMenuOrder = textActionMenuItems
552
+ lastAppliedTextActionMenuItems = textActionMenuItems
553
+ }
554
+ if (lastAppliedTextActionMenuHidden != textActionMenuHidden) {
555
+ view.textActionMenuHidden = textActionMenuHidden
556
+ lastAppliedTextActionMenuHidden = textActionMenuHidden
557
+ }
558
+ if (lastAppliedTextActionMenuBgColor != textActionMenuBgColor) {
559
+ if (textActionMenuBgColor != "auto") {
560
+ try {
561
+ view.colorScheme.setColor(EditorColorScheme.TEXT_ACTION_WINDOW_BACKGROUND, android.graphics.Color.parseColor(textActionMenuBgColor))
562
+ } catch (e: Exception) {}
563
+ }
564
+ lastAppliedTextActionMenuBgColor = textActionMenuBgColor
414
565
  }
415
- view.setEditable(editable)
416
- view.setHighlightCurrentLine(highlightCurrentLine)
417
- view.setCursorWidth(cursorWidth * view.dpUnit / 2f)
418
- view.isDisplayLnPanel = showScrollLineInfo
419
566
 
420
567
  // Update font family
421
- when (fontFamily) {
422
- "JetBrains Mono" -> view.typefaceText = Typeface.createFromAsset(view.context.assets, "JetBrainsMono-Regular.ttf")
423
- "Ubuntu" -> view.typefaceText = Typeface.createFromAsset(view.context.assets, "Ubuntu-Regular.ttf")
424
- "Roboto" -> view.typefaceText = Typeface.createFromAsset(view.context.assets, "Roboto-Regular.ttf")
425
- else -> view.setTypefaceText(Typeface.MONOSPACE)
568
+ if (lastAppliedFontFamily != fontFamily) {
569
+ val assets = view.context.assets
570
+ when (fontFamily) {
571
+ "JetBrains Mono" -> view.setTypefaceText(Typeface.createFromAsset(assets, "JetBrainsMono-Regular.ttf"))
572
+ "Ubuntu" -> view.setTypefaceText(Typeface.createFromAsset(assets, "Ubuntu-Regular.ttf"))
573
+ "Roboto" -> view.setTypefaceText(Typeface.createFromAsset(assets, "Roboto-Regular.ttf"))
574
+ else -> view.setTypefaceText(Typeface.MONOSPACE)
575
+ }
576
+ lastAppliedFontFamily = fontFamily
426
577
  }
427
578
 
428
579
  // Only update text if it strictly differs.
429
580
  if (view.text.toString() != content) {
581
+ isSettingTextProgrammatically.value = true
430
582
  view.setText(content)
583
+ isSettingTextProgrammatically.value = false
431
584
  }
432
585
 
433
586
  // REMOVED: These methods trigger expensive layout recalculation on every update
@@ -440,61 +593,69 @@ fun SoraEditorView(
440
593
 
441
594
  try {
442
595
  val sColor = android.graphics.Color.parseColor(scrollbarColor)
443
- view.colorScheme.setColor(EditorColorScheme.SCROLL_BAR_THUMB, sColor)
444
- view.colorScheme.setColor(EditorColorScheme.SCROLL_BAR_THUMB_PRESSED, sColor)
596
+ if (view.colorScheme.getColor(EditorColorScheme.SCROLL_BAR_THUMB) != sColor) {
597
+ view.colorScheme?.setColor(EditorColorScheme.SCROLL_BAR_THUMB, sColor)
598
+ view.colorScheme?.setColor(EditorColorScheme.SCROLL_BAR_THUMB_PRESSED, sColor)
599
+ }
445
600
  } catch (e: Exception) {}
446
601
 
447
602
  try {
448
603
  val color = android.graphics.Color.parseColor(backgroundColor)
449
- val r = android.graphics.Color.red(color)
450
- val g = android.graphics.Color.green(color)
451
- val b = android.graphics.Color.blue(color)
452
- val luminance = (0.299 * r + 0.587 * g + 0.114 * b) / 255.0
453
-
454
- view.colorScheme.setColor(EditorColorScheme.WHOLE_BACKGROUND, color)
455
- view.colorScheme.setColor(EditorColorScheme.LINE_NUMBER_BACKGROUND, color)
456
-
457
- if (luminance < 0.5) {
458
- view.colorScheme.setColor(EditorColorScheme.TEXT_NORMAL, android.graphics.Color.WHITE)
459
- view.colorScheme.setColor(EditorColorScheme.LINE_NUMBER, android.graphics.Color.GRAY)
460
- } else {
461
- view.colorScheme.setColor(EditorColorScheme.TEXT_NORMAL, android.graphics.Color.BLACK)
462
- view.colorScheme.setColor(EditorColorScheme.LINE_NUMBER, android.graphics.Color.DKGRAY)
604
+ if (view.colorScheme?.getColor(EditorColorScheme.WHOLE_BACKGROUND) != color) {
605
+ val r = android.graphics.Color.red(color)
606
+ val g = android.graphics.Color.green(color)
607
+ val b = android.graphics.Color.blue(color)
608
+ val luminance = (0.299 * r + 0.587 * g + 0.114 * b) / 255.0
609
+
610
+ view.colorScheme?.setColor(EditorColorScheme.WHOLE_BACKGROUND, color)
611
+ view.colorScheme?.setColor(EditorColorScheme.LINE_NUMBER_BACKGROUND, color)
612
+
613
+ if (luminance < 0.5) {
614
+ view.colorScheme?.setColor(EditorColorScheme.TEXT_NORMAL, android.graphics.Color.WHITE)
615
+ view.colorScheme?.setColor(EditorColorScheme.LINE_NUMBER, android.graphics.Color.GRAY)
616
+ } else {
617
+ view.colorScheme?.setColor(EditorColorScheme.TEXT_NORMAL, android.graphics.Color.BLACK)
618
+ view.colorScheme?.setColor(EditorColorScheme.LINE_NUMBER, android.graphics.Color.DKGRAY)
619
+ }
463
620
  }
464
621
 
465
- try {
466
- val searchMatchColor = android.graphics.Color.parseColor(searchMatchBackgroundColor)
467
- view.colorScheme.setColor(EditorColorScheme.MATCHED_TEXT_BACKGROUND, searchMatchColor)
468
- } catch (e: Exception) {
469
- view.colorScheme.setColor(EditorColorScheme.MATCHED_TEXT_BACKGROUND, 0xffffff00.toInt())
622
+ val searchMatchColor = try { android.graphics.Color.parseColor(searchMatchBackgroundColor) } catch (e: Exception) { 0xffffff00.toInt() }
623
+ if (view.colorScheme?.getColor(EditorColorScheme.MATCHED_TEXT_BACKGROUND) != searchMatchColor) {
624
+ view.colorScheme?.setColor(EditorColorScheme.MATCHED_TEXT_BACKGROUND, searchMatchColor)
470
625
  }
471
626
 
472
- try {
473
- val currentLineColor = android.graphics.Color.parseColor(currentLineBackgroundColor)
474
- view.colorScheme.setColor(EditorColorScheme.CURRENT_LINE, currentLineColor)
475
- } catch (e: Exception) {
476
- view.colorScheme.setColor(EditorColorScheme.CURRENT_LINE, 0x10000000)
627
+ val currentLineColor = try { android.graphics.Color.parseColor(currentLineBackgroundColor) } catch (e: Exception) { 0x10000000 }
628
+ if (view.colorScheme?.getColor(EditorColorScheme.CURRENT_LINE) != currentLineColor) {
629
+ view.colorScheme?.setColor(EditorColorScheme.CURRENT_LINE, currentLineColor)
630
+ }
631
+
632
+ // Re-apply text color if needed after background update (as background update might reset scheme parts or we want to ensure precedence)
633
+ // Actually the background update block above re-runs the luminance logic which might reset TEXT_NORMAL.
634
+ // So we need to re-apply editorTextColor if it's not auto.
635
+ if (editorTextColor != "auto" && editorTextColor.isNotEmpty()) {
636
+ try {
637
+ view.colorScheme?.setColor(EditorColorScheme.TEXT_NORMAL, android.graphics.Color.parseColor(editorTextColor))
638
+ } catch (e: Exception) {}
477
639
  }
478
640
 
479
- try {
480
- val cColor = android.graphics.Color.parseColor(cursorColor)
481
- view.colorScheme.setColor(EditorColorScheme.SELECTION_INSERT, cColor)
482
- } catch (e: Exception) {
483
- view.colorScheme.setColor(EditorColorScheme.SELECTION_INSERT, 0xFF000000.toInt())
641
+ val cColor = try { android.graphics.Color.parseColor(cursorColor) } catch (e: Exception) { 0xFF000000.toInt() }
642
+ if (view.colorScheme?.getColor(EditorColorScheme.SELECTION_INSERT) != cColor) {
643
+ view.colorScheme?.setColor(EditorColorScheme.SELECTION_INSERT, cColor)
484
644
  }
485
645
 
486
- try {
487
- val hColor = android.graphics.Color.parseColor(handleColor)
488
- view.colorScheme.setColor(EditorColorScheme.SELECTION_HANDLE, hColor)
489
- } catch (e: Exception) {
490
- view.colorScheme.setColor(EditorColorScheme.SELECTION_HANDLE, 0xFF000000.toInt())
646
+ val hColor = try { android.graphics.Color.parseColor(handleColor) } catch (e: Exception) { 0xFF000000.toInt() }
647
+ if (view.colorScheme?.getColor(EditorColorScheme.SELECTION_HANDLE) != hColor) {
648
+ view.colorScheme?.setColor(EditorColorScheme.SELECTION_HANDLE, hColor)
491
649
  }
492
650
 
493
- view.setSelectionHandleStyle(when (handleStyle) {
494
- "drop" -> HandleStyleDrop(view.context)
495
- "none" -> HandleStyleNone()
496
- else -> HandleStyleSideDrop(view.context)
497
- })
651
+ if (lastAppliedHandleStyle != handleStyle) {
652
+ view.setSelectionHandleStyle(when (handleStyle) {
653
+ "drop" -> HandleStyleDrop(view.context)
654
+ "none" -> HandleStyleNone()
655
+ else -> HandleStyleSideDrop(view.context)
656
+ })
657
+ lastAppliedHandleStyle = handleStyle
658
+ }
498
659
 
499
660
  if (scrollbarStyle == "rounded") {
500
661
  val sColor = try { android.graphics.Color.parseColor(scrollbarColor) } catch(e: Exception) { 0xFFA0888888.toInt() }
@@ -503,11 +664,11 @@ fun SoraEditorView(
503
664
  cornerRadius = 100f
504
665
  setColor(sColor)
505
666
  }
506
- view.renderer.setVerticalScrollbarThumbDrawable(drawable)
507
- view.renderer.setHorizontalScrollbarThumbDrawable(drawable)
667
+ view.renderer?.setVerticalScrollbarThumbDrawable(drawable)
668
+ view.renderer?.setHorizontalScrollbarThumbDrawable(drawable)
508
669
  } else {
509
- view.renderer.setVerticalScrollbarThumbDrawable(null)
510
- view.renderer.setHorizontalScrollbarThumbDrawable(null)
670
+ view.renderer?.setVerticalScrollbarThumbDrawable(null)
671
+ view.renderer?.setHorizontalScrollbarThumbDrawable(null)
511
672
  }
512
673
  } catch (e: Exception) {}
513
674
  },
@@ -586,10 +747,10 @@ fun EditorScreen(
586
747
  Icon(Icons.Default.Save, "保存")
587
748
  }
588
749
  IconButton(onClick = { editorControl.undo() }, enabled = editorControl.canUndo()) {
589
- Icon(Icons.Default.Undo, "撤销")
750
+ Icon(Icons.AutoMirrored.Filled.Undo, "撤销")
590
751
  }
591
752
  IconButton(onClick = { editorControl.redo() }, enabled = editorControl.canRedo()) {
592
- Icon(Icons.Default.Redo, "反撤销")
753
+ Icon(Icons.AutoMirrored.Filled.Redo, "反撤销")
593
754
  }
594
755
  IconButton(onClick = { showMoreMenu = true }) {
595
756
  Icon(Icons.Default.MoreVert, "More")
@@ -603,7 +764,7 @@ fun EditorScreen(
603
764
  DropdownMenuItem(
604
765
  text = { Text("返回") },
605
766
  onClick = { showMoreMenu = false; handleBack() },
606
- leadingIcon = { Icon(Icons.Default.ArrowBack, null) }
767
+ leadingIcon = { Icon(Icons.AutoMirrored.Filled.ArrowBack, null) }
607
768
  )
608
769
  DropdownMenuItem(
609
770
  text = { Text("搜索") },
@@ -699,6 +860,7 @@ fun EditorScreen(
699
860
  fontSize = uiState.fontSize,
700
861
  showLineNumbers = uiState.showLineNumbers,
701
862
  wordWrap = uiState.wordWrap,
863
+ isLineNumberPinned = uiState.isLineNumberPinned,
702
864
  editable = !uiState.isReadOnly,
703
865
  backgroundColor = uiState.backgroundColor,
704
866
  searchMatchBackgroundColor = uiState.searchMatchBackgroundColor,
@@ -721,7 +883,17 @@ fun EditorScreen(
721
883
  fontFamily = uiState.fontFamily,
722
884
  scrollbarColor = uiState.scrollbarColor,
723
885
  showScrollLineInfo = uiState.showScrollLineInfo,
724
- scrollbarStyle = uiState.scrollbarStyle
886
+ scrollbarStyle = uiState.scrollbarStyle,
887
+ isFastMode = uiState.isFastMode,
888
+ initialPreviewLines = uiState.initialPreviewLines,
889
+ lineNumberAlign = uiState.lineNumberAlign,
890
+ isLineNumberRightOfDivider = uiState.isLineNumberRightOfDivider,
891
+ lineNumberColor = uiState.lineNumberColor,
892
+ lineDividerColor = uiState.lineDividerColor,
893
+ editorTextColor = uiState.editorTextColor,
894
+ textActionMenuItems = uiState.textActionMenuItems,
895
+ textActionMenuHidden = uiState.textActionMenuHidden,
896
+ textActionMenuBgColor = uiState.textActionMenuBgColor
725
897
  )
726
898
  }
727
899
 
@@ -1069,7 +1241,7 @@ fun EditorSettingsScreen(
1069
1241
  topBar = {
1070
1242
  TopAppBar(
1071
1243
  title = { Text("编辑器设置") },
1072
- navigationIcon = { IconButton(onClick = onBack) { Icon(Icons.Default.ArrowBack, null) } }
1244
+ navigationIcon = { IconButton(onClick = onBack) { Icon(Icons.AutoMirrored.Filled.ArrowBack, null) } }
1073
1245
  )
1074
1246
  }
1075
1247
  ) { padding ->
@@ -1115,9 +1287,36 @@ fun EditorSettingsScreen(
1115
1287
  }
1116
1288
 
1117
1289
  SettingsSwitchItem("显示行号", "在左侧显示行号", uiState.showLineNumbers) { viewModel.toggleLineNumbers(localContext) }
1290
+ SettingsSwitchItem("固定行号", "行号固定不随行移动 (Sticky)", uiState.isLineNumberPinned) { viewModel.toggleLineNumberPinned(localContext) }
1118
1291
  SettingsSwitchItem("自动换行", "自动折行显示", uiState.wordWrap) { viewModel.toggleWordWrap(localContext) }
1119
1292
  SettingsSwitchItem("高亮当前行", "突出显示光标所在的行", uiState.highlightCurrentLine) { viewModel.setHighlightCurrentLine(localContext, it) }
1293
+ SettingsSwitchItem("行号位于竖线右侧", "将行号显示在分隔线右侧(靠近代码)", uiState.isLineNumberRightOfDivider) { viewModel.setLineNumberRightOfDivider(localContext, it) }
1294
+
1295
+ Column(verticalArrangement = Arrangement.spacedBy(8.dp)) {
1296
+ Text("行号文本对齐", fontSize = 12.sp, color = Color.Gray)
1297
+ Row(horizontalArrangement = Arrangement.spacedBy(8.dp)) {
1298
+ mapOf("left" to "左对齐", "center" to "居中", "right" to "右对齐").forEach { (id, label) ->
1299
+ Button(
1300
+ onClick = { viewModel.setLineNumberAlign(localContext, id) },
1301
+ colors = ButtonDefaults.buttonColors(containerColor = if (uiState.lineNumberAlign == id) MaterialTheme.colorScheme.primary else Color.LightGray)
1302
+ ) {
1303
+ Text(label, fontSize = 10.sp)
1304
+ }
1305
+ }
1306
+ }
1307
+ }
1308
+
1120
1309
  SettingsSwitchItem("自动保存", "编辑时自动保存", uiState.autoSave) { viewModel.setAutoSave(localContext, it) }
1310
+ SettingsSwitchItem("极速模式", "禁用动画(如光标移动)以获得更快的响应", uiState.isFastMode) { viewModel.setFastMode(localContext, it) }
1311
+ Row(verticalAlignment = Alignment.CenterVertically) {
1312
+ Text("初始加载行数 (同步): ${uiState.initialPreviewLines}", modifier = Modifier.weight(1f))
1313
+ Text("越多加载越慢", color = Color.Red, fontSize = 10.sp)
1314
+ }
1315
+ Slider(
1316
+ value = uiState.initialPreviewLines.toFloat(),
1317
+ onValueChange = { viewModel.setInitialPreviewLines(localContext, it.toInt()) },
1318
+ valueRange = 0f..200f,
1319
+ )
1121
1320
 
1122
1321
  Column(verticalArrangement = Arrangement.spacedBy(8.dp)) {
1123
1322
  Text("字体样式", style = MaterialTheme.typography.titleMedium)
@@ -1151,131 +1350,8 @@ fun EditorSettingsScreen(
1151
1350
  SettingsSwitchItem("区分大小写", "默认区分大小写", uiState.searchMatchCase) { viewModel.setSearchMatchCase(localContext, it) }
1152
1351
  }
1153
1352
 
1154
- Column(verticalArrangement = Arrangement.spacedBy(16.dp)) {
1155
- Text("主题颜色自定义 (也可在下面 JSON 自由配置)", style = MaterialTheme.typography.titleMedium)
1156
- val colors = listOf("#FFFFFF" to "白", "#F5F5F5" to "灰", "#E0E0E0" to "深灰", "#FFF8DC" to "米", "#E8F5E9" to "绿", "#E3F2FD" to "蓝", "#000000" to "黑")
1157
-
1158
- Column {
1159
- Text("编辑器背景 (Editor)", fontSize = 12.sp, color = Color.Gray)
1160
- FlowRow(horizontalArrangement = Arrangement.spacedBy(8.dp)) {
1161
- colors.forEach { (c, l) ->
1162
- ColorOption(c, l, uiState.backgroundColor == c) { viewModel.setBackgroundColor(localContext, c) }
1163
- }
1164
- }
1165
- }
1166
-
1167
- Column {
1168
- Row(verticalAlignment = Alignment.CenterVertically) {
1169
- Text("应用 UI 颜色 (Toolbar/Bottom)", fontSize = 12.sp, color = Color.Gray, modifier = Modifier.weight(1f))
1170
- TextButton(onClick = {
1171
- viewModel.setTocColor(localContext, uiState.uiColor)
1172
- viewModel.setSearchColor(localContext, uiState.uiColor)
1173
- viewModel.setMenuColor(localContext, uiState.uiColor)
1174
- }) {
1175
- Text("同步到所有面板", fontSize = 10.sp)
1176
- }
1177
- }
1178
- FlowRow(horizontalArrangement = Arrangement.spacedBy(8.dp)) {
1179
- colors.forEach { (c, l) ->
1180
- ColorOption(c, l, uiState.uiColor == c) { viewModel.setUiColor(localContext, c) }
1181
- }
1182
- }
1183
- }
1184
-
1185
- Column {
1186
- Text("更多菜单颜色 (More Menu)", fontSize = 12.sp, color = Color.Gray)
1187
- FlowRow(horizontalArrangement = Arrangement.spacedBy(8.dp)) {
1188
- colors.forEach { (c, l) ->
1189
- ColorOption(c, l, uiState.menuColor == c) { viewModel.setMenuColor(localContext, c) }
1190
- }
1191
- }
1192
- }
1193
-
1194
- Column {
1195
- Text("目录面板颜色 (TOC)", fontSize = 12.sp, color = Color.Gray)
1196
- FlowRow(horizontalArrangement = Arrangement.spacedBy(8.dp)) {
1197
- colors.forEach { (c, l) ->
1198
- ColorOption(c, l, uiState.tocColor == c) { viewModel.setTocColor(localContext, c) }
1199
- }
1200
- }
1201
- }
1202
-
1203
- Column {
1204
- Text("搜索面板颜色 (Search)", fontSize = 12.sp, color = Color.Gray)
1205
- FlowRow(horizontalArrangement = Arrangement.spacedBy(8.dp)) {
1206
- colors.forEach { (c, l) ->
1207
- ColorOption(c, l, uiState.searchColor == c) { viewModel.setSearchColor(localContext, c) }
1208
- }
1209
- }
1210
- }
1211
-
1212
- Column {
1213
- Text("搜索匹配高亮颜色 (Search Match highlight)", fontSize = 12.sp, color = Color.Gray)
1214
- val matchColors = listOf(
1215
- "#FFF59D" to "淡黄",
1216
- "#C8E6C9" to "淡绿",
1217
- "#FFCDD2" to "淡红",
1218
- "#B2EBF2" to "淡蓝",
1219
- "#E1BEE7" to "淡紫",
1220
- "#FFE0B2" to "淡橙",
1221
- "#BBDEFB" to "灰蓝"
1222
- )
1223
- FlowRow(horizontalArrangement = Arrangement.spacedBy(8.dp)) {
1224
- matchColors.forEach { (c, l) ->
1225
- ColorOption(c, l, uiState.searchMatchBackgroundColor == c) { viewModel.setSearchMatchBackgroundColor(localContext, c) }
1226
- }
1227
- }
1228
- }
1229
-
1230
- Column {
1231
- Text("当前行高亮颜色 (Current Line)", fontSize = 12.sp, color = Color.Gray)
1232
- val highlightColors = listOf(
1233
- "#00000000" to "无",
1234
- "#10000000" to "淡黑",
1235
- "#10888888" to "淡灰",
1236
- "#100000FF" to "淡蓝",
1237
- "#10FF0000" to "淡红",
1238
- "#1000FF00" to "淡绿",
1239
- "#20FFEB3B" to "浅黄"
1240
- )
1241
- FlowRow(horizontalArrangement = Arrangement.spacedBy(8.dp)) {
1242
- highlightColors.forEach { (c, l) ->
1243
- ColorOption(c, l, uiState.currentLineBackgroundColor == c) { viewModel.setCurrentLineBackgroundColor(localContext, c) }
1244
- }
1245
- }
1246
- }
1247
-
1248
- Column(verticalArrangement = Arrangement.spacedBy(8.dp)) {
1249
- Text("光标颜色 (Cursor Color)", fontSize = 12.sp, color = Color.Gray)
1250
- val cursorColors = listOf("#FF000000" to "黑", "#FF888888" to "灰", "#FF0000FF" to "蓝", "#FFFF0000" to "红", "#FF00FF00" to "绿", "#FFFB8C00" to "橙", "#FF1976D2" to "深蓝")
1251
- FlowRow(horizontalArrangement = Arrangement.spacedBy(8.dp)) {
1252
- cursorColors.forEach { (c, l) ->
1253
- ColorOption(c, l, uiState.cursorColor == c) { viewModel.setCursorColor(localContext, c) }
1254
- }
1255
- }
1256
- }
1257
-
1258
- Column(verticalArrangement = Arrangement.spacedBy(8.dp)) {
1259
- Text("光标提手颜色 (Handle Color)", fontSize = 12.sp, color = Color.Gray)
1260
- val handleColors = listOf("#FF000000" to "黑", "#FF888888" to "灰", "#FF0000FF" to "蓝", "#FFFF0000" to "红", "#FF00FF00" to "绿", "#FFFB8C00" to "橙", "#FF1976D2" to "深蓝")
1261
- FlowRow(horizontalArrangement = Arrangement.spacedBy(8.dp)) {
1262
- handleColors.forEach { (c, l) ->
1263
- ColorOption(c, l, uiState.handleColor == c) { viewModel.setHandleColor(localContext, c) }
1264
- }
1265
- }
1266
- }
1267
-
1268
- Column(verticalArrangement = Arrangement.spacedBy(8.dp)) {
1269
- Text("滚动条颜色 (Scrollbar Color)", fontSize = 12.sp, color = Color.Gray)
1270
- val scrollbarColors = listOf("#A0888888" to "默认灰", "#A0000000" to "黑", "#A0FF0000" to "红", "#A000FF00" to "绿", "#A00000FF" to "蓝", "#A0FB8C00" to "橙", "#A01976D2" to "深蓝")
1271
- FlowRow(horizontalArrangement = Arrangement.spacedBy(8.dp)) {
1272
- scrollbarColors.forEach { (c, l) ->
1273
- ColorOption(c, l, uiState.scrollbarColor == c) { viewModel.setScrollbarColor(localContext, c) }
1274
- }
1275
- }
1276
- }
1277
-
1278
- Column(verticalArrangement = Arrangement.spacedBy(8.dp)) {
1353
+ EditorColorSettings(uiState, viewModel, localContext)
1354
+ Column(verticalArrangement = Arrangement.spacedBy(8.dp)) {
1279
1355
  Text("滚动条样式", fontSize = 12.sp, color = Color.Gray)
1280
1356
  Row(horizontalArrangement = Arrangement.spacedBy(8.dp)) {
1281
1357
  mapOf("default" to "Sora (直角)", "rounded" to "Chrome (圆角)").forEach { (id, label) ->
@@ -1341,6 +1417,94 @@ fun EditorSettingsScreen(
1341
1417
  }
1342
1418
  }
1343
1419
  }
1420
+
1421
+ Column(verticalArrangement = Arrangement.spacedBy(8.dp)) {
1422
+ Text("编辑浮动菜单 (长按/双击弹出)", style = MaterialTheme.typography.titleMedium)
1423
+
1424
+ val allItemLabels = mapOf(
1425
+ "select_all" to "全选",
1426
+ "copy" to "复制",
1427
+ "paste" to "粘贴",
1428
+ "cut" to "剪切",
1429
+ "long_select" to "自由选择"
1430
+ )
1431
+
1432
+ Column(verticalArrangement = Arrangement.spacedBy(4.dp)) {
1433
+ uiState.textActionMenuItems.forEachIndexed { index, id ->
1434
+ val label = allItemLabels[id] ?: id
1435
+ val isHidden = id in uiState.textActionMenuHidden
1436
+
1437
+ Surface(
1438
+ modifier = Modifier.fillMaxWidth(),
1439
+ shape = RoundedCornerShape(8.dp),
1440
+ color = if (isHidden) Color.LightGray.copy(alpha = 0.3f) else MaterialTheme.colorScheme.surfaceVariant.copy(alpha = 0.3f),
1441
+ border = BorderStroke(1.dp, Color.LightGray.copy(alpha = 0.2f))
1442
+ ) {
1443
+ Row(
1444
+ modifier = Modifier.padding(horizontal = 8.dp, vertical = 2.dp),
1445
+ verticalAlignment = Alignment.CenterVertically
1446
+ ) {
1447
+ IconButton(
1448
+ onClick = { viewModel.toggleTextActionMenuItemVisibility(localContext, id) },
1449
+ modifier = Modifier.size(36.dp)
1450
+ ) {
1451
+ Icon(
1452
+ if (isHidden) Icons.Default.VisibilityOff else Icons.Default.Visibility,
1453
+ contentDescription = null,
1454
+ modifier = Modifier.size(18.dp),
1455
+ tint = if (isHidden) Color.Gray else MaterialTheme.colorScheme.primary
1456
+ )
1457
+ }
1458
+
1459
+ Text(
1460
+ text = label,
1461
+ modifier = Modifier.weight(1f),
1462
+ fontSize = 14.sp,
1463
+ color = if (isHidden) Color.Gray else Color.Unspecified
1464
+ )
1465
+
1466
+ IconButton(
1467
+ onClick = {
1468
+ if (index > 0) {
1469
+ val newList = uiState.textActionMenuItems.toMutableList()
1470
+ val item = newList.removeAt(index)
1471
+ newList.add(index - 1, item)
1472
+ viewModel.setTextActionMenuOrder(localContext, newList)
1473
+ }
1474
+ },
1475
+ enabled = index > 0,
1476
+ modifier = Modifier.size(36.dp)
1477
+ ) {
1478
+ Icon(Icons.Default.ArrowUpward, null, modifier = Modifier.size(18.dp), tint = if (index > 0) Color.Gray else Color.Transparent)
1479
+ }
1480
+
1481
+ IconButton(
1482
+ onClick = {
1483
+ if (index < uiState.textActionMenuItems.size - 1) {
1484
+ val newList = uiState.textActionMenuItems.toMutableList()
1485
+ val item = newList.removeAt(index)
1486
+ newList.add(index + 1, item)
1487
+ viewModel.setTextActionMenuOrder(localContext, newList)
1488
+ }
1489
+ },
1490
+ enabled = index < uiState.textActionMenuItems.size - 1,
1491
+ modifier = Modifier.size(36.dp)
1492
+ ) {
1493
+ Icon(Icons.Default.ArrowDownward, null, modifier = Modifier.size(18.dp), tint = if (index < uiState.textActionMenuItems.size - 1) Color.Gray else Color.Transparent)
1494
+ }
1495
+ }
1496
+ }
1497
+ }
1498
+ }
1499
+
1500
+ Spacer(Modifier.height(4.dp))
1501
+ Text("浮动菜单背景颜色", fontSize = 12.sp, color = Color.Gray)
1502
+ val bgColors = listOf("auto" to "默认", "#FFFFFF" to "白", "#F5F5F5" to "灰", "#000000" to "黑", "#EFEBE9" to "米", "#E8EAF6" to "蓝灰")
1503
+ FlowRow(horizontalArrangement = Arrangement.spacedBy(8.dp)) {
1504
+ bgColors.forEach { (c, l) ->
1505
+ ColorOption(c, l, uiState.textActionMenuBgColor == c) { viewModel.setTextActionMenuBgColor(localContext, c) }
1506
+ }
1507
+ }
1344
1508
  }
1345
1509
 
1346
1510
  Column(verticalArrangement = Arrangement.spacedBy(12.dp)) {
@@ -1394,14 +1558,6 @@ fun SettingsSwitchItem(title: String, desc: String, checked: Boolean, onCheckedC
1394
1558
  }
1395
1559
  }
1396
1560
 
1397
- @Composable
1398
- fun ColorOption(color: String, label: String, isSelected: Boolean, onClick: () -> Unit) {
1399
- Column(horizontalAlignment = Alignment.CenterHorizontally, modifier = Modifier.width(60.dp).clickable { onClick() }) {
1400
- Box(Modifier.size(40.dp).background(try { Color(android.graphics.Color.parseColor(color)) } catch(e:Exception) { Color.Gray }, RoundedCornerShape(20.dp)).border(if (isSelected) 2.dp else 1.dp, if (isSelected) MaterialTheme.colorScheme.primary else Color.LightGray, RoundedCornerShape(20.dp)))
1401
- Text(label, fontSize = 10.sp)
1402
- }
1403
- }
1404
-
1405
1561
  @Composable
1406
1562
  fun RenameDialog(currentName: String, backgroundColor: String, onRename: (String) -> Unit, onDismiss: () -> Unit) {
1407
1563
  var name by remember { mutableStateOf(currentName) }