<html><head></head><body style="word-wrap: break-word; -webkit-nbsp-mode: space; -webkit-line-break: after-white-space; "><div><br></div><div>Hmm, so the code is in text form now?</div><div><br></div><div>E.g. Src = "foo() ->\n foo.\n"?</div><div><br></div><div>Well, you could do it that way:</div><div><br></div><div><div>Eshell V5.9  (abort with ^G)</div><div>1> Src = "add(X, Y) ->\n   X + Y.\n".</div><div>"add(X, Y) ->\n   X + Y.\n"</div><div>2> erl_scan:string(Src).</div><div>{ok,[{atom,1,add},...],3}</div><div>3> Ts = element(2,v(2)).</div><div>[{atom,1,add},</div><div> {'(',1},... {dot,2}]</div><div>4> erl_parse:parse_form(Ts).</div><div>{ok,{function,1,add,2,</div><div>              [{clause,1,</div><div>                       [{var,1,'X'},{var,1,'Y'}],</div><div>                       [],</div><div>                       [{op,2,'+',{var,2,'X'},{var,2,'Y'}}]}]}}</div><div>5> io:fwrite("~s~n", [erl_pp:form(element(2,v(4)))]).</div><div>add(X, Y) -></div><div>    X + Y.</div><div><br></div><div>ok</div></div><div><br></div><div>…but it will only work as long as you don't rely on the preprocessor for anything in the code, and only for one form at a time.</div><div><br></div><div>Full parsing, including preprocessing, from string input is not that easy. I did it in erlhive, but then used a ram_file_io_server (which I've long thought should be part of OTP):</div><div><br></div><div><a href="http://erlhive.svn.sourceforge.net/viewvc/erlhive/trunk/lib/erlhive/src/erlhive_compile.erl?revision=70&view=markup">http://erlhive.svn.sourceforge.net/viewvc/erlhive/trunk/lib/erlhive/src/erlhive_compile.erl?revision=70&view=markup</a> (line 123)</div><div><a href="http://erlhive.svn.sourceforge.net/viewvc/erlhive/trunk/lib/erlhive/src/erlhive_ram_file_io_server.erl?revision=57&view=markup">http://erlhive.svn.sourceforge.net/viewvc/erlhive/trunk/lib/erlhive/src/erlhive_ram_file_io_server.erl?revision=57&view=markup</a></div><div><br></div><div>BR,</div><div>Ulf W</div><br><div><div>On 11 May 2012, at 22:28, Roberto Ostinelli wrote:</div><br class="Apple-interchange-newline"><blockquote type="cite"><div>Thank you Ulf.</div><div><br></div><div>So i first should erl_parse:tokens/1, then erl_parse:parse/form/1 then use what you suggested?</div><br><br><div class="gmail_quote">On Fri, May 11, 2012 at 1:09 PM, Ulf Wiger <span dir="ltr"><<a href="mailto:ulf@feuerlabs.com" target="_blank">ulf@feuerlabs.com</a>></span> wrote:<br>
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div style="word-wrap:break-word"><div><br></div><div>You could take a look at how parse_trans does it:</div><div><br></div>
<div><a href="https://github.com/esl/parse_trans/blob/master/src/parse_trans_pp.erl#L65" target="_blank">https://github.com/esl/parse_trans/blob/master/src/parse_trans_pp.erl#L65</a></div><div><br></div><div>It uses erl_pp instead of erl_prettypr for reasons I have since forgotten</div>
<div>(it was something that, at one time, erl_prettypr had problems with, but</div><div>erl_pp was able to handle).</div><div><br></div><div>BR,</div><div>Ulf W</div><br><div><div><div class="h5"><div>On 11 May 2012, at 22:01, Roberto Ostinelli wrote:</div>
<br></div></div><blockquote type="cite"><div><div class="h5">Dear All,<div><br></div><div>is there a way to use prettypr on a list()?</div><div><br></div><div>I want to pretty format some source code, all I found is a Trapexit post showing this:</div>
<div><br></div><div><span style="font-family:'Trebuchet MS','Lucida Grande',Verdana,Arial,sans-serif;font-size:13px;line-height:16px;text-align:left;background-color:rgb(243,243,243)">F="tst.erl",</span></div>

<div><span style="font-family:'Trebuchet MS','Lucida Grande',Verdana,Arial,sans-serif;font-size:13px;line-height:16px;text-align:left;background-color:rgb(243,243,243)">erl_prettypr:format(erl_recomment:recomment_forms(element(2,epp_dodger:parse_file(F)),erl_comment_scan:file(F))).</span><br style="margin-top:0px;margin-right:0px;margin-bottom:0px;margin-left:0px;font-family:'Trebuchet MS','Lucida Grande',Verdana,Arial,sans-serif;font-size:13px;line-height:16px;text-align:left;background-color:rgb(243,243,243)">

</div><div style="text-align:left"><font face="'Trebuchet MS', 'Lucida Grande', Verdana, Arial, sans-serif"><span style="line-height:16px"><br></span></font></div><div style="text-align:left"><span style="text-align:-webkit-auto">Unfortunately this is based on parsing a file, and epp_dodger needs an IoDevice to parse code.</span></div>

<div style="text-align:left"><span style="text-align:-webkit-auto"><br></span></div><div style="text-align:left"><span style="text-align:-webkit-auto">Is there a way to do something similar but inputting the code as list() instead of parsing a file?</span></div>

<div style="text-align:left"><span style="text-align:-webkit-auto"><br></span></div><div style="text-align:left"><span style="text-align:-webkit-auto">r.</span></div></div></div>
_______________________________________________<br>erlang-questions mailing list<br><a href="mailto:erlang-questions@erlang.org" target="_blank">erlang-questions@erlang.org</a><br><a href="http://erlang.org/mailman/listinfo/erlang-questions" target="_blank">http://erlang.org/mailman/listinfo/erlang-questions</a><br>
</blockquote></div><br><div>
<div><div>Ulf Wiger, Co-founder & Developer Advocate, Feuerlabs Inc.</div><div><a href="http://feuerlabs.com/" target="_blank">http://feuerlabs.com</a></div></div><div><br></div><br>
</div>
<br></div></blockquote></div><br>
</blockquote></div><br><div apple-content-edited="true">
<div><div>Ulf Wiger, Co-founder & Developer Advocate, Feuerlabs Inc.</div><div><a href="http://feuerlabs.com">http://feuerlabs.com</a></div></div><div><br></div><br class="Apple-interchange-newline">
</div>
<br></body></html>