flat_formatter.hpp
上传用户:yhdzpy8989
上传日期:2007-06-13
资源大小:13604k
文件大小:9k
源码类别:

生物技术

开发平台:

C/C++

  1. /*
  2.  * ===========================================================================
  3.  * PRODUCTION $Log: flat_formatter.hpp,v $
  4.  * PRODUCTION Revision 1000.0  2003/10/29 20:58:57  gouriano
  5.  * PRODUCTION PRODUCTION: IMPORTED [ORIGINAL] Dev-tree R1.6
  6.  * PRODUCTION
  7.  * ===========================================================================
  8.  */
  9. #ifndef OBJECTS_FLAT___FLAT_FORMATTER__HPP
  10. #define OBJECTS_FLAT___FLAT_FORMATTER__HPP
  11. /*  $Id: flat_formatter.hpp,v 1000.0 2003/10/29 20:58:57 gouriano Exp $
  12. * ===========================================================================
  13. *
  14. *                            PUBLIC DOMAIN NOTICE
  15. *               National Center for Biotechnology Information
  16. *
  17. *  This software/database is a "United States Government Work" under the
  18. *  terms of the United States Copyright Act.  It was written as part of
  19. *  the author's official duties as a United States Government employee and
  20. *  thus cannot be copyrighted.  This software/database is freely available
  21. *  to the public for use. The National Library of Medicine and the U.S.
  22. *  Government have not placed any restriction on its use or reproduction.
  23. *
  24. *  Although all reasonable efforts have been taken to ensure the accuracy
  25. *  and reliability of the software and data, the NLM and the U.S.
  26. *  Government do not and cannot warrant the performance or results that
  27. *  may be obtained by using this software or data. The NLM and the U.S.
  28. *  Government disclaim all warranties, express or implied, including
  29. *  warranties of performance, merchantability or fitness for any particular
  30. *  purpose.
  31. *
  32. *  Please cite the author in any work or product based on this material.
  33. *
  34. * ===========================================================================
  35. *
  36. * Author:  Aaron Ucko, NCBI
  37. *
  38. * File Description:
  39. *   new (early 2003) flat-file generator -- main public interface
  40. *
  41. */
  42. #include <objtools/flat/flat_context.hpp>
  43. #include <serial/objostr.hpp>
  44. BEGIN_NCBI_SCOPE
  45. BEGIN_SCOPE(objects)
  46. class CScope;
  47. class NCBI_FLAT_EXPORT IFlatFormatter : public IFlatItemOStream
  48. {
  49. public:
  50.     enum EDatabase {
  51.         // determines appropriate division codes and a few other things
  52.         eDB_NCBI,
  53.         eDB_EMBL,
  54.         eDB_DDBJ
  55.     };
  56.     enum EMode {
  57.         // determines the tradeoff between strictness and completeness
  58.         eMode_Release, // strict -- for official public releases
  59.         eMode_Entrez,  // somewhat laxer -- for CGIs
  60.         eMode_GBench,  // even laxer -- for editing submissions
  61.         eMode_Dump     // shows everything, regardless of validity
  62.     };
  63.     enum EStyle {
  64.         // determines handling of segmented records
  65.         eStyle_Normal,  // default -- show segments iff they're near
  66.         eStyle_Segment, // always show segments
  67.         eStyle_Master,  // merge segments into a single virtual record
  68.         eStyle_Contig   // just an index of segments -- no actual sequence
  69.     };
  70.     enum EFlags {
  71.         // various generic options
  72.         fProduceHTML          = 0x2,
  73.         fShowContigFeatures   = 0x4, // not just source features
  74.         fShowContigSources    = 0x8, // not just focus
  75.         fShowFarTranslations  = 0x10,
  76.         fTranslateIfNoProduct = 0x20,
  77.         fAlwaysTranslateCDS   = 0x40,
  78.         fOnlyNearFeatures     = 0x80,
  79.         fFavorFarFeatures     = 0x100, // ignore near feats on segs w/far feats
  80.         fCopyCDSFromCDNA      = 0x200, // these two are for gen. prod. sets
  81.         fCopyGeneToCDNA       = 0x400,
  82.         fShowContigInMaster   = 0x800,
  83.         fHideImportedFeatures = 0x10000,
  84.         fHideRemoteImpFeats   = 0x20000,
  85.         fHideSNPFeatures      = 0x40000,
  86.         fHideExonFeatures     = 0x80000,
  87.         fHideIntronFeatures   = 0x100000,
  88.         fHideMiscFeatures     = 0x200000,
  89.         fHideCDDFeatures      = 0x400000,
  90.         fHideCDSProdFeatures  = 0x800000,
  91.         fShowTranscriptions   = 0x1000000,
  92.         fShowPeptides         = 0x2000000
  93.     };
  94.     typedef int TFlags; // binary OR of "EFlags"
  95.     enum EFilterFlags {
  96.         // determines which Bioseqs in an entry to skip
  97.         fSkipNucleotides = 0x1,
  98.         fSkipProteins    = 0x2
  99.     };
  100.     typedef int TFilterFlags; // binary or of "EFilterFlags"
  101.     IFlatFormatter(CScope& scope, EMode mode, EStyle style, TFlags flags)
  102.         : m_Scope(&scope), m_Mode(mode), m_Style(style), m_Flags(flags)
  103.         { }
  104.     virtual ~IFlatFormatter() { }
  105.     // Users should *not* normally supply context!
  106.     void Format(const CSeq_entry& entry, IFlatItemOStream& out,
  107.                 TFilterFlags flags = 0, CFlatContext* context = 0);
  108.     void Format(const CBioseq& seq, IFlatItemOStream& out,
  109.                 CFlatContext* context = 0);
  110.     void Format(const CSeq_loc& loc, bool adjust_coords,
  111.                 IFlatItemOStream& out, CFlatContext* context = 0);
  112.     bool              DoHTML     (void) const
  113.         { return (m_Flags & fProduceHTML) != 0; }
  114.     virtual EDatabase GetDatabase(void) const = 0;
  115.     EMode             GetMode    (void) const { return m_Mode; }
  116.     void AddItem(CConstRef<IFlatItem> i) { i->Format(*this); }
  117.     // callbacks for the items to use
  118.     virtual void BeginSequence   (CFlatContext& ctx)
  119.         { m_Context.Reset(&ctx);  m_Context->m_Formatter = this; }
  120.     virtual void FormatHead      (const CFlatHead& head)       = 0;
  121.     virtual void FormatKeywords  (const CFlatKeywords& keys)   = 0;
  122.     virtual void FormatSegment   (const CFlatSegment& seg)     = 0;
  123.     virtual void FormatSource    (const CFlatSource& source)   = 0;
  124.     virtual void FormatReference (const CFlatReference& ref)   = 0;
  125.     virtual void FormatComment   (const CFlatComment& comment) = 0;
  126.     virtual void FormatPrimary   (const CFlatPrimary& prim)    = 0; // TPAs
  127.     virtual void FormatFeatHeader(const CFlatFeatHeader& fh)   = 0;
  128.     virtual void FormatFeature   (const IFlattishFeature& f)   = 0;
  129.     virtual void FormatDataHeader(const CFlatDataHeader& dh)   = 0;
  130.     virtual void FormatData      (const CFlatData& data)       = 0;
  131.     // alternatives to DataHeader + Data...
  132.     virtual void FormatContig    (const CFlatContig& contig)   = 0;
  133.     virtual void FormatWGSRange  (const CFlatWGSRange& range)  = 0;
  134.     virtual void FormatGenomeInfo(const CFlatGenomeInfo& g)    = 0; // NS_*
  135.     virtual void EndSequence     (void)                        = 0;
  136.     enum ETildeStyle {
  137.         eTilde_tilde,  // no-op
  138.         eTilde_space,  // '~' -> ' ', except before /[ (]?d/
  139.         eTilde_newline // '~' -> 'n' but "~~" -> "~"
  140.     };
  141.     static string ExpandTildes(const string& s, ETildeStyle style);
  142.     // appends date to s, as DD-Mon-YYYY
  143.     void FormatDate(const CDate& date, string& s) const;
  144.     string GetAccnLink(const string& acc) const;
  145. protected:
  146.     CScope*            m_Scope;
  147.     EMode              m_Mode;
  148.     EStyle             m_Style;
  149.     TFlags             m_Flags;
  150.     CRef<CFlatContext> m_Context; // for sequence currently being formatted
  151. private:
  152.     bool x_FormatSegments(const CBioseq& seq, IFlatItemOStream& out,
  153.                           CFlatContext& ctx);
  154.     void x_FormatReferences(CFlatContext& ctx, IFlatItemOStream& out);
  155.     void x_FormatFeatures(CFlatContext& ctx, IFlatItemOStream& out,
  156.                           bool source);
  157. };
  158. ///////////////////////////////////////////////////////////////////////////
  159. //
  160. // Inline functions
  161. inline
  162. void IFlatFormatter::FormatDate(const CDate& date, string& s) const
  163. {
  164.     SIZE_TYPE pos = s.size();
  165.     if (m_Mode == eMode_Dump) {
  166.         date.GetDate(&s, "%{%2D%|??%}-%{%3N%|???%}-%Y");
  167.     } else {
  168.         // complain if not std
  169.         date.GetDate(&s, "%2D-%3N-%Y");
  170.     }
  171.     for (SIZE_TYPE i = pos;  i < s.size();  ++i) {
  172.         if (islower(s[i])) {
  173.             s[i] = toupper(s[i]);
  174.         }
  175.     }
  176. }
  177. inline
  178. string IFlatFormatter::GetAccnLink(const string& acc) const
  179. {
  180.     if (DoHTML()) {
  181.         return "<a href="http://www.ncbi.nlm.nih.gov/entrez/viewer.fcgi?val="
  182.             + acc + "">" + acc + "</a>";
  183.     } else {
  184.         return acc;
  185.     }
  186. }
  187. END_SCOPE(objects)
  188. END_NCBI_SCOPE
  189. /*
  190. * ===========================================================================
  191. *
  192. * $Log: flat_formatter.hpp,v $
  193. * Revision 1000.0  2003/10/29 20:58:57  gouriano
  194. * PRODUCTION: IMPORTED [ORIGINAL] Dev-tree R1.6
  195. *
  196. * Revision 1.6  2003/06/02 16:01:39  dicuccio
  197. * Rearranged include/objects/ subtree.  This includes the following shifts:
  198. *     - include/objects/alnmgr --> include/objtools/alnmgr
  199. *     - include/objects/cddalignview --> include/objtools/cddalignview
  200. *     - include/objects/flat --> include/objtools/flat
  201. *     - include/objects/objmgr/ --> include/objmgr/
  202. *     - include/objects/util/ --> include/objmgr/util/
  203. *     - include/objects/validator --> include/objtools/validator
  204. *
  205. * Revision 1.5  2003/04/10 20:08:22  ucko
  206. * Arrange to pass the item as an argument to IFlatTextOStream::AddParagraph
  207. *
  208. * Revision 1.4  2003/03/28 17:45:36  dicuccio
  209. * Added (very judicious) use of Win32 exports - only needed in external classes
  210. * CFlatTextFormatter and IFlatFormatter
  211. *
  212. * Revision 1.3  2003/03/21 18:47:47  ucko
  213. * Turn most structs into (accessor-requiring) classes; replace some
  214. * formerly copied fields with pointers to the original data.
  215. *
  216. * Revision 1.2  2003/03/10 22:00:20  ucko
  217. * Add a redundant "!= 0" to DoHTML to suppress a MSVC warning.
  218. *
  219. * Revision 1.1  2003/03/10 16:39:08  ucko
  220. * Initial check-in of new flat-file generator
  221. *
  222. *
  223. * ===========================================================================
  224. */
  225. #endif  /* OBJECTS_FLAT___FLAT_FORMATTER__HPP */