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
>

Reply via email to