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.
- package/DEPENDENCY_SOLUTION.md +87 -87
- package/DEVELOPMENT.md +152 -152
- package/NO_JITPACK_WARNING.md +14 -14
- package/README.md +36 -0
- package/WORDWRAP_FLICKER_FIX.md +268 -205
- package/android/sora-editor/editor/src/main/AndroidManifest.xml +1 -1
- package/android/sora-editor/editor/src/main/java/io/github/abc15018045126/sora/I18nConfig.kt +42 -0
- package/android/sora-editor/editor/src/main/java/io/github/abc15018045126/sora/annotations/Experimental.kt +16 -0
- package/android/sora-editor/editor/src/main/java/io/github/abc15018045126/sora/annotations/InvalidateRequired.kt +10 -0
- package/android/sora-editor/editor/src/main/java/io/github/abc15018045126/sora/annotations/UnsupportedUserUsage.kt +14 -0
- package/android/sora-editor/editor/src/main/java/io/github/abc15018045126/sora/event/ClickEvent.kt +22 -0
- package/android/sora-editor/editor/src/main/java/io/github/abc15018045126/sora/event/ColorSchemeUpdateEvent.kt +1 -1
- package/android/sora-editor/editor/src/main/java/io/github/abc15018045126/sora/event/ContentChangeEvent.kt +41 -0
- package/android/sora-editor/editor/src/main/java/io/github/abc15018045126/sora/event/DoubleClickEvent.kt +23 -0
- package/android/sora-editor/editor/src/main/java/io/github/abc15018045126/sora/event/EditorKeyEvent.kt +103 -0
- package/android/sora-editor/editor/src/main/java/io/github/abc15018045126/sora/event/EditorMotionEvent.kt +111 -0
- package/android/sora-editor/editor/src/main/java/io/github/abc15018045126/sora/event/Event.kt +69 -0
- package/android/sora-editor/editor/src/main/java/io/github/abc15018045126/sora/event/EventManager.kt +267 -0
- package/android/sora-editor/editor/src/main/java/io/github/abc15018045126/sora/event/EventReceiver.kt +5 -0
- package/android/sora-editor/editor/src/main/java/io/github/abc15018045126/sora/event/HandleStateChangeEvent.kt +21 -0
- package/android/sora-editor/editor/src/main/java/io/github/abc15018045126/sora/event/InterceptTarget.kt +18 -0
- package/android/sora-editor/editor/src/main/java/io/github/abc15018045126/sora/event/KeyBindingEvent.kt +34 -0
- package/android/sora-editor/editor/src/main/java/io/github/abc15018045126/sora/event/LongPressEvent.kt +25 -0
- package/android/sora-editor/editor/src/main/java/io/github/abc15018045126/sora/event/ResultedEvent.kt +21 -0
- package/android/sora-editor/editor/src/main/java/io/github/abc15018045126/sora/event/ScrollEvent.kt +48 -0
- package/android/sora-editor/editor/src/main/java/io/github/abc15018045126/sora/event/SelectionChangeEvent.kt +81 -0
- package/android/sora-editor/editor/src/main/java/io/github/abc15018045126/sora/event/SideIconClickEvent.kt +1 -1
- package/android/sora-editor/editor/src/main/java/io/github/abc15018045126/sora/event/SnippetEvent.kt +41 -0
- package/android/sora-editor/editor/src/main/java/io/github/abc15018045126/sora/event/SubscriptionReceipt.kt +35 -0
- package/android/sora-editor/editor/src/main/java/io/github/abc15018045126/sora/event/Unsubscribe.kt +28 -0
- package/android/sora-editor/editor/src/main/java/io/github/abc15018045126/sora/event/Utils.kt +1 -1
- package/android/sora-editor/editor/src/main/java/io/github/abc15018045126/sora/event/editorMinorEvents.kt +1 -1
- package/android/sora-editor/editor/src/main/java/io/github/abc15018045126/sora/graphics/BubbleHelper.kt +59 -0
- package/android/sora-editor/editor/src/main/java/io/github/abc15018045126/sora/graphics/BufferedDrawPoints.kt +37 -0
- package/android/sora-editor/editor/src/main/java/io/github/abc15018045126/sora/graphics/GraphemeBoundsBreaker.kt +31 -0
- package/android/sora-editor/editor/src/main/java/io/github/abc15018045126/sora/graphics/GraphicCharacter.kt +28 -0
- package/android/sora-editor/editor/src/main/java/io/github/abc15018045126/sora/graphics/GraphicsCompat.kt +48 -0
- package/android/sora-editor/editor/src/main/java/io/github/abc15018045126/sora/graphics/Paint.kt +191 -0
- package/android/sora-editor/editor/src/main/java/io/github/abc15018045126/sora/graphics/RectUtils.kt +16 -0
- package/android/sora-editor/editor/src/main/java/io/github/abc15018045126/sora/graphics/SingleCharacterWidths.kt +156 -0
- package/android/sora-editor/editor/src/main/java/io/github/abc15018045126/sora/graphics/TextRow.kt +1465 -0
- package/android/sora-editor/editor/src/main/java/io/github/abc15018045126/sora/graphics/TextRowParams.kt +1 -1
- package/android/sora-editor/editor/src/main/java/io/github/abc15018045126/sora/graphics/inlayHint/ColorInlayHintRenderer.kt +1 -1
- package/android/sora-editor/editor/src/main/java/io/github/abc15018045126/sora/graphics/inlayHint/InlayHintRenderer.kt +2 -2
- package/android/sora-editor/editor/src/main/java/io/github/abc15018045126/sora/graphics/inlayHint/InlayHintRendererProvider.kt +1 -1
- package/android/sora-editor/editor/src/main/java/io/github/abc15018045126/sora/graphics/inlayHint/TextInlayHintRenderer.kt +2 -2
- package/android/sora-editor/editor/src/main/java/io/github/abc15018045126/sora/lang/EmptyLanguage.kt +94 -0
- package/android/sora-editor/editor/src/main/java/io/github/abc15018045126/sora/lang/Language.kt +188 -0
- package/android/sora-editor/editor/src/main/java/io/github/abc15018045126/sora/lang/QuickQuoteHandler.kt +46 -0
- package/android/sora-editor/editor/src/main/java/io/github/abc15018045126/sora/lang/analysis/AnalyzeManager.kt +67 -0
- package/android/sora-editor/editor/src/main/java/io/github/abc15018045126/sora/lang/analysis/AsyncIncrementalAnalyzeManager.kt +504 -0
- package/android/sora-editor/editor/src/main/java/io/github/abc15018045126/sora/lang/analysis/IncrementalAnalyzeManager.kt +93 -0
- package/android/sora-editor/editor/src/main/java/io/github/abc15018045126/sora/lang/analysis/SequenceUpdateRange.kt +1 -1
- package/android/sora-editor/editor/src/main/java/io/github/abc15018045126/sora/lang/analysis/SimpleAnalyzeManager.kt +194 -0
- package/android/sora-editor/editor/src/main/java/io/github/abc15018045126/sora/lang/analysis/StyleReceiver.kt +63 -0
- package/android/sora-editor/editor/src/main/java/io/github/abc15018045126/sora/lang/analysis/StyleUpdateRange.kt +1 -1
- package/android/sora-editor/editor/src/main/java/io/github/abc15018045126/sora/lang/brackets/BracketsProvider.kt +21 -0
- package/android/sora-editor/editor/src/main/java/io/github/abc15018045126/sora/lang/brackets/OnlineBracketsMatcher.kt +83 -0
- package/android/sora-editor/editor/src/main/java/io/github/abc15018045126/sora/lang/brackets/PairedBracket.kt +13 -0
- package/android/sora-editor/editor/src/main/java/io/github/abc15018045126/sora/lang/brackets/SimpleBracketsCollector.kt +53 -0
- package/android/sora-editor/editor/src/main/java/io/github/abc15018045126/sora/lang/completion/CompletionCancelledException.kt +14 -0
- package/android/sora-editor/editor/src/main/java/io/github/abc15018045126/sora/lang/completion/CompletionHelper.kt +48 -0
- package/android/sora-editor/editor/src/main/java/io/github/abc15018045126/sora/lang/completion/CompletionItem.kt +131 -0
- package/android/sora-editor/editor/src/main/java/io/github/abc15018045126/sora/lang/completion/CompletionItemKind.kt +1 -1
- package/android/sora-editor/editor/src/main/java/io/github/abc15018045126/sora/lang/completion/CompletionPublisher.kt +250 -0
- package/android/sora-editor/editor/src/main/java/io/github/abc15018045126/sora/lang/completion/IdentifierAutoComplete.kt +352 -0
- package/android/sora-editor/editor/src/main/java/io/github/abc15018045126/sora/lang/completion/MatchHelper.kt +126 -0
- package/android/sora-editor/editor/src/main/java/io/github/abc15018045126/sora/lang/completion/SimpleCompletionIconDrawer.kt +1 -1
- package/android/sora-editor/editor/src/main/java/io/github/abc15018045126/sora/lang/completion/SimpleCompletionItem.kt +77 -0
- package/android/sora-editor/editor/src/main/java/io/github/abc15018045126/sora/lang/completion/SimpleSnippetCompletionItem.kt +35 -0
- package/android/sora-editor/editor/src/main/java/io/github/abc15018045126/sora/lang/completion/SnippetDescription.kt +1 -1
- package/android/sora-editor/editor/src/main/java/io/github/abc15018045126/sora/lang/completion/comparators.kt +1 -1
- package/android/sora-editor/editor/src/main/java/io/github/abc15018045126/sora/lang/completion/filters.kt +3 -3
- package/android/sora-editor/editor/src/main/java/io/github/abc15018045126/sora/lang/completion/snippet/CodeSnippet.kt +171 -0
- package/android/sora-editor/editor/src/main/java/io/github/abc15018045126/sora/lang/completion/snippet/ConditionalFormat.kt +8 -0
- package/android/sora-editor/editor/src/main/java/io/github/abc15018045126/sora/lang/completion/snippet/FormatString.kt +3 -0
- package/android/sora-editor/editor/src/main/java/io/github/abc15018045126/sora/lang/completion/snippet/InterpolatedShellItem.kt +13 -0
- package/android/sora-editor/editor/src/main/java/io/github/abc15018045126/sora/lang/completion/snippet/NextUpperCaseFormat.kt +3 -0
- package/android/sora-editor/editor/src/main/java/io/github/abc15018045126/sora/lang/completion/snippet/NoFormat.kt +3 -0
- package/android/sora-editor/editor/src/main/java/io/github/abc15018045126/sora/lang/completion/snippet/PlaceHolderElement.kt +1 -1
- package/android/sora-editor/editor/src/main/java/io/github/abc15018045126/sora/lang/completion/snippet/PlaceholderDefinition.kt +2 -2
- package/android/sora-editor/editor/src/main/java/io/github/abc15018045126/sora/lang/completion/snippet/PlaceholderItem.kt +22 -0
- package/android/sora-editor/editor/src/main/java/io/github/abc15018045126/sora/lang/completion/snippet/PlainPlaceholderElement.kt +1 -1
- package/android/sora-editor/editor/src/main/java/io/github/abc15018045126/sora/lang/completion/snippet/PlainTextItem.kt +17 -0
- package/android/sora-editor/editor/src/main/java/io/github/abc15018045126/sora/lang/completion/snippet/SnippetItem.kt +33 -0
- package/android/sora-editor/editor/src/main/java/io/github/abc15018045126/sora/lang/completion/snippet/Transform.kt +15 -0
- package/android/sora-editor/editor/src/main/java/io/github/abc15018045126/sora/lang/completion/snippet/VariableItem.kt +15 -0
- package/android/sora-editor/editor/src/main/java/io/github/abc15018045126/sora/lang/completion/snippet/parser/CodeSnippetParser.kt +544 -0
- package/android/sora-editor/editor/src/main/java/io/github/abc15018045126/sora/lang/completion/snippet/parser/CodeSnippetTokenizer.kt +108 -0
- package/android/sora-editor/editor/src/main/java/io/github/abc15018045126/sora/lang/completion/snippet/parser/Token.kt +7 -0
- package/android/sora-editor/editor/src/main/java/io/github/abc15018045126/sora/lang/completion/snippet/parser/TokenType.kt +20 -0
- package/android/sora-editor/editor/src/main/java/io/github/abc15018045126/sora/lang/diagnostic/DiagnosticDetail.kt +1 -1
- package/android/sora-editor/editor/src/main/java/io/github/abc15018045126/sora/lang/diagnostic/DiagnosticRegion.kt +56 -0
- package/android/sora-editor/editor/src/main/java/io/github/abc15018045126/sora/lang/diagnostic/DiagnosticsContainer.kt +109 -0
- package/android/sora-editor/editor/src/main/java/io/github/abc15018045126/sora/lang/diagnostic/Quickfix.kt +1 -1
- package/android/sora-editor/editor/src/main/java/io/github/abc15018045126/sora/lang/folding/FoldingRegion.kt +50 -0
- package/android/sora-editor/editor/src/main/java/io/github/abc15018045126/sora/lang/format/AsyncFormatter.kt +182 -0
- package/android/sora-editor/editor/src/main/java/io/github/abc15018045126/sora/lang/format/Formatter.kt +72 -0
- package/android/sora-editor/editor/src/main/java/io/github/abc15018045126/sora/lang/smartEnter/NewlineHandleResult.kt +18 -0
- package/android/sora-editor/editor/src/main/java/io/github/abc15018045126/sora/lang/smartEnter/NewlineHandler.kt +32 -0
- package/android/sora-editor/editor/src/main/java/io/github/abc15018045126/sora/lang/styling/BlocksUpdater.kt +34 -0
- package/android/sora-editor/editor/src/main/java/io/github/abc15018045126/sora/lang/styling/CodeBlock.kt +165 -0
- package/android/sora-editor/editor/src/main/java/io/github/abc15018045126/sora/lang/styling/EmptyReader.kt +30 -0
- package/android/sora-editor/editor/src/main/java/io/github/abc15018045126/sora/lang/styling/HighlightTextContainer.kt +1 -1
- package/android/sora-editor/editor/src/main/java/io/github/abc15018045126/sora/lang/styling/MappedSpanUpdater.kt +180 -0
- package/android/sora-editor/editor/src/main/java/io/github/abc15018045126/sora/lang/styling/MappedSpans.kt +210 -0
- package/android/sora-editor/editor/src/main/java/io/github/abc15018045126/sora/lang/styling/Span.kt +139 -0
- package/android/sora-editor/editor/src/main/java/io/github/abc15018045126/sora/lang/styling/SpanFactory.kt +41 -0
- package/android/sora-editor/editor/src/main/java/io/github/abc15018045126/sora/lang/styling/SpanPool.kt +1 -1
- package/android/sora-editor/editor/src/main/java/io/github/abc15018045126/sora/lang/styling/Spans.kt +104 -0
- package/android/sora-editor/editor/src/main/java/io/github/abc15018045126/sora/lang/styling/Styles.kt +219 -0
- package/android/sora-editor/editor/src/main/java/io/github/abc15018045126/sora/lang/styling/StylesUtils.kt +82 -0
- package/android/sora-editor/editor/src/main/java/io/github/abc15018045126/sora/lang/styling/TextStyle.kt +130 -31
- package/android/sora-editor/editor/src/main/java/io/github/abc15018045126/sora/lang/styling/color/ConstColor.kt +1 -1
- package/android/sora-editor/editor/src/main/java/io/github/abc15018045126/sora/lang/styling/color/EditorColor.kt +1 -1
- package/android/sora-editor/editor/src/main/java/io/github/abc15018045126/sora/lang/styling/color/ResolvableColor.kt +1 -1
- package/android/sora-editor/editor/src/main/java/io/github/abc15018045126/sora/lang/styling/inlayHint/InlayHint.kt +1 -1
- package/android/sora-editor/editor/src/main/java/io/github/abc15018045126/sora/lang/styling/inlayHint/InlayHintsContainer.kt +1 -1
- package/android/sora-editor/editor/src/main/java/io/github/abc15018045126/sora/lang/styling/inlayHint/IntSetUpdateRange.kt +1 -1
- package/android/sora-editor/editor/src/main/java/io/github/abc15018045126/sora/lang/styling/inlayHint/SparseUpdateRange.kt +1 -1
- package/android/sora-editor/editor/src/main/java/io/github/abc15018045126/sora/lang/styling/inlayHint/inlayHints.kt +1 -1
- package/android/sora-editor/editor/src/main/java/io/github/abc15018045126/sora/lang/styling/line/LineAnchorStyle.kt +2 -2
- package/android/sora-editor/editor/src/main/java/io/github/abc15018045126/sora/lang/styling/line/LineBackground.kt +2 -2
- package/android/sora-editor/editor/src/main/java/io/github/abc15018045126/sora/lang/styling/line/LineGutterBackground.kt +1 -1
- package/android/sora-editor/editor/src/main/java/io/github/abc15018045126/sora/lang/styling/line/LineSideIcon.kt +1 -1
- package/android/sora-editor/editor/src/main/java/io/github/abc15018045126/sora/lang/styling/line/LineStyles.kt +1 -1
- package/android/sora-editor/editor/src/main/java/io/github/abc15018045126/sora/lang/styling/patching/SparseStylePatches.kt +2 -2
- package/android/sora-editor/editor/src/main/java/io/github/abc15018045126/sora/lang/styling/patching/StylePatch.kt +1 -1
- package/android/sora-editor/editor/src/main/java/io/github/abc15018045126/sora/lang/styling/span/SpanClickableUrl.kt +1 -1
- package/android/sora-editor/editor/src/main/java/io/github/abc15018045126/sora/lang/styling/span/SpanColorResolver.kt +1 -1
- package/android/sora-editor/editor/src/main/java/io/github/abc15018045126/sora/lang/styling/span/SpanConstColorResolver.kt +1 -1
- package/android/sora-editor/editor/src/main/java/io/github/abc15018045126/sora/lang/styling/span/SpanExt.kt +1 -1
- package/android/sora-editor/editor/src/main/java/io/github/abc15018045126/sora/lang/styling/span/SpanExtAttrs.kt +39 -0
- package/android/sora-editor/editor/src/main/java/io/github/abc15018045126/sora/lang/styling/span/SpanExternalRenderer.kt +1 -1
- package/android/sora-editor/editor/src/main/java/io/github/abc15018045126/sora/lang/styling/span/SpanInteractionInfo.kt +1 -1
- package/android/sora-editor/editor/src/main/java/io/github/abc15018045126/sora/lang/styling/span/internal/NoExtSpanImpl.kt +89 -0
- package/android/sora-editor/editor/src/main/java/io/github/abc15018045126/sora/lang/styling/span/internal/SpanImpl.kt +103 -0
- package/android/sora-editor/editor/src/main/java/io/github/abc15018045126/sora/lang/styling/util/PointAnchorContainer.kt +1 -1
- package/android/sora-editor/editor/src/main/java/io/github/abc15018045126/sora/lang/util/BaseAnalyzeManager.kt +44 -0
- package/android/sora-editor/editor/src/main/java/io/github/abc15018045126/sora/lang/util/PlainTextAnalyzeManager.kt +30 -0
- package/android/sora-editor/editor/src/main/java/io/github/abc15018045126/sora/lang/util/PlainTextSpans.kt +42 -0
- package/android/sora-editor/editor/src/main/java/io/github/abc15018045126/sora/text/{AndroidEmoji.java → AndroidEmoji.kt} +29 -27
- package/android/sora-editor/editor/src/main/java/io/github/abc15018045126/sora/text/CachedIndexer.kt +408 -0
- package/android/sora-editor/editor/src/main/java/io/github/abc15018045126/sora/text/CharArrayWrapper.kt +40 -0
- package/android/sora-editor/editor/src/main/java/io/github/abc15018045126/sora/text/CharPosition.kt +97 -0
- package/android/sora-editor/editor/src/main/java/io/github/abc15018045126/sora/text/CharSequenceIterator.kt +66 -0
- package/android/sora-editor/editor/src/main/java/io/github/abc15018045126/sora/text/ComposingText.kt +72 -0
- package/android/sora-editor/editor/src/main/java/io/github/abc15018045126/sora/text/Content.kt +889 -33
- package/android/sora-editor/editor/src/main/java/io/github/abc15018045126/sora/{widget/component/EditorBuiltinComponent.java → text/ContentExtensions.kt} +14 -24
- package/android/sora-editor/editor/src/main/java/io/github/abc15018045126/sora/text/ContentIO.kt +149 -0
- package/android/sora-editor/editor/src/main/java/io/github/abc15018045126/sora/text/ContentLine.kt +252 -0
- package/android/sora-editor/editor/src/main/java/io/github/abc15018045126/sora/text/ContentListener.kt +67 -0
- package/android/sora-editor/editor/src/main/java/io/github/abc15018045126/sora/text/ContentReference.kt +177 -0
- package/android/sora-editor/editor/src/main/java/io/github/abc15018045126/sora/text/Cursor.kt +316 -0
- package/android/sora-editor/editor/src/main/java/io/github/abc15018045126/sora/text/FunctionCharacters.kt +46 -0
- package/android/sora-editor/editor/src/main/java/io/github/abc15018045126/sora/text/ICUUtils.kt +58 -0
- package/android/sora-editor/editor/src/main/java/io/github/abc15018045126/sora/text/Indexer.kt +63 -0
- package/android/sora-editor/editor/src/main/java/io/github/abc15018045126/sora/text/InsertTextHelper.kt +95 -0
- package/android/sora-editor/editor/src/main/java/io/github/abc15018045126/sora/text/LineSeparator.kt +51 -0
- package/android/sora-editor/editor/src/main/java/io/github/abc15018045126/sora/text/SpanRecycler.kt +71 -0
- package/android/sora-editor/editor/src/main/java/io/github/abc15018045126/sora/text/TextLayoutHelper.kt +105 -0
- package/android/sora-editor/editor/src/main/java/io/github/abc15018045126/sora/text/TextRange.kt +48 -0
- package/android/sora-editor/editor/src/main/java/io/github/abc15018045126/sora/text/TextReference.kt +91 -0
- package/android/sora-editor/editor/src/main/java/io/github/abc15018045126/sora/text/TextUtils.kt +181 -0
- package/android/sora-editor/editor/src/main/java/io/github/abc15018045126/sora/text/TextUtilsP.kt +232 -0
- package/android/sora-editor/editor/src/main/java/io/github/abc15018045126/sora/text/UndoManager.kt +569 -0
- package/android/sora-editor/editor/src/main/java/io/github/abc15018045126/sora/text/UnicodeIterator.kt +69 -0
- package/android/sora-editor/editor/src/main/java/io/github/abc15018045126/sora/text/bidi/BidiRequirementChecker.kt +5 -0
- package/android/sora-editor/editor/src/main/java/io/github/abc15018045126/sora/text/bidi/ContentBidi.kt +104 -0
- package/android/sora-editor/editor/src/main/java/io/github/abc15018045126/sora/text/bidi/Directions.kt +43 -0
- package/android/sora-editor/editor/src/main/java/io/github/abc15018045126/sora/text/bidi/IDirections.kt +9 -0
- package/android/sora-editor/editor/src/main/java/io/github/abc15018045126/sora/text/bidi/TextBidi.kt +67 -0
- package/android/sora-editor/editor/src/main/java/io/github/abc15018045126/sora/text/bidi/VisualDirections.kt +45 -0
- package/android/sora-editor/editor/src/main/java/io/github/abc15018045126/sora/text/breaker/WordBreaker.kt +19 -0
- package/android/sora-editor/editor/src/main/java/io/github/abc15018045126/sora/text/breaker/WordBreakerEmpty.kt +13 -0
- package/android/sora-editor/editor/src/main/java/io/github/abc15018045126/sora/text/breaker/WordBreakerIcu.kt +36 -0
- package/android/sora-editor/editor/src/main/java/io/github/abc15018045126/sora/text/breaker/WordBreakerProgram.kt +23 -0
- package/android/sora-editor/editor/src/main/java/io/github/abc15018045126/sora/text/method/KeyMetaStates.kt +55 -0
- package/android/sora-editor/editor/src/main/java/io/github/abc15018045126/sora/util/BinaryHeap.kt +216 -0
- package/android/sora-editor/editor/src/main/java/io/github/abc15018045126/sora/util/BlockIntList.kt +314 -0
- package/android/sora-editor/editor/src/main/java/io/github/abc15018045126/sora/util/CharCode.kt +1 -1
- package/android/sora-editor/editor/src/main/java/io/github/abc15018045126/sora/util/Chars.kt +1 -1
- package/android/sora-editor/editor/src/main/java/io/github/abc15018045126/sora/util/ClipDataUtils.kt +29 -0
- package/android/sora-editor/editor/src/main/java/io/github/abc15018045126/sora/util/EditorHandler.kt +1 -1
- package/android/sora-editor/editor/src/main/java/io/github/abc15018045126/sora/util/Floats.kt +10 -0
- package/android/sora-editor/editor/src/main/java/io/github/abc15018045126/sora/util/IntPair.kt +76 -0
- package/android/sora-editor/editor/src/main/java/io/github/abc15018045126/sora/util/KeyboardUtils.kt +1 -1
- package/android/sora-editor/editor/src/main/java/io/github/abc15018045126/sora/util/Logger.kt +78 -0
- package/android/sora-editor/editor/src/main/java/io/github/abc15018045126/sora/util/LongArrayList.kt +104 -0
- package/android/sora-editor/editor/src/main/java/io/github/abc15018045126/sora/util/MutableInt.kt +14 -0
- package/android/sora-editor/editor/src/main/java/io/github/abc15018045126/sora/util/MutableIntList.kt +35 -0
- package/android/sora-editor/editor/src/main/java/io/github/abc15018045126/sora/util/MutableLongLongMap.kt +36 -0
- package/android/sora-editor/editor/src/main/java/io/github/abc15018045126/sora/util/MyCharacter.kt +127 -0
- package/android/sora-editor/editor/src/main/java/io/github/abc15018045126/sora/util/Numbers.kt +109 -0
- package/android/sora-editor/editor/src/main/java/io/github/abc15018045126/sora/util/ObjectPool.kt +44 -0
- package/android/sora-editor/editor/src/main/java/io/github/abc15018045126/sora/util/RegionIterator.kt +123 -0
- package/android/sora-editor/editor/src/main/java/io/github/abc15018045126/sora/util/RendererUtils.kt +1 -1
- package/android/sora-editor/editor/src/main/java/io/github/abc15018045126/sora/util/ReversedListView.kt +1 -1
- package/android/sora-editor/editor/src/main/java/io/github/abc15018045126/sora/util/SegmentList.kt +273 -0
- package/android/sora-editor/editor/src/main/java/io/github/abc15018045126/sora/util/ShareableData.kt +1 -1
- package/android/sora-editor/editor/src/main/java/io/github/abc15018045126/sora/util/TemporaryCharBuffer.kt +31 -0
- package/android/sora-editor/editor/src/main/java/io/github/abc15018045126/sora/util/TemporaryFloatBuffer.kt +44 -0
- package/android/sora-editor/editor/src/main/java/io/github/abc15018045126/sora/util/ThemeUtils.kt +14 -0
- package/android/sora-editor/editor/src/main/java/io/github/abc15018045126/sora/util/TrieTree.kt +137 -0
- package/android/sora-editor/editor/src/main/java/io/github/abc15018045126/sora/util/ViewUtils.kt +39 -0
- package/android/sora-editor/editor/src/main/java/io/github/abc15018045126/sora/util/regex/RegexBackrefGrammar.kt +11 -0
- package/android/sora-editor/editor/src/main/java/io/github/abc15018045126/sora/util/regex/RegexBackrefHelper.kt +27 -0
- package/android/sora-editor/editor/src/main/java/io/github/abc15018045126/sora/util/regex/RegexBackrefParser.kt +89 -0
- package/android/sora-editor/editor/src/main/java/io/github/abc15018045126/sora/util/regex/RegexBackrefToken.kt +16 -0
- package/android/sora-editor/editor/src/main/java/io/github/abc15018045126/sora/widget/CodeEditor.kt +5509 -0
- package/android/sora-editor/editor/src/main/java/io/github/abc15018045126/sora/widget/CursorBlink.kt +78 -0
- package/android/sora-editor/editor/src/main/java/io/github/abc15018045126/sora/widget/DirectAccessProps.kt +604 -0
- package/android/sora-editor/editor/src/main/java/io/github/abc15018045126/sora/widget/Editor.kt +1 -1
- package/android/sora-editor/editor/src/main/java/io/github/abc15018045126/sora/widget/EditorInputConnection.kt +708 -0
- package/android/sora-editor/editor/src/main/java/io/github/abc15018045126/sora/widget/EditorKeyEventHandler.kt +678 -0
- package/android/sora-editor/editor/src/main/java/io/github/abc15018045126/sora/widget/EditorRenderer.kt +3542 -0
- package/android/sora-editor/editor/src/main/java/io/github/abc15018045126/sora/widget/EditorScroller.kt +89 -0
- package/android/sora-editor/editor/src/main/java/io/github/abc15018045126/sora/widget/EditorSearcher.kt +531 -0
- package/android/sora-editor/editor/src/main/java/io/github/abc15018045126/sora/widget/EditorStyleDelegate.kt +109 -0
- package/android/sora-editor/editor/src/main/java/io/github/abc15018045126/sora/widget/EditorTouchEventHandler.kt +1349 -0
- package/android/sora-editor/editor/src/main/java/io/github/abc15018045126/sora/widget/LanguageHelper.kt +38 -0
- package/android/sora-editor/editor/src/main/java/io/github/abc15018045126/sora/widget/RegionResolver.kt +1 -1
- package/android/sora-editor/editor/src/main/java/io/github/abc15018045126/sora/widget/SelectionMovement.kt +27 -37
- package/android/sora-editor/editor/src/main/java/io/github/abc15018045126/sora/widget/SymbolInputView.kt +103 -0
- package/android/sora-editor/editor/src/main/java/io/github/abc15018045126/sora/widget/SymbolPairMatch.kt +261 -0
- package/android/sora-editor/editor/src/main/java/io/github/abc15018045126/sora/widget/base/EditorPopupWindow.kt +244 -0
- package/android/sora-editor/editor/src/main/java/io/github/abc15018045126/sora/widget/component/CompletionLayout.kt +59 -0
- package/android/sora-editor/editor/src/main/java/io/github/abc15018045126/sora/widget/component/DefaultCompletionItemAdapter.kt +60 -0
- package/android/sora-editor/editor/src/main/java/io/github/abc15018045126/sora/widget/component/DefaultCompletionLayout.kt +225 -0
- package/android/sora-editor/editor/src/main/java/io/github/abc15018045126/sora/widget/component/EditorAutoCompletion.kt +300 -0
- package/android/sora-editor/editor/src/main/java/io/github/abc15018045126/sora/widget/component/EditorBuiltinComponent.kt +15 -0
- package/android/sora-editor/editor/src/main/java/io/github/abc15018045126/sora/widget/component/EditorCompletionAdapter.kt +87 -0
- package/android/sora-editor/editor/src/main/java/io/github/abc15018045126/sora/widget/component/EditorContextMenuCreator.kt +6 -28
- package/android/sora-editor/editor/src/main/java/io/github/abc15018045126/sora/widget/component/EditorDiagnosticTooltipWindow.kt +27 -20
- package/android/sora-editor/editor/src/main/java/io/github/abc15018045126/sora/widget/component/EditorTextActionWindow.kt +358 -0
- package/android/sora-editor/editor/src/main/java/io/github/abc15018045126/sora/widget/component/Magnifier.kt +354 -0
- package/android/sora-editor/editor/src/main/java/io/github/abc15018045126/sora/widget/ext/EditorSpanInteractionHandler.kt +3 -3
- package/android/sora-editor/editor/src/main/java/io/github/abc15018045126/sora/widget/layout/AbstractLayout.kt +126 -0
- package/android/sora-editor/editor/src/main/java/io/github/abc15018045126/sora/widget/layout/{Layout.java → Layout.kt} +30 -63
- package/android/sora-editor/editor/src/main/java/io/github/abc15018045126/sora/widget/layout/LineBreakLayout.kt +370 -0
- package/android/sora-editor/editor/src/main/java/io/github/abc15018045126/sora/widget/layout/Row.kt +57 -0
- package/android/sora-editor/editor/src/main/java/io/github/abc15018045126/sora/widget/layout/RowElement.kt +52 -0
- package/android/sora-editor/editor/src/main/java/io/github/abc15018045126/sora/widget/layout/RowElementTypes.kt +18 -0
- package/android/sora-editor/editor/src/main/java/io/github/abc15018045126/sora/widget/layout/RowIterator.kt +38 -0
- package/android/sora-editor/editor/src/main/java/io/github/abc15018045126/sora/widget/layout/ViewMeasureHelper.kt +135 -0
- package/android/sora-editor/editor/src/main/java/io/github/abc15018045126/sora/widget/layout/WordwrapLayout.kt +703 -0
- package/android/sora-editor/editor/src/main/java/io/github/abc15018045126/sora/widget/rendering/MeasureCacheItem.kt +1 -1
- package/android/sora-editor/editor/src/main/java/io/github/abc15018045126/sora/widget/rendering/RenderCache.kt +1 -1
- package/android/sora-editor/editor/src/main/java/io/github/abc15018045126/sora/widget/rendering/RenderContext.kt +1 -1
- package/android/sora-editor/editor/src/main/java/io/github/abc15018045126/sora/widget/rendering/RenderNodeHolder.kt +3 -25
- package/android/sora-editor/editor/src/main/java/io/github/abc15018045126/sora/widget/rendering/RenderingConstants.kt +53 -0
- package/android/sora-editor/editor/src/main/java/io/github/abc15018045126/sora/widget/rendering/TextAdvancesCache.kt +89 -0
- package/android/sora-editor/editor/src/main/java/io/github/abc15018045126/sora/widget/schemes/EditorColorScheme.kt +393 -0
- package/android/sora-editor/editor/src/main/java/io/github/abc15018045126/sora/widget/schemes/SchemeDarcula.kt +40 -0
- package/android/sora-editor/editor/src/main/java/io/github/abc15018045126/sora/widget/schemes/SchemeEclipse.kt +34 -0
- package/android/sora-editor/editor/src/main/java/io/github/abc15018045126/sora/widget/schemes/SchemeGitHub.kt +28 -0
- package/android/sora-editor/editor/src/main/java/io/github/abc15018045126/sora/widget/schemes/SchemeNotepadXX.kt +34 -0
- package/android/sora-editor/editor/src/main/java/io/github/abc15018045126/sora/widget/schemes/SchemeVS2019.kt +40 -0
- package/android/sora-editor/editor/src/main/java/io/github/abc15018045126/sora/widget/snippet/SnippetController.kt +4 -3
- package/android/sora-editor/editor/src/main/java/io/github/abc15018045126/sora/widget/snippet/TransformApplier.kt +103 -0
- package/android/sora-editor/editor/src/main/java/io/github/abc15018045126/sora/widget/snippet/variable/ClipboardBasedSnippetVariableResolver.kt +21 -0
- package/android/sora-editor/editor/src/main/java/io/github/abc15018045126/sora/widget/snippet/variable/CommentBasedSnippetVariableResolver.kt +23 -0
- package/android/sora-editor/editor/src/main/java/io/github/abc15018045126/sora/widget/snippet/variable/CompositeSnippetVariableResolver.kt +35 -0
- package/android/sora-editor/editor/src/main/java/io/github/abc15018045126/sora/widget/snippet/variable/EditorBasedSnippetVariableResolver.kt +36 -0
- package/android/sora-editor/editor/src/main/java/io/github/abc15018045126/sora/widget/snippet/variable/FileBasedSnippetVariableResolver.kt +11 -0
- package/android/sora-editor/editor/src/main/java/io/github/abc15018045126/sora/widget/snippet/variable/ISnippetVariableResolver.kt +21 -0
- package/android/sora-editor/editor/src/main/java/io/github/abc15018045126/sora/widget/snippet/variable/RandomBasedSnippetVariableResolver.kt +22 -0
- package/android/sora-editor/editor/src/main/java/io/github/abc15018045126/sora/widget/snippet/variable/TimeBasedSnippetVariableResolver.kt +58 -0
- package/android/sora-editor/editor/src/main/java/io/github/abc15018045126/sora/widget/snippet/variable/WorkspaceBasedSnippetVariableResolver.kt +11 -0
- package/android/sora-editor/editor/src/main/java/io/github/abc15018045126/sora/widget/style/CursorAnimator.kt +54 -0
- package/android/sora-editor/editor/src/main/java/io/github/abc15018045126/sora/widget/style/DiagnosticIndicatorStyle.kt +13 -0
- package/android/sora-editor/editor/src/main/java/io/github/abc15018045126/sora/widget/style/LineInfoPanelPosition.kt +9 -0
- package/android/sora-editor/editor/src/main/java/io/github/abc15018045126/sora/widget/style/LineInfoPanelPositionMode.kt +6 -0
- package/android/sora-editor/editor/src/main/java/io/github/abc15018045126/sora/widget/style/LineNumberTipTextProvider.kt +1 -1
- package/android/sora-editor/editor/src/main/java/io/github/abc15018045126/sora/widget/style/SelectionHandleStyle.kt +82 -0
- package/android/sora-editor/editor/src/main/java/io/github/abc15018045126/sora/widget/style/builtin/DefaultLineNumberTip.kt +1 -1
- package/android/sora-editor/editor/src/main/java/io/github/abc15018045126/sora/widget/style/builtin/FadeCursorAnimator.kt +143 -0
- package/android/sora-editor/editor/src/main/java/io/github/abc15018045126/sora/widget/style/builtin/HandleStyleDrop.kt +66 -0
- package/android/sora-editor/editor/src/main/java/io/github/abc15018045126/sora/widget/style/builtin/HandleStyleNone.kt +30 -0
- package/android/sora-editor/editor/src/main/java/io/github/abc15018045126/sora/widget/style/builtin/HandleStyleSideDrop.kt +62 -0
- package/android/sora-editor/editor/src/main/java/io/github/abc15018045126/sora/widget/style/builtin/MoveCursorAnimator.kt +127 -0
- package/android/sora-editor/editor/src/main/java/io/github/abc15018045126/sora/widget/style/builtin/ScaleCursorAnimator.kt +134 -0
- package/android/sora-editor/editor/src/main/res/anim/anim_diagnostic_tooltip_window_enter.xml +1 -1
- package/android/sora-editor/editor/src/main/res/anim/anim_diagnostic_tooltip_window_exit.xml +1 -1
- package/android/sora-editor/editor/src/main/res/anim/anim_text_action_popup_enter.xml +1 -1
- package/android/sora-editor/editor/src/main/res/anim/anim_text_action_popup_exit.xml +1 -1
- package/android/sora-editor/editor/src/main/res/drawable/baseline_more_vert_24.xml +1 -1
- package/android/sora-editor/editor/src/main/res/drawable/editor_text_select_start.xml +1 -1
- package/android/sora-editor/editor/src/main/res/drawable/ic_more_vert_black_20dp.xml +1 -1
- package/android/sora-editor/editor/src/main/res/drawable/ic_sora_handle_drop.xml +1 -1
- package/android/sora-editor/editor/src/main/res/drawable/line_break.xml +1 -1
- package/android/sora-editor/editor/src/main/res/drawable/magnifier_background.xml +1 -1
- package/android/sora-editor/editor/src/main/res/drawable/round_content_copy_20.xml +1 -1
- package/android/sora-editor/editor/src/main/res/drawable/round_content_cut_20.xml +1 -1
- package/android/sora-editor/editor/src/main/res/drawable/round_content_paste_20.xml +1 -1
- package/android/sora-editor/editor/src/main/res/drawable/round_save_20.xml +1 -1
- package/android/sora-editor/editor/src/main/res/drawable/round_select_all_20.xml +1 -1
- package/android/sora-editor/editor/src/main/res/drawable/softwrap_left.xml +1 -1
- package/android/sora-editor/editor/src/main/res/drawable/softwrap_right.xml +1 -1
- package/android/sora-editor/editor/src/main/res/layout/default_completion_result_item.xml +1 -1
- package/android/sora-editor/editor/src/main/res/layout/diagnostic_tooltip_window.xml +1 -1
- package/android/sora-editor/editor/src/main/res/layout/magnifier_popup.xml +1 -1
- package/android/sora-editor/editor/src/main/res/layout/text_compose_panel.xml +2 -1
- package/android/sora-editor/editor/src/main/res/values/attrs.xml +1 -1
- package/android/sora-editor/editor/src/main/res/values/colors.xml +1 -1
- package/android/sora-editor/editor/src/main/res/values/dimens.xml +1 -1
- package/android/sora-editor/editor/src/main/res/values/strings.xml +1 -1
- package/android/sora-editor/editor/src/main/res/values/style.xml +1 -1
- package/android/sora-editor/editor/src/main/res/values-night/colors.xml +1 -1
- package/android/sora-editor/editor/src/main/res/values-zh/strings.xml +1 -1
- package/android/sora-editor/language-textmate/src/main/AndroidManifest.xml +1 -1
- package/android/sora-editor/language-textmate/src/main/java/io/github/abc15018045126/sora/langs/textmate/MyState.kt +11 -0
- package/android/sora-editor/language-textmate/src/main/java/io/github/abc15018045126/sora/langs/textmate/TextMateAnalyzer.kt +269 -0
- package/android/sora-editor/language-textmate/src/main/java/io/github/abc15018045126/sora/langs/textmate/TextMateColorScheme.kt +298 -0
- package/android/sora-editor/language-textmate/src/main/java/io/github/abc15018045126/sora/langs/textmate/TextMateLanguage.kt +219 -0
- package/android/sora-editor/language-textmate/src/main/java/io/github/abc15018045126/sora/langs/textmate/TextMateNewlineHandler.kt +268 -0
- package/android/sora-editor/language-textmate/src/main/java/io/github/abc15018045126/sora/langs/textmate/TextMateSymbolPairMatch.kt +167 -0
- 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
- 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
- package/android/sora-editor/language-textmate/src/main/java/io/github/abc15018045126/sora/langs/textmate/folding/FoldingRegions.kt +93 -0
- package/android/sora-editor/language-textmate/src/main/java/io/github/abc15018045126/sora/langs/textmate/folding/IndentRange.kt +156 -0
- package/android/sora-editor/language-textmate/src/main/java/io/github/abc15018045126/sora/langs/textmate/folding/PreviousRegion.kt +7 -0
- package/android/sora-editor/language-textmate/src/main/java/io/github/abc15018045126/sora/langs/textmate/folding/RangesCollector.kt +25 -0
- package/android/sora-editor/language-textmate/src/main/java/io/github/abc15018045126/sora/langs/textmate/registry/FileProviderRegistry.kt +53 -0
- package/android/sora-editor/language-textmate/src/main/java/io/github/abc15018045126/sora/langs/textmate/registry/GrammarRegistry.kt +222 -0
- package/android/sora-editor/language-textmate/src/main/java/io/github/abc15018045126/sora/langs/textmate/registry/ThemeRegistry.kt +121 -0
- package/android/sora-editor/language-textmate/src/main/java/io/github/abc15018045126/sora/langs/textmate/registry/dsl/GrammarDefinitionDSL.kt +1 -1
- package/android/sora-editor/language-textmate/src/main/java/io/github/abc15018045126/sora/langs/textmate/registry/model/DefaultGrammarDefinition.kt +68 -0
- package/android/sora-editor/language-textmate/src/main/java/io/github/abc15018045126/sora/langs/textmate/registry/model/GrammarDefinition.kt +12 -0
- package/android/sora-editor/language-textmate/src/main/java/io/github/abc15018045126/sora/langs/textmate/registry/model/ThemeModel.kt +50 -0
- package/android/sora-editor/language-textmate/src/main/java/io/github/abc15018045126/sora/langs/textmate/registry/provider/AssetsFileResolver.java +1 -23
- package/android/sora-editor/language-textmate/src/main/java/io/github/abc15018045126/sora/langs/textmate/registry/provider/FileResolver.java +1 -23
- package/android/sora-editor/language-textmate/src/main/java/io/github/abc15018045126/sora/langs/textmate/registry/reader/LanguageDefinitionReader.java +1 -23
- package/android/sora-editor/language-textmate/src/main/java/io/github/abc15018045126/sora/langs/textmate/utils/ColorUtils.kt +57 -0
- package/android/sora-editor/language-textmate/src/main/java/io/github/abc15018045126/sora/langs/textmate/utils/MatcherUtils.kt +29 -0
- package/android/sora-editor/language-textmate/src/main/java/io/github/abc15018045126/sora/langs/textmate/utils/StringUtils.kt +46 -0
- package/android/sora-editor/oniguruma-native/src/main/java/io/github/abc15018045126/oniguruma/OnigNative.kt +95 -0
- package/android/src/main/java/com/abc15018045126/capacitor/soraeditor/SoraEditorPlugin.kt +342 -337
- package/android/src/main/java/com/abc15018045126/capacitor/soraeditor/compose/ComposeEditorActivity.kt +63 -63
- package/android/src/main/java/com/abc15018045126/capacitor/soraeditor/compose/EditorViewModel.kt +141 -5
- package/android/src/main/java/com/abc15018045126/capacitor/soraeditor/compose/ui/EditorColorSettings.kt +190 -0
- package/android/src/main/java/com/abc15018045126/capacitor/soraeditor/compose/ui/EditorScreen.kt +390 -234
- package/android/src/main/java/com/abc15018045126/capacitor/soraeditor/compose/ui/SoraEditorWrapper.kt +104 -104
- package/android/src/main/java/com/abc15018045126/capacitor/soraeditor/compose/ui/theme/Theme.kt +38 -38
- package/package.json +1 -1
- package/android/sora-editor/editor/src/main/java/io/github/abc15018045126/sora/I18nConfig.java +0 -69
- package/android/sora-editor/editor/src/main/java/io/github/abc15018045126/sora/annotations/Experimental.java +0 -41
- package/android/sora-editor/editor/src/main/java/io/github/abc15018045126/sora/annotations/InvalidateRequired.java +0 -40
- package/android/sora-editor/editor/src/main/java/io/github/abc15018045126/sora/annotations/UnsupportedUserUsage.java +0 -39
- package/android/sora-editor/editor/src/main/java/io/github/abc15018045126/sora/event/ClickEvent.java +0 -49
- package/android/sora-editor/editor/src/main/java/io/github/abc15018045126/sora/event/ContentChangeEvent.java +0 -122
- package/android/sora-editor/editor/src/main/java/io/github/abc15018045126/sora/event/DoubleClickEvent.java +0 -50
- package/android/sora-editor/editor/src/main/java/io/github/abc15018045126/sora/event/EditorKeyEvent.java +0 -157
- package/android/sora-editor/editor/src/main/java/io/github/abc15018045126/sora/event/EditorMotionEvent.java +0 -212
- package/android/sora-editor/editor/src/main/java/io/github/abc15018045126/sora/event/Event.java +0 -132
- package/android/sora-editor/editor/src/main/java/io/github/abc15018045126/sora/event/EventManager.java +0 -328
- package/android/sora-editor/editor/src/main/java/io/github/abc15018045126/sora/event/HandleStateChangeEvent.java +0 -67
- package/android/sora-editor/editor/src/main/java/io/github/abc15018045126/sora/event/InterceptTarget.java +0 -44
- package/android/sora-editor/editor/src/main/java/io/github/abc15018045126/sora/event/KeyBindingEvent.java +0 -77
- package/android/sora-editor/editor/src/main/java/io/github/abc15018045126/sora/event/LongPressEvent.java +0 -53
- package/android/sora-editor/editor/src/main/java/io/github/abc15018045126/sora/event/ResultedEvent.java +0 -63
- package/android/sora-editor/editor/src/main/java/io/github/abc15018045126/sora/event/ScrollEvent.java +0 -126
- package/android/sora-editor/editor/src/main/java/io/github/abc15018045126/sora/event/SelectionChangeEvent.java +0 -155
- package/android/sora-editor/editor/src/main/java/io/github/abc15018045126/sora/event/SnippetEvent.java +0 -92
- package/android/sora-editor/editor/src/main/java/io/github/abc15018045126/sora/event/SubscriptionReceipt.java +0 -67
- package/android/sora-editor/editor/src/main/java/io/github/abc15018045126/sora/event/Unsubscribe.java +0 -60
- package/android/sora-editor/editor/src/main/java/io/github/abc15018045126/sora/graphics/BubbleHelper.java +0 -76
- package/android/sora-editor/editor/src/main/java/io/github/abc15018045126/sora/graphics/BufferedDrawPoints.java +0 -66
- package/android/sora-editor/editor/src/main/java/io/github/abc15018045126/sora/graphics/GraphemeBoundsBreaker.java +0 -55
- package/android/sora-editor/editor/src/main/java/io/github/abc15018045126/sora/graphics/GraphicCharacter.java +0 -52
- package/android/sora-editor/editor/src/main/java/io/github/abc15018045126/sora/graphics/GraphicsCompat.java +0 -55
- package/android/sora-editor/editor/src/main/java/io/github/abc15018045126/sora/graphics/Paint.java +0 -159
- package/android/sora-editor/editor/src/main/java/io/github/abc15018045126/sora/graphics/RectUtils.java +0 -39
- package/android/sora-editor/editor/src/main/java/io/github/abc15018045126/sora/graphics/SingleCharacterWidths.java +0 -160
- package/android/sora-editor/editor/src/main/java/io/github/abc15018045126/sora/graphics/TextRow.java +0 -1402
- package/android/sora-editor/editor/src/main/java/io/github/abc15018045126/sora/lang/EmptyLanguage.java +0 -159
- package/android/sora-editor/editor/src/main/java/io/github/abc15018045126/sora/lang/Language.java +0 -215
- package/android/sora-editor/editor/src/main/java/io/github/abc15018045126/sora/lang/QuickQuoteHandler.java +0 -78
- package/android/sora-editor/editor/src/main/java/io/github/abc15018045126/sora/lang/analysis/AnalyzeManager.java +0 -97
- package/android/sora-editor/editor/src/main/java/io/github/abc15018045126/sora/lang/analysis/AsyncIncrementalAnalyzeManager.java +0 -604
- package/android/sora-editor/editor/src/main/java/io/github/abc15018045126/sora/lang/analysis/IncrementalAnalyzeManager.java +0 -120
- package/android/sora-editor/editor/src/main/java/io/github/abc15018045126/sora/lang/analysis/SimpleAnalyzeManager.java +0 -238
- package/android/sora-editor/editor/src/main/java/io/github/abc15018045126/sora/lang/analysis/StyleReceiver.java +0 -90
- package/android/sora-editor/editor/src/main/java/io/github/abc15018045126/sora/lang/brackets/BracketsProvider.java +0 -49
- package/android/sora-editor/editor/src/main/java/io/github/abc15018045126/sora/lang/brackets/OnlineBracketsMatcher.java +0 -112
- package/android/sora-editor/editor/src/main/java/io/github/abc15018045126/sora/lang/brackets/PairedBracket.java +0 -57
- package/android/sora-editor/editor/src/main/java/io/github/abc15018045126/sora/lang/brackets/SimpleBracketsCollector.java +0 -83
- package/android/sora-editor/editor/src/main/java/io/github/abc15018045126/sora/lang/completion/CompletionCancelledException.java +0 -44
- package/android/sora-editor/editor/src/main/java/io/github/abc15018045126/sora/lang/completion/CompletionHelper.java +0 -72
- package/android/sora-editor/editor/src/main/java/io/github/abc15018045126/sora/lang/completion/CompletionItem.java +0 -163
- package/android/sora-editor/editor/src/main/java/io/github/abc15018045126/sora/lang/completion/CompletionPublisher.java +0 -284
- package/android/sora-editor/editor/src/main/java/io/github/abc15018045126/sora/lang/completion/IdentifierAutoComplete.java +0 -359
- package/android/sora-editor/editor/src/main/java/io/github/abc15018045126/sora/lang/completion/MatchHelper.java +0 -131
- package/android/sora-editor/editor/src/main/java/io/github/abc15018045126/sora/lang/completion/SimpleCompletionItem.java +0 -112
- package/android/sora-editor/editor/src/main/java/io/github/abc15018045126/sora/lang/completion/SimpleSnippetCompletionItem.java +0 -71
- package/android/sora-editor/editor/src/main/java/io/github/abc15018045126/sora/lang/completion/snippet/CodeSnippet.java +0 -223
- package/android/sora-editor/editor/src/main/java/io/github/abc15018045126/sora/lang/completion/snippet/ConditionalFormat.java +0 -68
- package/android/sora-editor/editor/src/main/java/io/github/abc15018045126/sora/lang/completion/snippet/FormatString.java +0 -30
- package/android/sora-editor/editor/src/main/java/io/github/abc15018045126/sora/lang/completion/snippet/InterpolatedShellItem.java +0 -55
- package/android/sora-editor/editor/src/main/java/io/github/abc15018045126/sora/lang/completion/snippet/NextUpperCaseFormat.java +0 -28
- package/android/sora-editor/editor/src/main/java/io/github/abc15018045126/sora/lang/completion/snippet/NoFormat.java +0 -43
- package/android/sora-editor/editor/src/main/java/io/github/abc15018045126/sora/lang/completion/snippet/PlaceholderItem.java +0 -58
- package/android/sora-editor/editor/src/main/java/io/github/abc15018045126/sora/lang/completion/snippet/PlainTextItem.java +0 -56
- package/android/sora-editor/editor/src/main/java/io/github/abc15018045126/sora/lang/completion/snippet/SnippetItem.java +0 -70
- package/android/sora-editor/editor/src/main/java/io/github/abc15018045126/sora/lang/completion/snippet/Transform.java +0 -54
- package/android/sora-editor/editor/src/main/java/io/github/abc15018045126/sora/lang/completion/snippet/VariableItem.java +0 -81
- package/android/sora-editor/editor/src/main/java/io/github/abc15018045126/sora/lang/completion/snippet/parser/CodeSnippetParser.java +0 -571
- package/android/sora-editor/editor/src/main/java/io/github/abc15018045126/sora/lang/completion/snippet/parser/CodeSnippetTokenizer.java +0 -131
- package/android/sora-editor/editor/src/main/java/io/github/abc15018045126/sora/lang/completion/snippet/parser/Token.java +0 -47
- package/android/sora-editor/editor/src/main/java/io/github/abc15018045126/sora/lang/completion/snippet/parser/TokenType.java +0 -59
- package/android/sora-editor/editor/src/main/java/io/github/abc15018045126/sora/lang/diagnostic/DiagnosticRegion.java +0 -95
- package/android/sora-editor/editor/src/main/java/io/github/abc15018045126/sora/lang/diagnostic/DiagnosticsContainer.java +0 -148
- package/android/sora-editor/editor/src/main/java/io/github/abc15018045126/sora/lang/folding/FoldingRegion.java +0 -89
- package/android/sora-editor/editor/src/main/java/io/github/abc15018045126/sora/lang/format/AsyncFormatter.java +0 -198
- package/android/sora-editor/editor/src/main/java/io/github/abc15018045126/sora/lang/format/Formatter.java +0 -104
- package/android/sora-editor/editor/src/main/java/io/github/abc15018045126/sora/lang/smartEnter/NewlineHandleResult.java +0 -47
- package/android/sora-editor/editor/src/main/java/io/github/abc15018045126/sora/lang/smartEnter/NewlineHandler.java +0 -60
- package/android/sora-editor/editor/src/main/java/io/github/abc15018045126/sora/lang/styling/BlocksUpdater.java +0 -60
- package/android/sora-editor/editor/src/main/java/io/github/abc15018045126/sora/lang/styling/CodeBlock.java +0 -182
- package/android/sora-editor/editor/src/main/java/io/github/abc15018045126/sora/lang/styling/EmptyReader.java +0 -66
- package/android/sora-editor/editor/src/main/java/io/github/abc15018045126/sora/lang/styling/MappedSpanUpdater.java +0 -190
- package/android/sora-editor/editor/src/main/java/io/github/abc15018045126/sora/lang/styling/MappedSpans.java +0 -264
- package/android/sora-editor/editor/src/main/java/io/github/abc15018045126/sora/lang/styling/Span.java +0 -203
- package/android/sora-editor/editor/src/main/java/io/github/abc15018045126/sora/lang/styling/SpanFactory.java +0 -73
- package/android/sora-editor/editor/src/main/java/io/github/abc15018045126/sora/lang/styling/Spans.java +0 -133
- package/android/sora-editor/editor/src/main/java/io/github/abc15018045126/sora/lang/styling/Styles.java +0 -280
- package/android/sora-editor/editor/src/main/java/io/github/abc15018045126/sora/lang/styling/StylesUtils.java +0 -108
- package/android/sora-editor/editor/src/main/java/io/github/abc15018045126/sora/lang/styling/TextStyle.java +0 -141
- package/android/sora-editor/editor/src/main/java/io/github/abc15018045126/sora/lang/styling/span/SpanExtAttrs.java +0 -67
- package/android/sora-editor/editor/src/main/java/io/github/abc15018045126/sora/lang/styling/span/internal/NoExtSpanImpl.java +0 -165
- package/android/sora-editor/editor/src/main/java/io/github/abc15018045126/sora/lang/styling/span/internal/SpanImpl.java +0 -188
- package/android/sora-editor/editor/src/main/java/io/github/abc15018045126/sora/lang/util/BaseAnalyzeManager.java +0 -95
- package/android/sora-editor/editor/src/main/java/io/github/abc15018045126/sora/lang/util/PlainTextAnalyzeManager.java +0 -65
- package/android/sora-editor/editor/src/main/java/io/github/abc15018045126/sora/lang/util/PlainTextSpans.java +0 -78
- package/android/sora-editor/editor/src/main/java/io/github/abc15018045126/sora/text/CachedIndexer.java +0 -458
- package/android/sora-editor/editor/src/main/java/io/github/abc15018045126/sora/text/CharArrayWrapper.java +0 -81
- package/android/sora-editor/editor/src/main/java/io/github/abc15018045126/sora/text/CharPosition.java +0 -150
- package/android/sora-editor/editor/src/main/java/io/github/abc15018045126/sora/text/CharSequenceIterator.java +0 -109
- package/android/sora-editor/editor/src/main/java/io/github/abc15018045126/sora/text/ComposingText.java +0 -91
- package/android/sora-editor/editor/src/main/java/io/github/abc15018045126/sora/text/Content.java +0 -1306
- package/android/sora-editor/editor/src/main/java/io/github/abc15018045126/sora/text/ContentIO.java +0 -173
- package/android/sora-editor/editor/src/main/java/io/github/abc15018045126/sora/text/ContentLine.java +0 -405
- package/android/sora-editor/editor/src/main/java/io/github/abc15018045126/sora/text/ContentListener.java +0 -81
- package/android/sora-editor/editor/src/main/java/io/github/abc15018045126/sora/text/ContentReference.java +0 -212
- package/android/sora-editor/editor/src/main/java/io/github/abc15018045126/sora/text/Cursor.java +0 -374
- package/android/sora-editor/editor/src/main/java/io/github/abc15018045126/sora/text/FunctionCharacters.java +0 -71
- package/android/sora-editor/editor/src/main/java/io/github/abc15018045126/sora/text/ICUUtils.java +0 -85
- package/android/sora-editor/editor/src/main/java/io/github/abc15018045126/sora/text/Indexer.java +0 -92
- package/android/sora-editor/editor/src/main/java/io/github/abc15018045126/sora/text/InsertTextHelper.java +0 -117
- package/android/sora-editor/editor/src/main/java/io/github/abc15018045126/sora/text/LineSeparator.java +0 -123
- package/android/sora-editor/editor/src/main/java/io/github/abc15018045126/sora/text/SpanRecycler.java +0 -103
- package/android/sora-editor/editor/src/main/java/io/github/abc15018045126/sora/text/TextLayoutHelper.java +0 -122
- package/android/sora-editor/editor/src/main/java/io/github/abc15018045126/sora/text/TextRange.java +0 -85
- package/android/sora-editor/editor/src/main/java/io/github/abc15018045126/sora/text/TextReference.java +0 -132
- package/android/sora-editor/editor/src/main/java/io/github/abc15018045126/sora/text/TextUtils.java +0 -196
- package/android/sora-editor/editor/src/main/java/io/github/abc15018045126/sora/text/TextUtilsP.java +0 -236
- package/android/sora-editor/editor/src/main/java/io/github/abc15018045126/sora/text/UndoManager.java +0 -750
- package/android/sora-editor/editor/src/main/java/io/github/abc15018045126/sora/text/UnicodeIterator.java +0 -106
- package/android/sora-editor/editor/src/main/java/io/github/abc15018045126/sora/text/bidi/BidiRequirementChecker.java +0 -31
- package/android/sora-editor/editor/src/main/java/io/github/abc15018045126/sora/text/bidi/ContentBidi.java +0 -143
- package/android/sora-editor/editor/src/main/java/io/github/abc15018045126/sora/text/bidi/Directions.java +0 -79
- package/android/sora-editor/editor/src/main/java/io/github/abc15018045126/sora/text/bidi/IDirections.java +0 -39
- package/android/sora-editor/editor/src/main/java/io/github/abc15018045126/sora/text/bidi/TextBidi.java +0 -93
- package/android/sora-editor/editor/src/main/java/io/github/abc15018045126/sora/text/bidi/VisualDirections.java +0 -88
- package/android/sora-editor/editor/src/main/java/io/github/abc15018045126/sora/text/breaker/WordBreaker.java +0 -47
- package/android/sora-editor/editor/src/main/java/io/github/abc15018045126/sora/text/breaker/WordBreakerEmpty.java +0 -38
- package/android/sora-editor/editor/src/main/java/io/github/abc15018045126/sora/text/breaker/WordBreakerIcu.java +0 -62
- package/android/sora-editor/editor/src/main/java/io/github/abc15018045126/sora/text/breaker/WordBreakerProgram.java +0 -54
- package/android/sora-editor/editor/src/main/java/io/github/abc15018045126/sora/text/method/KeyMetaStates.java +0 -93
- package/android/sora-editor/editor/src/main/java/io/github/abc15018045126/sora/util/BinaryHeap.java +0 -239
- package/android/sora-editor/editor/src/main/java/io/github/abc15018045126/sora/util/BlockIntList.java +0 -366
- package/android/sora-editor/editor/src/main/java/io/github/abc15018045126/sora/util/ClipDataUtils.java +0 -55
- package/android/sora-editor/editor/src/main/java/io/github/abc15018045126/sora/util/Floats.java +0 -33
- package/android/sora-editor/editor/src/main/java/io/github/abc15018045126/sora/util/IntPair.java +0 -96
- package/android/sora-editor/editor/src/main/java/io/github/abc15018045126/sora/util/Logger.java +0 -109
- package/android/sora-editor/editor/src/main/java/io/github/abc15018045126/sora/util/LongArrayList.java +0 -132
- package/android/sora-editor/editor/src/main/java/io/github/abc15018045126/sora/util/MyCharacter.java +0 -143
- package/android/sora-editor/editor/src/main/java/io/github/abc15018045126/sora/util/Numbers.java +0 -123
- package/android/sora-editor/editor/src/main/java/io/github/abc15018045126/sora/util/ObjectPool.java +0 -77
- package/android/sora-editor/editor/src/main/java/io/github/abc15018045126/sora/util/RegionIterator.java +0 -162
- package/android/sora-editor/editor/src/main/java/io/github/abc15018045126/sora/util/SegmentList.java +0 -323
- package/android/sora-editor/editor/src/main/java/io/github/abc15018045126/sora/util/TemporaryCharBuffer.java +0 -52
- package/android/sora-editor/editor/src/main/java/io/github/abc15018045126/sora/util/TemporaryFloatBuffer.java +0 -68
- package/android/sora-editor/editor/src/main/java/io/github/abc15018045126/sora/util/ThemeUtils.java +0 -38
- package/android/sora-editor/editor/src/main/java/io/github/abc15018045126/sora/util/TrieTree.java +0 -177
- package/android/sora-editor/editor/src/main/java/io/github/abc15018045126/sora/util/ViewUtils.java +0 -67
- package/android/sora-editor/editor/src/main/java/io/github/abc15018045126/sora/util/regex/RegexBackrefGrammar.java +0 -40
- package/android/sora-editor/editor/src/main/java/io/github/abc15018045126/sora/util/regex/RegexBackrefHelper.java +0 -53
- package/android/sora-editor/editor/src/main/java/io/github/abc15018045126/sora/util/regex/RegexBackrefParser.java +0 -119
- package/android/sora-editor/editor/src/main/java/io/github/abc15018045126/sora/util/regex/RegexBackrefToken.java +0 -65
- package/android/sora-editor/editor/src/main/java/io/github/abc15018045126/sora/widget/CodeEditor.java +0 -5433
- package/android/sora-editor/editor/src/main/java/io/github/abc15018045126/sora/widget/CursorBlink.java +0 -98
- package/android/sora-editor/editor/src/main/java/io/github/abc15018045126/sora/widget/DirectAccessProps.java +0 -561
- package/android/sora-editor/editor/src/main/java/io/github/abc15018045126/sora/widget/EditorInputConnection.java +0 -714
- package/android/sora-editor/editor/src/main/java/io/github/abc15018045126/sora/widget/EditorKeyEventHandler.java +0 -646
- package/android/sora-editor/editor/src/main/java/io/github/abc15018045126/sora/widget/EditorRenderer.java +0 -2620
- package/android/sora-editor/editor/src/main/java/io/github/abc15018045126/sora/widget/EditorScroller.java +0 -119
- package/android/sora-editor/editor/src/main/java/io/github/abc15018045126/sora/widget/EditorSearcher.java +0 -553
- package/android/sora-editor/editor/src/main/java/io/github/abc15018045126/sora/widget/EditorStyleDelegate.java +0 -143
- package/android/sora-editor/editor/src/main/java/io/github/abc15018045126/sora/widget/EditorTouchEventHandler.java +0 -1306
- package/android/sora-editor/editor/src/main/java/io/github/abc15018045126/sora/widget/LanguageHelper.java +0 -66
- package/android/sora-editor/editor/src/main/java/io/github/abc15018045126/sora/widget/SymbolInputView.java +0 -154
- package/android/sora-editor/editor/src/main/java/io/github/abc15018045126/sora/widget/SymbolPairMatch.java +0 -334
- package/android/sora-editor/editor/src/main/java/io/github/abc15018045126/sora/widget/base/EditorPopupWindow.java +0 -351
- package/android/sora-editor/editor/src/main/java/io/github/abc15018045126/sora/widget/component/CompletionLayout.java +0 -89
- package/android/sora-editor/editor/src/main/java/io/github/abc15018045126/sora/widget/component/DefaultCompletionItemAdapter.java +0 -76
- package/android/sora-editor/editor/src/main/java/io/github/abc15018045126/sora/widget/component/DefaultCompletionLayout.java +0 -206
- package/android/sora-editor/editor/src/main/java/io/github/abc15018045126/sora/widget/component/EditorAutoCompletion.java +0 -684
- package/android/sora-editor/editor/src/main/java/io/github/abc15018045126/sora/widget/component/EditorCompletionAdapter.java +0 -118
- package/android/sora-editor/editor/src/main/java/io/github/abc15018045126/sora/widget/component/EditorTextActionWindow.java +0 -362
- package/android/sora-editor/editor/src/main/java/io/github/abc15018045126/sora/widget/component/Magnifier.java +0 -396
- package/android/sora-editor/editor/src/main/java/io/github/abc15018045126/sora/widget/layout/AbstractLayout.java +0 -158
- package/android/sora-editor/editor/src/main/java/io/github/abc15018045126/sora/widget/layout/LineBreakLayout.java +0 -393
- package/android/sora-editor/editor/src/main/java/io/github/abc15018045126/sora/widget/layout/Row.java +0 -77
- package/android/sora-editor/editor/src/main/java/io/github/abc15018045126/sora/widget/layout/RowElement.java +0 -70
- package/android/sora-editor/editor/src/main/java/io/github/abc15018045126/sora/widget/layout/RowElementTypes.java +0 -41
- package/android/sora-editor/editor/src/main/java/io/github/abc15018045126/sora/widget/layout/RowIterator.java +0 -67
- package/android/sora-editor/editor/src/main/java/io/github/abc15018045126/sora/widget/layout/ViewMeasureHelper.java +0 -123
- package/android/sora-editor/editor/src/main/java/io/github/abc15018045126/sora/widget/layout/WordwrapLayout.java +0 -683
- package/android/sora-editor/editor/src/main/java/io/github/abc15018045126/sora/widget/rendering/RenderingConstants.java +0 -79
- package/android/sora-editor/editor/src/main/java/io/github/abc15018045126/sora/widget/rendering/TextAdvancesCache.java +0 -122
- package/android/sora-editor/editor/src/main/java/io/github/abc15018045126/sora/widget/rendering/package-info.java +0 -30
- package/android/sora-editor/editor/src/main/java/io/github/abc15018045126/sora/widget/schemes/EditorColorScheme.java +0 -544
- package/android/sora-editor/editor/src/main/java/io/github/abc15018045126/sora/widget/schemes/SchemeDarcula.java +0 -70
- package/android/sora-editor/editor/src/main/java/io/github/abc15018045126/sora/widget/schemes/SchemeEclipse.java +0 -60
- package/android/sora-editor/editor/src/main/java/io/github/abc15018045126/sora/widget/schemes/SchemeGitHub.java +0 -54
- package/android/sora-editor/editor/src/main/java/io/github/abc15018045126/sora/widget/schemes/SchemeNotepadXX.java +0 -60
- package/android/sora-editor/editor/src/main/java/io/github/abc15018045126/sora/widget/schemes/SchemeVS2019.java +0 -70
- package/android/sora-editor/editor/src/main/java/io/github/abc15018045126/sora/widget/snippet/TransformApplier.java +0 -134
- package/android/sora-editor/editor/src/main/java/io/github/abc15018045126/sora/widget/snippet/variable/ClipboardBasedSnippetVariableResolver.java +0 -61
- package/android/sora-editor/editor/src/main/java/io/github/abc15018045126/sora/widget/snippet/variable/CommentBasedSnippetVariableResolver.java +0 -77
- package/android/sora-editor/editor/src/main/java/io/github/abc15018045126/sora/widget/snippet/variable/CompositeSnippetVariableResolver.java +0 -79
- package/android/sora-editor/editor/src/main/java/io/github/abc15018045126/sora/widget/snippet/variable/EditorBasedSnippetVariableResolver.java +0 -76
- package/android/sora-editor/editor/src/main/java/io/github/abc15018045126/sora/widget/snippet/variable/FileBasedSnippetVariableResolver.java +0 -39
- package/android/sora-editor/editor/src/main/java/io/github/abc15018045126/sora/widget/snippet/variable/ISnippetVariableResolver.java +0 -49
- package/android/sora-editor/editor/src/main/java/io/github/abc15018045126/sora/widget/snippet/variable/RandomBasedSnippetVariableResolver.java +0 -55
- package/android/sora-editor/editor/src/main/java/io/github/abc15018045126/sora/widget/snippet/variable/TimeBasedSnippetVariableResolver.java +0 -101
- package/android/sora-editor/editor/src/main/java/io/github/abc15018045126/sora/widget/snippet/variable/WorkspaceBasedSnippetVariableResolver.java +0 -39
- package/android/sora-editor/editor/src/main/java/io/github/abc15018045126/sora/widget/style/CursorAnimator.java +0 -78
- package/android/sora-editor/editor/src/main/java/io/github/abc15018045126/sora/widget/style/DiagnosticIndicatorStyle.java +0 -37
- package/android/sora-editor/editor/src/main/java/io/github/abc15018045126/sora/widget/style/LineInfoPanelPosition.java +0 -33
- package/android/sora-editor/editor/src/main/java/io/github/abc15018045126/sora/widget/style/LineInfoPanelPositionMode.java +0 -30
- package/android/sora-editor/editor/src/main/java/io/github/abc15018045126/sora/widget/style/SelectionHandleStyle.java +0 -98
- package/android/sora-editor/editor/src/main/java/io/github/abc15018045126/sora/widget/style/builtin/FadeCursorAnimator.java +0 -179
- package/android/sora-editor/editor/src/main/java/io/github/abc15018045126/sora/widget/style/builtin/HandleStyleDrop.java +0 -80
- package/android/sora-editor/editor/src/main/java/io/github/abc15018045126/sora/widget/style/builtin/HandleStyleNone.java +0 -28
- package/android/sora-editor/editor/src/main/java/io/github/abc15018045126/sora/widget/style/builtin/HandleStyleSideDrop.java +0 -60
- package/android/sora-editor/editor/src/main/java/io/github/abc15018045126/sora/widget/style/builtin/MoveCursorAnimator.java +0 -159
- package/android/sora-editor/editor/src/main/java/io/github/abc15018045126/sora/widget/style/builtin/ScaleCursorAnimator.java +0 -166
- package/android/sora-editor/language-textmate/src/main/java/io/github/abc15018045126/sora/langs/textmate/MyState.java +0 -46
- package/android/sora-editor/language-textmate/src/main/java/io/github/abc15018045126/sora/langs/textmate/TextMateAnalyzer.java +0 -301
- package/android/sora-editor/language-textmate/src/main/java/io/github/abc15018045126/sora/langs/textmate/TextMateColorScheme.java +0 -369
- package/android/sora-editor/language-textmate/src/main/java/io/github/abc15018045126/sora/langs/textmate/TextMateLanguage.java +0 -314
- package/android/sora-editor/language-textmate/src/main/java/io/github/abc15018045126/sora/langs/textmate/TextMateNewlineHandler.java +0 -547
- package/android/sora-editor/language-textmate/src/main/java/io/github/abc15018045126/sora/langs/textmate/TextMateSymbolPairMatch.java +0 -240
- package/android/sora-editor/language-textmate/src/main/java/io/github/abc15018045126/sora/langs/textmate/folding/FoldingHelper.java +0 -35
- package/android/sora-editor/language-textmate/src/main/java/io/github/abc15018045126/sora/langs/textmate/folding/FoldingRegion.java +0 -51
- package/android/sora-editor/language-textmate/src/main/java/io/github/abc15018045126/sora/langs/textmate/folding/FoldingRegions.java +0 -96
- package/android/sora-editor/language-textmate/src/main/java/io/github/abc15018045126/sora/langs/textmate/folding/IndentRange.java +0 -169
- package/android/sora-editor/language-textmate/src/main/java/io/github/abc15018045126/sora/langs/textmate/folding/PreviousRegion.java +0 -41
- package/android/sora-editor/language-textmate/src/main/java/io/github/abc15018045126/sora/langs/textmate/folding/RangesCollector.java +0 -71
- package/android/sora-editor/language-textmate/src/main/java/io/github/abc15018045126/sora/langs/textmate/registry/FileProviderRegistry.java +0 -83
- package/android/sora-editor/language-textmate/src/main/java/io/github/abc15018045126/sora/langs/textmate/registry/GrammarRegistry.java +0 -321
- package/android/sora-editor/language-textmate/src/main/java/io/github/abc15018045126/sora/langs/textmate/registry/ThemeRegistry.java +0 -186
- package/android/sora-editor/language-textmate/src/main/java/io/github/abc15018045126/sora/langs/textmate/registry/model/DefaultGrammarDefinition.java +0 -121
- package/android/sora-editor/language-textmate/src/main/java/io/github/abc15018045126/sora/langs/textmate/registry/model/GrammarDefinition.java +0 -51
- package/android/sora-editor/language-textmate/src/main/java/io/github/abc15018045126/sora/langs/textmate/registry/model/ThemeModel.java +0 -106
- package/android/sora-editor/language-textmate/src/main/java/io/github/abc15018045126/sora/langs/textmate/utils/ColorUtils.java +0 -79
- package/android/sora-editor/language-textmate/src/main/java/io/github/abc15018045126/sora/langs/textmate/utils/MatcherUtils.java +0 -54
- package/android/sora-editor/language-textmate/src/main/java/io/github/abc15018045126/sora/langs/textmate/utils/StringUtils.java +0 -64
- package/android/sora-editor/oniguruma-native/src/main/java/io/github/abc15018045126/oniguruma/OnigNative.java +0 -121
package/android/sora-editor/editor/src/main/java/io/github/abc15018045126/sora/text/Content.java
DELETED
|
@@ -1,1306 +0,0 @@
|
|
|
1
|
-
/*
|
|
2
|
-
* sora-editor - the awesome code editor for Android
|
|
3
|
-
* https://github.com/abc15018045126/sora-editor
|
|
4
|
-
* Copyright (C) 2020-2024 abc15018045126
|
|
5
|
-
*
|
|
6
|
-
* This library is free software; you can redistribute it and/or
|
|
7
|
-
* modify it under the terms of the GNU Lesser General Public
|
|
8
|
-
* License as published by the Free Software Foundation; either
|
|
9
|
-
* version 2.1 of the License, or (at your option) any later version.
|
|
10
|
-
*
|
|
11
|
-
* This library is distributed in the hope that it will be useful,
|
|
12
|
-
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
13
|
-
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
|
14
|
-
* Lesser General Public License for more details.
|
|
15
|
-
*
|
|
16
|
-
* You should have received a copy of the GNU Lesser General Public
|
|
17
|
-
* License along with this library; if not, write to the Free Software
|
|
18
|
-
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301
|
|
19
|
-
* USA
|
|
20
|
-
*
|
|
21
|
-
* Please contact abc15018045126 by email 2073412493@qq.com if you need
|
|
22
|
-
* additional information or have any questions
|
|
23
|
-
*/
|
|
24
|
-
package io.github.abc15018045126.sora.text;
|
|
25
|
-
|
|
26
|
-
import androidx.annotation.NonNull;
|
|
27
|
-
import androidx.annotation.Nullable;
|
|
28
|
-
|
|
29
|
-
import java.util.ArrayList;
|
|
30
|
-
import java.util.LinkedList;
|
|
31
|
-
import java.util.List;
|
|
32
|
-
import java.util.Objects;
|
|
33
|
-
import java.util.concurrent.atomic.AtomicLong;
|
|
34
|
-
import java.util.concurrent.locks.ReadWriteLock;
|
|
35
|
-
import java.util.concurrent.locks.ReentrantReadWriteLock;
|
|
36
|
-
|
|
37
|
-
import io.github.abc15018045126.sora.text.bidi.ContentBidi;
|
|
38
|
-
import io.github.abc15018045126.sora.text.bidi.Directions;
|
|
39
|
-
|
|
40
|
-
/**
|
|
41
|
-
* This class saves the text content for editor and maintains line widths.
|
|
42
|
-
* It is thread-safe by default. Use {@link #Content(CharSequence, boolean)} constructor to
|
|
43
|
-
* create a non thread-safe one.
|
|
44
|
-
*
|
|
45
|
-
* @author abc15018045126
|
|
46
|
-
*/
|
|
47
|
-
public class Content implements CharSequence {
|
|
48
|
-
|
|
49
|
-
public final static int DEFAULT_MAX_UNDO_STACK_SIZE = 500;
|
|
50
|
-
public final static int DEFAULT_LIST_CAPACITY = 1000;
|
|
51
|
-
|
|
52
|
-
public final static int CHECK_TYPE_READ = 0;
|
|
53
|
-
public final static int CHECK_TYPE_CURSOR = 1;
|
|
54
|
-
public final static int CHECK_TYPE_INDEX = 2;
|
|
55
|
-
|
|
56
|
-
private static int sInitialListCapacity;
|
|
57
|
-
|
|
58
|
-
static {
|
|
59
|
-
setInitialLineCapacity(DEFAULT_LIST_CAPACITY);
|
|
60
|
-
}
|
|
61
|
-
|
|
62
|
-
private final List<ContentLine> lines;
|
|
63
|
-
private final List<ContentListener> contentListeners;
|
|
64
|
-
private final ReadWriteLock lock;
|
|
65
|
-
private int textLength;
|
|
66
|
-
private int nestedBatchEdit;
|
|
67
|
-
private final AtomicLong documentVersion = new AtomicLong(1L);
|
|
68
|
-
private final Indexer indexer;
|
|
69
|
-
private final ContentBidi bidi;
|
|
70
|
-
private UndoManager undoManager;
|
|
71
|
-
private Cursor cursor;
|
|
72
|
-
|
|
73
|
-
/**
|
|
74
|
-
* This constructor will create a Content object with no text
|
|
75
|
-
*/
|
|
76
|
-
public Content() {
|
|
77
|
-
this(null);
|
|
78
|
-
}
|
|
79
|
-
|
|
80
|
-
/**
|
|
81
|
-
* This constructor will create a Content object with the given source.
|
|
82
|
-
* If you give us null,it will just create an empty Content object
|
|
83
|
-
*
|
|
84
|
-
* @param src The source of Content
|
|
85
|
-
*/
|
|
86
|
-
public Content(CharSequence src) {
|
|
87
|
-
this(src, true);
|
|
88
|
-
}
|
|
89
|
-
|
|
90
|
-
/**
|
|
91
|
-
* Create a Content object with the given content text. Specify whether thread-safe access
|
|
92
|
-
* to single instance is enabled.
|
|
93
|
-
*/
|
|
94
|
-
public Content(CharSequence src, boolean threadSafe) {
|
|
95
|
-
if (src == null) {
|
|
96
|
-
src = "";
|
|
97
|
-
}
|
|
98
|
-
if (threadSafe) {
|
|
99
|
-
lock = new ReentrantReadWriteLock();
|
|
100
|
-
} else {
|
|
101
|
-
lock = null;
|
|
102
|
-
}
|
|
103
|
-
textLength = 0;
|
|
104
|
-
nestedBatchEdit = 0;
|
|
105
|
-
lines = new ArrayList<>(getInitialLineCapacity());
|
|
106
|
-
lines.add(new ContentLine());
|
|
107
|
-
contentListeners = new ArrayList<>();
|
|
108
|
-
bidi = new ContentBidi(this);
|
|
109
|
-
undoManager = new UndoManager();
|
|
110
|
-
setMaxUndoStackSize(Content.DEFAULT_MAX_UNDO_STACK_SIZE);
|
|
111
|
-
indexer = new CachedIndexer(this);
|
|
112
|
-
if (src.length() == 0) {
|
|
113
|
-
setUndoEnabled(true);
|
|
114
|
-
return;
|
|
115
|
-
}
|
|
116
|
-
setUndoEnabled(false);
|
|
117
|
-
insert(0, 0, src);
|
|
118
|
-
setUndoEnabled(true);
|
|
119
|
-
}
|
|
120
|
-
|
|
121
|
-
/**
|
|
122
|
-
* Returns the default capacity of text line list
|
|
123
|
-
*
|
|
124
|
-
* @return Default capacity
|
|
125
|
-
*/
|
|
126
|
-
public static int getInitialLineCapacity() {
|
|
127
|
-
return Content.sInitialListCapacity;
|
|
128
|
-
}
|
|
129
|
-
|
|
130
|
-
/**
|
|
131
|
-
* Set the default capacity of text line list
|
|
132
|
-
*
|
|
133
|
-
* @param capacity Default capacity
|
|
134
|
-
*/
|
|
135
|
-
public static void setInitialLineCapacity(int capacity) {
|
|
136
|
-
if (capacity <= 0) {
|
|
137
|
-
throw new IllegalArgumentException("capacity can not be negative or zero");
|
|
138
|
-
}
|
|
139
|
-
sInitialListCapacity = capacity;
|
|
140
|
-
}
|
|
141
|
-
|
|
142
|
-
/**
|
|
143
|
-
* Test whether the two ContentLine have the same text
|
|
144
|
-
*
|
|
145
|
-
* @param a ContentLine
|
|
146
|
-
* @param b another ContentLine
|
|
147
|
-
* @return Whether the text in the given two lines equal
|
|
148
|
-
*/
|
|
149
|
-
private static boolean textEquals(@NonNull ContentLine a, @NonNull ContentLine b) {
|
|
150
|
-
if (a.length() != b.length()) {
|
|
151
|
-
return false;
|
|
152
|
-
}
|
|
153
|
-
if (a == b) {
|
|
154
|
-
return true;
|
|
155
|
-
}
|
|
156
|
-
for (int i = 0; i < a.length(); i++) {
|
|
157
|
-
if (a.charAt(i) != b.charAt(i)) {
|
|
158
|
-
return false;
|
|
159
|
-
}
|
|
160
|
-
}
|
|
161
|
-
return true;
|
|
162
|
-
}
|
|
163
|
-
|
|
164
|
-
public boolean isThreadSafe() {
|
|
165
|
-
return lock != null;
|
|
166
|
-
}
|
|
167
|
-
|
|
168
|
-
protected void lock(boolean write) {
|
|
169
|
-
if (lock == null) {
|
|
170
|
-
return;
|
|
171
|
-
}
|
|
172
|
-
(write ? lock.writeLock() : lock.readLock()).lock();
|
|
173
|
-
}
|
|
174
|
-
|
|
175
|
-
protected void unlock(boolean write) {
|
|
176
|
-
if (lock == null) {
|
|
177
|
-
return;
|
|
178
|
-
}
|
|
179
|
-
(write ? lock.writeLock() : lock.readLock()).unlock();
|
|
180
|
-
}
|
|
181
|
-
|
|
182
|
-
@Override
|
|
183
|
-
public char charAt(int index) {
|
|
184
|
-
checkIndex(index, CHECK_TYPE_READ);
|
|
185
|
-
lock(false);
|
|
186
|
-
try {
|
|
187
|
-
var p = getIndexer().getCharPosition(index);
|
|
188
|
-
return lines.get(p.line).charAt(p.column);
|
|
189
|
-
} finally {
|
|
190
|
-
unlock(false);
|
|
191
|
-
}
|
|
192
|
-
}
|
|
193
|
-
|
|
194
|
-
/**
|
|
195
|
-
* Get the character at the given position
|
|
196
|
-
*
|
|
197
|
-
* @param line The line position of character
|
|
198
|
-
* @param column The column position of character
|
|
199
|
-
* @return The character at the given position
|
|
200
|
-
*/
|
|
201
|
-
public char charAt(int line, int column) {
|
|
202
|
-
lock(false);
|
|
203
|
-
try {
|
|
204
|
-
checkLineAndColumn(line, column, CHECK_TYPE_READ);
|
|
205
|
-
return lines.get(line).charAt(column);
|
|
206
|
-
} finally {
|
|
207
|
-
unlock(false);
|
|
208
|
-
}
|
|
209
|
-
}
|
|
210
|
-
|
|
211
|
-
@Override
|
|
212
|
-
public int length() {
|
|
213
|
-
return textLength;
|
|
214
|
-
}
|
|
215
|
-
|
|
216
|
-
@NonNull
|
|
217
|
-
@Override
|
|
218
|
-
public CharSequence subSequence(int start, int end) {
|
|
219
|
-
if (start > end) {
|
|
220
|
-
throw new StringIndexOutOfBoundsException("start > end");
|
|
221
|
-
}
|
|
222
|
-
lock(false);
|
|
223
|
-
try {
|
|
224
|
-
var s = getIndexer().getCharPosition(start);
|
|
225
|
-
var e = getIndexer().getCharPosition(end);
|
|
226
|
-
return subContentInternal(s.getLine(), s.getColumn(), e.getLine(), e.getColumn(), true);
|
|
227
|
-
} finally {
|
|
228
|
-
unlock(false);
|
|
229
|
-
}
|
|
230
|
-
}
|
|
231
|
-
|
|
232
|
-
public String substring(int start, int end) {
|
|
233
|
-
if (start > end) {
|
|
234
|
-
throw new StringIndexOutOfBoundsException("start > end");
|
|
235
|
-
}
|
|
236
|
-
lock(false);
|
|
237
|
-
try {
|
|
238
|
-
var s = getIndexer().getCharPosition(start);
|
|
239
|
-
var e = getIndexer().getCharPosition(end);
|
|
240
|
-
return subStringBuilder(s.getLine(), s.getColumn(), e.getLine(), e.getColumn(), end - start + 1).toString();
|
|
241
|
-
} finally {
|
|
242
|
-
unlock(false);
|
|
243
|
-
}
|
|
244
|
-
}
|
|
245
|
-
|
|
246
|
-
/**
|
|
247
|
-
* Get raw data of line.
|
|
248
|
-
* The result should not be modified by code out of editor framework.
|
|
249
|
-
*
|
|
250
|
-
* @param line Line
|
|
251
|
-
* @return Raw ContentLine used by Content
|
|
252
|
-
*/
|
|
253
|
-
public ContentLine getLine(int line) {
|
|
254
|
-
lock(false);
|
|
255
|
-
try {
|
|
256
|
-
return lines.get(line);
|
|
257
|
-
} finally {
|
|
258
|
-
unlock(false);
|
|
259
|
-
}
|
|
260
|
-
}
|
|
261
|
-
|
|
262
|
-
ContentLine getLineUnsafe(int line) {
|
|
263
|
-
return lines.get(line);
|
|
264
|
-
}
|
|
265
|
-
|
|
266
|
-
/**
|
|
267
|
-
* Get how many lines there are
|
|
268
|
-
*
|
|
269
|
-
* @return Line count
|
|
270
|
-
*/
|
|
271
|
-
public int getLineCount() {
|
|
272
|
-
return lines.size();
|
|
273
|
-
}
|
|
274
|
-
|
|
275
|
-
/**
|
|
276
|
-
* Get how many characters is on the given line
|
|
277
|
-
* If (line < 0 or line >= getLineCount()),it will throw a IndexOutOfBoundsException
|
|
278
|
-
*
|
|
279
|
-
* @param line The line to get
|
|
280
|
-
* @return Character count on line
|
|
281
|
-
*/
|
|
282
|
-
public int getColumnCount(int line) {
|
|
283
|
-
return getLine(line).length();
|
|
284
|
-
}
|
|
285
|
-
|
|
286
|
-
/**
|
|
287
|
-
* Get the given line text without '\n' character
|
|
288
|
-
*
|
|
289
|
-
* @param line The line to get
|
|
290
|
-
* @return New String object of this line
|
|
291
|
-
*/
|
|
292
|
-
public String getLineString(int line) {
|
|
293
|
-
lock(false);
|
|
294
|
-
try {
|
|
295
|
-
checkLine(line);
|
|
296
|
-
return lines.get(line).toString();
|
|
297
|
-
} finally {
|
|
298
|
-
unlock(false);
|
|
299
|
-
}
|
|
300
|
-
}
|
|
301
|
-
|
|
302
|
-
/**
|
|
303
|
-
* Get region of the given line
|
|
304
|
-
*
|
|
305
|
-
* @param dest Destination of characters
|
|
306
|
-
* @param offset Offset in dest to store the chars
|
|
307
|
-
*/
|
|
308
|
-
public void getRegionOnLine(int line, int start, int end, char[] dest, int offset) {
|
|
309
|
-
lock(false);
|
|
310
|
-
try {
|
|
311
|
-
lines.get(line).getChars(start, end, dest, offset);
|
|
312
|
-
} finally {
|
|
313
|
-
unlock(false);
|
|
314
|
-
}
|
|
315
|
-
}
|
|
316
|
-
|
|
317
|
-
/**
|
|
318
|
-
* Get characters of line
|
|
319
|
-
*/
|
|
320
|
-
public void getLineChars(int line, char[] dest) {
|
|
321
|
-
getRegionOnLine(line, 0, getColumnCount(line), dest, 0);
|
|
322
|
-
}
|
|
323
|
-
|
|
324
|
-
/**
|
|
325
|
-
* Transform the (line,column) position to index
|
|
326
|
-
* This task will usually be completed by {@link Indexer}
|
|
327
|
-
*
|
|
328
|
-
* @param line Line of index
|
|
329
|
-
* @param column Column on line of index
|
|
330
|
-
* @return Transformed index for the given arguments
|
|
331
|
-
*/
|
|
332
|
-
public int getCharIndex(int line, int column) {
|
|
333
|
-
lock(false);
|
|
334
|
-
try {
|
|
335
|
-
return getIndexer().getCharIndex(line, column);
|
|
336
|
-
} finally {
|
|
337
|
-
unlock(false);
|
|
338
|
-
}
|
|
339
|
-
}
|
|
340
|
-
|
|
341
|
-
/**
|
|
342
|
-
* Check if the given {@link CharPosition} is valid in this text. Checks include line, column and index.
|
|
343
|
-
*
|
|
344
|
-
* @param position the position to check, maybe null
|
|
345
|
-
* @return if the position is valid in this text. null position is always invalid.
|
|
346
|
-
*/
|
|
347
|
-
public boolean isValidPosition(@Nullable CharPosition position) {
|
|
348
|
-
if (position == null) {
|
|
349
|
-
return false;
|
|
350
|
-
}
|
|
351
|
-
int line = position.line, column = position.column, index = position.index;
|
|
352
|
-
lock(false);
|
|
353
|
-
try {
|
|
354
|
-
if (line < 0 || line >= getLineCount()) {
|
|
355
|
-
return false;
|
|
356
|
-
}
|
|
357
|
-
ContentLine text = getLine(line);
|
|
358
|
-
if (column > text.length() + text.getLineSeparator().getLength() || column < 0) {
|
|
359
|
-
return false;
|
|
360
|
-
}
|
|
361
|
-
return getIndexer().getCharIndex(line, column) == index;
|
|
362
|
-
} finally {
|
|
363
|
-
unlock(false);
|
|
364
|
-
}
|
|
365
|
-
}
|
|
366
|
-
|
|
367
|
-
/**
|
|
368
|
-
* Insert content to this object
|
|
369
|
-
*
|
|
370
|
-
* @param line The insertion's line position
|
|
371
|
-
* @param column The insertion's column position
|
|
372
|
-
* @param text The text you want to insert at the position
|
|
373
|
-
*/
|
|
374
|
-
public void insert(int line, int column, CharSequence text) {
|
|
375
|
-
lock(true);
|
|
376
|
-
documentVersion.getAndIncrement();
|
|
377
|
-
try {
|
|
378
|
-
insertInternal(line, column, text);
|
|
379
|
-
} finally {
|
|
380
|
-
unlock(true);
|
|
381
|
-
}
|
|
382
|
-
}
|
|
383
|
-
|
|
384
|
-
private void insertInternal(int line, int column, CharSequence text) {
|
|
385
|
-
checkLineAndColumn(line, column, CHECK_TYPE_CURSOR);
|
|
386
|
-
if (text == null) {
|
|
387
|
-
throw new IllegalArgumentException("text can not be null");
|
|
388
|
-
}
|
|
389
|
-
if (column > lines.get(line).length()) {
|
|
390
|
-
// Never insert texts between line separator characters
|
|
391
|
-
column = lines.get(line).length();
|
|
392
|
-
}
|
|
393
|
-
|
|
394
|
-
// Notify listeners and cursor manager
|
|
395
|
-
if (cursor != null)
|
|
396
|
-
cursor.beforeInsert(line, column);
|
|
397
|
-
|
|
398
|
-
dispatchBeforeModification();
|
|
399
|
-
|
|
400
|
-
int workLine = line;
|
|
401
|
-
int workIndex = column;
|
|
402
|
-
var currLine = makeLineMutable(workLine);
|
|
403
|
-
var helper = InsertTextHelper.forInsertion(text);
|
|
404
|
-
int type, peekType = InsertTextHelper.TYPE_EOF;
|
|
405
|
-
boolean fromPeek = false;
|
|
406
|
-
var newLines = new LinkedList<ContentLine>();
|
|
407
|
-
var startSeparator = currLine.getLineSeparator();
|
|
408
|
-
while (true) {
|
|
409
|
-
type = fromPeek ? peekType : helper.forward();
|
|
410
|
-
fromPeek = false;
|
|
411
|
-
if (type == InsertTextHelper.TYPE_EOF) {
|
|
412
|
-
break;
|
|
413
|
-
}
|
|
414
|
-
if (type == InsertTextHelper.TYPE_LINE_CONTENT) {
|
|
415
|
-
currLine.insert(workIndex, text, helper.getIndex(), helper.getIndexNext());
|
|
416
|
-
workIndex += helper.getIndexNext() - helper.getIndex();
|
|
417
|
-
} else {
|
|
418
|
-
var separator = LineSeparator.fromSeparatorString(text, helper.getIndex(), helper.getIndexNext());
|
|
419
|
-
currLine.setLineSeparator(separator);
|
|
420
|
-
|
|
421
|
-
// Peek!
|
|
422
|
-
peekType = helper.forward();
|
|
423
|
-
fromPeek = true;
|
|
424
|
-
|
|
425
|
-
var newLine = new ContentLine(currLine.length() - workIndex + helper.getIndexNext() - helper.getIndex() + 10);
|
|
426
|
-
newLine.insert(0, currLine, workIndex, currLine.length());
|
|
427
|
-
currLine.delete(workIndex, currLine.length());
|
|
428
|
-
workIndex = 0;
|
|
429
|
-
// Newly created lines are always mutable
|
|
430
|
-
currLine = newLine;
|
|
431
|
-
newLines.add(newLine);
|
|
432
|
-
workLine++;
|
|
433
|
-
}
|
|
434
|
-
}
|
|
435
|
-
currLine.setLineSeparator(startSeparator);
|
|
436
|
-
lines.addAll(line + 1, newLines);
|
|
437
|
-
helper.recycle();
|
|
438
|
-
textLength += text.length();
|
|
439
|
-
this.dispatchAfterInsert(line, column, workLine, workIndex, text);
|
|
440
|
-
}
|
|
441
|
-
|
|
442
|
-
/**
|
|
443
|
-
* Delete character in [start,end)
|
|
444
|
-
*
|
|
445
|
-
* @param start Start position in content
|
|
446
|
-
* @param end End position in content
|
|
447
|
-
*/
|
|
448
|
-
public void delete(int start, int end) {
|
|
449
|
-
lock(true);
|
|
450
|
-
checkIndex(start, CHECK_TYPE_CURSOR);
|
|
451
|
-
checkIndex(end, CHECK_TYPE_CURSOR);
|
|
452
|
-
documentVersion.getAndIncrement();
|
|
453
|
-
try {
|
|
454
|
-
CharPosition startPos = getIndexer().getCharPosition(start);
|
|
455
|
-
CharPosition endPos = getIndexer().getCharPosition(end);
|
|
456
|
-
if (start != end) {
|
|
457
|
-
deleteInternal(startPos.line, startPos.column, endPos.line, endPos.column);
|
|
458
|
-
}
|
|
459
|
-
} finally {
|
|
460
|
-
unlock(true);
|
|
461
|
-
}
|
|
462
|
-
}
|
|
463
|
-
|
|
464
|
-
/**
|
|
465
|
-
* Delete text in the given region
|
|
466
|
-
*
|
|
467
|
-
* @param startLine The start line position
|
|
468
|
-
* @param columnOnStartLine The start column position
|
|
469
|
-
* @param endLine The end line position
|
|
470
|
-
* @param columnOnEndLine The end column position
|
|
471
|
-
*/
|
|
472
|
-
public void delete(int startLine, int columnOnStartLine, int endLine, int columnOnEndLine) {
|
|
473
|
-
lock(true);
|
|
474
|
-
documentVersion.getAndIncrement();
|
|
475
|
-
try {
|
|
476
|
-
deleteInternal(startLine, columnOnStartLine, endLine, columnOnEndLine);
|
|
477
|
-
} finally {
|
|
478
|
-
unlock(true);
|
|
479
|
-
}
|
|
480
|
-
}
|
|
481
|
-
|
|
482
|
-
private void deleteInternal(int startLine, int columnOnStartLine, int endLine, int columnOnEndLine) {
|
|
483
|
-
checkLineAndColumn(endLine, columnOnEndLine, CHECK_TYPE_CURSOR);
|
|
484
|
-
checkLineAndColumn(startLine, columnOnStartLine, CHECK_TYPE_CURSOR);
|
|
485
|
-
if (startLine == endLine && columnOnStartLine == columnOnEndLine) {
|
|
486
|
-
return;
|
|
487
|
-
}
|
|
488
|
-
var endLineObj = lines.get(endLine);
|
|
489
|
-
if (columnOnEndLine > endLineObj.length() && endLine + 1 < getLineCount()) {
|
|
490
|
-
// Expected to delete the whole newline
|
|
491
|
-
deleteInternal(startLine, columnOnStartLine, endLine + 1, 0);
|
|
492
|
-
return;
|
|
493
|
-
}
|
|
494
|
-
var startLineObj = lines.get(startLine);
|
|
495
|
-
if (columnOnStartLine > startLineObj.length()) {
|
|
496
|
-
// Expected to delete the whole newline
|
|
497
|
-
deleteInternal(startLine, startLineObj.length(), endLine, columnOnEndLine);
|
|
498
|
-
return;
|
|
499
|
-
}
|
|
500
|
-
var changedContent = new StringBuilder();
|
|
501
|
-
if (startLine == endLine) {
|
|
502
|
-
var curr = makeLineMutable(startLine);
|
|
503
|
-
int len = curr.length();
|
|
504
|
-
if (columnOnStartLine < 0 || columnOnEndLine > len || columnOnStartLine > columnOnEndLine) {
|
|
505
|
-
throw new StringIndexOutOfBoundsException("invalid bounds");
|
|
506
|
-
}
|
|
507
|
-
|
|
508
|
-
// Notify listeners and cursor manager
|
|
509
|
-
if (cursor != null) {
|
|
510
|
-
cursor.beforeDelete(startLine, columnOnStartLine, endLine, columnOnEndLine);
|
|
511
|
-
}
|
|
512
|
-
dispatchBeforeModification();
|
|
513
|
-
|
|
514
|
-
changedContent.append(curr, columnOnStartLine, columnOnEndLine);
|
|
515
|
-
curr.delete(columnOnStartLine, columnOnEndLine);
|
|
516
|
-
textLength -= columnOnEndLine - columnOnStartLine;
|
|
517
|
-
} else if (startLine < endLine) {
|
|
518
|
-
// Notify listeners and cursor manager
|
|
519
|
-
if (cursor != null)
|
|
520
|
-
cursor.beforeDelete(startLine, columnOnStartLine, endLine, columnOnEndLine);
|
|
521
|
-
dispatchBeforeModification();
|
|
522
|
-
|
|
523
|
-
for (int i = startLine + 1; i <= endLine - 1; i++) {
|
|
524
|
-
var line = lines.get(i);
|
|
525
|
-
var separator = lines.get(i).getLineSeparator();
|
|
526
|
-
textLength -= line.length() + separator.getLength();
|
|
527
|
-
line.appendTo(changedContent);
|
|
528
|
-
changedContent.append(separator.getContent());
|
|
529
|
-
line.release();
|
|
530
|
-
}
|
|
531
|
-
if (endLine > startLine + 1) {
|
|
532
|
-
lines.subList(startLine + 1, endLine).clear();
|
|
533
|
-
}
|
|
534
|
-
|
|
535
|
-
int currEnd = startLine + 1;
|
|
536
|
-
var start = makeLineMutable(startLine);
|
|
537
|
-
var end = lines.get(currEnd);
|
|
538
|
-
textLength -= start.length() - columnOnStartLine;
|
|
539
|
-
changedContent.insert(0, start, columnOnStartLine, start.length())
|
|
540
|
-
.insert(start.length() - columnOnStartLine, start.getLineSeparator().getContent());
|
|
541
|
-
start.delete(columnOnStartLine, start.length());
|
|
542
|
-
textLength -= columnOnEndLine;
|
|
543
|
-
changedContent.append(end, 0, columnOnEndLine);
|
|
544
|
-
textLength -= start.getLineSeparator().getLength();
|
|
545
|
-
lines.remove(currEnd);
|
|
546
|
-
start.append(new TextReference(end, columnOnEndLine, end.length()));
|
|
547
|
-
start.setLineSeparator(end.getLineSeparator());
|
|
548
|
-
end.release();
|
|
549
|
-
} else {
|
|
550
|
-
throw new IllegalArgumentException("start line > end line");
|
|
551
|
-
}
|
|
552
|
-
this.dispatchAfterDelete(startLine, columnOnStartLine, endLine, columnOnEndLine, changedContent);
|
|
553
|
-
}
|
|
554
|
-
|
|
555
|
-
/**
|
|
556
|
-
* Make the given line mutable
|
|
557
|
-
*/
|
|
558
|
-
private ContentLine makeLineMutable(int line) {
|
|
559
|
-
var data = lines.get(line);
|
|
560
|
-
var mut = data.toMutable();
|
|
561
|
-
if (mut != data) {
|
|
562
|
-
lines.set(line, mut);
|
|
563
|
-
data.release();
|
|
564
|
-
}
|
|
565
|
-
return mut;
|
|
566
|
-
}
|
|
567
|
-
|
|
568
|
-
/**
|
|
569
|
-
* Replace the text in the given region
|
|
570
|
-
* This action will be completed by calling {@link Content#delete(int, int, int, int)} and {@link Content#insert(int, int, CharSequence)}
|
|
571
|
-
*
|
|
572
|
-
* @param startLine The start line position
|
|
573
|
-
* @param columnOnStartLine The start column position
|
|
574
|
-
* @param endLine The end line position
|
|
575
|
-
* @param columnOnEndLine The end column position
|
|
576
|
-
* @param text The text to replace old text
|
|
577
|
-
*/
|
|
578
|
-
public void replace(int startLine, int columnOnStartLine, int endLine, int columnOnEndLine, CharSequence text) {
|
|
579
|
-
if (text == null) {
|
|
580
|
-
throw new IllegalArgumentException("text can not be null");
|
|
581
|
-
}
|
|
582
|
-
lock(true);
|
|
583
|
-
documentVersion.getAndIncrement();
|
|
584
|
-
try {
|
|
585
|
-
this.dispatchBeforeReplace();
|
|
586
|
-
deleteInternal(startLine, columnOnStartLine, endLine, columnOnEndLine);
|
|
587
|
-
insertInternal(startLine, columnOnStartLine, text);
|
|
588
|
-
} finally {
|
|
589
|
-
unlock(true);
|
|
590
|
-
}
|
|
591
|
-
}
|
|
592
|
-
|
|
593
|
-
/**
|
|
594
|
-
* Replace text in the given region with the text
|
|
595
|
-
*/
|
|
596
|
-
public void replace(int startIndex, int endIndex, @NonNull CharSequence text) {
|
|
597
|
-
var start = getIndexer().getCharPosition(startIndex);
|
|
598
|
-
var end = getIndexer().getCharPosition(endIndex);
|
|
599
|
-
replace(start.line, start.column, end.line, end.column, text);
|
|
600
|
-
}
|
|
601
|
-
|
|
602
|
-
/**
|
|
603
|
-
* Get current document version. The returned value is increasing (if the modification count is
|
|
604
|
-
* smaller than Long.MAX_VALUE).
|
|
605
|
-
*/
|
|
606
|
-
public long getDocumentVersion() {
|
|
607
|
-
return documentVersion.get();
|
|
608
|
-
}
|
|
609
|
-
|
|
610
|
-
/**
|
|
611
|
-
* Undo the last modification.
|
|
612
|
-
* <p>
|
|
613
|
-
* NOTE: When there are too much modification, old modification will be deleted from UndoManager
|
|
614
|
-
*/
|
|
615
|
-
public TextRange undo() {
|
|
616
|
-
return undoManager.undo(this);
|
|
617
|
-
}
|
|
618
|
-
|
|
619
|
-
/**
|
|
620
|
-
* Redo the last modification
|
|
621
|
-
*/
|
|
622
|
-
public void redo() {
|
|
623
|
-
undoManager.redo(this);
|
|
624
|
-
}
|
|
625
|
-
|
|
626
|
-
/**
|
|
627
|
-
* Check whether the {@link UndoManager} is working to undo/redo
|
|
628
|
-
*/
|
|
629
|
-
public boolean isUndoManagerWorking() {
|
|
630
|
-
return undoManager.isModifyingContent();
|
|
631
|
-
}
|
|
632
|
-
|
|
633
|
-
/**
|
|
634
|
-
* Whether we can undo
|
|
635
|
-
*
|
|
636
|
-
* @return Whether we can undo
|
|
637
|
-
*/
|
|
638
|
-
public boolean canUndo() {
|
|
639
|
-
return undoManager.canUndo();
|
|
640
|
-
}
|
|
641
|
-
|
|
642
|
-
/**
|
|
643
|
-
* Whether we can redo
|
|
644
|
-
*
|
|
645
|
-
* @return Whether we can redo
|
|
646
|
-
*/
|
|
647
|
-
public boolean canRedo() {
|
|
648
|
-
return undoManager.canRedo();
|
|
649
|
-
}
|
|
650
|
-
|
|
651
|
-
/**
|
|
652
|
-
* Get whether UndoManager is enabled
|
|
653
|
-
*
|
|
654
|
-
* @return Whether UndoManager is enabled
|
|
655
|
-
*/
|
|
656
|
-
public boolean isUndoEnabled() {
|
|
657
|
-
return undoManager.isUndoEnabled();
|
|
658
|
-
}
|
|
659
|
-
|
|
660
|
-
/**
|
|
661
|
-
* Set whether enable the UndoManager.
|
|
662
|
-
* If false,any modification will not be taken down and previous modification that
|
|
663
|
-
* is already in UndoManager will be removed.Does not make changes to content.
|
|
664
|
-
*
|
|
665
|
-
* @param enabled New state for UndoManager
|
|
666
|
-
*/
|
|
667
|
-
public void setUndoEnabled(boolean enabled) {
|
|
668
|
-
undoManager.setUndoEnabled(enabled);
|
|
669
|
-
}
|
|
670
|
-
|
|
671
|
-
/**
|
|
672
|
-
* Get current max stack size of UndoManager
|
|
673
|
-
*
|
|
674
|
-
* @return current max stack size
|
|
675
|
-
*/
|
|
676
|
-
public int getMaxUndoStackSize() {
|
|
677
|
-
return undoManager.getMaxUndoStackSize();
|
|
678
|
-
}
|
|
679
|
-
|
|
680
|
-
/**
|
|
681
|
-
* Set the max size of stack in UndoManager
|
|
682
|
-
*
|
|
683
|
-
* @param maxSize New max size
|
|
684
|
-
*/
|
|
685
|
-
public void setMaxUndoStackSize(int maxSize) {
|
|
686
|
-
undoManager.setMaxUndoStackSize(maxSize);
|
|
687
|
-
}
|
|
688
|
-
|
|
689
|
-
/**
|
|
690
|
-
* A delegate method.
|
|
691
|
-
* Notify the UndoManager to begin batch edit(enter a new layer).
|
|
692
|
-
* NOTE: batch edit in Android can be nested.
|
|
693
|
-
*
|
|
694
|
-
* @return Whether in batch edit
|
|
695
|
-
*/
|
|
696
|
-
public boolean beginBatchEdit() {
|
|
697
|
-
nestedBatchEdit++;
|
|
698
|
-
return isInBatchEdit();
|
|
699
|
-
}
|
|
700
|
-
|
|
701
|
-
/**
|
|
702
|
-
* A delegate method.
|
|
703
|
-
* Notify the UndoManager to end batch edit(exit current layer).
|
|
704
|
-
*
|
|
705
|
-
* @return Whether in batch edit
|
|
706
|
-
*/
|
|
707
|
-
public boolean endBatchEdit() {
|
|
708
|
-
nestedBatchEdit--;
|
|
709
|
-
if (nestedBatchEdit == 0) {
|
|
710
|
-
undoManager.onExitBatchEdit();
|
|
711
|
-
}
|
|
712
|
-
if (nestedBatchEdit < 0) {
|
|
713
|
-
nestedBatchEdit = 0;
|
|
714
|
-
}
|
|
715
|
-
return isInBatchEdit();
|
|
716
|
-
}
|
|
717
|
-
|
|
718
|
-
public int getNestedBatchEdit() {
|
|
719
|
-
return nestedBatchEdit;
|
|
720
|
-
}
|
|
721
|
-
|
|
722
|
-
public void resetBatchEdit() {
|
|
723
|
-
nestedBatchEdit = 0;
|
|
724
|
-
}
|
|
725
|
-
|
|
726
|
-
/**
|
|
727
|
-
* Returns whether we are in batch edit
|
|
728
|
-
*
|
|
729
|
-
* @return Whether in batch edit
|
|
730
|
-
*/
|
|
731
|
-
public boolean isInBatchEdit() {
|
|
732
|
-
return nestedBatchEdit > 0;
|
|
733
|
-
}
|
|
734
|
-
|
|
735
|
-
/**
|
|
736
|
-
* Add a new {@link ContentListener} to the Content
|
|
737
|
-
*
|
|
738
|
-
* @param listener The listener to add
|
|
739
|
-
*/
|
|
740
|
-
public void addContentListener(ContentListener listener) {
|
|
741
|
-
if (listener == null) {
|
|
742
|
-
throw new IllegalArgumentException("listener can not be null");
|
|
743
|
-
}
|
|
744
|
-
if (listener instanceof Indexer) {
|
|
745
|
-
throw new IllegalArgumentException("Permission denied");
|
|
746
|
-
}
|
|
747
|
-
if (!contentListeners.contains(listener)) {
|
|
748
|
-
contentListeners.add(listener);
|
|
749
|
-
}
|
|
750
|
-
}
|
|
751
|
-
|
|
752
|
-
/**
|
|
753
|
-
* Remove the given listener of this Content
|
|
754
|
-
*
|
|
755
|
-
* @param listener The listener to remove
|
|
756
|
-
*/
|
|
757
|
-
public void removeContentListener(ContentListener listener) {
|
|
758
|
-
if (listener instanceof Indexer) {
|
|
759
|
-
throw new IllegalArgumentException("Permission denied");
|
|
760
|
-
}
|
|
761
|
-
contentListeners.remove(listener);
|
|
762
|
-
}
|
|
763
|
-
|
|
764
|
-
/**
|
|
765
|
-
* Get the using {@link Indexer} object
|
|
766
|
-
*
|
|
767
|
-
* @return Indexer for this object
|
|
768
|
-
*/
|
|
769
|
-
public Indexer getIndexer() {
|
|
770
|
-
if (cursor != null) {
|
|
771
|
-
return cursor.getIndexer();
|
|
772
|
-
}
|
|
773
|
-
return indexer;
|
|
774
|
-
}
|
|
775
|
-
|
|
776
|
-
/**
|
|
777
|
-
* Quick method to get sub string of this object
|
|
778
|
-
*
|
|
779
|
-
* @param startLine The start line position
|
|
780
|
-
* @param startColumn The start column position
|
|
781
|
-
* @param endLine The end line position
|
|
782
|
-
* @param endColumn The end column position
|
|
783
|
-
* @return sub-sequence of this Content
|
|
784
|
-
*/
|
|
785
|
-
public Content subContent(int startLine, int startColumn, int endLine, int endColumn) {
|
|
786
|
-
return subContent(startLine, startColumn, endLine, endColumn, true);
|
|
787
|
-
}
|
|
788
|
-
|
|
789
|
-
|
|
790
|
-
/**
|
|
791
|
-
* Quick method to get sub string of this object
|
|
792
|
-
*
|
|
793
|
-
* @param startLine The start line position
|
|
794
|
-
* @param startColumn The start column position
|
|
795
|
-
* @param endLine The end line position
|
|
796
|
-
* @param endColumn The end column position
|
|
797
|
-
* @param newContentThreadSafe Should the returned instance be thread-safe
|
|
798
|
-
* @return sub-sequence of this Content
|
|
799
|
-
*/
|
|
800
|
-
public Content subContent(int startLine, int startColumn, int endLine, int endColumn, boolean newContentThreadSafe) {
|
|
801
|
-
lock(false);
|
|
802
|
-
try {
|
|
803
|
-
return subContentInternal(startLine, startColumn, endLine, endColumn, newContentThreadSafe);
|
|
804
|
-
} finally {
|
|
805
|
-
unlock(false);
|
|
806
|
-
}
|
|
807
|
-
}
|
|
808
|
-
|
|
809
|
-
private Content subContentInternal(int startLine, int startColumn, int endLine, int endColumn, boolean threadSafe) {
|
|
810
|
-
var c = new Content(null, threadSafe);
|
|
811
|
-
c.setUndoEnabled(false);
|
|
812
|
-
if (startLine == endLine) {
|
|
813
|
-
var line = lines.get(startLine);
|
|
814
|
-
if (endColumn == line.length() + 1 && line.getLineSeparator() == LineSeparator.CRLF) {
|
|
815
|
-
if (startColumn < endColumn) {
|
|
816
|
-
c.insert(0, 0, line.subSequence(startColumn, line.length()));
|
|
817
|
-
c.lines.get(0).setLineSeparator(LineSeparator.CR);
|
|
818
|
-
c.textLength++;
|
|
819
|
-
c.lines.add(new ContentLine());
|
|
820
|
-
}
|
|
821
|
-
} else {
|
|
822
|
-
c.insert(0, 0, line.subSequence(startColumn, endColumn));
|
|
823
|
-
}
|
|
824
|
-
} else if (startLine < endLine) {
|
|
825
|
-
var firstLine = lines.get(startLine);
|
|
826
|
-
if (firstLine.getLineSeparator() == LineSeparator.CRLF) {
|
|
827
|
-
if (startColumn <= firstLine.length()) {
|
|
828
|
-
c.insert(0, 0, firstLine.subSequence(startColumn, firstLine.length()));
|
|
829
|
-
c.lines.get(0).setLineSeparator(firstLine.getLineSeparator());
|
|
830
|
-
c.textLength += firstLine.getLineSeparator().getLength();
|
|
831
|
-
} else if (startColumn == firstLine.length() + 1) {
|
|
832
|
-
c.lines.get(0).setLineSeparator(LineSeparator.LF);
|
|
833
|
-
c.textLength += LineSeparator.LF.getLength();
|
|
834
|
-
} else {
|
|
835
|
-
throw new IndexOutOfBoundsException();
|
|
836
|
-
}
|
|
837
|
-
} else {
|
|
838
|
-
c.insert(0, 0, firstLine.subSequence(startColumn, firstLine.length()));
|
|
839
|
-
c.lines.get(0).setLineSeparator(firstLine.getLineSeparator());
|
|
840
|
-
c.textLength += firstLine.getLineSeparator().getLength();
|
|
841
|
-
}
|
|
842
|
-
for (int i = startLine + 1; i < endLine; i++) {
|
|
843
|
-
var line = lines.get(i);
|
|
844
|
-
c.lines.add(new ContentLine(line));
|
|
845
|
-
c.textLength += line.length() + line.getLineSeparator().getLength();
|
|
846
|
-
}
|
|
847
|
-
var end = lines.get(endLine);
|
|
848
|
-
if (endColumn == end.length() + 1 && end.getLineSeparator() == LineSeparator.CRLF) {
|
|
849
|
-
var newLine = new ContentLine().insert(0, end, 0, endColumn - 1);
|
|
850
|
-
c.lines.add(newLine);
|
|
851
|
-
newLine.setLineSeparator(LineSeparator.CR);
|
|
852
|
-
c.textLength += endColumn + 1;
|
|
853
|
-
} else {
|
|
854
|
-
c.lines.add(new ContentLine().insert(0, end, 0, endColumn));
|
|
855
|
-
c.textLength += endColumn;
|
|
856
|
-
}
|
|
857
|
-
} else {
|
|
858
|
-
throw new StringIndexOutOfBoundsException("start > end");
|
|
859
|
-
}
|
|
860
|
-
c.setUndoEnabled(true);
|
|
861
|
-
return c;
|
|
862
|
-
}
|
|
863
|
-
|
|
864
|
-
private StringBuilder subStringBuilder(int startLine, int startColumn, int endLine, int endColumn, int length) {
|
|
865
|
-
var sb = new StringBuilder(length);
|
|
866
|
-
if (startLine == endLine) {
|
|
867
|
-
var line = lines.get(startLine);
|
|
868
|
-
if (endColumn == line.length() + 1 && line.getLineSeparator() == LineSeparator.CRLF) {
|
|
869
|
-
if (startColumn < endColumn) {
|
|
870
|
-
sb.append(lines.get(startLine), startColumn, line.length())
|
|
871
|
-
.append(LineSeparator.CR.getContent());
|
|
872
|
-
}
|
|
873
|
-
} else {
|
|
874
|
-
sb.append(lines.get(startLine), startColumn, endColumn);
|
|
875
|
-
}
|
|
876
|
-
} else if (startLine < endLine) {
|
|
877
|
-
var firstLine = lines.get(startLine);
|
|
878
|
-
if (firstLine.getLineSeparator() == LineSeparator.CRLF) {
|
|
879
|
-
if (startColumn <= firstLine.length()) {
|
|
880
|
-
sb.append(firstLine, startColumn, firstLine.length());
|
|
881
|
-
sb.append(firstLine.getLineSeparator().getContent());
|
|
882
|
-
} else if (startColumn == firstLine.length() + 1) {
|
|
883
|
-
sb.append(LineSeparator.LF.getContent());
|
|
884
|
-
} else {
|
|
885
|
-
throw new IndexOutOfBoundsException();
|
|
886
|
-
}
|
|
887
|
-
} else {
|
|
888
|
-
sb.append(firstLine, startColumn, firstLine.length());
|
|
889
|
-
sb.append(firstLine.getLineSeparator().getContent());
|
|
890
|
-
}
|
|
891
|
-
for (int i = startLine + 1; i < endLine; i++) {
|
|
892
|
-
var line = lines.get(i);
|
|
893
|
-
sb.append(line)
|
|
894
|
-
.append(line.getLineSeparator().getContent());
|
|
895
|
-
}
|
|
896
|
-
var end = lines.get(endLine);
|
|
897
|
-
if (endColumn == end.length() + 1 && end.getLineSeparator() == LineSeparator.CRLF) {
|
|
898
|
-
sb.append(end, 0, endColumn)
|
|
899
|
-
.append(LineSeparator.CR.getContent());
|
|
900
|
-
} else {
|
|
901
|
-
sb.append(end, 0, endColumn);
|
|
902
|
-
}
|
|
903
|
-
} else {
|
|
904
|
-
throw new StringIndexOutOfBoundsException("start > end");
|
|
905
|
-
}
|
|
906
|
-
return sb;
|
|
907
|
-
}
|
|
908
|
-
|
|
909
|
-
@NonNull
|
|
910
|
-
public Directions getLineDirections(int line) {
|
|
911
|
-
lock(false);
|
|
912
|
-
try {
|
|
913
|
-
return bidi.getLineDirections(lines.get(line), line);
|
|
914
|
-
} finally {
|
|
915
|
-
unlock(false);
|
|
916
|
-
}
|
|
917
|
-
}
|
|
918
|
-
|
|
919
|
-
public void setBidiEnabled(boolean enabled) {
|
|
920
|
-
bidi.setEnabled(enabled);
|
|
921
|
-
}
|
|
922
|
-
|
|
923
|
-
public boolean isBidiEnabled() {
|
|
924
|
-
return bidi.isEnabled();
|
|
925
|
-
}
|
|
926
|
-
|
|
927
|
-
public boolean isRtlAt(int line, int column) {
|
|
928
|
-
var dirs = getLineDirections(line);
|
|
929
|
-
for (int i = 0; i < dirs.getRunCount(); i++) {
|
|
930
|
-
if (column >= dirs.getRunStart(i) && column < dirs.getRunEnd(i)) {
|
|
931
|
-
return dirs.isRunRtl(i);
|
|
932
|
-
}
|
|
933
|
-
}
|
|
934
|
-
return false;
|
|
935
|
-
}
|
|
936
|
-
|
|
937
|
-
@Override
|
|
938
|
-
public boolean equals(Object anotherObject) {
|
|
939
|
-
if (anotherObject instanceof Content content) {
|
|
940
|
-
if (content.length() != this.length()) {
|
|
941
|
-
return false;
|
|
942
|
-
}
|
|
943
|
-
for (int i = 0; i < this.getLineCount(); i++) {
|
|
944
|
-
if (!textEquals(lines.get(i), content.lines.get(i))) {
|
|
945
|
-
return false;
|
|
946
|
-
}
|
|
947
|
-
}
|
|
948
|
-
return true;
|
|
949
|
-
} else {
|
|
950
|
-
return false;
|
|
951
|
-
}
|
|
952
|
-
}
|
|
953
|
-
|
|
954
|
-
@Override
|
|
955
|
-
public int hashCode() {
|
|
956
|
-
return Objects.hash(lines, textLength);
|
|
957
|
-
}
|
|
958
|
-
|
|
959
|
-
@NonNull
|
|
960
|
-
@Override
|
|
961
|
-
public String toString() {
|
|
962
|
-
return toStringBuilder().toString();
|
|
963
|
-
}
|
|
964
|
-
|
|
965
|
-
/**
|
|
966
|
-
* Get the text in StringBuilder form
|
|
967
|
-
* <p>
|
|
968
|
-
* This can improve the speed in char reading for tokenizing
|
|
969
|
-
*
|
|
970
|
-
* @return StringBuilder form of Content
|
|
971
|
-
*/
|
|
972
|
-
public StringBuilder toStringBuilder() {
|
|
973
|
-
var sb = new StringBuilder();
|
|
974
|
-
appendToStringBuilder(sb);
|
|
975
|
-
return sb;
|
|
976
|
-
}
|
|
977
|
-
|
|
978
|
-
/**
|
|
979
|
-
* Get UndoManager instance in use
|
|
980
|
-
*/
|
|
981
|
-
public UndoManager getUndoManager() {
|
|
982
|
-
return undoManager;
|
|
983
|
-
}
|
|
984
|
-
|
|
985
|
-
/**
|
|
986
|
-
* Set undo manager. You may use this to recover to a previously saved state of undo stack.
|
|
987
|
-
*/
|
|
988
|
-
public void setUndoManager(UndoManager manager) {
|
|
989
|
-
this.undoManager = manager;
|
|
990
|
-
}
|
|
991
|
-
|
|
992
|
-
/**
|
|
993
|
-
* Append the content to the given {@link StringBuilder}
|
|
994
|
-
*/
|
|
995
|
-
public void appendToStringBuilder(StringBuilder sb) {
|
|
996
|
-
sb.ensureCapacity(sb.length() + length());
|
|
997
|
-
lock(false);
|
|
998
|
-
try {
|
|
999
|
-
final int lines = getLineCount();
|
|
1000
|
-
for (int i = 0; i < lines; i++) {
|
|
1001
|
-
var line = this.lines.get(i);
|
|
1002
|
-
line.appendTo(sb);
|
|
1003
|
-
sb.append(line.getLineSeparator().getContent());
|
|
1004
|
-
}
|
|
1005
|
-
} finally {
|
|
1006
|
-
unlock(false);
|
|
1007
|
-
}
|
|
1008
|
-
}
|
|
1009
|
-
|
|
1010
|
-
/**
|
|
1011
|
-
* Get Cursor for editor (Create if there is not)
|
|
1012
|
-
*
|
|
1013
|
-
* @return Cursor
|
|
1014
|
-
*/
|
|
1015
|
-
public Cursor getCursor() {
|
|
1016
|
-
if (cursor == null) {
|
|
1017
|
-
cursor = new Cursor(this);
|
|
1018
|
-
}
|
|
1019
|
-
return cursor;
|
|
1020
|
-
}
|
|
1021
|
-
|
|
1022
|
-
/**
|
|
1023
|
-
* Check if there is a cursor created for this Content object
|
|
1024
|
-
*/
|
|
1025
|
-
public boolean isCursorCreated() {
|
|
1026
|
-
return cursor != null;
|
|
1027
|
-
}
|
|
1028
|
-
|
|
1029
|
-
/**
|
|
1030
|
-
* Dispatch events to listener before replacement
|
|
1031
|
-
*/
|
|
1032
|
-
private void dispatchBeforeReplace() {
|
|
1033
|
-
undoManager.beforeReplace(this);
|
|
1034
|
-
if (cursor != null)
|
|
1035
|
-
cursor.beforeReplace();
|
|
1036
|
-
if (indexer instanceof ContentListener) {
|
|
1037
|
-
((ContentListener) indexer).beforeReplace(this);
|
|
1038
|
-
}
|
|
1039
|
-
for (ContentListener lis : contentListeners) {
|
|
1040
|
-
lis.beforeReplace(this);
|
|
1041
|
-
}
|
|
1042
|
-
}
|
|
1043
|
-
|
|
1044
|
-
/**
|
|
1045
|
-
* Dispatch events to listener after deletion
|
|
1046
|
-
*
|
|
1047
|
-
* @param a Start line
|
|
1048
|
-
* @param b Start Column
|
|
1049
|
-
* @param c End line
|
|
1050
|
-
* @param d End column
|
|
1051
|
-
* @param e Text deleted
|
|
1052
|
-
*/
|
|
1053
|
-
private void dispatchAfterDelete(int a, int b, int c, int d, @NonNull CharSequence e) {
|
|
1054
|
-
undoManager.afterDelete(this, a, b, c, d, e);
|
|
1055
|
-
if (cursor != null)
|
|
1056
|
-
cursor.afterDelete(a, b, c, d, e);
|
|
1057
|
-
if (indexer instanceof ContentListener) {
|
|
1058
|
-
((ContentListener) indexer).afterDelete(this, a, b, c, d, e);
|
|
1059
|
-
}
|
|
1060
|
-
for (ContentListener lis : contentListeners) {
|
|
1061
|
-
lis.afterDelete(this, a, b, c, d, e);
|
|
1062
|
-
}
|
|
1063
|
-
}
|
|
1064
|
-
|
|
1065
|
-
private void dispatchBeforeModification() {
|
|
1066
|
-
undoManager.beforeModification(this);
|
|
1067
|
-
for (ContentListener lis : contentListeners) {
|
|
1068
|
-
lis.beforeModification(this);
|
|
1069
|
-
}
|
|
1070
|
-
}
|
|
1071
|
-
|
|
1072
|
-
/**
|
|
1073
|
-
* Dispatch events to listener after insertion
|
|
1074
|
-
*
|
|
1075
|
-
* @param a Start line
|
|
1076
|
-
* @param b Start Column
|
|
1077
|
-
* @param c End line
|
|
1078
|
-
* @param d End column
|
|
1079
|
-
* @param e Text deleted
|
|
1080
|
-
*/
|
|
1081
|
-
private void dispatchAfterInsert(int a, int b, int c, int d, @NonNull CharSequence e) {
|
|
1082
|
-
undoManager.afterInsert(this, a, b, c, d, e);
|
|
1083
|
-
if (cursor != null)
|
|
1084
|
-
cursor.afterInsert(a, b, c, d, e);
|
|
1085
|
-
if (indexer instanceof ContentListener) {
|
|
1086
|
-
((ContentListener) indexer).afterInsert(this, a, b, c, d, e);
|
|
1087
|
-
}
|
|
1088
|
-
for (ContentListener lis : contentListeners) {
|
|
1089
|
-
lis.afterInsert(this, a, b, c, d, e);
|
|
1090
|
-
}
|
|
1091
|
-
}
|
|
1092
|
-
|
|
1093
|
-
/**
|
|
1094
|
-
* Check whether the index is valid
|
|
1095
|
-
*
|
|
1096
|
-
* @param index Index to check
|
|
1097
|
-
*/
|
|
1098
|
-
protected void checkIndex(int index, int checkType) {
|
|
1099
|
-
if ((checkType == CHECK_TYPE_READ ? index >= length() : index > length()) || index < 0) {
|
|
1100
|
-
throw new StringIndexOutOfBoundsException("Index " + index + " out of bounds. length:" + length());
|
|
1101
|
-
}
|
|
1102
|
-
}
|
|
1103
|
-
|
|
1104
|
-
/**
|
|
1105
|
-
* Check whether the line is valid
|
|
1106
|
-
*
|
|
1107
|
-
* @param line Line to check
|
|
1108
|
-
*/
|
|
1109
|
-
protected void checkLine(int line) {
|
|
1110
|
-
if (line >= getLineCount() || line < 0) {
|
|
1111
|
-
throw new StringIndexOutOfBoundsException("Line " + line + " out of bounds. line count:" + getLineCount());
|
|
1112
|
-
}
|
|
1113
|
-
}
|
|
1114
|
-
|
|
1115
|
-
/**
|
|
1116
|
-
* Check whether the line and column is valid
|
|
1117
|
-
*
|
|
1118
|
-
* @param line The line to check
|
|
1119
|
-
* @param column The column to check
|
|
1120
|
-
*/
|
|
1121
|
-
protected void checkLineAndColumn(int line, int column, int checkType) {
|
|
1122
|
-
checkLine(line);
|
|
1123
|
-
var text = lines.get(line);
|
|
1124
|
-
// Clarify valid line positions here
|
|
1125
|
-
// Check Type Valid Range
|
|
1126
|
-
// READ [0, columnCount+lineSepLength)
|
|
1127
|
-
// INSERT [0, columnCount]
|
|
1128
|
-
// INDEX See CachedIndexer
|
|
1129
|
-
switch (checkType) {
|
|
1130
|
-
case CHECK_TYPE_READ -> {
|
|
1131
|
-
int len = text.length() + text.getLineSeparator().getLength();
|
|
1132
|
-
if (column >= len || column < 0) {
|
|
1133
|
-
throw new StringIndexOutOfBoundsException(
|
|
1134
|
-
"Column " + column + " out of bounds for READ. line: " + line + ", valid range: [0, " + len + ")");
|
|
1135
|
-
}
|
|
1136
|
-
}
|
|
1137
|
-
case CHECK_TYPE_CURSOR -> {
|
|
1138
|
-
int len = text.length();
|
|
1139
|
-
if (column > len || column < 0) {
|
|
1140
|
-
throw new StringIndexOutOfBoundsException(
|
|
1141
|
-
"Column " + column + " out of bounds for CURSOR. line: " + line + ", valid range: [0, " + len + "]");
|
|
1142
|
-
}
|
|
1143
|
-
}
|
|
1144
|
-
case CHECK_TYPE_INDEX -> {
|
|
1145
|
-
int len = text.length() + text.getLineSeparator().getLength();
|
|
1146
|
-
if (line == getLineCount() - 1) {
|
|
1147
|
-
if (column > len || column < 0) {
|
|
1148
|
-
throw new StringIndexOutOfBoundsException(
|
|
1149
|
-
"Column " + column + " out of bounds for INDEX. line: " + line + ", valid range: [0, " + len + "]");
|
|
1150
|
-
}
|
|
1151
|
-
} else {
|
|
1152
|
-
if (column >= len || column < 0) {
|
|
1153
|
-
throw new StringIndexOutOfBoundsException(
|
|
1154
|
-
"Column " + column + " out of bounds for INDEX. line: " + line + ", valid range: [0, " + len + ")");
|
|
1155
|
-
}
|
|
1156
|
-
}
|
|
1157
|
-
}
|
|
1158
|
-
}
|
|
1159
|
-
}
|
|
1160
|
-
|
|
1161
|
-
/**
|
|
1162
|
-
* Copy text in this Content object.
|
|
1163
|
-
* Returns a new thread-safe Content object with the same text as this object. By default, the object is
|
|
1164
|
-
* thread-safe and access operations are locked when accessed by multiple threads.
|
|
1165
|
-
*/
|
|
1166
|
-
public Content copyText() {
|
|
1167
|
-
return copyText(true);
|
|
1168
|
-
}
|
|
1169
|
-
|
|
1170
|
-
/**
|
|
1171
|
-
* Copy text in this Content object.
|
|
1172
|
-
* Returns a new Content object with the same text as this object.
|
|
1173
|
-
*/
|
|
1174
|
-
public Content copyText(boolean newContentThreadSafe) {
|
|
1175
|
-
return copyText(newContentThreadSafe, false);
|
|
1176
|
-
}
|
|
1177
|
-
|
|
1178
|
-
/**
|
|
1179
|
-
* Copy text in this Content object.
|
|
1180
|
-
* Returns a new Content object with the same text as this object.
|
|
1181
|
-
*/
|
|
1182
|
-
public Content copyText(boolean newContentThreadSafe, boolean shallow) {
|
|
1183
|
-
lock(false);
|
|
1184
|
-
try {
|
|
1185
|
-
var n = new Content(null, newContentThreadSafe);
|
|
1186
|
-
n.lines.remove(0);
|
|
1187
|
-
((ArrayList<ContentLine>) n.lines).ensureCapacity(getLineCount());
|
|
1188
|
-
if (shallow) {
|
|
1189
|
-
for (ContentLine line : lines) {
|
|
1190
|
-
line.retain();
|
|
1191
|
-
}
|
|
1192
|
-
n.lines.addAll(lines);
|
|
1193
|
-
} else {
|
|
1194
|
-
for (ContentLine line : lines) {
|
|
1195
|
-
n.lines.add(new ContentLine(line));
|
|
1196
|
-
}
|
|
1197
|
-
}
|
|
1198
|
-
n.textLength = textLength;
|
|
1199
|
-
return n;
|
|
1200
|
-
} finally {
|
|
1201
|
-
unlock(false);
|
|
1202
|
-
}
|
|
1203
|
-
}
|
|
1204
|
-
|
|
1205
|
-
/**
|
|
1206
|
-
* Shallow copy text in this Content object.
|
|
1207
|
-
* Returns a new Content object with the same text as this object. By default, the object is not
|
|
1208
|
-
* thread-safe and should be accessed by a single thread.
|
|
1209
|
-
*/
|
|
1210
|
-
public Content copyTextShallow() {
|
|
1211
|
-
return copyTextShallow(false);
|
|
1212
|
-
}
|
|
1213
|
-
|
|
1214
|
-
/**
|
|
1215
|
-
* Shallow copy text in this Content object.
|
|
1216
|
-
* Returns a new Content object with the same text as this object.
|
|
1217
|
-
*/
|
|
1218
|
-
public Content copyTextShallow(boolean newContentThreadSafe) {
|
|
1219
|
-
return copyText(newContentThreadSafe, true);
|
|
1220
|
-
}
|
|
1221
|
-
|
|
1222
|
-
/**
|
|
1223
|
-
* Release this text object.
|
|
1224
|
-
* Release any shareable instance currently held. It's recommended to call this after a shallow copied
|
|
1225
|
-
* instance is no longer used.
|
|
1226
|
-
*/
|
|
1227
|
-
public void release() {
|
|
1228
|
-
lock(true);
|
|
1229
|
-
try {
|
|
1230
|
-
for (ContentLine line : lines) {
|
|
1231
|
-
line.release();
|
|
1232
|
-
}
|
|
1233
|
-
lines.clear();
|
|
1234
|
-
textLength = 0;
|
|
1235
|
-
this.cursor = null;
|
|
1236
|
-
this.bidi.destroy();
|
|
1237
|
-
} finally {
|
|
1238
|
-
unlock(true);
|
|
1239
|
-
}
|
|
1240
|
-
}
|
|
1241
|
-
|
|
1242
|
-
protected int getColumnCountUnsafe(int line) {
|
|
1243
|
-
return lines.get(line).length();
|
|
1244
|
-
}
|
|
1245
|
-
|
|
1246
|
-
@NonNull
|
|
1247
|
-
protected LineSeparator getLineSeparatorUnsafe(int line) {
|
|
1248
|
-
return lines.get(line).getLineSeparator();
|
|
1249
|
-
}
|
|
1250
|
-
|
|
1251
|
-
/**
|
|
1252
|
-
* Read the lines (ordered).
|
|
1253
|
-
* This is for optimizing frequent lock acquiring.
|
|
1254
|
-
*
|
|
1255
|
-
* @param startLine inclusive
|
|
1256
|
-
* @param endLine inclusive
|
|
1257
|
-
*/
|
|
1258
|
-
public void runReadActionsOnLines(int startLine, int endLine, @NonNull ContentLineConsumer consumer) {
|
|
1259
|
-
lock(false);
|
|
1260
|
-
try {
|
|
1261
|
-
for (int i = startLine; i <= endLine; i++) {
|
|
1262
|
-
var t = lines.get(i);
|
|
1263
|
-
consumer.accept(i, t, bidi.getLineDirections(t, i));
|
|
1264
|
-
}
|
|
1265
|
-
} finally {
|
|
1266
|
-
unlock(false);
|
|
1267
|
-
}
|
|
1268
|
-
}
|
|
1269
|
-
|
|
1270
|
-
/**
|
|
1271
|
-
* Read the lines (ordered).
|
|
1272
|
-
* This is for optimizing frequent lock acquiring.
|
|
1273
|
-
*
|
|
1274
|
-
* @param startLine inclusive
|
|
1275
|
-
* @param endLine inclusive
|
|
1276
|
-
*/
|
|
1277
|
-
public void runReadActionsOnLines(int startLine, int endLine, @NonNull ContentLineConsumer2 consumer) {
|
|
1278
|
-
lock(false);
|
|
1279
|
-
try {
|
|
1280
|
-
var flag = new ContentLineConsumer2.AbortFlag();
|
|
1281
|
-
for (int i = startLine; i <= endLine && !flag.set; i++) {
|
|
1282
|
-
consumer.accept(i, lines.get(i), flag);
|
|
1283
|
-
}
|
|
1284
|
-
} finally {
|
|
1285
|
-
unlock(false);
|
|
1286
|
-
}
|
|
1287
|
-
}
|
|
1288
|
-
|
|
1289
|
-
|
|
1290
|
-
public interface ContentLineConsumer {
|
|
1291
|
-
|
|
1292
|
-
void accept(int lineIndex, @NonNull ContentLine line, @NonNull Directions dirs);
|
|
1293
|
-
|
|
1294
|
-
}
|
|
1295
|
-
|
|
1296
|
-
public interface ContentLineConsumer2 {
|
|
1297
|
-
|
|
1298
|
-
void accept(int lineIndex, @NonNull ContentLine line, @NonNull AbortFlag flag);
|
|
1299
|
-
|
|
1300
|
-
class AbortFlag {
|
|
1301
|
-
public boolean set = false;
|
|
1302
|
-
}
|
|
1303
|
-
|
|
1304
|
-
}
|
|
1305
|
-
}
|
|
1306
|
-
|