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