Home | History | Annotate | Download | only in localize
      1 #ifndef XLIFF_FILE_H
      2 #define XLIFF_FILE_H
      3 
      4 #include "Values.h"
      5 
      6 #include "Configuration.h"
      7 
      8 #include <set>
      9 
     10 using namespace std;
     11 
     12 extern const XMLNamespaceMap XLIFF_NAMESPACES;
     13 
     14 extern const char*const XLIFF_XMLNS;
     15 
     16 struct Stats
     17 {
     18     string config;
     19     size_t files;
     20     size_t toBeTranslated;
     21     size_t noComments;
     22     size_t totalStrings;
     23 };
     24 
     25 struct TransUnit {
     26     string id;
     27     StringResource source;
     28     StringResource target;
     29     StringResource altSource;
     30     StringResource altTarget;
     31     string rejectComment;
     32 };
     33 
     34 class XLIFFFile
     35 {
     36 public:
     37     static XLIFFFile* Parse(const string& filename);
     38     static XLIFFFile* Create(const Configuration& sourceConfig, const Configuration& targetConfig,
     39                                 const string& currentVersion);
     40     ~XLIFFFile();
     41 
     42     inline const Configuration& SourceConfig() const                { return m_sourceConfig; }
     43     inline const Configuration& TargetConfig() const                { return m_targetConfig; }
     44 
     45     inline const string& CurrentVersion() const                     { return m_currentVersion; }
     46     inline const string& OldVersion() const                         { return m_oldVersion; }
     47 
     48     set<string> Files() const;
     49 
     50     void AddStringResource(const StringResource& res);
     51     inline set<StringResource> const& GetStringResources() const { return m_strings; }
     52     bool FindStringResource(const string& filename, int version, bool source);
     53 
     54     void Filter(bool (*func)(const string&,const TransUnit&,void*), void* cookie);
     55     void Map(void (*func)(const string&,TransUnit*,void*), void* cookie);
     56 
     57     TransUnit* EditTransUnit(const string& file, const string& id);
     58 
     59     // exports this file as a n XMLNode, you own this object
     60     XMLNode* ToXMLNode() const;
     61 
     62     // writes the ValuesFile out to a string in the canonical format (i.e. writes the contents of
     63     // ToXMLNode()).
     64     string ToString() const;
     65 
     66     Stats GetStats(const string& config) const;
     67 
     68 private:
     69     struct File {
     70         int Compare(const File& that) const;
     71 
     72         inline bool operator<(const File& that) const { return Compare(that) < 0; }
     73         inline bool operator<=(const File& that) const { return Compare(that) <= 0; }
     74         inline bool operator==(const File& that) const { return Compare(that) == 0; }
     75         inline bool operator!=(const File& that) const { return Compare(that) != 0; }
     76         inline bool operator>=(const File& that) const { return Compare(that) >= 0; }
     77         inline bool operator>(const File& that) const { return Compare(that) > 0; }
     78 
     79         string filename;
     80         vector<TransUnit> transUnits;
     81     };
     82 
     83     XLIFFFile();
     84     StringResource* find_string_res(TransUnit& g, const StringResource& str);
     85 
     86     Configuration m_sourceConfig;
     87     Configuration m_targetConfig;
     88 
     89     string m_currentVersion;
     90     string m_oldVersion;
     91 
     92     set<StringResource> m_strings;
     93     vector<File> m_files;
     94 };
     95 
     96 int convert_html_to_xliff(const XMLNode* original, const string& name, XMLNode* addTo, int* phID);
     97 
     98 #endif // XLIFF_FILE_H
     99