• R/O
  • SSH
  • HTTPS

schluessel: Commit


Commit MetaInfo

Revisión391 (tree)
Tiempo2014-05-01 04:23:03
Autory-moriguchi

Log Message

(empty log message)

Cambiar Resumen

Diferencia incremental

--- trunk/schluessel-editor/LICENSE (nonexistent)
+++ trunk/schluessel-editor/LICENSE (revision 391)
@@ -0,0 +1,202 @@
1+
2+ Apache License
3+ Version 2.0, January 2004
4+ http://www.apache.org/licenses/
5+
6+ TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
7+
8+ 1. Definitions.
9+
10+ "License" shall mean the terms and conditions for use, reproduction,
11+ and distribution as defined by Sections 1 through 9 of this document.
12+
13+ "Licensor" shall mean the copyright owner or entity authorized by
14+ the copyright owner that is granting the License.
15+
16+ "Legal Entity" shall mean the union of the acting entity and all
17+ other entities that control, are controlled by, or are under common
18+ control with that entity. For the purposes of this definition,
19+ "control" means (i) the power, direct or indirect, to cause the
20+ direction or management of such entity, whether by contract or
21+ otherwise, or (ii) ownership of fifty percent (50%) or more of the
22+ outstanding shares, or (iii) beneficial ownership of such entity.
23+
24+ "You" (or "Your") shall mean an individual or Legal Entity
25+ exercising permissions granted by this License.
26+
27+ "Source" form shall mean the preferred form for making modifications,
28+ including but not limited to software source code, documentation
29+ source, and configuration files.
30+
31+ "Object" form shall mean any form resulting from mechanical
32+ transformation or translation of a Source form, including but
33+ not limited to compiled object code, generated documentation,
34+ and conversions to other media types.
35+
36+ "Work" shall mean the work of authorship, whether in Source or
37+ Object form, made available under the License, as indicated by a
38+ copyright notice that is included in or attached to the work
39+ (an example is provided in the Appendix below).
40+
41+ "Derivative Works" shall mean any work, whether in Source or Object
42+ form, that is based on (or derived from) the Work and for which the
43+ editorial revisions, annotations, elaborations, or other modifications
44+ represent, as a whole, an original work of authorship. For the purposes
45+ of this License, Derivative Works shall not include works that remain
46+ separable from, or merely link (or bind by name) to the interfaces of,
47+ the Work and Derivative Works thereof.
48+
49+ "Contribution" shall mean any work of authorship, including
50+ the original version of the Work and any modifications or additions
51+ to that Work or Derivative Works thereof, that is intentionally
52+ submitted to Licensor for inclusion in the Work by the copyright owner
53+ or by an individual or Legal Entity authorized to submit on behalf of
54+ the copyright owner. For the purposes of this definition, "submitted"
55+ means any form of electronic, verbal, or written communication sent
56+ to the Licensor or its representatives, including but not limited to
57+ communication on electronic mailing lists, source code control systems,
58+ and issue tracking systems that are managed by, or on behalf of, the
59+ Licensor for the purpose of discussing and improving the Work, but
60+ excluding communication that is conspicuously marked or otherwise
61+ designated in writing by the copyright owner as "Not a Contribution."
62+
63+ "Contributor" shall mean Licensor and any individual or Legal Entity
64+ on behalf of whom a Contribution has been received by Licensor and
65+ subsequently incorporated within the Work.
66+
67+ 2. Grant of Copyright License. Subject to the terms and conditions of
68+ this License, each Contributor hereby grants to You a perpetual,
69+ worldwide, non-exclusive, no-charge, royalty-free, irrevocable
70+ copyright license to reproduce, prepare Derivative Works of,
71+ publicly display, publicly perform, sublicense, and distribute the
72+ Work and such Derivative Works in Source or Object form.
73+
74+ 3. Grant of Patent License. Subject to the terms and conditions of
75+ this License, each Contributor hereby grants to You a perpetual,
76+ worldwide, non-exclusive, no-charge, royalty-free, irrevocable
77+ (except as stated in this section) patent license to make, have made,
78+ use, offer to sell, sell, import, and otherwise transfer the Work,
79+ where such license applies only to those patent claims licensable
80+ by such Contributor that are necessarily infringed by their
81+ Contribution(s) alone or by combination of their Contribution(s)
82+ with the Work to which such Contribution(s) was submitted. If You
83+ institute patent litigation against any entity (including a
84+ cross-claim or counterclaim in a lawsuit) alleging that the Work
85+ or a Contribution incorporated within the Work constitutes direct
86+ or contributory patent infringement, then any patent licenses
87+ granted to You under this License for that Work shall terminate
88+ as of the date such litigation is filed.
89+
90+ 4. Redistribution. You may reproduce and distribute copies of the
91+ Work or Derivative Works thereof in any medium, with or without
92+ modifications, and in Source or Object form, provided that You
93+ meet the following conditions:
94+
95+ (a) You must give any other recipients of the Work or
96+ Derivative Works a copy of this License; and
97+
98+ (b) You must cause any modified files to carry prominent notices
99+ stating that You changed the files; and
100+
101+ (c) You must retain, in the Source form of any Derivative Works
102+ that You distribute, all copyright, patent, trademark, and
103+ attribution notices from the Source form of the Work,
104+ excluding those notices that do not pertain to any part of
105+ the Derivative Works; and
106+
107+ (d) If the Work includes a "NOTICE" text file as part of its
108+ distribution, then any Derivative Works that You distribute must
109+ include a readable copy of the attribution notices contained
110+ within such NOTICE file, excluding those notices that do not
111+ pertain to any part of the Derivative Works, in at least one
112+ of the following places: within a NOTICE text file distributed
113+ as part of the Derivative Works; within the Source form or
114+ documentation, if provided along with the Derivative Works; or,
115+ within a display generated by the Derivative Works, if and
116+ wherever such third-party notices normally appear. The contents
117+ of the NOTICE file are for informational purposes only and
118+ do not modify the License. You may add Your own attribution
119+ notices within Derivative Works that You distribute, alongside
120+ or as an addendum to the NOTICE text from the Work, provided
121+ that such additional attribution notices cannot be construed
122+ as modifying the License.
123+
124+ You may add Your own copyright statement to Your modifications and
125+ may provide additional or different license terms and conditions
126+ for use, reproduction, or distribution of Your modifications, or
127+ for any such Derivative Works as a whole, provided Your use,
128+ reproduction, and distribution of the Work otherwise complies with
129+ the conditions stated in this License.
130+
131+ 5. Submission of Contributions. Unless You explicitly state otherwise,
132+ any Contribution intentionally submitted for inclusion in the Work
133+ by You to the Licensor shall be under the terms and conditions of
134+ this License, without any additional terms or conditions.
135+ Notwithstanding the above, nothing herein shall supersede or modify
136+ the terms of any separate license agreement you may have executed
137+ with Licensor regarding such Contributions.
138+
139+ 6. Trademarks. This License does not grant permission to use the trade
140+ names, trademarks, service marks, or product names of the Licensor,
141+ except as required for reasonable and customary use in describing the
142+ origin of the Work and reproducing the content of the NOTICE file.
143+
144+ 7. Disclaimer of Warranty. Unless required by applicable law or
145+ agreed to in writing, Licensor provides the Work (and each
146+ Contributor provides its Contributions) on an "AS IS" BASIS,
147+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
148+ implied, including, without limitation, any warranties or conditions
149+ of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
150+ PARTICULAR PURPOSE. You are solely responsible for determining the
151+ appropriateness of using or redistributing the Work and assume any
152+ risks associated with Your exercise of permissions under this License.
153+
154+ 8. Limitation of Liability. In no event and under no legal theory,
155+ whether in tort (including negligence), contract, or otherwise,
156+ unless required by applicable law (such as deliberate and grossly
157+ negligent acts) or agreed to in writing, shall any Contributor be
158+ liable to You for damages, including any direct, indirect, special,
159+ incidental, or consequential damages of any character arising as a
160+ result of this License or out of the use or inability to use the
161+ Work (including but not limited to damages for loss of goodwill,
162+ work stoppage, computer failure or malfunction, or any and all
163+ other commercial damages or losses), even if such Contributor
164+ has been advised of the possibility of such damages.
165+
166+ 9. Accepting Warranty or Additional Liability. While redistributing
167+ the Work or Derivative Works thereof, You may choose to offer,
168+ and charge a fee for, acceptance of support, warranty, indemnity,
169+ or other liability obligations and/or rights consistent with this
170+ License. However, in accepting such obligations, You may act only
171+ on Your own behalf and on Your sole responsibility, not on behalf
172+ of any other Contributor, and only if You agree to indemnify,
173+ defend, and hold each Contributor harmless for any liability
174+ incurred by, or claims asserted against, such Contributor by reason
175+ of your accepting any such warranty or additional liability.
176+
177+ END OF TERMS AND CONDITIONS
178+
179+ APPENDIX: How to apply the Apache License to your work.
180+
181+ To apply the Apache License to your work, attach the following
182+ boilerplate notice, with the fields enclosed by brackets "[]"
183+ replaced with your own identifying information. (Don't include
184+ the brackets!) The text should be enclosed in the appropriate
185+ comment syntax for the file format. We also recommend that a
186+ file or class name and description of purpose be included on the
187+ same "printed page" as the copyright notice for easier
188+ identification within third-party archives.
189+
190+ Copyright [yyyy] [name of copyright owner]
191+
192+ Licensed under the Apache License, Version 2.0 (the "License");
193+ you may not use this file except in compliance with the License.
194+ You may obtain a copy of the License at
195+
196+ http://www.apache.org/licenses/LICENSE-2.0
197+
198+ Unless required by applicable law or agreed to in writing, software
199+ distributed under the License is distributed on an "AS IS" BASIS,
200+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
201+ See the License for the specific language governing permissions and
202+ limitations under the License.
--- trunk/schluessel-editor/src/net/morilib/lisp/editor/LispConfiguration.java (nonexistent)
+++ trunk/schluessel-editor/src/net/morilib/lisp/editor/LispConfiguration.java (revision 391)
@@ -0,0 +1,79 @@
1+/*
2+ * Copyright 2009-2014 Yuichiro Moriguchi
3+ *
4+ * Licensed under the Apache License, Version 2.0 (the "License");
5+ * you may not use this file except in compliance with the License.
6+ * You may obtain a copy of the License at
7+ *
8+ * http://www.apache.org/licenses/LICENSE-2.0
9+ *
10+ * Unless required by applicable law or agreed to in writing, software
11+ * distributed under the License is distributed on an "AS IS" BASIS,
12+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13+ * See the License for the specific language governing permissions and
14+ * limitations under the License.
15+ */
16+package net.morilib.lisp.editor;
17+
18+import org.eclipse.jface.text.IDocument;
19+import org.eclipse.jface.text.ITextDoubleClickStrategy;
20+import org.eclipse.jface.text.TextAttribute;
21+import org.eclipse.jface.text.presentation.IPresentationReconciler;
22+import org.eclipse.jface.text.presentation.PresentationReconciler;
23+import org.eclipse.jface.text.rules.DefaultDamagerRepairer;
24+import org.eclipse.jface.text.rules.Token;
25+import org.eclipse.jface.text.source.ISourceViewer;
26+import org.eclipse.jface.text.source.SourceViewerConfiguration;
27+
28+public class LispConfiguration extends SourceViewerConfiguration {
29+
30+ private LispDoubleClickStrategy doubleClickStrategy;
31+ private LispScanner scanner;
32+ private ColorManager colorManager;
33+
34+ /**
35+ *
36+ * @param colorManager
37+ */
38+ public LispConfiguration(ColorManager colorManager) {
39+ this.colorManager = colorManager;
40+ }
41+
42+ public String[] getConfiguredContentTypes(ISourceViewer sv) {
43+ return new String[] {
44+ IDocument.DEFAULT_CONTENT_TYPE,
45+ LispPartitionScanner.XML_COMMENT,
46+ };
47+ }
48+
49+ public ITextDoubleClickStrategy getDoubleClickStrategy(
50+ ISourceViewer sv, String contentType) {
51+ if(doubleClickStrategy == null) {
52+ doubleClickStrategy = new LispDoubleClickStrategy();
53+ }
54+ return doubleClickStrategy;
55+ }
56+
57+ protected LispScanner getXMLScanner() {
58+ if (scanner == null) {
59+ scanner = new LispScanner(colorManager);
60+ scanner.setDefaultReturnToken(
61+ new Token(
62+ new TextAttribute(
63+ colorManager.getColor(LispColors.DEFAULT))));
64+ }
65+ return scanner;
66+ }
67+
68+ public IPresentationReconciler getPresentationReconciler(
69+ ISourceViewer sv) {
70+ PresentationReconciler reconciler = new PresentationReconciler();
71+ DefaultDamagerRepairer dr;
72+
73+ dr = new DefaultDamagerRepairer(getXMLScanner());
74+ reconciler.setDamager(dr, IDocument.DEFAULT_CONTENT_TYPE);
75+ reconciler.setRepairer(dr, IDocument.DEFAULT_CONTENT_TYPE);
76+ return reconciler;
77+ }
78+
79+}
\ No newline at end of file
Added: svn:mime-type
## -0,0 +1 ##
+text/plain
\ No newline at end of property
--- trunk/schluessel-editor/src/net/morilib/lisp/editor/LispDocumentProvider.java (nonexistent)
+++ trunk/schluessel-editor/src/net/morilib/lisp/editor/LispDocumentProvider.java (revision 391)
@@ -0,0 +1,41 @@
1+/*
2+ * Copyright 2009-2014 Yuichiro Moriguchi
3+ *
4+ * Licensed under the Apache License, Version 2.0 (the "License");
5+ * you may not use this file except in compliance with the License.
6+ * You may obtain a copy of the License at
7+ *
8+ * http://www.apache.org/licenses/LICENSE-2.0
9+ *
10+ * Unless required by applicable law or agreed to in writing, software
11+ * distributed under the License is distributed on an "AS IS" BASIS,
12+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13+ * See the License for the specific language governing permissions and
14+ * limitations under the License.
15+ */
16+package net.morilib.lisp.editor;
17+
18+import org.eclipse.core.runtime.CoreException;
19+import org.eclipse.jface.text.IDocument;
20+import org.eclipse.jface.text.IDocumentPartitioner;
21+import org.eclipse.jface.text.rules.FastPartitioner;
22+import org.eclipse.ui.editors.text.FileDocumentProvider;
23+
24+public class LispDocumentProvider extends FileDocumentProvider {
25+
26+ protected IDocument createDocument(
27+ Object element) throws CoreException {
28+ IDocument document = super.createDocument(element);
29+ if (document != null) {
30+ IDocumentPartitioner partitioner =
31+ new FastPartitioner(
32+ new LispPartitionScanner(),
33+ new String[] {
34+ LispPartitionScanner.XML_COMMENT });
35+ partitioner.connect(document);
36+ document.setDocumentPartitioner(partitioner);
37+ }
38+ return document;
39+ }
40+
41+}
\ No newline at end of file
Added: svn:mime-type
## -0,0 +1 ##
+text/plain
\ No newline at end of property
--- trunk/schluessel-editor/src/net/morilib/lisp/editor/LispScanner.java (nonexistent)
+++ trunk/schluessel-editor/src/net/morilib/lisp/editor/LispScanner.java (revision 391)
@@ -0,0 +1,80 @@
1+/*
2+ * Copyright 2009-2014 Yuichiro Moriguchi
3+ *
4+ * Licensed under the Apache License, Version 2.0 (the "License");
5+ * you may not use this file except in compliance with the License.
6+ * You may obtain a copy of the License at
7+ *
8+ * http://www.apache.org/licenses/LICENSE-2.0
9+ *
10+ * Unless required by applicable law or agreed to in writing, software
11+ * distributed under the License is distributed on an "AS IS" BASIS,
12+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13+ * See the License for the specific language governing permissions and
14+ * limitations under the License.
15+ */
16+package net.morilib.lisp.editor;
17+
18+import java.util.Map;
19+
20+import net.morilib.lisp.Callable;
21+import net.morilib.lisp.Datum;
22+import net.morilib.lisp.Environment;
23+import net.morilib.lisp.LispLazySubrSyn;
24+import net.morilib.lisp.Scheme;
25+import net.morilib.lisp.SymbolName;
26+import net.morilib.lisp.Syntax;
27+
28+import org.eclipse.jface.text.TextAttribute;
29+import org.eclipse.jface.text.rules.IRule;
30+import org.eclipse.jface.text.rules.RuleBasedScanner;
31+import org.eclipse.jface.text.rules.Token;
32+import org.eclipse.jface.text.rules.WhitespaceRule;
33+import org.eclipse.jface.text.rules.WordRule;
34+import org.eclipse.swt.SWT;
35+
36+public class LispScanner extends RuleBasedScanner {
37+
38+ public LispScanner(ColorManager manager) {
39+ IRule[] rules = new IRule[3];
40+ Token t1, t2;
41+ WordRule wr;
42+ Environment ev;
43+
44+ // Add generic whitespace rule.
45+ rules[0] = new WhitespaceRule(new LispWhitespaceDetector());
46+
47+ // Add keywords
48+ rules[1] = wr = new WordRule(new LispWordDetector());
49+ t1 = new Token(new TextAttribute(manager.getColor(
50+ LispColors.KEYWORD), null, SWT.NONE));
51+ t2 = new Token(new TextAttribute(manager.getColor(
52+ LispColors.PROCS), null, SWT.NONE));
53+ ev = Scheme.newRnRSEnv(5).getGlobal();
54+ for(Map.Entry<SymbolName, Datum> t : ev.getData().entrySet()) {
55+ Datum d = t.getValue();
56+
57+ if(d instanceof LispLazySubrSyn) {
58+ d = ((LispLazySubrSyn)d).setup();
59+ }
60+
61+ if(d instanceof Callable) {
62+ wr.addWord(t.getKey().getName(), t2);
63+ } else if(d instanceof Syntax) {
64+ wr.addWord(t.getKey().getName(), t1);
65+ }
66+ }
67+
68+ // Add #-keywords
69+ t1 = new Token(new TextAttribute(manager.getColor(
70+ LispColors.SHARP), null, SWT.NONE));
71+ t2 = new Token(new TextAttribute(manager.getColor(
72+ LispColors.BOOLEAN), null, SWT.NONE));
73+ rules[2] = wr = new WordRule(new LispSharpWordDetector(), t1);
74+ wr.addWord("#t", t2);
75+ wr.addWord("#f", t2);
76+
77+ setRules(rules);
78+ }
79+
80+}
Added: svn:mime-type
## -0,0 +1 ##
+text/plain
\ No newline at end of property
--- trunk/schluessel-editor/src/net/morilib/lisp/editor/ColorManager.java (nonexistent)
+++ trunk/schluessel-editor/src/net/morilib/lisp/editor/ColorManager.java (revision 391)
@@ -0,0 +1,57 @@
1+/*
2+ * Copyright 2009-2014 Yuichiro Moriguchi
3+ *
4+ * Licensed under the Apache License, Version 2.0 (the "License");
5+ * you may not use this file except in compliance with the License.
6+ * You may obtain a copy of the License at
7+ *
8+ * http://www.apache.org/licenses/LICENSE-2.0
9+ *
10+ * Unless required by applicable law or agreed to in writing, software
11+ * distributed under the License is distributed on an "AS IS" BASIS,
12+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13+ * See the License for the specific language governing permissions and
14+ * limitations under the License.
15+ */
16+package net.morilib.lisp.editor;
17+
18+import java.util.HashMap;
19+import java.util.Iterator;
20+import java.util.Map;
21+
22+import org.eclipse.swt.graphics.Color;
23+import org.eclipse.swt.graphics.RGB;
24+import org.eclipse.swt.widgets.Display;
25+
26+public class ColorManager {
27+
28+ /**
29+ *
30+ */
31+ protected Map<RGB, Color> colors = new HashMap<RGB, Color>(10);
32+
33+ /**
34+ *
35+ */
36+ public void dispose() {
37+ Iterator<Color> e = colors.values().iterator();
38+
39+ while(e.hasNext()) ((Color)e.next()).dispose();
40+ }
41+
42+ /**
43+ *
44+ * @param rgb
45+ * @return
46+ */
47+ public Color getColor(RGB rgb) {
48+ Color color = colors.get(rgb);
49+
50+ if(color == null) {
51+ color = new Color(Display.getCurrent(), rgb);
52+ colors.put(rgb, color);
53+ }
54+ return color;
55+ }
56+
57+}
Added: svn:mime-type
## -0,0 +1 ##
+text/plain
\ No newline at end of property
--- trunk/schluessel-editor/src/net/morilib/lisp/editor/LispColors.java (nonexistent)
+++ trunk/schluessel-editor/src/net/morilib/lisp/editor/LispColors.java (revision 391)
@@ -0,0 +1,52 @@
1+/*
2+ * Copyright 2009-2014 Yuichiro Moriguchi
3+ *
4+ * Licensed under the Apache License, Version 2.0 (the "License");
5+ * you may not use this file except in compliance with the License.
6+ * You may obtain a copy of the License at
7+ *
8+ * http://www.apache.org/licenses/LICENSE-2.0
9+ *
10+ * Unless required by applicable law or agreed to in writing, software
11+ * distributed under the License is distributed on an "AS IS" BASIS,
12+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13+ * See the License for the specific language governing permissions and
14+ * limitations under the License.
15+ */
16+package net.morilib.lisp.editor;
17+
18+import org.eclipse.swt.graphics.RGB;
19+
20+public final class LispColors {
21+
22+ /**
23+ *
24+ */
25+ public static final RGB DEFAULT = new RGB(0, 0, 0);
26+
27+ /**
28+ *
29+ */
30+ public static final RGB STRING = new RGB(0, 128, 0);
31+
32+ /**
33+ *
34+ */
35+ public static final RGB KEYWORD = new RGB(255, 72, 72);
36+
37+ /**
38+ *
39+ */
40+ public static final RGB PROCS = new RGB(72, 72, 255);
41+
42+ /**
43+ *
44+ */
45+ public static final RGB BOOLEAN = new RGB(172, 0, 172);
46+
47+ /**
48+ *
49+ */
50+ public static final RGB SHARP = new RGB(172, 0, 72);
51+
52+}
Added: svn:mime-type
## -0,0 +1 ##
+text/plain
\ No newline at end of property
--- trunk/schluessel-editor/src/net/morilib/lisp/editor/LispDoubleClickStrategy.java (nonexistent)
+++ trunk/schluessel-editor/src/net/morilib/lisp/editor/LispDoubleClickStrategy.java (revision 391)
@@ -0,0 +1,68 @@
1+/*
2+ * Copyright 2009-2014 Yuichiro Moriguchi
3+ *
4+ * Licensed under the Apache License, Version 2.0 (the "License");
5+ * you may not use this file except in compliance with the License.
6+ * You may obtain a copy of the License at
7+ *
8+ * http://www.apache.org/licenses/LICENSE-2.0
9+ *
10+ * Unless required by applicable law or agreed to in writing, software
11+ * distributed under the License is distributed on an "AS IS" BASIS,
12+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13+ * See the License for the specific language governing permissions and
14+ * limitations under the License.
15+ */
16+package net.morilib.lisp.editor;
17+
18+import org.eclipse.jface.text.*;
19+
20+public class LispDoubleClickStrategy implements ITextDoubleClickStrategy {
21+
22+ protected ITextViewer fText;
23+
24+ public void doubleClicked(ITextViewer part) {
25+ int pos = part.getSelectedRange().x;
26+
27+ if(pos < 0) return;
28+ fText = part;
29+ selectWord(pos);
30+ }
31+
32+ protected boolean selectWord(int caretPos) {
33+ IDocument doc = fText.getDocument();
34+ int startPos, endPos;
35+
36+ try {
37+ int pos = caretPos;
38+ char c;
39+
40+ while(pos >= 0) {
41+ c = doc.getChar(pos);
42+ if(LispWordDetector.NOTSYM.indexOf(c) >= 0) break;
43+ --pos;
44+ }
45+ startPos = pos;
46+ pos = caretPos;
47+ int length = doc.getLength();
48+
49+ while(pos < length) {
50+ c = doc.getChar(pos);
51+ if(LispWordDetector.NOTSYM.indexOf(c) >= 0) break;
52+ ++pos;
53+ }
54+ endPos = pos;
55+ selectRange(startPos, endPos);
56+ return true;
57+ } catch (BadLocationException x) {
58+ }
59+ return false;
60+ }
61+
62+ private void selectRange(int startPos, int stopPos) {
63+ int offset = startPos + 1;
64+ int length = stopPos - offset;
65+ fText.setSelectedRange(offset, length);
66+ }
67+
68+}
\ No newline at end of file
Added: svn:mime-type
## -0,0 +1 ##
+text/plain
\ No newline at end of property
--- trunk/schluessel-editor/src/net/morilib/lisp/editor/LispPartitionScanner.java (nonexistent)
+++ trunk/schluessel-editor/src/net/morilib/lisp/editor/LispPartitionScanner.java (revision 391)
@@ -0,0 +1,33 @@
1+/*
2+ * Copyright 2009-2014 Yuichiro Moriguchi
3+ *
4+ * Licensed under the Apache License, Version 2.0 (the "License");
5+ * you may not use this file except in compliance with the License.
6+ * You may obtain a copy of the License at
7+ *
8+ * http://www.apache.org/licenses/LICENSE-2.0
9+ *
10+ * Unless required by applicable law or agreed to in writing, software
11+ * distributed under the License is distributed on an "AS IS" BASIS,
12+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13+ * See the License for the specific language governing permissions and
14+ * limitations under the License.
15+ */
16+package net.morilib.lisp.editor;
17+
18+import org.eclipse.jface.text.rules.*;
19+
20+public class LispPartitionScanner extends RuleBasedPartitionScanner {
21+
22+ public final static String XML_COMMENT = "__lisp_comment";
23+
24+ public LispPartitionScanner() {
25+ IToken xmlComment = new Token(XML_COMMENT);
26+ IPredicateRule[] rules = new IPredicateRule[1];
27+
28+ rules[0] = new EndOfLineRule(";", xmlComment);
29+
30+ setPredicateRules(rules);
31+ }
32+
33+}
Added: svn:mime-type
## -0,0 +1 ##
+text/plain
\ No newline at end of property
--- trunk/schluessel-editor/src/net/morilib/lisp/editor/LispSharpWordDetector.java (nonexistent)
+++ trunk/schluessel-editor/src/net/morilib/lisp/editor/LispSharpWordDetector.java (revision 391)
@@ -0,0 +1,35 @@
1+/*
2+ * Copyright 2009-2014 Yuichiro Moriguchi
3+ *
4+ * Licensed under the Apache License, Version 2.0 (the "License");
5+ * you may not use this file except in compliance with the License.
6+ * You may obtain a copy of the License at
7+ *
8+ * http://www.apache.org/licenses/LICENSE-2.0
9+ *
10+ * Unless required by applicable law or agreed to in writing, software
11+ * distributed under the License is distributed on an "AS IS" BASIS,
12+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13+ * See the License for the specific language governing permissions and
14+ * limitations under the License.
15+ */
16+package net.morilib.lisp.editor;
17+
18+import org.eclipse.jface.text.rules.IWordDetector;
19+
20+public class LispSharpWordDetector implements IWordDetector {
21+
22+ //
23+ private static final String NOTSYM = " \t\r\n;()\"'#[]";
24+
25+ @Override
26+ public boolean isWordStart(char c) {
27+ return c == '#';
28+ }
29+
30+ @Override
31+ public boolean isWordPart(char c) {
32+ return NOTSYM.indexOf(c) < 0;
33+ }
34+
35+}
Added: svn:mime-type
## -0,0 +1 ##
+text/plain
\ No newline at end of property
--- trunk/schluessel-editor/src/net/morilib/lisp/editor/Activator.java (nonexistent)
+++ trunk/schluessel-editor/src/net/morilib/lisp/editor/Activator.java (revision 391)
@@ -0,0 +1,75 @@
1+/*
2+ * Copyright 2009-2014 Yuichiro Moriguchi
3+ *
4+ * Licensed under the Apache License, Version 2.0 (the "License");
5+ * you may not use this file except in compliance with the License.
6+ * You may obtain a copy of the License at
7+ *
8+ * http://www.apache.org/licenses/LICENSE-2.0
9+ *
10+ * Unless required by applicable law or agreed to in writing, software
11+ * distributed under the License is distributed on an "AS IS" BASIS,
12+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13+ * See the License for the specific language governing permissions and
14+ * limitations under the License.
15+ */
16+package net.morilib.lisp.editor;
17+
18+import org.eclipse.jface.resource.ImageDescriptor;
19+import org.eclipse.ui.plugin.AbstractUIPlugin;
20+import org.osgi.framework.BundleContext;
21+
22+/**
23+ * The activator class controls the plug-in life cycle
24+ */
25+public class Activator extends AbstractUIPlugin {
26+
27+ // The plug-in ID
28+ public static final String PLUGIN_ID = "schluessel-editor"; //$NON-NLS-1$
29+
30+ // The shared instance
31+ private static Activator plugin;
32+
33+ /**
34+ * The constructor
35+ */
36+ public Activator() {
37+ }
38+
39+ /* (non-Javadoc)
40+ * @see org.eclipse.ui.plugin.AbstractUIPlugin#start(org.osgi.framework.BundleContext)
41+ */
42+ public void start(BundleContext context) throws Exception {
43+ super.start(context);
44+ plugin = this;
45+ }
46+
47+ /* (non-Javadoc)
48+ * @see org.eclipse.ui.plugin.AbstractUIPlugin#stop(org.osgi.framework.BundleContext)
49+ */
50+ public void stop(BundleContext context) throws Exception {
51+ plugin = null;
52+ super.stop(context);
53+ }
54+
55+ /**
56+ * Returns the shared instance
57+ *
58+ * @return the shared instance
59+ */
60+ public static Activator getDefault() {
61+ return plugin;
62+ }
63+
64+ /**
65+ * Returns an image descriptor for the image file at the given
66+ * plug-in relative path
67+ *
68+ * @param path the path
69+ * @return the image descriptor
70+ */
71+ public static ImageDescriptor getImageDescriptor(String path) {
72+ return imageDescriptorFromPlugin(PLUGIN_ID, path);
73+ }
74+
75+}
Added: svn:mime-type
## -0,0 +1 ##
+text/plain
\ No newline at end of property
--- trunk/schluessel-editor/src/net/morilib/lisp/editor/NonRuleBasedDamagerRepairer.java (nonexistent)
+++ trunk/schluessel-editor/src/net/morilib/lisp/editor/NonRuleBasedDamagerRepairer.java (revision 391)
@@ -0,0 +1,150 @@
1+/*
2+ * Copyright 2009-2014 Yuichiro Moriguchi
3+ *
4+ * Licensed under the Apache License, Version 2.0 (the "License");
5+ * you may not use this file except in compliance with the License.
6+ * You may obtain a copy of the License at
7+ *
8+ * http://www.apache.org/licenses/LICENSE-2.0
9+ *
10+ * Unless required by applicable law or agreed to in writing, software
11+ * distributed under the License is distributed on an "AS IS" BASIS,
12+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13+ * See the License for the specific language governing permissions and
14+ * limitations under the License.
15+ */
16+package net.morilib.lisp.editor;
17+
18+import org.eclipse.jface.text.BadLocationException;
19+import org.eclipse.jface.text.DocumentEvent;
20+import org.eclipse.jface.text.IDocument;
21+import org.eclipse.jface.text.IRegion;
22+import org.eclipse.jface.text.ITypedRegion;
23+import org.eclipse.jface.text.Region;
24+import org.eclipse.jface.text.TextAttribute;
25+import org.eclipse.jface.text.TextPresentation;
26+import org.eclipse.jface.text.presentation.IPresentationDamager;
27+import org.eclipse.jface.text.presentation.IPresentationRepairer;
28+import org.eclipse.core.runtime.Assert;
29+import org.eclipse.swt.custom.StyleRange;
30+
31+public class NonRuleBasedDamagerRepairer
32+implements IPresentationDamager, IPresentationRepairer {
33+
34+ /** The document this object works on */
35+ protected IDocument fDocument;
36+ /** The default text attribute if non is returned as data by the current token */
37+ protected TextAttribute fDefaultTextAttribute;
38+
39+ /**
40+ * Constructor for NonRuleBasedDamagerRepairer.
41+ */
42+ public NonRuleBasedDamagerRepairer(TextAttribute defaultTextAttribute) {
43+ Assert.isNotNull(defaultTextAttribute);
44+
45+ fDefaultTextAttribute = defaultTextAttribute;
46+ }
47+
48+ /**
49+ * @see IPresentationRepairer#setDocument(IDocument)
50+ */
51+ public void setDocument(IDocument document) {
52+ fDocument = document;
53+ }
54+
55+ /**
56+ * Returns the end offset of the line that contains the specified offset or
57+ * if the offset is inside a line delimiter, the end offset of the next line.
58+ *
59+ * @param offset the offset whose line end offset must be computed
60+ * @return the line end offset for the given offset
61+ * @exception BadLocationException if offset is invalid in the current document
62+ */
63+ protected int endOfLineOf(int offset) throws BadLocationException {
64+ IRegion info = fDocument.getLineInformationOfOffset(offset);
65+ if(offset <= info.getOffset() + info.getLength()) {
66+ return info.getOffset() + info.getLength();
67+ }
68+
69+ int line = fDocument.getLineOfOffset(offset);
70+
71+ try {
72+ info = fDocument.getLineInformation(line + 1);
73+ return info.getOffset() + info.getLength();
74+ } catch (BadLocationException x) {
75+ return fDocument.getLength();
76+ }
77+ }
78+
79+ /**
80+ * @see IPresentationDamager#getDamageRegion(ITypedRegion, DocumentEvent, boolean)
81+ */
82+ public IRegion getDamageRegion(ITypedRegion partition,
83+ DocumentEvent event,
84+ boolean documentPartitioningChanged) {
85+ if(!documentPartitioningChanged) {
86+ try {
87+ IRegion info =
88+ fDocument.getLineInformationOfOffset(event.getOffset());
89+ int start = Math.max(partition.getOffset(), info.getOffset());
90+ int end =
91+ event.getOffset()
92+ + (event.getText() == null
93+ ? event.getLength()
94+ : event.getText().length());
95+
96+ if (info.getOffset() <= end
97+ && end <= info.getOffset() + info.getLength()) {
98+ // optimize the case of the same line
99+ end = info.getOffset() + info.getLength();
100+ } else {
101+ end = endOfLineOf(end);
102+ }
103+ end =
104+ Math.min(
105+ partition.getOffset() + partition.getLength(),
106+ end);
107+ return new Region(start, end - start);
108+ } catch (BadLocationException x) {
109+ }
110+ }
111+ return partition;
112+ }
113+
114+ /**
115+ * @see IPresentationRepairer#createPresentation(TextPresentation, ITypedRegion)
116+ */
117+ public void createPresentation(
118+ TextPresentation presentation,
119+ ITypedRegion region) {
120+ addRange(
121+ presentation,
122+ region.getOffset(),
123+ region.getLength(),
124+ fDefaultTextAttribute);
125+ }
126+
127+ /**
128+ * Adds style information to the given text presentation.
129+ *
130+ * @param presentation the text presentation to be extended
131+ * @param offset the offset of the range to be styled
132+ * @param length the length of the range to be styled
133+ * @param attr the attribute describing the style of the range to be styled
134+ */
135+ protected void addRange(
136+ TextPresentation presentation,
137+ int offset,
138+ int length,
139+ TextAttribute attr) {
140+ if (attr != null)
141+ presentation.addStyleRange(
142+ new StyleRange(
143+ offset,
144+ length,
145+ attr.getForeground(),
146+ attr.getBackground(),
147+ attr.getStyle()));
148+ }
149+
150+}
\ No newline at end of file
Added: svn:mime-type
## -0,0 +1 ##
+text/plain
\ No newline at end of property
--- trunk/schluessel-editor/src/net/morilib/lisp/editor/LispWordDetector.java (nonexistent)
+++ trunk/schluessel-editor/src/net/morilib/lisp/editor/LispWordDetector.java (revision 391)
@@ -0,0 +1,35 @@
1+/*
2+ * Copyright 2009-2014 Yuichiro Moriguchi
3+ *
4+ * Licensed under the Apache License, Version 2.0 (the "License");
5+ * you may not use this file except in compliance with the License.
6+ * You may obtain a copy of the License at
7+ *
8+ * http://www.apache.org/licenses/LICENSE-2.0
9+ *
10+ * Unless required by applicable law or agreed to in writing, software
11+ * distributed under the License is distributed on an "AS IS" BASIS,
12+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13+ * See the License for the specific language governing permissions and
14+ * limitations under the License.
15+ */
16+package net.morilib.lisp.editor;
17+
18+import org.eclipse.jface.text.rules.IWordDetector;
19+
20+public class LispWordDetector implements IWordDetector {
21+
22+ //
23+ public static final String NOTSYM = " \t\r\n;()\"'#[]";
24+
25+ @Override
26+ public boolean isWordStart(char c) {
27+ return NOTSYM.indexOf(c) < 0;
28+ }
29+
30+ @Override
31+ public boolean isWordPart(char c) {
32+ return NOTSYM.indexOf(c) < 0;
33+ }
34+
35+}
Added: svn:mime-type
## -0,0 +1 ##
+text/plain
\ No newline at end of property
--- trunk/schluessel-editor/src/net/morilib/lisp/editor/LispEditor.java (nonexistent)
+++ trunk/schluessel-editor/src/net/morilib/lisp/editor/LispEditor.java (revision 391)
@@ -0,0 +1,39 @@
1+/*
2+ * Copyright 2009-2014 Yuichiro Moriguchi
3+ *
4+ * Licensed under the Apache License, Version 2.0 (the "License");
5+ * you may not use this file except in compliance with the License.
6+ * You may obtain a copy of the License at
7+ *
8+ * http://www.apache.org/licenses/LICENSE-2.0
9+ *
10+ * Unless required by applicable law or agreed to in writing, software
11+ * distributed under the License is distributed on an "AS IS" BASIS,
12+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13+ * See the License for the specific language governing permissions and
14+ * limitations under the License.
15+ */
16+package net.morilib.lisp.editor;
17+
18+import org.eclipse.ui.editors.text.TextEditor;
19+
20+public class LispEditor extends TextEditor {
21+
22+ private ColorManager colorManager;
23+
24+ /**
25+ *
26+ */
27+ public LispEditor() {
28+ super();
29+ colorManager = new ColorManager();
30+ setSourceViewerConfiguration(new LispConfiguration(colorManager));
31+ setDocumentProvider(new LispDocumentProvider());
32+ }
33+
34+ public void dispose() {
35+ colorManager.dispose();
36+ super.dispose();
37+ }
38+
39+}
Added: svn:mime-type
## -0,0 +1 ##
+text/plain
\ No newline at end of property
--- trunk/schluessel-editor/src/net/morilib/lisp/editor/LispWhitespaceDetector.java (nonexistent)
+++ trunk/schluessel-editor/src/net/morilib/lisp/editor/LispWhitespaceDetector.java (revision 391)
@@ -0,0 +1,26 @@
1+/*
2+ * Copyright 2009-2014 Yuichiro Moriguchi
3+ *
4+ * Licensed under the Apache License, Version 2.0 (the "License");
5+ * you may not use this file except in compliance with the License.
6+ * You may obtain a copy of the License at
7+ *
8+ * http://www.apache.org/licenses/LICENSE-2.0
9+ *
10+ * Unless required by applicable law or agreed to in writing, software
11+ * distributed under the License is distributed on an "AS IS" BASIS,
12+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13+ * See the License for the specific language governing permissions and
14+ * limitations under the License.
15+ */
16+package net.morilib.lisp.editor;
17+
18+import org.eclipse.jface.text.rules.IWhitespaceDetector;
19+
20+public class LispWhitespaceDetector implements IWhitespaceDetector {
21+
22+ public boolean isWhitespace(char c) {
23+ return (c == ' ' || c == '\t' || c == '\n' || c == '\r');
24+ }
25+
26+}
Added: svn:mime-type
## -0,0 +1 ##
+text/plain
\ No newline at end of property
--- trunk/schluessel-editor/plugin.xml (nonexistent)
+++ trunk/schluessel-editor/plugin.xml (revision 391)
@@ -0,0 +1,16 @@
1+<?xml version="1.0" encoding="UTF-8"?>
2+<?eclipse version="3.4"?>
3+<plugin>
4+
5+ <extension
6+ point="org.eclipse.ui.editors">
7+ <editor
8+ name="Schluessel Scheme Editor"
9+ extensions="scm"
10+ contributorClass="org.eclipse.ui.texteditor.BasicTextEditorActionContributor"
11+ class="net.morilib.lisp.editor.LispEditor"
12+ id="net.morilib.lisp.editor.LispEditor">
13+ </editor>
14+ </extension>
15+
16+</plugin>
Added: svn:mime-type
## -0,0 +1 ##
+text/plain
\ No newline at end of property
Show on old repository browser