{-# LANGUAGE OverloadedStrings #-}
module Text.Pandoc.Readers.ODT.Namespaces ( Namespace (..)
) where
import qualified Data.Map as M (empty, insert)
import Data.Maybe (fromMaybe, listToMaybe)
import Data.Text (Text)
import qualified Data.Text as T
import Text.Pandoc.Readers.ODT.Generic.Namespaces
instance NameSpaceID Namespace where
getInitialIRImap :: NameSpaceIRIs Namespace
getInitialIRImap = NameSpaceIRIs Namespace
nsIDmap
getNamespaceID :: Text
-> NameSpaceIRIs Namespace
-> Maybe (NameSpaceIRIs Namespace, Namespace)
getNamespaceID Text
"" NameSpaceIRIs Namespace
m = (NameSpaceIRIs Namespace, Namespace)
-> Maybe (NameSpaceIRIs Namespace, Namespace)
forall a. a -> Maybe a
Just(NameSpaceIRIs Namespace
m, Namespace
NsXML)
getNamespaceID Text
iri NameSpaceIRIs Namespace
m = Namespace -> Maybe (NameSpaceIRIs Namespace, Namespace)
asPair (Namespace -> Maybe (NameSpaceIRIs Namespace, Namespace))
-> Namespace -> Maybe (NameSpaceIRIs Namespace, Namespace)
forall a b. (a -> b) -> a -> b
$ Namespace -> Maybe Namespace -> Namespace
forall a. a -> Maybe a -> a
fromMaybe (Text -> Namespace
NsOther Text
iri) (Text -> Maybe Namespace
findID Text
iri)
where asPair :: Namespace -> Maybe (NameSpaceIRIs Namespace, Namespace)
asPair Namespace
nsID = (NameSpaceIRIs Namespace, Namespace)
-> Maybe (NameSpaceIRIs Namespace, Namespace)
forall a. a -> Maybe a
Just (Namespace
-> Text -> NameSpaceIRIs Namespace -> NameSpaceIRIs Namespace
forall k a. Ord k => k -> a -> Map k a -> Map k a
M.insert Namespace
nsID Text
iri NameSpaceIRIs Namespace
m, Namespace
nsID)
findID :: NameSpaceIRI -> Maybe Namespace
findID :: Text -> Maybe Namespace
findID Text
iri = [Namespace] -> Maybe Namespace
forall a. [a] -> Maybe a
listToMaybe [Namespace
nsID | (Text
iri',Namespace
nsID) <- [(Text, Namespace)]
nsIDs, Text
iri' Text -> Text -> Bool
`T.isPrefixOf` Text
iri]
nsIDmap :: NameSpaceIRIs Namespace
nsIDmap :: NameSpaceIRIs Namespace
nsIDmap = ((Text, Namespace)
-> NameSpaceIRIs Namespace -> NameSpaceIRIs Namespace)
-> NameSpaceIRIs Namespace
-> [(Text, Namespace)]
-> NameSpaceIRIs Namespace
forall a b. (a -> b -> b) -> b -> [a] -> b
forall (t :: * -> *) a b.
Foldable t =>
(a -> b -> b) -> b -> t a -> b
foldr ((Text
-> Namespace -> NameSpaceIRIs Namespace -> NameSpaceIRIs Namespace)
-> (Text, Namespace)
-> NameSpaceIRIs Namespace
-> NameSpaceIRIs Namespace
forall a b c. (a -> b -> c) -> (a, b) -> c
uncurry ((Text
-> Namespace -> NameSpaceIRIs Namespace -> NameSpaceIRIs Namespace)
-> (Text, Namespace)
-> NameSpaceIRIs Namespace
-> NameSpaceIRIs Namespace)
-> (Text
-> Namespace -> NameSpaceIRIs Namespace -> NameSpaceIRIs Namespace)
-> (Text, Namespace)
-> NameSpaceIRIs Namespace
-> NameSpaceIRIs Namespace
forall a b. (a -> b) -> a -> b
$ (Namespace
-> Text -> NameSpaceIRIs Namespace -> NameSpaceIRIs Namespace)
-> Text
-> Namespace
-> NameSpaceIRIs Namespace
-> NameSpaceIRIs Namespace
forall a b c. (a -> b -> c) -> b -> a -> c
flip Namespace
-> Text -> NameSpaceIRIs Namespace -> NameSpaceIRIs Namespace
forall k a. Ord k => k -> a -> Map k a -> Map k a
M.insert) NameSpaceIRIs Namespace
forall k a. Map k a
M.empty [(Text, Namespace)]
nsIDs
data Namespace =
NsOffice | NsStyle | NsText | NsTable | NsForm
| NsDraw | Ns3D | NsAnim | NsChart | NsConfig
| NsDB | NsMeta | NsNumber | NsScript | NsManifest
| NsPresentation
| NsODF
| NsXSL_FO | NsSVG | NsSmil
| NsMathML | NsXForms | NsXLink | NsXHtml | NsGRDDL
| NsDublinCore
| NsPKG
| NsOpenFormula
| NsXML
| NsOther Text
deriving ( Namespace -> Namespace -> Bool
(Namespace -> Namespace -> Bool)
-> (Namespace -> Namespace -> Bool) -> Eq Namespace
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
$c== :: Namespace -> Namespace -> Bool
== :: Namespace -> Namespace -> Bool
$c/= :: Namespace -> Namespace -> Bool
/= :: Namespace -> Namespace -> Bool
Eq, Eq Namespace
Eq Namespace =>
(Namespace -> Namespace -> Ordering)
-> (Namespace -> Namespace -> Bool)
-> (Namespace -> Namespace -> Bool)
-> (Namespace -> Namespace -> Bool)
-> (Namespace -> Namespace -> Bool)
-> (Namespace -> Namespace -> Namespace)
-> (Namespace -> Namespace -> Namespace)
-> Ord Namespace
Namespace -> Namespace -> Bool
Namespace -> Namespace -> Ordering
Namespace -> Namespace -> Namespace
forall a.
Eq a =>
(a -> a -> Ordering)
-> (a -> a -> Bool)
-> (a -> a -> Bool)
-> (a -> a -> Bool)
-> (a -> a -> Bool)
-> (a -> a -> a)
-> (a -> a -> a)
-> Ord a
$ccompare :: Namespace -> Namespace -> Ordering
compare :: Namespace -> Namespace -> Ordering
$c< :: Namespace -> Namespace -> Bool
< :: Namespace -> Namespace -> Bool
$c<= :: Namespace -> Namespace -> Bool
<= :: Namespace -> Namespace -> Bool
$c> :: Namespace -> Namespace -> Bool
> :: Namespace -> Namespace -> Bool
$c>= :: Namespace -> Namespace -> Bool
>= :: Namespace -> Namespace -> Bool
$cmax :: Namespace -> Namespace -> Namespace
max :: Namespace -> Namespace -> Namespace
$cmin :: Namespace -> Namespace -> Namespace
min :: Namespace -> Namespace -> Namespace
Ord, Int -> Namespace -> ShowS
[Namespace] -> ShowS
Namespace -> String
(Int -> Namespace -> ShowS)
-> (Namespace -> String)
-> ([Namespace] -> ShowS)
-> Show Namespace
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
$cshowsPrec :: Int -> Namespace -> ShowS
showsPrec :: Int -> Namespace -> ShowS
$cshow :: Namespace -> String
show :: Namespace -> String
$cshowList :: [Namespace] -> ShowS
showList :: [Namespace] -> ShowS
Show )
nsIDs :: [(Text, Namespace)]
nsIDs :: [(Text, Namespace)]
nsIDs = [
(Text
"urn:oasis:names:tc:opendocument:xmlns:animation" , Namespace
NsAnim ),
(Text
"urn:oasis:names:tc:opendocument:xmlns:chart" , Namespace
NsChart ),
(Text
"urn:oasis:names:tc:opendocument:xmlns:config" , Namespace
NsConfig ),
(Text
"urn:oasis:names:tc:opendocument:xmlns:database" , Namespace
NsDB ),
(Text
"urn:oasis:names:tc:opendocument:xmlns:dr3d" , Namespace
Ns3D ),
(Text
"urn:oasis:names:tc:opendocument:xmlns:drawing" , Namespace
NsDraw ),
(Text
"urn:oasis:names:tc:opendocument:xmlns:form" , Namespace
NsForm ),
(Text
"urn:oasis:names:tc:opendocument:xmlns:manifest" , Namespace
NsManifest ),
(Text
"urn:oasis:names:tc:opendocument:xmlns:meta" , Namespace
NsMeta ),
(Text
"urn:oasis:names:tc:opendocument:xmlns:datastyle" , Namespace
NsNumber ),
(Text
"urn:oasis:names:tc:opendocument:xmlns:of" , Namespace
NsOpenFormula ),
(Text
"urn:oasis:names:tc:opendocument:xmlns:office:1.0" , Namespace
NsOffice ),
(Text
"urn:oasis:names:tc:opendocument:xmlns:presentation" , Namespace
NsPresentation ),
(Text
"urn:oasis:names:tc:opendocument:xmlns:script" , Namespace
NsScript ),
(Text
"urn:oasis:names:tc:opendocument:xmlns:style" , Namespace
NsStyle ),
(Text
"urn:oasis:names:tc:opendocument:xmlns:table" , Namespace
NsTable ),
(Text
"urn:oasis:names:tc:opendocument:xmlns:text" , Namespace
NsText ),
(Text
"urn:oasis:names:tc:opendocument:xmlns:xsl-fo-compatible", Namespace
NsXSL_FO ),
(Text
"urn:oasis:names:tc:opendocument:xmlns:smil-compatible" , Namespace
NsSmil ),
(Text
"urn:oasis:names:tc:opendocument:xmlns:svg-compatible" , Namespace
NsSVG ),
(Text
"http://docs.oasis-open.org/ns/office/1.2/meta/odf" , Namespace
NsODF ),
(Text
"http://docs.oasis-open.org/ns/office/1.2/meta/pkg" , Namespace
NsPKG ),
(Text
"http://purl.org/dc/elements" , Namespace
NsDublinCore ),
(Text
"http://www.w3.org/2003/g/data-view" , Namespace
NsGRDDL ),
(Text
"http://www.w3.org/1998/Math/MathML" , Namespace
NsMathML ),
(Text
"http://www.w3.org/1999/xhtml" , Namespace
NsXHtml ),
(Text
"http://www.w3.org/2002/xforms" , Namespace
NsXForms ),
(Text
"http://www.w3.org/1999/xlink" , Namespace
NsXLink )
]