You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@royale.apache.org by Carlos Rovira <ca...@apache.org> on 2020/04/15 08:48:21 UTC

Problems to create AS3 externs when JS library returns some kind of object

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

Re: Problems to create AS3 externs when JS library returns some kind of object

Posted by Carlos Rovira <ca...@apache.org>.
Hi Yishay,

maybe not. I'm trying, so that could be wrong. Can you show other way?
thanks

El mié., 15 abr. 2020 a las 11:04, Yishay Weiss (<yi...@hotmail.com>)
escribió:

> I’m confused. Why does marked() need to be a constructor?
>
>
>
> *From:* Carlos Rovira <ca...@apache.org>
> *Sent:* Wednesday, April 15, 2020 11:48:21 AM
> *To:* Apache Royale Development <de...@royale.apache.org>
> *Subject:* Problems to create AS3 externs when JS library returns some
> kind of object
>
>
>
> 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
>
> *From: *Carlos Rovira <ca...@apache.org>
> *Sent: *Wednesday, April 15, 2020 11:48 AM
> *To: *Apache Royale Development <de...@royale.apache.org>
> *Subject: *Problems to create AS3 externs when JS library returns some
> kind of object
>
>
>
> 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

RE: Problems to create AS3 externs when JS library returns some kind of object

Posted by Yishay Weiss <yi...@hotmail.com>.
I’m confused. Why does marked() need to be a constructor?


From: Carlos Rovira <ca...@apache.org>
Sent: Wednesday, April 15, 2020 11:48:21 AM
To: Apache Royale Development <de...@royale.apache.org>
Subject: Problems to create AS3 externs when JS library returns some kind of object

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<https://cdn.jsdelivr.net/npm/marked/marked.min.js%22%3e%3c/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
From: Carlos Rovira<ma...@apache.org>
Sent: Wednesday, April 15, 2020 11:48 AM
To: Apache Royale Development<ma...@royale.apache.org>
Subject: Problems to create AS3 externs when JS library returns some kind of object

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<https://cdn.jsdelivr.net/npm/marked/marked.min.js%22%3e%3c/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


RE: Problems to create AS3 externs when JS library returns some kind of object

Posted by Yishay Weiss <yi...@hotmail.com>.
In the wrapper class, that is.

________________________________
From: Yishay Weiss <yi...@hotmail.com>
Sent: Wednesday, April 15, 2020 6:17:38 PM
To: dev@royale.apache.org <de...@royale.apache.org>
Subject: RE: Problems to create AS3 externs when JS library returns some kind of object


Maybe you can create a static function that returns an instance of marked.



