<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Recent changes to Implementation</title><link>https://sourceforge.net/p/markup-referent/wiki/Implementation/</link><description>Recent changes to Implementation</description><atom:link href="https://sourceforge.net/p/markup-referent/wiki/Implementation/feed" rel="self"/><language>en</language><lastBuildDate>Thu, 16 May 2013 18:50:55 -0000</lastBuildDate><atom:link href="https://sourceforge.net/p/markup-referent/wiki/Implementation/feed" rel="self" type="application/rss+xml"/><item><title>Implementation modified by OmniMark Code</title><link>https://sourceforge.net/p/markup-referent/wiki/Implementation/</link><description>&lt;div class="markdown_content"&gt;&lt;pre&gt;--- v6
+++ v7
@@ -3,7 +3,7 @@

 The interface appears to work, now let's see if we can implement it.  

-The first thing to note is that unresolved referents are by definition something out of band. This means that  our referent buffer has to keep track of them separately from the fixed data, and also that that we cannot use the  same mechanism for emitting an unresolved referent that we use for emitting regular data.  
+The first thing to note is that unresolved referents are by definition something out of band. This means that  our referent buffer has to keep track of them separately from the fixed data, and also that we cannot use the same mechanism for emitting an unresolved referent that we use for emitting regular data.  

 The standard solution for emitting out-of-band information are signals. We'll declare a `catch`  with a referent argument. Then we can use `signal throw` to emit a referent. The reason for having  the parent type `markup-future` for `markup-referent-buffer` will be explained later.  

&lt;/pre&gt;
&lt;/div&gt;</description><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">OmniMark Code</dc:creator><pubDate>Thu, 16 May 2013 18:50:55 -0000</pubDate><guid>https://sourceforge.net8fb2b4977b05c9dc7ce91ec463bbb1dc544b29d6</guid></item><item><title>WikiPage Implementation modified by OmniMark Code</title><link>https://sourceforge.net/p/markup-referent/wiki/Implementation/</link><description>&lt;pre&gt;--- v5 
+++ v6 
@@ -27,99 +27,98 @@
 &lt;span class="kr"&gt;as&lt;/span&gt;
    &lt;span class="kr"&gt;using&lt;/span&gt; &lt;span class="kr"&gt;new&lt;/span&gt;&lt;span class="o"&gt;?&lt;/span&gt; &lt;span class="kr"&gt;referents&lt;/span&gt;&lt;span class="o"&gt;{&lt;/span&gt;&lt;span class="kr"&gt;name&lt;/span&gt;&lt;span class="o"&gt;}&lt;/span&gt; &lt;span class="kr"&gt;as&lt;/span&gt; ref
    &lt;span class="kr"&gt;do&lt;/span&gt;
-      &lt;span class="kr"&gt;set&lt;/span&gt; ref:&lt;span class="kr"&gt;name&lt;/span&gt; &lt;span class="kr"&gt;to&lt;/span&gt; &lt;span class="kr"&gt;name&lt;/span&gt;
+      &lt;span class="kr"&gt;set&lt;/span&gt; ref&lt;span class="o"&gt;:&lt;/span&gt;name &lt;span class="kr"&gt;to&lt;/span&gt; &lt;span class="kr"&gt;name&lt;/span&gt;
       &lt;span class="kr"&gt;return&lt;/span&gt; ref
    &lt;span class="kr"&gt;done&lt;/span&gt;
 &amp;nbsp;
 &amp;nbsp;
 &lt;span class="kr"&gt;export&lt;/span&gt; &lt;span class="kr"&gt;catch&lt;/span&gt; markup-referent &lt;span class="kr"&gt;value&lt;/span&gt; markup-future ref
 &amp;nbsp;
 &lt;span class="kr"&gt;export&lt;/span&gt; &lt;span class="kr"&gt;markup&lt;/span&gt; &lt;span class="kr"&gt;source&lt;/span&gt; &lt;span class="kr"&gt;conversion-function&lt;/span&gt;
    &lt;span class="kr"&gt;value&lt;/span&gt; markup-referent-buffer b
 &lt;span class="kr"&gt;as&lt;/span&gt;
    &lt;span class="kr"&gt;signal&lt;/span&gt; &lt;span class="kr"&gt;throw&lt;/span&gt; markup-referent b
     
 &lt;/pre&gt;&lt;/div&gt;
 
 The next piece of functionality to tackle is the ability to set the referent value. The following function  accomplishes the task. Note that it automatically accepts and stores referents and not only plain data. There is  no need for any equivalent of the `with referents-allowed` modifier when setting a referent value.  
 
 &lt;div class="codehilite"&gt;&lt;pre&gt;
 &lt;span class="kr"&gt;export&lt;/span&gt; &lt;span class="kr"&gt;markup&lt;/span&gt; &lt;span class="kr"&gt;sink&lt;/span&gt; &lt;span class="kr"&gt;conversion-function&lt;/span&gt;
    &lt;span class="kr"&gt;value&lt;/span&gt; markup-referent-buffer b
 &lt;span class="kr"&gt;as&lt;/span&gt;
    &lt;span class="kr"&gt;repeat&lt;/span&gt;
       &lt;span class="kr"&gt;local&lt;/span&gt; data-fragment frag
 &amp;nbsp;
-      &lt;span class="kr"&gt;set&lt;/span&gt; &lt;span class="kr"&gt;new&lt;/span&gt; b:contents &lt;span class="kr"&gt;to&lt;/span&gt; frag
-      &lt;span class="kr"&gt;using&lt;/span&gt; &lt;span class="kr"&gt;output&lt;/span&gt; &lt;span class="kr"&gt;as&lt;/span&gt; frag:data
+      &lt;span class="kr"&gt;set&lt;/span&gt; &lt;span class="kr"&gt;new&lt;/span&gt; b&lt;span class="o"&gt;:&lt;/span&gt;contents &lt;span class="kr"&gt;to&lt;/span&gt; frag
+      &lt;span class="kr"&gt;using&lt;/span&gt; &lt;span class="kr"&gt;output&lt;/span&gt; &lt;span class="kr"&gt;as&lt;/span&gt; frag&lt;span class="o"&gt;:&lt;/span&gt;data
          &lt;span class="kr"&gt;output&lt;/span&gt; &lt;span class="nb"&gt;#current-input&lt;/span&gt;
       &lt;span class="kr"&gt;exit&lt;/span&gt;
 &amp;nbsp;
     &lt;span class="kr"&gt;catch&lt;/span&gt; markup-referent ref
