public IEnumerable <SrgsDocument> GenerateGrammar() { // Get all interesting special folders var myStartMenu = Environment.GetFolderPath(Environment.SpecialFolder.StartMenu); var cmStartMenu = Environment.GetFolderPath(Environment.SpecialFolder.CommonStartMenu); var myDesktop = Environment.GetFolderPath(Environment.SpecialFolder.DesktopDirectory); var cmDesktop = Environment.GetFolderPath(Environment.SpecialFolder.CommonDesktopDirectory); // Search all link files var allFolders = new [] { myStartMenu, cmStartMenu, myDesktop, cmDesktop }; var lnkFiles = allFolders.SelectMany(f => Directory.GetFiles(f, "*.lnk", SearchOption.AllDirectories)); // Extract information from link files var lnks = ExtractStartMenuLinks(shell, lnkFiles).Distinct(); lnkDict = lnks.ToDictionary(k => k.Name, v => v.Path); // Create rule for opening var keys = lnkDict.Keys.OrderBy(k => k).ToArray(); var oRoot = new SrgsRule(RuleNames.First(), new SrgsItem(openPrefix), new SrgsOneOf(keys)); oRoot.Scope = SrgsRuleScope.Public; // Create rule for closing var cRoot = new SrgsRule(RuleNames.Last(), new SrgsItem(closePrefix), new SrgsOneOf(keys)); cRoot.Scope = SrgsRuleScope.Public; // Create document for opening var oDoc = new SrgsDocument(oRoot); oDoc.Mode = SrgsGrammarMode.Voice; yield return(oDoc); // Create document for closing var cDoc = new SrgsDocument(cRoot); cDoc.Mode = SrgsGrammarMode.Voice; yield return(cDoc); }
void ExportRuleNames(List <IdpeRule> allRules, RuleSetTypes ruleSetType) { List <IdpeRule> rules = allRules.Where(r => r.RuleSetType == (int)ruleSetType).ToList(); foreach (IdpeRule rule in rules) { RuleNames.Add(string.Format("{0}({1}):{2}", ruleSetType.ToString().PadRight(12), rule.Priority, rule.Name)); } }
public Keymap(Context context, string rules, string model, string layout, string variant, string options) { RuleNames names = new RuleNames(); names.rules = Marshal.StringToHGlobalAnsi(rules); names.model = Marshal.StringToHGlobalAnsi(model); names.layout = Marshal.StringToHGlobalAnsi(layout); names.variant = Marshal.StringToHGlobalAnsi(variant); names.options = Marshal.StringToHGlobalAnsi(options); IntPtr namesUnmanaged = Marshal.AllocHGlobal(Marshal.SizeOf(names)); Marshal.StructureToPtr(names, namesUnmanaged, false); Pointer = xkb_keymap_new_from_names(context.Pointer, namesUnmanaged, 0); Marshal.FreeHGlobal(namesUnmanaged); Marshal.FreeHGlobal(names.rules); Marshal.FreeHGlobal(names.model); Marshal.FreeHGlobal(names.layout); Marshal.FreeHGlobal(names.variant); Marshal.FreeHGlobal(names.options); }
internal static extern IntPtr KeymapNewFromNames(IntPtr context, ref RuleNames names, int flags);
/// <summary> /// Add a specific rule to the list, after checking if it is not there already /// </summary> /// <param name="rule">the rule to add</param> /// <param name="strRestrictionList">the string builder containing everything</param> private static void Addrestriction(StringBuilder strRestrictionList, RuleNames rule) { if (!CheckRestrictioninList(rule.ToString())) { if (strRestrictionList.Length == 0) strRestrictionList.Append(rule.ToString()); else strRestrictionList.Append("," + rule.ToString()); } }