/*
 * $Id: TextStyle.java,v 1.11 2004/06/27 17:08:23 marbobo Exp $
 *
 * Copyright (c) Siemens AG 2008 
 *           (c) Universität Paderborn 2008 
 * Licensed under EUPL 1.1. 
 *
 * $Log: TextStyle.java,v $
 * Revision 1.11  2004/06/27 17:08:23  marbobo
 * + Quellcode maintenance
 *
 * Revision 1.10  2004/03/13 19:15:13  marbobo
 * Unbenutze lokale Variablen projektweit entsorgt
 *
 * Revision 1.9  2003/11/29 22:12:16  koppy
 * Serialisierbarkeit in die Superklasse verlegt
 *
 * Revision 1.8  2003/11/07 12:05:35  lawern
 * Code in methode ausgelagert.
 *
 * Revision 1.7  2003/10/01 08:19:52  lawern
 * Bug beseitigt.
 *
 * Revision 1.6  2003/07/31 13:59:31  bigmac
 * Compilerwarnungen beseitigt
 *
 * Revision 1.5  2003/07/17 14:20:48  lawern
 * Erweiterung für den RTF-Parser
 *
 * Revision 1.4  2003/04/25 13:10:51  lawern
 * + implements Serializable
 *
 * Revision 1.3  2003/04/23 14:55:34  lawern
 * Ergänzungen für Volltextverarbeitung
 *
 * Revision 1.2  2003/03/20 09:11:35  lawern
 * Konverter und Analyse überarbeitet
 *
 * Revision 1.1  2003/03/07 11:56:57  lawern
 * initiale Version
 *
 */
package vkc.analyse;

import java.text.BreakIterator;
import java.util.Locale;

import vkc.converter.TdfElement;


/**
 * Diese Klasse dient zum Zwischenspeichern und Analysieren von Ergebnisse aus
 * den Rendering- und  Analysevorgängen.
 *
 * @author lawern
 */
public final class TextStyle extends TdfElement {
    public int x;
    public int y;
    public int height;
    public int fontSize;
    int count = 0;
    public int style;

    //Bit 6 bold
    //Bit 7 italic
    //Bit 8 underlined
    //Bit 0-5 fontSize

    /**
      * Container für die in einem Textdokument verwendeten Text-Styles.
      */
    public TextStyle(int fontSize, boolean bold, boolean italic,
        boolean underlined, String text, boolean newLine, boolean separated) {
        super(text, 0, newLine, separated);

        this.fontSize = fontSize;

        init(this, bold, italic, underlined, text);
    }

    /**
     * Container für die in einem Textdokument verwendeten Text-Styles.
     */
    public TextStyle(int fontSize, boolean bold, boolean italic,
        boolean underlined, String text, int x, int y, int height,
        boolean newLine, boolean separated) {
        super(text, 0, newLine, separated);

        //Koordinaten und Hoehe speichern
        this.x = x;
        this.y = y;
        this.height = height;
        this.fontSize = fontSize;

        init(this, bold, italic, underlined, text);
    }

    private static void init(TextStyle style, boolean bold, boolean italic,
        boolean underlined, String text) {
        //Anzahl der Woerter im Text berechnen
        BreakIterator wb = BreakIterator.getWordInstance(Locale.ENGLISH);
        wb.setText(text);

        int count = 0;

        for (int end = wb.next(); end != BreakIterator.DONE; end = wb.next())
            count++;

        style.count = count;

        //Extremwerte vermeiden
        if (style.fontSize > 64) {
            style.fontSize = 64;
        }

        if (style.fontSize < 1) {
            style.fontSize = 1;
        }

        //Style-Zeile berechnen
        if (bold) {
            style.style |= 64;
        }

        if (italic) {
            style.style |= 128;
        }

        if (underlined) {
            style.style |= 256;
        }

        //System.out.println(text+" | fontSize:"+fontSize+" style:"+style);
        //Style-Zelle berechnen
        style.style |= style.fontSize;
    }

    /**
     * Vergleicht diesen TextStyles mit dem uebergebenen TextStyle.
     */
    public boolean equals(TextStyle test) {
        if (style == test.style) {
            return true;
        } 

        return false;
    }

    /**
     * Gibt das semantische Gewicht dieses TextSyles zurück.
     */
    public int getWeight() {
        return weight;
    }

    /**
     * Gibt die Anzahl der Wörter in diesem TextSyles zurück.
     */
    public int length() {
        return count;
    }
}
