summaryrefslogtreecommitdiff
path: root/transcode.h
diff options
context:
space:
mode:
Diffstat (limited to 'transcode.h')
-rw-r--r--transcode.h199
1 files changed, 199 insertions, 0 deletions
diff --git a/transcode.h b/transcode.h
new file mode 100644
index 0000000..204ea0b
--- /dev/null
+++ b/transcode.h
@@ -0,0 +1,199 @@
+#include <iostream>
+#include <fstream>
+#include <sstream>
+#include <memory>
+#include <map>
+#include <algorithm>
+#include <random>
+#include <wx/wx.h>
+#include <wx/stdpaths.h>
+#include <wx/fontdlg.h>
+#include <wx/choicdlg.h>
+#include <wx/msgdlg.h>
+#include <wx/popupwin.h>
+#include <wx/listbox.h>
+#include <wx/dir.h>
+#include <wx/textfile.h>
+#include <wx/filename.h>
+#include <wx/wfstream.h>
+#include <wx/zipstrm.h>
+#include "pugixml/pugixml.hpp"
+#include "pugixml/pugiconfig.hpp"
+
+using namespace std;
+using namespace pugi;
+
+#ifdef _WIN32
+static string path_separator = "\\";
+#else
+static string path_separator = "/";
+#endif
+
+#ifdef EXTERN_WX_GUI
+extern void detect_fonts(const char* xmlfile, vector<wstring>& doc_fonts,
+ vector<wstring>& doc_encs);
+extern void process_xml(const char * xmlfile, wstring& targ_font,
+ const vector<wstring>& doc_fonts, const vector<wstring>& doc_encs,
+ map<wstring, vector<wstring>>& char_map,
+ vector<wstring>& utf_chars, const wstring& default_font, bool do_greek);
+extern bool to_bool(const wstring& s);
+extern void uniq(vector <wstring>& vec);
+extern void get_default_pfont(wstring& default_font,
+ const char* styles_xmlfile);
+extern void update_default_pfont(const char * styles_xmlfile,
+ wstring& targ_font, const vector<wstring>& doc_fonts);
+extern string random_anum_string(int len);
+extern void read_config_file(const char* configfile,
+ map<wstring, wstring>& config_options);
+extern void write_config_file(const char* configfile,
+ map<wstring, wstring>& config_options);
+#endif
+
+class TranscodeGUI: public wxApp {
+ public:
+ bool OnInit();
+};
+
+class TranscodeFrame: public wxFrame {
+ public:
+ TranscodeFrame();
+
+ private:
+ wxPanel *main_panel;
+ wxBoxSizer *main_sizer;
+
+ struct {
+ bool do_greek;
+ bool do_font_select;
+ } config_params;
+ map<wstring, wstring> config_options;
+ wxString config_filepath;
+
+ wxBoxSizer *infile_sizer;
+ wxStaticText *infile_label;
+ wxTextCtrl *infile_field;
+ wxButton *infile_button;
+ void SelectDoc(wxCommandEvent& event);
+ wxString infile_path;
+
+ wxBoxSizer *csvfile_sizer;
+ wxStaticText *csvfile_label;
+ wxTextCtrl *csvfile_field;
+ wxButton *csvfile_button;
+ void SelectCSV(wxCommandEvent& event);
+ wxString csvfile_path;
+
+ wxStaticText *fontsel_label;
+ wxBoxSizer *fontsel_sizer;
+ wxTextCtrl *fontsel_field;
+ wxButton *fontsel_button;
+ void DoFontDialog(wxCommandEvent& event);
+ wstring fontsel_name;
+
+ wxCheckBox *check_greek;
+ void ChkGrk(wxCommandEvent& event);
+ wxCheckBox *check_fontsel;
+ void ChkFontSel(wxCommandEvent& event);
+
+ wxTextCtrl *status_messages;
+
+ wxBoxSizer *button_sizer;
+ wxButton *transcode_button;
+ void Transcode(wxCommandEvent& event);
+ void ZipCreate(const wxString& dir_src,
+ const wxString& zip_file);
+ void ZipExtract(const wxString& zip_file,
+ const wxString& dir_target);
+ void LoadCharmap(wxString& charfile,
+ const wchar_t sep,
+ map<wstring, vector<wstring>>& char_map,
+ vector<wstring>& utf_chars);
+ void SaveFile(void);
+ wxPopupWindow *docfonts_chooser;
+ wxListBox *docfonts_listbox;
+ wxButton *quit_button;
+ void Quit(wxCommandEvent& event);
+ wxButton *clear_button;
+ void Reset(wxCommandEvent& event);
+};
+
+static const vector<const char*> convfiles = {
+ "word/document.xml",
+ "word/footnotes.xml"
+};
+
+static const char * styles_xmlfile = "word/styles.xml";
+
+static const map<const wchar_t, const wchar_t> ascii_utf = {
+ {0x2126, 0x03A9} // Ohm symbol
+};
+
+static const vector<wstring> greek_comb = {
+L"ᾊ", L"ᾌ", L"ᾎ", L"ᾋ", L"ᾍ", L"ᾏ",
+L"ᾚ", L"ᾜ", L"ᾞ", L"ᾛ", L"ᾝ", L"ᾟ",
+L"ᾪ", L"ᾬ", L"ᾮ", L"ᾫ", L"ᾭ", L"ᾯ",
+L"ᾂ", L"ᾄ", L"ᾆ", L"ᾃ", L"ᾅ", L"ᾇ",
+L"ᾒ", L"ᾔ", L"ᾖ", L"ᾓ", L"ᾕ", L"ᾗ",
+L"ᾢ", L"ᾤ", L"ᾦ", L"ᾣ", L"ᾥ", L"ᾧ",
+L"Ἂ", L"Ἄ", L"Ἆ", L"ᾈ", L"Ἃ", L"Ἅ", L"Ἇ",
+L"ᾉ", L"Ἒ", L"Ἔ", L"Ἓ", L"Ἕ", L"Ἢ", L"Ἤ",
+L"Ἦ", L"ᾘ", L"Ἣ", L"Ἥ", L"Ἧ", L"ᾙ", L"Ἲ",
+L"Ἴ", L"Ἶ", L"Ἳ", L"Ἵ", L"Ἷ", L"Ὂ", L"Ὄ",
+L"Ὃ", L"Ὅ", L"Ὓ", L"Ὕ", L"Ὗ", L"Ὢ", L"Ὤ",
+L"Ὦ", L"ᾨ", L"Ὣ", L"Ὥ", L"Ὧ", L"ᾩ", L"ᾲ",
+L"ᾴ", L"ἂ", L"ἄ", L"ἆ", L"ᾀ", L"ἃ", L"ἅ",
+L"ἇ", L"ᾁ", L"ᾷ", L"ἒ", L"ἔ", L"ἓ", L"ἕ",
+L"ῂ", L"ῄ", L"ἢ", L"ἤ", L"ἦ", L"ᾐ", L"ἣ",
+L"ἥ", L"ἧ", L"ᾑ", L"ῇ", L"ῒ", L"ΐ", L"ϊ̍",
+L"ῗ", L"ἲ", L"ἴ", L"ἶ", L"ἳ", L"ἵ", L"ἷ",
+L"όͅ", L"ὂ", L"ὄ", L"ὃ", L"ὅ", L"ῢ", L"ΰ",
+L"ϋ̍", L"ῧ", L"ὒ", L"ὔ", L"ὖ", L"ὓ", L"ὕ",
+L"ὗ", L"ῲ", L"ὢ", L"ὤ", L"ὦ", L"ᾠ", L"ὣ",
+L"ὥ", L"ὧ", L"ᾡ", L"ῷ",
+L"Ά", L"Ᾱ", L"Ᾰ", L"Α̍", L"Ἀ", L"Ἁ", L"ᾼ",
+L"Ὲ", L"Έ", L"Ε̍", L"Ἐ", L"Ἑ", L"Ὴ", L"Ή", L"Η̍",
+L"Ἠ", L"Ἡ", L"ῌ", L"Ὶ", L"Ί", L"Ῑ", L"Ι̍", L"Ἰ",
+L"Ἱ", L"Ὸ", L"Ό", L"Ο̍", L"Ὀ", L"Ὁ", L"Ῥ", L"Ὺ",
+L"Ύ", L"Ῡ", L"Ῠ", L"Ϋ", L"Υ̍", L"Ὑ", L"Ὼ", L"Ώ",
+L"Ω̍", L"Ὠ", L"Ὡ", L"ῼ", L"ὰ", L"ά", L"ᾱ", L"ᾰ",
+L"α̍", L"ἀ", L"ἁ", L"ᾶ", L"ᾳ", L"ὲ", L"έ", L"ε̍",
+L"ἐ", L"ἑ", L"ὴ", L"ή", L"η̍", L"ἠ", L"ἡ", L"ῆ",
+L"ῃ", L"ὶ", L"ί", L"ῑ", L"ῐ", L"ϊ", L"ι̍", L"ἰ",
+L"ἱ", L"ὸ", L"ό", L"ο̍", L"ὀ", L"ὁ", L"ῤ", L"ῥ",
+L"ὺ", L"ύ", L"ῡ", L"ῠ", L"ϋ", L"υ̍", L"ὐ", L"ὑ",
+L"ῦ", L"ὼ", L"ώ", L"ω̍", L"ὠ", L"ὡ", L"ῶ", L"ῳ"
+};
+
+static const vector<wstring> greek_precomp = {
+L"ᾊ", L"ᾌ", L"ᾎ", L"ᾋ", L"ᾍ", L"ᾏ",
+L"ᾚ", L"ᾜ", L"ᾞ", L"ᾛ", L"ᾝ", L"ᾟ",
+L"ᾪ", L"ᾬ", L"ᾮ", L"ᾫ", L"ᾭ", L"ᾯ",
+L"ᾂ", L"ᾄ", L"ᾆ", L"ᾃ", L"ᾅ", L"ᾇ",
+L"ᾒ", L"ᾔ", L"ᾖ", L"ᾓ", L"ᾕ", L"ᾗ",
+L"ᾢ", L"ᾤ", L"ᾦ", L"ᾣ", L"ᾥ", L"ᾧ",
+L"Ἄ", L"Ἆ", L"ᾈ", L"Ἃ", L"Ἅ", L"Ἇ", L"ᾉ",
+L"Ἒ", L"Ἔ", L"Ἓ", L"Ἕ", L"Ἢ", L"Ἤ", L"Ἦ", L"ᾘ",
+L"Ἣ", L"Ἥ", L"Ἧ", L"ᾙ", L"Ἲ", L"Ἴ", L"Ἶ", L"Ἳ",
+L"Ἵ", L"Ἷ", L"Ὂ", L"Ὄ", L"Ὃ", L"Ὅ", L"Ὓ", L"Ὕ",
+L"Ὗ", L"Ὢ", L"Ὤ", L"Ὦ", L"ᾨ", L"Ὣ", L"Ὥ", L"Ὧ",
+L"ᾩ", L"ᾲ", L"ᾴ", L"ἂ", L"ἄ", L"ἆ", L"ᾀ", L"ἃ",
+L"ἅ", L"ἇ", L"ᾁ", L"ᾷ", L"ἒ", L"ἔ", L"ἓ", L"ἕ",
+L"ῂ", L"ῄ", L"ἢ", L"ἤ", L"ἦ", L"ᾐ", L"ἣ", L"ἥ",
+L"ἧ", L"ᾑ", L"ῇ", L"ῒ", L"ΐ", L"ΐ", L"ῗ", L"ἲ",
+L"ἴ", L"ἶ", L"ἳ", L"ἵ", L"ἷ", L"ῴ", L"ὂ", L"ὄ",
+L"ὃ", L"ὅ", L"ῢ", L"ΰ", L"ΰ", L"ῧ", L"ὒ", L"ὔ",
+L"ὖ", L"ὓ", L"ὕ", L"ὗ", L"ῲ", L"ὢ", L"ὤ", L"ὦ",
+L"ᾠ", L"ὣ", L"ὥ", L"ὧ", L"ᾡ", L"ῷ",
+L"Ὰ", L"Ά", L"Ᾱ", L"Ᾰ", L"Ά", L"Ἀ", L"Ἁ", L"ᾼ",
+L"Ὲ", L"Έ", L"Έ", L"Ἐ", L"Ἑ", L"Ὴ", L"Ή", L"Ή",
+L"Ἠ", L"Ἡ", L"ῌ", L"Ὶ", L"Ί", L"Ῑ", L"Ί", L"Ἰ",
+L"Ἱ", L"Ὸ", L"Ό", L"Ό", L"Ὀ", L"Ὁ", L"Ῥ", L"Ὺ",
+L"Ύ", L"Ῡ", L"Ῠ", L"Ϋ", L"Ύ", L"Ὑ", L"Ὼ", L"Ώ",
+L"Ώ", L"Ὠ", L"Ὡ", L"ῼ", L"ὰ", L"ά", L"ᾱ", L"ᾰ",
+L"ά", L"ἀ", L"ἁ", L"ᾶ", L"ᾳ", L"ὲ", L"έ", L"έ",
+L"ἐ", L"ἑ", L"ὴ", L"ή", L"ή", L"ἠ", L"ἡ", L"ῆ",
+L"ῃ", L"ὶ", L"ί", L"ῑ", L"ῐ", L"ϊ", L"ί", L"ἰ",
+L"ἱ", L"ὸ", L"ό", L"ό", L"ὀ", L"ὁ", L"ῤ", L"ῥ",
+L"ὺ", L"ύ", L"ῡ", L"ῠ", L"ϋ", L"ύ", L"ὐ", L"ὑ",
+L"ῦ", L"ὼ", L"ώ", L"ώ", L"ὠ", L"ὡ", L"ῶ", L"ῳ"
+};