]> git.uio.no Git - ifi-stolz-refaktor.git/blame - case-study/jdt-before/ui/org/eclipse/jdt/internal/ui/propertiesfileeditor/PropertiesFilePartitionScanner.java
Case Study: adding data and statistics
[ifi-stolz-refaktor.git] / case-study / jdt-before / ui / org / eclipse / jdt / internal / ui / propertiesfileeditor / PropertiesFilePartitionScanner.java
CommitLineData
1b2798f6
EK
1/*******************************************************************************
2 * Copyright (c) 2000, 2011 IBM Corporation and others.
3 * All rights reserved. This program and the accompanying materials
4 * are made available under the terms of the Eclipse Public License v1.0
5 * which accompanies this distribution, and is available at
6 * http://www.eclipse.org/legal/epl-v10.html
7 *
8 * Contributors:
9 * IBM Corporation - initial API and implementation
10 *******************************************************************************/
11package org.eclipse.jdt.internal.ui.propertiesfileeditor;
12
13import java.util.ArrayList;
14import java.util.List;
15
16import org.eclipse.jface.text.IDocument;
17import org.eclipse.jface.text.rules.EndOfLineRule;
18import org.eclipse.jface.text.rules.ICharacterScanner;
19import org.eclipse.jface.text.rules.IPredicateRule;
20import org.eclipse.jface.text.rules.IToken;
21import org.eclipse.jface.text.rules.IWordDetector;
22import org.eclipse.jface.text.rules.RuleBasedPartitionScanner;
23import org.eclipse.jface.text.rules.SingleLineRule;
24import org.eclipse.jface.text.rules.Token;
25import org.eclipse.jface.text.rules.WordRule;
26
27/**
28 * This scanner recognizes the comments, property keys and property values.
29 *
30 * @since 3.1
31 */
32public class PropertiesFilePartitionScanner extends RuleBasedPartitionScanner implements IPropertiesFilePartitions {
33
34 /**
35 * Detector for empty comments.
36 */
37 static class EmptyCommentDetector implements IWordDetector {
38
39 /*
40 * @see IWordDetector#isWordStart
41 */
42 public boolean isWordStart(char c) {
43 return (c == '#');
44 }
45
46 /*
47 * @see IWordDetector#isWordPart
48 */
49 public boolean isWordPart(char c) {
50 return (c == '#');
51 }
52 }
53
54
55 /**
56 * Word rule for empty comments.
57 */
58 static class EmptyCommentRule extends WordRule implements IPredicateRule {
59
60 private IToken fSuccessToken;
61 /**
62 * Constructor for EmptyCommentRule.
63 * @param successToken the success token
64 */
65 public EmptyCommentRule(IToken successToken) {
66 super(new EmptyCommentDetector());
67 fSuccessToken= successToken;
68 addWord("#", fSuccessToken); //$NON-NLS-1$
69 }
70
71 /*
72 * @see IPredicateRule#evaluate(ICharacterScanner, boolean)
73 */
74 public IToken evaluate(ICharacterScanner scanner, boolean resume) {
75 return evaluate(scanner);
76 }
77
78 /*
79 * @see IPredicateRule#getSuccessToken()
80 */
81 public IToken getSuccessToken() {
82 return fSuccessToken;
83 }
84 }
85
86
87 /**
88 * Creates the partitioner and sets up the appropriate rules.
89 */
90 public PropertiesFilePartitionScanner() {
91 super();
92
93 IToken comment= new Token(COMMENT);
94 IToken propertyValue= new Token(PROPERTY_VALUE);
95 IToken key= new Token(IDocument.DEFAULT_CONTENT_TYPE);
96
97 List<IPredicateRule> rules= new ArrayList<IPredicateRule>();
98
99 // Add rule for leading white space.
100 rules.add(new LeadingWhitespacePredicateRule(key, "\t")); //$NON-NLS-1$
101 rules.add(new LeadingWhitespacePredicateRule(key, " ")); //$NON-NLS-1$
102
103 // Add rules for comments.
104 rules.add(new EndOfLineRule("#", comment, (char) 0, true)); //$NON-NLS-1$
105 rules.add(new EndOfLineRule("!", comment, (char) 0, true)); //$NON-NLS-1$
106
107 // Add rules for property values.
108 rules.add(new SingleLineRule("=", null, propertyValue, '\\', true, true)); //$NON-NLS-1$
109 rules.add(new SingleLineRule(":", null, propertyValue, '\\', true, true)); //$NON-NLS-1$
110 rules.add(new SingleLineRule(" ", null, propertyValue, '\\', true, true)); //$NON-NLS-1$
111 rules.add(new SingleLineRule("\t", null, propertyValue, '\\', true, true)); //$NON-NLS-1$
112
113 // Add special case word rule.
114 EmptyCommentRule wordRule= new EmptyCommentRule(comment);
115 rules.add(wordRule);
116
117 IPredicateRule[] result= new IPredicateRule[rules.size()];
118 rules.toArray(result);
119 setPredicateRules(result);
120 }
121}