@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,13 @@
|
|
|
1
|
+
#import <React/RCTUIManager.h>
|
|
2
|
+
#import <React/RCTViewManager.h>
|
|
3
|
+
|
|
4
|
+
@interface EnrichedTextInputViewManager : RCTViewManager
|
|
5
|
+
@end
|
|
6
|
+
|
|
7
|
+
@implementation EnrichedTextInputViewManager
|
|
8
|
+
|
|
9
|
+
RCT_EXPORT_MODULE(EnrichedTextInputView)
|
|
10
|
+
|
|
11
|
+
RCT_EXPORT_VIEW_PROPERTY(defaultValue, NSString)
|
|
12
|
+
|
|
13
|
+
@end
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
#pragma once
|
|
2
|
+
#import <UIKit/UIKit.h>
|
|
3
|
+
|
|
4
|
+
@class EnrichedTextInputView;
|
|
5
|
+
|
|
6
|
+
@interface AttributesManager : NSObject
|
|
7
|
+
@property(nonatomic, weak) EnrichedTextInputView *input;
|
|
8
|
+
- (instancetype)initWithInput:(EnrichedTextInputView *)input;
|
|
9
|
+
- (void)addDirtyRange:(NSRange)range;
|
|
10
|
+
- (NSArray *)getDirtyRanges;
|
|
11
|
+
- (void)shiftDirtyRangesWithEditedRange:(NSRange)editedRange
|
|
12
|
+
changeInLength:(NSInteger)delta;
|
|
13
|
+
- (void)didRemoveTypingAttribute:(NSString *)key;
|
|
14
|
+
- (void)clearRemovedTypingAttributes;
|
|
15
|
+
- (void)manageTypingAttributesWithOnlySelection:(BOOL)onlySelectionChanged;
|
|
16
|
+
- (void)handleDirtyRangesStyling;
|
|
17
|
+
@end
|
|
@@ -0,0 +1,195 @@
|
|
|
1
|
+
#import "AttributesManager.h"
|
|
2
|
+
#import "AttributeEntry.h"
|
|
3
|
+
#import "EnrichedTextInputView.h"
|
|
4
|
+
#import "RangeUtils.h"
|
|
5
|
+
#import "StyleHeaders.h"
|
|
6
|
+
|
|
7
|
+
@implementation AttributesManager {
|
|
8
|
+
NSMutableArray<NSValue *> *_dirtyRanges;
|
|
9
|
+
NSSet *_customAttributesKeys;
|
|
10
|
+
NSMutableSet *_removedTypingAttributes;
|
|
11
|
+
}
|
|
12
|
+
|
|
13
|
+
- (instancetype)initWithInput:(EnrichedTextInputView *)input {
|
|
14
|
+
self = [super init];
|
|
15
|
+
_input = input;
|
|
16
|
+
_dirtyRanges = [[NSMutableArray alloc] init];
|
|
17
|
+
_removedTypingAttributes = [[NSMutableSet alloc] init];
|
|
18
|
+
|
|
19
|
+
// setup customAttributes
|
|
20
|
+
NSMutableSet *_customAttrsSet = [[NSMutableSet alloc] init];
|
|
21
|
+
for (StyleBase *style in _input->stylesDict.allValues) {
|
|
22
|
+
[_customAttrsSet addObject:[style getKey]];
|
|
23
|
+
}
|
|
24
|
+
_customAttributesKeys = _customAttrsSet;
|
|
25
|
+
|
|
26
|
+
return self;
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
- (void)addDirtyRange:(NSRange)range {
|
|
30
|
+
[_dirtyRanges addObject:[NSValue valueWithRange:range]];
|
|
31
|
+
_dirtyRanges = [[RangeUtils connectAndDedupeRanges:_dirtyRanges] mutableCopy];
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
- (NSArray *)getDirtyRanges {
|
|
35
|
+
return _dirtyRanges;
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
- (void)shiftDirtyRangesWithEditedRange:(NSRange)editedRange
|
|
39
|
+
changeInLength:(NSInteger)delta {
|
|
40
|
+
if (delta == 0) {
|
|
41
|
+
return;
|
|
42
|
+
}
|
|
43
|
+
NSArray *shiftedRanges = [RangeUtils shiftRanges:_dirtyRanges
|
|
44
|
+
withEditedRange:editedRange
|
|
45
|
+
changeInLength:delta];
|
|
46
|
+
_dirtyRanges =
|
|
47
|
+
[[RangeUtils connectAndDedupeRanges:shiftedRanges] mutableCopy];
|
|
48
|
+
}
|
|
49
|
+
|
|
50
|
+
- (void)didRemoveTypingAttribute:(NSString *)key {
|
|
51
|
+
[_removedTypingAttributes addObject:key];
|
|
52
|
+
}
|
|
53
|
+
|
|
54
|
+
- (void)clearRemovedTypingAttributes {
|
|
55
|
+
[_removedTypingAttributes removeAllObjects];
|
|
56
|
+
}
|
|
57
|
+
|
|
58
|
+
- (void)handleDirtyRangesStyling {
|
|
59
|
+
// Filter out 0 length ranges for styling.
|
|
60
|
+
NSPredicate *predicate = [NSPredicate
|
|
61
|
+
predicateWithBlock:^BOOL(NSValue *evaluatedObject, NSDictionary *_) {
|
|
62
|
+
return [evaluatedObject rangeValue].length > 0;
|
|
63
|
+
}];
|
|
64
|
+
[_dirtyRanges filterUsingPredicate:predicate];
|
|
65
|
+
|
|
66
|
+
for (NSValue *rangeObj in _dirtyRanges) {
|
|
67
|
+
NSRange dirtyRange = [rangeObj rangeValue];
|
|
68
|
+
|
|
69
|
+
// dirty range can sometimes be wrong because of apple doing some changes
|
|
70
|
+
// behind the scenes
|
|
71
|
+
if (dirtyRange.location + dirtyRange.length >
|
|
72
|
+
_input->textView.textStorage.string.length)
|
|
73
|
+
continue;
|
|
74
|
+
|
|
75
|
+
// firstly, get all styles' occurences in that dirty range
|
|
76
|
+
NSMutableDictionary *presentStyles = [[NSMutableDictionary alloc] init];
|
|
77
|
+
for (StyleBase *style in _input->stylesDict.allValues) {
|
|
78
|
+
// the dict has keys of StyleType NSNumber and values of an array of all
|
|
79
|
+
// occurences
|
|
80
|
+
presentStyles[@([[style class] getType])] = [style all:dirtyRange];
|
|
81
|
+
}
|
|
82
|
+
|
|
83
|
+
// now reset the attributes to default ones
|
|
84
|
+
[_input->textView.textStorage setAttributes:_input->defaultTypingAttributes
|
|
85
|
+
range:dirtyRange];
|
|
86
|
+
|
|
87
|
+
// Sort style types so paragraph styles come first. Their broad visual
|
|
88
|
+
// attributes (e.g. foreground color, font) are laid down before inline
|
|
89
|
+
// styles override them on their specific sub-ranges.
|
|
90
|
+
NSArray *sortedStyleTypes = [presentStyles.allKeys
|
|
91
|
+
sortedArrayUsingComparator:^NSComparisonResult(NSNumber *a,
|
|
92
|
+
NSNumber *b) {
|
|
93
|
+
BOOL aPara = [_input->stylesDict[a] isParagraph];
|
|
94
|
+
BOOL bPara = [_input->stylesDict[b] isParagraph];
|
|
95
|
+
if (aPara == bPara)
|
|
96
|
+
return NSOrderedSame;
|
|
97
|
+
return aPara ? NSOrderedAscending : NSOrderedDescending;
|
|
98
|
+
}];
|
|
99
|
+
|
|
100
|
+
// re-apply meta-attributes and apply visual styling following the saved
|
|
101
|
+
// occurences.
|
|
102
|
+
for (NSNumber *styleType in sortedStyleTypes) {
|
|
103
|
+
StyleBase *style = _input->stylesDict[styleType];
|
|
104
|
+
if (style == nullptr)
|
|
105
|
+
continue;
|
|
106
|
+
|
|
107
|
+
for (StylePair *stylePair in presentStyles[styleType]) {
|
|
108
|
+
NSRange occurenceRange = [stylePair.rangeValue rangeValue];
|
|
109
|
+
[style reapplyFromStylePair:stylePair];
|
|
110
|
+
[style applyStyling:occurenceRange];
|
|
111
|
+
}
|
|
112
|
+
}
|
|
113
|
+
}
|
|
114
|
+
// do the typing attributes management, with no selection
|
|
115
|
+
[self manageTypingAttributesWithOnlySelection:NO];
|
|
116
|
+
|
|
117
|
+
[_dirtyRanges removeAllObjects];
|
|
118
|
+
}
|
|
119
|
+
|
|
120
|
+
- (void)manageTypingAttributesWithOnlySelection:(BOOL)onlySelectionChanged {
|
|
121
|
+
InputTextView *textView = _input->textView;
|
|
122
|
+
NSRange selectedRange = textView.selectedRange;
|
|
123
|
+
|
|
124
|
+
// Typing attributes get reset when only selection changed to an empty line
|
|
125
|
+
// (or empty line with newline).
|
|
126
|
+
if (onlySelectionChanged) {
|
|
127
|
+
NSRange paragraphRange =
|
|
128
|
+
[textView.textStorage.string paragraphRangeForRange:selectedRange];
|
|
129
|
+
// User changed selection to an empty line (or empty line with a newline).
|
|
130
|
+
if (paragraphRange.length == 0 ||
|
|
131
|
+
(paragraphRange.length == 1 &&
|
|
132
|
+
[[NSCharacterSet newlineCharacterSet]
|
|
133
|
+
characterIsMember:[textView.textStorage.string
|
|
134
|
+
characterAtIndex:paragraphRange
|
|
135
|
+
.location]])) {
|
|
136
|
+
textView.typingAttributes = _input->defaultTypingAttributes;
|
|
137
|
+
return;
|
|
138
|
+
}
|
|
139
|
+
}
|
|
140
|
+
|
|
141
|
+
// General typing attributes management.
|
|
142
|
+
|
|
143
|
+
// Firstly, we make sure only default + custom + paragraph typing attribtues
|
|
144
|
+
// are left.
|
|
145
|
+
NSMutableDictionary *newAttrs = [_input->defaultTypingAttributes mutableCopy];
|
|
146
|
+
|
|
147
|
+
for (NSString *key in _input->textView.typingAttributes.allKeys) {
|
|
148
|
+
if ([_customAttributesKeys containsObject:key]) {
|
|
149
|
+
if ([key isEqualToString:NSParagraphStyleAttributeName]) {
|
|
150
|
+
// NSParagraphStyle for paragraph styles -> only keep the textLists
|
|
151
|
+
// property
|
|
152
|
+
NSParagraphStyle *pStyle =
|
|
153
|
+
(NSParagraphStyle *)_input->textView
|
|
154
|
+
.typingAttributes[NSParagraphStyleAttributeName];
|
|
155
|
+
if (pStyle != nullptr && pStyle.textLists.count == 1) {
|
|
156
|
+
NSMutableParagraphStyle *newPStyle =
|
|
157
|
+
[[NSMutableParagraphStyle alloc] init];
|
|
158
|
+
newPStyle.textLists = pStyle.textLists;
|
|
159
|
+
newAttrs[NSParagraphStyleAttributeName] = newPStyle;
|
|
160
|
+
}
|
|
161
|
+
} else {
|
|
162
|
+
// Inline styles -> keep the key/value as a whole
|
|
163
|
+
newAttrs[key] = _input->textView.typingAttributes[key];
|
|
164
|
+
}
|
|
165
|
+
}
|
|
166
|
+
}
|
|
167
|
+
|
|
168
|
+
// Then, we add typingAttributes from present inline styles.
|
|
169
|
+
// We check for the previous character to naturally extend typing attributes.
|
|
170
|
+
// getEntryIfPresent properly returns nullptr for styles that we don't want to
|
|
171
|
+
// extend this way. Attributes from _removedTypingAttributes aren't added
|
|
172
|
+
// because they were just removed.
|
|
173
|
+
for (StyleBase *style in _input->stylesDict.allValues) {
|
|
174
|
+
if ([style isParagraph])
|
|
175
|
+
continue;
|
|
176
|
+
if ([_removedTypingAttributes containsObject:[style getKey]])
|
|
177
|
+
continue;
|
|
178
|
+
|
|
179
|
+
AttributeEntry *entry = nullptr;
|
|
180
|
+
|
|
181
|
+
if (selectedRange.location > 0) {
|
|
182
|
+
entry =
|
|
183
|
+
[style getEntryIfPresent:NSMakeRange(selectedRange.location - 1, 1)];
|
|
184
|
+
}
|
|
185
|
+
|
|
186
|
+
if (entry == nullptr)
|
|
187
|
+
continue;
|
|
188
|
+
|
|
189
|
+
newAttrs[entry.key] = entry.value;
|
|
190
|
+
}
|
|
191
|
+
|
|
192
|
+
textView.typingAttributes = newAttrs;
|
|
193
|
+
}
|
|
194
|
+
|
|
195
|
+
@end
|
|
@@ -0,0 +1,104 @@
|
|
|
1
|
+
#pragma once
|
|
2
|
+
#import "LinkRegexConfig.h"
|
|
3
|
+
#import "MentionStyleProps.h"
|
|
4
|
+
#import "TextDecorationLineEnum.h"
|
|
5
|
+
#import <UIKit/UIKit.h>
|
|
6
|
+
|
|
7
|
+
@interface InputConfig : NSObject <NSCopying>
|
|
8
|
+
- (instancetype)init;
|
|
9
|
+
- (UIColor *)primaryColor;
|
|
10
|
+
- (void)setPrimaryColor:(UIColor *)newValue;
|
|
11
|
+
- (NSNumber *)primaryFontSize;
|
|
12
|
+
- (void)setPrimaryFontSize:(NSNumber *)newValue;
|
|
13
|
+
- (CGFloat)primaryLineHeight;
|
|
14
|
+
- (void)setPrimaryLineHeight:(CGFloat)newValue;
|
|
15
|
+
- (CGFloat)scaledPrimaryLineHeight;
|
|
16
|
+
- (NSString *)primaryFontWeight;
|
|
17
|
+
- (void)setPrimaryFontWeight:(NSString *)newValue;
|
|
18
|
+
- (NSString *)primaryFontFamily;
|
|
19
|
+
- (void)setPrimaryFontFamily:(NSString *)newValue;
|
|
20
|
+
- (UIFont *)primaryFont;
|
|
21
|
+
- (UIFont *)monospacedFont;
|
|
22
|
+
- (NSSet<NSNumber *> *)mentionIndicators;
|
|
23
|
+
- (void)setMentionIndicators:(NSSet<NSNumber *> *)newValue;
|
|
24
|
+
- (CGFloat)h1FontSize;
|
|
25
|
+
- (void)setH1FontSize:(CGFloat)newValue;
|
|
26
|
+
- (BOOL)h1Bold;
|
|
27
|
+
- (void)setH1Bold:(BOOL)newValue;
|
|
28
|
+
- (CGFloat)h2FontSize;
|
|
29
|
+
- (void)setH2FontSize:(CGFloat)newValue;
|
|
30
|
+
- (BOOL)h2Bold;
|
|
31
|
+
- (void)setH2Bold:(BOOL)newValue;
|
|
32
|
+
- (CGFloat)h3FontSize;
|
|
33
|
+
- (void)setH3FontSize:(CGFloat)newValue;
|
|
34
|
+
- (BOOL)h3Bold;
|
|
35
|
+
- (void)setH3Bold:(BOOL)newValue;
|
|
36
|
+
- (CGFloat)h4FontSize;
|
|
37
|
+
- (void)setH4FontSize:(CGFloat)newValue;
|
|
38
|
+
- (BOOL)h4Bold;
|
|
39
|
+
- (void)setH4Bold:(BOOL)newValue;
|
|
40
|
+
- (CGFloat)h5FontSize;
|
|
41
|
+
- (void)setH5FontSize:(CGFloat)newValue;
|
|
42
|
+
- (BOOL)h5Bold;
|
|
43
|
+
- (void)setH5Bold:(BOOL)newValue;
|
|
44
|
+
- (CGFloat)h6FontSize;
|
|
45
|
+
- (void)setH6FontSize:(CGFloat)newValue;
|
|
46
|
+
- (BOOL)h6Bold;
|
|
47
|
+
- (void)setH6Bold:(BOOL)newValue;
|
|
48
|
+
- (UIColor *)blockquoteBorderColor;
|
|
49
|
+
- (void)setBlockquoteBorderColor:(UIColor *)newValue;
|
|
50
|
+
- (CGFloat)blockquoteBorderWidth;
|
|
51
|
+
- (void)setBlockquoteBorderWidth:(CGFloat)newValue;
|
|
52
|
+
- (CGFloat)blockquoteGapWidth;
|
|
53
|
+
- (void)setBlockquoteGapWidth:(CGFloat)newValue;
|
|
54
|
+
- (UIColor *)blockquoteColor;
|
|
55
|
+
- (void)setBlockquoteColor:(UIColor *)newValue;
|
|
56
|
+
- (UIColor *)inlineCodeFgColor;
|
|
57
|
+
- (void)setInlineCodeFgColor:(UIColor *)newValue;
|
|
58
|
+
- (UIColor *)inlineCodeBgColor;
|
|
59
|
+
- (void)setInlineCodeBgColor:(UIColor *)newValue;
|
|
60
|
+
- (CGFloat)orderedListGapWidth;
|
|
61
|
+
- (void)setOrderedListGapWidth:(CGFloat)newValue;
|
|
62
|
+
- (CGFloat)orderedListMarginLeft;
|
|
63
|
+
- (void)setOrderedListMarginLeft:(CGFloat)newValue;
|
|
64
|
+
- (NSString *)orderedListMarkerFontWeight;
|
|
65
|
+
- (void)setOrderedListMarkerFontWeight:(NSString *)newValue;
|
|
66
|
+
- (UIColor *)orderedListMarkerColor;
|
|
67
|
+
- (void)setOrderedListMarkerColor:(UIColor *)newValue;
|
|
68
|
+
- (UIFont *)orderedListMarkerFont;
|
|
69
|
+
- (UIColor *)unorderedListBulletColor;
|
|
70
|
+
- (void)setUnorderedListBulletColor:(UIColor *)newValue;
|
|
71
|
+
- (CGFloat)unorderedListBulletSize;
|
|
72
|
+
- (void)setUnorderedListBulletSize:(CGFloat)newValue;
|
|
73
|
+
- (CGFloat)unorderedListGapWidth;
|
|
74
|
+
- (void)setUnorderedListGapWidth:(CGFloat)newValue;
|
|
75
|
+
- (CGFloat)unorderedListMarginLeft;
|
|
76
|
+
- (void)setUnorderedListMarginLeft:(CGFloat)newValue;
|
|
77
|
+
- (UIColor *)linkColor;
|
|
78
|
+
- (void)setLinkColor:(UIColor *)newValue;
|
|
79
|
+
- (TextDecorationLineEnum)linkDecorationLine;
|
|
80
|
+
- (void)setLinkDecorationLine:(TextDecorationLineEnum)newValue;
|
|
81
|
+
- (void)setMentionStyleProps:(NSDictionary *)newValue;
|
|
82
|
+
- (MentionStyleProps *)mentionStylePropsForIndicator:(NSString *)indicator;
|
|
83
|
+
- (UIColor *)codeBlockFgColor;
|
|
84
|
+
- (void)setCodeBlockFgColor:(UIColor *)newValue;
|
|
85
|
+
- (UIColor *)codeBlockBgColor;
|
|
86
|
+
- (void)setCodeBlockBgColor:(UIColor *)newValue;
|
|
87
|
+
- (CGFloat)codeBlockBorderRadius;
|
|
88
|
+
- (void)setCodeBlockBorderRadius:(CGFloat)newValue;
|
|
89
|
+
- (LinkRegexConfig *)linkRegexConfig;
|
|
90
|
+
- (void)setLinkRegexConfig:(LinkRegexConfig *)newValue;
|
|
91
|
+
- (NSRegularExpression *)parsedLinkRegex;
|
|
92
|
+
- (void)invalidateFonts;
|
|
93
|
+
- (NSNumber *)scaledPrimaryFontSize;
|
|
94
|
+
- (CGFloat)checkboxListBoxSize;
|
|
95
|
+
- (void)setCheckboxListBoxSize:(CGFloat)newValue;
|
|
96
|
+
- (CGFloat)checkboxListGapWidth;
|
|
97
|
+
- (void)setCheckboxListGapWidth:(CGFloat)newValue;
|
|
98
|
+
- (CGFloat)checkboxListMarginLeft;
|
|
99
|
+
- (void)setCheckboxListMarginLeft:(CGFloat)newValue;
|
|
100
|
+
- (UIColor *)checkboxListBoxColor;
|
|
101
|
+
- (void)setCheckboxListBoxColor:(UIColor *)newValue;
|
|
102
|
+
- (UIImage *)checkboxCheckedImage;
|
|
103
|
+
- (UIImage *)checkboxUncheckedImage;
|
|
104
|
+
@end
|