@@ -55,9 +55,6 @@ module Text.Pandoc.Shared (
5555 orderedListMarkers,
5656 normalizeSpaces,
5757 extractSpaces,
58− normalize,
59− normalizeInlines,
60− normalizeBlocks,
6158 removeFormatting,
6259 stringify,
6360 capitalize,
@@ -398,153 +395,6 @@ extractSpaces f is =
398395 _ -> mempty in
399396 (left <> f (B.trimInlines . B.Many $ contents) <> right)
400397
401−-- | Normalize @Pandoc@ document, consolidating doubled 'Space's,
402−-- combining adjacent 'Str's and 'Emph's, remove 'Null's and
403−-- empty elements, etc.
404−normalize :: Pandoc -> Pandoc
405−normalize (Pandoc (Meta meta) blocks) =
406− Pandoc (Meta $ M.map go meta) (normalizeBlocks blocks)
407− where go (MetaInlines xs) = MetaInlines $ normalizeInlines xs
408− go (MetaBlocks xs) = MetaBlocks $ normalizeBlocks xs
409− go (MetaList ms) = MetaList $ map go ms
410− go (MetaMap m) = MetaMap $ M.map go m
411− go x = x
412−
413−normalizeBlocks :: [Block] -> [Block]
414−normalizeBlocks (Null : xs) = normalizeBlocks xs
415−normalizeBlocks (Div attr bs : xs) =
416− Div attr (normalizeBlocks bs) : normalizeBlocks xs
417−normalizeBlocks (BlockQuote bs : xs) =
418− case normalizeBlocks bs of
419− [] -> normalizeBlocks xs
420− bs' -> BlockQuote bs' : normalizeBlocks xs
421−normalizeBlocks (BulletList [] : xs) = normalizeBlocks xs
422−normalizeBlocks (BulletList items : xs) =
423− BulletList (map normalizeBlocks items) : normalizeBlocks xs
424−normalizeBlocks (OrderedList _ [] : xs) = normalizeBlocks xs
425−normalizeBlocks (OrderedList attr items : xs) =
426− OrderedList attr (map normalizeBlocks items) : normalizeBlocks xs
427−normalizeBlocks (DefinitionList [] : xs) = normalizeBlocks xs
428−normalizeBlocks (DefinitionList items : xs) =
429− DefinitionList (map go items) : normalizeBlocks xs
430− where go (ils, bs) = (normalizeInlines ils, map normalizeBlocks bs)
431−normalizeBlocks (RawBlock _ "" : xs) = normalizeBlocks xs
432−normalizeBlocks (RawBlock f x : xs) =
433− case normalizeBlocks xs of
434− (RawBlock f' x' : rest) | f' == f ->
435− RawBlock f (x ++ ('\n':x')) : rest
436− rest -> RawBlock f x : rest
437−normalizeBlocks (Para ils : xs) =
438− case normalizeInlines ils of
439− [] -> normalizeBlocks xs
440− ils' -> Para ils' : normalizeBlocks xs
441−normalizeBlocks (Plain ils : xs) =
442− case normalizeInlines ils of
443− [] -> normalizeBlocks xs
444− ils' -> Plain ils' : normalizeBlocks xs
445−normalizeBlocks (Header lev attr ils : xs) =
446− Header lev attr (normalizeInlines ils) : normalizeBlocks xs
447−normalizeBlocks (Table capt aligns widths hdrs rows : xs) =
448− Table (normalizeInlines capt) aligns widths
449− (map normalizeBlocks hdrs) (map (map normalizeBlocks) rows)
450− : normalizeBlocks xs
451−normalizeBlocks (x:xs) = x : normalizeBlocks xs
452−normalizeBlocks [] = []
453−
454−normalizeInlines :: [Inline] -> [Inline]
455−normalizeInlines (Str x : ys) =
456− case concat (x : map fromStr strs) of
457− "" -> rest
458− n -> Str n : rest
459− where
460− (strs, rest) = span isStr $ normalizeInlines ys
461− isStr (Str _) = True
462− isStr _ = False
463− fromStr (Str z) = z
464− fromStr _ = error "normalizeInlines - fromStr - not a Str"
465−normalizeInlines (Space : SoftBreak : ys) =
466− SoftBreak : normalizeInlines ys
467−normalizeInlines (Space : ys) =
468− if null rest
469− then []
470− else Space : rest
471− where isSp Space = True
472− isSp _ = False
473− rest = dropWhile isSp $ normalizeInlines ys
474−normalizeInlines (Emph xs : zs) =
475− case normalizeInlines zs of
476− (Emph ys : rest) -> normalizeInlines $
477− Emph (normalizeInlines $ xs ++ ys) : rest
478− rest -> case normalizeInlines xs of
479− [] -> rest
480− xs' -> Emph xs' : rest
481−normalizeInlines (Strong xs : zs) =
482− case normalizeInlines zs of
483− (Strong ys : rest) -> normalizeInlines $
484− Strong (normalizeInlines $ xs ++ ys) : rest
485− rest -> case normalizeInlines xs of
486− [] -> rest
487− xs' -> Strong xs' : rest
488−normalizeInlines (Subscript xs : zs) =
489− case normalizeInlines zs of
490− (Subscript ys : rest) -> normalizeInlines $
491− Subscript (normalizeInlines $ xs ++ ys) : rest
492− rest -> case normalizeInlines xs of
493− [] -> rest
494− xs' -> Subscript xs' : rest
495−normalizeInlines (Superscript xs : zs) =
496− case normalizeInlines zs of
497− (Superscript ys : rest) -> normalizeInlines $
498− Superscript (normalizeInlines $ xs ++ ys) : rest
499− rest -> case normalizeInlines xs of
500− [] -> rest
501− xs' -> Superscript xs' : rest
502−normalizeInlines (SmallCaps xs : zs) =
503− case normalizeInlines zs of
504− (SmallCaps ys : rest) -> normalizeInlines $
505− SmallCaps (normalizeInlines $ xs ++ ys) : rest
506− rest -> case normalizeInlines xs of
507− [] -> rest
508− xs' -> SmallCaps xs' : rest
509−normalizeInlines (Strikeout xs : zs) =
510− case normalizeInlines zs of
511− (Strikeout ys : rest) -> normalizeInlines $
512− Strikeout (normalizeInlines $ xs ++ ys) : rest
513− rest -> case normalizeInlines xs of
514− [] -> rest
515− xs' -> Strikeout xs' : rest
516−normalizeInlines (RawInline _ [] : ys) = normalizeInlines ys
517−normalizeInlines (RawInline f xs : zs) =
518− case normalizeInlines zs of
519− (RawInline f' ys : rest) | f == f' -> normalizeInlines $
520− RawInline f (xs ++ ys) : rest
521− rest -> RawInline f xs : rest
522−normalizeInlines (Code _ "" : ys) = normalizeInlines ys
523−normalizeInlines (Code attr xs : zs) =
524− case normalizeInlines zs of
525− (Code attr' ys : rest) | attr == attr' -> normalizeInlines $
526− Code attr (xs ++ ys) : rest
527− rest -> Code attr xs : rest
528−-- allow empty spans, they may carry identifiers etc.
529−-- normalizeInlines (Span _ [] : ys) = normalizeInlines ys
530−normalizeInlines (Span attr xs : zs) =
531− case normalizeInlines zs of
532− (Span attr' ys : rest) | attr == attr' -> normalizeInlines $
533− Span attr (normalizeInlines $ xs ++ ys) : rest
534− rest -> Span attr (normalizeInlines xs) : rest
535−normalizeInlines (Note bs : ys) = Note (normalizeBlocks bs) :
536− normalizeInlines ys
537−normalizeInlines (Quoted qt ils : ys) =
538− Quoted qt (normalizeInlines ils) : normalizeInlines ys
539−normalizeInlines (Link attr ils t : ys) =
540− Link attr (normalizeInlines ils) t : normalizeInlines ys
541−normalizeInlines (Image attr ils t : ys) =
542− Image attr (normalizeInlines ils) t : normalizeInlines ys
543−normalizeInlines (Cite cs ils : ys) =
544− Cite cs (normalizeInlines ils) : normalizeInlines ys
545−normalizeInlines (x : xs) = x : normalizeInlines xs
546−normalizeInlines [] = []
547−
548398-- | Extract inlines, removing formatting.
549399removeFormatting :: Walkable Inline a => a -> [Inline]
550400removeFormatting = query go . walk deNote