-      &lt;span class="kr"&gt;set&lt;/span&gt; &lt;span class="kr"&gt;new&lt;/span&gt; b:contents &lt;span class="kr"&gt;to&lt;/span&gt; ref
+      &lt;span class="kr"&gt;set&lt;/span&gt; &lt;span class="kr"&gt;new&lt;/span&gt; b&lt;span class="o"&gt;:&lt;/span&gt;contents &lt;span class="kr"&gt;to&lt;/span&gt; ref
    &lt;span class="kr"&gt;again&lt;/span&gt;
     
 &lt;/pre&gt;&lt;/div&gt;
 
 The `resolve-referents` function starts by reproducing its input until it encounters the first `markup-referent`  signal. After that, it has to start buffering the signalled referents alongside the regular data until the end of  the input. Since the `markup-referent-buffer` type already knows how to accomplish this task we'll delegate the  bufferring to an anonymous instance of the type &amp;mdash; there's no reason to duplicate the code.  
 
 &lt;div class="codehilite"&gt;&lt;pre&gt;
 &lt;span class="kr"&gt;export&lt;/span&gt; &lt;span class="kr"&gt;markup&lt;/span&gt; &lt;span class="kr"&gt;sink&lt;/span&gt; &lt;span class="kr"&gt;function&lt;/span&gt;
    resolve-referents &lt;span class="kr"&gt;into&lt;/span&gt; &lt;span class="kr"&gt;value&lt;/span&gt; &lt;span class="kr"&gt;markup&lt;/span&gt; &lt;span class="kr"&gt;sink&lt;/span&gt; destination
 &lt;span class="kr"&gt;as&lt;/span&gt;
    &lt;span class="kr"&gt;using&lt;/span&gt; &lt;span class="kr"&gt;output&lt;/span&gt; &lt;span class="kr"&gt;as&lt;/span&gt; destination
    &lt;span class="kr"&gt;repeat&lt;/span&gt;
       &lt;span class="kr"&gt;output&lt;/span&gt; &lt;span class="nb"&gt;#current-input&lt;/span&gt; &lt;span class="kr"&gt;take&lt;/span&gt; &lt;span class="kr"&gt;any&lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;
       &lt;span class="kr"&gt;exit&lt;/span&gt;
 &amp;nbsp;
     &lt;span class="kr"&gt;catch&lt;/span&gt; &lt;span class="nb"&gt;#markup-point&lt;/span&gt; event
       &lt;span class="kr"&gt;signal&lt;/span&gt; &lt;span class="kr"&gt;rethrow&lt;/span&gt;
 &amp;nbsp;
     &lt;span class="kr"&gt;catch&lt;/span&gt; &lt;span class="nb"&gt;#markup-start&lt;/span&gt; event
       &lt;span class="kr"&gt;signal&lt;/span&gt; &lt;span class="kr"&gt;rethrow&lt;/span&gt;
 &amp;nbsp;
     &lt;span class="kr"&gt;catch&lt;/span&gt; &lt;span class="nb"&gt;#markup-end&lt;/span&gt; event
       &lt;span class="kr"&gt;signal&lt;/span&gt; &lt;span class="kr"&gt;rethrow&lt;/span&gt;
 &amp;nbsp;
     &lt;span class="kr"&gt;catch&lt;/span&gt; markup-referent event
       &lt;span class="kr"&gt;do&lt;/span&gt;
          &lt;span class="kr"&gt;local&lt;/span&gt; markup-referent-buffer ref
 &amp;nbsp;
          &lt;span class="kr"&gt;using&lt;/span&gt; &lt;span class="kr"&gt;output&lt;/span&gt; &lt;span class="kr"&gt;as&lt;/span&gt; ref
          &lt;span class="kr"&gt;do&lt;/span&gt;
             &lt;span class="kr"&gt;signal&lt;/span&gt; &lt;span class="kr"&gt;rethrow&lt;/span&gt;
             &lt;span class="kr"&gt;output&lt;/span&gt; &lt;span class="nb"&gt;#current-input&lt;/span&gt;
          &lt;span class="kr"&gt;done&lt;/span&gt;
 &amp;nbsp;
          &lt;span class="kr"&gt;output&lt;/span&gt; resolved ref
       &lt;span class="kr"&gt;done&lt;/span&gt;
    &lt;span class="kr"&gt;again&lt;/span&gt;
     
 &lt;/pre&gt;&lt;/div&gt;
 
 Once the end of input is reached, the dynamic function `resolved` performs the actual work of emitting the  current value of the referent. Since referents can contain other referents, this function must be recursive, but  its implementation is trivial.  
 
 &lt;div class="codehilite"&gt;&lt;pre&gt;
 &lt;span class="kr"&gt;export&lt;/span&gt; &lt;span class="kr"&gt;dynamic&lt;/span&gt; &lt;span class="kr"&gt;markup&lt;/span&gt; &lt;span class="kr"&gt;source&lt;/span&gt; &lt;span class="kr"&gt;function&lt;/span&gt;
    resolved &lt;span class="kr"&gt;value&lt;/span&gt; fragment f
 &lt;span class="kr"&gt;as&lt;/span&gt;
    &lt;span class="kr"&gt;not-reached&lt;/span&gt; &lt;span class="kr"&gt;message&lt;/span&gt; &lt;span class="s"&gt;"Unresolvable referent fragment."&lt;/span&gt;
 &amp;nbsp;
 &amp;nbsp;
 &lt;span class="kr"&gt;define&lt;/span&gt; &lt;span class="kr"&gt;overriding&lt;/span&gt; &lt;span class="kr"&gt;markup&lt;/span&gt; &lt;span class="kr"&gt;source&lt;/span&gt; &lt;span class="kr"&gt;function&lt;/span&gt;
    resolved &lt;span class="kr"&gt;value&lt;/span&gt; data-fragment f
 &lt;span class="kr"&gt;as&lt;/span&gt;
-   &lt;span class="kr"&gt;output&lt;/span&gt; f:data
+   &lt;span class="kr"&gt;output&lt;/span&gt; f&lt;span class="o"&gt;:&lt;/span&gt;data
 &amp;nbsp;
 &amp;nbsp;
 &lt;span class="kr"&gt;export&lt;/span&gt; &lt;span class="kr"&gt;overriding&lt;/span&gt; &lt;span class="kr"&gt;markup&lt;/span&gt; &lt;span class="kr"&gt;source&lt;/span&gt; &lt;span class="kr"&gt;function&lt;/span&gt;
    resolved &lt;span class="kr"&gt;value&lt;/span&gt; markup-referent-buffer b
 &lt;span class="kr"&gt;as&lt;/span&gt;
-   &lt;span class="kr"&gt;assert&lt;/span&gt; &lt;span class="kr"&gt;number&lt;/span&gt; &lt;span class="kr"&gt;of&lt;/span&gt; b:contents &lt;span class="o"&gt;&gt;&lt;/span&gt; 0
-      &lt;span class="kr"&gt;message&lt;/span&gt; &lt;span class="s"&gt;"Referent '"&lt;/span&gt; &lt;span class="o"&gt;||&lt;/span&gt; b:&lt;span class="kr"&gt;name&lt;/span&gt; &lt;span class="o"&gt;||&lt;/span&gt; &lt;span class="s"&gt;"' has no defined value."&lt;/span&gt;
-   &lt;span class="kr"&gt;repeat&lt;/span&gt; &lt;span class="kr"&gt;over&lt;/span&gt; b:contents &lt;span class="kr"&gt;as&lt;/span&gt; fragment
+   &lt;span class="kr"&gt;assert&lt;/span&gt; &lt;span class="kr"&gt;number&lt;/span&gt; &lt;span class="kr"&gt;of&lt;/span&gt; b&lt;span class="o"&gt;:&lt;/span&gt;contents &lt;span class="o"&gt;&gt;&lt;/span&gt; 0
+      &lt;span class="kr"&gt;message&lt;/span&gt; &lt;span class="s"&gt;"Referent '"&lt;/span&gt; &lt;span class="o"&gt;||&lt;/span&gt; b&lt;span class="o"&gt;:&lt;/span&gt;name &lt;span class="o"&gt;||&lt;/span&gt; &lt;span class="s"&gt;"' has no defined value."&lt;/span&gt;
+   &lt;span class="kr"&gt;repeat&lt;/span&gt; &lt;span class="kr"&gt;over&lt;/span&gt; b&lt;span class="o"&gt;:&lt;/span&gt;contents &lt;span class="kr"&gt;as&lt;/span&gt; fragment
       &lt;span class="kr"&gt;output&lt;/span&gt; resolved fragment
    &lt;span class="kr"&gt;again&lt;/span&gt;
     
 &lt;/pre&gt;&lt;/div&gt;
-
&lt;/pre&gt;</description><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">OmniMark Code</dc:creator><pubDate>Mon, 14 May 2012 15:23:18 -0000</pubDate><guid>https://sourceforge.netddf235bd83f6982c520d5a36356e1f0dca001551</guid></item><item><title>WikiPage Implementation modified by OmniMark Code</title><link>https://sourceforge.net/p/markup-referent/wiki/Implementation/</link><description>&lt;pre&gt;--- v4 
+++ v5 
@@ -8,118 +8,118 @@
 The standard solution for emitting out-of-band information are signals. We'll declare a `catch`  with a referent argument. Then we can use `signal throw` to emit a referent. The reason for having  the parent type `markup-future` for `markup-referent-buffer` will be explained later.  
 
 &lt;div class="codehilite"&gt;&lt;pre&gt;
