Re: Implement additional Hints for existing Language
geertjan wielenga <[email protected]>
| Newsgroups | gmane.comp.java.netbeans.modules.openide.devel |
|---|---|
| Organization | Oracle Corporation |
| Message-ID | <[email protected]> |
I'm still trying to understand what it is you're trying to do. How
different is what you want to what the HTML editor already has?
On 9-10-2016 14:20, Alex Muthmann wrote:
>> But that's my question. Do you really need your own Language at all?
> No, I'd be happy to skip the complete "implement a Language foobar" step.
>
>> ...and even embed one
>> Language into another.
> No I can't cause I have no clue, how this would be possible and
> neither the Netbeans Sources nor Google provides any concrete example
> here :(
http://bits.netbeans.org/8.0/javadoc/org-netbeans-modules-lexer/org/netbeans/spi/lexer/LanguageEmbedding.html
http://www.programcreek.com/java-api-examples/index.php?api=org.netbeans.spi.lexer.LanguageEmbedding
https://blogs.oracle.com/geertjan/entry/html_embedding_for_freemarker
Plus, many more.
Again, don't know what you need, so don't know if this helps, but I
think you could investigate that approach.
Gj
>
> Am 2016-10-09 14:11, schrieb geertjan wielenga:
>> On 9-10-2016 14:08, Alex Muthmann wrote:
>>>> Really look in the source code, see the
>>>> 'html.editor\src\org\netbeans\modules\html\editor\hints' package for
>>>> example, i.e., in the 'html.editor' module.
>>> Sorry, no offense but this does not help me :( I already had a
>>> deeper look into the source code, otherwise I'd not ask here.
>>>
>>> All Rules/Hints in
>>> html.editor\src\org\netbeans\modules\html\editor\hints are used in
>>> the HTMLLanguage and NOT in an extension of it. I really can't see
>>> any option to implement a Rule without a matching Language providing
>>> it.
>>
>> But that's my question. Do you really need your own Language at all?
>>
>> Or do you have additional elements etc to add to the existing HTML
>> Editor in NetBeans? I.e., you can add elements etc and even embed one
>> Language into another.
>>
>> Gj
>>
>>
>>
>>>
>>> Am 2016-10-09 13:51, schrieb geertjan wielenga:
>>>> On 9-10-2016 13:49, Alex Muthmann wrote:
>>>>> Can you give me an example for this approach? I already had a look
>>>>> into this, but I was only able to find the possiblity to implement
>>>>> a "Java Hint".
>>>>
>>>> Really look in the source code, see the
>>>> 'html.editor\src\org\netbeans\modules\html\editor\hints' package for
>>>> example, i.e., in the 'html.editor' module.
>>>>
>>>>> Also the Wizard for Module Development does not provide anything
>>>>> that looks even vaguely correct.
>>>>
>>>> There are hundreds of things that can be done with NetBeans APIs that
>>>> are not supported by the wizards...
>>>>
>>>> Gj
>>>>
>>>>>
>>>>> Am 2016-10-09 13:38, schrieb geertjan wielenga:
>>>>>> Why not extend the existing HTML editor instead of creating a
>>>>>> Sightly
>>>>>> editor? I.e., maybe don't create SightlyLanguage at all and use the
>>>>>> HTML extension points in NetBeans? You can embed one language in
>>>>>> another, if needed.
>>>>>>
>>>>>> Gj
>>>>>>
>>>>>> On 9-10-2016 13:27, Alex Muthmann wrote:
>>>>>>> Ok :)
>>>>>>>
>>>>>>> Some time ago, Adobe published a new Templating Language
>>>>>>> (Sightly) which is afaik currently only used in Adobe's
>>>>>>> Experience Manager (AEM). Most of the work is done in html files
>>>>>>> which may contain special tags evaluated by the Sightly-Compiler
>>>>>>> (e.g. <div data-sly-test='${foobar}>)
>>>>>>>
>>>>>>> To simplify work, I implemented a Plugin for Netbeans that
>>>>>>> provides Autocompletion for those tags
>>>>>>> (http://wcm.io/tooling/netbeans/sightly/). But as I've got some
>>>>>>> spare time now, I'd like to extend the plugin to provide
>>>>>>> additional Hints for wrong tags, invalid code etc.
>>>>>>>
>>>>>>> Netbeans uses a combination of the interface GsfLanguage and
>>>>>>> HintProvider to supply hints. The Language has to be annotated
>>>>>>> with LanguageRegistration and a matching mimeType:
>>>>>>>
>>>>>>> @LanguageRegistration(mimeType="text/html", useMultiview = true)
>>>>>>>
>>>>>>> As Sightly is a mere extension of the featureset of the
>>>>>>> Html-Language (implemented in
>>>>>>> org.netbeans.modules.html.editor.gsf.HtmlLanguage), I need to
>>>>>>> register my Language "SightlyLanguage" on the mimeType
>>>>>>> "text/html". At this point I'd expect Netbeans to use both
>>>>>>> HintProviders provided by HtmlLanguage AND SightlyLanguage but
>>>>>>> somehow only the later one is used.
>>>>>>> I did some research here and found the "getLanguageByMimeType"
>>>>>>> method in org.netbeans.modules.csl.core.LanguageRegistry which
>>>>>>> only returns a single Language for a given mimetype. Based on
>>>>>>> this finding, my assumption is, that Netbeans does not allow
>>>>>>> multiple Language registered on the same mimetype.
>>>>>>>
>>>>>>> So now I'm looking for a way to either bypass this limitation or
>>>>>>> get Netbeans to use my Hints in another way.
>>>>>>>
>>>>>>> I hope this is a better description of my problem?
>>>>>>>
>>>>>>>
>>>>>>>
>>>>>>> Am 2016-10-09 12:30, schrieb geertjan wielenga:
>>>>>>>> On 9-10-2016 12:28, Alex Muthmann wrote:
>>>>>>>>> I'm sorry to repeat myself but my problem is not, that I'm
>>>>>>>>> unable to implement and register a hint but that it does seem
>>>>>>>>> to be impossible, to add hints to an existing Language.
>>>>>>>>
>>>>>>>> I don't understand. JavaScript is an existing language. If you
>>>>>>>> want to
>>>>>>>> add hints to an existing language, e.g., JavaScript, then you
>>>>>>>> create
>>>>>>>> rules and register them in the layer.
>>>>>>>>
>>>>>>>>> If I would like to implement a new language with a new
>>>>>>>>> mimetype etc, I would not have to ask those questions.
>>>>>>>>>
>>>>>>>>> All I need is an advice, how multiple Languages can be
>>>>>>>>> registered on the same mimetype OR if there is another way to
>>>>>>>>> add hints.
>>>>>>>>
>>>>>>>> No, I don't understand at all.
>>>>>>>>
>>>>>>>> This is the first I'm hearing in this thread about multiple
>>>>>>>> languages.
>>>>>>>>
>>>>>>>> Can you explain in a lot more detail the context of what you're
>>>>>>>> trying to do.
>>>>>>>>
>>>>>>>> Gj
>>>>>>>>
>>>>>>>>
>>>>>>>>>
>>>>>>>>>
>>>>>>>>> Am 2016-10-09 12:24, schrieb geertjan wielenga:
>>>>>>>>>> Now that you have a HintsProvider, you need to implement
>>>>>>>>>> Rules (pic-1)
>>>>>>>>>> and register them in the layer (pic-2).
>>>>>>>>>>
>>>>>>>>>> Gj
>>>>>>>>>>
>>>>>>>>>> On 9-10-2016 12:18, Alex Muthmann wrote:
>>>>>>>>>>> Please have a look at the github links I provided, you'll
>>>>>>>>>>> see, that I already have both Language and HintsProvider
>>>>>>>>>>> implemented.
>>>>>>>>>>>
>>>>>>>>>>> Also both classes you mention do NOT cover my use case as
>>>>>>>>>>> they are mere Hints used in JsHintsProvider, which is used
>>>>>>>>>>> in JsLanguage (registered on text/javascript). So this does
>>>>>>>>>>> not add a new HTML hint in a module but implements a
>>>>>>>>>>> completely new Language :(
>>>>>>>>>>>
>>>>>>>>>>> Am 2016-10-09 12:10, schrieb geertjan wielenga:
>>>>>>>>>>>> Look at
>>>>>>>>>>>> org.netbeans.modules.javascript2.editor.hints.JsAstRule or
>>>>>>>>>>>> JsConventionHint. Also you have to implement HintsProvider.
>>>>>>>>>>>>
>>>>>>>>>>>> Gj
>>>>>>>>>>>>
>>>>>>>>>>>> On 9-10-2016 11:50, Alex Muthmann wrote:
>>>>>>>>>>>>> yes, exactly, that would be awesome!
>>>>>>>>>>>>>
>>>>>>>>>>>>> Am 2016-10-09 11:42, schrieb geertjan wielenga:
>>>>>>>>>>>>>> So, to be clear, if I show an example of how to create a
>>>>>>>>>>>>>> new plugin
>>>>>>>>>>>>>> that adds a new HTML hint in NetBeans IDE, that's what
>>>>>>>>>>>>>> you're looking
>>>>>>>>>>>>>> for?
>>>>>>>>>>>>>>
>>>>>>>>>>>>>> Gj
>>>>>>>>>>>>>>
>>>>>>>>>>>>>> On 9-10-2016 11:39, Alex Muthmann wrote:
>>>>>>>>>>>>>>> Yes, this is what I (of course) did first, I also had a
>>>>>>>>>>>>>>> deeper look into the Netbeans sources but there was no
>>>>>>>>>>>>>>> implementation covering my requirement (extend an
>>>>>>>>>>>>>>> existing language). It looks easy to implement a new
>>>>>>>>>>>>>>> one, but if you need to use an already registered
>>>>>>>>>>>>>>> mimeType it gets fuzzy :(
>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>> Am 2016-10-09 01:13, schrieb geertjan wielenga:
>>>>>>>>>>>>>>>> I'll try to take a look but if I were you I'd go to
>>>>>>>>>>>>>>>> Google and search
>>>>>>>>>>>>>>>> for 'getHintsProvider' to see how others have
>>>>>>>>>>>>>>>> implemented that -- I
>>>>>>>>>>>>>>>> can see many implementations when I do that.
>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>> Gj
>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>> On 8-10-2016 20:57, Alex Muthmann wrote:
>>>>>>>>>>>>>>>>> Hi,
>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>> thanks for your reply.
>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>> You can find the code here:
>>>>>>>>>>>>>>>>> https://github.com/wcm-io/wcm-io-tooling/tree/netbeans-sightly-hints
>>>>>>>>>>>>>>>>> SightlyLanguage.java:
>>>>>>>>>>>>>>>>> https://github.com/wcm-io/wcm-io-tooling/blob/netbeans-sightly-hints/netbeans/sightly/src/main/java/io/wcm/tooling/netbeans/sightly/editor/SightlyLanguage.java
>>>>>>>>>>>>>>>>> SightylHintsProvider:
>>>>>>>>>>>>>>>>> https://github.com/wcm-io/wcm-io-tooling/blob/netbeans-sightly-hints/netbeans/sightly/src/main/java/io/wcm/tooling/netbeans/sightly/editor/hints/SightlyHintsProvider.java
>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>> I added some exceptions, so I would expect to see
>>>>>>>>>>>>>>>>> those as soon, as the language is called successfully.
>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>> Am 2016-10-08 12:21, schrieb geertjan wielenga:
>>>>>>>>>>>>>>>>>> On 7-10-2016 0:26, Alex Muthmann wrote:
>>>>>>>>>>>>>>>>>>> Hi there,
>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>> there has already be a discussion with Geertjan and
>>>>>>>>>>>>>>>>>>> Petr regarding the options to implement additional
>>>>>>>>>>>>>>>>>>> Hints for an existing language. I need to add
>>>>>>>>>>>>>>>>>>> additional Hints for HTML files and the consensus
>>>>>>>>>>>>>>>>>>> was, that I should use the CSL API to implement a
>>>>>>>>>>>>>>>>>>> Language and add a HintProvider.
>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>> I did some basic tests
>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>> Put your code on GitHub and send a link to it here so
>>>>>>>>>>>>>>>>>> we can all see
>>>>>>>>>>>>>>>>>> the code rather than text.
>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>> Gj
>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>> but ran into the following situation:
>>>>>>>>>>>>>>>>>>> As soon as I register a new Language XYZ which uses
>>>>>>>>>>>>>>>>>>> the mimeType text/html, the build-in HTML Language
>>>>>>>>>>>>>>>>>>> does not work anymore (no hints, no code-completion
>>>>>>>>>>>>>>>>>>> etc). I'd expect that all languages registered on a
>>>>>>>>>>>>>>>>>>> mimeType are used and not only one of those.
>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>> I was not able to find this use-case in the netbeans
>>>>>>>>>>>>>>>>>>> source-code and I'm currently lost :(
>>>>>>>>>>>>>>>>>>> Could somebody probably provide an example of a
>>>>>>>>>>>>>>>>>>> working extension of an existing language or an
>>>>>>>>>>>>>>>>>>> alternative to the implementation of a complete new
>>>>>>>>>>>>>>>>>>> language?
>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>> Thank you very much,
>>>>>>>>>>>>>>>>>>> Alex Muthmann