<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><link rel="stylesheet" type="text/css" href="style.css" /><script type="text/javascript" src="highlight.js"></script></head><body><pre><span class="hs-pragma">{-# LANGUAGE ScopedTypeVariables #-}</span><span> </span><a name="line-2"></a><span> </span><a name="line-3"></a><span class="hs-keyword">module</span><span> </span><span class="hs-identifier">Text</span><span class="hs-operator">.</span><span class="hs-identifier">Pandoc</span><span class="hs-operator">.</span><span class="hs-identifier">Util</span><span class="hs-operator">.</span><span class="hs-identifier">Filter</span><span class="hs-operator">.</span><span class="hs-identifier">Quiz</span><span> </span><a name="line-4"></a><span> </span><span class="hs-special">(</span><a href="Text.Pandoc.Util.Filter.Quiz.html#quiz"><span class="hs-identifier hs-var">quiz</span></a><span class="hs-special">)</span><span> </span><a name="line-5"></a><span> </span><span class="hs-keyword">where</span><span> </span><a name="line-6"></a><span> </span><a name="line-7"></a><span class="hs-keyword">import</span><span> </span><span class="hs-identifier">Text</span><span class="hs-operator">.</span><span class="hs-identifier">Pandoc</span><span class="hs-operator">.</span><span class="hs-identifier">JSON</span><span> </span><a name="line-8"></a><span class="hs-keyword">import</span><span> </span><span class="hs-identifier">Text</span><span class="hs-operator">.</span><span class="hs-identifier">Pandoc</span><span class="hs-operator">.</span><span class="hs-identifier">Walk</span><span> </span><a name="line-9"></a><span class="hs-keyword">import</span><span> </span><span class="hs-identifier">Data</span><span class="hs-operator">.</span><span class="hs-identifier">Monoid</span><span> </span><span class="hs-special">(</span><span class="hs-special">(</span><span class="hs-operator hs-var"><></span><span class="hs-special">)</span><span class="hs-special">)</span><span> </span><a name="line-10"></a><span class="hs-keyword">import</span><span> </span><span class="hs-identifier">Data</span><span class="hs-operator">.</span><span class="hs-identifier">Maybe</span><span> </span><span class="hs-special">(</span><span class="hs-identifier hs-var">isNothing</span><span class="hs-special">,</span><span> </span><span class="hs-identifier hs-var">mapMaybe</span><span class="hs-special">,</span><span> </span><span class="hs-identifier hs-var">listToMaybe</span><span class="hs-special">)</span><span> </span><a name="line-11"></a><span> </span><a name="line-12"></a><span class="hs-comment">-- Move bottom-Up through the structure, find quiz-answers and remove the</span><span> </span><a name="line-13"></a><span class="hs-comment">-- incorrect formattet ones from the Block they came from.</span><span> </span><a name="line-14"></a><span class="hs-identifier">quiz</span><span> </span><span class="hs-glyph">::</span><span> </span><span class="hs-identifier hs-type">Block</span><span> </span><span class="hs-glyph">-></span><span> </span><span class="hs-special">[</span><span class="hs-identifier hs-type">Block</span><span class="hs-special">]</span><span> </span><a name="line-15"></a><a name="quiz"><a href="Text.Pandoc.Util.Filter.Quiz.html#quiz"><span class="hs-identifier">quiz</span></a></a><span> </span><a name="local-6989586621679022599"><a href="#local-6989586621679022599"><span class="hs-identifier">pb</span></a></a><span class="hs-glyph">@</span><span class="hs-special">(</span><span class="hs-identifier hs-var">Plain</span><span> </span><a name="local-6989586621679022600"><a href="#local-6989586621679022600"><span class="hs-identifier">b</span></a></a><span class="hs-special">)</span><span> </span><span class="hs-glyph">=</span><span> </span><span class="hs-identifier hs-var">fmap</span><span> </span><a href="Text.Pandoc.Util.Filter.Quiz.html#makeQuiz"><span class="hs-identifier hs-var">makeQuiz</span></a><span> </span><span class="hs-special">(</span><span class="hs-identifier hs-var">query</span><span> </span><a href="Text.Pandoc.Util.Filter.Quiz.html#findQuiz"><span class="hs-identifier hs-var">findQuiz</span></a><span> </span><a href="#local-6989586621679022599"><span class="hs-identifier hs-var">pb</span></a><span class="hs-special">)</span><span> </span><span class="hs-operator hs-var"><></span><span> </span><span class="hs-special">[</span><span class="hs-identifier hs-var">Plain</span><span> </span><span class="hs-special">(</span><span class="hs-identifier hs-var">filter</span><span> </span><span class="hs-special">(</span><span class="hs-special">(</span><span class="hs-operator hs-var">==</span><span class="hs-special">)</span><span> </span><span class="hs-special">[</span><span class="hs-special">]</span><span> </span><span class="hs-operator hs-var">.</span><span> </span><a href="Text.Pandoc.Util.Filter.Quiz.html#findQuiz"><span class="hs-identifier hs-var">findQuiz</span></a><span class="hs-special">)</span><span> </span><a href="#local-6989586621679022600"><span class="hs-identifier hs-var">b</span></a><span class="hs-special">)</span><span class="hs-special">]</span><span> </span><a name="line-16"></a><span class="hs-identifier">quiz</span><span> </span><a name="local-6989586621679026370"><a href="#local-6989586621679026370"><span class="hs-identifier">pb</span></a></a><span class="hs-glyph">@</span><span class="hs-special">(</span><span class="hs-identifier hs-var">Para</span><span> </span><a name="local-6989586621679026371"><a href="#local-6989586621679026371"><span class="hs-identifier">b</span></a></a><span class="hs-special">)</span><span> </span><span class="hs-glyph">=</span><span> </span><span class="hs-identifier hs-var">fmap</span><span> </span><a href="Text.Pandoc.Util.Filter.Quiz.html#makeQuiz"><span class="hs-identifier hs-var">makeQuiz</span></a><span> </span><span class="hs-special">(</span><span class="hs-identifier hs-var">query</span><span> </span><a href="Text.Pandoc.Util.Filter.Quiz.html#findQuiz"><span class="hs-identifier hs-var">findQuiz</span></a><span> </span><a href="#local-6989586621679026370"><span class="hs-identifier hs-var">pb</span></a><span class="hs-special">)</span><span> </span><span class="hs-operator hs-var"><></span><span> </span><span class="hs-special">[</span><span class="hs-identifier hs-var">Plain</span><span> </span><span class="hs-special">(</span><span class="hs-identifier hs-var">filter</span><span> </span><span class="hs-special">(</span><span class="hs-special">(</span><span class="hs-operator hs-var">==</span><span class="hs-special">)</span><span> </span><span class="hs-special">[</span><span class="hs-special">]</span><span> </span><span class="hs-operator hs-var">.</span><span> </span><a href="Text.Pandoc.Util.Filter.Quiz.html#findQuiz"><span class="hs-identifier hs-var">findQuiz</span></a><span class="hs-special">)</span><span> </span><a href="#local-6989586621679026371"><span class="hs-identifier hs-var">b</span></a><span class="hs-special">)</span><span class="hs-special">]</span><span> </span><a name="line-17"></a><span class="hs-identifier">quiz</span><span> </span><a name="local-6989586621679026372"><a href="#local-6989586621679026372"><span class="hs-identifier">x</span></a></a><span> </span><span class="hs-glyph">=</span><span> </span><span class="hs-special">[</span><a href="#local-6989586621679026372"><span class="hs-identifier hs-var">x</span></a><span class="hs-special">]</span><span> </span><a name="line-18"></a><span> </span><a name="line-19"></a><span class="hs-comment">-- If we have []{.answer} then we have a quiz-answer</span><span> </span><a name="line-20"></a><span class="hs-comment">-- maybe with a tooltip</span><span> </span><a name="line-21"></a><span class="hs-identifier">findQuiz</span><span> </span><span class="hs-glyph">::</span><span> </span><span class="hs-identifier hs-type">Inline</span><span> </span><span class="hs-glyph">-></span><span> </span><span class="hs-special">[</span><span class="hs-special">(</span><span class="hs-identifier hs-type">Attr</span><span class="hs-special">,</span><span> </span><span class="hs-special">[</span><span class="hs-identifier hs-type">Inline</span><span class="hs-special">]</span><span class="hs-special">,</span><span> </span><span class="hs-identifier hs-type">Maybe</span><span> </span><span class="hs-special">(</span><span class="hs-special">[</span><span class="hs-identifier hs-type">Inline</span><span class="hs-special">]</span><span class="hs-special">,</span><span class="hs-identifier hs-type">Attr</span><span class="hs-special">)</span><span class="hs-special">)</span><span class="hs-special">]</span><span> </span><a name="line-22"></a><a name="findQuiz"><a href="Text.Pandoc.Util.Filter.Quiz.html#findQuiz"><span class="hs-identifier">findQuiz</span></a></a><span> </span><span class="hs-special">(</span><span class="hs-identifier hs-var">Span</span><span> </span><a name="local-6989586621679026373"><a href="#local-6989586621679026373"><span class="hs-identifier">attributes</span></a></a><span class="hs-glyph">@</span><span class="hs-special">(</span><span class="hs-identifier">_</span><span class="hs-special">,</span><span> </span><a name="local-6989586621679026374"><a href="#local-6989586621679026374"><span class="hs-identifier">att</span></a></a><span class="hs-special">,</span><span> </span><span class="hs-identifier">_</span><span class="hs-special">)</span><span> </span><a name="local-6989586621679026375"><a href="#local-6989586621679026375"><span class="hs-identifier">answerText</span></a></a><span class="hs-special">)</span><span> </span><a name="line-23"></a><span> </span><span class="hs-glyph">|</span><span> </span><span class="hs-string">"answer"</span><span> </span><span class="hs-special">`</span><span class="hs-identifier hs-var">elem</span><span class="hs-special">`</span><span> </span><a href="#local-6989586621679026374"><span class="hs-identifier hs-var">att</span></a><span> </span><span class="hs-glyph">=</span><span> </span><span class="hs-special">[</span><span class="hs-special">(</span><a href="#local-6989586621679026373"><span class="hs-identifier hs-var">attributes</span></a><span class="hs-special">,</span><span> </span><a href="#local-6989586621679026376"><span class="hs-identifier hs-var">answerText'</span></a><span class="hs-special">,</span><span> </span><a href="#local-6989586621679026377"><span class="hs-identifier hs-var">tooltip</span></a><span class="hs-special">)</span><span class="hs-special">]</span><span> </span><a name="line-24"></a><span> </span><span class="hs-keyword">where</span><span> </span><a name="line-25"></a><span> </span><a name="local-6989586621679026376"><a href="#local-6989586621679026376"><span class="hs-identifier">answerText'</span></a></a><span> </span><span class="hs-glyph">=</span><span> </span><span class="hs-identifier hs-var">filter</span><span> </span><span class="hs-special">(</span><span class="hs-identifier hs-var">isNothing</span><span> </span><span class="hs-operator hs-var">.</span><span> </span><a href="Text.Pandoc.Util.Filter.Quiz.html#findTooltip"><span class="hs-identifier hs-var">findTooltip</span></a><span class="hs-special">)</span><span> </span><a href="#local-6989586621679026375"><span class="hs-identifier hs-var">answerText</span></a><span> </span><span class="hs-comment">--filter everything that is a tooltip</span><span> </span><a name="line-26"></a><span> </span><a name="local-6989586621679026377"><a href="#local-6989586621679026377"><span class="hs-identifier">tooltip</span></a></a><span> </span><span class="hs-glyph">=</span><span> </span><span class="hs-identifier hs-var">listToMaybe</span><span> </span><span class="hs-operator hs-var">$</span><span> </span><span class="hs-identifier hs-var">mapMaybe</span><span> </span><a href="Text.Pandoc.Util.Filter.Quiz.html#findTooltip"><span class="hs-identifier hs-var">findTooltip</span></a><span> </span><a href="#local-6989586621679026375"><span class="hs-identifier hs-var">answerText</span></a><span> </span><span class="hs-comment">--get the first span that is labled tooltip</span><span> </span><a name="line-27"></a><span class="hs-identifier">findQuiz</span><span> </span><span class="hs-identifier">_</span><span> </span><span class="hs-glyph">=</span><span> </span><span class="hs-special">[</span><span class="hs-special">]</span><span> </span><a name="line-28"></a><span> </span><a name="line-29"></a><span class="hs-comment">-- If we have []{.tooltip} we have a tooltip ;)</span><span> </span><a name="line-30"></a><span class="hs-comment">-- we save the text and the attributes in a tuple</span><span> </span><a name="line-31"></a><span class="hs-identifier">findTooltip</span><span> </span><span class="hs-glyph">::</span><span> </span><span class="hs-identifier hs-type">Inline</span><span> </span><span class="hs-glyph">-></span><span> </span><span class="hs-identifier hs-type">Maybe</span><span> </span><span class="hs-special">(</span><span class="hs-special">[</span><span class="hs-identifier hs-type">Inline</span><span class="hs-special">]</span><span class="hs-special">,</span><span class="hs-identifier hs-type">Attr</span><span class="hs-special">)</span><span> </span><a name="line-32"></a><a name="findTooltip"><a href="Text.Pandoc.Util.Filter.Quiz.html#findTooltip"><span class="hs-identifier">findTooltip</span></a></a><span> </span><span class="hs-special">(</span><span class="hs-identifier hs-var">Span</span><span> </span><a name="local-6989586621679027487"><a href="#local-6989586621679027487"><span class="hs-identifier">attr</span></a></a><span class="hs-glyph">@</span><span class="hs-special">(</span><span class="hs-identifier">_</span><span class="hs-special">,</span><a name="local-6989586621679027488"><a href="#local-6989586621679027488"><span class="hs-identifier">att</span></a></a><span class="hs-special">,</span><span class="hs-identifier">_</span><span class="hs-special">)</span><span> </span><a name="local-6989586621679027489"><a href="#local-6989586621679027489"><span class="hs-identifier">tooltipText</span></a></a><span class="hs-special">)</span><span> </span><a name="line-33"></a><span> </span><span class="hs-glyph">|</span><span> </span><span class="hs-string">"tooltip"</span><span> </span><span class="hs-special">`</span><span class="hs-identifier hs-var">elem</span><span class="hs-special">`</span><span> </span><a href="#local-6989586621679027488"><span class="hs-identifier hs-var">att</span></a><span> </span><span class="hs-glyph">=</span><span> </span><span class="hs-identifier hs-var">Just</span><span> </span><span class="hs-special">(</span><a href="#local-6989586621679027489"><span class="hs-identifier hs-var">tooltipText</span></a><span class="hs-special">,</span><span> </span><a href="#local-6989586621679027487"><span class="hs-identifier hs-var">attr</span></a><span class="hs-special">)</span><span> </span><a name="line-34"></a><span class="hs-identifier">findTooltip</span><span> </span><span class="hs-identifier">_</span><span> </span><span class="hs-glyph">=</span><span> </span><span class="hs-identifier hs-var">Nothing</span><span> </span><a name="line-35"></a><span> </span><a name="line-36"></a><span class="hs-comment">-- Generate Divs for the quiz</span><span> </span><a name="line-37"></a><span class="hs-identifier">makeQuiz</span><span> </span><span class="hs-glyph">::</span><span> </span><span class="hs-special">(</span><span class="hs-identifier hs-type">Attr</span><span class="hs-special">,</span><span> </span><span class="hs-special">[</span><span class="hs-identifier hs-type">Inline</span><span class="hs-special">]</span><span class="hs-special">,</span><span> </span><span class="hs-identifier hs-type">Maybe</span><span> </span><span class="hs-special">(</span><span class="hs-special">[</span><span class="hs-identifier hs-type">Inline</span><span class="hs-special">]</span><span class="hs-special">,</span><span class="hs-identifier hs-type">Attr</span><span class="hs-special">)</span><span class="hs-special">)</span><span> </span><span class="hs-glyph">-></span><span> </span><span class="hs-identifier hs-type">Block</span><span> </span><a name="line-38"></a><a name="makeQuiz"><a href="Text.Pandoc.Util.Filter.Quiz.html#makeQuiz"><span class="hs-identifier">makeQuiz</span></a></a><span> </span><span class="hs-special">(</span><a name="local-6989586621679027490"><a href="#local-6989586621679027490"><span class="hs-identifier">att</span></a></a><span class="hs-special">,</span><span> </span><a name="local-6989586621679027491"><a href="#local-6989586621679027491"><span class="hs-identifier">answer</span></a></a><span class="hs-special">,</span><span> </span><span class="hs-identifier hs-var">Nothing</span><span class="hs-special">)</span><span> </span><span class="hs-glyph">=</span><span> </span><span class="hs-identifier hs-var">Div</span><span> </span><a href="#local-6989586621679027490"><span class="hs-identifier hs-var">att</span></a><span> </span><span class="hs-special">[</span><span class="hs-identifier hs-var">Plain</span><span> </span><a href="#local-6989586621679027491"><span class="hs-identifier hs-var">answer</span></a><span class="hs-special">]</span><span> </span><a name="line-39"></a><span class="hs-identifier">makeQuiz</span><span> </span><span class="hs-special">(</span><a name="local-6989586621679027492"><a href="#local-6989586621679027492"><span class="hs-identifier">att</span></a></a><span class="hs-special">,</span><span> </span><a name="local-6989586621679027493"><a href="#local-6989586621679027493"><span class="hs-identifier">answer</span></a></a><span class="hs-special">,</span><span> </span><span class="hs-identifier hs-var">Just</span><span> </span><span class="hs-special">(</span><a name="local-6989586621679027494"><a href="#local-6989586621679027494"><span class="hs-identifier">tooltip</span></a></a><span class="hs-special">,</span><a name="local-6989586621679027495"><a href="#local-6989586621679027495"><span class="hs-identifier">a</span></a></a><span class="hs-special">)</span><span class="hs-special">)</span><span> </span><span class="hs-glyph">=</span><span> </span><span class="hs-identifier hs-var">Div</span><span> </span><a href="#local-6989586621679027492"><span class="hs-identifier hs-var">att</span></a><span> </span><span class="hs-special">[</span><span class="hs-identifier hs-var">Plain</span><span> </span><a href="#local-6989586621679027493"><span class="hs-identifier hs-var">answer</span></a><span class="hs-special">,</span><span> </span><span class="hs-identifier hs-var">Div</span><span> </span><a href="#local-6989586621679027495"><span class="hs-identifier hs-var">a</span></a><span> </span><span class="hs-special">[</span><span class="hs-identifier hs-var">Plain</span><span> </span><a href="#local-6989586621679027494"><span class="hs-identifier hs-var">tooltip</span></a><span class="hs-special">]</span><span class="hs-special">]</span><span> </span><a name="line-40"></a></pre></body></html>