Commit 80827c54 authored by Philip Makedonski's avatar Philip Makedonski
Browse files

+ formatting improvement for indentation-based syntax

parent 485678a5
Loading
Loading
Loading
Loading
+80 −0
Original line number Diff line number Diff line
@@ -4,17 +4,97 @@
package org.etsi.mts.tdl.formatting2;

import org.eclipse.xtext.formatting2.IFormattableDocument;
import org.eclipse.xtext.formatting2.regionaccess.ISemanticRegion;
import org.eclipse.xtext.xbase.lib.Extension;
import org.etsi.mts.tdl.Element;
import org.etsi.mts.tdl.ElementImport;
import org.etsi.mts.tdl.PackageableElement;
import org.etsi.mts.tdl.StructuredDataType;
import org.etsi.mts.tdl.StructuredDataInstance;
import org.etsi.mts.tdl.TestObjective;
import org.etsi.mts.tdl.DataElementMapping;
import org.etsi.mts.tdl.services.TDLtxGrammarAccess;
import org.etsi.mts.tdl.services.TDLtxiGrammarAccess;

import com.google.inject.Inject;

public class TDLtxiFormatter extends TDLtxFormatter {
	@Inject
	@Extension
	private TDLtxiGrammarAccess _grammarAccess;
	
	@Override protected void formatCustom(Element e, IFormattableDocument doc) {
		
	}

	@Override protected void format(org.etsi.mts.tdl.NamedElement e, IFormattableDocument doc) {
		doc.surround(e, p->p.newLine());
		doc.interior(e, p->p.indent());

		if (e instanceof StructuredDataType) {
			for (var m : ((StructuredDataType)e).getMember()) {
				doc.surround(m, p->p.newLine());
				doc.format(m);
			}
		}

		if (e instanceof StructuredDataInstance) {
			for (var m : ((StructuredDataInstance)e).getMemberAssignment()) {
				doc.surround(m, p->p.newLine());
				doc.format(m);
			}
		}

		if (e instanceof DataElementMapping) {
			for (var m : ((DataElementMapping)e).getParameterMapping()) {
				doc.surround(m, p->p.newLine());
				doc.format(m);
			}
		}
		
		//Test Objective Only
		if (e instanceof TestObjective) {
			ISemanticRegion dKeyword = this.textRegionExtensions.regionFor(e).keyword("Description:");
			doc.prepend(dKeyword, p->p.newLine());
			ISemanticRegion rKeyword = this.textRegionExtensions.regionFor(e).keyword("References:");
			doc.prepend(rKeyword, p->p.newLine());
		}
		//All
		ISemanticRegion withKeyword = this.textRegionExtensions.regionFor(e).keyword("With:");
		if (withKeyword!=null) {
			doc.surround(withKeyword, p->p.newLine());
			doc.append(withKeyword, p->p.indent());
//			doc.interior(
//					withKeyword.getNextHiddenRegion().getNextSemanticRegion(), 
//					this.textRegionExtensions.nextHiddenRegion(e).getNextSemanticRegion(), 
//					p->p.indent()
//					);
		}
		//doc.prepend(withKeyword, p->p.indent());
		//withKeyword.getNextSemanticRegion();
		//		var rbs = this.textRegionExtensions.regionFor(e).ruleCallTo(this._grammarAccess.());
		for (var c : e.getComment()) {
			doc.surround(c, p->p.newLine());
			doc.format(c);
		}
		
		for (var a : e.getAnnotation()) {
			doc.surround(a, p->p.newLine());
			doc.format(a);
		}
		
	}

	@Override protected void format(org.etsi.mts.tdl.Package _package, IFormattableDocument doc) {
		// TODO: format HiddenRegions around keywords, attributes, cross references, etc. 
		doc.interior(_package, p->p.indent());
		
		for (ElementImport elementImport : _package.getImport()) {
			doc.surround(elementImport, p -> p.setNewLines(1));
			doc.format(elementImport);
		}
		for (PackageableElement packageableElement : _package.getPackagedElement()) {
			doc.surround(packageableElement, p -> p.setNewLines(1));
			doc.format(packageableElement);
		}
		for (org.etsi.mts.tdl.Package __package : _package.getNestedPackage()) {