guy 76d2e43293 default.url Aggiunto supporto per l'italiano
printer.cpp    Vietao il registra di configurazioni utente
text.cpp       Modificati include inutili
text.h         Cambiati valori di un enum per compatibilita con release 4.5
viswin.cpp     Tolto bottone di chiusura
window.cpp     Aggiunti controlli sulla chiusura/distruzione delle finestre.


git-svn-id: svn://10.65.10.50/trunk@3804 c028cbd2-c16b-5b4b-a496-9718f37d4682
1996-10-21 10:42:45 +00:00

208 lines
7.2 KiB
C++
Executable File

#ifndef __TEXTFILE_H
#define __TEXTFILE_H
#ifndef __STDIO_H
#include <stdio.h>
#endif
#ifndef __STRINGS_H
#include <strings.h>
#endif
#ifndef __RELATION_H
class TRelation;
#endif
#ifndef __WINDOW_H
struct TPoint;
#endif
// @doc INTERNAL
// @enum direction | Direzioni da seguire nella lettura del file di testo
enum direction {
up, // @emem Direzione verso l'alto
down, // @emem Direzione verso il basso
updown}; // @emem Entrambe le direzioni
// @doc INTERNAL
// @enum style | Stile del carattere da utilizzare per il disegno del testo
enum style {
normal, // @emem Stile carattere normale
bold, // @emem Stile carattere in grassetto
italic, // @emem Stile carattere in corsivo
underlined, // @emem Stile carattere sottolineato
tabbed // @emem Stile di comodo per tabulazioni
};
// @doc EXTERNAL
// @class TTextfile | Classe per la definizione delle procedure di stampa di un testo
//
// @base public | TObject
class TTextfile: public TObject
// @author:(INTERNAL) Villa
// @access:(INTERNAL) Private Member
{
// @ccost:(INTERNAL) DEFAULT_PAGESIZE | 128 | Dimensione di default della pagina
enum {DEFAULT_PAGESIZE = 128};
// @cmember:(INTERNAL) Pagina di testo correntemente in memoria
TArray _page;
// @cmember:(INTERNAL) Un bit per ogni riga, TRUE se ci si e' fatto replace
TBit_array _dirty_lines;
// @cmember:(INTERNAL) Inizio della pagina in coordinate testo
long _page_start;
// @cmember:(INTERNAL) Fine della pagina in coordinate testo
long _page_end;
// @cmember:(INTERNAL) Numero di righe di <p _page>
long _page_size;
// @cmember:(INTERNAL) Numero totale delle linee di testo
long _lines;
// @cmember:(INTERNAL) Numero della linea corrente
long _cur_line;
// @cmember:(INTERNAL) Nome del file di testo (puo' essere temporaneo)
TFilename _filename;
// @cmember:(INTERNAL) Nome del file indice (sempre temporaneo)
TFilename _indname;
// @cmember:(INTERNAL) Puntatore al file indice
FILE* _index;
// @cmember:(INTERNAL) Puntatore al file di testo
FILE* _instr;
// @cmember:(INTERNAL) Direzione ottimale di lettura del file (vedi <t direction>)
direction _direction;
// @cmember:(INTERNAL) Piece corrente
int _item;
// @cmember:(INTERNAL) Testo della riga corrente
TToken_string _line;
// @cmember:(INTERNAL) Codifica delllo stile e del colore del carattere
long _styles[256];
// @cmember:(INTERNAL) Indica se la piece e' <e style.tabbed>
bool _tabbed_piece;
// @cmember:(INTERNAL) Punti ipertestuali come passati da utente (<c TViswin>)
TArray _hotspots;
// @cmember:(INTERNAL) Rappresentazione interna punti ipertestuali
TArray _spots;
// @cmember:(INTERNAL) Indice se e' stato modificato
bool _dirty;
// @cmember:(INTERNAL) Indica se i file sono aperti
bool _isopen;
// @cmember:(INTERNAL) Indica se si tratta di un file temporaneo
bool _istemp;
// @cmember:(INTERNAL) Indica se e' permesso dare una <mf TTextfile::append>
bool _accept;
// @cmember:(INTERNAL) Indica se si sta modificando con <mf TTextfile::add> e si puo' fare <mf TTextfile::replace>
bool _interactive;
// @cmember:(INTERNAL) Gestisce la sostituzione di campi al posto di tag nel testo
TRelation* _rel;
// @cmember:(INTERNAL) Riempe la pagina contenente <p line>, ottimizzando start ed end
void _read_page(long line);
// @cmember:(INTERNAL) Ritorna TRUE se la roga <p l> e' nella pagina corrente
bool _in_page(long l)
{ return l >= _page_start && l < _page_end; }
// @cmember:(INTERNAL) Salva i replace fatti sul file (anche temporaneo)
void _save_changes();
// void _parse_style(long j);
// @cmember:(INTERNAL) Traduce il tag dello stile passato in <p c> (tag) con uno di <t style> (stile XVT)
style _trans_style(char c);
// @access Public Member
public:
// @cmember Ritorna il numero totale delle linee di testo
long lines()
{ return _lines; }
// @cmember Ritorna se sono state effettuate delle modifiche
bool changed()
{ return _dirty; }
// @cmember Ritorna la stringa di caratteri senza formattazione
const char* line(long row, long column = 0, int howmuch = -1);
// @cmember Ritorna la stringa di caratteri con la formattazione
const char* line_formatted(long row);
// @cmember Aggiunge una riga al text (con i formati del caso)
bool append(const char* l);
// @cmember Chiude tutti i files per poter copiare o eseguire operazioni. Dopo aver chiamato
// questa funzione non si puo' piu' fare nulla.
void close();
// @cmember Stampa su carta
void print();
// @cmember Chiude l'aggiunta di nuove linee
void freeze()
{ _accept = FALSE; }
// @cmember Ritorna se e' possibile aggiungere delle nuove righe (TRUE se non vengono accettate)
bool frozen()
{ return !_accept; }
// @cmember Legge il testo formattato
void read_line(long j, long b = 0, bool pg = TRUE);
// @cmember Ritorna il pezzo di linea successivo con stile e colore
const char* piece();
// @cmember Ritorna lo stile del piece (vedi <t style>)
int get_style(int pos = -1);
// @cmember Ritorna il colore di background del piece
char get_background(int pos = -1);
// @cmember Ritorna il colore di foreground del piece
char get_foreground(int pos = -1);
// @cmember Ritorna gli attributi alla posizione <p pos>
long get_attribute(int pos = -1);
// @cmember Ritorna la parola alla posizione indicata
const char* word_at(long x, long y);
// @cmember Ritorna il pezzo di testo indicato (da <p form> a <p to>), allochera' un altro
// TText che deve essere disfatto dall'utente.
TTextfile* section(TPoint& from, TPoint& to)
{ return this; }
// @cmember Ritorna il nome del file su cui si sta lavorando
const char* name()
{ return (const char*)_filename; }
// @cmember Permette di settare il valore di <p _iteractive> (vedi sopra)
void interactive(bool on = TRUE)
{ _interactive = on; }
// @cmember Scrive il testo (non formattato) su file
bool write(const char* path, TPoint* from = NULL, TPoint* to = NULL);
// @cmember Scrive il testo (non formattato) su TString_array
void write(TString_array& a, TPoint* from = NULL, TPoint* to = NULL);
// @cmember Disfa tutto e svuota il file
void destroy();
// @cmember Cerca una stringa di testo all'interno di una riga
long search (const char* txt, int& pos, long from = 0, bool down = TRUE, bool casesens = FALSE, bool regexp = FALSE);
// @cmember Sostituisce un testo all'interno di una riga
int replace(long line, const char* txt, int pos = 0, int len = -1);
// @cmember Permette di settare gli hot_spot
void set_hotspots(char fg, char bg = 'w');
// @cmember Ritorna l'array di hotspots
TArray& hotspots()
{ return _spots; }
// @cmember Associa una relazione che viene usata (nello stato corrente) per
// risolvere eventuali campi per merge (marcati nel testo come
// <lt>@file-<gt>fieldname@[format]@[len]@[just]<gt>
void set_relation(TRelation* r)
{ _rel = r; }
// @cmember Costruttore
TTextfile(const char* file = NULL, int pagesize = DEFAULT_PAGESIZE, direction preferred = updown, bool interactive = TRUE);
// @cmember Distruttore
virtual ~TTextfile();
};
#endif