Copy code from text editor and past into Jetbrains MPS - copy-paste

I would like to copy a json fragment from a text editor and past that into my json language. So, I have to parse that fragment and create AST from it, not a problem.
But, how do I integrate that action into MPS? Paste Wrappers and Copy and Paste Handlers are meant to be used for Copy&Paste action inside MPS, because they work already with the AST, right?
Is it possible to hook into "plain text" paste action?
Any suggestions or examples I can steal from?

MPS has this for Java code, it's implemented as a custom action (a separate context menu item). The implementation is in the action named PasteAsJavaClass (URL: http://127.0.0.1:63320/node?ref=r%3Ac6bc30d1-d0d1-44c6-ba7e-90e78619615e%28jetbrains.mps.ide.java.actions%29%2F2872212824181502651)
Answered by Sergej Koščejev, MPS Slack
Another approach with Antlr:
Suppose you have a custom text based DSL and you want import the DSL code into MPS, then you have to parse it and you have to map the parse tree to your MPS model.
Frederico Tomasetti wrote a blog post about how to integrate antlr and mps.

Related

Processing multiline events from a text file in Dataflow

I am attempting to build a dataflow pipeline to process a text file which contains events that span multiple lines. The dataflow SDK TextIO class assumes each line is a new event.
My plan is to create a new TextReader and register it with the DataPipelineRunner. This new reader will know how to aggregate the multiple lines into a single line.
I am pretty sure that this approach will work but I am wondering if this is the right way to do it or if there is a simpler solution?
The text I am trying to parse is:
==============> len:45 pktype:4 mtype:2
SYMBOL: USOCSTIA151632.00
OPEN_INT: 212
PR_OPEN_INTEREST: 212
TIME_STAMP: 04/10/2015 06:30:17:420 val:1428661817
The result should be the last 4 lines concatenated together and the first line dropped.
Best regards,
Peter
Note that TextReader is an internal implementation detail class, so subclassing it would be highly discouraged and challenging to do properly.
The recommended way to define a new file-based format like yours is to subclass FileBasedSource using the user-defined source API.
In your case, I would recommend to base your class on the LineIO example from documentation, and wrap the LineReader defined there into your own class which would use LineReader as a helper for reading individual lines, but:
In startReading() it would skip until the line starting with "====>"
In readNextRecord() it would read lines until the next "====>" and bundle them into a single record.
Please make sure to carefully read the documentation to FileBasedSource and FileBasedReader: the parallelization mechanism relies on the consistency properties described there, which your format has to satisfy, for ensuring that records are not duplicated or omitted on the boundaries between adjacent processing shards. XmlSource tests are a good example of how to unit-test these properties.
Please tell us how it goes and report back with any problems or questions - we are very interested in feedback on this API.

Twig, ZF2 and PoEdit

Using ZfcTwig for ZF2 and twig-gettext-extractor, I still cannot extract messages for translation from twig-files by poedit. I works if I used the formal twig keyword for translation {% trans(MY_TEXT) %} but not for the in-built view helper translate. {{ translate(MY_Text) }} does the translation but poedit is just ignoring it. For new twig files, I want as usual let poedit do the job....
Any ideas for a solution?
Maybe you need to edit catalog properties keywords to be visible for translations. Open PoEdit, go to Catalog -> Properties -> Sources keywords and add another keyword "translate". Here I attach an screenshot.
The problem is that the extractor you are using is just caching the files and running them through xgettext to extract calls to trans/translate/_/.. (keywords as suggested by Conti. Alas ZfcTwig will crosscompile calls to ZF2 plugins into plugin('translate')->__invoke('Your Text to be translated'). You could of course now add __invoke as a new keyword in poedit or whatever you favorite gui for using xgettext is, but it will now find all calls to all view helpers not just those to translate.
I ran into this problem myself and I have not come up with a satisfying solution. The Twig Gettext Extension looks promising in terms of writing your own customized POT-File generator that will handle translate and translatePlural view helper calls. Using the extension as is will bypass all translation from ZF2. ZF2 parses .mo files into an internal structure rather than using the php-gettext mod.
All in all I gave up on automated po(t) file generation for ZF2+ZfcTwig for now and am back to phpArray.

GXT 3.x Custom PropertyEditor / ValueBaseInputCell

I'm trying to write a custom field editor that will translate between Long and String. IE: String representation on screen but field type is a Long.
I've implemented the PropertyEditor (HrMinPropertyEditor) but don't know how to wire it in. My HrMinField is quite clunky as I needed to use a TriggerFieldCell because the generic types inside TextInputCell etc. prevented me from using them.
Do I need to do a subclass of ValueBaseInputCell? That seems strange since my PropertyEditor has all the Long / String conversions. It also looks difficult.
If so, is there a simple example or some documentation I can read?
BTW, my learning project is Maven based and should be easy to fire up if necessary:
svn checkout http://subversion.assembla.com/svn/freshcode_public/learn/gwt/ learn-gwt
cd learn-gwt
mvn gwt:run
Navigate to GXT | Forms | Time Edit
Thanks in advance,
Pete
PS: I've asked this on the Sencha forum too.
You should use method setPropertyEditor from Field class to specify your custom property editor:
HrMinField f = new HrMinField();
f.setPropertyEditor( new HrMinPropertyEditor() );
I managed to come up with a solution using a Converter and a Validator.
The more complete answer is on the Sencha thread.

How do i access v8 parse tree how can it be done?

I like to take the v8 engine and to transform its code to other programming language
based on this for example if i understand it right first step i need to get the parse tree
my question is :
can i get it already from v8 or do i need to generate it from the js code .
what is the easer way ?
It looks hard to get the AST (Annotated Syntax Tree, the Parse tree) from V8 itself but there are plenty of other parsers for JavaScript that will do what you're looking for. I'd recommend having a look at Esprima (http://esprima.org/) which is a JavaScript parser written in JavaScript. This allows you to give some JavaScript source code and get back a JavaScript object version of the AST which you can transform into another language if you want (or modify then transform back into JavaScript or use for some other reason).
They've got some great online demos that should give you a feel for what it can do: http://esprima.org/demo/index.html

Template class using Gold Parser and the Klimstra engine

I'm using Klimstra's VB.NET template from the "Create skeleton program" of the GOLD parser but the resulting template has methods with the overrides keyword and inherits from TemplateParser..
Am I supposed to create the TemplateParser class or is there a tool to create it? I thought that the "create skeleton" function created a template that I was supposed to inherit and provide implementation to the "MustOverride" methods but now I don't know.
I'm following a tutorial that makes it look like we have to create it using a tool but I'm not sure. I don't know if the tutorial is very outdated (it's dated 2005) and the GOLD parser changed this mechanism. This is the tutorial I'm following: http://www.codeproject.com/KB/recipes/IntrotoGoldParser.aspx
I were just looking into this topic a your link to the article really helped me.
I figured out that in the source files provided with the artictle there are two file with extension .pgt. These are templates for GOLD Code generator. Yout have to copy them into your GOLD installation folder -> Templates and to use them both when you are creating the skeleton program.
I hope this is helpful.

Resources