diff --git a/UniversalEmoticonPackBuilder.sln b/UniversalEmoticonPackBuilder.sln index 9f1fbee..c7d454c 100644 --- a/UniversalEmoticonPackBuilder.sln +++ b/UniversalEmoticonPackBuilder.sln @@ -5,20 +5,48 @@ Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "qip_buildmap", "qip_buildma EndProject Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "emoticon_build", "UniversalEmoticonPackBuilder\emoticon_build.csproj", "{FB29B9CB-D6D8-43F4-9011-538A0B9C7451}" EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "UniversalEmoticonPackBuilderLib", "UniversalEmoticonPackBuilderLib\UniversalEmoticonPackBuilderLib.csproj", "{2619794A-0A5D-4ED8-A3A8-1D36F1594CDC}" +EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution + Debug|Any CPU = Debug|Any CPU + Debug|Mixed Platforms = Debug|Mixed Platforms Debug|x86 = Debug|x86 + Release|Any CPU = Release|Any CPU + Release|Mixed Platforms = Release|Mixed Platforms Release|x86 = Release|x86 EndGlobalSection GlobalSection(ProjectConfigurationPlatforms) = postSolution + {FC8DA446-6B5C-4BD0-881F-D683068A5259}.Debug|Any CPU.ActiveCfg = Debug|x86 + {FC8DA446-6B5C-4BD0-881F-D683068A5259}.Debug|Mixed Platforms.ActiveCfg = Debug|x86 + {FC8DA446-6B5C-4BD0-881F-D683068A5259}.Debug|Mixed Platforms.Build.0 = Debug|x86 {FC8DA446-6B5C-4BD0-881F-D683068A5259}.Debug|x86.ActiveCfg = Debug|x86 {FC8DA446-6B5C-4BD0-881F-D683068A5259}.Debug|x86.Build.0 = Debug|x86 + {FC8DA446-6B5C-4BD0-881F-D683068A5259}.Release|Any CPU.ActiveCfg = Release|x86 + {FC8DA446-6B5C-4BD0-881F-D683068A5259}.Release|Mixed Platforms.ActiveCfg = Release|x86 + {FC8DA446-6B5C-4BD0-881F-D683068A5259}.Release|Mixed Platforms.Build.0 = Release|x86 {FC8DA446-6B5C-4BD0-881F-D683068A5259}.Release|x86.ActiveCfg = Release|x86 {FC8DA446-6B5C-4BD0-881F-D683068A5259}.Release|x86.Build.0 = Release|x86 + {FB29B9CB-D6D8-43F4-9011-538A0B9C7451}.Debug|Any CPU.ActiveCfg = Debug|x86 + {FB29B9CB-D6D8-43F4-9011-538A0B9C7451}.Debug|Mixed Platforms.ActiveCfg = Debug|x86 + {FB29B9CB-D6D8-43F4-9011-538A0B9C7451}.Debug|Mixed Platforms.Build.0 = Debug|x86 {FB29B9CB-D6D8-43F4-9011-538A0B9C7451}.Debug|x86.ActiveCfg = Debug|x86 {FB29B9CB-D6D8-43F4-9011-538A0B9C7451}.Debug|x86.Build.0 = Debug|x86 + {FB29B9CB-D6D8-43F4-9011-538A0B9C7451}.Release|Any CPU.ActiveCfg = Release|x86 + {FB29B9CB-D6D8-43F4-9011-538A0B9C7451}.Release|Mixed Platforms.ActiveCfg = Release|x86 + {FB29B9CB-D6D8-43F4-9011-538A0B9C7451}.Release|Mixed Platforms.Build.0 = Release|x86 {FB29B9CB-D6D8-43F4-9011-538A0B9C7451}.Release|x86.ActiveCfg = Release|x86 {FB29B9CB-D6D8-43F4-9011-538A0B9C7451}.Release|x86.Build.0 = Release|x86 + {2619794A-0A5D-4ED8-A3A8-1D36F1594CDC}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {2619794A-0A5D-4ED8-A3A8-1D36F1594CDC}.Debug|Any CPU.Build.0 = Debug|Any CPU + {2619794A-0A5D-4ED8-A3A8-1D36F1594CDC}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU + {2619794A-0A5D-4ED8-A3A8-1D36F1594CDC}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU + {2619794A-0A5D-4ED8-A3A8-1D36F1594CDC}.Debug|x86.ActiveCfg = Debug|Any CPU + {2619794A-0A5D-4ED8-A3A8-1D36F1594CDC}.Release|Any CPU.ActiveCfg = Release|Any CPU + {2619794A-0A5D-4ED8-A3A8-1D36F1594CDC}.Release|Any CPU.Build.0 = Release|Any CPU + {2619794A-0A5D-4ED8-A3A8-1D36F1594CDC}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU + {2619794A-0A5D-4ED8-A3A8-1D36F1594CDC}.Release|Mixed Platforms.Build.0 = Release|Any CPU + {2619794A-0A5D-4ED8-A3A8-1D36F1594CDC}.Release|x86.ActiveCfg = Release|Any CPU EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE diff --git a/UniversalEmoticonPackBuilder/Program.cs b/UniversalEmoticonPackBuilder/Program.cs index 540517e..bb7c63c 100644 --- a/UniversalEmoticonPackBuilder/Program.cs +++ b/UniversalEmoticonPackBuilder/Program.cs @@ -7,18 +7,19 @@ using System.Threading; using System.Runtime.Serialization; using System.Runtime.Serialization.Json; -using Ionic.Zip; +using UniversalEmoticonPackBuilderLib; +using UniversalEmoticonPackBuilderLib.Builders; -namespace QIPSmileBuilder +namespace ConsoleUniversalEmoticonPackBuilder { class Program { - public static CMDArgs Config; + public static BuilderConfig Config; static void Main(string[] args) { // Default config - Config = new CMDArgs() + Config = new BuilderConfig() { version = "1.0.0", author = "VA", @@ -35,116 +36,20 @@ static void Main(string[] args) if (File.Exists(cfg_file)) { Config = - (CMDArgs) - new DataContractJsonSerializer(typeof(CMDArgs)) + (BuilderConfig) + new DataContractJsonSerializer(typeof(BuilderConfig)) .ReadObject( new StreamReader(cfg_file, Encoding.UTF8).BaseStream ); Directory.SetCurrentDirectory(new FileInfo(cfg_file).DirectoryName); } - // Initialize - var packinfo = new PackInfo() { name = Config.name, version = Config.version, author = Config.author }; - - var build_dir = "build/";// +Directory.CreateDirectory("build/build_" + (DateTime.Now - new DateTime(1970, 1, 1, 0, 0, 0)).TotalSeconds).Name + "/"; - - - // Cleanup and create build dir - try - { - Directory.CreateDirectory(build_dir).Delete(true); - Directory.CreateDirectory(build_dir); - } - catch (IOException) - { - - } - - // Load builders - List builders = new List(); - foreach (var b in Config.builders) - switch (b) { - case "qip": - builders.Add(new QipSmileConfig(build_dir, packinfo)); - break; - case "pidgin": - builders.Add(new PidginSmileConfig(build_dir, packinfo)); - break; - case "adium": - builders.Add(new AdiumSmileConfig(build_dir, packinfo)); - break; - case "miranda": - builders.Add(new MirandaSmileConfig(build_dir, packinfo)); - break; - case "wim": - builders.Add(new WIMSkin(build_dir, packinfo)); - break; - case "gmail": - builders.Add(new GMailUserjs(build_dir, packinfo)); - break; - } - - - // Load pack - Dictionary pack = new Dictionary(); - - if (Config.map.Length > 0) - { - string line; - var map = new StreamReader(Config.map); - while ((line = map.ReadLine()) != null) - { - if (line.IndexOf('#') == 0) continue; - var spl = line.Split(new[] { ':' }, 2); - if (spl.Length < 2) continue; - - var sname = spl[0]; - var scode = spl[1]; - pack.Add(sname, scode); - } - } - else - throw new Exception("No map defined");// pack = Config.Pack; - - // Build! - foreach (var s in pack) - builders.ForEach(c => c.CopySmiley(s.Key, s.Value.Split(','))); - - builders.ForEach(c => c.Finish()); + BuildPacks(Config); } - } - - // class that stores emoticon pack info - class PackInfo { - public string name; - public string version; - public string author; - public string FullName { - get { - return String.Format("{0} {1} by {2}", name, version, author); - } - } - - public string Description { - get { - return FullName; - } + private static void BuildPacks(BuilderConfig Config) + { + throw new NotImplementedException(); } } - - // Class for config json deserialization - [DataContract] - class CMDArgs { - [DataMember] - public string name; - [DataMember] - public string version; - [DataMember] - public string author; - [DataMember] - public string map; - [DataMember] - public List builders; - } } diff --git a/UniversalEmoticonPackBuilder/Writers.cs b/UniversalEmoticonPackBuilder/Writers.cs deleted file mode 100644 index 81cf45f..0000000 --- a/UniversalEmoticonPackBuilder/Writers.cs +++ /dev/null @@ -1,239 +0,0 @@ -using QIPSmileBuilder; -using System.IO; -using System; -using System.Text; -using System.Xml; -using System.Linq; - -class QipSmileConfig : SmileConfig -{ - private StreamWriter defineFile; - private int counter = 0; - - public QipSmileConfig(string path, PackInfo pack) - : base(pack, "QIP", path) - { - this.path = packRootPath + String.Format("{0}/", PackFullName); - this.imagePath = this.path; - - Directory.CreateDirectory(this.path); - - defineFile = new StreamWriter(this.path + "_define.ini", false, Encoding.GetEncoding("windows-1251")); - defineFile.AutoFlush = true; - } - - protected override void WriteEntry(string file, string[] equivs) - { - defineFile.WriteLine(String.Join(",", equivs)); - counter++; - } - - protected override void EndFile() - { - defineFile.Flush(); - defineFile.Close(); - - using (var w = new StreamWriter(this.path + "_define_vis.ini", false, Encoding.GetEncoding("windows-1251"))) - { - w.Write("1-{0}", counter + 1); - w.Flush(); - w.Close(); - } - } - - protected override string RenameFile(string fname) - { - var ext = fname.Split('.').Last(); - return toBase26(counter, 2) + "." + ext; - } - - static string toBase26(int x, int digits) - { - string base26Characters = "abcdefghijklmnopqrstuvwxyz"; - - char[] result = new char[digits]; - for (int i = digits - 1; i >= 0; --i) - { - result[i] = base26Characters[x % base26Characters.Length]; - x /= base26Characters.Length; - } - return new string(result); - } -} - -class PidginSmileConfig : SmileConfig -{ - private StreamWriter pidginTheme; - - public PidginSmileConfig(string path, PackInfo pack) - : base(pack, "Pidgin", path) - { - this.path = packRootPath + String.Format("{0}/", PackFullName); - this.imagePath = this.path; - Directory.CreateDirectory(this.path); - - pidginTheme = new StreamWriter(this.path + "theme", false, Encoding.GetEncoding("windows-1251")); - pidginTheme.AutoFlush = true; - pidginTheme.WriteLine("Name={0}", pack.name); - pidginTheme.WriteLine("Description={0}", pack.Description); - pidginTheme.WriteLine("Icon=ff.gif"); - pidginTheme.WriteLine("Author={0}", pack.author); - pidginTheme.WriteLine("[default]"); - } - - protected override void WriteEntry(string file, string[] equivs) - { - pidginTheme.WriteLine("{0}\t{1}", file, String.Join("\t", equivs)); - } - - protected override void EndFile() - { - pidginTheme.Flush(); - pidginTheme.Close(); - } -} - -class AdiumSmileConfig : SmileConfig -{ - private XmlTextWriter plistWriter; - - public AdiumSmileConfig(string path, PackInfo pack) - : base(pack, "Adium", path) - { - this.path = packRootPath + String.Format("{0}.AdiumEmoticonSet/", PackFullName); - this.imagePath = this.path; - Directory.CreateDirectory(this.path); - - plistWriter = new XmlTextWriter(this.path + "Emoticons.plist", Encoding.UTF8); - - plistWriter.Formatting = Formatting.Indented; - plistWriter.WriteStartDocument(); - plistWriter.WriteDocType("plist", "-//Apple Computer//DTD PLIST 1.0//EN", "http://www.apple.com/DTDs/PropertyList-1.0.dtd", null); - - plistWriter.WriteStartElement("plist"); - plistWriter.WriteAttributeString("version", "1.0"); - plistWriter.WriteStartElement("dict"); - plistWriter.WriteElementString("key", "AdiumSetVersion"); - plistWriter.WriteElementString("integer", "1"); - plistWriter.WriteElementString("key", "Emoticons"); - plistWriter.WriteStartElement("dict"); - } - - protected override void WriteEntry(string file, string[] equivs) - { - plistWriter.WriteElementString("key", file); - plistWriter.WriteStartElement("dict"); - plistWriter.WriteElementString("key", "Equivalents"); - plistWriter.WriteStartElement("array"); - foreach (var eq in equivs) - plistWriter.WriteElementString("string", eq); - plistWriter.WriteEndElement(); - plistWriter.WriteElementString("key", "Name"); - plistWriter.WriteElementString("string", equivs[0]); - plistWriter.WriteEndElement(); - } - - protected override void EndFile() - { - plistWriter.WriteEndElement(); - plistWriter.WriteEndElement(); - plistWriter.WriteEndElement(); - plistWriter.WriteEndDocument(); - plistWriter.Flush(); - plistWriter.Close(); - } -} - -class MirandaSmileConfig : SmileConfig -{ - private StreamWriter mirandaTheme; - - public MirandaSmileConfig(string path, PackInfo pack) - : base(pack, "Miranda", path) - { - this.path = packRootPath + String.Format("{0}/", PackFullName); - this.imagePath = this.path + "Animated/"; - Directory.CreateDirectory(this.imagePath); - - mirandaTheme = new StreamWriter(this.path + pack.name + ".msl", false, Encoding.GetEncoding("utf-8")); - mirandaTheme.AutoFlush = true; - mirandaTheme.WriteLine("Name\t=\t{0}", pack.name); - mirandaTheme.WriteLine("Author\t=\t{0}", pack.author); - mirandaTheme.WriteLine("Date\t=\t{0}", DateTime.Now); - mirandaTheme.WriteLine("Version\t=\t{0}", pack.version); - } - - protected override void WriteEntry(string file, string[] equivs) - { - mirandaTheme.WriteLine("Smiley\t= \"{0}\", 0, \"{1}\"", file, String.Join("\", \"", equivs)); - } - - protected override void EndFile() - { - mirandaTheme.Flush(); - mirandaTheme.Close(); - } -} - -class WIMSkin : SmileConfig -{ - private StreamWriter wimSkin; - - public WIMSkin(string path, PackInfo pack) - : base(pack, "WIM", path) - { - this.path = packRootPath + String.Format("{0}/", PackFullName); - this.imagePath = this.path + "PlurkSmilies/"; - Directory.CreateDirectory(this.path); - - wimSkin = new StreamWriter(this.path + pack.name + ".lua", false, Encoding.GetEncoding("utf-8")); - wimSkin.AutoFlush = true; - wimSkin.WriteLine("WIM_ClassicSkin.emoticons.definitions = {"); - - this.path += "Emoticons/"; - Directory.CreateDirectory(this.path); - } - - protected override void WriteEntry(string file, string[] equivs) - { - wimSkin.WriteLine("[\"{0}\"] = \"Interface\\\\AddOns\\\\PlurkSmilies\\\\Emoticons\\\\{1}\",", equivs[0], file); - } - - protected override void EndFile() - { - wimSkin.WriteLine("};"); - wimSkin.Flush(); - wimSkin.Close(); - } -} - -class GMailUserjs : SmileConfig -{ - private TemplateWriter tw; - private int counter = 0; - - public GMailUserjs(string path, PackInfo pack) - : base(pack, "Gmail", path) - { - this.path = packRootPath + String.Format("{0}/", PackFullName); - this.imagePath = this.path + "emo/"; - - Directory.CreateDirectory(this.imagePath); - - tw = new TemplateWriter("chrome.user.js", String.Format("{0}{1}.user.js", this.path, this.PathPackFullName), pack); - tw.AddReplacement("__PACKURL__", @"http://artyfarty.ru/emo/"); - - } - - protected override void WriteEntry(string file, string[] equivs) - { - tw.WriteLine(String.Format("['{0}','{1}'],", equivs[0], file)); - counter++; - } - - protected override void EndFile() - { - tw.data = tw.data.Substring(0, tw.data.Length - 2); - tw.Flush(); - } -} \ No newline at end of file diff --git a/UniversalEmoticonPackBuilder/emoticon_build.csproj b/UniversalEmoticonPackBuilder/emoticon_build.csproj index 824c9fd..2dd7e28 100644 --- a/UniversalEmoticonPackBuilder/emoticon_build.csproj +++ b/UniversalEmoticonPackBuilder/emoticon_build.csproj @@ -8,7 +8,7 @@ {FB29B9CB-D6D8-43F4-9011-538A0B9C7451} Exe Properties - QIPSmileBuilder + ConsoleUniversalEmoticonPackBuilder QIPSmileBuilder v4.0 Client @@ -34,9 +34,6 @@ 4 - - .\Ionic.Zip.dll - @@ -49,15 +46,18 @@ - - - Always + + + {2619794A-0A5D-4ED8-A3A8-1D36F1594CDC} + UniversalEmoticonPackBuilderLib + + + \ No newline at end of file diff --git a/UniversalEmoticonPackBuilderLib/main.cs b/UniversalEmoticonPackBuilderLib/main.cs new file mode 100644 index 0000000..e0502b6 --- /dev/null +++ b/UniversalEmoticonPackBuilderLib/main.cs @@ -0,0 +1,128 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Runtime.Serialization; +using System.IO; +using UniversalEmoticonPackBuilderLib.Builders; + +namespace UniversalEmoticonPackBuilderLib +{ + public static class UniversalEmoticonPackBuilder { + public static void BuildPacks(PackInfo packinfo, string build_dir, List requested_builders, string mapfile) + { + // Cleanup and create build dir + try + { + Directory.CreateDirectory(build_dir).Delete(true); + Directory.CreateDirectory(build_dir); + } + catch (IOException) + { + + } + + // Load builders + List builders = new List(); + foreach (var b in requested_builders) + switch (b) + { + case "qip": + builders.Add(new QipSmileConfig(build_dir, packinfo)); + break; + case "pidgin": + builders.Add(new PidginSmileConfig(build_dir, packinfo)); + break; + case "adium": + builders.Add(new AdiumSmileConfig(build_dir, packinfo)); + break; + case "miranda": + builders.Add(new MirandaSmileConfig(build_dir, packinfo)); + break; + case "wim": + builders.Add(new WIMSkin(build_dir, packinfo)); + break; + case "gmail": + builders.Add(new GMailUserjs(build_dir, packinfo)); + break; + } + + + // Load pack + Dictionary pack = new Dictionary(); + + if (mapfile.Length > 0) + { + string line; + var map = new StreamReader(mapfile); + while ((line = map.ReadLine()) != null) + { + if (line.IndexOf('#') == 0) continue; + var spl = line.Split(new[] { ':' }, 2); + if (spl.Length < 2) continue; + + var sname = spl[0]; + var scode = spl[1]; + pack.Add(sname, scode); + } + } + else + throw new Exception("No map defined");// pack = Config.Pack; + + // Build! + foreach (var s in pack) + builders.ForEach(c => c.CopySmiley(s.Key, s.Value.Split(','))); + + builders.ForEach(c => c.Finish()); + } + + public static void BuildPacks(BuilderConfig Config) + { + BuildPacks( + new PackInfo() { name = Config.name, version = Config.version, author = Config.author }, + "build/", + Config.builders, + Config.map + ); + } + } + + [DataContract] + public class BuilderConfig + { + [DataMember] + public string name; + [DataMember] + public string version; + [DataMember] + public string author; + [DataMember] + public string map; + [DataMember] + public List builders; + } + + // class that stores emoticon pack info + public class PackInfo + { + public string name; + public string version; + public string author; + + public string FullName + { + get + { + return String.Format("{0} {1} by {2}", name, version, author); + } + } + + public string Description + { + get + { + return FullName; + } + } + } +} diff --git a/examplePack/config.json b/examplePack/config.json new file mode 100644 index 0000000..082b75a --- /dev/null +++ b/examplePack/config.json @@ -0,0 +1,7 @@ +{ + "name":"Example", + "version":"1.0", + "author":"artyfarty", + "map":"map.txt", + "builders":["qip","adium","pidgin"] +} \ No newline at end of file diff --git a/examplePack/ff.gif b/examplePack/ff.gif new file mode 100644 index 0000000..d2c0d2f Binary files /dev/null and b/examplePack/ff.gif differ diff --git a/examplePack/fi.gif b/examplePack/fi.gif new file mode 100644 index 0000000..7584ed1 Binary files /dev/null and b/examplePack/fi.gif differ diff --git a/examplePack/fl.gif b/examplePack/fl.gif new file mode 100644 index 0000000..f5cd914 Binary files /dev/null and b/examplePack/fl.gif differ diff --git a/examplePack/ft.gif b/examplePack/ft.gif new file mode 100644 index 0000000..3b77703 Binary files /dev/null and b/examplePack/ft.gif differ diff --git a/examplePack/map.txt b/examplePack/map.txt new file mode 100644 index 0000000..9659a82 --- /dev/null +++ b/examplePack/map.txt @@ -0,0 +1,4 @@ +ff.gif:(fuu) +fi.gif:(gyay) +fl.gif:(aha) +ft.gif:(troll) \ No newline at end of file