>>For a solid parser one literally needs to stream content character by character which is what is unfortunately slow in VFP.
Agreed, the 4GL Substr() carries heaps of baggage when sequentially processing string characters. Good idea using a proven NET wheel rather than re-inventing, but if asked, Chen probably can assist in VFP. FWIW, we already directl access VFP string memory using a short ASM snippet (provided by Chen) inlined in the VFP code, so definitely he could make a StrPeek() function to grab a character, or StrMemStart() and Peek() so you can manage the pointer yourself rather than repeatedly reading start of string memory. Based on previous stuff he did, this could improve performance by order/s of magnitude for sequential character processing.
"... They ne'er cared for us
yet: suffer us to famish, and their store-houses
crammed with grain; make edicts for usury, to
support usurers; repeal daily any wholesome act
established against the rich, and provide more
piercing statutes daily, to chain up and restrain
the poor. If the wars eat us not up, they will; and
there's all the love they bear us."
-- Shakespeare: Coriolanus, Act 1, scene 1