Changeset 1243


Ignore:
Timestamp:
Jul 21, 2011, 10:08:15 PM (6 years ago)
Author:
stefan
Message:

added option to exclude lines from being parsed by surrounding them with "%###"

Location:
trunk
Files:
1 added
5 edited

Legend:

Unmodified
Added
Removed
  • trunk/CHANGELOG

    r1241 r1243  
    1616  - quick help shows lists of packages and documentclasses providing command under cursor
    1717  - option to create macro from existing LaTeX code via control+shift+M or "LaTeX"->"Extract Command"
     18  - exclude lines from being parsed by surrounding them with "%###"
    1819* minor enhancements:
    1920  - the code helper popups now allow for the use of the mouse
  • trunk/data/styles/user.xml

    r1138 r1243  
    1919  <element name="math_command" style="plain" foreground="606000"/>
    2020  <element name="todo" style="bold,italic" foreground="0000ff"/>
     21  <element name="parser_stop" style="bold,italic" foreground="db8717"/>
    2122  <element name="error" style="plain" foreground="ff0000"/>
    2223  <element name="begin" style="bold" foreground="000080"/>
  • trunk/src/jlatexeditor/JLatexEditorJFrame.java

    r1181 r1243  
    10241024    // close
    10251025    if (action.equals("close")) {
    1026       closeTab(tabbedPane.getSelectedIndex());
     1026      if (getActiveEditor().isDiffView()) {
     1027        getActiveEditor().closeDiffView();
     1028      } else {
     1029        closeTab(tabbedPane.getSelectedIndex());
     1030      }
    10271031    } else
    10281032    // exit
  • trunk/src/jlatexeditor/syntaxhighlighting/LatexStyles.java

    r909 r1243  
    2525
    2626  public static final byte TODO = 7;
     27  public static final byte PARSER_STOP = 8;
    2728
    28   public static final byte ERROR = 8;
     29  public static final byte ERROR = 9;
    2930
    3031  public static final byte USER = 50;
     
    5253    name2Id.put("math", MATH);
    5354    name2Id.put("math_command", MATH_COMMAND);
     55    name2Id.put("parser_stop", PARSER_STOP);
    5456    name2Id.put("todo", TODO);
    5557    name2Id.put("error", ERROR);
  • trunk/src/jlatexeditor/syntaxhighlighting/LatexSyntaxHighlighting.java

    r1231 r1243  
    66
    77import jlatexeditor.codehelper.BackgroundParser;
     8import jlatexeditor.syntaxhighlighting.states.DontParse;
    89import jlatexeditor.syntaxhighlighting.states.Env;
    910import jlatexeditor.syntaxhighlighting.states.MathMode;
     
    153154      final SCEDocumentChar chars[] = row.chars;
    154155
    155       // check if row has been added during an svn merge
    156       boolean svnRow = false;
    157       if (row.length >= 7) {
    158         char c = chars[0].character;
    159         switch (c) {
    160           case '<':
    161           case '>':
    162           case '=':
    163             svnRow = true;
    164             for (int i = 1; i < 7; i++) {
    165               if (chars[i].character != c) svnRow = false;
    166             }
    167             if (svnRow) {
    168               if (c == '=') {
    169                 svnRow = row.length == 7;
    170               }
    171               else
    172                 svnRow = row.length >= 8 && chars[7].character == ' ';
    173             }
    174             if (svnRow) {
    175               for (SCEDocumentChar aChar : chars) {
    176                 aChar.style = state.getStyles()[LatexStyles.ERROR];
    177                 //aChar.overlayStyle = 0;
    178               }
    179             }
     156      boolean rowWasParsed = false;
     157
     158      // test for "%###" row (stop parsing)
     159      if (state instanceof DontParse) {
     160        if (row.length < 4 || !row.toString().startsWith("%###")) {
     161          byte style = state.getStyles()[LatexStyles.TEXT];
     162          for (int i=0; i < row.length; i++) chars[i].style = style;
     163          rowWasParsed = true;
    180164        }
    181165      }
    182166
    183       if (!svnRow) {
     167      if (!rowWasParsed) {
     168        // check if row has been added during an svn merge
     169        if (row.length >= 7) {
     170          char c = chars[0].character;
     171          switch (c) {
     172            case '<':
     173            case '>':
     174            case '=':
     175              rowWasParsed = true;
     176              for (int i = 1; i < 7; i++) {
     177                if (chars[i].character != c) rowWasParsed = false;
     178              }
     179              if (rowWasParsed) {
     180                if (c == '=') {
     181                  rowWasParsed = row.length == 7;
     182                }
     183                else
     184                  rowWasParsed = row.length >= 8 && chars[7].character == ' ';
     185              }
     186              if (rowWasParsed) {
     187                for (SCEDocumentChar aChar : chars) {
     188                  aChar.style = state.getStyles()[LatexStyles.ERROR];
     189                  //aChar.overlayStyle = 0;
     190                }
     191              }
     192          }
     193        }
     194      }
     195
     196      if (!rowWasParsed) {
    184197        // parse the latex row
    185198        for (int char_nr = 0; char_nr < row.length; char_nr++) {
     
    337350          if (c == '%') {
    338351            byte commentStyle = stateStyles[LatexStyles.COMMENT];
    339             Matcher matcher = TODO_PATTERN.matcher(row.toString().substring(char_nr).toLowerCase());
    340             if (matcher.find()) {
    341               int todoIndex = char_nr + matcher.start();
    342               while (char_nr < todoIndex) chars[char_nr++].style = commentStyle;
    343               byte todoStyle = stateStyles[LatexStyles.TODO];
    344               while (char_nr < row.length) chars[char_nr++].style = todoStyle;
     352            String restOfRow = row.toString().substring(char_nr+1);
     353            if (restOfRow.startsWith("###")) {
     354              chars[char_nr++].style = commentStyle;
     355              byte todoStyle = stateStyles[LatexStyles.PARSER_STOP];
     356              for (int i=0; i<3; i++) chars[char_nr++].style = todoStyle;
     357              while (char_nr < row.length) chars[char_nr++].style = commentStyle;
     358              if (state instanceof DontParse) {
     359                stateStack.pop();
     360                state = stateStack.peek();
     361              } else {
     362                stateStack.push(state = new DontParse(state));
     363              }
    345364            } else {
    346               while (char_nr < row.length) chars[char_nr++].style = commentStyle;
     365              Matcher matcher = TODO_PATTERN.matcher(restOfRow.toLowerCase());
     366              if (matcher.find()) {
     367                int todoIndex = char_nr + matcher.start()-1;
     368                while (char_nr < todoIndex) chars[char_nr++].style = commentStyle;
     369                byte todoStyle = stateStyles[LatexStyles.TODO];
     370                while (char_nr < row.length) chars[char_nr++].style = todoStyle;
     371              } else {
     372                while (char_nr < row.length) chars[char_nr++].style = commentStyle;
     373              }
    347374            }
    348375            continue;
Note: See TracChangeset for help on using the changeset viewer.