ne' meno che mai funzionanti git-svn-id: svn://10.65.10.50/trunk@1493 c028cbd2-c16b-5b4b-a496-9718f37d4682
		
			
				
	
	
		
			149 lines
		
	
	
		
			4.9 KiB
		
	
	
	
		
			C++
		
	
	
		
			Executable File
		
	
	
	
	
			
		
		
	
	
			149 lines
		
	
	
		
			4.9 KiB
		
	
	
	
		
			C++
		
	
	
		
			Executable File
		
	
	
	
	
/* actually -*-c++-*- */
 | 
						|
#ifndef __TEXTFILE_H
 | 
						|
#define __TEXTFILE_H
 | 
						|
 | 
						|
#ifndef __STDIO_H
 | 
						|
#include <stdio.h>
 | 
						|
#endif                                     
 | 
						|
 | 
						|
#ifndef __STRINGS_H
 | 
						|
#include <strings.h>
 | 
						|
#endif
 | 
						|
 | 
						|
#ifndef __WINDOW_H
 | 
						|
#include <window.h>
 | 
						|
#endif
 | 
						|
 | 
						|
#ifndef __RELATION_H
 | 
						|
//class TRelation;
 | 
						|
#include <relation.h>
 | 
						|
#endif
 | 
						|
 | 
						|
enum direction {up, down, updown};
 | 
						|
enum style     {normal = XVT_FS_NONE, bold = XVT_FS_BOLD, italic = XVT_FS_ITALIC, 
 | 
						|
                underlined = XVT_FS_UNDERLINE, tabbed = XVT_FS_SCALE };
 | 
						|
 | 
						|
