/* * Copyright 2008, Haiku. * Distributed under the terms of the MIT license. * * Authors: * Michael Pfeiffer */ #include "Parser.h" #include "Test.h" #include #include void TestParser() { Parser parser(gPPDFile); if (parser.InitCheck() != B_OK) { fprintf(stderr, "Could not open ppd file %s\n", gPPDFile); return; } Statement* statement; do { statement = parser.Parse(); if (statement != NULL) { statement->Print(); } delete statement; } while (statement != NULL); } #include "PPDParser.h" static PPD* OpenTestFile(bool all, bool timing) { BStopWatch* stopWatch = NULL; if (timing) { stopWatch = new BStopWatch("PPDParser"); } PPDParser parser(gPPDFile); if (parser.InitCheck() != B_OK) { fprintf(stderr, "Could not open ppd file %s\n", gPPDFile); return NULL; } PPD* ppd = all ? parser.ParseAll() : parser.ParseHeader(); delete stopWatch; if (ppd == NULL) { fprintf(stderr, "Parser returned NULL\n"); fprintf(stderr, "%s\n", parser.GetErrorMessage()); return NULL; } return ppd; } void TestPPDParser(bool all, bool verbose) { PPD* ppd = OpenTestFile(all, !verbose); if (ppd == NULL) return; if (verbose) { ppd->Print(); } delete ppd; } void ExtractChildren(StatementList* list, int level); void Indent(int level) { for (; level > 0; level --) { printf(" "); } } void PrintValue(const char* label, Value* arg, int level) { Indent(level); if (label != NULL) { printf("%s ", label); } if (arg != NULL) { BString* value = arg->GetValue(); BString* translation = arg->GetTranslation(); if (translation != NULL) { printf("%s", translation->String()); } if (value != NULL) { printf(" [%s]", value->String()); } } else { printf("NULL"); } printf("\n"); } bool ExtractGroup(Statement* statement, int level) { GroupStatement group(statement); if (group.IsOpenGroup()) { const char* translation = group.GetGroupTranslation(); Indent(level); if (translation != NULL) { printf("%s", translation); } const char* name = group.GetGroupName(); if (name != NULL) { printf("[%s]", name); } printf("\n"); ExtractChildren(statement->GetChildren(), level+1); return true; } return false; } void ExtractChildren(StatementList* list, int level) { if (list == NULL) return; for (int32 i = 0; i < list->Size(); i ++) { Statement* statement = list->StatementAt(i); if (!ExtractGroup(statement, level)) { if (statement->GetType() == Statement::kValue) { PrintValue(NULL, statement->GetOption(), level); } else if (statement->GetType() == Statement::kDefault) { PrintValue("Default", statement->GetValue(), level); } } } } void TestExtractUI() { PPD* ppd = OpenTestFile(true, false); if (ppd == NULL) return; for (int32 i = 0; i < ppd->Size(); i++) { Statement* statement = ppd->StatementAt(i); ExtractGroup(statement, 0); } }