// // keysyms.cs // // Author: // Jean-Philippe Bruyère // // Copyright (c) 2013-2017 Jean-Philippe Bruyère // // Permission is hereby granted, free of charge, to any person obtaining a copy // of this software and associated documentation files (the "Software"), to deal // in the Software without restriction, including without limitation the rights // to use, copy, modify, merge, publish, distribute, sublicense, and/or sell // copies of the Software, and to permit persons to whom the Software is // furnished to do so, subject to the following conditions: // // The above copyright notice and this permission notice shall be included in // all copies or substantial portions of the Software. // // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE // AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN // THE SOFTWARE. using System; using System.IO; namespace Tests { static class keysyms { public static void Main(string[] args) { using (StreamWriter sw = new StreamWriter ("test.cs")) { using (StreamReader r = new StreamReader ("/usr/include/xkbcommon/xkbcommon-keysyms.h")) { bool skip = false; int maxChar = 0; sw.WriteLine ("/* autogenerated */"); sw.WriteLine ("using System;\n"); sw.WriteLine ("namespace Crow.XCB"); sw.WriteLine ("{"); sw.WriteLine ("\t[Flags]"); sw.WriteLine ("\tpublic enum KeySym"); sw.WriteLine ("\t{"); r.ReadLine (); r.ReadLine (); while (!r.EndOfStream) { string s = r.ReadLine ().Trim(); if (skip) { if (s.EndsWith ("*/", StringComparison.Ordinal)) skip = false; continue; } if (s.StartsWith ("/*", StringComparison.Ordinal)) { if (!s.EndsWith ("*/", StringComparison.Ordinal)) skip = true; continue; } if (!s.StartsWith ("#define", StringComparison.Ordinal)) continue; string[] tmp = s.Split (new char[] {' ', '\t'}, StringSplitOptions.RemoveEmptyEntries); string keyName = tmp [1].Substring (8); if (char.IsDigit (keyName [0])) keyName = "key_" + keyName; if (keyName.Length > maxChar) maxChar = keyName.Length; int nbTab = keyName.Length / 4; nbTab = 8 - nbTab; sw.WriteLine ("\t\t{0}{1}= {2},", keyName, new String('\t',nbTab), tmp[2]); } sw.WriteLine ("\t}"); sw.WriteLine ("}"); Console.WriteLine ("max char: " + maxChar.ToString ()); } } } } }