<div>Hi!</div><div> </div><div>(</div><div> </div><div><div><span style="font-family:'courier new' , monospace">════════════════════ Code pages ═══</span></div><div><span style="font-family:'courier new' , monospace">Automatic detection</span></div><div><span style="font-family:'courier new' , monospace">─────┬──────────────── System ─────</span></div><div><span style="font-family:'courier new' , monospace">1251 │ ANSI</span></div><div><span style="font-family:'courier new' , monospace">866  │ OEM</span></div><div><span style="font-family:'courier new' , monospace">─────┼──────────────── Unicode ────</span></div><div><span style="font-family:'courier new' , monospace">65001│ UTF-8</span></div><div><span style="font-family:'courier new' , monospace">1200 │ UTF-16 (Little endian)</span></div><div><span style="font-family:'courier new' , monospace">1201 │ UTF-16 (Big endian)</span></div><div><span style="font-family:'courier new' , monospace">─────┼───────────────── Other ─────</span></div><div><span style="font-family:'courier new' , monospace">37   │ IBM EBCDIC - U.S./Canada</span></div><div><span style="font-family:'courier new' , monospace">437  │ OEM - United States</span></div><div> </div><div>)</div></div><div> </div><div> </div><div> </div><div> </div><div> I think  combo of thises is better "test case"</div><div> </div><div>==</div><div><div><div> On this site: </div><div>https://deru.dict.cc/?s=Ende+gut+alles+gut  </div><div>even known saying / quote of the last Generalissimo of the Russian Empire Aleksándr Vasíl'evič Suvórov</div><div> </div><div>"Auf dem Papier war alles schön und gut (doch die Realität sieht anders aus)."</div><div> a-ka</div><div>"It was smooth on paper (but they [ VVM: drafters of the document] forgot about the ravines, and [in fact it is necessary to] walk through them)."</div><div>==</div></div></div><div> </div><div> +</div><div> </div><div><div>examples\hello\src\Hello.m3</div></div><div>==</div><div><img src="cid:3812201636645444@sas1-6059effbd848.qloud-c.yandex.net" style="max-width:100%" /></div><div>==</div><div> </div><div>+</div><div> </div><div>==</div><div><img src="cid:3812191636645444@sas1-6059effbd848.qloud-c.yandex.net" style="max-width:100%" /></div><div>==</div><div> </div><div> </div><div><span style="font-family:'courier new' , monospace">{<!-- -->{<!-- -->{<!-- --></span></div><div><div><div> </div><div><span style="font-family:'courier new' , monospace">MODULE Hello EXPORTS Main;</span></div><div><span style="font-family:'courier new' , monospace">(* Each module must have a name, which is declared in the "MODULE"</span></div><div><span style="font-family:'courier new' , monospace">   statement. By convention, the main module for an executable </span></div><div><span style="font-family:'courier new' , monospace">   program exports the interface "Main", as does the "Hello" module here.</span></div><div> </div><div><span style="font-family:'courier new' , monospace">   Each module can also import interfaces exported by other modules.</span></div><div><span style="font-family:'courier new' , monospace">   This is how you reuse code from libraries or your own modules. </span></div><div><span style="font-family:'courier new' , monospace">   Here, we have imported interface "IO" which is a simple </span></div><div><span style="font-family:'courier new' , monospace">   input/output interface.</span></div><div> </div><div><span style="font-family:'courier new' , monospace">   From the browser, you can learn what the imported interfaces do</span></div><div><span style="font-family:'courier new' , monospace">   by following the link associated with their name.</span></div><div> </div><div><span style="font-family:'courier new' , monospace"> On this site: </span></div><div><span style="font-family:'courier new' , monospace">https://deru.dict.cc/?s=Ende+gut+alles+gut  </span></div><div><span style="font-family:'courier new' , monospace">even known saying / quote of the last Generalissimo of the Russian Empire Aleksándr Vasíl'evič Suvórov</span></div><div> </div><div><span style="font-family:'courier new' , monospace">"Auf dem Papier war alles schön und gut (doch die Realität sieht anders aus)."</span></div><div><span style="font-family:'courier new' , monospace"> a-ka</span></div><div><span style="font-family:'courier new' , monospace">"It was smooth on paper (but they [ VVM: drafters of the document] forgot about the ravines, and [in fact it is necessary to] walk through them)."</span></div><div> </div><div><span style="font-family:'courier new' , monospace"> *)</span></div><div> </div><div><span style="font-family:'courier new' , monospace">IMPORT IO;</span></div><div> </div><div><span style="font-family:'courier new' , monospace">(* The main body of a module or the initialization section includes</span></div><div><span style="font-family:'courier new' , monospace">   statements that are executed at the begining of the program. </span></div><div><span style="font-family:'courier new' , monospace">   In this case, we are the main module, and all we do is print </span></div><div><span style="font-family:'courier new' , monospace">   "Hello World!" on standard output.</span></div><div><span style="font-family:'courier new' , monospace">*)</span></div><div> </div><div><span style="font-family:'courier new' , monospace">BEGIN</span></div><div><span style="font-family:'courier new' , monospace">  IO.Put ("Hello World!\n");</span></div><div> </div><div><span style="font-family:'courier new' , monospace">  IO.Put ("                                                                                                                                                      \n");</span></div><div><span style="font-family:'courier new' , monospace">  IO.Put ("                                                                                                                                                      \n");</span></div><div><span style="font-family:'courier new' , monospace">  IO.Put ("  On this site:                                                                                                                                       \n");</span></div><div><span style="font-family:'courier new' , monospace">  IO.Put (" https://deru.dict.cc/?s=Ende+gut+alles+gut                                                                                                           \n");</span></div><div><span style="font-family:'courier new' , monospace">  IO.Put (" even known saying / quote of the last Generalissimo of the Russian Empire Aleksándr Vasíl'evič Suvórov                                               \n");</span></div><div><span style="font-family:'courier new' , monospace">  IO.Put ("                                                                                                                                                      \n");</span></div><div><span style="font-family:'courier new' , monospace">  IO.Put (" "Auf dem Papier war alles schön und gut (doch die Realität sieht anders aus)."                                                                       \n");</span></div><div><span style="font-family:'courier new' , monospace">  IO.Put ("  a-ka                                                                                                                                                \n");</span></div><div><span style="font-family:'courier new' , monospace">  IO.Put (" "It was smooth on paper (but they [ VVM: drafters of the document] forgot about the ravines, and [in fact it is necessary to] walk through them)."   \n");</span></div><div><span style="font-family:'courier new' , monospace">  IO.Put ("                                                                                                                                                      \n");</span></div><div><span style="font-family:'courier new' , monospace">  IO.Put ("                                                                                                                                                      \n");</span></div><div> </div><div><span style="font-family:'courier new' , monospace">END Hello.</span></div><div> </div><div><span style="font-family:'courier new' , monospace">(* Don't forget to include the module name in the last "END" in your</span></div><div><span style="font-family:'courier new' , monospace">   program. *)</span></div></div></div><div><span style="font-family:'courier new' , monospace">}}}</span></div><div> </div><div> </div><div> </div><div> Fragment:</div><div> </div><div><div><span style="font-family:'courier new' , monospace">0000000000: EF BB BF 20 20 49 4F 2E │ 50 75 74 20 28 22 20 65  &#xfffd;››  IO.Put (" e</span></div><div><span style="font-family:'courier new' , monospace">0000000010: 76 65 6E 20 6B 6E 6F 77 │ 6E 20 73 61 79 69 6E 67  ven known saying</span></div><div><span style="font-family:'courier new' , monospace">0000000020: 20 2F 20 71 75 6F 74 65 │ 20 6F 66 20 74 68 65 20   / quote of the</span></div><div><span style="font-family:'courier new' , monospace">0000000030: 6C 61 73 74 20 47 65 6E │ 65 72 61 6C 69 73 73 69  last Generalissi</span></div><div><span style="font-family:'courier new' , monospace">0000000040: 6D 6F 20 6F 66 20 74 68 │ 65 20 52 75 73 73 69 61  mo of the Russia</span></div><div><span style="font-family:'courier new' , monospace">0000000050: 6E 20 45 6D 70 69 72 65 │ 20 41 6C 65 6B 73 C3 A1  n Empire Aleksá›</span></div><div><span style="font-family:'courier new' , monospace">0000000060: 6E 64 72 20 56 61 73 C3 │ AD 6C 27 65 76 69 C4 8D  ndr Vasí›l'evič›</span></div><div><span style="font-family:'courier new' , monospace">0000000070: 20 53 75 76 C3 B3 72 6F │ 76 20 20 20 20 20 20 20   Suvó›rov</span></div><div><span style="font-family:'courier new' , monospace">0000000080: 20 20 20 20 20 20 20 20 │ 20 20 20 20 20 20 20 20</span></div><div><span style="font-family:'courier new' , monospace">0000000090: 20 20 20 20 20 20 20 20 │ 20 20 20 20 20 20 20 20</span></div><div><span style="font-family:'courier new' , monospace">00000000A0: 20 20 20 20 20 20 20 20 │ 5C 6E 22 29 3B 0A 20 20          \n");◙</span></div><div><span style="font-family:'courier new' , monospace">00000000B0: 49 4F 2E 50 75 74 20 28 │ 22 20 20 20 20 20 20 20  IO.Put ("</span></div><div><span style="font-family:'courier new' , monospace">00000000C0: 20 20 20 20 20 20 20 20 │ 20 20 20 20 20 20 20 20</span></div><div><span style="font-family:'courier new' , monospace">00000000D0: 20 20 20 20 20 20 20 20 │ 20 20 20 20 20 20 20 20</span></div><div><span style="font-family:'courier new' , monospace">00000000E0: 20 20 20 20 20 20 20 20 │ 20 20 20 20 20 20 20 20</span></div><div><span style="font-family:'courier new' , monospace">00000000F0: 20 20 20 20 20 20 20 20 │ 20 20 20 20 20 20 20 20</span></div><div><span style="font-family:'courier new' , monospace">0000000100: 20 20 20 20 20 20 20 20 │ 20 20 20 20 20 20 20 20</span></div><div><span style="font-family:'courier new' , monospace">0000000110: 20 20 20 20 20 20 20 20 │ 20 20 20 20 20 20 20 20</span></div><div><span style="font-family:'courier new' , monospace">0000000120: 20 20 20 20 20 20 20 20 │ 20 20 20 20 20 20 20 20</span></div><div><span style="font-family:'courier new' , monospace">0000000130: 20 20 20 20 20 20 20 20 │ 20 20 20 20 20 20 20 20</span></div><div><span style="font-family:'courier new' , monospace">0000000140: 20 20 20 20 20 20 20 20 │ 20 20 20 20 20 20 20 5C                 \</span></div><div><span style="font-family:'courier new' , monospace">0000000150: 6E 22 29 3B 0A 20 20 49 │ 4F 2E 50 75 74 20 28 22  n");◙  IO.Put ("</span></div><div><span style="font-family:'courier new' , monospace">0000000160: 20 22 41 75 66 20 64 65 │ 6D 20 50 61 70 69 65 72   "Auf dem Papier</span></div><div><span style="font-family:'courier new' , monospace">0000000170: 20 77 61 72 20 61 6C 6C │ 65 73 20 73 63 68 C3 B6   war alles schö›</span></div><div><span style="font-family:'courier new' , monospace">0000000180: 6E 20 75 6E 64 20 67 75 │ 74 20 28 64 6F 63 68 20  n und gut (doch</span></div><div><span style="font-family:'courier new' , monospace">0000000190: 64 69 65 20 52 65 61 6C │ 69 74 C3 A4 74 20 73 69  die Realitä›t si</span></div><div><span style="font-family:'courier new' , monospace">00000001A0: 65 68 74 20 61 6E 64 65 │ 72 73 20 61 75 73 29 2E  eht anders aus).</span></div><div><span style="font-family:'courier new' , monospace">00000001B0: 22 20 20 20 20 20 20 20 │ 20 20 20 20 20 20 20 20  "</span></div><div><span style="font-family:'courier new' , monospace">00000001C0: 20 20 20 20 20 20 20 20 │ 20 20 20 20 20 20 20 20</span></div><div><span style="font-family:'courier new' , monospace">00000001D0: 20 20 20 20 20 20 20 20 │ 20 20 20 20 20 20 20 20</span></div><div><span style="font-family:'courier new' , monospace">00000001E0: 20 20 20 20 20 20 20 20 │ 20 20 20 20 20 20 20 20</span></div><div><span style="font-family:'courier new' , monospace">00000001F0: 20 20 20 20 20 20 20 20 │ 5C 6E 22 29 3B 0A                \n");◙</span></div></div><div> </div><div> </div><div> </div><div>Best regards, Victor Miasnikov</div><div> </div><div>11.11.2021, 16:21, "Eric Sessoms" <coder5506@pobox.com>:</div><blockquote><p>Hi list, and thanks for adding me.<br /><br />WRT my recent bug report:<br /> </p><blockquote> Thinking about this a bit more, in light of Unicode's distinction between</blockquote><p> > code points as an abstraction and multiple alternative representations,<br /> > it makes sense to me to interpret the language's statement to mean the<br /> > source character set consists of the code points that are in Latin-1,<br /> > leaving the representation up to implementations.<br /><br />That's really all I'm going for. What we have now is a situation where the scanner was written with two flaws: (1) it implicitly assumes that source files are encoded in Latin-1, which hasn't been true on most platforms for 20-years, and (2) no thought whatsoever was given to WIDECHAR. Which means we can do this:<br /><br />VAR<br />  a := W"é";<br />  b: ARRAY [0..1] OF WIDECHAR;<br />BEGIN<br />  Text.SetWideChars(b, a);<br />  IO.PutInt(ORD(b[0])); IO.PutChar('\n');<br />  IO.PutInt(ORD(b[1])); IO.PutChar('\n');<br />END<br /><br />And get as output:<br /><br />195<br />169<br /><br />Which of course makes no sense in any world.<br /><br />It is unreasonable in CURRENT_YEAR to try to force all source files to be encoded in Latin-1, because the configuration for this varies by editor, and all it takes is for someone to open a file in the "wrong" editor and *poof* now it's in <platform default> encoding.<br /><br />I'm just proposing to make the scanner smart enough to notice (above example) that "oh, this source file is in UTF-8, that sequence of bytes 195, 169 is an e-acute, which means this text literal contains one character with the Unicode value 233" so that we get the same result as-if the file had been in Latin-1, as the language was originally designed.<br />_______________________________________________<br />M3devel mailing list<br /><a href="mailto:M3devel@elegosoft.com" rel="noopener noreferrer">M3devel@elegosoft.com</a><br /><a href="https://m3lists.elegosoft.com/mailman/listinfo/m3devel" rel="noopener noreferrer">https://m3lists.elegosoft.com/mailman/listinfo/m3devel</a></p></blockquote>