void Ctrl::ReadKeyMods(CParser& p) { const char *s = p.GetPtr(); if(*s) keyShift = *s++ == '1'; if(*s) keyCtrl = *s++ == '1'; if(*s) keyAlt = *s++ == '1'; }
static void ReadMacro(CParser& p) { IdeMacro macro; if(p.IsString()) { macro.menu = p.ReadString(); if(p.Char(':')) macro.submenu = p.ReadString(); } if(!p.IsChar('{')) macro.hotkey = ParseKeyDesc(p); EscLambda& l = macro.code.CreateLambda(); const char *t = p.GetPtr(); l.filename = p.GetFileName(); l.line = p.GetLine(); if(!p.Char('{')) p.ThrowError("missing '{'"); SkipBlock(p); l.code = String(t, p.GetPtr()); Array<IdeMacro>& mlist = UscMacros(); if(macro.hotkey) { int f = FindFieldIndex(mlist, &IdeMacro::hotkey, macro.hotkey); if(f >= 0) { PutConsole(NFormat("%s(%d): duplicate macro hotkey %s\n", l.filename, l.line, GetKeyDesc(macro.hotkey))); const EscLambda& lambda = UscMacros()[f].code.GetLambda(); PutConsole(NFormat("%s(%d): previously defined here\n", lambda.filename, lambda.line)); } } if(!IsNull(macro.menu)) { for(int i = 0; i < mlist.GetCount(); i++) if(mlist[i].menu == macro.menu && mlist[i].submenu == macro.submenu) { PutConsole(NFormat("%s(%d): duplicate macro menu item (%s:%s)\n", l.filename, l.line, macro.menu, macro.submenu)); const EscLambda& lambda = UscMacros()[i].code.GetLambda(); PutConsole(NFormat("%s(%d): previously defined here\n", lambda.filename, lambda.line)); break; } } mlist.Add(macro); }
String ReadPropertyParam(CParser& p) { const char *b = p.GetPtr(); int level = 0; while(!p.IsEof()) { if(p.IsChar(';')) break; if(p.IsChar(')') && level == 0) break; if(p.Char(')')) { if(level == 0) break; level--; } else if(p.Char('(')) level++; else p.SkipTerm(); } return TrimLeft(TrimRight(String(b, p.GetPtr()))); }