May 14, 2017 How to write parser? | ||||
---|---|---|---|---|
| ||||
I am trying to learn how to write text parser. I have example doc with follow format: #Header my header text ##SubHeader my sub header text ###Sub3Header my sub 3 text #Header21 my header2 text ##SubHeader21 my header2 text ###SubHeader22 my header3 text I would like to wrap all level(#) tags to HTML div's, to get it's look like: <div 1> #Header my header text <div 2> ##SubHeader my sub header text ###Sub3Header my sub 3 text </div 3> </div 2> </div 1> <div 1>#Header21 my header2 text <div 2>##SubHeader21 my header2 text <div 3>###SubHeader22 my header3 text </div 3> </div 2> </div 1> It's seems that I wrong understand parser logic. I am trying to do it's in next way: bool isH1Open; bool isH2Open; bool isH3Open; string newcontent; foreach(line; content.lineSplitter) { if(line.length > 3) // to prevent access to line < 3 symblos { if(!isH1Open && line[0] == '#' && line[1] != '#') { isH1Open = true; line = `<div 1>` ~ "\n" ~ line ; newcontent ~= line; continue; } if(isH2Open && line[1] == '#' && line[2] != '#') { isH2Open = false; line = "\n" ~ `</div 2>` ~ "\n"; newcontent ~= line; continue; } if(isH1Open && line[0] == '#' && line[1] != '#') { isH1Open = false; line = "\n" ~ `</div 1>` ~ "\n"; newcontent ~= line; continue; } if(!isH2Open && line[1] == '#' && line[2] != '#') { isH2Open = true; line = "\n" ~ `<div 2>` ~ "\n" ~ line ; newcontent ~= line; continue; } } But I am getting wrong output: <div 1> #Header <div 2> ##SubHeader </div 1> </div 2> <div 1> #Header31 <div 2> ##SubHeader31 it's there any better way to parse such format? |
May 15, 2017 Re: How to write parser? | ||||
---|---|---|---|---|
| ||||
Posted in reply to Suliman | On Sunday, 14 May 2017 at 19:00:09 UTC, Suliman wrote: > I am trying to learn how to write text parser. I have example doc with follow format: > > #Header > my header text > > ##SubHeader > my sub header text > > it's there any better way to parse such format? Ready markdown Pegged based parser: https://github.com/PhilippeSigaud/Pegged/blob/master/pegged/examples/markdown.d |
Copyright © 1999-2021 by the D Language Foundation