Maintainer | simons@cryp.to |
---|---|
Stability | experimental |
Portability | portable |
Safe Haskell | Safe-Inferred |
Language | Haskell98 |
The preferred method for rendering a Document
or single Content
is by using the pretty printing facility defined in Pretty.
Pretty-printing does not work well for cases, however, where the
formatting in the XML document is significant. Examples of this
case are XHTML's <pre>
tag, Docbook's <literallayout>
tag,
and many more.
Theoretically, the document author could avoid this problem by
wrapping the contents of these tags in a <![CDATA[...]]> section,
but often this is not practical, for instance when the
literal-layout section contains other elements. Finally, program
writers could manually format these elements by transforming them
into a literal
string in their CFliter
, etc., but this is
annoying to do and prone to omissions and formatting errors.
As an alternative, this module provides the function verbatim
,
which will format XML Content
as a String
while retaining the
formatting of the input document unchanged.
Known problems:
- HaXml's parser eats line feeds between two tags.
Attribute
s should be formatted by making them an instance ofVerbatim
as well, but since anAttribute
is just a tuple, not a full data type, the helper functionverbAttr
must be used instead.CMisc
is not yet supported.Element
s, which contain no content, are formatted as<element-name/>
, even if they were not defined as being of typeEMPTY
. In XML this perfectly alright, but in SGML it is not. Those, who wish to useverbatim
to format parts of say an HTML page will have to (a) replace problematic elements byliteral
s before runningverbatim
or (b) use a second search-and-replace stage to fix this.
Documentation
This class promises that the function verbatim
knows how to
format this data type into a string without changing the
formatting.
verbAttr :: Attribute -> String Source
This is a helper function is required because Haskell does not
allow to make an ordinary tuple (like Attribute
) an instance of a
class. The resulting output will preface the actual attribute with
a single blank so that lists of Attribute
s can be handled
implicitly by the definition for lists of Verbatim
data types.