~s-cecilio/lenmus/v5.3

« back to all changes in this revision

Viewing changes to langtool/src/help_processor.cpp

  • Committer: cecilios
  • Date: 2007-05-19 11:39:03 UTC
  • Revision ID: svn-v4:2587a929-2f0e-0410-ae78-fe6f687d5efe:trunk:236

Show diffs side-by-side

added added

removed removed

Lines of Context:
1
 
//--------------------------------------------------------------------------------------
2
 
//    LenMus project: free software for music theory and language
3
 
//    Copyright (c) 2002-2009 Cecilio Salmeron
4
 
//
5
 
//    This program is free software; you can redistribute it and/or modify it under the
6
 
//    terms of the GNU General Public License as published by the Free Software Foundation;
7
 
//    either version 3 of the License, or (at your option) any later version.
8
 
//
9
 
//    This program is distributed in the hope that it will be useful, but WITHOUT ANY
10
 
//    WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A
11
 
//    PARTICULAR PURPOSE.  See the GNU General Public License for more details.
12
 
//
13
 
//    You should have received a copy of the GNU General Public License along with this
14
 
//    program. If not, see <http://www.gnu.org/licenses/>.
15
 
//
16
 
//
17
 
//    For any comment, suggestion or feature request, please contact the manager of
18
 
//    the project at cecilios@users.sourceforge.net
19
 
//
20
 
//-------------------------------------------------------------------------------------
21
 
#ifdef __GNUG__
22
 
#pragma implementation "ebook_processor.h"
23
 
#endif
24
 
 
25
 
// for (compilers that support precompilation, includes "wx/wx.h".
26
 
#include "wx/wxprec.h"
27
 
 
28
 
#ifdef __BORLANDC__
29
 
#pragma hdrstop
30
 
#endif
31
 
 
32
 
#ifndef WX_PRECOMP
33
 
#include "wx/wx.h"
34
 
#endif
35
 
 
36
 
#include "wx/filename.h"
37
 
#include "wx/txtstrm.h"
38
 
#include "wx/zipstrm.h"
39
 
#include "wx/textfile.h"
40
 
#include "wx/arrstr.h"
41
 
#include <wx/dir.h>
42
 
 
43
 
#include "help_processor.h"
44
 
#include "wx/xml2.h"            // include libxml2 wrapper definitions
45
 
#include "wx/dtd.h"                             // include libxml2 wrapper definitions
46
 
#include "Paths.h"
47
 
 
48
 
 
49
 
ltHelpProcessor::ltHelpProcessor(int nDbgOptions, wxTextCtrl* pUserLog)
50
 
    : m_pLog(pUserLog)
51
 
{
52
 
}
53
 
 
54
 
ltHelpProcessor::~ltHelpProcessor()
55
 
{
56
 
}
57
 
 
58
 
bool ltHelpProcessor::GenerateHelpFile(wxString sSrcPath, wxString sLangCode,
59
 
                                   wxString sCharCode, int nOptions)
60
 
{
61
 
    // returns true if success
62
 
    // PO and lang.cpp are created in sDestName (langtool\locale\)
63
 
    // help.xxx files are created in sTempFolder (lenmus\locale\xx\books\)
64
 
    // help.htb is created in sDestName (lenmus\locale\xx\)
65
 
 
66
 
    //temp folder
67
 
    wxString sTempFolder = g_pPaths->GetTempPath();
68
 
 
69
 
    //destination folder
70
 
    wxFileName oFDest( g_pPaths->GetBooksRootPath() );
71
 
    oFDest.AppendDir(sLangCode);
72
 
    wxString sDestFolder = oFDest.GetPath(wxPATH_GET_VOLUME | wxPATH_GET_SEPARATOR);
73
 
 
74
 
    //output zip file
75
 
    oFDest.SetName(_T("help"));
76
 
    oFDest.SetExt(_T("htb"));
77
 
    m_pZipOutFile = new wxFFileOutputStream( oFDest.GetFullPath() );
78
 
    m_pZipFile = new wxZipOutputStream(*m_pZipOutFile);
79
 
 
80
 
    //generate help file
81
 
    bool fSuccess = PackHelpFile(sSrcPath, sTempFolder, sDestFolder);
82
 
 
83
 
    //delete temp files
84
 
 
85
 
    return fSuccess;
86
 
}
87
 
 
88
 