-&lt;span class="keyword"&gt;declare&lt;/span&gt; &lt;span class="keyword"&gt;record&lt;/span&gt; fragment
-&amp;nbsp;
-&lt;span class="keyword"&gt;declare&lt;/span&gt; &lt;span class="keyword"&gt;record&lt;/span&gt; data-fragment &lt;span class="keyword"&gt;extends&lt;/span&gt; fragment
-   &lt;span class="keyword"&gt;field&lt;/span&gt; markup-buffer data
-&amp;nbsp;
-&lt;span class="keyword"&gt;export&lt;/span&gt; &lt;span class="keyword"&gt;record&lt;/span&gt; markup-future &lt;span class="keyword"&gt;extends&lt;/span&gt; fragment
-&amp;nbsp;
-&lt;span class="keyword"&gt;export&lt;/span&gt; &lt;span class="keyword"&gt;record&lt;/span&gt; markup-referent-buffer &lt;span class="keyword"&gt;extends&lt;/span&gt; markup-future
-   &lt;span class="keyword"&gt;field&lt;/span&gt; &lt;span class="keyword"&gt;string&lt;/span&gt;   &lt;span class="keyword"&gt;name&lt;/span&gt;
-   &lt;span class="keyword"&gt;field&lt;/span&gt; fragment contents &lt;span class="keyword"&gt;variable&lt;/span&gt;
-&amp;nbsp;
-&amp;nbsp;
-&lt;span class="keyword"&gt;export&lt;/span&gt; &lt;span class="keyword"&gt;global&lt;/span&gt; markup-referent-buffer &lt;span class="keyword"&gt;referents&lt;/span&gt; &lt;span class="keyword"&gt;variable&lt;/span&gt;
-&amp;nbsp;
-&lt;span class="keyword"&gt;export&lt;/span&gt; markup-referent-buffer &lt;span class="keyword"&gt;function&lt;/span&gt;
-   &lt;span class="keyword"&gt;referent&lt;/span&gt; &lt;span class="keyword"&gt;value&lt;/span&gt; &lt;span class="keyword"&gt;string&lt;/span&gt; &lt;span class="keyword"&gt;name&lt;/span&gt;
-&lt;span class="keyword"&gt;as&lt;/span&gt;
-   &lt;span class="keyword"&gt;using&lt;/span&gt; &lt;span class="keyword"&gt;new&lt;/span&gt;&lt;span class="symbol"&gt;?&lt;/span&gt; &lt;span class="keyword"&gt;referents&lt;/span&gt;&lt;span class="symbol"&gt;{&lt;/span&gt;&lt;span class="keyword"&gt;name&lt;/span&gt;&lt;span class="symbol"&gt;}&lt;/span&gt; &lt;span class="keyword"&gt;as&lt;/span&gt; ref
-   &lt;span class="keyword"&gt;do&lt;/span&gt;
-      &lt;span class="keyword"&gt;set&lt;/span&gt; ref:&lt;span class="keyword"&gt;name&lt;/span&gt; &lt;span class="keyword"&gt;to&lt;/span&gt; &lt;span class="keyword"&gt;name&lt;/span&gt;
-      &lt;span class="keyword"&gt;return&lt;/span&gt; ref
-   &lt;span class="keyword"&gt;done&lt;/span&gt;
-&amp;nbsp;
-&amp;nbsp;
-&lt;span class="keyword"&gt;export&lt;/span&gt; &lt;span class="keyword"&gt;catch&lt;/span&gt; markup-referent &lt;span class="keyword"&gt;value&lt;/span&gt; markup-future ref
-&amp;nbsp;
-&lt;span class="keyword"&gt;export&lt;/span&gt; &lt;span class="keyword"&gt;markup&lt;/span&gt; &lt;span class="keyword"&gt;source&lt;/span&gt; &lt;span class="keyword"&gt;conversion-function&lt;/span&gt;
-   &lt;span class="keyword"&gt;value&lt;/span&gt; markup-referent-buffer b
-&lt;span class="keyword"&gt;as&lt;/span&gt;
-   &lt;span class="keyword"&gt;signal&lt;/span&gt; &lt;span class="keyword"&gt;throw&lt;/span&gt; markup-referent b
-    
-&amp;nbsp;&lt;/pre&gt;&lt;/div&gt;
-
+&lt;span class="kr"&gt;declare&lt;/span&gt; &lt;span class="kr"&gt;record&lt;/span&gt; fragment
+&amp;nbsp;
+&lt;span class="kr"&gt;declare&lt;/span&gt; &lt;span class="kr"&gt;record&lt;/span&gt; data-fragment &lt;span class="kr"&gt;extends&lt;/span&gt; fragment
+   &lt;span class="kr"&gt;field&lt;/span&gt; markup-buffer data
+&amp;nbsp;
+&lt;span class="kr"&gt;export&lt;/span&gt; &lt;span class="kr"&gt;record&lt;/span&gt; markup-future &lt;span class="kr"&gt;extends&lt;/span&gt; fragment
+&amp;nbsp;
+&lt;span class="kr"&gt;export&lt;/span&gt; &lt;span class="kr"&gt;record&lt;/span&gt; markup-referent-buffer &lt;span class="kr"&gt;extends&lt;/span&gt; markup-future
+   &lt;span class="kr"&gt;field&lt;/span&gt; &lt;span class="kr"&gt;string&lt;/span&gt;   &lt;span class="kr"&gt;name&lt;/span&gt;
+   &lt;span class="kr"&gt;field&lt;/span&gt; fragment contents &lt;span class="kr"&gt;variable&lt;/span&gt;
+&amp;nbsp;
+&amp;nbsp;
+&lt;span class="kr"&gt;export&lt;/span&gt; &lt;span class="kr"&gt;global&lt;/span&gt; markup-referent-buffer &lt;span class="kr"&gt;referents&lt;/span&gt; &lt;span class="kr"&gt;variable&lt;/span&gt;
+&amp;nbsp;
+&lt;span class="kr"&gt;export&lt;/span&gt; markup-referent-buffer &lt;span class="kr"&gt;function&lt;/span&gt;
+   &lt;span class="kr"&gt;referent&lt;/span&gt; &lt;span class="kr"&gt;value&lt;/span&gt; &lt;span class="kr"&gt;string&lt;/span&gt; &lt;span class="kr"&gt;name&lt;/span&gt;
+&lt;span class="kr"&gt;as&lt;/span&gt;
+   &lt;span class="kr"&gt;using&lt;/span&gt; &lt;span class="kr"&gt;new&lt;/span&gt;&lt;span class="o"&gt;?&lt;/span&gt; &lt;span class="kr"&gt;referents&lt;/span&gt;&lt;span class="o"&gt;{&lt;/span&gt;&lt;span class="kr"&gt;name&lt;/span&gt;&lt;span class="o"&gt;}&lt;/span&gt; &lt;span class="kr"&gt;as&lt;/span&gt; ref
+   &lt;span class="kr"&gt;do&lt;/span&gt;
+      &lt;span class="kr"&gt;set&lt;/span&gt; ref:&lt;span class="kr"&gt;name&lt;/span&gt; &lt;span class="kr"&gt;to&lt;/span&gt; &lt;span class="kr"&gt;name&lt;/span&gt;
+      &lt;span class="kr"&gt;return&lt;/span&gt; ref
+   &lt;span class="kr"&gt;done&lt;/span&gt;
+&amp;nbsp;
+&amp;nbsp;
+&lt;span class="kr"&gt;export&lt;/span&gt; &lt;span class="kr"&gt;catch&lt;/span&gt; markup-referent &lt;span class="kr"&gt;value&lt;/span&gt; markup-future ref
+&amp;nbsp;
+&lt;span class="kr"&gt;export&lt;/span&gt; &lt;span class="kr"&gt;markup&lt;/span&gt; &lt;span class="kr"&gt;source&lt;/span&gt; &lt;span class="kr"&gt;conversion-function&lt;/span&gt;
+   &lt;span class="kr"&gt;value&lt;/span&gt; markup-referent-buffer b
+&lt;span class="kr"&gt;as&lt;/span&gt;
+   &lt;span class="kr"&gt;signal&lt;/span&gt; &lt;span class="kr"&gt;throw&lt;/span&gt; markup-referent b
+    
+&lt;/pre&gt;&lt;/div&gt;
+
 The next piece of functionality to tackle is the ability to set the referent value. The following function  accomplishes the task. Note that it automatically accepts and stores referents and not only plain data. There is  no need for any equivalent of the `with referents-allowed` modifier when setting a referent value.  
 
 &lt;div class="codehilite"&gt;&lt;pre&gt;
