bool TryBatchImageHex(ref string line) { System.Text.RegularExpressions.Match match = RegexCache.Match(line, @"[A-Za-z0-9_]+=0x[A-Za-z0-9]+//0x([A-Za-z0-9]+)"); if (match.Groups.Count < 1) { return(false); } bool found = false; for (int n = 1; n < match.Groups.Count; n++) { string v = match.Groups[n].Value; uint addr = U.atoh(v); if (addr < 0x100) { continue; } this.Address.Text = U.ToHexString(addr); AutoSearch(); bool isNearMatch; if (!IsDataFound(out isNearMatch)) {//見つからなかった continue; } found = true; string newV = v + "(0x" + OtherROMAddressWithLDRRef.Text + "//0x" + OtherROMAddressWithLDR.Text + ",0x" + OtherROMRefPointer2.Text + "//0x" + OtherROMAddress2.Text + ")"; line = line.Replace(v, newV); } return(found); }
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"); } }
//配列の値があったら、添え字を返す. static uint ParseArrayIndex(string str) { Match deep = RegexCache.Match(str, @"\[(\d+)\]"); if (deep.Groups.Count >= 2) { string m = deep.Groups[1].ToString(); return(U.atoi(m)); } return(0); }
string DownloadProgram_Grep(string url, string dir, string findEXE, string pattern) { string html = U.HttpGet(url); Match match = RegexCache.Match(html, pattern); if (match.Groups.Count <= 1) { return(R.Error("ダウンロード先が見つかりませんでした。\r\nURL:{0}\r\nPATH:{1}\r\nfindEXE:{2}\r\npattern:{3}", url, dir, findEXE, pattern)); } string binary_url = match.Groups[1].Value; binary_url = U.MakeFullURLPath(url, binary_url); return(DownloadProgram_Direct(binary_url, dir, findEXE)); }
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(); } Program.UpdateWatcher.Stop(); //少し時間がかかるので、しばらくお待ちください表示. bool r = DownloadAndExtract(url, pleaseWait); if (!r) { Program.UpdateWatcher.Resume(); return; } R.ShowOK("アップデートが完了しました。\r\nROMを再読み込みします。\r\n"); MainFormUtil.Open(this, Program.ROM.Filename, true, ""); Program.UpdateWatcher.Resume(); }
//1行の翻訳 public string Trans(string src, string from, string to, long time = 0) { List <string> list = new List <string>(); char term_char = '。'; int term = src.IndexOf(term_char); if (term < 0) { term_char = '.'; } string[] lines = src.Split(term_char); for (int i = 0; i < lines.Length; i++) { if (lines[i] == "") { continue; } string a; if (term_char == ' ') { a = lines[i]; } else { a = lines[i] + term_char; } //URLが壊されないように変換する System.Text.RegularExpressions.Match match = RegexCache.Match(a, @"^s?https?://[-_.!~*'()a-zA-Z0-9;/?:@&=+$,%#]+$"); if (match.Groups.Count >= 2) { a.Replace(match.Groups[1].Value, "AURL"); } string b = TransOne(a, from, to, time); if (match.Groups.Count >= 2) {//URLをもとに戻す. b.Replace("AURL", match.Groups[1].Value); } list.Add(b); } return(string.Join("", list.ToArray())); }
public static void TEST_Parse1() { string html = File.ReadAllText(Program.GetTestData("test_getuploader.txt")); { string regex = "fe8_kaitou.*?MB</td><td>(.+?)</td><td>"; Match m = RegexCache.Match(html, regex); string r = m.Groups[1].ToString(); Debug.Assert(r == "20/01/29 13:22"); } { string regex = "<td><a href=\"(.+?)\" title=\"fe8_kaitou.+?\">"; Match m = RegexCache.Match(html, regex); string r = m.Groups[1].ToString(); Debug.Assert(r == "https://ux.getuploader.com/FE4/download/1310"); } }
//ファイル名にある _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"); } }
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(""); }