@@ -76,6 +76,7 @@ import Text.Pandoc.Shared
7676import qualified Text.Pandoc.Translations as Translations
7777import Text.Pandoc.Walk
7878import qualified Text.Pandoc.Builder as B
79+import qualified Data.Text.Normalize as Normalize
7980
8081-- for debugging:
8182-- import Text.Pandoc.Extensions (getDefaultExtensions)
@@ -589,308 +590,18 @@ keyval = try $ do
589590keyvals :: PandocMonad m => LP m [(String, String)]
590591keyvals = try $ symbol '[' >> manyTill keyval (symbol ']')
591592
592−accent :: PandocMonad m => Char -> (Char -> String) -> LP m Inlines
593−accent c f = try $ do
593+accent :: PandocMonad m => Char -> Maybe Char -> LP m Inlines
594+accent combiningAccent fallBack = try $ do
594595 ils <- tok
595596 case toList ils of
596597 (Str (x:xs) : ys) -> return $ fromList $
597− case f x of
598− [z] | z == x -> Str ([z,c] ++ xs) : ys -- combining accent
599− zs -> Str (zs ++ xs) : ys
600− [Space] -> return $ str [c]
601− [] -> return $ str [c]
598+ -- try to normalize to the combined character:
599+ Str (T.unpack
600+ (Normalize.normalize Normalize.NFC
601+ (T.pack [x, combiningAccent])) ++ xs) : ys
602+ [Space] -> return $ str [fromMaybe combiningAccent fallBack]
603+ [] -> return $ str [fromMaybe combiningAccent fallBack]
602604 _ -> return ils
603−
604−grave :: Char -> String
605−grave 'A' = "À"
606−grave 'E' = "È"
607−grave 'I' = "Ì"
608−grave 'O' = "Ò"
609−grave 'U' = "Ù"
610−grave 'a' = "à"
611−grave 'e' = "è"
612−grave 'i' = "ì"
613−grave 'o' = "ò"
614−grave 'u' = "ù"
615−grave c = [c]
616−
617−acute :: Char -> String
618−acute 'A' = "Á"
619−acute 'E' = "É"
620−acute 'I' = "Í"
621−acute 'O' = "Ó"
622−acute 'U' = "Ú"
623−acute 'Y' = "Ý"
624−acute 'a' = "á"
625−acute 'e' = "é"
626−acute 'i' = "í"
627−acute 'o' = "ó"
628−acute 'u' = "ú"
629−acute 'y' = "ý"
630−acute 'C' = "Ć"
631−acute 'c' = "ć"
632−acute 'L' = "Ĺ"
633−acute 'l' = "ĺ"
634−acute 'N' = "Ń"
635−acute 'n' = "ń"
636−acute 'R' = "Ŕ"
637−acute 'r' = "ŕ"
638−acute 'S' = "Ś"
639−acute 's' = "ś"
640−acute 'Z' = "Ź"
641−acute 'z' = "ź"
642−acute c = [c]
643−
644−circ :: Char -> String
645−circ 'A' = "Â"
646−circ 'E' = "Ê"
647−circ 'I' = "Î"
648−circ 'O' = "Ô"
649−circ 'U' = "Û"
650−circ 'a' = "â"
651−circ 'e' = "ê"
652−circ 'i' = "î"
653−circ 'o' = "ô"
654−circ 'u' = "û"
655−circ 'C' = "Ĉ"
656−circ 'c' = "ĉ"
657−circ 'G' = "Ĝ"
658−circ 'g' = "ĝ"
659−circ 'H' = "Ĥ"
660−circ 'h' = "ĥ"
661−circ 'J' = "Ĵ"
662−circ 'j' = "ĵ"
663−circ 'S' = "Ŝ"
664−circ 's' = "ŝ"
665−circ 'W' = "Ŵ"
666−circ 'w' = "ŵ"
667−circ 'Y' = "Ŷ"
668−circ 'y' = "ŷ"
669−circ c = [c]
670−
671−tilde :: Char -> String
672−tilde 'A' = "Ã"
673−tilde 'a' = "ã"
674−tilde 'O' = "Õ"
675−tilde 'o' = "õ"
676−tilde 'I' = "Ĩ"
677−tilde 'i' = "ĩ"
678−tilde 'U' = "Ũ"
679−tilde 'u' = "ũ"
680−tilde 'N' = "Ñ"
681−tilde 'n' = "ñ"
682−tilde c = [c]
683−
684−umlaut :: Char -> String
685−umlaut 'A' = "Ä"
686−umlaut 'E' = "Ë"
687−umlaut 'I' = "Ï"
688−umlaut 'O' = "Ö"
689−umlaut 'U' = "Ü"
690−umlaut 'a' = "ä"
691−umlaut 'e' = "ë"
692−umlaut 'i' = "ï"
693−umlaut 'o' = "ö"
694−umlaut 'u' = "ü"
695−umlaut c = [c]
696−
697−hungarumlaut :: Char -> String
698−hungarumlaut 'A' = "A̋"
699−hungarumlaut 'E' = "E̋"
700−hungarumlaut 'I' = "I̋"
701−hungarumlaut 'O' = "Ő"
702−hungarumlaut 'U' = "Ű"
703−hungarumlaut 'Y' = "ӳ"
704−hungarumlaut 'a' = "a̋"
705−hungarumlaut 'e' = "e̋"
706−hungarumlaut 'i' = "i̋"
707−hungarumlaut 'o' = "ő"
708−hungarumlaut 'u' = "ű"
709−hungarumlaut 'y' = "ӳ"
710−hungarumlaut c = [c]
711−
712−dot :: Char -> String
713−dot 'C' = "Ċ"
714−dot 'c' = "ċ"
715−dot 'E' = "Ė"
716−dot 'e' = "ė"
717−dot 'G' = "Ġ"
718−dot 'g' = "ġ"
719−dot 'I' = "İ"
720−dot 'Z' = "Ż"
721−dot 'z' = "ż"
722−dot c = [c]
723−
724−macron :: Char -> String
725−macron 'A' = "Ā"
726−macron 'E' = "Ē"
727−macron 'I' = "Ī"
728−macron 'O' = "Ō"
729−macron 'U' = "Ū"
730−macron 'a' = "ā"
731−macron 'e' = "ē"
732−macron 'i' = "ī"
733−macron 'o' = "ō"
734−macron 'u' = "ū"
735−macron c = [c]
736−
737−ringabove :: Char -> String
738−ringabove 'A' = "Å"
739−ringabove 'a' = "å"
740−ringabove 'U' = "Ů"
741−ringabove 'u' = "ů"
742−ringabove c = [c]
743−
744−dotbelow :: Char -> String
745−dotbelow 'B' = "Ḅ"
746−dotbelow 'b' = "ḅ"
747−dotbelow 'D' = "Ḍ"
748−dotbelow 'd' = "ḍ"
749−dotbelow 'H' = "Ḥ"
750−dotbelow 'h' = "ḥ"
751−dotbelow 'K' = "Ḳ"
752−dotbelow 'k' = "ḳ"
753−dotbelow 'L' = "Ḷ"
754−dotbelow 'l' = "ḷ"
755−dotbelow 'M' = "Ṃ"
756−dotbelow 'm' = "ṃ"
757−dotbelow 'N' = "Ṇ"
758−dotbelow 'n' = "ṇ"
759−dotbelow 'R' = "Ṛ"
760−dotbelow 'r' = "ṛ"
761−dotbelow 'S' = "Ṣ"
762−dotbelow 's' = "ṣ"
763−dotbelow 'T' = "Ṭ"
764−dotbelow 't' = "ṭ"
765−dotbelow 'V' = "Ṿ"
766−dotbelow 'v' = "ṿ"
767−dotbelow 'W' = "Ẉ"
768−dotbelow 'w' = "ẉ"
769−dotbelow 'Z' = "Ẓ"
770−dotbelow 'z' = "ẓ"
771−dotbelow 'A' = "Ạ"
772−dotbelow 'a' = "ạ"
773−dotbelow 'E' = "Ẹ"
774−dotbelow 'e' = "ẹ"
775−dotbelow 'I' = "Ị"
776−dotbelow 'i' = "ị"
777−dotbelow 'O' = "Ọ"
778−dotbelow 'o' = "ọ"
779−dotbelow 'U' = "Ụ"
780−dotbelow 'u' = "ụ"
781−dotbelow 'Y' = "Ỵ"
782−dotbelow 'y' = "ỵ"
783−dotbelow c = [c]
784−
785−doublegrave :: Char -> String
786−doublegrave 'A' = "Ȁ"
787−doublegrave 'a' = "ȁ"
788−doublegrave 'E' = "Ȅ"
789−doublegrave 'e' = "ȅ"
790−doublegrave 'I' = "Ȉ"
791−doublegrave 'i' = "ȉ"
792−doublegrave 'O' = "Ȍ"
793−doublegrave 'o' = "ȍ"
794−doublegrave 'R' = "Ȑ"
795−doublegrave 'r' = "ȑ"
796−doublegrave 'U' = "Ȕ"
797−doublegrave 'u' = "ȕ"
798−doublegrave c = [c]
799−
800−hookabove :: Char -> String
801−hookabove 'A' = "Ả"
802−hookabove 'a' = "ả"
803−hookabove 'E' = "Ẻ"
804−hookabove 'e' = "ẻ"
805−hookabove 'I' = "Ỉ"
806−hookabove 'i' = "ỉ"
807−hookabove 'O' = "Ỏ"
808−hookabove 'o' = "ỏ"
809−hookabove 'U' = "Ủ"
810−hookabove 'u' = "ủ"
811−hookabove 'Y' = "Ỷ"
812−hookabove 'y' = "ỷ"
813−hookabove c = [c]
814−
815−cedilla :: Char -> String
816−cedilla 'c' = "ç"
817−cedilla 'C' = "Ç"
818−cedilla 's' = "ş"
819−cedilla 'S' = "Ş"
820−cedilla 't' = "ţ"
821−cedilla 'T' = "Ţ"
822−cedilla 'e' = "ȩ"
823−cedilla 'E' = "Ȩ"
824−cedilla 'h' = "ḩ"
825−cedilla 'H' = "Ḩ"
826−cedilla 'o' = "o̧"
827−cedilla 'O' = "O̧"
828−cedilla c = [c]
829−
830−hacek :: Char -> String
831−hacek 'A' = "Ǎ"
832−hacek 'a' = "ǎ"
833−hacek 'C' = "Č"
834−hacek 'c' = "č"
835−hacek 'D' = "Ď"
836−hacek 'd' = "ď"
837−hacek 'E' = "Ě"
838−hacek 'e' = "ě"
839−hacek 'G' = "Ǧ"
840−hacek 'g' = "ǧ"
841−hacek 'H' = "Ȟ"
842−hacek 'h' = "ȟ"
843−hacek 'I' = "Ǐ"
844−hacek 'i' = "ǐ"
845−hacek 'j' = "ǰ"
846−hacek 'K' = "Ǩ"
847−hacek 'k' = "ǩ"
848−hacek 'L' = "Ľ"
849−hacek 'l' = "ľ"
850−hacek 'N' = "Ň"
851−hacek 'n' = "ň"
852−hacek 'O' = "Ǒ"
853−hacek 'o' = "ǒ"
854−hacek 'R' = "Ř"
855−hacek 'r' = "ř"
856−hacek 'S' = "Š"
857−hacek 's' = "š"
858−hacek 'T' = "Ť"
859−hacek 't' = "ť"
860−hacek 'U' = "Ǔ"
861−hacek 'u' = "ǔ"
862−hacek 'Z' = "Ž"
863−hacek 'z' = "ž"
864−hacek c = [c]
865−
866−ogonek :: Char -> String
867−ogonek 'a' = "ą"
868−ogonek 'e' = "ę"
869−ogonek 'o' = "ǫ"
870−ogonek 'i' = "į"
871−ogonek 'u' = "ų"
872−ogonek 'A' = "Ą"
873−ogonek 'E' = "Ę"
874−ogonek 'I' = "Į"
875−ogonek 'O' = "Ǫ"
876−ogonek 'U' = "Ų"
877−ogonek c = [c]
878−
879−breve :: Char -> String
880−breve 'A' = "Ă"
881−breve 'a' = "ă"
882−breve 'E' = "Ĕ"
883−breve 'e' = "ĕ"
884−breve 'G' = "Ğ"
885−breve 'g' = "ğ"
886−breve 'I' = "Ĭ"
887−breve 'i' = "ĭ"
888−breve 'O' = "Ŏ"
889−breve 'o' = "ŏ"
890−breve 'U' = "Ŭ"
891−breve 'u' = "ŭ"
892−breve c = [c]
893−
894605mathDisplay :: String -> Inlines
895606mathDisplay = displayMath . trim
896607
@@ -1228,32 +939,32 @@ inlineCommands = M.union inlineLanguageCommands $ M.fromList
1228939 , ("copyright", lit "©")
1229940 , ("textasciicircum", lit "^")
1230941 , ("textasciitilde", lit "~")
1231− , ("H", accent '\779' hungarumlaut)
1232− , ("`", accent '`' grave)
1233− , ("'", accent '\'' acute)
1234− , ("^", accent '^' circ)
1235− , ("~", accent '~' tilde)
1236− , ("\"", accent '\776' umlaut)
1237− , (".", accent '\775' dot)
1238− , ("=", accent '\772' macron)
1239− , ("|", accent '\781' (:[])) -- vertical line above
1240− , ("b", accent '\817' (:[])) -- macron below
1241− , ("c", accent '\807' cedilla)
1242− , ("G", accent '\783' doublegrave)
1243− , ("h", accent '\777' hookabove)
1244− , ("d", accent '\803' dotbelow)
1245− , ("f", accent '\785' (:[])) -- inverted breve
1246− , ("r", accent '\778' ringabove)
1247− , ("t", accent '\865' (:[])) -- double inverted breve
1248− , ("U", accent '\782' (:[])) -- double vertical line above
1249− , ("v", accent 'ˇ' hacek)
1250− , ("u", accent '\774' breve)
1251− , ("k", accent '\808' ogonek)
1252− , ("textogonekcentered", accent '\808' ogonek)
942+ , ("H", accent '\779' Nothing) -- hungarumlaut
943+ , ("`", accent '\768' (Just '`')) -- grave
944+ , ("'", accent '\769' (Just '\'')) -- acute
945+ , ("^", accent '\770' (Just '^')) -- circ
946+ , ("~", accent '\771' (Just '~')) -- tilde
947+ , ("\"", accent '\776' Nothing) -- umlaut
948+ , (".", accent '\775' Nothing) -- dot
949+ , ("=", accent '\772' Nothing) -- macron
950+ , ("|", accent '\781' Nothing) -- vertical line above
951+ , ("b", accent '\817' Nothing) -- macron below
952+ , ("c", accent '\807' Nothing) -- cedilla
953+ , ("G", accent '\783' Nothing) -- doublegrave
954+ , ("h", accent '\777' Nothing) -- hookabove
955+ , ("d", accent '\803' Nothing) -- dotbelow
956+ , ("f", accent '\785' Nothing) -- inverted breve
957+ , ("r", accent '\778' Nothing) -- ringabove
958+ , ("t", accent '\865' Nothing) -- double inverted breve
959+ , ("U", accent '\782' Nothing) -- double vertical line above
960+ , ("v", accent '\780' Nothing) -- hacek
961+ , ("u", accent '\774' Nothing) -- breve
962+ , ("k", accent '\808' Nothing) -- ogonek
963+ , ("textogonekcentered", accent '\808' Nothing) -- ogonek
1253964 , ("i", lit "ı") -- dotless i
1254965 , ("j", lit "ȷ") -- dotless j
1255− , ("newtie", accent '\785' (:[])) -- inverted breve
1256− , ("textcircled", accent '\8413' (:[])) -- combining circle
966+ , ("newtie", accent '\785' Nothing) -- inverted breve
967+ , ("textcircled", accent '\8413' Nothing) -- combining circle
1257968 , ("\\", linebreak <$ (do inTableCell <- sInTableCell <$> getState
1258969 guard $ not inTableCell
1259970 optional opt