-&lt;span class="keyword"&gt;export&lt;/span&gt; &lt;span class="keyword"&gt;markup&lt;/span&gt; &lt;span class="keyword"&gt;sink&lt;/span&gt; &lt;span class="keyword"&gt;conversion-function&lt;/span&gt;
-   &lt;span class="keyword"&gt;value&lt;/span&gt; markup-referent-buffer b
-&lt;span class="keyword"&gt;as&lt;/span&gt;
-   &lt;span class="keyword"&gt;repeat&lt;/span&gt;
-      &lt;span class="keyword"&gt;local&lt;/span&gt; data-fragment frag
-&amp;nbsp;
-      &lt;span class="keyword"&gt;set&lt;/span&gt; &lt;span class="keyword"&gt;new&lt;/span&gt; b:contents &lt;span class="keyword"&gt;to&lt;/span&gt; frag
-      &lt;span class="keyword"&gt;using&lt;/span&gt; &lt;span class="keyword"&gt;output&lt;/span&gt; &lt;span class="keyword"&gt;as&lt;/span&gt; frag:data
-         &lt;span class="keyword"&gt;output&lt;/span&gt; &lt;span class="predef"&gt;#current-input&lt;/span&gt;
-      &lt;span class="keyword"&gt;exit&lt;/span&gt;
-&amp;nbsp;
-    &lt;span class="keyword"&gt;catch&lt;/span&gt; markup-referent ref
-      &lt;span class="keyword"&gt;set&lt;/span&gt; &lt;span class="keyword"&gt;new&lt;/span&gt; b:contents &lt;span class="keyword"&gt;to&lt;/span&gt; ref
-   &lt;span class="keyword"&gt;again&lt;/span&gt;
-    
-&amp;nbsp;&lt;/pre&gt;&lt;/div&gt;
+&lt;span class="kr"&gt;export&lt;/span&gt; &lt;span class="kr"&gt;markup&lt;/span&gt; &lt;span class="kr"&gt;sink&lt;/span&gt; &lt;span class="kr"&gt;conversion-function&lt;/span&gt;
+   &lt;span class="kr"&gt;value&lt;/span&gt; markup-referent-buffer b
+&lt;span class="kr"&gt;as&lt;/span&gt;
+   &lt;span class="kr"&gt;repeat&lt;/span&gt;
+      &lt;span class="kr"&gt;local&lt;/span&gt; data-fragment frag
+&amp;nbsp;
+      &lt;span class="kr"&gt;set&lt;/span&gt; &lt;span class="kr"&gt;new&lt;/span&gt; b:contents &lt;span class="kr"&gt;to&lt;/span&gt; frag
+      &lt;span class="kr"&gt;using&lt;/span&gt; &lt;span class="kr"&gt;output&lt;/span&gt; &lt;span class="kr"&gt;as&lt;/span&gt; frag:data
+         &lt;span class="kr"&gt;output&lt;/span&gt; &lt;span class="nb"&gt;#current-input&lt;/span&gt;
+      &lt;span class="kr"&gt;exit&lt;/span&gt;
+&amp;nbsp;
+    &lt;span class="kr"&gt;catch&lt;/span&gt; markup-referent ref
+      &lt;span class="kr"&gt;set&lt;/span&gt; &lt;span class="kr"&gt;new&lt;/span&gt; b:contents &lt;span class="kr"&gt;to&lt;/span&gt; ref
+   &lt;span class="kr"&gt;again&lt;/span&gt;
+    
+&lt;/pre&gt;&lt;/div&gt;
 
 The `resolve-referents` function starts by reproducing its input until it encounters the first `markup-referent`  signal. After that, it has to start buffering the signalled referents alongside the regular data until the end of  the input. Since the `markup-referent-buffer` type already knows how to accomplish this task we'll delegate the  bufferring to an anonymous instance of the type &amp;mdash; there's no reason to duplicate the code.  
 
 &lt;div class="codehilite"&gt;&lt;pre&gt;
