Ignore:
Timestamp:
10/22/10 16:48:56 (14 years ago)
Author:
zeiss
Message:

sdfsd

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/de.ugoe.cs.swe.bnftools.ebnf.ui/src/de/ugoe/cs/swe/bnftools/utils/Utils.java

    r5 r17  
    44import java.util.List; 
    55 
    6 import org.eclipse.emf.common.util.EList; 
    76import org.eclipse.emf.ecore.EObject; 
    87import org.eclipse.jface.text.BadLocationException; 
     
    2221import com.google.common.collect.Iterables; 
    2322 
     23import de.ugoe.cs.swe.bnftools.ebnf.BnfEntry; 
     24import de.ugoe.cs.swe.bnftools.ebnf.DeltaEntry; 
    2425import de.ugoe.cs.swe.bnftools.ebnf.EtsiBnf; 
     26import de.ugoe.cs.swe.bnftools.ebnf.MergeEntry; 
    2527import de.ugoe.cs.swe.bnftools.ebnf.Rule; 
    2628 
     
    2931        static public NodeAdapter findNodeFromSelection( 
    3032                        final XtextEditor xtextEditor, ITextSelection mySelection) { 
    31                 NodeAdapter node = null; 
    3233                if ((xtextEditor == null) || (xtextEditor.getDocument() == null)) 
    3334                        return null; 
    3435                EtsiBnf root = (EtsiBnf) xtextEditor.getDocument().readOnly( 
    3536                                new RootEObjectFinder()); 
    36                 EList<Rule> rules = root.getRule(); 
    37                 for (int i = 0; i < rules.size(); i++) { 
    38                         node = NodeUtil.getNodeAdapter(rules.get(i)); 
    39                         if ((node.getParserNode().getOffset() <= mySelection.getOffset()) 
    40                                         && (mySelection.getOffset() <= node.getParserNode() 
    41                                                         .getOffset() 
    42                                                         + node.getParserNode().getLength())) { 
    43                                 return node; 
     37                 
     38                NodeAdapter resultNode = null; 
     39                if (root.getBnfEntry() != null) { 
     40                        System.out.println("bnf grammar!"); 
     41                        for (int i=0; i < root.getBnfEntry().size(); i++) { 
     42                                BnfEntry entry = root.getBnfEntry().get(i); 
     43                                if (entry.getRule() != null) { 
     44                                        resultNode = findNodeInRule(entry.getRule(), mySelection); 
     45                                        if (resultNode != null) 
     46                                                return resultNode; 
     47                                } 
     48                        } 
     49                } else if (root.getDeltaEntry() != null) { 
     50                        for (int i=0; i < root.getDeltaEntry().size(); i++) { 
     51                                DeltaEntry entry = root.getDeltaEntry().get(i); 
     52                                if (entry.getRule() != null) { 
     53                                        resultNode = findNodeInRule(entry.getRule(), mySelection); 
     54                                        if (resultNode != null) 
     55                                                return resultNode; 
     56                                } 
     57                        } 
     58                } else if (root.getMergeEntry() != null) { 
     59                        for (int i=0; i < root.getMergeEntry().size(); i++) { 
     60                                MergeEntry entry = root.getMergeEntry().get(i); 
     61                                if (entry.getMergeRule() != null) { 
     62                                        // TODO: doesn't work here... 
     63//                                      resultNode = findNodeInRule(entry.getgetRule(), mySelection); 
     64//                                      if (resultNode != null) 
     65//                                              return resultNode; 
     66                                } 
    4467                        } 
    4568                } 
     69                 
     70                return resultNode; 
     71        } 
     72         
     73        // -------------------------------------------------------------------------------- 
     74 
     75        static private NodeAdapter findNodeInRule(Rule rule, ITextSelection mySelection) { 
     76                NodeAdapter node = NodeUtil.getNodeAdapter(rule); 
     77                if ((node.getParserNode().getOffset() <= mySelection.getOffset()) 
     78                                && (mySelection.getOffset() <= node.getParserNode() 
     79                                                .getOffset() 
     80                                                + node.getParserNode().getLength())) { 
     81                        return node; 
     82                } 
     83                 
    4684                return null; 
    4785        } 
Note: See TracChangeset for help on using the changeset viewer.