Hi Josh, just let you know that here [1] I used your approach for "markdown-it" js library and seems to work fine. So I still think we have some issue since the same didn't worked for "marked" library (or maybe I did something wrong at that time).
But my guess is "markdownit" is class that can be instantiated in AS3 while "marked" is a function (or at least I couldn't create as a class) but library has function methods that can be applied in an AS3 way. Anyway don't want to make you spend time on this, just want to expose here so we can refer to it if this issue comes up again at a later time. Thanks [1] https://github.com/apache/royale-asjs/tree/develop/examples/jewel/royale-website/src/main/royale El sáb., 18 abr. 2020 a las 1:09, Carlos Rovira (<[email protected]>) escribió: > Hi Josh, > > that's right I could be doing something wrong. What I really don't > understand is how setOptions can apply to a concrete marked object. > that's what I could not make it work, and I was supposing that was due to > the fact that is just a function, not a class, since to make a class I > can't have a method "marked" (that get 3 params and returns a string) > because "marked" is will be the reserved word for the constructor. > > Although if you say me you got this working I'll try again as I have some > time. > > Thanks Josh > > > > El vie., 17 abr. 2020 a las 23:53, Josh Tynjala (< > [email protected]>) escribió: > >> To be clear, I have successfully used the approach that I suggested with >> other libraries. >> >> Have you tried calling marked["setOptions"]() instead? I think that you >> should rule out the possibility that you were using the API incorrectly. >> >> -- >> Josh Tynjala >> Bowler Hat LLC <https://bowlerhat.dev> >> >> >> On Fri, Apr 17, 2020 at 2:40 PM Carlos Rovira <[email protected]> >> wrote: >> >> > Hi Josh, >> > >> > I already tried that approach (without the highlighter to avoid >> > complexity), and was not working. >> > I think what's happening is "marked" is not a class is just a function >> that >> > gets a string and returns a string, so a instance is created and >> destroyed >> > each time, but we are not able to store in a var or use "setOptions" to >> > affect that instance and then pass a string and get the new string. >> > >> > As I said I think we have a problem here or a limitation. Or at least is >> > what it seems to me. >> > >> > I was able to use other library (markdown-it) and for now I was able in >> > that one to apply configurations, still trying, but seems that one is >> > modeled in a "royale compatible way", but I think Royale should be able >> to >> > use any js lib out there to be really a js solution. >> > >> > Thanks for the suggestion and for taking a look :) >> > >> > Carlos >> > >> > >> > >> > >> > >> > >> > >> > El vie., 17 abr. 2020 a las 19:24, Josh Tynjala (< >> > [email protected]>) >> > escribió: >> > >> > > You may be able to do something like this instead: >> > > >> > > import marked.setOptions; >> > > import marked.Renderer; >> > > >> > > setOptions({ >> > > renderer: new Renderer(), >> > > highlight: function(code, language) { >> > > const hljs = require('highlight.js'); >> > > const validLanguage = hljs.getLanguage(language) ? language : >> > > 'plaintext'; >> > > return hljs.highlight(validLanguage, code).value; >> > > }, >> > > pedantic: false, >> > > gfm: true, >> > > breaks: false, >> > > sanitize: false, >> > > smartLists: true, >> > > smartypants: false, >> > > xhtml: false >> > > }); >> > > >> > > console.log(marked(markdownString)); >> > > >> > > >> > > -- >> > > Josh Tynjala >> > > Bowler Hat LLC <https://bowlerhat.dev> >> > > >> > > >> > > On Fri, Apr 17, 2020 at 9:54 AM Carlos Rovira < >> [email protected]> >> > > wrote: >> > > >> > > > Hi, >> > > > >> > > > I think we have some kind of limitation. trying multiple ways with >> the >> > > > "marked" js library and I couldn't objects in the marked library ( >> > > > 'setOptions' and the 'Renderer'). >> > > > >> > > > I was able just to declare as a function: >> > > > >> > > > package >> > > > { >> > > > /** >> > > > * @externs >> > > > */ >> > > > COMPILE::JS >> > > > public function marked(s:String):String { >> > > > return null; >> > > > }; >> > > > } >> > > > >> > > > but creating package "marked" and creating "setOptions" and >> "Renderer" >> > as >> > > > functions in that package was not working for me >> > > > >> > > > following library spec I'll need to create an object like this: >> > > > >> > > > options = { >> > > > renderer: new marked.Renderer(), >> > > > pedantic: false, >> > > > gfm: true, >> > > > breaks: false, >> > > > sanitize: false, >> > > > smartLists: true, >> > > > smartypants: false, >> > > > xhtml: false >> > > > }; >> > > > >> > > > Then pass to marked (extending the function: >> > > > >> > > > package >> > > > { >> > > > /** >> > > > * @externs >> > > > */ >> > > > COMPILE::JS >> > > > public function marked(s:String, options:Object = null, >> > > callback:Function = >> > > > null):String { >> > > > return null; >> > > > }; >> > > > } >> > > > >> > > > the callBack function is working, but the options object makes the >> > output >> > > > "undefined" >> > > > >> > > > I think the main problem is if the library has a method that receive >> > > params >> > > > and return values, that collision with AS3 constructor. >> > > > >> > > > We need to be able to create AS3 stub that allow us to do the >> following >> > > JS: >> > > > >> > > > // Create reference instance >> > > > const marked = require('marked'); >> > > > >> > > > // Set options >> > > > // `highlight` example uses `highlight.js` >> > > > marked.setOptions({ >> > > > renderer: new marked.Renderer(), >> > > > highlight: function(code, language) { >> > > > const hljs = require('highlight.js'); >> > > > const validLanguage = hljs.getLanguage(language) ? language : >> > > > 'plaintext'; >> > > > return hljs.highlight(validLanguage, code).value; >> > > > }, >> > > > pedantic: false, >> > > > gfm: true, >> > > > breaks: false, >> > > > sanitize: false, >> > > > smartLists: true, >> > > > smartypants: false, >> > > > xhtml: false >> > > > }); >> > > > >> > > > // Compile >> > > > console.log(marked(markdownString)); >> > > > >> > > > >> > > > I was thinking in use it in the basic way, but soon I'll need to use >> > the >> > > > highlight since our web uses code that needs to be highlighted. >> > > > >> > > > Anyway, just exposing the issue here. I'm going to try other >> markdown >> > lib >> > > > (although seems this is the most used) that has other API surface >> more >> > > > compatible with Royale until someone can take a look and see how we >> can >> > > > make this work on Royale. >> > > > >> > > > Thanks >> > > > >> > > > >> > > > >> > > > El mié., 15 abr. 2020 a las 20:54, Josh Tynjala (< >> > > > [email protected]>) >> > > > escribió: >> > > > >> > > > > Yes, it sounds like you have understood me correctly. >> > > > > >> > > > > -- >> > > > > Josh Tynjala >> > > > > Bowler Hat LLC <https://bowlerhat.dev> >> > > > > >> > > > > >> > > > > On Wed, Apr 15, 2020 at 11:00 AM Carlos Rovira < >> > > [email protected]> >> > > > > wrote: >> > > > > >> > > > > > Hi Josh, >> > > > > > >> > > > > > so if I understand correctly your words, for cases where the >> > function >> > > > is >> > > > > > called the same as the typedef and we have params and return >> values >> > > we >> > > > > need >> > > > > > to create a function as I did and then add the rest of >> functions in >> > > > > > separate files in the packaged named the same as the typedef? >> > > > > > >> > > > > > Regarding "marked" example, I got the initial example working, >> but >> > > I'm >> > > > > > trying to configure options that require create internal types >> in >> > > > marked, >> > > > > > and I'm not got it already. >> > > > > > >> > > > > > thanks >> > > > > > >> > > > > > >> > > > > > >> > > > > > El mié., 15 abr. 2020 a las 18:00, Josh Tynjala (< >> > > > > > [email protected]>) >> > > > > > escribió: >> > > > > > >> > > > > > > It's not ideal, but one way that I've found to define a >> typedef >> > > > > function >> > > > > > > that exposes "static" functions similar to a class is to put >> > those >> > > > > > "static" >> > > > > > > functions into a package with the same name as the root >> function. >> > > > > > > >> > > > > > > package >> > > > > > > { >> > > > > > > /** >> > > > > > > * @externs >> > > > > > > */ >> > > > > > > COMPILE::JS >> > > > > > > public function marked(s:String):String { >> > > > > > > return null; >> > > > > > > }; >> > > > > > > } >> > > > > > > >> > > > > > > package marked >> > > > > > > { >> > > > > > > /** >> > > > > > > * @externs >> > > > > > > * configure marked with options >> > > > > > > */ >> > > > > > > COMPILE::JS >> > > > > > > public function setOptions(o:Object):void {}; >> > > > > > > } >> > > > > > > >> > > > > > > Another option is to use dynamic access, but that won't be >> > checked >> > > by >> > > > > the >> > > > > > > compiler. >> > > > > > > >> > > > > > > marked["setOptions"]() >> > > > > > > >> > > > > > > -- >> > > > > > > Josh Tynjala >> > > > > > > Bowler Hat LLC <https://bowlerhat.dev> >> > > > > > > >> > > > > > > >> > > > > > > On Wed, Apr 15, 2020 at 7:39 AM Carlos Rovira < >> > > > [email protected] >> > > > > > >> > > > > > > wrote: >> > > > > > > >> > > > > > > > Hi Yishay, >> > > > > > > > >> > > > > > > > this finally worked (declaring as a function): >> > > > > > > > >> > > > > > > > package >> > > > > > > > { >> > > > > > > > /** >> > > > > > > > * @externs >> > > > > > > > */ >> > > > > > > > COMPILE::JS >> > > > > > > > public function marked(s:String):String { >> > > > > > > > return null; >> > > > > > > > }; >> > > > > > > > } >> > > > > > > > >> > > > > > > > I see two problems with this approach >> > > > > > > > >> > > > > > > > 1. inject_html is not valid, So I need other wrapper >> class >> > to >> > > > add >> > > > > > the >> > > > > > > > inject_html and use marked within, to make usable as a >> piece >> > > of >> > > > > code >> > > > > > > > (don't >> > > > > > > > like let the user to add the .js script to the html >> template >> > > > > > > > 2. Since is a function I can add other API functions like >> > > > > > setOptions. >> > > > > > > > ie: >> > > > > > > > >> > > > > > > > /** >> > > > > > > > * configure marked with options >> > > > > > > > */ >> > > > > > > > COMPILE::JS >> > > > > > > > public function setOptions(o:Object):void {}; >> > > > > > > > >> > > > > > > > Would like to be know how to declare this as a class to add >> > other >> > > > > > > function >> > > > > > > > APIs available in the js library >> > > > > > > > >> > > > > > > > >> > > > > > > > El mié., 15 abr. 2020 a las 11:14, Yishay Weiss (< >> > > > > > [email protected] >> > > > > > > >) >> > > > > > > > escribió: >> > > > > > > > >> > > > > > > > > You can just return null. >> > > > > > > > > >> > > > > > > > > I think the best thing for you to do is to go to one of >> the >> > > > > typedefs, >> > > > > > > > > build, and look at the generated sources. >> > > > > > > > > >> > > > > > > > > For example >> > > > > > > > > >> > > > > > > > > cd …\royale-typedefs >> > > > > > > > > cd google_maps >> > > > > > > > > ant; >> > > > > > > > > cd target\generated-sources >> > > > > > > > > >> > > > > > > > > Explore the .as classes there. >> > > > > > > > > >> > > > > > > > > Hope this helps. >> > > > > > > > > >> > > > > > > > > From: Carlos Rovira<mailto:[email protected]> >> > > > > > > > > Sent: Wednesday, April 15, 2020 12:05 PM >> > > > > > > > > To: Apache Royale Development<mailto: >> [email protected]> >> > > > > > > > > Subject: Re: Problems to create AS3 externs when JS >> library >> > > > returns >> > > > > > > some >> > > > > > > > > kind of object >> > > > > > > > > >> > > > > > > > > Hi, >> > > > > > > > > >> > > > > > > > > additional to this, is how we can create an extern >> function >> > > that >> > > > > > return >> > > > > > > > > something: >> > > > > > > > > >> > > > > > > > > public function someFoo(s:String):String {}; >> > > > > > > > > >> > > > > > > > > AS3 expect here some return value inside the brackets. So >> how >> > > we >> > > > > can >> > > > > > > > write >> > > > > > > > > this in AS3 without errors? >> > > > > > > > > >> > > > > > > > > thanks >> > > > > > > > > >> > > > > > > > > El mié., 15 abr. 2020 a las 10:48, Carlos Rovira (< >> > > > > > > > [email protected] >> > > > > > > > > >) >> > > > > > > > > escribió: >> > > > > > > > > >> > > > > > > > > > Hi, >> > > > > > > > > > >> > > > > > > > > > I'm playing with a js markdown library [1] to see if is >> an >> > > > option >> > > > > > to >> > > > > > > > make >> > > > > > > > > > a Royale website that load markdown and render it (I'm >> > > > > > experimenting >> > > > > > > to >> > > > > > > > > see >> > > > > > > > > > if we can't remove wordpress from our website and make a >> > web >> > > > > based >> > > > > > on >> > > > > > > > > > markdown similar to royale-docs) >> > > > > > > > > > >> > > > > > > > > > I'm having problems trying to create the extern as3 >> file. >> > I'm >> > > > > > trying >> > > > > > > > > > something similar to what we did with hljs. Here's my >> try: >> > > > > > > > > > >> > > > > > > > > > >> > > > > > > > > > package >> > > > > > > > > > { >> > > > > > > > > > /** >> > > > > > > > > > * marked js library >> > > > > > > > > > */ >> > > > > > > > > > COMPILE::JS >> > > > > > > > > > public class marked >> > > > > > > > > > { >> > > > > > > > > > /** >> > > > > > > > > > * >> > > > > > > > > > * <inject_html> >> > > > > > > > > > * <script src=" >> > > > https://cdn.jsdelivr.net/npm/marked/marked.min.js >> > > > > > > > > > "></script> >> > > > > > > > > > * </inject_html> >> > > > > > > > > > * >> > > > > > > > > > * @royaleignorecoercion String >> > > > > > > > > > */ >> > > > > > > > > > public function marked(s:String):String {}; >> > > > > > > > > > >> > > > > > > > > > /** >> > > > > > > > > > * configure marked with options >> > > > > > > > > > */ >> > > > > > > > > > public function setOptions(o:Object):void {}; >> > > > > > > > > > } >> > > > > > > > > > } >> > > > > > > > > > >> > > > > > > > > > The problem is >> > > > > > > > > > >> > > > > > > > > > public function marked(s:String):String {}; >> > > > > > > > > > >> > > > > > > > > > since the library gets a String and returns a String, >> but >> > AS3 >> > > > > > > > > constructors >> > > > > > > > > > must be void >> > > > > > > > > > >> > > > > > > > > > I remember Josh posted alternative ways to create this >> kind >> > > of >> > > > > AS3 >> > > > > > > > stubs, >> > > > > > > > > > but he posted in a paste apache that is now gone. >> > > > > > > > > > Anyway would be good to know if this is a limitation of >> AS3 >> > > > > > language >> > > > > > > > and >> > > > > > > > > > we can't create this kind of AS3 classes that model a JS >> > > > library >> > > > > > with >> > > > > > > > > > constructors that return something like a string. >> > > > > > > > > > >> > > > > > > > > > Thanks >> > > > > > > > > > >> > > > > > > > > > [1] https://marked.js.org/#/README.md#usage >> > > > > > > > > > >> > > > > > > > > > -- >> > > > > > > > > > Carlos Rovira >> > > > > > > > > > http://about.me/carlosrovira >> > > > > > > > > > >> > > > > > > > > > >> > > > > > > > > >> > > > > > > > > -- >> > > > > > > > > Carlos Rovira >> > > > > > > > > http://about.me/carlosrovira >> > > > > > > > > >> > > > > > > > > >> > > > > > > > >> > > > > > > > -- >> > > > > > > > Carlos Rovira >> > > > > > > > http://about.me/carlosrovira >> > > > > > > > >> > > > > > > >> > > > > > >> > > > > > >> > > > > > -- >> > > > > > Carlos Rovira >> > > > > > http://about.me/carlosrovira >> > > > > > >> > > > > >> > > > >> > > > >> > > > -- >> > > > Carlos Rovira >> > > > http://about.me/carlosrovira >> > > > >> > > >> > >> > >> > -- >> > Carlos Rovira >> > http://about.me/carlosrovira >> > >> > > > -- > Carlos Rovira > http://about.me/carlosrovira > > -- Carlos Rovira http://about.me/carlosrovira