-&lt;span class="keyword"&gt;export&lt;/span&gt; &lt;span class="keyword"&gt;markup&lt;/span&gt; &lt;span class="keyword"&gt;sink&lt;/span&gt; &lt;span class="keyword"&gt;function&lt;/span&gt;
-   resolve-referents &lt;span class="keyword"&gt;into&lt;/span&gt; &lt;span class="keyword"&gt;value&lt;/span&gt; &lt;span class="keyword"&gt;markup&lt;/span&gt; &lt;span class="keyword"&gt;sink&lt;/span&gt; destination
-&lt;span class="keyword"&gt;as&lt;/span&gt;
-   &lt;span class="keyword"&gt;using&lt;/span&gt; &lt;span class="keyword"&gt;output&lt;/span&gt; &lt;span class="keyword"&gt;as&lt;/span&gt; destination
-   &lt;span class="keyword"&gt;repeat&lt;/span&gt;
-      &lt;span class="keyword"&gt;output&lt;/span&gt; &lt;span class="predef"&gt;#current-input&lt;/span&gt; &lt;span class="keyword"&gt;take&lt;/span&gt; &lt;span class="keyword"&gt;any&lt;/span&gt;&lt;span class="symbol"&gt;*&lt;/span&gt;
-      &lt;span class="keyword"&gt;exit&lt;/span&gt;
-&amp;nbsp;
-    &lt;span class="keyword"&gt;catch&lt;/span&gt; &lt;span class="predef"&gt;#markup-point&lt;/span&gt; event
-      &lt;span class="keyword"&gt;signal&lt;/span&gt; &lt;span class="keyword"&gt;rethrow&lt;/span&gt;
-&amp;nbsp;
-    &lt;span class="keyword"&gt;catch&lt;/span&gt; &lt;span class="predef"&gt;#markup-start&lt;/span&gt; event
-      &lt;span class="keyword"&gt;signal&lt;/span&gt; &lt;span class="keyword"&gt;rethrow&lt;/span&gt;
-&amp;nbsp;
-    &lt;span class="keyword"&gt;catch&lt;/span&gt; &lt;span class="predef"&gt;#markup-end&lt;/span&gt; event
-      &lt;span class="keyword"&gt;signal&lt;/span&gt; &lt;span class="keyword"&gt;rethrow&lt;/span&gt;
-&amp;nbsp;
-    &lt;span class="keyword"&gt;catch&lt;/span&gt; markup-referent event
-      &lt;span class="keyword"&gt;do&lt;/span&gt;
-         &lt;span class="keyword"&gt;local&lt;/span&gt; markup-referent-buffer ref
-&amp;nbsp;
-         &lt;span class="keyword"&gt;using&lt;/span&gt; &lt;span class="keyword"&gt;output&lt;/span&gt; &lt;span class="keyword"&gt;as&lt;/span&gt; ref
-         &lt;span class="keyword"&gt;do&lt;/span&gt;
-            &lt;span class="keyword"&gt;signal&lt;/span&gt; &lt;span class="keyword"&gt;rethrow&lt;/span&gt;
-            &lt;span class="keyword"&gt;output&lt;/span&gt; &lt;span class="predef"&gt;#current-input&lt;/span&gt;
-         &lt;span class="keyword"&gt;done&lt;/span&gt;
-&amp;nbsp;
-         &lt;span class="keyword"&gt;output&lt;/span&gt; resolved ref
-      &lt;span class="keyword"&gt;done&lt;/span&gt;
-   &lt;span class="keyword"&gt;again&lt;/span&gt;
-    
-&amp;nbsp;&lt;/pre&gt;&lt;/div&gt;
+&lt;span class="kr"&gt;export&lt;/span&gt; &lt;span class="kr"&gt;markup&lt;/span&gt; &lt;span class="kr"&gt;sink&lt;/span&gt; &lt;span class="kr"&gt;function&lt;/span&gt;
+   resolve-referents &lt;span class="kr"&gt;into&lt;/span&gt; &lt;span class="kr"&gt;value&lt;/span&gt; &lt;span class="kr"&gt;markup&lt;/span&gt; &lt;span class="kr"&gt;sink&lt;/span&gt; destination
+&lt;span class="kr"&gt;as&lt;/span&gt;
+   &lt;span class="kr"&gt;using&lt;/span&gt; &lt;span class="kr"&gt;output&lt;/span&gt; &lt;span class="kr"&gt;as&lt;/span&gt; destination
+   &lt;span class="kr"&gt;repeat&lt;/span&gt;
+      &lt;span class="kr"&gt;output&lt;/span&gt; &lt;span class="nb"&gt;#current-input&lt;/span&gt; &lt;span class="kr"&gt;take&lt;/span&gt; &lt;span class="kr"&gt;any&lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;
+      &lt;span class="kr"&gt;exit&lt;/span&gt;
+&amp;nbsp;
+    &lt;span class="kr"&gt;catch&lt;/span&gt; &lt;span class="nb"&gt;#markup-point&lt;/span&gt; event
+      &lt;span class="kr"&gt;signal&lt;/span&gt; &lt;span class="kr"&gt;rethrow&lt;/span&gt;
+&amp;nbsp;
+    &lt;span class="kr"&gt;catch&lt;/span&gt; &lt;span class="nb"&gt;#markup-start&lt;/span&gt; event
+      &lt;span class="kr"&gt;signal&lt;/span&gt; &lt;span class="kr"&gt;rethrow&lt;/span&gt;
+&amp;nbsp;
+    &lt;span class="kr"&gt;catch&lt;/span&gt; &lt;span class="nb"&gt;#markup-end&lt;/span&gt; event
+      &lt;span class="kr"&gt;signal&lt;/span&gt; &lt;span class="kr"&gt;rethrow&lt;/span&gt;
+&amp;nbsp;
+    &lt;span class="kr"&gt;catch&lt;/span&gt; markup-referent event
+      &lt;span class="kr"&gt;do&lt;/span&gt;
+         &lt;span class="kr"&gt;local&lt;/span&gt; markup-referent-buffer ref
+&amp;nbsp;
+         &lt;span class="kr"&gt;using&lt;/span&gt; &lt;span class="kr"&gt;output&lt;/span&gt; &lt;span class="kr"&gt;as&lt;/span&gt; ref
+         &lt;span class="kr"&gt;do&lt;/span&gt;
+            &lt;span class="kr"&gt;signal&lt;/span&gt; &lt;span class="kr"&gt;rethrow&lt;/span&gt;
+            &lt;span class="kr"&gt;output&lt;/span&gt; &lt;span class="nb"&gt;#current-input&lt;/span&gt;
+         &lt;span class="kr"&gt;done&lt;/span&gt;
+&amp;nbsp;
+         &lt;span class="kr"&gt;output&lt;/span&gt; resolved ref
+      &lt;span class="kr"&gt;done&lt;/span&gt;
+   &lt;span class="kr"&gt;again&lt;/span&gt;
+    
+&lt;/pre&gt;&lt;/div&gt;
 
 Once the end of input is reached, the dynamic function `resolved` performs the actual work of emitting the  current value of the referent. Since referents can contain other referents, this function must be recursive, but  its implementation is trivial.  
 
 &lt;div class="codehilite"&gt;&lt;pre&gt;
-&lt;span class="keyword"&gt;export&lt;/span&gt; &lt;span class="keyword"&gt;dynamic&lt;/span&gt; &lt;span class="keyword"&gt;markup&lt;/span&gt; &lt;span class="keyword"&gt;source&lt;/span&gt; &lt;span class="keyword"&gt;function&lt;/span&gt;
-   resolved &lt;span class="keyword"&gt;value&lt;/span&gt; fragment f
-&lt;span class="keyword"&gt;as&lt;/span&gt;
-   &lt;span class="keyword"&gt;not-reached&lt;/span&gt; &lt;span class="keyword"&gt;message&lt;/span&gt; &lt;span class="string"&gt;"Unresolvable referent fragment."&lt;/span&gt;
-&amp;nbsp;
-&amp;nbsp;
-&lt;span class="keyword"&gt;define&lt;/span&gt; &lt;span class="keyword"&gt;overriding&lt;/span&gt; &lt;span class="keyword"&gt;markup&lt;/span&gt; &lt;span class="keyword"&gt;source&lt;/span&gt; &lt;span class="keyword"&gt;function&lt;/span&gt;
-   resolved &lt;span class="keyword"&gt;value&lt;/span&gt; data-fragment f
-&lt;span class="keyword"&gt;as&lt;/span&gt;
-   &lt;span class="keyword"&gt;output&lt;/span&gt; f:data
-&amp;nbsp;
-&amp;nbsp;
-&lt;span class="keyword"&gt;export&lt;/span&gt; &lt;span class="keyword"&gt;overriding&lt;/span&gt; &lt;span class="keyword"&gt;markup&lt;/span&gt; &lt;span class="keyword"&gt;source&lt;/span&gt; &lt;span class="keyword"&gt;function&lt;/span&gt;
-   resolved &lt;span class="keyword"&gt;value&lt;/span&gt; markup-referent-buffer b
-&lt;span class="keyword"&gt;as&lt;/span&gt;
-   &lt;span class="keyword"&gt;assert&lt;/span&gt; &lt;span class="keyword"&gt;number&lt;/span&gt; &lt;span class="keyword"&gt;of&lt;/span&gt; b:contents &lt;span class="symbol"&gt;&gt;&lt;/span&gt; 0
-      &lt;span class="keyword"&gt;message&lt;/span&gt; &lt;span class="string"&gt;"Referent '"&lt;/span&gt; &lt;span class="symbol"&gt;||&lt;/span&gt; b:&lt;span class="keyword"&gt;name&lt;/span&gt; &lt;span class="symbol"&gt;||&lt;/span&gt; &lt;span class="string"&gt;"' has no defined value."&lt;/span&gt;
-   &lt;span class="keyword"&gt;repeat&lt;/span&gt; &lt;span class="keyword"&gt;over&lt;/span&gt; b:contents &lt;span class="keyword"&gt;as&lt;/span&gt; fragment
-      &lt;span class="keyword"&gt;output&lt;/span&gt; resolved fragment
-   &lt;span class="keyword"&gt;again&lt;/span&gt;
-    
-&amp;nbsp;&lt;/pre&gt;&lt;/div&gt;
+&lt;span class="kr"&gt;export&lt;/span&gt; &lt;span class="kr"&gt;dynamic&lt;/span&gt; &lt;span class="kr"&gt;markup&lt;/span&gt; &lt;span class="kr"&gt;source&lt;/span&gt; &lt;span class="kr"&gt;function&lt;/span&gt;
+   resolved &lt;span class="kr"&gt;value&lt;/span&gt; fragment f
+&lt;span class="kr"&gt;as&lt;/span&gt;
+   &lt;span class="kr"&gt;not-reached&lt;/span&gt; &lt;span class="kr"&gt;message&lt;/span&gt; &lt;span class="s"&gt;"Unresolvable referent fragment."&lt;/span&gt;
+&amp;nbsp;
+&amp;nbsp;
+&lt;span class="kr"&gt;define&lt;/span&gt; &lt;span class="kr"&gt;overriding&lt;/span&gt; &lt;span class="kr"&gt;markup&lt;/span&gt; &lt;span class="kr"&gt;source&lt;/span&gt; &lt;span class="kr"&gt;function&lt;/span&gt;
+   resolved &lt;span class="kr"&gt;value&lt;/span&gt; data-fragment f
+&lt;span class="kr"&gt;as&lt;/span&gt;
+   &lt;span class="kr"&gt;output&lt;/span&gt; f:data
+&amp;nbsp;
+&amp;nbsp;
+&lt;span class="kr"&gt;export&lt;/span&gt; &lt;span class="kr"&gt;overriding&lt;/span&gt; &lt;span class="kr"&gt;markup&lt;/span&gt; &lt;span class="kr"&gt;source&lt;/span&gt; &lt;span class="kr"&gt;function&lt;/span&gt;
+   resolved &lt;span class="kr"&gt;value&lt;/span&gt; markup-referent-buffer b
+&lt;span class="kr"&gt;as&lt;/span&gt;
+   &lt;span class="kr"&gt;assert&lt;/span&gt; &lt;span class="kr"&gt;number&lt;/span&gt; &lt;span class="kr"&gt;of&lt;/span&gt; b:contents &lt;span class="o"&gt;&gt;&lt;/span&gt; 0
+      &lt;span class="kr"&gt;message&lt;/span&gt; &lt;span class="s"&gt;"Referent '"&lt;/span&gt; &lt;span class="o"&gt;||&lt;/span&gt; b:&lt;span class="kr"&gt;name&lt;/span&gt; &lt;span class="o"&gt;||&lt;/span&gt; &lt;span class="s"&gt;"' has no defined value."&lt;/span&gt;
+   &lt;span class="kr"&gt;repeat&lt;/span&gt; &lt;span class="kr"&gt;over&lt;/span&gt; b:contents &lt;span class="kr"&gt;as&lt;/span&gt; fragment
+      &lt;span class="kr"&gt;output&lt;/span&gt; resolved fragment
+   &lt;span class="kr"&gt;again&lt;/span&gt;
+    
+&lt;/pre&gt;&lt;/div&gt;
 
