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 >