Hi Josh,

that's right I could be doing something wrong. What I really don't
understand is how setOptions can apply to a concrete marked object.
that's what I could not make it work, and I was supposing that was due to
the fact that is just a function, not a class, since to make a class I
can't have a method "marked" (that get 3 params and returns a string)
because "marked" is will be the reserved word for the constructor.

Although if you say me you got this working I'll try again as I have some
time.

Thanks Josh



El vie., 17 abr. 2020 a las 23:53, Josh Tynjala (<joshtynj...@bowlerhat.dev>)
escribió:

> To be clear, I have successfully used the approach that I suggested with
> other libraries.
>
> Have you tried calling marked["setOptions"]() instead? I think that you
> should rule out the possibility that you were using the API incorrectly.
>
> --
> Josh Tynjala
> Bowler Hat LLC <https://bowlerhat.dev>
>
>
> On Fri, Apr 17, 2020 at 2:40 PM Carlos Rovira <carlosrov...@apache.org>
> wrote:
>
> > Hi Josh,
> >
> > I already tried that approach (without the highlighter to avoid
> > complexity), and was not working.
> > I think what's happening is "marked" is not a class is just a function
> that
> > gets a string and returns a string, so a instance is created and
> destroyed
> > each time, but we are not able to store in a var or use "setOptions" to
> > affect that instance and then pass a string and get the new string.
> >
> > As I said I think we have a problem here or a limitation. Or at least is
> > what it seems to me.
> >
> > I was able to use other library (markdown-it) and for now I was able in
> > that one to apply configurations, still trying, but seems that one is
> > modeled in a "royale compatible way", but I think Royale should be able
> to
> > use any js lib out there to be really a js solution.
> >
> > Thanks for the suggestion and for taking a look :)
> >
> > Carlos
> >
> >
> >
> >
> >
> >
> >
> > El vie., 17 abr. 2020 a las 19:24, Josh Tynjala (<
> > joshtynj...@bowlerhat.dev>)
> > escribió:
> >
> > > You may be able to do something like this instead:
> > >
> > > import marked.setOptions;
> > > import marked.Renderer;
> > >
> > > setOptions({
> > >   renderer: new Renderer(),
> > >   highlight: function(code, language) {
> > >     const hljs = require('highlight.js');
> > >     const validLanguage = hljs.getLanguage(language) ? language :
> > > 'plaintext';
> > >     return hljs.highlight(validLanguage, code).value;
> > >   },
> > >   pedantic: false,
> > >   gfm: true,
> > >   breaks: false,
> > >   sanitize: false,
> > >   smartLists: true,
> > >   smartypants: false,
> > >   xhtml: false
> > > });
> > >
> > > console.log(marked(markdownString));
> > >
> > >
> > > --
> > > Josh Tynjala
> > > Bowler Hat LLC <https://bowlerhat.dev>
> > >
> > >
> > > On Fri, Apr 17, 2020 at 9:54 AM Carlos Rovira <carlosrov...@apache.org
> >
> > > wrote:
> > >
> > > > Hi,
> > > >
> > > > I think we have some kind of limitation. trying multiple ways with
> the
> > > > "marked" js library and I couldn't objects in the marked library (
> > > > 'setOptions' and the 'Renderer').
> > > >
> > > > I was able just to declare as a function:
> > > >
> > > > package
> > > > {
> > > > /**
> > > > * @externs
> > > > */
> > > > COMPILE::JS
> > > > public function marked(s:String):String {
> > > > return null;
> > > > };
> > > > }
> > > >
> > > > but creating package "marked" and creating "setOptions" and
> "Renderer"
> > as
> > > > functions in that package was not working for me
> > > >
> > > > following library spec I'll need to create an object like this:
> > > >
> > > > options = {
> > > > renderer: new marked.Renderer(),
> > > > pedantic: false,
> > > > gfm: true,
> > > > breaks: false,
> > > > sanitize: false,
> > > > smartLists: true,
> > > > smartypants: false,
> > > > xhtml: false
> > > > };
> > > >
> > > > Then pass to marked (extending the function:
> > > >
> > > > package
> > > > {
> > > > /**
> > > > * @externs
> > > > */
> > > > COMPILE::JS
> > > > public function marked(s:String, options:Object = null,
> > > callback:Function =
> > > > null):String {
> > > > return null;
> > > > };
> > > > }
> > > >
> > > > the callBack function is working, but the options object makes the
> > output
> > > > "undefined"
> > > >
> > > > I think the main problem is if the library has a method that receive
> > > params
> > > > and return values, that collision with AS3 constructor.
> > > >
> > > > We need to be able to create AS3 stub that allow us to do the
> following
> > > JS:
> > > >
> > > > // Create reference instance
> > > > const marked = require('marked');
> > > >
> > > > // Set options
> > > > // `highlight` example uses `highlight.js`
> > > > marked.setOptions({
> > > >   renderer: new marked.Renderer(),
> > > >   highlight: function(code, language) {
> > > >     const hljs = require('highlight.js');
> > > >     const validLanguage = hljs.getLanguage(language) ? language :
> > > > 'plaintext';
> > > >     return hljs.highlight(validLanguage, code).value;
> > > >   },
> > > >   pedantic: false,
> > > >   gfm: true,
> > > >   breaks: false,
> > > >   sanitize: false,
> > > >   smartLists: true,
> > > >   smartypants: false,
> > > >   xhtml: false
> > > > });
> > > >
> > > > // Compile
> > > > console.log(marked(markdownString));
> > > >
> > > >
> > > > I was thinking in use it in the basic way, but soon I'll need to use
> > the
> > > > highlight since our web uses code that needs to be highlighted.
> > > >
> > > > Anyway, just exposing the issue here. I'm going to try other markdown
> > lib
> > > > (although seems this is the most used) that has other API surface
> more
> > > > compatible with Royale until someone can take a look and see how we
> can
> > > > make this work on Royale.
> > > >
> > > > Thanks
> > > >
> > > >
> > > >
> > > > El mié., 15 abr. 2020 a las 20:54, Josh Tynjala (<
> > > > joshtynj...@bowlerhat.dev>)
> > > > escribió:
> > > >
> > > > > Yes, it sounds like you have understood me correctly.
> > > > >
> > > > > --
> > > > > Josh Tynjala
> > > > > Bowler Hat LLC <https://bowlerhat.dev>
> > > > >
> > > > >
> > > > > On Wed, Apr 15, 2020 at 11:00 AM Carlos Rovira <
> > > carlosrov...@apache.org>
> > > > > wrote:
> > > > >
> > > > > > Hi Josh,
> > > > > >
> > > > > > so if I understand correctly your words, for cases where the
> > function
> > > > is
> > > > > > called the same as the typedef and we have params and return
> values
> > > we
> > > > > need
> > > > > > to create a function as I did and then add the rest of functions
> in
> > > > > > separate files in the packaged named the same as the typedef?
> > > > > >
> > > > > > Regarding "marked" example, I got the initial example working,
> but
> > > I'm
> > > > > > trying to configure options that require create internal types in
> > > > marked,
> > > > > > and I'm not got it already.
> > > > > >
> > > > > > thanks
> > > > > >
> > > > > >
> > > > > >
> > > > > > El mié., 15 abr. 2020 a las 18:00, Josh Tynjala (<
> > > > > > joshtynj...@bowlerhat.dev>)
> > > > > > escribió:
> > > > > >
> > > > > > > It's not ideal, but one way that I've found to define a typedef
> > > > > function
> > > > > > > that exposes "static" functions similar to a class is to put
> > those
> > > > > > "static"
> > > > > > > functions into a package with the same name as the root
> function.
> > > > > > >
> > > > > > > package
> > > > > > > {
> > > > > > > /**
> > > > > > > * @externs
> > > > > > > */
> > > > > > > COMPILE::JS
> > > > > > > public function marked(s:String):String {
> > > > > > > return null;
> > > > > > > };
> > > > > > > }
> > > > > > >
> > > > > > > package marked
> > > > > > > {
> > > > > > > /**
> > > > > > > * @externs
> > > > > > > * configure marked with options
> > > > > > > */
> > > > > > > COMPILE::JS
> > > > > > > public function setOptions(o:Object):void {};
> > > > > > > }
> > > > > > >
> > > > > > > Another option is to use dynamic access, but that won't be
> > checked
> > > by
> > > > > the
> > > > > > > compiler.
> > > > > > >
> > > > > > > marked["setOptions"]()
> > > > > > >
> > > > > > > --
> > > > > > > Josh Tynjala
> > > > > > > Bowler Hat LLC <https://bowlerhat.dev>
> > > > > > >
> > > > > > >
> > > > > > > On Wed, Apr 15, 2020 at 7:39 AM Carlos Rovira <
> > > > carlosrov...@apache.org
> > > > > >
> > > > > > > wrote:
> > > > > > >
> > > > > > > > Hi Yishay,
> > > > > > > >
> > > > > > > > this finally worked (declaring as a function):
> > > > > > > >
> > > > > > > > package
> > > > > > > > {
> > > > > > > > /**
> > > > > > > > * @externs
> > > > > > > > */
> > > > > > > > COMPILE::JS
> > > > > > > > public function marked(s:String):String {
> > > > > > > > return null;
> > > > > > > > };
> > > > > > > > }
> > > > > > > >
> > > > > > > > I see two problems with this approach
> > > > > > > >
> > > > > > > >    1.  inject_html is not valid, So I need other wrapper
> class
> > to
> > > > add
> > > > > > the
> > > > > > > >    inject_html and use marked within, to make usable as a
> piece
> > > of
> > > > > code
> > > > > > > > (don't
> > > > > > > >    like let the user to add the .js script to the html
> template
> > > > > > > >    2. Since is a function I can add other API functions like
> > > > > > setOptions.
> > > > > > > > ie:
> > > > > > > >
> > > > > > > > /**
> > > > > > > > * configure marked with options
> > > > > > > > */
> > > > > > > > COMPILE::JS
> > > > > > > > public function setOptions(o:Object):void {};
> > > > > > > >
> > > > > > > > Would like to be know how to declare this as a class to add
> > other
> > > > > > > function
> > > > > > > > APIs available in the js library
> > > > > > > >
> > > > > > > >
> > > > > > > > El mié., 15 abr. 2020 a las 11:14, Yishay Weiss (<
> > > > > > yishayj...@hotmail.com
> > > > > > > >)
> > > > > > > > escribió:
> > > > > > > >
> > > > > > > > > You can just return null.
> > > > > > > > >
> > > > > > > > > I think the best thing for you to do is to go to one of the
> > > > > typedefs,
> > > > > > > > > build, and look at the generated sources.
> > > > > > > > >
> > > > > > > > > For example
> > > > > > > > >
> > > > > > > > > cd …\royale-typedefs
> > > > > > > > > cd google_maps
> > > > > > > > > ant;
> > > > > > > > > cd target\generated-sources
> > > > > > > > >
> > > > > > > > > Explore the .as classes there.
> > > > > > > > >
> > > > > > > > > Hope this helps.
> > > > > > > > >
> > > > > > > > > From: Carlos Rovira<mailto:carlosrov...@apache.org>
> > > > > > > > > Sent: Wednesday, April 15, 2020 12:05 PM
> > > > > > > > > To: Apache Royale Development<mailto:dev@royale.apache.org
> >
> > > > > > > > > Subject: Re: Problems to create AS3 externs when JS library
> > > > returns
> > > > > > > some
> > > > > > > > > kind of object
> > > > > > > > >
> > > > > > > > > Hi,
> > > > > > > > >
> > > > > > > > > additional to this, is how we can create an extern function
> > > that
> > > > > > return
> > > > > > > > > something:
> > > > > > > > >
> > > > > > > > > public function someFoo(s:String):String {};
> > > > > > > > >
> > > > > > > > > AS3 expect here some return value inside the brackets. So
> how
> > > we
> > > > > can
> > > > > > > > write
> > > > > > > > > this in AS3 without errors?
> > > > > > > > >
> > > > > > > > > thanks
> > > > > > > > >
> > > > > > > > > El mié., 15 abr. 2020 a las 10:48, Carlos Rovira (<
> > > > > > > > carlosrov...@apache.org
> > > > > > > > > >)
> > > > > > > > > escribió:
> > > > > > > > >
> > > > > > > > > > Hi,
> > > > > > > > > >
> > > > > > > > > > I'm playing with a js markdown library [1] to see if is
> an
> > > > option
> > > > > > to
> > > > > > > > make
> > > > > > > > > > a Royale website that load markdown and render it (I'm
> > > > > > experimenting
> > > > > > > to
> > > > > > > > > see
> > > > > > > > > > if we can't remove wordpress from our website and make a
> > web
> > > > > based
> > > > > > on
> > > > > > > > > > markdown similar to royale-docs)
> > > > > > > > > >
> > > > > > > > > > I'm having problems trying to create the extern as3 file.
> > I'm
> > > > > > trying
> > > > > > > > > > something similar to what we did with hljs. Here's my
> try:
> > > > > > > > > >
> > > > > > > > > >
> > > > > > > > > > package
> > > > > > > > > > {
> > > > > > > > > > /**
> > > > > > > > > > * marked js library
> > > > > > > > > > */
> > > > > > > > > > COMPILE::JS
> > > > > > > > > > public class marked
> > > > > > > > > > {
> > > > > > > > > > /**
> > > > > > > > > > *
> > > > > > > > > > * <inject_html>
> > > > > > > > > > * <script src="
> > > > https://cdn.jsdelivr.net/npm/marked/marked.min.js
> > > > > > > > > > "></script>
> > > > > > > > > > * </inject_html>
> > > > > > > > > > *
> > > > > > > > > > * @royaleignorecoercion String
> > > > > > > > > > */
> > > > > > > > > > public function marked(s:String):String {};
> > > > > > > > > >
> > > > > > > > > > /**
> > > > > > > > > > * configure marked with options
> > > > > > > > > > */
> > > > > > > > > > public function setOptions(o:Object):void {};
> > > > > > > > > > }
> > > > > > > > > > }
> > > > > > > > > >
> > > > > > > > > > The problem is
> > > > > > > > > >
> > > > > > > > > > public function marked(s:String):String {};
> > > > > > > > > >
> > > > > > > > > > since the library gets a String and returns a String, but
> > AS3
> > > > > > > > > constructors
> > > > > > > > > > must be void
> > > > > > > > > >
> > > > > > > > > > I remember Josh posted alternative ways to create this
> kind
> > > of
> > > > > AS3
> > > > > > > > stubs,
> > > > > > > > > > but he posted in a paste apache that is now gone.
> > > > > > > > > > Anyway would be good to know if this is a limitation of
> AS3
> > > > > > language
> > > > > > > > and
> > > > > > > > > > we can't create this kind of AS3 classes that model a JS
> > > > library
> > > > > > with
> > > > > > > > > > constructors that return something like a string.
> > > > > > > > > >
> > > > > > > > > > Thanks
> > > > > > > > > >
> > > > > > > > > > [1] https://marked.js.org/#/README.md#usage
> > > > > > > > > >
> > > > > > > > > > --
> > > > > > > > > > Carlos Rovira
> > > > > > > > > > http://about.me/carlosrovira
> > > > > > > > > >
> > > > > > > > > >
> > > > > > > > >
> > > > > > > > > --
> > > > > > > > > Carlos Rovira
> > > > > > > > > http://about.me/carlosrovira
> > > > > > > > >
> > > > > > > > >
> > > > > > > >
> > > > > > > > --
> > > > > > > > Carlos Rovira
> > > > > > > > http://about.me/carlosrovira
> > > > > > > >
> > > > > > >
> > > > > >
> > > > > >
> > > > > > --
> > > > > > Carlos Rovira
> > > > > > http://about.me/carlosrovira
> > > > > >
> > > > >
> > > >
> > > >
> > > > --
> > > > Carlos Rovira
> > > > http://about.me/carlosrovira
> > > >
> > >
> >
> >
> > --
> > Carlos Rovira
> > http://about.me/carlosrovira
> >
>


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

Reply via email to