diff options
| author | Albert Krewinkel <albert@zeitkraut.de> | 2023-02-17 23:03:32 +0100 |
|---|---|---|
| committer | Albert Krewinkel <albert@zeitkraut.de> | 2023-02-18 00:09:21 +0100 |
| commit | d08d1c04c54a91eceff2ad3e8cc628b730a7cc9b (patch) | |
| tree | 2ac1a95a72e96766b4f9ab407f9dad67651f3eed | |
| parent | da9c196e09ecd87b2d727294810357f485733be8 (diff) | |
JATS writer: include alt-text in `<graphic>`, `<inline-graphic>` elements
Closes: #8631
| -rw-r--r-- | src/Text/Pandoc/Writers/JATS.hs | 32 | ||||
| -rw-r--r-- | test/Tests/Writers/JATS.hs | 4 | ||||
| -rw-r--r-- | test/command/figures-jats.md | 17 | ||||
| -rw-r--r-- | test/writer.jats_archiving | 5 | ||||
| -rw-r--r-- | test/writer.jats_articleauthoring | 5 | ||||
| -rw-r--r-- | test/writer.jats_publishing | 5 |
6 files changed, 54 insertions, 14 deletions
diff --git a/src/Text/Pandoc/Writers/JATS.hs b/src/Text/Pandoc/Writers/JATS.hs index 6b382367d..707c7bad7 100644 --- a/src/Text/Pandoc/Writers/JATS.hs +++ b/src/Text/Pandoc/Writers/JATS.hs @@ -351,11 +351,16 @@ blockToJATS _ b@(RawBlock f str) blockToJATS _ HorizontalRule = return empty -- not semantic blockToJATS opts (Table attr caption colspecs thead tbody tfoot) = tableToJATS opts (Ann.toTable attr caption colspecs thead tbody tfoot) -blockToJATS opts (Figure (ident, _, kvs) caption body) = do - capt <- case caption of - Caption _ [] -> pure empty - Caption _ cpt -> inTagsSimple "caption" <$> blocksToJATS opts cpt - figbod <- blocksToJATS opts body +blockToJATS opts (Figure (ident, _, kvs) (Caption _short longcapt) body) = do + -- Remove the alt text from images if it's the same as the caption text. + let unsetAltIfDupl = \case + Image attr alt tgt + | stringify alt == stringify longcapt -> Image attr [] tgt + inline -> inline + capt <- if null longcapt + then pure empty + else inTagsSimple "caption" <$> blocksToJATS opts longcapt + figbod <- blocksToJATS opts $ walk unsetAltIfDupl body let figattr = [("id", escapeNCName ident) | not (T.null ident)] ++ [(k,v) | (k,v) <- kvs , k `elem` [ "fig-type", "orientation" @@ -520,11 +525,17 @@ inlineToJATS opts (Link (ident,_,kvs) txt (src, tit)) = do contents <- inlinesToJATS opts txt return $ inTags False "ext-link" attr contents inlineToJATS _ (Image attr alt tgt) = do - return $ selfClosingTag "inline-graphic" (graphicAttr attr alt tgt) + let elattr = graphicAttr attr alt tgt + return $ case altToJATS alt of + Nothing -> selfClosingTag "inline-graphic" elattr + Just altTag -> inTags True "inline-graphic" elattr altTag graphic :: Attr -> [Inline] -> Target -> (Doc Text) graphic attr alt tgt = - selfClosingTag "graphic" (graphicAttr attr alt tgt) + let elattr = graphicAttr attr alt tgt + in case altToJATS alt of + Nothing -> selfClosingTag "graphic" elattr + Just altTag -> inTags True "graphic" elattr altTag graphicAttr :: Attr -> [Inline] -> Target -> [(Text, Text)] graphicAttr (ident, _, kvs) _alt (src, tit) = @@ -541,6 +552,13 @@ graphicAttr (ident, _, kvs) _alt (src, tit) = , "xlink:show", "xlink:type"] ] +altToJATS :: [Inline] -> Maybe (Doc Text) +altToJATS alt = + if null alt + then Nothing + else Just . inTagsSimple "alt-text" . + hsep . map literal . T.words $ stringify alt + imageMimeType :: Text -> [(Text, Text)] -> (Text, Text) imageMimeType src kvs = let mbMT = getMimeType (T.unpack src) diff --git a/test/Tests/Writers/JATS.hs b/test/Tests/Writers/JATS.hs index 8259c644e..8571ccd1d 100644 --- a/test/Tests/Writers/JATS.hs +++ b/test/Tests/Writers/JATS.hs @@ -134,7 +134,9 @@ tests = , "containing image" =: header 1 (image "imgs/foo.jpg" "" (text "Alt text")) =?> "<sec>\n\ - \ <title><inline-graphic mimetype=\"image\" mime-subtype=\"jpeg\" xlink:href=\"imgs/foo.jpg\" /></title>\n\ + \ <title><inline-graphic mimetype=\"image\" mime-subtype=\"jpeg\" xlink:href=\"imgs/foo.jpg\">\n\ + \ <alt-text>Alt text</alt-text>\n\ + \ </inline-graphic></title>\n\ \</sec>" ] diff --git a/test/command/figures-jats.md b/test/command/figures-jats.md index a5089df2a..bc13bcb5b 100644 --- a/test/command/figures-jats.md +++ b/test/command/figures-jats.md @@ -12,3 +12,20 @@ Para [Image ("fig-id-2",[],[]) [] ("foo.png", "fig:")]]] <graphic id="fig-id-2" mimetype="image" mime-subtype="png" xlink:href="foo.png" xlink:title="fig:" /> </fig> ``` + +Figure float with caption and alt text. + +``` +% pandoc -f native -t jats +[Figure ("fig-id",[],[]) (Caption Nothing [Para [Str "Caption"]]) [Para [Str "Text"], +Para [Image ("fig-id-2",[],[]) [Str "alt"] ("foo.png", "fig:")]]] + +^D +<fig id="fig-id"> + <caption><p>Caption</p></caption> + <p>Text</p> + <graphic id="fig-id-2" mimetype="image" mime-subtype="png" xlink:href="foo.png" xlink:title="fig:"> + <alt-text>alt</alt-text> + </graphic> +</fig> +``` diff --git a/test/writer.jats_archiving b/test/writer.jats_archiving index d762c735a..31c619314 100644 --- a/test/writer.jats_archiving +++ b/test/writer.jats_archiving @@ -845,8 +845,9 @@ These should not be escaped: \$ \\ \> \[ \{</preformat> <graphic mimetype="image" mime-subtype="jpeg" xlink:href="lalune.jpg" xlink:title="Voyage dans la Lune" /> </fig> <p>Here is a movie - <inline-graphic mimetype="image" mime-subtype="jpeg" xlink:href="movie.jpg" /> - icon.</p> + <inline-graphic mimetype="image" mime-subtype="jpeg" xlink:href="movie.jpg"> + <alt-text>movie</alt-text> + </inline-graphic> icon.</p> </sec> <sec id="footnotes"> <title>Footnotes</title> diff --git a/test/writer.jats_articleauthoring b/test/writer.jats_articleauthoring index 74d24754f..3bdb5c0ed 100644 --- a/test/writer.jats_articleauthoring +++ b/test/writer.jats_articleauthoring @@ -830,8 +830,9 @@ These should not be escaped: \$ \\ \> \[ \{</preformat> <graphic mimetype="image" mime-subtype="jpeg" xlink:href="lalune.jpg" xlink:title="Voyage dans la Lune" /> </fig> <p>Here is a movie - <inline-graphic mimetype="image" mime-subtype="jpeg" xlink:href="movie.jpg" /> - icon.</p> + <inline-graphic mimetype="image" mime-subtype="jpeg" xlink:href="movie.jpg"> + <alt-text>movie</alt-text> + </inline-graphic> icon.</p> </sec> <sec id="footnotes"> <title>Footnotes</title> diff --git a/test/writer.jats_publishing b/test/writer.jats_publishing index 5701e5db8..6d7c7d68d 100644 --- a/test/writer.jats_publishing +++ b/test/writer.jats_publishing @@ -845,8 +845,9 @@ These should not be escaped: \$ \\ \> \[ \{</preformat> <graphic mimetype="image" mime-subtype="jpeg" xlink:href="lalune.jpg" xlink:title="Voyage dans la Lune" /> </fig> <p>Here is a movie - <inline-graphic mimetype="image" mime-subtype="jpeg" xlink:href="movie.jpg" /> - icon.</p> + <inline-graphic mimetype="image" mime-subtype="jpeg" xlink:href="movie.jpg"> + <alt-text>movie</alt-text> + </inline-graphic> icon.</p> </sec> <sec id="footnotes"> <title>Footnotes</title> |
