EColorize::EColorize(const char *AName, const char *AParent) { Name = strdup(AName); SyntaxParser = HILIT_PLAIN; Next = Colorizers; hm = 0; Colorizers = this; Parent = FindColorizer(AParent); memset((void *)&Keywords, 0, sizeof(Keywords)); memset((void *)Colors, 0, sizeof(Colors)); if (Parent) { SyntaxParser = Parent->SyntaxParser; memcpy((void *)Colors, (void *)Parent->Colors, sizeof(Colors)); } else { SyntaxParser = HILIT_PLAIN; } }
static int SetModeString(EMode *mode, int what, const char *string) { int j = what; #ifdef CONFIG_SYNTAX_HILIT if (j == BFI_Colorizer) { mode->fColorize = FindColorizer(string); } else #endif if (j == BFI_EventMap) { mode->fEventMap = FindEventMap(string); #ifdef CONFIG_INDENT } else if (j == BFI_IndentMode) { mode->Flags.num[j] = GetIndentMode(string); #endif } else if (j == BFS_WordChars) { SetWordChars(mode->Flags.WordChars, string); } else if (j == BFS_CapitalChars) { SetWordChars(mode->Flags.CapitalChars, string); } else if (j == BFS_FileNameRx) { if (mode->MatchName) free(mode->MatchName); if (mode->MatchNameRx) RxFree(mode->MatchNameRx); mode->MatchName = strdup(string); mode->MatchNameRx = RxCompile(string); } else if (j == BFS_FirstLineRx) { if (mode->MatchLine) free(mode->MatchLine); if (mode->MatchLineRx) RxFree(mode->MatchLineRx); mode->MatchLine = strdup(string); mode->MatchLineRx = RxCompile(string); } else { if (mode->Flags.str[j & 0xFF]) free(mode->Flags.str[j & 0xFF]); mode->Flags.str[j & 0xFF] = strdup(string); } return 0; }
static int ReadConfigFile(CurPos &cp) { unsigned char obj; unsigned short len; { const char *p; obj = GetObj(cp, len); assert(obj == CF_STRING); if ((p = GetCharStr(cp, len)) == 0) return -1; if (ConfigSourcePath) free(ConfigSourcePath); ConfigSourcePath = strdup(p); } while ((obj = GetObj(cp, len)) != 0xFF) { switch (obj) { case CF_SUB: { const char *CmdName = GetCharStr(cp, len); if (ReadCommands(cp, CmdName) == -1) return -1; } break; case CF_MENU: { const char *MenuName = GetCharStr(cp, len); if (ReadMenu(cp, MenuName) == -1) return -1; } break; case CF_EVENTMAP: { EEventMap *EventMap = 0; const char *MapName = GetCharStr(cp, len); const char *UpMap = 0; if ((obj = GetObj(cp, len)) != CF_PARENT) return -1; if (len > 0) if ((UpMap = GetCharStr(cp, len)) == 0) return -1; // add new mode if ((EventMap = FindEventMap(MapName)) == 0) { EEventMap *OrgMap = 0; if (strcmp(UpMap, "") != 0) OrgMap = FindEventMap(UpMap); EventMap = new EEventMap(MapName, OrgMap); } else { if (EventMap->Parent == 0) EventMap->Parent = FindEventMap(UpMap); } if (ReadEventMap(cp, EventMap, MapName) == -1) return -1; } break; case CF_COLORIZE: { EColorize *Mode = 0; const char *ModeName = GetCharStr(cp, len); const char *UpMode = 0; if ((obj = GetObj(cp, len)) != CF_PARENT) return -1; if (len > 0) if ((UpMode = GetCharStr(cp, len)) == 0) return -1; // add new mode if ((Mode = FindColorizer(ModeName)) == 0) Mode = new EColorize(ModeName, UpMode); else { if (Mode->Parent == 0) Mode->Parent = FindColorizer(UpMode); } if (ReadColorize(cp, Mode, ModeName) == -1) return -1; } break; case CF_MODE: { EMode *Mode = 0; const char *ModeName = GetCharStr(cp, len); const char *UpMode = 0; if ((obj = GetObj(cp, len)) != CF_PARENT) return -1; if (len > 0) if ((UpMode = GetCharStr(cp, len)) == 0) return -1; // add new mode if ((Mode = FindMode(ModeName)) == 0) { EMode *OrgMode = 0; EEventMap *Map; if (strcmp(UpMode, "") != 0) OrgMode = FindMode(UpMode); Map = FindEventMap(ModeName); if (Map == 0) { EEventMap *OrgMap = 0; if (strcmp(UpMode, "") != 0) OrgMap = FindEventMap(UpMode); Map = new EEventMap(ModeName, OrgMap); } Mode = new EMode(OrgMode, Map, ModeName); Mode->fNext = Modes; Modes = Mode; } else { if (Mode->fParent == 0) Mode->fParent = FindMode(UpMode); } if (ReadMode(cp, Mode, ModeName) == -1) return -1; } break; case CF_OBJECT: { const char *ObjName; if ((ObjName = GetCharStr(cp, len)) == 0) return -1; if (ReadObject(cp, ObjName) == -1) return -1; } break; case CF_EOF: return 0; default: return -1; } } return -1; }