view src/kaigo/horori/searcher/src/utils.cpp @ 64:ad5c30ee5cf1

horori: add manual.
author pyon@macmini
date Fri, 25 Dec 2020 20:48:01 +0900
parents 7396e7407abd
children
line wrap: on
line source

// Filename   : utils.cpp
// Last Change: 2020-06-26 金 09:16:48.
//
#include <wx/wx.h>
#include <wx/dir.h>
#include <wx/wfstream.h>
#include <wx/zstream.h>
#include <wx/tarstrm.h>
#include <wx/regex.h>
#include "utils.h"

wxRect Geo2Rect(wxString geo)
{
    long w, h, x, y;
    wxString sw = geo.BeforeFirst('x');
    wxString sh = geo.AfterFirst('x').BeforeFirst('+');
    wxString sx = geo.AfterFirst('+').BeforeFirst('+');
    wxString sy = geo.AfterLast('+');

    sw.ToLong(&w, 10);
    sh.ToLong(&h, 10);
    sx.ToLong(&x, 10);
    sy.ToLong(&y, 10);

    return wxRect((int)x, (int)y, (int)w, (int)h);
}

wxRect ZeroRect()
{
	wxRect rect(wxPoint(0, 0), wxPoint(0, 0));
	return rect;
}

bool TarDir(wxString dir, wxString tarfile)
{
	if (!wxDirExists(dir)) {
		wxMessageBox(wxT("bad directoy"));
		return false;
	}

	wxDir d(dir);
	if (!d.IsOpened()) return false;

	wxFFileOutputStream out(tarfile);
	wxTarOutputStream tar(out);

	wxString filename;
	bool cont = d.GetFirst(&filename, wxEmptyString, wxDIR_FILES);
	while (cont) {
		wxFFileInputStream in(dir + wxFILE_SEP_PATH + filename);
		tar.PutNextEntry(filename);
		tar.Write(in);
		cont = d.GetNext(&filename);
	}
	tar.Close();
	return true;
}

bool Gzip(wxString infile, wxString gzfile)
{
	wxFileInputStream istream(infile);
	wxFileOutputStream ostream(gzfile);
	wxZlibOutputStream zstream(ostream, -1, wxZLIB_GZIP);

	zstream.Write(istream);
	zstream.Close();
	return true;
}

wxString XoR(wxString s, int x)
{
	wxString t;
	for (int i = 0; i < s.Len(); i++) {
		t += wxString::Format(wxT("%c"), s[i].GetValue() ^ x); 
	}
	return t;
}

bool IsHiragana(wxString s)
{
	wxString hiragana = wxT("あいうえおかきくけこさしすせそたちつてとなにぬねのはひふへほまみむめもやゆよらりるれろわをんがぎぐげござじずぜぞだぢづでどばびぶべぼぱぴぷぺぽぁぃぅぇぉゃゅょっ ");
    wxRegEx reHiragana(wxT("^[") + hiragana + wxT("]+$"));

	if (reHiragana.Matches(s)) return true;
	return false;
}

bool IsKatakana(wxString s)
{
	wxString katakana = wxT("アイウエオカキクケコサシスセソタチツテトナニヌネノハヒフヘホマミムメモヤユヨラリルレロワヲンガギグゲコザジズゼゾダヂヅデドバビブベボパピプペポァィゥェォャュョッ ");
    wxRegEx reKatakana(wxT("^[") + katakana + wxT("]+$"));

	if (reKatakana.Matches(s)) return true;
	return false;
}

wxString Hiragara2Katakana(wxString s)
{
	wxString hiragana = wxT("あいうえおかきくけこさしすせそたちつてとなにぬねのはひふへほまみむめもやゆよらりるれろわをんがぎぐげござじずぜぞだぢづでどばびぶべぼぱぴぷぺぽぁぃぅぇぉゃゅょっ ");
	wxString katakana = wxT("アイウエオカキクケコサシスセソタチツテトナニヌネノハヒフヘホマミムメモヤユヨラリルレロワヲンガギグゲコザジズゼゾダヂヅデドバビブベボパピプペポァィゥェォャュョッ ");
	for (int i = 0; i < hiragana.Len(); i++)
		s.Replace(hiragana[i], katakana[i], true);
	return s;
}