Skip to content

Commit 82943e8

Browse files
Merge pull request #46 from contentful/table-support
Add rich text tables support
2 parents eb48327 + d410d17 commit 82943e8

21 files changed

+593
-71
lines changed

.gitignore

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -19,4 +19,6 @@ Packages
1919
# Carthage
2020
Carthage
2121
*.framework.zip
22-
vendor
22+
vendor
23+
/Podfile.lock
24+
/.ruby-version

Gemfile.lock

Lines changed: 57 additions & 49 deletions
Original file line numberDiff line numberDiff line change
@@ -1,119 +1,127 @@
11
GEM
22
remote: https://rubygems.org/
33
specs:
4-
CFPropertyList (3.0.2)
5-
activesupport (4.2.11.3)
6-
i18n (~> 0.7)
7-
minitest (~> 5.1)
8-
thread_safe (~> 0.3, >= 0.3.4)
9-
tzinfo (~> 1.1)
10-
algoliasearch (1.27.3)
4+
CFPropertyList (3.0.6)
5+
rexml
6+
activesupport (6.1.7.2)
7+
concurrent-ruby (~> 1.0, >= 1.0.2)
8+
i18n (>= 1.6, < 2)
9+
minitest (>= 5.1)
10+
tzinfo (~> 2.0)
11+
zeitwerk (~> 2.3)
12+
addressable (2.8.1)
13+
public_suffix (>= 2.0.2, < 6.0)
14+
algoliasearch (1.27.5)
1115
httpclient (~> 2.8, >= 2.8.3)
1216
json (>= 1.5.1)
1317
atomos (0.1.3)
14-
claide (1.0.3)
18+
claide (1.1.0)
1519
clamp (1.3.2)
16-
cocoapods (1.9.3)
17-
activesupport (>= 4.0.2, < 5)
20+
cocoapods (1.11.3)
21+
addressable (~> 2.8)
1822
claide (>= 1.0.2, < 2.0)
19-
cocoapods-core (= 1.9.3)
23+
cocoapods-core (= 1.11.3)
2024
cocoapods-deintegrate (>= 1.0.3, < 2.0)
21-
cocoapods-downloader (>= 1.2.2, < 2.0)
25+
cocoapods-downloader (>= 1.4.0, < 2.0)
2226
cocoapods-plugins (>= 1.0.0, < 2.0)
2327
cocoapods-search (>= 1.0.0, < 2.0)
24-
cocoapods-stats (>= 1.0.0, < 2.0)
2528
cocoapods-trunk (>= 1.4.0, < 2.0)
2629
cocoapods-try (>= 1.1.0, < 2.0)
2730
colored2 (~> 3.1)
2831
escape (~> 0.0.4)
2932
fourflusher (>= 2.3.0, < 3.0)
3033
gh_inspector (~> 1.0)
31-
molinillo (~> 0.6.6)
34+
molinillo (~> 0.8.0)
3235
nap (~> 1.0)
33-
ruby-macho (~> 1.4)
34-
xcodeproj (>= 1.14.0, < 2.0)
35-
cocoapods-core (1.9.3)
36-
activesupport (>= 4.0.2, < 6)
36+
ruby-macho (>= 1.0, < 3.0)
37+
xcodeproj (>= 1.21.0, < 2.0)
38+
cocoapods-core (1.11.3)
39+
activesupport (>= 5.0, < 7)
40+
addressable (~> 2.8)
3741
algoliasearch (~> 1.0)
3842
concurrent-ruby (~> 1.1)
3943
fuzzy_match (~> 2.0.4)
4044
nap (~> 1.0)
4145
netrc (~> 0.11)
46+
public_suffix (~> 4.0)
4247
typhoeus (~> 1.0)
43-
cocoapods-deintegrate (1.0.4)
44-
cocoapods-downloader (1.4.0)
48+
cocoapods-deintegrate (1.0.5)
49+
cocoapods-downloader (1.6.3)
4550
cocoapods-plugins (1.0.0)
4651
nap
47-
cocoapods-search (1.0.0)
48-
cocoapods-stats (1.1.0)
49-
cocoapods-trunk (1.5.0)
52+
cocoapods-search (1.0.1)
53+
cocoapods-trunk (1.6.0)
5054
nap (>= 0.8, < 2.0)
5155
netrc (~> 0.11)
5256
cocoapods-try (1.2.0)
5357
colored2 (3.1.2)
54-
concurrent-ruby (1.1.7)
55-
dotenv (2.7.6)
58+
concurrent-ruby (1.2.0)
59+
dotenv (2.8.1)
5660
escape (0.0.4)
57-
ethon (0.12.0)
58-
ffi (>= 1.3.0)
59-
ffi (1.13.1)
61+
ethon (0.16.0)
62+
ffi (>= 1.15.0)
63+
ffi (1.15.5)
6064
fourflusher (2.3.1)
6165
fuzzy_match (2.0.4)
6266
gh_inspector (1.1.3)
6367
httpclient (2.8.3)
64-
i18n (0.9.5)
68+
i18n (1.12.0)
6569
concurrent-ruby (~> 1.0)
66-
jazzy (0.13.5)
70+
jazzy (0.14.3)
6771
cocoapods (~> 1.5)
6872
mustache (~> 1.1)
69-
open4
73+
open4 (~> 1.3)
7074
redcarpet (~> 3.4)
75+
rexml (~> 3.2)
7176
rouge (>= 2.0.6, < 4.0)
7277
sassc (~> 2.1)
7378
sqlite3 (~> 1.3)
7479
xcinvoke (~> 0.3.0)
75-
json (2.3.1)
80+
json (2.6.3)
7681
liferaft (0.0.6)
77-
mini_portile2 (2.4.0)
78-
minitest (5.14.1)
79-
molinillo (0.6.6)
82+
minitest (5.17.0)
83+
molinillo (0.8.0)
8084
mustache (1.1.1)
8185
nanaimo (0.3.0)
8286
nap (1.1.0)
8387
netrc (0.11.0)
84-
nokogiri (1.10.10)
85-
mini_portile2 (~> 2.4.0)
88+
nokogiri (1.14.2-arm64-darwin)
89+
racc (~> 1.4)
8690
open4 (1.3.4)
87-
redcarpet (3.5.0)
91+
public_suffix (4.0.7)
92+
racc (1.6.2)
93+
redcarpet (3.6.0)
94+
rexml (3.2.5)
8895
rouge (2.0.7)
89-
ruby-macho (1.4.0)
96+
ruby-macho (2.5.1)
9097
sassc (2.4.0)
9198
ffi (~> 1.9)
92-
slather (2.5.0)
99+
slather (2.7.4)
93100
CFPropertyList (>= 2.2, < 4)
94101
activesupport
95102
clamp (~> 1.3)
96-
nokogiri (~> 1.8)
97-
xcodeproj (~> 1.7)
98-
sqlite3 (1.4.2)
99-
thread_safe (0.3.6)
103+
nokogiri (>= 1.13.9)
104+
xcodeproj (~> 1.21)
105+
sqlite3 (1.6.1-arm64-darwin)
100106
typhoeus (1.4.0)
101107
ethon (>= 0.9.0)
102-
tzinfo (1.2.7)
103-
thread_safe (~> 0.1)
108+
tzinfo (2.0.6)
109+
concurrent-ruby (~> 1.0)
104110
xcinvoke (0.3.0)
105111
liferaft (~> 0.0.6)
106-
xcodeproj (1.18.0)
112+
xcodeproj (1.22.0)
107113
CFPropertyList (>= 2.3.3, < 4.0)
108114
atomos (~> 0.1.3)
109115
claide (>= 1.0.2, < 2.0)
110116
colored2 (~> 3.1)
111117
nanaimo (~> 0.3.0)
118+
rexml (~> 3.2.4)
112119
xcpretty (0.3.0)
113120
rouge (~> 2.0.7)
121+
zeitwerk (2.6.7)
114122

