Example #1
0
bool TeX2img::Download(HWND hwnd,MSGFUNC &msgfunc){
	msgfunc.msg(_T("TeX2img のファイルを探索\n"));
	std::wregex reg;
	try{reg.assign(m_filereg,std::regex_constants::icase);}
	catch(...){
		msgfunc.detail(_T("TeX2img の発見に失敗\n"));
		g_Setting.Log(_T("TeX2img を発見する正規表現が不正です."));
		return false;
	}
	boost::filesystem::directory_iterator end;
	try{
		for(boost::filesystem::directory_iterator ite(m_filedir) ; ite != end ; ++ite){
			boost::filesystem::path p(*ite);
			if(std::regex_match(p.filename().wstring(),reg)){
				m_file = p.filename().wstring();
				break;
			}
		}
	}
	catch(...){
		g_Setting.Log(_T("TeX2img を保存しているフォルダが見つかりませんでした."));
		return false;
	}
	if(m_file == _T("")){
		msgfunc.detail(_T("TeX2img の発見に失敗\n"));
		g_Setting.Log(_T("TeX2img が見つかりませんでした."));
		return false;
	}else return true;
}
Example #2
0
bool TeX2img::Install(HWND hwnd, MSGFUNC &msgfunc) {
	if(!m_doinst) {
		g_Setting.Log(_T("TeX2img をインストールしません."));
		return true;
	} else g_Setting.Log(_T("TeX2img のインストールを実行."));
	ablib::string dir = g_Applications.m_TeXLive.GetVar(_T("TEXDIR"));
	if(dir == _T("")) {
		g_Setting.Log(_T("TeX2img のインストール中:TEXDIR の取得に失敗しました."));
		return false;
	}
	if(dir != _T("") && dir[dir.length() - 1] != '\\')dir += _T("\\");
	dir += _T("bin\\win32\\");
	::CreateDirectoryReflex(dir.c_str());
	msgfunc.msg(_T("TeX2img のインストール\n"));
	std::vector<ablib::string> dependsFiles;
	dependsFiles.push_back(_T("TeX2imgc.exe"));
	dependsFiles.push_back(_T("TeX2imgc.exe.config"));
	dependsFiles.push_back(_T("Azuki.dll"));
	dependsFiles.push_back(_T("mudraw.exe"));
	dependsFiles.push_back(_T("pdfiumdraw.exe"));
	if (
		!::CopyFile((m_filedir + m_file).c_str(), (dir + _T("TeX2img.exe")).c_str(), FALSE) ||
		!::CopyFile((m_filedir + m_file + _T(".config")).c_str(), (dir + _T("TeX2img.exe.config")).c_str(), FALSE)
	){
		g_Setting.Log(_T("TeX2imgのインストール:ファイルのコピーに失敗."));
	}
	for(auto file : dependsFiles) {
		if(!::CopyFile((m_filedir + file).c_str(), (dir + file).c_str(), FALSE)) {
			g_Setting.Log(_T("TeX2imgのインストール:") + file + _T("のコピーに失敗."));
		}
	}
	msgfunc.detail(_T("TeX2img をインストールしました.\n"));
	return TeX2img_funcs::Set(
		g_Applications.m_TeXLive.GetVar(_T("TEXDIR")) + _T("\\"),
		msgfunc.msg,msgfunc.detail,
		std::bind(&Setting::Log,&g_Setting,std::placeholders::_1));

}
Example #3
0
bool Ghostscript::Download(HWND hwnd,MSGFUNC &msgfunc){
	m_abort = false;
	m_downloadresult = false;

	msgfunc.msg(_T("Ghostscriptのインストールの準備中……\n"));

	std::vector<Network::FileData> fds;
#ifndef INSTALL_FROM_LOCAL
	if(!m_doinst)return true;
	if(!g_Network.GetFileData(fds,m_url,msgfunc))return false;
#else
	ablib::system::FindFile ff;
	ff.Begin(g_Setting.GetDownloadDir() + _T("*.*"));
	WIN32_FIND_DATA wfd;
	while(ff.Next(&wfd)){
		Network::FileData fd;
		fd.file = wfd.cFileName;
		fd.time = ablib::system::Time(wfd.ftLastWriteTime);
		fd.size = wfd.nFileSizeLow;
		fds.push_back(fd);
	}
#endif

	std::wregex reg(g_Setting.ReadSysINI(_T("GS"),_T("Reg")));
	std::vector<Network::FileData> gsfds;

	for(auto &i : fds){
//		::OutputDebugString((i.file + _T("\n")).c_str());
		if(std::regex_match(i.file,reg))gsfds.push_back(i);
	}
	if(gsfds.empty()){
		msgfunc.detail(_T("Ghostscript のインストーラが見つかりませんでした.\n"));
		g_Setting.Log(_T("Ghostscript のインストーラがみつかりませんでした."));
		return false;
	}

	reg.assign(_T("[0-9]+"));
	std::wsmatch reg_results;
	std::vector<unsigned int> version;
	for(auto &i : gsfds){
		if(std::regex_search(i.file,reg_results,reg))version.push_back(boost::lexical_cast<int>(reg_results.str()));
		else version.push_back(0);
	}
	std::vector<unsigned int>::iterator max = std::max_element(version.begin(),version.end());
	if(max == version.end()){
		m_file = gsfds[0];
		if(!version.empty())m_version = version[0];
		else m_version = 0;
	}else{
		m_file = gsfds[max - version.begin()];
		m_version = *max;
	}

#ifndef INSTALL_FROM_LOCAL
	ablib::system::Time local = ablib::system::File::GetLastWriteTime(g_Setting.GetDownloadDir() + m_file.file);
	if(local + ablib::system::Time(0,0,1) > m_file.time){
		msgfunc.detail(_T("ローカルの Ghostscript のインストーラが最新のようです.ダウンロードしません.\n"));
	}else{
		DownloadFileData dfd;
		dfd.url = m_url + _T("/") + m_file.file;
		dfd.size = m_file.size;
		dfd.localdir = g_Setting.GetDownloadDir();
		std::vector<DownloadFileData> dfds;
		dfds.push_back(dfd);
		::CreateDirectoryReflex(g_Setting.GetDownloadDir().c_str());
		if(m_download.Download(dfds,msgfunc) != DownloadDlg::success){
			msgfunc.detail(_T("Ghostscript のインストーラのダウンロードに失敗\n"));
			return false;
		}
	}
#endif // INSTALL_FROM_LOCAL
	m_downloadresult = true;
	return true;
}
Example #4
0
bool Ghostscript::Install(HWND hwnd,MSGFUNC &msgfunc){
	m_installresult = false;
	if(!m_doinst)return true;
	if(!m_downloadresult)return false;
	ablib::string file = g_Setting.GetDownloadDir() + m_file.file;
	boost::filesystem::path path(file);
	CProgressBarCtrl progress_bar(::GetDlgItem(hwnd,IDC_PROGRESS));
	static const int PROGRESSBAR_MAX = 32768;

	if(file.length() < 4 || file.substr(file.length() - 4) != _T(".exe")){
		::MessageBox(hwnd,_TR("古い Ghostscript を発見しました.このバージョンには対応していません."),_T("abtlinst"),0);
		return false;
	}
	ablib::system::Process process;
	ablib::system::Process::ProcessStartInfo s;

	ablib::string gsdir;
	gsdir = g_Setting.GetInstallDir() + _T("gs");
	if(m_version != 0){
		ablib::string ver = boost::lexical_cast<ablib::string>(m_version);

		// 後ろから二つおきにピリオドを挿入
		ablib::string::size_type start = (ver.length() % 2);
		int len = ver.length();
		for(ablib::string::size_type i = 0 ; i < len/2 ; ++i){
			ver.insert(start + 3*i,_T("."));
		}
		gsdir += _T("\\gs") + ver;
	}
	
	s.Arguments = _T("\"") + file + _T("\" /S /D=") + gsdir;
//	s.Arguments = _T("\"") + file + _T("\" /D=") + g_Setting.GetInstallDir() + _T("gs");
//	s.Arg = _T("\"") + file + _T("\"");
	s.FileName = _T("");
	s.WorkingDirectory = path.parent_path().wstring();
	s.RedirectStandardError = false;
	s.RedirectStandardOutput = false;
	s.RedirectStandardInput = false;
	s.ShowState = ablib::system::Process::ProcessStartInfo::show;
	s.CreateNoWindow = false;
	process.StartInfo(s);
	CheckandSetTmp(g_Setting.GetTmpDir().c_str());
	msgfunc.msg(_T("Ghostscript のインストール\n"));
	msgfunc.detail(_T("Ghostscript をインストール中\n"));
	if(!process.Start()){
		g_Setting.Log(file + _T(" の起動に失敗"));
		return false;
	}else{
		process.WaitForExit();
	}
	
	progress_bar.SetPos(PROGRESSBAR_MAX/2);
	gsdir += _T("\\");

//	ablib::string gsdir = GetGSDir();
	if(g_Setting.SetPath()){
		if(gsdir != _T("")){
			g_Path.AddPath(gsdir + _T("bin"));
			g_Path.AddPath(gsdir + _T("lib"));
		}else g_Setting.Log(_TR("Ghostscript のインストールパス取得に失敗したので,PATH の設定を行いません"));
	}

	msgfunc.detail(_T("cidfmap の生成\n"));
	LPITEMIDLIST id;
	LPMALLOC mal;
	TCHAR fontdir[4096];
	if(
		FAILED(::SHGetMalloc(&mal)) ||
		FAILED(::SHGetSpecialFolderLocation(NULL,CSIDL_FONTS,&id)) ||
		!::SHGetPathFromIDList(id,fontdir)
	){
		g_Setting.Log(_T("cidfmap の生成に失敗(フォントフォルダの取得に失敗)."));
		return false;
	}
		
	mal->Free(id);
	if(fontdir[::lstrlen(fontdir) - 1] != '\\')::lstrcat(fontdir,_T("\\"));
	
	ablib::string arg = ablib::string(_T("-q -dBATCH -sFONTDIR=")) + fontdir + _T(" -sCIDFMAP=") + gsdir + _T("lib\\cidfmap") + _T(" ") + gsdir + _T("lib\\mkcidfm.ps");
	arg.replace(_T("\\"),_T("/"));
	s.Arguments = _T("\"") + gsdir + _T("\\bin\\gswin32c.exe\" ") + arg;
	s.WorkingDirectory = gsdir + _T("\\bin");
	process.StartInfo(s);
	if(!process.Start()){
		g_Setting.Log(s.Arguments + _T(" の実行に失敗"));
		return false;
	}else{
		process.WaitForExit();
	}
	progress_bar.SetPos(PROGRESSBAR_MAX);
	
	m_installresult = true;
	return true;
}