diff options
author | Tom Schindl | 2014-11-30 22:05:22 +0000 |
---|---|---|
committer | Tom Schindl | 2014-11-30 22:05:22 +0000 |
commit | 09cb4fad31ea3db4bbc3e0160b7755ed329c0e95 (patch) | |
tree | aec23bce4553b27681b41d0565fb1cb79b8a7561 /experimental | |
parent | 6fb271b856a1c350f28c84b5ed5a71bdfbfb8981 (diff) | |
download | org.eclipse.efxclipse-09cb4fad31ea3db4bbc3e0160b7755ed329c0e95.tar.gz org.eclipse.efxclipse-09cb4fad31ea3db4bbc3e0160b7755ed329c0e95.tar.xz org.eclipse.efxclipse-09cb4fad31ea3db4bbc3e0160b7755ed329c0e95.zip |
latest source
Diffstat (limited to 'experimental')
54 files changed, 2041 insertions, 27 deletions
diff --git a/experimental/compensator/org.eclipse.fx.code.compensator.app.feature/feature.xml b/experimental/compensator/org.eclipse.fx.code.compensator.app.feature/feature.xml index 65cd20ee8..148d4e3fd 100644 --- a/experimental/compensator/org.eclipse.fx.code.compensator.app.feature/feature.xml +++ b/experimental/compensator/org.eclipse.fx.code.compensator.app.feature/feature.xml @@ -543,4 +543,18 @@ version="0.0.0" unpack="false"/> + <plugin + id="org.eclipse.fx.code.compensator.jdt" + download-size="0" + install-size="0" + version="0.0.0" + unpack="false"/> + + <plugin + id="org.eclipse.fx.code.compensator.nashorn.qx" + download-size="0" + install-size="0" + version="0.0.0" + unpack="false"/> + </feature> diff --git a/experimental/compensator/org.eclipse.fx.code.compensator.app.product/org.eclipse.fx.code.compensator.app.product.product.launch b/experimental/compensator/org.eclipse.fx.code.compensator.app.product/org.eclipse.fx.code.compensator.app.product.product.launch index 8071ce2ed..6e9253da0 100644 --- a/experimental/compensator/org.eclipse.fx.code.compensator.app.product/org.eclipse.fx.code.compensator.app.product.product.launch +++ b/experimental/compensator/org.eclipse.fx.code.compensator.app.product/org.eclipse.fx.code.compensator.app.product.product.launch @@ -15,7 +15,7 @@ <stringAttribute key="featureDefaultLocation" value="workspace"/> <stringAttribute key="featurePluginResolution" value="workspace"/> <booleanAttribute key="includeOptional" value="true"/> -<stringAttribute key="location" value="${workspace_loc}/../runtime-org.eclipse.fx.code.compensator.app.product"/> +<stringAttribute key="location" value="${workspace_loc}/../runtime-org.eclipse.fx.code.compensator.app.product_2"/> <booleanAttribute key="org.eclipse.jdt.launching.ATTR_USE_START_ON_FIRST_THREAD" value="true"/> <stringAttribute key="org.eclipse.jdt.launching.JRE_CONTAINER" value="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/java SE 8 u40"/> <stringAttribute key="org.eclipse.jdt.launching.PROGRAM_ARGUMENTS" value="-nl ${target.nl} -consoleLog -nosplash -console -consoleLog -clearPersistedState"/> @@ -26,6 +26,7 @@ <stringAttribute key="productFile" value="/org.eclipse.fx.code.compensator.app.product/org.eclipse.fx.code.compensator.app.product.product"/> <setAttribute key="selected_features"> <setEntry value="org.eclipse.fx.code.compensator.app.feature:default"/> +<setEntry value="org.eclipse.fx.code.compensator.jdt.runtime.feature:default"/> <setEntry value="org.eclipse.fx.code.compensator.xtext.runtime.feature:default"/> </setAttribute> <booleanAttribute key="show_selected_only" value="false"/> diff --git a/experimental/compensator/org.eclipse.fx.code.compensator.app/.settings/org.eclipse.jdt.core.prefs b/experimental/compensator/org.eclipse.fx.code.compensator.app/.settings/org.eclipse.jdt.core.prefs new file mode 100644 index 000000000..0c68a61dc --- /dev/null +++ b/experimental/compensator/org.eclipse.fx.code.compensator.app/.settings/org.eclipse.jdt.core.prefs @@ -0,0 +1,7 @@ +eclipse.preferences.version=1 +org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled +org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.8 +org.eclipse.jdt.core.compiler.compliance=1.8 +org.eclipse.jdt.core.compiler.problem.assertIdentifier=error +org.eclipse.jdt.core.compiler.problem.enumIdentifier=error +org.eclipse.jdt.core.compiler.source=1.8 diff --git a/experimental/compensator/org.eclipse.fx.code.compensator.app/Application.e4xmi b/experimental/compensator/org.eclipse.fx.code.compensator.app/Application.e4xmi index 33b5e4cde..48c1bcdac 100644 --- a/experimental/compensator/org.eclipse.fx.code.compensator.app/Application.e4xmi +++ b/experimental/compensator/org.eclipse.fx.code.compensator.app/Application.e4xmi @@ -4,18 +4,25 @@ <children xsi:type="advanced:PerspectiveStack" xmi:id="_mym9kPNkEeOKm6R57HGa4g" elementId="org.eclipse.fx.code.compensator.app.perspectivestack.0"/> <mainMenu xmi:id="_RTKZcPNkEeOKm6R57HGa4g" elementId="org.eclipse.fx.code.compensator.app.menu.0"> <children xsi:type="menu:Menu" xmi:id="_SXdvEPNkEeOKm6R57HGa4g" elementId="org.eclipse.fx.code.compensator.app.menu.1" label="File"> - <children xsi:type="menu:HandledMenuItem" xmi:id="_U7ubkPNkEeOKm6R57HGa4g" elementId="org.eclipse.fx.code.compensator.app.handledmenuitem.0" label="Open File ..." command="_NKFrQPNkEeOKm6R57HGa4g"/> + <children xsi:type="menu:HandledMenuItem" xmi:id="_U7ubkPNkEeOKm6R57HGa4g" elementId="org.eclipse.fx.code.compensator.app.handledmenuitem.0" label="Add File ..." command="_NKFrQPNkEeOKm6R57HGa4g"/> + <children xsi:type="menu:HandledMenuItem" xmi:id="_8NEskHQwEeSQ0Pmwy73byg" elementId="org.eclipse.fx.code.compensator.app.handledmenuitem.2" label="Add Folder ..." command="_zuhL4HQwEeSQ0Pmwy73byg"/> <children xsi:type="menu:HandledMenuItem" xmi:id="_KY76wEdBEeSZQYCAvKFSig" elementId="org.eclipse.fx.code.compensator.app.handledmenuitem.1" label="Save" command="_3He4MEdAEeSZQYCAvKFSig"/> </children> <children xsi:type="menu:Menu" xmi:id="_LCyGcAxQEeSN54I_YjEqrw" elementId="org.eclipse.fx.code.compensator.app.menu.2" label="Themes"> - <children xsi:type="menu:DirectMenuItem" xmi:id="_NgjJYAxQEeSN54I_YjEqrw" elementId="org.eclipse.fx.code.compensator.app.directmenuitem.0" label="Default" selected="true" type="Radio" contributionURI="bundleclass://org.eclipse.fx.code.compensator.app/org.eclipse.fx.code.compensator.app.ToggleThemeHandler"/> - <children xsi:type="menu:DirectMenuItem" xmi:id="_QnFcgAxQEeSN54I_YjEqrw" elementId="org.eclipse.fx.code.compensator.app.directmenuitem.1" label="Dark" type="Radio" contributionURI="bundleclass://org.eclipse.fx.code.compensator.app/org.eclipse.fx.code.compensator.app.ToggleThemeHandler"/> + <children xsi:type="menu:HandledMenuItem" xmi:id="_EX1_0HVIEeSh6_BeBEfIrA" elementId="org.eclipse.fx.code.compensator.app.handledmenuitem.3" label="Default" selected="true" type="Radio" command="_7TZj0HVHEeSh6_BeBEfIrA"> + <parameters xmi:id="_JtZvQHVIEeSh6_BeBEfIrA" elementId="org.eclipse.fx.code.compensator.app.parameter.0" name="themeId" value="default"/> + </children> + <children xsi:type="menu:HandledMenuItem" xmi:id="_HP7AMHVIEeSh6_BeBEfIrA" elementId="org.eclipse.fx.code.compensator.app.handledmenuitem.4" label="Dark" type="Radio" command="_7TZj0HVHEeSh6_BeBEfIrA"> + <parameters xmi:id="_OIZ68HVIEeSh6_BeBEfIrA" elementId="org.eclipse.fx.code.compensator.app.parameter.1" name="themeId" value="dark"/> + </children> </children> </mainMenu> </children> <handlers xmi:id="_FcDokPNkEeOKm6R57HGa4g" elementId="org.eclipse.fx.code.compensator.app.handler.0" contributionURI="bundleclass://org.eclipse.fx.code.compensator.app/org.eclipse.fx.code.compensator.app.LoadFile" command="_NKFrQPNkEeOKm6R57HGa4g"/> <handlers xmi:id="_R3Pi0POkEeOKm6R57HGa4g" elementId="org.eclipse.fx.code.compensator.app.handler.1" contributionURI="bundleclass://org.eclipse.fx.code.compensator.app/org.eclipse.fx.code.compensator.app.OpenFile" command="_VwzOUPOkEeOKm6R57HGa4g"/> <handlers xmi:id="_1rs2sEdAEeSZQYCAvKFSig" elementId="org.eclipse.fx.code.compensator.app.handler.2" contributionURI="bundleclass://org.eclipse.fx.code.compensator.app/org.eclipse.fx.code.compensator.app.SaveFile" command="_3He4MEdAEeSZQYCAvKFSig"/> + <handlers xmi:id="_1quZ4HQwEeSQ0Pmwy73byg" elementId="org.eclipse.fx.code.compensator.app.handler.3" contributionURI="bundleclass://org.eclipse.fx.code.compensator.app/org.eclipse.fx.code.compensator.app.LoadFolder" command="_zuhL4HQwEeSQ0Pmwy73byg"/> + <handlers xmi:id="_9c2joHVHEeSh6_BeBEfIrA" elementId="org.eclipse.fx.code.compensator.app.handler.4" contributionURI="bundleclass://org.eclipse.fx.code.compensator.app/org.eclipse.fx.code.compensator.app.ToggleThemeHandler" command="_7TZj0HVHEeSh6_BeBEfIrA"/> <bindingTables xmi:id="_iCgYwFRVEeSOIvvv6jFM3A" elementId="org.eclipse.fx.code.compensator.app.bindingtable.0" bindingContext="_fFsNwfG6EeOigcR0oBysUg"> <bindings xmi:id="_jaVuYFRVEeSOIvvv6jFM3A" elementId="org.eclipse.fx.code.compensator.app.keybinding.0" keySequence="M1+S" command="_3He4MEdAEeSZQYCAvKFSig"/> </bindingTables> @@ -26,6 +33,10 @@ <commands xmi:id="_NKFrQPNkEeOKm6R57HGa4g" elementId="org.eclipse.fx.code.compensator.app.command.0" commandName="Load File"/> <commands xmi:id="_VwzOUPOkEeOKm6R57HGa4g" elementId="org.eclipse.fx.code.compensator.app.command.1" commandName="Open File"/> <commands xmi:id="_3He4MEdAEeSZQYCAvKFSig" elementId="org.eclipse.fx.code.compensator.app.command.2" commandName="Save File"/> + <commands xmi:id="_zuhL4HQwEeSQ0Pmwy73byg" elementId="org.eclipse.fx.code.compensator.app.command.3" commandName="Load Folder"/> + <commands xmi:id="_7TZj0HVHEeSh6_BeBEfIrA" elementId="org.eclipse.fx.code.compensator.app.command.4" commandName="Switch Theme"> + <parameters xmi:id="_Agpr0HVIEeSh6_BeBEfIrA" elementId="themeId" name="Theme Id" optional="false"/> + </commands> <addons xmi:id="_fFsNw_G6EeOigcR0oBysUg" elementId="org.eclipse.e4.core.commands.service" contributionURI="bundleclass://org.eclipse.e4.core.commands/org.eclipse.e4.core.commands.CommandServiceAddon"/> <addons xmi:id="_fFsNxPG6EeOigcR0oBysUg" elementId="org.eclipse.e4.ui.contexts.service" contributionURI="bundleclass://org.eclipse.e4.ui.services/org.eclipse.e4.ui.services.ContextServiceAddon"/> <addons xmi:id="_fFsNxfG6EeOigcR0oBysUg" elementId="org.eclipse.fx.ui.keybindings.e4.service" contributionURI="bundleclass://org.eclipse.fx.ui.keybindings.e4/org.eclipse.fx.ui.keybindings.e4.BindingServiceAddon"/> diff --git a/experimental/compensator/org.eclipse.fx.code.compensator.app/bin/org/eclipse/fx/code/compensator/app/DirtyStateTrackerAddon.class b/experimental/compensator/org.eclipse.fx.code.compensator.app/bin/org/eclipse/fx/code/compensator/app/DirtyStateTrackerAddon.class Binary files differnew file mode 100644 index 000000000..5219cee40 --- /dev/null +++ b/experimental/compensator/org.eclipse.fx.code.compensator.app/bin/org/eclipse/fx/code/compensator/app/DirtyStateTrackerAddon.class diff --git a/experimental/compensator/org.eclipse.fx.code.compensator.app/bin/org/eclipse/fx/code/compensator/app/LoadFile.class b/experimental/compensator/org.eclipse.fx.code.compensator.app/bin/org/eclipse/fx/code/compensator/app/LoadFile.class Binary files differindex 5caad3a65..980c0856c 100644 --- a/experimental/compensator/org.eclipse.fx.code.compensator.app/bin/org/eclipse/fx/code/compensator/app/LoadFile.class +++ b/experimental/compensator/org.eclipse.fx.code.compensator.app/bin/org/eclipse/fx/code/compensator/app/LoadFile.class diff --git a/experimental/compensator/org.eclipse.fx.code.compensator.app/bin/org/eclipse/fx/code/compensator/app/LoadFolder.class b/experimental/compensator/org.eclipse.fx.code.compensator.app/bin/org/eclipse/fx/code/compensator/app/LoadFolder.class Binary files differnew file mode 100644 index 000000000..b050d2a24 --- /dev/null +++ b/experimental/compensator/org.eclipse.fx.code.compensator.app/bin/org/eclipse/fx/code/compensator/app/LoadFolder.class diff --git a/experimental/compensator/org.eclipse.fx.code.compensator.app/bin/org/eclipse/fx/code/compensator/app/OpenFile.class b/experimental/compensator/org.eclipse.fx.code.compensator.app/bin/org/eclipse/fx/code/compensator/app/OpenFile.class Binary files differindex e35233cc9..f1e999a29 100644 --- a/experimental/compensator/org.eclipse.fx.code.compensator.app/bin/org/eclipse/fx/code/compensator/app/OpenFile.class +++ b/experimental/compensator/org.eclipse.fx.code.compensator.app/bin/org/eclipse/fx/code/compensator/app/OpenFile.class diff --git a/experimental/compensator/org.eclipse.fx.code.compensator.app/bin/org/eclipse/fx/code/compensator/app/SaveFile.class b/experimental/compensator/org.eclipse.fx.code.compensator.app/bin/org/eclipse/fx/code/compensator/app/SaveFile.class Binary files differnew file mode 100644 index 000000000..e45dbbb45 --- /dev/null +++ b/experimental/compensator/org.eclipse.fx.code.compensator.app/bin/org/eclipse/fx/code/compensator/app/SaveFile.class diff --git a/experimental/compensator/org.eclipse.fx.code.compensator.app/bin/org/eclipse/fx/code/compensator/app/ToggleThemeHandler.class b/experimental/compensator/org.eclipse.fx.code.compensator.app/bin/org/eclipse/fx/code/compensator/app/ToggleThemeHandler.class Binary files differindex 9b8db7ef2..4344b44f1 100644 --- a/experimental/compensator/org.eclipse.fx.code.compensator.app/bin/org/eclipse/fx/code/compensator/app/ToggleThemeHandler.class +++ b/experimental/compensator/org.eclipse.fx.code.compensator.app/bin/org/eclipse/fx/code/compensator/app/ToggleThemeHandler.class diff --git a/experimental/compensator/org.eclipse.fx.code.compensator.app/src/org/eclipse/fx/code/compensator/app/LoadFile.java b/experimental/compensator/org.eclipse.fx.code.compensator.app/src/org/eclipse/fx/code/compensator/app/LoadFile.java index 29009db23..74b51753e 100644 --- a/experimental/compensator/org.eclipse.fx.code.compensator.app/src/org/eclipse/fx/code/compensator/app/LoadFile.java +++ b/experimental/compensator/org.eclipse.fx.code.compensator.app/src/org/eclipse/fx/code/compensator/app/LoadFile.java @@ -10,11 +10,14 @@ *******************************************************************************/ package org.eclipse.fx.code.compensator.app; +import java.nio.file.Paths; import java.util.Optional; + import javafx.stage.FileChooser; import javafx.stage.Stage; + import org.eclipse.e4.core.di.annotations.Execute; import org.eclipse.e4.core.services.events.IEventBroker; import org.eclipse.fx.code.compensator.model.workbench.Workbench; @@ -30,17 +33,17 @@ public class LoadFile { l.forEach((f) -> { try { org.eclipse.fx.code.compensator.model.workbench.File wf = WorkbenchFactory.eINSTANCE.createFile(); - wf.setUrl(f.toURI().toURL().toExternalForm()); - wb.getResources().add(wf); + wf.setUrl(Paths.get(f.toURI()).toUri().toString()); + wb.getResources().add(wf); } catch (Exception e) { // TODO Auto-generated catch block e.printStackTrace(); } }); - + } ); - + } - + }
\ No newline at end of file diff --git a/experimental/compensator/org.eclipse.fx.code.compensator.app/src/org/eclipse/fx/code/compensator/app/LoadFolder.java b/experimental/compensator/org.eclipse.fx.code.compensator.app/src/org/eclipse/fx/code/compensator/app/LoadFolder.java new file mode 100644 index 000000000..37acfc373 --- /dev/null +++ b/experimental/compensator/org.eclipse.fx.code.compensator.app/src/org/eclipse/fx/code/compensator/app/LoadFolder.java @@ -0,0 +1,36 @@ +package org.eclipse.fx.code.compensator.app; + +import java.nio.file.Paths; +import java.util.Optional; + + +import javafx.stage.DirectoryChooser; +import javafx.stage.Stage; + + +import org.eclipse.e4.core.di.annotations.Execute; +import org.eclipse.e4.core.services.events.IEventBroker; +import org.eclipse.fx.code.compensator.model.workbench.Folder; +import org.eclipse.fx.code.compensator.model.workbench.Workbench; +import org.eclipse.fx.code.compensator.model.workbench.WorkbenchFactory; + +public class LoadFolder { + @Execute + public void execute(Stage parent, IEventBroker eventBroker, Workbench wb) { + DirectoryChooser chooser = new DirectoryChooser(); + Optional.ofNullable(chooser.showDialog(parent)).ifPresent((l) -> + { + try { + Folder f = WorkbenchFactory.eINSTANCE.createFolder(); + f.setUrl(Paths.get(l.toURI()).toUri().toString()); + wb.getResources().add(f); + } catch (Exception e) { + // TODO Auto-generated catch block + e.printStackTrace(); + } + + } + ); + + } +} diff --git a/experimental/compensator/org.eclipse.fx.code.compensator.app/src/org/eclipse/fx/code/compensator/app/OpenFile.java b/experimental/compensator/org.eclipse.fx.code.compensator.app/src/org/eclipse/fx/code/compensator/app/OpenFile.java index 471f8e826..37fdcd1ce 100644 --- a/experimental/compensator/org.eclipse.fx.code.compensator.app/src/org/eclipse/fx/code/compensator/app/OpenFile.java +++ b/experimental/compensator/org.eclipse.fx.code.compensator.app/src/org/eclipse/fx/code/compensator/app/OpenFile.java @@ -20,25 +20,29 @@ import org.eclipse.e4.ui.workbench.modeling.EPartService; import org.eclipse.e4.ui.workbench.modeling.EPartService.PartState; import org.eclipse.emf.common.util.URI; import org.eclipse.fx.code.compensator.editor.TextEditor; +import org.eclipse.fx.code.compensator.editor.services.FileIconLookup; import org.eclipse.fx.code.compensator.model.workbench.File; public class OpenFile { @Execute - public void openFile(MPerspective perspective, EModelService service, File file, EPartService partService) { + public void openFile(MPerspective perspective, EModelService service, File file, EPartService partService, FileIconLookup lookup) { + MPartStack element = (MPartStack) service.find("org.eclipse.fx.code.compensator.freeedit.partstack.1", perspective); - + for( MStackElement p : element.getChildren() ) { if( file.getUrl().equals(p.getPersistedState().get(TextEditor.DOCUMENT_URL)) ) { partService.showPart((MPart)p, PartState.ACTIVATE); return; } } - + MPart p = service.createModelElement(MPart.class); p.setContributionURI("bundleclass://org.eclipse.fx.code.compensator.editor/org.eclipse.fx.code.compensator.editor.TextEditor"); p.getPersistedState().put(TextEditor.DOCUMENT_URL, file.getUrl()); p.setLabel(URI.createURI(file.getUrl()).lastSegment()); + p.setIconURI(lookup.getFileIcon(file.getUrl())); p.setCloseable(true); + p.getTags().add(EPartService.REMOVE_ON_HIDE_TAG); element.getChildren().add(p); partService.showPart(p, PartState.ACTIVATE); } diff --git a/experimental/compensator/org.eclipse.fx.code.compensator.app/src/org/eclipse/fx/code/compensator/app/ToggleThemeHandler.java b/experimental/compensator/org.eclipse.fx.code.compensator.app/src/org/eclipse/fx/code/compensator/app/ToggleThemeHandler.java index 0ef60e575..a3fb81c84 100644 --- a/experimental/compensator/org.eclipse.fx.code.compensator.app/src/org/eclipse/fx/code/compensator/app/ToggleThemeHandler.java +++ b/experimental/compensator/org.eclipse.fx.code.compensator.app/src/org/eclipse/fx/code/compensator/app/ToggleThemeHandler.java @@ -1,5 +1,7 @@ package org.eclipse.fx.code.compensator.app; +import javax.inject.Named; + import org.eclipse.core.runtime.preferences.IEclipsePreferences; import org.eclipse.e4.core.di.annotations.Execute; import org.eclipse.e4.core.di.extensions.Preference; @@ -9,15 +11,9 @@ import org.eclipse.fx.ui.services.theme.ThemeManager; public class ToggleThemeHandler { @Preference IEclipsePreferences preference; - + @Execute - public void toggleTheme(ThemeManager manager) { - if( "default".equals(manager.getCurrentTheme().getId())) { - System.err.println("SETTING DARK"); - manager.setCurrentThemeId("dark"); - } else { - System.err.println("SETTING DEFAULT"); - manager.setCurrentThemeId("default"); - } + public void toggleTheme(ThemeManager manager, @Named("themeId") String themeId) { + manager.setCurrentThemeId(themeId); } } diff --git a/experimental/compensator/org.eclipse.fx.code.compensator.editor.contrib/OSGI-INF/services/activeOutline.xml b/experimental/compensator/org.eclipse.fx.code.compensator.editor.contrib/OSGI-INF/services/activeOutline.xml new file mode 100644 index 000000000..981673e2f --- /dev/null +++ b/experimental/compensator/org.eclipse.fx.code.compensator.editor.contrib/OSGI-INF/services/activeOutline.xml @@ -0,0 +1,8 @@ +<?xml version="1.0" encoding="UTF-8"?> +<scr:component xmlns:scr="http://www.osgi.org/xmlns/scr/v1.1.0" name="org.eclipse.fx.code.compensator.editor.contrib.activeOutline"> + <implementation class="org.eclipse.fx.code.compensator.editor.contrib.ActiveOutlineContextFunction"/> + <service> + <provide interface="org.eclipse.e4.core.contexts.IContextFunction"/> + </service> + <property name="service.context.key" type="String" value="activeOutline"/> +</scr:component> diff --git a/experimental/compensator/org.eclipse.fx.code.compensator.editor.contrib/OSGI-INF/services/servicecollector.xml b/experimental/compensator/org.eclipse.fx.code.compensator.editor.contrib/OSGI-INF/services/servicecollector.xml index f9623dd06..3ea5273e4 100644 --- a/experimental/compensator/org.eclipse.fx.code.compensator.editor.contrib/OSGI-INF/services/servicecollector.xml +++ b/experimental/compensator/org.eclipse.fx.code.compensator.editor.contrib/OSGI-INF/services/servicecollector.xml @@ -4,10 +4,12 @@ <service> <provide interface="org.eclipse.fx.code.compensator.editor.contrib.ServiceCollector"/> <provide interface="org.eclipse.fx.code.compensator.editor.services.DocumentPersitenceService"/> + <provide interface="org.eclipse.fx.code.compensator.editor.services.FileIconLookup"/> </service> <reference bind="addInputFactory" cardinality="0..n" interface="org.eclipse.fx.code.compensator.editor.services.InputFactory" name="InputFactory" policy="dynamic" unbind="removeInputFactory"/> <reference bind="addDocumentFactory" cardinality="0..n" interface="org.eclipse.fx.code.compensator.editor.services.DocumentFactory" name="DocumentFactory" policy="dynamic" unbind="removeDocumentFactory"/> <reference bind="addPartitionerFactory" cardinality="0..n" interface="org.eclipse.fx.code.compensator.editor.services.PartitionerFactory" name="PartitionerFactory" policy="dynamic" unbind="removePartitionerFactory"/> <reference bind="addSourceViewerConfigurationFactory" cardinality="0..n" interface="org.eclipse.fx.code.compensator.editor.services.SourceViewerConfigurationFactory" name="SourceViewerConfigurationFactory" policy="dynamic" unbind="removeSourceViewerConfigurationFactory"/> <reference bind="addOutlineFactory" cardinality="0..n" interface="org.eclipse.fx.code.compensator.editor.services.OutlineFactory" name="OutlineFactory" policy="dynamic" unbind="removeOutlineFactory"/> + <reference bind="addFileIconProvider" cardinality="0..n" interface="org.eclipse.fx.code.compensator.editor.services.FileIconProvider" name="FileIconProvider" policy="dynamic" unbind="removeFileIconProvider"/> </scr:component> diff --git a/experimental/compensator/org.eclipse.fx.code.compensator.editor.contrib/src/org/eclipse/fx/code/compensator/editor/contrib/ActiveOutlineContextFunction.java b/experimental/compensator/org.eclipse.fx.code.compensator.editor.contrib/src/org/eclipse/fx/code/compensator/editor/contrib/ActiveOutlineContextFunction.java new file mode 100644 index 000000000..50ec6183d --- /dev/null +++ b/experimental/compensator/org.eclipse.fx.code.compensator.editor.contrib/src/org/eclipse/fx/code/compensator/editor/contrib/ActiveOutlineContextFunction.java @@ -0,0 +1,40 @@ +package org.eclipse.fx.code.compensator.editor.contrib; + +import java.util.Optional; + +import org.eclipse.e4.core.contexts.ContextFunction; +import org.eclipse.e4.core.contexts.IEclipseContext; +import org.eclipse.e4.core.contexts.RunAndTrack; +import org.eclipse.fx.code.compensator.editor.Input; +import org.eclipse.fx.code.compensator.editor.Outline; + +public class ActiveOutlineContextFunction extends ContextFunction { + @Override + public Object compute(IEclipseContext outerContext, String contextKey) { + if( outerContext.containsKey("_local_rat") ) { + return null; + } + + outerContext.set("_local_rat", Boolean.TRUE); + outerContext.runAndTrack(new RunAndTrack() { + + @Override + public boolean changed(IEclipseContext context) { + outerContext.set("activeOutline",createOutline(context)); + return true; + } + }); + return createOutline(outerContext); + } + + private Outline createOutline(IEclipseContext context) { + Input<?> input = (Input<?>) context.get("activeInput"); + if( input != null ) { + Optional<Outline> outline = context.get(ServiceCollector.class).createOutline(input); + if( outline.isPresent() ) { + return outline.get(); + } + } + return null; + } +} diff --git a/experimental/compensator/org.eclipse.fx.code.compensator.editor.contrib/src/org/eclipse/fx/code/compensator/editor/contrib/ServiceCollector.java b/experimental/compensator/org.eclipse.fx.code.compensator.editor.contrib/src/org/eclipse/fx/code/compensator/editor/contrib/ServiceCollector.java index efae780ff..7baebdb5f 100644 --- a/experimental/compensator/org.eclipse.fx.code.compensator.editor.contrib/src/org/eclipse/fx/code/compensator/editor/contrib/ServiceCollector.java +++ b/experimental/compensator/org.eclipse.fx.code.compensator.editor.contrib/src/org/eclipse/fx/code/compensator/editor/contrib/ServiceCollector.java @@ -18,6 +18,8 @@ import org.eclipse.fx.code.compensator.editor.Input; import org.eclipse.fx.code.compensator.editor.Outline; import org.eclipse.fx.code.compensator.editor.services.DocumentFactory; import org.eclipse.fx.code.compensator.editor.services.DocumentPersitenceService; +import org.eclipse.fx.code.compensator.editor.services.FileIconLookup; +import org.eclipse.fx.code.compensator.editor.services.FileIconProvider; import org.eclipse.fx.code.compensator.editor.services.InputFactory; import org.eclipse.fx.code.compensator.editor.services.OutlineFactory; import org.eclipse.fx.code.compensator.editor.services.PartitionerFactory; @@ -26,12 +28,13 @@ import org.eclipse.jface.text.IDocument; import org.eclipse.jface.text.IDocumentPartitioner; import org.eclipse.jface.text.source.SourceViewerConfiguration; -public class ServiceCollector implements DocumentPersitenceService { +public class ServiceCollector implements DocumentPersitenceService, FileIconLookup { private List<InputFactory> inputProviderList = new ArrayList<>(); private List<DocumentFactory> documentProvider = new ArrayList<>(); private List<PartitionerFactory> partitionerProvider = new ArrayList<>(); private List<OutlineFactory> outlineFactoryList = new ArrayList<>(); private List<SourceViewerConfigurationFactory> configurationProvider = new ArrayList<>(); + private List<FileIconProvider> fileIconProvider = new ArrayList<>(); public void addInputFactory(InputFactory provider) { inputProviderList.add(provider); @@ -73,6 +76,14 @@ public class ServiceCollector implements DocumentPersitenceService { outlineFactoryList.remove(factory); } + public void addFileIconProvider(FileIconProvider provider) { + fileIconProvider.add(provider); + } + + public void removeFileIconProvider(FileIconProvider provider) { + fileIconProvider.add(provider); + } + public <O> Input<O> createInput(String url) { Optional<Input<O>> map = inputProviderList.stream().filter((p) -> p.applies(url)).findFirst().map((p) -> p.createInput(url)); if( map.isPresent() ) { @@ -106,6 +117,14 @@ public class ServiceCollector implements DocumentPersitenceService { return map.get(); } + public String getFileIcon(String uri) { + Optional<String> map = fileIconProvider.stream().filter((p) -> p.applies(uri)).findFirst().map((p) -> p.getIcon(uri)); + if( map.isPresent() ) { + return map.get(); + } + return null; + } + @Override public boolean persist(IDocument d) { for( DocumentFactory f : documentProvider ) { diff --git a/experimental/compensator/org.eclipse.fx.code.compensator.editor.java/OSGI-INF/services/javacomponent.xml b/experimental/compensator/org.eclipse.fx.code.compensator.editor.java/OSGI-INF/services/javacomponent.xml index f2b4bbd3e..0734876f1 100644 --- a/experimental/compensator/org.eclipse.fx.code.compensator.editor.java/OSGI-INF/services/javacomponent.xml +++ b/experimental/compensator/org.eclipse.fx.code.compensator.editor.java/OSGI-INF/services/javacomponent.xml @@ -4,5 +4,6 @@ <service> <provide interface="org.eclipse.fx.code.compensator.editor.services.PartitionerFactory"/> <provide interface="org.eclipse.fx.code.compensator.editor.services.SourceViewerConfigurationFactory"/> + <provide interface="org.eclipse.fx.code.compensator.editor.services.FileIconProvider"/> </service> </scr:component> diff --git a/experimental/compensator/org.eclipse.fx.code.compensator.editor.java/icons/16/java-file.png b/experimental/compensator/org.eclipse.fx.code.compensator.editor.java/icons/16/java-file.png Binary files differnew file mode 100644 index 000000000..13e0fc257 --- /dev/null +++ b/experimental/compensator/org.eclipse.fx.code.compensator.editor.java/icons/16/java-file.png diff --git a/experimental/compensator/org.eclipse.fx.code.compensator.editor.java/icons/java-file.svg b/experimental/compensator/org.eclipse.fx.code.compensator.editor.java/icons/java-file.svg new file mode 100644 index 000000000..260522d23 --- /dev/null +++ b/experimental/compensator/org.eclipse.fx.code.compensator.editor.java/icons/java-file.svg @@ -0,0 +1,499 @@ +<?xml version="1.0" encoding="UTF-8" standalone="no"?> +<!-- Created with Inkscape (http://www.inkscape.org/) --> + +<svg + xmlns:dc="http://purl.org/dc/elements/1.1/" + xmlns:cc="http://creativecommons.org/ns#" + xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" + xmlns:svg="http://www.w3.org/2000/svg" + xmlns="http://www.w3.org/2000/svg" + xmlns:xlink="http://www.w3.org/1999/xlink" + xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" + xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" + width="128" + height="128" + id="svg2606" + sodipodi:version="0.32" + inkscape:version="0.48.5 r10040" + version="1.0" + sodipodi:docname="application-x-zerosize.svgz" + inkscape:output_extension="org.inkscape.output.svgz.inkscape" + inkscape:export-filename="/home/pinheiro/pics/oxygen-icons/scalable/mimetypes/mime2.png" + inkscape:export-xdpi="360" + inkscape:export-ydpi="360"> + <defs + id="defs2608"> + <linearGradient + inkscape:collect="always" + id="linearGradient3913"> + <stop + style="stop-color:#ffffff;stop-opacity:1;" + offset="0" + id="stop3915" /> + <stop + style="stop-color:#ffffff;stop-opacity:0;" + offset="1" + id="stop3917" /> + </linearGradient> + <linearGradient + id="linearGradient3897"> + <stop + style="stop-color:#fcfcfc;stop-opacity:1" + offset="0" + id="stop3899" /> + <stop + id="stop3901" + offset="0.52275378" + style="stop-color:#f8f8f8;stop-opacity:1" /> + <stop + style="stop-color:#f0efef;stop-opacity:1;" + offset="0.72337759" + id="stop3903" /> + <stop + style="stop-color:#e3e1e1;stop-opacity:1;" + offset="0.89024991" + id="stop3905" /> + <stop + style="stop-color:#cecbcb;stop-opacity:1" + offset="1" + id="stop3907" /> + </linearGradient> + <linearGradient + id="linearGradient6131"> + <stop + id="stop6133" + offset="0" + style="stop-color:#fcfcfc;stop-opacity:1" /> + <stop + style="stop-color:#f8f8f8;stop-opacity:1" + offset="0.52275378" + id="stop6135" /> + <stop + id="stop6141" + offset="0.77457333" + style="stop-color:#f0efef;stop-opacity:1;" /> + <stop + id="stop6139" + offset="0.90122044" + style="stop-color:#e3e1e1;stop-opacity:1;" /> + <stop + id="stop6137" + offset="1" + style="stop-color:#cecbcb;stop-opacity:1" /> + </linearGradient> + <linearGradient + inkscape:collect="always" + id="linearGradient5982"> + <stop + style="stop-color:#ffffff;stop-opacity:1;" + offset="0" + id="stop5984" /> + <stop + style="stop-color:#ffffff;stop-opacity:0;" + offset="1" + id="stop5986" /> + </linearGradient> + <linearGradient + id="linearGradient4518"> + <stop + style="stop-color:#eeecec;stop-opacity:1" + offset="0" + id="stop4520" /> + <stop + id="stop5969" + offset="0.40000001" + style="stop-color:#f4f4f4;stop-opacity:1" /> + <stop + style="stop-color:#f6f5f5;stop-opacity:1" + offset="1" + id="stop4522" /> + </linearGradient> + <linearGradient + inkscape:collect="always" + xlink:href="#linearGradient4518" + id="linearGradient4524" + x1="72" + y1="0" + x2="72" + y2="116.40091" + gradientUnits="userSpaceOnUse" /> + <radialGradient + inkscape:collect="always" + xlink:href="#linearGradient5982" + id="radialGradient5988" + cx="64" + cy="64.004021" + fx="63.793392" + fy="47.274845" + r="47.5" + gradientTransform="matrix(1.6842105,-0.08429519,0.06886339,1.3758846,-48.197002,-18.663233)" + gradientUnits="userSpaceOnUse" /> + <clipPath + clipPathUnits="userSpaceOnUse" + id="clipPath6093"> + <path + inkscape:connector-curvature="0" + sodipodi:nodetypes="cccssccc" + id="path6095" + d="M 17.000001,8 17,120 l 57.5,0 c 1.675283,0 3.914297,-0.56468 7,-3.6 8.870045,-8.72523 20.24047,-19.851805 27.49904,-27.175957 C 111.4396,86.761431 112,84.752873 112,82.5 L 112,8 z" + style="fill:#ffffff;fill-opacity:1" /> + </clipPath> + <filter + inkscape:collect="always" + id="filter6118" + x="-0.1126375" + width="1.225275" + y="-0.12064722" + height="1.2412944"> + <feGaussianBlur + inkscape:collect="always" + stdDeviation="2.3860572" + id="feGaussianBlur6120" /> + </filter> + <filter + inkscape:collect="always" + id="filter6171" + x="-0.47870938" + width="1.9574188" + y="-0.51275067" + height="2.0255013"> + <feGaussianBlur + inkscape:collect="always" + stdDeviation="10.140743" + id="feGaussianBlur6173" /> + </filter> + <clipPath + clipPathUnits="userSpaceOnUse" + id="clipPath3889"> + <path + sodipodi:nodetypes="cscscssc" + inkscape:connector-curvature="0" + id="path3891" + d="m 112,82.502986 c 0,4.465301 -2.79749,6.409952 -5.27972,8.093625 -5.10854,3.46508 -14.939114,3.32536 -20.720284,3.40638 -0.081,5.781159 0.16586,15.504599 -3.29922,20.613139 -1.68367,2.48224 -5.29051,5.38687 -8.20078,5.38687 2.31803,0 4.74284,-1.33476 7.58402,-4.08481 9.14197,-8.84873 17.36714,-16.13535 25.673154,-25.297529 C 109.67612,88.503916 112,86.97878 112,82.502986 z" + style="fill:url(#linearGradient3893);fill-opacity:1;stroke:none" /> + </clipPath> + <linearGradient + inkscape:collect="always" + xlink:href="#linearGradient6131" + id="linearGradient3893" + gradientUnits="userSpaceOnUse" + gradientTransform="matrix(1.0119858,0,0,1.0119858,-0.89554075,-0.9871566)" + x1="86.73793" + y1="93.621468" + x2="95.460213" + y2="102.34375" /> + <linearGradient + inkscape:collect="always" + xlink:href="#linearGradient3897" + id="linearGradient3895" + gradientUnits="userSpaceOnUse" + gradientTransform="matrix(1.0119858,0,0,1.0119858,-0.89554075,-0.9871566)" + x1="86.73793" + y1="93.621468" + x2="95.18235" + y2="102.06589" /> + <filter + inkscape:collect="always" + id="filter3909"> + <feGaussianBlur + inkscape:collect="always" + stdDeviation="0.43040059" + id="feGaussianBlur3911" /> + </filter> + <radialGradient + inkscape:collect="always" + xlink:href="#linearGradient3913" + id="radialGradient3919" + cx="90.75" + cy="110.25299" + fx="90.75" + fy="110.25299" + r="18.750002" + gradientTransform="matrix(1.3067347,0,0,1.3067347,-27.83617,-33.818441)" + gradientUnits="userSpaceOnUse" /> + <filter + inkscape:collect="always" + id="filter3826"> + <feGaussianBlur + inkscape:collect="always" + stdDeviation="1.036" + id="feGaussianBlur3828" /> + </filter> + <filter + inkscape:collect="always" + id="filter3834"> + <feGaussianBlur + inkscape:collect="always" + stdDeviation="1.50075" + id="feGaussianBlur3836" /> + </filter> + </defs> + <sodipodi:namedview + id="base" + pagecolor="#ffffff" + bordercolor="#666666" + borderopacity="1.0" + inkscape:pageopacity="0.0" + inkscape:pageshadow="2" + inkscape:zoom="2" + inkscape:cx="113.12969" + inkscape:cy="55.534031" + inkscape:document-units="px" + inkscape:current-layer="layer1" + width="128px" + height="128px" + showgrid="false" + inkscape:grid-points="true" + showguides="true" + inkscape:guide-bbox="true" + inkscape:window-width="1108" + inkscape:window-height="774" + inkscape:window-x="553" + inkscape:window-y="39" + inkscape:snap-global="true" + inkscape:window-maximized="0" + inkscape:snap-page="true" + inkscape:snap-grids="false" + inkscape:snap-to-guides="false"> + <inkscape:grid + id="GridFromPre046Settings" + type="xygrid" + originx="0px" + originy="0px" + spacingx="1px" + spacingy="1px" + color="#0000ff" + empcolor="#0000ff" + opacity="0.2" + empopacity="0.4" + empspacing="2" + visible="true" + enabled="true" + snapvisiblegridlinesonly="true" /> + <sodipodi:guide + orientation="1,0" + position="-68,29.325902" + id="guide4564" /> + <sodipodi:guide + orientation="1,0" + position="-51.972348,130.81475" + id="guide3859" /> + </sodipodi:namedview> + <metadata + id="metadata2611"> + <rdf:RDF> + <cc:Work + rdf:about=""> + <dc:format>image/svg+xml</dc:format> + <dc:type + rdf:resource="http://purl.org/dc/dcmitype/StillImage" /> + <dc:title></dc:title> + </cc:Work> + </rdf:RDF> + </metadata> + <g + inkscape:label="Livello 1" + inkscape:groupmode="layer" + id="layer1"> + <path + style="opacity:0.26237623999999998;fill:#000000;fill-opacity:1;filter:url(#filter3834)" + d="m 17,8.5 0,112 58.1875,0 c 2.115556,0 4.528919,-1.77169 7,-4.25 0.71234,-0.71442 1.440746,-1.39395 2.15625,-2.09375 0.415612,-0.40649 0.832187,-0.81443 1.25,-1.21875 7.773958,-7.40962 14.98341,-14.022603 22.21875,-22 0.42065,-0.420645 0.81207,-0.811101 1.15625,-1.1875 1.46444,-1.497657 2.76158,-2.837804 2.99375,-5.8625 L 112,83.15625 112,8.5 z" + id="path5990" + inkscape:connector-curvature="0" + sodipodi:nodetypes="ccsssccccccc" + inkscape:export-filename="/Users/tomschindl/java-file.png" + inkscape:export-xdpi="11.25" + inkscape:export-ydpi="11.25" /> + <path + sodipodi:nodetypes="cccssccc" + id="path3722" + d="M 17.000001,8 17,120.2 l 57.746418,0 c 4.168166,0 7.728581,-4.85625 20.853582,-17.1 7.48636,-6.9837 10.43958,-10.889428 13.15009,-13.599933 C 110.49334,87.756815 112,86.462557 112,82.3 L 112,8 z" + style="fill:#000000;fill-opacity:0.70053478000000002;filter:url(#filter3826)" + inkscape:connector-curvature="0" + inkscape:export-filename="/Users/tomschindl/java-file.png" + inkscape:export-xdpi="11.25" + inkscape:export-ydpi="11.25" /> + <path + style="fill:#ffffff;fill-opacity:1" + d="M 17.000001,8 17,120 l 57.5,0 c 1.675283,0 3.914297,-0.56468 7,-3.6 8.870045,-8.72523 20.24047,-19.851805 27.49904,-27.175957 C 111.4396,86.761431 112,84.752873 112,82.5 L 112,8 z" + id="path34" + sodipodi:nodetypes="cccssccc" + inkscape:connector-curvature="0" + inkscape:export-filename="/Users/tomschindl/java-file.png" + inkscape:export-xdpi="11.25" + inkscape:export-ydpi="11.25" /> + <path + style="fill:url(#linearGradient4524);fill-opacity:1" + d="M 18.5,9 C 18.160156,9 18,9.2346178 18,9.5 l 0,107.96875 c 0,0.82158 0.679323,1.5 1.5,1.5 l 53.6875,0 c 0.05307,0 0.810384,0.0234 1.5,0.0313 1.777664,-0.0401 3.131974,-0.75374 4.356035,-1.59328 1.051866,-0.29103 20.649835,-19.619593 29.770955,-28.809238 1.36239,-1.372621 2.18546,-3.948169 2.18546,-4.895612 L 111,9.5 C 111,9.1772826 110.83678,9 110.5,9 z" + id="path3967" + inkscape:connector-curvature="0" + sodipodi:nodetypes="ccsssccscccc" + inkscape:export-filename="/Users/tomschindl/java-file.png" + inkscape:export-xdpi="11.25" + inkscape:export-ydpi="11.25" /> + <path + clip-path="url(#clipPath6093)" + style="opacity:0.27722772;fill:#000000;fill-opacity:1;stroke:none;filter:url(#filter6171)" + d="m 114.4,82.502986 c 0,4.465301 -4.99749,6.609952 -7.47972,8.293625 -5.10854,3.46508 -14.739114,3.52536 -20.520284,3.60638 -0.081,5.781159 -0.03414,15.304599 -3.49922,20.413139 -1.68367,2.48224 -5.79051,8.68687 -8.70078,8.68687 -2.091359,1.5337 3.488204,8.21101 6.734971,5.31989 9.501888,-8.46107 35.131683,-30.022704 43.350823,-39.262889 2.04044,-2.29392 -4.90514,-9.844666 -9.88579,-7.057015 z" + id="path6153" + inkscape:connector-curvature="0" + sodipodi:nodetypes="cscscssc" + inkscape:export-filename="/Users/tomschindl/java-file.png" + inkscape:export-xdpi="11.25" + inkscape:export-ydpi="11.25" /> + <path + style="fill:#000000" + d="" + id="path2197" /> + <g + style="display:none" + id="Frame_copy" + display="none" + transform="translate(1042.0419,-279.83386)"> + <g + style="display:inline" + display="inline" + id="g3978"> + <image + style="opacity:0.75" + width="571" + height="571" + xlink:href="data:image/png;base64,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" + id="image3980" /> + <g + id="g3982"> + <circle + sodipodi:ry="275.909" + sodipodi:rx="275.909" + sodipodi:cy="278.93399" + sodipodi:cx="279.51501" + cx="279.51501" + cy="278.93399" + r="275.909" + id="circle3984" + d="m 555.42401,278.93399 c 0,152.38033 -123.52866,275.909 -275.909,275.909 -152.38033,0 -275.9089919,-123.52867 -275.9089919,-275.909 0,-152.38033 123.5286619,-275.9089961 275.9089919,-275.9089961 152.38034,0 275.909,123.5286661 275.909,275.9089961 z" /> + </g> + </g> + <g + style="display:inline" + id="Frame_copy_1_" + display="inline" /> + </g> + <g + style="display:none" + id="Frame_copy_2" + display="none" + transform="translate(1042.0419,-279.83386)"> + <circle + style="fill:#ffffff;display:inline" + sodipodi:ry="275.909" + sodipodi:rx="275.909" + sodipodi:cy="278.93399" + sodipodi:cx="279.51501" + display="inline" + cx="279.51501" + cy="278.93399" + r="275.909" + id="circle3988" + d="m 555.42401,278.93399 c 0,152.38033 -123.52866,275.909 -275.909,275.909 -152.38033,0 -275.9089919,-123.52867 -275.9089919,-275.909 0,-152.38033 123.5286619,-275.9089961 275.9089919,-275.9089961 152.38034,0 275.909,123.5286661 275.909,275.9089961 z" /> + <g + style="display:inline" + id="Frame_copy_2_1_" + display="inline" /> + </g> + <g + id="Foreground_Grid_1_" + transform="matrix(0.333692,0,0,0.333692,-610.81394,-151.23635)" /> + <g + id="layer4" + inkscape:label="box" + style="display:inline" + transform="matrix(0.6433923,0,0,0.6433923,563.19164,120.38376)" /> + <g + id="layer5" + inkscape:label="zip_app" + style="display:inline" + transform="matrix(0.6433923,0,0,0.6433923,563.19164,120.38376)" /> + <rect + style="opacity:0.57786889;fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none" + id="rect1327" + width="0.64339232" + height="0" + x="563.78369" + y="130.76021" /> + <path + sodipodi:nodetypes="ccssscccccc" + inkscape:connector-curvature="0" + id="path5980" + d="M 18.5,9 C 18.160156,9 18,9.2346178 18,9.5 l 0,107.96875 c 0,0.82158 0.679323,1.49953 1.5,1.5 L 74,119 c 0.05307,3e-5 3.273884,-0.008 3.9635,5e-5 6.540972,-4.50361 22.6373,-21.953284 31.58253,-30.955094 1.47685,-1.656484 0.4576,-0.370067 1.45391,-1.607456 L 111,9.5 C 111,9.1772826 110.83678,9 110.5,9 z" + style="opacity:0.84653476;fill:url(#radialGradient5988);fill-opacity:1" + inkscape:export-filename="/Users/tomschindl/java-file.png" + inkscape:export-xdpi="11.25" + inkscape:export-ydpi="11.25" /> + <path + sodipodi:nodetypes="cscscssc" + inkscape:connector-curvature="0" + id="path6081" + d="m 113.9,82.502986 c 0,4.465301 -4.49749,6.609952 -6.97972,8.293625 -5.10854,3.46508 -14.739114,3.52536 -20.520284,3.60638 -0.081,5.781159 0.76586,15.304599 -2.69922,20.413139 -1.68367,2.48224 -5.79051,7.98687 -8.70078,7.98687 -2.091359,1.5337 3.488204,11.21101 6.734971,8.31989 9.501888,-8.46107 45.998943,-30.20138 54.218083,-39.441569 2.04044,-2.29392 -17.0724,-11.965986 -22.05305,-9.178335 z" + style="opacity:0.40099009;fill:#000000;fill-opacity:1;stroke:none;filter:url(#filter6118)" + clip-path="url(#clipPath6093)" + inkscape:export-filename="/Users/tomschindl/java-file.png" + inkscape:export-xdpi="11.25" + inkscape:export-ydpi="11.25" /> + <path + style="fill:url(#linearGradient3895);fill-opacity:1;stroke:none" + d="m 112,82.502986 c 0,4.465301 -2.79749,6.409952 -5.27972,8.093625 -5.10854,3.46508 -14.939114,3.32536 -20.720284,3.40638 -0.081,5.781159 0.16586,15.504599 -3.29922,20.613139 -1.68367,2.48224 -5.29051,5.38687 -8.20078,5.38687 2.31803,0 4.74284,-1.33476 7.58402,-4.08481 9.14197,-8.84873 17.36714,-16.13535 25.673154,-25.297529 C 109.67612,88.503916 112,86.97878 112,82.502986 z" + id="path6011" + inkscape:connector-curvature="0" + sodipodi:nodetypes="cscscssc" + inkscape:export-filename="/Users/tomschindl/java-file.png" + inkscape:export-xdpi="11.25" + inkscape:export-ydpi="11.25" /> + <path + style="fill:#ffffff;fill-opacity:1;stroke:none" + d="m 112.01875,83.2125 c -0.31643,3.899106 -3.52291,5.902807 -5.85,7.48125 C 101.06021,94.15883 90.83117,93.01898 85.05,93.1 c -0.081,5.781159 0.85258,16.31646 -2.6125,21.425 -1.473211,2.17196 -4.099456,4.6601 -6.7625,5.25 1.980459,-0.3623 3.884931,-1.66139 6.26875,-3.96875 0.339117,-0.38853 0.574297,-0.67895 1.10625,-1.5 3.46508,-5.10854 2.923687,-14.465715 3.004687,-20.246875 5.78117,-0.08102 15.718023,0.211955 20.826563,-3.253125 0.46542,-0.315689 1.59399,-1.187744 2.00625,-1.6 1.53629,-1.536293 2.90171,-2.613421 3.13125,-5.99375 z M 75.675,119.775 c -0.157658,0.0349 -0.313437,0.0414 -0.46875,0.0625 0.156991,-0.0169 0.310443,-0.0335 0.46875,-0.0625 z" + id="path6122" + inkscape:connector-curvature="0" + sodipodi:nodetypes="cscsccccsscccc" + inkscape:export-filename="/Users/tomschindl/java-file.png" + inkscape:export-xdpi="11.25" + inkscape:export-ydpi="11.25" /> + <path + style="fill:none;stroke:url(#radialGradient3919);stroke-width:1.2;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;filter:url(#filter3909)" + d="M 117.31456,81.861283 72.639105,125.34835" + id="path3873" + inkscape:connector-curvature="0" + sodipodi:nodetypes="cc" + clip-path="url(#clipPath3889)" + inkscape:export-filename="/Users/tomschindl/java-file.png" + inkscape:export-xdpi="11.25" + inkscape:export-ydpi="11.25" /> + <rect + style="opacity:0.01;fill:#fbfbfb;fill-opacity:0.00392157000000000;stroke:none" + id="rect3915" + width="128" + height="128" + x="0" + y="-1.7084319e-12" + rx="0" + ry="0" + inkscape:export-filename="/Users/tomschindl/java-file.png" + inkscape:export-xdpi="11.25" + inkscape:export-ydpi="11.25" /> + <text + xml:space="preserve" + style="font-size:40px;font-style:normal;font-weight:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#2ca02c;fill-opacity:1;stroke:none;font-family:Sans" + x="46" + y="92.5" + id="text3051" + sodipodi:linespacing="125%" + inkscape:export-filename="/Users/tomschindl/java-file.png" + inkscape:export-xdpi="11.25" + inkscape:export-ydpi="11.25"><tspan + sodipodi:role="line" + id="tspan3053" + x="46" + y="92.5" + style="font-size:90px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-family:Verdana;-inkscape-font-specification:Verdana;fill:#2ca02c">J</tspan></text> + </g> +</svg> diff --git a/experimental/compensator/org.eclipse.fx.code.compensator.editor.java/src/org/eclipse/fx/code/compensator/editor/java/JavaComponent.java b/experimental/compensator/org.eclipse.fx.code.compensator.editor.java/src/org/eclipse/fx/code/compensator/editor/java/JavaComponent.java index 92952ff9b..ada755c0b 100644 --- a/experimental/compensator/org.eclipse.fx.code.compensator.editor.java/src/org/eclipse/fx/code/compensator/editor/java/JavaComponent.java +++ b/experimental/compensator/org.eclipse.fx.code.compensator.editor.java/src/org/eclipse/fx/code/compensator/editor/java/JavaComponent.java @@ -10,17 +10,20 @@ *******************************************************************************/ package org.eclipse.fx.code.compensator.editor.java; +import java.net.URISyntaxException; + import org.eclipse.fx.code.compensator.editor.ContentTypeProvider; import org.eclipse.fx.code.compensator.editor.Input; import org.eclipse.fx.code.compensator.editor.java.scanner.FastJavaPartitionScanner; import org.eclipse.fx.code.compensator.editor.java.scanner.IJavaPartitions; +import org.eclipse.fx.code.compensator.editor.services.FileIconProvider; import org.eclipse.fx.code.compensator.editor.services.PartitionerFactory; import org.eclipse.fx.code.compensator.editor.services.SourceViewerConfigurationFactory; import org.eclipse.jface.text.IDocumentPartitioner; import org.eclipse.jface.text.rules.FastPartitioner; import org.eclipse.jface.text.source.SourceViewerConfiguration; -public class JavaComponent implements PartitionerFactory, SourceViewerConfigurationFactory { +public class JavaComponent implements PartitionerFactory, SourceViewerConfigurationFactory, FileIconProvider { private final static String[] LEGAL_CONTENT_TYPES= new String[] { IJavaPartitions.JAVA_DOC, IJavaPartitions.JAVA_MULTI_LINE_COMMENT, @@ -49,4 +52,13 @@ public class JavaComponent implements PartitionerFactory, SourceViewerConfigurat LEGAL_CONTENT_TYPES); } -} + @Override + public boolean applies(String uri) { + return uri.endsWith(".java"); + } + + @Override + public String getIcon(String uri) { + return "platform:/plugin/org.eclipse.fx.code.compensator.editor.java/icons/16/java-file.png"; + } +}
\ No newline at end of file diff --git a/experimental/compensator/org.eclipse.fx.code.compensator.editor.js/OSGI-INF/services/javascriptcomponent.xml b/experimental/compensator/org.eclipse.fx.code.compensator.editor.js/OSGI-INF/services/javascriptcomponent.xml index 0f981322c..3d6e554b8 100644 --- a/experimental/compensator/org.eclipse.fx.code.compensator.editor.js/OSGI-INF/services/javascriptcomponent.xml +++ b/experimental/compensator/org.eclipse.fx.code.compensator.editor.js/OSGI-INF/services/javascriptcomponent.xml @@ -4,5 +4,6 @@ <service> <provide interface="org.eclipse.fx.code.compensator.editor.services.PartitionerFactory"/> <provide interface="org.eclipse.fx.code.compensator.editor.services.SourceViewerConfigurationFactory"/> + <provide interface="org.eclipse.fx.code.compensator.editor.services.FileIconProvider"/> </service> -</scr:component>
\ No newline at end of file +</scr:component> diff --git a/experimental/compensator/org.eclipse.fx.code.compensator.editor.js/icons/16/js-file.png b/experimental/compensator/org.eclipse.fx.code.compensator.editor.js/icons/16/js-file.png Binary files differnew file mode 100644 index 000000000..14a86703e --- /dev/null +++ b/experimental/compensator/org.eclipse.fx.code.compensator.editor.js/icons/16/js-file.png diff --git a/experimental/compensator/org.eclipse.fx.code.compensator.editor.js/icons/js-file.svg b/experimental/compensator/org.eclipse.fx.code.compensator.editor.js/icons/js-file.svg new file mode 100644 index 000000000..eb4e4ce3e --- /dev/null +++ b/experimental/compensator/org.eclipse.fx.code.compensator.editor.js/icons/js-file.svg @@ -0,0 +1,499 @@ +<?xml version="1.0" encoding="UTF-8" standalone="no"?> +<!-- Created with Inkscape (http://www.inkscape.org/) --> + +<svg + xmlns:dc="http://purl.org/dc/elements/1.1/" + xmlns:cc="http://creativecommons.org/ns#" + xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" + xmlns:svg="http://www.w3.org/2000/svg" + xmlns="http://www.w3.org/2000/svg" + xmlns:xlink="http://www.w3.org/1999/xlink" + xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" + xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" + width="128" + height="128" + id="svg2606" + sodipodi:version="0.32" + inkscape:version="0.48.5 r10040" + version="1.0" + sodipodi:docname="js-file.svg" + inkscape:output_extension="org.inkscape.output.svgz.inkscape" + inkscape:export-filename="/home/pinheiro/pics/oxygen-icons/scalable/mimetypes/mime2.png" + inkscape:export-xdpi="360" + inkscape:export-ydpi="360"> + <defs + id="defs2608"> + <linearGradient + inkscape:collect="always" + id="linearGradient3913"> + <stop + style="stop-color:#ffffff;stop-opacity:1;" + offset="0" + id="stop3915" /> + <stop + style="stop-color:#ffffff;stop-opacity:0;" + offset="1" + id="stop3917" /> + </linearGradient> + <linearGradient + id="linearGradient3897"> + <stop + style="stop-color:#fcfcfc;stop-opacity:1" + offset="0" + id="stop3899" /> + <stop + id="stop3901" + offset="0.52275378" + style="stop-color:#f8f8f8;stop-opacity:1" /> + <stop + style="stop-color:#f0efef;stop-opacity:1;" + offset="0.72337759" + id="stop3903" /> + <stop + style="stop-color:#e3e1e1;stop-opacity:1;" + offset="0.89024991" + id="stop3905" /> + <stop + style="stop-color:#cecbcb;stop-opacity:1" + offset="1" + id="stop3907" /> + </linearGradient> + <linearGradient + id="linearGradient6131"> + <stop + id="stop6133" + offset="0" + style="stop-color:#fcfcfc;stop-opacity:1" /> + <stop + style="stop-color:#f8f8f8;stop-opacity:1" + offset="0.52275378" + id="stop6135" /> + <stop + id="stop6141" + offset="0.77457333" + style="stop-color:#f0efef;stop-opacity:1;" /> + <stop + id="stop6139" + offset="0.90122044" + style="stop-color:#e3e1e1;stop-opacity:1;" /> + <stop + id="stop6137" + offset="1" + style="stop-color:#cecbcb;stop-opacity:1" /> + </linearGradient> + <linearGradient + inkscape:collect="always" + id="linearGradient5982"> + <stop + style="stop-color:#ffffff;stop-opacity:1;" + offset="0" + id="stop5984" /> + <stop + style="stop-color:#ffffff;stop-opacity:0;" + offset="1" + id="stop5986" /> + </linearGradient> + <linearGradient + id="linearGradient4518"> + <stop + style="stop-color:#eeecec;stop-opacity:1" + offset="0" + id="stop4520" /> + <stop + id="stop5969" + offset="0.40000001" + style="stop-color:#f4f4f4;stop-opacity:1" /> + <stop + style="stop-color:#f6f5f5;stop-opacity:1" + offset="1" + id="stop4522" /> + </linearGradient> + <linearGradient + inkscape:collect="always" + xlink:href="#linearGradient4518" + id="linearGradient4524" + x1="72" + y1="0" + x2="72" + y2="116.40091" + gradientUnits="userSpaceOnUse" /> + <radialGradient + inkscape:collect="always" + xlink:href="#linearGradient5982" + id="radialGradient5988" + cx="64" + cy="64.004021" + fx="63.793392" + fy="47.274845" + r="47.5" + gradientTransform="matrix(1.6842105,-0.08429519,0.06886339,1.3758846,-48.197002,-18.663233)" + gradientUnits="userSpaceOnUse" /> + <clipPath + clipPathUnits="userSpaceOnUse" + id="clipPath6093"> + <path + inkscape:connector-curvature="0" + sodipodi:nodetypes="cccssccc" + id="path6095" + d="M 17.000001,8 17,120 l 57.5,0 c 1.675283,0 3.914297,-0.56468 7,-3.6 8.870045,-8.72523 20.24047,-19.851805 27.49904,-27.175957 C 111.4396,86.761431 112,84.752873 112,82.5 L 112,8 z" + style="fill:#ffffff;fill-opacity:1" /> + </clipPath> + <filter + inkscape:collect="always" + id="filter6118" + x="-0.1126375" + width="1.225275" + y="-0.12064722" + height="1.2412944"> + <feGaussianBlur + inkscape:collect="always" + stdDeviation="2.3860572" + id="feGaussianBlur6120" /> + </filter> + <filter + inkscape:collect="always" + id="filter6171" + x="-0.47870938" + width="1.9574188" + y="-0.51275067" + height="2.0255013"> + <feGaussianBlur + inkscape:collect="always" + stdDeviation="10.140743" + id="feGaussianBlur6173" /> + </filter> + <clipPath + clipPathUnits="userSpaceOnUse" + id="clipPath3889"> + <path + sodipodi:nodetypes="cscscssc" + inkscape:connector-curvature="0" + id="path3891" + d="m 112,82.502986 c 0,4.465301 -2.79749,6.409952 -5.27972,8.093625 -5.10854,3.46508 -14.939114,3.32536 -20.720284,3.40638 -0.081,5.781159 0.16586,15.504599 -3.29922,20.613139 -1.68367,2.48224 -5.29051,5.38687 -8.20078,5.38687 2.31803,0 4.74284,-1.33476 7.58402,-4.08481 9.14197,-8.84873 17.36714,-16.13535 25.673154,-25.297529 C 109.67612,88.503916 112,86.97878 112,82.502986 z" + style="fill:url(#linearGradient3893);fill-opacity:1;stroke:none" /> + </clipPath> + <linearGradient + inkscape:collect="always" + xlink:href="#linearGradient6131" + id="linearGradient3893" + gradientUnits="userSpaceOnUse" + gradientTransform="matrix(1.0119858,0,0,1.0119858,-0.89554075,-0.9871566)" + x1="86.73793" + y1="93.621468" + x2="95.460213" + y2="102.34375" /> + <linearGradient + inkscape:collect="always" + xlink:href="#linearGradient3897" + id="linearGradient3895" + gradientUnits="userSpaceOnUse" + gradientTransform="matrix(1.0119858,0,0,1.0119858,-0.89554075,-0.9871566)" + x1="86.73793" + y1="93.621468" + x2="95.18235" + y2="102.06589" /> + <filter + inkscape:collect="always" + id="filter3909"> + <feGaussianBlur + inkscape:collect="always" + stdDeviation="0.43040059" + id="feGaussianBlur3911" /> + </filter> + <radialGradient + inkscape:collect="always" + xlink:href="#linearGradient3913" + id="radialGradient3919" + cx="90.75" + cy="110.25299" + fx="90.75" + fy="110.25299" + r="18.750002" + gradientTransform="matrix(1.3067347,0,0,1.3067347,-27.83617,-33.818441)" + gradientUnits="userSpaceOnUse" /> + <filter + inkscape:collect="always" + id="filter3826"> + <feGaussianBlur + inkscape:collect="always" + stdDeviation="1.036" + id="feGaussianBlur3828" /> + </filter> + <filter + inkscape:collect="always" + id="filter3834"> + <feGaussianBlur + inkscape:collect="always" + stdDeviation="1.50075" + id="feGaussianBlur3836" /> + </filter> + </defs> + <sodipodi:namedview + id="base" + pagecolor="#ffffff" + bordercolor="#666666" + borderopacity="1.0" + inkscape:pageopacity="0.0" + inkscape:pageshadow="2" + inkscape:zoom="2" + inkscape:cx="113.12969" + inkscape:cy="55.534031" + inkscape:document-units="px" + inkscape:current-layer="layer1" + width="128px" + height="128px" + showgrid="false" + inkscape:grid-points="true" + showguides="true" + inkscape:guide-bbox="true" + inkscape:window-width="1108" + inkscape:window-height="774" + inkscape:window-x="438" + inkscape:window-y="144" + inkscape:snap-global="true" + inkscape:window-maximized="0" + inkscape:snap-page="true" + inkscape:snap-grids="false" + inkscape:snap-to-guides="false"> + <inkscape:grid + id="GridFromPre046Settings" + type="xygrid" + originx="0px" + originy="0px" + spacingx="1px" + spacingy="1px" + color="#0000ff" + empcolor="#0000ff" + opacity="0.2" + empopacity="0.4" + empspacing="2" + visible="true" + enabled="true" + snapvisiblegridlinesonly="true" /> + <sodipodi:guide + orientation="1,0" + position="-68,29.325902" + id="guide4564" /> + <sodipodi:guide + orientation="1,0" + position="-51.972348,130.81475" + id="guide3859" /> + </sodipodi:namedview> + <metadata + id="metadata2611"> + <rdf:RDF> + <cc:Work + rdf:about=""> + <dc:format>image/svg+xml</dc:format> + <dc:type + rdf:resource="http://purl.org/dc/dcmitype/StillImage" /> + <dc:title /> + </cc:Work> + </rdf:RDF> + </metadata> + <g + inkscape:label="Livello 1" + inkscape:groupmode="layer" + id="layer1"> + <path + style="opacity:0.26237623999999998;fill:#000000;fill-opacity:1;filter:url(#filter3834)" + d="m 17,8.5 0,112 58.1875,0 c 2.115556,0 4.528919,-1.77169 7,-4.25 0.71234,-0.71442 1.440746,-1.39395 2.15625,-2.09375 0.415612,-0.40649 0.832187,-0.81443 1.25,-1.21875 7.773958,-7.40962 14.98341,-14.022603 22.21875,-22 0.42065,-0.420645 0.81207,-0.811101 1.15625,-1.1875 1.46444,-1.497657 2.76158,-2.837804 2.99375,-5.8625 L 112,83.15625 112,8.5 z" + id="path5990" + inkscape:connector-curvature="0" + sodipodi:nodetypes="ccsssccccccc" + inkscape:export-filename="/Users/tomschindl/java-file.png" + inkscape:export-xdpi="11.25" + inkscape:export-ydpi="11.25" /> + <path + sodipodi:nodetypes="cccssccc" + id="path3722" + d="M 17.000001,8 17,120.2 l 57.746418,0 c 4.168166,0 7.728581,-4.85625 20.853582,-17.1 7.48636,-6.9837 10.43958,-10.889428 13.15009,-13.599933 C 110.49334,87.756815 112,86.462557 112,82.3 L 112,8 z" + style="fill:#000000;fill-opacity:0.70053478000000002;filter:url(#filter3826)" + inkscape:connector-curvature="0" + inkscape:export-filename="/Users/tomschindl/java-file.png" + inkscape:export-xdpi="11.25" + inkscape:export-ydpi="11.25" /> + <path + style="fill:#ffffff;fill-opacity:1" + d="M 17.000001,8 17,120 l 57.5,0 c 1.675283,0 3.914297,-0.56468 7,-3.6 8.870045,-8.72523 20.24047,-19.851805 27.49904,-27.175957 C 111.4396,86.761431 112,84.752873 112,82.5 L 112,8 z" + id="path34" + sodipodi:nodetypes="cccssccc" + inkscape:connector-curvature="0" + inkscape:export-filename="/Users/tomschindl/java-file.png" + inkscape:export-xdpi="11.25" + inkscape:export-ydpi="11.25" /> + <path + style="fill:url(#linearGradient4524);fill-opacity:1" + d="M 18.5,9 C 18.160156,9 18,9.2346178 18,9.5 l 0,107.96875 c 0,0.82158 0.679323,1.5 1.5,1.5 l 53.6875,0 c 0.05307,0 0.810384,0.0234 1.5,0.0313 1.777664,-0.0401 3.131974,-0.75374 4.356035,-1.59328 1.051866,-0.29103 20.649835,-19.619593 29.770955,-28.809238 1.36239,-1.372621 2.18546,-3.948169 2.18546,-4.895612 L 111,9.5 C 111,9.1772826 110.83678,9 110.5,9 z" + id="path3967" + inkscape:connector-curvature="0" + sodipodi:nodetypes="ccsssccscccc" + inkscape:export-filename="/Users/tomschindl/java-file.png" + inkscape:export-xdpi="11.25" + inkscape:export-ydpi="11.25" /> + <path + clip-path="url(#clipPath6093)" + style="opacity:0.27722772;fill:#000000;fill-opacity:1;stroke:none;filter:url(#filter6171)" + d="m 114.4,82.502986 c 0,4.465301 -4.99749,6.609952 -7.47972,8.293625 -5.10854,3.46508 -14.739114,3.52536 -20.520284,3.60638 -0.081,5.781159 -0.03414,15.304599 -3.49922,20.413139 -1.68367,2.48224 -5.79051,8.68687 -8.70078,8.68687 -2.091359,1.5337 3.488204,8.21101 6.734971,5.31989 9.501888,-8.46107 35.131683,-30.022704 43.350823,-39.262889 2.04044,-2.29392 -4.90514,-9.844666 -9.88579,-7.057015 z" + id="path6153" + inkscape:connector-curvature="0" + sodipodi:nodetypes="cscscssc" + inkscape:export-filename="/Users/tomschindl/java-file.png" + inkscape:export-xdpi="11.25" + inkscape:export-ydpi="11.25" /> + <path + style="fill:#000000" + d="" + id="path2197" /> + <g + style="display:none" + id="Frame_copy" + display="none" + transform="translate(1042.0419,-279.83386)"> + <g + style="display:inline" + display="inline" + id="g3978"> + <image + style="opacity:0.75" + width="571" + height="571" + xlink:href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAjsAAAI7CAYAAAAK1lpbAAAACXBIWXMAAAsSAAALEgHS3X78AAAA BGdBTUEAANbY1E9YMgAAABl0RVh0U29mdHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAFS4SURB VHja7J0JdxrbkmaDFBpsX9fr//8rq969tqwJul2tfA6CiDhxkgQS2HstlgbbEsISufXFcFYCAJfK 6oC/syq8r/ftU7E98O3ofdn7q38OABf6ZAkAy/457RWX1uvV953jOWTbeL36vuz1XkFCggCQHQCY 4WeyJTS90qJfrg74O6d8HslEZhu8r/fvVP+sIjoIEACyA8DPX/H9VWnJxGQ109urQHiO+XwSpS5b 5yYzvj1FkBAgAGQHgJ+3othUZaYlJXPfhkSqjo0nIJtAeo51i+SoIkEIEACyA3BzctMrNBURqbw9 TPg33p+tOiTu0DQnS3Q2weuttzeNf5993DlEqPV1AgCyA3AVcpNJTUU8vJfR+6K/0/q4QyJL0dc4 d5rjyc7GeblpiIz9u623Wx9305CvQ5Ig5AcA2QG4KLmpJDUtgfHenvO2anwee59ETlPOyspXnqxs GnKT3T6Kf5Z9zkrCVOkJqiZBAIDsABz1Z2aK3NgkJZOYu+Tt1uut900VIZs4neK5xEtJNhOFxhMY 7+VH4e9UP08rDdpKfwkM+QFAdgCOnt5kU089YhNJyV3xbfu+6O+3RKiaHLVKWYc+v1T6daqCsw2S mUhuPhzRqdwiQcqkyKZP1X4gUh8AZAfgpOlNqxyVpTWRuKw7327dhuR1fZ+qJbLqKPoxU51tR5qz dYSjKjTvhdez9300UqJWCpT1AGWpD+IDgOwAlAWnld54vS6tpCaSm7Xz+jr5O5H4rJPPWS1prYqp zrnLWNtCalIpXUXiUnlZeV9VhqoCVCl7IT4AyA5ASXCy9CZKbVpCY2Umu90HEuR9zEq6E8lOZWqr d/z8FOlOayIrK2f1JDvvjdd7bpkQefLzIX39P4gPALIDfM93C06lgfjOSVyqEnPfeOndeiUnanRu SU0mOecePW9JTyZBUf9Or/Bktzfn9bfgzyvyk5XAEB8AZAegtO8mGwG/S9IbLSCRxFRfz4SnVcYa giTHK1lFkrNqyI0nO6dMdiLZyXbdtJKflvi8S17eiiTHe/nmvB3JUFQia8kP4gOA7AApTld6YyUi K0PdN24PieB4AlRNdHpHyyubkaMEZ6lnY1UkaCP1aa6etOejkOr03loC9C7t8hfiA4DsAIJTkhuv T+a+ITcPSmweAtmpJDlrJ8nJenGm9txkYiNymaee9wpQJD829bGJik19oqTHS3deG29777Mfb3w7 Kn8dIj5IDyA7AAv+Xo7KVPaC75WmouQmEpwHIzgPzvuqotNKcVoJTvX8q0pa0yM355Cdivz0pkAt 8akkP9Xylic0r8n7XpO/+yZx+atXfEh7ANkBuOAUpzU1VRGb+0Bmopv9+1XB0ZKTCU6W2AzJ4zFF alYLe+6oiE+vBE0VoOoIeyY8meRktzfz+hTxqY60Iz2A7AAsIMVpSU40Cm7l5qGR2lRu9t97pSpv fDxrMu4tR/WITY/QLOV5YztBhCriI1JrePYEyBtrj0pdFfHRQvOi3vfivO+1Q3zenfsZbXS2jw3i A8gOwJlTHG+CyktwtHhkUvPYeDuTHJvmVJuMexqKRdr9Na2UpvVccCnPE9vOP6smQJEEVRqes3JX pcyVyc5L8HpLfN4OTHxIewDZAThTimP7cLIS1b0jN4/Oy8fgz3oE517a/TfecQ2t9OaQxOaQn/+l PWdsZ/w3WSmsp/zVU/JqTXNFJS1Pdl6K4vM6k/hUUjQAZAfgQMmJUpxWierBCE1265GcdSPFaaU3 1eV91YmoFc8Dky7EUxuhe+Un2+nTkp4X5+VLQXxeAvHJ+nxIewDZATix5Nixaq/RuFdwnoLXM8mJ SlRTBGf8eqRTcKo/w/yczyNDVQmqTnxl8uMlPl4/z2uH9FSTn0h89H2sjLEjPYDsADQkR1/cvYV/ UR+OJzgPgdw8mdejVMcrU1X24FQO0azusmn9vPKzfB4JaglQK/mppD5e2uOJT5b2/HKE51ciP95Y e1Tm8sQH6QFkB6AgOba0U+nD8XpwbGrTIzpZihM1GU8VHJHaoj5+ZpcvQZXpr6r8ZD0+WV9PlvT8 Cl566U802VXZ32OFD+kBZAeQHCM5U1KcLL3J3o5KVtEkVUVwKlNTJDa3KUBV+cnEp9rb44mPlhx9 ezGvW+mJylxR2jPed6QHkB1AcgqSk6U4Xv9N65ZJjt6LE0lONb2pJDj8PCI/LfnJSl2Z+GRTXC+B 8PwKJGiOtAfpAWQHkBwjOfYU8ajRWMvLFyU0XwLJ8cpV3uK/VorTk94gN9ASoKzZ2ZOfSHyqTc1e WevZSM6zk/pk4tOa5EJ6ANkBJKczxXlyxOZLQXQejOS0SlXZBFV2CviKnzeYQX683pdNUXy8/h6v xGVLW8+B8DwH4mPLXN7hpEgPIDuA5DiSE6U4nuB8CURHJz9eP45XqhqSFKey+4afL5hbfloTXq1x 9krak5W1noOXlTKXN76O9ACyA0hOIjhWbqzwRCUruwDQS3G8c6i8AzURHLhE8fHKXJn0vCTC81wQ Hy/tQXoA2QEkJ5CcL4VbS3LuG5JTTXG8nxl+hmCJ4hOVukbRsCWuHunxxOdZ4sZmpAeQHUBylORk Cc7XJNWJylW6uTnaatzag4PgwLWIj3750Uh7qtKT3aZKz0ZYTgjIDixUcrTsDDNJzlclOV+DNOex IDlew7EnOQgOXKv4ZBNdFel5FX9yywrOz0B89L/NpCc6jkIkPnwUANmBo37feJKjD+acIjlfjeh4 iU4ryckajqOzqBAcuGbx8cbZvaWFVnyysXUv5fmpXv6UuMwVNTNnCwopbQGyA2dJc1bSPtLhvkNy WqKT9eRk/TiVUhU/E3BL4hOVuVpTXFnSY6Xnp5EfKz52iqvS04P0ALIDZ5WcrFxl9+N8KUjOV/H7 cnSSo5cAelNVpDgANfFplbi80XWvpycSnkx6tPiMHzeSHu/sLYQHkB2Y7XskO4XcSs6YuGSTVZHg fJW8L0dPV9mm42yqCsEB2BeDqMxlm5mt+OglhePN6+f5mdxazczRURTRKetIDyA7MFuaM4pEdDhn a3z8a3LzRsmznpyoH6d3szEAaU9+NpdNe0YBeQuSHtvP48nOD5P42C3Nr4n0UNoCZAeOIjleX07W eDxKi05wvnVKzqPs78mJzqmyy/9IcQAOT3si8dH7eqKeHjuqrsXmh3nppT26RPaWSA+lLUB2YNL3 Q1Sy8iRHl6sekxTnm3mpS1k9kpPtxyHFAZg/7elpZtZJz4uRHtvP8yMRH6+8NUqUPnsra2Im5QEu BlBKcwYnzRnlw5uuspLzLREdm+ZUJafSj8P3NcDx055oSaEnPbaJeRQaLTpR2vPLJD3RuHpW2kJ4 bpw1DwGi40hOVLLSY+Q6yXlKUhz9uk1zdCKE5AAs87lh6/ycbdVL/VzxYZ4v3iSeynyW/UN9f8j+ YMLPz3///PmxRum5k7yfR5z7j/QgO0CaU+rL8UbIvxq5+eakObZkpRcCIjkAlys9W+e540PiXVue +DzJfklb334o8fn1+fF+yZ/S1vApPCvZ7SmyKc8K4UF2gDRHTzd5zcf6yWeUl2+B6FjJsWnOFMmh 6Rjg8qXnviE9nvjohOen+ji/Pj+2Jz2kPIDskOaUSlZRX87XQHL+krg359FJc6ZIDoIDsDzpWTkJ iic9rc3qFenR5S29jmL8+GM/zyD7U1ukPMgO3HiaoxuQvb6crFz1l/i9OVHJKjvWAckBuLxfnrbq ZzaTnmii00t7npzU5zH4xelZfUzbz0PKA8gOaU46Sv6USM5f4petWiUrb+sxkgNwXWmPJz36uedD 4l1dWXnr0Xlu8X6R+iX7e7hIeZAdIM3ZSXOs5HxVcvOXIztZA3JlISCSA3D90jM+92ySpKclPp7s 2OeaZyU8pDyA7Nyg6GQ7c7ySlU1y/nISHS/NiUpWSA7AbUqPyO7IerTHKyptedLzmCQ8+rnnhZQH kJ3rlhyR+GRym+bofTmR5FjRiRqQo74cu/XYu78AcF3PR970ViQ+d5I3MlekZ/z7a/M8RMqD7MAN pTnezhyb5vwV3FppTrVkJaQ5ADed8owMzi9ktpcwkp7W7Z6UB5Cd63wyEYlPJ9dPGl4D8rdO0bGn kmdnWFGyAoBqE7Pe91WZ3noQv5ylb17KM+7keSukPAgPsgMLTHNWHWlOJDnfJS5beWnO+HnoywGA 3qTHK2utJkjPg8Q9PDbl+f3xxkWEWnhWRnooayE7sEDRiUbKK2nO90B0dNnKnmW1VpJzJ/TlAED9 +Svq59mYlz17elrSo2XHlrbGc7a03FDWQnbgzJIjEk82eEc96N6cUWa+O6KjtyF/baQ5UQOykOYA wISURz6fR1qTW5H0VHp7WstN3z/vB2UtZAcWlObouNc7uNNLc7TcfJf9/pxRdFq9OZSsAGBu6bH7 eXqlp9q8bFdj3AUpj1fWQniQHTih6EQj5VFvjic6UdnK7s2p7MxBcgBgzqTHPt9FSbb9RS8Sn3vx +3iiX+DeTbKzMfcZ6UF24Iiio3/YvTTnUfzenO+O5GjR0U3IXuTr9eaI0JcDAPM+32WlrY20z91a N1KeqIcn2gv2YdIdUh5kB44kOWJ+CPUPtm7Ki/bmZKJjm5C9NCcaJyfNAYBTpTxb9frg3Lz9PLaf 574hPVGJ/sNJeBAeZAdmTnNaZSvdhGzHySPRyZqQ18lvOqQ5ALCElKe1hXmdyM59Q3Zsyf7NSA/C g+zAkUQn2p1TTXNsf042Uk6aAwCXnPJEm5ij3TvrJOEZnwffkpRH1PsA2YFO0fEO8BxFZ5yW0qeT R5LzXfaXBEZNyPTmAMASnxsPTXnWSnDuzetWdKKS1pv6/PTxIDtwgOSI7G8RjcpWUZrzX1IvW40f m0krALiE58melCeTHk92KiUt28fDPh5kByakOVF/jt2d401a/Zd6qRcFRrtzspFy0hwAWOpzZk/K Y6XHkx9PdrKmZdvHwz4eZAcmiI7Xn6PLVnpvjhYdm+i0dudk0wekOQCw9OfOLOXJkh6b4FRlJytr CcKD7EBbdKL9Od7unL8cyfFExzvAMxopH0hzAOACn0ejlMf7RVJLj5Wfu0SGhob00LiM7ECH6OhG ZHu2lS1bWckZS1c60dFlK12jHsSfthJEBwAu9Pk02r4cpTxeecvr27kLpMf7HCI0LiM70BSdVn+O l+boRMcbK882IdsfUiQHAC75udVLeaaKj5Ugb0rL+4WRxmVkhx9G9VJPXGX7c7KyVSQ63pJAmpAB 4FaeY3ulJ5OcdUN2sudUGpeRnZsXHf1DFu3PicpW/5L9HTrRWLkVHdIcALiF51vvJHX95z2TW73l LHuQKMKD7NzMD57eoWMbkW1/zig63ztFR29D9o58QHQA4NZ+wdzK/g6zbOVHr/S09pMhPMjOzfyw RaPl3qJArz/nX7JfusoakXV/zuD8gCM6AHBLz8NeWct7bh5fv2tIzyBxKcu72UkthAfZuSnR8RqR o7LV+Lo3ceX150TTVkgOANy68FSmtjLpGSQfSY9Sno16ifAgO1ctOrp0Fe3PsZKjS1f66Af6cwAA pgnPIH19PIPEu3pa6c748W0fD8KD7FyN6EQ7dPTElT7bSgvO+LoVnVYjMksCAQDi5+dqH8/KPKfe FWSn1b+D8CA7Vy063g4dfVr5fxnJ8UpXWnS808rpzwEAqD1XV/p4rOzYdoTKZmXvufgD4UF2rl10 ngLR+ZcjO94Onex8K8pWAADThCfr41k5MjMUbl5i5IHwIDsXJzrZssBotPxf4ic63mi5FR36cwAA 5hGewZGN6gbmylRWBsKD7FyU6GTLAkfRyUpXNtGxomMnrujPAQA4/Dk86uNpTW6tGtLT85yM8CA7 FyU69tRyKzrfJe7RqYoO/TkAAPM+n0d9PCLtdGcl01MdhAfZuVjRyXbofDeCY5uRI9G5Q3QAAM4i PKvCrbVFGeFBdq5GdPRWZO8wT68ZOduKPH686MRyJAcA4HjCEz3PVmQnep6uPGcjPMjOokXHjpaP ovNfgeh8D0Qn26GD6AAAnE54dONyq5ende3oAeFBdhYvOt8C0fEmrrytyGOiw2g5AMD5hEeM9Ni/ 02piPvR5GuFBds4mOjqy9JqR9WGe3rSVHS0fd+jYZYGIDgDA+Z/3vUkt73n4WM/LCA+ycxbR0Rs0 bTOyJzr/R/zRcm8rsndqOaIDAHDea4BtXL6T/T6cVfFjITzIzkWIjt2jYw/0tKKjZSc7/iEbLUd0 AACWJTzDEaQG4UF2zvpNHh0B4Y2XW9H5P+p9VnQeP2+6EZllgQAAlyc8p3iORniQnaNJji1feUdA ZKJjx8tZFggAcJ3CcwoQHmTn7KLTmrr6Jn926LAsEAAA4bFsC+9HeJCdWb6R9eu6ITk66yqavPqX ER0v0WFZIADA7QpPj6y8IzzIzpyiE/Xo9IiObkaORIfRcgAAhKciRFslPPrzIjzIziyi442Ya9H5 LvvnXH2X3WbkJ0QHAADh6ZCa6H22nIXwIDsHiY4eMc+OgfAO9Gzt0UF0AAAQnor4tHp4EB5kp1t0 7HZkLTpe6cprSK5OXSE6AAAIj5UX72V0E0d4ANlpio4tXdkTzP+S+ATzsaT1DdEBAEB4OoWnR3Ky 0hbSg+w0RScrXY2iEzUj26krfagnW5EBABAeSaTEk5yNeenJjv27+n4gOxCKTmVpYKt0NfboeJuR ER0AAIQnEp9MdiL50TCSjuzsSU7P0kCvT2d8e0x0vgrNyAAAXGP6hSeSHXvLkh5G0pGdnW9C/bpX vvJEp7UwMBOdAdEBAEB4GnITCU4kPdG0FhNaNy47laWBdsQ8SnRsQ7LepaNLV4gOAADC4wmPyH7f Tq/4RL08Nz+htb7hbzqRuHxlR8wj0dGyY0VnTHTWQukKAADqJa1DEh4v6bn5Ca1bT3aiEXNbvvou +0dBeImOXRqoS1cDogMAgPBILeGJmpN/3z7MrSI7Nz2htb7RbzSb6OjFgY+SNyTrm7dLR/fo3BnJ AQAAiIRnK396RkX6k52spDVykxNa6xv8BtOvR306nuhkzcgsDQQAgEOF5069vv28rlSTnUrKc7MT Wusb+8bSkqPLV17pyvbp6DTHLg1EdAAAYA7hGZSMiPjlLC01WoBafTwjN9ewvL6hbygRvyH5XnbL V7ohOZKd6LwrtiMDAMAhwjPKzp0jO9tAcqKbLWlpwdmo+3D10nNryU525pU9xdxOX40LA1sHe7Id GQAA5hCeSHZ0utMSnaikpUtYV1/OWt/IN5GVHXuSeWtDsi5d2akrvUuHRAcAAOYQHv3L+dRkx5Oe m2xYXt/AN0+P6Hh9OrZH52siOiwNBACAOYSnsn/HS3feP29eD8/NHimxvvJvGis6Y+lqrUSn1afD dmQAADjXdUw3LN9LO915l76UR+QGGpZvIdnxjoN4ULIT9elURYfSFQAAzHnd8ia0vIZlPYXVkp1N Ijv65VWmO+sr/maxstNzknlFdLzyFaIDAADHEh5PdrYS9+68y25Zy5vQ0h9rda3Cs77SbxJPdHSq M4qOPffqu7SPgdDnXbEdGQAATiE8eiS9le58OJLTGku/6v6d9RV+c2jRWcn+4kA9Zv6XEhstOmMz MksDAQBgKcLjTWhF6c671NMdvXPnKvt3rjXZ6d2nYxMdvR3ZnmLO5BUAAJxDeLIDQ22zciQ7nvRE h4deTbqzvrJvCCs7ekuyPvdqTHX+SkTnayI6JDoAAHBq4RF1fdt+XpfsdFbWt+OVtjzZubr+nfUV fSN4orMuiM73hujQkAwAAEu61onEDcu6f+e9cIukR/fvXDzXluxk01e6IdlOX32X+CiIrCEZ0QEA gFNd46oNy17/ztvnLROdqy1nra/kG0AS0Rn7dLJUp3LmlVe+AgAAOJfwRA3L0WTWeyA+WePyVZSz 1lfwH++JTtSn860gOjQkAwDAJQhP1LCskxorOG9Gdt4c4dFTXldRzrqWZMfKzr3spzqe6ERnXo3/ noZkAABYqvCI+A3LD7Lbt/PhiM6rtEtbV1POWl/4f7ZIvjzwUXYP+bSy803aR0HQkAwAAEu+Dors Nyx7o+jvSnReZT/l8UTnKspZ6wv/D64cB2HLV/rlX0p0dKpj+3QE0QEAgIVdB7OGZU92snTH9vDY puWLLmdderJTaUr+JvtNybp09SURHdunAwAAsFThsddDLTxesvNq3rayczXlrPWF/ueKxE3JdvrK pjr2KAgWBwIAwDUIT7Rw8FH8dOfVER+b8FxFOWt9gf+pnuiMiU6W6mjhGUXnixKdUXaYvAIAgEsV HjHCE6U7Vdm5inLWpSY7veUrKzrRPh1EBwAALll6tOxo4fF6d14D4bm6ctb6Av8TK+Wrb7Lfq9Pq 0xmEPh0AALhc0fEalkfhefiUlifxe3dsD89VlbPWF/Sf6IlOpXxlRUfv09Fj5ndCqgMAAJcvPPp6 qaezRuFp9e5ECc/FlrMuLdmplq+ipuTsgE+b5iA6AABwqdIjsjuOXpnOeglk510uvJy1vqD/tOxI iKh81TN9RfkKAACuQXRa4+iPSmJeG7ds4eDFlLPWF/CflonOvfxZCOgd9On16TBmDgAAtyA8+vqp y1n3SnhsOcumO9GG5UEuqJx1KcmOlp1BdstX+kiIv8RPdb46okP5CgAArl16RNrlrKx3J+rf2Zqb lSxkp/M/SSQ+EsI70bw31aF8BQAA1yg6PeUsr3fnRfb37+h0x+vfWSSXUMbSiY495PNJiY5Nduz0 FeUrAAC4ReHR19NWOcuTHS/hsbKjp7QWJz3rBf8HSSA6rVRHNyRTvgIAAKTn/+OVs+yyQS03L+rm lbN0wrOSBTcrrxf8nxKNmlvRiWSHQz4BAADRyctZetmg7d3RouMdKWHLWYttVl5yshPt1NGj5l+l PWZulwdSvgIAgFsUHn19zZYNesmOt4PHG0dfZLPyeoH/IeLYp92pE/XqaNHRZ19RvgIAAKTn/zOo l7qc9f557XwLZGe8ZenOIpuVl1rGsr063pEQXwPRaR3ySfkKAABuUXRsOWtMd/Q6l3dHdn593rKE ZxSeQRbYrLxe2H+Elp3xP6I1gfXNER1v+upOKF8BAADCY4OFMVT4+Lx2ZqWsSjlrcc3KSyxjReWr SqpjRede/AM+ER0AALhl6RH5swX5Tv6Moutm5dfPa6tOd3TKE6U7i2tWXi/sge/dq/NN4j6de9k9 zZzyFQAAIDq7MqKFxw4C6XTHik62cHBxzcrrhTzwWnRsrPagHvivgez0bklGeAAA4NaFR8w1d5zO 0s3KWnY86XkNZGcjC0p3lpTseKPma9mdwPriyI4VHW+nDuUrAACAOGwYnKDh0QjP79uzIzteOWtM jBaR7qwX8kBbu4zKV1+V4GjR0Tt1okQHyQEAANiVDzsUZI+S0JNZvwXnL9kvZ+mEx9u9I0IZKz3V 3DYm20THGzPXvTpMXwEAALSFZ0xivOksfQ3+pV5WmpV1Kets6c76zA+yfl2Lzlr8Cayv0i5fadEZ EB0AAIDS9bjVrPziiI5OeGzvzti/8yGUsZrTV18cyfkq/U3JAAAAsH8d9pqVN+p6/C5/2kl0k/Kz /Onh8fp3xrLY2U9FX5/xwdWys5LdpmRvW3KW6tjyFU3JAAAA067L3pmU9pr8LH3lLJEbL2NFqY4+ 2bzSq+P16SA5AAAA7etxtFlZBxBvn9feLN0ZhUeXs8by2NnSnfWZHlRtj3YC616JTlTC8spX+vwr Uh0AAIDDrs9eujPKjk53vHLWmO68ywLSnfUCH1CvV+erkR1vpw6j5gAAANOvy3oUPWpW1sLzywiP V876/W/Pnu4MZ5ac1qj5V0d09E4db3kgo+YAAACHXaOjEw30NfqLCSS8Y5u8Bb8nvzYvoYzVSnWi 8pX3QDJqDgAAMM91Wqc7nvD8vi6Pe3ee1du/X19UujOc4cHzUp11YIzeBFYmOkgOAADA4ddqe71u Xat1KNGqwJz8Wn3uMlZrtM178OwEFuUrAACA+a/Xq+L12rtm6+u1HSI6ufQMJ3zQrCW2tiXbBYLR pmQWCAIAAMx/zbbX7ahZOQonFpPunLOMFdUAI0PMLJFRcwAAgPmv26sJ123ddrKIdGc40YNlHzjd 3a3P3vhizFC/zqg5AADA6QOKbNHgkyM8X2Rhk1mnLGN5UVir2Sl7sDgWAgAA4HTCY9MdL6zIem3P lu4MJ3qgRPJGp8wMHyXu1SHVAQAAOE1g0ZPuROtivLDiaspYnhXac7B0slNtcGICCwAA4PihRSXd iUILfR33Jqnl2NfxU5axsm5uT3SiOf3oQQIAAIDTBRfeZFZ0LbelrJNOUw9HfmCyB+hBdmt92YMT pTpHt0EAAABEZ+d6Hk1m2UO8KycfnOR6foqencgE7yUuYekHxk5grYReHQAAgHNIT7X/1mtJ0enO SftvhyM+IJEFeudgVVIdr3tbBOEBAAA4hei0rutZOat6ruVFyY59YKLTzaNU56wGCAAAAOn1Pevd eZRprSlHGzgajvQgiCM6U+xv3bA/hAcAAOD0oqOFxxs6ejpQeBYvO9b6VrK7RLDVqxONqJHqAAAA nFd0vDDDDh95wvMkfaWsWa/zxy5jZSWsHuu7EyawAAAAliI92fCRrd48OcITXeOPEmgMR3gAJHgQ 7BLBLwXr0w/CgOQAAACcXXQkuda3+nIfpT6GvljZ8YzPHvpp460nqcVbVqYAAADgfNKTlbK8UfTs Wu8Jz2zX+mHmL1wkPvQz69XRJSzdq8MEFgAAwPJEx5Oe6IQET3psFeeovbnHLGPZXp2sU9suEdQn o3IGFgAAwHKlx17zdbqjAw6d7LQalWe95h+zjNWyvOgLt1/00ZcNAQAAwGTRaS0ZjK77evJ67Vzz F1fGqpSwIsPz6ncnm70HAACAg67/1UblTHiO2qg8nOAL9vp1rOhER0Mwbg4AALBc0akKz5MjPCcr ZQ0zfrEitVSn8sXqcXNSHQAAgOWLj77+eyeiR2HH0as6c5axqiUs74s9+TZFAAAAOLkD9Kycmc0B jlXG0k1KUc0u6sa+kyM1KAEAAMDsomM9YM7AY5Z0Z5jpi4xEx0ZYj+qLO+sJqAAAADC79LQms/QJ CtoN9DT2nSywjOXN2euNyZHR6b06dokg4+YAAACXJzqVdOcxcYFMeCZ7wdw9O95ZWC3ZOWp0BQAA ACcVH69RuRJ+ZH07Z+vZ6dmt8yhxqpOdi3HwFwgAAAAnE53evTuPkld6FtOz41lcFlt5jcm2XwfJ AQAAuCzRsX6RpTteCKKdwJ6icJAbDDN8UT0Gl9XnaEwGAAC4fOnJFgzboaXHwAvWMuNywWHGL6jS jOR1XmcbkwEAAOByRCfyg+xQ8KOXsuYqY+mR80pUxcZkAACA6xafaPdelO5E25QPTniGiV+AZ252 CitrQoq+GO/zAAAAwGWJjohf+cmEp9XiMtkNhpm+kGx5kFfGynp1kBwAAIDLF52op/de9lfTVE5V OGvPTrRI0BOeB/V3sogKAAAALl98BmmvpsmalGcpZQ0T7nhmbOuGrXmd1uzWAQAAuD7R8Vwh6u09 ainr0J4dz9aiMhaHfgIAANyG6Ni39VSWDkYi4Zm1lHVIz060EjqbodclrOhoCIQHAADgesTHK2WN Acmj8YajlLKGzjsssh9NebGUd8crh3wBAADA9YhO6/iIk5SyDunZ0abmbUd8MK9njcnddxwAAAAW LTrWN4ZO4ZmtlDW1Z8dbFBTd8cjQKGEBAADchvhEO3dOUso6pGcnO+TL3u6FEhYAAMCtik40lVUp ZUXJzuw9O63zLnpSHUpYAAAAtyE61jkyd4j84eCzsg5pUPZSHS/Z8Xp1vI3JCA8AAMD1ik9WyvL6 faNe3+6EZzjCnfVkJ0p1EBwAAIDbEJ3WgsFq385RenayElZ01oWX6sx6qBcAAABchOjYt7NJ7soI endgMqVnxzYmZ6lOdCcRHgAAgNsTn0HOMODU27OTNSffS1+qg+AAAADcjuh4wUnmEeNtLf6ZmiLF 0GRKz85c/TrNOwcAAABXITpWerIKUXTMVNT7e3CDcmvkPIufsmVAiA4AAMBtik8mPFWfmL2M5QlP a+T8XvLjIVaB8QEAAMD1io5IfOTU2jiE9Yk7ySe7V4fIjgQW1mpOzs60QHAAAABuU3SiY6cqfTuT jo3olR17auna2Bcj5wAAAFBxCu9wUOsVlUrRQT07XqdztF+nIjqMnAMAACA6Vnis6HheoZ3C6wOe LDsi8SLBqIRlbYwSFgAAAHii02pU9pKdSUdPTe3Z6dmvMwiTWAAAALDvFlGjclTKOkqDspfsjMJz 7wiPNw9/h+gAAABA4hdRslNZZ9OsGg3JnfDMS9+ZtXNHKqecC9IDAABw06Ij0j5cPCpleS0yMkV2 RPajoVXxzlQakwEAAADRqSwYtH7RSndWPbIjgXnZzcneHdIlrFLzEAAAANyk/GR9O61kp9S3U+3Z ycpYWnSq1gUAAACITrVvJ9q3M7lB2duvUxkNW0u9nob0AAAA3LboWMdotcrYQKXctzN03onojkSi Q78OAAAAZI7RKzzdnlFpUB7Eb072hKd1FhbCAwAAANY3osXFFeHxPGNVlR0rPN4BoF6qwyJBAAAA qIpO66QGL1jxXKN7Gsv+Iy9aij5564gIpAcAAABWgfBEw1BZb3BayhqCT2ylJ/rka4knsJjCAgAA gKrw2BF0byDKBiulJuXWNJbXnOylO5O6owEAAOCmJUf7xipxDS9k8U4/d92jVcaqNCdHx66X598B AADgpsWnNf09JWBZtWRHpDZ27pWxuo9eBwAAAKRH6q0zXQHL0DAsrzv6rlN0AAAAACLBEam1zmS9 wmmT8uB8QnsnKvWzO4nPqkB4AAAAoCU6vX075cWCwwGGlU1iMW4OAAAAvfJTFZ4oZBFPerIy1tD4 hNkIGNNYAAAAMFV0omXGWd9O2KRcmcY6JNmhORkAAABaohP5R+YdWni8np10Gis67bz1iWhOBgAA gEOkpydoyXqF3TLWKhGd6idkczIAAAD0Co5IvUm5UsraozV63hKdO+lc2QwAAACQyE92CHlLdFwP iUbPo1TH+4T06gAAAMDcomP7du7M660m5f+8HJJPNN4yybmrfiL+DwEAAGCi9NwZ//A8pNmzUzWr ilFRygIAAIBewclE584RntaREf/5uNlSwYrolJuDAAAAABqiI+IHLi3pSRcLDhOsqmJTJDsAAABw iPhk6U7XMVU2ifF6dqJ0p7I1GeEBAACAXuGJJrJawUs6jeWtVx46P8lK2K8DAAAA84hORXoG8Zca h2WsyKiGxieJGpOZxAIAAIBDpGfocJFSg3KlhFWNjRAcAAAA6BUc6XSRTHhKyc7QYVSUsAAAAGBu +amkO60G5dVQsKpB8kQnO1odAAAAoCI2nocMEqc7mYs0j4vITGoomBTSAwAAAHOIjyc61XTnPz4y BB+4FR0N0o6OEB4AAACYKjyVgalSpSk7Gyv7oNmYF5IDAAAAcwnPkNyi/mER06Ac1ckym/IsCgAA AGAuyRGphzDpdPjQYVGVZiB27AAAAMCc0qMble8kD2BcJxmcDyiBRXkv09gIAAAAoFNwrEtkjcot 0flfevfseKKTHr4FAAAAMFF8vHRnaNz2psOrG5QrJgUAAABwiNxEwhOJTqWMFY6eV/p1mMQCAACA Y0lPFMCsekRHpD2NFS0VbB66BQAAAHCg8FSkJwtg/vfW2rMTCU/LohAeAAAAOFR4WsuOo/ftMDQ+ cKsBiDIWAAAAnFJ8ur3Ejp5LxwejORkAAABOLTmep6TT4a1kp8egvDsIAAAAMFVy5AAv2VsqKBI3 KK8kTnTYmgwAAADHlB6RWnuN17MTHhdRER5EBwAAAI4pOOI4yaSqUzQ6vko+OE3JAAAAcArpscFK JDilBmWRfHw8qp1lJgYAAAAwt/i0RtD3fCY7G0ukXrZCdAAAAGAOqamITiQ87rT4ULSoSIQQHQAA ADiW9KwawuP1Fu/9+6FgViwPBAAAgKUJTzZEteMy0annkrweSREAAADAscQnu4kkR1gNgbSsijeE BwAAAJYgPtHfLW1QRngAAADgnGIjjm9kLTc7f97aoNyzW4deHgAAADim+IjU2mx2GAJLysa7aFYG AACAc4hO9L5095899TxbybwqCg/yAwAAAKeSnuafZUsFq6uYAQAAABZLlOxE2wm9U0URHwAAAFgC q0h2bAnKS3KaJ4oCAAAALEFuPNnR/8BrUK6UsyZ9cgAAAIBjY5cKtkbOI9Fh3w4AAAAsWnYi4alM YCE6AAAAsGjZiTYQitQ3KAMAAAAsVnZEahuRSXAAAADgYmUnk5jKGVgIEAAAACxedgAAAACuWna2 wd/Zqj/L/g4AAADAYmVn25AcKQgPAAAAwCJlZ+sIztZ5O7oBAAAALFp2tOh4grP5vEWiQ+IDAAAA i5cdT3Q2gfggPAAAAHBxsiPil6825pYJj5iPBQAAALAI2bE9O57UWOGhZwcAAAAuRnZE4nLVJrl5 pS8AAACAU1FyjyH4h16akzUpAwAAACxSfqJkJ5rGak1mlS0LAAAA4BQMEi8O3BYlB7kBAACAU7Cd 8mfVPTve694nQXwAAADgFJKTVZW2kex4olPdoIzkAAAAwCmEZxu8HjIkRlQ9JgLRAQAAgGMJTuQc 28Rbdv58CP5i9EGk8T4AAACAUwhQpX94a2VHHFvaSn5QKAAAAMC5BCc7vPw//3YofGCRONkBAAAA OJbgSCIz0akPaRkrkhh6dgAAAGBJorNJhGfv32dlrJbYdHdDAwAAABQkJ3OS6EircE1OdOp59kkQ GwAAADi1BHmnO2SnPPzn3w6SNyFvG8KD+AAAAMCxBUckPqA8O7/TLWN5cuNFRFETEOIDAAAAh0pO JD3bRHo2gaM0j4vYSHwoKMIDAAAApxCfluRY4dn595XjIlo1sazXBwAAAGCK5GSTWJVU5z//fkg+ aOuDZYeCAgAAAMwlPdvAQ7K+nf/QSnZaMRHNygAAAHAO6Sl7ydD4YPaDfkihEQjpAQAAgBkFpzJy 7vXsyCg72ZZCT3Qi4UF0AAAAYC7RiaSn0ke8cxsC0dlInuhQxgIAAIBjik5LcqrVJneDcpbsZNID AAAAcKjkiOMmUcmqJDxD4wNvpD/lAQAAAJhDfipnYkU9O3sNytHxEDbVsX072XJBAAAAgF7BsS4R OUlpe7KWnegDeklOJdlBfAAAAOBQ8bGpzkdDesKlgtE0ltev8+F8AhqUAQAAYG7J8YTHc5Ksl7j7 uIjsg5PqAAAAwDGkJ+vPsV7ittVEo+fZjh3vAzOVBQAAAHOLjnaSD+e2qfhI5dTzj8InYd8OAAAA zCU6Ivnuvy4faR0XkX3g7BMAAAAATBEcKzrbouiUDwKVmT44wgMAAABTxafVO9wKX3Y+nrdBWZwP vpH+ZAfxAQAAgB7JsW8fXML6zeB8gpZNvYu/YJBSFgAAABwqPJXm5HfpCF56e3beC0aVWRoAAABA VXoqqY7XWrPjINlSwWzU6132Ex4WDAIAAMDcohM5yHvVQbxkRySvk0XREbt2AAAAYIrciLQXG7+L X2FqCk926rmX7rzLtHIWAAAAQEV8Wo3JUXUpmsZqHheRNShXylhMZAEAAEBFciLpiUTHBi+hfwwd ZpV9ouysLAAAAICK8GSBSyQ6Uaqzc+r53jtl/zh1L9XxeneYyAIAAIA5pCdrUP5IHCRsUPbKTa3x cyayAAAAYG7J8RYbvwc3LTphZam3Qbmyb2eD5AAAAEBRcOzLVnNyNI1VHj23wrMxwpOZVcmuAAAA AALh8cKWinukYcvUZKdn/JyJLAAAAKiKT1ZVymQnnAQfGp8wm8byambp6BcAAABAIjlV92gtNm6e jRV90pbsRJ8U0QEAAIBe4cm8w2tQDgOWaPRcAsOyn+QtkB4kBwAAAFpyYyWnKjpdJzi0GpTHm62b vSWikyU7CBAAAABEwpOVsDzv0M7RNXquqfbseJ/YPWYdAAAAIBCfbVF0spBlzzuqyY43/vUmuwlP Nu+O8AAAAEDLOWzI4nlHS3TEekc0ei4dn/i98MkRHQAAANgTEZnWmOyVsUSKZaysSVl/8jfZT3Yy 4QEAAACQxDvsQJTnHD1nc4ayI45pRX07b8kdyM7JQn4AAAAgWnfj9etkwUrz5IahcEeyWKlHeBAd AAAA8Dwj2uv35gjPeGstFCzJTlTKspLzKnGzMn07AAAA0BKeiui0PENkwjSWFGwrSnY84wIAAADI lgnaYaiW6DQXCkay0zoywitjvUot2aGcBQAAAFmo0mqVyZKdsux4d6gykUXfDgAAAPQIT8UxonaZ sl8MnXfEs65XqdfTEB0AAADQnpFVj1p9wSXh6W1Q1uYVWRd9OwAAAFBxiyhQmVI96p7Gap1E6tXT 6NsBAACAXuFp9QS/ir9QsNSvk8mOd8eyU0hfJW8iom8HAAAAxBGdKNXJ2mS6jqXqaVBuxUyv4qc7 5dEwAAAAuGrBidzCNie/Sp7sdA1ADcU7VmlSfjV3sNKkjPgAAADcpvT0TmG9yf6ZWEdvUP5w7kRl mzKSAwAAgOjYgz+9Xh1vAKqrX6clO94dzJqUszvmTWUhPAAAALcpPF4JywYn1iuysfOj9ezY2ppX ynoT9u0AAAAgOLtO4TUmR1NYWXOyyMw9OyLTmpRbjcqIDwAAwG0KT0t0oubkrvBkShkruoOvReFB dAAAAG5XeFpTWPZmS1gn7dmZcgcpZQEAANye4HiiE+3W8XqAtU90LykeDrijWRmrtXOHbcoAAAC3 KzytVOdF/OBkkkcME+5gZGTeHWylO4gOAADA7QhPJdV5kdoUVplh4p1tTWXZO5pZGQAAAFyv4HgO YY+eepW4HcYKT3c7zDDhTusyVqvWNt6iw7uyBwQAAACuQ3i86pAWndEhXqRdwure2dfboCySH9z1 6tzZNyM8Xr0N0QEAALhu4bHuYBcJZqmO15x8kgZl3aT8XrzDH4mdAQAAwHUJTiQ83vmaL+bWak4u M7VnJ2tS9u6sXQoUiQ7iAwAAcF3C0zoe4k35QuQNBw04TenZEWkvF3w1d9w7sZRSFgAAwG0IT9T+ MorOS+ANs5zCMLVnp3LHbcrTuuMAAABwPYITCY8XkETNyVFI0sVwwBeRnVbq3WlKWQAAALclPJUT zrP2l1l29E3t2cmEp9VoRCkLAADgdoQnm+Cu9PlGzckn7dlp9e1UOqspZQEAAFyP4GhX2Ep7Y/Kv xBUOKmFNkR37xWTnW7yYLyDbqMxZWQAAANcpPF4wkoUir4knTHKEYYYvwjO21hcRRVOIDgAAwPUI j3fqQuQIeqBpthLWVNmplrKiL0ILz+RzLgAAAGCRgmNFR09h2cbkX7Jfwmo1J3czzPBFVZqU9Rdj S1mTjmsHAACAxQpPax9fFobYye2D3eDQnh0rPJUm5Rdpb0ZEdAAAAC5PcjTZOVg2DBkDEW9FzaJ6 drxlQd4Xko2hbxoPHAAAACxbeLIprKjqc7QS1iGy431hPaWsaAydnTsAAACXLzytVOeX7Ich2cGf Imfu2fG+sPeOL8pLdxAdAACAyxKc8WUr1fklfj+vt19nln7eYeYvzNu343VcZxZHozIAAMBlC09r B9+z7FZ7Ric4yqT2MOMXGM3S6y/k1+cXWNmSiOgAAABcjuRoH7Dj5lGlp1LCWlTPTm8pq5LuCNID AABwEcJTcYGp/ToHucBcPTvSKTvPp7I5AAAAOJnwRB6Q9fBGW5MXXcbKtilHX6Q3akajMgAAwPIF J/MAL9V5lr4SlshCylgi9VLWs/SVsujfAQAAuAzhyRqTW5PZWTvLQQxH+IJb42ae1VWFBwAAAJYl OVp0pl7/j3o4+HCEL7p66FcrxprlWHcAAAA4qvBs1fW6muqcrIQ1p+z0lLI84bGnob8fy+4AAABg tuu+d+2v9uocvTF5btmxX7AVHq9vp7d3R5AeAACARQlP73BSzzT2bNf8Y5Wxqk1KVnp0uqO/8Nmb lQAAAOCg671IfA7WeD3X1/rKFNZRrvXDER+I1viZ/eJfhHQHAADgUoTHS3bGPl2vT8dLdcbr/VFb V4YTPAA23fF6dkbpqYyhIToAAADLEZ7KBFbWr3PUEtYxZGfqGJoXbUWlLDmG9QEAAED5Ol9tWXkW v5IzhhonOTnh2GWslvF5D4JXy7MPAqIDAABwPuHJrvG/itf4aApr9kDjWGWsQ4Snp3cHAAAATic5 In6qE/Xl/vy8taawjnp9H07wwFSOj/CEhyWDAAAAyxOeVpDxHNy8VOckU9fDiR+Q8UGJ+na8UXQa lQEAAM4vOSJxquOVsHSq82yu629ywonr4cgPiki9lGUflOxEdNIdAACA0wtPdE1/CUQnKmHZa/pR r+fDiR4YW8p6l3YpKypnke4AAACcVnK88MJLdTzRqZawjiY8wwkeHO8B8h4cr5HJi7xIdwAAAE4v PL2pjic6Xnhx9Ov4cKIHSCTv3M5iLz2TT7oDAABwWsnxQotWqvMsfgnr5KnOKWTHio4+ETUqZXnC Q7oDAABwPuE5pFcnGzg6yfV7OOEDJVLfuUO6AwAAcH7JEbnwVOdUstOb7vwU0h0AAIClCM9Fpzqn kp1IelrrpaemOwgPAADAfNfsi051Tik7c6U7rb07iA4AAMB81+6LT3VOKTuR9FTTnfHBi0bXOBEd AABg/mv1xac6p5adQ9Kd6qw+6Q4AAMB8onPxqc5v1md6IFeSpztesvPl832P/+/28P9u95/3/+5T 2jafH3dlPg8AAAD0XadbJ5tX207OnuqcQ3as6Kyklu78+JSdp8+bFZ6PT+HRsoPoAAAA9F2j9esb yU82jyowi0p1ziE7kfRED+STEp3xZZTujAnPVskO6Q4AAEDf9bl6gHfrwM9FpDrnkp0p6Y4WnjHZ icpZKyU9CA8AAEDt2qxfn3Ligd2Lt4hU51yyE0mP1/w0pjtaeL6IX8rSsrOS3YQHAAAA2tdlW77y enV0i8niU51zyk6W7ngP6pPsJjs63bl3hEcnOyKkOwAAANk1WdQ1eSt5U/KzEp0f6n1nPdl8ibIT SY+X7jwq4RmlRzcrP3zerOyQ7gAAANRFZ2tEx5uU/mlEZ/Gpzrllx0t3PhzheVbC46U7Wna8chbp DgAAQH499kpY3sLfn47oaNlZXKpzbtmx0qOFZ2yG+n3/7pXwPDk33btzL/vpDqPoAAAA/vVXv66b kqOdOj/UbRQfb+HvYlKdJciOTnfGt0fZuZPdMXSvnOVNZt3J7ij6RnbLWkgPAADAn+tuNmo+pjqR 6Cw+1VmC7Fi7tOnOmyM8XsJjJ7PWsj+ZxSg6AADA7nW3coTTT0d2RuHJDummjGUe8JXzoNt0Z3zA tex8kd1kx1s0uBGalQEAADzR0U3JWnS8pmQrOlmqs1mC5CxJdiLLtI3K958yo0tZT0p+Wnt3aFYG AADYF52oKTkSnR/iT2CNqY49mJsyliMfdjrLTmY9fD7Qj+KXsjzh8ZqVER4AALhFyRFzvc323I1y 88/nLUp1xhKWLl9tl/JFrxf6n9A6M8s2K2dHSNiEZ1DCAwAAcGuisxX/SAgv1fGSHW+JoO7V2QZy hezIbgOxriEOsj+K/vNTah6dW5busFkZAABuXXiyIyH09NXv2z/ipzovEk9gLSrVWZrsWOGxpayo WVmXs6rpDiejAwDArUmOJzyj6LzJfvlqFJxqU/LienWWKjv2P0ULz9untIzNyvfiJzt2yaBNd8YO ccpZAABwS6KTHQkRLQ9s9erYCazFic5SZcdrVh7LWaPw/JK8nBWNodt0h3IWAADcivB4O3VsT2wm Oj8LorNd4he/Xvh/jBUe20B1r8TmIZCdqHeHchYAANyC5FjhsTt1RtF5DkQnWiD4LvuJjixReJZc xrLNylp4xmbltRIeL9mJ0p1BiQ3lLAAAuGbRya6levrKis54y8pX3l6dxbH0ZCdqVh6U8DzLfrqj X+p0x1s2SDkLAACuWXjs9FU0Zm5Fx56BZRcIeqUrylgHmql3Kvqd/El37gPZeQhkh3IWAABcs+RY 4dHlK2/6KpIdu1Mn6tUh2TngP8trVh6XA97JfjnLu7V6d0QoZwEAwHWJTnaiuXfIpxUdr1fnYpqS L0l2vP8420X+In/KWfdGemwpi+ksAAC4FeGJylfemPlvwflb+lKdxZevLkl2bLOyTnf0KHor3cnK WfrMLBHKWQAAcLmSY4XHm76yywPt7Yf4m5IvpnR1abJjhUdkf/fOoIQnk54o3eHsLAAAuBbRseGA N31ly1c61dHTV79k96BPrzGZMtYR/yN1LDfIn3KWbViOZCc6FV2fjk66AwAAl3adzJYHVspXP5Ts vF666Fya7GTlrJX8OUqiIjs23bH9OyK7k1oIDwAAXEoYsJXalmQrOv8Y0bmYgz6vSXas8Ij45Sw9 oaUlp9W7Y5MdxtEBAOAaROdN9rckV0Unkh25JOFZX8F/bKWc5cmOFR5PekQJDwAAwNJFJxsz97Yk /y35QZ8XXb66ZNlplbMGJS9eSeu+ITu2WZn+HQAAWPp1sXdL8t+y36tzdeWrS5YdKzwiu+Use3aW TXjupXaMBOPoAACw9Guhfj0SnXH6yqY5UarzKldSvrp02bH/0fo/eezdeRE/3clkJ5rOGhAeAABY 8PXPpjrePp0f8ifR0aKjd+roLclXITqXLjutZYO2nGV38ETlrEH2j5OgfwcAAJYoOlvnF36d6nil Kys7XlPyVZSvrkF2rPCI7J+d5Z2fdR+ITiXdoX8HAACWJDqV4yD+cWQnOxLiqlKda5Ad7z/fm87y 0p2q9FipYf8OAACc+5oXTV7ZfTqR6NhNyVlT8kWLzrXIjlfOWslu3VIvD1wXRCfaqsz+HQAAOPcv 9vqX+3GfzntDdP79efNSnawheXsND9w1JTtROcsraXmiU21WFqFhGQAAziM6XukqO+DT69PRqY49 0dwe9CnXIDzrK/1m0OmO3b1jS1pr6ZvMEqFhGQAAziM6rcWBnuj8uyA6H9cqOtcmO166M8rIaL06 3bGNy1aA7oSGZQAAWJbotBqSI9Gx5SuvT8fr1bkKrjHZWZlvjGi7spfwVEVHQ8MyAACcQnRaDck/ jOxo0RllR4uOnb6yfTpXIzzrK/7mEPmT7thxdLuD586RHW8qiwNDAQDgXNc2ryHZHgVhE53xpbcl +eqWB96S7HhGbMfRbcPynSM6Vnai09FFaFgGAIDjXsMqDcladLzpq6s9DuJWZScaR3+X/ZJWtGn5 TvbLWV66I7LfsIzwAADAHKLjla+miM5PJTqvRnSusk/nFmTHCo/IbsNyq6TlvR2lOyK752chPAAA MJfojJIzRXT+NqKjy1c3k+pcu+zYb5ysf8c2Lkfyk/XuCMIDAAAzi45NdLIzr6zs6EM+bfnqasfM b1F2bLpjD0vzSlr2PC1vMqsynQUAADBVdLaJ6OgNyaPo/I/U+3RuSnRuQXas8GzU+1dKeFoJT0V4 rPgwkg4AAFNFR5eusjOv/p2Izs3t07ll2RHJ9++8yW55KpOeQdrpzloYSQcAgOmio8tXkejYslXU pzOKzpvE515dvfCsb/AbSmS3f0fEP0MrkxwrO5H4MJIOAAC9opMtDYx6dFp9OjrR2dyS6Nya7Nhv LlvS8tIdL+mxstM6PwvhAQCAyrVJT155iY6Wnf9RN69Pxx7w+WEk52ZE5xZlp9Kw3JIeT3ZWieyw gwcAAKJfvHXZSl+PosM9/y1+omMbknWfjm1IvplenVuVHSs8UcNyr/QMifT85g7hAQAAR3R0+aq1 HXmUG5vo/C35huSba0hGdnaFR1u17d/plR5PcuzHQXgAABAdkXxpYLRLx4qOd+7VWL7ylgbeVJ8O suP/Z28OlJ1WuiMIDwAAoiPx0sA3R3Ss5ESiY08y946DuEnRuXXZsd98dkJLHOnpFR1PZBAeAABE Z1sQHTtiXl0c6EnOzYoOshOfnyWy32zsiU9ryaD+WAgPAACi4y0NfJd4O7Lt0/kfJTo/pXaS+c32 6iA7sfBo214lotMqcWUTWggPAMDtio6dvHpRohP16HgNyT8T0bnphmRkpy08m+DveKLTalJuyQvC AwBwe6KTHQOhTzHPdul4fTqR6Ny88CA7vvB4Y+lZ4/JqouwgPAAAiI5XurLNyFp2es68ItlBdlLh kc9vmtXnN1JVeiLZWSE8AACIjtR7dPTLSqJz8yPmyE7/N6ko4ZFEdqrbk1sgPAAA1y06epeOtx35 b0d0xpKWTnTGPh2b6Nz8iDmyM/0btio7cqDsIDwAANcrOl6ikzUj2z4dPXk1HifBLh1k5+BvWG8k /SP4+9lenV4QHgCA6xedbGlgJjreKebs0kF2ZhceEf9ICGm8D+EBALgd0RlFpKcZOTvFnF06yM7J hEcf1jaH1CA8AACXLzladPQOnQ/Z3Yz861NexkRnlJv//rzppYGtwz0RHWTnaMKj0533jo+xmvjD g/AAAFym6ExJdHSq0xIdlgYiOycTno8Z5EYa36wIDwDAMkVHtzl4R0C8iL8wcBSd/zYv7Yi5PsWc pYHIzlmFZy6psb8h6LfvEB4AgMWJTuX0cp3o/CO7iY4uXUVLA70Rc0QH2Vm88PQK0Sg645EUWngE 6QEAWITovDdExzsCIpu80tuR34WlgcjOBQvPNrjpP7s3/2YwkkPKAwBwPtGxywLtHh1duoomr/5x REf36WyEXTrIzgUKz7ZDgPT77pTo2JQH4QEAOI/ojEv+9Fbk6AiI7ATzrEcH0UF2LkJ4to0fHP0D 1IoqbbqD8AAAnF509LLA6PiHv43gRKLjnXfFdmRk5yKFJ/s4kex4t7WRHoQHAOA0omOXBb7Jnx06 0TlXnujohYG6RwfRQXauSngikdkUxOc3dwgPAMBRJUekvSzQjpaPE1f2QE97qKfeo6OnrujRQXau SnjsVuboViltITwAAKcRnfdEdEaZ8fpzsrOuEB1k5yqFJ0t1WtLj7Vi4E0bTAQDmEp1sWWBLdP4n EJ1/JD7Uk2ZkZOfqhMebsoqkJpIefbOj6UxqAQAcJjpRovOaiE40Wu5NXHlHQHzIbpKP6CA7Fyk8 3jfvNvnBakmOd7sTJrUAAOYSnY9EdPQOHZvo6H4dnej8kvpZV4gOsnOxwvPu/D0rOq1kpyVANC4D APRJjkjciOwtC7THP0Q9OlZ0XhAdZOeWhKe1Z6f3Fi0ipI8HACAXHdufk+3Q8Y5/8MbL/1aio0fL sx06iA6yc1XCUylj9aY7nvTo/1v6eAAAfNHJJq7GrcijsHjHP+iSld2hY7cijwL1IZx1hexcufCs AtHxduzY20fyeiQ99PEAAMS/bFYmrkbR8RKdfweiY3fo2EQH0UF2rlp4RPxJrUo560N2a8kfgfRY caKPBwB4Ht59actWrYmrLNHRE1dWdN4QHWQH4dkVHU96toH0fCTSs0l+oOjjAYBbFp2obDUmOmN/ TnT8g71lo+XRskD7vA/IztULj/2Gb21W/ijcIuGxfTz6RsoDANcqOSLtspUWHW9Z4N+B6Oj+HDta zrJAZAfhUe/zUp5sB8+H+W3kvSA+Xh+PV9YSpAcArkh0WmWrUXK8iSsv0Rnf/kf8wzxZFojsQEF4 WhuWrexUE57ftwcjPNtEehAeALgG0amUraKJq78D2flH/P4cduggOxD8MIqRi9ZoetSk3Ep6rPis P29bJT12WkuQHgC44OdV75fFrGzl7dDRL72xct2fww4dZAeSH87KaHprMsuTnHfzg+fVjtdGbEh5 AOCSRSf6JbFVtvrREJ2obDVOXEWnliM6yA44wiOyP5pemcx6l/105z2RIZvy6BH1lZDyAMBlSU70 XFktW0Wi84/sHvuQHf3AaDmyAxOEp7J0sCU7WWnrMRCesaRFygMAl5LmiORlK+98K1u2+jtJc3TZ Su/PifpzEB1kB4rCM0pP9BtLVs7Sv8m8mx9MT34elPTcCSkPAFxumrMxz4He+VY/HNGxvTk2zfH2 5+g0ZxNIGCA70BCebfGHO2pW9mQnkh4tPKQ8AHBJac7WPAe+KdH5pUQnK1t5TchR2Yr+HGQHZvyt RaTeuBylO1p27G388yfxe3lIeQBgyWlO1IScbUOOEh2vCVmLjtf7SNkK2YEZfri9xuXektab+S1H v7TSM/by3AspDwBcRprTU7b6p5Hm/DBpTnS+FaKD7MCRhaeV8kSy85rIjpWeR1IeAFhomuM1IXuH eOptyHZRYFS2am1D9spWiA6yA0cQnmyfxNY8AWTSY29eL4+X8gyf0kPKAwCnlJzolzqd5rTGyq3k ULZCdmChP/w24ZHik4G9ebLz5ojPo/gNzIOwfRkAjvNc55Ws9KSVbUL2ylY/lNR4kuPtzqFshezA AlOejdR6eKrpjhWfbGJrLGtp4bEnqSM9ADBHmuP15nhLAr3+nH+CNOen5GdbWdERRAfZgfMJjzg/ jK0enqrsaOl5Uh/rXvzyFqUtAJhTcqppji1b/dOQnFF0XoSyFbIDFyE8W9ltGM6a+Fopz0tDfGxp SwvP2MsjQgMzAPRJjohfsop+UdO7c34moqMlJ2tCpmyF7MDCnywqx0y0RtJ7pOdLIDy6pDUIpS0A yJ+7vDTaGye3k1Z6d44nOp7k2CZkO5hB2QrZgQtKeSSRnuxoiaic9eKIjxak36WtByflsb08XmkL 6QG47TSnp2SVpTk20YlKVlkTMmUrZAcuTHi2JknZmt9WNs5vTdmUVquv5+nzYzwo8VnLbmnLTm1p 6UF4AG5XcuwGZO/wTq83R+/P+SdIcmzJKjry4cO5T4gOsgMLf0JppTzZWVrvsrt48CW5/f7zr4H0 6NLWRvypLVIegNuSHJH2UTdeA7JNczzRGV//GaQ5dsrUHo/DkkBkB2405fHKWVZ2xte/OsIzlrbW Snjo5wG4LdGJ+nKySdEX2d+b45Wtfsh+87FXsqpsQibNQXbghlKeqKz10kh6tBg9OSnP/afsrCXf zYP0AFxXmlM55iErWXlNyJnkeCWrVm8OooPswA2mPNlOnhfzW9eL+Q1qTHm09Dwo6fmQ3YWEA9ID cHOSUy1Z2TQnkpyf6t/qX76qaQ6ig+wAKc9eWaslO1p4Rul5NNKjhQfpAbh8wfEkx/slylsM6KU5 tjfH3nSSE5WsdAMyaQ6yA6Q84W9flZTnl/mtTD/xfDHC8yi7pa0p0oP4ACwrxRHp2+8V7czRk1Y/ xJ+usvtyfgWSQ5oDyA5PUqWUx5a03oPfyF4c2RlvX5X0PAUpT4/0CGkPwEVJTjRKrs+zaqU5VnKe zXOPnbKKJIc0B9kBUp6dt4dAerx9PJHo/FK/fX35FJ8vJuV5VMJTlR5BegAuSnJaJSuvN8dKju3L sZKTjZOT5iA7wBNYmvL0lrV+mSeyb+rlKD1fTNLzgPQAXKTkeGPknuS0GpB/BqJT7cvR2+H1/RLS HEB2oJryRP08bxKXtfSTmhaer07K0ys9K9lfToj0AMwvOCL75Z+N1Cas3pznhGfxe3N+GPHRE1bR KHm1ZIXoABcECL8n9MtRLEbZGPflrD+FZJSURyUuX4zYjKJjb18mSI9dTDiY+7vi+xxg9hTHS3u9 haTeAEPUm+NJTtR8/Ko+h5Wcjfg9OUgOcBGA0veFbRAelPDcKeHJpOeLkp6vndJjx9XtmVvZ9Jb3 tQBAnuKI5HtyojFyry/Hpjk/kxSn0nxs0xxKVoDswFFSnpVJVkbpuS8kPV+cxKclPd64ut3GPEh+ DIWQ9gCUUhyRuB/HK1e9y27f3pjEjMmMlhx9+2H+TA8zeEsBKVkBsgNnkR5dQrorJD2PSdLzJZCe 8e8/OknPWvzyVtbXQ9oDCE47xcn6cVorKLySlXfTf8dOWEWSY5uPkRxAduCo3yut0pYnPQ8m6Xkq SI+d3HqUeDHhWvK+HtIeQHJqKU5LcrwJTLsz59mRm5bkjB/7XfxRckpWgOzA2aXHS3q0hFSlJxMe nfI8St7T09vMjPgAKc5uihKNkEd9Oc+y35/z05Ege7yMTXJa+3JIcwDZgZN/72T9PMNE6fHSHm8/ z2MgPd7I+l0gPa0yFz8ncC2CI4UUJzsTz0tyfgWJznNDcnRPjh0jpy8HkB1YfMojRigOlZ4vQcLz VEh67p2kp1Liynp6+JmBSxEckXgBoG06fpf2wb92U/pz4fYrkRyb5HgTVpSsANmBq5Sex0R6vgTS Y5Oex6L0eM3M2c4exAeWLDgifpmqJ8XpkZxfidz0SI4da4/OsEJ0ANmBq5aeSH6eJkiPLnF5+3p0 2oP4wCUJjjgJjneUQ6VUFUnOL0dunhuCU+3J2ThfD5IDyA5cvfRE4vPFkZ+nidKTlbiyEXbEB04p NyJxSceWfWyKs1GCEaU4tun4xUjMc/DSCk7Uj4PkALIDSE8gPV7ak4mPJzxRM7MnPetEemziI1Jr bubnDOYWnFaZamqpKkty7PteCinOm+xuWkZyANkBpMdIj7eV2Ut7Hh3J8V5/TKTHW1JYFZ8pR1Tw cwctuZkiOK0FgG9JiuNJjn39ZUKKg+QAsgNIT0N6etOex0B4vMmtbGzdlrgy8VlJ+4gK5AemyI3I /iRVVKbSCYo9ymGK5ESNxp7gRNuOkRxAdoDvu07puXOkp1Lmim6PDemxaY8VH+8g0mriUzmugp/N 6xObTG4kSW8qZapqP07Uk1MVnFaK4+3IQXIA2QG+/xLpWTWkx0t7IvF5DITHlra8Ete9tMtcPeKD /NyG2EyRm6rgVEpVrZ6cluAcmuJskRxAdgDa0rOaMe3xyl2PQcoTiU+rzOWNsR8qPwjQZYuNvdj3 CI530rhtOPZKVa9KVKKSlX3fi/k3VnC8LcfRuVXsyQFkB6BDekTi87es9Nw50mPFx2tufkzeZ4Wn MsnVEp+ektch4+38bB9PalpiUxGcLL3JBMdLcd4cwfHKVlGTsT2jytuL827uWyQ4SA4gOwAzSY93 8Kg3vh6VuTz5yW4PzsuoxOWVuQ6RH5H5J734ua9fhFvL/CSQGnFEoFWe2pj0xCY4UakqKllF0mMT nKhMFU1UbQKBQ3IA2QE4kvREh4+2xCdKfR4awhM1M3vSM0V+ppa8KsnP6oaeG7YH/t2ekpQEUhON h09JcFqS8+qkNFH/zZRm400xxUFyANkBmOn7NEt7ot4e29+zDsQnSn482fFSnntHfO7N5281OB9S 8ooEsfJzv1rIc8vcF8tt8f3bwsvoaIaW3HgNxlZuIsl5DUTnpfjyVfZLVFGZihQHkB2AK0h7MvGJ Sl5e+uPJjtfIHPX3eFub50h9MgHq7QFaShK0neHvV8tRlZ6bjfT33rQSnKwXJxOd6H3ex3iXeJqq JTn2MUFyANkBOFPaEzU1j4JgRWItebnLSsxD4xZJz4MjVV7J607iJmdvtH0Qv48peizmkqDqn095 ftlO/LNeqWkJTaWpeFuQmx7BaSU5URnLS21aPTikOIDsAFxp2tOT+HjiY8telZf3xcSn1eCcHV1h U59K+hNJz6rxuFakc+pzzLbz7ZbUSHDB3so0uan03kRy05Kc10ai89YhNja98SapPhxxI8UBZAfg QtMeSaRnVRCfOyMi9xKXvu6T97XkJ2pubvX43AXSM6cAVURmakrUk8REF9wpi/sysdkWxCZb8vfh SMdbQXTeApmpik2U3lQTHFIcQHYAriTtkYnicydxz43XkHzfkJ+sqblXeu7M/a4mPz39P9JIfaZM ifU0CLf22vQIzqYoOC25qaQ4Wbmq92bToQ/npb3P2dI/JqoA2QG4gbSnR3yGIPXJ+n4qAtRqZr6X 9hj7IfIzx7h7pU+oRTbxtE1EqCo5Wb9Nb3oTJTnvTuLSEp73JK2JUhtvPDxKb1rj4qQ4gOwAID5h n0+U/kQCFMnPWvKRdfvv7Qh7dqvKT1V8vMdKpF4ay5KdSqkpS3mmCs6H+Mv9MsGJkpyq8LwHSU1F bD6c+xwlVRXBQXIA2QFAfFzxiZKfoUN+Ipm5T/7OuiA8UZmr1eszZaNz1gu1KiY8FVlplV6mNBdX SlSe4HwEQhKJS/b2R1FsrNxspb88heAAT/gA/Bx0iU8r+WklQJ6wrIs3r4R2V0x6MuGpjLZXG75X yb+VQHgqPTVZyuMt9tsmCU5FdLJE5yMRnvdEiFpS8xHc55bYIDgAyA7A7OIjQZpREaBW+esuEZsp gjNFeLyvKROdVjmsmuxkpadWP090TMMU0cmEJ2oMzpqGI6n5kHy0vTe5QXAAkB2AWcRHpL+sU0l/ WjLUIzKt/p1KWas6sRV9jatCuhOVoHov+D0bjT3ZqYjPh7T7aFpSkzUSRweHRkmWIDgAyA7AsX9W KtNJ1SQk6wEaOoWlV25a/TtTv55WutNKdTIRaB3nkPXpTJGfTeP1TeN1T9xaJanK6D2CA4DsAJwt 9emVn1VDGIainHh/ftf571uy0kp1op6fluxkk1NZ0uEdzLkp3D4KMhRJS1R+at3vav+RSFyaQm4A kB2ARaU+mfxk8tBq/B0ar7d260zZvSNSK2PZ99mv2V60bc9N1LdTbVKu7tSp/nlFZFpC09tvQ2kK ANkBuDr5kYJYDAfKUesoibnGzudqUJ5z/HxblKlN4X5UZKaa2gjpDQCyA3AL8lMRIJH5dt4Mxb9X WSq4lD07IvVjIloff06Z6dlUjNwAIDsAV/9z1zpxvFeIpCAuU87Gan3eIfk7LdmRQDgiqZgiPZW/ JzK9r4bUBgDZAYCJAjS3ELVeF8kPAe1Jn1pEAtKSDCkkKr2vV15WpQa5AUB2AGDiz+fqSFLUel+P XLU+RiQPh4rGdsLHrr6O2AAgOwCwgJ/Znh6hXnGqyk9FdKqSUU1Qth1vz1FqQmoAkB0AuBARav3b VefHXE24X9vOt3vl45CmYKQG4ML5vwIMADa9e26qZ/20AAAAAElFTkSuQmCC" + id="image3980" /> + <g + id="g3982"> + <circle + sodipodi:ry="275.909" + sodipodi:rx="275.909" + sodipodi:cy="278.93399" + sodipodi:cx="279.51501" + cx="279.51501" + cy="278.93399" + r="275.909" + id="circle3984" + d="m 555.42401,278.93399 c 0,152.38033 -123.52866,275.909 -275.909,275.909 -152.38033,0 -275.9089919,-123.52867 -275.9089919,-275.909 0,-152.38033 123.5286619,-275.9089961 275.9089919,-275.9089961 152.38034,0 275.909,123.5286661 275.909,275.9089961 z" /> + </g> + </g> + <g + style="display:inline" + id="Frame_copy_1_" + display="inline" /> + </g> + <g + style="display:none" + id="Frame_copy_2" + display="none" + transform="translate(1042.0419,-279.83386)"> + <circle + style="fill:#ffffff;display:inline" + sodipodi:ry="275.909" + sodipodi:rx="275.909" + sodipodi:cy="278.93399" + sodipodi:cx="279.51501" + display="inline" + cx="279.51501" + cy="278.93399" + r="275.909" + id="circle3988" + d="m 555.42401,278.93399 c 0,152.38033 -123.52866,275.909 -275.909,275.909 -152.38033,0 -275.9089919,-123.52867 -275.9089919,-275.909 0,-152.38033 123.5286619,-275.9089961 275.9089919,-275.9089961 152.38034,0 275.909,123.5286661 275.909,275.9089961 z" /> + <g + style="display:inline" + id="Frame_copy_2_1_" + display="inline" /> + </g> + <g + id="Foreground_Grid_1_" + transform="matrix(0.333692,0,0,0.333692,-610.81394,-151.23635)" /> + <g + id="layer4" + inkscape:label="box" + style="display:inline" + transform="matrix(0.6433923,0,0,0.6433923,563.19164,120.38376)" /> + <g + id="layer5" + inkscape:label="zip_app" + style="display:inline" + transform="matrix(0.6433923,0,0,0.6433923,563.19164,120.38376)" /> + <rect + style="opacity:0.57786889;fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none" + id="rect1327" + width="0.64339232" + height="0" + x="563.78369" + y="130.76021" /> + <path + sodipodi:nodetypes="ccssscccccc" + inkscape:connector-curvature="0" + id="path5980" + d="M 18.5,9 C 18.160156,9 18,9.2346178 18,9.5 l 0,107.96875 c 0,0.82158 0.679323,1.49953 1.5,1.5 L 74,119 c 0.05307,3e-5 3.273884,-0.008 3.9635,5e-5 6.540972,-4.50361 22.6373,-21.953284 31.58253,-30.955094 1.47685,-1.656484 0.4576,-0.370067 1.45391,-1.607456 L 111,9.5 C 111,9.1772826 110.83678,9 110.5,9 z" + style="opacity:0.84653476;fill:url(#radialGradient5988);fill-opacity:1" + inkscape:export-filename="/Users/tomschindl/java-file.png" + inkscape:export-xdpi="11.25" + inkscape:export-ydpi="11.25" /> + <path + sodipodi:nodetypes="cscscssc" + inkscape:connector-curvature="0" + id="path6081" + d="m 113.9,82.502986 c 0,4.465301 -4.49749,6.609952 -6.97972,8.293625 -5.10854,3.46508 -14.739114,3.52536 -20.520284,3.60638 -0.081,5.781159 0.76586,15.304599 -2.69922,20.413139 -1.68367,2.48224 -5.79051,7.98687 -8.70078,7.98687 -2.091359,1.5337 3.488204,11.21101 6.734971,8.31989 9.501888,-8.46107 45.998943,-30.20138 54.218083,-39.441569 2.04044,-2.29392 -17.0724,-11.965986 -22.05305,-9.178335 z" + style="opacity:0.40099009;fill:#000000;fill-opacity:1;stroke:none;filter:url(#filter6118)" + clip-path="url(#clipPath6093)" + inkscape:export-filename="/Users/tomschindl/java-file.png" + inkscape:export-xdpi="11.25" + inkscape:export-ydpi="11.25" /> + <path + style="fill:url(#linearGradient3895);fill-opacity:1;stroke:none" + d="m 112,82.502986 c 0,4.465301 -2.79749,6.409952 -5.27972,8.093625 -5.10854,3.46508 -14.939114,3.32536 -20.720284,3.40638 -0.081,5.781159 0.16586,15.504599 -3.29922,20.613139 -1.68367,2.48224 -5.29051,5.38687 -8.20078,5.38687 2.31803,0 4.74284,-1.33476 7.58402,-4.08481 9.14197,-8.84873 17.36714,-16.13535 25.673154,-25.297529 C 109.67612,88.503916 112,86.97878 112,82.502986 z" + id="path6011" + inkscape:connector-curvature="0" + sodipodi:nodetypes="cscscssc" + inkscape:export-filename="/Users/tomschindl/java-file.png" + inkscape:export-xdpi="11.25" + inkscape:export-ydpi="11.25" /> + <path + style="fill:#ffffff;fill-opacity:1;stroke:none" + d="m 112.01875,83.2125 c -0.31643,3.899106 -3.52291,5.902807 -5.85,7.48125 C 101.06021,94.15883 90.83117,93.01898 85.05,93.1 c -0.081,5.781159 0.85258,16.31646 -2.6125,21.425 -1.473211,2.17196 -4.099456,4.6601 -6.7625,5.25 1.980459,-0.3623 3.884931,-1.66139 6.26875,-3.96875 0.339117,-0.38853 0.574297,-0.67895 1.10625,-1.5 3.46508,-5.10854 2.923687,-14.465715 3.004687,-20.246875 5.78117,-0.08102 15.718023,0.211955 20.826563,-3.253125 0.46542,-0.315689 1.59399,-1.187744 2.00625,-1.6 1.53629,-1.536293 2.90171,-2.613421 3.13125,-5.99375 z M 75.675,119.775 c -0.157658,0.0349 -0.313437,0.0414 -0.46875,0.0625 0.156991,-0.0169 0.310443,-0.0335 0.46875,-0.0625 z" + id="path6122" + inkscape:connector-curvature="0" + sodipodi:nodetypes="cscsccccsscccc" + inkscape:export-filename="/Users/tomschindl/java-file.png" + inkscape:export-xdpi="11.25" + inkscape:export-ydpi="11.25" /> + <path + style="fill:none;stroke:url(#radialGradient3919);stroke-width:1.2;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;filter:url(#filter3909)" + d="M 117.31456,81.861283 72.639105,125.34835" + id="path3873" + inkscape:connector-curvature="0" + sodipodi:nodetypes="cc" + clip-path="url(#clipPath3889)" + inkscape:export-filename="/Users/tomschindl/java-file.png" + inkscape:export-xdpi="11.25" + inkscape:export-ydpi="11.25" /> + <rect + style="opacity:0.01;fill:#fbfbfb;fill-opacity:0.00392157000000000;stroke:none" + id="rect3915" + width="128" + height="128" + x="0" + y="-1.7084319e-12" + rx="0" + ry="0" + inkscape:export-filename="/Users/tomschindl/java-file.png" + inkscape:export-xdpi="11.25" + inkscape:export-ydpi="11.25" /> + <text + xml:space="preserve" + style="font-size:40px;font-style:normal;font-weight:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#2ca02c;fill-opacity:1;stroke:none;font-family:Sans" + x="28" + y="86" + id="text3051" + sodipodi:linespacing="125%" + inkscape:export-filename="/Users/tomschindl/java-file.png" + inkscape:export-xdpi="11.25" + inkscape:export-ydpi="11.25"><tspan + sodipodi:role="line" + id="tspan3053" + x="28" + y="86" + style="font-size:70px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;fill:#c83737;font-family:Verdana;-inkscape-font-specification:Verdana">JS</tspan></text> + </g> +</svg> diff --git a/experimental/compensator/org.eclipse.fx.code.compensator.editor.js/src/org/eclipse/fx/code/compensator/editor/js/JavaScriptComponent.java b/experimental/compensator/org.eclipse.fx.code.compensator.editor.js/src/org/eclipse/fx/code/compensator/editor/js/JavaScriptComponent.java index afb52ee0b..ec487c84b 100644 --- a/experimental/compensator/org.eclipse.fx.code.compensator.editor.js/src/org/eclipse/fx/code/compensator/editor/js/JavaScriptComponent.java +++ b/experimental/compensator/org.eclipse.fx.code.compensator.editor.js/src/org/eclipse/fx/code/compensator/editor/js/JavaScriptComponent.java @@ -14,13 +14,14 @@ import org.eclipse.fx.code.compensator.editor.ContentTypeProvider; import org.eclipse.fx.code.compensator.editor.Input; import org.eclipse.fx.code.compensator.editor.js.scanner.FastJavaScriptPartitionScanner; import org.eclipse.fx.code.compensator.editor.js.scanner.IJavaScriptPartitions; +import org.eclipse.fx.code.compensator.editor.services.FileIconProvider; import org.eclipse.fx.code.compensator.editor.services.PartitionerFactory; import org.eclipse.fx.code.compensator.editor.services.SourceViewerConfigurationFactory; import org.eclipse.jface.text.IDocumentPartitioner; import org.eclipse.jface.text.rules.FastPartitioner; import org.eclipse.jface.text.source.SourceViewerConfiguration; -public class JavaScriptComponent implements PartitionerFactory, SourceViewerConfigurationFactory { +public class JavaScriptComponent implements PartitionerFactory, SourceViewerConfigurationFactory, FileIconProvider { private final static String[] LEGAL_CONTENT_TYPES= new String[] { IJavaScriptPartitions.JAVA_DOC, IJavaScriptPartitions.JAVA_MULTI_LINE_COMMENT, @@ -48,4 +49,14 @@ public class JavaScriptComponent implements PartitionerFactory, SourceViewerConf new FastJavaScriptPartitionScanner(), LEGAL_CONTENT_TYPES); } + + @Override + public boolean applies(String uri) { + return uri.endsWith(".js"); + } + + @Override + public String getIcon(String uri) { + return "platform:/plugin/org.eclipse.fx.code.compensator.editor.js/icons/16/js-file.png"; + } } diff --git a/experimental/compensator/org.eclipse.fx.code.compensator.editor/src/org/eclipse/fx/code/compensator/editor/ContentTypeProvider.java b/experimental/compensator/org.eclipse.fx.code.compensator.editor/src/org/eclipse/fx/code/compensator/editor/ContentTypeProvider.java index ad888e3c4..b184fcbc7 100644 --- a/experimental/compensator/org.eclipse.fx.code.compensator.editor/src/org/eclipse/fx/code/compensator/editor/ContentTypeProvider.java +++ b/experimental/compensator/org.eclipse.fx.code.compensator.editor/src/org/eclipse/fx/code/compensator/editor/ContentTypeProvider.java @@ -17,5 +17,6 @@ public interface ContentTypeProvider { public static final String GROOVY = "text/groovy"; public static final String HSL = "text/hsl"; public static final String LEGO = "text/lego"; + public String getContentType(); } diff --git a/experimental/compensator/org.eclipse.fx.code.compensator.editor/src/org/eclipse/fx/code/compensator/editor/Outline.java b/experimental/compensator/org.eclipse.fx.code.compensator.editor/src/org/eclipse/fx/code/compensator/editor/Outline.java index c03b9bfa0..f46b702f6 100644 --- a/experimental/compensator/org.eclipse.fx.code.compensator.editor/src/org/eclipse/fx/code/compensator/editor/Outline.java +++ b/experimental/compensator/org.eclipse.fx.code.compensator.editor/src/org/eclipse/fx/code/compensator/editor/Outline.java @@ -18,7 +18,7 @@ public interface Outline { public ObservableList<OutlineItem> getRootItems(); public interface OutlineItem { - public String getLabel(); + public CharSequence getLabel(); public List<String> getStyle(); public ObservableList<OutlineItem> getChildren(); } diff --git a/experimental/compensator/org.eclipse.fx.code.compensator.editor/src/org/eclipse/fx/code/compensator/editor/services/FileIconLookup.java b/experimental/compensator/org.eclipse.fx.code.compensator.editor/src/org/eclipse/fx/code/compensator/editor/services/FileIconLookup.java new file mode 100644 index 000000000..cd61c5fce --- /dev/null +++ b/experimental/compensator/org.eclipse.fx.code.compensator.editor/src/org/eclipse/fx/code/compensator/editor/services/FileIconLookup.java @@ -0,0 +1,5 @@ +package org.eclipse.fx.code.compensator.editor.services; + +public interface FileIconLookup { + public String getFileIcon(String uri); +} diff --git a/experimental/compensator/org.eclipse.fx.code.compensator.editor/src/org/eclipse/fx/code/compensator/editor/services/FileIconProvider.java b/experimental/compensator/org.eclipse.fx.code.compensator.editor/src/org/eclipse/fx/code/compensator/editor/services/FileIconProvider.java new file mode 100644 index 000000000..bf4ee131d --- /dev/null +++ b/experimental/compensator/org.eclipse.fx.code.compensator.editor/src/org/eclipse/fx/code/compensator/editor/services/FileIconProvider.java @@ -0,0 +1,6 @@ +package org.eclipse.fx.code.compensator.editor.services; + +public interface FileIconProvider { + public boolean applies(String uri); + public String getIcon(String uri); +} diff --git a/experimental/compensator/org.eclipse.fx.code.compensator.nashorn.qx/.classpath b/experimental/compensator/org.eclipse.fx.code.compensator.nashorn.qx/.classpath new file mode 100644 index 000000000..a473f2b23 --- /dev/null +++ b/experimental/compensator/org.eclipse.fx.code.compensator.nashorn.qx/.classpath @@ -0,0 +1,11 @@ +<?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-1.8"> + <accessrules> + <accessrule kind="accessible" pattern="jdk/nashorn/internal/**"/> + </accessrules> + </classpathentry> + <classpathentry kind="con" path="org.eclipse.pde.core.requiredPlugins"/> + <classpathentry kind="src" path="src"/> + <classpathentry kind="output" path="bin"/> +</classpath> diff --git a/experimental/compensator/org.eclipse.fx.code.compensator.nashorn.qx/.gitignore b/experimental/compensator/org.eclipse.fx.code.compensator.nashorn.qx/.gitignore new file mode 100644 index 000000000..ae3c17260 --- /dev/null +++ b/experimental/compensator/org.eclipse.fx.code.compensator.nashorn.qx/.gitignore @@ -0,0 +1 @@ +/bin/ diff --git a/experimental/compensator/org.eclipse.fx.code.compensator.nashorn.qx/.project b/experimental/compensator/org.eclipse.fx.code.compensator.nashorn.qx/.project new file mode 100644 index 000000000..95b066f60 --- /dev/null +++ b/experimental/compensator/org.eclipse.fx.code.compensator.nashorn.qx/.project @@ -0,0 +1,39 @@ +<?xml version="1.0" encoding="UTF-8"?> +<projectDescription> + <name>org.eclipse.fx.code.compensator.nashorn.qx</name> + <comment></comment> + <projects> + </projects> + <buildSpec> + <buildCommand> + <name>org.eclipse.xtext.ui.shared.xtextBuilder</name> + <arguments> + </arguments> + </buildCommand> + <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> + <buildCommand> + <name>org.eclipse.pde.ds.core.builder</name> + <arguments> + </arguments> + </buildCommand> + </buildSpec> + <natures> + <nature>org.eclipse.pde.PluginNature</nature> + <nature>org.eclipse.jdt.core.javanature</nature> + <nature>org.eclipse.xtext.ui.shared.xtextNature</nature> + </natures> +</projectDescription> diff --git a/experimental/compensator/org.eclipse.fx.code.compensator.nashorn.qx/.settings/org.eclipse.jdt.core.prefs b/experimental/compensator/org.eclipse.fx.code.compensator.nashorn.qx/.settings/org.eclipse.jdt.core.prefs new file mode 100644 index 000000000..0c68a61dc --- /dev/null +++ b/experimental/compensator/org.eclipse.fx.code.compensator.nashorn.qx/.settings/org.eclipse.jdt.core.prefs @@ -0,0 +1,7 @@ +eclipse.preferences.version=1 +org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled +org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.8 +org.eclipse.jdt.core.compiler.compliance=1.8 +org.eclipse.jdt.core.compiler.problem.assertIdentifier=error +org.eclipse.jdt.core.compiler.problem.enumIdentifier=error +org.eclipse.jdt.core.compiler.source=1.8 diff --git a/experimental/compensator/org.eclipse.fx.code.compensator.nashorn.qx/META-INF/MANIFEST.MF b/experimental/compensator/org.eclipse.fx.code.compensator.nashorn.qx/META-INF/MANIFEST.MF new file mode 100644 index 000000000..dbc15e461 --- /dev/null +++ b/experimental/compensator/org.eclipse.fx.code.compensator.nashorn.qx/META-INF/MANIFEST.MF @@ -0,0 +1,11 @@ +Manifest-Version: 1.0 +Bundle-ManifestVersion: 2 +Bundle-Name: Qx +Bundle-SymbolicName: org.eclipse.fx.code.compensator.nashorn.qx;singleton:=true +Bundle-Version: 1.0.0.qualifier +Bundle-RequiredExecutionEnvironment: JavaSE-1.8 +Require-Bundle: org.eclipse.fx.code.compensator.nashorn, + org.eclipse.fx.code.compensator.editor, + org.eclipse.fx.ui.theme;bundle-version="1.2.0" +Service-Component: OSGI-INF/services/qxnashornoutlineext.xml +Bundle-ActivationPolicy: lazy diff --git a/experimental/compensator/org.eclipse.fx.code.compensator.nashorn.qx/OSGI-INF/services/qxnashornoutlineext.xml b/experimental/compensator/org.eclipse.fx.code.compensator.nashorn.qx/OSGI-INF/services/qxnashornoutlineext.xml new file mode 100644 index 000000000..43c4985e9 --- /dev/null +++ b/experimental/compensator/org.eclipse.fx.code.compensator.nashorn.qx/OSGI-INF/services/qxnashornoutlineext.xml @@ -0,0 +1,7 @@ +<?xml version="1.0" encoding="UTF-8"?> +<scr:component xmlns:scr="http://www.osgi.org/xmlns/scr/v1.1.0" name="org.eclipse.fx.code.compensator.nashorn.qx.qxnashornoutlineext"> + <implementation class="org.eclipse.fx.code.compensator.nashorn.qx.QxOutlineExtension"/> + <service> + <provide interface="org.eclipse.fx.code.compensator.nashorn.JSOutlineExtension"/> + </service> +</scr:component> diff --git a/experimental/compensator/org.eclipse.fx.code.compensator.nashorn.qx/build.properties b/experimental/compensator/org.eclipse.fx.code.compensator.nashorn.qx/build.properties new file mode 100644 index 000000000..eaeffa234 --- /dev/null +++ b/experimental/compensator/org.eclipse.fx.code.compensator.nashorn.qx/build.properties @@ -0,0 +1,6 @@ +output.. = bin/ +bin.includes = META-INF/,\ + .,\ + OSGI-INF/services/qxnashornoutlineext.xml,\ + plugin.xml +source.. = src/ diff --git a/experimental/compensator/org.eclipse.fx.code.compensator.nashorn.qx/css/default.css b/experimental/compensator/org.eclipse.fx.code.compensator.nashorn.qx/css/default.css new file mode 100644 index 000000000..8db12df42 --- /dev/null +++ b/experimental/compensator/org.eclipse.fx.code.compensator.nashorn.qx/css/default.css @@ -0,0 +1,35 @@ +.qx-property-public { + -fx-graphic: url("icons/property-public.png"); +} + +.qx-property-protected { + -fx-graphic: url("icons/property-protected.png"); +} + +.qx-property-private { + -fx-graphic: url("icons/property-private.png"); +} + +.qx-method-public { + -fx-graphic: url("icons/method-public.png"); +} + +.qx-method-protected { + -fx-graphic: url("icons/method-protected.png"); +} + +.qx-method-private { + -fx-graphic: url("icons/method-private.png"); +} + +.qx-field-public { + -fx-graphic: url("icons/field-public.png"); +} + +.qx-field-protected { + -fx-graphic: url("icons/field-protected.png"); +} + +.qx-field-private { + -fx-graphic: url("icons/field-private.png"); +}
\ No newline at end of file diff --git a/experimental/compensator/org.eclipse.fx.code.compensator.nashorn.qx/css/icons/field-private.png b/experimental/compensator/org.eclipse.fx.code.compensator.nashorn.qx/css/icons/field-private.png Binary files differnew file mode 100644 index 000000000..7ab030ad4 --- /dev/null +++ b/experimental/compensator/org.eclipse.fx.code.compensator.nashorn.qx/css/icons/field-private.png diff --git a/experimental/compensator/org.eclipse.fx.code.compensator.nashorn.qx/css/icons/field-private.svg b/experimental/compensator/org.eclipse.fx.code.compensator.nashorn.qx/css/icons/field-private.svg new file mode 100644 index 000000000..54dfd7af3 --- /dev/null +++ b/experimental/compensator/org.eclipse.fx.code.compensator.nashorn.qx/css/icons/field-private.svg @@ -0,0 +1,80 @@ +<?xml version="1.0" encoding="UTF-8" standalone="no"?> +<!-- Created with Inkscape (http://www.inkscape.org/) --> + +<svg + xmlns:dc="http://purl.org/dc/elements/1.1/" + xmlns:cc="http://creativecommons.org/ns#" + xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" + xmlns:svg="http://www.w3.org/2000/svg" + xmlns="http://www.w3.org/2000/svg" + xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" + xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" + width="210mm" + height="297mm" + id="svg3072" + version="1.1" + inkscape:version="0.48.5 r10040" + sodipodi:docname="field-private.svg" + inkscape:export-filename="/Users/tomschindl/Documents/e-workspaces/efxclipse-ide/org.eclipse.fx.code.compensator.nashorn.qx/css/icons/field-private.png" + inkscape:export-xdpi="8.7700005" + inkscape:export-ydpi="8.7700005"> + <defs + id="defs3074" /> + <sodipodi:namedview + id="base" + pagecolor="#ffffff" + bordercolor="#666666" + borderopacity="1.0" + inkscape:pageopacity="0.0" + inkscape:pageshadow="2" + inkscape:zoom="2.8" + inkscape:cx="350" + inkscape:cy="682.16883" + inkscape:document-units="px" + inkscape:current-layer="layer1" + showgrid="false" + inkscape:window-width="854" + inkscape:window-height="733" + inkscape:window-x="891" + inkscape:window-y="272" + inkscape:window-maximized="0" /> + <metadata + id="metadata3077"> + <rdf:RDF> + <cc:Work + rdf:about=""> + <dc:format>image/svg+xml</dc:format> + <dc:type + rdf:resource="http://purl.org/dc/dcmitype/StillImage" /> + <dc:title></dc:title> + </cc:Work> + </rdf:RDF> + </metadata> + <g + inkscape:label="Ebene 1" + inkscape:groupmode="layer" + id="layer1"> + <path + sodipodi:type="arc" + style="fill:#c83737" + id="path3091" + sodipodi:cx="339.64285" + sodipodi:cy="373.79074" + sodipodi:rx="56.785713" + sodipodi:ry="56.785713" + d="m 396.42857,373.79074 a 56.785713,56.785713 0 1 1 -113.57143,0 56.785713,56.785713 0 1 1 113.57143,0 z" + transform="matrix(1.0849057,0,0,1.0849057,-34.016173,-41.558379)" /> + <text + xml:space="preserve" + style="font-size:40px;font-style:normal;font-weight:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#ffffff;fill-opacity:1;stroke:none;font-family:Sans" + x="307.78568" + y="399.64792" + id="text3117" + sodipodi:linespacing="125%"><tspan + sodipodi:role="line" + id="tspan3119" + x="307.78568" + y="399.64792" + style="font-size:90px;font-weight:bold;fill:#ffffff;-inkscape-font-specification:Sans Bold">F</tspan></text> + </g> +</svg> diff --git a/experimental/compensator/org.eclipse.fx.code.compensator.nashorn.qx/css/icons/field-protected.png b/experimental/compensator/org.eclipse.fx.code.compensator.nashorn.qx/css/icons/field-protected.png Binary files differnew file mode 100644 index 000000000..6d50ff701 --- /dev/null +++ b/experimental/compensator/org.eclipse.fx.code.compensator.nashorn.qx/css/icons/field-protected.png diff --git a/experimental/compensator/org.eclipse.fx.code.compensator.nashorn.qx/css/icons/field-protected.svg b/experimental/compensator/org.eclipse.fx.code.compensator.nashorn.qx/css/icons/field-protected.svg new file mode 100644 index 000000000..9bd56590b --- /dev/null +++ b/experimental/compensator/org.eclipse.fx.code.compensator.nashorn.qx/css/icons/field-protected.svg @@ -0,0 +1,80 @@ +<?xml version="1.0" encoding="UTF-8" standalone="no"?> +<!-- Created with Inkscape (http://www.inkscape.org/) --> + +<svg + xmlns:dc="http://purl.org/dc/elements/1.1/" + xmlns:cc="http://creativecommons.org/ns#" + xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" + xmlns:svg="http://www.w3.org/2000/svg" + xmlns="http://www.w3.org/2000/svg" + xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" + xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" + width="210mm" + height="297mm" + id="svg3072" + version="1.1" + inkscape:version="0.48.5 r10040" + sodipodi:docname="field-protected.svg" + inkscape:export-filename="/Users/tomschindl/Documents/e-workspaces/efxclipse-ide/org.eclipse.fx.code.compensator.nashorn.qx/css/icons/field-protected.png" + inkscape:export-xdpi="8.7700005" + inkscape:export-ydpi="8.7700005"> + <defs + id="defs3074" /> + <sodipodi:namedview + id="base" + pagecolor="#ffffff" + bordercolor="#666666" + borderopacity="1.0" + inkscape:pageopacity="0.0" + inkscape:pageshadow="2" + inkscape:zoom="2.8" + inkscape:cx="350" + inkscape:cy="682.16883" + inkscape:document-units="px" + inkscape:current-layer="layer1" + showgrid="false" + inkscape:window-width="854" + inkscape:window-height="733" + inkscape:window-x="891" + inkscape:window-y="272" + inkscape:window-maximized="0" /> + <metadata + id="metadata3077"> + <rdf:RDF> + <cc:Work + rdf:about=""> + <dc:format>image/svg+xml</dc:format> + <dc:type + rdf:resource="http://purl.org/dc/dcmitype/StillImage" /> + <dc:title></dc:title> + </cc:Work> + </rdf:RDF> + </metadata> + <g + inkscape:label="Ebene 1" + inkscape:groupmode="layer" + id="layer1"> + <path + sodipodi:type="arc" + style="fill:#ff7f2a" + id="path3091" + sodipodi:cx="339.64285" + sodipodi:cy="373.79074" + sodipodi:rx="56.785713" + sodipodi:ry="56.785713" + d="m 396.42857,373.79074 a 56.785713,56.785713 0 1 1 -113.57143,0 56.785713,56.785713 0 1 1 113.57143,0 z" + transform="matrix(1.0849057,0,0,1.0849057,-34.016173,-41.558379)" /> + <text + xml:space="preserve" + style="font-size:40px;font-style:normal;font-weight:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#ffffff;fill-opacity:1;stroke:none;font-family:Sans" + x="307.78568" + y="397.64792" + id="text3117" + sodipodi:linespacing="125%"><tspan + sodipodi:role="line" + id="tspan3119" + x="307.78568" + y="397.64792" + style="font-size:90px;font-weight:bold;fill:#ffffff;-inkscape-font-specification:Sans Bold">F</tspan></text> + </g> +</svg> diff --git a/experimental/compensator/org.eclipse.fx.code.compensator.nashorn.qx/css/icons/field-public.png b/experimental/compensator/org.eclipse.fx.code.compensator.nashorn.qx/css/icons/field-public.png Binary files differnew file mode 100644 index 000000000..cc55460f6 --- /dev/null +++ b/experimental/compensator/org.eclipse.fx.code.compensator.nashorn.qx/css/icons/field-public.png diff --git a/experimental/compensator/org.eclipse.fx.code.compensator.nashorn.qx/css/icons/field-public.svg b/experimental/compensator/org.eclipse.fx.code.compensator.nashorn.qx/css/icons/field-public.svg new file mode 100644 index 000000000..4956aa56b --- /dev/null +++ b/experimental/compensator/org.eclipse.fx.code.compensator.nashorn.qx/css/icons/field-public.svg @@ -0,0 +1,80 @@ +<?xml version="1.0" encoding="UTF-8" standalone="no"?> +<!-- Created with Inkscape (http://www.inkscape.org/) --> + +<svg + xmlns:dc="http://purl.org/dc/elements/1.1/" + xmlns:cc="http://creativecommons.org/ns#" + xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" + xmlns:svg="http://www.w3.org/2000/svg" + xmlns="http://www.w3.org/2000/svg" + xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" + xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" + width="210mm" + height="297mm" + id="svg3072" + version="1.1" + inkscape:version="0.48.5 r10040" + sodipodi:docname="field-public.svg" + inkscape:export-filename="/Users/tomschindl/Documents/e-workspaces/efxclipse-ide/org.eclipse.fx.code.compensator.nashorn.qx/css/icons/field-public.png" + inkscape:export-xdpi="8.7700005" + inkscape:export-ydpi="8.7700005"> + <defs + id="defs3074" /> + <sodipodi:namedview + id="base" + pagecolor="#ffffff" + bordercolor="#666666" + borderopacity="1.0" + inkscape:pageopacity="0.0" + inkscape:pageshadow="2" + inkscape:zoom="2.8" + inkscape:cx="350" + inkscape:cy="682.16883" + inkscape:document-units="px" + inkscape:current-layer="layer1" + showgrid="false" + inkscape:window-width="854" + inkscape:window-height="733" + inkscape:window-x="679" + inkscape:window-y="247" + inkscape:window-maximized="0" /> + <metadata + id="metadata3077"> + <rdf:RDF> + <cc:Work + rdf:about=""> + <dc:format>image/svg+xml</dc:format> + <dc:type + rdf:resource="http://purl.org/dc/dcmitype/StillImage" /> + <dc:title></dc:title> + </cc:Work> + </rdf:RDF> + </metadata> + <g + inkscape:label="Ebene 1" + inkscape:groupmode="layer" + id="layer1"> + <path + sodipodi:type="arc" + style="fill:#5aa02c" + id="path3091" + sodipodi:cx="339.64285" + sodipodi:cy="373.79074" + sodipodi:rx="56.785713" + sodipodi:ry="56.785713" + d="m 396.42857,373.79074 a 56.785713,56.785713 0 1 1 -113.57143,0 56.785713,56.785713 0 1 1 113.57143,0 z" + transform="matrix(1.0849057,0,0,1.0849057,-34.016173,-41.558379)" /> + <text + xml:space="preserve" + style="font-size:40px;font-style:normal;font-weight:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#ffffff;fill-opacity:1;stroke:none;font-family:Sans" + x="305.78568" + y="397.64792" + id="text3117" + sodipodi:linespacing="125%"><tspan + sodipodi:role="line" + id="tspan3119" + x="305.78568" + y="397.64792" + style="font-size:90px;font-weight:bold;fill:#ffffff;-inkscape-font-specification:Sans Bold">F</tspan></text> + </g> +</svg> diff --git a/experimental/compensator/org.eclipse.fx.code.compensator.nashorn.qx/css/icons/method-private.png b/experimental/compensator/org.eclipse.fx.code.compensator.nashorn.qx/css/icons/method-private.png Binary files differnew file mode 100644 index 000000000..0f4f14b2b --- /dev/null +++ b/experimental/compensator/org.eclipse.fx.code.compensator.nashorn.qx/css/icons/method-private.png diff --git a/experimental/compensator/org.eclipse.fx.code.compensator.nashorn.qx/css/icons/method-private.svg b/experimental/compensator/org.eclipse.fx.code.compensator.nashorn.qx/css/icons/method-private.svg new file mode 100644 index 000000000..1bb8b1869 --- /dev/null +++ b/experimental/compensator/org.eclipse.fx.code.compensator.nashorn.qx/css/icons/method-private.svg @@ -0,0 +1,80 @@ +<?xml version="1.0" encoding="UTF-8" standalone="no"?> +<!-- Created with Inkscape (http://www.inkscape.org/) --> + +<svg + xmlns:dc="http://purl.org/dc/elements/1.1/" + xmlns:cc="http://creativecommons.org/ns#" + xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" + xmlns:svg="http://www.w3.org/2000/svg" + xmlns="http://www.w3.org/2000/svg" + xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" + xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" + width="210mm" + height="297mm" + id="svg3072" + version="1.1" + inkscape:version="0.48.5 r10040" + sodipodi:docname="method-private.svg" + inkscape:export-filename="/Users/tomschindl/Documents/e-workspaces/efxclipse-ide/org.eclipse.fx.code.compensator.nashorn.qx/css/icons/method-private.png" + inkscape:export-xdpi="8.7700005" + inkscape:export-ydpi="8.7700005"> + <defs + id="defs3074" /> + <sodipodi:namedview + id="base" + pagecolor="#ffffff" + bordercolor="#666666" + borderopacity="1.0" + inkscape:pageopacity="0.0" + inkscape:pageshadow="2" + inkscape:zoom="2.8" + inkscape:cx="350" + inkscape:cy="682.16883" + inkscape:document-units="px" + inkscape:current-layer="layer1" + showgrid="false" + inkscape:window-width="854" + inkscape:window-height="733" + inkscape:window-x="891" + inkscape:window-y="272" + inkscape:window-maximized="0" /> + <metadata + id="metadata3077"> + <rdf:RDF> + <cc:Work + rdf:about=""> + <dc:format>image/svg+xml</dc:format> + <dc:type + rdf:resource="http://purl.org/dc/dcmitype/StillImage" /> + <dc:title></dc:title> + </cc:Work> + </rdf:RDF> + </metadata> + <g + inkscape:label="Ebene 1" + inkscape:groupmode="layer" + id="layer1"> + <path + sodipodi:type="arc" + style="fill:#c83737" + id="path3091" + sodipodi:cx="339.64285" + sodipodi:cy="373.79074" + sodipodi:rx="56.785713" + sodipodi:ry="56.785713" + d="m 396.42857,373.79074 a 56.785713,56.785713 0 1 1 -113.57143,0 56.785713,56.785713 0 1 1 113.57143,0 z" + transform="matrix(1.0849057,0,0,1.0849057,-34.016173,-41.558379)" /> + <text + xml:space="preserve" + style="font-size:40px;font-style:normal;font-weight:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#ffffff;fill-opacity:1;stroke:none;font-family:Sans" + x="290.78568" + y="395.71936" + id="text3117" + sodipodi:linespacing="125%"><tspan + sodipodi:role="line" + id="tspan3119" + x="290.78568" + y="395.71936" + style="font-size:90px;font-weight:bold;fill:#ffffff;-inkscape-font-specification:Sans Bold">M</tspan></text> + </g> +</svg> diff --git a/experimental/compensator/org.eclipse.fx.code.compensator.nashorn.qx/css/icons/method-protected.png b/experimental/compensator/org.eclipse.fx.code.compensator.nashorn.qx/css/icons/method-protected.png Binary files differnew file mode 100644 index 000000000..8d3157ed1 --- /dev/null +++ b/experimental/compensator/org.eclipse.fx.code.compensator.nashorn.qx/css/icons/method-protected.png diff --git a/experimental/compensator/org.eclipse.fx.code.compensator.nashorn.qx/css/icons/method-protected.svg b/experimental/compensator/org.eclipse.fx.code.compensator.nashorn.qx/css/icons/method-protected.svg new file mode 100644 index 000000000..cd8deb0e6 --- /dev/null +++ b/experimental/compensator/org.eclipse.fx.code.compensator.nashorn.qx/css/icons/method-protected.svg @@ -0,0 +1,80 @@ +<?xml version="1.0" encoding="UTF-8" standalone="no"?> +<!-- Created with Inkscape (http://www.inkscape.org/) --> + +<svg + xmlns:dc="http://purl.org/dc/elements/1.1/" + xmlns:cc="http://creativecommons.org/ns#" + xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" + xmlns:svg="http://www.w3.org/2000/svg" + xmlns="http://www.w3.org/2000/svg" + xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" + xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" + width="210mm" + height="297mm" + id="svg3072" + version="1.1" + inkscape:version="0.48.5 r10040" + sodipodi:docname="method-protected.svg" + inkscape:export-filename="/Users/tomschindl/Documents/e-workspaces/efxclipse-ide/org.eclipse.fx.code.compensator.nashorn.qx/css/icons/method-protected.png" + inkscape:export-xdpi="8.7700005" + inkscape:export-ydpi="8.7700005"> + <defs + id="defs3074" /> + <sodipodi:namedview + id="base" + pagecolor="#ffffff" + bordercolor="#666666" + borderopacity="1.0" + inkscape:pageopacity="0.0" + inkscape:pageshadow="2" + inkscape:zoom="2.8" + inkscape:cx="350" + inkscape:cy="682.16883" + inkscape:document-units="px" + inkscape:current-layer="layer1" + showgrid="false" + inkscape:window-width="854" + inkscape:window-height="733" + inkscape:window-x="393" + inkscape:window-y="0" + inkscape:window-maximized="0" /> + <metadata + id="metadata3077"> + <rdf:RDF> + <cc:Work + rdf:about=""> + <dc:format>image/svg+xml</dc:format> + <dc:type + rdf:resource="http://purl.org/dc/dcmitype/StillImage" /> + <dc:title></dc:title> + </cc:Work> + </rdf:RDF> + </metadata> + <g + inkscape:label="Ebene 1" + inkscape:groupmode="layer" + id="layer1"> + <path + sodipodi:type="arc" + style="fill:#ff7f2a" + id="path3091" + sodipodi:cx="339.64285" + sodipodi:cy="373.79074" + sodipodi:rx="56.785713" + sodipodi:ry="56.785713" + d="m 396.42857,373.79074 a 56.785713,56.785713 0 1 1 -113.57143,0 56.785713,56.785713 0 1 1 113.57143,0 z" + transform="matrix(1.0849057,0,0,1.0849057,-34.016173,-41.558379)" /> + <text + xml:space="preserve" + style="font-size:40px;font-style:normal;font-weight:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#ffffff;fill-opacity:1;stroke:none;font-family:Sans" + x="290.78568" + y="397.71936" + id="text3117" + sodipodi:linespacing="125%"><tspan + sodipodi:role="line" + id="tspan3119" + x="290.78568" + y="397.71936" + style="font-size:90px;font-weight:bold;fill:#ffffff;-inkscape-font-specification:Sans Bold">M</tspan></text> + </g> +</svg> diff --git a/experimental/compensator/org.eclipse.fx.code.compensator.nashorn.qx/css/icons/method-public.png b/experimental/compensator/org.eclipse.fx.code.compensator.nashorn.qx/css/icons/method-public.png Binary files differnew file mode 100644 index 000000000..d98b8ce30 --- /dev/null +++ b/experimental/compensator/org.eclipse.fx.code.compensator.nashorn.qx/css/icons/method-public.png diff --git a/experimental/compensator/org.eclipse.fx.code.compensator.nashorn.qx/css/icons/method-public.svg b/experimental/compensator/org.eclipse.fx.code.compensator.nashorn.qx/css/icons/method-public.svg new file mode 100644 index 000000000..1025f6979 --- /dev/null +++ b/experimental/compensator/org.eclipse.fx.code.compensator.nashorn.qx/css/icons/method-public.svg @@ -0,0 +1,80 @@ +<?xml version="1.0" encoding="UTF-8" standalone="no"?> +<!-- Created with Inkscape (http://www.inkscape.org/) --> + +<svg + xmlns:dc="http://purl.org/dc/elements/1.1/" + xmlns:cc="http://creativecommons.org/ns#" + xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" + xmlns:svg="http://www.w3.org/2000/svg" + xmlns="http://www.w3.org/2000/svg" + xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" + xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" + width="210mm" + height="297mm" + id="svg3072" + version="1.1" + inkscape:version="0.48.5 r10040" + sodipodi:docname="method-public.svg" + inkscape:export-filename="/Users/tomschindl/Documents/e-workspaces/efxclipse-ide/org.eclipse.fx.code.compensator.nashorn.qx/css/icons/method-public.png" + inkscape:export-xdpi="8.7700005" + inkscape:export-ydpi="8.7700005"> + <defs + id="defs3074" /> + <sodipodi:namedview + id="base" + pagecolor="#ffffff" + bordercolor="#666666" + borderopacity="1.0" + inkscape:pageopacity="0.0" + inkscape:pageshadow="2" + inkscape:zoom="2.8" + inkscape:cx="350" + inkscape:cy="682.16883" + inkscape:document-units="px" + inkscape:current-layer="layer1" + showgrid="false" + inkscape:window-width="854" + inkscape:window-height="733" + inkscape:window-x="891" + inkscape:window-y="272" + inkscape:window-maximized="0" /> + <metadata + id="metadata3077"> + <rdf:RDF> + <cc:Work + rdf:about=""> + <dc:format>image/svg+xml</dc:format> + <dc:type + rdf:resource="http://purl.org/dc/dcmitype/StillImage" /> + <dc:title></dc:title> + </cc:Work> + </rdf:RDF> + </metadata> + <g + inkscape:label="Ebene 1" + inkscape:groupmode="layer" + id="layer1"> + <path + sodipodi:type="arc" + style="fill:#5aa02c" + id="path3091" + sodipodi:cx="339.64285" + sodipodi:cy="373.79074" + sodipodi:rx="56.785713" + sodipodi:ry="56.785713" + d="m 396.42857,373.79074 a 56.785713,56.785713 0 1 1 -113.57143,0 56.785713,56.785713 0 1 1 113.57143,0 z" + transform="matrix(1.0849057,0,0,1.0849057,-34.016173,-41.558379)" /> + <text + xml:space="preserve" + style="font-size:40px;font-style:normal;font-weight:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#ffffff;fill-opacity:1;stroke:none;font-family:Sans" + x="290.78568" + y="395.71936" + id="text3117" + sodipodi:linespacing="125%"><tspan + sodipodi:role="line" + id="tspan3119" + x="290.78568" + y="395.71936" + style="font-size:90px;font-weight:bold;fill:#ffffff;-inkscape-font-specification:Sans Bold">M</tspan></text> + </g> +</svg> diff --git a/experimental/compensator/org.eclipse.fx.code.compensator.nashorn.qx/css/icons/property-public.png b/experimental/compensator/org.eclipse.fx.code.compensator.nashorn.qx/css/icons/property-public.png Binary files differnew file mode 100644 index 000000000..5a277db2a --- /dev/null +++ b/experimental/compensator/org.eclipse.fx.code.compensator.nashorn.qx/css/icons/property-public.png diff --git a/experimental/compensator/org.eclipse.fx.code.compensator.nashorn.qx/css/icons/property-public.svg b/experimental/compensator/org.eclipse.fx.code.compensator.nashorn.qx/css/icons/property-public.svg new file mode 100644 index 000000000..89a232f9a --- /dev/null +++ b/experimental/compensator/org.eclipse.fx.code.compensator.nashorn.qx/css/icons/property-public.svg @@ -0,0 +1,80 @@ +<?xml version="1.0" encoding="UTF-8" standalone="no"?> +<!-- Created with Inkscape (http://www.inkscape.org/) --> + +<svg + xmlns:dc="http://purl.org/dc/elements/1.1/" + xmlns:cc="http://creativecommons.org/ns#" + xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" + xmlns:svg="http://www.w3.org/2000/svg" + xmlns="http://www.w3.org/2000/svg" + xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" + xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" + width="210mm" + height="297mm" + id="svg3072" + version="1.1" + inkscape:version="0.48.5 r10040" + sodipodi:docname="property-public.svg" + inkscape:export-filename="/Users/tomschindl/Documents/e-workspaces/efxclipse-ide/org.eclipse.fx.code.compensator.nashorn.qx/css/icons/property-public.png" + inkscape:export-xdpi="8.7700005" + inkscape:export-ydpi="8.7700005"> + <defs + id="defs3074" /> + <sodipodi:namedview + id="base" + pagecolor="#ffffff" + bordercolor="#666666" + borderopacity="1.0" + inkscape:pageopacity="0.0" + inkscape:pageshadow="2" + inkscape:zoom="2.8" + inkscape:cx="350" + inkscape:cy="682.16883" + inkscape:document-units="px" + inkscape:current-layer="layer1" + showgrid="false" + inkscape:window-width="854" + inkscape:window-height="733" + inkscape:window-x="679" + inkscape:window-y="247" + inkscape:window-maximized="0" /> + <metadata + id="metadata3077"> + <rdf:RDF> + <cc:Work + rdf:about=""> + <dc:format>image/svg+xml</dc:format> + <dc:type + rdf:resource="http://purl.org/dc/dcmitype/StillImage" /> + <dc:title></dc:title> + </cc:Work> + </rdf:RDF> + </metadata> + <g + inkscape:label="Ebene 1" + inkscape:groupmode="layer" + id="layer1"> + <path + sodipodi:type="arc" + style="fill:#5aa02c" + id="path3091" + sodipodi:cx="339.64285" + sodipodi:cy="373.79074" + sodipodi:rx="56.785713" + sodipodi:ry="56.785713" + d="m 396.42857,373.79074 a 56.785713,56.785713 0 1 1 -113.57143,0 56.785713,56.785713 0 1 1 113.57143,0 z" + transform="matrix(1.0849057,0,0,1.0849057,-34.016173,-41.558379)" /> + <text + xml:space="preserve" + style="font-size:40px;font-style:normal;font-weight:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#ffffff;fill-opacity:1;stroke:none;font-family:Sans" + x="303.78568" + y="395.64792" + id="text3117" + sodipodi:linespacing="125%"><tspan + sodipodi:role="line" + id="tspan3119" + x="303.78568" + y="395.64792" + style="font-size:90px;font-weight:bold;fill:#ffffff;-inkscape-font-specification:Sans Bold">P</tspan></text> + </g> +</svg> diff --git a/experimental/compensator/org.eclipse.fx.code.compensator.nashorn.qx/plugin.xml b/experimental/compensator/org.eclipse.fx.code.compensator.nashorn.qx/plugin.xml new file mode 100644 index 000000000..ddf6a8e97 --- /dev/null +++ b/experimental/compensator/org.eclipse.fx.code.compensator.nashorn.qx/plugin.xml @@ -0,0 +1,11 @@ +<?xml version="1.0" encoding="UTF-8"?> +<?eclipse version="3.4"?> +<plugin> + <extension + point="org.eclipse.fx.ui.theme"> + <stylesheet + resource="css/default.css"> + </stylesheet> + </extension> + +</plugin> diff --git a/experimental/compensator/org.eclipse.fx.code.compensator.nashorn.qx/src/org/eclipse/fx/code/compensator/nashorn/qx/QxOutlineExtension.java b/experimental/compensator/org.eclipse.fx.code.compensator.nashorn.qx/src/org/eclipse/fx/code/compensator/nashorn/qx/QxOutlineExtension.java new file mode 100644 index 000000000..868a56e7e --- /dev/null +++ b/experimental/compensator/org.eclipse.fx.code.compensator.nashorn.qx/src/org/eclipse/fx/code/compensator/nashorn/qx/QxOutlineExtension.java @@ -0,0 +1,150 @@ +package org.eclipse.fx.code.compensator.nashorn.qx; + +import java.util.ArrayList; +import java.util.List; + +import jdk.nashorn.internal.ir.AccessNode; +import jdk.nashorn.internal.ir.BinaryNode; +import jdk.nashorn.internal.ir.Block; +import jdk.nashorn.internal.ir.BlockStatement; +import jdk.nashorn.internal.ir.BreakNode; +import jdk.nashorn.internal.ir.CallNode; +import jdk.nashorn.internal.ir.CaseNode; +import jdk.nashorn.internal.ir.CatchNode; +import jdk.nashorn.internal.ir.ContinueNode; +import jdk.nashorn.internal.ir.EmptyNode; +import jdk.nashorn.internal.ir.ExpressionStatement; +import jdk.nashorn.internal.ir.ForNode; +import jdk.nashorn.internal.ir.FunctionNode; +import jdk.nashorn.internal.ir.GetSplitState; +import jdk.nashorn.internal.ir.IdentNode; +import jdk.nashorn.internal.ir.IfNode; +import jdk.nashorn.internal.ir.IndexNode; +import jdk.nashorn.internal.ir.JoinPredecessorExpression; +import jdk.nashorn.internal.ir.LabelNode; +import jdk.nashorn.internal.ir.LexicalContext; +import jdk.nashorn.internal.ir.LiteralNode; +import jdk.nashorn.internal.ir.Node; +import jdk.nashorn.internal.ir.ObjectNode; +import jdk.nashorn.internal.ir.PropertyNode; +import jdk.nashorn.internal.ir.ReturnNode; +import jdk.nashorn.internal.ir.RuntimeNode; +import jdk.nashorn.internal.ir.SetSplitState; +import jdk.nashorn.internal.ir.SplitNode; +import jdk.nashorn.internal.ir.SplitReturn; +import jdk.nashorn.internal.ir.SwitchNode; +import jdk.nashorn.internal.ir.TernaryNode; +import jdk.nashorn.internal.ir.ThrowNode; +import jdk.nashorn.internal.ir.TryNode; +import jdk.nashorn.internal.ir.UnaryNode; +import jdk.nashorn.internal.ir.VarNode; +import jdk.nashorn.internal.ir.WhileNode; +import jdk.nashorn.internal.ir.WithNode; +import jdk.nashorn.internal.ir.visitor.NodeVisitor; + +import org.eclipse.fx.code.compensator.editor.Input; +import org.eclipse.fx.code.compensator.nashorn.JSOutline; +import org.eclipse.fx.code.compensator.nashorn.JSOutlineExtension; +import org.eclipse.fx.code.compensator.nashorn.JSOutlineItem; + +public class QxOutlineExtension implements JSOutlineExtension { + + @Override + public boolean applies(Input<?> input) { + return input.getData().toString().contains("qx.Class.define"); + } + + @Override + public JSOutline createOutline(FunctionNode node) { + JSOutlineItem root = new JSOutlineItem("<root>",null); + + node.accept(new NodeVisitor<LexicalContext>(new LexicalContext()) { + private JSOutlineItem classDef; + + @Override + public boolean enterCallNode(CallNode callNode) { + if( callNode.getFunction().toString().endsWith("qx.Class.define") ) { + classDef = new JSOutlineItem(((LiteralNode<?>)callNode.getArgs().get(0)).getString(), "qx-class-def"); + root.getChildren().add(classDef); + } + return super.enterCallNode(callNode); + } + + @Override + public boolean enterPropertyNode(PropertyNode propertyNode) { + if( classDef != null ) { + switch (propertyNode.getKeyName()) { + case "include": + break; + case "extend": + break; + case "construct": + break; + case "statics": + break; + case "events": + break; + case "properties": + classDef.getChildren().add(handleProperties(propertyNode)); + break; + case "members": + classDef.getChildren().add(handleMembers(propertyNode)); + break; + default: + break; + } + } + return super.enterPropertyNode(propertyNode); + } + }); + return new JSOutline(root); + } + + private JSOutlineItem handleProperties(PropertyNode p) { + JSOutlineItem outline = new JSOutlineItem("Properties", "qx-properties"); + p.accept(new NodeVisitor<LexicalContext>(new LexicalContext()) { + @Override + public boolean enterPropertyNode(PropertyNode propertyNode) { + if( p != propertyNode ) { + outline.getChildren().add(new JSOutlineItem(propertyNode.getKeyName(), "qx-property-"+visibility(propertyNode.getKeyName()))); + return false; + } + + return true; + } + }); + return outline; + } + + private JSOutlineItem handleMembers(PropertyNode p) { + JSOutlineItem outline = new JSOutlineItem("Members", "qx-members"); + p.accept(new NodeVisitor<LexicalContext>(new LexicalContext()) { + @Override + public boolean enterPropertyNode(PropertyNode propertyNode) { + if( p != propertyNode ) { + if( propertyNode.getValue() instanceof FunctionNode ) { + outline.getChildren().add(new JSOutlineItem(propertyNode.getKeyName()+"()","qx-method-"+visibility(propertyNode.getKeyName()))); + } else if( propertyNode.getValue() instanceof ObjectNode ) { + outline.getChildren().add(new JSOutlineItem(propertyNode.getKeyName(),"qx-field-"+visibility(propertyNode.getKeyName()))); + } else if( propertyNode.getValue() instanceof LiteralNode<?> ) { + outline.getChildren().add(new JSOutlineItem(propertyNode.getKeyName(),"qx-field-"+visibility(propertyNode.getKeyName()))); + } else { + System.err.println("Unknown value type: " + propertyNode.getValue().getClass()); + } + return false; + } + return true; + } + }); + return outline; + } + + private static String visibility(String name) { + if( name.startsWith("__") ) { + return "private"; + } else if( name.startsWith("_") ) { + return "protected"; + } + return "public"; + } +} |