123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224 |
- <?php
- /* NOTE: If there is documentation for a new extension, the extension's
- classes, enums and flags will need to be added to the $classes array
- before this search script will work with it!! */
- /* set up the tools for the job - this array tests class and enum names
- in order to capitalize them correctly, throughout the search routines */
- $classes = array('GtkAccelGroup.', 'GtkAccelLabel.', 'GtkAdjustment.', 'GtkAlignment.', 'GtkArrow.', 'GtkAspectFrame.', 'GtkBin.', 'GtkBox.', 'GtkBoxChild.', 'GtkButton.', 'GtkButtonBox.', 'GtkCalendar.', 'GtkCheckButton.', 'GtkCheckMenuItem.', 'GtkCList.', 'GtkCListRow.', 'GtkColorSelection.', 'GtkColorSelectionDialog.', 'GtkCombo.', 'GtkContainer.', 'GtkCTree.', 'GtkCTreeNode.', 'GtkCurve.', 'GtkData.', 'GtkDialog.', 'GtkDrawingArea.', 'GtkEditable.', 'GtkEntry.', 'GtkEventBox.', 'GtkFileSelection.', 'GtkFixed.', 'GtkFixedChild.', 'GtkFontSelection.', 'GtkFontSelectionDialog.', 'GtkFrame.', 'GtkGammaCurve.', 'GtkHandleBox.', 'GtkHBox.', 'GtkHButtonBox.', 'GtkHPaned.', 'GtkHRuler.', 'GtkHScale.', 'GtkHScrollbar.', 'GtkHSeparator.', 'GtkImage.', 'GtkInputDialog.', 'GtkInvisible.', 'GtkItem.', 'GtkItemFactory.', 'GtkLabel.', 'GtkLayout.', 'GtkList.', 'GtkListItem.', 'GtkMenu.', 'GtkMenuBar.', 'GtkMenuItem.', 'GtkMenuShell.', 'GtkMisc.', 'GtkNotebook.', 'GtkObject.', 'GtkOptionMenu.', 'GtkPacker.', 'GtkPaned.', 'GtkPixmap.', 'GtkPlug.', 'GtkPreview.', 'GtkProgress.', 'GtkProgressbar.', 'GtkRadioButton.', 'GtkRadioMenuItem.', 'GtkRange.', 'GtkRuler.', 'GtkScale.', 'GtkScrollbar.', 'GtkScrolledWindow.', 'GtkSelectionData.', 'GtkSeparator.', 'GtkSocket.', 'GtkSpinButton.', 'GtkStatusBar.', 'GtkStyle.', 'GtkTable.', 'GtkTableChild.', 'GtkTearoffMenuItem.', 'GtkText.', 'GtkTipsQuery.', 'GtkToggleButton.', 'GtkToolBar.', 'GtkToolTips.', 'GtkTree.', 'GtkTreeItem.', 'GtkVBox.', 'GtkVButtonBox.', 'GtkViewport.', 'GtkVPaned.', 'GtkVRuler.', 'GtkVScale.', 'GtkVScrollbar.', 'GtkVSeparator.', 'GtkWidget.', 'GtkWindow.', 'GdkAtom.', 'GdkBitmap.', 'GdkColor.', 'GdkColormap.', 'GdkCursor.', 'GdkDragContext.', 'GdkEvent.', 'GdkEventAny.', 'GdkEventExpose.', 'GdkFont.', 'GdkGC.', 'GdkPixmap.', 'GdkVisual.', 'GdkWindow.', 'GdkCapStyle.', 'GdkCursorType.', 'GdkDragAction.', 'GdkEventMask.', 'GdkEventType.', 'GdkFill.', 'GdkFontType.', 'GdkFunction.', 'GdkInputCondition.', 'GdkJoinStyle.', 'GdkLineStyle.', 'GdkModifierType.', 'GdkRgbDither.', 'GdkSubwindowMode.', 'GdkVisualType.', 'GtkAccelFlags.', 'GtkAnchorType.', 'GtkArrowType.', 'GtkAttachOptions.', 'GtkButtonAction.', 'GtkButtonBoxStyle.', 'GtkCalendarDisplayOptions.', 'GtkCellType.', 'GtkCornerStyle.', 'GtkCTreeExpanderStyle.', 'GtkCTreeExpansionType.', 'GtkCTreeLineStyle.', 'GtkCurveType.', 'GtkDestDefaults.', 'GtkDirectionType.', 'GtkFontFilterType.', 'GtkFontType.', 'GtkJustification.', 'GtkObjectFlags.', 'GtkOrientation.', 'GtkPackerOptions.', 'GtkPackType.', 'GtkPolicyType.', 'GtkPositionType.', 'GtkPreviewType.', 'GtkProgressBarOrientation.', 'GtkProgressBarStyle.', 'GtkReliefStyle.', 'GtkResizeMode.', 'GtkScrollType.', 'GtkSelectionMode.', 'GtkShadowType.', 'GtkSideType.', 'GtkSortType.', 'GtkSpinButtonUpdatePolicy.', 'GtkSpinType.', 'GtkStateType.', 'GtkSubmenuPlacement.', 'GtkToolbarChildType.', 'GtkToolbarSpaceStyle.', 'GtkToolbarStyle.', 'GtkTreeViewMode.', 'GtkUpdateType.', 'GtkVisibility.', 'GtkWidgetFlags.', 'GtkWindowPosition.', 'GtkWindowType.', 'GtkScintilla.', 'GtkSQPane.', 'GladeXML.');
- function tryprefix($lang, $func, $prefix) {
- global $classes, $full_match;
- $full_match = (int)0;
- $types = array('method.', 'signal.', 'property.');
- $hit = array();
- $part = array();
- /* get the 'ext' element of gtk/gdk filenames */
- $first = substr($prefix, 0, 3);
- /* get the 'ext' element of non-gtk/gdk filenames */
- $ext = array();
- $dir = opendir("$_SERVER[DOCUMENT_ROOT]/manual1/$lang");
- while(($item = readdir($dir))!== false) {
- if(!is_dir($item)) {
- $part = explode('.', $item);
- if(strlen($part[0]) < 4 && $part[0] !== "gtk" && $part[0] !== "gdk" && !in_array($part[0], $ext))
- $ext[sizeof($ext)] = $part[0];
- }
- }
- closedir($dir);
- /* just so's we don't have to guess wildly at capitalisation in classes/enums */
- for($i = 0; $i < sizeof($classes); $i++) {
- if(stristr($classes[$i], "${func}.")) $pos = $i;
- }
- $realname = $classes[$pos];
- /* check for classes, enums and static functions */
- if(strstr($func, "gdk") || strstr($func, "gtk") || strstr($prefix, "method")) {
- /* check for full gtk/gdk function name (e.g. 'gtkwindow::set_title') */
- if(strstr($prefix, "method") && strlen($prefix) > 11) {
- $try = "/manual1/${lang}/${first}.${prefix}${func}.php";
- if (file_exists("$_SERVER[DOCUMENT_ROOT]$try")) {
- $full_match++;
- $hit[] = $try;
- }
- else {
- /* check for the same under other extensions */
- foreach($ext as $first) {
- $try = "/manual1/${lang}/${first}.${prefix}${func}.php";
- if (file_exists("$_SERVER[DOCUMENT_ROOT]$try")) {
- $full_match++;
- $hit[] = $try;
- }
- }
- }
- }
- else {
- /* check for a gtk/gdk static function, full class or enum name */
- $try = "/manual1/${lang}/${prefix}${func}.php";
- $constructor = "/manual1/${lang}/${prefix}${func}.constructor.php";
- if (file_exists("$_SERVER[DOCUMENT_ROOT]$constructor")) {
- $try = "/manual1/${lang}/${prefix}${realname}php";
- $constructor = "/manual1/${lang}/${prefix}${realname}constructor.php";
- $full_match = $full_match + 2;
- $hit = array($try, $constructor);
- }
- else if (file_exists("$_SERVER[DOCUMENT_ROOT]$try")) {
- $full_match++;
- $hit[] = $try;
- }
- else {
- $try = "/manual1/${lang}/${prefix}enum.${func}.php";
- if (file_exists("$_SERVER[DOCUMENT_ROOT]$try")) {
- $try = "/manual1/${lang}/${prefix}enum.${realname}php";
- $full_match++;
- $hit[] = $try;
- }
- }
- }
- }
- if(!$hit) {
- /* go through the extension classes */
- foreach($ext as $prefix) {
- $try = "/manual1/${lang}/${prefix}.${func}.php";
- $constructor = "/manual1/${lang}/${prefix}.${func}.constructor.php";
- if (file_exists("$_SERVER[DOCUMENT_ROOT]$constructor")) {
- $try = "/manual1/${lang}/${prefix}.${realname}php";
- $constructor = "/manual1/${lang}/${prefix}.${realname}constructor.php";
- $full_match = $full_match + 2;
- $hit = array($try, $constructor);
- }
- else if (file_exists("$_SERVER[DOCUMENT_ROOT]$try")) {
- $full_match++;
- $hit[] = $try;
- }
- else {
- /* cover against futureshock - non-g*k enums */
- $try = "/manual1/${lang}/${prefix}.enum.${func}.php";
- if (file_exists("$_SERVER[DOCUMENT_ROOT]$try")) {
- $try = "/manual1/${lang}/${prefix}.enum.${realname}php";
- $full_match++;
- $hit[] = $try;
- }
- }
- }
- }
- return $hit;
- }
- /**
- * 2006-10-27 FGM: this function needs to have the docs locally in order to work,
- * so for now I'm disabling it.
- *
- * @param unknown_type $lang
- * @param unknown_type $func
- * @param unknown_type $hit
- * @return unknown
- */
- function wildcard($lang, $func, $hit)
- {
- return null;
- global $classes, $full_match;
- $full_match = (int)0;
- $dir = opendir("$_SERVER[DOCUMENT_ROOT]/manual1/$lang");
- $dir = opendir("$_SERVER[DOCUMENT_ROOT]/manual1/$lang");
- while(($item = readdir($dir))!== false) {
- $part = explode('.', $item);
- $gtk = $part[0];
- $class = substr($part[1], 0, 3);
- $enum = substr($part[2], 0, 3);
- $method = substr($part[3], 0, 3);
- if($gtk == $class || $gtk == $enum || ($gtk !== "gtk" && $gtk !== "gdk")) {
- if(stristr($part[1], $func) || stristr($part[2], $func)) {
- if($part[2] !== "method" && $part[2] !== "property"
- && $part[2] !== "signal") {
- $try = "/manual1/${lang}/$item";
- if(file_exists("$_SERVER[DOCUMENT_ROOT]$try") &&
- !in_array($try, $hit)) {
- if(stristr($part[1], $func)) $uc = $part[1];
- else $uc = $part[2];
- for($i = 0; $i < sizeof($classes); $i++) {
- if(stristr($classes[$i], "$uc.")) $pos = $i;
- }
- $realname = $classes[$pos];
- if ($uc == $part[1]) {
- $try = "/manual1/${lang}/$part[0].$realname$part[2]";
- }
- else {
- $try = "/manual1/${lang}/$part[0].$part[1].$realname$part[3]";
- }
- similar_text(strtolower($func), strtolower($uc), $percent);
- if($percent == 100) $full_match++;
- if($percent > 50) $hit[] = $try;
- }
- }
- }
- }
- if($part[1] == "method") {
- if(strstr($part[2], $func)) {
- $try = "/manual1/${lang}/$item";
- if(file_exists("$_SERVER[DOCUMENT_ROOT]$try") && !in_array($try, $hit)) {
- similar_text(strtolower($func), strtolower($part[2]), $percent);
- if($percent == 100) $full_match++;
- if($percent > 50) $hit[] = $try;
- }
- }
- }
- if(($gtk == $class || ($gtk !== "gtk" && $gtk !== "gdk")) && strstr($part[3], $func)) {
- $try = "/manual1/${lang}/$item";
- if(file_exists("$_SERVER[DOCUMENT_ROOT]$try") && !in_array($try, $hit)) {
- for($i = 0; $i < sizeof($classes); $i++) {
- if(stristr($classes[$i], "$part[1].")) $pos = $i;
- }
- $realname = $classes[$pos];
- $try = "/manual1/${lang}/$part[0].$realname$part[2].$part[3].$part[4]";
- similar_text(strtolower($func), strtolower($part[3]), $percent);
- if($percent == 100) $full_match++;
- if($percent > 50) $hit[] = $try;
- }
- }
- }
- closedir($dir);
- return $hit;
- }
- function find_manual_page($lang, $function) {
- $tried = 0;
- $hit = array();
- /* fast track, single return :) */
- if(strstr($function, "::")) {
- list($funcpre, $funcpost) = split("::", $function);
- $try = tryprefix($lang, $funcpost, "$funcpre.method.");
- if($try) return $try;
- }
- elseif(strtolower(substr($function, 0, 3)) == "gtk" ||
- strtolower(substr($function, 0, 3 == "gdk"))) {
- $prefix = strtolower(substr($function, 0, 3));
- $try = tryprefix($lang, $function, "$prefix.");
- if($try) return $try;
- }
- else {
- /* if there's no :: or gtk in there we could be looking for anything */
- $try = wildcard($lang, $function, $hit);
- /* if($try) $result = array_merge($try, $result); */
- if ($try) return $try;
- }
- /*
- if($result) {
- return $result;
- }
- */
- return "";
- }
- ?>
|