Added example to show use of pictoSource extension point
diff --git a/examples/org.eclipse.epsilon.examples.picto.sirius/.classpath b/examples/org.eclipse.epsilon.examples.picto.sirius/.classpath
new file mode 100644
index 0000000..e801ebf
--- /dev/null
+++ b/examples/org.eclipse.epsilon.examples.picto.sirius/.classpath
@@ -0,0 +1,7 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<classpath>
+	<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-11"/>
+	<classpathentry kind="con" path="org.eclipse.pde.core.requiredPlugins"/>
+	<classpathentry kind="src" path="src"/>
+	<classpathentry kind="output" path="bin"/>
+</classpath>
diff --git a/examples/org.eclipse.epsilon.examples.picto.sirius/.project b/examples/org.eclipse.epsilon.examples.picto.sirius/.project
new file mode 100644
index 0000000..fd44ce6
--- /dev/null
+++ b/examples/org.eclipse.epsilon.examples.picto.sirius/.project
@@ -0,0 +1,28 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<projectDescription>
+	<name>org.eclipse.epsilon.examples.picto.sirius</name>
+	<comment></comment>
+	<projects>
+	</projects>
+	<buildSpec>
+		<buildCommand>
+			<name>org.eclipse.jdt.core.javabuilder</name>
+			<arguments>
+			</arguments>
+		</buildCommand>
+		<buildCommand>
+			<name>org.eclipse.pde.ManifestBuilder</name>
+			<arguments>
+			</arguments>
+		</buildCommand>
+		<buildCommand>
+			<name>org.eclipse.pde.SchemaBuilder</name>
+			<arguments>
+			</arguments>
+		</buildCommand>
+	</buildSpec>
+	<natures>
+		<nature>org.eclipse.pde.PluginNature</nature>
+		<nature>org.eclipse.jdt.core.javanature</nature>
+	</natures>
+</projectDescription>
diff --git a/examples/org.eclipse.epsilon.examples.picto.sirius/.settings/org.eclipse.jdt.core.prefs b/examples/org.eclipse.epsilon.examples.picto.sirius/.settings/org.eclipse.jdt.core.prefs
new file mode 100644
index 0000000..c9545f0
--- /dev/null
+++ b/examples/org.eclipse.epsilon.examples.picto.sirius/.settings/org.eclipse.jdt.core.prefs
@@ -0,0 +1,9 @@
+eclipse.preferences.version=1
+org.eclipse.jdt.core.compiler.codegen.targetPlatform=11
+org.eclipse.jdt.core.compiler.compliance=11
+org.eclipse.jdt.core.compiler.problem.assertIdentifier=error
+org.eclipse.jdt.core.compiler.problem.enablePreviewFeatures=disabled
+org.eclipse.jdt.core.compiler.problem.enumIdentifier=error
+org.eclipse.jdt.core.compiler.problem.reportPreviewFeatures=warning
+org.eclipse.jdt.core.compiler.release=enabled
+org.eclipse.jdt.core.compiler.source=11
diff --git a/examples/org.eclipse.epsilon.examples.picto.sirius/META-INF/MANIFEST.MF b/examples/org.eclipse.epsilon.examples.picto.sirius/META-INF/MANIFEST.MF
new file mode 100644
index 0000000..2cff7ef
--- /dev/null
+++ b/examples/org.eclipse.epsilon.examples.picto.sirius/META-INF/MANIFEST.MF
@@ -0,0 +1,9 @@
+Manifest-Version: 1.0
+Bundle-ManifestVersion: 2
+Bundle-Name: Sirius
+Bundle-SymbolicName: org.eclipse.epsilon.examples.picto.sirius;singleton:=true
+Bundle-Version: 1.0.0.qualifier
+Automatic-Module-Name: org.eclipse.epsilon.examples.picto.sirius
+Bundle-RequiredExecutionEnvironment: JavaSE-1.8
+Require-Bundle: org.eclipse.epsilon.picto,
+ org.eclipse.sirius.diagram.ui
diff --git a/examples/org.eclipse.epsilon.examples.picto.sirius/build.properties b/examples/org.eclipse.epsilon.examples.picto.sirius/build.properties
new file mode 100644
index 0000000..5bcac31
--- /dev/null
+++ b/examples/org.eclipse.epsilon.examples.picto.sirius/build.properties
@@ -0,0 +1,7 @@
+source.. = src/
+output.. = bin/
+bin.includes = META-INF/,\
+               .,\
+               src/,\
+               resources/,\
+               plugin.xml
diff --git a/examples/org.eclipse.epsilon.examples.picto.sirius/plugin.xml b/examples/org.eclipse.epsilon.examples.picto.sirius/plugin.xml
new file mode 100644
index 0000000..3edef31
--- /dev/null
+++ b/examples/org.eclipse.epsilon.examples.picto.sirius/plugin.xml
@@ -0,0 +1,11 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<?eclipse version="3.4"?>
+<plugin>
+   <extension
+         point="org.eclipse.epsilon.picto.pictoSource">
+      <pictoSource
+            class="org.eclipse.epsilon.examples.picto.sirius.BasicFamilyPictoSource">
+      </pictoSource>
+   </extension>
+
+</plugin>
diff --git a/examples/org.eclipse.epsilon.examples.picto.sirius/resources/basicfamily.egx b/examples/org.eclipse.epsilon.examples.picto.sirius/resources/basicfamily.egx
new file mode 100644
index 0000000..acfdda3
--- /dev/null
+++ b/examples/org.eclipse.epsilon.examples.picto.sirius/resources/basicfamily.egx
@@ -0,0 +1,17 @@
+rule Model2Bar transform family : Family {
+	parameters : Map {
+		"currentElement" = currentElement,
+		"format" = "html",
+		"path" = List{"Bar"}
+	}
+	template : "model2bar.egl"
+}
+
+rule Model2Pie transform family : Family {
+	parameters : Map {
+		"currentElement" = currentElement,
+		"format" = "html",
+		"path" = List{"Pie"}
+	}
+	template : "model2pie.egl"
+}
\ No newline at end of file
diff --git a/examples/org.eclipse.epsilon.examples.picto.sirius/resources/model2bar.egl b/examples/org.eclipse.epsilon.examples.picto.sirius/resources/model2bar.egl
new file mode 100644
index 0000000..25b25a2
--- /dev/null
+++ b/examples/org.eclipse.epsilon.examples.picto.sirius/resources/model2bar.egl
@@ -0,0 +1,44 @@
+[% import "utils.eol";%]
+
+<html>
+
+<head>
+	<script src="https://cdnjs.cloudflare.com/ajax/libs/Chart.js/2.9.4/Chart.bundle.js" integrity="sha512-zO8oeHCxetPn1Hd9PdDleg5Tw1bAaP0YmNvPY8CwcRyUk7d7/+nyElmFrB6f7vg4f7Fv4sui1mcep8RIEShczg==" crossorigin="anonymous"></script>
+</head>
+
+<body>
+	<div id="canvas" style="width:60%">
+		<canvas id="chart"></canvas>
+	</div>
+
+	<script>
+		new Chart(document.getElementById("chart"), {
+		    type: 'bar',
+		    data: {
+		      labels: ["Men", "Woman"],
+		      datasets: [{
+		        label: "Family",
+		        backgroundColor: ["#add8e6","#e8c3b9"],
+		        data: [[%= currentElement.getNumberOfMen() %] , [%= currentElement.getNumberOfWomen() %]]
+		      }]
+		    },
+		    options: {
+		      legend: false,
+			  tooltips: false,
+		      title: {
+		        display: true,
+		        text: '[%= currentElement.getTitle() %] '
+		      },
+		      scales: {
+			        yAxes: [{
+			            ticks: {
+			                beginAtZero:true
+			            }
+			        }]
+			    }
+		    }
+		});		
+	</script>
+</body>
+
+</html>
diff --git a/examples/org.eclipse.epsilon.examples.picto.sirius/resources/model2pie.egl b/examples/org.eclipse.epsilon.examples.picto.sirius/resources/model2pie.egl
new file mode 100644
index 0000000..25c2ac5
--- /dev/null
+++ b/examples/org.eclipse.epsilon.examples.picto.sirius/resources/model2pie.egl
@@ -0,0 +1,34 @@
+[% import "utils.eol";%]
+<html>
+
+<head>
+	<script src="https://cdnjs.cloudflare.com/ajax/libs/Chart.js/2.9.4/Chart.bundle.js" integrity="sha512-zO8oeHCxetPn1Hd9PdDleg5Tw1bAaP0YmNvPY8CwcRyUk7d7/+nyElmFrB6f7vg4f7Fv4sui1mcep8RIEShczg==" crossorigin="anonymous"></script>
+</head>
+
+<body>
+	<div id="canvas" style="width:60%">
+		<canvas id="chart"></canvas>
+	</div>
+
+	<script>
+		new Chart(document.getElementById("chart"), {
+		    type: 'pie',
+		    data: {
+		      labels: ["Men", "Woman"],
+		      datasets: [{
+		        label: "Family",
+		        backgroundColor: ["#add8e6","#e8c3b9"],
+		        data: [[%= currentElement.getNumberOfMen() %] , [%= currentElement.getNumberOfWomen() %]]
+		      }]
+		    },
+		    options: {
+		      title: {
+		        display: true,
+		        text: '[%= currentElement.getTitle() %] '
+		      }
+		    }
+		});		
+	</script>
+</body>
+
+</html>
diff --git a/examples/org.eclipse.epsilon.examples.picto.sirius/resources/utils.eol b/examples/org.eclipse.epsilon.examples.picto.sirius/resources/utils.eol
new file mode 100644
index 0000000..80c29d9
--- /dev/null
+++ b/examples/org.eclipse.epsilon.examples.picto.sirius/resources/utils.eol
@@ -0,0 +1,25 @@
+operation Family getTitle() : String{
+	return "Family";
+}
+
+operation Person getTitle() : String{
+	return "Children of " + self.name;
+}
+	
+
+operation Family getNumberOfMen() : String {
+	return self.getMembers().select(m|m.isTypeOf(Man)).size.toString();
+}
+
+operation Person getNumberOfMen() : String {
+	return self.getChildren().select(m|m.isTypeOf(Man)).size.toString();
+}
+
+operation Family getNumberOfWomen() : String {
+	return self.getMembers().select(m|m.isTypeOf(Woman)).size.toString();
+}
+
+operation Person getNumberOfWomen() : String {
+	return self.getChildren().select(m|m.isTypeOf(Woman)).size.toString();
+}
+
diff --git a/examples/org.eclipse.epsilon.examples.picto.sirius/src/org/eclipse/epsilon/examples/picto/sirius/BasicFamilyPictoSource.java b/examples/org.eclipse.epsilon.examples.picto.sirius/src/org/eclipse/epsilon/examples/picto/sirius/BasicFamilyPictoSource.java
new file mode 100644
index 0000000..61800cc
--- /dev/null
+++ b/examples/org.eclipse.epsilon.examples.picto.sirius/src/org/eclipse/epsilon/examples/picto/sirius/BasicFamilyPictoSource.java
@@ -0,0 +1,79 @@
+package org.eclipse.epsilon.examples.picto.sirius;
+
+import org.eclipse.core.resources.IFile;
+import org.eclipse.core.resources.ResourcesPlugin;
+import org.eclipse.core.runtime.Path;
+import org.eclipse.emf.ecore.EObject;
+import org.eclipse.emf.ecore.resource.Resource;
+import org.eclipse.epsilon.picto.dom.Picto;
+import org.eclipse.epsilon.picto.dom.PictoFactory;
+import org.eclipse.epsilon.picto.source.SimpleSource;
+import org.eclipse.sirius.diagram.impl.DSemanticDiagramImpl;
+import org.eclipse.sirius.diagram.ui.tools.api.editor.DDiagramEditor;
+import org.eclipse.ui.IEditorPart;
+
+public class BasicFamilyPictoSource extends SimpleSource {
+
+	private static final String EGX_SCRIPT = "platform:/plugin/org.eclipse.epsilon.examples.picto.sirius/resources/basicfamily.egx";
+	
+	@Override
+	protected String getFormat() {
+		return "egx";
+	}
+
+	@Override
+	protected String getFileExtension() {
+		return "basicfamily";
+	}
+	
+	@Override
+	protected Picto getRenderingMetadata(IEditorPart editorPart) {
+		Picto metadata = PictoFactory.eINSTANCE.createPicto();
+		metadata.setFormat(getFormat());
+		metadata.setTransformation(EGX_SCRIPT);
+		// pass the root element of the Sirius diagram to EGX via currentElement variable
+		metadata.getParameters().add(createParameter("currentElement", getRootOfDiagram(editorPart)));
+		return metadata;
+	}
+	
+	@Override
+	public boolean supports(IEditorPart editorPart) {
+		return isSiriusEditor(editorPart);
+	}
+	
+	@Override
+	protected boolean supportsEditorType(IEditorPart editorPart) {
+		return isSiriusEditor(editorPart);
+	}
+	
+	@Override
+	protected IFile getFile(IEditorPart editorPart) {
+		if (isSiriusEditor(editorPart)) {
+			Resource r = getRootOfDiagram(editorPart).eResource();
+			return ResourcesPlugin.getWorkspace().getRoot().getFile(new Path(r.getURI().toPlatformString(true)));
+		}
+		return null;
+	}
+	
+	@Override
+	protected Resource getResource(IEditorPart editorPart) {
+		if (isSiriusEditor(editorPart)) {
+			return getRootOfDiagram(editorPart).eResource();
+		}
+		return null;
+	}
+	
+	protected EObject getRootOfDiagram(IEditorPart editorPart) {
+		if (isSiriusEditor(editorPart)) {
+			DDiagramEditor editor = (DDiagramEditor) editorPart;
+			DSemanticDiagramImpl diagram = (DSemanticDiagramImpl) editor.getRepresentation();
+			return diagram.getTarget();
+		}
+		return null;
+	}
+	
+	protected boolean isSiriusEditor(IEditorPart editorPart) {
+		return editorPart instanceof DDiagramEditor;
+	}
+
+}
diff --git a/plugins/org.eclipse.epsilon.picto/src/org/eclipse/epsilon/picto/source/EglPictoSource.java b/plugins/org.eclipse.epsilon.picto/src/org/eclipse/epsilon/picto/source/EglPictoSource.java
index d427a51..03aef2c 100644
--- a/plugins/org.eclipse.epsilon.picto/src/org/eclipse/epsilon/picto/source/EglPictoSource.java
+++ b/plugins/org.eclipse.epsilon.picto/src/org/eclipse/epsilon/picto/source/EglPictoSource.java
@@ -92,6 +92,11 @@
 			IEolContext context = module.getContext();
 			context.getNativeTypeDelegates().add(new ExtensionPointToolNativeTypeDelegate());
 			
+			FrameStack fs = context.getFrameStack();
+			for (Parameter customParameter : renderingMetadata.getParameters()) {
+				fs.put(new Variable(customParameter.getName(), getValue(customParameter), EolAnyType.Instance));
+			}
+			
 			URI transformationUri = null;
 			
 			if (renderingMetadata.getTransformation() != null) {			
@@ -149,7 +154,7 @@
 							customView.getParameters().add(createParameter("activeLayers", customView.getLayers()));
 						}
 						
-						FrameStack fs = context.getFrameStack();
+						
 						for (Parameter customViewParameter : customView.getParameters()) {
 							fs.put(new Variable(customViewParameter.getName(), getValue(customViewParameter), EolAnyType.Instance));
 						}