TextFile.h
上传用户:hmc_gdtv
上传日期:2013-08-04
资源大小:798k
文件大小:4k
源码类别:

Windows Mobile

开发平台:

Visual C++

  1. /*
  2.  * Copyright (c) 2001,2002,2003 Mike Matsnev.  All Rights Reserved.
  3.  *
  4.  * Redistribution and use in source and binary forms, with or without
  5.  * modification, are permitted provided that the following conditions
  6.  * are met:
  7.  *
  8.  * 1. Redistributions of source code must retain the above copyright
  9.  *    notice immediately at the beginning of the file, without modification,
  10.  *    this list of conditions, and the following disclaimer.
  11.  * 2. Redistributions in binary form must reproduce the above copyright
  12.  *    notice, this list of conditions and the following disclaimer in the
  13.  *    documentation and/or other materials provided with the distribution.
  14.  * 3. Absolutely no warranty of function or purpose is made by the author
  15.  *    Mike Matsnev.
  16.  *
  17.  * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
  18.  * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
  19.  * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
  20.  * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
  21.  * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
  22.  * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
  23.  * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
  24.  * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
  25.  * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
  26.  * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  27.  * 
  28.  * $Id: TextFile.h,v 1.32.2.2 2003/09/21 11:40:17 mike Exp $
  29.  * 
  30.  */
  31. #if !defined(AFX_TEXTFILE_H__37F37F43_6FC5_4C70_AFBB_1187E125D777__INCLUDED_)
  32. #define AFX_TEXTFILE_H__37F37F43_6FC5_4C70_AFBB_1187E125D777__INCLUDED_
  33. #if _MSC_VER > 1000
  34. #pragma once
  35. #endif // _MSC_VER > 1000
  36. #include "TextParser.h"
  37. class TextFile
  38. {
  39. protected:
  40.   TextFile(RFile *fp,const CString& name);
  41.   void   SetFormatEncodingImp(int format,int enc,Bookmarks *bmk);
  42.   TextParser   *Parser(int docid) { return docid==-1 && m_dictp ? m_dictp : m_tp.get(); }
  43. public:
  44.   ~TextFile() { }
  45.   int   ByteLength() { return m_fp->size(); }
  46.   // all these proxy functions switch to the dictionary when docid==-1
  47.   // paragraphs
  48.   int   Length(int docid) { return Parser(docid)->Length(docid); }
  49.   int   GetPLength(int docid,int para);
  50.   Paragraph   GetParagraph(int docid,int para);
  51.   int   GetPStart(int docid,int para) { return Parser(docid)->GetPStart(docid,para); }
  52.   int   GetTotalLength(int docid) { return Parser(docid)->GetTotalLength(docid); }
  53.   int   LookupParagraph(int docid,int charpos) { return Parser(docid)->LookupParagraph(docid,charpos); }
  54.   // documents
  55.   int   GetSubDocCount() { return m_tp->GetSubDocCount(); }
  56.   CString   GetSubDocName(int docid) { return m_tp->GetSubDocName(docid); }
  57.   // links
  58.   bool   LookupReference(const wchar_t *name,FilePos& dest) { return m_tp->LookupReference(name,dest); }
  59.   bool   LookupDict(const wchar_t *name,FilePos& dest);
  60.   bool   GetImage(const wchar_t *name,HDC hDC,
  61.     int maxwidth,int maxheight,int rotation,Image& img) {
  62.     return m_tp->GetImage(name,hDC,maxwidth,maxheight,rotation,img);
  63.   }
  64.   void   InvalidateImageCache() { m_tp->InvalidateImageCache(); }
  65.   // a small helper
  66.   int   AbsPos(const FilePos& p) { return Parser(p.docid)->GetPStart(p.docid,p.para)+p.off; }
  67.   int   GetEncoding() { return m_enc; }
  68.   int   GetFormat() { return m_format; }
  69.   int   GetRealEncoding() { return m_tp->GetEncoding(); }
  70.   int   GetRealFormat() { return m_tp->GetFormat(); }
  71.   void   SetFormatEncoding(int format,int enc) {
  72.     SetFormatEncodingImp(format,enc,NULL);
  73.   }
  74.   void   Reparse();
  75.   static const TCHAR *GetEncodingName(int enc);
  76.   static const TCHAR *GetFormatName(int format);
  77.   static TextFile *Open(const CString& filename);
  78.   const CString&  Name() const { return m_name; }
  79.   CString   CompressionInfo() { return m_fp->CompressionInfo(); }
  80.   bool   Ok() { return m_fp.get() && m_tp.get(); }
  81.   Bookmarks&   bmk() { return m_bookmarks; }
  82.   void   SaveBookmarks(FilePos cur);
  83.   void   SetDict(TextParser *dp) { m_dictp=dp; }
  84.   // images
  85.   bool   IsImage() { return m_tp->IsImage(); }
  86. protected:
  87.   kilo::auto_ptr<CBufFile> m_fp;
  88.   kilo::auto_ptr<TextParser>  m_tp;
  89.   TextParser *m_dictp;
  90.   int m_enc;
  91.   int m_format;
  92.   CString m_name;
  93.   Bookmarks m_bookmarks;
  94. };
  95. #endif // !defined(AFX_TEXTFILE_H__37F37F43_6FC5_4C70_AFBB_1187E125D777__INCLUDED_)