git.iko.soy/typeable/pandoc
on master help sign in
LaTeX reader: fix siunitx unit commands...

...they should only be recognized in siunitx contexts. For example, `\l` outside of an siunitx context should be l-slash, not l (for liter)! Closes #4842.

commit1b668657632c58964e8d7df42ea88e5ea6abfb1e authorJohn MacFarlane <jgm@berkeley.edu> dateFri 17 Aug 2018, 15:22 (8 years ago) parent723b60b
2 files changed+188−174
src/Text/Pandoc/Readers/LaTeX.hs+182−174 test/command/4842.md+6
src/Text/Pandoc/Readers/LaTeX.hs+182−174
@@ -735,7 +735,7 @@ dosiunitx = do
735735 skipopts
736736 value <- tok
737737 valueprefix <- option "" $ bracketed tok
738− unit <- inlineCommand' <|> tok
738+ unit <- grouped (mconcat <$> many1 siUnit) <|> siUnit <|> tok
739739 let emptyOr160 "" = ""
740740 emptyOr160 _ = "\160"
741741 return . mconcat $ [valueprefix,
@@ -744,11 +744,187 @@ dosiunitx = do
744744 emptyOr160 unit,
745745 unit]
746746
747−-- siunitx's \square command
748−dosquare :: PandocMonad m => LP m Inlines
749−dosquare = do
750− unit <- inlineCommand' <|> tok
751− return . mconcat $ [unit, "\178"]
747+siUnit :: PandocMonad m => LP m Inlines
748+siUnit = do
749+ Tok _ (CtrlSeq name) cmd <- anyControlSeq
750+ if name == "square"
751+ then do
752+ unit <- grouped (mconcat <$> many1 siUnit) <|> siUnit <|> tok
753+ return . mconcat $ [unit, "\178"]
754+ else
755+ case M.lookup name siUnitMap of
756+ Just il -> return il
757+ Nothing -> mzero
758+
759+siUnitMap :: M.Map Text Inlines
760+siUnitMap = M.fromList
761+ [ ("fg", str "fg")
762+ , ("pg", str "pg")
763+ , ("ng", str "ng")
764+ , ("ug", str "μg")
765+ , ("mg", str "mg")
766+ , ("g", str "g")
767+ , ("kg", str "kg")
768+ , ("amu", str "u")
769+ , ("pm", str "pm")
770+ , ("nm", str "nm")
771+ , ("um", str "μm")
772+ , ("mm", str "mm")
773+ , ("cm", str "cm")
774+ , ("dm", str "dm")
775+ , ("m", str "m")
776+ , ("km", str "km")
777+ , ("as", str "as")
778+ , ("fs", str "fs")
779+ , ("ps", str "ps")
780+ , ("ns", str "ns")
781+ , ("us", str "μs")
782+ , ("ms", str "ms")
783+ , ("s", str "s")
784+ , ("fmol", str "fmol")
785+ , ("pmol", str "pmol")
786+ , ("nmol", str "nmol")
787+ , ("umol", str "μmol")
788+ , ("mmol", str "mmol")
789+ , ("mol", str "mol")
790+ , ("kmol", str "kmol")
791+ , ("pA", str "pA")
792+ , ("nA", str "nA")
793+ , ("uA", str "μA")
794+ , ("mA", str "mA")
795+ , ("A", str "A")
796+ , ("kA", str "kA")
797+ , ("ul", str "μl")
798+ , ("ml", str "ml")
799+ , ("l", str "l")
800+ , ("hl", str "hl")
801+ , ("uL", str "μL")
802+ , ("mL", str "mL")
803+ , ("L", str "L")
804+ , ("hL", str "hL")
805+ , ("mHz", str "mHz")
806+ , ("Hz", str "Hz")
807+ , ("kHz", str "kHz")
808+ , ("MHz", str "MHz")
809+ , ("GHz", str "GHz")
810+ , ("THz", str "THz")
811+ , ("mN", str "mN")
812+ , ("N", str "N")
813+ , ("kN", str "kN")
814+ , ("MN", str "MN")
815+ , ("Pa", str "Pa")
816+ , ("kPa", str "kPa")
817+ , ("MPa", str "MPa")
818+ , ("GPa", str "GPa")
819+ , ("mohm", str "mΩ")
820+ , ("kohm", str "kΩ")
821+ , ("Mohm", str "MΩ")
822+ , ("pV", str "pV")
823+ , ("nV", str "nV")
824+ , ("uV", str "μV")
825+ , ("mV", str "mV")
826+ , ("V", str "V")
827+ , ("kV", str "kV")
828+ , ("W", str "W")
829+ , ("uW", str "μW")
830+ , ("mW", str "mW")
831+ , ("kW", str "kW")
832+ , ("MW", str "MW")
833+ , ("GW", str "GW")
834+ , ("J", str "J")
835+ , ("uJ", str "μJ")
836+ , ("mJ", str "mJ")
837+ , ("kJ", str "kJ")
838+ , ("eV", str "eV")
839+ , ("meV", str "meV")
840+ , ("keV", str "keV")
841+ , ("MeV", str "MeV")
842+ , ("GeV", str "GeV")
843+ , ("TeV", str "TeV")
844+ , ("kWh", str "kWh")
845+ , ("F", str "F")
846+ , ("fF", str "fF")
847+ , ("pF", str "pF")
848+ , ("K", str "K")
849+ , ("dB", str "dB")
850+ , ("angstrom", str "Å")
851+ , ("arcmin", str "′")
852+ , ("arcminute", str "′")
853+ , ("arcsecond", str "″")
854+ , ("astronomicalunit", str "ua")
855+ , ("atomicmassunit", str "u")
856+ , ("atto", str "a")
857+ , ("bar", str "bar")
858+ , ("barn", str "b")
859+ , ("becquerel", str "Bq")
860+ , ("bel", str "B")
861+ , ("candela", str "cd")
862+ , ("celsius", str "°C")
863+ , ("centi", str "c")
864+ , ("coulomb", str "C")
865+ , ("dalton", str "Da")
866+ , ("day", str "d")
867+ , ("deca", str "d")
868+ , ("deci", str "d")
869+ , ("decibel", str "db")
870+ , ("degreeCelsius",str "°C")
871+ , ("degree", str "°")
872+ , ("deka", str "d")
873+ , ("electronvolt", str "eV")
874+ , ("exa", str "E")
875+ , ("farad", str "F")
876+ , ("femto", str "f")
877+ , ("giga", str "G")
878+ , ("gram", str "g")
879+ , ("hectare", str "ha")
880+ , ("hecto", str "h")
881+ , ("henry", str "H")
882+ , ("hertz", str "Hz")
883+ , ("hour", str "h")
884+ , ("joule", str "J")
885+ , ("katal", str "kat")
886+ , ("kelvin", str "K")
887+ , ("kilo", str "k")
888+ , ("kilogram", str "kg")
889+ , ("knot", str "kn")
890+ , ("liter", str "L")
891+ , ("litre", str "l")
892+ , ("lumen", str "lm")
893+ , ("lux", str "lx")
894+ , ("mega", str "M")
895+ , ("meter", str "m")
896+ , ("metre", str "m")
897+ , ("milli", str "m")
898+ , ("minute", str "min")
899+ , ("mmHg", str "mmHg")
900+ , ("mole", str "mol")
901+ , ("nano", str "n")
902+ , ("nauticalmile", str "M")
903+ , ("neper", str "Np")
904+ , ("newton", str "N")
905+ , ("ohm", str "Ω")
906+ , ("Pa", str "Pa")
907+ , ("pascal", str "Pa")
908+ , ("percent", str "%")
909+ , ("per", str "/")
910+ , ("peta", str "P")
911+ , ("pico", str "p")
912+ , ("radian", str "rad")
913+ , ("second", str "s")
914+ , ("siemens", str "S")
915+ , ("sievert", str "Sv")
916+ , ("steradian", str "sr")
917+ , ("tera", str "T")
918+ , ("tesla", str "T")
919+ , ("tonne", str "t")
920+ , ("volt", str "V")
921+ , ("watt", str "W")
922+ , ("weber", str "Wb")
923+ , ("yocto", str "y")
924+ , ("yotta", str "Y")
925+ , ("zepto", str "z")
926+ , ("zetta", str "Z")
927+ ]
752928
753929lit :: String -> LP m Inlines
754930lit = pure . str
@@ -1594,174 +1770,6 @@ inlineCommands = M.union inlineLanguageCommands $ M.fromList
15941770 , ("acsp", doAcronymPlural "abbrv")
15951771 -- siuntix
15961772 , ("SI", dosiunitx)
1597− -- units of siuntix
1598− , ("fg", lit "fg")
1599− , ("pg", lit "pg")
1600− , ("ng", lit "ng")
1601− , ("ug", lit "μg")
1602− , ("mg", lit "mg")
1603− , ("g", lit "g")
1604− , ("kg", lit "kg")
1605− , ("amu", lit "u")
1606− , ("pm", lit "pm")
1607− , ("nm", lit "nm")
1608− , ("um", lit "μm")
1609− , ("mm", lit "mm")
1610− , ("cm", lit "cm")
1611− , ("dm", lit "dm")
1612− , ("m", lit "m")
1613− , ("km", lit "km")
1614− , ("as", lit "as")
1615− , ("fs", lit "fs")
1616− , ("ps", lit "ps")
1617− , ("ns", lit "ns")
1618− , ("us", lit "μs")
1619− , ("ms", lit "ms")
1620− , ("s", lit "s")
1621− , ("fmol", lit "fmol")
1622− , ("pmol", lit "pmol")
1623− , ("nmol", lit "nmol")
1624− , ("umol", lit "μmol")
1625− , ("mmol", lit "mmol")
1626− , ("mol", lit "mol")
1627− , ("kmol", lit "kmol")
1628− , ("pA", lit "pA")
1629− , ("nA", lit "nA")
1630− , ("uA", lit "μA")
1631− , ("mA", lit "mA")
1632− , ("A", lit "A")
1633− , ("kA", lit "kA")
1634− , ("ul", lit "μl")
1635− , ("ml", lit "ml")
1636− , ("l", lit "l")
1637− , ("hl", lit "hl")
1638− , ("uL", lit "μL")
1639− , ("mL", lit "mL")
1640− , ("L", lit "L")
1641− , ("hL", lit "hL")
1642− , ("mHz", lit "mHz")
1643− , ("Hz", lit "Hz")
1644− , ("kHz", lit "kHz")
1645− , ("MHz", lit "MHz")
1646− , ("GHz", lit "GHz")
1647− , ("THz", lit "THz")
1648− , ("mN", lit "mN")
1649− , ("N", lit "N")
1650− , ("kN", lit "kN")
1651− , ("MN", lit "MN")
1652− , ("Pa", lit "Pa")
1653− , ("kPa", lit "kPa")
1654− , ("MPa", lit "MPa")
1655− , ("GPa", lit "GPa")
1656− , ("mohm", lit "mΩ")
1657− , ("kohm", lit "kΩ")
1658− , ("Mohm", lit "MΩ")
1659− , ("pV", lit "pV")
1660− , ("nV", lit "nV")
1661− , ("uV", lit "μV")
1662− , ("mV", lit "mV")
1663− , ("V", lit "V")
1664− , ("kV", lit "kV")
1665− , ("W", lit "W")
1666− , ("uW", lit "μW")
1667− , ("mW", lit "mW")
1668− , ("kW", lit "kW")
1669− , ("MW", lit "MW")
1670− , ("GW", lit "GW")
1671− , ("J", lit "J")
1672− , ("uJ", lit "μJ")
1673− , ("mJ", lit "mJ")
1674− , ("kJ", lit "kJ")
1675− , ("eV", lit "eV")
1676− , ("meV", lit "meV")
1677− , ("keV", lit "keV")
1678− , ("MeV", lit "MeV")
1679− , ("GeV", lit "GeV")
1680− , ("TeV", lit "TeV")
1681− , ("kWh", lit "kWh")
1682− , ("F", lit "F")
1683− , ("fF", lit "fF")
1684− , ("pF", lit "pF")
1685− , ("K", lit "K")
1686− , ("dB", lit "dB")
1687− , ("angstrom", lit "Å")
1688− , ("arcmin", lit "′")
1689− , ("arcminute", lit "′")
1690− , ("arcsecond", lit "″")
1691− , ("astronomicalunit", lit "ua")
1692− , ("atomicmassunit", lit "u")
1693− , ("atto", lit "a")
1694− , ("bar", lit "bar")
1695− , ("barn", lit "b")
1696− , ("becquerel", lit "Bq")
1697− , ("bel", lit "B")
1698− , ("candela", lit "cd")
1699− , ("celsius", lit "°C")
1700− , ("centi", lit "c")
1701− , ("coulomb", lit "C")
1702− , ("dalton", lit "Da")
1703− , ("day", lit "d")
1704− , ("deca", lit "d")
1705− , ("deci", lit "d")
1706− , ("decibel", lit "db")
1707− , ("degreeCelsius",lit "°C")
1708− , ("degree", lit "°")
1709− , ("deka", lit "d")
1710− , ("electronvolt", lit "eV")
1711− , ("exa", lit "E")
1712− , ("farad", lit "F")
1713− , ("femto", lit "f")
1714− , ("giga", lit "G")
1715− , ("gram", lit "g")
1716− , ("hectare", lit "ha")
1717− , ("hecto", lit "h")
1718− , ("henry", lit "H")
1719− , ("hertz", lit "Hz")
1720− , ("hour", lit "h")
1721− , ("joule", lit "J")
1722− , ("katal", lit "kat")
1723− , ("kelvin", lit "K")
1724− , ("kilo", lit "k")
1725− , ("kilogram", lit "kg")
1726− , ("knot", lit "kn")
1727− , ("liter", lit "L")
1728− , ("litre", lit "l")
1729− , ("lumen", lit "lm")
1730− , ("lux", lit "lx")
1731− , ("mega", lit "M")
1732− , ("meter", lit "m")
1733− , ("metre", lit "m")
1734− , ("milli", lit "m")
1735− , ("minute", lit "min")
1736− , ("mmHg", lit "mmHg")
1737− , ("mole", lit "mol")
1738− , ("nano", lit "n")
1739− , ("nauticalmile", lit "M")
1740− , ("neper", lit "Np")
1741− , ("newton", lit "N")
1742− , ("ohm", lit "Ω")
1743− , ("Pa", lit "Pa")
1744− , ("pascal", lit "Pa")
1745− , ("percent", lit "%")
1746− , ("per", lit "/")
1747− , ("peta", lit "P")
1748− , ("pico", lit "p")
1749− , ("radian", lit "rad")
1750− , ("second", lit "s")
1751− , ("siemens", lit "S")
1752− , ("sievert", lit "Sv")
1753− , ("square", dosquare)
1754− , ("steradian", lit "sr")
1755− , ("tera", lit "T")
1756− , ("tesla", lit "T")
1757− , ("tonne", lit "t")
1758− , ("volt", lit "V")
1759− , ("watt", lit "W")
1760− , ("weber", lit "Wb")
1761− , ("yocto", lit "y")
1762− , ("yotta", lit "Y")
1763− , ("zepto", lit "z")
1764− , ("zetta", lit "Z")
17651773 -- hyphenat
17661774 , ("bshyp", lit "\\\173")
17671775 , ("fshyp", lit "/\173")
test/command/4842.mdnew file+6
@@ -0,0 +1,6 @@
1+```
2+pandoc -f latex -t native
3+\l
4+^D
5+[Para [Str "\322"]]
6+```