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 (<joshtynj...@bowlerhat.dev>) 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 <carlosrov...@apache.org> > 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 (< > > joshtynj...@bowlerhat.dev>) > > 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 <carlosrov...@apache.org > > > > > 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 (< > > > > joshtynj...@bowlerhat.dev>) > > > > 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 < > > > carlosrov...@apache.org> > > > > > 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 (< > > > > > > joshtynj...@bowlerhat.dev>) > > > > > > 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 < > > > > carlosrov...@apache.org > > > > > > > > > > > > > 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 (< > > > > > > yishayj...@hotmail.com > > > > > > > >) > > > > > > > > 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:carlosrov...@apache.org> > > > > > > > > > Sent: Wednesday, April 15, 2020 12:05 PM > > > > > > > > > To: Apache Royale Development<mailto:dev@royale.apache.org > > > > > > > > > > > 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 (< > > > > > > > > carlosrov...@apache.org > > > > > > > > > >) > > > > > > > > > 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