/*textnumbers.java
*Kai Triebel [[email protected]]
*(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); }
   }
}