GSTrans string conversion: Difference between revisions

m
→‎{{header|Phix}}: improved error handling and added note
(Add Python)
m (→‎{{header|Phix}}: improved error handling and added note)
Line 341:
and in fact penned a hexstr() rather similar to the two routines actually asked for, just to improve the console display a little bit.<br>
Also, the following always encodes to uppercase, but the decode part will properly cope with (eg) "|m|j|@|e|!t|m|!|?".<br>
As per Wren, strings in Phix are just sequences of bytes: UTF-8 or similar is completely irrelevant here, and ''won't'' mess up byte subscripting.<br>
Since strings are a sequence of (unsigned) bytes, there can be no encoding errors for anything that passes the typecheck of the "string s" parameter.<br>
For decoding, explicit assertion failures occur for multiple high bits such as "|!|!", or generating negative bytes such as from "|1".
<!--<syntaxhighlight lang="phix">(phixonline)-->
<span style="color: #008080;">with</span> <span style="color: #008080;">javascript_semantics</span>
Line 374 ⟶ 376:
<span style="color: #008080;">if</span> <span style="color: #000000;">bar</span> <span style="color: #008080;">then</span>
<span style="color: #008080;">if</span> <span style="color: #000000;">b</span><span style="color: #0000FF;">=</span><span style="color: #008000;">'!'</span> <span style="color: #008080;">then</span>
<span style="color: #7060A8;">assert</span><span style="color: #0000FF;">(</span><span style="color: #000000;">hb</span><span style="color: #0000FF;">==</span><span style="color: #000000;">#00</span><span style="color: #0000FF;">,</span><span style="color: #008000;">"high bit already set"</span><span style="color: #0000FF;">)</span>
<span style="color: #000000;">hb</span> <span style="color: #0000FF;">=</span> <span style="color: #000000;">#80</span>
<span style="color: #008080;">else</span>
Line 381 ⟶ 383:
<span style="color: #008080;">elsif</span> <span style="color: #008080;">not</span> <span style="color: #7060A8;">find</span><span style="color: #0000FF;">(</span><span style="color: #000000;">b</span><span style="color: #0000FF;">,</span><span style="color: #008000;">`"|&lt;`</span><span style="color: #0000FF;">)</span> <span style="color: #008080;">then</span>
<span style="color: #000000;">b</span> <span style="color: #0000FF;">-=</span> <span style="color: #7060A8;">iff</span><span style="color: #0000FF;">(</span><span style="color: #000000;">b</span><span style="color: #0000FF;">>=</span><span style="color: #008000;">'a'</span><span style="color: #0000FF;">?</span><span style="color: #000000;">#60</span><span style="color: #0000FF;">:</span><span style="color: #000000;">#40</span><span style="color: #0000FF;">)</span>
<span style="color: #7060A8;">assert</span><span style="color: #0000FF;">(</span><span style="color: #000000;">b</span><span style="color: #0000FF;">>=</span><span style="color: #000000;">0</span><span style="color: #0000FF;">,</span><span style="color: #008000;">"negative byte generated"</span><span style="color: #0000FF;">)</span>
<span style="color: #008080;">end</span> <span style="color: #008080;">if</span>
<span style="color: #000000;">res</span> <span style="color: #0000FF;">&=</span> <span style="color: #000000;">b</span><span style="color: #0000FF;">+</span><span style="color: #000000;">hb</span>
7,803

edits