git.iko.soy/typeable/pandoc
on master help sign in
DocBook reader: Implement table cell alignment (#6698)
commit1ad7a047d58a629ab7d29ea74dcb752d82d3dc11 authorNils Carlson <nils@nilscarlson.se> dateFri 25 Sep 2020, 00:43 (6 years ago) parenta331c69
3 files changed+88−46
src/Text/Pandoc/Readers/DocBook.hs+11−6 test/command/table-with-cell-align.md+37 test/command/table-with-column-span.md+40−40
src/Text/Pandoc/Readers/DocBook.hs+11−6
@@ -943,11 +943,6 @@ parseBlock (Elem e) =
943943 $ filterChildren isRow b
944944 Nothing -> mapM (parseRow colnames)
945945 $ filterChildren isRow e'
946− let toAlignment c = case findAttr (unqual "align") c of
947− Just "left" -> AlignLeft
948− Just "right" -> AlignRight
949− Just "center" -> AlignCenter
950− _ -> AlignDefault
951946 let toWidth c = do
952947 w <- findAttr (unqual "colwidth") c
953948 n <- safeRead $ "0" <> T.filter (\x ->
@@ -1005,6 +1000,14 @@ parseBlock (Elem e) =
10051000 -- we also attach the label as a class, so it can be styled properly
10061001 return $ divWith (attrValue "id" e,[label],[]) (title <> b)
10071002
1003+toAlignment :: Element -> Alignment
1004+toAlignment c = case findAttr (unqual "align") c of
1005+ Just "left" -> AlignLeft
1006+ Just "right" -> AlignRight
1007+ Just "center" -> AlignCenter
1008+ _ -> AlignDefault
1009+
1010+
10081011parseMixed :: PandocMonad m => (Inlines -> Blocks) -> [Content] -> DB m Blocks
10091012parseMixed container conts = do
10101013 let (ils,rest) = break isBlockElement conts
@@ -1036,7 +1039,9 @@ parseEntry cn el = do
10361039 case (mStrt, mEnd) of
10371040 (Just start, Just end) -> colDistance start end
10381041 _ -> 1
1039− (fmap (cell AlignDefault 1 (toColSpan el)) . parseMixed plain . elContent) el
1042+ let colSpan = toColSpan el
1043+ let align = toAlignment el
1044+ (fmap (cell align 1 colSpan) . (parseMixed plain) . elContent) el
10401045
10411046getInlines :: PandocMonad m => Element -> DB m Inlines
10421047getInlines e' = trimInlines . mconcat <$>
test/command/table-with-cell-align.mdnew file+37
@@ -0,0 +1,37 @@
1+```
2+% pandoc -f docbook -t native --quiet
3+<informaltable frame="all" rowsep="1" colsep="1">
4+<tgroup cols="16">
5+<tbody>
6+<row>
7+<entry align="center" valign="top"><simpara>1</simpara></entry>
8+<entry align="left" valign="top"><simpara>2</simpara></entry>
9+<entry align="right" valign="top"><simpara>3</simpara></entry>
10+<entry align="justify" valign="top"><simpara>4</simpara></entry>
11+</row>
12+</tbody>
13+</tgroup>
14+</informaltable>
15+^D
16+[Table ("",[],[]) (Caption Nothing
17+ [])
18+ [(AlignDefault,ColWidthDefault)
19+ ,(AlignDefault,ColWidthDefault)
20+ ,(AlignDefault,ColWidthDefault)
21+ ,(AlignDefault,ColWidthDefault)]
22+ (TableHead ("",[],[])
23+ [])
24+ [(TableBody ("",[],[]) (RowHeadColumns 0)
25+ []
26+ [Row ("",[],[])
27+ [Cell ("",[],[]) AlignCenter (RowSpan 1) (ColSpan 1)
28+ [Para [Str "1"]]
29+ ,Cell ("",[],[]) AlignLeft (RowSpan 1) (ColSpan 1)
30+ [Para [Str "2"]]
31+ ,Cell ("",[],[]) AlignRight (RowSpan 1) (ColSpan 1)
32+ [Para [Str "3"]]
33+ ,Cell ("",[],[]) AlignDefault (RowSpan 1) (ColSpan 1)
34+ [Para [Str "4"]]]])]
35+ (TableFoot ("",[],[])
36+ [])]
37+```
test/command/table-with-column-span.md+40−40
@@ -72,47 +72,47 @@
7272 [(TableBody ("",[],[]) (RowHeadColumns 0)
7373 []
7474 [Row ("",[],[])
75− [Cell ("",[],[]) AlignDefault (RowSpan 1) (ColSpan 8)
75+ [Cell ("",[],[]) AlignCenter (RowSpan 1) (ColSpan 8)
7676 [Para [Strong [Str "Octet",Space,Str "no.",Space,Str "1"]]]
77− ,Cell ("",[],[]) AlignDefault (RowSpan 1) (ColSpan 8)
77+ ,Cell ("",[],[]) AlignCenter (RowSpan 1) (ColSpan 8)
7878 [Para [Strong [Str "Octet",Space,Str "no.",Space,Str "2"]]]]
7979 ,Row ("",[],[])
80− [Cell ("",[],[]) AlignDefault (RowSpan 1) (ColSpan 1)
80+ [Cell ("",[],[]) AlignCenter (RowSpan 1) (ColSpan 1)
8181 [Para [Str "16"]]
82− ,Cell ("",[],[]) AlignDefault (RowSpan 1) (ColSpan 1)
82+ ,Cell ("",[],[]) AlignCenter (RowSpan 1) (ColSpan 1)
8383 [Para [Str "15"]]
84− ,Cell ("",[],[]) AlignDefault (RowSpan 1) (ColSpan 1)
84+ ,Cell ("",[],[]) AlignCenter (RowSpan 1) (ColSpan 1)
8585 [Para [Str "14"]]
86− ,Cell ("",[],[]) AlignDefault (RowSpan 1) (ColSpan 1)
86+ ,Cell ("",[],[]) AlignCenter (RowSpan 1) (ColSpan 1)
8787 [Para [Str "13"]]
88− ,Cell ("",[],[]) AlignDefault (RowSpan 1) (ColSpan 1)
88+ ,Cell ("",[],[]) AlignCenter (RowSpan 1) (ColSpan 1)
8989 [Para [Str "12"]]
90− ,Cell ("",[],[]) AlignDefault (RowSpan 1) (ColSpan 1)
90+ ,Cell ("",[],[]) AlignCenter (RowSpan 1) (ColSpan 1)
9191 [Para [Str "11"]]
92− ,Cell ("",[],[]) AlignDefault (RowSpan 1) (ColSpan 1)
92+ ,Cell ("",[],[]) AlignCenter (RowSpan 1) (ColSpan 1)
9393 [Para [Str "10"]]
94− ,Cell ("",[],[]) AlignDefault (RowSpan 1) (ColSpan 1)
94+ ,Cell ("",[],[]) AlignCenter (RowSpan 1) (ColSpan 1)
9595 [Para [Str "9"]]
96− ,Cell ("",[],[]) AlignDefault (RowSpan 1) (ColSpan 1)
96+ ,Cell ("",[],[]) AlignCenter (RowSpan 1) (ColSpan 1)
9797 [Para [Str "8"]]
98− ,Cell ("",[],[]) AlignDefault (RowSpan 1) (ColSpan 1)
98+ ,Cell ("",[],[]) AlignCenter (RowSpan 1) (ColSpan 1)
9999 [Para [Str "7"]]
100− ,Cell ("",[],[]) AlignDefault (RowSpan 1) (ColSpan 1)
100+ ,Cell ("",[],[]) AlignCenter (RowSpan 1) (ColSpan 1)
101101 [Para [Str "6"]]
102− ,Cell ("",[],[]) AlignDefault (RowSpan 1) (ColSpan 1)
102+ ,Cell ("",[],[]) AlignCenter (RowSpan 1) (ColSpan 1)
103103 [Para [Str "5"]]
104− ,Cell ("",[],[]) AlignDefault (RowSpan 1) (ColSpan 1)
104+ ,Cell ("",[],[]) AlignCenter (RowSpan 1) (ColSpan 1)
105105 [Para [Str "4"]]
106− ,Cell ("",[],[]) AlignDefault (RowSpan 1) (ColSpan 1)
106+ ,Cell ("",[],[]) AlignCenter (RowSpan 1) (ColSpan 1)
107107 [Para [Str "3"]]
108− ,Cell ("",[],[]) AlignDefault (RowSpan 1) (ColSpan 1)
108+ ,Cell ("",[],[]) AlignCenter (RowSpan 1) (ColSpan 1)
109109 [Para [Str "2"]]
110− ,Cell ("",[],[]) AlignDefault (RowSpan 1) (ColSpan 1)
110+ ,Cell ("",[],[]) AlignCenter (RowSpan 1) (ColSpan 1)
111111 [Para [Str "1"]]]
112112 ,Row ("",[],[])
113− [Cell ("",[],[]) AlignDefault (RowSpan 1) (ColSpan 8)
113+ [Cell ("",[],[]) AlignCenter (RowSpan 1) (ColSpan 8)
114114 [Para [Str "Code",Space,Str "A"]]
115− ,Cell ("",[],[]) AlignDefault (RowSpan 1) (ColSpan 8)
115+ ,Cell ("",[],[]) AlignCenter (RowSpan 1) (ColSpan 8)
116116 [Para [Str "Code",Space,Str "B"]]]])]
117117 (TableFoot ("",[],[])
118118 [])]
@@ -142,47 +142,47 @@
142142 [(TableBody ("",[],[]) (RowHeadColumns 0)
143143 []
144144 [Row ("",[],[])
145− [Cell ("",[],[]) AlignDefault (RowSpan 1) (ColSpan 8)
145+ [Cell ("",[],[]) AlignCenter (RowSpan 1) (ColSpan 8)
146146 [Para [Strong [Str "Octet",Space,Str "no.",Space,Str "1"]]]
147− ,Cell ("",[],[]) AlignDefault (RowSpan 1) (ColSpan 8)
147+ ,Cell ("",[],[]) AlignCenter (RowSpan 1) (ColSpan 8)
148148 [Para [Strong [Str "Octet",Space,Str "no.",Space,Str "2"]]]]
149149 ,Row ("",[],[])
150− [Cell ("",[],[]) AlignDefault (RowSpan 1) (ColSpan 1)
150+ [Cell ("",[],[]) AlignCenter (RowSpan 1) (ColSpan 1)
151151 [Para [Str "16"]]
152− ,Cell ("",[],[]) AlignDefault (RowSpan 1) (ColSpan 1)
152+ ,Cell ("",[],[]) AlignCenter (RowSpan 1) (ColSpan 1)
153153 [Para [Str "15"]]
154− ,Cell ("",[],[]) AlignDefault (RowSpan 1) (ColSpan 1)
154+ ,Cell ("",[],[]) AlignCenter (RowSpan 1) (ColSpan 1)
155155 [Para [Str "14"]]
156− ,Cell ("",[],[]) AlignDefault (RowSpan 1) (ColSpan 1)
156+ ,Cell ("",[],[]) AlignCenter (RowSpan 1) (ColSpan 1)
157157 [Para [Str "13"]]
158− ,Cell ("",[],[]) AlignDefault (RowSpan 1) (ColSpan 1)
158+ ,Cell ("",[],[]) AlignCenter (RowSpan 1) (ColSpan 1)
159159 [Para [Str "12"]]
160− ,Cell ("",[],[]) AlignDefault (RowSpan 1) (ColSpan 1)
160+ ,Cell ("",[],[]) AlignCenter (RowSpan 1) (ColSpan 1)
161161 [Para [Str "11"]]
162− ,Cell ("",[],[]) AlignDefault (RowSpan 1) (ColSpan 1)
162+ ,Cell ("",[],[]) AlignCenter (RowSpan 1) (ColSpan 1)
163163 [Para [Str "10"]]
164− ,Cell ("",[],[]) AlignDefault (RowSpan 1) (ColSpan 1)
164+ ,Cell ("",[],[]) AlignCenter (RowSpan 1) (ColSpan 1)
165165 [Para [Str "9"]]
166− ,Cell ("",[],[]) AlignDefault (RowSpan 1) (ColSpan 1)
166+ ,Cell ("",[],[]) AlignCenter (RowSpan 1) (ColSpan 1)
167167 [Para [Str "8"]]
168− ,Cell ("",[],[]) AlignDefault (RowSpan 1) (ColSpan 1)
168+ ,Cell ("",[],[]) AlignCenter (RowSpan 1) (ColSpan 1)
169169 [Para [Str "7"]]
170− ,Cell ("",[],[]) AlignDefault (RowSpan 1) (ColSpan 1)
170+ ,Cell ("",[],[]) AlignCenter (RowSpan 1) (ColSpan 1)
171171 [Para [Str "6"]]
172− ,Cell ("",[],[]) AlignDefault (RowSpan 1) (ColSpan 1)
172+ ,Cell ("",[],[]) AlignCenter (RowSpan 1) (ColSpan 1)
173173 [Para [Str "5"]]
174− ,Cell ("",[],[]) AlignDefault (RowSpan 1) (ColSpan 1)
174+ ,Cell ("",[],[]) AlignCenter (RowSpan 1) (ColSpan 1)
175175 [Para [Str "4"]]
176− ,Cell ("",[],[]) AlignDefault (RowSpan 1) (ColSpan 1)
176+ ,Cell ("",[],[]) AlignCenter (RowSpan 1) (ColSpan 1)
177177 [Para [Str "3"]]
178− ,Cell ("",[],[]) AlignDefault (RowSpan 1) (ColSpan 1)
178+ ,Cell ("",[],[]) AlignCenter (RowSpan 1) (ColSpan 1)
179179 [Para [Str "2"]]
180− ,Cell ("",[],[]) AlignDefault (RowSpan 1) (ColSpan 1)
180+ ,Cell ("",[],[]) AlignCenter (RowSpan 1) (ColSpan 1)
181181 [Para [Str "1"]]]
182182 ,Row ("",[],[])
183− [Cell ("",[],[]) AlignDefault (RowSpan 1) (ColSpan 8)
183+ [Cell ("",[],[]) AlignCenter (RowSpan 1) (ColSpan 8)
184184 [Para [Str "Code",Space,Str "A"]]
185− ,Cell ("",[],[]) AlignDefault (RowSpan 1) (ColSpan 8)
185+ ,Cell ("",[],[]) AlignCenter (RowSpan 1) (ColSpan 8)
186186 [Para [Str "Code",Space,Str "B"]]]])]
187187 (TableFoot ("",[],[])
188188 [])]