&lt;/pre&gt;</description><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">OmniMark Code</dc:creator><pubDate>Mon, 14 May 2012 15:11:13 -0000</pubDate><guid>https://sourceforge.net94a10413d64a199eec4acc9cf9536ed67c1e352d</guid></item><item><title>WikiPage Implementation modified by OmniMark Code</title><link>https://sourceforge.net/p/markup-referent/wiki/Implementation/</link><description>&lt;pre&gt;--- v3 
+++ v4 
@@ -1,125 +1,125 @@
 Implementation 
 ===============
 
-The [interface](../Interface) appears to work, now let's see if we can implement it.  
-
+The interface appears to work, now let's see if we can implement it.  
+
 The first thing to note is that unresolved referents are by definition something out of band. This means that  our referent buffer has to keep track of them separately from the fixed data, and also that that we cannot use the  same mechanism for emitting an unresolved referent that we use for emitting regular data.  
 
 The standard solution for emitting out-of-band information are signals. We'll declare a `catch`  with a referent argument. Then we can use `signal throw` to emit a referent. The reason for having  the parent type `markup-future` for `markup-referent-buffer` will be explained later.  
 
-&lt;pre&gt;
-declare record fragment
-
-declare record data-fragment extends fragment
-   field markup-buffer data
-
-export record markup-future extends fragment
-
-export record markup-referent-buffer extends markup-future
-   field string   name
-   field fragment contents variable
-
-
-export global markup-referent-buffer referents variable
-
-export markup-referent-buffer function
-   referent value string name
-as
-   using new? referents{name} as ref
-   do
-      set ref:name to name
-      return ref
-   done
-
-
-export catch markup-referent value markup-future ref
-
-export markup source conversion-function
-   value markup-referent-buffer b
-as
-   signal throw markup-referent b
-    
-&lt;/pre&gt;
+&lt;div class="codehilite"&gt;&lt;pre&gt;
+&lt;span class="keyword"&gt;declare&lt;/span&gt; &lt;span class="keyword"&gt;record&lt;/span&gt; fragment
+&amp;nbsp;
+&lt;span class="keyword"&gt;declare&lt;/span&gt; &lt;span class="keyword"&gt;record&lt;/span&gt; data-fragment &lt;span class="keyword"&gt;extends&lt;/span&gt; fragment
+   &lt;span class="keyword"&gt;field&lt;/span&gt; markup-buffer data
+&amp;nbsp;
+&lt;span class="keyword"&gt;export&lt;/span&gt; &lt;span class="keyword"&gt;record&lt;/span&gt; markup-future &lt;span class="keyword"&gt;extends&lt;/span&gt; fragment
+&amp;nbsp;
+&lt;span class="keyword"&gt;export&lt;/span&gt; &lt;span class="keyword"&gt;record&lt;/span&gt; markup-referent-buffer &lt;span class="keyword"&gt;extends&lt;/span&gt; markup-future
+   &lt;span class="keyword"&gt;field&lt;/span&gt; &lt;span class="keyword"&gt;string&lt;/span&gt;   &lt;span class="keyword"&gt;name&lt;/span&gt;
+   &lt;span class="keyword"&gt;field&lt;/span&gt; fragment contents &lt;span class="keyword"&gt;variable&lt;/span&gt;
+&amp;nbsp;
+&amp;nbsp;
+&lt;span class="keyword"&gt;export&lt;/span&gt; &lt;span class="keyword"&gt;global&lt;/span&gt; markup-referent-buffer &lt;span class="keyword"&gt;referents&lt;/span&gt; &lt;span class="keyword"&gt;variable&lt;/span&gt;
+&amp;nbsp;
+&lt;span class="keyword"&gt;export&lt;/span&gt; markup-referent-buffer &lt;span class="keyword"&gt;function&lt;/span&gt;
+   &lt;span class="keyword"&gt;referent&lt;/span&gt; &lt;span class="keyword"&gt;value&lt;/span&gt; &lt;span class="keyword"&gt;string&lt;/span&gt; &lt;span class="keyword"&gt;name&lt;/span&gt;
+&lt;span class="keyword"&gt;as&lt;/span&gt;
+   &lt;span class="keyword"&gt;using&lt;/span&gt; &lt;span class="keyword"&gt;new&lt;/span&gt;&lt;span class="symbol"&gt;?&lt;/span&gt; &lt;span class="keyword"&gt;referents&lt;/span&gt;&lt;span class="symbol"&gt;{&lt;/span&gt;&lt;span class="keyword"&gt;name&lt;/span&gt;&lt;span class="symbol"&gt;}&lt;/span&gt; &lt;span class="keyword"&gt;as&lt;/span&gt; ref
+   &lt;span class="keyword"&gt;do&lt;/span&gt;
+      &lt;span class="keyword"&gt;set&lt;/span&gt; ref:&lt;span class="keyword"&gt;name&lt;/span&gt; &lt;span class="keyword"&gt;to&lt;/span&gt; &lt;span class="keyword"&gt;name&lt;/span&gt;
+      &lt;span class="keyword"&gt;return&lt;/span&gt; ref
+   &lt;span class="keyword"&gt;done&lt;/span&gt;
+&amp;nbsp;
+&amp;nbsp;
+&lt;span class="keyword"&gt;export&lt;/span&gt; &lt;span class="keyword"&gt;catch&lt;/span&gt; markup-referent &lt;span class="keyword"&gt;value&lt;/span&gt; markup-future ref
+&amp;nbsp;
+&lt;span class="keyword"&gt;export&lt;/span&gt; &lt;span class="keyword"&gt;markup&lt;/span&gt; &lt;span class="keyword"&gt;source&lt;/span&gt; &lt;span class="keyword"&gt;conversion-function&lt;/span&gt;
+   &lt;span class="keyword"&gt;value&lt;/span&gt; markup-referent-buffer b
+&lt;span class="keyword"&gt;as&lt;/span&gt;
+   &lt;span class="keyword"&gt;signal&lt;/span&gt; &lt;span class="keyword"&gt;throw&lt;/span&gt; markup-referent b
+    
+&amp;nbsp;&lt;/pre&gt;&lt;/div&gt;
 
 The next piece of functionality to tackle is the ability to set the referent value. The following function  accomplishes the task. Note that it automatically accepts and stores referents and not only plain data. There is  no need for any equivalent of the `with referents-allowed` modifier when setting a referent value.  
 