115123
PLATFORMS
116-
ruby
124+
arm64-darwin-21
117125

118126
DEPENDENCIES
119127
dotenv
@@ -122,4 +130,4 @@ DEPENDENCIES
122130
xcpretty
123131

124132
BUNDLED WITH
125-
2.0.2
133+
2.4.3

Podfile

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
source 'https://github.com/CocoaPods/Specs.git'
2-
platform :ios, '10.0'
2+
platform :ios, '11.0'
33

44
workspace 'RichTextRenderer.xcworkspace'
55

README.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@ When integrated into an iOS project, this library renders Contentful [RichText](
1212
##### CocoaPods installation
1313

1414
```ruby
15-
platform :ios, '10.0'
15+
platform :ios, '11.0'
1616
use_frameworks!
1717
pod 'ContentfulRichTextRenderer'
1818
```

RichTextRenderer.xcodeproj/project.pbxproj

Lines changed: 62 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,13 @@
77
objects = {
88

99
/* Begin PBXBuildFile section */
10+
402EE6FA29B8EA27004084BD /* TableCellRenderer.swift in Sources */ = {isa = PBXBuildFile; fileRef = 402EE6F229B8EA27004084BD /* TableCellRenderer.swift */; };
11+
402EE6FB29B8EA27004084BD /* TableHeaderCellRenderer.swift in Sources */ = {isa = PBXBuildFile; fileRef = 402EE6F329B8EA27004084BD /* TableHeaderCellRenderer.swift */; };
12+
402EE6FC29B8EA27004084BD /* TableRenderer.swift in Sources */ = {isa = PBXBuildFile; fileRef = 402EE6F429B8EA27004084BD /* TableRenderer.swift */; };
13+
402EE6FD29B8EA27004084BD /* TableRowRenderer.swift in Sources */ = {isa = PBXBuildFile; fileRef = 402EE6F529B8EA27004084BD /* TableRowRenderer.swift */; };
14+
402EE6FE29B8EA27004084BD /* SimpleTableView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 402EE6F729B8EA27004084BD /* SimpleTableView.swift */; };
15+
402EE6FF29B8EA27004084BD /* SimpleTableViewCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = 402EE6F829B8EA27004084BD /* SimpleTableViewCell.swift */; };
16+
402EE70029B8EA27004084BD /* SimpleTableViewRow.swift in Sources */ = {isa = PBXBuildFile; fileRef = 402EE6F929B8EA27004084BD /* SimpleTableViewRow.swift */; };
1017
47C487CC9DD23489C87D9EED /* libPods-RichTextRenderer.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 8C884D16587DB5F715026BEF /* libPods-RichTextRenderer.a */; };
1118
6DB2F3A924C02B3600A07D9B /* RichTextRenderer.h in Headers */ = {isa = PBXBuildFile; fileRef = 6DB2F3A724C02B3600A07D9B /* RichTextRenderer.h */; settings = {ATTRIBUTES = (Public, ); }; };
1219
6DB2F40324C02BA500A07D9B /* Node+RenderableNodeProviding.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6DB2F3B024C02BA300A07D9B /* Node+RenderableNodeProviding.swift */; };
@@ -77,6 +84,13 @@
7784
/* Begin PBXFileReference section */
7885
2BD885339F0023F978CA6F98 /* Pods-RichTextRenderer.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RichTextRenderer.release.xcconfig"; path = "Target Support Files/Pods-RichTextRenderer/Pods-RichTextRenderer.release.xcconfig"; sourceTree = "<group>"; };
7986
3B52550B1566C370D70CCA32 /* Pods-RichTextRenderer.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RichTextRenderer.debug.xcconfig"; path = "Target Support Files/Pods-RichTextRenderer/Pods-RichTextRenderer.debug.xcconfig"; sourceTree = "<group>"; };
87+
402EE6F229B8EA27004084BD /* TableCellRenderer.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = TableCellRenderer.swift; sourceTree = "<group>"; };
88+
402EE6F329B8EA27004084BD /* TableHeaderCellRenderer.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = TableHeaderCellRenderer.swift; sourceTree = "<group>"; };
89+
402EE6F429B8EA27004084BD /* TableRenderer.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = TableRenderer.swift; sourceTree = "<group>"; };
90+
402EE6F529B8EA27004084BD /* TableRowRenderer.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = TableRowRenderer.swift; sourceTree = "<group>"; };
91+
402EE6F729B8EA27004084BD /* SimpleTableView.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = SimpleTableView.swift; sourceTree = "<group>"; };
92+
402EE6F829B8EA27004084BD /* SimpleTableViewCell.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = SimpleTableViewCell.swift; sourceTree = "<group>"; };
93+
402EE6F929B8EA27004084BD /* SimpleTableViewRow.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = SimpleTableViewRow.swift; sourceTree = "<group>"; };
8094
6DB2F3A424C02B3600A07D9B /* RichTextRenderer.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = RichTextRenderer.framework; sourceTree = BUILT_PRODUCTS_DIR; };
8195
6DB2F3A724C02B3600A07D9B /* RichTextRenderer.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = RichTextRenderer.h; path = Sources/RichTextRenderer/RichTextRenderer.h; sourceTree = SOURCE_ROOT; };
8296
6DB2F3A824C02B3600A07D9B /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = "<group>"; };
@@ -158,6 +172,44 @@
158172
/* End PBXFrameworksBuildPhase section */
159173