class TTextfile: public TObject
 | 
						|
{
 | 
						|
  enum {DEFAULT_PAGESIZE = 128};
 | 
						|
 | 
						|
  TArray        _page;
 | 
						|
  TBit_array    _dirty_lines;
 | 
						|
  long          _page_start;
 | 
						|
  long          _page_end;
 | 
						|
  long          _page_size;
 | 
						|
  long          _lines;
 | 
						|
  long          _cur_line;                             
 | 
						|
  TFilename     _filename;
 | 
						|
  TFilename     _indname;
 | 
						|
  FILE*         _index;
 | 
						|
  FILE*         _instr;
 | 
						|
  direction     _direction;
 | 
						|
  
 | 
						|
  int           _item;              // Piece corrente
 | 
						|
  TToken_string _line;              // Testo riga corrente
 | 
						|
  long          _styles[256];       // Stile e colore carattere
 | 
						|
  bool          _tabbed_piece; 
 | 
						|
  
 | 
						|
  TArray        _hotspots;
 | 
						|
  TArray        _spots;
 | 
						|
  bool          _dirty;
 | 
						|
  bool          _isopen;   
 | 
						|
  bool          _istemp;        
 | 
						|
  bool          _accept;        
 | 
						|
  bool          _interactive;
 | 
						|
 | 
						|
  // for merging with database fields
 | 
						|
  TRelation*  _rel;
 | 
						|
 | 
						|
  void   _read_page(long line);         
 | 
						|
  bool   _in_page(long l)        
 | 
						|
  { return  l >= _page_start && l < _page_end; }
 | 
						|
  void   _save_changes();
 | 
						|
  
 | 
						|
  //  void   _parse_style(long j);
 | 
						|
  style  _trans_style(char c);          
 | 
						|
  
 | 
						|
public:
 | 
						|
  
 | 
						|
  long        lines()   { return _lines; }
 | 
						|
  bool        changed() { return _dirty; }   
 | 
						|
  
 | 
						|
  // line() ritorna la stringa di caratteri senza formattazione
 | 
						|
  // ed eventualmente con i campi sostituiti se la relazione
 | 
						|
  // non e' NULL
 | 
						|
  const char* line(long row, long column = 0, int howmuch = -1);
 | 
						|
  // line_formatted() la ritorna, come e' logico attendersi, con
 | 
						|
  // la formattazione
 | 
						|
  const char* line_formatted(long row);
 | 
						|
  // appende una riga al text (con i formati del caso)
 | 
						|
  bool        append(const char* l);  
 | 
						|
  
 | 
						|
  // chide tutti i files per poter copiare o eseguire operazioni
 | 
						|
  // dopo close() non si puo' piu' fare nulla
 | 
						|
  void        close();
 | 
						|
  void        print();                     
 | 
						|
  // chiude l'aggiunta di nuove linee
 | 
						|
  void        freeze() { _accept = FALSE; }
 | 
						|
  bool        frozen() { return  !_accept; }
 | 
						|
  
 | 
						|
  // per leggere il testo formattato, si fa prima read_line, poi      
 | 
						|
  // si prende un pezzo per volta 
 | 
						|
  // style() ritorna lo stile (vedi enum) del piece() corrente
 | 
						|
  // se chiamata con parametri ritorna lo stile del carattere alla 
 | 
						|
  // posizione data 
 | 
						|
  // get_background() e get_foreground() ritornano il suo colore di bg e fg
 | 
						|
  // piece() ritorna il pezzo di linea successivo con stile e colore
 | 
						|
  // invarianti, o NULL quando non ce n'e' piu'     
 | 
						|
  // bello, vero?
 | 
						|
  
 | 
						|
  void        read_line(long j, long b = 0, bool pg = TRUE);
 | 
						|
  const char* piece();            
 | 
						|
  int         get_style(int pos = -1);
 | 
						|
  char        get_background(int pos = -1);              
 | 
						|
  char        get_foreground(int pos = -1); 
 | 
						|
  long        get_attribute(int pos = -1);
 | 
						|
  
 | 
						|
  // ritorna la parola alla posizione indicata
 | 
						|
  const char* word_at(long x, long y);                  
 | 
						|
 | 
						|
  // TBI ritorna il pezzo di testo da x a y  
 | 
						|
  // allochera' un altro TText che deve essere disfatto dall'utente
 | 
						|
  TTextfile*  section(TPoint& from, TPoint& to) { return this; }    
 | 
						|
  const char* name() { return (const char*)_filename; }  
 | 
						|
  void interactive(bool on = TRUE) { _interactive = on; }
 | 
						|
  
 | 
						|
  // scrive il testo (non formattato) su file, da punto a punto
 | 
						|
  // (tutto per default)
 | 
						|
  bool        write(const char* path, TPoint* from = NULL, TPoint* to = NULL);
 | 
						|
  // disfa tutto e svuota il file
 | 
						|
  void        destroy(); 
 | 
						|
 | 
						|
  // search and replace (una riga per volta, rispetta i formati) 
 | 
						|
  // txt = text to search; pos = int to put the char position in;
 | 
						|
  // from = where to start; down = FALSE == up
 | 
						|
  long search (const char* txt,  int& pos, long from = 0, 
 | 
						|
               bool down = TRUE, bool casesens = FALSE);
 | 
						|
  // replace txt=txt in line=line at pos=pos for len=len
 | 
						|
  int  replace(long line, const char* txt, int pos = 0, int len = -1);
 | 
						|
 | 
						|
  // hypertext cazzuls                         
 | 
						|
  // le si dice il colore che devono avere i punti selezionabili;
 | 
						|
  // ritorna l'array in cui vengono messi gli hotspots relativi alla
 | 
						|
  // pagina in memoria (come TToken_string con x|y|text)
 | 
						|
  void set_hotspots(char fg, char bg = 'w');
 | 
						|
  TArray& hotspots() { return _spots; }
 | 
						|
  
 | 
						|
  // associa una relazione che viene usata (nello stato corrente) per
 | 
						|
  // risolvere eventuali campi per merge (marcati nel testo come
 | 
						|
  // <@file->fieldname@[format]@[len]@[just]>
 | 
						|
  void set_relation(TRelation* r) { _rel = r; }
 | 
						|
  
 | 
						|
  TTextfile(const char* file = NULL, int pagesize = DEFAULT_PAGESIZE, 
 | 
						|
            direction preferred = updown, bool interactive = TRUE);
 | 
						|
  virtual ~TTextfile();
 | 
						|
};
 | 
						|
 | 
						|
#endif
 | 
						|
 |