Extension:Poem/de-formal

The Poem extension allows easy formatting of poems and similar material within. Once the extension is enabled, you can put any block of text within  tags, which has the following effects:


 * All newlines are preserved by converting them into tags
 * The block of text is enclosed in tags (as well as a div of class "poem")
 * Colons at the beginning of a line are converted into 1 em indentation
 * Spaces at the beginning of a line are preserved and no longer invoke the tag

The extension preserves wikilinks, bolding, etc. if they are present in the poem.

Style
The poem text is wrapped in a div, which has no style by default; but inherits any style or class option passed to the poem.

For example, while indented text can be used for simple examples to prevent filling and draw a nice blue box, it can be hard to read in some cases, since long lines aren't broken. A similar, but somewhat better effect can be obtained with:

When applied to the above example, the result is as follows:

 In Xanadu did Kubla Khan A stately pleasure-dome decree: Where Alph, the sacred river, ran Through caverns measureless to man Down to a sunless sea.

So twice five miles of fertile ground With walls and towers were girdled round: And there were gardens bright with sinuous rills, Where blossomed many an incense-bearing tree; And here were forests ancient as the hills, Enfolding sunny spots of greenery.

"compact" option
Applying the tag with the compact option to a text of more than two lines, every line becomes a separate paragraph. (That is to say, it allows for more compact markup, not for a more compact output.)

Subsequent use of the tag with the compact option, with up to two newlines in between, gives just a single newline between texts, not a new paragraph.

Thus, applied to texts of more than two lines each, every line becomes a separate paragraph, except that the last line of each text and the first line of the next text are combined into one paragraph.

Problems and solutions

 * Variables and ParserFunctions do work inside the  container, but NOT within the  tag itself; this prevents templates with code such as.
 * One workaround is to use  instead.
 * Another way is to use the  magic word:.
 * NB: this would however seem not to work with the "compact" option.