Changeset 1145


Ignore:
Timestamp:
Jul 3, 2011, 4:43:44 PM (6 years ago)
Author:
stefan
Message:

added auto-generation of live template arguments + added live template "table"

Location:
trunk
Files:
2 added
5 edited

Legend:

Unmodified
Added
Removed
  • trunk/data/codehelper/liveTemplates.xml

    r1144 r1145  
    3030  </command>
    3131  <command name="fig" usage="\begin{figure}&nl;  @|@&nl;  \caption{@caption@}&nl;  \label{fig:@label@}&nl;\end{figure}" hint="figure environment">
    32     <argument name="caption"/>
     32    <argument name="caption">
     33      <generate name="label" function="label"/>
     34    </argument>
    3335    <argument name="label"/>
     36  </command>
     37  <command name="table" usage="\begin{table}&nl;  \caption{@caption@}&nl;  \label{tab:@label@}&nl;  \begin{tabular}{|@c@|}&nl;    @|@&nl;  \end{tabular}&nl;\end{table}" hint="table environment">
     38    <argument name="caption">
     39      <generate name="label" function="label"/>
     40    </argument>
     41    <argument name="label"/>
     42    <argument name="c"/>
    3443  </command>
    3544  <command name="center" usage="\begin{center}&nl;  @|@&nl;\end{center}" hint="center environment">
     
    5362  </command>
    5463  <command name="ssec" usage="\subsection{@name@}\label{sec:@label@}&nl;@|@" hint="subsection">
    55     <argument name="name"/>
     64    <argument name="name">
     65      <generate name="label" function="label"/>
     66    </argument>
    5667    <argument name="label"/>
    5768  </command>
    5869  <command name="sssec" usage="\subsubsection{@name@}\label{sec:@label@}&nl;@|@" hint="subsubsection">
    59     <argument name="name"/>
     70    <argument name="name">
     71      <generate name="label" function="label"/>
     72    </argument>
    6073    <argument name="label"/>
    6174  </command>
  • trunk/src/sce/codehelper/CHCommand.java

    r1082 r1145  
    66
    77import java.util.ArrayList;
     8import java.util.HashMap;
    89
    910public class CHCommand implements Comparable {
     
    174175    return o1.equals(o2);
    175176  }
     177
     178  public void finalizeArguments() {
     179    // create map from argument name to argument
     180    HashMap<String, CHCommandArgument> argName2arg = new HashMap<String, CHCommandArgument>();
     181    for (CHCommandArgument argument : arguments) {
     182      argName2arg.put(argument.getName(), argument);
     183    }
     184    // assign arguments where generators reference argument names
     185    for (CHCommandArgument argument : arguments) {
     186      for (CHArgumentGenerator generator : argument.getGenerators()) {
     187        generator.setArgument(argName2arg.get(generator.getArgumentName()));
     188      }
     189    }
     190  }
    176191}
  • trunk/src/sce/codehelper/CHCommandArgument.java

    r1069 r1145  
    66
    77import sce.component.SCEDocumentRange;
     8import sun.security.pkcs11.wrapper.Functions;
     9import util.Function1;
    810
    911import java.util.ArrayList;
     
    2123  // possible values
    2224  private ArrayList<String> values = new ArrayList<String>();
     25  // generates
     26  private ArrayList<CHArgumentGenerator> generators = new ArrayList<CHArgumentGenerator>();
    2327
    2428  // while editing (for templates)
     
    159163  }
    160164
    161   /**
     165  public ArrayList<CHArgumentGenerator> getGenerators() {
     166    return generators;
     167  }
     168
     169  public void addGenerator(String argumentName, String functionName) {
     170    if (argumentName == null || functionName == null) return;
     171    generators.add(new CHArgumentGenerator(argumentName, CHFunctions.get(functionName)));
     172  }
     173
     174  /**
    162175   * Returns the value of the argument.
    163176   *
  • trunk/src/sce/codehelper/StaticCommandsReader.java

    r1071 r1145  
    158158
    159159      // read the suggested values if there are some
    160       for (XMLElement valueXML : argumentXML.getChildElements()) {
    161         argument.addValue(decode(valueXML.getAttribute("value")));
     160      for (XMLElement xml : argumentXML.getChildElements()) {
     161        if (xml.getName().equals("value")) {
     162          argument.addValue(decode(xml.getAttribute("value")));
     163        } else
     164        if (xml.getName().equals("generate")) {
     165          argument.addGenerator(decode(xml.getAttribute("name")), decode(xml.getAttribute("function")));
     166        }
    162167      }
    163168
     
    165170      command.addArgument(argument);
    166171    }
     172
     173    command.finalizeArguments();
     174
    167175    return command;
    168176  }
  • trunk/src/sce/codehelper/Template.java

    r1143 r1145  
    269269        CHCommandArgument argument = templateArguments.get(templateArgumentNr);
    270270
    271         Iterator occurrencesIterator = argument.getOccurrences().iterator();
     271        Iterator<SCEDocumentRange> occurrencesIterator = argument.getOccurrences().iterator();
    272272        occurrencesIterator.next(); // jump over the first occurrence
    273273        while (occurrencesIterator.hasNext()) {
    274           SCEDocumentRange argumentRange = (SCEDocumentRange) occurrencesIterator.next();
    275           SCEDocumentPosition start = new SCEDocumentPosition(argumentRange.getStartPosition().getRow(), argumentRange.getStartPosition().getColumn() + 1);
    276           SCEDocumentPosition end = argumentRange.getEndPosition();
    277 
    278           if (!document.getText(start, end).equals(argumentValue)) {
    279             pane.setFreezeCaret(true);
    280             document.remove(start.getRow(), start.getColumn(), end.getRow(), end.getColumn(), 0, false);
    281             document.insert(argumentValue, start.getRow(), start.getColumn(), 0, false);
    282             pane.setFreezeCaret(false);
     274          setArgumentValue(occurrencesIterator.next(), argumentValue);
     275        }
     276
     277        // update all generated arguments
     278        for (CHArgumentGenerator generator : argument.getGenerators()) {
     279          String generatedValue = generator.getFunction().apply(argumentValue);
     280          for (SCEDocumentRange argumentRange : generator.getArgument().getOccurrences()) {
     281            setArgumentValue(argumentRange, generatedValue);
    283282          }
    284283        }
    285284      }
     285    }
     286  }
     287
     288  private void setArgumentValue(SCEDocumentRange argumentRange, String argumentValue) {
     289    SCEDocumentPosition start = new SCEDocumentPosition(argumentRange.getStartPosition().getRow(), argumentRange.getStartPosition().getColumn() + 1);
     290    SCEDocumentPosition end = argumentRange.getEndPosition();
     291
     292    if (!document.getText(start, end).equals(argumentValue)) {
     293      pane.setFreezeCaret(true);
     294      document.remove(start.getRow(), start.getColumn(), end.getRow(), end.getColumn(), 0, false);
     295      document.insert(argumentValue, start.getRow(), start.getColumn(), 0, false);
     296      pane.setFreezeCaret(false);
    286297    }
    287298  }
Note: See TracChangeset for help on using the changeset viewer.