about summary refs log blame commit diff stats
path: root/src/xmpp/jid.c
blob: 33c3d19f3e76e549cba5d95037a963bd1c9e64c5 (plain) (tree)
lass="nt">span>, before-cursor <span class="muControl">return</span> row, column, screen/same-as-ingredient:<span class="Constant">0</span>, editor/same-as-ingredient:<span class="Constant">1</span> ] <span class="muRecipe">def</span> clear-screen-from screen:address:screen, row:number, column:number, left:number, right:number<span class="muRecipe"> -&gt; </span>screen:address:screen [ <span class="Constant">local-scope</span> <span class="Constant">load-ingredients</span> <span class="Comment"># if it's the real screen, use the optimized primitive</span> <span class="Delimiter">{</span> <span class="muControl">break-if</span> screen clear-display-from row, column, left, right <span class="muControl">return</span> screen/same-as-ingredient:<span class="Constant">0</span> <span class="Delimiter">}</span> <span class="Comment"># if not, go the slower route</span> screen<span class="Special"> &lt;- </span>move-cursor screen, row, column clear-line-until screen, right clear-rest-of-screen screen, row, left, right <span class="muControl">return</span> screen/same-as-ingredient:<span class="Constant">0</span> ] <span class="muRecipe">def</span> clear-rest-of-screen screen:address:screen, row:number, left:number, right:number<span class="muRecipe"> -&gt; </span>screen:address:screen [ <span class="Constant">local-scope</span> <span class="Constant">load-ingredients</span> row<span class="Special"> &lt;- </span>add row, <span class="Constant">1</span> screen<span class="Special"> &lt;- </span>move-cursor screen, row, left screen-height:number<span class="Special"> &lt;- </span>screen-height screen <span class="Delimiter">{</span> at-bottom-of-screen?:boolean<span class="Special"> &lt;- </span>greater-or-equal row, screen-height <span class="muControl">break-if</span> at-bottom-of-screen? screen<span class="Special"> &lt;- </span>move-cursor screen, row, left clear-line-until screen, right row<span class="Special"> &lt;- </span>add row, <span class="Constant">1</span> <span class="muControl">loop</span> <span class="Delimiter">}</span> ] <span class="muScenario">scenario</span> editor-initially-prints-multiple-lines [ assume-screen <span class="Constant">5/width</span>, <span class="Constant">5/height</span> run [ s:address:array:character<span class="Special"> &lt;- </span>new <span class="Constant">[abc</span> <span class="Constant">def]</span> new-editor s:address:array:character, screen:address:screen, <span class="Constant">0/left</span>, <span class="Constant">5/right</span> ] screen-should-contain [ <span class="Constant"> . .</span> <span class="Constant"> .abc .</span> <span class="Constant"> .def .</span> <span class="Constant"> . .</span> ] ] <span class="muScenario">scenario</span> editor-initially-handles-offsets [ assume-screen <span class="Constant">5/width</span>, <span class="Constant">5/height</span> run [ s:address:array:character<span class="Special"> &lt;- </span>new <span class="Constant">[abc]</span> new-editor s:address:array:character, screen:address:screen, <span class="Constant">1/left</span>, <span class="Constant">5/right</span> ] screen-should-contain [ <span class="Constant"> . .</span> <span class="Constant"> . abc .</span> <span class="Constant"> . .</span> ] ] <span class="muScenario">scenario</span> editor-initially-prints-multiple-lines-at-offset [ assume-screen <span class="Constant">5/width</span>, <span class="Constant">5/height</span> run [ s:address:array:character<span class="Special"> &lt;- </span>new <span class="Constant">[abc</span> <span class="Constant">def]</span> new-editor s:address:array:character, screen:address:screen, <span class="Constant">1/left</span>, <span class="Constant">5/right</span> ] screen-should-contain [ <span class="Constant"> . .</span> <span class="Constant"> . abc .</span> <span class="Constant"> . def .</span> <span class="Constant"> . .</span> ] ] <span class="muScenario">scenario</span> editor-initially-wraps-long-lines [ assume-screen <span class="Constant">5/width</span>, <span class="Constant">5/height</span> run [ s:address:array:character<span class="Special"> &lt;- </span>new <span class="Constant">[abc def]</span> new-editor s:address:array:character, screen:address:screen, <span class="Constant">0/left</span>, <span class="Constant">5/right</span> ] screen-should-contain [ <span class="Constant"> . .</span> <span class="Constant"> .abc ↩.</span> <span class="Constant"> .def .</span> <span class="Constant"> . .</span> ] screen-should-contain-in-color <span class="Constant">245/grey</span> [ <span class="Constant"> . .</span> <span class="Constant"> . ↩.</span> <span class="Constant"> . .</span> <span class="Constant"> . .</span> ] ] <span class="muScenario">scenario</span> editor-initially-wraps-barely-long-lines [ assume-screen <span class="Constant">5/width</span>, <span class="Constant">5/height</span> run [ s:address:array:character<span class="Special"> &lt;- </span>new <span class="Constant">[abcde]</span> new-editor s:address:array:character, screen:address:screen, <span class="Constant">0/left</span>, <span class="Constant">5/right</span> ] <span class="Comment"># still wrap, even though the line would fit. We need room to click on the</span> <span class="Comment"># end of the line</span> screen-should-contain [ <span class="Constant"> . .</span> <span class="Constant"> .abcd↩.</span> <span class="Constant"> .e .</span> <span class="Constant"> . .</span> ] screen-should-contain-in-color <span class="Constant">245/grey</span> [ <span class="Constant"> . .</span> <span class="Constant"> . ↩.</span> <span class="Constant"> . .</span> <span class="Constant"> . .</span> ] ] <span class="muScenario">scenario</span> editor-initializes-empty-text [ assume-screen <span class="Constant">5/width</span>, <span class="Constant">5/height</span> run [ <span class="Constant">1</span>:address:array:character<span class="Special"> &lt;- </span>new <span class="Constant">[]</span> <span class="Constant">2</span>:address:editor-data<span class="Special"> &lt;- </span>new-editor <span class="Constant">1</span>:address:array:character, screen:address:screen, <span class="Constant">0/left</span>, <span class="Constant">5/right</span> <span class="Constant">3</span>:number<span class="Special"> &lt;- </span>get *<span class="Constant">2</span>:address:editor-data, <span class="Constant">cursor-row:offset</span> <span class="Constant">4</span>:number<span class="Special"> &lt;- </span>get *<span class="Constant">2</span>:address:editor-data, <span class="Constant">cursor-column:offset</span> ] screen-should-contain [ <span class="Constant"> . .</span> <span class="Constant"> . .</span> <span class="Constant"> . .</span> ] memory-should-contain [ <span class="Constant">3</span><span class="Special"> &lt;- </span><span class="Constant">1</span> <span class="Comment"># cursor row</span> <span class="Constant">4</span><span class="Special"> &lt;- </span><span class="Constant">0</span> <span class="Comment"># cursor column</span> ] ] <span class="Comment"># just a little color for mu code</span> <span class="muScenario">scenario</span> render-colors-comments [ assume-screen <span class="Constant">5/width</span>, <span class="Constant">5/height</span> run [ s:address:array:character<span class="Special"> &lt;- </span>new <span class="Constant">[abc</span> <span class="Constant"># de</span> <span class="Constant">f]</span> new-editor s:address:array:character, screen:address:screen, <span class="Constant">0/left</span>, <span class="Constant">5/right</span> ] screen-should-contain [ <span class="Constant"> . .</span> <span class="Constant"> .abc .</span> <span class="Constant"> .# de .</span> <span class="Constant"> .f .</span> <span class="Constant"> . .</span> ] screen-should-contain-in-color <span class="Constant">12/lightblue</span>, [ <span class="Constant"> . .</span> <span class="Constant"> . .</span> <span class="Constant"> .# de .</span> <span class="Constant"> . .</span> <span class="Constant"> . .</span> ] screen-should-contain-in-color <span class="Constant">7/white</span>, [ <span class="Constant"> . .</span> <span class="Constant"> .abc .</span> <span class="Constant"> . .</span> <span class="Constant"> .f .</span> <span class="Constant"> . .</span> ] ] <span class="muRecipe">after</span> <span class="Constant">&lt;character-c-received&gt;</span> [ color<span class="Special"> &lt;- </span>get-color color, c ] <span class="Comment"># so far the previous color is all the information we need; that may change</span> <span class="muRecipe">def</span> get-color color:number, c:character<span class="muRecipe"> -&gt; </span>color:number [ <span class="Constant">local-scope</span> <span class="Constant">load-ingredients</span> color-is-white?:boolean<span class="Special"> &lt;- </span>equal color, <span class="Constant">7/white</span> <span class="Comment"># if color is white and next character is '#', switch color to blue</span> <span class="Delimiter">{</span> <span class="muControl">break-unless</span> color-is-white? starting-comment?:boolean<span class="Special"> &lt;- </span>equal c, <span class="Constant">35/#</span> <span class="muControl">break-unless</span> starting-comment? trace <span class="Constant">90</span>, <span class="Constant">[app]</span>, <span class="Constant">[switch color back to blue]</span> color<span class="Special"> &lt;- </span>copy <span class="Constant">12/lightblue</span> <span class="muControl">jump</span> <span class="Constant">+exit:label</span> <span class="Delimiter">}</span> <span class="Comment"># if color is blue and next character is newline, switch color to white</span> <span class="Delimiter">{</span> color-is-blue?:boolean<span class="Special"> &lt;- </span>equal color, <span class="Constant">12/lightblue</span> <span class="muControl">break-unless</span> color-is-blue? ending-comment?:boolean<span class="Special"> &lt;- </span>equal c, <span class="Constant">10/newline</span> <span class="muControl">break-unless</span> ending-comment? trace <span class="Constant">90</span>, <span class="Constant">[app]</span>, <span class="Constant">[switch color back to white]</span> color<span class="Special"> &lt;- </span>copy <span class="Constant">7/white</span> <span class="muControl">jump</span> <span class="Constant">+exit:label</span> <span class="Delimiter">}</span> <span class="Comment"># if color is white (no comments) and next character is '&lt;', switch color to red</span> <span class="Delimiter">{</span> <span class="muControl">break-unless</span> color-is-white? starting-assignment?:boolean<span class="Special"> &lt;- </span>equal c, <span class="Constant">60/&lt;</span> <span class="muControl">break-unless</span> starting-assignment? color<span class="Special"> &lt;- </span>copy <span class="Constant">1/red</span> <span class="muControl">jump</span> <span class="Constant">+exit:label</span> <span class="Delimiter">}</span> <span class="Comment"># if color is red and next character is space, switch color to white</span> <span class="Delimiter">{</span> color-is-red?:boolean<span class="Special"> &lt;- </span>equal color, <span class="Constant">1/red</span> <span class="muControl">break-unless</span> color-is-red? ending-assignment?:boolean<span class="Special"> &lt;- </span>equal c, <span class="Constant">32/space</span> <span class="muControl">break-unless</span> ending-assignment? color<span class="Special"> &lt;- </span>copy <span class="Constant">7/white</span> <span class="muControl">jump</span> <span class="Constant">+exit:label</span> <span class="Delimiter">}</span> <span class="Comment"># otherwise no change</span> <span class="Constant"> +exit</span> <span class="muControl">return</span> color ] <span class="muScenario">scenario</span> render-colors-assignment [ assume-screen <span class="Constant">8/width</span>, <span class="Constant">5/height</span> run [ s:address:array:character<span class="Special"> &lt;- </span>new <span class="Constant">[abc</span> <span class="Constant">d &lt;- e</span> <span class="Constant">f]</span> new-editor s:address:array:character, screen:address:screen, <span class="Constant">0/left</span>, <span class="Constant">8/right</span> ] screen-should-contain [ <span class="Constant"> . .</span> <span class="Constant"> .abc .</span> <span class="Constant"> .d &lt;- e .</span> <span class="Constant"> .f .</span> <span class="Constant"> . .</span> ] screen-should-contain-in-color <span class="Constant">1/red</span>, [ <span class="Constant"> . .</span> <span class="Constant"> . .</span> <span class="Constant"> . &lt;- .</span> <span class="Constant"> . .</span> <span class="Constant"> . .</span> ] ] </pre> </body> </html> <!-- vim: set foldmethod=manual : -->