git.iko.soy/typeable/pandoc
on master help sign in
Simplified HTML attribute parsing (HTML reader).
d5b7257fiddlosopher
src/Text/Pandoc/Readers/HTML.hs+5−10
@@ -105,13 +105,14 @@ anyHtmlTag = try $ do
105 char '<'
105 char '<'
106 spaces
106 spaces
107 tag <- many1 alphaNum
107 tag <- many1 alphaNum
108− attribs <- htmlAttributes
108+ attribs <- many htmlAttribute
109 spaces
109 spaces
110 ender <- option "" (string "/")
110 ender <- option "" (string "/")
111 let ender' = if null ender then "" else " /"
111 let ender' = if null ender then "" else " /"
112 spaces
112 spaces
113 char '>'
113 char '>'
114− return $ "<" ++ tag ++ attribs ++ ender' ++ ">"
114+ return $ "<" ++ tag ++
115+ concatMap (\(_, _, raw) -> (' ':raw)) attribs ++ ender' ++ ">"
115
116
116anyHtmlEndTag = try $ do
117anyHtmlEndTag = try $ do
117 char '<'
118 char '<'
@@ -141,19 +142,13 @@ quoted quoteChar = do
141 (many (noneOf [quoteChar]))
142 (many (noneOf [quoteChar]))
142 return (result, [quoteChar])
143 return (result, [quoteChar])
143
144
144−htmlAttributes = do
145− attrList <- many htmlAttribute
146− return $ concatMap (\(name, content, raw) -> raw) attrList
147−
148htmlAttribute = htmlRegularAttribute <|> htmlMinimizedAttribute
145htmlAttribute = htmlRegularAttribute <|> htmlMinimizedAttribute
149
146
150-- minimized boolean attribute
147-- minimized boolean attribute
151htmlMinimizedAttribute = try $ do
148htmlMinimizedAttribute = try $ do
152 many1 space
149 many1 space
153 name <- many1 (choice [letter, oneOf ".-_:"])
150 name <- many1 (choice [letter, oneOf ".-_:"])
154− notFollowedBy (spaces >> char '=')
155− let content = name
156− return (name, content, (" " ++ name))
151+ return (name, name, name)
157
152
158htmlRegularAttribute = try $ do
153htmlRegularAttribute = try $ do
159 many1 space
154 many1 space
@@ -167,7 +162,7 @@ htmlRegularAttribute = try $ do
167 a <- many (alphaNum <|> (oneOf "-._:"))
162 a <- many (alphaNum <|> (oneOf "-._:"))
168 return (a,"")) ]
163 return (a,"")) ]
169 return (name, content,
164 return (name, content,
170− (" " ++ name ++ "=" ++ quoteStr ++ content ++ quoteStr))
165+ (name ++ "=" ++ quoteStr ++ content ++ quoteStr))
171
166
172-- | Parse an end tag of type 'tag'
167-- | Parse an end tag of type 'tag'
173htmlEndTag tag = try $ do
168htmlEndTag tag = try $ do