160174
/* Begin PBXGroup section */
175+
402EE6EF29B8EA27004084BD /* Table */ = {
176+
isa = PBXGroup;
177+
children = (
178+
402EE6F029B8EA27004084BD /* CollectionTableView */,
179+
402EE6F129B8EA27004084BD /* Components */,
180+
402EE6F629B8EA27004084BD /* SimpleImplementation */,
181+
);
182+
path = Table;
183+
sourceTree = "<group>";
184+
};
185+
402EE6F029B8EA27004084BD /* CollectionTableView */ = {
186+
isa = PBXGroup;
187+
children = (
188+
);
189+
path = CollectionTableView;
190+
sourceTree = "<group>";
191+
};
192+
402EE6F129B8EA27004084BD /* Components */ = {
193+
isa = PBXGroup;
194+
children = (
195+
402EE6F229B8EA27004084BD /* TableCellRenderer.swift */,
196+
402EE6F329B8EA27004084BD /* TableHeaderCellRenderer.swift */,
197+
402EE6F429B8EA27004084BD /* TableRenderer.swift */,
198+
402EE6F529B8EA27004084BD /* TableRowRenderer.swift */,
199+
);
200+
path = Components;
201+
sourceTree = "<group>";
202+
};
203+
402EE6F629B8EA27004084BD /* SimpleImplementation */ = {
204+
isa = PBXGroup;
205+
children = (
206+
402EE6F729B8EA27004084BD /* SimpleTableView.swift */,
207+
402EE6F829B8EA27004084BD /* SimpleTableViewCell.swift */,
208+
402EE6F929B8EA27004084BD /* SimpleTableViewRow.swift */,
209+
);
210+
path = SimpleImplementation;
211+
sourceTree = "<group>";
212+
};
161213
6DB2F39A24C02B3600A07D9B = {
162214
isa = PBXGroup;
163215
children = (
@@ -249,6 +301,7 @@
249301
6DB2F3CD24C02BA400A07D9B /* OrderedList */,
250302
6DB2F3CF24C02BA400A07D9B /* ResourceLinkInline */,
251303
6DB2F3D224C02BA400A07D9B /* NodeRendering.swift */,
304+
402EE6EF29B8EA27004084BD /* Table */,
252305
6DB2F3D324C02BA400A07D9B /* ResourceLinkBlock */,
253306
6DB2F3D824C02BA400A07D9B /* ListItem */,
254307
6DB2F3DA24C02BA400A07D9B /* BlockQuote */,
@@ -569,15 +622,19 @@
569622
6DB2F40B24C02BA500A07D9B /* CodingUserInfoKey+CustomKeys.swift in Sources */,
570623
6DB2F43624C02BA500A07D9B /* DefaultFontProvider.swift in Sources */,
571624
6DB2F43424C02BA500A07D9B /* NodeRenderersProviding.swift in Sources */,
625+
402EE6FD29B8EA27004084BD /* TableRowRenderer.swift in Sources */,
572626
6DB2F41F24C02BA500A07D9B /* ResourceLinkBlockViewRepresentable.swift in Sources */,
573627
6DB2F41624C02BA500A07D9B /* ParagraphRenderer.swift in Sources */,
628+
402EE6FA29B8EA27004084BD /* TableCellRenderer.swift in Sources */,
574629
6DB2F40724C02BA500A07D9B /* NSTextStorage+Attachments.swift in Sources */,
575630
6DB2F42024C02BA500A07D9B /* ListItemRenderer.swift in Sources */,
576631
6DB2F41B24C02BA500A07D9B /* NodeRendering.swift in Sources */,
577632
6DB2F43C24C02BA500A07D9B /* FontProviding.swift in Sources */,
578633
6DB2F43824C02BA500A07D9B /* RendererConfiguration.swift in Sources */,
579634
6DB2F43D24C02BA500A07D9B /* TextListConfiguration.swift in Sources */,
635+
402EE6FE29B8EA27004084BD /* SimpleTableView.swift in Sources */,
580636
6DB2F41924C02BA500A07D9B /* ResourceLinkInlineRenderer.swift in Sources */,
637+
402EE6FB29B8EA27004084BD /* TableHeaderCellRenderer.swift in Sources */,
581638
6DB2F41324C02BA500A07D9B /* ConcreteTextContainer.swift in Sources */,
582639
6DB2F43124C02BA500A07D9B /* RenderableNode.swift in Sources */,
583640
6DB2F43E24C02BA500A07D9B /* BlockQuoteConfiguration.swift in Sources */,
@@ -592,11 +649,13 @@
592649
6DB2F42224C02BA500A07D9B /* HorizontalRuleRenderer.swift in Sources */,
593650
6DB2F41C24C02BA500A07D9B /* ResourceLinkBlockViewProviding.swift in Sources */,
594651
6DB2F40924C02BA500A07D9B /* UIColor+DarkAppearance.swift in Sources */,
652+
402EE6FF29B8EA27004084BD /* SimpleTableViewCell.swift in Sources */,
595653
6DB2F43024C02BA500A07D9B /* ListContext.swift in Sources */,
596654
6DB2F41524C02BA500A07D9B /* HyperlinkRenderer.swift in Sources */,
597655
6DB2F41D24C02BA500A07D9B /* ResourceLinkBlockRenderer.swift in Sources */,
598656
6DB2F42924C02BA500A07D9B /* AttachmentRect.swift in Sources */,
599657
6DB2F40F24C02BA500A07D9B /* BlockQuoteDecorationRenderer.swift in Sources */,
658+
402EE70029B8EA27004084BD /* SimpleTableViewRow.swift in Sources */,
600659
6DB2F41424C02BA500A07D9B /* Heading+HeadingLevel.swift in Sources */,
601660
6DB2F42D24C02BA500A07D9B /* ListType.swift in Sources */,
602661
6DB2F42C24C02BA500A07D9B /* UnorderedListBullet.swift in Sources */,
@@ -607,6 +666,7 @@
607666
6DB2F42F24C02BA500A07D9B /* ListItemIndicatorFactory.swift in Sources */,
608667
6DB2F43B24C02BA500A07D9B /* TextConfiguration.swift in Sources */,
609668
6DB2F43A24C02BA500A07D9B /* TextListConfiguration+Default.swift in Sources */,
669+
402EE6FC29B8EA27004084BD /* TableRenderer.swift in Sources */,
610670
6DB2F41024C02BA500A07D9B /* RichTextViewController.swift in Sources */,
611671
6DB2F43524C02BA500A07D9B /* DefaultRendererConfiguration.swift in Sources */,
612672
6DB2F40C24C02BA500A07D9B /* FontProviding+Marks.swift in Sources */,
@@ -755,7 +815,7 @@
755815
DYLIB_INSTALL_NAME_BASE = "@rpath";
756816
INFOPLIST_FILE = Sources/RichTextRenderer/Info.plist;
757817
INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks";
758-
IPHONEOS_DEPLOYMENT_TARGET = 10.0;
818+
IPHONEOS_DEPLOYMENT_TARGET = 11.0;
759819
LD_RUNPATH_SEARCH_PATHS = (
760820
"$(inherited)",
761821
"@executable_path/Frameworks",
@@ -784,7 +844,7 @@
784844
DYLIB_INSTALL_NAME_BASE = "@rpath";
785845
INFOPLIST_FILE = Sources/RichTextRenderer/Info.plist;
786846
INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks";
787-
IPHONEOS_DEPLOYMENT_TARGET = 10.0;
847+
IPHONEOS_DEPLOYMENT_TARGET = 11.0;
788848
LD_RUNPATH_SEARCH_PATHS = (
789849
"$(inherited)",
790850
"@executable_path/Frameworks",

Sources/RichTextRenderer/Extensions/NSMutableAttributedString+ArrayOperations.swift

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@ public extension Swift.Array where Element == NSMutableAttributedString {
88

99
// check the current node and if it has children,
1010
// if any of children are blocks, mutate and pass down context.
11-
// if it doesn’t have children, apply styles, clear conte
11+
// if it doesn’t have children, apply styles, clear context
1212
guard node is Text || (node as? BlockNode)?.content.filter({ $0 is BlockNode }).count == 0 else {
1313
return
1414
}

Sources/RichTextRenderer/Extensions/Node+RenderableNodeProviding.swift

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,30 @@ extension HorizontalRule: RenderableNodeProviding {
2020
}
2121
}
2222

23+
extension Table: RenderableNodeProviding {
24+
public var renderableNode: RenderableNode {
25+
.table(self)
26+
}
27+
}
28+
29+
extension TableRow: RenderableNodeProviding {
30+
public var renderableNode: RenderableNode {
31+
.tableRow(self)
32+
}
33+
}
34+
35+
extension TableRowCell: RenderableNodeProviding {
36+
public var renderableNode: RenderableNode {
37+
.tableRowCell(self)
38+
}
39+
}
40+
41+
extension TableRowHeaderCell: RenderableNodeProviding {
42+
public var renderableNode: RenderableNode {
43+
.tableRowHeaderCell(self)
44+
}
45+
}
46+
2347
extension Hyperlink: RenderableNodeProviding {
2448
public var renderableNode: RenderableNode {
2549
.hyperlink(self)

Sources/RichTextRenderer/Models/RenderableNode.swift

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,10 @@ public enum RenderableNode {
88
case heading(Heading)
99
case horizontalRule(HorizontalRule)
1010
case hyperlink(Hyperlink)
11+
case table(Table)
12+
case tableRow(TableRow)
13+
case tableRowHeaderCell(TableRowHeaderCell)
14+
case tableRowCell(TableRowCell)
1115
case listItem(ListItem)
1216
case orderedList(OrderedList)
1317
case paragraph(Paragraph)

0 commit comments

Comments
 (0)