2 using System.Windows.Forms;
\r
3 using System.Collections.Generic;
\r
5 using System.Text.RegularExpressions;
\r
6 using NaGet.Packages;
\r
8 namespace AppliStation.PackageInfo
\r
11 /// パッケージ情報アクセスのための便利メソッド群
\r
13 public sealed class PackageDescripter
\r
16 /// インストーラタイプに対応する文字列を生成して返す
\r
18 /// <param name="instType">インストーラタイプ</param>
\r
19 /// <returns>ラベル文字列</returns>
\r
20 public static string GetInstallerTypeLabel(InstallerType instType)
\r
23 case InstallerType.ARCHIVE:
\r
24 return "自己解凍書庫または書庫";
\r
25 case InstallerType.EXEC_INSTALLER:
\r
27 case InstallerType.MSI_PACKAGE:
\r
29 case InstallerType.ITSELF:
\r
32 return "不明なインストール形式(インストール不能)";
\r
39 /// <param name="platform">プラットフォーム</param>
\r
40 /// <returns>platformの示すOSバージョン文字列</returns>
\r
41 public static string GetOSValueLabel(Platform platform)
\r
43 if (platform == null || string.IsNullOrEmpty(platform.Os)) {
\r
44 return "任意のWindows";
\r
46 return platform.Os.Replace("WIN", string.Empty);
\r
51 /// アーキテクチャのラベル文字列を生成する
\r
53 /// <param name="platform">プラットフォーム</param>
\r
54 /// <returns>platformの示すアーキテクチャ文字列</returns>
\r
55 public static string GetArchValueLabel(Platform platform)
\r
57 switch ((platform != null)? platform.Arch : System.Reflection.ProcessorArchitecture.X86) {
\r
58 case System.Reflection.ProcessorArchitecture.Amd64:
\r
59 return "x64 (64ビット環境)";
\r
60 case System.Reflection.ProcessorArchitecture.IA64:
\r
62 case System.Reflection.ProcessorArchitecture.None:
\r
63 case System.Reflection.ProcessorArchitecture.MSIL:
\r
64 return "アーキテクチャ依存なし";
\r
65 case System.Reflection.ProcessorArchitecture.X86:
\r
67 return "x86 (32ビット環境)";
\r
72 /// ライセンスのラベル文字列とリンク情報を生成する
\r
74 /// <param name="pkg">パッケージ</param>
\r
75 /// <param name="text">ラベル文字列</param>
\r
76 /// <param name="links">リンク文字列</param>
\r
77 public static void GetLicenseValueLabel(Package pkg, out string text, out LinkLabel.Link[] links)
\r
79 string license = pkg.License;
\r
80 string publicSiteUrl = (pkg.Url != null)? pkg.Url.Href : null;
\r
82 List<LinkLabel.Link> linkArray = new List<LinkLabel.Link>();
\r
84 switch (license ?? string.Empty) {
\r
86 if (string.IsNullOrEmpty(publicSiteUrl)) {
\r
89 text = "フリーソフトウェア (詳細は公式サイトなどで確認してください)";
\r
90 linkArray.Add(createLinkToLinkLabel(text, "公式サイト", publicSiteUrl));
\r
93 #region オープンソースかつコピーレフト
\r
99 text = string.Format("{0} (オープンソース)", license);
\r
100 if (license.StartsWith("GPLv3")) {
\r
101 linkArray.Add(new LinkLabel.Link(0, license.Length, @"http://www.gnu.org/licenses/gpl-3.0.html"));
\r
103 linkArray.Add(new LinkLabel.Link(0, license.Length, @"http://www.gnu.org/licenses/gpl-2.0.html"));
\r
104 linkArray.Add(createLinkToLinkLabel(text, "オープンソース",
\r
105 @"http://creativecommons.org/licenses/GPL/2.0/deed.ja"));
\r
113 text = string.Format("{0} (オープンソース)", license);
\r
114 if (license.StartsWith("GPLv3")) {
\r
115 linkArray.Add(new LinkLabel.Link(0, license.Length, @"http://www.gnu.org/licenses/lgpl-3.0.html"));
\r
117 linkArray.Add(new LinkLabel.Link(0, license.Length, @"http://www.gnu.org/licenses/lgpl-2.1.html"));
\r
118 linkArray.Add(createLinkToLinkLabel(text, "オープンソース",
\r
119 @"http://creativecommons.org/licenses/LGPL/2.1/deed.ja"));
\r
124 text = string.Format("{0} (オープンソース)", license);
\r
125 linkArray.Add(new LinkLabel.Link(0, license.Length, @"http://www.gnu.org/licenses/agpl-3.0.txt"));
\r
130 text = "MPL (オープンソース)";
\r
131 linkArray.Add(new LinkLabel.Link(0, "MPL".Length, @"http://www.mozilla.org/MPL/MPL-1.1.html"));
\r
134 text = "CPL (オープンソース)";
\r
135 linkArray.Add(new LinkLabel.Link(0, "CPL".Length, @"http://opensource.org/licenses/cpl1.0.php"));
\r
138 text = "Artisticライセンス (オープンソース)";
\r
139 linkArray.Add(new LinkLabel.Link(0, "Artisticライセンス".Length, @"http://www.perlfoundation.org/artistic_license_2_0"));
\r
142 #region オープンソースだが、コピーレフトでない著名なライセンス
\r
144 text = "MITライセンス (オープンソース)";
\r
145 linkArray.Add(new LinkLabel.Link(0, "MITライセンス".Length, @"http://www.opensource.org/licenses/mit-license.php"));
\r
148 text = "修正済BSDライセンス (オープンソース)";
\r
149 linkArray.Add(new LinkLabel.Link(0, "修正済BSDライセンス".Length, @"http://www.opensource.org/licenses/bsd-license.php"));
\r
154 text = "Apacheライセンス (オープンソース)";
\r
155 linkArray.Add(new LinkLabel.Link(0, "Apacheライセンス".Length, @"http://www.apache.org/licenses/LICENSE-2.0.txt"));
\r
158 text = "zlibライセンス (オープンソース)";
\r
159 linkArray.Add(new LinkLabel.Link(0, "zlibライセンス".Length, @"http://sourceforge.jp/projects/opensource/wiki/licenses%2Fzlib_libpng_license"));
\r
162 #region 実質Public Domainなライセンス
\r
166 linkArray.Add(new LinkLabel.Link(0, text.Length, @"http://sam.zoy.org/wtfpl/"));
\r
169 text = "煮るなり焼くなり好きにしろライセンス";
\r
170 linkArray.Add(new LinkLabel.Link(0, text.Length, @"http://www.kmonos.net/nysl/NYSL_withfaq.TXT"));
\r
172 case "Public Domain":
\r
173 text = "パブリックドメイン (著作権帰属なし)";
\r
177 if (license.StartsWith("http://")) {
\r
179 linkArray.Add(new LinkLabel.Link(0, license.Length, license));
\r
181 Regex regex = new Regex(@"^(?<msg>.*)<(?<url>https?://.*)>$", RegexOptions.IgnoreCase);
\r
182 Match match = regex.Match(license);
\r
184 if (match.Success) {
\r
185 text = match.Groups["msg"].Value;
\r
186 linkArray.Add(new LinkLabel.Link(0, text.Length, match.Groups["url"].Value));
\r
194 links = linkArray.ToArray();
\r
198 /// リンクラベルのリンク生成便利メソッド
\r
200 /// <param name="text">ラベルテキスト</param>
\r
201 /// <param name="word">リンク対象文字列</param>
\r
202 /// <param name="link">リンクオブジェクト</param>
\r
203 private static LinkLabel.Link createLinkToLinkLabel(string text, string word, string link)
\r
205 int pos = text.IndexOf(word, 0);
\r
207 return new LinkLabel.Link(pos, word.Length, link);
\r
208 } else throw new ArgumentException(string.Format("label text \"{0}\" does not contain \"{1}\"!", text, word));
\r