From: Carlos Rovira<ma...@apache.org>
Sent: Wednesday, April 15, 2020 5:39 PM
To: Apache Royale Development<ma...@royale.apache.org>
Subject: Re: Problems to create AS3 externs when JS library returns some kind of object



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 (<yi...@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<ma...@apache.org>
> Sent: Wednesday, April 15, 2020 12:05 PM
> To: Apache Royale Development<ma...@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 (<carlosrovira@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



RE: Problems to create AS3 externs when JS library returns some kind of object

Posted by Yishay Weiss <yi...@hotmail.com>.
Maybe you can create a static function that returns an instance of marked.

From: Carlos Rovira<ma...@apache.org>
Sent: Wednesday, April 15, 2020 5:39 PM
To: Apache Royale Development<ma...@royale.apache.org>
Subject: Re: Problems to create AS3 externs when JS library returns some kind of object

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 (<yi...@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<ma...@apache.org>
> Sent: Wednesday, April 15, 2020 12:05 PM
> To: Apache Royale Development<ma...@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 (<carlosrovira@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


Re: Problems to create AS3 externs when JS library returns some kind of object

Posted by Carlos Rovira <ca...@apache.org>.
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 (<ca...@apache.org>)
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 (<
> joshtynjala@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 <ca...@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 (<
>> > joshtynjala@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 <
>> carlosrovira@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 (<
>> > > > joshtynjala@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 <
>> > > carlosrovira@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 (<
>> > > > > > joshtynjala@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 <
>> > > > carlosrovira@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 (<
>> > > > > > yishayjobs@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<ma...@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 (<
>> > > > > > > > carlosrovira@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
>
>

-- 
Carlos Rovira
http://about.me/carlosrovira

Re: Problems to create AS3 externs when JS library returns some kind of object

Posted by Carlos Rovira <ca...@apache.org>.
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 (<jo...@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 <ca...@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 (<
> > joshtynjala@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 <carlosrovira@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 (<
> > > > joshtynjala@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 <
> > > carlosrovira@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 (<
> > > > > > joshtynjala@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 <
> > > > carlosrovira@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 (<
> > > > > > yishayjobs@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<ma...@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 (<
> > > > > > > > carlosrovira@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

Re: Problems to create AS3 externs when JS library returns some kind of object

Posted by Josh Tynjala <jo...@bowlerhat.dev>.
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 <ca...@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 (<
> joshtynjala@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 <ca...@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 (<
> > > joshtynjala@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 <
> > carlosrovira@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 (<
> > > > > joshtynjala@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 <
> > > carlosrovira@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 (<
> > > > > yishayjobs@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<ma...@apache.org>
> > > > > > > > Sent: Wednesday, April 15, 2020 12:05 PM
> > > > > > > > To: Apache Royale Development<ma...@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 (<
> > > > > > > carlosrovira@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
>

Re: Problems to create AS3 externs when JS library returns some kind of object

Posted by Carlos Rovira <ca...@apache.org>.
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 (<jo...@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 <ca...@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 (<
> > joshtynjala@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 <
> carlosrovira@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 (<
> > > > joshtynjala@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 <
> > carlosrovira@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 (<
> > > > yishayjobs@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<ma...@apache.org>
> > > > > > > Sent: Wednesday, April 15, 2020 12:05 PM
> > > > > > > To: Apache Royale Development<ma...@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 (<
> > > > > > carlosrovira@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

Re: Problems to create AS3 externs when JS library returns some kind of object

Posted by Josh Tynjala <jo...@bowlerhat.dev>.
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 <ca...@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 (<
> joshtynjala@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 <ca...@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 (<
> > > joshtynjala@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 <
> carlosrovira@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 (<
> > > yishayjobs@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<ma...@apache.org>
> > > > > > Sent: Wednesday, April 15, 2020 12:05 PM
> > > > > > To: Apache Royale Development<ma...@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 (<
> > > > > carlosrovira@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
>

Re: Problems to create AS3 externs when JS library returns some kind of object

Posted by Carlos Rovira <ca...@apache.org>.
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 (<jo...@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 <ca...@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 (<
> > joshtynjala@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 <carlosrovira@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 (<
> > yishayjobs@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<ma...@apache.org>
> > > > > Sent: Wednesday, April 15, 2020 12:05 PM
> > > > > To: Apache Royale Development<ma...@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 (<
> > > > carlosrovira@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

Re: Problems to create AS3 externs when JS library returns some kind of object

Posted by Josh Tynjala <jo...@bowlerhat.dev>.
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 <ca...@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 (<
> joshtynjala@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 <ca...@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 (<
> yishayjobs@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<ma...@apache.org>
> > > > Sent: Wednesday, April 15, 2020 12:05 PM
> > > > To: Apache Royale Development<ma...@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 (<
> > > carlosrovira@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
>

Re: Problems to create AS3 externs when JS library returns some kind of object

Posted by Carlos Rovira <ca...@apache.org>.
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 (<jo...@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 <ca...@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 (<yishayjobs@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<ma...@apache.org>
> > > Sent: Wednesday, April 15, 2020 12:05 PM
> > > To: Apache Royale Development<ma...@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 (<
> > carlosrovira@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

Re: Problems to create AS3 externs when JS library returns some kind of object

Posted by Josh Tynjala <jo...@bowlerhat.dev>.
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 <ca...@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 (<yi...@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<ma...@apache.org>
> > Sent: Wednesday, April 15, 2020 12:05 PM
> > To: Apache Royale Development<ma...@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 (<
> carlosrovira@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
>

Re: Problems to create AS3 externs when JS library returns some kind of object

Posted by Josh Tynjala <jo...@bowlerhat.dev>.
We really should modify the compiler to allow <inject_html> to be declared
on any symbol directly inside a package block. In other words, you should
be able to add <inject_html> to a class instead of its constructor (for
backwards compatibility, we should continue to allow <inject_html> on a
constructor too). Similarly, it should be possible to add <inject_html> to
an interface, function, or variable declared in a package.

--
Josh Tynjala
Bowler Hat LLC <https://bowlerhat.dev>


On Wed, Apr 15, 2020 at 7:39 AM Carlos Rovira <ca...@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 (<yi...@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<ma...@apache.org>
> > Sent: Wednesday, April 15, 2020 12:05 PM
> > To: Apache Royale Development<ma...@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 (<
> carlosrovira@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
>

Re: Problems to create AS3 externs when JS library returns some kind of object

Posted by Carlos Rovira <ca...@apache.org>.
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 (<yi...@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<ma...@apache.org>
> Sent: Wednesday, April 15, 2020 12:05 PM
> To: Apache Royale Development<ma...@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 (<carlosrovira@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

RE: Problems to create AS3 externs when JS library returns some kind of object

Posted by Yishay Weiss <yi...@hotmail.com>.
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<ma...@apache.org>
Sent: Wednesday, April 15, 2020 12:05 PM
To: Apache Royale Development<ma...@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 (<ca...@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


Re: Problems to create AS3 externs when JS library returns some kind of object

Posted by Carlos Rovira <ca...@apache.org>.
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 (<ca...@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