static string GetImportDataName(string filename, string[] lines) { string need = "//NAME="; foreach (string l in lines) { int found = l.IndexOf(need); if (found < 0) { continue; } string name = U.substr(l, found + need.Length); return(name); } { string name = RegexCache.MatchSimple(filename, "MapActionAnimation_[^ ]+(.+)\\."); return(name); } }
//ファイル名にある _swap_[0-9] にある番号で、パレットを切り替える. Bitmap PaletteSwapper(Bitmap bitmap) { string lastFilename = Program.LastSelectedFilename.Load(this, ""); Match m = RegexCache.Match(lastFilename, "_swap_([0-9])"); if (m.Groups.Count < 2) { return(bitmap); } int palIndex = (int)U.atoh(m.Groups[1].Value); if (palIndex <= 0 || palIndex >= 10) { return(bitmap); } Bitmap newbitmap = ImageUtil.SwapPalette(bitmap, (int)palIndex); return(newbitmap); }
public static void TEST_DateParseTest() { { string a = "Expires: Wed, 27 Jan 2021 04:03:09 GMT\r\nLast-Modified: Mon, 27 Jan 2020 07:06:32 GMT\r\nVary: Accept-Encoding"; string regex = "Last-Modified: (.+?)\r\n"; Match m = RegexCache.Match(a, regex); string r = m.Groups[1].ToString(); Debug.Assert(r == "Mon, 27 Jan 2020 07:06:32 GMT"); DateTime d = DateTime.Parse(r); r = d.ToString(); Debug.Assert(r == "2020/01/27 16:06:32"); } { string r = "20/01/27 20:04"; DateTime d = DateTime.Parse(r, new CultureInfo("ja-JP", false)); r = d.ToString(); Debug.Assert(r == "2020/01/27 20:04:00"); } }
void RunDownloadAndExtract(InputFormRef.AutoPleaseWait pleaseWait) { string url = U.at(this.Lines, "UPDATE_URL"); if (url == "") { R.ShowStopError("UPDATE_URLの項目がありません"); return; } string regex = U.at(this.Lines, "UPDATE_REGEX"); if (regex == "") { R.ShowStopError("UPDATE_REGEXの項目がありません"); return; } if (regex == "@DIRECT_URL") {//直リン } else { string html = U.HttpGet(url); Match m = RegexCache.Match(html, regex); if (m.Groups.Count < 2) { R.ShowStopError("UPDATE_REGEXでマッチしたデータがありませんでした。\r\n{0}", html); return; } url = m.Groups[1].ToString(); } //少し時間がかかるので、しばらくお待ちください表示. DownloadAndExtract(url, pleaseWait); R.ShowOK("アップデートが完了しました。\r\nROMを再読み込みします。\r\n"); MainFormUtil.Open(this, Program.ROM.Filename, true, ""); }
public static UPDATE_RESULT CheckUpdateLow(Dictionary <string, string> lines, string romfilename, bool isSlientMode) { string url = U.at(lines, "CHECK_URL"); if (url == "") { if (!isSlientMode) { R.ShowStopError("CHECK_URLの項目がありません"); } return(UPDATE_RESULT.ERROR); } string regex = U.at(lines, "CHECK_REGEX"); if (regex == "") { if (!isSlientMode) { R.ShowStopError("CHECK_REGEXの項目がありません"); } return(UPDATE_RESULT.ERROR); } string dateString; string match; if (regex == "@DIRECT_URL") { match = url; } else { string html = U.HttpGet(url); Match m = RegexCache.Match(html, regex); if (m.Groups.Count < 2) { if (!isSlientMode) { R.ShowStopError("CHECK_REGEXでマッチしたデータがありませんでした。\r\n{0}", html); } return(UPDATE_RESULT.ERROR); } match = m.Groups[1].ToString(); } if (U.isURL(match)) {//直URL WebResponse rsp = U.HttpHead(url); dateString = rsp.Headers["LastModified"]; if (dateString == null) { if (!isSlientMode) { R.ShowStopError("Last-Modifiedを検知できませんでした。\r\n仕方がないので、常に最新版に更新します。"); } dateString = DateTime.Now.ToString(); } } else { dateString = match; } DateTime datetime; try { if (url.IndexOf("getuploader.com") >= 0) { datetime = DateTime.Parse(dateString, new CultureInfo("ja-JP", false)); } else { if (U.TryParseUnitTime(dateString, out datetime)) {//unittmie } else {//通常の日付 datetime = DateTime.Parse(dateString); } } } catch (Exception) { if (!isSlientMode) { R.ShowStopError("日付({0})をパースできませんでした。\r\n仕方がないので、常に最新版に更新します。", dateString); } datetime = DateTime.Now; } DateTime romDatetime = GetROMDateTime(romfilename); Log.Notify("romDatetime:{0} vs datetime:{1}", romDatetime.ToString(), datetime.ToString()); if (romDatetime < datetime) {//更新する必要あり! return(UPDATE_RESULT.UPDATEABLE); } //更新する必要なし return(UPDATE_RESULT.LATEST); }
static string CheckUpdateURLByGetUploader(out string out_url, out string out_version) { out_url = ""; out_version = ""; string versionString = U.getVersion(); double version = U.atof(versionString); string url = "https://ux.getuploader.com/FE4/"; string contents; try { contents = U.HttpGet(url); } catch (Exception e) { #if DEBUG R.Error("Webサイトにアクセスできません。 URL:{0} Message:{1}", url, e.ToString()); throw; #else return(R.Error("Webサイトにアクセスできません。 URL:{0} Message:{1}", url, e.ToString())); #endif } System.Text.RegularExpressions.Match match = RegexCache.Match(contents , "<td><a href=\"(https://ux.getuploader.com/FE4/download/[0-9]+)\" title=\"FEBuilder(?:GBA)?_[0-9.]+.7z\">FEBuilder(?:GBA)?_([0-9.]+).7z</a></td><td></td><td>FEBuilder(?:GBA)?_[0-9.]+.7z</td><td>(2|3|4)\\.[0-9] MB</td>" ); Log.Error(U.var_dump(match.Groups)); if (match.Groups.Count < 2) { return(R._("サイトの結果が期待外でした。\r\n{0}", url) + "\r\n\r\n" + "href can not parse" + "\r\n" + "contents:\r\n" + contents + "\r\n" + "match.Groups:\r\n" + U.var_dump(match.Groups)); } out_version = match.Groups[2].Value; double net_version = U.atof(match.Groups[2].Value); if (version >= net_version) { if (net_version == 0) { return(R._("サイトの結果が期待外でした。\r\n{0}", url) + "\r\n\r\n" + "version can not parse" + "\r\n" + "contents:\r\n" + contents + "\r\n" + "match.Groups:\r\n" + U.var_dump(match.Groups)); } return(R._("現在のバージョンが最新です。version:{0}", version)); } double yyyymmdd = U.atof(DateTime.Now.AddDays(3).ToString("yyyyMMdd.HH")); if (net_version > yyyymmdd) {//いたずらで変な日付のものが挙げられた可能性あり return(R._("サイトの結果が期待外でした。\r\n{0}", url) + "\r\n\r\n" + "date can not parse" + "\r\n" + "contents:\r\n" + contents + "\r\n" + "match.Groups:\r\n" + U.var_dump(match.Groups)); } out_url = match.Groups[1].Value; return(""); }
static string CheckUpdateURLByGitHub(out string out_url, out string out_version) { out_url = ""; out_version = ""; string versionString = U.getVersion(); double version = U.atof(versionString); string url = "https://api.github.com/repos/FEBuilderGBA/FEBuilderGBA/releases/latest"; string contents; try { contents = U.HttpGet(url); } catch (Exception e) { #if DEBUG R.Error("Webサイトにアクセスできません。 URL:{0} Message:{1}", url, e.ToString()); throw; #else return(R.Error("Webサイトにアクセスできません。 URL:{0} Message:{1}", url, e.ToString())); #endif } string downloadurl; { System.Text.RegularExpressions.Match match = RegexCache.Match(contents , "\"browser_download_url\": \"(.+)\"" ); if (match.Groups.Count < 2) { return(R._("サイトの結果が期待外でした。\r\n{0}", url) + "\r\n\r\n" + "browser_download_url not found" + "\r\n" + "contents:\r\n" + contents + "\r\n" + "match.Groups:\r\n" + U.var_dump(match.Groups)); } downloadurl = match.Groups[1].Value; } { System.Text.RegularExpressions.Match match = RegexCache.Match(contents , "download/ver_([0-9.]+)/" ); if (match.Groups.Count < 2) { return(R._("サイトの結果が期待外でした。\r\n{0}", url) + "\r\n\r\n" + "download/ver_ not found" + "\r\n" + "contents:\r\n" + contents + "\r\n" + "match.Groups:\r\n" + U.var_dump(match.Groups)); } out_version = match.Groups[1].Value; double net_version = U.atof(out_version); if (version >= net_version) { if (net_version == 0) { return(R._("サイトの結果が期待外でした。\r\n{0}", url) + "\r\n\r\n" + "version can not parse" + "\r\n" + "contents:\r\n" + contents + "\r\n" + "match.Groups:\r\n" + U.var_dump(match.Groups)); } return(R._("現在のバージョンが最新です。version:{0}", version)); } } out_url = downloadurl; return(""); }
string ReplaceOffsetAddress(string code) { return(RegexCache.Replace(code, "(0x0.......)", "$1 + . - origin")); }
string ReplaceOffsetAddress(string code) { return(RegexCache.Replace(code, "#?(0x0?[8-9][0-9A-Fa-f][0-9A-Fa-f][0-9A-Fa-f][0-9A-Fa-f][0-9A-Fa-f][0-9A-Fa-f])", "$1 + . - origin")); }