bool ltHelpProcessor::CreateHelpPoFile(wxString sFilename, wxString& sCharSet,
89
 
                                    wxString& sLangName, wxString& sLangCode,
90
 
                                    wxString& sFolder)
91
 
{
92
 
    // returns true if success
93
 
 
94
 
    //wxFile oFile(sFilename, wxFile::write);
95
 
    //if (!m_pLangFile->IsOpened())
96
 
    //{
97
 
    //    wxLogMessage(_T("Error: File %s can not be created"), sFilename);
98
 
    //    m_pLangFile = (wxFile*)NULL;
99
 
    //    return false;        //error
100
 
    //}
101
 
 
102
 
    ////Generate Po header
103
 
    //wxString sNil = _T("");
104
 
    //wxString sHeader = sNil +
105
 
    //    _T("msgid \"\"\n")
106
 
    //    _T("msgstr \"\"\n")
107
 
    //    _T("\"Project-Id-Version: LenMus 3.4\\n\"\n")
108
 
    //    _T("\"POT-Creation-Date: \\n\"\n")
109
 
    //    _T("\"PO-Revision-Date: 2006-08-25 12:19+0100\\n\"\n")
110
 
    //    _T("\"Last-Translator: \\n\"\n")
111
 
    //    _T("\"Language-Team:  <cecilios@gmail.com>\\n\"\n")
112
 
    //    _T("\"MIME-Version: 1.0\\n\"\n")
113
 
    //    _T("\"Content-Type: text/plain; charset=utf-8\\n\"\n")
114
 
    //    _T("\"Content-Transfer-Encoding: 8bit\\n\"\n")
115
 
    //    _T("\"X-Poedit-Language: ") + sLangName + _T("\\n\"\n")
116
 
    //    _T("\"X-Poedit-SourceCharset: utf-8\\n\"\n")
117
 
    //    _T("\"X-Poedit-Basepath: c:\\usr\\desarrollo_wx\\lenmus\\langtool\\locale\\src\\n\"\n")
118
 
    //    _T("\"X-Poedit-SearchPath-0: ") + sFolder + _T("\\n\"\n\n");
119
 
 
120
 
 
121
 
    //oFile.Write(sHeader);
122
 
    //oFile.Close();
123
 
    return true;
124
 
}
125
 
 
126
 
bool ltHelpProcessor::PackHelpFile(wxString& sSrcFolder, wxString& sTempFolder,
127
 
                                   wxString& sDestFolder)
128
 
