Home » Modeling » TMF (Xtext) » Xtext formatting language(I can not add a blank line in my algorithms when formatting.)
| | | | | | |
Re: Xtext formatting language [message #1755864 is a reply to message #1755518] |
Wed, 08 March 2017 17:10 |
Yves LEDUC Messages: 56 Registered: May 2015 |
Member |
|
|
Thank you
Now it is the formatting of the Constants that causes me a problem with the comma ',' which I want to format like this "," when it is like this for example ",". Here is the grammar element:
ConstsDecls: ('Constante:' | 'Const:') constantes=ConstDecls;
ConstDecls: consts+=ConstsDecl+; // Constantes de différents types
ConstsDecl: type=Type ':' ctes += ConstDecl (',' ctes += ConstDecl )* ';'? ; // Constantes d'un même type
ConstDecl: name=ConstName exts=ExtsName? init=DataInit ; // Constante identificateur et initialisation
ConstName: name=ValidID ;
With this code only the first comma is formatted and not the next.
def dispatch void format(ConstDecls constDecls, extension IFormattableDocument document) {
for (constsDecl : constDecls.consts ) { // Pour tous les types de Constante
var regpv = constsDecl.regionFor.keyword(";")
regpv.prepend[noSpace].append[oneSpace]
if ( constsDecl == constDecls.consts.last ) {
if (regpv != null ) // Si ';' fin dernière ligne on supprime
document.addReplacer(new InsertSemi(regpv, " "))
constsDecl.append[newLines = 2] // 2 si c'est la dernière
}
else {
if ( constsDecl.regionFor.keyword(";") == null ) // Pas de ; => Passage à la ligne
constsDecl.append[newLine] // 1 pour les autres
}
constsDecl.format
}
}
def dispatch void format(ConstsDecl constsDecl, extension IFormattableDocument document) {
var regdp = constsDecl.regionFor.keyword(":")
if ( constsDecl.regionFor.keyword(";") != null )
regdp.prepend[oneSpace].append[oneSpace]
else
regdp.prepend[space = "\t"].append[oneSpace]
var regvir = constsDecl.regionFor.keyword(",")
regvir.prepend[noSpace].append[oneSpace]
for (constDecl : constsDecl.ctes ) { // Pour toutes les constantes d'un même type
constDecl.format
}
}
def dispatch void format(ConstDecl constDecl, extension IFormattableDocument document) {
constDecl.init.format
}
def dispatch void format(DataInit dataInit, extension IFormattableDocument document) {
dataInit.regionFor.keyword("<-").surround[oneSpace]
}
Constante:Chaine:TITRE<-"Test Algorithme",INVITE1<-"Entrez trois nombres réels : ",INVITE2<-"Entrez un entier relatif : " ,RESULT1<-"Le résultat de rdt est : " ,RESULT2<-"La valeur absolue est : " Réel:PI<-3.14159; Entier: XXX<-100,YYY<-200 ;
For now it gives:
Constante:
Chaine : TITRE <- "Test Algorithme", INVITE1 <- "Entrez trois nombres réels : ",INVITE2 <- "Entrez un entier relatif : " ,RESULT1 <- "Le résultat de rdt est : " ,RESULT2 <- "La valeur absolue est : "
Réel : PI <- 3.14159; Entier : XXX <- 100, YYY <- 200
Can you tell me how to format all commas.
|
|
|
Re: Xtext formatting language [message #1755865 is a reply to message #1755518] |
Wed, 08 March 2017 17:10 |
Yves LEDUC Messages: 56 Registered: May 2015 |
Member |
|
|
Thank you
Now it is the formatting of the Constants that causes me a problem with the comma ',' which I want to format like this "," when it is like this for example ",". Here is the grammar element:
ConstsDecls: ('Constante:' | 'Const:') constantes=ConstDecls;
ConstDecls: consts+=ConstsDecl+; // Constantes de différents types
ConstsDecl: type=Type ':' ctes += ConstDecl (',' ctes += ConstDecl )* ';'? ; // Constantes d'un même type
ConstDecl: name=ConstName exts=ExtsName? init=DataInit ; // Constante identificateur et initialisation
ConstName: name=ValidID ;
With this code only the first comma is formatted and not the next.
def dispatch void format(ConstDecls constDecls, extension IFormattableDocument document) {
for (constsDecl : constDecls.consts ) { // Pour tous les types de Constante
var regpv = constsDecl.regionFor.keyword(";")
regpv.prepend[noSpace].append[oneSpace]
if ( constsDecl == constDecls.consts.last ) {
if (regpv != null ) // Si ';' fin dernière ligne on supprime
document.addReplacer(new InsertSemi(regpv, " "))
constsDecl.append[newLines = 2] // 2 si c'est la dernière
}
else {
if ( constsDecl.regionFor.keyword(";") == null ) // Pas de ; => Passage à la ligne
constsDecl.append[newLine] // 1 pour les autres
}
constsDecl.format
}
}
def dispatch void format(ConstsDecl constsDecl, extension IFormattableDocument document) {
var regdp = constsDecl.regionFor.keyword(":")
if ( constsDecl.regionFor.keyword(";") != null )
regdp.prepend[oneSpace].append[oneSpace]
else
regdp.prepend[space = "\t"].append[oneSpace]
var regvir = constsDecl.regionFor.keyword(",")
regvir.prepend[noSpace].append[oneSpace]
for (constDecl : constsDecl.ctes ) { // Pour toutes les constantes d'un même type
constDecl.format
}
}
def dispatch void format(ConstDecl constDecl, extension IFormattableDocument document) {
constDecl.init.format
}
def dispatch void format(DataInit dataInit, extension IFormattableDocument document) {
dataInit.regionFor.keyword("<-").surround[oneSpace]
}
Constante:Chaine:TITRE<-"Test Algorithme",INVITE1<-"Entrez trois nombres réels : ",INVITE2<-"Entrez un entier relatif : " ,RESULT1<-"Le résultat de rdt est : " ,RESULT2<-"La valeur absolue est : " Réel:PI<-3.14159; Entier: XXX<-100,YYY<-200 ;
For now it gives:
Constante:
Chaine : TITRE <- "Test Algorithme", INVITE1 <- "Entrez trois nombres réels : ",INVITE2 <- "Entrez un entier relatif : " ,RESULT1 <- "Le résultat de rdt est : " ,RESULT2 <- "La valeur absolue est : "
Réel : PI <- 3.14159; Entier : XXX <- 100, YYY <- 200
Can you tell me how to format all commas.
|
|
| |
Re: Xtext formatting language [message #1755901 is a reply to message #1755872] |
Thu, 09 March 2017 08:12 |
Yves LEDUC Messages: 56 Registered: May 2015 |
Member |
|
|
Sorry the answer clogged my eyes.
def dispatch void format(ConstsDecl constsDecl, extension IFormattableDocument document) {
var regdp = constsDecl.regionFor.keyword(":")
if ( constsDecl.regionFor.keyword(";") != null )
regdp.prepend[oneSpace].append[oneSpace]
else
regdp.prepend[space = "\t"].append[oneSpace]
constsDecl.regionFor.keywords(",").forEach[
constDecl | constDecl.prepend[noSpace].append[oneSpace] constDecl.format
]
}
def dispatch void format(ConstDecl constDecl, extension IFormattableDocument document) {
constDecl.init.format
}
def dispatch void format(DataInit dataInit, extension IFormattableDocument document) {
dataInit.regionFor.keyword("<-").surround[oneSpace]
}
it is OK :
Constante:
Chaine : TITRE<-"Test Algorithme", INVITE1<-"Entrez trois nombres réels : ", INVITE2<-"Entrez un entier relatif : ", RESULT1<-"Le résultat de rdt est : ", RESULT2<-"La valeur absolue est : "
Réel : PI<-3.14159
Entier : XXX<-100, YYY<-200
Sometimes it is easy to find the answer to a complex question and the answer to a simple question does not come right away.
Thanks for this trivial response
Yves LEDUC
|
|
|
Goto Forum:
Current Time: Tue Dec 10 04:44:31 GMT 2024
Powered by FUDForum. Page generated in 0.03839 seconds
|