Как добавить определенную фазу генерации, которая бы выполняла Word-модель-MS-Word? - PullRequest
0 голосов
/ 19 декабря 2018

Предположим, что я разработал набор поведений в MPS, который позволяет мне преобразовать экземпляр концепции WordDocument (и дочерних элементов), которая описывает документ Word-процессора, в документ MS Word с использованием POI, и что у меня естьЯ смог реализовать действие в плагине MPS, который позволяет мне сгенерировать нужный документ MS Word, щелкнув правой кнопкой мыши по моему корневому узлу.

Я хотел бы добавить это в качестве фазы процесса генерации, поэтомучто после этапов «модель-модель» процесс создания MPS выполняет генерацию «Модель-в-MS Word» вместо «Модель-в-текст».

Настраивается ли MPS таким образом, и каков будет наборконцепции для использования?

1 Ответ

0 голосов
/ 20 декабря 2018

Когда вы запускаете make или пересобираете модели в MPS, MPS запускает так называемый MakeSession, в этом сеансе MPS выполняет несколько шагов.Одним шагом в сеансе make является, например, «create», который запускает преобразование модели в модель, а вторым является «textgen», который затем записывает полученную модель шага создания на диск, выполняя определение textgen языков,

Эти отдельные шаги называются «фасеткой».Вы можете внести свой вклад в общий процесс создания.Для этого вам нужно создать плагин-аспект на вашем языке, а затем создать там фасет.В аспекте вы можете объявить его зависимости и приоритеты.В вашем случае вы хотите запустить до textgen, но после генерации, чтобы вы могли получить доступ к результату генерации.

Фасеты могут декларировать свои входные данные декларативным способом.В вашем случае вам нужен GResource, который представляет выходной сигнал фасета генератора.Затем вы можете получить к нему доступную модель и запустить код POI.

Минимальный пример будет выглядеть так:

facet RunPoi extends <none> {                                                                                                                                                                     
    Required: Generate, TextGen                                                                                                                                                                     

    <no optional facets>                                                                                                                                                                            
    Targets:                                                                                                                                                                                        
        target genWord overrides <none> weight default { 
            resources policy: transform GResource -> <no output>                                                                                    

        Dependencies:                                                                                                                             
            after generate                                                                                                                          
            before textGen                                                                                                                          
            before textGenToMemory                                                                                                                  

        <no properties>                                                                                                                           
        <no queries>                                                                                                                              
        <no config>                                                                                                                               
        (progressMonitor, input)->void { 
            foreach resource in input { 
                SModel mdl = resource.model; 
                // run poi code with mdl 
            } 
        }   
    }
}  
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...