{
129
 
    //return true if success
130
 
    //- copy all files in sTempFolder, zip them as help.htb and places this
131
 
    //  resulting file in sDestFolder.
132
 
    //- Doesn't delete temp files
133
 
 
134
 
    bool fSuccess = true;
135
 
 
136
 
    // copy index files
137
 
    wxFileName oFN1(sSrcFolder, _T("help.hhc"), wxPATH_NATIVE);
138
 
    fSuccess &= CopyFileToHelp( oFN1.GetFullPath() );
139
 
    wxFileName oFN2(sSrcFolder, _T("help.hhk"), wxPATH_NATIVE);
140
 
    fSuccess &= CopyFileToHelp( oFN2.GetFullPath() );
141
 
    wxFileName oFN3(sSrcFolder, _T("help.hhp"), wxPATH_NATIVE);
142
 
    fSuccess &= CopyFileToHelp( oFN3.GetFullPath() );
143
 
 
144
 
 
145
 
    //copy htm files
146
 
    fSuccess &= CopyAllFilesToHelp(sSrcFolder, _T(""), _T("*.htm"));
147
 
 
148
 
    //copy folder 'img'
149
 
    wxFileName oFNImg(sSrcFolder);
150
 
    oFNImg.AppendDir(_T("img"));
151
 
    wxString sImgFolder = oFNImg.GetPath(wxPATH_GET_VOLUME | wxPATH_GET_SEPARATOR);
152
 
    fSuccess &= CopyAllFilesToHelp(sImgFolder, _T("img\\"), _T("*.*"));
153
 
    //wxDir oDirImg(sImgFolder);
154
 
    //if ( !oDirImg.IsOpened() )
155
 
    //{
156
 
    //    wxLogMessage(_T("Error: Folder %s can not be opened"), sImgFolder);
157
 
    //    return false;
158
 
    //}
159
 
    //bool fFound = oDirImg.GetFirst(&sFilename, _T("*.*"), wxDIR_FILES);
160
 
    //while(fFound)
161
 
    //{
162
 
    //    wxFileName oFN(sImgFolder, sFilename, wxPATH_NATIVE);
163
 
    //    fSuccess &= CopyFileToHelp( oFN.GetFullPath() );
164
 
    //    fFound = oDirImg.GetNext(&sFilename);
165
 
    //}
166
 
 
167
 
    //close zip file
168
 
    m_pZipFile->Close();
169
 
 
170
 
    //print final message
171
 
    if (fSuccess)
172
 
        LogMsg( _T("Help file created successfuly") );
173
 
    else
174
 
        LogMsg( _T("Errors while creating help file") );
175
 
    LogMsg( _T("===========================================\n") );
176
 
 
177
 
 
178
 
    return fSuccess;
179
 
}
180
 
 
181
 
bool ltHelpProcessor::CopyFileToHelp(const wxString& sFilename, const wxString& sZipFolder)
182
 
{
183
 
    //return true if success
184
 
    //sZipFolder is a string with the folder prefix to add to filename when creating
185
 
    //the entry in the zip file. For example, if zip file should contain a folder
186
 
    //in which to add the files sZipFolder should contain "the-folder"
187
 
 
188
 
    wxFFileInputStream inFile( sFilename, _T("rb") );
189
 
    if (!inFile.IsOk()) {
190
 
        wxLogMessage(_T("*** Error: File %s can not be included in help"), sFilename.c_str());
191
 
        return false;
192
 
    }
193
 
    wxFileName oFN(sFilename);
194
 
    wxString sEntryName = sZipFolder + oFN.GetFullName();
195
 
    m_pZipFile->PutNextEntry( sEntryName );
196
 
    m_pZipFile->Write( inFile );
197
 
    m_pZipFile->CloseEntry();
198
 
    return true;
199
 
}
200
 
 
201
 
bool ltHelpProcessor::CopyAllFilesToHelp(const wxString& sSrcFolder,
202
 
                                         const wxString& sZipFolder,
203
 
                                         const wxString& sFilter)
204
 
{
205
 
    //return true if success
206
 
 
207
 
    bool fSuccess = true;
208
 
    wxDir oDir(sSrcFolder);
209
 
    if ( !oDir.IsOpened() )
210
 
    {
211
 
        wxLogMessage(_T("*** Error: Folder %s can not be opened"), sSrcFolder.c_str());
212
 
        return false;
213
 
    }
214
 
    wxString sFilename;
215
 
    bool fFound = oDir.GetFirst(&sFilename, sFilter, wxDIR_FILES);
216
 
    while(fFound)
217
 
    {
218
 
        wxFileName oFN(sSrcFolder, sFilename, wxPATH_NATIVE);
219
 
        fSuccess &= CopyFileToHelp(oFN.GetFullPath(), sZipFolder);
220
 
        fFound = oDir.GetNext(&sFilename);
221
 
    }
222
 
 
223
 
    return fSuccess;
224
 
}
225
 
 
226
 
void ltHelpProcessor::LogMsg(const wxChar* szFormat, ...)
227
 
{
228
 
    if (!m_pLog) return;
229
 
 
230
 
    va_list argptr;
231
 
    va_start(argptr, szFormat);
232
 
    wxString sMsg = wxString::FormatV(szFormat, argptr) + _T("\n");
233
 
    m_pLog->AppendText(sMsg);
234
 
    va_end(argptr);
235
 
}
236