-&lt;pre&gt;
-export markup sink conversion-function
-   value markup-referent-buffer b
-as
-   repeat
-      local data-fragment frag
-
-      set new b:contents to frag
-      using output as frag:data
-         output #current-input
-      exit
-
-    catch markup-referent ref
-      set new b:contents to ref
-   again
-    
-&lt;/pre&gt;
+&lt;div class="codehilite"&gt;&lt;pre&gt;
+&lt;span class="keyword"&gt;export&lt;/span&gt; &lt;span class="keyword"&gt;markup&lt;/span&gt; &lt;span class="keyword"&gt;sink&lt;/span&gt; &lt;span class="keyword"&gt;conversion-function&lt;/span&gt;
+   &lt;span class="keyword"&gt;value&lt;/span&gt; markup-referent-buffer b
+&lt;span class="keyword"&gt;as&lt;/span&gt;
+   &lt;span class="keyword"&gt;repeat&lt;/span&gt;
+      &lt;span class="keyword"&gt;local&lt;/span&gt; data-fragment frag
+&amp;nbsp;
+      &lt;span class="keyword"&gt;set&lt;/span&gt; &lt;span class="keyword"&gt;new&lt;/span&gt; b:contents &lt;span class="keyword"&gt;to&lt;/span&gt; frag
+      &lt;span class="keyword"&gt;using&lt;/span&gt; &lt;span class="keyword"&gt;output&lt;/span&gt; &lt;span class="keyword"&gt;as&lt;/span&gt; frag:data
+         &lt;span class="keyword"&gt;output&lt;/span&gt; &lt;span class="predef"&gt;#current-input&lt;/span&gt;
+      &lt;span class="keyword"&gt;exit&lt;/span&gt;
+&amp;nbsp;
+    &lt;span class="keyword"&gt;catch&lt;/span&gt; markup-referent ref
+      &lt;span class="keyword"&gt;set&lt;/span&gt; &lt;span class="keyword"&gt;new&lt;/span&gt; b:contents &lt;span class="keyword"&gt;to&lt;/span&gt; ref
+   &lt;span class="keyword"&gt;again&lt;/span&gt;
+    
+&amp;nbsp;&lt;/pre&gt;&lt;/div&gt;
 
 The `resolve-referents` function starts by reproducing its input until it encounters the first `markup-referent`  signal. After that, it has to start buffering the signalled referents alongside the regular data until the end of  the input. Since the `markup-referent-buffer` type already knows how to accomplish this task we'll delegate the  bufferring to an anonymous instance of the type &amp;mdash; there's no reason to duplicate the code.  
 
-&lt;pre&gt;
-export markup sink function
-   resolve-referents into value markup sink destination
-as
-   using output as destination
-   repeat
-      output #current-input take any\*
-      exit
-
-    catch #markup-point event
-      signal rethrow
-
-    catch #markup-start event
-      signal rethrow
-
-    catch #markup-end event
-      signal rethrow
-
-    catch markup-referent event
-      do
-         local markup-referent-buffer ref
-
-         using output as ref
-         do
-            signal rethrow
-            output #current-input
-         done
-
-         output resolved ref
-      done
-   again
-    
-&lt;/pre&gt;
+&lt;div class="codehilite"&gt;&lt;pre&gt;
+&lt;span class="keyword"&gt;export&lt;/span&gt; &lt;span class="keyword"&gt;markup&lt;/span&gt; &lt;span class="keyword"&gt;sink&lt;/span&gt; &lt;span class="keyword"&gt;function&lt;/span&gt;
+   resolve-referents &lt;span class="keyword"&gt;into&lt;/span&gt; &lt;span class="keyword"&gt;value&lt;/span&gt; &lt;span class="keyword"&gt;markup&lt;/span&gt; &lt;span class="keyword"&gt;sink&lt;/span&gt; destination
+&lt;span class="keyword"&gt;as&lt;/span&gt;
+   &lt;span class="keyword"&gt;using&lt;/span&gt; &lt;span class="keyword"&gt;output&lt;/span&gt; &lt;span class="keyword"&gt;as&lt;/span&gt; destination
+   &lt;span class="keyword"&gt;repeat&lt;/span&gt;
+      &lt;span class="keyword"&gt;output&lt;/span&gt; &lt;span class="predef"&gt;#current-input&lt;/span&gt; &lt;span class="keyword"&gt;take&lt;/span&gt; &lt;span class="keyword"&gt;any&lt;/span&gt;&lt;span class="symbol"&gt;*&lt;/span&gt;
+      &lt;span class="keyword"&gt;exit&lt;/span&gt;
+&amp;nbsp;
+    &lt;span class="keyword"&gt;catch&lt;/span&gt; &lt;span class="predef"&gt;#markup-point&lt;/span&gt; event
+      &lt;span class="keyword"&gt;signal&lt;/span&gt; &lt;span class="keyword"&gt;rethrow&lt;/span&gt;
+&amp;nbsp;
+    &lt;span class="keyword"&gt;catch&lt;/span&gt; &lt;span class="predef"&gt;#markup-start&lt;/span&gt; event
+      &lt;span class="keyword"&gt;signal&lt;/span&gt; &lt;span class="keyword"&gt;rethrow&lt;/span&gt;
+&amp;nbsp;
+    &lt;span class="keyword"&gt;catch&lt;/span&gt; &lt;span class="predef"&gt;#markup-end&lt;/span&gt; event
+      &lt;span class="keyword"&gt;signal&lt;/span&gt; &lt;span class="keyword"&gt;rethrow&lt;/span&gt;
+&amp;nbsp;
+    &lt;span class="keyword"&gt;catch&lt;/span&gt; markup-referent event
+      &lt;span class="keyword"&gt;do&lt;/span&gt;
+         &lt;span class="keyword"&gt;local&lt;/span&gt; markup-referent-buffer ref
+&amp;nbsp;
+         &lt;span class="keyword"&gt;using&lt;/span&gt; &lt;span class="keyword"&gt;output&lt;/span&gt; &lt;span class="keyword"&gt;as&lt;/span&gt; ref
+         &lt;span class="keyword"&gt;do&lt;/span&gt;
+            &lt;span class="keyword"&gt;signal&lt;/span&gt; &lt;span class="keyword"&gt;rethrow&lt;/span&gt;
+            &lt;span class="keyword"&gt;output&lt;/span&gt; &lt;span class="predef"&gt;#current-input&lt;/span&gt;
+         &lt;span class="keyword"&gt;done&lt;/span&gt;
+&amp;nbsp;
+         &lt;span class="keyword"&gt;output&lt;/span&gt; resolved ref
+      &lt;span class="keyword"&gt;done&lt;/span&gt;
+   &lt;span class="keyword"&gt;again&lt;/span&gt;
+    
+&amp;nbsp;&lt;/pre&gt;&lt;/div&gt;
 
 Once the end of input is reached, the dynamic function `resolved` performs the actual work of emitting the  current value of the referent. Since referents can contain other referents, this function must be recursive, but  its implementation is trivial.  
 
