You can subscribe to this list here.
| 2005 |
Jan
|
Feb
|
Mar
(41) |
Apr
(9) |
May
|
Jun
|
Jul
(39) |
Aug
(38) |
Sep
(135) |
Oct
(220) |
Nov
(75) |
Dec
(74) |
|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 2006 |
Jan
(44) |
Feb
(160) |
Mar
(49) |
Apr
(69) |
May
(40) |
Jun
(52) |
Jul
(47) |
Aug
(51) |
Sep
(19) |
Oct
(22) |
Nov
(36) |
Dec
(76) |
| 2007 |
Jan
(154) |
Feb
(165) |
Mar
(186) |
Apr
(143) |
May
(175) |
Jun
(133) |
Jul
(203) |
Aug
(177) |
Sep
(136) |
Oct
|
Nov
|
Dec
|
|
From: <caw...@us...> - 2007-05-14 13:32:31
|
Revision: 2472
http://svn.sourceforge.net/rubyeclipse/?rev=2472&view=rev
Author: cawilliams
Date: 2007-05-14 06:32:09 -0700 (Mon, 14 May 2007)
Log Message:
-----------
if it's a constant, don't add element from ruby script, just add class names and constants
Modified Paths:
--------------
trunk/org.rubypeople.rdt.core/src/org/rubypeople/rdt/internal/codeassist/CompletionEngine.java
Modified: trunk/org.rubypeople.rdt.core/src/org/rubypeople/rdt/internal/codeassist/CompletionEngine.java
===================================================================
--- trunk/org.rubypeople.rdt.core/src/org/rubypeople/rdt/internal/codeassist/CompletionEngine.java 2007-05-14 13:26:38 UTC (rev 2471)
+++ trunk/org.rubypeople.rdt.core/src/org/rubypeople/rdt/internal/codeassist/CompletionEngine.java 2007-05-14 13:32:09 UTC (rev 2472)
@@ -88,6 +88,7 @@
if (fContext.isConstant()) { // type or constant
suggestTypeNames();
suggestConstantNames();
+ return;
}
if (fContext.isExplicitMethodInvokation()) {
ITypeInferrer inferrer = new DefaultTypeInferrer();
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|
|
From: <caw...@us...> - 2007-05-14 13:26:42
|
Revision: 2471
http://svn.sourceforge.net/rubyeclipse/?rev=2471&view=rev
Author: cawilliams
Date: 2007-05-14 06:26:38 -0700 (Mon, 14 May 2007)
Log Message:
-----------
fix grabbing local variables and arguments. Just grab the ecnlsoing scope for our offset (method, class, module, or root of script) and then add variables in the static scope, and all enclosing static scopes. This gets us locals in the top-level and locals inside a method (including method arguments) whereas before we only handled locals in scope of method.
Modified Paths:
--------------
trunk/org.rubypeople.rdt.core/src/org/rubypeople/rdt/internal/codeassist/CompletionEngine.java
Modified: trunk/org.rubypeople.rdt.core/src/org/rubypeople/rdt/internal/codeassist/CompletionEngine.java
===================================================================
--- trunk/org.rubypeople.rdt.core/src/org/rubypeople/rdt/internal/codeassist/CompletionEngine.java 2007-05-14 06:44:25 UTC (rev 2470)
+++ trunk/org.rubypeople.rdt.core/src/org/rubypeople/rdt/internal/codeassist/CompletionEngine.java 2007-05-14 13:26:38 UTC (rev 2471)
@@ -1,7 +1,9 @@
package org.rubypeople.rdt.internal.codeassist;
+import java.lang.reflect.Method;
import java.util.ArrayList;
import java.util.Arrays;
+import java.util.Collection;
import java.util.Collections;
import java.util.HashMap;
import java.util.HashSet;
@@ -26,6 +28,7 @@
import org.jruby.ast.MethodDefNode;
import org.jruby.ast.ModuleNode;
import org.jruby.ast.Node;
+import org.jruby.ast.RootNode;
import org.jruby.lexer.yacc.SyntaxException;
import org.jruby.parser.StaticScope;
import org.rubypeople.rdt.core.CompletionProposal;
@@ -362,14 +365,20 @@
return;
}
- // Find the enclosing method to get locals and args
- Node enclosingMethodNode = ClosestSpanningNodeLocator.Instance().findClosestSpanner(rootNode, fContext.getOffset(), new INodeAcceptor() {
+ // XXX Just find enclosing scope and grab variables?
+ Node enclosingNode = ClosestSpanningNodeLocator.Instance().findClosestSpanner(rootNode, fContext.getOffset(), new INodeAcceptor() {
public boolean doesAccept(Node node) {
- return (node instanceof DefnNode || node instanceof DefsNode);
+ return (node instanceof DefnNode || node instanceof DefsNode || node instanceof ClassNode || node instanceof ModuleNode || node instanceof RootNode);
}
});
+
+ Collection<String> variables = addVariablesinScope(getScope(enclosingNode));
+ for (String variable : variables) {
+ CompletionProposal proposal = new CompletionProposal(CompletionProposal.LOCAL_VARIABLE_REF, variable, 100);
+ proposal.setReplaceRange(fContext.getReplaceStart(), fContext.getReplaceStart() + variable.length());
+ fRequestor.accept(proposal);
+ }
- addLocalVariablesAndArguments(enclosingMethodNode);
// Find the enclosing type (class or module) to get instance and
// classvars from
@@ -392,6 +401,34 @@
}
}
+ private Set<String> addVariablesinScope(StaticScope scope) {
+ Set<String> matches = new HashSet<String>();
+ if (scope == null) return matches;
+ String[] variables = scope.getVariables();
+ for(int i = 0; i < variables.length; i++) {
+ String local = variables[i];
+ if (!fContext.prefixStartsWith(local))
+ continue;
+ matches.add(local);
+ }
+ matches.addAll(addVariablesinScope(scope.getEnclosingScope()));
+ return matches;
+ }
+
+ private StaticScope getScope(Node enclosingNode) {
+ if (enclosingNode instanceof RootNode) {
+ RootNode root = (RootNode) enclosingNode;
+ return root.getStaticScope();
+ }
+ try {
+ Method getScopeMethod = enclosingNode.getClass().getMethod("getScope", new Class[] {});
+ Object scope = getScopeMethod.invoke(enclosingNode, new Object[0]);
+ return (StaticScope) scope;
+ } catch (Exception e) {
+ return null;
+ }
+ }
+
private void addLocalVariablesAndArguments(Node enclosingMethodNode) {
// Add local vars and arguments
if (enclosingMethodNode != null && enclosingMethodNode instanceof MethodDefNode) {
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|
|
From: <mba...@us...> - 2007-05-14 06:44:29
|
Revision: 2470
http://svn.sourceforge.net/rubyeclipse/?rev=2470&view=rev
Author: mbarchfe
Date: 2007-05-13 23:44:25 -0700 (Sun, 13 May 2007)
Log Message:
-----------
files oboleted by org.rubypeople.pluginbuilder
Removed Paths:
-------------
trunk/org.rubypeople.rdt.build/cruiseControl/build-RDT.properties
trunk/org.rubypeople.rdt.build/cruiseControl/build-RDT.xml
trunk/org.rubypeople.rdt.build/cruiseControl/build.properties
Deleted: trunk/org.rubypeople.rdt.build/cruiseControl/build-RDT.properties
===================================================================
--- trunk/org.rubypeople.rdt.build/cruiseControl/build-RDT.properties 2007-05-11 18:56:59 UTC (rev 2469)
+++ trunk/org.rubypeople.rdt.build/cruiseControl/build-RDT.properties 2007-05-14 06:44:25 UTC (rev 2470)
@@ -1,43 +0,0 @@
-rdtBuildHome=/home/rdt
-# buildDirectory is the directory into which the source are checked out and
-# where the build takes place
-buildDirectory=${rdtBuildHome}/cruiseControlWorkspace/checkout/RDT
-
-# the eclipse instance used for building
-eclipseDir=${rdtBuildHome}/eclipse/eclipse-3.2RC7
-
-# the pdeBuildPluginVersion is needed in order to construct the directory
-# where the pde build scripts are located
-pdeBuildPluginVersion=3.2.0.v20060601
-buildfile=${eclipseDir}/plugins/org.eclipse.pde.build_${pdeBuildPluginVersion}/scripts/build.xml
-
-# customTargets.xml and a corresponding build.properties are found in the the builderDirectory
-builderDirectory=${rdtBuildHome}/cruiseControlWorkspace
-
-# Make Ant verbose
-#verboseAnt=-verbose
-verboseAnt=
-
-eclipseAutomatedTestHome=${rdtBuildHome}/rdt/eclipse-testing
-rubyInterpreter=/usr/bin/ruby1.6
-docbookRoot=${rdtBuildHome}/rdt/docbook
-
-
-os=linux
-ws=gtk
-arch=x86
-usePserver=-DDontusePserver=true
-# the default is to clean up before testing, it can be avoided by defining noclean
-#testNoclean=-Dnoclean=true
-testNoclean=-Dxx=true
-#dontRunTests=-DdontRunTests=true
-dontRunTests=-Dxxx=true
-
-
-
-# buildTarget can be one of the build targets defined in $buildfile:
-# main, preBuild, fetch, generate, process, assemble, package, postBuild, clean
-buildTarget=main
-#buildTarget=postBuild
-
-extraArgs=-DnoExtraArgs
Deleted: trunk/org.rubypeople.rdt.build/cruiseControl/build-RDT.xml
===================================================================
--- trunk/org.rubypeople.rdt.build/cruiseControl/build-RDT.xml 2007-05-11 18:56:59 UTC (rev 2469)
+++ trunk/org.rubypeople.rdt.build/cruiseControl/build-RDT.xml 2007-05-14 06:44:25 UTC (rev 2470)
@@ -1,172 +0,0 @@
-<!-- Delegating build script, used by cruisecontrol to build MY_PROJECT_1.
- Note that the basedir is set to the checked out project -->
-<project name="build-RDT" default="build">
- <!--
- basedir="/home/markus/java/cruiseControlWorkingArea/checkout/RDT"> -->
- <target name="propertiesCCBuild">
- <property file="build-RDT.properties" />
- </target>
-
- <target name="clean">
- <echo message="Cleaning directory ${buildDirectory}"/>
- <delete dir="${buildDirectory}" verbose="false"/>
- <mkdir dir="${buildDirectory}"/>
- </target>
-
- <target name="featureVersion">
- <!-- use the label provided from the EclipseLableProvider -->
- <!-- <echo message="Using feature version ${label}"/> -->
- <echo file="${buildDirectory}/version.properties" message="featureVersion=${label}"/>
- </target>
-
- <target name="build">
-
- <java classname="org.eclipse.core.launcher.Main" fork="true" failonerror="true" jvmargs="${extraArgs}">
- <arg value="-ws" />
- <arg value="${ws}" />
- <arg value="-os" />
- <arg value="${os}" />
- <arg value="-application" />
- <arg value="org.eclipse.ant.core.antRunner" />
- <arg value="-buildfile" />
- <arg value="${buildfile}" />
- <arg value="${buildTarget}" />
- <arg value="-data" />
- <arg value="${buildDirectory}/workspace" />
- <arg value="${verboseAnt}" />
- <jvmarg value="${dontRunTests}" />
- <jvmarg value="-Dbasews=${ws}" />
- <jvmarg value="-Dbaseos=${os}" />
- <jvmarg value="-Dbasearch=${arch}" />
- <jvmarg value="-Dbuilder=${builderDirectory}" />
- <jvmarg value="${testNoclean}"/>
- <jvmarg value="-DjavacFailOnError=true"/>
- <jvmarg value="-DbuildDirectory=${buildDirectory}"/>
- <jvmarg value="-DbaseLocation=${eclipseDir}"/>
- <jvmarg value="-DeclipseAutomatedTestHome=${eclipseAutomatedTestHome}"/>
- <jvmarg value="-Drdt.rubyInterpreter=${rubyInterpreter}" />
- <jvmarg value="-Drdt-tests-workspace=${buildDirectory}/workspace-rdt-tests" />
- <jvmarg value="-Ddocbook.root=${docbookRoot}" />
- <!--<jvmarg value="${extraArgs}"/>-->
- <classpath>
- <pathelement location="${eclipseDir}/startup.jar" />
- </classpath>
- </java>
- </target>
-
-
- <target name="dist" depends="propertiesCCBuild,clean,featureVersion,build">
- </target>
-
- <target name="0.8.0">
- <property name="cvsLabel" value="R2006-04-27_0-8-0"/>
- <property name="label" value="0.8.0.604272100PRD"/>
- <antcall target="release"/>
- </target>
-
- <target name="0.8.0.RC1">
- <property name="cvsLabel" value="R2006-04-09_0-8-0_RC1"/>
- <property name="label" value="0.8.0.604092300RC1"/>
- <antcall target="integration"/>
- </target>
-
- <target name="0.7.0.RC1">
- <property name="cvsLabel" value="R2005-12-22_0-7-0_RC1"/>
- <property name="label" value="0.7.0.512282200RC1"/>
- <antcall target="integration"/>
- </target>
-
- <target name="0.7.0">
- <property name="cvsLabel" value="R2006-01-19_0-7-0"/>
- <property name="label" value="0.7.0.601192300PRD"/>
- <antcall target="release"/>
- </target>
-
- <target name="release">
- <property name="buildType" value="-DbuildType='S'"/>
- <antcall target="manual-build"/>
- </target>
-
- <target name="integration">
- <property name="buildType" value="-DbuildType='I'"/>
- <antcall target="manual-build"/>
- </target>
-
- <target name="manual-build">
- <!-- the only difference to a nightly build is the buildType which leads to setting a differnt
- updateSiteUrl in feature.xml -->
- <property name="buildDirectory" value="/tmp/rdt-${label}"/>
- <!-- properties which should override the values of org.rubypeople.rdt/bootstrap/build.properties must be
- specified via -D arguments for the call to eclipseRunner -->
- <property name="extraArgs" value="${buildType} -DfetchTag=${cvsLabel}"/>
- <property file="build-RDT.properties" />
- <antcall target="clean"/>
- <antcall target="featureVersion"/>
- <antcall target="build"/>
- </target>
-
- <target name="updateSiteXml" if="label">
- <property name="siteXmlFile" value="site.xml"/>
- <property name="placeHolder" value="<!--AddNewFeatureElementHere-->"/>
- <property name="featureUrl" value="features/org.rubypeople.rdt_${label}.jar"/>
- <!-- replacevalue nested element does not support variable replacement. Therefore a two step approach:
- 1. add a feature element
- 2. add newline -->
- <echo message="Adding feature version ${label} to ${siteXmlFile}"/>
- <replace file="${siteXmlFile}" token="${placeHolder}" value="<feature url="${featureUrl}" id="org.rubypeople.rdt" version="${label}"> <category name="RubyEclipseIntegrationBuilds"/> </feature> ${placeHolder}"/>
- <replace file="${siteXmlFile}" token="${placeHolder}">
- <replacevalue>
- <!--AddNewFeatureElementHere--></replacevalue>
- </replace>
- </target>
-
- <target name="deploy" if="label">
- <!-- This target is used for manually deploying integration and release builds
- Nightly builds are deployed using cruise controls config.xml file -->
- <property name="downloadUser" value="rubypeople"/>
- <property name="downloadHost" value="download.rubypeople.org"/>
- <property name="buildTypeDirectory" value="integration"/>
- <property name="downloadDirectory" value="~/subdomains/download/httpdocs/${buildTypeDirectory}/${label}"/>
- <property name="updateSiteDirectory" value="~/subdomains/updatesite/httpdocs/${buildTypeDirectory}"/>
- <property name="buildDirectory" value="/tmp/rdt-${label}/dist"/>
- <echo message="Copying ${buildDirectory} to ${downloadUser}@${downloadHost}:${downloadDirectory}"/>
- <sshexec host="${downloadHost}"
- username="${downloadUser}"
- keyfile="${user.home}/.ssh/id_download"
- command="mkdir --parents ${downloadDirectory}"/>
- <scp todir="${downloadUser}:usekeyinsteadofpw@${downloadHost}:${downloadDirectory}"
- keyfile="${user.home}/.ssh/id_download"
- passphrase="">
- <fileset dir="${buildDirectory}"/>
- </scp>
- <echo message="Copying files to updatesite: ${downloadUser}@${downloadHost}:${downloadDirectory}"/>
- <property name="updateSiteScpUrl" value="${downloadUser}@${downloadHost}:${updateSiteDirectory}"/>
- <scp todir="${updateSiteScpUrl}"
- keyfile="${user.home}/.ssh/id_download"
- passphrase="">
- <fileset dir="${buildDirectory}/updateSite">
- <exclude name="site.xml"/>
- </fileset>
- </scp>
- <echo message="Updating site.xml"/>
- <property name="siteXmlFile" value="/tmp/site.xml"/>
- <scp file="${updateSiteScpUrl}/site.xml"
- localTofile="${siteXmlFile}"
- keyfile="${user.home}/.ssh/id_download"
- passphrase=""/>
- <antcall target="updateSiteXml"/>
- <scp file="${siteXmlFile}"
- todir="${updateSiteScpUrl}"
- keyfile="${user.home}/.ssh/id_download"
- passphrase=""/>
- </target>
-
- <target name="deploy-sourceforge" if="label">
- <property name="buildDirectory" value="/tmp/rdt-${label}/dist"/>
- <ftp server="upload.sf.net" remotedir="incoming" userid="anonymous" password="mba...@us...">
- <fileset dir="${buildDirectory}">
- <include name="org.rubypeople.rdt-${label}.zip"/>
- </fileset>
- </ftp>
- </target>
-</project>
Deleted: trunk/org.rubypeople.rdt.build/cruiseControl/build.properties
===================================================================
--- trunk/org.rubypeople.rdt.build/cruiseControl/build.properties 2007-05-11 18:56:59 UTC (rev 2469)
+++ trunk/org.rubypeople.rdt.build/cruiseControl/build.properties 2007-05-14 06:44:25 UTC (rev 2470)
@@ -1,146 +0,0 @@
-###############################################################################
-# Copyright (c) 2003, 2004 IBM Corporation and others.
-# All rights reserved. This program and the accompanying materials
-# are made available under the terms of the Common Public License v1.0
-# which accompanies this distribution, and is available at
-# http://www.eclipse.org/legal/cpl-v10.html
-#
-# Contributors:
-# IBM Corporation - initial API and implementation
-###############################################################################
-#####################
-# Parameters describing how and where to execute the build.
-# Typical users need only update the following properties:
-# baseLocation - where things you are building against are installed
-# bootclasspath - The base jars to compile against (typicaly rt.jar)
-# configs - the list of {os, ws, arch} configurations to build.
-#
-# Of course any of the settings here can be overridden by spec'ing
-# them on the command line (e.g., -DbaseLocation=d:/eclipse
-
-############# CVS CONTROL ################
-# The CVS tag to use when fetching the map files from the repository
-
-mapVersionTag=HEAD
-
-# The CVS tag to use when fetching elements to build. By default the
-# builder will use whatever is in the maps. Use this value to override
-# for example, when doing a nightly build out of HEAD
-
-fetchTag=HEAD
-############## BUILD / GENERATION CONTROL ################
-# The directory into which the build elements will be fetched and where
-# the build will take place.
-# Do not enter relative paths, because otherwise the directory.txt file
-# won't be found
-# If relative , the directory would be relative to the $builder directory
-#buildDirectory=D:\\Temp\\buildresult3
-
-# Type of build. Used in naming the build output. Typically this value is
-# one of I, N, M, S, ...
-# If you change this, please also see the featureVersion and baseFeatureVersion properties below
-buildType=N
-
-# ID of the build. Used in naming the build output. (the zip file)
-# buildId is set in customTargets.xml in order to consider a dynamic featureVersion for nightlyBuild
-#buildId=${featureVersion}
-
-# Label for the build. Used in naming the build output (the directory)
-# buildLabel is set in customTargets.xml in order to consider a dynamic featureVersion for nightlyBuild
-#buildLabel=${featureVersion}
-
-# Timestamp for the build. Used in naming the build output
-#timestamp=007
-
-# Base location for anything the build needs to compile against. For example,
-# when building GEF, the baseLocation should be the location of a previously
-# installed Eclipse against which the GEF code will be compiled.
-#baseLocation=D:\\eclipse-3.0
-
-#Os/Ws/Arch/nl of the eclipse specified by baseLocation
-#baseos
-#basews
-#basearch
-#basenl
-
-# The location underwhich all of the build output will be collected.
-# This is a subdirectory of $buildDirectory
-# Set collectingFolder and archivePrefix to . if you want to create archives without
-# trailing eclipse in the paths of the included files
-collectingFolder=.
-
-# The prefix that will be used in the generated archive.
-# Does not make sense to use a different archivePrefix than collectingFolder,
-# because zip wouldn't find any files to include into the target zip otherwise
-archivePrefix=.
-
-# The list of {os, ws, arch} configurations to build. This
-# value is a '&' separated list of ',' separate triples. For example,
-# configs=win32,win32,x86 & linux,motif,x86
-# By default the value is *,*,*
-#configs=*,*,*
-
-#Arguments to send to the zip executable
-# Doesn't work
-#zipArgs=-z "RDT: extract into eclipse-installation directory"
-
-############# JAVA COMPILER OPTIONS ##############
-# The location of the Java jars to compile against. Typically the rt.jar for your JDK/JRE
-#bootclasspath=d:/ibm1.3.1/jre/lib/rt.jar
-#bootclasspath=D:\\java\\j2sdk1.4.2_05\\jre\\lib\\rt.jar
-
-# Whether or not to include debug info in the output jars
-javacDebugInfo=true
-
-# Whether or not to fail the build if there are compiler errors
-javacFailOnError=true
-
-# The version of the source code
-javacSource=1.5
-
-# The version of the byte code targeted
-javacTarget=1.5
-
-#collPlace=eclipse
-#collBase=.
-#collectingFolder=eclipse
-#archivePrefix=eclipse
-
-# Depending on the build type, define either baseFeatureVersion or featureVersion
-# A) Nightly Build
-# In the case of a nightly build the property featureVersion will be created in
-# customTargets.xml. It will include a timestamp in the minor version number.
-# The baseFeatureVersion must be set, because it is used to replace the version in the
-# feature.xml files of the rdt feature.xml and the test feature.xml with the created featureVersion
-baseFeatureVersion=0.0.0
-
-# B) Every other Build type
-# featureVersion is used for setting the version of org.rubypeople.rdt.doc.user/plugin.xml
-# and for calling the appropriate test suite in customTargets.xml
-#
-#featureVersion=0.6.0
-
-# if the buildType is N a property featureVersion will be created in
-# customTargets.xml. The featureVersion consists of the nightlyBuildFeatureVersionPrefix
-# concatenated with a timestamp in the format yyyyMMddhhmm
-# Please mind that this property is not used from cruiseControl. CruiseControl needs to
-# calculate the build label by its own with a label incrementer. See config.xml for
-# how to change the prefix for the eclipse label incrementer
-nightlyBuildFeatureVersionPrefix=0.8.0.
-
-# the buildResultsDirectory specifies a directory into which the build results are copied
-# after a successful build
-buildResultsDirectory=${buildDirectory}/dist
-
-# There are three update site URLs for three streams of RDT builds: releases, integration
-# and nightly builds. For each build the appropriate URL must be placed into feature.xml
-# The feature.xml file contains the release update site by default
-
-releaseUpdateSiteURL=http://rubyeclipse.sourceforge.net/updatesite
-
-# in case of a nightly or integration build the releaseUpdateSiteURL in feature.xml is
-# replaced with one of the following entries
-nightlyBuildUpdateSiteURL=http://updatesite.rubypeople.org/nightly
-integrationBuildUpdateSiteURL=http://updatesite.rubypeople.org/integration
-
-svnScript=/home/rdt/cruiseControlWorkspace/svn_co_rdt
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|
|
From: <caw...@us...> - 2007-05-11 18:57:02
|
Revision: 2469
http://svn.sourceforge.net/rubyeclipse/?rev=2469&view=rev
Author: cawilliams
Date: 2007-05-11 11:56:59 -0700 (Fri, 11 May 2007)
Log Message:
-----------
ask user if they're sure when removing gems. Also move message out to translation properties file
Modified Paths:
--------------
trunk/com.aptana.rdt/src/com/aptana/rdt/internal/ui/actions/RemoveGemActionDelegate.java
trunk/com.aptana.rdt/src/com/aptana/rdt/ui/gems/GemsMessages.java
trunk/com.aptana.rdt/src/com/aptana/rdt/ui/gems/GemsMessages.properties
Modified: trunk/com.aptana.rdt/src/com/aptana/rdt/internal/ui/actions/RemoveGemActionDelegate.java
===================================================================
--- trunk/com.aptana.rdt/src/com/aptana/rdt/internal/ui/actions/RemoveGemActionDelegate.java 2007-05-11 18:26:48 UTC (rev 2468)
+++ trunk/com.aptana.rdt/src/com/aptana/rdt/internal/ui/actions/RemoveGemActionDelegate.java 2007-05-11 18:56:59 UTC (rev 2469)
@@ -9,6 +9,7 @@
package com.aptana.rdt.internal.ui.actions;
import org.eclipse.jface.action.IAction;
+import org.eclipse.jface.dialogs.MessageDialog;
import org.eclipse.jface.viewers.ISelection;
import org.eclipse.jface.viewers.IStructuredSelection;
import org.eclipse.swt.widgets.Display;
@@ -19,6 +20,7 @@
import com.aptana.rdt.internal.gems.Gem;
import com.aptana.rdt.internal.gems.GemManager;
+import com.aptana.rdt.ui.gems.GemsMessages;
import com.aptana.rdt.ui.gems.GemsView;
/**
@@ -43,6 +45,9 @@
* @see org.eclipse.ui.IActionDelegate#run(org.eclipse.jface.action.IAction)
*/
public void run(IAction action) {
+ boolean okay = MessageDialog.openConfirm(view.getViewSite()
+ .getShell(), null, GemsMessages.bind(GemsMessages.RemoveGemDialog_msg, selectedGem.getName()));
+ if (!okay) return;
Display.getDefault().asyncExec(new Runnable() {
public void run() {
Modified: trunk/com.aptana.rdt/src/com/aptana/rdt/ui/gems/GemsMessages.java
===================================================================
--- trunk/com.aptana.rdt/src/com/aptana/rdt/ui/gems/GemsMessages.java 2007-05-11 18:26:48 UTC (rev 2468)
+++ trunk/com.aptana.rdt/src/com/aptana/rdt/ui/gems/GemsMessages.java 2007-05-11 18:56:59 UTC (rev 2469)
@@ -14,6 +14,7 @@
public static String InstallGemDialog_name_label;
public static String GemManager_loading_local_gems;
public static String GemManager_loading_remote_gems;
+ public static String RemoveGemDialog_msg;
static {
NLS.initializeMessages(BUNDLE_NAME, GemsMessages.class);
Modified: trunk/com.aptana.rdt/src/com/aptana/rdt/ui/gems/GemsMessages.properties
===================================================================
--- trunk/com.aptana.rdt/src/com/aptana/rdt/ui/gems/GemsMessages.properties 2007-05-11 18:26:48 UTC (rev 2468)
+++ trunk/com.aptana.rdt/src/com/aptana/rdt/ui/gems/GemsMessages.properties 2007-05-11 18:56:59 UTC (rev 2469)
@@ -7,4 +7,6 @@
InstallGemDialog_name_label=Gem Name:
GemManager_loading_local_gems=Loading local gem information
-GemManager_loading_remote_gems=Loading remote gem information
\ No newline at end of file
+GemManager_loading_remote_gems=Loading remote gem information
+
+RemoveGemDialog_msg=Are you sure you want to remove the gem {0}?
\ No newline at end of file
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|
|
From: <caw...@us...> - 2007-05-11 18:26:50
|
Revision: 2468
http://svn.sourceforge.net/rubyeclipse/?rev=2468&view=rev
Author: cawilliams
Date: 2007-05-11 11:26:48 -0700 (Fri, 11 May 2007)
Log Message:
-----------
enforce non-null platform on a Gem. Also fix the way we write our gems in XML so we escape bad characters, by using XMLWriter (which makes prettier XML anyways). Save platform in the xml. Save local caches of both remote and local gems.
Modified Paths:
--------------
trunk/com.aptana.rdt/src/com/aptana/rdt/internal/gems/Gem.java
trunk/com.aptana.rdt/src/com/aptana/rdt/internal/gems/GemManager.java
Modified: trunk/com.aptana.rdt/src/com/aptana/rdt/internal/gems/Gem.java
===================================================================
--- trunk/com.aptana.rdt/src/com/aptana/rdt/internal/gems/Gem.java 2007-05-11 17:37:00 UTC (rev 2467)
+++ trunk/com.aptana.rdt/src/com/aptana/rdt/internal/gems/Gem.java 2007-05-11 18:26:48 UTC (rev 2468)
@@ -16,6 +16,7 @@
public Gem(String name, String version, String description, String platform) {
if (name == null) throw new IllegalArgumentException("A Gem's name must not be null");
if (version == null) throw new IllegalArgumentException("A Gem's version must not be null");
+ if (platform == null) throw new IllegalArgumentException("A Gem's platform must not be null");
this.name = name;
this.version = version;
this.description = description;
Modified: trunk/com.aptana.rdt/src/com/aptana/rdt/internal/gems/GemManager.java
===================================================================
--- trunk/com.aptana.rdt/src/com/aptana/rdt/internal/gems/GemManager.java 2007-05-11 17:37:00 UTC (rev 2467)
+++ trunk/com.aptana.rdt/src/com/aptana/rdt/internal/gems/GemManager.java 2007-05-11 18:26:48 UTC (rev 2468)
@@ -3,12 +3,11 @@
import java.io.BufferedReader;
import java.io.File;
import java.io.FileNotFoundException;
+import java.io.FileOutputStream;
import java.io.FileReader;
-import java.io.FileWriter;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
-import java.io.PrintWriter;
import java.io.StringReader;
import java.net.MalformedURLException;
import java.net.URL;
@@ -28,6 +27,7 @@
import javax.xml.parsers.ParserConfigurationException;
import javax.xml.parsers.SAXParserFactory;
+import org.eclipse.core.internal.resources.XMLWriter;
import org.eclipse.core.runtime.CoreException;
import org.eclipse.core.runtime.IProgressMonitor;
import org.eclipse.core.runtime.IStatus;
@@ -70,7 +70,8 @@
private static final int TIMEOUT = 30000;
private static final String TIMEOUT_MSG = "Installing gem took more than 30 seconds, intentionally broke out to avoid infinite loop";
- private static final String LOCAL_CACHE_FILE = "remote_gems.xml";
+ private static final String REMOTE_GEMS_CACHE_FILE = "remote_gems.xml";
+ private static final String LOCAL_GEMS_CACHE_FILE = "local_gems.xml";
private static final String GEM_INDEX_URL = "http://gems.rubyforge.org/yaml";
private static GemManager fgInstance;
@@ -89,10 +90,10 @@
@Override
protected IStatus run(IProgressMonitor monitor) {
- remoteGems = loadLocalCache();
+ remoteGems = loadLocalCache(getConfigFile(REMOTE_GEMS_CACHE_FILE));
if (remoteGems.isEmpty()) {
remoteGems = loadRemoteGems();
- storeGemCache();
+ storeGemCache(remoteGems, getConfigFile(REMOTE_GEMS_CACHE_FILE));
}
return Status.OK_STATUS;
}
@@ -103,7 +104,11 @@
@Override
protected IStatus run(IProgressMonitor monitor) {
- gems = loadLocalGems();
+ gems = loadLocalCache(getConfigFile(LOCAL_GEMS_CACHE_FILE));
+ if (gems.isEmpty()) {
+ gems = loadLocalGems();
+ storeGemCache(gems, getConfigFile(LOCAL_GEMS_CACHE_FILE));
+ }
for (GemListener listener : listeners) {
listener.gemsRefreshed();
}
@@ -114,10 +119,10 @@
job2.schedule();
}
- protected Set<Gem> loadLocalCache() {
+ protected Set<Gem> loadLocalCache(File file) {
FileReader fileReader = null;
try {
- fileReader = new FileReader(getConfigFile());
+ fileReader = new FileReader(file);
XMLReader reader = SAXParserFactory.newInstance().newSAXParser()
.getXMLReader();
GemManagerContentHandler handler = new GemManagerContentHandler();
@@ -146,11 +151,11 @@
return new HashSet<Gem>();
}
- protected void storeGemCache() {
- PrintWriter out = null;
+ protected void storeGemCache(Set<Gem> gems, File file) {
+ XMLWriter out = null;
try {
- out = new PrintWriter(new FileWriter(getConfigFile()));
- writeXML(out);
+ out = new XMLWriter(new FileOutputStream(file));
+ writeXML(gems, out);
} catch (FileNotFoundException e) {
AptanaRDTPlugin.log(e);
} catch (IOException e) {
@@ -161,36 +166,29 @@
}
}
- /**
- * Returns the configuration file to use for the servers. The file is
- * located in the plugin state directory and called
- * <code>remote_gems.xml</code>.
- *
- * @return the config file
- */
- private File getConfigFile() {
+ private File getConfigFile(String fileName) {
return AptanaRDTPlugin.getDefault().getStateLocation().append(
- LOCAL_CACHE_FILE).toFile();
+ fileName).toFile();
}
/**
* Writes each server configuration to file in XML format.
+ * @param gems
*
* @param out
* the writer to use
*/
- private void writeXML(PrintWriter out) {
- out.println("<?xml version=\"1.0\" encoding=\"UTF-8\"?>");
- out.println("<gems>");
- for (Gem gem : remoteGems) {
- out.println("<gem>");
- out.println("<name>" + gem.getName() + "</name>");
- out.println("<version>" + gem.getVersion() + "</version>");
- out.println("<description>" + gem.getDescription()
- + "</description>");
- out.println("</gem>");
+ private void writeXML(Set<Gem> gems, XMLWriter out) {
+ out.startTag("gems", null);
+ for (Gem gem : gems) {
+ out.startTag("gem", null);
+ out.printSimpleTag("name", gem.getName());
+ out.printSimpleTag("version", gem.getVersion());
+ out.printSimpleTag("description", gem.getDescription());
+ out.printSimpleTag("platform", gem.getPlatform());
+ out.endTag("gem");
}
- out.println("</gems>");
+ out.endTag("gems");
out.flush();
}
@@ -228,7 +226,11 @@
name = line.trim().substring(6);
}
if (line.trim().startsWith("platform:")) {
- platform = line.trim().substring(10);
+ if (line.trim().length() == 9) {
+ platform = Gem.RUBY_PLATFORM;
+ } else {
+ platform = line.trim().substring(10);
+ }
}
if (line.trim().startsWith("summary:")) {
description = line.trim().substring(9);
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|
|
From: <caw...@us...> - 2007-05-11 17:37:01
|
Revision: 2467
http://svn.sourceforge.net/rubyeclipse/?rev=2467&view=rev
Author: cawilliams
Date: 2007-05-11 10:37:00 -0700 (Fri, 11 May 2007)
Log Message:
-----------
Added Paths:
-----------
trunk/com.aptana.rdt/.settings/org.eclipse.jdt.core.prefs
Added: trunk/com.aptana.rdt/.settings/org.eclipse.jdt.core.prefs
===================================================================
--- trunk/com.aptana.rdt/.settings/org.eclipse.jdt.core.prefs (rev 0)
+++ trunk/com.aptana.rdt/.settings/org.eclipse.jdt.core.prefs 2007-05-11 17:37:00 UTC (rev 2467)
@@ -0,0 +1,12 @@
+#Fri May 11 13:36:06 EDT 2007
+eclipse.preferences.version=1
+org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled
+org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.5
+org.eclipse.jdt.core.compiler.codegen.unusedLocal=preserve
+org.eclipse.jdt.core.compiler.compliance=1.5
+org.eclipse.jdt.core.compiler.debug.lineNumber=generate
+org.eclipse.jdt.core.compiler.debug.localVariable=generate
+org.eclipse.jdt.core.compiler.debug.sourceFile=generate
+org.eclipse.jdt.core.compiler.problem.assertIdentifier=error
+org.eclipse.jdt.core.compiler.problem.enumIdentifier=error
+org.eclipse.jdt.core.compiler.source=1.5
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|
|
From: <caw...@us...> - 2007-05-11 17:36:52
|
Revision: 2466
http://svn.sourceforge.net/rubyeclipse/?rev=2466&view=rev
Author: cawilliams
Date: 2007-05-11 10:36:49 -0700 (Fri, 11 May 2007)
Log Message:
-----------
Added Paths:
-----------
trunk/com.aptana.rdt/.settings/
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|
|
From: <caw...@us...> - 2007-05-11 17:36:29
|
Revision: 2465
http://svn.sourceforge.net/rubyeclipse/?rev=2465&view=rev
Author: cawilliams
Date: 2007-05-11 10:36:26 -0700 (Fri, 11 May 2007)
Log Message:
-----------
fix build
Modified Paths:
--------------
trunk/com.aptana.rdt/src/com/aptana/rdt/internal/gems/GemManager.java
Modified: trunk/com.aptana.rdt/src/com/aptana/rdt/internal/gems/GemManager.java
===================================================================
--- trunk/com.aptana.rdt/src/com/aptana/rdt/internal/gems/GemManager.java 2007-05-11 17:34:12 UTC (rev 2464)
+++ trunk/com.aptana.rdt/src/com/aptana/rdt/internal/gems/GemManager.java 2007-05-11 17:36:26 UTC (rev 2465)
@@ -318,7 +318,7 @@
int j = 2;
if ((i + 2) < lines.size()) {
String nextLine = lines.get(i + 2);
- while (!nextLine.trim().isEmpty()) {
+ while (nextLine.trim().length() != 0) {
j++;
description += " " + nextLine.trim();
nextLine = lines.get(i + j);
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|
|
From: <caw...@us...> - 2007-05-11 17:34:13
|
Revision: 2464
http://svn.sourceforge.net/rubyeclipse/?rev=2464&view=rev
Author: cawilliams
Date: 2007-05-11 10:34:12 -0700 (Fri, 11 May 2007)
Log Message:
-----------
Modified Paths:
--------------
trunk/com.aptana.rdt/src/com/aptana/rdt/internal/gems/GemManager.java
trunk/com.aptana.rdt/src/com/aptana/rdt/internal/ui/actions/InstallGemActionDelegate.java
trunk/com.aptana.rdt/src/com/aptana/rdt/internal/ui/actions/RemoveGemActionDelegate.java
trunk/com.aptana.rdt/src/com/aptana/rdt/internal/ui/actions/UpdateGemActionDelegate.java
trunk/com.aptana.rdt/src/com/aptana/rdt/ui/gems/GemsView.java
Modified: trunk/com.aptana.rdt/src/com/aptana/rdt/internal/gems/GemManager.java
===================================================================
--- trunk/com.aptana.rdt/src/com/aptana/rdt/internal/gems/GemManager.java 2007-05-11 17:26:06 UTC (rev 2463)
+++ trunk/com.aptana.rdt/src/com/aptana/rdt/internal/gems/GemManager.java 2007-05-11 17:34:12 UTC (rev 2464)
@@ -104,7 +104,9 @@
@Override
protected IStatus run(IProgressMonitor monitor) {
gems = loadLocalGems();
- informListeners();
+ for (GemListener listener : listeners) {
+ listener.gemsRefreshed();
+ }
return Status.OK_STATUS;
}
@@ -333,9 +335,9 @@
return gems;
}
- public boolean upgrade(String gemName) {
+ public boolean update(Gem gem) {
try {
- String command = UPDATE_COMMAND + " " + gemName;
+ String command = UPDATE_COMMAND + " " + gem.getName();
ILaunchConfiguration config = createGemLaunchConfiguration(command);
config.launch(ILaunchManager.RUN_MODE, null);
} catch (CoreException e) {
@@ -345,10 +347,6 @@
return true;
}
- public boolean installGem(String name) {
- return installGem(name, null);
- }
-
private ILaunchConfigurationType getRubyApplicationConfigType() {
return getLaunchManager().getLaunchConfigurationType(
IRubyLaunchConfigurationConstants.ID_RUBY_APPLICATION);
@@ -405,11 +403,11 @@
return path + File.separator + "bin" + File.separator + "gem";
}
- public boolean installGem(String name, String version) {
+ public boolean installGem(Gem gem) {
try {
- String command = INSTALL_COMMAND + " " + name;
- if (version != null && version.trim().length() > 0) {
- command += " " + VERSION_SWITCH + " " + version;
+ String command = INSTALL_COMMAND + " " + gem.getName();
+ if (gem.getVersion() != null && gem.getVersion().trim().length() > 0) {
+ command += " " + VERSION_SWITCH + " " + gem.getVersion();
}
ILaunchConfiguration config = createGemLaunchConfiguration(command);
ILaunch launch = config.launch(ILaunchManager.RUN_MODE, null);
@@ -484,15 +482,17 @@
AptanaRDTPlugin.log(e);
return false;
}
- refresh();
+ for (GemListener listener : listeners) {
+ listener.gemAdded(gem);
+ }
return true;
}
- public boolean removeGem(String name, String version) {
+ public boolean removeGem(Gem gem) {
try {
- String command = UNINSTALL_COMMAND + " " + name;
- if (version != null && version.trim().length() > 0) {
- command += " " + VERSION_SWITCH + " " + version;
+ String command = UNINSTALL_COMMAND + " " + gem.getName();
+ if (gem.getVersion() != null && gem.getVersion().trim().length() > 0) {
+ command += " " + VERSION_SWITCH + " " + gem.getVersion();
}
ILaunchConfiguration config = createGemLaunchConfiguration(command);
config.launch(ILaunchManager.RUN_MODE, null);
@@ -500,14 +500,12 @@
AptanaRDTPlugin.log(e);
return false;
}
- refresh(); // FIXME Need to wait until uninstall is finished!
+ for (GemListener listener : listeners) {
+ listener.gemRemoved(gem);
+ } // FIXME Need to wait until uninstall is finished!
return true;
}
- public boolean removeGem(String name) {
- return removeGem(name, null);
- }
-
public Set<Gem> getGems() {
return Collections.unmodifiableSortedSet(new TreeSet<Gem>(gems));
}
@@ -523,24 +521,22 @@
if (!newGems.isEmpty()) {
gems.clear();
gems = newGems;
- informListeners();
+ for (GemListener listener : listeners) {
+ listener.gemsRefreshed();
+ }
return true;
}
return false;
}
- private void informListeners() {
- for (GemListener listener : listeners) {
- listener.gemsRefreshed();
- }
- }
-
public void addGemObserver(GemListener listener) {
listeners.add(listener);
}
public interface GemListener {
public void gemsRefreshed();
+ public void gemAdded(Gem gem);
+ public void gemRemoved(Gem gem);
}
public Set<Gem> getRemoteGems() {
Modified: trunk/com.aptana.rdt/src/com/aptana/rdt/internal/ui/actions/InstallGemActionDelegate.java
===================================================================
--- trunk/com.aptana.rdt/src/com/aptana/rdt/internal/ui/actions/InstallGemActionDelegate.java 2007-05-11 17:26:06 UTC (rev 2463)
+++ trunk/com.aptana.rdt/src/com/aptana/rdt/internal/ui/actions/InstallGemActionDelegate.java 2007-05-11 17:34:12 UTC (rev 2464)
@@ -45,7 +45,7 @@
final Gem gem = dialog.getGem();
Display.getDefault().asyncExec(new Runnable() {
public void run() {
- GemManager.getInstance().installGem(gem.getName(), gem.getVersion());
+ GemManager.getInstance().installGem(gem);
}
});
}
Modified: trunk/com.aptana.rdt/src/com/aptana/rdt/internal/ui/actions/RemoveGemActionDelegate.java
===================================================================
--- trunk/com.aptana.rdt/src/com/aptana/rdt/internal/ui/actions/RemoveGemActionDelegate.java 2007-05-11 17:26:06 UTC (rev 2463)
+++ trunk/com.aptana.rdt/src/com/aptana/rdt/internal/ui/actions/RemoveGemActionDelegate.java 2007-05-11 17:34:12 UTC (rev 2464)
@@ -46,7 +46,7 @@
Display.getDefault().asyncExec(new Runnable() {
public void run() {
- GemManager.getInstance().removeGem(selectedGem.getName());
+ GemManager.getInstance().removeGem(selectedGem);
}
});
Modified: trunk/com.aptana.rdt/src/com/aptana/rdt/internal/ui/actions/UpdateGemActionDelegate.java
===================================================================
--- trunk/com.aptana.rdt/src/com/aptana/rdt/internal/ui/actions/UpdateGemActionDelegate.java 2007-05-11 17:26:06 UTC (rev 2463)
+++ trunk/com.aptana.rdt/src/com/aptana/rdt/internal/ui/actions/UpdateGemActionDelegate.java 2007-05-11 17:34:12 UTC (rev 2464)
@@ -46,7 +46,7 @@
Display.getDefault().asyncExec(new Runnable() {
public void run() {
- GemManager.getInstance().upgrade(selectedGem.getName());
+ GemManager.getInstance().update(selectedGem);
}
});
Modified: trunk/com.aptana.rdt/src/com/aptana/rdt/ui/gems/GemsView.java
===================================================================
--- trunk/com.aptana.rdt/src/com/aptana/rdt/ui/gems/GemsView.java 2007-05-11 17:26:06 UTC (rev 2463)
+++ trunk/com.aptana.rdt/src/com/aptana/rdt/ui/gems/GemsView.java 2007-05-11 17:34:12 UTC (rev 2464)
@@ -19,6 +19,7 @@
import org.eclipse.ui.part.ViewPart;
import org.rubypeople.rdt.ui.TableViewerSorter;
+import com.aptana.rdt.internal.gems.Gem;
import com.aptana.rdt.internal.gems.GemManager;
import com.aptana.rdt.internal.gems.GemManager.GemListener;
@@ -45,18 +46,18 @@
versionColumn.setWidth(75);
TableColumn descriptionColumn = new TableColumn(serverTable, SWT.LEFT);
- descriptionColumn.setText(GemsMessages.GemsView_DescriptionColumn_label);
+ descriptionColumn
+ .setText(GemsMessages.GemsView_DescriptionColumn_label);
descriptionColumn.setWidth(275);
-
gemViewer.setLabelProvider(new GemLabelProvider());
gemViewer.setContentProvider(new GemContentProvider());
TableViewerSorter.bind(gemViewer);
getSite().setSelectionProvider(gemViewer);
-
+
gemViewer.setInput(GemManager.getInstance().getGems());
createPopupMenu();
-
+
GemManager.getInstance().addGemObserver(this);
}
@@ -64,17 +65,18 @@
public void setFocus() {
// do nothing
}
-
+
/**
* Creates and registers the context menu
*/
private void createPopupMenu() {
MenuManager menuMgr = new MenuManager("#PopupMenu");
menuMgr.setRemoveAllWhenShown(true);
-
+
menuMgr.addMenuListener(new IMenuListener() {
public void menuAboutToShow(IMenuManager manager) {
- IContributionItem[] items = getViewSite().getActionBars().getToolBarManager().getItems();
+ IContributionItem[] items = getViewSite().getActionBars()
+ .getToolBarManager().getItems();
for (int i = 0; i < items.length; i++) {
if (items[i] instanceof ActionContributionItem) {
ActionContributionItem aci = (ActionContributionItem) items[i];
@@ -83,7 +85,12 @@
}
}
});
- menuMgr.add(new Separator(IWorkbenchActionConstants.MB_ADDITIONS)); // Allow other plugins to add here
+ menuMgr.add(new Separator(IWorkbenchActionConstants.MB_ADDITIONS)); // Allow
+ // other
+ // plugins
+ // to
+ // add
+ // here
Menu menu = menuMgr.createContextMenu(gemViewer.getControl());
gemViewer.getControl().setMenu(menu);
getSite().registerContextMenu(menuMgr, gemViewer);
@@ -91,14 +98,34 @@
public void gemsRefreshed() {
Display.getDefault().asyncExec(new Runnable() {
-
+
public void run() {
gemViewer.setInput(GemManager.getInstance().getGems());
- gemViewer.refresh();
+ gemViewer.refresh();
}
-
+
});
-
+
}
+ public void gemAdded(final Gem gem) {
+ Display.getDefault().asyncExec(new Runnable() {
+
+ public void run() {
+ gemViewer.add(gem);
+ }
+
+ });
+ }
+
+ public void gemRemoved(final Gem gem) {
+ Display.getDefault().asyncExec(new Runnable() {
+
+ public void run() {
+ gemViewer.remove(gem);
+ }
+
+ });
+ }
+
}
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|
|
From: <caw...@us...> - 2007-05-11 17:26:19
|
Revision: 2463
http://svn.sourceforge.net/rubyeclipse/?rev=2463&view=rev
Author: cawilliams
Date: 2007-05-11 10:26:06 -0700 (Fri, 11 May 2007)
Log Message:
-----------
extract out constants from GemManager, extract out strings to translate
Modified Paths:
--------------
trunk/com.aptana.rdt/src/com/aptana/rdt/internal/gems/Gem.java
trunk/com.aptana.rdt/src/com/aptana/rdt/internal/gems/GemManager.java
trunk/com.aptana.rdt/src/com/aptana/rdt/ui/gems/GemsMessages.java
trunk/com.aptana.rdt/src/com/aptana/rdt/ui/gems/GemsMessages.properties
Modified: trunk/com.aptana.rdt/src/com/aptana/rdt/internal/gems/Gem.java
===================================================================
--- trunk/com.aptana.rdt/src/com/aptana/rdt/internal/gems/Gem.java 2007-05-11 17:17:43 UTC (rev 2462)
+++ trunk/com.aptana.rdt/src/com/aptana/rdt/internal/gems/Gem.java 2007-05-11 17:26:06 UTC (rev 2463)
@@ -6,6 +6,8 @@
private String version;
private String description;
private String platform;
+ static final String RUBY_PLATFORM = "ruby";
+ static final String MSWIN32_PLATFORM = "mswin32";
public Gem(String name, String version, String description) {
this(name, version, description, "ruby");
Modified: trunk/com.aptana.rdt/src/com/aptana/rdt/internal/gems/GemManager.java
===================================================================
--- trunk/com.aptana.rdt/src/com/aptana/rdt/internal/gems/GemManager.java 2007-05-11 17:17:43 UTC (rev 2462)
+++ trunk/com.aptana.rdt/src/com/aptana/rdt/internal/gems/GemManager.java 2007-05-11 17:26:06 UTC (rev 2463)
@@ -54,23 +54,29 @@
import org.xml.sax.XMLReader;
import com.aptana.rdt.AptanaRDTPlugin;
+import com.aptana.rdt.ui.gems.GemsMessages;
public class GemManager {
+ private static final String LOCAL_SWITCH = "-l";
+ private static final String LIST_COMMAND = "list";
+ private static final String INSTALL_COMMAND = "install";
+ private static final String VERSION_SWITCH = "-v";
+ private static final String UNINSTALL_COMMAND = "uninstall";
+ private static final String UPDATE_COMMAND = "update";
+ private static final String EXECUTABLE = "ruby";
+ private static final String VM_ARGS = "-e STDOUT.sync=true -e STDERR.sync=true -e load(ARGV.shift)";
+
private static final int TIMEOUT = 30000;
-
private static final String TIMEOUT_MSG = "Installing gem took more than 30 seconds, intentionally broke out to avoid infinite loop";
-
+
private static final String LOCAL_CACHE_FILE = "remote_gems.xml";
-
private static final String GEM_INDEX_URL = "http://gems.rubyforge.org/yaml";
private static GemManager fgInstance;
private Set<Gem> gems;
-
private Set<Gem> remoteGems;
-
private Set<GemListener> listeners;
private GemManager() {
@@ -79,7 +85,7 @@
// FIXME Do an incremental check for new remote gems somehow?
remoteGems = new HashSet<Gem>();
listeners = new HashSet<GemListener>();
- Job job = new Job("Loading remote gem information") {
+ Job job = new Job(GemsMessages.GemManager_loading_remote_gems) {
@Override
protected IStatus run(IProgressMonitor monitor) {
@@ -93,7 +99,7 @@
};
job.schedule();
- Job job2 = new Job("Loading local gem information") {
+ Job job2 = new Job(GemsMessages.GemManager_loading_local_gems) {
@Override
protected IStatus run(IProgressMonitor monitor) {
@@ -243,7 +249,7 @@
}
private Set<Gem> loadLocalGems() {
- List<String> lines = launchAndRead("list -l");
+ List<String> lines = launchAndRead(LIST_COMMAND + " " + LOCAL_SWITCH);
if (lines.size() > 2) {
lines.remove(0); // Remove first 3 lines from local list
lines.remove(0);
@@ -329,7 +335,7 @@
public boolean upgrade(String gemName) {
try {
- String command = "update " + gemName;
+ String command = UPDATE_COMMAND + " " + gemName;
ILaunchConfiguration config = createGemLaunchConfiguration(command);
config.launch(ILaunchManager.RUN_MODE, null);
} catch (CoreException e) {
@@ -353,7 +359,7 @@
}
private ILaunchConfiguration createGemLaunchConfiguration(String arguments) {
- String gemPath = getServerScript();
+ String gemPath = getGemScriptPath();
ILaunchConfiguration config = null;
try {
ILaunchConfigurationType configType = getRubyApplicationConfigType();
@@ -375,11 +381,11 @@
wc
.setAttribute(
IRubyLaunchConfigurationConstants.ATTR_VM_ARGUMENTS,
- "-e STDOUT.sync=true -e STDERR.sync=true -e load(ARGV.shift)");
+ VM_ARGS);
Map<String, String> map = new HashMap<String, String>();
map
.put(IRubyLaunchConfigurationConstants.ATTR_RUBY_COMMAND,
- "ruby");
+ EXECUTABLE);
wc
.setAttribute(
IRubyLaunchConfigurationConstants.ATTR_VM_INSTALL_TYPE_SPECIFIC_ATTRS_MAP,
@@ -392,7 +398,7 @@
return config;
}
- private String getServerScript() {
+ private static String getGemScriptPath() {
IVMInstall vm = RubyRuntime.getDefaultVMInstall();
File installLocation = vm.getInstallLocation();
String path = installLocation.getAbsolutePath();
@@ -401,9 +407,9 @@
public boolean installGem(String name, String version) {
try {
- String command = "install " + name;
+ String command = INSTALL_COMMAND + " " + name;
if (version != null && version.trim().length() > 0) {
- command += " -v " + version;
+ command += " " + VERSION_SWITCH + " " + version;
}
ILaunchConfiguration config = createGemLaunchConfiguration(command);
ILaunch launch = config.launch(ILaunchManager.RUN_MODE, null);
@@ -448,9 +454,9 @@
}
// Automatically select the option which matches this
// platform.
- String myPlatform = "ruby";
+ String myPlatform = Gem.RUBY_PLATFORM;
if (Platform.getOS().equals(Constants.OS_WIN32)) {
- myPlatform = "mswin32";
+ myPlatform = Gem.MSWIN32_PLATFORM;
}
try {
p.getStreamsProxy().write(
@@ -484,9 +490,9 @@
public boolean removeGem(String name, String version) {
try {
- String command = "uninstall " + name;
+ String command = UNINSTALL_COMMAND + " " + name;
if (version != null && version.trim().length() > 0) {
- command += " -v " + version;
+ command += " " + VERSION_SWITCH + " " + version;
}
ILaunchConfiguration config = createGemLaunchConfiguration(command);
config.launch(ILaunchManager.RUN_MODE, null);
Modified: trunk/com.aptana.rdt/src/com/aptana/rdt/ui/gems/GemsMessages.java
===================================================================
--- trunk/com.aptana.rdt/src/com/aptana/rdt/ui/gems/GemsMessages.java 2007-05-11 17:17:43 UTC (rev 2462)
+++ trunk/com.aptana.rdt/src/com/aptana/rdt/ui/gems/GemsMessages.java 2007-05-11 17:26:06 UTC (rev 2463)
@@ -12,6 +12,8 @@
public static String InstallGemDialog_dialog_title;
public static String InstallGemDialog_version_label;
public static String InstallGemDialog_name_label;
+ public static String GemManager_loading_local_gems;
+ public static String GemManager_loading_remote_gems;
static {
NLS.initializeMessages(BUNDLE_NAME, GemsMessages.class);
Modified: trunk/com.aptana.rdt/src/com/aptana/rdt/ui/gems/GemsMessages.properties
===================================================================
--- trunk/com.aptana.rdt/src/com/aptana/rdt/ui/gems/GemsMessages.properties 2007-05-11 17:17:43 UTC (rev 2462)
+++ trunk/com.aptana.rdt/src/com/aptana/rdt/ui/gems/GemsMessages.properties 2007-05-11 17:26:06 UTC (rev 2463)
@@ -4,4 +4,7 @@
InstallGemDialog_dialog_title=Install a gem
InstallGemDialog_version_label=Version:
-InstallGemDialog_name_label=Gem Name:
\ No newline at end of file
+InstallGemDialog_name_label=Gem Name:
+
+GemManager_loading_local_gems=Loading local gem information
+GemManager_loading_remote_gems=Loading remote gem information
\ No newline at end of file
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|
|
From: <caw...@us...> - 2007-05-11 17:17:45
|
Revision: 2462
http://svn.sourceforge.net/rubyeclipse/?rev=2462&view=rev
Author: cawilliams
Date: 2007-05-11 10:17:43 -0700 (Fri, 11 May 2007)
Log Message:
-----------
fix command issued for upgrade/update of gem
Modified Paths:
--------------
trunk/com.aptana.rdt/src/com/aptana/rdt/internal/gems/GemManager.java
Modified: trunk/com.aptana.rdt/src/com/aptana/rdt/internal/gems/GemManager.java
===================================================================
--- trunk/com.aptana.rdt/src/com/aptana/rdt/internal/gems/GemManager.java 2007-05-11 17:13:55 UTC (rev 2461)
+++ trunk/com.aptana.rdt/src/com/aptana/rdt/internal/gems/GemManager.java 2007-05-11 17:17:43 UTC (rev 2462)
@@ -329,7 +329,7 @@
public boolean upgrade(String gemName) {
try {
- String command = "upgrade " + gemName;
+ String command = "update " + gemName;
ILaunchConfiguration config = createGemLaunchConfiguration(command);
config.launch(ILaunchManager.RUN_MODE, null);
} catch (CoreException e) {
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|
|
From: <caw...@us...> - 2007-05-11 17:13:56
|
Revision: 2461
http://svn.sourceforge.net/rubyeclipse/?rev=2461&view=rev
Author: cawilliams
Date: 2007-05-11 10:13:55 -0700 (Fri, 11 May 2007)
Log Message:
-----------
add new gem installer/manager view
Modified Paths:
--------------
trunk/com.aptana.rdt/META-INF/MANIFEST.MF
trunk/com.aptana.rdt/plugin.xml
Added Paths:
-----------
trunk/com.aptana.rdt/icons/add.gif
trunk/com.aptana.rdt/icons/nav_refresh.gif
trunk/com.aptana.rdt/icons/remove.gif
trunk/com.aptana.rdt/icons/rubygems.png
trunk/com.aptana.rdt/icons/upgrade.gif
trunk/com.aptana.rdt/src/com/aptana/rdt/internal/gems/
trunk/com.aptana.rdt/src/com/aptana/rdt/internal/gems/Gem.java
trunk/com.aptana.rdt/src/com/aptana/rdt/internal/gems/GemManager.java
trunk/com.aptana.rdt/src/com/aptana/rdt/internal/gems/GemManagerContentHandler.java
trunk/com.aptana.rdt/src/com/aptana/rdt/internal/gems/LogicalGem.java
trunk/com.aptana.rdt/src/com/aptana/rdt/internal/ui/actions/
trunk/com.aptana.rdt/src/com/aptana/rdt/internal/ui/actions/InstallGemActionDelegate.java
trunk/com.aptana.rdt/src/com/aptana/rdt/internal/ui/actions/RefreshGemsActionDelegate.java
trunk/com.aptana.rdt/src/com/aptana/rdt/internal/ui/actions/RemoveGemActionDelegate.java
trunk/com.aptana.rdt/src/com/aptana/rdt/internal/ui/actions/UpdateGemActionDelegate.java
trunk/com.aptana.rdt/src/com/aptana/rdt/ui/gems/
trunk/com.aptana.rdt/src/com/aptana/rdt/ui/gems/GemContentProvider.java
trunk/com.aptana.rdt/src/com/aptana/rdt/ui/gems/GemLabelProvider.java
trunk/com.aptana.rdt/src/com/aptana/rdt/ui/gems/GemsMessages.java
trunk/com.aptana.rdt/src/com/aptana/rdt/ui/gems/GemsMessages.properties
trunk/com.aptana.rdt/src/com/aptana/rdt/ui/gems/GemsView.java
trunk/com.aptana.rdt/src/com/aptana/rdt/ui/gems/InstallGemDialog.java
Modified: trunk/com.aptana.rdt/META-INF/MANIFEST.MF
===================================================================
--- trunk/com.aptana.rdt/META-INF/MANIFEST.MF 2007-05-10 19:36:12 UTC (rev 2460)
+++ trunk/com.aptana.rdt/META-INF/MANIFEST.MF 2007-05-11 17:13:55 UTC (rev 2461)
@@ -11,11 +11,14 @@
com.aptana.rdt.internal.parser.warnings,
com.aptana.rdt.internal.ui.preferences,
com.aptana.rdt.internal.ui.text.ruby.hover
-Require-Bundle: org.rubypeople.rdt.ui,
- org.eclipse.ui.intro,
+Require-Bundle: org.eclipse.core.resources,
+ org.eclipse.core.runtime,
org.eclipse.jface.text,
org.eclipse.ui,
+ org.eclipse.ui.intro,
+ org.eclipse.debug.core,
+ org.eclipse.debug.ui,
+ org.jruby,
org.rubypeople.rdt.core,
- org.eclipse.core.runtime,
- org.jruby,
- org.eclipse.core.resources
+ org.rubypeople.rdt.launching,
+ org.rubypeople.rdt.ui
Added: trunk/com.aptana.rdt/icons/add.gif
===================================================================
(Binary files differ)
Property changes on: trunk/com.aptana.rdt/icons/add.gif
___________________________________________________________________
Name: svn:mime-type
+ application/octet-stream
Added: trunk/com.aptana.rdt/icons/nav_refresh.gif
===================================================================
(Binary files differ)
Property changes on: trunk/com.aptana.rdt/icons/nav_refresh.gif
___________________________________________________________________
Name: svn:mime-type
+ application/octet-stream
Added: trunk/com.aptana.rdt/icons/remove.gif
===================================================================
(Binary files differ)
Property changes on: trunk/com.aptana.rdt/icons/remove.gif
___________________________________________________________________
Name: svn:mime-type
+ application/octet-stream
Added: trunk/com.aptana.rdt/icons/rubygems.png
===================================================================
(Binary files differ)
Property changes on: trunk/com.aptana.rdt/icons/rubygems.png
___________________________________________________________________
Name: svn:mime-type
+ application/octet-stream
Added: trunk/com.aptana.rdt/icons/upgrade.gif
===================================================================
(Binary files differ)
Property changes on: trunk/com.aptana.rdt/icons/upgrade.gif
___________________________________________________________________
Name: svn:mime-type
+ application/octet-stream
Modified: trunk/com.aptana.rdt/plugin.xml
===================================================================
--- trunk/com.aptana.rdt/plugin.xml 2007-05-10 19:36:12 UTC (rev 2460)
+++ trunk/com.aptana.rdt/plugin.xml 2007-05-11 17:13:55 UTC (rev 2461)
@@ -64,6 +64,12 @@
class="com.aptana.rdt.internal.ui.infoviews.RubyStdLibAPIView"
id="com.aptana.rdt.ui.views.RubyStdLibAPIView">
</view>
+ <view
+ category="org.rubypeople.rdt.ui.ruby"
+ class="com.aptana.rdt.ui.gems.GemsView"
+ icon="icons/rubygems.png"
+ id="com.aptana.gems.ui.ViewGems"
+ name="RubyGems"/>
</extension>
<extension point="org.eclipse.ui.perspectiveExtensions">
@@ -160,8 +166,47 @@
<argument prefKey="com.aptana.rdt.compiler.problem.maxReturns"/>
</error>
</extension>
+
+ <extension
+ point="org.eclipse.ui.viewActions">
+ <viewContribution
+ id="com.aptana.gems.ui.ViewActions"
+ targetID="com.aptana.gems.ui.ViewGems">
+ <action
+ class="com.aptana.rdt.internal.ui.actions.InstallGemActionDelegate"
+ icon="icons/add.gif"
+ id="com.aptana.gems.ui.ActionInstallGem"
+ label="Install"
+ style="push"
+ toolbarPath="additions"
+ tooltip="Install"/>
+ <action
+ class="com.aptana.rdt.internal.ui.actions.RemoveGemActionDelegate"
+ icon="icons/remove.gif"
+ id="com.aptana.gems.ui.ActionRemoveGem"
+ label="Remove"
+ style="push"
+ toolbarPath="additions"
+ tooltip="Remove"/>
+ <action
+ class="com.aptana.rdt.internal.ui.actions.RefreshGemsActionDelegate"
+ icon="icons/nav_refresh.gif"
+ id="com.aptana.gems.ui.ActionRefreshGems"
+ label="Refresh"
+ style="push"
+ toolbarPath="additions"
+ tooltip="Refresh"/>
+ <action
+ class="com.aptana.rdt.internal.ui.actions.UpdateGemActionDelegate"
+ icon="icons/upgrade.gif"
+ id="com.aptana.gems.ui.ActionUpdateGem"
+ label="Update Gem"
+ style="push"
+ toolbarPath="additions"
+ tooltip="Update Gem"/>
+ </viewContribution>
+ </extension>
-
<!-- =================================================================================== -->
<!-- Extension: Eclipse preferences initializer -->
<!-- =================================================================================== -->
Added: trunk/com.aptana.rdt/src/com/aptana/rdt/internal/gems/Gem.java
===================================================================
--- trunk/com.aptana.rdt/src/com/aptana/rdt/internal/gems/Gem.java (rev 0)
+++ trunk/com.aptana.rdt/src/com/aptana/rdt/internal/gems/Gem.java 2007-05-11 17:13:55 UTC (rev 2461)
@@ -0,0 +1,63 @@
+package com.aptana.rdt.internal.gems;
+
+public class Gem implements Comparable {
+
+ private String name;
+ private String version;
+ private String description;
+ private String platform;
+
+ public Gem(String name, String version, String description) {
+ this(name, version, description, "ruby");
+ }
+
+ public Gem(String name, String version, String description, String platform) {
+ if (name == null) throw new IllegalArgumentException("A Gem's name must not be null");
+ if (version == null) throw new IllegalArgumentException("A Gem's version must not be null");
+ this.name = name;
+ this.version = version;
+ this.description = description;
+ this.platform = platform;
+ }
+
+
+ public String getName() {
+ return name;
+ }
+
+ public String getVersion() {
+ return version;
+ }
+
+ public String getDescription() {
+ return description;
+ }
+
+ public String getPlatform() {
+ return platform;
+ }
+
+ @Override
+ public boolean equals(Object arg0) {
+ if (!(arg0 instanceof Gem)) return false;
+ Gem other = (Gem) arg0;
+ return getName().equals(other.getName()) && getVersion().equals(other.getVersion()) && getPlatform().equals(other.getPlatform());
+ }
+
+ @Override
+ public int hashCode() {
+ return (getName().hashCode() * 100) + getVersion().hashCode();
+ }
+
+ public int compareTo(Object arg0) {
+ if (!(arg0 instanceof Gem)) return -1;
+ Gem other = (Gem) arg0;
+ return toString().compareTo(other.toString());
+ }
+
+ @Override
+ public String toString() {
+ return getName().toLowerCase() + " " + getVersion() + " " + getPlatform();
+ }
+
+}
Added: trunk/com.aptana.rdt/src/com/aptana/rdt/internal/gems/GemManager.java
===================================================================
--- trunk/com.aptana.rdt/src/com/aptana/rdt/internal/gems/GemManager.java (rev 0)
+++ trunk/com.aptana.rdt/src/com/aptana/rdt/internal/gems/GemManager.java 2007-05-11 17:13:55 UTC (rev 2461)
@@ -0,0 +1,555 @@
+package com.aptana.rdt.internal.gems;
+
+import java.io.BufferedReader;
+import java.io.File;
+import java.io.FileNotFoundException;
+import java.io.FileReader;
+import java.io.FileWriter;
+import java.io.IOException;
+import java.io.InputStream;
+import java.io.InputStreamReader;
+import java.io.PrintWriter;
+import java.io.StringReader;
+import java.net.MalformedURLException;
+import java.net.URL;
+import java.net.URLConnection;
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.Collections;
+import java.util.HashMap;
+import java.util.HashSet;
+import java.util.List;
+import java.util.Map;
+import java.util.Set;
+import java.util.SortedSet;
+import java.util.TreeSet;
+
+import javax.xml.parsers.FactoryConfigurationError;
+import javax.xml.parsers.ParserConfigurationException;
+import javax.xml.parsers.SAXParserFactory;
+
+import org.eclipse.core.runtime.CoreException;
+import org.eclipse.core.runtime.IProgressMonitor;
+import org.eclipse.core.runtime.IStatus;
+import org.eclipse.core.runtime.Platform;
+import org.eclipse.core.runtime.Status;
+import org.eclipse.core.runtime.jobs.Job;
+import org.eclipse.debug.core.DebugPlugin;
+import org.eclipse.debug.core.ILaunch;
+import org.eclipse.debug.core.ILaunchConfiguration;
+import org.eclipse.debug.core.ILaunchConfigurationType;
+import org.eclipse.debug.core.ILaunchConfigurationWorkingCopy;
+import org.eclipse.debug.core.ILaunchManager;
+import org.eclipse.debug.core.IStreamListener;
+import org.eclipse.debug.core.model.IProcess;
+import org.eclipse.debug.core.model.IStreamMonitor;
+import org.eclipse.debug.core.model.IStreamsProxy;
+import org.eclipse.debug.ui.IDebugUIConstants;
+import org.eclipse.osgi.service.environment.Constants;
+import org.rubypeople.rdt.launching.IRubyLaunchConfigurationConstants;
+import org.rubypeople.rdt.launching.IVMInstall;
+import org.rubypeople.rdt.launching.RubyRuntime;
+import org.xml.sax.InputSource;
+import org.xml.sax.SAXException;
+import org.xml.sax.XMLReader;
+
+import com.aptana.rdt.AptanaRDTPlugin;
+
+public class GemManager {
+
+ private static final int TIMEOUT = 30000;
+
+ private static final String TIMEOUT_MSG = "Installing gem took more than 30 seconds, intentionally broke out to avoid infinite loop";
+
+ private static final String LOCAL_CACHE_FILE = "remote_gems.xml";
+
+ private static final String GEM_INDEX_URL = "http://gems.rubyforge.org/yaml";
+
+ private static GemManager fgInstance;
+
+ private Set<Gem> gems;
+
+ private Set<Gem> remoteGems;
+
+ private Set<GemListener> listeners;
+
+ private GemManager() {
+ gems = new HashSet<Gem>();
+ // FIXME Somehow allow user to refresh remote gem list
+ // FIXME Do an incremental check for new remote gems somehow?
+ remoteGems = new HashSet<Gem>();
+ listeners = new HashSet<GemListener>();
+ Job job = new Job("Loading remote gem information") {
+
+ @Override
+ protected IStatus run(IProgressMonitor monitor) {
+ remoteGems = loadLocalCache();
+ if (remoteGems.isEmpty()) {
+ remoteGems = loadRemoteGems();
+ storeGemCache();
+ }
+ return Status.OK_STATUS;
+ }
+
+ };
+ job.schedule();
+ Job job2 = new Job("Loading local gem information") {
+
+ @Override
+ protected IStatus run(IProgressMonitor monitor) {
+ gems = loadLocalGems();
+ informListeners();
+ return Status.OK_STATUS;
+ }
+
+ };
+ job2.schedule();
+ }
+
+ protected Set<Gem> loadLocalCache() {
+ FileReader fileReader = null;
+ try {
+ fileReader = new FileReader(getConfigFile());
+ XMLReader reader = SAXParserFactory.newInstance().newSAXParser()
+ .getXMLReader();
+ GemManagerContentHandler handler = new GemManagerContentHandler();
+ reader.setContentHandler(handler);
+ reader.parse(new InputSource(fileReader));
+
+ return handler.getGems();
+ } catch (FileNotFoundException e) {
+ // This is okay, will get thrown if no config exists yet
+ } catch (SAXException e) {
+ AptanaRDTPlugin.log(e);
+ } catch (ParserConfigurationException e) {
+ AptanaRDTPlugin.log(e);
+ } catch (FactoryConfigurationError e) {
+ AptanaRDTPlugin.log(e);
+ } catch (IOException e) {
+ AptanaRDTPlugin.log(e);
+ } finally {
+ try {
+ if (fileReader != null)
+ fileReader.close();
+ } catch (IOException e) {
+ // ignore
+ }
+ }
+ return new HashSet<Gem>();
+ }
+
+ protected void storeGemCache() {
+ PrintWriter out = null;
+ try {
+ out = new PrintWriter(new FileWriter(getConfigFile()));
+ writeXML(out);
+ } catch (FileNotFoundException e) {
+ AptanaRDTPlugin.log(e);
+ } catch (IOException e) {
+ AptanaRDTPlugin.log(e);
+ } finally {
+ if (out != null)
+ out.close();
+ }
+ }
+
+ /**
+ * Returns the configuration file to use for the servers. The file is
+ * located in the plugin state directory and called
+ * <code>remote_gems.xml</code>.
+ *
+ * @return the config file
+ */
+ private File getConfigFile() {
+ return AptanaRDTPlugin.getDefault().getStateLocation().append(
+ LOCAL_CACHE_FILE).toFile();
+ }
+
+ /**
+ * Writes each server configuration to file in XML format.
+ *
+ * @param out
+ * the writer to use
+ */
+ private void writeXML(PrintWriter out) {
+ out.println("<?xml version=\"1.0\" encoding=\"UTF-8\"?>");
+ out.println("<gems>");
+ for (Gem gem : remoteGems) {
+ out.println("<gem>");
+ out.println("<name>" + gem.getName() + "</name>");
+ out.println("<version>" + gem.getVersion() + "</version>");
+ out.println("<description>" + gem.getDescription()
+ + "</description>");
+ out.println("</gem>");
+ }
+ out.println("</gems>");
+ out.flush();
+ }
+
+ private Set<Gem> loadRemoteGems() {
+ Set<Gem> gems = new HashSet<Gem>();
+ try {
+ URL url = new URL(GEM_INDEX_URL);
+ URLConnection con = url.openConnection();
+ InputStream content = (InputStream) con.getContent();
+ BufferedReader reader = new BufferedReader(new InputStreamReader(
+ content));
+ String line = null;
+ String name = null;
+ String version = null;
+ String description = null;
+ String platform = null;
+ boolean nextIsRealVersion = false;
+ while ((line = reader.readLine()) != null) {
+ if (nextIsRealVersion && line.trim().startsWith("version: ")) {
+ version = line.trim().substring(9);
+ if (version.charAt(0) == '"')
+ version = version.substring(1);
+ if (version.charAt(version.length() - 1) == '"')
+ version = version.substring(0, version.length() - 1);
+ nextIsRealVersion = false;
+ } else if (line.trim().equals(
+ "version: !ruby/object:Gem::Version")) {
+ nextIsRealVersion = true;
+ }
+ // if (line.trim().endsWith(":
+ // !ruby/object:Gem::Specification")) {
+ // // new gem
+ // }
+ if (line.trim().startsWith("name:")) {
+ name = line.trim().substring(6);
+ }
+ if (line.trim().startsWith("platform:")) {
+ platform = line.trim().substring(10);
+ }
+ if (line.trim().startsWith("summary:")) {
+ description = line.trim().substring(9);
+ }
+ if (description != null && name != null && version != null
+ && platform != null) {
+ gems.add(new Gem(name, version, description, platform));
+ description = null;
+ version = null;
+ name = null;
+ platform = null;
+ }
+ }
+ } catch (MalformedURLException e) {
+ AptanaRDTPlugin.log(e);
+ } catch (IOException e) {
+ AptanaRDTPlugin.log(e);
+ }
+ return gems;
+ }
+
+ private Set<Gem> loadLocalGems() {
+ List<String> lines = launchAndRead("list -l");
+ if (lines.size() > 2) {
+ lines.remove(0); // Remove first 3 lines from local list
+ lines.remove(0);
+ lines.remove(0);
+ }
+ return parseOutGems(lines);
+ }
+
+ private List<String> launchAndRead(String command) {
+ try {
+ ILaunchConfiguration config = createGemLaunchConfiguration(command);
+ ILaunch launch = config.launch(ILaunchManager.RUN_MODE, null);
+ IProcess[] processes = launch.getProcesses();
+ IProcess p = processes[0];
+ IStreamsProxy proxy = p.getStreamsProxy();
+ final StringBuffer output = new StringBuffer();
+ IStreamMonitor monitor = proxy.getOutputStreamMonitor();
+ monitor.addListener(new IStreamListener() {
+ public void streamAppended(String text, IStreamMonitor monitor) {
+ output.append(text);
+ }
+
+ });
+ long start = System.currentTimeMillis();
+ String lastOut = null;
+ while (!p.isTerminated() || output.length() == 0) {
+ Thread.yield();
+ if (lastOut != null && !lastOut.equals(output.toString())) {
+ start = System.currentTimeMillis(); // restart timeout if we
+ // have changes in
+ // output
+ }
+ lastOut = output.toString();
+ if (System.currentTimeMillis() > start + TIMEOUT) {
+ AptanaRDTPlugin.log(new Exception(TIMEOUT_MSG));
+ break;
+ }
+ }
+
+ BufferedReader reader = new BufferedReader(new StringReader(output
+ .toString()));
+ String line = null;
+ try {
+ List<String> lines = new ArrayList<String>();
+ while ((line = reader.readLine()) != null) {
+ lines.add(line);
+ }
+ return lines;
+ } catch (IOException e) {
+ AptanaRDTPlugin.log(e);
+ }
+
+ } catch (CoreException e) {
+ AptanaRDTPlugin.log(e);
+ }
+ return new ArrayList<String>();
+ }
+
+ private Set<Gem> parseOutGems(List<String> lines) {
+ Set<Gem> gems = new HashSet<Gem>();
+ for (int i = 0; i < lines.size();) {
+ String nameAndVersion = lines.get(i);
+ String description = lines.get(i + 1);
+ int j = 2;
+ if ((i + 2) < lines.size()) {
+ String nextLine = lines.get(i + 2);
+ while (!nextLine.trim().isEmpty()) {
+ j++;
+ description += " " + nextLine.trim();
+ nextLine = lines.get(i + j);
+ }
+ }
+ int openParen = nameAndVersion.indexOf('(');
+ int closeParen = nameAndVersion.indexOf(')');
+ String name = nameAndVersion.substring(0, openParen);
+ String version = nameAndVersion
+ .substring(openParen + 1, closeParen);
+ gems.add(new Gem(name.trim(), version, description.trim()));
+ i += (j + 1);
+ }
+ return gems;
+ }
+
+ public boolean upgrade(String gemName) {
+ try {
+ String command = "upgrade " + gemName;
+ ILaunchConfiguration config = createGemLaunchConfiguration(command);
+ config.launch(ILaunchManager.RUN_MODE, null);
+ } catch (CoreException e) {
+ AptanaRDTPlugin.log(e);
+ return false;
+ }
+ return true;
+ }
+
+ public boolean installGem(String name) {
+ return installGem(name, null);
+ }
+
+ private ILaunchConfigurationType getRubyApplicationConfigType() {
+ return getLaunchManager().getLaunchConfigurationType(
+ IRubyLaunchConfigurationConstants.ID_RUBY_APPLICATION);
+ }
+
+ private ILaunchManager getLaunchManager() {
+ return DebugPlugin.getDefault().getLaunchManager();
+ }
+
+ private ILaunchConfiguration createGemLaunchConfiguration(String arguments) {
+ String gemPath = getServerScript();
+ ILaunchConfiguration config = null;
+ try {
+ ILaunchConfigurationType configType = getRubyApplicationConfigType();
+ ILaunchConfigurationWorkingCopy wc = configType
+ .newInstance(null, getLaunchManager()
+ .generateUniqueLaunchConfigurationNameFrom(gemPath));
+ wc.setAttribute(IRubyLaunchConfigurationConstants.ATTR_FILE_NAME,
+ gemPath);
+ wc.setAttribute(
+ IRubyLaunchConfigurationConstants.ATTR_VM_INSTALL_NAME,
+ RubyRuntime.getDefaultVMInstall().getName());
+ wc.setAttribute(
+ IRubyLaunchConfigurationConstants.ATTR_VM_INSTALL_TYPE,
+ RubyRuntime.getDefaultVMInstall().getVMInstallType()
+ .getId());
+ wc.setAttribute(
+ IRubyLaunchConfigurationConstants.ATTR_PROGRAM_ARGUMENTS,
+ arguments);
+ wc
+ .setAttribute(
+ IRubyLaunchConfigurationConstants.ATTR_VM_ARGUMENTS,
+ "-e STDOUT.sync=true -e STDERR.sync=true -e load(ARGV.shift)");
+ Map<String, String> map = new HashMap<String, String>();
+ map
+ .put(IRubyLaunchConfigurationConstants.ATTR_RUBY_COMMAND,
+ "ruby");
+ wc
+ .setAttribute(
+ IRubyLaunchConfigurationConstants.ATTR_VM_INSTALL_TYPE_SPECIFIC_ATTRS_MAP,
+ map);
+ wc.setAttribute(IDebugUIConstants.ATTR_LAUNCH_IN_BACKGROUND, true);
+ config = wc.doSave();
+ } catch (CoreException ce) {
+ // ignore for now
+ }
+ return config;
+ }
+
+ private String getServerScript() {
+ IVMInstall vm = RubyRuntime.getDefaultVMInstall();
+ File installLocation = vm.getInstallLocation();
+ String path = installLocation.getAbsolutePath();
+ return path + File.separator + "bin" + File.separator + "gem";
+ }
+
+ public boolean installGem(String name, String version) {
+ try {
+ String command = "install " + name;
+ if (version != null && version.trim().length() > 0) {
+ command += " -v " + version;
+ }
+ ILaunchConfiguration config = createGemLaunchConfiguration(command);
+ ILaunch launch = config.launch(ILaunchManager.RUN_MODE, null);
+ IProcess[] processes = launch.getProcesses();
+ IProcess p = processes[0];
+ IStreamMonitor monitor = p.getStreamsProxy()
+ .getOutputStreamMonitor();
+ final StringBuffer buffer = new StringBuffer();
+ monitor.addListener(new IStreamListener() {
+
+ public void streamAppended(String text, IStreamMonitor monitor) {
+ buffer.append(text);
+ }
+
+ });
+ String contents = null;
+ boolean wroteSelection = false;
+ long start = System.currentTimeMillis();
+ String lastOut = null;
+ while (!p.isTerminated()) {
+ contents = buffer.toString();
+ if (contents != null && contents.trim().length() > 0
+ && !wroteSelection) {
+ // System.out.println(contents);
+ if (contents.contains("Select which gem")) {
+ // Parse out options
+ Map<String, String> options = new HashMap<String, String>();
+
+ String[] lines = contents.split("\n");
+ for (int i = 0; i < lines.length; i++) {
+ String line = lines[i].trim();
+ if (Character.isDigit(line.charAt(0))) {
+ String number = line.substring(0, line
+ .indexOf('.'));
+ int parenIndex = line.indexOf('(');
+ if (parenIndex == -1)
+ continue; // Skip or cancel option
+ String platform = line.substring(
+ parenIndex + 1, line.lastIndexOf(')'));
+ options.put(platform, number);
+ }
+ }
+ // Automatically select the option which matches this
+ // platform.
+ String myPlatform = "ruby";
+ if (Platform.getOS().equals(Constants.OS_WIN32)) {
+ myPlatform = "mswin32";
+ }
+ try {
+ p.getStreamsProxy().write(
+ options.get(myPlatform) + "\r\n");
+ wroteSelection = true;
+ } catch (IOException e) {
+ AptanaRDTPlugin.log(e);
+ }
+ }
+ } else {
+ Thread.yield();
+ if (lastOut != null && !lastOut.equals(buffer.toString())) {
+ start = System.currentTimeMillis(); // restart timeout
+ // if we have
+ // changes in output
+ }
+ if (System.currentTimeMillis() > start + TIMEOUT) {
+ AptanaRDTPlugin.log(new Exception(TIMEOUT_MSG));
+ break;
+ }
+ }
+
+ }
+ } catch (CoreException e) {
+ AptanaRDTPlugin.log(e);
+ return false;
+ }
+ refresh();
+ return true;
+ }
+
+ public boolean removeGem(String name, String version) {
+ try {
+ String command = "uninstall " + name;
+ if (version != null && version.trim().length() > 0) {
+ command += " -v " + version;
+ }
+ ILaunchConfiguration config = createGemLaunchConfiguration(command);
+ config.launch(ILaunchManager.RUN_MODE, null);
+ } catch (CoreException e) {
+ AptanaRDTPlugin.log(e);
+ return false;
+ }
+ refresh(); // FIXME Need to wait until uninstall is finished!
+ return true;
+ }
+
+ public boolean removeGem(String name) {
+ return removeGem(name, null);
+ }
+
+ public Set<Gem> getGems() {
+ return Collections.unmodifiableSortedSet(new TreeSet<Gem>(gems));
+ }
+
+ public static GemManager getInstance() {
+ if (fgInstance == null)
+ fgInstance = new GemManager();
+ return fgInstance;
+ }
+
+ public boolean refresh() {
+ Set<Gem> newGems = loadLocalGems();
+ if (!newGems.isEmpty()) {
+ gems.clear();
+ gems = newGems;
+ informListeners();
+ return true;
+ }
+ return false;
+ }
+
+ private void informListeners() {
+ for (GemListener listener : listeners) {
+ listener.gemsRefreshed();
+ }
+ }
+
+ public void addGemObserver(GemListener listener) {
+ listeners.add(listener);
+ }
+
+ public interface GemListener {
+ public void gemsRefreshed();
+ }
+
+ public Set<Gem> getRemoteGems() {
+ SortedSet<Gem> sorted = new TreeSet<Gem>(remoteGems);
+ SortedSet<Gem> logical = new TreeSet<Gem>();
+ String name = null;
+ Collection<Gem> temp = new HashSet<Gem>();
+ for (Gem gem : sorted) {
+ if (name != null && !gem.getName().equals(name)) {
+ logical.add(LogicalGem.create(temp));
+ temp.clear();
+ }
+ name = gem.getName();
+ temp.add(gem);
+ }
+ return Collections.unmodifiableSortedSet(logical);
+ }
+}
Added: trunk/com.aptana.rdt/src/com/aptana/rdt/internal/gems/GemManagerContentHandler.java
===================================================================
--- trunk/com.aptana.rdt/src/com/aptana/rdt/internal/gems/GemManagerContentHandler.java (rev 0)
+++ trunk/com.aptana.rdt/src/com/aptana/rdt/internal/gems/GemManagerContentHandler.java 2007-05-11 17:13:55 UTC (rev 2461)
@@ -0,0 +1,87 @@
+package com.aptana.rdt.internal.gems;
+
+import java.util.Collections;
+import java.util.HashSet;
+import java.util.Set;
+
+import org.xml.sax.Attributes;
+import org.xml.sax.ContentHandler;
+import org.xml.sax.Locator;
+import org.xml.sax.SAXException;
+
+public class GemManagerContentHandler implements ContentHandler {
+
+ private HashSet<Gem> gems;
+ private String name;
+ private String version;
+ private String description;
+
+ private StringBuffer data;
+ private String platform;
+
+ public void characters(char[] ch, int start, int length) throws SAXException {
+ for (int i = start; i < start + length; i++) {
+ data.append(ch[i]);
+ }
+ }
+
+ public void endDocument() throws SAXException {
+ // do nothing
+ }
+
+ public void endElement(String namespaceURI, String localName, String qName)
+ throws SAXException {
+ if (qName.equals("name")) {
+ name = data.toString();
+ } else if (qName.equals("version")) {
+ version = data.toString();
+ } else if (qName.equals("description")) {
+ description = data.toString();
+ } else if (qName.equals("platform")) {
+ platform = data.toString();
+ } else if (qName.equals("gem")) {
+ gems.add(new Gem(name, version, description, platform));
+ }
+ }
+
+ public void endPrefixMapping(String arg0) throws SAXException {
+ // do nothing
+ }
+
+ public void ignorableWhitespace(char[] arg0, int arg1, int arg2)
+ throws SAXException {
+ // do nothing
+ }
+
+ public void processingInstruction(String arg0, String arg1)
+ throws SAXException {
+ // do nothing
+ }
+
+ public void setDocumentLocator(Locator arg0) {
+ // do nothing
+ }
+
+ public void skippedEntity(String arg0) throws SAXException {
+ // do nothing
+ }
+
+ public void startDocument() throws SAXException {
+ gems = new HashSet<Gem>();
+ }
+
+ public void startElement(String namespaceURI, String localName,
+ String qName, Attributes atts) throws SAXException {
+ data = new StringBuffer();
+ }
+
+ public void startPrefixMapping(String arg0, String arg1)
+ throws SAXException {
+ // do nothing
+ }
+
+ public Set<Gem> getGems() {
+ return Collections.unmodifiableSet(gems);
+ }
+
+}
Added: trunk/com.aptana.rdt/src/com/aptana/rdt/internal/gems/LogicalGem.java
===================================================================
--- trunk/com.aptana.rdt/src/com/aptana/rdt/internal/gems/LogicalGem.java (rev 0)
+++ trunk/com.aptana.rdt/src/com/aptana/rdt/internal/gems/LogicalGem.java 2007-05-11 17:13:55 UTC (rev 2461)
@@ -0,0 +1,40 @@
+package com.aptana.rdt.internal.gems;
+
+import java.util.Collection;
+import java.util.SortedSet;
+import java.util.StringTokenizer;
+import java.util.TreeSet;
+
+public class LogicalGem extends Gem {
+
+ private LogicalGem(String name, String version, String description) {
+ super(name, version, description);
+ }
+
+ public static LogicalGem create(Collection<Gem> gems) {
+ if (gems == null || gems.isEmpty()) throw new IllegalArgumentException("Need a non-null, non-empty Collection of Gems");
+ String name = null;
+ String description = null;
+ String version = "(";
+ for (Gem gem : gems) {
+ if (name == null) name = gem.getName();
+ if (description == null) description = gem.getDescription();
+ version += gem.getVersion() + ", ";
+ }
+ version = version.substring(0, version.length() - 2);
+ version += ')';
+ // XXX Need to take platform into account!!!!!!!!
+ return new LogicalGem(name, version, description);
+ }
+
+ public SortedSet<String> getVersions() {
+ String raw = getVersion().substring(1, getVersion().length() - 1);
+ SortedSet<String> version = new TreeSet<String>();
+ StringTokenizer tokenizer = new StringTokenizer(raw, ",");
+ while (tokenizer.hasMoreTokens()) {
+ version.add(tokenizer.nextToken().trim());
+ }
+ return version;
+ }
+
+}
Added: trunk/com.aptana.rdt/src/com/aptana/rdt/internal/ui/actions/InstallGemActionDelegate.java
===================================================================
--- trunk/com.aptana.rdt/src/com/aptana/rdt/internal/ui/actions/InstallGemActionDelegate.java (rev 0)
+++ trunk/com.aptana.rdt/src/com/aptana/rdt/internal/ui/actions/InstallGemActionDelegate.java 2007-05-11 17:13:55 UTC (rev 2461)
@@ -0,0 +1,67 @@
+/*******************************************************************************
+ * Copyright (c) 2005 RadRails.org and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Common Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *******************************************************************************/
+
+package com.aptana.rdt.internal.ui.actions;
+
+import org.eclipse.jface.action.IAction;
+import org.eclipse.jface.dialogs.Dialog;
+import org.eclipse.jface.viewers.ISelection;
+import org.eclipse.swt.widgets.Display;
+import org.eclipse.ui.IObjectActionDelegate;
+import org.eclipse.ui.IViewActionDelegate;
+import org.eclipse.ui.IViewPart;
+import org.eclipse.ui.IWorkbenchPart;
+
+import com.aptana.rdt.internal.gems.Gem;
+import com.aptana.rdt.internal.gems.GemManager;
+import com.aptana.rdt.ui.gems.InstallGemDialog;
+
+/**
+ * Install a gem
+ *
+ * @author cwilliams
+ */
+public class InstallGemActionDelegate implements IObjectActionDelegate, IViewActionDelegate {
+
+ /**
+ * @see org.eclipse.ui.IObjectActionDelegate#setActivePart(org.eclipse.jface.action.IAction,
+ * org.eclipse.ui.IWorkbenchPart)
+ */
+ public void setActivePart(IAction action, IWorkbenchPart targetPart) {
+
+ }
+
+ /**
+ * @see org.eclipse.ui.IActionDelegate#run(org.eclipse.jface.action.IAction)
+ */
+ public void run(IAction action) {
+ InstallGemDialog dialog = new InstallGemDialog(Display.getCurrent().getActiveShell());
+ if (dialog.open() == Dialog.OK) {
+ final Gem gem = dialog.getGem();
+ Display.getDefault().asyncExec(new Runnable() {
+ public void run() {
+ GemManager.getInstance().installGem(gem.getName(), gem.getVersion());
+ }
+ });
+ }
+ }
+
+ /**
+ * @see org.eclipse.ui.IActionDelegate#selectionChanged(org.eclipse.jface.action.IAction,
+ * org.eclipse.jface.viewers.ISelection)
+ */
+ public void selectionChanged(IAction action, ISelection selection) {
+ }
+
+ /**
+ * @see org.eclipse.ui.IViewActionDelegate#init(org.eclipse.ui.IViewPart)
+ */
+ public void init(IViewPart view) {
+ }
+
+}
Added: trunk/com.aptana.rdt/src/com/aptana/rdt/internal/ui/actions/RefreshGemsActionDelegate.java
===================================================================
--- trunk/com.aptana.rdt/src/com/aptana/rdt/internal/ui/actions/RefreshGemsActionDelegate.java (rev 0)
+++ trunk/com.aptana.rdt/src/com/aptana/rdt/internal/ui/actions/RefreshGemsActionDelegate.java 2007-05-11 17:13:55 UTC (rev 2461)
@@ -0,0 +1,62 @@
+/*******************************************************************************
+ * Copyright (c) 2005 RadRails.org and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Common Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *******************************************************************************/
+
+package com.aptana.rdt.internal.ui.actions;
+
+import org.eclipse.jface.action.IAction;
+import org.eclipse.jface.dialogs.MessageDialog;
+import org.eclipse.jface.viewers.ISelection;
+import org.eclipse.swt.widgets.Display;
+import org.eclipse.ui.IObjectActionDelegate;
+import org.eclipse.ui.IViewActionDelegate;
+import org.eclipse.ui.IViewPart;
+import org.eclipse.ui.IWorkbenchPart;
+
+import com.aptana.rdt.internal.gems.GemManager;
+
+/**
+ * Install a gem
+ *
+ * @author cwilliams
+ */
+public class RefreshGemsActionDelegate implements IObjectActionDelegate,
+ IViewActionDelegate {
+
+ /**
+ * @see org.eclipse.ui.IObjectActionDelegate#setActivePart(org.eclipse.jface.action.IAction,
+ * org.eclipse.ui.IWorkbenchPart)
+ */
+ public void setActivePart(IAction action, IWorkbenchPart targetPart) {
+
+ }
+
+ /**
+ * @see org.eclipse.ui.IActionDelegate#run(org.eclipse.jface.action.IAction)
+ */
+ public void run(IAction action) {
+ if (!GemManager.getInstance().refresh()) {
+ MessageDialog.openError(Display.getCurrent().getActiveShell(), "Unable to refresh local gems", "Sorry we were unable to refresh the list of local gems.");
+ }
+ }
+
+ /**
+ * @see org.eclipse.ui.IActionDelegate#selectionChanged(org.eclipse.jface.action.IAction,
+ * org.eclipse.jface.viewers.ISelection)
+ */
+ public void selectionChanged(IAction action, ISelection selection) {
+
+ }
+
+ /**
+ * @see org.eclipse.ui.IViewActionDelegate#init(org.eclipse.ui.IViewPart)
+ */
+ public void init(IViewPart view) {
+
+ }
+
+}
Added: trunk/com.aptana.rdt/src/com/aptana/rdt/internal/ui/actions/RemoveGemActionDelegate.java
===================================================================
--- trunk/com.aptana.rdt/src/com/aptana/rdt/internal/ui/actions/RemoveGemActionDelegate.java (rev 0)
+++ trunk/com.aptana.rdt/src/com/aptana/rdt/internal/ui/actions/RemoveGemActionDelegate.java 2007-05-11 17:13:55 UTC (rev 2461)
@@ -0,0 +1,80 @@
+/*******************************************************************************
+ * Copyright (c) 2005 RadRails.org and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Common Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *******************************************************************************/
+
+package com.aptana.rdt.internal.ui.actions;
+
+import org.eclipse.jface.action.IAction;
+import org.eclipse.jface.viewers.ISelection;
+import org.eclipse.jface.viewers.IStructuredSelection;
+import org.eclipse.swt.widgets.Display;
+import org.eclipse.ui.IObjectActionDelegate;
+import org.eclipse.ui.IViewActionDelegate;
+import org.eclipse.ui.IViewPart;
+import org.eclipse.ui.IWorkbenchPart;
+
+import com.aptana.rdt.internal.gems.Gem;
+import com.aptana.rdt.internal.gems.GemManager;
+import com.aptana.rdt.ui.gems.GemsView;
+
+/**
+ * Install a gem
+ *
+ * @author cwilliams
+ */
+public class RemoveGemActionDelegate implements IObjectActionDelegate, IViewActionDelegate {
+
+ private IViewPart view;
+ private Gem selectedGem;
+
+ /**
+ * @see org.eclipse.ui.IObjectActionDelegate#setActivePart(org.eclipse.jface.action.IAction,
+ * org.eclipse.ui.IWorkbenchPart)
+ */
+ public void setActivePart(IAction action, IWorkbenchPart targetPart) {
+
+ }
+
+ /**
+ * @see org.eclipse.ui.IActionDelegate#run(org.eclipse.jface.action.IAction)
+ */
+ public void run(IAction action) {
+ Display.getDefault().asyncExec(new Runnable() {
+
+ public void run() {
+ GemManager.getInstance().removeGem(selectedGem.getName());
+ }
+
+ });
+ }
+
+ /**
+ * @see org.eclipse.ui.IActionDelegate#selectionChanged(org.eclipse.jface.action.IAction,
+ * org.eclipse.jface.viewers.ISelection)
+ */
+ public void selectionChanged(IAction action, ISelection selection) {
+ if (view instanceof GemsView) {
+ if (selection != null && !selection.isEmpty()) {
+ if (selection instanceof IStructuredSelection) {
+ IStructuredSelection sel = (IStructuredSelection) selection;
+ Object element = sel.getFirstElement();
+ if (element instanceof Gem) {
+ this.selectedGem = (Gem) element;
+ }
+ }
+ }
+ }
+ }
+
+ /**
+ * @see org.eclipse.ui.IViewActionDelegate#init(org.eclipse.ui.IViewPart)
+ */
+ public void init(IViewPart view) {
+ this.view = view;
+ }
+
+}
Added: trunk/com.aptana.rdt/src/com/aptana/rdt/internal/ui/actions/UpdateGemActionDelegate.java
===================================================================
--- trunk/com.aptana.rdt/src/com/aptana/rdt/internal/ui/actions/UpdateGemActionDelegate.java (rev 0)
+++ trunk/com.aptana.rdt/src/com/aptana/rdt/internal/ui/actions/UpdateGemActionDelegate.java 2007-05-11 17:13:55 UTC (rev 2461)
@@ -0,0 +1,80 @@
+/*******************************************************************************
+ * Copyright (c) 2005 RadRails.org and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Common Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *******************************************************************************/
+
+package com.aptana.rdt.internal.ui.actions;
+
+import org.eclipse.jface.action.IAction;
+import org.eclipse.jface.viewers.ISelection;
+import org.eclipse.jface.viewers.IStructuredSelection;
+import org.eclipse.swt.widgets.Display;
+import org.eclipse.ui.IObjectActionDelegate;
+import org.eclipse.ui.IViewActionDelegate;
+import org.eclipse.ui.IViewPart;
+import org.eclipse.ui.IWorkbenchPart;
+
+import com.aptana.rdt.internal.gems.Gem;
+import com.aptana.rdt.internal.gems.GemManager;
+import com.aptana.rdt.ui.gems.GemsView;
+
+/**
+ * Install a gem
+ *
+ * @author cwilliams
+ */
+public class UpdateGemActionDelegate implements IObjectActionDelegate, IViewActionDelegate {
+
+ private IViewPart view;
+ private Gem selectedGem;
+
+ /**
+ * @see org.eclipse.ui.IObjectActionDelegate#setActivePart(org.eclipse.jface.action.IAction,
+ * org.eclipse.ui.IWorkbenchPart)
+ */
+ public void setActivePart(IAction action, IWorkbenchPart targetPart) {
+
+ }
+
+ /**
+ * @see org.eclipse.ui.IActionDelegate#run(org.eclipse.jface.action.IAction)
+ */
+ public void run(IAction action) {
+ Display.getDefault().asyncExec(new Runnable() {
+
+ public void run() {
+ GemManager.getInstance().upgrade(selectedGem.getName());
+ }
+
+ });
+ }
+
+ /**
+ * @see org.eclipse.ui.IActionDelegate#selectionChanged(org.eclipse.jface.action.IAction,
+ * org.eclipse.jface.viewers.ISelection)
+ */
+ public void selectionChanged(IAction action, ISelection selection) {
+ if (view instanceof GemsView) {
+ if (selection != null && !selection.isEmpty()) {
+ if (selection instanceof IStructuredSelection) {
+ IStructuredSelection sel = (IStructuredSelection) selection;
+ Object element = sel.getFirstElement();
+ if (element instanceof Gem) {
+ this.selectedGem = (Gem) element;
+ }
+ }
+ }
+ }
+ }
+
+ /**
+ * @see org.eclipse.ui.IViewActionDelegate#init(org.eclipse.ui.IViewPart)
+ */
+ public void init(IViewPart view) {
+ this.view = view;
+ }
+
+}
Added: trunk/com.aptana.rdt/src/com/aptana/rdt/ui/gems/GemContentProvider.java
===================================================================
--- trunk/com.aptana.rdt/src/com/aptana/rdt/ui/gems/GemContentProvider.java (rev 0)
+++ trunk/com.aptana.rdt/src/com/aptana/rdt/ui/gems/GemContentProvider.java 2007-05-11 17:13:55 UTC (rev 2461)
@@ -0,0 +1,25 @@
+package com.aptana.rdt.ui.gems;
+
+import java.util.Collection;
+
+import org.eclipse.jface.viewers.IStructuredContentProvider;
+import org.eclipse.jface.viewers.Viewer;
+
+public class GemContentProvider implements IStructuredContentProvider {
+
+ public Object[] getElements(Object inputElement) {
+ Object[] res = null;
+ if (inputElement instanceof Collection) {
+ res = ((Collection) inputElement).toArray();
+ }
+
+ return res;
+ }
+
+ public void inputChanged(Viewer viewer, Object oldInput, Object newInput) {
+ }
+
+ public void dispose() {
+ }
+
+}
Added: trunk/com.aptana.rdt/src/com/aptana/rdt/ui/gems/GemLabelProvider.java
===================================================================
--- trunk/com.aptana.rdt/src/com/aptana/rdt/ui/gems/GemLabelProvider.java (rev 0)
+++ trunk/com.aptana.rdt/src/com/aptana/rdt/ui/gems/GemLabelProvider.java 2007-05-11 17:13:55 UTC (rev 2461)
@@ -0,0 +1,36 @@
+package com.aptana.rdt.ui.gems;
+
+import org.eclipse.jface.viewers.ITableLabelProvider;
+import org.eclipse.jface.viewers.LabelProvider;
+import org.eclipse.swt.graphics.Image;
+
+import com.aptana.rdt.internal.gems.Gem;
+
+public class GemLabelProvider extends LabelProvider implements ITableLabelProvider {
+
+ private static final int NAME_COLUMN = 0;
+ private static final int VERSION_COLUMN = 1;
+ private static final int DESCRIPTION_COLUMN = 2;
+
+ public Image getColumnImage(Object element, int columnIndex) {
+ // TODO Auto-generated method stub
+ return null;
+ }
+
+ public String getColumnText(Object element, int columnIndex) {
+ Gem server = (Gem) element;
+
+ switch (columnIndex) {
+ case NAME_COLUMN:
+ return server.getName();
+ case VERSION_COLUMN:
+ return server.getVersion();
+ case DESCRIPTION_COLUMN:
+ return server.getDescription();
+ default:
+ return "";
+ }
+ }
+
+
+}
Added: trunk/com.aptana.rdt/src/com/aptana/rdt/ui/gems/GemsMessages.java
===================================================================
--- trunk/com.aptana.rdt/src/com/aptana/rdt/ui/gems/GemsMessages.java (rev 0)
+++ trunk/com.aptana.rdt/src/com/aptana/rdt/ui/gems/GemsMessages.java 2007-05-11 17:13:55 UTC (rev 2461)
@@ -0,0 +1,20 @@
+package com.aptana.rdt.ui.gems;
+
+import org.eclipse.osgi.util.NLS;
+
+public class GemsMessages extends NLS {
+
+ private static final String BUNDLE_NAME = GemsMessages.class.getName();
+
+ public static String GemsView_NameColumn_label;
+ public static String GemsView_VersionColumn_label;
+ public static String GemsView_DescriptionColumn_label;
+ public static String InstallGemDialog_dialog_title;
+ public static String InstallGemDialog_version_label;
+ public static String InstallGemDialog_name_label;
+
+ static {
+ NLS.initializeMessages(BUNDLE_NAME, GemsMessages.class);
+ }
+
+}
Added: trunk/com.aptana.rdt/src/com/aptana/rdt/ui/gems/GemsMessages.properties
===================================================================
--- trunk/com.aptana.rdt/src/com/aptana/rdt/ui/gems/GemsMessages.properties (rev 0)
+++ trunk/com.aptana.rdt/src/com/aptana/rdt/ui/gems/GemsMessages.properties 2007-05-11 17:13:55 UTC (rev 2461)
@@ -0,0 +1,7 @@
+GemsView_NameColumn_label=Name
+GemsView_VersionColumn_label=Version
+GemsView_DescriptionColumn_label=Description
+
+InstallGemDialog_dialog_title=Install a gem
+InstallGemDialog_version_label=Version:
+InstallGemDialog_name_label=Gem Name:
\ No newline at end of file
Added: trunk/com.aptana.rdt/src/com/aptana/rdt/ui/gems/GemsView.java
===================================================================
--- trunk/com.aptana.rdt/src/com/aptana/rdt/ui/gems/GemsView.java (rev 0)
+++ trunk/com.aptana.rdt/src/com/aptana/rdt/ui/gems/GemsView.java 2007-05-11 17:13:55 UTC (rev 2461)
@@ -0,0 +1,104 @@
+package com.aptana.rdt.ui.gems;
+
+import org.eclipse.jface.action.ActionContributionItem;
+import org.eclipse.jface.action.IContributionItem;
+import org.eclipse.jface.action.IMenuListener;
+import org.eclipse.jface.action.IMenuManager;
+import org.eclipse.jface.action.MenuManager;
+import org.eclipse.jface.action.Separator;
+import org.eclipse.jface.viewers.TableViewer;
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.layout.GridData;
+import org.eclipse.swt.layout.GridLayout;
+import org.eclipse.swt.widgets.Composite;
+import org.eclipse.swt.widgets.Display;
+import org.eclipse.swt.widgets.Menu;
+import org.eclipse.swt.widgets.Table;
+import org.eclipse.swt.widgets.TableColumn;
+import org.eclipse.ui.IWorkbenchActionConstants;
+import org.eclipse.ui.part.ViewPart;
+import org.rubypeople.rdt.ui.TableViewerSorter;
+
+import com.aptana.rdt.internal.gems.GemManager;
+import com.aptana.rdt.internal.gems.GemManager.GemListener;
+
+public class GemsView extends ViewPart implements GemListener {
+
+ private TableViewer gemViewer;
+
+ @Override
+ public void createPartControl(Composite parent) {
+ parent.setLayout(new GridLayout());
+
+ gemViewer = new TableViewer(parent, SWT.SINGLE | SWT.FULL_SELECTION);
+ Table serverTable = gemViewer.getTable();
+ serverTable.setHeaderVisible(true);
+ serverTable.setLinesVisible(false);
+ serverTable.setLayoutData(new GridData(GridData.FILL_BOTH));
+
+ TableColumn nameColumn = new TableColumn(serverTable, SWT.LEFT);
+ nameColumn.setText(GemsMessages.GemsView_NameColumn_label);
+ nameColumn.setWidth(150);
+
+ TableColumn versionColumn = new TableColumn(serverTable, SWT.LEFT);
+ versionColumn.setText(GemsMessages.GemsView_VersionColumn_label);
+ versionColumn.setWidth(75);
+
+ TableColumn descriptionColumn = new TableColumn(serverTable, SWT.LEFT);
+ descriptionColumn.setText(GemsMessages.GemsView_DescriptionColumn_label);
+ descriptionColumn.setWidth(275);
+
+
+ gemViewer.setLabelProvider(new GemLabelProvider());
+ gemViewer.setContentProvider(new GemContentProvider());
+ TableViewerSorter.bind(gemViewer);
+ getSite().setSelectionProvider(gemViewer);
+
+ gemViewer.setInput(GemManager.getInstance().getGems());
+ createPopupMenu();
+
+ GemManager.getInstance().addGemObserver(this);
+ }
+
+ @Override
+ public void setFocus() {
+ // do nothing
+ }
+
+ /**
+ * Creates and registers the context menu
+ */
+ private void createPopupMenu() {
+ MenuManager menuMgr = new MenuManager("#PopupMenu");
+ menuMgr.setRemoveAllWhenShown(true);
+
+ menuMgr.addMenuListener(new IMenuListener() {
+ public void menuAboutToShow(IMenuManager manager) {
+ IContributionItem[] items = getViewSite().getActionBars().getToolBarManager().getItems();
+ for (int i = 0; i < items.length; i++) {
+ if (items[i] instanceof ActionContributionItem) {
+ ActionContributionItem aci = (ActionContributionItem) items[i];
+ manager.add(aci.getAction());
+ }
+ }
+ }
+ });
+ menuMgr.add(new Separator(IWorkbenchActionConstants.MB_ADDITIONS)); // Allow other plugins to add here
+ Menu menu = menuMgr.createContextMenu(gemViewer.getControl());
+ gemViewer.getControl().setMenu(menu);
+ getSite().registerContextMenu(menuMgr, gemViewer);
+ }
+
+ public void gemsRefreshed() {
+ Display.getDefault().asyncExec(new Runnable() {
+
+ public void run() {
+ gemViewer.setInput(GemManager.getInstance().getGems());
+ gemViewer.refresh();
+ }
+
+ });
+
+ }
+
+}
Added: trunk/com.aptana.rdt/src/com/aptana/rdt/ui/gems/InstallGemDialog.java
===================================================================
--- trunk/com.aptana.rdt/src/com/aptana/rdt/ui/gems/InstallGemDialog.java (rev 0)
+++ trunk/com.aptana.rdt/src/com/aptana/rdt/ui/gems/InstallGemDialog.java 2007-05-11 17:13:55 UTC (rev 2461)
@@ -0,0 +1,176 @@
+package com.aptana.rdt.ui.gems;
+
+import java.util.SortedSet;
+
+import org.eclipse.jface.dialogs.Dialog;
+import org.eclipse.jface.dialogs.IDialogConstants;
+import org.eclipse.jface.viewers.ISelection;
+import org.eclipse.jface.viewers.ISelectionChangedListener;
+import org.eclipse.jface.viewers.IStructuredSelection;
+import org.eclipse.jface.viewers.SelectionChangedEvent;
+import org.eclipse.jface.viewers.TableViewer;
+import org.eclipse.jface.viewers.Viewer;
+import org.eclipse.jface.viewers.ViewerFilter;
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.events.ModifyEvent;
+import org.eclipse.swt.events.ModifyListener;
+import org.eclipse.swt.layout.GridData;
+import org.eclipse.swt.layout.GridLayout;
+import org.eclipse.swt.widgets.Combo;
+import org.eclipse.swt.widgets.Composite;
+import org.eclipse.swt.widgets.Control;
+import org.eclipse.swt.widgets.Label;
+import org.eclipse.swt.widgets.Shell;
+import org.eclipse.swt.widgets.Table;
+import org.eclipse.swt.widgets.TableColumn;
+import org.eclipse.swt.widgets.Text;
+import org.rubypeople.rdt.ui.TableViewerSorter;
+
+import com.aptana.rdt.internal.gems.Gem;
+import com.aptana.rdt.internal.gems.GemManager;
+import com.aptana.rdt.internal.gems.LogicalGem;
+
+public class InstallGemDialog extends Dialog {
+
+ private Text nameText;
+ private Combo versionCombo;
+
+ private String name;
+ private String version;
+
+ private boolean filterByText = true;
+
+ private TableViewer gemViewer;
+ private GemContentProvider contentProvider;
+
+ public InstallGemDialog(Shell parentShell) {
+ super(parentShell);
+ contentProvider = new GemContentProvider();
+ }
+
+ @Override
+ protected Control createDialogArea(Composite parent) {
+ getShell().setText(GemsMessages.InstallGemDialog_dialog_title);
+ Composite control = new Composite(parent, SWT.NULL);
+ GridLayout layout = new GridLayout();
+ layout.numColumns = 2;
+ control.setLayout(layout);
+
+ Label nameLabel = new Label(control, SWT.LEFT);
+ nameLabel.setText(GemsMessages.InstallGemDialog_name_label);
+
+ nameText = new Text(control, SWT.BORDER);
+ GridData nameTextData = new GridData();
+ nameTextData.widthHint = 150;
+ nameText.setLayoutData(nameTextData);
+ nameText.addModifyListener(new ModifyListener() {
+
+ public void modifyText(ModifyEvent e) {
+ if (filterByText) {
+ getShell().getDisplay().syncExec(new Runnable() {
+
+ public void run() {
+ gemViewer.refresh();
+ }
+ });
+ }
+ filterByText = true;
+ }
+
+ });
+
+ Label versionLabel = new Label(control, SWT.LEFT);
+ versionLabel.setText(GemsMessages.InstallGemDialog_version_label);
+
+ versionCombo = new Combo(control, SWT.DROP_DOWN);
+ GridData versionComboData = new GridData();
+ versionComboData.widthHint = 100;
+ versionCombo.setLayoutData(versionComboData);
+
+ gemViewer = new TableViewer(parent, SWT.SINGLE | SWT.FULL_SELECTION);
+ Table serverTable = gemViewer.getTable();
+ serverTable.setHeaderVisible(true);
+ serverTable.setLinesVisible(false);
+ GridData data = new GridData(GridData.FILL_HORIZONTAL);
+ data.heightHint = 400;
+ serverTable.setLayoutData(data);
+
+ TableColumn nameColumn = new TableColumn(serverTable, SWT.LEFT);
+ nameColumn.setText(GemsMessages.GemsView_NameColumn_label);
+ nameColumn.setWidth(150);
+
+ TableColumn versionColumn = new TableColumn(serverTable, SWT.LEFT);
+ versionColumn.setText(GemsMessages.GemsView_VersionColumn_label);
+ versionColumn.setWidth(75);
+
+ TableColumn descriptionColumn = new TableColumn(serverTable, SWT.LEFT);
+ descriptionColumn
+ .setText(GemsMessages.GemsView_DescriptionColumn_label);
+ descriptionColumn.setWidth(275);
+
+ gemViewer.setLabelProvider(new GemLabelProvider());
+ gemViewer.setContentProvider(contentProvider);
+ TableViewerSorter.bind(gemViewer);
+ gemViewer.setInput(GemManager.getInstance().getRemoteGems());
+ gemViewer.addFilter(new MyViewerFilter(nameText));
+
+ gemViewer.addSelectionChangedListener(new ISelectionChangedListener() {
+
+ public void selectionChanged(SelectionChangedEvent event) {
+ ISelection selection = event.getSelection();
+ if (selection instanceof IStructuredSelection) {
+ IStructuredSelection structured = (IStructuredSelection) selection;
+ LogicalGem gem = (LogicalGem) structured.getFirstElement();
+ SortedSet<String> versions = gem.getVersions();
+ filterByText = false; // don't filter list when I programmatically set text
+ nameText.setText(gem.getName());
+ versionCombo.removeAll();
+ String lastVersion = null;
+ for (String version : versions) {
+ versionCombo.add(version);
+ lastVersion = version;
+ }
+ versionCombo.setText(lastVersion);
+ }
+ }
+
+ });
+
+ return control;
+ }
+
+ /**
+ * @see org.eclipse.jface.dialogs.Dialog#buttonPressed(int)
+ */
+ public void buttonPressed(int buttonId) {
+ if (buttonId == IDialogConstants.OK_ID) {
+ name = nameText.getText();
+ version = versionCombo.getText();
+ okPressed();
+ } else if (buttonId == IDialogConstants.CANCEL_ID) {
+ cancelPressed();
+ }
+ }
+
+ public Gem getGem() {
+ return new Gem(name, version, "");
+ }
+
+ private static class MyViewerFilter extends ViewerFilter {
+
+ private Text text;
+
+ public MyViewerFilter(Text text) {
+ this.text = text;
+ }
+
+ @Override
+ public boolean select(Viewer viewer, Object parentElement, Object element) {
+ Gem gem = (Gem) element;
+ // TODO If there's no text show nothing?
+ return gem.getName().toLowerCase().startsWith(text.getText().toLowerCase());
+ }
+
+ }
+
+}
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|
|
From: <caw...@us...> - 2007-05-10 19:36:14
|
Revision: 2460
http://svn.sourceforge.net/rubyeclipse/?rev=2460&view=rev
Author: cawilliams
Date: 2007-05-10 12:36:12 -0700 (Thu, 10 May 2007)
Log Message:
-----------
Removed Paths:
-------------
trunk/com.aptana.rdt/icons/16_32.bmp
trunk/com.aptana.rdt/icons/16_8.bmp
trunk/com.aptana.rdt/icons/24_8.bmp
trunk/com.aptana.rdt/icons/32_32.bmp
trunk/com.aptana.rdt/icons/32_8.bmp
trunk/com.aptana.rdt/icons/48_32.bmp
trunk/com.aptana.rdt/icons/48_8.bmp
trunk/com.aptana.rdt/icons/alt_launcher.ico
trunk/com.aptana.rdt/icons/alt_launcher.xpm
Deleted: trunk/com.aptana.rdt/icons/16_32.bmp
===================================================================
(Binary files differ)
Deleted: trunk/com.aptana.rdt/icons/16_8.bmp
===================================================================
(Binary files differ)
Deleted: trunk/com.aptana.rdt/icons/24_8.bmp
===================================================================
(Binary files differ)
Deleted: trunk/com.aptana.rdt/icons/32_32.bmp
===================================================================
(Binary files differ)
Deleted: trunk/com.aptana.rdt/icons/32_8.bmp
===================================================================
(Binary files differ)
Deleted: trunk/com.aptana.rdt/icons/48_32.bmp
===================================================================
(Binary files differ)
Deleted: trunk/com.aptana.rdt/icons/48_8.bmp
===================================================================
(Binary files differ)
Deleted: trunk/com.aptana.rdt/icons/alt_launcher.ico
===================================================================
(Binary files differ)
Deleted: trunk/com.aptana.rdt/icons/alt_launcher.xpm
===================================================================
--- trunk/com.aptana.rdt/icons/alt_launcher.xpm 2007-05-10 19:36:00 UTC (rev 2459)
+++ trunk/com.aptana.rdt/icons/alt_launcher.xpm 2007-05-10 19:36:12 UTC (rev 2460)
@@ -1,342 +0,0 @@
-/* XPM */
-static char *alt_launcher[] = {
-/* width height ncolors chars_per_pixel */
-"128 128 208 2",
-/* colors */
-"AA c #FFFFFFFFFFFF",
-"BA c #FFFFF7F7ADAD",
-"CA c #FFFFEFEFB5B5",
-"DA c #FFFFEFEF9494",
-"EA c #FFFFE7E76B6B",
-"FA c #FFFFE7E75A5A",
-"GA c #FFFFDEDE9C9C",
-"HA c #FFFFDEDE7B7B",
-"IA c #FFFFDEDE4242",
-"JA c #FFFFDEDE3131",
-"KA c #FFFFCECE4A4A",
-"LA c #FFFFB5B56B6B",
-"MA c #FFFFB5B54242",
-"NA c #FFFF94945A5A",
-"OA c #FFFF8C8C6B6B",
-"PA c #FFFF73737B7B",
-"AB c #FFFF73735A5A",
-"BB c #FFFF63636B6B",
-"CB c #FFFF5A5A5252",
-"DB c #F7F7EFEFEFEF",
-"EB c #F7F7DEDEDEDE",
-"FB c #F7F7DEDE2121",
-"GB c #F7F7CECECECE",
-"HB c #F7F7CECE2121",
-"IB c #F7F7B5B5B5B5",
-"JB c #F7F79C9C3131",
-"KB c #F7F78C8C3131",
-"LB c #F7F773736B6B",
-"MB c #F7F76B6B3939",
-"NB c #F7F75A5A6363",
-"OB c #F7F75A5A4242",
-"PB c #F7F74A4A5252",
-"AC c #F7F74A4A4242",
-"BC c #F7F739393939",
-"CC c #EFEFD6D61818",
-"DC c #EFEFB5B5B5B5",
-"EC c #EFEFB5B52121",
-"FC c #EFEF84848484",
-"GC c #EFEF7B7B3131",
-"HC c #EFEF73737373",
-"IC c #E7E7E7E7EFEF",
-"JC c #E7E7DEDEDEDE",
-"KC c #E7E7CECEC6C6",
-"LC c #E7E7C6C61818",
-"MC c #E7E7BDBDC6C6",
-"NC c #E7E7B5B51010",
-"OC c #E7E7A5A5A5A5",
-"PC c #E7E79C9C1818",
-"AD c #E7E794949494",
-"BD c #E7E78C8C2929",
-"CD c #E7E763636363",
-"DD c #E7E752525A5A",
-"ED c #E7E752524242",
-"FD c #E7E752523131",
-"GD c #E7E742424A4A",
-"HD c #E7E742423131",
-"ID c #E7E739394242",
-"JD c #E7E739393131",
-"KD c #E7E729293131",
-"LD c #DEDEDEDECECE",
-"MD c #DEDEBDBDB5B5",
-"ND c #DEDEBDBD1010",
-"OD c #DEDEADAD1010",
-"PD c #DEDEA5A5ADAD",
-"AE c #DEDE9C9CA5A5",
-"BE c #DEDE63636B6B",
-"CE c #DEDE29292929",
-"DE c #D6D6ADAD9494",
-"EE c #D6D6ADAD2121",
-"FE c #D6D68C8C9494",
-"GE c #D6D684841818",
-"HE c #D6D65A5A5A5A",
-"IE c #D6D64A4A5252",
-"JE c #D6D64A4A4242",
-"KE c #D6D64A4A3131",
-"LE c #D6D639394242",
-"ME c #D6D639393939",
-"NE c #D6D639392929",
-"OE c #CECECECED6D6",
-"PE c #CECEC6C6C6C6",
-"AF c #CECEADADB5B5",
-"BF c #CECEADAD1010",
-"CF c #CECEA5A52121",
-"DF c #CECE9C9C1010",
-"EF c #CECE84848484",
-"FF c #CECE7B7B7B7B",
-"GF c #CECE6B6B6B6B",
-"HF c #CECE21212929",
-"IF c #C6C6BDBDADAD",
-"JF c #C6C6B5B59C9C",
-"KF c #C6C6A5A5A5A5",
-"LF c #C6C69C9CA5A5",
-"MF c #C6C69C9C9494",
-"NF c #C6C69C9C7B7B",
-"OF c #C6C69C9C2929",
-"PF c #C6C652522929",
-"AG c #C6C631312929",
-"BG c #BDBDBDBDC6C6",
-"CG c #BDBDADADA5A5",
-"DG c #BDBD9C9C4242",
-"EG c #BDBD9C9C1010",
-"FG c #BDBD73732121",
-"GG c #BDBD52523939",
-"HG c #BDBD4A4A5252",
-"IG c #BDBD42424A4A",
-"JG c #BDBD42423939",
-"KG c #BDBD31313939",
-"LG c #BDBD29293131",
-"MG c #BDBD29292121",
-"NG c #B5B5BDBDBDBD",
-"OG c #B5B5A5A58484",
-"PG c #B5B59C9C6B6B",
-"AH c #B5B594949494",
-"BH c #B5B594945252",
-"CH c #B5B594943939",
-"DH c #B5B58C8C1818",
-"EH c #B5B584848C8C",
-"FH c #B5B57B7B7B7B",
-"GH c #B5B563636363",
-"HH c #B5B531312929",
-"IH c #B5B518182121",
-"JH c #ADADADADB5B5",
-"KH c #ADADADADA5A5",
-"LH c #ADAD9C9C7373",
-"MH c #ADAD7B7B8484",
-"NH c #ADAD73737373",
-"OH c #ADAD63636B6B",
-"PH c #ADAD4A4A4A4A",
-"AI c #ADAD39393939",
-"BI c #ADAD29293131",
-"CI c #ADAD21212121",
-"DI c #A5A58C8C6363",
-"EI c #A5A58C8C5A5A",
-"FI c #A5A584849C9C",
-"GI c #A5A584841818",
-"HI c #A5A57B7B3939",
-"II c #A5A57B7B2929",
-"JI c #A5A55A5A6363",
-"KI c #A5A552525A5A",
-"LI c #9C9CA5A5A5A5",
-"MI c #9C9C9C9CADAD",
-"NI c #9C9C94949494",
-"OI c #9C9C73737373",
-"PI c #9C9C73735252",
-"AJ c #9C9C63636B6B",
-"BJ c #9C9C4A4A4A4A",
-"CJ c #9C9C39393939",
-"DJ c #9C9C31312929",
-"EJ c #949429293939",
-"FJ c #949421212121",
-"GJ c #8C8C42425252",
-"HJ c #8C8C39393939",
-"IJ c #8C8C29292929",
-"JJ c #84848C8C8C8C",
-"KJ c #84847B7B7B7B",
-"LJ c #84845A5A5A5A",
-"MJ c #848439394A4A",
-"NJ c #848429293131",
-"OJ c #848418181818",
-"PJ c #7B7B84848484",
-"AK c #7B7B84847B7B",
-"BK c #7B7B7B7B7B7B",
-"CK c #7B7B6B6B8484",
-"DK c #7B7B39394A4A",
-"EK c #7B7B29292929",
-"FK c #73737B7B8C8C",
-"GK c #73735A5A7373",
-"HK c #737339393939",
-"IK c #737329294A4A",
-"JK c #6B6B73737373",
-"KK c #6B6B5A5A7373",
-"LK c #6B6B4A4A5252",
-"MK c #6B6B18181818",
-"NK c #636363637B7B",
-"OK c #636363636B6B",
-"PK c #63635A5A5A5A",
-"AL c #636339393939",
-"BL c #636329292929",
-"CL c #5A5A52526B6B",
-"DL c #5A5A21212121",
-"EL c #5A5A10101010",
-"FL c #52525A5A5A5A",
-"GL c #52524A4A6363",
-"HL c #525242425252",
-"IL c #525242424A4A",
-"JL c #525229294242",
-"KL c #4A4A52524A4A",
-"LL c #4A4A42423939",
-"ML c #4A4A21212121",
-"NL c #4A4A10101010",
-"OL c #424242425252",
-"PL c #424231314242",
-"AM c #393942424242",
-"BM c #393939393939",
-"CM c #393929292929",
-"DM c #393910101818",
-"EM c #313139395252",
-"FM c #313139394242",
-"GM c #313108081010",
-"HM c #292921212929",
-"IM c #212129293939",
-"JM c #212121211818",
-"KM c #181821211818",
-"LM c #181818182929",
-"MM c #181810101818",
-"NM c #181810100808",
-"OM c #080810101818",
-"PM c #000000000000",
-/* pixels */
-"AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAICJKOKKHAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA",
-"AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGNIJCAAAAAAAAICBMMMLMMMFLICAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA",
-"AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAOEBMPMLMOMNIAAAAAAPJOMOMFLMMMMFLICAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA",
-"AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAICAMOMMMPMPMHMICAAAANKPMNMKMPMKMPMILAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA",
-"AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPJPMOMPMKMMMKMNGAAAAJJOMPMNMMMPMKMMMJKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA",
-"AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAICHMLMPMKMPMMMPMNIAAAANGPMNMMMNMKMMMPMJMNGAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA",
-"AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAALIOMPMMMPMKMPMKMFLAAAALDOMPMOMMMJMMMMMMMKLAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA",
-"AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFLMMKMPMMMNMMMPMBMICAAICPMMMPMHMGLIMKMPMDMNGAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA",
-"AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAICOMOMNMKMOMNMPMMMMMPEAAJCOMPMKMLMBGCLOMOMKMOKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA",
-"AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGOMMMMMMMKMOMKMPMMMAKAAICPMOMNMOMOKCLMMKMPMBMICAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA",
-"AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANIOMMMKMHMBMKMMMPMKMBMAAPEOMPMOMMMHMHMOMPMKMMMNGAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA",
-"AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAJKKMPMMMBMKLHMNMKMPMMMNGPEOMKMMMPMOMKMNMMMPMNMJJAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA",
-"AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACLOMKMMMHMPJFMMMOMNMMMFLNGPMMMPMJMMMPMKMOMMMNMFLAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA",
-"AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFLOMMMPMBMJHPJHMPMMMPMHMJKMMNMJMMMPMKMPMNMNMMMCMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA",
-"AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFLPMMMKMLMKHPEIMOMPMKMMMLLJMDMDLDLMKEKEKOJBLMKDLAHICAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA",
-"AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFLKMPMMMLMAMFKIMMMKMPMNMHMHKDJCIFJCICICICICIHHCIAIAIJIDEICAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA",
-"AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACLOMMMPMJMHMAMHMMMPMKMPMJMALDJHHMGAIMGMGAIMGCIAIMGCIAIBIPHFHJCAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA",
-"AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAJKMMPMKMMMHMFLLLMMKMPMMMKMMLCJLGKGMGHFKGHFKGKGMGMGKGMGKGLGBIAIFHJCAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA",
-"AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANIOMPMMMMMHMNIOKKMMMMMPMMMMLAIKGMEMEKGAGMEHFAGMELGAGLGMGKGHHKGAIPHMFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA",
-"AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGPMMMKMPMMMBKKHIMKMPMMMPMEKHHKGMEMEMEMEAGMEMEHFMEHFMEMEMGMEHHKGMGAIJIJCAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA",
-"AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAOEKMPMMMKMMMFLLDHMMMMMNMNLHHMEMEMELEMEIDMEMEMEMEMEMEMEMGLELGMEHHKGKGHHPHMDAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA",
-"AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAICPIDMMMPMNMMMCMPEBMOMDMNLAIMEMEMELELEGDMEGDLEJDMEMEMEMEMEMEKEHFMEHHMEKGCIPHKFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA",
-"AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKCBJEJELMMNMOMNMJMKJBMMLEKJEMELEJEGDGDHDGDGDHDGDGDMEJDLEMEMEMEMEMEMEMEHHMEKGHHPHMFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA",
-"AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKCEJBIMGCIEKDMNMDMDLHKKIHEDDHEGDHEGDGDGDGDGDHDGDGDHDGDIDJEIDJDMEMEMEMEMEMEHHMEHHKGBIMFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA",
-"AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMCBJLGLGLGLGMGMEKGKEIECDLBLBCDDDDDOBPBJEGDGDGDGDGDGDGDGDGDJDGDMEIDMEJDMEMEMEMEAGMEHHKGAIKFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA",
-"AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAOEBJCILGMELGMEMEHFMEJEDDCDHCHCNBCBEDPBGDGDGDGDGDGDGDGDGDGDHDGDGDHDGDJDLEJDMEMEMEMEMEMEMELGPHKCAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA",
-"AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAICKILGLGKGHFMEMEMELEIDGDDDCBDDDDDDPBPBJEEDGDEDGDEDJEGDGDHDGDGDHDGDLEHDGDHDLEJDMEMEMEMEKGMEKGLGPHICAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA",
-"AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANHLGBIMEMEMEMEMELEHDGDGDGDGDDDPBACHEEDPBLEDJEJAILEJEKEGDGDGDJEPBHDGDGDGDIDIDJEIDJDMEMEMEKGMEKGJGHGAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA",
-"AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAILGMELGMEMEMEIDJDGDGDGDOBPBGDCBPBPBIEIGMKBLNLDMDMNLNJHHJEJEGDJEIDGDHDGDHDGDIDHDLEMEMEMEMEMEKGKGJGAHAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA",
-"AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAICBJLGKGLGKDMEMEIDMEGDGDGDACGDGDCBJEPBJEMEMKPHJEJEAIDLDMDMDMGMIJGDGDGDGDGDHDGDGDIDJEHDGDJDMEMEAGMEMEAIKGJCAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA",
-"AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEHAIMGMEMEMEMEMEIDGDGDGDHDGDGDACPBPBHELENLAIGDIEPBIEEDIEAICJFJCIJEGDGDHDGDGDGDHDGDIDIDMEGDMEMEMEMEMEKGJGOHAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA",
-"AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAJCPHLGLGMEHFMEMEJDGDGDHDGDACGDACDDGDIEMEELPHGDHEPBHEGDHEIEJEJEHEJEGDEDGDPBACGDHDGDGDGDHDGDMEIDJDMEMEMEMEKGAIPDAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA",
-"AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEHBIKGMEHFLEMEIDIDHDGDGDACGDGDEDACDDJEDLBIIEDDDDDDGDHEPBHEIEJEJEPBIEGDGDGDGDGDGDGDHDGDIDHDGDKEIDMEKEMEAGKEKGKIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA",
-"AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABJCIMEHFMEMEIDLEHDGDGDGDGDGDGDPBPBLEOJBIIEDDEDDDEDHEHEKIBJDKDKGJKIHEJEJEEDGDACGDGDPBHDGDGDJDIDKEIDMEMEKEKGKGGGNFIFKCLDICICICICDBICICAAICAAAAAAAAAAAAAAAAAAAA",
-"AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAALFBIKGMGMEMEMEJDIDGDIDGDACGDOBGDGDJEIJAIGDDDEDNBHEHGMJILJLOLKKCLGLOLLKKIHEGDGDGDHDACIDGDGDHDGDIDIDGDMEMELEKEPFFGOFDGEIDGDGEIBHDIEIPGEIEIBHEIPGIFAAAAAAAAAAAAAA",
-"AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAJLGKGHFMEKDJDLEGDJDGDACGDPBIDOBGDBIKGGDDDDDPBBEBJHLKKLFOEDBICAAICBGCMILCJJEGDGDGDGDGDGDHDIDGDHDGDJEHDLEKEPFDFBFDFDHDFDFFGOFCHFGOFFGOFOFDFEECHEIICAAAAAAAAAAAA",
-"AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADBCJLGHFMEHFKELEJDIDGDGDGDGDACPBPBLELEDDEDDDDDBEDKFIJCAAICAAAAAAICPEEMLMDMMLJEGDEDACGDGDACGDHDGDGDHDIDJEHDFDEEODODBFODDFBFBFDFBFBFEGBFPCNDEEEECFDGIFAAAAAAAAAAAA",
-"AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDLGHHLGMEMELEJDLEGDGDHDGDACGDGDPBACDDACNBOBDDMJAFAAAAAAAAAAAAICAAFKIMDMMMDMAIEDGDGDGDACGDHDGDGDHDHDGDLEKEJBECEEODEEODODCFODBFBFPCBFECNDECNDECCFCHOGAAAAAAAAAAAA",
-"AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFIMGHFMEHFMEMELEJDIDGDPBGDACACPBPBDDCBDDPBDDGDEKJHAAAAAAAAAAAAAAAAMILMKMDMNLJGPBGDEDACGDACGDGDHDGDGDHDGDGCCFLCNCECNDECECNDEEODEENDECHBHBCFLCNDCFOFLHAAAAAAAAAAAA",
-"AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKIBIMEMGMEKDMEJDIDGDACGDGDACDDGDPBCBPBCBDDCBDDLEIKCKPEAAAAAAAAAAAAICCKHMDMEKJEGDDDACGDACGDACHDACGDHDJEFDEECCECECHBECECNDEENDECNDHBFBCFHBLCLCCFBFOFDIAAAAAAAAAAAA",
-"AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAILGLGHFMEMEMEIDJDGDGDACACGDACCBPBPBDDCBCBPBDDDDJEHJHLKKMIBGICAAOEOEICPLBLHFHEGDACPBGDOBGDACGDGDACGDHDJBECHBNDECCFLCHBECNDECNCJAFBFBFBFBLCNDNDOFGIPGAAAAAAAAAAAA",
-"AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAICBIMGHFMEKDMEIDJDIDIDHDGDGDPBACPBPBDDCBPBCBNBABDDNBIELEBJDKLKGKGKGLDKDKBJMEDDPBEDPBPBACPBACGDACHDGDFDEDECHBECHBCFHBHBNDLCECHBFBHBJAFBFBLCLCCFBFBFDHDIAAAAAAAAAAAA",
-"AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDBILGMEHFMEMEMEJDIDGDACACGDACPBDDOBCBNBNBCBNBNBABNBBBHEPBBEJEIELEIEIENBIEPBDDCBCBPBPBGDGDACACGDACGDGDKBJAECHBECHBHBECHBHBHBHBJAFBFBJACFFBLCLCBFDFGIOGAAAAAAAAAAAA",
-"AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKFAIHFMGMEMEKDJDIDIDACGDIDACGDCBPBPBNBCBCBNBNBNBCBBBNBNBCDNBNBNBNBBBDDNBCBDDCBPBNBDDGDPBACACGDACGDEDFDJBHBCFHBECFBCFHBECHBFBJAJAJAFBFBFBLCECNDBFDFGIPEAAAAAAAAAAAA",
-"AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMFLGLGHFMEKDMEMEJDIDIDACGDPBPBACCBPBCBNBNBNBBBABNBBBBBBBBBBBBBCDBBCDABNBNBCBCBDDCBPBCBGDCBGDACGDACHDGCJAECFBECFBECFBHBJAJAJAJAJAFBJACFCCFBNDCFNDEGHIICAAAAAAAAAAAA",
-"AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHLGMGMECEMEMEIDJDGDGDIDACGDPBPBPBCBNBPBNBABBBNBBBABBBBBABBBBBBBABBBNBBBNBNBNBCBPBCBPBCBACPBACACGDFDNAHBECJAFBECJAJAIAEAEAJAJAJAFBFBFBFBLCCFNDBFDHEIAAAAAAAAAAAAAA",
-"AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFHIHHFMEAGMEJDJDIDJDACGDACACPBPBCBPBCBNBNBNBBBBBBBBBBBLBBBLBBBBBBBBBBBBBBBABNBNBCBPBCBPBPBACPBACACEDHBJAHBECJAJAJAIALDBAFAFBFBFBJACFFBLCLCLCBFEGGILDAAAAAAAAAAAAAA",
-"AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMHMGKGHFKDMEKDMEIDIDIDACGDPBACPBPBCBNBNBNBABBBBBLBBBLBBBPALBPALBPALBLBBBBBNBCBNBCBNBCBPBACPBACGDCBKBJAECJAJAJAJAFAEAFAFAFBFBJAFBFBFBFBLCECNDEEEGNFAAAAAAAAAAAAAAAA",
-"AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEHMGMGMEHFMEMEJDIDJDIDACACGDPBCBPBNBCBNBCBNBBBLBBBLBPABBLBPALBPALBBBPALBBBBBBBCBNBCBPBCBPBCBACACABMAMAJAJAKAFADACADAJAFBJAJAFBJACFFBCFCCNDBFDFCHIFAAAAAAAAAAAAAAAA",
-"AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHBIHFHFMEKDJDJDIDIDIDACIDACACPBPBCBNBCBBBBBBBBBLBLBBBPAPAPAPALBPAPABBLBLBBBBBBBNBNBCBCBPBACPBOBEDHAKAFAKAHADADAEAJAJAJAJAFBFBFBFBFBCCECNDECCFOFPGKCAAAAAAAAAAAAAA",
-"AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKFBILGHFMEKDMEJDIDIDACIDPBACPBACCBPBCBNBBBBBBBLBBBPALBLBPALBPAPALBPAPAPALBBBBBBBCBNBCBPBPBPBACPBNAGACAGADAEAEAIAJAJAJAFBJAHBJACFFBHBHBCFNDBFEEOFDGPIAAAAAAAAAAAAAA",
-"AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKCBIMGMEHFMEKDIDJDJDIDIDACPBACPBPBCBNBNBCBABLBBBLBLBBBPALBPALBPAPALBPALBPALBBBBBNBCBNBCBPBPBACACOACACAHAFAIAKAJAJAJAECJAHBJAHBFBHBFBCFFBHBECECECGIEIAAAAAAAAAAAAAA",
-"AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAICEJHFHFMECEMEKDIDIDJDACIDACPBPBCBPBCBNBNBNBBBBBBBPALBPABBPAPALBPALBPAPALBBBLBBBBBNBCBNBPBACPBACACNAIAKAJAECJAECMAJAECJAJAHBJAJAFBJAFBHBCFCCNDBFGIJFAAAAAAAAAAAAAA",
-"AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABJMGAGHFMEKDMEJDIDACIDACACPBACPBPBNBCBCBBBBBBBLBBBPABBPALBPAPALBPALBPABBPABBBBBBCBNBPBPBPBACACPBGCMAJAMALAHAKAFAKAIAJAJAJAJAFBJAHBFBFBCCHBBFEGHIAAAAAAAAAAAAAAAA",
-"AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANHLGHFAGKDMEKDIDJDIDACIDACACPBPBCBPBCBNBCBBBBBBBLBBBLBPAPALBPAPAPALBPALBBBLBABCBNBCBCBPBACPBACACCBLALAEAIAKAGAGABAFAJAJAJAFBJAFBCFFBNDNDBFOFGIPEICAAAAAAAAAAAAAA",
-"AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDBIHFMEHFKDMEJDIDKDIDACACPBACPBPBCBCBNBNBNBABLBBBBBPALBLBPABBPALBPALBLBBBBBNBNBNBNBPBPBPBACACACDDABHAGACACABAEAIAJAJAFBJAFBCFHBFBNDBFCFEGHILHAAAAAAAAAAAAAAAAAA",
-"AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAICCJMGHFMEKDJDKDIDACKDACACACPBACPBPBCBCBNBNBNBBBBBLBBBBBPALBPALBPABBPABBLBBBBBABCBNBCBPBACPBACACCBOAGACACADAFAJAJAHBHBHBCFFBCCNDBFEEODOFHIOGAAAAAAAAAAAAAAAAAAAA",
-"AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEHLGHFCEMEKDIDKDIDACIDACACACACPBPBNBCBNBCBNBCBABBBBBPABBLBBBLBBBLBLBBBBBBBCBNBNBCBPBPBPBACACPBCBHCLALAKAJAHBJAFBCFJAHBFBNDECODEEBFFGHIIFAAAAAAAAAAAAAAAAAAAAAA",
-"AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAJCCIHFMECEMEJDJDIDIDACACACACPBACPBPBPBCBNBNBBBNBBBABBBBBBBLBPABBBBBBBBABCBBBCBNBNBPBPBACPBACACPBPBCBMAJAECJAECJAHBCFECNDECBFBFOFFGPGOEAAAAAAAAAAAAAAAAAAAAAAAA",
-"AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGHKGHFHFKDKDIDBCKDACIDACACACACACPBCBNBCBNBCBNBABNBBBLBBBBBNBABBBBBABNBNBCBNBCBPBPBACPBACACACPBCBPBHDJBJAECHBNDECHBNDODBFDFOFHIIFAAAAAAAAAAAAAAAAAAAAAAAAAAAA",
-"AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAJCLIKHICAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAJCCIMEKDMEKDKDIDIDBCACIDACACPBACPBPBPBCBCBNBNBNBBBCBBBBBBBBBBBABCBNBCBNBNBPBPBCBPBPBACACACACACACACGDHDKBECHBECNDEEECNDEEFGOGDBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA",
-"AAAAAAAAAAAAAAAAAAAAAAAAAAAAICJKOMDMBMFLNGAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMFMGHFCEMEKDKDACKDACACACACACPBACPBPBPBNBCBNBNBCBBBNBCBABBBNBNBNBCBNBCBCBCBPBPBACACPBACACACACIDACHDACMEMBEEECECNCODEEEICAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA",
-"AAAAAAAAAAAAAAAAAAAAAAAAAAICFLPMOMPMHMBMILKHAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHGHFMECEMEKDKDACKDACACACACACPBACPBPBPBCBCBCBNBCBNBNBCBCBCBNBNBCBNBCBPBPBCBPBPBACACACACIDACACIDACJDJDMEJDPFGEBDIIADAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA",
-"AAAAAAAAAAAAAAAAAAAAAAAAAAFLKMPMKMPMKMHMLLILNIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAJCKGHFKDKDKDIDKDACACACACPBACACPBACPBPBNBCBPBCBNBCBPBNBCBNBPBCBNBCBPBPBPBPBPBACACACACIDACACKDIDIDIDJDJDMENEAGKGKCAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA",
-"AAAAAAAAAAAAAAAAAAAAAAAABKJMPMMMPMKMPMJMBMILKLNIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPDHFHFMEKDKDIDKDACACACACACACACPBACPBPBPBCBPBPBCBCBPBNBPBCBCBPBNBPBCBPBACACPBACACACACIDKDACJDIDHDIDMECEMEMGMDAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA",
-"AAAAAAAAAAAAAAAAAAAAAANGHMOMMMPMMMPMMMMMHMLLILFLNIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMFHFKDKDIDKDACKDBCACACACACPBACPBACPBPBPBCBPBNBPBPBCBPBNBPBCBPBPBACPBACPBACACACACIDBCACIDIDJDJDMEMEHFMGPHICAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA",
-"AAAAAAAAAAAAAAAAAAAAICKLKMNMPMOMPMKMPMKMKMHMKLILKLKHAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEFHFKDKDLEKDACKDACACACACACPBACPBACPBPBPBCBPBCBPBPBCBPBPBPBPBPBPBACPBACACACACIDACIDKDACKDIDJDMEKDMECIMFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA",
-"AAAAAAAAAAAAAAAAAAAALIHMMMPMMMPMNMPMOMNMKMHMBMAMKLILMIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEFLGKDKDKDKDACKDBCACACACACPBACPBACPBPBPBPBPBCBPBPBPBCBPBACPBACPBACACPBACACACBCACIDKDIDJDMEKDMEMGIGAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA",
-"AAAAAAAAAAAAAAAAAAICLLKMOMPMPMKMPMMMPMMMKMKMBMLLILAMKLJJDBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFEIHKDKDKDKDIDKDACACACACACACPBPBACPBACPBPBPBPBPBPBPBCBPBACPBACPBPBACACACIDACIDACIDKDIDMEMEHFKGEFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA",
-"AAAAAAAAAAAAAAAAAALIHMMMNMMMKMPMMMPMNMKMPMDMKMBMLLFLILILFLNGAAAAAAAAAAAAAAAAAAAAAADBICOEKCMDPDKFKFKFAFMDMCJCAAAAAAAADCLGHFKDKDKDIDIDBCACACACACACACACPBPBPBPBCBCBNBCBCBPBPBNBPBPBPBACPBPBACACIDACIDJDIDMEMEHFMECIMDAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA",
-"AAAAAAAAAAAAAAAAAAKLKMOMPMPMPMMMPMKMPMPMJMKMJMHMBMLLKLILILLKLJCGJCICKCMDLFEHAJKIHJCJCJAIEJCJHHBIAIBIAICJAIBICJPHHGOHOHPHHFHFKDKDKDIDIDACACACPBPBPBPBPBCBNBCBNBNBBBBBNBBBNBCBNBNBPBPBPBACPBIDACIDKDIDJDKDMEHFKGHHCGAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA",
-"AAAAAAAAAAAAAAAAPEHMKMNMKMMMKMPMPMNMPMMMMMMMJMJMHMBMLLALHKEKDJHJCJCJEJNJCJFJAIFJAIAICIAICIHHBIKGCIKGBILGCIAILGCIAIBIBICIIHHFHFKDIDBCIDACACPBACPBPBPBNBNBNBBBBBPABBLBBBBBBBPANBNBNBPBPBPBACACIDACIDKDLEMECEMEHFBINHAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA",
-"AAAAAAAAAAAAAAAAJKHMOMNMPMPMMMPMKMPMKMNMNMMMKMJMCMDLEKDJDJCJCJFJAICIAICIBIAICIAICICIKGMGKGMGLGMGKGHHLGLGKGMGBILGBIMGBILGLGIHKDHFLEKDIDIDPBACPBPBPBNBNBNBBBBBBBBBPALBLBBBLBNBBBNBPBPBPBPBACIDACIDIDIDJDKDMELGKGHHBJAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA",
-"AAAAAAAAAAAAAAAABMKMNMOMNMKMPMJMDMDLDLNLMLMLNLMKEKDJFJEJHHEJCIAICIBICIAICICIAICILGKGMGLGLGMGKGLGMGKGHFMGLGLGHFLGLGLGLGMGLGHFHFLEKDIDIDPBIDPBPBPBPBNBCBBBBBBBLBBBLBBBPALBBBBBBBNBNBNBPBPBIDPBIDIDIDJDLELEHFMEHHKGAICGAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA",
-"AAAAAAAAAAAAAANGMMOMOMNMPMDMMLFJHHHHFJHHCIDJAICICICIAICIBIMGAICIBICIKGCIKGMGMGLGLGLGLGLGMGHFKGHFMEMGLGHFHFLGMEMGHFLGLGHFHFMEHFHFLEKDIDIDIDIDPBPBPBPBNBCBABNBNBBBBBBBBBBBBBABNBCBPBPBPBPBPBIDPBIDIDLEIDMELEMEMEKGBIPHMDAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA",
-"AAAAAAAAAAAAAAPJKMMMNMPMDMDLHHKGKGKGHHLGHHLGMGBIMGAICIKGCICIBIMGBILGMGLGMGLGKGHFKGKGHFMGMEKGHFKGLGHFHFLGMEHFKGHFHFHHHFLGMEHFHFMEKDLEKDIDIDIDIDACGDPBACPBPBCBPBCBCBCBCBCBCBPBPBNBPBPBPBACPBIDIDIDIDIDMEMEMEMEHFHHKGBIBJKFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA",
-"AAAAAAAAAAAAAAILOMPMOMNMBLKGKGKEKGAGMELGLGMGLGMGBIMGLGMGLGLGMGLGMGLGLGLGLGKGHFHHHFHHMELGMGHFMEMGHFMEKGHFHFMEHFMELGHFMEHFHFLEMEHFLEKDLEKDLEIDIDIDGDGDGDGDACIDPBPBPBPBGDPBPBPBACPBPBACIDIDIDACIDIDJDIDJDMEMEHFJEHFKGKGAIPHLFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA",
-"AAAAAAAAAAAAICHMKMMMNMMKHHKGKEKGMEMELGMGKGLGLGLGMGLGMGLGLGMGLGLGLGMGKGHFKGHFKGMGMEHFLGHFHFMELGHFMELGHFMEMEHFMEMGMEMEHFMEMEMEHFMEKDMEKDLEIDJDIDIDIDIDACGDIDPBPBACGDGDPBACPBACPBACPBIDPBIDACIDIDJDLEJDMEMEKDMEMEMEKGMELGCJJGKFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA",
-"AAAAAAAAAAAAKHKMMMPMDLHHKGAGMEMELGMGHFKGMGLGLGLGLGMGLGLGMGLGHFMGHFKGHFHHHFHHHFMELGMEMGMELGHFMEHFHFMEHFHFMEHFMEHFHFMEMEHFHFMEMEMEMEKDLEMEIDIDJDIDGDIDIDGDGDIDGDGDACPBGDPBIDGDACIDGDACIDACIDIDIDIDJDIDJDMEMEMEHFMEAGKGKGKGAIBJKFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA",
-"AAAAAAAAAAAAJJMLPMCMFJKGAGMEKGMEHFLGKGLGLGLGMGLGMGLGLGMGLGHFKGHFKGHFHHHFMEHFMEHFHFKGHFMEHFMEHFMEMEHFMEMEHFMEMEHFMEKDHFMEMEMEKDMEKDLEMEIDJDLEIDGDIDACGDJDACGDACGDPBIDACIDACACIDIDACIDACIDACIDHDIDIDJDLEJDMEMEMEAGMEMEMEHHAIKGBJMDAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA",
-"AAAAAAAAAAAAPKNLNMOJHHKGMEMEMELGHHMEMGMELGHFKGLGLGLGHFLGHFKGAGMEMGMEHFKGMGMEMGMEMEHFMELGMEHFMEHFMEHFMEHFMEHFHFLEHFMEMEHFMEKDMEKDLEMEJDLEIDIDGDJDGDGDGDACIDACIDACIDPBGDPBGDACPBGDACIDIDACIDIDACIDGDJDIDMEKDMEMEMEHFKGMEKGHHKGAIBJJCAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA",
-"AAAAAAAAAAAAALNLMLCILGAGMEHFMEMGMELGKEHFMEKEHFMEHFMGKGHFHHKGHFLGHFLGMGMEHFLGHFHFLGMELGMEHFMEHFMEHFMEHFMEHFMELEHFMEMEHFLEHFMEMELEKDMELEJDLEIDJDGDGDIDACIDACGDACGDACGDACIDPBIDIDACIDPBACIDGDGDIDIDJDIDJDIDJDMEKDMEMEAGMEAGMEKGAIPHBJICAAAAAAAAAAAAAAAAAAAAAAAAAAAA",
-"AAAAAAAAAAICBLMKIJMGKGMEMGLEMELGHFMELEMEMELEMEMEHFMEMGLGHFHHMEMGLGHFKGMGMEHFMELGHFHFMELGMELGMEKGMEKGMELGLEKGMEKGHFMELGMEHFLEHFMEHFLEKDLEIDJEIDGDGDGDGDGDGDACPBIDPBACIDPBACACIDPBIDGDACIDACIDGDHDGDJDIDMEIDJDMEMEMEKDKGMEHHMEHHAIAIOHAAAAAAAAAAAAAAAAAAAAAAAAAAAA",
-"AAAAAAAAAAPEIJIJCIKGAGHFMEMEHFMGMEMEMEMELEMELEHFJEHFMEHFMEHFMGKGHFKGLGHFLGLGMGLGMEKGLGLGMGMELGLGMGMEKGHFLGMEMGMEMEHFMEHFLEHFLEHFMEHFKDMELEMEIDGDHDGDGDACACGDGDPBIDPBACGDPBIDPBIDACACIDACIDGDBCGDIDIDGDIDJDLELEKDMEMEAGMEMEHHKGKGAIBJAHAAAAAAAAAAAAAAAAAAAAAAAAAA",
-"AAAAAAAAAACGIJIHCIKGMEKGAGMEMEHFMEHFMEJDLEMEJDJELEMEMEMEMEMEMEKDMEMEMEMEHFMEHFMEHFMEMEHFMEHFMEAGKDHFMEMEHFMEKDHFMEMEKDMEMEMEMEJDLEMEMEKDMEKDMEJDIDGDGDGDGDACACGDACACPBACGDPBACPBIDACGDACACIDGDBCHDGDJDGDJDIDJDLEMEMEKDMEMEMEKGHHKGAIBJKCAAAAAAAAAAAAAAAAAAAAAAAA",
-"AAAAAAAAAAAHIJCIKGMGMEMEHFMEMEMEHFLEMELEJDIDLEIDJDIDLEJDMEJDMEMEMEMEMEMELEMELEMEMEMEMEMEMEMEMEMELEMEMEMEJDMELEJDMEJDMEJDJDIDJDLEJDIDIDLEJDMELEKDMEJDIDACGDPBIDACPBPBIDACPBACIDACPBIDPBIDIDACGDIDACJDGDJDIDJDLEJDMEKDMEMEHFHHMEKGKGAICJLJICAAAAAAAAAAAAAAAAAAAAAA",
-"AAAAAAAAAAEHFJCIHHHFKGAGMEMEHFLEMEAGJDMEIDMEHDIDIDIDGDIDIDJEIDIDIDIDJDIDGDJDIDIDIDJDIDIDIDGDJDIDJDIDJDIDIDJDIDIDIDIDIDIDIDIDIDIDIDJDIDJDIDIDJDLEJDLEJDIDGDGDPBPBGDPBPBPBACPBPBACPBACGDPBACIDACGDIDACIDIDGDIDJDLEJDLEMEMEMEMEKGAGKGKGAICJAHAAAAAAAAAAAAAAAAAAAAAA",
-"AAAAAAAAAAOIFJHHHFKGHFMEKDMEMEMEHFMEKDJDMEIDIDJEJDGDIDHDGDIDGDGDHDGDGDGDHDGDGDGDGDGDGDHDGDGDIDACGDHDGDGDGDIDGDIDACIDIDACIDIDACIDACGDIDIDIDIDIDIDIDIDJDIDJDGDACGDACPBPBACPBPBACPBGDPBACACIDACIDACACIDHDGDIDIDIDJDIDLEKDMEMEHFAGMEJGKGAICJBJJCAAAAAAAAAAAAAAAAAAAA",
-"AAAAAAAAAAJICIBIHHHFMEAGMEHFLEMEMEHFMEMEJDIDJDIDGDJDGDGDHDGDGDACGDGDGDACGDACGDACACGDACPBACACGDGDACPBACIDACACACPBIDACPBIDPBACIDACIDACACIDACIDIDIDIDJDIDJDIDIDGDPBPBGDPBPBGDACPBACPBACPBACPBIDPBIDACIDACIDGDJDIDIDMEJDLEMEMEMEMEHFKGKGKGAIHJOIAAAAAAAAAAAAAAAAAAAA",
-"AAAAAAAAAAKIEJMGHFHHHFMEHFMEMEMEMEJEHFKDIDMEGDJDGDGDHDGDGDGDACGDGDOBGDPBACPBOBGDPBACPBACPBGDPBACPBACIDPBACPBPBACPBPBACPBACPBPBPBPBPBACPBACGDACACIDACIDIDIDJDIDACGDCBACPBCBPBPBPBACPBPBIDACPBACACIDPBIDIDACGDIDIDIDJDLEKDMEMEHFMEMEKGHHAICJBJJCAAAAAAAAAAAAAAAAAA",
-"AAAAAAAAAALJIHCIHHHFMEAGMEMEJDMEMEKDMEMEKDMEJDIDHDGDGDACGDACGDACGDACACPBPBGDACACPBPBPBPBGDACACPBPBPBPBACPBPBPBPBCBPBPBPBPBPBPBPBPBPBPBACPBACPBACACIDACIDACIDIDIDPBPBPBPBPBCBPBPBPBPBPBPBPBACIDPBACACIDACIDIDGDJDIDIDJDLEKDMEMEAGMEHHKGBIAIHJOIAAAAAAAAAAAAAAAAAA",
-"AAAAAAAAAABJFJMGMGMEHFMEKDMEKDMEKDMEMEKDMELEJDIDIDGDIDHDGDJDGDIDGDIDPBJDGDGDPBACGDGDGDGDACGDPBPBACPBPBCBPBCBPBNBPBNBCBCBNBCBCBCBCBPBPBPBPBPBACPBPBACPBACIDIDACIDACPBCBPBCBPBPBPBCBPBPBPBACPBPBPBIDACPBIDIDACJDIDJDLEIDMEMEKDMEMEMGMEKGKGBIHJBJICAAAAAAAAAAAAAAAA",
-"AAAAAAAAAABJFJLGMGLGMEHFMEHFMEMELEMEHFMEMEJDLEJDGDJDGDACJDACGDACACIDGDACGDACIDPBACACACACPBACPBPBPBPBCBNBCBNBCBCBNBCBNBNBCBNBNBNBNBNBNBCBNBPBPBPBPBPBACPBACACIDIDACPBCBPBPBCBPBCBPBPBCBPBPBPBACACPBPBIDACACIDIDGDIDJDIDJDLEMEKDMEHFMEKGHHAICIHKMDAAAAAAAAAAAAAAAA",
-"AAAAAAAAAADKCIMGHFHFMGMEKDMEMELEJDMEMEMEKDMEJDGDJDHDGDIDGDIDACGDIDPBACIDACACPBACACIDPBPBACPBPBPBPBCBCBPBNBNBNBNBNBNBNBNBNBNBNBCBNBNBNBNBCBNBNBCBPBPBPBACPBPBACACIDPBNBCBNBCBPBNBPBCBPBPBPBPBPBACPBACACACIDIDACIDIDIDJDLEKDMEMEMELEHFAGKGLGCJCJAJAAAAAAAAAAAAAAAA",
-"AAAAAAAAAAKIFJLGLGHFMEHFMEMEJDMEIDJDLECEMEJDIDJDIDGDBCGDACGDACGDACGDACPBPBPBGDPBPBPBACPBPBPBCBPBCBNBNBNBCBNBNBNBBBBBBBBBBBBBBBBBBBBBBBNBNBNBNBNBCBNBPBPBPBACPBIDACPBPBNBPBCBCBPBCBPBPBPBPBACPBPBACPBACIDPBACIDIDGDIDIDJDLEMEMEKDMEKGMELGAIBICJDKICAAAAAAAAAAAAAA",
-"AAAAAAAAAALJCIMGMGKGHFMEMEKDLEJDMELEIDMEKDLEJDIDJDACGDHDGDACIDACPBACPBPBACPBACPBACPBPBPBCBPBNBCBNBNBCBNBNBBBBBBBBBBBBBBBBBBBBBBBBBBBABBBBBBBBBNBNBNBCBNBPBPBACACIDCBNBPBCBNBPBNBPBNBPBCBPBPBPBPBPBACPBPBACIDIDACIDHDIDIDJDIDLEMEMEMEHHKGKGCIHJDJJCAAAAAAAAAAAAAA",
-"AAAAAAAAAAOICICIHFAGHFMEHFMEKDLEJDIDMEJDMEKDMEIDIDIDACGDACGDACPBGDPBGDPBPBACPBCBPBCBPBPBNBCBPBNBNBNBNBBBBBBBBBBBBBBBLBBBLBBBLBBBLBBBBBBBBBBBABNBBBCBNBCBCBPBPBPBACPBNBNBNBCBNBPBNBPBNBPBCBPBPBPBPBPBACACIDPBACIDIDGDHDIDLEJDLEMEMEKDMEKGHHKGFJHJCGAAAAAAAAAAAAAA",
-"AAAAAAAAAANHEJMGHHHFMEHFMEKDMEJDIDLEJDGDMEMEIDJDGDJDIDACGDGDACGDACPBACPBCBPBCBPBCBPBPBNBPBNBCBNBNBCBBBBBBBABBBLBBBLBBBLBBBLBPALBBBBBPALBLBBBBBBBBBBBNBNBNBPBPBACACNBCBNBNBNBCBNBNBCBCBNBPBCBPBPBPBACPBPBPBACACIDACJDGDIDIDLEJDMEMEMEMEMGMECIAINJAHAAAAAAAAAAAAAA",
-"AAAAAAAAAAAHCICILGMGAGMEMEMEKDMEMEJDGDIDGDMEJDJDIDGDJDACIDACPBACPBGDCBACPBPBPBPBPBCBPBCBPBPBNBCBNBNBBBABNBBBLBBBPABBPALBPABBBBPALBPABBLBBBLBPABBBBBBABNBPBCBPBACPBPBBBNBNBNBNBNBCBNBPBCBNBPBCBPBACPBACACPBIDPBIDACIDIDGDJDIDLEMEMEHFLEKGMGKGCICJNHAAAAAAAAAAAAAA",
-"AAAAAAAAAAMDEJCIMGMEHFMEHFCEMELEJDIDJDGDJDIDJDMEIDJDACIDIDACGDPBACACIDPBACPBACACPBPBCBPBPBNBCBCBNBNBABBBBBBBBBPALBLBBBLBBBPAPABBPALBPABBPALBBBBBBBBBNBNBNBPBACPBACNBBBNBABBBNBCBNBCBNBNBPBCBPBPBPBPBPBPBACPBIDACIDACGDHDIDLEIDJDMEMEKGMEKGCIAIEJNHAAAAAAAAAAAAAA",
-"AAAAAAAAAAPEFJLGMGMGMEHFMEMEMEJDMEIDLEJDGDGDIDJDIDIDIDGDACIDACGDPBACPBACPBPBPBPBCBPBPBCBCBPBNBNBNBBBNBBBBBLBBBBBPABBPALBPALBLBPABBPALBPABBPALBBBBBABCBNBPBPBPBPBPBBBBBBBNBBBBBNBNBCBNBCBNBPBNBPBPBPBPBACPBACPBIDPBIDGDIDGDJDLEIDMEMEMELGMEKGCIDJKIAAAAAAAAAAAAAA",
-"AAAAAAAAAAICIJCIIHLGMEHFNEMEKDMEIDJDJDGDIDHDGDLEJDJDIDACIDGDACACGDACPBPBPBPBPBCBPBPBCBNBNBNBCBNBNBABBBBBBBBBLBPALBPABBPAPABBPALBPALBPALBPABBLBBBBBNBNBNBCBCBPBPBBBBBBBBBBBNBABNBNBNBNBNBCBNBCBCBPBPBPBPBACPBACPBIDACJDGDIDIDJDMEMEMEHFMELGMGHHEJEKAAAAAAAAAAAAAA",
-"AAAAAAAAAAAAIJCILGHFMGMEKDMEMEKDMEIDIDJDGDIDGDIDIDIDJDIDACIDACPBACPBACPBCBPBCBPBCBNBCBPBNBCBNBNBNBNBBBBBLBBBLBBBPALBPABBLBPALBPAPALBPABBLBPABBBBABNBCBPBNBPBPBABBBBBLBBBBBBBNBBBCBNBNBNBNBPBNBPBCBPBPBACPBACIDACPBIDACIDGDJDIDLEMEMEMELGKGLGCIAIDJJCAAAAAAAAAAAA",
-"AAAAAAAAAAAABJCIMGMGMEHFMECEMEMEJDLEJDIDJDGDACGDIDJDIDGDIDACGDIDPBACPBPBPBCBPBCBNBPBNBNBCBNBNBCBBBBBBBLBBBLBBBPALBPABBPAPALBPALBBBPABBPABBBBBBBBNBNBNBCBPBPBCBNBBBPABBBBBBBBBBCBBBBBNBCBNBNBPBNBCBPBPBPBACPBPBPBACGDIDGDJDGDLEJDMEMEHFMEMEMGAIFJNJJCAAAAAAAAAAAA",
-"AAAAAAAAAAAANHBICIMGHFMEHFMEMEJDLEJDIDGDIDHDGDGDHDIDJDJDGDGDACACGDPBPBCBPBPBCBPBCBCBPBNBNBCBNBNBBBABBBBBBBBBPABBLBBBLBLBPABBPALBPABBPALBLBBBABNBCBNBCBPBCBCBNBPABBBBLBBBBBABNBBBBBCBBBNBCBNBCBPBNBPBPBPBPBPBACIDACIDACIDGDJDIDLEMEMEMELGMGKGMGCJNJLDAAAAAAAAAAAA",
-"AAAAAAAAAAAAKFFJCIHFLGHFAGMEKDLEJDIDJDIDHDGDIDACGDGDIDIDJDACIDACACPBOBPBPBCBPBNBPBNBNBCBCBNBNBNBABNBBBBBLBBBLBBBPALBPAPABBPALBPABBLBLBBBBBBBNBCBNBCBCBPBCBNBPABBLBBBLBBBBBBBBBBBCBBBNBNBNBNBCBNBPBCBPBPBPBACACPBIDACGDGDIDIDJEJDMEHFMEMEMEKGBICIHJOEAAAAAAAAAAAA",
-"AAAAAAAAAAAAKCFJLGMGHFMEHFMEKDMELEJDIDJDIDGDACIDACGDGDJDIDIDACIDACACPBACCBPBPBPBCBPBCBNBCBCBCBNBPBNBCBBBBBLBBBLBPABBLBBBLBBBPABBLBPABBBBABNBNBNBCBPBPBNBPABBBBLBPABBBBLBBBBBBBBBBBABNBCBNBCBNBCBCBNBPBPBPBPBACACPBIDACIDGDGDIDLEMEMEHFMELGHHBICIHJJCAAAAAAAAAAAA",
-"AAAAAAAAAAAAICEJCILGMGHFMEHFMEKDJDLEJDIDGDIDJDGDIDACGDACIDIDIDACIDIDACACPBACPBACPBPBPBPBPBPBNBCBNBCBNBABBBBBBBPABBBBPALBPALBBBLBBBNBABBBNBCBNBCBPBCBBBBBBBBBPABBBBBBLBBBBBBBBBABBBNBBBNBCBNBNBPBNBPBCBPBPBPBPBPBIDACGDGDGDIDMEJDMEMEMEMEKGKGCICJDJICAAAAAAAAAAAA",
-"AAAAAAAAAAAAAAHGFJMGHFHHCEMEHFMEIDJDIDJDIDACIDGDACGDACPBACIDACIDIDACIDACACPBPBPBPBPBCBCBNBNBPBNBNBNBBBNBBBLBBBBBLBLBBBBBBBBBBBBBBBBBNBCBNBCBCBNBPBNBBBLBPABBLBPABBLBBBBBABBBBBNBABNBNBNBNBCBCBNBPBCBPBPBPBACPBIDPBIDACGDJDGDJDLEMEKDMELGMEHHLGFJHKAAAAAAAAAAAAAA",
-"AAAAAAAAAAAAAAFICIIHMGMEHFCEMEMEMEJDLEIDHDIDIDACGDGDPBIDPBPBPBIDACIDIDPBPBACPBCBPBNBPBNBCBCBNBNBCBNBNBABBBABBBLBBBBBBBBBBBLBBBNBABNBCBNBCBNBPBPBBBBBPABBPALBPABBLBBBBBLBBBNBABBBNBNBCBNBCBNBNBCBPBCBPBCBPBPBIDPBACGDPBHDGDLEIDMEMEMEHFMEMGKGCICJHJAAAAAAAAAAAAAA",
-"AAAAAAAAAAAAAAMDFJLGMGMGMEHFMEKDMEKDJDIDIDGDHDIDACACPBGDACPBPBCBPBIDACIDACPBPBPBCBPBCBPBNBNBCBNBNBBBCBNBBBNBBBABBBBBABBBABNBABCBNBCBNBCBPBPBCBPABBPALBPABBPABBLBPABBLBBBBBBBNBBBBBCBBBCBNBNBCBPBNBPBCBPBPBPBPBACGDACIDIDIDJDLEJDKDMEMEMGHFKGCICJKIAAAAAAAAAAAAAA",
-"AAAAAAAAAAAAAAAACJCILGHFHFHFMEKDJDMEMEIDJDIDACGDACGDGDACPBGDPBPBACPBIDACACPBACPBPBPBNBCBNBCBNBCBBBCBNBNBABNBABNBNBABBBNBNBCBNBNBCBCBPBPBPBCBPABBPALBPABBLBLBPALBBBLBBBBBBBBBBBBBCBBBCBNBNBNBPBNBCBPBPBCBPBPBACGDACIDHDIDIDIDJDMELEHFMEHFKGMGAIFJOIAAAAAAAAAAAAAA",
-"AAAAAAAAAAAAAAAAOHCICILGMEAGKDMEKDLEJDJDIDIDIDIDGDACACGDACPBACPBPBPBACIDIDACPBACPBCBPBCBCBNBCBNBCBNBCBNBNBCBNBNBCBNBCBNBCBNBPBCBPBPBPBNBBBPABBLBPABBPALBPABBLBPABBBBBBBBABBBABNBBBCBNBNBCBNBCBCBPBNBPBPBACACPBACIDIDIDJDIDJDLEKDMEMEHFKGHFHHCICJCGAAAAAAAAAAAAAA",
-"AAAAAAAAAAAAAAAAMDFJCIHFMGHFMEHFMEJDMEIDJDIDIDACIDPBIDACPBACPBPBCBPBPBPBACIDACACPBACPBNBPBPBCBPBNBCBNBCBNBCBNBCBNBCBNBCBCBPBCBPBPBCBBBBBBBPALBPABBPALBPALBBBPABBLBBBBBABBBNBNBBBCBNBNBCBNBCBNBCBPBCBACPBACPBIDACIDACIDIDJDLEKDMEMEHFMEHFMGAICIHJMDAAAAAAAAAAAAAA",
-"AAAAAAAAAAAAAAAAAAHJCIMGHFMEHFMEKDMEKDLEIDJDGDIDACIDPBGDACPBGDCBPBPBPBPBIDACIDACACPBACPBPBPBPBCBPBPBCBPBCBNBPBCBPBPBPBPBPBPBPBPBBBBBBBLBPABBLBBBPALBPABBBBLBBBPABBLBBBBBBBABNBNBNBNBBBCBNBCBPBNBPBPBPBACPBACACIDBCJDJDIDJDIDMEKDHFMEHFKGMGMGCJHJICAAAAAAAAAAAAAA",
-"AAAAAAAAAAAAAAAAAAEHCILGMGMGMEHFMEKDLEJDJDIDJDACIDGDGDACACGDACPBACPBCBPBPBPBACIDIDACACACACACACPBACCBPBPBPBACCBPBPBPBPBACPBCBNBBBBBBBLBBBLBPABBPALBBBBBLBLBBBLBBBBBABBBBBCBNBNBNBNBNBCBNBCBNBCBCBPBACPBACACIDBCIDIDIDIDJDMEKDMEKDMEMEAGHFKGCIEJPIAAAAAAAAAAAAAAAA",
-"AAAAAAAAAAAAAAAAAAJCIJCILGHFHFMEHFMEMEIDJDIDIDJDACIDACPBPBGDPBACPBPBGDCBPBPBPBPBACIDACACACACPBACPBACACPBACPBACACPBACPBNBCBNBBBBBLBBBBBPABBBBLBBBPALBPABBBBBBBBLBBBNBBBABNBBBCBBBCBNBNBCBNBPBPBPBPBPBACACACACIDBCIDJDIDJDIDMEKDMECEHFMEMGMGBICJCGAAAAAAAAAAAAAAAA",
-"AAAAAAAAAAAAAAAAAAAAOIIHMGMGMEHFNEMEKDMEIDJDIDIDJDGDACGDGDACACPBGDPBACPBPBCBPBPBPBPBIDPBIDACIDACACACACACACPBPBPBCBNBNBCBBBBBBBBBBBLBBBLBBBLBBBLBBBBBBBLBBBLBBBNBABBBBBNBBBCBNBCBNBCBPBNBCBPBPBPBPBACACACACIDACIDJDIDIDKDMEKDMEKDMEHFMGMGBIDJHJAAAAAAAAAAAAAAAAAA",
-"AAAAAAAAAAAAAAAAAAAAICNJCILGMGHFKDMEKDMEJDIDIDIDIDACIDACIDACACGDPBACCBPBPBPBCBPBPBPBPBPBPBPBPBPBPBPBPBNBPBPBNBNBNBNBBBBBBBABBBBBBBLBBBBBLBBBLBBBLBPABBBBLBBBBBBBBBABCBNBNBNBNBNBCBPBCBPBPBPBACACACPBACACIDACKDACIDJDJDIDKDMECEMEHFMEMGLGCICJAHAAAAAAAAAAAAAAAAAA",
-"AAAAAAAAAAAAAAAAAAAAAAOGEJMGMGMEHFHFMEKDJDLEJDBCGDIDIDIDACPBIDACACACPBACPBPBPBCBPBNBPBPBNBPBPBPBNBPBNBPBNBNBNBBBNBBBNBABBBNBBBLBBBBBLBBBBBLBBBLBBBBBBBBBBBBBNBABNBNBNBNBCBNBCBCBPBNBPBPBPBACACPBACACACIDACIDACIDJDIDIDKDJDMEMEHFHFMGLGMGDJKIAAAAAAAAAAAAAAAAAAAA",
-"AAAAAAAAAAAAAAAAAAAAAAAABJIHCIMGLGHFMEHFLEJDJDIDJDIDACIDGDACIDPBIDPBACPBACPBPBPBPBPBCBPBPBPBCBNBPBNBPBCBNBCBNBNBBBABNBNBBBBBBBBBBBBBBBLBBBBBBBBBLBBBLBBBBBABNBNBNBNBNBCBNBCBNBPBCBPBPBACPBPBACACACACIDACKDACIDIDIDKDJDMEKDKDHFMEAGLGMGFJOHICAAAAAAAAAAAAAAAAAAAA",
-"AAAAAAAAAAAAAAAAAAAAAAAADBOICICIHFAGHFMEKDKDLEJDIDJDIDIDACIDACACIDACACGDACACPBACPBPBACPBPBCBPBPBPBPBPBNBCBNBCBBBCBNBNBBBNBABBBBBABBBBBBBBBLBBBBBBBBBNBABBBNBBBCBBBNBCBNBCBNBPBCBPBPBACPBPBACACACACIDACIDACIDIDKDKDJDMEKDMEAGMEHFMGCIHGMDAAAAAAAAAAAAAAAAAAAAAAAA",
-"AAAAAAAAAAAAAAAAAAAAAAAAAAAAMDHGFJMGHFHFAGMECEMEJDIDJDIDIDIDIDIDACIDPBACIDPBACPBACPBPBACPBPBPBCBPBCBCBPBNBPBNBCBNBCBNBCBNBNBBBCBBBABBBABBBBBABBBBBBBBBCBBBCBNBBBCBNBCBNBPBCBPBPBPBACPBACACACPBACIDACKDACKDIDKDIDJDLEKDMECEHFMGKGFFDCAAAAAAAAAAAAAAAAAAAAAAAAAAAA",
-"AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKCEHJGCIHFHFMEKDMEKDIDJDJDJDIDIDIDACIDIDACACGDPBPBACPBACPBACPBPBPBPBNBCBPBCBPBNBCBNBCBNBNBCBNBNBCBNBABNBBBNBCBBBCBBBCBNBCBNBNBCBNBCBNBPBCBPBPBPBACPBACPBACACACIDACIDIDKDIDKDKDMEKDCEMEHFMEGFDCDBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA",
-"AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAICPDEFJEKGHFMECEMEMEJDJDIDJDIDJDIDIDIDACIDACPBACACACPBACPBPBPBACPBPBCBPBPBCBPBNBCBNBCBNBCBNBCBNBCBCBCBNBCBCBCBNBCBNBCBNBCBCBNBPBCBPBPBACPBACACACIDACIDIDKDIDKDIDKDKDLEKDHFLEGFADJCAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA",
-"AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAICDCLFFCGFIELEHFKDKDMEIDJDIDJDIDJDIDIDACIDIDACACACACACPBPBACPBCBPBPBPBPBCBPBCBCBPBCBPBPBPBCBPBPBPBPBCBPBCBCBPBCBPBPBPBACPBACPBACACACIDACIDIDKDLEKDKDKDLEFFFCDCICAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA",
-"AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAICJCIBDCAEADFCFCFCHCBEPBHEIDJDIDJDIDACJDACIDACACACACACACACPBACPBACPBACPBPBPBACPBPBACPBACPBACACPBACACACIDACIDIDIDIDKDIDLEIDNBFEFCMCJCICAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA",
-"AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADBDBEBEBGBGBIBIBFCOCFCFCFCHCBENBBENBIEPBGDIEPBCDHCHCFCHCHCFCHCFCFCFCFCFCFCOCOCIBIBMCDBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA"};
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|
|
From: <caw...@us...> - 2007-05-10 19:36:01
|
Revision: 2459
http://svn.sourceforge.net/rubyeclipse/?rev=2459&view=rev
Author: cawilliams
Date: 2007-05-10 12:36:00 -0700 (Thu, 10 May 2007)
Log Message:
-----------
Removed Paths:
-------------
trunk/com.aptana.rdt/icons/rubyred.ico
trunk/com.aptana.rdt/icons/rubyred.l.pm
trunk/com.aptana.rdt/icons/rubyred.m.pm
trunk/com.aptana.rdt/icons/rubyred.s.pm
trunk/com.aptana.rdt/icons/rubyred.t.pm
Deleted: trunk/com.aptana.rdt/icons/rubyred.ico
===================================================================
(Binary files differ)
Deleted: trunk/com.aptana.rdt/icons/rubyred.l.pm
===================================================================
--- trunk/com.aptana.rdt/icons/rubyred.l.pm 2007-05-10 19:35:37 UTC (rev 2458)
+++ trunk/com.aptana.rdt/icons/rubyred.l.pm 2007-05-10 19:36:00 UTC (rev 2459)
@@ -1,191 +0,0 @@
-/* XPM */
-static char *rubyred.l[] = {
-/* width height ncolors chars_per_pixel */
-"48 48 137 2",
-/* colors */
-"AA c #FFFFFFFFFFFF",
-"BA c #FFFFE7E77B7B",
-"CA c #FFFFE7E74A4A",
-"DA c #FFFFDEDE3939",
-"EA c #FFFFD6D67373",
-"FA c #FFFFD6D66363",
-"GA c #FFFFCECE2929",
-"HA c #FFFF9C9C5252",
-"IA c #FFFF73737373",
-"JA c #FFFF73736363",
-"KA c #FFFF6B6B7373",
-"LA c #FFFF6B6B6B6B",
-"MA c #FFFF5A5A6363",
-"NA c #FFFF5A5A4A4A",
-"OA c #FFFF52525A5A",
-"PA c #F7F7DEDE2929",
-"AB c #F7F7A5A53131",
-"BB c #F7F74A4A5252",
-"CB c #F7F74A4A4A4A",
-"DB c #F7F742423939",
-"EB c #F7F739394242",
-"FB c #F7F739393939",
-"GB c #EFEFCECE1818",
-"HB c #EFEFBDBD2929",
-"IB c #EFEF73733131",
-"JB c #EFEF52525A5A",
-"KB c #EFEF52523939",
-"LB c #EFEF4A4A4A4A",
-"MB c #EFEF42423939",
-"NB c #EFEF39394242",
-"OB c #EFEF39393939",
-"PB c #DEDEB5B51818",
-"AC c #DEDE42423939",
-"BC c #DEDE39394242",
-"CC c #DEDE39393939",
-"DC c #DEDE29293131",
-"EC c #D6D6ADAD1010",
-"FC c #D6D67B7B2121",
-"GC c #D6D663636363",
-"HC c #D6D652525252",
-"IC c #D6D642424A4A",
-"JC c #D6D629292929",
-"KC c #CECEC6C6C6C6",
-"LC c #CECEA5A52929",
-"MC c #CECEA5A51818",
-"NC c #CECE9C9C2121",
-"OC c #CECE9C9C1010",
-"PC c #CECE42424242",
-"AD c #CECE39393939",
-"BD c #CECE29293131",
-"CD c #CECE29292929",
-"DD c #C6C6BDBDC6C6",
-"ED c #C6C652525252",
-"FD c #BDBDC6C6CECE",
-"GD c #BDBD73738484",
-"HD c #BDBD63636363",
-"ID c #BDBD4A4A5252",
-"JD c #BDBD39394242",
-"KD c #BDBD31313131",
-"LD c #BDBD29293131",
-"MD c #BDBD21212929",
-"ND c #B5B59C9C4A4A",
-"OD c #B5B55A5A5A5A",
-"PD c #B5B54A4A4A4A",
-"AE c #ADAD7B7B5252",
-"BE c #ADAD7B7B3939",
-"CE c #ADAD6B6B6B6B",
-"DE c #ADAD5A5A6363",
-"EE c #ADAD52525A5A",
-"FE c #ADAD42424A4A",
-"GE c #ADAD39394242",
-"HE c #ADAD31313939",
-"IE c #ADAD29292929",
-"JE c #A5A56B6B7B7B",
-"KE c #9C9CA5A5ADAD",
-"LE c #9C9C5A5A5A5A",
-"ME c #9C9C39393939",
-"NE c #9C9C29292929",
-"OE c #94947B7B4A4A",
-"PE c #949463636363",
-"AF c #949439394242",
-"BF c #8C8C42424A4A",
-"CF c #8C8C39393939",
-"DF c #848473736363",
-"EF c #84845A5A5A5A",
-"FF c #84844A4A5252",
-"GF c #7B7B7B7B7B7B",
-"HF c #7B7B73736363",
-"IF c #7B7B73735A5A",
-"JF c #7B7B6B6B5252",
-"KF c #7B7B63633131",
-"LF c #7B7B52525252",
-"MF c #7B7B4A4A4242",
-"NF c #73736B6B6B6B",
-"OF c #73735A5A2929",
-"PF c #737321212121",
-"AG c #6B6B6B6B7373",
-"BG c #6B6B6B6B6B6B",
-"CG c #6B6B4A4A4A4A",
-"DG c #6B6B39393939",
-"EG c #63635A5A4A4A",
-"FG c #636352525252",
-"GG c #636339394242",
-"HG c #636321212121",
-"IG c #636318181818",
-"JG c #5A5A63636363",
-"KG c #5A5A5A5A5A5A",
-"LG c #5A5A39394242",
-"MG c #5A5A29292929",
-"NG c #5A5A18181818",
-"OG c #52524A4A4A4A",
-"PG c #525242423939",
-"AH c #525239393939",
-"BH c #525229293131",
-"CH c #4A4A52525252",
-"DH c #4A4A4A4A4A4A",
-"EH c #4A4A31313131",
-"FH c #4A4A29292929",
-"GH c #4A4A18181818",
-"HH c #424242423939",
-"IH c #424239392929",
-"JH c #393942424A4A",
-"KH c #393939394242",
-"LH c #393939393131",
-"MH c #393921212121",
-"NH c #313118181818",
-"OH c #292929293131",
-"PH c #292929292929",
-"AI c #212121211818",
-"BI c #212118182121",
-"CI c #212110101818",
-"DI c #181821212121",
-"EI c #181818181818",
-"FI c #181808080808",
-"GI c #101010100808",
-"HI c #080808081010",
-"II c #000000000000",
-/* pixels */
-"IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIPHLHLHBIJHCHPHIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII",
-"IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIICHIIBGDIEIIIDHPHIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII",
-"IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIJGHIEIOHDHIIPHEIKHIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII",
-"IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIICHEIEIGIBGHIDHBIKGIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII",
-"IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIKHEILHHIJGEIHIEIPHIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII",
-"IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIOHBIAGHIPHGHIGIGHGPEOGEIIIIIIIIIIIIIIIIIIIIIIIIIIIII",
-"IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIILHEIKHEIFICFCDKDCDMDKDHDAHEIIIIIIIIIIIIIIIIIIIIIIIII",
-"IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIICHHIHFBIEIIEBCCCADADADADKDLEIIIIIIIIIIIIIIIIIIIIIIII",
-"IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIMFCFEILGAHHEICACNBACCCCCADADKDCEPHIIIIIIIIIIIIIIIIIIII",
-"IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIFFLDBDCCICLAJBLBLBICLBLBCCCCCCADKDFEEIIIIIIIIIIIIIIIIIII",
-"IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIFGGEADCCBCLBBBNAMEHGNEBCICLBCCICCCADKDLFIIIIIIIIIIIIIIIIII",
-"IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIEIEEADCCBCLBLBLBMEBCICHEMEICLBLBOBACCCCCPDPHIIIIIIIIIIIIIIII",
-"IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIDGKDBDBCLBNBLBHEPCHCIDFFFEODCCLBLBCCICCCADAEJFIFNFDFIFPHIIII",
-"IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIBFBDCCOBLBLBPCBBHCJEDDAAFDMHKDICNBLBMBACFCMCOCNCOCMCLCJFIIII",
-"IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIPDADCCBCLBLBBBJBICKCAAAAKEEIHECBLBCCLBKBPBPBPBECHBGBPBKFIIII",
-"IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIILHLDCDCCOBLBLBOAJBOAIDDEGDGDGENALBLBLBACGAHBGBHBPAGBGAPBOFIIII",
-"IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIBHLDCCCCNBLBCBOALALAOALALAJBMAJBLBCBMBIBGAGBGAPAPAPAPBMCEGIIII",
-"IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIPHMDDCCCNBLBNAOAOALALALALALALAOAOACBLBABGADAFADAPAGAGBMCHHIIII",
-"IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIMHADADOBCCLBBBOALALALAIAIALALALANABBNAFAFABACAPAGBGBMCLCLHIIII",
-"IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIHHMDJCCCOBCBLBOALALAKAIAIAIALALAOABBNAEACAGAGAGAPAGAGBLCFGIIII",
-"IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIEIPDJCCCOBNBCBOAOALALAIAKAIAKAMAOANABCHAEAEACAPAGAGBMCNDEIIIII",
-"IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIBFDCDCOBCBCBNAOAOALALAKALALALAOALBBBJAFACALCGAPBNCOELHIIIIII",
-"IIIIIIIIIIEIDHPHIIIIIIIIIIIIIIIIIIIIMHADDCOBOBEBCBOALAOALALAMAOAOAOACBCBLBKBGAGBMCLCJFIIIIIIIIII",
-"IIIIIIIIEIDHEIKGDHIIIIIIIIIIIIIIIIIIIILEBDOBOBEBCBCBNAOAOAOAOALAOACBCBNBMBMBACFCBEIHIIIIIIIIIIII",
-"IIIIIIEIBGIIEIEIEGCHIIIIIIIIIIIIIIIIIIIIHDDCOBOBEBCBCBOAOANAOACBNACBFBCBOBCCADFEIIIIIIIIIIIIIIII",
-"IIIIIILHEIEIIIEIOHKGGFIIIIIIIIIIIIIIIIIIPHEDDCOBEBEBCBCBNABBCBOAEBCBCBOBOBCCJCAHIIIIIIIIIIIIIIII",
-"IIIIIICHEIIIGIEICIHHOGEFMFGGDGEEEEODPDODODDELDDCOBCBEBBBOALAOALAOABBCBNBCCCCCDMHIIIIIIIIIIIIIIII",
-"IIIIPHPHIICINGNGHGPFLDIEIEHEMDMDKDMDLDCDLDMDMDADCCNBOAOAOALALALALAOACBLBCCCCADEFIIIIIIIIIIIIIIII",
-"IIIIKHEICIKDKDKDKDMDHEMDMDKDKDADCDCDCDLDADCDBDJCCCBCMBLBBBCBOACBBBLBLBNBCCCCBDKDEFIIIIIIIIIIIIII",
-"IIIIIHCIHEADADKDMDMDKDMDKDMDCDCDMDADBDCCCDDCADDCCCCCBCNBLBNBLBLBLBLBNBNBCCCCADKDKDMFIIIIIIIIIIII",
-"IIIICGNECDADCDADADMDADMDADCDADBDADCDADBDADBDCCBDCCBCLBBCLBLBNBLBNBLBOBLBCCCCCCADKDJDLFIIIIIIIIII",
-"IIIIFEMDADCDADCCCCCCCDADCDADCDLDCDADBDBDBDCCBDCCCCDCCCLBLBNBLBCBLBNBLBCCNBOBCCCCADKDFEPHIIIIIIII",
-"IIIIMEKDADCCCDCCCCLBCCCCBCCCBCMBBCCCOBBCOBCCNBBCOBBCCCCCNBLBCBLBCBLBLBLBOBBCOBCCADADHECEIIIIIIII",
-"IIIIMECDCCBDCCCCOBCCLBLBLBLBCBLBLBCBLBLBBBBBCBCBLBLBLBNBNBNBCBBBBBCBCBNBLBNBNBCCCCBDADMECGIIIIII",
-"IIIIHEMDADCCCCDCCCNBOBLBNBLBLBNBCBLBBBOAOAOAOAOAOAOACBCBLBNBBBOACBBBBBCBLBLBOBBCCCCCMDKDLEIIIIII",
-"IIIIMECDJCCCCCCCCCACLBNBLBCBCBBBBBBBOALAOALALALAMALAMAOACBLBNAOAOAOABBCBCBLBNBNBCCCCADKDMEPHIIII",
-"IIIIHEADCDCCCCCCOBNBLBLBLBCBBBOAOAOALAOAJALALALAKALALALAOACBBBOALAOAOABBCBNBLBNBBCCCBDKDLDPHIIII",
-"IIIIEEMDBDCCCCNBBCCCOBLBCBBBCBNAOAOAOALAKAKAKAIAKALALALAOABBMAJAOAOAOAOABBNANBLBNBCCCCBDMEMHIIII",
-"IIIIMEADCDCCCCOBICOBLBOBLBCBBBOAOALALALALAKAIAKAIAKALAOAOAOALALALAOALANABBBBLBNBICOBADADIECGIIII",
-"IIIIDGMDCDCCOBCCLBNBCCLBCBOABBNALAOAOALALAKAKAIALALALAOAOALALALAOALAOAMABBCBCBLBMBBCADBDIECGIIII",
-"IIIIMGMDADCDBCNBMBLBNBOBLBCBCBBBCBOALAOALALALALALAOAOAOAJAKALALALAOALABBOABBCBNBLBCCCCKDMDCGIIII",
-"IIIIIHIECDCCCCCCNBLBLBBBNBLBCBOAOAOAOALALALALALAOAOAOAIAIAKALAMALALAOAOAOABBLBLBNBCCADCDHEEHIIII",
-"IIIIIIFEMDCDCCOBICCBLBCBOALBLBCBOAOAOAOAOAOACBBBOAJAIAKAKAJAKALAOAOALANAOACBEBOBCCCCDCMDMEIHIIII",
-"IIIIIIDGMDCDCCCCOBOBCBLBCBCBCBLBDBCBCBNACBCBBBLAJAKALAKALALALALAOALAOAOACBEBLBCCOBCCCDKDFEIIIIII",
-"IIIIIIAIHECDBDCCNBNBLBLBCBCBBBCBBBCBCBBBOALALAMALALAKALALAMAMAOALACBNACBEBLBOBOBCCDCCDIELFIIIIII",
-"IIIIIIIIPGFECDJCCCCCOBLBNBCBCBBBNAOAOAOALAOAOALAMALALALALAMALAOACBOAEBCBNBOBOBCCDCCDIDMFGIIIIIII",
-"IIIIIIIIIIEIAHEDADCCCCOBOBLBNBCBCBCBCBOACBOALAOAOAOAOAOAOAOAOAOANACBCBNBOBCCCCBCGCCGIIIIIIIIIIII",
-"IIIIIIIIIIIIIIIIEIFHNHMGCFCFMEMEMEEDJBJBLAJBBBNAJBNAOAJBNALAJBJBJBJBNECFAFGHFHEIIIIIIIIIIIIIIIII"};
Deleted: trunk/com.aptana.rdt/icons/rubyred.m.pm
===================================================================
--- trunk/com.aptana.rdt/icons/rubyred.m.pm 2007-05-10 19:35:37 UTC (rev 2458)
+++ trunk/com.aptana.rdt/icons/rubyred.m.pm 2007-05-10 19:36:00 UTC (rev 2459)
@@ -1,128 +0,0 @@
-/* XPM */
-static char *rubyred.m[] = {
-/* width height ncolors chars_per_pixel */
-"32 32 90 2",
-/* colors */
-"AA c #FFFFFFFFFFFF",
-"BA c #FFFFE7E77B7B",
-"CA c #FFFFDEDE6363",
-"DA c #FFFFDEDE5252",
-"EA c #FFFFDEDE3939",
-"FA c #FFFFDEDE2929",
-"GA c #FFFFCECE3131",
-"HA c #FFFFBDBD6363",
-"IA c #FFFFBDBD2929",
-"JA c #FFFF7B7B5252",
-"KA c #FFFF73737373",
-"LA c #FFFF6B6B7373",
-"MA c #FFFF6B6B6B6B",
-"NA c #FFFF5A5A6363",
-"OA c #FFFF5A5A5A5A",
-"PA c #FFFF5A5A4A4A",
-"AB c #FFFF4A4A5252",
-"BB c #FFFF4A4A4A4A",
-"CB c #F7F739394242",
-"DB c #EFEFCECE2121",
-"EB c #EFEFC6C61818",
-"FB c #EFEF94943131",
-"GB c #EFEF5A5A5A5A",
-"HB c #EFEF4A4A4A4A",
-"IB c #EFEF42423939",
-"JB c #EFEF39394242",
-"KB c #EFEF39393939",
-"LB c #E7E7DEDEE7E7",
-"MB c #E7E7BDBD1818",
-"NB c #DEDEB5B51818",
-"OB c #DEDE5A5A6363",
-"PB c #DEDE4A4A4A4A",
-"AC c #DEDE39393939",
-"BC c #DEDE29293131",
-"CC c #D6D6ADAD1010",
-"DC c #D6D65A5A2929",
-"EC c #D6D652525252",
-"FC c #D6D629292929",
-"GC c #CECEA5A52929",
-"HC c #CECE42424242",
-"IC c #CECE31313939",
-"JC c #CECE29293131",
-"KC c #CECE29292929",
-"LC c #C6C6A5A51818",
-"MC c #C6C69C9CA5A5",
-"NC c #C6C673737B7B",
-"OC c #BDBD63636363",
-"PC c #BDBD4A4A4A4A",
-"AD c #BDBD39393939",
-"BD c #BDBD29292929",
-"CD c #B5B59C9C4A4A",
-"DD c #B5B58C8C3131",
-"ED c #ADAD5A5A5A5A",
-"FD c #ADAD4A4A4A4A",
-"GD c #ADAD31313939",
-"HD c #ADAD29293131",
-"ID c #ADAD29292929",
-"JD c #A5A58C8C4242",
-"KD c #A5A584843939",
-"LD c #A5A539394242",
-"MD c #9C9C39393939",
-"ND c #949442424242",
-"OD c #8C8C21212121",
-"PD c #84845A5A5A5A",
-"AE c #84844A4A4A4A",
-"BE c #7B7B4A4A4A4A",
-"CE c #7B7B39393939",
-"DE c #737363633131",
-"EE c #6B6B31313131",
-"FE c #6B6B29292929",
-"GE c #63635A5A6363",
-"HE c #636342424242",
-"IE c #636318181818",
-"JE c #5A5A39393939",
-"KE c #5A5A21212121",
-"LE c #525242424242",
-"ME c #525218181818",
-"NE c #4A4A4A4A4A4A",
-"OE c #4A4A29292929",
-"PE c #424239392929",
-"AF c #393939393939",
-"BF c #393931311818",
-"CF c #393929292929",
-"DF c #292929292929",
-"EF c #292921211818",
-"FF c #212118181818",
-"GF c #181821212121",
-"HF c #181818181818",
-"IF c #080810101010",
-"JF c #000000000000",
-/* pixels */
-"JFJFJFJFJFJFJFJFJFJFJFJFJFJFJFAFAFGFDFAFJFJFJFJFJFJFJFJFJFJFJFJF",
-"JFJFJFJFJFJFJFJFJFJFJFJFJFJFAFIFHFNEHFHFDFJFJFJFJFJFJFJFJFJFJFJF",
-"JFJFJFJFJFJFJFJFJFJFJFJFJFJFGFHFDFGEHFGFDFJFJFJFJFJFJFJFJFJFJFJF",
-"JFJFJFJFJFJFJFJFJFJFJFJFJFJFHFHFAFDFMEIEBELEJFJFJFJFJFJFJFJFJFJF",
-"JFJFJFJFJFJFJFJFJFJFJFJFJFJFDFJFNEJFADBCJCICFDJEJFJFJFJFJFJFJFJF",
-"JFJFJFJFJFJFJFJFJFJFJFJFJFJFCEFFJEGDJBPBICIBICADHEJFJFJFJFJFJFJF",
-"JFJFJFJFJFJFJFJFJFJFJFJFHFNDACACGBGBADADHBIBACACPCOEJFJFJFJFJFJF",
-"JFJFJFJFJFJFJFJFJFJFJFJFJEJCJBJBHBADHCMDADPBPBACACPCHFJFJFJFJFJF",
-"JFJFJFJFJFJFJFJFJFJFJFJFGDICPBHBHCPBNCMCPDPBJBPBACDCKDKDJDJDEFJF",
-"JFJFJFJFJFJFJFJFJFJFJFJFADACJBHBABHCLBAAGEGDPBIBIBIAMBCCEBNBBFJF",
-"JFJFJFJFJFJFJFJFJFJFJFAFJCACHBHBNANAOBNCOBGBBBPBFBEBDBEADBLCBFJF",
-"JFJFJFJFJFJFJFJFJFJFJFCFJCACHBABOAMAMAMAMAOAHBHBIAEADAFAEBLCDFJF",
-"JFJFJFJFJFJFJFJFJFJFJFCFICKBKBGBOAMALAKAMAMAABPACADAEADBEBCDEFJF",
-"JFJFJFJFJFJFJFJFJFJFJFHFICACJBBBOAMAKALAKANAOAJBHABAEAFANBGCJFJF",
-"JFJFJFJFDFJFJFJFJFJFJFJFMDFCKBHBABOAMAMAMAOAABHBJAGANBGCDEGFJFJF",
-"JFJFIFNEAFNEJFJFJFJFJFJFOEBCKBCBBBABOAOAOAABBBHBKBACDDPEJFJFJFJF",
-"JFJFAFJFHFNENEJFJFJFJFJFJFHEJBKBHBBBABABOABBHBKBKBICOEJFJFJFJFJF",
-"JFJFDFHFJFEFJEPDHEEEEDEDPCOCFDBCKBBBOAOANAOABBJBACKCHFJFJFJFJFJF",
-"JFAFHFFEIDODHDIDJCIDKCBDJCJCBDJCJBPBABNAOANAHBHBACADCEJFJFJFJFJF",
-"JFPEFEICHDJCIDBDJCKCICJCJCICJCACACACJBHBHBJBHBKBACICJCBEJFJFJFJF",
-"JFBEBDICICICICICBDICKCICICICACJCACJBPBHBHBHBJBJBACACICADPEJFJFJF",
-"JFLDKCACICIBIBACPBACJBIBACKBACJBACJBKBHBHBJBHBHBHBKBICJCPCHFJFJF",
-"JFGDICICACACPBKBHBHBHBHBABGBABOAABHBJBJBABOAHBJBHBACKBICADBEJFJF",
-"JFMDKCACACACKBHBHBHBABABOAOAMANAMAOAOAHBABOAABBBHBKBPBICJCMDHFJF",
-"JFFDKCACACKBHBJBBBHBOAOANALAMALAMALAOAABOANAOAABBBHBKBJBADIDHFJF",
-"JFAEKCACACHBACHBABABOANAMAMALAKALAMAOAOAMAMANAOAABJBHBACICIDCFJF",
-"JFFEJCACACKBHBKBHBOAABOAMAMALAMAMAOANAMAMANANAOAGBBBJBPBJCGDBFJF",
-"JFAFBDJCACJBHBABHBHBOAOAOANAMANAOAOALAMAMAMAOAOAABHBJBACICIDFFJF",
-"JFJFGDICACKBHBHBBBHBHBABOAABOAOAMALAMALAMAOANAOAHBJBKBACKCGDJFJF",
-"JFJFKEKCACJBJBHBHBABABABHBOANANAMAMAMAMANAOAOABBCBHBACBCBDPDJFJF",
-"JFJFHFFEGDICACKBHBHBHBBBOAOAOAMANANANAOAOAABHBJBKBACPBMDOEJFJFJF",
-"JFJFJFJFJFHFOEOEMDMDMDECGBGBGBABHBGBOAECABGBPCMDEEOEJFJFJFJFJFJF"};
Deleted: trunk/com.aptana.rdt/icons/rubyred.s.pm
===================================================================
--- trunk/com.aptana.rdt/icons/rubyred.s.pm 2007-05-10 19:35:37 UTC (rev 2458)
+++ trunk/com.aptana.rdt/icons/rubyred.s.pm 2007-05-10 19:36:00 UTC (rev 2459)
@@ -1,100 +0,0 @@
-/* XPM */
-static char *rubyred.s[] = {
-/* width height ncolors chars_per_pixel */
-"24 24 70 2",
-/* colors */
-"AA c #FFFFDEDE6363",
-"BA c #FFFFDEDE4242",
-"CA c #FFFF9C9C5A5A",
-"DA c #FFFF73737373",
-"EA c #FFFF6B6B7373",
-"FA c #FFFF6B6B6B6B",
-"GA c #FFFF5A5A6363",
-"HA c #FFFF5A5A5A5A",
-"IA c #FFFF4A4A5252",
-"JA c #FFFF4A4A4A4A",
-"KA c #F7F7DEDE2929",
-"LA c #F7F739394242",
-"MA c #EFEFCECE1818",
-"NA c #EFEFC6C62121",
-"OA c #EFEFBDBD2121",
-"PA c #EFEFB5B5BDBD",
-"AB c #EFEF73733131",
-"BB c #EFEF5A5A5A5A",
-"CB c #EFEF4A4A4A4A",
-"DB c #EFEF42423939",
-"EB c #EFEF39394242",
-"FB c #EFEF39393939",
-"GB c #E7E77B7B7B7B",
-"HB c #DEDE42424242",
-"IB c #DEDE39393939",
-"JB c #D6D663633131",
-"KB c #CECE5A5A6363",
-"LB c #CECE42424242",
-"MB c #CECE31313939",
-"NB c #CECE29293131",
-"OB c #CECE29292929",
-"PB c #C6C69C9CA5A5",
-"AC c #C6C673733131",
-"BC c #BDBD39393939",
-"CC c #BDBD29292929",
-"DC c #B5B542424242",
-"EC c #ADAD94942121",
-"FC c #ADAD39394242",
-"GC c #A5A584844242",
-"HC c #A5A542424A4A",
-"IC c #A5A539393939",
-"JC c #9C9C5A5A6363",
-"KC c #9C9C42424242",
-"LC c #9C9C39393939",
-"MC c #9C9C29292929",
-"NC c #949463636363",
-"OC c #8C8C73731818",
-"PC c #8C8C29292929",
-"AD c #7B7B63632121",
-"BD c #7B7B42424242",
-"CD c #7B7B29292929",
-"DD c #737363631818",
-"ED c #6B6B5A5A3131",
-"FD c #6B6B29292929",
-"GD c #636331313939",
-"HD c #5A5A21212929",
-"ID c #525239393939",
-"JD c #525218181818",
-"KD c #4A4A18181818",
-"LD c #42424A4A4A4A",
-"MD c #424239392929",
-"ND c #393939393939",
-"OD c #393921212121",
-"PD c #393921211818",
-"AE c #393910101010",
-"BE c #292918181818",
-"CE c #212121212929",
-"DE c #181818181818",
-"EE c #101008080808",
-"FE c #000000000000",
-/* pixels */
-"FEFEFEFEFEFEFEFEFEFEFENDNDCENDFEFEFEFEFEFEFEFEFE",
-"FEFEFEFEFEFEFEFEFEFEDEDEDENDDECEFEFEFEFEFEFEFEFE",
-"FEFEFEFEFEFEFEFEFEFEFEDELDAEFDBDODFEFEFEFEFEFEFE",
-"FEFEFEFEFEFEFEFEFEFEDEDENDFDMBMBDCIDFEFEFEFEFEFE",
-"FEFEFEFEFEFEFEFEFEFECDCDHCMBLBDBIBMBKCFEFEFEFEFE",
-"FEFEFEFEFEFEFEFEFEGDIBCBCBLBICBCHBDBIBGDFEFEFEFE",
-"FEFEFEFEFEFEFEFEFEFCIBCBLBKBPBNCHBHBHBACGCGCEDFE",
-"FEFEFEFEFEFEFEFEDEBCEBCBHAGBPAJCHBCBABNANAMAOCFE",
-"FEFEFEFEFEFEFEFEODNBHBIAHAFAFAFAHACBOABAKANADDFE",
-"FEFEFEFEFEFEFEFENDMBFBCBGAEADAEAHAJAAABAKANAADFE",
-"FEFEFEDEFEFEFEFEFEBCFBJAHAFAEAFAHACBCABAOAECCEFE",
-"FEFELDNDCEFEFEFEFEHDIBEBCBHAHAHAIAEBEBJBMDFEFEFE",
-"FECEEEDELDFEFEFEFEFEFCFBLAJAHAIACBJAIBPCFEFEFEFE",
-"FEPDAEKDFDKCLCICDCDCBCMBEBIAHAHAHAEBIBPCFEFEFEFE",
-"FEHDLBCCCCCCNBNBNBIBNBIBIBEBHBCBEBIBIBMBBDFEFEFE",
-"FEKCMBIBMBMBOBMBMBOBMBIBMBEBJACBCBCBFBMBBCIDFEFE",
-"FEBCMBIBIBDBHBCBFBCBCBCBCBEBCBCBJAEBCBIBMBBCBEFE",
-"FECCIBIBFBCBJACBHAHAGAFAGAHAEBHAIAJACBEBIBBCHDFE",
-"FEBCIBIBEBCBCBIAHAGAFAFAEAFAIAHAGAHACBEBIBMBHDFE",
-"FELCMBFBHBEBJAIAHAFAEADAFAGAGAFAGAHAIACBIBMBCDFE",
-"FECDIBIBCBIACBHAHAGAFAGAHAFAFAFAFAIAHACBIBMBFDFE",
-"FEJDOBIBEBCBCBCBCBHAIAHAFAEAFAFAHAHACBFBIBOBHDFE",
-"FEBEMCMBIBCBJAJAIAJAGAFAGAFAGAHAIACBEBFBBCPCDEFE",
-"FEFEFEFEBEHDFCLCDCGABBCBCBBBBBGALBLCFDBEFEFEFEFE"};
Deleted: trunk/com.aptana.rdt/icons/rubyred.t.pm
===================================================================
--- trunk/com.aptana.rdt/icons/rubyred.t.pm 2007-05-10 19:35:37 UTC (rev 2458)
+++ trunk/com.aptana.rdt/icons/rubyred.t.pm 2007-05-10 19:36:00 UTC (rev 2459)
@@ -1,72 +0,0 @@
-/* XPM */
-static char *rubyred.t[] = {
-/* width height ncolors chars_per_pixel */
-"16 16 50 2",
-/* colors */
-"AA c #FFFFCECE5252",
-"BA c #FFFFCECE3939",
-"CA c #FFFF6B6B7373",
-"DA c #FFFF6B6B6B6B",
-"EA c #FFFF5A5A6363",
-"FA c #FFFF5A5A5A5A",
-"GA c #FFFF52524A4A",
-"HA c #FFFF4A4A5252",
-"IA c #FFFF4A4A4A4A",
-"JA c #F7F7DEDE2929",
-"KA c #EFEF42424242",
-"LA c #EFEF39394242",
-"MA c #EFEF39393939",
-"NA c #E7E75A5A5A5A",
-"OA c #DEDEADADADAD",
-"PA c #DEDE7B7B3131",
-"AB c #DEDE42424242",
-"BB c #DEDE39393939",
-"CB c #D6D652525252",
-"DB c #D6D639394242",
-"EB c #D6D629293131",
-"FB c #CECE39393939",
-"GB c #CECE29293131",
-"HB c #CECE29292929",
-"IB c #C6C6A5A52929",
-"JB c #BDBD52525252",
-"KB c #B5B529292929",
-"LB c #ADAD94941818",
-"MB c #A5A584842929",
-"NB c #A5A539393939",
-"OB c #9C9C31313939",
-"PB c #9C9C29292929",
-"AC c #94947B7B2121",
-"BC c #8C8C29293131",
-"CC c #848439393939",
-"DC c #737342424242",
-"EC c #737321212121",
-"FC c #5A5A21212121",
-"GC c #5A5A18181818",
-"HC c #525231313131",
-"IC c #4A4A21212121",
-"JC c #42424A4A4A4A",
-"KC c #424239392929",
-"LC c #393929293131",
-"MC c #393921212121",
-"NC c #393910101010",
-"OC c #292929292929",
-"PC c #292910101010",
-"AD c #181810101818",
-"BD c #000000000000",
-/* pixels */
-"BDBDBDBDBDBDBDOCLCOCBDBDBDBDBDBD",
-"BDBDBDBDBDBDBDADLCECHCBDBDBDBDBD",
-"BDBDBDBDBDBDPCICDCBBFBOBPCBDBDBD",
-"BDBDBDBDBDBDOBKAABOBABABOBBDBDBD",
-"BDBDBDBDBDADFBGACBOAJBKAPAIBMBBD",
-"BDBDBDBDBDMCFBHADADADAGABABALBBD",
-"BDBDBDBDBDOCBBKADACAEAGAAAJAACBD",
-"BDJCLCBDBDBDBCIAIAFANAKAABKCBDBD",
-"ADPCKCICFCGCCCEBIAFAIAKANBBDBDBD",
-"PCFBGBKBGBGBHBMADBKAKAMABBDCBDBD",
-"FCFBBBBBBBDBDBMAKAKAHAKABBFBICBD",
-"GCBBBBKAKAFAFADAEAIANAHAKABBBCBD",
-"GCBBLAKAFAHACACADAFAEAFAKADBNBBD",
-"NCEBABHAKAFADAEAEADADAFAHAMAPBBD",
-"ADKBBBKAFAIAHADADAEAFAHAABFBECBD",
-"BDBDADECDCABDAKAHAFACBOBICBDBDBD"};
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|
|
From: <caw...@us...> - 2007-05-10 19:35:39
|
Revision: 2458
http://svn.sourceforge.net/rubyeclipse/?rev=2458&view=rev
Author: cawilliams
Date: 2007-05-10 12:35:37 -0700 (Thu, 10 May 2007)
Log Message:
-----------
try to auto-detect new ruby projects and add ruby nature
Modified Paths:
--------------
trunk/org.rubypeople.rdt.core/src/org/rubypeople/rdt/core/RubyCore.java
Modified: trunk/org.rubypeople.rdt.core/src/org/rubypeople/rdt/core/RubyCore.java
===================================================================
--- trunk/org.rubypeople.rdt.core/src/org/rubypeople/rdt/core/RubyCore.java 2007-05-10 17:08:02 UTC (rev 2457)
+++ trunk/org.rubypeople.rdt.core/src/org/rubypeople/rdt/core/RubyCore.java 2007-05-10 19:35:37 UTC (rev 2458)
@@ -22,6 +22,11 @@
import org.eclipse.core.resources.IProject;
import org.eclipse.core.resources.IProjectDescription;
import org.eclipse.core.resources.IResource;
+import org.eclipse.core.resources.IResourceChangeEvent;
+import org.eclipse.core.resources.IResourceChangeListener;
+import org.eclipse.core.resources.IResourceDelta;
+import org.eclipse.core.resources.IResourceProxy;
+import org.eclipse.core.resources.IResourceProxyVisitor;
import org.eclipse.core.resources.IWorkspace;
import org.eclipse.core.resources.IWorkspaceRoot;
import org.eclipse.core.resources.IWorkspaceRunnable;
@@ -39,6 +44,7 @@
import org.eclipse.core.runtime.Plugin;
import org.eclipse.core.runtime.Status;
import org.eclipse.core.runtime.jobs.ISchedulingRule;
+import org.eclipse.core.runtime.jobs.Job;
import org.eclipse.core.runtime.preferences.IEclipsePreferences;
import org.osgi.framework.Bundle;
import org.osgi.framework.BundleContext;
@@ -322,6 +328,8 @@
SymbolIndex.setVerbose(isDebugOptionTrue(SYMBOL_INDEX_VERBOSE_OPTION));
RubyBuilder.setVerbose(isDebugOptionTrue(BUILDER_VERBOSE_OPTION));
+ ResourcesPlugin.getWorkspace().addResourceChangeListener(new RubyProjectListener(), IResourceChangeEvent.POST_CHANGE);
+
SymbolIndexResourceChangeListener.register(symbolIndex);
IndexUpdater indexUpdater = new IndexUpdater(symbolIndex);
List rubyProjects = Arrays.asList(getRubyProjects());
@@ -330,7 +338,7 @@
}
/*
- * (non-Javadoc) Shutdown the JavaCore plug-in. <p> De-registers the
+ * (non-Javadoc) Shutdown the RubyCore plug-in. <p> De-registers the
* RubyModelManager as a resource changed listener and save participant. <p>
*
* @see org.eclipse.core.runtime.Plugin#stop(BundleContext)
@@ -1409,4 +1417,71 @@
return RubyModelManager.createRubyScriptFrom(file, null/*unknown ruby project*/);
}
+
+ private static class RubyProjectListener implements IResourceChangeListener {
+
+ public void resourceChanged(IResourceChangeEvent event) {
+ if (event == null)
+ return;
+ IResourceDelta delta = event.getDelta();
+ checkDelta(delta);
+ }
+
+ private void checkDelta(IResourceDelta delta) {
+ if (delta == null)
+ return;
+ IResource resource = delta.getResource();
+ if (resource instanceof IProject) {
+ // if (IResourceDelta.ADDED != delta.getKind()) //
+ // FIXME Try to narrow down which deltas we actually
+ // check
+ // return;
+ final IProject project = (IProject) resource;
+ if (!RubyProject.hasRubyNature(project)) {
+ // check for ruby scripts, and if it has any,
+ // add the nature.
+ IResourceProxyVisitor visitor = new IResourceProxyVisitor() {
+ private boolean added = false;
+
+ public boolean visit(IResourceProxy proxy)
+ throws CoreException {
+ if (proxy.getType() == IResource.FILE) {
+ if (RubyCore
+ .isRubyLikeFileName(proxy.getName())) {
+ Job job = new Job("Add Ruby Nature") {
+
+ @Override
+ protected IStatus run(
+ IProgressMonitor monitor) {
+ try {
+ RubyCore.addRubyNature(project,
+ monitor);
+ } catch (CoreException e) {
+ RubyCore.log(e);
+ }
+ return Status.OK_STATUS;
+ }
+
+ };
+ job.schedule(500);
+ added = true;
+ }
+ }
+ return !added;
+ }
+
+ };
+ try {
+ project.accept(visitor, IResource.NONE);
+ } catch (CoreException e) {
+ RubyCore.log(e);
+ }
+ }
+ IResourceDelta[] children = delta.getAffectedChildren();
+ for (int i = 0; i < children.length; i++) {
+ checkDelta(children[i]);
+ }
+ }
+ }
+ }
}
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|
|
From: <caw...@us...> - 2007-05-10 17:08:05
|
Revision: 2457
http://svn.sourceforge.net/rubyeclipse/?rev=2457&view=rev
Author: cawilliams
Date: 2007-05-10 10:08:02 -0700 (Thu, 10 May 2007)
Log Message:
-----------
wrap showPage() call in an asyncExec
Modified Paths:
--------------
trunk/org.rubypeople.rdt.ui/src/org/rubypeople/rdt/internal/ui/infoviews/RIView.java
Modified: trunk/org.rubypeople.rdt.ui/src/org/rubypeople/rdt/internal/ui/infoviews/RIView.java
===================================================================
--- trunk/org.rubypeople.rdt.ui/src/org/rubypeople/rdt/internal/ui/infoviews/RIView.java 2007-05-10 13:10:19 UTC (rev 2456)
+++ trunk/org.rubypeople.rdt.ui/src/org/rubypeople/rdt/internal/ui/infoviews/RIView.java 2007-05-10 17:08:02 UTC (rev 2457)
@@ -36,6 +36,7 @@
import org.eclipse.swt.widgets.Display;
import org.eclipse.swt.widgets.Label;
import org.eclipse.swt.widgets.Text;
+import org.eclipse.ui.PlatformUI;
import org.eclipse.ui.part.PageBook;
import org.eclipse.ui.part.ViewPart;
import org.rubypeople.rdt.internal.ui.RubyPlugin;
@@ -247,7 +248,11 @@
// If we can't find it ourselves then display an error to the user
if (file == null || !file.exists() || !file.isFile()) {
riFound = false;
- pageBook.showPage(riNotFoundLabel);
+ PlatformUI.getWorkbench().getDisplay().asyncExec(new Runnable() {
+ public void run() {
+ pageBook.showPage(riNotFoundLabel);
+ }
+ });
return;
}
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|
|
From: <caw...@us...> - 2007-05-10 13:10:21
|
Revision: 2456
http://svn.sourceforge.net/rubyeclipse/?rev=2456&view=rev
Author: cawilliams
Date: 2007-05-10 06:10:19 -0700 (Thu, 10 May 2007)
Log Message:
-----------
remove references to non-existant stuff
Modified Paths:
--------------
trunk/com.aptana.rdt/META-INF/MANIFEST.MF
trunk/com.aptana.rdt/build.properties
Modified: trunk/com.aptana.rdt/META-INF/MANIFEST.MF
===================================================================
--- trunk/com.aptana.rdt/META-INF/MANIFEST.MF 2007-05-09 18:43:50 UTC (rev 2455)
+++ trunk/com.aptana.rdt/META-INF/MANIFEST.MF 2007-05-10 13:10:19 UTC (rev 2456)
@@ -3,8 +3,7 @@
Bundle-Name: Aptana RDT Extensions
Bundle-SymbolicName: com.aptana.rdt;singleton:=true
Bundle-Version: 0.0.0
-Bundle-ClassPath: lib/sourcetaplm.jar,
- .
+Bundle-ClassPath: .
Bundle-Activator: com.aptana.rdt.AptanaRDTPlugin
Eclipse-LazyStart: true
Bundle-Vendor: Aptana, Inc.
Modified: trunk/com.aptana.rdt/build.properties
===================================================================
--- trunk/com.aptana.rdt/build.properties 2007-05-09 18:43:50 UTC (rev 2455)
+++ trunk/com.aptana.rdt/build.properties 2007-05-10 13:10:19 UTC (rev 2456)
@@ -3,8 +3,6 @@
icons/,\
cheatsheets/,\
plugin.properties,\
- plugin_customization.ini,\
- public.key,\
lib/,\
.
src.includes = src/
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|
|
From: <caw...@us...> - 2007-05-09 18:43:52
|
Revision: 2455
http://svn.sourceforge.net/rubyeclipse/?rev=2455&view=rev
Author: cawilliams
Date: 2007-05-09 11:43:50 -0700 (Wed, 09 May 2007)
Log Message:
-----------
try to avoid null pointer when user has no default interprter installed
Modified Paths:
--------------
trunk/org.rubypeople.rdt.ui/src/org/rubypeople/rdt/internal/ui/wizards/RubyProjectWizardFirstPage.java
Modified: trunk/org.rubypeople.rdt.ui/src/org/rubypeople/rdt/internal/ui/wizards/RubyProjectWizardFirstPage.java
===================================================================
--- trunk/org.rubypeople.rdt.ui/src/org/rubypeople/rdt/internal/ui/wizards/RubyProjectWizardFirstPage.java 2007-05-09 16:49:33 UTC (rev 2454)
+++ trunk/org.rubypeople.rdt.ui/src/org/rubypeople/rdt/internal/ui/wizards/RubyProjectWizardFirstPage.java 2007-05-09 18:43:50 UTC (rev 2455)
@@ -431,7 +431,9 @@
}
private String getDefaultJVMName() {
- return RubyRuntime.getDefaultVMInstall().getName();
+ IVMInstall vm = RubyRuntime.getDefaultVMInstall();
+ if (vm == null) return "";
+ return vm.getName();
}
private String getDefaultJVMLabel() {
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|
|
From: <caw...@us...> - 2007-05-09 16:49:34
|
Revision: 2454
http://svn.sourceforge.net/rubyeclipse/?rev=2454&view=rev
Author: cawilliams
Date: 2007-05-09 09:49:33 -0700 (Wed, 09 May 2007)
Log Message:
-----------
don't add working directory to loadpath (often this is the project path) - it's unnecessary and in the case of Rails messes a lot of stuff up
Modified Paths:
--------------
trunk/org.rubypeople.rdt.launching/src/org/rubypeople/rdt/internal/launching/StandardVMDebugger.java
trunk/org.rubypeople.rdt.launching/src/org/rubypeople/rdt/internal/launching/StandardVMRunner.java
Modified: trunk/org.rubypeople.rdt.launching/src/org/rubypeople/rdt/internal/launching/StandardVMDebugger.java
===================================================================
--- trunk/org.rubypeople.rdt.launching/src/org/rubypeople/rdt/internal/launching/StandardVMDebugger.java 2007-05-09 15:30:23 UTC (rev 2453)
+++ trunk/org.rubypeople.rdt.launching/src/org/rubypeople/rdt/internal/launching/StandardVMDebugger.java 2007-05-09 16:49:33 UTC (rev 2454)
@@ -75,7 +75,7 @@
String[] cp = config.getLoadPath();
if (cp.length > 0) {
- arguments.addAll(convertLoadPath(cp)); // TODO If our working directory is equal to loadpath, don't add loadpath
+ arguments.addAll(convertLoadPath(config, cp));
}
arguments.addAll(debugSpecificVMArgs(debugTarget));
Modified: trunk/org.rubypeople.rdt.launching/src/org/rubypeople/rdt/internal/launching/StandardVMRunner.java
===================================================================
--- trunk/org.rubypeople.rdt.launching/src/org/rubypeople/rdt/internal/launching/StandardVMRunner.java 2007-05-09 15:30:23 UTC (rev 2453)
+++ trunk/org.rubypeople.rdt.launching/src/org/rubypeople/rdt/internal/launching/StandardVMRunner.java 2007-05-09 16:49:33 UTC (rev 2454)
@@ -167,11 +167,21 @@
return file.exists() && file.isFile();
}
- protected List<String> convertLoadPath(String[] lp) {
+ protected List<String> convertLoadPath(VMRunnerConfiguration config, String[] lp) {
+ String working = null;
+ try {
+ File workingDir = getWorkingDir(config);
+ if (workingDir != null) working = workingDir.getAbsolutePath();
+ } catch (CoreException e) {
+ // ignore
+ }
List<String> strings = new ArrayList<String>();
for (int i= 0; i < lp.length; i++) {
+ String path = lp[i];
+ // Don't add project to loadpath if project is working directory
+ if (working != null && working.equals(path)) continue;
strings.add("-I"); //$NON-NLS-1$
- strings.add(lp[i]);
+ strings.add(path);
}
return strings;
}
@@ -207,7 +217,7 @@
String[] lp= config.getLoadPath();
if (lp.length > 0) {
- arguments.addAll(convertLoadPath(lp));
+ arguments.addAll(convertLoadPath(config, lp));
}
arguments.add(END_OF_OPTIONS_DELIMITER);
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|
|
From: <caw...@us...> - 2007-05-09 15:30:25
|
Revision: 2453
http://svn.sourceforge.net/rubyeclipse/?rev=2453&view=rev
Author: cawilliams
Date: 2007-05-09 08:30:23 -0700 (Wed, 09 May 2007)
Log Message:
-----------
add useful class from RadRails
Added Paths:
-----------
trunk/org.rubypeople.rdt.ui/src/org/rubypeople/rdt/ui/TableViewerSorter.java
Added: trunk/org.rubypeople.rdt.ui/src/org/rubypeople/rdt/ui/TableViewerSorter.java
===================================================================
--- trunk/org.rubypeople.rdt.ui/src/org/rubypeople/rdt/ui/TableViewerSorter.java (rev 0)
+++ trunk/org.rubypeople.rdt.ui/src/org/rubypeople/rdt/ui/TableViewerSorter.java 2007-05-09 15:30:23 UTC (rev 2453)
@@ -0,0 +1,101 @@
+package org.rubypeople.rdt.ui;
+
+import org.eclipse.jface.viewers.TableViewer;
+import org.eclipse.jface.viewers.Viewer;
+import org.eclipse.jface.viewers.ViewerSorter;
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.events.SelectionAdapter;
+import org.eclipse.swt.events.SelectionEvent;
+import org.eclipse.swt.widgets.Table;
+import org.eclipse.swt.widgets.TableColumn;
+
+/**
+ * A generic TableViewer Sorter.
+ *
+ * Mostly taken from https://bugs.eclipse.org/bugs/show_bug.cgi?id=158112
+ *
+ * @author brad
+ */
+public class TableViewerSorter extends ViewerSorter {
+ private int columnIndex = 0;
+
+ public TableViewerSorter(int columnIndex) {
+ this.columnIndex = columnIndex;
+ }
+
+ /**
+ * Compares the two objects provided.
+ *
+ * If numbers are in the relevant string then the objects are returned in
+ * number order (rather than string order).
+ */
+ public int compare(Viewer viewer, Object e1, Object e2) {
+ int order = 0;
+ if (viewer instanceof TableViewer) {
+ TableViewer tv = (TableViewer) viewer;
+ Table table = tv.getTable();
+ table.setSortColumn(table.getColumn(columnIndex));
+ int idx1 = -1, idx2 = -1;
+ for (int i = 0; i < table.getItemCount(); i++) {
+ Object obj = tv.getElementAt(i);
+ if (obj.equals(e1)) {
+ idx1 = i;
+ }
+ else if (obj.equals(e2)) {
+ idx2 = i;
+ }
+ if (idx1 > 0 && idx2 > 0) {
+ break;
+ }
+ }
+
+ if (idx1 > -1 && idx2 > -1) {
+ String str1 = table.getItems()[idx1].getText(this.columnIndex);
+ String str2 = table.getItems()[idx2].getText(this.columnIndex);
+ order = str1.compareTo(str2);
+
+ try {
+ Double d1 = Double.valueOf(str1);
+ Double d2 = Double.valueOf(str2);
+ order = d1.compareTo(d2);
+ }
+ catch (NumberFormatException e) {
+ // do nothing
+ }
+
+ if (table.getSortDirection() != SWT.UP) {
+ order *= -1;
+ }
+ }
+ }
+
+ return order;
+ }
+
+ /**
+ * The TableViewer passed in will be set up to use this sorter when a column
+ * is clicked.
+ */
+ public static void bind(final TableViewer tableViewer) {
+ final Table table = tableViewer.getTable();
+ for (int i = 0; i < table.getColumnCount(); i++) {
+ final int columnNum = i;
+ TableColumn column = table.getColumn(i);
+ column.addSelectionListener(new SelectionAdapter() {
+ public void widgetSelected(final SelectionEvent e) {
+ TableViewerSorter sorter = new TableViewerSorter(columnNum);
+ if (table.getSortDirection() == SWT.UP) {
+ table.setSortDirection(SWT.DOWN);
+ }
+ else if (table.getSortDirection() == SWT.DOWN) {
+ table.setSortDirection(SWT.UP);
+ }
+ else {
+ table.setSortDirection(SWT.UP);
+ }
+ tableViewer.setSorter(sorter);
+ }
+ });
+ }
+ }
+}
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|
|
From: <caw...@us...> - 2007-05-09 13:09:08
|
Revision: 2452
http://svn.sourceforge.net/rubyeclipse/?rev=2452&view=rev
Author: cawilliams
Date: 2007-05-09 06:09:06 -0700 (Wed, 09 May 2007)
Log Message:
-----------
grab interface from RadRails, make our base scanner classes implement it
Modified Paths:
--------------
trunk/org.rubypeople.rdt.ui/src/org/rubypeople/rdt/internal/ui/text/ruby/AbstractRubyScanner.java
trunk/org.rubypeople.rdt.ui/src/org/rubypeople/rdt/internal/ui/text/ruby/AbstractRubyTokenScanner.java
Added Paths:
-----------
trunk/org.rubypeople.rdt.ui/src/org/rubypeople/rdt/ui/text/IAbstractManagedScanner.java
Modified: trunk/org.rubypeople.rdt.ui/src/org/rubypeople/rdt/internal/ui/text/ruby/AbstractRubyScanner.java
===================================================================
--- trunk/org.rubypeople.rdt.ui/src/org/rubypeople/rdt/internal/ui/text/ruby/AbstractRubyScanner.java 2007-05-08 14:14:18 UTC (rev 2451)
+++ trunk/org.rubypeople.rdt.ui/src/org/rubypeople/rdt/internal/ui/text/ruby/AbstractRubyScanner.java 2007-05-09 13:09:06 UTC (rev 2452)
@@ -18,10 +18,11 @@
import org.eclipse.swt.graphics.RGB;
import org.eclipse.swt.widgets.Display;
import org.rubypeople.rdt.ui.PreferenceConstants;
+import org.rubypeople.rdt.ui.text.IAbstractManagedScanner;
import org.rubypeople.rdt.ui.text.IColorManager;
import org.rubypeople.rdt.ui.text.IColorManagerExtension;
-public abstract class AbstractRubyScanner extends BufferedRuleBasedScanner {
+public abstract class AbstractRubyScanner extends BufferedRuleBasedScanner implements IAbstractManagedScanner {
private String[] fPropertyNamesColor;
private String[] fPropertyNamesBgColor;
Modified: trunk/org.rubypeople.rdt.ui/src/org/rubypeople/rdt/internal/ui/text/ruby/AbstractRubyTokenScanner.java
===================================================================
--- trunk/org.rubypeople.rdt.ui/src/org/rubypeople/rdt/internal/ui/text/ruby/AbstractRubyTokenScanner.java 2007-05-08 14:14:18 UTC (rev 2451)
+++ trunk/org.rubypeople.rdt.ui/src/org/rubypeople/rdt/internal/ui/text/ruby/AbstractRubyTokenScanner.java 2007-05-09 13:09:06 UTC (rev 2452)
@@ -15,10 +15,11 @@
import org.eclipse.swt.graphics.RGB;
import org.eclipse.swt.widgets.Display;
import org.rubypeople.rdt.ui.PreferenceConstants;
+import org.rubypeople.rdt.ui.text.IAbstractManagedScanner;
import org.rubypeople.rdt.ui.text.IColorManager;
import org.rubypeople.rdt.ui.text.IColorManagerExtension;
-public abstract class AbstractRubyTokenScanner implements ITokenScanner {
+public abstract class AbstractRubyTokenScanner implements ITokenScanner, IAbstractManagedScanner {
private String[] fPropertyNamesColor;
private String[] fPropertyNamesBgColor;
Added: trunk/org.rubypeople.rdt.ui/src/org/rubypeople/rdt/ui/text/IAbstractManagedScanner.java
===================================================================
--- trunk/org.rubypeople.rdt.ui/src/org/rubypeople/rdt/ui/text/IAbstractManagedScanner.java (rev 0)
+++ trunk/org.rubypeople.rdt.ui/src/org/rubypeople/rdt/ui/text/IAbstractManagedScanner.java 2007-05-09 13:09:06 UTC (rev 2452)
@@ -0,0 +1,16 @@
+package org.rubypeople.rdt.ui.text;
+
+import org.eclipse.jface.text.rules.ITokenScanner;
+import org.eclipse.jface.util.PropertyChangeEvent;
+
+/**
+ * @author matt
+ *
+ */
+public interface IAbstractManagedScanner extends ITokenScanner {
+
+ public boolean affectsBehavior(PropertyChangeEvent event);
+
+ public void adaptToPreferenceChange(PropertyChangeEvent event);
+
+}
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|
|
From: <caw...@us...> - 2007-05-08 14:14:20
|
Revision: 2451
http://svn.sourceforge.net/rubyeclipse/?rev=2451&view=rev
Author: cawilliams
Date: 2007-05-08 07:14:18 -0700 (Tue, 08 May 2007)
Log Message:
-----------
Modified Paths:
--------------
trunk/org.rubypeople.rdt.core/src/org/rubypeople/rdt/internal/core/SourceParser.java
Modified: trunk/org.rubypeople.rdt.core/src/org/rubypeople/rdt/internal/core/SourceParser.java
===================================================================
--- trunk/org.rubypeople.rdt.core/src/org/rubypeople/rdt/internal/core/SourceParser.java 2007-05-08 14:14:02 UTC (rev 2450)
+++ trunk/org.rubypeople.rdt.core/src/org/rubypeople/rdt/internal/core/SourceParser.java 2007-05-08 14:14:18 UTC (rev 2451)
@@ -126,6 +126,13 @@
}
@Override
+ public Instruction visitConstNode(ConstNode iVisited) {
+ // FIXME ConstNode could be a reference to a type, or a constant(field)!
+ requestor.acceptTypeReference(iVisited.getName(), iVisited.getPosition().getStartOffset(), iVisited.getPosition().getEndOffset());
+ return super.visitConstNode(iVisited);
+ }
+
+ @Override
public Instruction visitModuleNode(ModuleNode iVisited) {
TypeInfo typeInfo = new TypeInfo();
typeInfo.name = getFullyQualifiedName(iVisited.getCPath());
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|
|
From: <caw...@us...> - 2007-05-08 14:14:05
|
Revision: 2450
http://svn.sourceforge.net/rubyeclipse/?rev=2450&view=rev
Author: cawilliams
Date: 2007-05-08 07:14:02 -0700 (Tue, 08 May 2007)
Log Message:
-----------
Modified Paths:
--------------
trunk/org.rubypeople.rdt.core/src/org/rubypeople/rdt/internal/core/search/indexing/SourceIndexer.java
trunk/org.rubypeople.rdt.core/src/org/rubypeople/rdt/internal/core/search/indexing/SourceIndexerRequestor.java
Modified: trunk/org.rubypeople.rdt.core/src/org/rubypeople/rdt/internal/core/search/indexing/SourceIndexer.java
===================================================================
--- trunk/org.rubypeople.rdt.core/src/org/rubypeople/rdt/internal/core/search/indexing/SourceIndexer.java 2007-05-08 14:13:35 UTC (rev 2449)
+++ trunk/org.rubypeople.rdt.core/src/org/rubypeople/rdt/internal/core/search/indexing/SourceIndexer.java 2007-05-08 14:14:02 UTC (rev 2450)
@@ -61,7 +61,7 @@
char[] indexKey = TypeDeclarationPattern.createIndexKey(modifiers, name, packageName, enclosingTypeNames, secondary);
addIndexEntry(TYPE_DECL, indexKey);
- if (superclass != null) {
+ if (superclass != null && !superclass.equals("Object")) {
addTypeReference(superclass);
}
// FIXME Add back in references to super type when we have SuperTypePattern!
@@ -77,7 +77,7 @@
public void addFieldDeclaration(char[] typeName, char[] fieldName) {
addIndexEntry(FIELD_DECL, FieldPattern.createIndexKey(fieldName));
- addTypeReference(typeName);
+ if (typeName != null) addTypeReference(typeName);
}
public void addFieldReference(char[] fieldName) {
addNameReference(fieldName);
Modified: trunk/org.rubypeople.rdt.core/src/org/rubypeople/rdt/internal/core/search/indexing/SourceIndexerRequestor.java
===================================================================
--- trunk/org.rubypeople.rdt.core/src/org/rubypeople/rdt/internal/core/search/indexing/SourceIndexerRequestor.java 2007-05-08 14:13:35 UTC (rev 2449)
+++ trunk/org.rubypeople.rdt.core/src/org/rubypeople/rdt/internal/core/search/indexing/SourceIndexerRequestor.java 2007-05-08 14:14:02 UTC (rev 2450)
@@ -21,8 +21,7 @@
}
public void acceptFieldReference(String name, int offset) {
- // TODO Auto-generated method stub
-
+ indexer.addFieldReference(name.toCharArray());
}
public void acceptImport(String value, int startOffset, int endOffset) {
@@ -35,7 +34,7 @@
}
public void acceptMixin(String string) {
- // TODO Auto-generated method stub
+ indexer.addTypeReference(string.toCharArray());
}
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|
|
From: <caw...@us...> - 2007-05-08 14:13:37
|
Revision: 2449
http://svn.sourceforge.net/rubyeclipse/?rev=2449&view=rev
Author: cawilliams
Date: 2007-05-08 07:13:35 -0700 (Tue, 08 May 2007)
Log Message:
-----------
rename RubyLocalVar to LocalVariable
Modified Paths:
--------------
trunk/org.rubypeople.rdt.core/src/org/rubypeople/rdt/internal/core/RubyScriptStructureBuilder.java
Added Paths:
-----------
trunk/org.rubypeople.rdt.core/src/org/rubypeople/rdt/internal/core/LocalVariable.java
Removed Paths:
-------------
trunk/org.rubypeople.rdt.core/src/org/rubypeople/rdt/internal/core/RubyLocalVar.java
Copied: trunk/org.rubypeople.rdt.core/src/org/rubypeople/rdt/internal/core/LocalVariable.java (from rev 2395, trunk/org.rubypeople.rdt.core/src/org/rubypeople/rdt/internal/core/RubyLocalVar.java)
===================================================================
--- trunk/org.rubypeople.rdt.core/src/org/rubypeople/rdt/internal/core/LocalVariable.java (rev 0)
+++ trunk/org.rubypeople.rdt.core/src/org/rubypeople/rdt/internal/core/LocalVariable.java 2007-05-08 14:13:35 UTC (rev 2449)
@@ -0,0 +1,84 @@
+/*
+ * Author: C.Williams
+ *
+ * Copyright (c) 2004 RubyPeople.
+ *
+ * This file is part of the Ruby Development Tools (RDT) plugin for eclipse. You
+ * can get copy of the GPL along with further information about RubyPeople and
+ * third party software bundled with RDT in the file
+ * org.rubypeople.rdt.core_x.x.x/RDT.license or otherwise at
+ * http://www.rubypeople.org/RDT.license.
+ *
+ * RDT is free software; you can redistribute it and/or modify it under the
+ * terms of the GNU General Public License as published by the Free Software
+ * Foundation; either version 2 of the License, or (at your option) any later
+ * version.
+ *
+ * RDT is distributed in the hope that it will be useful, but WITHOUT ANY
+ * WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR
+ * A PARTICULAR PURPOSE. See the GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License along with
+ * RDT; if not, write to the Free Software Foundation, Inc., 59 Temple Place,
+ * Suite 330, Boston, MA 02111-1307 USA
+ */
+package org.rubypeople.rdt.internal.core;
+
+import java.util.HashMap;
+
+import org.eclipse.core.resources.IResource;
+import org.eclipse.core.runtime.IProgressMonitor;
+import org.rubypeople.rdt.internal.core.util.Util;
+
+/**
+ * @author Chris
+ *
+ */
+public class LocalVariable extends RubyField {
+
+ private int start;
+ private int end;
+
+ /**
+ * @param name
+ */
+ public LocalVariable(RubyElement parent, String name, int start, int end) {
+ super(parent, name);
+ }
+
+ /*
+ * (non-Javadoc)
+ *
+ * @see org.rubypeople.rdt.internal.core.parser.RubyElement#getElementType()
+ */
+ public int getElementType() {
+ return RubyElement.LOCAL_VARIABLE;
+ }
+
+ protected Object createElementInfo() {
+ // a local variable has no info
+ return null;
+ }
+
+ public IResource getCorrespondingResource() {
+ return null;
+ }
+
+ public int hashCode() {
+ return Util.combineHashCodes(this.parent.hashCode(), this.start);
+ }
+
+ public boolean equals(Object o) {
+ if (!(o instanceof LocalVariable)) return false;
+ LocalVariable other = (LocalVariable)o;
+ return
+ this.start == other.start
+ && this.end == other.end
+ && super.equals(o);
+ }
+
+ protected void generateInfos(Object info, HashMap newElements, IProgressMonitor pm) {
+ // a local variable has no info
+ }
+
+}
Property changes on: trunk/org.rubypeople.rdt.core/src/org/rubypeople/rdt/internal/core/LocalVariable.java
___________________________________________________________________
Name: svn:keywords
+ Author Date Id Revision
Name: svn:eol-style
+ native
Deleted: trunk/org.rubypeople.rdt.core/src/org/rubypeople/rdt/internal/core/RubyLocalVar.java
===================================================================
--- trunk/org.rubypeople.rdt.core/src/org/rubypeople/rdt/internal/core/RubyLocalVar.java 2007-05-08 14:12:51 UTC (rev 2448)
+++ trunk/org.rubypeople.rdt.core/src/org/rubypeople/rdt/internal/core/RubyLocalVar.java 2007-05-08 14:13:35 UTC (rev 2449)
@@ -1,84 +0,0 @@
-/*
- * Author: C.Williams
- *
- * Copyright (c) 2004 RubyPeople.
- *
- * This file is part of the Ruby Development Tools (RDT) plugin for eclipse. You
- * can get copy of the GPL along with further information about RubyPeople and
- * third party software bundled with RDT in the file
- * org.rubypeople.rdt.core_x.x.x/RDT.license or otherwise at
- * http://www.rubypeople.org/RDT.license.
- *
- * RDT is free software; you can redistribute it and/or modify it under the
- * terms of the GNU General Public License as published by the Free Software
- * Foundation; either version 2 of the License, or (at your option) any later
- * version.
- *
- * RDT is distributed in the hope that it will be useful, but WITHOUT ANY
- * WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR
- * A PARTICULAR PURPOSE. See the GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License along with
- * RDT; if not, write to the Free Software Foundation, Inc., 59 Temple Place,
- * Suite 330, Boston, MA 02111-1307 USA
- */
-package org.rubypeople.rdt.internal.core;
-
-import java.util.HashMap;
-
-import org.eclipse.core.resources.IResource;
-import org.eclipse.core.runtime.IProgressMonitor;
-import org.rubypeople.rdt.internal.core.util.Util;
-
-/**
- * @author Chris
- *
- */
-public class RubyLocalVar extends RubyField {
-
- private int start;
- private int end;
-
- /**
- * @param name
- */
- public RubyLocalVar(RubyElement parent, String name, int start, int end) {
- super(parent, name);
- }
-
- /*
- * (non-Javadoc)
- *
- * @see org.rubypeople.rdt.internal.core.parser.RubyElement#getElementType()
- */
- public int getElementType() {
- return RubyElement.LOCAL_VARIABLE;
- }
-
- protected Object createElementInfo() {
- // a local variable has no info
- return null;
- }
-
- public IResource getCorrespondingResource() {
- return null;
- }
-
- public int hashCode() {
- return Util.combineHashCodes(this.parent.hashCode(), this.start);
- }
-
- public boolean equals(Object o) {
- if (!(o instanceof RubyLocalVar)) return false;
- RubyLocalVar other = (RubyLocalVar)o;
- return
- this.start == other.start
- && this.end == other.end
- && super.equals(o);
- }
-
- protected void generateInfos(Object info, HashMap newElements, IProgressMonitor pm) {
- // a local variable has no info
- }
-
-}
Modified: trunk/org.rubypeople.rdt.core/src/org/rubypeople/rdt/internal/core/RubyScriptStructureBuilder.java
===================================================================
--- trunk/org.rubypeople.rdt.core/src/org/rubypeople/rdt/internal/core/RubyScriptStructureBuilder.java 2007-05-08 14:12:51 UTC (rev 2448)
+++ trunk/org.rubypeople.rdt.core/src/org/rubypeople/rdt/internal/core/RubyScriptStructureBuilder.java 2007-05-08 14:13:35 UTC (rev 2449)
@@ -201,13 +201,13 @@
} else {
int start = field.declarationStart - field.name.length() + 1;
int end = start + field.name.length();
- handle = new RubyLocalVar(modelStack.peek(), field.name, start, end);
+ handle = new LocalVariable(modelStack.peek(), field.name, start, end);
}
modelStack.push(handle);
// Add to enclosing type
RubyElementInfo parentInfo;
- if (handle instanceof RubyLocalVar) {
+ if (handle instanceof LocalVariable) {
parentInfo = infoStack.peek();
} else if (handle instanceof RubyGlobal){
parentInfo = scriptInfo; // FIXME Grab the project info?
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|
|
From: <caw...@us...> - 2007-05-08 14:12:53
|
Revision: 2448
http://svn.sourceforge.net/rubyeclipse/?rev=2448&view=rev
Author: cawilliams
Date: 2007-05-08 07:12:51 -0700 (Tue, 08 May 2007)
Log Message:
-----------
Modified Paths:
--------------
trunk/org.rubypeople.rdt.core/src/org/rubypeople/rdt/internal/core/util/CharOperation.java
Modified: trunk/org.rubypeople.rdt.core/src/org/rubypeople/rdt/internal/core/util/CharOperation.java
===================================================================
--- trunk/org.rubypeople.rdt.core/src/org/rubypeople/rdt/internal/core/util/CharOperation.java 2007-05-08 14:12:34 UTC (rev 2447)
+++ trunk/org.rubypeople.rdt.core/src/org/rubypeople/rdt/internal/core/util/CharOperation.java 2007-05-08 14:12:51 UTC (rev 2448)
@@ -1549,4 +1549,119 @@
char[][] result = splitOn(divider, typeName);
return result[result.length - 1];
}
+
+/**
+ * Answers the concatenation of the two arrays. It answers null if the two arrays are null.
+ * If the first array is null, then the second array is returned.
+ * If the second array is null, then the first array is returned.
+ * <br>
+ * <br>
+ * For example:
+ * <ol>
+ * <li><pre>
+ * first = null
+ * second = null
+ * => result = null
+ * </pre>
+ * </li>
+ * <li><pre>
+ * first = { { ' a' } }
+ * second = null
+ * => result = { { ' a' } }
+ * </pre>
+ * </li>
+ * <li><pre>
+ * first = null
+ * second = { { ' a' } }
+ * => result = { { ' a' } }
+ * </pre>
+ * </li>
+ * <li><pre>
+ * first = { { ' b' } }
+ * second = { { ' a' } }
+ * => result = { { ' b' }, { ' a' } }
+ * </pre>
+ * </li>
+ * </ol>
+ *
+ * @param first the first array to concatenate
+ * @param second the second array to concatenate
+ * @return the concatenation of the two arrays, or null if the two arrays are null.
+ */
+public static final char[][] arrayConcat(char[][] first, char[][] second) {
+ if (first == null)
+ return second;
+ if (second == null)
+ return first;
+
+ int length1 = first.length;
+ int length2 = second.length;
+ char[][] result = new char[length1 + length2][];
+ System.arraycopy(first, 0, result, 0, length1);
+ System.arraycopy(second, 0, result, length1, length2);
+ return result;
}
+
+/**
+ * Answers a new array adding the second array at the end of first array.
+ * It answers null if the first and second are null.
+ * If the first array is null, then a new array char[][] is created with second.
+ * If the second array is null, then the first array is returned.
+ * <br>
+ * <br>
+ * For example:
+ * <ol>
+ * <li><pre>
+ * first = null
+ * second = { 'a' }
+ * => result = { { ' a' } }
+ * </pre>
+ * <li><pre>
+ * first = { { ' a' } }
+ * second = null
+ * => result = { { ' a' } }
+ * </pre>
+ * </li>
+ * <li><pre>
+ * first = { { ' a' } }
+ * second = { ' b' }
+ * => result = { { ' a' } , { ' b' } }
+ * </pre>
+ * </li>
+ * </ol>
+ *
+ * @param first the first array to concatenate
+ * @param second the array to add at the end of the first array
+ * @return a new array adding the second array at the end of first array, or null if the two arrays are null.
+ */
+public static final char[][] arrayConcat(char[][] first, char[] second) {
+ if (second == null)
+ return first;
+ if (first == null)
+ return new char[][] { second };
+
+ int length = first.length;
+ char[][] result = new char[length + 1][];
+ System.arraycopy(first, 0, result, 0, length);
+ result[length] = second;
+ return result;
+}
+
+public static char[] concatWith(char[][] enclosingTypeNames, String string) {
+ StringBuffer buffer = new StringBuffer();
+ for (int i = 0; i < enclosingTypeNames.length; i++) {
+ char[] name = enclosingTypeNames[i];
+ if (i > 0) buffer.append(string);
+ buffer.append(name);
+ }
+ return buffer.toString().toCharArray();
+}
+
+public static char[] concat(char[] one, char[] two, String separator) {
+ StringBuffer buffer = new StringBuffer();
+ buffer.append(one);
+ buffer.append(separator);
+ buffer.append(two);
+ return buffer.toString().toCharArray();
+}
+}
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|