Changeset 518

Show
Ignore:
Timestamp:
01/07/10 21:01:07 (3 years ago)
Author:
joerg
Message:
 
Files:
1 modified

Legend:

Unmodified
Added
Removed
  • trunk/src/jlatexeditor/errorhighlighting/LatexCompiler.java

    r376 r518  
    99import java.util.ArrayList; 
    1010import java.util.Map; 
     11import java.util.regex.Matcher; 
     12import java.util.regex.Pattern; 
    1113 
    1214/** 
     
    2830  private ArrayList<LatexCompileListener> compileListeners = new ArrayList<LatexCompileListener>(); 
    2931 
     32  private static Pattern fileLineError = Pattern.compile("([^:]+):([\\d]+):(.*)"); 
     33 
    3034  public LatexCompiler(int type, SourceCodeEditor editor, ErrorView errorView){ 
    3135    this.type = type; 
     
    5458    try{ 
    5559      if(type == TYPE_PDF) { 
    56         latexCompiler = exec("pdflatex -interaction=nonstopmode " + baseName + ".tex", file.getParentFile()); 
     60        latexCompiler = exec("pdflatex -file-line-error -interaction=nonstopmode " + baseName + ".tex", file.getParentFile()); 
    5761      } else { 
    58         latexCompiler = exec("latex -interaction=nonstopmode -output-format=dvi " + baseName + ".tex", file.getParentFile()); 
     62        latexCompiler = exec("latex -file-line-error -interaction=nonstopmode -output-format=dvi " + baseName + ".tex", file.getParentFile()); 
    5963      } 
    6064    } catch(Exception e){ 
     
    6468 
    6569    BufferedReader in = new BufferedReader(new InputStreamReader(latexCompiler.getInputStream()), 100000); 
    66  
    6770    try{ 
    6871      LatexCompileError error; 
     
    7275      while(line != null){ 
    7376        // error messages 
    74         if(line.startsWith("!")) { 
     77        Matcher errorMatcher = fileLineError.matcher(line); 
     78        if(line.startsWith("!") || errorMatcher.matches()) { 
    7579          error = new LatexCompileError(); 
    7680          error.setType(LatexCompileError.TYPE_ERROR); 
    77           String fileName = fileStack.get(fileStack.size() - 1); 
    78           error.setFile(new File(file.getParentFile(), fileName), fileName); 
    79  
    80           error.setMessage(line.substring(1).trim()); 
     81          if(line.startsWith("!")) { 
     82            String fileName = fileStack.get(fileStack.size() - 1); 
     83            error.setFile(new File(file.getParentFile(), fileName), fileName); 
     84            error.setMessage(line.substring(1).trim()); 
     85          } else { 
     86            String fileName = errorMatcher.group(1); 
     87            error.setFile(new File(file.getParentFile(), fileName), fileName); 
     88            error.setLine(Integer.parseInt(errorMatcher.group(2))); 
     89            error.setMessage(errorMatcher.group(3).trim()); 
     90 
     91            // bug 
     92            if(!fileStack.get(fileStack.size()-1).equals(fileName)) fileStack.add(fileName); 
     93          } 
    8194 
    8295          while(line != null && !line.startsWith("l.")) { 
     
    170183 
    171184        // opening and closing files 
    172         if((line.indexOf("(") != -1 && !line.startsWith("(see")) || line.indexOf(')') != -1) { 
     185        if((line.indexOf("(") != -1 && !line.startsWith("(see")) || line.startsWith(")") || 
     186                (line.indexOf(')') != -1 && (line.startsWith("[") || line.indexOf(".tex") != 0 || line.indexOf(".sty") != 0 || line.indexOf(".bbl") != 0 || line.indexOf(".aux") != 0)) ) { 
    173187          int position = 0; 
    174188 
     
    196210              fileStack.add(fileName); 
    197211            } else { 
    198               fileStack.remove(fileStack.size() - 1); 
     212              // never empty the stack... parsing bugs 
     213              if(fileStack.size() > 1) fileStack.remove(fileStack.size() - 1); 
    199214              position = close + 1; 
    200215            }