/*textnumbers.java
 *Kai Triebel [stein-triebel@gmx.de]
 *(09. September 2008)
 */
import java.io.*;
import java.util.regex.*;
import java.util.*;

public class textnumbers {
    
static File datei_rein;
static File datei_raus;
static Pattern pat;
static List<String> fussnote;
static List<String> verweis;
static StringBuffer Zeile;
static BufferedReader In;
static BufferedWriter Out;   
static boolean footnote;
static String Eingangszeile;
   
    public static void main(String[] args) {
        textnumbers tn = new textnumbers();
        
        for(String datei:args) {
            tn.go(datei);
        }
    }
        
    public textnumbers() {
        pat = Pattern.compile( "\\["+"\\d+"+"\\]" );
        fussnote = new ArrayList<String>();
        verweis = new ArrayList<String>();
        footnote = false;
    }
       
    public void go(String datei) {
        datei_rein = new File( datei ); 
        datei_raus = new File( datei+".neu.txt" );
        
        try {
            In = new BufferedReader( new FileReader( datei_rein ) );
            Out = new BufferedWriter( new FileWriter( datei_raus ) );
            
            Eingangszeile = In.readLine();
               
            while(Eingangszeile != null) {
                if(Eingangszeile.equals("@footnote:")) footnote = true;
                Zeile = new StringBuffer(Eingangszeile);
                
                List<MatchResult> results = new ArrayList<MatchResult>(); 
                
                for ( Matcher m = pat.matcher(Eingangszeile); m.find(); ) {
                    results.add( m.toMatchResult() );
                } 
                
                for ( int i=0 ; i<results.size() ; i++ ) { 
                    if(!fussnote.contains(results.get(i).group())) {fussnote.add(results.get(i).group());}
                }
                
                for ( int i=(results.size()-1) ; i>=0 ; i-- ) {
                    Eingangszeile = Zeile.replace(results.get(i).start(), results.get(i).end(), "["+(fussnote.indexOf(results.get(i).group())+1)+"]").toString();
                }
                
                if(footnote == false)  schreiben(Eingangszeile);
                else verweis.add(Eingangszeile);
                      
                Eingangszeile = In.readLine();
            }
            
            if(footnote == true) {
                Collections.sort(verweis);
                for(int i=0; i<verweis.size(); i++)  schreiben(verweis.get(i));
            }
                        
            Out.close();
        } catch(IOException e) { System.out.println("Fehlercode 01: \n"+e); }
    }
        
    public static void schreiben(String zeile)  {
        try {
            Out.write(zeile);
            Out.newLine();
        } catch(IOException e) { System.out.println("Fehlercode 02: \n"+e); }
    }
}

