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
>

Reply via email to