Hello Michal
Many thanks for your comprehensive explanation. I am using these translations just as a vehicle to get the text of my incoming e-mails into Pharo, so the conditional comments have no relevance to my use and are just clutter. I shall therefore continue preprocessing the received HTML to turn them into legal comments. I have found that they come with various forms of ‘if’, so the rewriting just turns ‘<![‘ into ‘<!--[‘ and ‘]>’ into ‘]-->’. I do this with String>>replaceAll:with:, but it might be interesting to write a PetitParser job to eliminate them completely. We can only hope that MS will sometime realise the meaning of the word ‘deprecated’; I am using the latest Outlook in Office 365, and these forms are only relevant to long-dead versions of IE. Probably you are right that XMLHTMLParser should handle them tidily, but whether it is worth the effort depends on how often they turn up in the wild. It appears I may be the only person so far to have hit this, just because of my combination of Outlook with Pharo. I shan’t be clamouring for any quick change. Thanks again for your help. Peter Kenny From: Pharo-users <pharo-users-boun...@lists.pharo.org> On Behalf Of Michal Balda Sent: 03 April 2020 16:45 To: pharo-users@lists.pharo.org Subject: Re: [Pharo-users] How should XMLHTMLParser handle strange HTML? Hello Peter, Those are called conditional comments. They come from MS Word which is used as the HTML rendering engine for MS Outlook. There is not much documentation available online specifically for MS Word but they were also implemented in older versions of MS Internet Explorer and used commonly by web designers to fix bugs and quirks in IE's rendering. See Wikipedia: <https://en.wikipedia.org/wiki/Conditional_comment> https://en.wikipedia.org/wiki/Conditional_comment Or just search for "internet explorer conditional comments", you will find plenty of resources. The ones in your example are the "downlevel-revealed" sort of conditional comments meaning that the content between the "if" and "endif" is visible to all browsers. The "if" and "endif" themselves are recognized by MS Word (and MS Internet Explorer) and evaluated as conditions while they are ignored by other web browsers. The syntax is based on the original SGML syntax which is the precursor to HTML. In this form it is invalid in HTML but standard browsers can handle it and do the meaningful thing. There exists an alternative form (also described by the Wikipedia page) which is valid HTML and still works as a conditional comment: <!--[if !supportLists]><!--> <!--<![endif]--> Just converting it to "<!--[if !supportLists]-->" causes it to lose its meaning: it won't be recognized any more but if you don't need to open it in MS Word again it doesn't matter. To answer your question: What should an HTML parser do? I think it depends on the use case. What XMLHTMLParser does now is wrong. To be correct, it could signal an error since it's invalid HTML (like an HTML validator would), or it could ignore the syntax error in an unknown element and continue parsing (like a browser would). Standard HTML processors choose the second approach and try to fix what they can to produce what they think is most meaningful. In this case they are smart enough to realize that it's probably meant to be a comment. To me, something like a resumable exception would be acceptable: one could make two wrappers, a strict one and a loose one, and choose the one that better fits the situation. (An XML parser, on the other hand, must always signal an exception and abort parsing in case of a syntax error, as per the specification.) Michal On 2.4.2020 19:16, PBKResearch wrote: Hello I have come across a strange problem in using XMLHTMLParser to parse some HTML files which use strange constructions. The input files have been generated by using MS Outlook to translate incoming messages, stored in .msg files, into HTML. The translated files display normally in Firefox, and the XMLHTMLParser appears to generate a normal parse, but examination of the parse output shows that the structure is distorted, and about half the input text has been put into one string node. Hunting around, I am convinced that the trouble lies in the presence in the HTML source of pairs of comment-like tags, with this form: <![if !supportLists]> <![endif]> since the distorted parse starts at the first occurrence of one of these tags. I don’t know whether these are meant to be a structure in some programming language – there is no reference to supportLists anywhere in the source code. When it is displayed in Firefox, use of the ‘Inspect Element’ option shows that the browser has treated them as comments, displaying them with the necessary dashes as e.g. <!--[if !supportLists]-->. I edited the source code by inserting the dashes, and XMLHTMLParser parsed everything correctly. I have a workaround, therefore; either edit in the dashes to make them into legitimate comments, or equivalently edit out these tags completely. The only question of general interest is whether XMLHTMLParser should be expected to handle these in some other way, rather than produce a distorted parse without comment. The Firefox approach, turning them into comments, seems sensible. It would also be interesting if anyone has any idea what is going on in the source code. Thanks for any help Peter Kenny