@fendent/react-native-enriched 0.5.2-fork.1
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/LICENSE +20 -0
- package/README.md +343 -0
- package/ReactNativeEnriched.podspec +31 -0
- package/android/build.gradle +106 -0
- package/android/generated/java/com/facebook/react/viewmanagers/EnrichedTextInputViewManagerDelegate.java +197 -0
- package/android/generated/java/com/facebook/react/viewmanagers/EnrichedTextInputViewManagerInterface.java +72 -0
- package/android/generated/jni/react/renderer/components/ReactNativeEnrichedSpec/ComponentDescriptors.cpp +22 -0
- package/android/generated/jni/react/renderer/components/ReactNativeEnrichedSpec/ComponentDescriptors.h +24 -0
- package/android/generated/jni/react/renderer/components/ReactNativeEnrichedSpec/EventEmitters.cpp +434 -0
- package/android/generated/jni/react/renderer/components/ReactNativeEnrichedSpec/EventEmitters.h +391 -0
- package/android/generated/jni/react/renderer/components/ReactNativeEnrichedSpec/Props.cpp +173 -0
- package/android/generated/jni/react/renderer/components/ReactNativeEnrichedSpec/Props.h +833 -0
- package/android/generated/jni/react/renderer/components/ReactNativeEnrichedSpec/ShadowNodes.cpp +17 -0
- package/android/generated/jni/react/renderer/components/ReactNativeEnrichedSpec/ShadowNodes.h +23 -0
- package/android/generated/jni/react/renderer/components/ReactNativeEnrichedSpec/States.cpp +16 -0
- package/android/generated/jni/react/renderer/components/ReactNativeEnrichedSpec/States.h +20 -0
- package/android/gradle.properties +5 -0
- package/android/lint.gradle +70 -0
- package/android/src/main/AndroidManifest.xml +3 -0
- package/android/src/main/AndroidManifestNew.xml +2 -0
- package/android/src/main/java/com/swmansion/enriched/ReactNativeEnrichedPackage.kt +20 -0
- package/android/src/main/java/com/swmansion/enriched/common/AsyncDrawable.kt +126 -0
- package/android/src/main/java/com/swmansion/enriched/common/CheckboxDrawable.kt +81 -0
- package/android/src/main/java/com/swmansion/enriched/common/EnrichedConstants.kt +11 -0
- package/android/src/main/java/com/swmansion/enriched/common/EnrichedStyle.kt +57 -0
- package/android/src/main/java/com/swmansion/enriched/common/ForceRedrawSpan.kt +14 -0
- package/android/src/main/java/com/swmansion/enriched/common/GumboNormalizer.kt +5 -0
- package/android/src/main/java/com/swmansion/enriched/common/MentionStyle.kt +7 -0
- package/android/src/main/java/com/swmansion/enriched/common/ResourceManager.kt +26 -0
- package/android/src/main/java/com/swmansion/enriched/common/parser/EnrichedParser.java +956 -0
- package/android/src/main/java/com/swmansion/enriched/common/parser/EnrichedSpanFactory.kt +79 -0
- package/android/src/main/java/com/swmansion/enriched/common/spans/EnrichedBlockQuoteSpan.kt +53 -0
- package/android/src/main/java/com/swmansion/enriched/common/spans/EnrichedBoldSpan.kt +12 -0
- package/android/src/main/java/com/swmansion/enriched/common/spans/EnrichedCheckboxListSpan.kt +92 -0
- package/android/src/main/java/com/swmansion/enriched/common/spans/EnrichedCodeBlockSpan.kt +81 -0
- package/android/src/main/java/com/swmansion/enriched/common/spans/EnrichedH1Span.kt +20 -0
- package/android/src/main/java/com/swmansion/enriched/common/spans/EnrichedH2Span.kt +20 -0
- package/android/src/main/java/com/swmansion/enriched/common/spans/EnrichedH3Span.kt +20 -0
- package/android/src/main/java/com/swmansion/enriched/common/spans/EnrichedH4Span.kt +21 -0
- package/android/src/main/java/com/swmansion/enriched/common/spans/EnrichedH5Span.kt +20 -0
- package/android/src/main/java/com/swmansion/enriched/common/spans/EnrichedH6Span.kt +20 -0
- package/android/src/main/java/com/swmansion/enriched/common/spans/EnrichedImageSpan.kt +184 -0
- package/android/src/main/java/com/swmansion/enriched/common/spans/EnrichedInlineCodeSpan.kt +24 -0
- package/android/src/main/java/com/swmansion/enriched/common/spans/EnrichedItalicSpan.kt +12 -0
- package/android/src/main/java/com/swmansion/enriched/common/spans/EnrichedLinkSpan.kt +29 -0
- package/android/src/main/java/com/swmansion/enriched/common/spans/EnrichedMentionSpan.kt +35 -0
- package/android/src/main/java/com/swmansion/enriched/common/spans/EnrichedOrderedListSpan.kt +79 -0
- package/android/src/main/java/com/swmansion/enriched/common/spans/EnrichedStrikeThroughSpan.kt +11 -0
- package/android/src/main/java/com/swmansion/enriched/common/spans/EnrichedUnderlineSpan.kt +11 -0
- package/android/src/main/java/com/swmansion/enriched/common/spans/EnrichedUnorderedListSpan.kt +62 -0
- package/android/src/main/java/com/swmansion/enriched/common/spans/interfaces/EnrichedBlockSpan.kt +5 -0
- package/android/src/main/java/com/swmansion/enriched/common/spans/interfaces/EnrichedHeadingSpan.kt +3 -0
- package/android/src/main/java/com/swmansion/enriched/common/spans/interfaces/EnrichedInlineSpan.kt +3 -0
- package/android/src/main/java/com/swmansion/enriched/common/spans/interfaces/EnrichedParagraphSpan.kt +5 -0
- package/android/src/main/java/com/swmansion/enriched/common/spans/interfaces/EnrichedSpan.kt +3 -0
- package/android/src/main/java/com/swmansion/enriched/common/spans/interfaces/EnrichedZeroWidthSpaceSpan.kt +4 -0
- package/android/src/main/java/com/swmansion/enriched/textinput/EnrichedTextInputConnectionWrapper.kt +140 -0
- package/android/src/main/java/com/swmansion/enriched/textinput/EnrichedTextInputSpannableFactory.kt +83 -0
- package/android/src/main/java/com/swmansion/enriched/textinput/EnrichedTextInputView.kt +1120 -0
- package/android/src/main/java/com/swmansion/enriched/textinput/EnrichedTextInputViewLayoutManager.kt +27 -0
- package/android/src/main/java/com/swmansion/enriched/textinput/EnrichedTextInputViewManager.kt +478 -0
- package/android/src/main/java/com/swmansion/enriched/textinput/MeasurementStore.kt +225 -0
- package/android/src/main/java/com/swmansion/enriched/textinput/events/MentionHandler.kt +55 -0
- package/android/src/main/java/com/swmansion/enriched/textinput/events/OnChangeHtmlEvent.kt +27 -0
- package/android/src/main/java/com/swmansion/enriched/textinput/events/OnChangeSelectionEvent.kt +30 -0
- package/android/src/main/java/com/swmansion/enriched/textinput/events/OnChangeStateEvent.kt +21 -0
- package/android/src/main/java/com/swmansion/enriched/textinput/events/OnChangeTextEvent.kt +30 -0
- package/android/src/main/java/com/swmansion/enriched/textinput/events/OnContextMenuItemPressEvent.kt +35 -0
- package/android/src/main/java/com/swmansion/enriched/textinput/events/OnInputBlurEvent.kt +25 -0
- package/android/src/main/java/com/swmansion/enriched/textinput/events/OnInputFocusEvent.kt +25 -0
- package/android/src/main/java/com/swmansion/enriched/textinput/events/OnInputKeyPressEvent.kt +27 -0
- package/android/src/main/java/com/swmansion/enriched/textinput/events/OnLinkDetectedEvent.kt +32 -0
- package/android/src/main/java/com/swmansion/enriched/textinput/events/OnMentionDetectedEvent.kt +30 -0
- package/android/src/main/java/com/swmansion/enriched/textinput/events/OnMentionEvent.kt +34 -0
- package/android/src/main/java/com/swmansion/enriched/textinput/events/OnPasteImagesEvent.kt +47 -0
- package/android/src/main/java/com/swmansion/enriched/textinput/events/OnRequestHtmlResultEvent.kt +32 -0
- package/android/src/main/java/com/swmansion/enriched/textinput/events/OnSubmitEditingEvent.kt +29 -0
- package/android/src/main/java/com/swmansion/enriched/textinput/spans/EnrichedInputBlockQuoteSpan.kt +14 -0
- package/android/src/main/java/com/swmansion/enriched/textinput/spans/EnrichedInputBoldSpan.kt +14 -0
- package/android/src/main/java/com/swmansion/enriched/textinput/spans/EnrichedInputCheckboxListSpan.kt +15 -0
- package/android/src/main/java/com/swmansion/enriched/textinput/spans/EnrichedInputCodeBlockSpan.kt +14 -0
- package/android/src/main/java/com/swmansion/enriched/textinput/spans/EnrichedInputH1Span.kt +14 -0
- package/android/src/main/java/com/swmansion/enriched/textinput/spans/EnrichedInputH2Span.kt +14 -0
- package/android/src/main/java/com/swmansion/enriched/textinput/spans/EnrichedInputH3Span.kt +14 -0
- package/android/src/main/java/com/swmansion/enriched/textinput/spans/EnrichedInputH4Span.kt +14 -0
- package/android/src/main/java/com/swmansion/enriched/textinput/spans/EnrichedInputH5Span.kt +14 -0
- package/android/src/main/java/com/swmansion/enriched/textinput/spans/EnrichedInputH6Span.kt +14 -0
- package/android/src/main/java/com/swmansion/enriched/textinput/spans/EnrichedInputImageSpan.kt +36 -0
- package/android/src/main/java/com/swmansion/enriched/textinput/spans/EnrichedInputInlineCodeSpan.kt +14 -0
- package/android/src/main/java/com/swmansion/enriched/textinput/spans/EnrichedInputItalicSpan.kt +14 -0
- package/android/src/main/java/com/swmansion/enriched/textinput/spans/EnrichedInputLinkSpan.kt +16 -0
- package/android/src/main/java/com/swmansion/enriched/textinput/spans/EnrichedInputMentionSpan.kt +18 -0
- package/android/src/main/java/com/swmansion/enriched/textinput/spans/EnrichedInputOrderedListSpan.kt +21 -0
- package/android/src/main/java/com/swmansion/enriched/textinput/spans/EnrichedInputStrikeThroughSpan.kt +14 -0
- package/android/src/main/java/com/swmansion/enriched/textinput/spans/EnrichedInputUnderlineSpan.kt +14 -0
- package/android/src/main/java/com/swmansion/enriched/textinput/spans/EnrichedInputUnorderedListSpan.kt +14 -0
- package/android/src/main/java/com/swmansion/enriched/textinput/spans/EnrichedLineHeightSpan.kt +44 -0
- package/android/src/main/java/com/swmansion/enriched/textinput/spans/EnrichedSpans.kt +241 -0
- package/android/src/main/java/com/swmansion/enriched/textinput/spans/interfaces/EnrichedInputSpan.kt +10 -0
- package/android/src/main/java/com/swmansion/enriched/textinput/styles/HtmlStyle.kt +372 -0
- package/android/src/main/java/com/swmansion/enriched/textinput/styles/InlineStyles.kt +164 -0
- package/android/src/main/java/com/swmansion/enriched/textinput/styles/ListStyles.kt +263 -0
- package/android/src/main/java/com/swmansion/enriched/textinput/styles/ParagraphStyles.kt +434 -0
- package/android/src/main/java/com/swmansion/enriched/textinput/styles/ParametrizedStyles.kt +394 -0
- package/android/src/main/java/com/swmansion/enriched/textinput/utils/EnrichedEditableFactory.kt +17 -0
- package/android/src/main/java/com/swmansion/enriched/textinput/utils/EnrichedSelection.kt +320 -0
- package/android/src/main/java/com/swmansion/enriched/textinput/utils/EnrichedSpanState.kt +310 -0
- package/android/src/main/java/com/swmansion/enriched/textinput/utils/EnrichedSpannable.kt +106 -0
- package/android/src/main/java/com/swmansion/enriched/textinput/utils/EnrichedSpannableStringBuilder.kt +24 -0
- package/android/src/main/java/com/swmansion/enriched/textinput/utils/RichContentReceiver.kt +127 -0
- package/android/src/main/java/com/swmansion/enriched/textinput/utils/Utils.kt +106 -0
- package/android/src/main/java/com/swmansion/enriched/textinput/watchers/EnrichedSpanWatcher.kt +107 -0
- package/android/src/main/java/com/swmansion/enriched/textinput/watchers/EnrichedTextWatcher.kt +74 -0
- package/android/src/main/new_arch/CMakeLists.txt +62 -0
- package/android/src/main/new_arch/GumboNormalizerJni.cpp +14 -0
- package/android/src/main/new_arch/ReactNativeEnrichedSpec.cpp +11 -0
- package/android/src/main/new_arch/ReactNativeEnrichedSpec.h +15 -0
- package/android/src/main/new_arch/react/renderer/components/ReactNativeEnrichedSpec/EnrichedTextInputComponentDescriptor.h +35 -0
- package/android/src/main/new_arch/react/renderer/components/ReactNativeEnrichedSpec/EnrichedTextInputMeasurementManager.cpp +53 -0
- package/android/src/main/new_arch/react/renderer/components/ReactNativeEnrichedSpec/EnrichedTextInputMeasurementManager.h +25 -0
- package/android/src/main/new_arch/react/renderer/components/ReactNativeEnrichedSpec/EnrichedTextInputShadowNode.cpp +35 -0
- package/android/src/main/new_arch/react/renderer/components/ReactNativeEnrichedSpec/EnrichedTextInputShadowNode.h +53 -0
- package/android/src/main/new_arch/react/renderer/components/ReactNativeEnrichedSpec/EnrichedTextInputState.cpp +9 -0
- package/android/src/main/new_arch/react/renderer/components/ReactNativeEnrichedSpec/EnrichedTextInputState.h +24 -0
- package/android/src/main/new_arch/react/renderer/components/ReactNativeEnrichedSpec/conversions.h +27 -0
- package/android/src/main/res/drawable/broken_image.xml +10 -0
- package/cpp/CMakeLists.txt +50 -0
- package/cpp/GumboParser/GumboParser.h +34043 -0
- package/cpp/README.md +59 -0
- package/cpp/parser/GumboNormalizer.c +915 -0
- package/cpp/parser/GumboParser.cpp +16 -0
- package/cpp/parser/GumboParser.hpp +23 -0
- package/cpp/tests/GumboParserTest.cpp +457 -0
- package/ios/EnrichedTextInputView.h +53 -0
- package/ios/EnrichedTextInputView.mm +2360 -0
- package/ios/EnrichedTextInputViewManager.mm +13 -0
- package/ios/attributesManager/AttributesManager.h +17 -0
- package/ios/attributesManager/AttributesManager.mm +195 -0
- package/ios/config/InputConfig.h +104 -0
- package/ios/config/InputConfig.mm +664 -0
- package/ios/extensions/ColorExtension.h +7 -0
- package/ios/extensions/ColorExtension.mm +38 -0
- package/ios/extensions/FontExtension.h +11 -0
- package/ios/extensions/FontExtension.mm +72 -0
- package/ios/extensions/ImageExtension.h +34 -0
- package/ios/extensions/ImageExtension.mm +165 -0
- package/ios/extensions/LayoutManagerExtension.h +6 -0
- package/ios/extensions/LayoutManagerExtension.mm +443 -0
- package/ios/extensions/StringExtension.h +15 -0
- package/ios/extensions/StringExtension.mm +69 -0
- package/ios/generated/ReactNativeEnrichedSpec/ComponentDescriptors.cpp +22 -0
- package/ios/generated/ReactNativeEnrichedSpec/ComponentDescriptors.h +24 -0
- package/ios/generated/ReactNativeEnrichedSpec/EventEmitters.cpp +434 -0
- package/ios/generated/ReactNativeEnrichedSpec/EventEmitters.h +391 -0
- package/ios/generated/ReactNativeEnrichedSpec/Props.cpp +173 -0
- package/ios/generated/ReactNativeEnrichedSpec/Props.h +833 -0
- package/ios/generated/ReactNativeEnrichedSpec/RCTComponentViewHelpers.h +582 -0
- package/ios/generated/ReactNativeEnrichedSpec/ShadowNodes.cpp +17 -0
- package/ios/generated/ReactNativeEnrichedSpec/ShadowNodes.h +23 -0
- package/ios/generated/ReactNativeEnrichedSpec/States.cpp +16 -0
- package/ios/generated/ReactNativeEnrichedSpec/States.h +20 -0
- package/ios/inputParser/InputParser.h +11 -0
- package/ios/inputParser/InputParser.mm +1463 -0
- package/ios/inputTextView/InputTextView.h +6 -0
- package/ios/inputTextView/InputTextView.mm +285 -0
- package/ios/interfaces/AttributeEntry.h +9 -0
- package/ios/interfaces/AttributeEntry.mm +4 -0
- package/ios/interfaces/BaseStyleProtocol.h +17 -0
- package/ios/interfaces/ImageAttachment.h +11 -0
- package/ios/interfaces/ImageAttachment.mm +107 -0
- package/ios/interfaces/ImageData.h +10 -0
- package/ios/interfaces/ImageData.mm +4 -0
- package/ios/interfaces/LinkData.h +11 -0
- package/ios/interfaces/LinkData.mm +29 -0
- package/ios/interfaces/LinkRegexConfig.h +19 -0
- package/ios/interfaces/LinkRegexConfig.mm +37 -0
- package/ios/interfaces/MediaAttachment.h +23 -0
- package/ios/interfaces/MediaAttachment.mm +31 -0
- package/ios/interfaces/MentionParams.h +8 -0
- package/ios/interfaces/MentionParams.mm +4 -0
- package/ios/interfaces/MentionStyleProps.h +13 -0
- package/ios/interfaces/MentionStyleProps.mm +63 -0
- package/ios/interfaces/StyleBase.h +36 -0
- package/ios/interfaces/StyleBase.mm +256 -0
- package/ios/interfaces/StyleHeaders.h +102 -0
- package/ios/interfaces/StylePair.h +9 -0
- package/ios/interfaces/StylePair.mm +4 -0
- package/ios/interfaces/StyleTypeEnum.h +26 -0
- package/ios/interfaces/TextDecorationLineEnum.h +6 -0
- package/ios/interfaces/TextDecorationLineEnum.mm +4 -0
- package/ios/internals/EnrichedTextInputViewComponentDescriptor.h +19 -0
- package/ios/internals/EnrichedTextInputViewShadowNode.h +44 -0
- package/ios/internals/EnrichedTextInputViewShadowNode.mm +103 -0
- package/ios/internals/EnrichedTextInputViewState.cpp +10 -0
- package/ios/internals/EnrichedTextInputViewState.h +22 -0
- package/ios/styles/BlockQuoteStyle.mm +55 -0
- package/ios/styles/BoldStyle.mm +37 -0
- package/ios/styles/CheckboxListStyle.mm +153 -0
- package/ios/styles/CodeBlockStyle.mm +49 -0
- package/ios/styles/H1Style.mm +20 -0
- package/ios/styles/H2Style.mm +20 -0
- package/ios/styles/H3Style.mm +20 -0
- package/ios/styles/H4Style.mm +20 -0
- package/ios/styles/H5Style.mm +20 -0
- package/ios/styles/H6Style.mm +20 -0
- package/ios/styles/HeadingStyleBase.mm +65 -0
- package/ios/styles/ImageStyle.mm +146 -0
- package/ios/styles/InlineCodeStyle.mm +65 -0
- package/ios/styles/ItalicStyle.mm +37 -0
- package/ios/styles/LinkStyle.mm +532 -0
- package/ios/styles/MentionStyle.mm +538 -0
- package/ios/styles/OrderedListStyle.mm +86 -0
- package/ios/styles/StrikethroughStyle.mm +25 -0
- package/ios/styles/UnderlineStyle.mm +24 -0
- package/ios/styles/UnorderedListStyle.mm +86 -0
- package/ios/utils/CheckboxHitTestUtils.h +10 -0
- package/ios/utils/CheckboxHitTestUtils.mm +122 -0
- package/ios/utils/DotReplacementUtils.h +10 -0
- package/ios/utils/DotReplacementUtils.mm +68 -0
- package/ios/utils/KeyboardUtils.h +7 -0
- package/ios/utils/KeyboardUtils.mm +31 -0
- package/ios/utils/OccurenceUtils.h +44 -0
- package/ios/utils/OccurenceUtils.mm +179 -0
- package/ios/utils/ParagraphAttributesUtils.h +15 -0
- package/ios/utils/ParagraphAttributesUtils.mm +257 -0
- package/ios/utils/RangeUtils.h +12 -0
- package/ios/utils/RangeUtils.mm +183 -0
- package/ios/utils/TextBlockTapGestureRecognizer.h +17 -0
- package/ios/utils/TextBlockTapGestureRecognizer.mm +56 -0
- package/ios/utils/TextInsertionUtils.h +17 -0
- package/ios/utils/TextInsertionUtils.mm +64 -0
- package/ios/utils/WordsUtils.h +7 -0
- package/ios/utils/WordsUtils.mm +98 -0
- package/ios/utils/ZeroWidthSpaceUtils.h +9 -0
- package/ios/utils/ZeroWidthSpaceUtils.mm +270 -0
- package/lib/module/index.js +4 -0
- package/lib/module/index.js.map +1 -0
- package/lib/module/native/EnrichedTextInput.js +304 -0
- package/lib/module/native/EnrichedTextInput.js.map +1 -0
- package/lib/module/package.json +1 -0
- package/lib/module/spec/EnrichedTextInputNativeComponent.ts +517 -0
- package/lib/module/types.js +4 -0
- package/lib/module/types.js.map +1 -0
- package/lib/module/utils/EnrichedTextInputDefaultProps.js +12 -0
- package/lib/module/utils/EnrichedTextInputDefaultProps.js.map +1 -0
- package/lib/module/utils/normalizeHtmlStyle.js +155 -0
- package/lib/module/utils/normalizeHtmlStyle.js.map +1 -0
- package/lib/module/utils/nullthrows.js +9 -0
- package/lib/module/utils/nullthrows.js.map +1 -0
- package/lib/module/utils/regexParser.js +46 -0
- package/lib/module/utils/regexParser.js.map +1 -0
- package/lib/typescript/package.json +1 -0
- package/lib/typescript/src/index.d.ts +3 -0
- package/lib/typescript/src/index.d.ts.map +1 -0
- package/lib/typescript/src/native/EnrichedTextInput.d.ts +3 -0
- package/lib/typescript/src/native/EnrichedTextInput.d.ts.map +1 -0
- package/lib/typescript/src/spec/EnrichedTextInputNativeComponent.d.ts +397 -0
- package/lib/typescript/src/spec/EnrichedTextInputNativeComponent.d.ts.map +1 -0
- package/lib/typescript/src/types.d.ts +447 -0
- package/lib/typescript/src/types.d.ts.map +1 -0
- package/lib/typescript/src/utils/EnrichedTextInputDefaultProps.d.ts +10 -0
- package/lib/typescript/src/utils/EnrichedTextInputDefaultProps.d.ts.map +1 -0
- package/lib/typescript/src/utils/normalizeHtmlStyle.d.ts +4 -0
- package/lib/typescript/src/utils/normalizeHtmlStyle.d.ts.map +1 -0
- package/lib/typescript/src/utils/nullthrows.d.ts +2 -0
- package/lib/typescript/src/utils/nullthrows.d.ts.map +1 -0
- package/lib/typescript/src/utils/regexParser.d.ts +3 -0
- package/lib/typescript/src/utils/regexParser.d.ts.map +1 -0
- package/package.json +226 -0
- package/react-native.config.js +13 -0
- package/src/index.tsx +20 -0
- package/src/native/EnrichedTextInput.tsx +370 -0
- package/src/spec/EnrichedTextInputNativeComponent.ts +517 -0
- package/src/types.ts +499 -0
- package/src/utils/EnrichedTextInputDefaultProps.ts +9 -0
- package/src/utils/normalizeHtmlStyle.ts +199 -0
- package/src/utils/nullthrows.ts +7 -0
- package/src/utils/regexParser.ts +56 -0
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
package com.swmansion.enriched.textinput.events
|
|
2
|
+
|
|
3
|
+
import android.text.Editable
|
|
4
|
+
import com.facebook.react.bridge.Arguments
|
|
5
|
+
import com.facebook.react.bridge.WritableMap
|
|
6
|
+
import com.facebook.react.uimanager.events.Event
|
|
7
|
+
|
|
8
|
+
class OnSubmitEditingEvent(
|
|
9
|
+
surfaceId: Int,
|
|
10
|
+
viewId: Int,
|
|
11
|
+
private val editable: Editable?,
|
|
12
|
+
private val experimentalSynchronousEvents: Boolean,
|
|
13
|
+
) : Event<OnSubmitEditingEvent>(surfaceId, viewId) {
|
|
14
|
+
override fun getEventName(): String = EVENT_NAME
|
|
15
|
+
|
|
16
|
+
override fun getEventData(): WritableMap {
|
|
17
|
+
val eventData: WritableMap = Arguments.createMap()
|
|
18
|
+
val text = editable.toString()
|
|
19
|
+
val normalizedText = text.replace(Regex("\\u200B"), "")
|
|
20
|
+
eventData.putString("text", normalizedText)
|
|
21
|
+
return eventData
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
override fun experimental_isSynchronous(): Boolean = experimentalSynchronousEvents
|
|
25
|
+
|
|
26
|
+
companion object {
|
|
27
|
+
const val EVENT_NAME: String = "onSubmitEditing"
|
|
28
|
+
}
|
|
29
|
+
}
|
package/android/src/main/java/com/swmansion/enriched/textinput/spans/EnrichedInputBlockQuoteSpan.kt
ADDED
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
package com.swmansion.enriched.textinput.spans
|
|
2
|
+
|
|
3
|
+
import com.swmansion.enriched.common.spans.EnrichedBlockQuoteSpan
|
|
4
|
+
import com.swmansion.enriched.textinput.spans.interfaces.EnrichedInputSpan
|
|
5
|
+
import com.swmansion.enriched.textinput.styles.HtmlStyle
|
|
6
|
+
|
|
7
|
+
class EnrichedInputBlockQuoteSpan(
|
|
8
|
+
htmlStyle: HtmlStyle,
|
|
9
|
+
) : EnrichedBlockQuoteSpan(htmlStyle),
|
|
10
|
+
EnrichedInputSpan {
|
|
11
|
+
override val dependsOnHtmlStyle: Boolean = true
|
|
12
|
+
|
|
13
|
+
override fun rebuildWithStyle(htmlStyle: HtmlStyle): EnrichedInputBlockQuoteSpan = EnrichedInputBlockQuoteSpan(htmlStyle)
|
|
14
|
+
}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
package com.swmansion.enriched.textinput.spans
|
|
2
|
+
|
|
3
|
+
import com.swmansion.enriched.common.spans.EnrichedBoldSpan
|
|
4
|
+
import com.swmansion.enriched.textinput.spans.interfaces.EnrichedInputSpan
|
|
5
|
+
import com.swmansion.enriched.textinput.styles.HtmlStyle
|
|
6
|
+
|
|
7
|
+
class EnrichedInputBoldSpan(
|
|
8
|
+
htmlStyle: HtmlStyle,
|
|
9
|
+
) : EnrichedBoldSpan(htmlStyle),
|
|
10
|
+
EnrichedInputSpan {
|
|
11
|
+
override val dependsOnHtmlStyle: Boolean = false
|
|
12
|
+
|
|
13
|
+
override fun rebuildWithStyle(htmlStyle: HtmlStyle): EnrichedInputBoldSpan = EnrichedInputBoldSpan(htmlStyle)
|
|
14
|
+
}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
package com.swmansion.enriched.textinput.spans
|
|
2
|
+
|
|
3
|
+
import com.swmansion.enriched.common.spans.EnrichedCheckboxListSpan
|
|
4
|
+
import com.swmansion.enriched.textinput.spans.interfaces.EnrichedInputSpan
|
|
5
|
+
import com.swmansion.enriched.textinput.styles.HtmlStyle
|
|
6
|
+
|
|
7
|
+
class EnrichedInputCheckboxListSpan(
|
|
8
|
+
override var isChecked: Boolean,
|
|
9
|
+
htmlStyle: HtmlStyle,
|
|
10
|
+
) : EnrichedCheckboxListSpan(isChecked, htmlStyle),
|
|
11
|
+
EnrichedInputSpan {
|
|
12
|
+
override val dependsOnHtmlStyle: Boolean = true
|
|
13
|
+
|
|
14
|
+
override fun rebuildWithStyle(htmlStyle: HtmlStyle): EnrichedInputCheckboxListSpan = EnrichedInputCheckboxListSpan(isChecked, htmlStyle)
|
|
15
|
+
}
|
package/android/src/main/java/com/swmansion/enriched/textinput/spans/EnrichedInputCodeBlockSpan.kt
ADDED
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
package com.swmansion.enriched.textinput.spans
|
|
2
|
+
|
|
3
|
+
import com.swmansion.enriched.common.spans.EnrichedCodeBlockSpan
|
|
4
|
+
import com.swmansion.enriched.textinput.spans.interfaces.EnrichedInputSpan
|
|
5
|
+
import com.swmansion.enriched.textinput.styles.HtmlStyle
|
|
6
|
+
|
|
7
|
+
class EnrichedInputCodeBlockSpan(
|
|
8
|
+
htmlStyle: HtmlStyle,
|
|
9
|
+
) : EnrichedCodeBlockSpan(htmlStyle),
|
|
10
|
+
EnrichedInputSpan {
|
|
11
|
+
override val dependsOnHtmlStyle: Boolean = true
|
|
12
|
+
|
|
13
|
+
override fun rebuildWithStyle(htmlStyle: HtmlStyle): EnrichedInputCodeBlockSpan = EnrichedInputCodeBlockSpan(htmlStyle)
|
|
14
|
+
}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
package com.swmansion.enriched.textinput.spans
|
|
2
|
+
|
|
3
|
+
import com.swmansion.enriched.common.spans.EnrichedH1Span
|
|
4
|
+
import com.swmansion.enriched.textinput.spans.interfaces.EnrichedInputSpan
|
|
5
|
+
import com.swmansion.enriched.textinput.styles.HtmlStyle
|
|
6
|
+
|
|
7
|
+
class EnrichedInputH1Span(
|
|
8
|
+
style: HtmlStyle,
|
|
9
|
+
) : EnrichedH1Span(style),
|
|
10
|
+
EnrichedInputSpan {
|
|
11
|
+
override val dependsOnHtmlStyle: Boolean = true
|
|
12
|
+
|
|
13
|
+
override fun rebuildWithStyle(htmlStyle: HtmlStyle): EnrichedInputH1Span = EnrichedInputH1Span(htmlStyle)
|
|
14
|
+
}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
package com.swmansion.enriched.textinput.spans
|
|
2
|
+
|
|
3
|
+
import com.swmansion.enriched.common.spans.EnrichedH2Span
|
|
4
|
+
import com.swmansion.enriched.textinput.spans.interfaces.EnrichedInputSpan
|
|
5
|
+
import com.swmansion.enriched.textinput.styles.HtmlStyle
|
|
6
|
+
|
|
7
|
+
class EnrichedInputH2Span(
|
|
8
|
+
htmlStyle: HtmlStyle,
|
|
9
|
+
) : EnrichedH2Span(htmlStyle),
|
|
10
|
+
EnrichedInputSpan {
|
|
11
|
+
override val dependsOnHtmlStyle: Boolean = true
|
|
12
|
+
|
|
13
|
+
override fun rebuildWithStyle(htmlStyle: HtmlStyle): EnrichedInputH2Span = EnrichedInputH2Span(htmlStyle)
|
|
14
|
+
}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
package com.swmansion.enriched.textinput.spans
|
|
2
|
+
|
|
3
|
+
import com.swmansion.enriched.common.spans.EnrichedH3Span
|
|
4
|
+
import com.swmansion.enriched.textinput.spans.interfaces.EnrichedInputSpan
|
|
5
|
+
import com.swmansion.enriched.textinput.styles.HtmlStyle
|
|
6
|
+
|
|
7
|
+
class EnrichedInputH3Span(
|
|
8
|
+
htmlStyle: HtmlStyle,
|
|
9
|
+
) : EnrichedH3Span(htmlStyle),
|
|
10
|
+
EnrichedInputSpan {
|
|
11
|
+
override val dependsOnHtmlStyle: Boolean = true
|
|
12
|
+
|
|
13
|
+
override fun rebuildWithStyle(htmlStyle: HtmlStyle): EnrichedInputH3Span = EnrichedInputH3Span(htmlStyle)
|
|
14
|
+
}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
package com.swmansion.enriched.textinput.spans
|
|
2
|
+
|
|
3
|
+
import com.swmansion.enriched.common.spans.EnrichedH4Span
|
|
4
|
+
import com.swmansion.enriched.textinput.spans.interfaces.EnrichedInputSpan
|
|
5
|
+
import com.swmansion.enriched.textinput.styles.HtmlStyle
|
|
6
|
+
|
|
7
|
+
class EnrichedInputH4Span(
|
|
8
|
+
htmlStyle: HtmlStyle,
|
|
9
|
+
) : EnrichedH4Span(htmlStyle),
|
|
10
|
+
EnrichedInputSpan {
|
|
11
|
+
override val dependsOnHtmlStyle: Boolean = true
|
|
12
|
+
|
|
13
|
+
override fun rebuildWithStyle(htmlStyle: HtmlStyle): EnrichedInputH4Span = EnrichedInputH4Span(htmlStyle)
|
|
14
|
+
}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
package com.swmansion.enriched.textinput.spans
|
|
2
|
+
|
|
3
|
+
import com.swmansion.enriched.common.spans.EnrichedH5Span
|
|
4
|
+
import com.swmansion.enriched.textinput.spans.interfaces.EnrichedInputSpan
|
|
5
|
+
import com.swmansion.enriched.textinput.styles.HtmlStyle
|
|
6
|
+
|
|
7
|
+
class EnrichedInputH5Span(
|
|
8
|
+
htmlStyle: HtmlStyle,
|
|
9
|
+
) : EnrichedH5Span(htmlStyle),
|
|
10
|
+
EnrichedInputSpan {
|
|
11
|
+
override val dependsOnHtmlStyle: Boolean = true
|
|
12
|
+
|
|
13
|
+
override fun rebuildWithStyle(htmlStyle: HtmlStyle): EnrichedInputH5Span = EnrichedInputH5Span(htmlStyle)
|
|
14
|
+
}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
package com.swmansion.enriched.textinput.spans
|
|
2
|
+
|
|
3
|
+
import com.swmansion.enriched.common.spans.EnrichedH6Span
|
|
4
|
+
import com.swmansion.enriched.textinput.spans.interfaces.EnrichedInputSpan
|
|
5
|
+
import com.swmansion.enriched.textinput.styles.HtmlStyle
|
|
6
|
+
|
|
7
|
+
class EnrichedInputH6Span(
|
|
8
|
+
htmlStyle: HtmlStyle,
|
|
9
|
+
) : EnrichedH6Span(htmlStyle),
|
|
10
|
+
EnrichedInputSpan {
|
|
11
|
+
override val dependsOnHtmlStyle: Boolean = true
|
|
12
|
+
|
|
13
|
+
override fun rebuildWithStyle(htmlStyle: HtmlStyle): EnrichedInputH6Span = EnrichedInputH6Span(htmlStyle)
|
|
14
|
+
}
|
package/android/src/main/java/com/swmansion/enriched/textinput/spans/EnrichedInputImageSpan.kt
ADDED
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
package com.swmansion.enriched.textinput.spans
|
|
2
|
+
|
|
3
|
+
import android.graphics.drawable.Drawable
|
|
4
|
+
import com.swmansion.enriched.R
|
|
5
|
+
import com.swmansion.enriched.common.ResourceManager
|
|
6
|
+
import com.swmansion.enriched.common.spans.EnrichedImageSpan
|
|
7
|
+
import com.swmansion.enriched.textinput.spans.interfaces.EnrichedInputSpan
|
|
8
|
+
import com.swmansion.enriched.textinput.styles.HtmlStyle
|
|
9
|
+
|
|
10
|
+
class EnrichedInputImageSpan(
|
|
11
|
+
drawable: Drawable,
|
|
12
|
+
source: String,
|
|
13
|
+
width: Int,
|
|
14
|
+
height: Int,
|
|
15
|
+
) : EnrichedImageSpan(drawable, source, width, height),
|
|
16
|
+
EnrichedInputSpan {
|
|
17
|
+
override val dependsOnHtmlStyle: Boolean = false
|
|
18
|
+
|
|
19
|
+
override fun rebuildWithStyle(htmlStyle: HtmlStyle): EnrichedInputImageSpan = this
|
|
20
|
+
|
|
21
|
+
companion object {
|
|
22
|
+
fun createEnrichedImageSpan(
|
|
23
|
+
src: String,
|
|
24
|
+
width: Int,
|
|
25
|
+
height: Int,
|
|
26
|
+
): EnrichedInputImageSpan {
|
|
27
|
+
var imgDrawable = prepareDrawableForImage(src, width, height)
|
|
28
|
+
|
|
29
|
+
if (imgDrawable == null) {
|
|
30
|
+
imgDrawable = ResourceManager.getDrawableResource(R.drawable.broken_image)
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
return EnrichedInputImageSpan(imgDrawable, src, width, height)
|
|
34
|
+
}
|
|
35
|
+
}
|
|
36
|
+
}
|
package/android/src/main/java/com/swmansion/enriched/textinput/spans/EnrichedInputInlineCodeSpan.kt
ADDED
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
package com.swmansion.enriched.textinput.spans
|
|
2
|
+
|
|
3
|
+
import com.swmansion.enriched.common.spans.EnrichedInlineCodeSpan
|
|
4
|
+
import com.swmansion.enriched.textinput.spans.interfaces.EnrichedInputSpan
|
|
5
|
+
import com.swmansion.enriched.textinput.styles.HtmlStyle
|
|
6
|
+
|
|
7
|
+
class EnrichedInputInlineCodeSpan(
|
|
8
|
+
htmlStyle: HtmlStyle,
|
|
9
|
+
) : EnrichedInlineCodeSpan(htmlStyle),
|
|
10
|
+
EnrichedInputSpan {
|
|
11
|
+
override val dependsOnHtmlStyle: Boolean = true
|
|
12
|
+
|
|
13
|
+
override fun rebuildWithStyle(htmlStyle: HtmlStyle): EnrichedInputInlineCodeSpan = EnrichedInputInlineCodeSpan(htmlStyle)
|
|
14
|
+
}
|
package/android/src/main/java/com/swmansion/enriched/textinput/spans/EnrichedInputItalicSpan.kt
ADDED
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
package com.swmansion.enriched.textinput.spans
|
|
2
|
+
|
|
3
|
+
import com.swmansion.enriched.common.spans.EnrichedItalicSpan
|
|
4
|
+
import com.swmansion.enriched.textinput.spans.interfaces.EnrichedInputSpan
|
|
5
|
+
import com.swmansion.enriched.textinput.styles.HtmlStyle
|
|
6
|
+
|
|
7
|
+
class EnrichedInputItalicSpan(
|
|
8
|
+
htmlStyle: HtmlStyle,
|
|
9
|
+
) : EnrichedItalicSpan(htmlStyle),
|
|
10
|
+
EnrichedInputSpan {
|
|
11
|
+
override val dependsOnHtmlStyle: Boolean = false
|
|
12
|
+
|
|
13
|
+
override fun rebuildWithStyle(htmlStyle: HtmlStyle): EnrichedInputItalicSpan = EnrichedInputItalicSpan(htmlStyle)
|
|
14
|
+
}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
package com.swmansion.enriched.textinput.spans
|
|
2
|
+
|
|
3
|
+
import com.swmansion.enriched.common.spans.EnrichedLinkSpan
|
|
4
|
+
import com.swmansion.enriched.textinput.spans.interfaces.EnrichedInputSpan
|
|
5
|
+
import com.swmansion.enriched.textinput.styles.HtmlStyle
|
|
6
|
+
|
|
7
|
+
class EnrichedInputLinkSpan(
|
|
8
|
+
private val url: String,
|
|
9
|
+
htmlStyle: HtmlStyle,
|
|
10
|
+
private val isManual: Boolean = false,
|
|
11
|
+
) : EnrichedLinkSpan(url, htmlStyle, isManual),
|
|
12
|
+
EnrichedInputSpan {
|
|
13
|
+
override val dependsOnHtmlStyle: Boolean = true
|
|
14
|
+
|
|
15
|
+
override fun rebuildWithStyle(htmlStyle: HtmlStyle): EnrichedInputLinkSpan = EnrichedInputLinkSpan(url, htmlStyle, isManual)
|
|
16
|
+
}
|
package/android/src/main/java/com/swmansion/enriched/textinput/spans/EnrichedInputMentionSpan.kt
ADDED
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
package com.swmansion.enriched.textinput.spans
|
|
2
|
+
|
|
3
|
+
import com.swmansion.enriched.common.spans.EnrichedMentionSpan
|
|
4
|
+
import com.swmansion.enriched.textinput.spans.interfaces.EnrichedInputSpan
|
|
5
|
+
import com.swmansion.enriched.textinput.styles.HtmlStyle
|
|
6
|
+
|
|
7
|
+
class EnrichedInputMentionSpan(
|
|
8
|
+
private val text: String,
|
|
9
|
+
private val indicator: String,
|
|
10
|
+
private val attributes: Map<String, String>,
|
|
11
|
+
htmlStyle: HtmlStyle,
|
|
12
|
+
) : EnrichedMentionSpan(text, indicator, attributes, htmlStyle),
|
|
13
|
+
EnrichedInputSpan {
|
|
14
|
+
override val dependsOnHtmlStyle: Boolean = true
|
|
15
|
+
|
|
16
|
+
override fun rebuildWithStyle(htmlStyle: HtmlStyle): EnrichedInputMentionSpan =
|
|
17
|
+
EnrichedInputMentionSpan(text, indicator, attributes, htmlStyle)
|
|
18
|
+
}
|
package/android/src/main/java/com/swmansion/enriched/textinput/spans/EnrichedInputOrderedListSpan.kt
ADDED
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
package com.swmansion.enriched.textinput.spans
|
|
2
|
+
|
|
3
|
+
import com.swmansion.enriched.common.spans.EnrichedOrderedListSpan
|
|
4
|
+
import com.swmansion.enriched.textinput.spans.interfaces.EnrichedInputSpan
|
|
5
|
+
import com.swmansion.enriched.textinput.styles.HtmlStyle
|
|
6
|
+
|
|
7
|
+
class EnrichedInputOrderedListSpan(
|
|
8
|
+
index: Int,
|
|
9
|
+
htmlStyle: HtmlStyle,
|
|
10
|
+
) : EnrichedOrderedListSpan(index, htmlStyle),
|
|
11
|
+
EnrichedInputSpan {
|
|
12
|
+
override val dependsOnHtmlStyle: Boolean = true
|
|
13
|
+
|
|
14
|
+
override fun rebuildWithStyle(htmlStyle: HtmlStyle): EnrichedInputOrderedListSpan = EnrichedInputOrderedListSpan(index, htmlStyle)
|
|
15
|
+
|
|
16
|
+
fun getListIndex(): Int = index
|
|
17
|
+
|
|
18
|
+
fun setListIndex(i: Int) {
|
|
19
|
+
index = i
|
|
20
|
+
}
|
|
21
|
+
}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
package com.swmansion.enriched.textinput.spans
|
|
2
|
+
|
|
3
|
+
import com.swmansion.enriched.common.spans.EnrichedStrikeThroughSpan
|
|
4
|
+
import com.swmansion.enriched.textinput.spans.interfaces.EnrichedInputSpan
|
|
5
|
+
import com.swmansion.enriched.textinput.styles.HtmlStyle
|
|
6
|
+
|
|
7
|
+
class EnrichedInputStrikeThroughSpan(
|
|
8
|
+
htmlStyle: HtmlStyle,
|
|
9
|
+
) : EnrichedStrikeThroughSpan(htmlStyle),
|
|
10
|
+
EnrichedInputSpan {
|
|
11
|
+
override val dependsOnHtmlStyle: Boolean = false
|
|
12
|
+
|
|
13
|
+
override fun rebuildWithStyle(htmlStyle: HtmlStyle): EnrichedInputStrikeThroughSpan = EnrichedInputStrikeThroughSpan(htmlStyle)
|
|
14
|
+
}
|
package/android/src/main/java/com/swmansion/enriched/textinput/spans/EnrichedInputUnderlineSpan.kt
ADDED
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
package com.swmansion.enriched.textinput.spans
|
|
2
|
+
|
|
3
|
+
import com.swmansion.enriched.common.spans.EnrichedUnderlineSpan
|
|
4
|
+
import com.swmansion.enriched.textinput.spans.interfaces.EnrichedInputSpan
|
|
5
|
+
import com.swmansion.enriched.textinput.styles.HtmlStyle
|
|
6
|
+
|
|
7
|
+
class EnrichedInputUnderlineSpan(
|
|
8
|
+
htmlStyle: HtmlStyle,
|
|
9
|
+
) : EnrichedUnderlineSpan(htmlStyle),
|
|
10
|
+
EnrichedInputSpan {
|
|
11
|
+
override val dependsOnHtmlStyle: Boolean = false
|
|
12
|
+
|
|
13
|
+
override fun rebuildWithStyle(htmlStyle: HtmlStyle): EnrichedInputUnderlineSpan = EnrichedInputUnderlineSpan(htmlStyle)
|
|
14
|
+
}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
package com.swmansion.enriched.textinput.spans
|
|
2
|
+
|
|
3
|
+
import com.swmansion.enriched.common.spans.EnrichedUnorderedListSpan
|
|
4
|
+
import com.swmansion.enriched.textinput.spans.interfaces.EnrichedInputSpan
|
|
5
|
+
import com.swmansion.enriched.textinput.styles.HtmlStyle
|
|
6
|
+
|
|
7
|
+
class EnrichedInputUnorderedListSpan(
|
|
8
|
+
htmlStyle: HtmlStyle,
|
|
9
|
+
) : EnrichedUnorderedListSpan(htmlStyle),
|
|
10
|
+
EnrichedInputSpan {
|
|
11
|
+
override val dependsOnHtmlStyle: Boolean = true
|
|
12
|
+
|
|
13
|
+
override fun rebuildWithStyle(htmlStyle: HtmlStyle): EnrichedInputUnorderedListSpan = EnrichedInputUnorderedListSpan(htmlStyle)
|
|
14
|
+
}
|
package/android/src/main/java/com/swmansion/enriched/textinput/spans/EnrichedLineHeightSpan.kt
ADDED
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
package com.swmansion.enriched.textinput.spans
|
|
2
|
+
|
|
3
|
+
import android.graphics.Paint
|
|
4
|
+
import android.text.Spannable
|
|
5
|
+
import android.text.TextPaint
|
|
6
|
+
import android.text.style.LineHeightSpan
|
|
7
|
+
import android.text.style.MetricAffectingSpan
|
|
8
|
+
import com.facebook.react.uimanager.PixelUtil
|
|
9
|
+
import com.swmansion.enriched.common.spans.interfaces.EnrichedHeadingSpan
|
|
10
|
+
|
|
11
|
+
class EnrichedLineHeightSpan(
|
|
12
|
+
val lineHeight: Float,
|
|
13
|
+
) : MetricAffectingSpan(),
|
|
14
|
+
LineHeightSpan {
|
|
15
|
+
override fun updateDrawState(p0: TextPaint?) {
|
|
16
|
+
// Do nothing but inform TextView that line height should be recalculated
|
|
17
|
+
}
|
|
18
|
+
|
|
19
|
+
override fun updateMeasureState(p0: TextPaint) {
|
|
20
|
+
// Do nothing but inform TextView that line height should be recalculated
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
override fun chooseHeight(
|
|
24
|
+
text: CharSequence,
|
|
25
|
+
start: Int,
|
|
26
|
+
end: Int,
|
|
27
|
+
spanstartv: Int,
|
|
28
|
+
v: Int,
|
|
29
|
+
fm: Paint.FontMetricsInt,
|
|
30
|
+
) {
|
|
31
|
+
val spannable = text as? Spannable ?: return
|
|
32
|
+
// Do not modify line height for headings
|
|
33
|
+
// In the future we may consider adding custom lineHeight support for each paragraph style
|
|
34
|
+
if (spannable.getSpans(start, end, EnrichedHeadingSpan::class.java).isNotEmpty()) return
|
|
35
|
+
|
|
36
|
+
val lineHeightPx = PixelUtil.toPixelFromSP(lineHeight)
|
|
37
|
+
val currentHeight = (fm.descent - fm.ascent).toFloat()
|
|
38
|
+
if (lineHeightPx <= currentHeight) return
|
|
39
|
+
|
|
40
|
+
val extra = (lineHeightPx - currentHeight).toInt()
|
|
41
|
+
fm.ascent -= extra
|
|
42
|
+
fm.top = minOf(fm.top, fm.ascent)
|
|
43
|
+
}
|
|
44
|
+
}
|
|
@@ -0,0 +1,241 @@
|
|
|
1
|
+
package com.swmansion.enriched.textinput.spans
|
|
2
|
+
|
|
3
|
+
import com.swmansion.enriched.textinput.styles.HtmlStyle
|
|
4
|
+
|
|
5
|
+
interface ISpanConfig {
|
|
6
|
+
val clazz: Class<*>
|
|
7
|
+
}
|
|
8
|
+
|
|
9
|
+
data class BaseSpanConfig(
|
|
10
|
+
override val clazz: Class<*>,
|
|
11
|
+
) : ISpanConfig
|
|
12
|
+
|
|
13
|
+
data class ParagraphSpanConfig(
|
|
14
|
+
override val clazz: Class<*>,
|
|
15
|
+
val isContinuous: Boolean,
|
|
16
|
+
) : ISpanConfig
|
|
17
|
+
|
|
18
|
+
data class ListSpanConfig(
|
|
19
|
+
override val clazz: Class<*>,
|
|
20
|
+
val shortcut: String?,
|
|
21
|
+
) : ISpanConfig
|
|
22
|
+
|
|
23
|
+
data class StylesMergingConfig(
|
|
24
|
+
// styles that should be removed when we apply specific style
|
|
25
|
+
val conflictingStyles: Array<String> = emptyArray(),
|
|
26
|
+
// styles that should block setting specific style
|
|
27
|
+
val blockingStyles: Array<String> = emptyArray(),
|
|
28
|
+
)
|
|
29
|
+
|
|
30
|
+
object EnrichedSpans {
|
|
31
|
+
// inline styles
|
|
32
|
+
const val BOLD = "bold"
|
|
33
|
+
const val ITALIC = "italic"
|
|
34
|
+
const val UNDERLINE = "underline"
|
|
35
|
+
const val STRIKETHROUGH = "strikethrough"
|
|
36
|
+
const val INLINE_CODE = "inline_code"
|
|
37
|
+
|
|
38
|
+
// paragraph styles
|
|
39
|
+
const val H1 = "h1"
|
|
40
|
+
const val H2 = "h2"
|
|
41
|
+
const val H3 = "h3"
|
|
42
|
+
const val H4 = "h4"
|
|
43
|
+
const val H5 = "h5"
|
|
44
|
+
const val H6 = "h6"
|
|
45
|
+
const val BLOCK_QUOTE = "block_quote"
|
|
46
|
+
const val CODE_BLOCK = "code_block"
|
|
47
|
+
|
|
48
|
+
// list styles
|
|
49
|
+
const val UNORDERED_LIST = "unordered_list"
|
|
50
|
+
const val ORDERED_LIST = "ordered_list"
|
|
51
|
+
const val CHECKBOX_LIST = "checkbox_list"
|
|
52
|
+
|
|
53
|
+
// parametrized styles
|
|
54
|
+
const val LINK = "link"
|
|
55
|
+
const val IMAGE = "image"
|
|
56
|
+
const val MENTION = "mention"
|
|
57
|
+
|
|
58
|
+
val inlineSpans: Map<String, BaseSpanConfig> =
|
|
59
|
+
mapOf(
|
|
60
|
+
BOLD to BaseSpanConfig(EnrichedInputBoldSpan::class.java),
|
|
61
|
+
ITALIC to BaseSpanConfig(EnrichedInputItalicSpan::class.java),
|
|
62
|
+
UNDERLINE to BaseSpanConfig(EnrichedInputUnderlineSpan::class.java),
|
|
63
|
+
STRIKETHROUGH to BaseSpanConfig(EnrichedInputStrikeThroughSpan::class.java),
|
|
64
|
+
INLINE_CODE to BaseSpanConfig(EnrichedInputInlineCodeSpan::class.java),
|
|
65
|
+
)
|
|
66
|
+
|
|
67
|
+
val paragraphSpans: Map<String, ParagraphSpanConfig> =
|
|
68
|
+
mapOf(
|
|
69
|
+
H1 to ParagraphSpanConfig(EnrichedInputH1Span::class.java, false),
|
|
70
|
+
H2 to ParagraphSpanConfig(EnrichedInputH2Span::class.java, false),
|
|
71
|
+
H3 to ParagraphSpanConfig(EnrichedInputH3Span::class.java, false),
|
|
72
|
+
H4 to ParagraphSpanConfig(EnrichedInputH4Span::class.java, false),
|
|
73
|
+
H5 to ParagraphSpanConfig(EnrichedInputH5Span::class.java, false),
|
|
74
|
+
H6 to ParagraphSpanConfig(EnrichedInputH6Span::class.java, false),
|
|
75
|
+
BLOCK_QUOTE to ParagraphSpanConfig(EnrichedInputBlockQuoteSpan::class.java, true),
|
|
76
|
+
CODE_BLOCK to ParagraphSpanConfig(EnrichedInputCodeBlockSpan::class.java, true),
|
|
77
|
+
)
|
|
78
|
+
|
|
79
|
+
val listSpans: Map<String, ListSpanConfig> =
|
|
80
|
+
mapOf(
|
|
81
|
+
UNORDERED_LIST to ListSpanConfig(EnrichedInputUnorderedListSpan::class.java, "- "),
|
|
82
|
+
ORDERED_LIST to ListSpanConfig(EnrichedInputOrderedListSpan::class.java, "1. "),
|
|
83
|
+
CHECKBOX_LIST to ListSpanConfig(EnrichedInputCheckboxListSpan::class.java, null),
|
|
84
|
+
)
|
|
85
|
+
|
|
86
|
+
val parametrizedStyles: Map<String, BaseSpanConfig> =
|
|
87
|
+
mapOf(
|
|
88
|
+
LINK to BaseSpanConfig(EnrichedInputLinkSpan::class.java),
|
|
89
|
+
IMAGE to BaseSpanConfig(EnrichedInputImageSpan::class.java),
|
|
90
|
+
MENTION to BaseSpanConfig(EnrichedInputMentionSpan::class.java),
|
|
91
|
+
)
|
|
92
|
+
|
|
93
|
+
val allSpans: Map<String, ISpanConfig> = inlineSpans + paragraphSpans + listSpans + parametrizedStyles
|
|
94
|
+
|
|
95
|
+
fun getMergingConfigForStyle(
|
|
96
|
+
style: String,
|
|
97
|
+
htmlStyle: HtmlStyle,
|
|
98
|
+
): StylesMergingConfig? =
|
|
99
|
+
when (style) {
|
|
100
|
+
BOLD -> {
|
|
101
|
+
val blockingStyles = mutableListOf(CODE_BLOCK)
|
|
102
|
+
if (htmlStyle.h1Bold) blockingStyles.add(H1)
|
|
103
|
+
if (htmlStyle.h2Bold) blockingStyles.add(H2)
|
|
104
|
+
if (htmlStyle.h3Bold) blockingStyles.add(H3)
|
|
105
|
+
if (htmlStyle.h4Bold) blockingStyles.add(H4)
|
|
106
|
+
if (htmlStyle.h5Bold) blockingStyles.add(H5)
|
|
107
|
+
if (htmlStyle.h6Bold) blockingStyles.add(H6)
|
|
108
|
+
StylesMergingConfig(blockingStyles = blockingStyles.toTypedArray())
|
|
109
|
+
}
|
|
110
|
+
|
|
111
|
+
ITALIC -> {
|
|
112
|
+
StylesMergingConfig(
|
|
113
|
+
blockingStyles = arrayOf(CODE_BLOCK),
|
|
114
|
+
)
|
|
115
|
+
}
|
|
116
|
+
|
|
117
|
+
UNDERLINE -> {
|
|
118
|
+
StylesMergingConfig(
|
|
119
|
+
blockingStyles = arrayOf(CODE_BLOCK),
|
|
120
|
+
)
|
|
121
|
+
}
|
|
122
|
+
|
|
123
|
+
STRIKETHROUGH -> {
|
|
124
|
+
StylesMergingConfig(
|
|
125
|
+
blockingStyles = arrayOf(CODE_BLOCK),
|
|
126
|
+
)
|
|
127
|
+
}
|
|
128
|
+
|
|
129
|
+
INLINE_CODE -> {
|
|
130
|
+
StylesMergingConfig(
|
|
131
|
+
conflictingStyles = arrayOf(MENTION, LINK),
|
|
132
|
+
blockingStyles = arrayOf(CODE_BLOCK),
|
|
133
|
+
)
|
|
134
|
+
}
|
|
135
|
+
|
|
136
|
+
H1 -> {
|
|
137
|
+
val conflictingStyles = mutableListOf(H2, H3, H4, H5, H6, ORDERED_LIST, UNORDERED_LIST, CHECKBOX_LIST, BLOCK_QUOTE, CODE_BLOCK)
|
|
138
|
+
if (htmlStyle.h1Bold) conflictingStyles.add(BOLD)
|
|
139
|
+
StylesMergingConfig(conflictingStyles = conflictingStyles.toTypedArray())
|
|
140
|
+
}
|
|
141
|
+
|
|
142
|
+
H2 -> {
|
|
143
|
+
val conflictingStyles = mutableListOf(H1, H3, H4, H5, H6, ORDERED_LIST, UNORDERED_LIST, CHECKBOX_LIST, BLOCK_QUOTE, CODE_BLOCK)
|
|
144
|
+
if (htmlStyle.h2Bold) conflictingStyles.add(BOLD)
|
|
145
|
+
StylesMergingConfig(conflictingStyles = conflictingStyles.toTypedArray())
|
|
146
|
+
}
|
|
147
|
+
|
|
148
|
+
H3 -> {
|
|
149
|
+
val conflictingStyles = mutableListOf(H1, H2, H4, H5, H6, ORDERED_LIST, UNORDERED_LIST, CHECKBOX_LIST, BLOCK_QUOTE, CODE_BLOCK)
|
|
150
|
+
if (htmlStyle.h3Bold) conflictingStyles.add(BOLD)
|
|
151
|
+
StylesMergingConfig(conflictingStyles = conflictingStyles.toTypedArray())
|
|
152
|
+
}
|
|
153
|
+
|
|
154
|
+
H4 -> {
|
|
155
|
+
val conflictingStyles = mutableListOf(H1, H2, H3, H5, H6, ORDERED_LIST, UNORDERED_LIST, CHECKBOX_LIST, BLOCK_QUOTE, CODE_BLOCK)
|
|
156
|
+
if (htmlStyle.h4Bold) conflictingStyles.add(BOLD)
|
|
157
|
+
StylesMergingConfig(conflictingStyles = conflictingStyles.toTypedArray())
|
|
158
|
+
}
|
|
159
|
+
|
|
160
|
+
H5 -> {
|
|
161
|
+
val conflictingStyles = mutableListOf(H1, H2, H3, H4, H6, ORDERED_LIST, UNORDERED_LIST, CHECKBOX_LIST, BLOCK_QUOTE, CODE_BLOCK)
|
|
162
|
+
if (htmlStyle.h5Bold) conflictingStyles.add(BOLD)
|
|
163
|
+
StylesMergingConfig(conflictingStyles = conflictingStyles.toTypedArray())
|
|
164
|
+
}
|
|
165
|
+
|
|
166
|
+
H6 -> {
|
|
167
|
+
val conflictingStyles = mutableListOf(H1, H2, H3, H4, H5, ORDERED_LIST, UNORDERED_LIST, CHECKBOX_LIST, BLOCK_QUOTE, CODE_BLOCK)
|
|
168
|
+
if (htmlStyle.h6Bold) conflictingStyles.add(BOLD)
|
|
169
|
+
StylesMergingConfig(conflictingStyles = conflictingStyles.toTypedArray())
|
|
170
|
+
}
|
|
171
|
+
|
|
172
|
+
BLOCK_QUOTE -> {
|
|
173
|
+
StylesMergingConfig(
|
|
174
|
+
conflictingStyles = arrayOf(H1, H2, H3, H4, H5, H6, CODE_BLOCK, ORDERED_LIST, UNORDERED_LIST, CHECKBOX_LIST),
|
|
175
|
+
)
|
|
176
|
+
}
|
|
177
|
+
|
|
178
|
+
CODE_BLOCK -> {
|
|
179
|
+
StylesMergingConfig(
|
|
180
|
+
conflictingStyles =
|
|
181
|
+
arrayOf(
|
|
182
|
+
H1,
|
|
183
|
+
H2,
|
|
184
|
+
H3,
|
|
185
|
+
H4,
|
|
186
|
+
H5,
|
|
187
|
+
H6,
|
|
188
|
+
BOLD,
|
|
189
|
+
ITALIC,
|
|
190
|
+
UNDERLINE,
|
|
191
|
+
STRIKETHROUGH,
|
|
192
|
+
UNORDERED_LIST,
|
|
193
|
+
ORDERED_LIST,
|
|
194
|
+
CHECKBOX_LIST,
|
|
195
|
+
BLOCK_QUOTE,
|
|
196
|
+
INLINE_CODE,
|
|
197
|
+
),
|
|
198
|
+
)
|
|
199
|
+
}
|
|
200
|
+
|
|
201
|
+
UNORDERED_LIST -> {
|
|
202
|
+
StylesMergingConfig(
|
|
203
|
+
conflictingStyles = arrayOf(H1, H2, H3, H4, H5, H6, ORDERED_LIST, CHECKBOX_LIST, CODE_BLOCK, BLOCK_QUOTE),
|
|
204
|
+
)
|
|
205
|
+
}
|
|
206
|
+
|
|
207
|
+
ORDERED_LIST -> {
|
|
208
|
+
StylesMergingConfig(
|
|
209
|
+
conflictingStyles = arrayOf(H1, H2, H3, H4, H5, H6, UNORDERED_LIST, CHECKBOX_LIST, CODE_BLOCK, BLOCK_QUOTE),
|
|
210
|
+
)
|
|
211
|
+
}
|
|
212
|
+
|
|
213
|
+
CHECKBOX_LIST -> {
|
|
214
|
+
StylesMergingConfig(
|
|
215
|
+
conflictingStyles = arrayOf(H1, H2, H3, H4, H5, H6, UNORDERED_LIST, ORDERED_LIST, CODE_BLOCK, BLOCK_QUOTE),
|
|
216
|
+
)
|
|
217
|
+
}
|
|
218
|
+
|
|
219
|
+
LINK -> {
|
|
220
|
+
StylesMergingConfig(
|
|
221
|
+
blockingStyles = arrayOf(INLINE_CODE, CODE_BLOCK, MENTION),
|
|
222
|
+
)
|
|
223
|
+
}
|
|
224
|
+
|
|
225
|
+
IMAGE -> {
|
|
226
|
+
StylesMergingConfig()
|
|
227
|
+
}
|
|
228
|
+
|
|
229
|
+
MENTION -> {
|
|
230
|
+
StylesMergingConfig(
|
|
231
|
+
blockingStyles = arrayOf(INLINE_CODE, CODE_BLOCK, LINK),
|
|
232
|
+
)
|
|
233
|
+
}
|
|
234
|
+
|
|
235
|
+
else -> {
|
|
236
|
+
null
|
|
237
|
+
}
|
|
238
|
+
}
|
|
239
|
+
|
|
240
|
+
fun isTypeContinuous(type: Class<*>): Boolean = paragraphSpans.values.find { it.clazz == type }?.isContinuous == true
|
|
241
|
+
}
|
package/android/src/main/java/com/swmansion/enriched/textinput/spans/interfaces/EnrichedInputSpan.kt
ADDED
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
package com.swmansion.enriched.textinput.spans.interfaces
|
|
2
|
+
|
|
3
|
+
import com.swmansion.enriched.common.spans.interfaces.EnrichedSpan
|
|
4
|
+
import com.swmansion.enriched.textinput.styles.HtmlStyle
|
|
5
|
+
|
|
6
|
+
interface EnrichedInputSpan : EnrichedSpan {
|
|
7
|
+
val dependsOnHtmlStyle: Boolean
|
|
8
|
+
|
|
9
|
+
fun rebuildWithStyle(htmlStyle: HtmlStyle): EnrichedInputSpan
|
|
10
|
+
}
|