Commit 662c917
authored
feat(iOS): normalizing html (#435)
# Summary
Integrates
[gumbo-parser](https://codeberg.org/gumbo-parser/gumbo-parser) to
normalize external HTML (Google Docs, Word, web pages) into the
canonical tag subset our enriched parser understands.
If an unsupported tag is encountered (for example: `<table>`), it will
be omitted while preserving and keeping its text content.
Nested structures will be flattened where necessary to match the
constraints of the enriched format.
### Changes
- Added `gumbo-parser.h` amalgamation header
- Implemented `gumbo_normalizer.c` — converts arbitrary HTML into
canonical tags (`<b>`, `<i>`, `<u>`, `<s>`, `<p>`, `<br>`, lists,
headings, etc.)
- iOS: integrated through podspec, used in `InputParser.mm`
- Controlled by `useHtmlNormalizer` prop (off by default)
- Added [gtest](https://google.github.io/googletest/) and
`GumboParserTest.cpp` test suite covering tag remapping, span styles,
tables, lists
## Test Plan
1. Run example app
2. Try to paste rich content from google docs, slack, gmail
3. Pasted rich content should look the same like in external app
## Screenshots / Videos
https://github.com/user-attachments/assets/ae37561d-31f6-45f5-9c07-9e6e23f723cb
## Compatibility
| OS | Implemented |
| ------- | :---------: |
| iOS | ✅ |
| Android | ❌ |
---------1 parent e420a00 commit 662c917
19 files changed
Lines changed: 35400 additions & 7 deletions
File tree
- android/src/main/java/com/swmansion/enriched/textinput
- apps/example
- ios
- src
- cpp
- GumboParser
- parser
- tests
- docs
- ios
- inputParser
- src
- spec
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
13 | 13 | | |
14 | 14 | | |
15 | 15 | | |
16 | | - | |
| 16 | + | |
| 17 | + | |
17 | 18 | | |
| 19 | + | |
| 20 | + | |
| 21 | + | |
18 | 22 | | |
19 | 23 | | |
20 | 24 | | |
| |||
Lines changed: 7 additions & 0 deletions
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
272 | 272 | | |
273 | 273 | | |
274 | 274 | | |
| 275 | + | |
| 276 | + | |
| 277 | + | |
| 278 | + | |
| 279 | + | |
| 280 | + | |
| 281 | + | |
275 | 282 | | |
276 | 283 | | |
277 | 284 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
2064 | 2064 | | |
2065 | 2065 | | |
2066 | 2066 | | |
2067 | | - | |
| 2067 | + | |
2068 | 2068 | | |
2069 | 2069 | | |
2070 | 2070 | | |
| |||
2073 | 2073 | | |
2074 | 2074 | | |
2075 | 2075 | | |
2076 | | - | |
| 2076 | + | |
2077 | 2077 | | |
2078 | 2078 | | |
2079 | 2079 | | |
| |||
2135 | 2135 | | |
2136 | 2136 | | |
2137 | 2137 | | |
2138 | | - | |
2139 | | - | |
| 2138 | + | |
| 2139 | + | |
2140 | 2140 | | |
2141 | 2141 | | |
2142 | 2142 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
348 | 348 | | |
349 | 349 | | |
350 | 350 | | |
| 351 | + | |
351 | 352 | | |
352 | 353 | | |
353 | 354 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
| 1 | + | |
| 2 | + | |
| 3 | + | |
| 4 | + | |
| 5 | + | |
| 6 | + | |
| 7 | + | |
| 8 | + | |
| 9 | + | |
| 10 | + | |
| 11 | + | |
| 12 | + | |
| 13 | + | |
| 14 | + | |
| 15 | + | |
| 16 | + | |
| 17 | + | |
| 18 | + | |
| 19 | + | |
| 20 | + | |
| 21 | + | |
| 22 | + | |
| 23 | + | |
| 24 | + | |
| 25 | + | |
| 26 | + | |
| 27 | + | |
| 28 | + | |
| 29 | + | |
| 30 | + | |
| 31 | + | |
| 32 | + | |
| 33 | + | |
| 34 | + | |
| 35 | + | |
| 36 | + | |
| 37 | + | |
| 38 | + | |
| 39 | + | |
| 40 | + | |
| 41 | + | |
| 42 | + | |
| 43 | + | |
| 44 | + | |
| 45 | + | |
| 46 | + | |
| 47 | + | |
| 48 | + | |
| 49 | + | |
| 50 | + | |
0 commit comments