-&lt;pre&gt;
-export dynamic markup source function
-   resolved value fragment f
-as
-   not-reached message "Unresolvable referent fragment."
-
-
-define overriding markup source function
-   resolved value data-fragment f
-as
-   output f:data
-
-
-export overriding markup source function
-   resolved value markup-referent-buffer b
-as
-   assert number of b:contents &gt; 0
-      message "Referent '" || b:name || "' has no defined value."
-   repeat over b:contents as fragment
-      output resolved fragment
-   again
-    
-&lt;/pre&gt;
+&lt;div class="codehilite"&gt;&lt;pre&gt;
+&lt;span class="keyword"&gt;export&lt;/span&gt; &lt;span class="keyword"&gt;dynamic&lt;/span&gt; &lt;span class="keyword"&gt;markup&lt;/span&gt; &lt;span class="keyword"&gt;source&lt;/span&gt; &lt;span class="keyword"&gt;function&lt;/span&gt;
+   resolved &lt;span class="keyword"&gt;value&lt;/span&gt; fragment f
+&lt;span class="keyword"&gt;as&lt;/span&gt;
+   &lt;span class="keyword"&gt;not-reached&lt;/span&gt; &lt;span class="keyword"&gt;message&lt;/span&gt; &lt;span class="string"&gt;"Unresolvable referent fragment."&lt;/span&gt;
+&amp;nbsp;
+&amp;nbsp;
+&lt;span class="keyword"&gt;define&lt;/span&gt; &lt;span class="keyword"&gt;overriding&lt;/span&gt; &lt;span class="keyword"&gt;markup&lt;/span&gt; &lt;span class="keyword"&gt;source&lt;/span&gt; &lt;span class="keyword"&gt;function&lt;/span&gt;
+   resolved &lt;span class="keyword"&gt;value&lt;/span&gt; data-fragment f
+&lt;span class="keyword"&gt;as&lt;/span&gt;
+   &lt;span class="keyword"&gt;output&lt;/span&gt; f:data
+&amp;nbsp;
+&amp;nbsp;
+&lt;span class="keyword"&gt;export&lt;/span&gt; &lt;span class="keyword"&gt;overriding&lt;/span&gt; &lt;span class="keyword"&gt;markup&lt;/span&gt; &lt;span class="keyword"&gt;source&lt;/span&gt; &lt;span class="keyword"&gt;function&lt;/span&gt;
+   resolved &lt;span class="keyword"&gt;value&lt;/span&gt; markup-referent-buffer b
+&lt;span class="keyword"&gt;as&lt;/span&gt;
+   &lt;span class="keyword"&gt;assert&lt;/span&gt; &lt;span class="keyword"&gt;number&lt;/span&gt; &lt;span class="keyword"&gt;of&lt;/span&gt; b:contents &lt;span class="symbol"&gt;&gt;&lt;/span&gt; 0
+      &lt;span class="keyword"&gt;message&lt;/span&gt; &lt;span class="string"&gt;"Referent '"&lt;/span&gt; &lt;span class="symbol"&gt;||&lt;/span&gt; b:&lt;span class="keyword"&gt;name&lt;/span&gt; &lt;span class="symbol"&gt;||&lt;/span&gt; &lt;span class="string"&gt;"' has no defined value."&lt;/span&gt;
+   &lt;span class="keyword"&gt;repeat&lt;/span&gt; &lt;span class="keyword"&gt;over&lt;/span&gt; b:contents &lt;span class="keyword"&gt;as&lt;/span&gt; fragment
+      &lt;span class="keyword"&gt;output&lt;/span&gt; resolved fragment
+   &lt;span class="keyword"&gt;again&lt;/span&gt;
+    
+&amp;nbsp;&lt;/pre&gt;&lt;/div&gt;
 
&lt;/pre&gt;</description><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">OmniMark Code</dc:creator><pubDate>Mon, 14 May 2012 14:29:57 -0000</pubDate><guid>https://sourceforge.net265f6ff8197873791b8f8d15bc1530b686f8bace</guid></item><item><title>WikiPage Implementation modified by OmniMark Code</title><link>https://sourceforge.net/p/markup-referent/wiki/Implementation/</link><description>&lt;pre&gt;--- v2 
+++ v3 
@@ -1,7 +1,7 @@
 Implementation 
 ===============
 
-The [Interface] appears to work, now let's see if we can implement it.  
+The [interface](../Interface) appears to work, now let's see if we can implement it.  
 
 The first thing to note is that unresolved referents are by definition something out of band. This means that  our referent buffer has to keep track of them separately from the fixed data, and also that that we cannot use the  same mechanism for emitting an unresolved referent that we use for emitting regular data.  
 
&lt;/pre&gt;</description><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">OmniMark Code</dc:creator><pubDate>Fri, 11 May 2012 17:48:33 -0000</pubDate><guid>https://sourceforge.netcc9e29565785894ec6e7ffac2d958f7246c21503</guid></item><item><title>WikiPage Implementation modified by OmniMark Code</title><link>https://sourceforge.net/p/markup-referent/wiki/Implementation/</link><description>&lt;pre&gt;&lt;/pre&gt;</description><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">OmniMark Code</dc:creator><pubDate>Fri, 11 May 2012 17:47:46 -0000</pubDate><guid>https://sourceforge.netd8e0790262f754c7c7e77e3e315aa885ea6c6e60</guid></item><item><title>WikiPage Implementation modified by OmniMark Code</title><link>https://sourceforge.net/p/markup-referent/wiki/Implementation/</link><description>Implementation 
===============

The [Interface] appears to work, now let's see if we can implement it.  

The first thing to note is that unresolved referents are by definition something out of band. This means that  our referent buffer has to keep track of them separately from the fixed data, and also that that we cannot use the  same mechanism for emitting an unresolved referent that we use for emitting regular data.  

The standard solution for emitting out-of-band information are signals. We'll declare a `catch`  with a referent argument. Then we can use `signal throw` to emit a referent. The reason for having  the parent type `markup-future` for `markup-referent-buffer` will be explained later.  

&lt;pre&gt;
declare record fragment

declare record data-fragment extends fragment
   field markup-buffer data

export record markup-future extends fragment

export record markup-referent-buffer extends markup-future
   field string   name
   field fragment contents variable


export global markup-referent-buffer referents variable

export markup-referent-buffer function
   referent value string name
as
   using new? referents{name} as ref
   do
      set ref:name to name
      return ref
   done


export catch markup-referent value markup-future ref

export markup source conversion-function
   value markup-referent-buffer b
as
   signal throw markup-referent b
    
&lt;/pre&gt;

The next piece of functionality to tackle is the ability to set the referent value. The following function  accomplishes the task. Note that it automatically accepts and stores referents and not only plain data. There is  no need for any equivalent of the `with referents-allowed` modifier when setting a referent value.  

&lt;pre&gt;
export markup sink conversion-function
   value markup-referent-buffer b
as
   repeat
      local data-fragment frag

      set new b:contents to frag
      using output as frag:data
         output #current-input
      exit

    catch markup-referent ref
      set new b:contents to ref
   again
    
&lt;/pre&gt;

The `resolve-referents` function starts by reproducing its input until it encounters the first `markup-referent`  signal. After that, it has to start buffering the signalled referents alongside the regular data until the end of  the input. Since the `markup-referent-buffer` type already knows how to accomplish this task we'll delegate the  bufferring to an anonymous instance of the type &amp;mdash; there's no reason to duplicate the code.  

&lt;pre&gt;
export markup sink function
   resolve-referents into value markup sink destination
as
   using output as destination
   repeat
      output #current-input take any\*
      exit

    catch #markup-point event
      signal rethrow

    catch #markup-start event
      signal rethrow

    catch #markup-end event
      signal rethrow

    catch markup-referent event
      do
         local markup-referent-buffer ref

         using output as ref
         do
            signal rethrow
            output #current-input
         done

         output resolved ref
      done
   again
    
&lt;/pre&gt;

Once the end of input is reached, the dynamic function `resolved` performs the actual work of emitting the  current value of the referent. Since referents can contain other referents, this function must be recursive, but  its implementation is trivial.  

&lt;pre&gt;
export dynamic markup source function
   resolved value fragment f
as
   not-reached message "Unresolvable referent fragment."


define overriding markup source function
   resolved value data-fragment f
as
   output f:data


export overriding markup source function
   resolved value markup-referent-buffer b
as
   assert number of b:contents &gt; 0
      message "Referent '" || b:name || "' has no defined value."
   repeat over b:contents as fragment
      output resolved fragment
   again
    
&lt;/pre&gt;

</description><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">OmniMark Code</dc:creator><pubDate>Fri, 11 May 2012 17:30:33 -0000</pubDate><guid>https://sourceforge.net2d32757da33267f954be6c97fafcca3799fd87ce</guid></item></channel></rss>