| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203 | <?php$version = "2.1.6";require("source/objp.php");/** * Cocoa framework parser for Objective-Pascal *  * @author Ryan Joseph * @author Jonas Maebe **/// These files have duplicates in AppKit and Foundation so we ignore the foundation versions and everything is merged into AppKit# $duplicate_headers = array("foundation/NSAttributedString.inc", "foundation/NSAffineTransform.inc");$duplicate_headers = array();// Print only these files$only_files = null;$options = array();function HandleCommandLineOptions ($argv) {	global $options;	global $root_path;	global $ignore_headers;	global $only_files;		// Define defaults	$options["framework_path"] = "/System/Library/Frameworks";	foreach ($argv as $option) {		$pair = explode("=", $option);		$key = trim($pair[0], "-");		$value = $pair[1];				switch ($key) {						case 'root':				$root_path = trim($value, "\"");				break;							case 'header':				$where = explode("/", trim($value, "\""));				$options[$key]["framework"] = ucfirst($where[0]);				$options[$key]["name"] = $where[1];				$options["all"] = false;	// headers override -all				break;							case 'framework_path':				$options["framework_path"] = trim($value, "\"");				break;							case 'all':				$options[$key] = true;				break;			case 'encodings':				$options[$key] = true;				break;			case 'noprint':				$options[$key] = true;				break;							case 'comments':				$options[$key] = true;				break;						case 'docsets':				$options[$key] = true;				break;			case 'merge':				$options[$key] = true;				break;			case 'show':				$options[$key] = true;				break;							case 'reference':				$options[$key] = true;				break;						case 'iphone':				$options[$key] = true;				break;							case 'cocoa':				$options[$key] = true;				break;							case 'webkit':				$options[$key] = true;				break;						case 'sdk':				$options[$key] = trim($value, "\"");				break;			case 'ignore':				$ignore_headers = explode(",", trim($value, "\""));				break;			case 'only':				$only_files = explode(",", trim($value, "\""));				break;							case 'frameworks':				$options[$key] = explode(",", trim($value, "\""));				break;							default:				//print("unknown switch $key\n");				break;		}	}}// Print the script usage if the command line is emptyif (count($GLOBALS["argv"]) == 1) {	print("Cocoa Framework Parser ($version) usage:\n");	print("php parser.php [options]\n\n");	print("Options:\n\n");	print("  -all           	Print all headers (.h) from AppKit/Foundation frameworks.\n");	print("  -header=\"foundation/NSObject.h\"    Prints a single header from system frameworks (if specified) or direct path.\n");	print("  -root          	Sets the root path of the output directory.\n");	print("  -framework_path	Sets the root path of the frameworks directory (defaults to /System/Library/Frameworks).\n");	print("  -show     	    	Prints output to screen instead of file (mutually exclusive to -noprint).\n");	print("  -comments     		Parses comments.\n");	print("  -merge     		Headers are merged by difference (using diff/patch) instead of overwritten.\n");	print("  -ignore=\"NSObject.h,NSArray.h\"     Ignores the list of headers during parsing (-all only, no spaces).\n");	print("  -only=\"NSObject.h,NSArray.h\"       Only print these files (-all only, no spaces).\n");	print("  -noprint       	Parses but does not print.\n");	print("  -encodings    	 	Prints Pascal type encoding glue for GenerateTypeEncodings.p (-all only).\n");	print("  -iphone     		One-time parse for iPhone headers.\n");	print("  -cocoa     		One-time parse for Cocoa (AppKit/Foundation) headers.\n");	print("  -frameworks=\"appkit,foundation\"    List of supported frameworks to parse.\n");	print("\n\n");}// get the command line optionsif (count($GLOBALS["argv"]) > 1) {	HandleCommandLineOptions($GLOBALS["argv"]);	//print_r($options);}// Make the output directoryif ($options["out"]) {	@mkdir($root_path, 0777);	@mkdir($root_path."/foundation", 0777);	@mkdir($root_path."/appkit", 0777);	@mkdir($root_path."/uikit", 0777);}// setup -iphone optionsif ($options["iphone"]) {	$options["all"] = true;		if (!$options["sdk"]) $options["sdk"] = "4.2";		//$options["framework_path"] = "/Developer/Platforms/iPhoneOS.Platform/Developer/SDKs/iPhoneOS$sdk_version.sdk/System/Library/Frameworks";	$options["framework_path"] = "/Developer/Platforms/iPhoneSimulator.Platform/Developer/SDKs/iPhoneSimulator".$options["sdk"].".sdk/System/Library/Frameworks";		$options["frameworks"] = array("foundation","quartzcore","opengles","uikit");}// setup -cocoa optionsif ($options["cocoa"]) {	$options["all"] = true;	$options["frameworks"] = array("appkit","foundation","quartzcore");	$ignore_headers = array();}if ($options["webkit"]) {	$options["all"] = true;	$options["frameworks"] = array("foundation","webkit");}// create the parser instance$parser = new ObjectivePParser($root_path, "", $options["frameworks"],  $options["framework_path"], $options["show"]);// Set additional options// ??? These should be accessors$parser->parse_comments = $options["comments"];$parser->merge_headers = $options["merge"];$parser->parse_docsets = $options["docsets"];// Process single headersif ($options["header"] && !$options["all"]) {	$path = $options["framework_path"]."/".$options["header"]["framework"].".framework/Headers/".$options["header"]["name"];	print("* Processing $path...\n");	$parser->ProcessFile($path, !$options["noprint"]);}// Process all headersif ($options["all"]) {	$parser->ParseAllFrameworks($ignore_headers, null);	if (!$options["noprint"]) $parser->PrintAllHeaders("", $duplicate_headers, $only_files, $options["reference"]);}?>
 |