Skip to content

Commit

Permalink
Merge pull request #716 from ahmedvc/f-umple-tl
Browse files Browse the repository at this point in the history
Umple-TL, TestHarness, and Umple-TL tests from umple-tl
  • Loading branch information
TimLethbridge committed Feb 8, 2016
2 parents 46f1aa5 + 3a5d41c commit 5eb765b
Show file tree
Hide file tree
Showing 60 changed files with 4,496 additions and 59 deletions.
5 changes: 3 additions & 2 deletions cruise.umple/src/GrammarParsing_Code.ump
Original file line number Diff line number Diff line change
Expand Up @@ -140,6 +140,7 @@ class RuleBasedParser
analyzer.getKeys().put("<<=>>", new String[]{"<<=",">>"});
analyzer.getKeys().put("<</**/>>", new String[]{"<</*","*/>>"});
analyzer.getKeys().put("<<$>>", new String[]{"<<$",">>"});
analyzer.getKeys().put("<<@>>", new String[]{"<<@",">>"});

while(currentLine!=null){
if(currentLine.equals("//END DECLARE")){
Expand Down Expand Up @@ -332,8 +333,8 @@ class RuleBasedParser
ChoiceRule definition = new RepeatableRule("definition",0,Integer.MAX_VALUE);
ChoiceRule openbrace = new Terminal("openbrace","\\(",false).dontCare();
ChoiceRule closebrace = new Terminal("closebrace","\\)",false).dontCare();
ChoiceRule opencurl = new Terminal("opencurl","(\\{|\"|<<!|<</\\*|<<=|<<#|<<$)",false);
ChoiceRule closecurl = new Terminal("closecurl","(\\}|\"|!>>|\\*/>>|>>|#>>|>>)",false);
ChoiceRule opencurl = new Terminal("opencurl","(\\{|\"|<<!|<</\\*|<<=|<<#|<<\\$|<<@)",false);
ChoiceRule closecurl = new Terminal("closecurl","(\\}|\"|!>>|\\*/>>|>>|#>>|>>|>>)",false);
ChoiceRule otherRule = new ChainRule("otherrule",new Terminal("open","\\Q[[\\E",false).dontCare(),rulename,new Terminal("close","\\Q]]\\E",false).dontCare()).dontCare();
ChoiceRule spaceSeparated = new BalancedRule("token","[",
new ChainRule("multi",
Expand Down
4 changes: 2 additions & 2 deletions cruise.umple/src/ParsingRules_Code.ump
Original file line number Diff line number Diff line change
Expand Up @@ -955,8 +955,8 @@ class ParsingCouple
int level = 0;
String[] quoteLikeOpen = new String[] {"//","/*","\"","\'"};
String[] quoteLikeClose = new String[] {"\n","*/","\"","\'"};
String[] braceLikeOpen = new String[] {"<<!","<<#","<</*","<<=","<<$"};
String[] braceLikeClose = new String[] {"!>>","#>>","*/>>",">>",">>"};
String[] braceLikeOpen = new String[] {"<<!","<<#","<</*","<<=","<<$","<<@"};
String[] braceLikeClose = new String[] {"!>>","#>>","*/>>",">>",">>",">>"};
int quoteLikeIndex = -1;
int braceLikeIndex = -1;
boolean braceLike = false;
Expand Down
85 changes: 50 additions & 35 deletions cruise.umple/src/Template.ump
Original file line number Diff line number Diff line change
Expand Up @@ -94,6 +94,7 @@ class TemplateElement
{
abstract;
lazy internal EmitResponse emitResponse;
Position position;
String content;

0..1 -- * TemplateField fields;
Expand Down Expand Up @@ -145,7 +146,7 @@ class TemplateElement
return emitResponse;
}

void emit(EmitResponse responseBuffer, UmpleClass template) {}
void emit(EmitResponse responseBuffer, UmpleClass template) throws TemplateException {}

}

Expand All @@ -154,7 +155,7 @@ class ExpressionElement {
isA TemplateElement;


void emit(EmitResponse responseBuffer, UmpleClass template)
void emit(EmitResponse responseBuffer, UmpleClass template) throws TemplateException
{
EmitResponse resetValue = computeContent();
responseBuffer.getJavaCode().append(" ");
Expand All @@ -173,7 +174,7 @@ class CodeBlockElement
{
isA TemplateElement;

void emit(EmitResponse responseBuffer, UmpleClass template) {
void emit(EmitResponse responseBuffer, UmpleClass template) throws TemplateException {
EmitResponse resetValue = computeContent();

responseBuffer.getJavaCode().append(" ");
Expand All @@ -189,42 +190,56 @@ class CodeBlockElement
}
}

//Include segment in a template
class IncludeTemplateElement
{
isA TemplateElement;
TemplateName templateName;

void emit(EmitResponse responseBuffer, UmpleClass template) throws TemplateException {
String classname = getTemplateName().getClassName();
String key = getTemplateName().getName();
UmpleClass referenceTemplate = getTemplateName().getClassName()==null?template:template.getSourceModel().getUmpleClass(getTemplateName().getClassName());
if(referenceTemplate!=null)
{
TemplateAttributeParser val = null;
val = referenceTemplate.getTemplateEmitStringMap().get(key);
if(val !=null)
{
for (TemplateElement templateElement : val.getElements())
{
templateElement.emit(responseBuffer,template);
}
} else {
String refTemplateFullName = key;
if(classname != null && classname.length() > 0) {
refTemplateFullName = classname + "." + refTemplateFullName;
}
throw new TemplateException(getPosition(), new ErrorMessage(3504, getPosition(),refTemplateFullName));
}
}
}
}

//Comment segment for a template contents
class CommentElement {
isA TemplateElement;

void emit(EmitResponse responseBuffer, UmpleClass template)
void emit(EmitResponse responseBuffer, UmpleClass template) throws TemplateException
{
boolean first = !getFilledClasses().containsKey(template);
if(first)
{
getFilledClasses().put(template,template.numberOfTemplateFields());
}

String fieldId = TemplateField.TEMPLATE_TEXT_FIELD + getFilledClasses().get(template);
EmitResponse fieldValue = new EmitResponse();
String javaContent = getEmitResponse().getJavaCode().toString();
javaContent = "/*" + javaContent + "*/";

String cppContent = getEmitResponse().getCppCode().toString();
cppContent = "/*" + cppContent + "*/";

fieldValue.getJavaCode().append(Utils.nlize("Java", javaContent));
fieldValue.getCppCode().append(Utils.nlize("Cpp", cppContent));

if(first)
{
template.addTemplateField(new TemplateField(fieldId, fieldValue));
}


responseBuffer.getJavaCode().append(" ");
Utils.getStringAppend("Java", responseBuffer.getJavaCode(), fieldId);
responseBuffer.getJavaCode().append(System.getProperty("line.separator"));

responseBuffer.getCppCode().append(" ");
Utils.getStringAppend("Cpp", responseBuffer.getCppCode(), fieldId);
responseBuffer.getCppCode().append(System.getProperty("line.separator"));
String javaContent = getEmitResponse().getJavaCode().toString();
javaContent = "/*" + javaContent + "*/";

String cppContent = getEmitResponse().getCppCode().toString();
cppContent = "/*" + cppContent + "*/";

responseBuffer.getJavaCode().append(" ");
responseBuffer.getJavaCode().append(javaContent);
responseBuffer.getJavaCode().append(System.getProperty("line.separator"));

responseBuffer.getCppCode().append(" ");
responseBuffer.getCppCode().append(cppContent);
responseBuffer.getCppCode().append(System.getProperty("line.separator"));
}
}

Expand All @@ -234,7 +249,7 @@ class TextElement

int index = -1;

void emit(EmitResponse responseBuffer, UmpleClass template)
void emit(EmitResponse responseBuffer, UmpleClass template) throws TemplateException
{
boolean first = !getFilledClasses().containsKey(template);
if(first)
Expand Down

0 comments on commit 5eb765b

Please sign in to comment.