| 969 | //============================================================================= |
| 970 | |
| 971 | static void ParseOptionMenuBody(FScanner &sc, DOptionMenuDescriptor *desc, int insertIndex) |
| 972 | { |
| 973 | sc.MustGetStringName("{"); |
| 974 | while (!sc.CheckString("}")) |
| 975 | { |
| 976 | sc.MustGetString(); |
| 977 | if (sc.Compare("else")) |
| 978 | { |
| 979 | SkipSubBlock(sc); |
| 980 | } |
| 981 | else if (sc.Compare("ifgame")) |
| 982 | { |
| 983 | if (!CheckSkipGameBlock(sc)) |
| 984 | { |
| 985 | // recursively parse sub-block |
| 986 | ParseOptionMenuBody(sc, desc, insertIndex); |
| 987 | } |
| 988 | } |
| 989 | else if (sc.Compare("ifnotgame")) |
| 990 | { |
| 991 | if (!CheckSkipGameBlock(sc, false)) |
| 992 | { |
| 993 | // recursively parse sub-block |
| 994 | ParseOptionMenuBody(sc, desc, insertIndex); |
| 995 | } |
| 996 | } |
| 997 | else if (sc.Compare("ifoption")) |
| 998 | { |
| 999 | if (!CheckSkipOptionBlock(sc)) |
| 1000 | { |
| 1001 | // recursively parse sub-block |
| 1002 | ParseOptionMenuBody(sc, desc, insertIndex); |
| 1003 | } |
| 1004 | } |
| 1005 | else if (sc.Compare("Class")) |
| 1006 | { |
| 1007 | sc.MustGetString(); |
| 1008 | PClass *cls = PClass::FindClass(sc.String); |
| 1009 | if (cls == nullptr || !cls->IsDescendantOf("OptionMenu")) |
| 1010 | { |
| 1011 | sc.ScriptError("Unknown menu class '%s'", sc.String); |
| 1012 | } |
| 1013 | desc->mClass = cls; |
| 1014 | } |
| 1015 | else if (sc.Compare({ "Title", "Caption" })) |
| 1016 | { |
| 1017 | sc.MustGetString(); |
| 1018 | desc->mTitle = sc.String; |
| 1019 | } |
| 1020 | else if (sc.Compare("Position")) |
| 1021 | { |
| 1022 | sc.MustGetNumber(); |
| 1023 | desc->mPosition = sc.Number; |
| 1024 | } |
| 1025 | else if (sc.Compare("DefaultSelection")) |
| 1026 | { |
| 1027 | sc.MustGetNumber(); |
| 1028 | desc->mSelectedItem = sc.Number; |
no test coverage detected