improved PHP parser
authoraxelcl <axelcl>
Sun, 6 Mar 2005 20:56:55 +0000 (20:56 +0000)
committeraxelcl <axelcl>
Sun, 6 Mar 2005 20:56:55 +0000 (20:56 +0000)
309 files changed:
net.sourceforge.phpeclipse/src/net/sourceforge/phpdt/core/ClasspathVariableInitializer.java
net.sourceforge.phpeclipse/src/net/sourceforge/phpdt/core/Flags.java
net.sourceforge.phpeclipse/src/net/sourceforge/phpdt/core/IClasspathEntry.java
net.sourceforge.phpeclipse/src/net/sourceforge/phpdt/core/ICompilationUnit.java
net.sourceforge.phpeclipse/src/net/sourceforge/phpdt/core/IImportDeclaration.java
net.sourceforge.phpeclipse/src/net/sourceforge/phpdt/core/IJavaElement.java
net.sourceforge.phpeclipse/src/net/sourceforge/phpdt/core/IJavaElementDelta.java
net.sourceforge.phpeclipse/src/net/sourceforge/phpdt/core/IJavaModelMarker.java
net.sourceforge.phpeclipse/src/net/sourceforge/phpdt/core/IJavaModelStatus.java
net.sourceforge.phpeclipse/src/net/sourceforge/phpdt/core/IJavaModelStatusConstants.java
net.sourceforge.phpeclipse/src/net/sourceforge/phpdt/core/ILocalVariable.java [new file with mode: 0644]
net.sourceforge.phpeclipse/src/net/sourceforge/phpdt/core/IMember.java
net.sourceforge.phpeclipse/src/net/sourceforge/phpdt/core/IPackageFragment.java
net.sourceforge.phpeclipse/src/net/sourceforge/phpdt/core/IType.java
net.sourceforge.phpeclipse/src/net/sourceforge/phpdt/core/JavaConventions.java [new file with mode: 0644]
net.sourceforge.phpeclipse/src/net/sourceforge/phpdt/core/JavaCore.java
net.sourceforge.phpeclipse/src/net/sourceforge/phpdt/core/JavaModelException.java
net.sourceforge.phpeclipse/src/net/sourceforge/phpdt/core/NamingConventions.java [new file with mode: 0644]
net.sourceforge.phpeclipse/src/net/sourceforge/phpdt/core/compiler/IProblem.java
net.sourceforge.phpeclipse/src/net/sourceforge/phpdt/core/compiler/IScanner.java
net.sourceforge.phpeclipse/src/net/sourceforge/phpdt/core/jdom/IDOMMember.java
net.sourceforge.phpeclipse/src/net/sourceforge/phpdt/core/search/IJavaSearchConstants.java
net.sourceforge.phpeclipse/src/net/sourceforge/phpdt/core/search/ITypeNameRequestor.java
net.sourceforge.phpeclipse/src/net/sourceforge/phpdt/externaltools/internal/dialog/ExternalToolVariableForm.java
net.sourceforge.phpeclipse/src/net/sourceforge/phpdt/externaltools/internal/model/ExternalToolsPlugin.java
net.sourceforge.phpeclipse/src/net/sourceforge/phpdt/externaltools/internal/registry/ArgumentVariable.java
net.sourceforge.phpeclipse/src/net/sourceforge/phpdt/externaltools/internal/registry/ArgumentVariableRegistry.java
net.sourceforge.phpeclipse/src/net/sourceforge/phpdt/externaltools/internal/registry/ExternalToolVariable.java
net.sourceforge.phpeclipse/src/net/sourceforge/phpdt/externaltools/internal/registry/ExternalToolVariableRegistry.java
net.sourceforge.phpeclipse/src/net/sourceforge/phpdt/externaltools/internal/registry/PathLocationVariable.java
net.sourceforge.phpeclipse/src/net/sourceforge/phpdt/externaltools/internal/registry/PathLocationVariableRegistry.java
net.sourceforge.phpeclipse/src/net/sourceforge/phpdt/externaltools/internal/registry/RefreshScopeVariable.java
net.sourceforge.phpeclipse/src/net/sourceforge/phpdt/externaltools/internal/registry/RefreshScopeVariableRegistry.java
net.sourceforge.phpeclipse/src/net/sourceforge/phpdt/externaltools/model/IExternalToolConstants.java
net.sourceforge.phpeclipse/src/net/sourceforge/phpdt/externaltools/model/StringMatcher.java
net.sourceforge.phpeclipse/src/net/sourceforge/phpdt/externaltools/model/ToolUtil.java
net.sourceforge.phpeclipse/src/net/sourceforge/phpdt/externaltools/variable/ResourceExpander.java
net.sourceforge.phpeclipse/src/net/sourceforge/phpdt/internal/codeassist/impl/AssistOptions.java [new file with mode: 0644]
net.sourceforge.phpeclipse/src/net/sourceforge/phpdt/internal/compiler/ASTVisitor.java
net.sourceforge.phpeclipse/src/net/sourceforge/phpdt/internal/compiler/AbstractSyntaxTreeVisitorAdapter.java
net.sourceforge.phpeclipse/src/net/sourceforge/phpdt/internal/compiler/Compiler.java
net.sourceforge.phpeclipse/src/net/sourceforge/phpdt/internal/compiler/DocumentElementParser.java
net.sourceforge.phpeclipse/src/net/sourceforge/phpdt/internal/compiler/IAbstractSyntaxTreeVisitor.java
net.sourceforge.phpeclipse/src/net/sourceforge/phpdt/internal/compiler/ISourceElementRequestor.java
net.sourceforge.phpeclipse/src/net/sourceforge/phpdt/internal/compiler/SourceElementParser.java
net.sourceforge.phpeclipse/src/net/sourceforge/phpdt/internal/compiler/batch/ClasspathDirectory.java [new file with mode: 0644]
net.sourceforge.phpeclipse/src/net/sourceforge/phpdt/internal/compiler/batch/CompilationUnit.java [new file with mode: 0644]
net.sourceforge.phpeclipse/src/net/sourceforge/phpdt/internal/compiler/batch/FileFinder.java [new file with mode: 0644]
net.sourceforge.phpeclipse/src/net/sourceforge/phpdt/internal/compiler/batch/FileSystem.java [new file with mode: 0644]
net.sourceforge.phpeclipse/src/net/sourceforge/phpdt/internal/compiler/batch/messages.properties [new file with mode: 0644]
net.sourceforge.phpeclipse/src/net/sourceforge/phpdt/internal/compiler/codegen/CaseLabel.java
net.sourceforge.phpeclipse/src/net/sourceforge/phpdt/internal/compiler/codegen/Label.java
net.sourceforge.phpeclipse/src/net/sourceforge/phpdt/internal/compiler/codegen/ObjectCache.java
net.sourceforge.phpeclipse/src/net/sourceforge/phpdt/internal/compiler/env/IBinaryField.java
net.sourceforge.phpeclipse/src/net/sourceforge/phpdt/internal/compiler/env/ISourceType.java
net.sourceforge.phpeclipse/src/net/sourceforge/phpdt/internal/compiler/flow/ExceptionHandlingFlowContext.java
net.sourceforge.phpeclipse/src/net/sourceforge/phpdt/internal/compiler/impl/CompilerOptions.java
net.sourceforge.phpeclipse/src/net/sourceforge/phpdt/internal/compiler/lookup/BlockScope.java
net.sourceforge.phpeclipse/src/net/sourceforge/phpdt/internal/compiler/lookup/MethodBinding.java
net.sourceforge.phpeclipse/src/net/sourceforge/phpdt/internal/compiler/lookup/MethodScope.java
net.sourceforge.phpeclipse/src/net/sourceforge/phpdt/internal/compiler/lookup/ProblemReferenceBinding.java
net.sourceforge.phpeclipse/src/net/sourceforge/phpdt/internal/compiler/lookup/Scope.java
net.sourceforge.phpeclipse/src/net/sourceforge/phpdt/internal/compiler/parser/AbstractCommentParser.java [new file with mode: 0644]
net.sourceforge.phpeclipse/src/net/sourceforge/phpdt/internal/compiler/parser/Parser.java
net.sourceforge.phpeclipse/src/net/sourceforge/phpdt/internal/compiler/parser/Scanner.java
net.sourceforge.phpeclipse/src/net/sourceforge/phpdt/internal/compiler/parser/UnitParser.java
net.sourceforge.phpeclipse/src/net/sourceforge/phpdt/internal/compiler/parser/VariableInfo.java [new file with mode: 0644]
net.sourceforge.phpeclipse/src/net/sourceforge/phpdt/internal/compiler/problem/DefaultProblem.java
net.sourceforge.phpeclipse/src/net/sourceforge/phpdt/internal/compiler/problem/DefaultProblemFactory.java
net.sourceforge.phpeclipse/src/net/sourceforge/phpdt/internal/compiler/problem/ProblemHandler.java
net.sourceforge.phpeclipse/src/net/sourceforge/phpdt/internal/compiler/problem/ProblemReporter.java
net.sourceforge.phpeclipse/src/net/sourceforge/phpdt/internal/compiler/util/HashtableOfIntValues.java [new file with mode: 0644]
net.sourceforge.phpeclipse/src/net/sourceforge/phpdt/internal/compiler/util/SuffixConstants.java [new file with mode: 0644]
net.sourceforge.phpeclipse/src/net/sourceforge/phpdt/internal/core/BatchOperation.java
net.sourceforge.phpeclipse/src/net/sourceforge/phpdt/internal/core/BufferFactoryWrapper.java
net.sourceforge.phpeclipse/src/net/sourceforge/phpdt/internal/core/ClasspathEntry.java
net.sourceforge.phpeclipse/src/net/sourceforge/phpdt/internal/core/CompilationUnit.java
net.sourceforge.phpeclipse/src/net/sourceforge/phpdt/internal/core/CompilationUnitProblemFinder.java
net.sourceforge.phpeclipse/src/net/sourceforge/phpdt/internal/core/CompilationUnitStructureRequestor.java
net.sourceforge.phpeclipse/src/net/sourceforge/phpdt/internal/core/INamingRequestor.java [new file with mode: 0644]
net.sourceforge.phpeclipse/src/net/sourceforge/phpdt/internal/core/IPathRequestor.java [new file with mode: 0644]
net.sourceforge.phpeclipse/src/net/sourceforge/phpdt/internal/core/ImportContainer.java
net.sourceforge.phpeclipse/src/net/sourceforge/phpdt/internal/core/ImportDeclaration.java
net.sourceforge.phpeclipse/src/net/sourceforge/phpdt/internal/core/ImportDeclarationElementInfo.java
net.sourceforge.phpeclipse/src/net/sourceforge/phpdt/internal/core/InternalNamingConventions.java [new file with mode: 0644]
net.sourceforge.phpeclipse/src/net/sourceforge/phpdt/internal/core/JavaElement.java
net.sourceforge.phpeclipse/src/net/sourceforge/phpdt/internal/core/JavaModel.java
net.sourceforge.phpeclipse/src/net/sourceforge/phpdt/internal/core/JavaModelManager.java
net.sourceforge.phpeclipse/src/net/sourceforge/phpdt/internal/core/JavaProject.java
net.sourceforge.phpeclipse/src/net/sourceforge/phpdt/internal/core/JavaProjectElementInfo.java
net.sourceforge.phpeclipse/src/net/sourceforge/phpdt/internal/core/LocalVariable.java [new file with mode: 0644]
net.sourceforge.phpeclipse/src/net/sourceforge/phpdt/internal/core/Member.java
net.sourceforge.phpeclipse/src/net/sourceforge/phpdt/internal/core/MemberElementInfo.java
net.sourceforge.phpeclipse/src/net/sourceforge/phpdt/internal/core/Openable.java
net.sourceforge.phpeclipse/src/net/sourceforge/phpdt/internal/core/PackageFragment.java
net.sourceforge.phpeclipse/src/net/sourceforge/phpdt/internal/core/PackageFragmentRoot.java
net.sourceforge.phpeclipse/src/net/sourceforge/phpdt/internal/core/ReconcileWorkingCopyOperation.java
net.sourceforge.phpeclipse/src/net/sourceforge/phpdt/internal/core/SetClasspathOperation.java
net.sourceforge.phpeclipse/src/net/sourceforge/phpdt/internal/core/SourceMethod.java
net.sourceforge.phpeclipse/src/net/sourceforge/phpdt/internal/core/SourceRefElement.java
net.sourceforge.phpeclipse/src/net/sourceforge/phpdt/internal/core/SourceRefElementInfo.java
net.sourceforge.phpeclipse/src/net/sourceforge/phpdt/internal/core/SourceType.java
net.sourceforge.phpeclipse/src/net/sourceforge/phpdt/internal/core/TypeVector.java [new file with mode: 0644]
net.sourceforge.phpeclipse/src/net/sourceforge/phpdt/internal/core/builder/AbstractImageBuilder.java
net.sourceforge.phpeclipse/src/net/sourceforge/phpdt/internal/core/builder/NameEnvironment.java
net.sourceforge.phpeclipse/src/net/sourceforge/phpdt/internal/core/jdom/DOMField.java
net.sourceforge.phpeclipse/src/net/sourceforge/phpdt/internal/core/jdom/DOMInitializer.java
net.sourceforge.phpeclipse/src/net/sourceforge/phpdt/internal/core/jdom/DOMMember.java
net.sourceforge.phpeclipse/src/net/sourceforge/phpdt/internal/core/jdom/DOMMethod.java
net.sourceforge.phpeclipse/src/net/sourceforge/phpdt/internal/core/jdom/DOMType.java
net.sourceforge.phpeclipse/src/net/sourceforge/phpdt/internal/core/jdom/SimpleDOMBuilder.java
net.sourceforge.phpeclipse/src/net/sourceforge/phpdt/internal/core/util/ASTNodeFinder.java [new file with mode: 0644]
net.sourceforge.phpeclipse/src/net/sourceforge/phpdt/internal/core/util/CommentRecorderParser.java
net.sourceforge.phpeclipse/src/net/sourceforge/phpdt/internal/core/util/CommentRecorderScanner.java
net.sourceforge.phpeclipse/src/net/sourceforge/phpdt/internal/core/util/LRUCache.java
net.sourceforge.phpeclipse/src/net/sourceforge/phpdt/internal/core/util/MementoTokenizer.java [new file with mode: 0644]
net.sourceforge.phpeclipse/src/net/sourceforge/phpdt/internal/core/util/SimpleDocument.java [new file with mode: 0644]
net.sourceforge.phpeclipse/src/net/sourceforge/phpdt/internal/core/util/SimpleLookupTable.java
net.sourceforge.phpeclipse/src/net/sourceforge/phpdt/internal/core/util/SimpleSet.java [new file with mode: 0644]
net.sourceforge.phpeclipse/src/net/sourceforge/phpdt/internal/core/util/SimpleWordSet.java [new file with mode: 0644]
net.sourceforge.phpeclipse/src/net/sourceforge/phpdt/internal/core/util/Util.java
net.sourceforge.phpeclipse/src/net/sourceforge/phpdt/internal/corext/codemanipulation/CodeGenerationMessages.java [moved from net.sourceforge.phpeclipse/src/net/sourceforge/phpdt/internal/ui/packageview/PackagesMessages.java with 60% similarity]
net.sourceforge.phpeclipse/src/net/sourceforge/phpdt/internal/corext/codemanipulation/CodeGenerationMessages.properties [new file with mode: 0644]
net.sourceforge.phpeclipse/src/net/sourceforge/phpdt/internal/corext/codemanipulation/GetterSetterUtil.java [new file with mode: 0644]
net.sourceforge.phpeclipse/src/net/sourceforge/phpdt/internal/corext/codemanipulation/IRequestQuery.java [new file with mode: 0644]
net.sourceforge.phpeclipse/src/net/sourceforge/phpdt/internal/corext/codemanipulation/StubUtility.java
net.sourceforge.phpeclipse/src/net/sourceforge/phpdt/internal/corext/template/php/CodeTemplates.java
net.sourceforge.phpeclipse/src/net/sourceforge/phpdt/internal/corext/template/php/HTMLContextType.java
net.sourceforge.phpeclipse/src/net/sourceforge/phpdt/internal/corext/template/php/HTMLUnitContext.java
net.sourceforge.phpeclipse/src/net/sourceforge/phpdt/internal/corext/template/php/JavaDocContext.java
net.sourceforge.phpeclipse/src/net/sourceforge/phpdt/internal/corext/template/php/JavaDocContextType.java
net.sourceforge.phpeclipse/src/net/sourceforge/phpdt/internal/corext/textmanipulation/MoveTextEdit.java
net.sourceforge.phpeclipse/src/net/sourceforge/phpdt/internal/corext/textmanipulation/SimpleTextEdit.java
net.sourceforge.phpeclipse/src/net/sourceforge/phpdt/internal/corext/textmanipulation/TextBuffer.java
net.sourceforge.phpeclipse/src/net/sourceforge/phpdt/internal/corext/textmanipulation/TextBufferEditor.java
net.sourceforge.phpeclipse/src/net/sourceforge/phpdt/internal/corext/textmanipulation/TextRange.java
net.sourceforge.phpeclipse/src/net/sourceforge/phpdt/internal/corext/util/CodeFormatterUtil.java
net.sourceforge.phpeclipse/src/net/sourceforge/phpdt/internal/corext/util/IOCloser.java
net.sourceforge.phpeclipse/src/net/sourceforge/phpdt/internal/corext/util/JavaModelUtil.java
net.sourceforge.phpeclipse/src/net/sourceforge/phpdt/internal/ui/PHPUIMessages.properties
net.sourceforge.phpeclipse/src/net/sourceforge/phpdt/internal/ui/actions/AddBlockCommentAction.java
net.sourceforge.phpeclipse/src/net/sourceforge/phpdt/internal/ui/actions/RemoveBlockCommentAction.java
net.sourceforge.phpeclipse/src/net/sourceforge/phpdt/internal/ui/filters/FilterDescriptor.java
net.sourceforge.phpeclipse/src/net/sourceforge/phpdt/internal/ui/filters/FilterMessages.properties
net.sourceforge.phpeclipse/src/net/sourceforge/phpdt/internal/ui/packageview/PackagesMessages.properties [deleted file]
net.sourceforge.phpeclipse/src/net/sourceforge/phpdt/internal/ui/packageview/SelectionTransferDragAdapter.java [deleted file]
net.sourceforge.phpeclipse/src/net/sourceforge/phpdt/internal/ui/preferences/AbstractConfigurationBlockPreferencePage.java
net.sourceforge.phpeclipse/src/net/sourceforge/phpdt/internal/ui/preferences/CodeAssistPreferencePage.java
net.sourceforge.phpeclipse/src/net/sourceforge/phpdt/internal/ui/preferences/CompilerPreferencePage.java
net.sourceforge.phpeclipse/src/net/sourceforge/phpdt/internal/ui/preferences/CompilerPropertyPage.java
net.sourceforge.phpeclipse/src/net/sourceforge/phpdt/internal/ui/preferences/FoldingConfigurationBlock.java
net.sourceforge.phpeclipse/src/net/sourceforge/phpdt/internal/ui/preferences/IPreferenceConfigurationBlock.java
net.sourceforge.phpeclipse/src/net/sourceforge/phpdt/internal/ui/preferences/JavaPreferencesSettings.java [new file with mode: 0644]
net.sourceforge.phpeclipse/src/net/sourceforge/phpdt/internal/ui/preferences/PreferencesMessages.properties
net.sourceforge.phpeclipse/src/net/sourceforge/phpdt/internal/ui/preferences/SpellingConfigurationBlock.java
net.sourceforge.phpeclipse/src/net/sourceforge/phpdt/internal/ui/preferences/SpellingPreferencePage.java
net.sourceforge.phpeclipse/src/net/sourceforge/phpdt/internal/ui/preferences/TodoTaskConfigurationBlock.java
net.sourceforge.phpeclipse/src/net/sourceforge/phpdt/internal/ui/preferences/TodoTaskPreferencePage.java
net.sourceforge.phpeclipse/src/net/sourceforge/phpdt/internal/ui/text/CustomSourceInformationControl.java
net.sourceforge.phpeclipse/src/net/sourceforge/phpdt/internal/ui/text/JavaBreakIterator.java
net.sourceforge.phpeclipse/src/net/sourceforge/phpdt/internal/ui/text/JavaHeuristicScanner.java
net.sourceforge.phpeclipse/src/net/sourceforge/phpdt/internal/ui/text/JavaReconciler.java
net.sourceforge.phpeclipse/src/net/sourceforge/phpdt/internal/ui/text/SmartSemicolonAutoEditStrategy.java
net.sourceforge.phpeclipse/src/net/sourceforge/phpdt/internal/ui/text/java/IInvocationContext.java
net.sourceforge.phpeclipse/src/net/sourceforge/phpdt/internal/ui/text/java/JavaExpandHover.java
net.sourceforge.phpeclipse/src/net/sourceforge/phpdt/internal/ui/text/link/LinkedPositionUI.java
net.sourceforge.phpeclipse/src/net/sourceforge/phpdt/internal/ui/text/link/ProposalPosition.java
net.sourceforge.phpeclipse/src/net/sourceforge/phpdt/internal/ui/text/spelling/AddWordProposal.java
net.sourceforge.phpeclipse/src/net/sourceforge/phpdt/internal/ui/text/spelling/HtmlTagDictionary.java
net.sourceforge.phpeclipse/src/net/sourceforge/phpdt/internal/ui/text/spelling/JavaDocTagDictionary.java
net.sourceforge.phpeclipse/src/net/sourceforge/phpdt/internal/ui/text/spelling/SpellCheckEngine.java
net.sourceforge.phpeclipse/src/net/sourceforge/phpdt/internal/ui/text/spelling/SpellReconcileDictionary.java
net.sourceforge.phpeclipse/src/net/sourceforge/phpdt/internal/ui/text/spelling/SpellReconcileStrategy.java
net.sourceforge.phpeclipse/src/net/sourceforge/phpdt/internal/ui/text/spelling/TaskTagDictionary.java
net.sourceforge.phpeclipse/src/net/sourceforge/phpdt/internal/ui/text/spelling/WordCorrectionProposal.java
net.sourceforge.phpeclipse/src/net/sourceforge/phpdt/internal/ui/text/spelling/WordIgnoreProposal.java
net.sourceforge.phpeclipse/src/net/sourceforge/phpdt/internal/ui/text/spelling/engine/AbstractSpellDictionary.java
net.sourceforge.phpeclipse/src/net/sourceforge/phpdt/internal/ui/text/spelling/engine/DefaultSpellChecker.java
net.sourceforge.phpeclipse/src/net/sourceforge/phpdt/internal/ui/text/spelling/engine/LocaleSensitiveSpellDictionary.java
net.sourceforge.phpeclipse/src/net/sourceforge/phpdt/internal/ui/text/spelling/engine/PersistentSpellDictionary.java
net.sourceforge.phpeclipse/src/net/sourceforge/phpdt/internal/ui/text/spelling/engine/SpellEvent.java
net.sourceforge.phpeclipse/src/net/sourceforge/phpdt/internal/ui/text/template/AbstractProposal.java
net.sourceforge.phpeclipse/src/net/sourceforge/phpdt/internal/ui/text/template/BuiltInEngine.java
net.sourceforge.phpeclipse/src/net/sourceforge/phpdt/internal/ui/text/template/BuiltInProposal.java
net.sourceforge.phpeclipse/src/net/sourceforge/phpdt/internal/ui/text/template/DeclarationEngine.java
net.sourceforge.phpeclipse/src/net/sourceforge/phpdt/internal/ui/text/template/DeclarationProposal.java
net.sourceforge.phpeclipse/src/net/sourceforge/phpdt/internal/ui/text/template/IdentifierEngine.java
net.sourceforge.phpeclipse/src/net/sourceforge/phpdt/internal/ui/text/template/IdentifierProposal.java
net.sourceforge.phpeclipse/src/net/sourceforge/phpdt/internal/ui/text/template/LocalVariableProposal.java
net.sourceforge.phpeclipse/src/net/sourceforge/phpdt/internal/ui/viewsupport/FilterUpdater.java [new file with mode: 0644]
net.sourceforge.phpeclipse/src/net/sourceforge/phpdt/internal/ui/viewsupport/JavaElementLabels.java
net.sourceforge.phpeclipse/src/net/sourceforge/phpdt/internal/ui/wizards/NewClassCreationWizard.java
net.sourceforge.phpeclipse/src/net/sourceforge/phpdt/ui/IContextMenuConstants.java
net.sourceforge.phpeclipse/src/net/sourceforge/phpdt/ui/IJavaElementSearchConstants.java [new file with mode: 0644]
net.sourceforge.phpeclipse/src/net/sourceforge/phpdt/ui/IPackagesViewPart.java [new file with mode: 0644]
net.sourceforge.phpeclipse/src/net/sourceforge/phpdt/ui/IWorkingCopyProvider.java
net.sourceforge.phpeclipse/src/net/sourceforge/phpdt/ui/JavaUI.java
net.sourceforge.phpeclipse/src/net/sourceforge/phpdt/ui/PreferenceConstants.java
net.sourceforge.phpeclipse/src/net/sourceforge/phpdt/ui/StandardJavaElementContentProvider.java
net.sourceforge.phpeclipse/src/net/sourceforge/phpdt/ui/actions/CustomFiltersActionGroup.java
net.sourceforge.phpeclipse/src/net/sourceforge/phpdt/ui/actions/GenerateActionGroup.java
net.sourceforge.phpeclipse/src/net/sourceforge/phpdt/ui/actions/PHPEditorActionDefinitionIds.java
net.sourceforge.phpeclipse/src/net/sourceforge/phpdt/ui/actions/PHPdtActionConstants.java
net.sourceforge.phpeclipse/src/net/sourceforge/phpdt/ui/text/JavaTextTools.java
net.sourceforge.phpeclipse/src/net/sourceforge/phpdt/ui/text/PHPSourceViewerConfiguration.java
net.sourceforge.phpeclipse/src/net/sourceforge/phpdt/ui/text/folding/package.html
net.sourceforge.phpeclipse/src/net/sourceforge/phpdt/ui/wizards/NewTypeWizardPage.java
net.sourceforge.phpeclipse/src/net/sourceforge/phpeclipse/PHPPerspectiveFactory.java
net.sourceforge.phpeclipse/src/net/sourceforge/phpeclipse/builder/IdentifierIndexManager.java
net.sourceforge.phpeclipse/src/net/sourceforge/phpeclipse/internal/compiler/ast/AND_AND_Expression.java
net.sourceforge.phpeclipse/src/net/sourceforge/phpeclipse/internal/compiler/ast/ASTNode.java
net.sourceforge.phpeclipse/src/net/sourceforge/phpeclipse/internal/compiler/ast/AbstractMethodDeclaration.java
net.sourceforge.phpeclipse/src/net/sourceforge/phpeclipse/internal/compiler/ast/AbstractVariableDeclaration.java
net.sourceforge.phpeclipse/src/net/sourceforge/phpeclipse/internal/compiler/ast/AllocationExpression.java
net.sourceforge.phpeclipse/src/net/sourceforge/phpeclipse/internal/compiler/ast/AnonymousLocalTypeDeclaration.java
net.sourceforge.phpeclipse/src/net/sourceforge/phpeclipse/internal/compiler/ast/Argument.java
net.sourceforge.phpeclipse/src/net/sourceforge/phpeclipse/internal/compiler/ast/ArrayAllocationExpression.java
net.sourceforge.phpeclipse/src/net/sourceforge/phpeclipse/internal/compiler/ast/ArrayInitializer.java
net.sourceforge.phpeclipse/src/net/sourceforge/phpeclipse/internal/compiler/ast/ArrayReference.java
net.sourceforge.phpeclipse/src/net/sourceforge/phpeclipse/internal/compiler/ast/AssertStatement.java
net.sourceforge.phpeclipse/src/net/sourceforge/phpeclipse/internal/compiler/ast/Assignment.java
net.sourceforge.phpeclipse/src/net/sourceforge/phpeclipse/internal/compiler/ast/BinaryExpression.java
net.sourceforge.phpeclipse/src/net/sourceforge/phpeclipse/internal/compiler/ast/Block.java
net.sourceforge.phpeclipse/src/net/sourceforge/phpeclipse/internal/compiler/ast/BreakStatement.java [moved from net.sourceforge.phpeclipse/src/net/sourceforge/phpeclipse/internal/compiler/ast/Break.java with 90% similarity]
net.sourceforge.phpeclipse/src/net/sourceforge/phpeclipse/internal/compiler/ast/CaseStatement.java [moved from net.sourceforge.phpeclipse/src/net/sourceforge/phpeclipse/internal/compiler/ast/Case.java with 84% similarity]
net.sourceforge.phpeclipse/src/net/sourceforge/phpeclipse/internal/compiler/ast/CastExpression.java
net.sourceforge.phpeclipse/src/net/sourceforge/phpeclipse/internal/compiler/ast/CharLiteral.java [deleted file]
net.sourceforge.phpeclipse/src/net/sourceforge/phpeclipse/internal/compiler/ast/ClassLiteralAccess.java [deleted file]
net.sourceforge.phpeclipse/src/net/sourceforge/phpeclipse/internal/compiler/ast/Clinit.java
net.sourceforge.phpeclipse/src/net/sourceforge/phpeclipse/internal/compiler/ast/CompilationUnitDeclaration.java
net.sourceforge.phpeclipse/src/net/sourceforge/phpeclipse/internal/compiler/ast/CompoundAssignment.java
net.sourceforge.phpeclipse/src/net/sourceforge/phpeclipse/internal/compiler/ast/ConditionalExpression.java
net.sourceforge.phpeclipse/src/net/sourceforge/phpeclipse/internal/compiler/ast/ConstructorDeclaration.java
net.sourceforge.phpeclipse/src/net/sourceforge/phpeclipse/internal/compiler/ast/ContinueStatement.java [moved from net.sourceforge.phpeclipse/src/net/sourceforge/phpeclipse/internal/compiler/ast/Continue.java with 91% similarity]
net.sourceforge.phpeclipse/src/net/sourceforge/phpeclipse/internal/compiler/ast/DefaultCase.java
net.sourceforge.phpeclipse/src/net/sourceforge/phpeclipse/internal/compiler/ast/DoStatement.java
net.sourceforge.phpeclipse/src/net/sourceforge/phpeclipse/internal/compiler/ast/DoubleLiteral.java
net.sourceforge.phpeclipse/src/net/sourceforge/phpeclipse/internal/compiler/ast/EmptyStatement.java
net.sourceforge.phpeclipse/src/net/sourceforge/phpeclipse/internal/compiler/ast/EqualExpression.java
net.sourceforge.phpeclipse/src/net/sourceforge/phpeclipse/internal/compiler/ast/ExplicitConstructorCall.java
net.sourceforge.phpeclipse/src/net/sourceforge/phpeclipse/internal/compiler/ast/Expression.java
net.sourceforge.phpeclipse/src/net/sourceforge/phpeclipse/internal/compiler/ast/ExtendedStringLiteral.java
net.sourceforge.phpeclipse/src/net/sourceforge/phpeclipse/internal/compiler/ast/FalseLiteral.java
net.sourceforge.phpeclipse/src/net/sourceforge/phpeclipse/internal/compiler/ast/FieldDeclaration.java
net.sourceforge.phpeclipse/src/net/sourceforge/phpeclipse/internal/compiler/ast/FieldReference.java
net.sourceforge.phpeclipse/src/net/sourceforge/phpeclipse/internal/compiler/ast/FloatLiteral.java
net.sourceforge.phpeclipse/src/net/sourceforge/phpeclipse/internal/compiler/ast/ForStatement.java
net.sourceforge.phpeclipse/src/net/sourceforge/phpeclipse/internal/compiler/ast/IfStatement.java
net.sourceforge.phpeclipse/src/net/sourceforge/phpeclipse/internal/compiler/ast/ImplicitDocTypeReference.java [new file with mode: 0644]
net.sourceforge.phpeclipse/src/net/sourceforge/phpeclipse/internal/compiler/ast/ImportReference.java
net.sourceforge.phpeclipse/src/net/sourceforge/phpeclipse/internal/compiler/ast/Initializer.java
net.sourceforge.phpeclipse/src/net/sourceforge/phpeclipse/internal/compiler/ast/InstanceOfExpression.java
net.sourceforge.phpeclipse/src/net/sourceforge/phpeclipse/internal/compiler/ast/IntLiteral.java
net.sourceforge.phpeclipse/src/net/sourceforge/phpeclipse/internal/compiler/ast/JavadocArrayQualifiedTypeReference.java [new file with mode: 0644]
net.sourceforge.phpeclipse/src/net/sourceforge/phpeclipse/internal/compiler/ast/JavadocArraySingleTypeReference.java [new file with mode: 0644]
net.sourceforge.phpeclipse/src/net/sourceforge/phpeclipse/internal/compiler/ast/JavadocQualifiedTypeReference.java [new file with mode: 0644]
net.sourceforge.phpeclipse/src/net/sourceforge/phpeclipse/internal/compiler/ast/JavadocReturnStatement.java [new file with mode: 0644]
net.sourceforge.phpeclipse/src/net/sourceforge/phpeclipse/internal/compiler/ast/JavadocSingleTypeReference.java [new file with mode: 0644]
net.sourceforge.phpeclipse/src/net/sourceforge/phpeclipse/internal/compiler/ast/LabeledStatement.java
net.sourceforge.phpeclipse/src/net/sourceforge/phpeclipse/internal/compiler/ast/Literal.java
net.sourceforge.phpeclipse/src/net/sourceforge/phpeclipse/internal/compiler/ast/LocalDeclaration.java
net.sourceforge.phpeclipse/src/net/sourceforge/phpeclipse/internal/compiler/ast/LocalTypeDeclaration.java
net.sourceforge.phpeclipse/src/net/sourceforge/phpeclipse/internal/compiler/ast/LongLiteral.java
net.sourceforge.phpeclipse/src/net/sourceforge/phpeclipse/internal/compiler/ast/MemberTypeDeclaration.java
net.sourceforge.phpeclipse/src/net/sourceforge/phpeclipse/internal/compiler/ast/MessageSend.java
net.sourceforge.phpeclipse/src/net/sourceforge/phpeclipse/internal/compiler/ast/MethodDeclaration.java
net.sourceforge.phpeclipse/src/net/sourceforge/phpeclipse/internal/compiler/ast/NullLiteral.java
net.sourceforge.phpeclipse/src/net/sourceforge/phpeclipse/internal/compiler/ast/OR_OR_Expression.java
net.sourceforge.phpeclipse/src/net/sourceforge/phpeclipse/internal/compiler/ast/OperatorExpression.java
net.sourceforge.phpeclipse/src/net/sourceforge/phpeclipse/internal/compiler/ast/PostfixExpression.java
net.sourceforge.phpeclipse/src/net/sourceforge/phpeclipse/internal/compiler/ast/PrefixExpression.java
net.sourceforge.phpeclipse/src/net/sourceforge/phpeclipse/internal/compiler/ast/QualifiedAllocationExpression.java
net.sourceforge.phpeclipse/src/net/sourceforge/phpeclipse/internal/compiler/ast/QualifiedNameReference.java
net.sourceforge.phpeclipse/src/net/sourceforge/phpeclipse/internal/compiler/ast/QualifiedSuperReference.java
net.sourceforge.phpeclipse/src/net/sourceforge/phpeclipse/internal/compiler/ast/QualifiedThisReference.java
net.sourceforge.phpeclipse/src/net/sourceforge/phpeclipse/internal/compiler/ast/QualifiedTypeReference.java
net.sourceforge.phpeclipse/src/net/sourceforge/phpeclipse/internal/compiler/ast/ReturnStatement.java
net.sourceforge.phpeclipse/src/net/sourceforge/phpeclipse/internal/compiler/ast/SingleNameReference.java
net.sourceforge.phpeclipse/src/net/sourceforge/phpeclipse/internal/compiler/ast/SingleTypeReference.java
net.sourceforge.phpeclipse/src/net/sourceforge/phpeclipse/internal/compiler/ast/Statement.java
net.sourceforge.phpeclipse/src/net/sourceforge/phpeclipse/internal/compiler/ast/StringLiteral.java
net.sourceforge.phpeclipse/src/net/sourceforge/phpeclipse/internal/compiler/ast/SwitchStatement.java
net.sourceforge.phpeclipse/src/net/sourceforge/phpeclipse/internal/compiler/ast/SynchronizedStatement.java [deleted file]
net.sourceforge.phpeclipse/src/net/sourceforge/phpeclipse/internal/compiler/ast/ThisReference.java
net.sourceforge.phpeclipse/src/net/sourceforge/phpeclipse/internal/compiler/ast/ThrowStatement.java
net.sourceforge.phpeclipse/src/net/sourceforge/phpeclipse/internal/compiler/ast/TrueLiteral.java
net.sourceforge.phpeclipse/src/net/sourceforge/phpeclipse/internal/compiler/ast/TryStatement.java
net.sourceforge.phpeclipse/src/net/sourceforge/phpeclipse/internal/compiler/ast/TypeDeclaration.java
net.sourceforge.phpeclipse/src/net/sourceforge/phpeclipse/internal/compiler/ast/TypeReference.java
net.sourceforge.phpeclipse/src/net/sourceforge/phpeclipse/internal/compiler/ast/UnaryExpression.java
net.sourceforge.phpeclipse/src/net/sourceforge/phpeclipse/internal/compiler/ast/WhileStatement.java
net.sourceforge.phpeclipse/src/net/sourceforge/phpeclipse/obfuscator/PHPIdentifier.java
net.sourceforge.phpeclipse/src/net/sourceforge/phpeclipse/phpeditor/CustomBufferFactory.java
net.sourceforge.phpeclipse/src/net/sourceforge/phpeclipse/phpeditor/IJavaAnnotation.java
net.sourceforge.phpeclipse/src/net/sourceforge/phpeclipse/phpeditor/JavaMarkerAnnotation.java
net.sourceforge.phpeclipse/src/net/sourceforge/phpeclipse/phpeditor/JavaOutlinePage.java
net.sourceforge.phpeclipse/src/net/sourceforge/phpeclipse/phpeditor/JavaSelectMarkerRulerAction2.java
net.sourceforge.phpeclipse/src/net/sourceforge/phpeclipse/phpeditor/PHPDocumentProvider.java
net.sourceforge.phpeclipse/src/net/sourceforge/phpeclipse/phpeditor/PHPEditor.java
net.sourceforge.phpeclipse/src/net/sourceforge/phpeclipse/phpeditor/PHPEditorActionDefinitionIds.java
net.sourceforge.phpeclipse/src/net/sourceforge/phpeclipse/phpeditor/PHPSyntaxRdr.java
net.sourceforge.phpeclipse/src/net/sourceforge/phpeclipse/phpeditor/PHPUnitEditor.java
net.sourceforge.phpeclipse/src/net/sourceforge/phpeclipse/phpeditor/WorkingCopyManager.java
net.sourceforge.phpeclipse/src/net/sourceforge/phpeclipse/phpeditor/html/HTMLFormattingStrategy.java
net.sourceforge.phpeclipse/src/net/sourceforge/phpeclipse/phpeditor/php/HTMLWordExtractor.java
net.sourceforge.phpeclipse/src/net/sourceforge/phpeclipse/phpeditor/php/PHPCompletionProcessor.java
net.sourceforge.phpeclipse/src/net/sourceforge/phpeclipse/phpeditor/php/PHPKeyword.java
net.sourceforge.phpeclipse/src/net/sourceforge/phpeclipse/phpeditor/phpsyntax.xml [deleted file]
net.sourceforge.phpeclipse/src/net/sourceforge/phpeclipse/phpeditor/syntax.xml [new file with mode: 0644]

index ab9b778..54792db 100644 (file)
@@ -14,7 +14,7 @@ package net.sourceforge.phpdt.core;
 /**
  * Abstract base implementation of all classpath variable initializers.
  * Classpath variable initializers are used in conjunction with the
- * "org.eclipse.jdt.core.classpathVariableInitializer" extension point.
+ * "net.sourceforge.phpdt.core.classpathVariableInitializer" extension point.
  * <p>
  * Clients should subclass this class to implement a specific classpath
  * variable initializer. The subclass must have a public 0-argument
index a9ccaae..9182b7f 100644 (file)
@@ -24,7 +24,7 @@ import net.sourceforge.phpdt.internal.compiler.env.IConstants;
  * Note that the numeric values of these flags match the ones for class files
  * as described in the Java Virtual Machine Specification. The AST class
  * <code>Modifier</code> provides the same functionality as this class, only in
- * the <code>org.eclipse.jdt.core.dom</code> package.
+ * the <code>net.sourceforge.phpdt.core.dom</code> package.
  * </p>
  *
  * @see IMember#getFlags
index 83de070..8d6e929 100644 (file)
@@ -65,7 +65,7 @@ import org.eclipse.core.runtime.IPath;
  *             and gets resolved, to either a project or library entry, using
  *      <code>JavaCore#getResolvedClasspathVariable</code>.
  *             It is also possible to register an automatic initializer (<code>ClasspathVariableInitializer</code>),
- *     which will be invoked through the extension point "org.eclipse.jdt.core.classpathVariableInitializer".
+ *     which will be invoked through the extension point "net.sourceforge.phpdt.core.classpathVariableInitializer".
  *     After resolution, a classpath variable entry may either correspond to a project or a library entry. </li>
  * 
  *  <li> A named classpath container identified by its container path.
@@ -79,7 +79,7 @@ import org.eclipse.core.runtime.IPath;
  *     which can be used as additional hints for resolving this container reference. If no container was ever 
  *     recorded for this container path onto this project (using <code>setClasspathContainer</code>, 
  *     then a <code>ClasspathContainerInitializer</code> will be activated if any was registered for this 
- *     container ID onto the extension point "org.eclipse.jdt.core.classpathContainerInitializer".
+ *     container ID onto the extension point "net.sourceforge.phpdt.core.classpathContainerInitializer".
  *     A classpath container entry can be resolved explicitly using <code>JavaCore#getClasspathContainer</code>
  *     and the resulting container entries can contain any non-container entry. In particular, it may contain variable
  *     entries, which in turn needs to be resolved before being directly used. 
@@ -257,6 +257,55 @@ public interface IClasspathEntry {
         * @since 2.1
         */
        IPath[] getExclusionPatterns();
+       /**
+        * Returns the set of patterns used to explicitly define resources to be
+        * included with this source entry.
+        * <p>
+        * When no inclusion patterns are specified, the source entry includes all
+        * relevent files in the resource tree rooted at this source entry's path.
+        * Specifying one or more inclusion patterns means that only the specified
+        * portions of the resource tree are to be included. Each path specified
+        * must be a relative path, and will be interpreted relative to this source
+        * entry's path. File patterns are case-sensitive. A file matched by one or
+        * more of these patterns is included in the corresponding package fragment
+        * root unless it is excluded by one or more of this entrie's exclusion
+        * patterns. Exclusion patterns have higher precedence than inclusion
+        * patterns; in other words, exclusion patterns can remove files for the
+        * ones that are to be included, not the other way around.
+        * </p>
+        * <p>
+        * See {@link #getExclusionPatterns()} for a discussion of the syntax and
+        * semantics of path patterns. The absence of any inclusion patterns is
+        * semantically equivalent to the explicit inclusion pattern
+        * <code>&#42;&#42;</code>.
+        * </p>
+        * <p>
+        * Examples:
+        * <ul>
+        * <li>
+        * The inclusion pattern <code>src/&#42;&#42;</code> by itself includes all
+        * files under a root folder named <code>src</code>.
+        * </li>
+        * <li>
+        * The inclusion patterns <code>src/&#42;&#42;</code> and
+        * <code>tests/&#42;&#42;</code> includes all files under the root folders
+        * named <code>src</code> and <code>tests</code>.
+        * </li>
+        * <li>
+        * The inclusion pattern <code>src/&#42;&#42;</code> together with the
+        * exclusion pattern <code>src/&#42;&#42;/Foo.java</code> includes all
+        * files under a root folder named <code>src</code> except for ones
+        * named <code>Foo.java</code>.
+        * </li>
+        * </ul>
+        * </p>
+        * 
+        * @return the possibly empty list of resource inclusion patterns 
+        *   associated with this source entry, and <code>null</code> for other
+        *   kinds of classpath entries
+        * @since 3.0
+        */
+       IPath[] getInclusionPatterns();
        
        /**
         * Returns the full path to the specific location where the builder writes 
index c25a7cc..dd57c8f 100644 (file)
@@ -10,6 +10,8 @@
  *******************************************************************************/
 package net.sourceforge.phpdt.core;
 
+import java.util.HashMap;
+
 import net.sourceforge.phpdt.internal.core.ImportContainer;
 
 import org.eclipse.core.runtime.IProgressMonitor;
@@ -234,7 +236,18 @@ IJavaElement getElementAt(int position) throws JavaModelException;
  *     or <code>"java.awt.*"</code>)
  * @return a handle onto the corresponding import declaration. The import declaration may or may not exist.
  */
-//IImportDeclaration getImport(String name) ;
+IImportDeclaration getImport(String name) ;
+/**
+ * Returns the import declarations in this compilation unit
+ * in the order in which they appear in the source. This is
+ * a convenience method - import declarations can also be
+ * accessed from a compilation unit's import container.
+ *
+ * @return the import declarations in this compilation unit
+ * @throws JavaModelException if this element does not exist or if an
+ *             exception occurs while accessing its corresponding resource
+ */
+IImportDeclaration[] getImports() throws JavaModelException;
 /**
  * Returns the import container for this compilation unit.
  * This is a handle-only method. The import container may or
@@ -243,7 +256,7 @@ IJavaElement getElementAt(int position) throws JavaModelException;
  * @return a handle onto the corresponding import container. The 
  *             import contain may or may not exist.
  */
-ImportContainer getImportContainer();
+IImportContainer getImportContainer();
 /**
  * Returns the import declarations in this compilation unit
  * in the order in which they appear in the source. This is
@@ -272,7 +285,7 @@ IPackageDeclaration getPackageDeclaration(String name);
  * @exception JavaModelException if this element does not exist or if an
  *             exception occurs while accessing its corresponding resource
  */
-//IPackageDeclaration[] getPackageDeclarations() throws JavaModelException;
+IPackageDeclaration[] getPackageDeclarations() throws JavaModelException;
 /**
  * Returns the primary compilation unit (whose owner is the primary owner)
  * this working copy was created from, or this compilation unit if this a primary
@@ -295,7 +308,7 @@ ICompilationUnit getPrimary();
  * @return a handle onto the corresponding type. The type may or may not exist.
  * @see JavaConventions#validateCompilationUnitName(String name)
  */
-IType getType(String name);
+IType getType(String name); 
 /**
  * Returns the top-level types declared in this compilation unit
  * in the order in which they appear in the source.
index c8587e9..812bc64 100644 (file)
@@ -11,6 +11,7 @@
  *******************************************************************************/
 package net.sourceforge.phpdt.core;
 
+
 /**
  * Represents an import declaration in Java compilation unit.
  * <p>
@@ -47,4 +48,5 @@ int getFlags() throws JavaModelException;
  * @return true if the import is on-demand, false otherwise
  */
 boolean isOnDemand();
+
 }
index 07f17f3..cea7b63 100644 (file)
@@ -112,6 +112,12 @@ public interface IJavaElement extends IAdaptable {
        int IMPORT_DECLARATION = 13;
 
        /**
+        * Constant representing a local variable declaration.
+        * A Java element with this type can be safely cast to <code>ILocalVariable</code>.
+        * @since 3.0
+        */
+       int LOCAL_VARIABLE = 14;
+       /**
         * Returns whether this Java element exists in the model.
         * <p>
         * Java elements are handle objects that may or may not be backed by an
index 9fe7eb5..61f2ce9 100644 (file)
@@ -245,6 +245,22 @@ public interface IJavaElementDelta {
         * @since 3.0
         */
        public int F_PRIMARY_WORKING_COPY = 0x10000;
+       
+       /**
+        * Change flag indicating that the raw classpath (or the output folder) of a project has changed. 
+        * This flag is only valid if the element is an <code>IJavaProject</code>.
+        *
+        * @since 3.0
+        */
+       public int F_CLASSPATH_CHANGED = 0x20000;
+
+       /**
+        * Change flag indicating that the resource of a primary compilation unit has changed.
+        * This flag is only valid if the element is a primary <code>ICompilationUnit</code>.
+        * 
+        * @since 3.0
+        */
+       public int F_PRIMARY_RESOURCE = 0x40000;
        /**
         * Returns deltas for the children that have been added.
         * @return deltas for the children that have been added
index e31c253..9c5dd12 100644 (file)
@@ -21,7 +21,7 @@ package net.sourceforge.phpdt.core;
 public interface IJavaModelMarker {
 
        /**
-        * Java model problem marker type (value <code>"org.eclipse.jdt.core.problem"</code>).
+        * Java model problem marker type (value <code>"net.sourceforge.phpdt.core.problem"</code>).
         * This can be used to recognize those markers in the workspace that flag problems 
         * detected by the Java tooling during compilation.
         */
@@ -29,7 +29,7 @@ public interface IJavaModelMarker {
 
 
        /**
-        * Java model transient problem marker type (value <code>"org.eclipse.jdt.core.transient_problem"</code>).
+        * Java model transient problem marker type (value <code>"net.sourceforge.phpdt.core.transient_problem"</code>).
         * This can be used to recognize those markers in the workspace that flag transient
         * problems detected by the Java tooling (such as a problem
         * detected by the outliner, or a problem detected during a code completion)
@@ -37,11 +37,11 @@ public interface IJavaModelMarker {
        public static final String TRANSIENT_PROBLEM = JavaCore.PLUGIN_ID + ".transient_problem"; //$NON-NLS-1$
 
        /**
-        * Java model task marker type (value <code>"org.eclipse.jdt.core.task"</code>).
+        * Java model task marker type (value <code>"net.sourceforge.phpdt.core.task"</code>).
         * This can be used to recognize task markers in the workspace that correspond to tasks
         * specified in Java source comments and detected during compilation (for example, 'TO-DO: ...').
         * Tasks are identified by a task tag, which can be customized through <code>PHPCore</code>
-        * option <code>"org.eclipse.jdt.core.compiler.taskTag"</code>.
+        * option <code>"net.sourceforge.phpdt.core.compiler.taskTag"</code>.
         * @since 2.1
         */
        public static final String TASK_MARKER = JavaCore.PLUGIN_ID + ".task"; //$NON-NLS-1$
@@ -76,7 +76,7 @@ public interface IJavaModelMarker {
         public static final String CYCLE_DETECTED = "cycleDetected"; //$NON-NLS-1$
 
        /**
-        * Build path problem marker type (value <code>"org.eclipse.jdt.core.buildpath_problem"</code>).
+        * Build path problem marker type (value <code>"net.sourceforge.phpdt.core.buildpath_problem"</code>).
         * This can be used to recognize those markers in the workspace that flag problems 
         * detected by the Java tooling during classpath setting.
         */
index 98c8565..6f55b0c 100644 (file)
@@ -19,7 +19,7 @@ import org.eclipse.core.runtime.IStatus;
  * wrong.
  * <p>
  * Java model status object are distinguished by their plug-in id:
- * <code>getPlugin</code> returns <code>"org.eclipse.jdt.core"</code>.
+ * <code>getPlugin</code> returns <code>"net.sourceforge.phpdt.core"</code>.
  * <code>getCode</code> returns one of the status codes declared in
  * <code>IJavaModelStatusConstants</code>.
  * </p>
index b089522..f31517d 100644 (file)
@@ -267,7 +267,7 @@ public interface IJavaModelStatusConstants {
         * Status constant indicating that an exclusion pattern got specified
         * on a classpath source entry, though it was explicitely disabled 
         * according to its project preference settings.
-        * @see org.eclipse.jdt.core.IJavaProject#getOptions(boolean)
+        * @see net.sourceforge.phpdt.core.IJavaProject#getOptions(boolean)
         * @since 2.1
         */
        public static final int DISABLED_CP_EXCLUSION_PATTERNS = 1002;
@@ -276,7 +276,7 @@ public interface IJavaModelStatusConstants {
         * Status constant indicating that a specific output location got associated
         * with a source entry, though it was explicitely disabled according to its project
         * preference settings.
-        * @see org.eclipse.jdt.core.IJavaProject#getOptions(boolean)
+        * @see net.sourceforge.phpdt.core.IJavaProject#getOptions(boolean)
         * @since 2.1
         */
        public static final int DISABLED_CP_MULTIPLE_OUTPUT_LOCATIONS = 1003;
diff --git a/net.sourceforge.phpeclipse/src/net/sourceforge/phpdt/core/ILocalVariable.java b/net.sourceforge.phpeclipse/src/net/sourceforge/phpdt/core/ILocalVariable.java
new file mode 100644 (file)
index 0000000..1c9f549
--- /dev/null
@@ -0,0 +1,55 @@
+/*******************************************************************************
+ * Copyright (c) 2000, 2004 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials 
+ * are made available under the terms of the Common Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/cpl-v10.html
+ * 
+ * Contributors:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+package net.sourceforge.phpdt.core;
+
+/**
+ * Represents a local variable declared in a method or an initializer.
+ * <code>ILocalVariable</code> are pseudo-elements created as the result of a <code>ICodeAssist.codeSelect(...)</code>
+ * operation. They are not part of the Java model (<code>exists()</code> returns whether the parent exists rather than 
+ * whether the local variable exists in the parent) and they are not included in the children of an <code>IMethod</code> 
+ * or an <code>IInitializer</code>.
+ * <p>
+ * In particular such a pseudo-element should not be used as a handle. For example its name range won't be updated
+ * if the underlying source changes.
+ * </p><p>
+ * This interface is not intended to be implemented by clients.
+ * </p>
+ * @since 3.0
+ */
+public interface ILocalVariable extends IJavaElement, ISourceReference {
+
+       /**
+        * Returns the name of this local variable.
+        * 
+        * @return the name of this local variable.
+        */
+       String getElementName();
+       
+       /**
+        * Returns the source range of this local variable's name.
+        *
+        * @return the source range of this local variable's name
+        */
+       ISourceRange getNameRange();
+       
+       /**
+        * Returns the type signature of this local variable.
+        * <p>
+        * The type signature may be either unresolved (for source types)
+        * or resolved (for binary types), and either basic (for basic types)
+        * or rich (for parameterized types). See {@link Signature} for details.
+        * </p>
+        *
+        * @return the type signature of this local variable.
+        * @see Signature
+        */
+       String getTypeSignature();
+}
index 68446bd..8365ab6 100644 (file)
@@ -10,6 +10,8 @@
  *******************************************************************************/
 package net.sourceforge.phpdt.core;
 
+import net.sourceforge.phpdt.core.IType;
+
 /**
  * Common protocol for Java elements that can be members of types.
  * This set consists of <code>IType</code>, <code>IMethod</code>, 
@@ -18,7 +20,7 @@ package net.sourceforge.phpdt.core;
  * This interface is not intended to be implemented by clients.
  * </p>
  */
-public interface IMember extends IJavaElement , ISourceReference, ISourceManipulation {
+public interface IMember extends IJavaElement , ISourceReference, ISourceManipulation, IParent {
 /**
  * Returns the class file in which this member is declared, or <code>null</code>
  * if this member is not declared in a class file (for example, a source type).
@@ -75,6 +77,20 @@ int getFlags() throws JavaModelException;
  */
 ISourceRange getNameRange() throws JavaModelException;
 /**
+ * Returns the local or anonymous type declared in this source member with the given simple name and/or
+ * with the specified position relative to the order they are defined in the source.
+ * The name is empty if it is an anonymous type.
+ * Numbering starts at 1 (thus the first occurrence is occurrence 1, not occurrence 0).
+ * This is a handle-only method. The type may or may not exist.
+ * Throws a <code>RuntimeException</code> if this member is not a source member.
+ * 
+ * @param name the given simple name
+ * @param occurrenceCount the specified position
+ * @return the type with the given name and/or with the specified position relative to the order they are defined in the source
+ * @since 3.0
+ */
+IType getType(String name, int occurrenceCount);
+/**
  * Returns whether this member is from a class file.
  * This is a handle-only method.
  *
index 2d832d5..117ee26 100644 (file)
@@ -133,7 +133,7 @@ public interface IPackageFragment extends IParent, IJavaElement, IOpenable {
         *              exception occurs while accessing its corresponding resource.
         * @return this package fragment's root kind encoded as an integer
         */
-//     int getKind() throws JavaModelException;
+       int getKind() throws JavaModelException;
        /**
         * Returns an array of non-Java resources contained in this package fragment.
         * <p>
index 5feecce..264c13c 100644 (file)
  *******************************************************************************/
 package net.sourceforge.phpdt.core;
 
+import org.eclipse.core.runtime.IProgressMonitor;
+import net.sourceforge.phpdt.core.ITypeHierarchy;
+import net.sourceforge.phpdt.core.JavaModelException;
+import net.sourceforge.phpdt.core.WorkingCopyOwner;
+
 
 /**
  * Represents either a source type in a compilation unit (either a top-level
@@ -553,6 +558,26 @@ public interface IType extends IMember, IParent {
         * @since 2.0
         */
 //     ITypeHierarchy newTypeHierarchy(IWorkingCopy[] workingCopies, IProgressMonitor monitor) throws JavaModelException;
+       /**
+        * Creates and returns a type hierarchy for this type containing
+        * this type, all of its supertypes, and all its subtypes in the workspace, 
+        * considering types in the working copies with the given owner. 
+        * In other words, the owner's working copies will take 
+        * precedence over their original compilation units in the workspace.
+        * <p>
+        * Note that if a working copy is empty, it will be as if the original compilation
+        * unit had been deleted.
+        * <p>
+        *
+        * @param owner the owner of working copies that take precedence over their original compilation units
+        * @param monitor the given progress monitor
+        * @return a type hierarchy for this type containing
+        * this type, all of its supertypes, and all its subtypes in the workspace
+        * @exception JavaModelException if this element does not exist or if an
+        *              exception occurs while accessing its corresponding resource.
+        * @since 3.0
+        */
+//     ITypeHierarchy newTypeHierarchy(WorkingCopyOwner owner, IProgressMonitor monitor) throws JavaModelException;
        
        /**
         * Creates and returns a type hierarchy for this type containing
diff --git a/net.sourceforge.phpeclipse/src/net/sourceforge/phpdt/core/JavaConventions.java b/net.sourceforge.phpeclipse/src/net/sourceforge/phpdt/core/JavaConventions.java
new file mode 100644 (file)
index 0000000..d82a30c
--- /dev/null
@@ -0,0 +1,444 @@
+/*******************************************************************************
+ * Copyright (c) 2000, 2004 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials 
+ * are made available under the terms of the Common Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/cpl-v10.html
+ * 
+ * Contributors:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+package net.sourceforge.phpdt.core;
+
+import java.util.StringTokenizer;
+
+import org.eclipse.core.resources.IResource;
+import org.eclipse.core.resources.IWorkspace;
+import org.eclipse.core.resources.ResourcesPlugin;
+import org.eclipse.core.runtime.IPath;
+import org.eclipse.core.runtime.IStatus;
+import org.eclipse.core.runtime.Status;
+import net.sourceforge.phpdt.core.compiler.*;
+import net.sourceforge.phpdt.core.compiler.InvalidInputException;
+import net.sourceforge.phpdt.internal.compiler.parser.Scanner;
+import net.sourceforge.phpdt.internal.compiler.util.SuffixConstants;
+import net.sourceforge.phpdt.internal.core.*;
+import net.sourceforge.phpdt.internal.core.JavaModelStatus;
+import net.sourceforge.phpdt.internal.core.util.Util;
+
+/**
+ * Provides methods for checking Java-specific conventions such as name syntax.
+ * <p>
+ * This class provides static methods and constants only; it is not intended to be
+ * instantiated or subclassed by clients.
+ * </p>
+ */
+public final class JavaConventions {
+
+       private final static char DOT= '.';
+       private final static Scanner SCANNER = new Scanner();
+
+       private JavaConventions() {
+               // Not instantiable
+       }
+
+       /**
+        * Returns whether the given package fragment root paths are considered
+        * to overlap.
+        * <p>
+        * Two root paths overlap if one is a prefix of the other, or they point to
+        * the same location. However, a JAR is allowed to be nested in a root.
+        *
+        * @param rootPath1 the first root path
+        * @param rootPath2 the second root path
+        * @return true if the given package fragment root paths are considered to overlap, false otherwise
+        * @deprecated Overlapping roots are allowed in 2.1
+        */
+       public static boolean isOverlappingRoots(IPath rootPath1, IPath rootPath2) {
+               if (rootPath1 == null || rootPath2 == null) {
+                       return false;
+               }
+//             String extension1 = rootPath1.getFileExtension();
+//             String extension2 = rootPath2.getFileExtension();
+//             if (extension1 != null && (extension1.equalsIgnoreCase(SuffixConstants.EXTENSION_JAR) || extension1.equalsIgnoreCase(SuffixConstants.EXTENSION_ZIP))) {
+//                     return false;
+//             } 
+//             if (extension2 != null && (extension2.equalsIgnoreCase(SuffixConstants.EXTENSION_JAR) || extension2.equalsIgnoreCase(SuffixConstants.EXTENSION_ZIP))) {
+//                     return false;
+//             }
+               return rootPath1.isPrefixOf(rootPath2) || rootPath2.isPrefixOf(rootPath1);
+       }
+
+       /*
+        * Returns the current identifier extracted by the scanner (without unicode
+        * escapes) from the given id.
+        * Returns <code>null</code> if the id was not valid
+        */
+       private static synchronized char[] scannedIdentifier(String id) {
+               if (id == null) {
+                       return null;
+               }
+               String trimmed = id.trim();
+               if (!trimmed.equals(id)) {
+                       return null;
+               }
+               try {
+                       SCANNER.setSource(id.toCharArray());
+                       int token = SCANNER.getNextToken();
+                       char[] currentIdentifier;
+                       try {
+                               currentIdentifier = SCANNER.getCurrentIdentifierSource();
+                       } catch (ArrayIndexOutOfBoundsException e) {
+                               return null;
+                       }
+                       int nextToken= SCANNER.getNextToken();
+                       if (token == ITerminalSymbols.TokenNameIdentifier 
+                               && nextToken == ITerminalSymbols.TokenNameEOF
+                               && SCANNER.startPosition == SCANNER.source.length) { // to handle case where we had an ArrayIndexOutOfBoundsException 
+                                                                                                                                    // while reading the last token
+                               return currentIdentifier;
+                       } else {
+                               return null;
+                       }
+               }
+               catch (InvalidInputException e) {
+                       return null;
+               }
+       }
+
+       /**
+        * Validate the given compilation unit name.
+        * A compilation unit name must obey the following rules:
+        * <ul>
+        * <li> it must not be null
+        * <li> it must include the <code>".java"</code> suffix
+        * <li> its prefix must be a valid identifier
+        * <li> it must not contain any characters or substrings that are not valid 
+        *                 on the file system on which workspace root is located.
+        * </ul>
+        * </p>
+        * @param name the name of a compilation unit
+        * @return a status object with code <code>IStatus.OK</code> if
+        *              the given name is valid as a compilation unit name, otherwise a status 
+        *              object indicating what is wrong with the name
+        */
+       public static IStatus validateCompilationUnitName(String name) {
+               if (name == null) {
+                       return new Status(IStatus.ERROR, JavaCore.PLUGIN_ID, -1, Util.bind("convention.unit.nullName"), null); //$NON-NLS-1$
+               }
+               if (!net.sourceforge.phpdt.internal.compiler.util.Util.isJavaFileName(name)) {
+                       return new Status(IStatus.ERROR, JavaCore.PLUGIN_ID, -1, Util.bind("convention.unit.notJavaName"), null); //$NON-NLS-1$
+               }
+               String identifier;
+               int index;
+               index = name.lastIndexOf('.');
+               if (index == -1) {
+                       return new Status(IStatus.ERROR, JavaCore.PLUGIN_ID, -1, Util.bind("convention.unit.notJavaName"), null); //$NON-NLS-1$
+               }
+               identifier = name.substring(0, index);
+               // JSR-175 metadata strongly recommends "package-info.java" as the
+               // file in which to store package annotations and
+               // the package-level spec (replaces package.html)
+               if (!identifier.equals("package-info")) { //$NON-NLS-1$
+                       IStatus status = validateIdentifier(identifier);
+                       if (!status.isOK()) {
+                               return status;
+                       }
+               }
+               IStatus status = ResourcesPlugin.getWorkspace().validateName(name, IResource.FILE);
+               if (!status.isOK()) {
+                       return status;
+               }
+               return JavaModelStatus.VERIFIED_OK;
+       }
+
+       /**
+        * Validate the given .class file name.
+        * A .class file name must obey the following rules:
+        * <ul>
+        * <li> it must not be null
+        * <li> it must include the <code>".class"</code> suffix
+        * <li> its prefix must be a valid identifier
+        * <li> it must not contain any characters or substrings that are not valid 
+        *                 on the file system on which workspace root is located.
+        * </ul>
+        * </p>
+        * @param name the name of a .class file
+        * @return a status object with code <code>IStatus.OK</code> if
+        *              the given name is valid as a .class file name, otherwise a status 
+        *              object indicating what is wrong with the name
+        * @since 2.0
+        */
+       public static IStatus validateClassFileName(String name) {
+               if (name == null) {
+                       return new Status(IStatus.ERROR, JavaCore.PLUGIN_ID, -1, Util.bind("convention.classFile.nullName"), null); //$NON-NLS-1$
+               }
+               if (!net.sourceforge.phpdt.internal.compiler.util.Util.isClassFileName(name)) {
+                       return new Status(IStatus.ERROR, JavaCore.PLUGIN_ID, -1, Util.bind("convention.classFile.notClassFileName"), null); //$NON-NLS-1$
+               }
+               String identifier;
+               int index;
+               index = name.lastIndexOf('.');
+               if (index == -1) {
+                       return new Status(IStatus.ERROR, JavaCore.PLUGIN_ID, -1, Util.bind("convention.classFile.notClassFileName"), null); //$NON-NLS-1$
+               }
+               identifier = name.substring(0, index);
+               IStatus status = validateIdentifier(identifier);
+               if (!status.isOK()) {
+                       return status;
+               }
+               status = ResourcesPlugin.getWorkspace().validateName(name, IResource.FILE);
+               if (!status.isOK()) {
+                       return status;
+               }
+               return JavaModelStatus.VERIFIED_OK;
+       }
+
+       /**
+        * Validate the given field name.
+        * <p>
+        * Syntax of a field name corresponds to VariableDeclaratorId (JLS2 8.3).
+        * For example, <code>"x"</code>.
+        *
+        * @param name the name of a field
+        * @return a status object with code <code>IStatus.OK</code> if
+        *              the given name is valid as a field name, otherwise a status 
+        *              object indicating what is wrong with the name
+        */
+       public static IStatus validateFieldName(String name) {
+               return validateIdentifier(name);
+       }
+
+       /**
+        * Validate the given Java identifier.
+        * The identifier must not have the same spelling as a Java keyword,
+        * boolean literal (<code>"true"</code>, <code>"false"</code>), or null literal (<code>"null"</code>).
+        * See section 3.8 of the <em>Java Language Specification, Second Edition</em> (JLS2).
+        * A valid identifier can act as a simple type name, method name or field name.
+        *
+        * @param id the Java identifier
+        * @return a status object with code <code>IStatus.OK</code> if
+        *              the given identifier is a valid Java identifier, otherwise a status 
+        *              object indicating what is wrong with the identifier
+        */
+       public static IStatus validateIdentifier(String id) {
+               if (scannedIdentifier(id) != null) {
+                       return JavaModelStatus.VERIFIED_OK;
+               } else {
+                       return new Status(IStatus.ERROR, JavaCore.PLUGIN_ID, -1, Util.bind("convention.illegalIdentifier", id), null); //$NON-NLS-1$
+               }
+       }
+
+       /**
+        * Validate the given import declaration name.
+        * <p>
+        * The name of an import corresponds to a fully qualified type name
+        * or an on-demand package name as defined by ImportDeclaration (JLS2 7.5).
+        * For example, <code>"java.util.*"</code> or <code>"java.util.Hashtable"</code>.
+        *
+        * @param name the import declaration
+        * @return a status object with code <code>IStatus.OK</code> if
+        *              the given name is valid as an import declaration, otherwise a status 
+        *              object indicating what is wrong with the name
+        */
+       public static IStatus validateImportDeclaration(String name) {
+               if (name == null || name.length() == 0) {
+                       return new Status(IStatus.ERROR, JavaCore.PLUGIN_ID, -1, Util.bind("convention.import.nullImport"), null); //$NON-NLS-1$
+               } 
+               if (name.charAt(name.length() - 1) == '*') {
+                       if (name.charAt(name.length() - 2) == '.') {
+                               return validatePackageName(name.substring(0, name.length() - 2));
+                       } else {
+                               return new Status(IStatus.ERROR, JavaCore.PLUGIN_ID, -1, Util.bind("convention.import.unqualifiedImport"), null); //$NON-NLS-1$
+                       }
+               }
+               return validatePackageName(name);
+       }
+
+       /**
+        * Validate the given Java type name, either simple or qualified.
+        * For example, <code>"java.lang.Object"</code>, or <code>"Object"</code>.
+        * <p>
+        *
+        * @param name the name of a type
+        * @return a status object with code <code>IStatus.OK</code> if
+        *              the given name is valid as a Java type name, 
+        *      a status with code <code>IStatus.WARNING</code>
+        *              indicating why the given name is discouraged, 
+        *      otherwise a status object indicating what is wrong with 
+        *      the name
+        */
+       public static IStatus validateJavaTypeName(String name) {
+               if (name == null) {
+                       return new Status(IStatus.ERROR, JavaCore.PLUGIN_ID, -1, Util.bind("convention.type.nullName"), null); //$NON-NLS-1$
+               }
+               String trimmed = name.trim();
+               if (!name.equals(trimmed)) {
+                       return new Status(IStatus.ERROR, JavaCore.PLUGIN_ID, -1, Util.bind("convention.type.nameWithBlanks"), null); //$NON-NLS-1$
+               }
+               int index = name.lastIndexOf('.');
+               char[] scannedID;
+               if (index == -1) {
+                       // simple name
+                       scannedID = scannedIdentifier(name);
+               } else {
+                       // qualified name
+                       String pkg = name.substring(0, index).trim();
+                       IStatus status = validatePackageName(pkg);
+                       if (!status.isOK()) {
+                               return status;
+                       }
+                       String type = name.substring(index + 1).trim();
+                       scannedID = scannedIdentifier(type);
+               }
+       
+               if (scannedID != null) {
+                       IStatus status = ResourcesPlugin.getWorkspace().validateName(new String(scannedID), IResource.FILE);
+                       if (!status.isOK()) {
+                               return status;
+                       }
+                       if (CharOperation.contains('$', scannedID)) {
+                               return new Status(IStatus.WARNING, JavaCore.PLUGIN_ID, -1, Util.bind("convention.type.dollarName"), null); //$NON-NLS-1$
+                       }
+                       if ((scannedID.length > 0 && Character.isLowerCase(scannedID[0]))) {
+                               return new Status(IStatus.WARNING, JavaCore.PLUGIN_ID, -1, Util.bind("convention.type.lowercaseName"), null); //$NON-NLS-1$
+                       }
+                       return JavaModelStatus.VERIFIED_OK;
+               } else {
+                       return new Status(IStatus.ERROR, JavaCore.PLUGIN_ID, -1, Util.bind("convention.type.invalidName", name), null); //$NON-NLS-1$
+               }
+       }
+
+       /**
+        * Validate the given method name.
+        * The special names "&lt;init&gt;" and "&lt;clinit&gt;" are not valid.
+        * <p>
+        * The syntax for a method  name is defined by Identifier
+        * of MethodDeclarator (JLS2 8.4). For example "println".
+        *
+        * @param name the name of a method
+        * @return a status object with code <code>IStatus.OK</code> if
+        *              the given name is valid as a method name, otherwise a status 
+        *              object indicating what is wrong with the name
+        */
+       public static IStatus validateMethodName(String name) {
+
+               return validateIdentifier(name);
+       }
+
+       /**
+        * Validate the given package name.
+        * <p>
+        * The syntax of a package name corresponds to PackageName as
+        * defined by PackageDeclaration (JLS2 7.4). For example, <code>"java.lang"</code>.
+        * <p>
+        * Note that the given name must be a non-empty package name (that is, attempting to
+        * validate the default package will return an error status.)
+        * Also it must not contain any characters or substrings that are not valid 
+        * on the file system on which workspace root is located.
+        *
+        * @param name the name of a package
+        * @return a status object with code <code>IStatus.OK</code> if
+        *              the given name is valid as a package name, otherwise a status 
+        *              object indicating what is wrong with the name
+        */
+       public static IStatus validatePackageName(String name) {
+
+               if (name == null) {
+                       return new Status(IStatus.ERROR, JavaCore.PLUGIN_ID, -1, Util.bind("convention.package.nullName"), null); //$NON-NLS-1$
+               }
+               int length;
+               if ((length = name.length()) == 0) {
+                       return new Status(IStatus.ERROR, JavaCore.PLUGIN_ID, -1, Util.bind("convention.package.emptyName"), null); //$NON-NLS-1$
+               }
+               if (name.charAt(0) == DOT || name.charAt(length-1) == DOT) {
+                       return new Status(IStatus.ERROR, JavaCore.PLUGIN_ID, -1, Util.bind("convention.package.dotName"), null); //$NON-NLS-1$
+               }
+               if (CharOperation.isWhitespace(name.charAt(0)) || CharOperation.isWhitespace(name.charAt(name.length() - 1))) {
+                       return new Status(IStatus.ERROR, JavaCore.PLUGIN_ID, -1, Util.bind("convention.package.nameWithBlanks"), null); //$NON-NLS-1$
+               }
+               int dot = 0;
+               while (dot != -1 && dot < length-1) {
+                       if ((dot = name.indexOf(DOT, dot+1)) != -1 && dot < length-1 && name.charAt(dot+1) == DOT) {
+                               return new Status(IStatus.ERROR, JavaCore.PLUGIN_ID, -1, Util.bind("convention.package.consecutiveDotsName"), null); //$NON-NLS-1$
+                               }
+               }
+               IWorkspace workspace = ResourcesPlugin.getWorkspace();
+               StringTokenizer st = new StringTokenizer(name, new String(new char[] {DOT}));
+               boolean firstToken = true;
+               IStatus warningStatus = null;
+               while (st.hasMoreTokens()) {
+                       String typeName = st.nextToken();
+                       typeName = typeName.trim(); // grammar allows spaces
+                       char[] scannedID = scannedIdentifier(typeName);
+                       if (scannedID == null) {
+                               return new Status(IStatus.ERROR, JavaCore.PLUGIN_ID, -1, Util.bind("convention.illegalIdentifier", typeName), null); //$NON-NLS-1$
+                       }
+                       IStatus status = workspace.validateName(new String(scannedID), IResource.FOLDER);
+                       if (!status.isOK()) {
+                               return status;
+                       }
+                       if (firstToken && scannedID.length > 0 && Character.isUpperCase(scannedID[0])) {
+                               if (warningStatus == null) {
+                                       warningStatus = new Status(IStatus.WARNING, JavaCore.PLUGIN_ID, -1, Util.bind("convention.package.uppercaseName"), null); //$NON-NLS-1$
+                               }
+                       }
+                       firstToken = false;
+               }
+               if (warningStatus != null) {
+                       return warningStatus;
+               }
+               return JavaModelStatus.VERIFIED_OK;
+       }
+       
+       /**
+        * Validate a given classpath and output location for a project, using the following rules:
+        * <ul>
+        *   <li> Classpath entries cannot collide with each other; that is, all entry paths must be unique.
+        *   <li> The project output location path cannot be null, must be absolute and located inside the project.
+        *   <li> Specific output locations (specified on source entries) can be null, if not they must be located inside the project,
+        *   <li> A project entry cannot refer to itself directly (that is, a project cannot prerequisite itself).
+     *   <li> Classpath entries or output locations cannot coincidate or be nested in each other, except for the following scenarii listed below:
+        *      <ul><li> A source folder can coincidate with its own output location, in which case this output can then contain library archives. 
+        *                     However, a specific output location cannot coincidate with any library or a distinct source folder than the one referring to it. </li> 
+        *              <li> A source/library folder can be nested in any source folder as long as the nested folder is excluded from the enclosing one. </li>
+        *                      <li> An output location can be nested in a source folder, if the source folder coincidates with the project itself, or if the output
+        *                                      location is excluded from the source folder.
+        *      </ul>
+        * </ul>
+        * 
+        *  Note that the classpath entries are not validated automatically. Only bound variables or containers are considered 
+        *  in the checking process (this allows to perform a consistency check on a classpath which has references to
+        *  yet non existing projects, folders, ...).
+        *  <p>
+        *  This validation is intended to anticipate classpath issues prior to assigning it to a project. In particular, it will automatically
+        *  be performed during the classpath setting operation (if validation fails, the classpath setting will not complete).
+        *  <p>
+        * @param javaProject the given java project
+        * @param rawClasspath the given classpath
+        * @param projectOutputLocation the given output location
+        * @return a status object with code <code>IStatus.OK</code> if
+        *              the given classpath and output location are compatible, otherwise a status 
+        *              object indicating what is wrong with the classpath or output location
+        * @since 2.0
+        */
+       public static IJavaModelStatus validateClasspath(IJavaProject javaProject, IClasspathEntry[] rawClasspath, IPath projectOutputLocation) {
+
+               return ClasspathEntry.validateClasspath(javaProject, rawClasspath, projectOutputLocation);
+       }
+       
+       /**
+        * Returns a Java model status describing the problem related to this classpath entry if any, 
+        * a status object with code <code>IStatus.OK</code> if the entry is fine (that is, if the
+        * given classpath entry denotes a valid element to be referenced onto a classpath).
+        * 
+        * @param project the given java project
+        * @param entry the given classpath entry
+        * @param checkSourceAttachment a flag to determine if source attachement should be checked
+        * @return a java model status describing the problem related to this classpath entry if any, a status object with code <code>IStatus.OK</code> if the entry is fine
+        * @since 2.0
+        */
+       public static IJavaModelStatus validateClasspathEntry(IJavaProject project, IClasspathEntry entry, boolean checkSourceAttachment){
+               return ClasspathEntry.validateClasspathEntry(project, entry, checkSourceAttachment, true/*recurse in container*/);
+       }
+}
index 5dd77a1..b340b76 100644 (file)
@@ -15,6 +15,7 @@ import net.sourceforge.phpdt.internal.core.ClasspathEntry;
 import net.sourceforge.phpdt.internal.core.JavaModel;
 import net.sourceforge.phpdt.internal.core.JavaModelManager;
 import net.sourceforge.phpdt.internal.core.Region;
+import net.sourceforge.phpdt.internal.core.util.MementoTokenizer;
 import net.sourceforge.phpdt.internal.corext.Assert;
 import net.sourceforge.phpeclipse.PHPeclipsePlugin;
 
@@ -1652,6 +1653,29 @@ public class JavaCore {
        }
 
        /**
+        * Returns the Java model element corresponding to the given handle identifier
+        * generated by <code>IJavaElement.getHandleIdentifier()</code>, or
+        * <code>null</code> if unable to create the associated element.
+        * If the returned Java element is an <code>ICompilationUnit</code>, its owner
+        * is the given owner if such a working copy exists, otherwise the compilation unit 
+        * is a primary compilation unit.
+        * 
+        * @param handleIdentifier the given handle identifier
+        * @param owner the owner of the returned compilation unit, ignored if the returned
+        *   element is not a compilation unit
+        * @return the Java element corresponding to the handle identifier
+        * @since 3.0
+        */
+       public static IJavaElement create(String handleIdentifier, WorkingCopyOwner owner) {
+               if (handleIdentifier == null) {
+                       return null;
+               }
+               MementoTokenizer memento = new MementoTokenizer(handleIdentifier);
+               JavaModel model = JavaModelManager.getJavaModelManager().getJavaModel();
+               return model.getHandleFromMemento(memento, owner);
+       } 
+       
+       /**
         * Returns the Java element corresponding to the given file, or
         * <code>null</code> if unable to associate the given file with a Java
         * element.
@@ -1827,7 +1851,7 @@ public class JavaCore {
         * (using <code>setClasspathContainer</code>, then a
         * <code>ClasspathContainerInitializer</code> will be activated if any was
         * registered for this container ID onto the extension point
-        * "org.eclipse.jdt.core.classpathContainerInitializer".
+        * "net.sourceforge.phpdt.core.classpathContainerInitializer".
         * <p>
         * There is no assumption that the returned container must answer the exact
         * same containerPath when requested
@@ -1838,7 +1862,7 @@ public class JavaCore {
         * are not preserved from a session to another. It is thus highly
         * recommended to register a <code>ClasspathContainerInitializer</code>
         * for each referenced container (through the extension point
-        * "org.eclipse.jdt.core.ClasspathContainerInitializer").
+        * "net.sourceforge.phpdt.core.ClasspathContainerInitializer").
         * <p>
         * 
         * @param containerPath
@@ -1938,7 +1962,7 @@ public class JavaCore {
         * Helper method finding the classpath container initializer registered for
         * a given classpath container ID or <code>null</code> if none was found
         * while iterating over the contributions to extension point to the
-        * extension point "org.eclipse.jdt.core.classpathContainerInitializer".
+        * extension point "net.sourceforge.phpdt.core.classpathContainerInitializer".
         * <p>
         * A containerID is the first segment of any container path, used to
         * identify the registered container initializer.
@@ -1995,7 +2019,7 @@ public class JavaCore {
         * <p>
         * Note that classpath variables can be contributed registered initializers
         * for, using the extension point
-        * "org.eclipse.jdt.core.classpathVariableInitializer". If an initializer is
+        * "net.sourceforge.phpdt.core.classpathVariableInitializer". If an initializer is
         * registered for a variable, its persisted value will be ignored: its
         * initializer will thus get the opportunity to rebind the variable
         * differently on each session.
@@ -2072,7 +2096,7 @@ public class JavaCore {
         * Helper method finding the classpath variable initializer registered for a
         * given classpath variable name or <code>null</code> if none was found
         * while iterating over the contributions to extension point to the
-        * extension point "org.eclipse.jdt.core.classpathVariableInitializer".
+        * extension point "net.sourceforge.phpdt.core.classpathVariableInitializer".
         * <p>
         * 
         * @param the
@@ -2150,49 +2174,49 @@ public class JavaCore {
         *     When generated, this attribute will enable local variable names 
         *     to be displayed in debugger, only in place where variables are 
         *     definitely assigned (.class file is then bigger)
-        *      - option id:         &quot;org.eclipse.jdt.core.compiler.debug.localVariable&quot;
+        *      - option id:         &quot;net.sourceforge.phpdt.core.compiler.debug.localVariable&quot;
         *      - possible values:   { &quot;generate&quot;, &quot;do not generate&quot; }
         *      - default:           &quot;generate&quot;
         * 
         *  COMPILER / Generating Line Number Debug Attribute 
         *     When generated, this attribute will enable source code highlighting in debugger 
         *     (.class file is then bigger).
-        *      - option id:         &quot;org.eclipse.jdt.core.compiler.debug.lineNumber&quot;
+        *      - option id:         &quot;net.sourceforge.phpdt.core.compiler.debug.lineNumber&quot;
         *      - possible values:   { &quot;generate&quot;, &quot;do not generate&quot; }
         *      - default:           &quot;generate&quot;
         *     
         *  COMPILER / Generating Source Debug Attribute 
         *     When generated, this attribute will enable the debugger to present the 
         *     corresponding source code.
-        *      - option id:         &quot;org.eclipse.jdt.core.compiler.debug.sourceFile&quot;
+        *      - option id:         &quot;net.sourceforge.phpdt.core.compiler.debug.sourceFile&quot;
         *      - possible values:   { &quot;generate&quot;, &quot;do not generate&quot; }
         *      - default:           &quot;generate&quot;
         *     
         *  COMPILER / Preserving Unused Local Variables
         *     Unless requested to preserve unused local variables (that is, never read), the 
         *     compiler will optimize them out, potentially altering debugging
-        *      - option id:         &quot;org.eclipse.jdt.core.compiler.codegen.unusedLocal&quot;
+        *      - option id:         &quot;net.sourceforge.phpdt.core.compiler.codegen.unusedLocal&quot;
         *      - possible values:   { &quot;preserve&quot;, &quot;optimize out&quot; }
         *      - default:           &quot;preserve&quot;
         *  
         *  COMPILER / Defining Target Java Platform
         *     For binary compatibility reason, .class files can be tagged to with certain VM versions and later.
         *     Note that &quot;1.4&quot; target require to toggle compliance mode to &quot;1.4&quot; too.
-        *      - option id:         &quot;org.eclipse.jdt.core.compiler.codegen.targetPlatform&quot;
+        *      - option id:         &quot;net.sourceforge.phpdt.core.compiler.codegen.targetPlatform&quot;
         *      - possible values:   { &quot;1.1&quot;, &quot;1.2&quot;, &quot;1.3&quot;, &quot;1.4&quot; }
         *      - default:           &quot;1.1&quot;
         * 
         *  COMPILER / Reporting Unreachable Code
         *     Unreachable code can optionally be reported as an error, warning or simply 
         *     ignored. The bytecode generation will always optimized it out.
-        *      - option id:         &quot;org.eclipse.jdt.core.compiler.problem.unreachableCode&quot;
+        *      - option id:         &quot;net.sourceforge.phpdt.core.compiler.problem.unreachableCode&quot;
         *      - possible values:   { &quot;error&quot;, &quot;warning&quot;, &quot;ignore&quot; }
         *      - default:           &quot;error&quot;
         * 
         *  COMPILER / Reporting Invalid Import
         *     An import statement that cannot be resolved might optionally be reported 
         *     as an error, as a warning or ignored.
-        *      - option id:         &quot;org.eclipse.jdt.core.compiler.problem.invalidImport&quot;
+        *      - option id:         &quot;net.sourceforge.phpdt.core.compiler.problem.invalidImport&quot;
         *      - possible values:   { &quot;error&quot;, &quot;warning&quot;, &quot;ignore&quot; }
         *      - default:           &quot;error&quot;
         * 
@@ -2200,7 +2224,7 @@ public class JavaCore {
         *     A package default method is not visible in a different package, and thus 
         *     cannot be overridden. When enabling this option, the compiler will signal 
         *     such scenarii either as an error or a warning.
-        *      - option id:         &quot;org.eclipse.jdt.core.compiler.problem.overridingPackageDefaultMethod&quot;
+        *      - option id:         &quot;net.sourceforge.phpdt.core.compiler.problem.overridingPackageDefaultMethod&quot;
         *      - possible values:   { &quot;error&quot;, &quot;warning&quot;, &quot;ignore&quot; }
         *      - default:           &quot;warning&quot;
         * 
@@ -2208,21 +2232,21 @@ public class JavaCore {
         *     Naming a method with a constructor name is generally considered poor 
         *     style programming. When enabling this option, the compiler will signal such 
         *     scenarii either as an error or a warning.
-        *      - option id:         &quot;org.eclipse.jdt.core.compiler.problem.methodWithConstructorName&quot;
+        *      - option id:         &quot;net.sourceforge.phpdt.core.compiler.problem.methodWithConstructorName&quot;
         *      - possible values:   { &quot;error&quot;, &quot;warning&quot;, &quot;ignore&quot; }
         *      - default:           &quot;warning&quot;
         * 
         *  COMPILER / Reporting Deprecation
         *     When enabled, the compiler will signal use of deprecated API either as an 
         *     error or a warning.
-        *      - option id:         &quot;org.eclipse.jdt.core.compiler.problem.deprecation&quot;
+        *      - option id:         &quot;net.sourceforge.phpdt.core.compiler.problem.deprecation&quot;
         *      - possible values:   { &quot;error&quot;, &quot;warning&quot;, &quot;ignore&quot; }
         *      - default:           &quot;warning&quot;
         * 
         *  COMPILER / Reporting Deprecation Inside Deprecated Code
         *     When enabled, the compiler will signal use of deprecated API inside deprecated code.
-        *     The severity of the problem is controlled with option &quot;org.eclipse.jdt.core.compiler.problem.deprecation&quot;.
-        *      - option id:         &quot;org.eclipse.jdt.core.compiler.problem.deprecationInDeprecatedCode&quot;
+        *     The severity of the problem is controlled with option &quot;net.sourceforge.phpdt.core.compiler.problem.deprecation&quot;.
+        *      - option id:         &quot;net.sourceforge.phpdt.core.compiler.problem.deprecationInDeprecatedCode&quot;
         *      - possible values:   { &quot;enabled&quot;, &quot;disabled&quot; }
         *      - default:           &quot;disabled&quot;
         * 
@@ -2233,49 +2257,49 @@ public class JavaCore {
         *       } catch (java.io.IOException e) {}. 
         *     When enabling this option, the compiler will issue an error or a warning for hidden 
         *     catch blocks corresponding to checked exceptions
-        *      - option id:         &quot;org.eclipse.jdt.core.compiler.problem.hiddenCatchBlock&quot;
+        *      - option id:         &quot;net.sourceforge.phpdt.core.compiler.problem.hiddenCatchBlock&quot;
         *      - possible values:   { &quot;error&quot;, &quot;warning&quot;, &quot;ignore&quot; }
         *      - default:           &quot;warning&quot;
         * 
         *  COMPILER / Reporting Unused Local
         *     When enabled, the compiler will issue an error or a warning for unused local 
         *     variables (that is, variables never read from)
-        *      - option id:         &quot;org.eclipse.jdt.core.compiler.problem.unusedLocal&quot;
+        *      - option id:         &quot;net.sourceforge.phpdt.core.compiler.problem.unusedLocal&quot;
         *      - possible values:   { &quot;error&quot;, &quot;warning&quot;, &quot;ignore&quot; }
         *      - default:           &quot;ignore&quot;
         * 
         *  COMPILER / Reporting Unused Parameter
         *     When enabled, the compiler will issue an error or a warning for unused method 
         *     parameters (that is, parameters never read from)
-        *      - option id:         &quot;org.eclipse.jdt.core.compiler.problem.unusedParameter&quot;
+        *      - option id:         &quot;net.sourceforge.phpdt.core.compiler.problem.unusedParameter&quot;
         *      - possible values:   { &quot;error&quot;, &quot;warning&quot;, &quot;ignore&quot; }
         *      - default:           &quot;ignore&quot;
         * 
         *  COMPILER / Reporting Unused Parameter if Implementing Abstract Method
         *     When enabled, the compiler will signal unused parameters in abstract method implementations.
-        *     The severity of the problem is controlled with option &quot;org.eclipse.jdt.core.compiler.problem.unusedParameter&quot;.
-        *      - option id:         &quot;org.eclipse.jdt.core.compiler.problem.unusedParameterWhenImplementingAbstract&quot;
+        *     The severity of the problem is controlled with option &quot;net.sourceforge.phpdt.core.compiler.problem.unusedParameter&quot;.
+        *      - option id:         &quot;net.sourceforge.phpdt.core.compiler.problem.unusedParameterWhenImplementingAbstract&quot;
         *      - possible values:   { &quot;enabled&quot;, &quot;disabled&quot; }
         *      - default:           &quot;disabled&quot;
         * 
         *  COMPILER / Reporting Unused Parameter if Overriding Concrete Method
         *     When enabled, the compiler will signal unused parameters in methods overriding concrete ones.
-        *     The severity of the problem is controlled with option &quot;org.eclipse.jdt.core.compiler.problem.unusedParameter&quot;.
-        *      - option id:         &quot;org.eclipse.jdt.core.compiler.problem.unusedParameterWhenOverridingConcrete&quot;
+        *     The severity of the problem is controlled with option &quot;net.sourceforge.phpdt.core.compiler.problem.unusedParameter&quot;.
+        *      - option id:         &quot;net.sourceforge.phpdt.core.compiler.problem.unusedParameterWhenOverridingConcrete&quot;
         *      - possible values:   { &quot;enabled&quot;, &quot;disabled&quot; }
         *      - default:           &quot;disabled&quot;
         * 
         *  COMPILER / Reporting Unused Import
         *     When enabled, the compiler will issue an error or a warning for unused import 
         *     reference 
-        *      - option id:         &quot;org.eclipse.jdt.core.compiler.problem.unusedImport&quot;
+        *      - option id:         &quot;net.sourceforge.phpdt.core.compiler.problem.unusedImport&quot;
         *      - possible values:   { &quot;error&quot;, &quot;warning&quot;, &quot;ignore&quot; }
         *      - default:           &quot;warning&quot;
         * 
         *  COMPILER / Reporting Unused Private Members
         *     When enabled, the compiler will issue an error or a warning whenever a private 
         *     method or field is declared but never used within the same unit.
-        *      - option id:         &quot;org.eclipse.jdt.core.compiler.problem.unusedPrivateMember&quot;
+        *      - option id:         &quot;net.sourceforge.phpdt.core.compiler.problem.unusedPrivateMember&quot;
         *      - possible values:   { &quot;error&quot;, &quot;warning&quot;, &quot;ignore&quot; }
         *      - default:           &quot;ignore&quot;
         * 
@@ -2283,21 +2307,21 @@ public class JavaCore {
         *     When enabled, the compiler will issue an error or a warning whenever it emulates 
         *     access to a non-accessible member of an enclosing type. Such access can have
         *     performance implications.
-        *      - option id:         &quot;org.eclipse.jdt.core.compiler.problem.syntheticAccessEmulation&quot;
+        *      - option id:         &quot;net.sourceforge.phpdt.core.compiler.problem.syntheticAccessEmulation&quot;
         *      - possible values:   { &quot;error&quot;, &quot;warning&quot;, &quot;ignore&quot; }
         *      - default:           &quot;ignore&quot;
         * 
         *  COMPILER / Reporting Non-Externalized String Literal
         *     When enabled, the compiler will issue an error or a warning for non externalized 
         *     String literal (that is, not tagged with //$NON-NLS-&lt;n&gt;$). 
-        *      - option id:         &quot;org.eclipse.jdt.core.compiler.problem.nonExternalizedStringLiteral&quot;
+        *      - option id:         &quot;net.sourceforge.phpdt.core.compiler.problem.nonExternalizedStringLiteral&quot;
         *      - possible values:   { &quot;error&quot;, &quot;warning&quot;, &quot;ignore&quot; }
         *      - default:           &quot;ignore&quot;
         *  
         *  COMPILER / Reporting Usage of 'assert' Identifier
         *     When enabled, the compiler will issue an error or a warning whenever 'assert' is 
         *     used as an identifier (reserved keyword in 1.4)
-        *      - option id:         &quot;org.eclipse.jdt.core.compiler.problem.assertIdentifier&quot;
+        *      - option id:         &quot;net.sourceforge.phpdt.core.compiler.problem.assertIdentifier&quot;
         *      - possible values:   { &quot;error&quot;, &quot;warning&quot;, &quot;ignore&quot; }
         *      - default:           &quot;ignore&quot;
         *  
@@ -2305,14 +2329,14 @@ public class JavaCore {
         *     When enabled, the compiler will issue an error or a warning whenever a static field
         *     or method is accessed with an expression receiver. A reference to a static member should
         *     be qualified with a type name.
-        *      - option id:         &quot;org.eclipse.jdt.core.compiler.problem.staticAccessReceiver&quot;
+        *      - option id:         &quot;net.sourceforge.phpdt.core.compiler.problem.staticAccessReceiver&quot;
         *      - possible values:   { &quot;error&quot;, &quot;warning&quot;, &quot;ignore&quot; }
         *      - default:           &quot;warning&quot;
         *  
         *  COMPILER / Reporting Assignment with no Effect
         *     When enabled, the compiler will issue an error or a warning whenever an assignment
         *     has no effect (e.g 'x = x').
-        *      - option id:         &quot;org.eclipse.jdt.core.compiler.problem.noEffectAssignment&quot;
+        *      - option id:         &quot;net.sourceforge.phpdt.core.compiler.problem.noEffectAssignment&quot;
         *      - possible values:   { &quot;error&quot;, &quot;warning&quot;, &quot;ignore&quot; }
         *      - default:           &quot;warning&quot;
         *  
@@ -2323,14 +2347,14 @@ public class JavaCore {
         *       interface I { 
         *          int clone();
         *       } 
-        *      - option id:         &quot;org.eclipse.jdt.core.compiler.problem.incompatibleNonInheritedInterfaceMethod&quot;
+        *      - option id:         &quot;net.sourceforge.phpdt.core.compiler.problem.incompatibleNonInheritedInterfaceMethod&quot;
         *      - possible values:   { &quot;error&quot;, &quot;warning&quot;, &quot;ignore&quot; }
         *      - default:           &quot;warning&quot;
         *  
         *  COMPILER / Reporting Usage of char[] Expressions in String Concatenations
         *     When enabled, the compiler will issue an error or a warning whenever a char[] expression
         *     is used in String concatenations (for example, &quot;hello&quot; + new char[]{'w','o','r','l','d'}).
-        *      - option id:         &quot;org.eclipse.jdt.core.compiler.problem.noImplicitStringConversion&quot;
+        *      - option id:         &quot;net.sourceforge.phpdt.core.compiler.problem.noImplicitStringConversion&quot;
         *      - possible values:   { &quot;error&quot;, &quot;warning&quot;, &quot;ignore&quot; }
         *      - default:           &quot;warning&quot;
         * 
@@ -2338,20 +2362,20 @@ public class JavaCore {
         *     Specify whether source is 1.3 or 1.4 compatible. From 1.4 on, 'assert' is a keyword
         *     reserved for assertion support. Also note, than when toggling to 1.4 mode, the target VM
         *    level should be set to &quot;1.4&quot; and the compliance mode should be &quot;1.4&quot;.
-        *      - option id:         &quot;org.eclipse.jdt.core.compiler.source&quot;
+        *      - option id:         &quot;net.sourceforge.phpdt.core.compiler.source&quot;
         *      - possible values:   { &quot;1.3&quot;, &quot;1.4&quot; }
         *      - default:           &quot;1.3&quot;
         *  
         *  COMPILER / Setting Compliance Level
         *     Select the compliance level for the compiler. In &quot;1.3&quot; mode, source and target settings
         *     should not go beyond &quot;1.3&quot; level.
-        *      - option id:         &quot;org.eclipse.jdt.core.compiler.compliance&quot;
+        *      - option id:         &quot;net.sourceforge.phpdt.core.compiler.compliance&quot;
         *      - possible values:   { &quot;1.3&quot;, &quot;1.4&quot; }
         *      - default:           &quot;1.3&quot;
         *  
         *  COMPILER / Maximum number of problems reported per compilation unit
         *     Specify the maximum number of problems reported on each compilation unit.
-        *      - option id:         &quot;org.eclipse.jdt.core.compiler.maxProblemPerUnit&quot;
+        *      - option id:         &quot;net.sourceforge.phpdt.core.compiler.maxProblemPerUnit&quot;
         *      - possible values:      &quot;&lt;n&gt;&quot; where &lt;n&gt; is zero or a positive integer (if zero then all problems are reported).
         *      - default:           &quot;100&quot;
         *  
@@ -2360,7 +2384,7 @@ public class JavaCore {
         *     one of the corresponding tag inside any comment in Java source code.
         *     Generated task messages will include the tag, and range until the next line separator or comment ending.
         *     Note that tasks messages are trimmed.
-        *      - option id:         &quot;org.eclipse.jdt.core.compiler.taskTags&quot;
+        *      - option id:         &quot;net.sourceforge.phpdt.core.compiler.taskTags&quot;
         *      - possible values:   { &quot;&lt;tag&gt;[,&lt;tag&gt;]*&quot; } where &lt;tag&gt; is a String without any wild-card or leading/trailing spaces 
         *      - default:           &quot;&quot;
         *  
@@ -2368,34 +2392,34 @@ public class JavaCore {
         *     In parallel with the Automatic Task Tags, this list defines the priorities (high, normal or low)
         *     of the task markers issued by the compiler.
         *     If the default is specified, the priority of each task marker is &quot;NORMAL&quot;.
-        *      - option id:         &quot;org.eclipse.jdt.core.compiler.taskPriorities&quot;
+        *      - option id:         &quot;net.sourceforge.phpdt.core.compiler.taskPriorities&quot;
         *      - possible values:   { &quot;&lt;priority&gt;[,&lt;priority&gt;]*&quot; } where &lt;priority&gt; is one of &quot;HIGH&quot;, &quot;NORMAL&quot; or &quot;LOW&quot;
         *      - default:           &quot;&quot;
         * 
         *  BUILDER / Specifying Filters for Resource Copying Control
         *     Allow to specify some filters to control the resource copy process.
-        *      - option id:         &quot;org.eclipse.jdt.core.builder.resourceCopyExclusionFilter&quot;
+        *      - option id:         &quot;net.sourceforge.phpdt.core.builder.resourceCopyExclusionFilter&quot;
         *      - possible values:   { &quot;&lt;name&gt;[,&lt;name&gt;]* } where &lt;name&gt; is a file name pattern (* and ? wild-cards allowed)
         *        or the name of a folder which ends with '/'
         *      - default:           &quot;&quot;
         *  
         *  BUILDER / Abort if Invalid Classpath
         *     Allow to toggle the builder to abort if the classpath is invalid
-        *      - option id:         &quot;org.eclipse.jdt.core.builder.invalidClasspath&quot;
+        *      - option id:         &quot;net.sourceforge.phpdt.core.builder.invalidClasspath&quot;
         *      - possible values:   { &quot;abort&quot;, &quot;ignore&quot; }
         *      - default:           &quot;abort&quot;
         *  
         *  BUILDER / Cleaning Output Folder(s)
         *     Indicate whether the JavaBuilder is allowed to clean the output folders
         *     when performing full build operations.
-        *      - option id:         &quot;org.eclipse.jdt.core.builder.cleanOutputFolder&quot;
+        *      - option id:         &quot;net.sourceforge.phpdt.core.builder.cleanOutputFolder&quot;
         *      - possible values:   { &quot;clean&quot;, &quot;ignore&quot; }
         *      - default:           &quot;clean&quot;
         *  
         *  BUILDER / Reporting Duplicate Resources
         *     Indicate the severity of the problem reported when more than one occurrence
         *     of a resource is to be copied into the output location.
-        *      - option id:         &quot;org.eclipse.jdt.core.builder.duplicateResourceTask&quot;
+        *      - option id:         &quot;net.sourceforge.phpdt.core.builder.duplicateResourceTask&quot;
         *      - possible values:   { &quot;error&quot;, &quot;warning&quot; }
         *      - default:           &quot;warning&quot;
         *  
@@ -2403,61 +2427,61 @@ public class JavaCore {
         *     Indicate whether JavaCore should enforce the project build order to be based on
         *     the classpath prerequisite chain. When requesting to compute, this takes over
         *     the platform default order (based on project references).
-        *      - option id:         &quot;org.eclipse.jdt.core.computeJavaBuildOrder&quot;
+        *      - option id:         &quot;net.sourceforge.phpdt.core.computeJavaBuildOrder&quot;
         *      - possible values:   { &quot;compute&quot;, &quot;ignore&quot; }
         *      - default:           &quot;ignore&quot;  
         *  
         *  JAVACORE / Specify Default Source Encoding Format
         *     Get the encoding format for compiled sources. This setting is read-only, it is equivalent
         *     to 'ResourcesPlugin.getEncoding()'.
-        *      - option id:         &quot;org.eclipse.jdt.core.encoding&quot;
+        *      - option id:         &quot;net.sourceforge.phpdt.core.encoding&quot;
         *      - possible values:   { any of the supported encoding name}.
         *      - default:           &lt;platform default&gt;
         *  
         *  JAVACORE / Reporting Incomplete Classpath
         *     Indicate the severity of the problem reported when an entry on the classpath does not exist, 
         *     is not legite or is not visible (for example, a referenced project is closed).
-        *      - option id:         &quot;org.eclipse.jdt.core.incompleteClasspath&quot;
+        *      - option id:         &quot;net.sourceforge.phpdt.core.incompleteClasspath&quot;
         *      - possible values:   { &quot;error&quot;, &quot;warning&quot;}
         *      - default:           &quot;error&quot;
         *  
         *  JAVACORE / Reporting Classpath Cycle
         *     Indicate the severity of the problem reported when a project is involved in a cycle.
-        *      - option id:         &quot;org.eclipse.jdt.core.circularClasspath&quot;
+        *      - option id:         &quot;net.sourceforge.phpdt.core.circularClasspath&quot;
         *      - possible values:   { &quot;error&quot;, &quot;warning&quot; }
         *      - default:           &quot;error&quot;
         *  
         *  JAVACORE / Enabling Usage of Classpath Exclusion Patterns
         *     When disabled, no entry on a project classpath can be associated with
         *     an exclusion pattern.
-        *      - option id:         &quot;org.eclipse.jdt.core.classpath.exclusionPatterns&quot;
+        *      - option id:         &quot;net.sourceforge.phpdt.core.classpath.exclusionPatterns&quot;
         *      - possible values:   { &quot;enabled&quot;, &quot;disabled&quot; }
         *      - default:           &quot;enabled&quot;
         *  
         *  JAVACORE / Enabling Usage of Classpath Multiple Output Locations
         *     When disabled, no entry on a project classpath can be associated with
         *     a specific output location, preventing thus usage of multiple output locations.
-        *      - option id:         &quot;org.eclipse.jdt.core.classpath.multipleOutputLocations&quot;
+        *      - option id:         &quot;net.sourceforge.phpdt.core.classpath.multipleOutputLocations&quot;
         *      - possible values:   { &quot;enabled&quot;, &quot;disabled&quot; }
         *      - default:           &quot;enabled&quot;
         *  
         *      FORMATTER / Inserting New Line Before Opening Brace
         *     When Insert, a new line is inserted before an opening brace, otherwise nothing
         *     is inserted
-        *      - option id:         &quot;org.eclipse.jdt.core.formatter.newline.openingBrace&quot;
+        *      - option id:         &quot;net.sourceforge.phpdt.core.formatter.newline.openingBrace&quot;
         *      - possible values:   { &quot;insert&quot;, &quot;do not insert&quot; }
         *      - default:           &quot;do not insert&quot;
         *  
         *      FORMATTER / Inserting New Line Inside Control Statement
         *     When Insert, a new line is inserted between } and following else, catch, finally
-        *      - option id:         &quot;org.eclipse.jdt.core.formatter.newline.controlStatement&quot;
+        *      - option id:         &quot;net.sourceforge.phpdt.core.formatter.newline.controlStatement&quot;
         *      - possible values:   { &quot;insert&quot;, &quot;do not insert&quot; }
         *      - default:           &quot;do not insert&quot;
         *  
         *      FORMATTER / Clearing Blank Lines
         *     When Clear all, all blank lines are removed. When Preserve one, only one is kept
         *     and all others removed.
-        *      - option id:         &quot;org.eclipse.jdt.core.formatter.newline.clearAll&quot;
+        *      - option id:         &quot;net.sourceforge.phpdt.core.formatter.newline.clearAll&quot;
         *      - possible values:   { &quot;clear all&quot;, &quot;preserve one&quot; }
         *      - default:           &quot;preserve one&quot;
         *  
@@ -2465,117 +2489,117 @@ public class JavaCore {
         *     When Insert, a blank line is inserted between an else and an if when they are 
         *     contiguous. When choosing to not insert, else-if will be kept on the same
         *     line when possible.
-        *      - option id:         &quot;org.eclipse.jdt.core.formatter.newline.elseIf&quot;
+        *      - option id:         &quot;net.sourceforge.phpdt.core.formatter.newline.elseIf&quot;
         *      - possible values:   { &quot;insert&quot;, &quot;do not insert&quot; }
         *      - default:           &quot;do not insert&quot;
         *  
         *      FORMATTER / Inserting New Line In Empty Block
         *     When insert, a line break is inserted between contiguous { and }, if } is not followed
         *     by a keyword.
-        *      - option id:         &quot;org.eclipse.jdt.core.formatter.newline.emptyBlock&quot;
+        *      - option id:         &quot;net.sourceforge.phpdt.core.formatter.newline.emptyBlock&quot;
         *      - possible values:   { &quot;insert&quot;, &quot;do not insert&quot; }
         *      - default:           &quot;insert&quot;
         *  
         *      FORMATTER / Splitting Lines Exceeding Length
         *     Enable splitting of long lines (exceeding the configurable length). Length of 0 will
         *     disable line splitting
-        *      - option id:         &quot;org.eclipse.jdt.core.formatter.lineSplit&quot;
+        *      - option id:         &quot;net.sourceforge.phpdt.core.formatter.lineSplit&quot;
         *      - possible values:      &quot;&lt;n&gt;&quot;, where n is zero or a positive integer
         *      - default:           &quot;80&quot;
         *  
         *      FORMATTER / Compacting Assignment
         *     Assignments can be formatted asymmetrically, for example 'int x= 2;', when Normal, a space
         *     is inserted before the assignment operator
-        *      - option id:         &quot;org.eclipse.jdt.core.formatter.style.assignment&quot;
+        *      - option id:         &quot;net.sourceforge.phpdt.core.formatter.style.assignment&quot;
         *      - possible values:   { &quot;compact&quot;, &quot;normal&quot; }
         *      - default:           &quot;normal&quot;
         *  
         *      FORMATTER / Defining Indentation Character
         *     Either choose to indent with tab characters or spaces
-        *      - option id:         &quot;org.eclipse.jdt.core.formatter.tabulation.char&quot;
+        *      - option id:         &quot;net.sourceforge.phpdt.core.formatter.tabulation.char&quot;
         *      - possible values:   { &quot;tab&quot;, &quot;space&quot; }
         *      - default:           &quot;tab&quot;
         *  
         *      FORMATTER / Defining Space Indentation Length
         *     When using spaces, set the amount of space characters to use for each 
         *     indentation mark.
-        *      - option id:         &quot;org.eclipse.jdt.core.formatter.tabulation.size&quot;
+        *      - option id:         &quot;net.sourceforge.phpdt.core.formatter.tabulation.size&quot;
         *      - possible values:      &quot;&lt;n&gt;&quot;, where n is a positive integer
         *      - default:           &quot;4&quot;
         *  
         *      FORMATTER / Inserting space in cast expression
         *     When Insert, a space is added between the type and the expression in a cast expression.
-        *      - option id:         &quot;org.eclipse.jdt.core.formatter.space.castexpression&quot;
+        *      - option id:         &quot;net.sourceforge.phpdt.core.formatter.space.castexpression&quot;
         *      - possible values:   { &quot;insert&quot;, &quot;do not insert&quot; }
         *      - default:           &quot;insert&quot;
         *  
         *      CODEASSIST / Activate Visibility Sensitive Completion
         *     When active, completion doesn't show that you can not see
         *     (for example, you can not see private methods of a super class).
-        *      - option id:         &quot;org.eclipse.jdt.core.codeComplete.visibilityCheck&quot;
+        *      - option id:         &quot;net.sourceforge.phpdt.core.codeComplete.visibilityCheck&quot;
         *      - possible values:   { &quot;enabled&quot;, &quot;disabled&quot; }
         *      - default:           &quot;disabled&quot;
         *  
         *      CODEASSIST / Automatic Qualification of Implicit Members
         *     When active, completion automatically qualifies completion on implicit
         *     field references and message expressions.
-        *      - option id:         &quot;org.eclipse.jdt.core.codeComplete.forceImplicitQualification&quot;
+        *      - option id:         &quot;net.sourceforge.phpdt.core.codeComplete.forceImplicitQualification&quot;
         *      - possible values:   { &quot;enabled&quot;, &quot;disabled&quot; }
         *      - default:           &quot;disabled&quot;
         *  
         *   CODEASSIST / Define the Prefixes for Field Name
         *     When the prefixes is non empty, completion for field name will begin with
         *     one of the proposed prefixes.
-        *      - option id:         &quot;org.eclipse.jdt.core.codeComplete.fieldPrefixes&quot;
+        *      - option id:         &quot;net.sourceforge.phpdt.core.codeComplete.fieldPrefixes&quot;
         *      - possible values:   { &quot;&lt;prefix&gt;[,&lt;prefix&gt;]*&quot; } where &lt;prefix&gt; is a String without any wild-card 
         *      - default:           &quot;&quot;
         *  
         *   CODEASSIST / Define the Prefixes for Static Field Name
         *     When the prefixes is non empty, completion for static field name will begin with
         *     one of the proposed prefixes.
-        *      - option id:         &quot;org.eclipse.jdt.core.codeComplete.staticFieldPrefixes&quot;
+        *      - option id:         &quot;net.sourceforge.phpdt.core.codeComplete.staticFieldPrefixes&quot;
         *      - possible values:   { &quot;&lt;prefix&gt;[,&lt;prefix&gt;]*&quot; } where &lt;prefix&gt; is a String without any wild-card 
         *      - default:           &quot;&quot;
         *  
         *   CODEASSIST / Define the Prefixes for Local Variable Name
         *     When the prefixes is non empty, completion for local variable name will begin with
         *     one of the proposed prefixes.
-        *      - option id:         &quot;org.eclipse.jdt.core.codeComplete.localPrefixes&quot;
+        *      - option id:         &quot;net.sourceforge.phpdt.core.codeComplete.localPrefixes&quot;
         *      - possible values:   { &quot;&lt;prefix&gt;[,&lt;prefix&gt;]*&quot; } where &lt;prefix&gt; is a String without any wild-card 
         *      - default:           &quot;&quot;
         *  
         *   CODEASSIST / Define the Prefixes for Argument Name
         *     When the prefixes is non empty, completion for argument name will begin with
         *     one of the proposed prefixes.
-        *      - option id:         &quot;org.eclipse.jdt.core.codeComplete.argumentPrefixes&quot;
+        *      - option id:         &quot;net.sourceforge.phpdt.core.codeComplete.argumentPrefixes&quot;
         *      - possible values:   { &quot;&lt;prefix&gt;[,&lt;prefix&gt;]*&quot; } where &lt;prefix&gt; is a String without any wild-card 
         *      - default:           &quot;&quot;
         *  
         *   CODEASSIST / Define the Suffixes for Field Name
         *     When the suffixes is non empty, completion for field name will end with
         *     one of the proposed suffixes.
-        *      - option id:         &quot;org.eclipse.jdt.core.codeComplete.fieldSuffixes&quot;
+        *      - option id:         &quot;net.sourceforge.phpdt.core.codeComplete.fieldSuffixes&quot;
         *      - possible values:   { &quot;&lt;suffix&gt;[,&lt;suffix&gt;]*&quot; } where &lt;suffix&gt; is a String without any wild-card 
         *      - default:           &quot;&quot;
         *  
         *   CODEASSIST / Define the Suffixes for Static Field Name
         *     When the suffixes is non empty, completion for static field name will end with
         *     one of the proposed suffixes.
-        *      - option id:         &quot;org.eclipse.jdt.core.codeComplete.staticFieldSuffixes&quot;
+        *      - option id:         &quot;net.sourceforge.phpdt.core.codeComplete.staticFieldSuffixes&quot;
         *      - possible values:   { &quot;&lt;suffix&gt;[,&lt;suffix&gt;]*&quot; } where &lt;suffix&gt; is a String without any wild-card 
         *      - default:           &quot;&quot;
         *  
         *   CODEASSIST / Define the Suffixes for Local Variable Name
         *     When the suffixes is non empty, completion for local variable name will end with
         *     one of the proposed suffixes.
-        *      - option id:         &quot;org.eclipse.jdt.core.codeComplete.localSuffixes&quot;
+        *      - option id:         &quot;net.sourceforge.phpdt.core.codeComplete.localSuffixes&quot;
         *      - possible values:   { &quot;&lt;suffix&gt;[,&lt;suffix&gt;]*&quot; } where &lt;suffix&gt; is a String without any wild-card 
         *      - default:           &quot;&quot;
         *  
         *   CODEASSIST / Define the Suffixes for Argument Name
         *     When the suffixes is non empty, completion for argument name will end with
         *     one of the proposed suffixes.
-        *      - option id:         &quot;org.eclipse.jdt.core.codeComplete.argumentSuffixes&quot;
+        *      - option id:         &quot;net.sourceforge.phpdt.core.codeComplete.argumentSuffixes&quot;
         *      - possible values:   { &quot;&lt;suffix&gt;[,&lt;suffix&gt;]*&quot; } where &lt;prefix&gt; is a String without any wild-card 
         *      - default:           &quot;&quot;
         *  &lt;/pre&gt;
@@ -3221,13 +3245,13 @@ public class JavaCore {
         * <p>
         * A container is exclusively resolved by a
         * <code>ClasspathContainerInitializer</code> registered onto the
-        * extension point "org.eclipse.jdt.core.classpathContainerInitializer".
+        * extension point "net.sourceforge.phpdt.core.classpathContainerInitializer".
         * <p>
         * A container path must be formed of at least one segment, where:
         * <ul>
         * <li>the first segment is a unique ID identifying the target container,
         * there must be a container initializer registered onto this ID through the
-        * extension point "org.eclipse.jdt.core.classpathContainerInitializer".
+        * extension point "net.sourceforge.phpdt.core.classpathContainerInitializer".
         * </li>
         * <li>the remaining segments will be passed onto the initializer, and can
         * be used as additional hints during the initialization phase.</li>
@@ -3239,7 +3263,7 @@ public class JavaCore {
         * containerEntry = JavaCore.newContainerEntry(new
         * Path("MyProvidedJDK/default"));
         * 
-        * <extension point="org.eclipse.jdt.core.classpathContainerInitializer">
+        * <extension point="net.sourceforge.phpdt.core.classpathContainerInitializer">
         * <containerInitializer id="MyProvidedJDK"
         * class="com.example.MyInitializer"/>
         * <p>
@@ -3279,13 +3303,13 @@ public class JavaCore {
    * <p>
    * A container is exclusively resolved by a
    * <code>ClasspathContainerInitializer</code> registered onto the
-   * extension point "org.eclipse.jdt.core.classpathContainerInitializer".
+   * extension point "net.sourceforge.phpdt.core.classpathContainerInitializer".
    * <p>
    * A container path must be formed of at least one segment, where:
    * <ul>
    * <li>the first segment is a unique ID identifying the target container,
    * there must be a container initializer registered onto this ID through the
-   * extension point "org.eclipse.jdt.core.classpathContainerInitializer".
+   * extension point "net.sourceforge.phpdt.core.classpathContainerInitializer".
    * </li>
    * <li>the remaining segments will be passed onto the initializer, and can
    * be used as additional hints during the initialization phase.</li>
@@ -3297,7 +3321,7 @@ public class JavaCore {
    * containerEntry = JavaCore.newContainerEntry(new
    * Path("MyProvidedJDK/default"));
    * 
-   * <extension point="org.eclipse.jdt.core.classpathContainerInitializer">
+   * <extension point="net.sourceforge.phpdt.core.classpathContainerInitializer">
    * <containerInitializer id="MyProvidedJDK"
    * class="com.example.MyInitializer"/>
    * <p>
@@ -3319,22 +3343,26 @@ public class JavaCore {
    * @see JavaCore#newContainerEntry(IPath, boolean)
    * @since 2.0
    */
-  public static IClasspathEntry newContainerEntry(IPath containerPath,
-      boolean isExported) {
-
-    if (containerPath == null || containerPath.segmentCount() < 1) {
-      Assert
-          .isTrue(
-              false,
-              "Illegal classpath container path: \'" + containerPath.makeRelative().toString() + "\', must have at least one segment (containerID+hints)"); //$NON-NLS-1$//$NON-NLS-2$
-    }
-    return new ClasspathEntry(IPackageFragmentRoot.K_SOURCE,
-        IClasspathEntry.CPE_CONTAINER, containerPath,
-        ClasspathEntry.NO_EXCLUSION_PATTERNS, null, // source attachment
-        null, // source attachment root
-        null, // specific output folder
-        isExported);
-  }
+       
+       public static IClasspathEntry newContainerEntry(IPath containerPath, boolean isExported) {
+               
+       if (containerPath == null) Assert.isTrue(false, "Container path cannot be null"); //$NON-NLS-1$
+       if (containerPath.segmentCount() < 1) {
+               Assert.isTrue(
+                       false,
+                       "Illegal classpath container path: \'" + containerPath.makeRelative().toString() + "\', must have at least one segment (containerID+hints)"); //$NON-NLS-1$//$NON-NLS-2$
+       }
+       return new ClasspathEntry(
+               IPackageFragmentRoot.K_SOURCE,
+               IClasspathEntry.CPE_CONTAINER,
+               containerPath,
+               ClasspathEntry.INCLUDE_ALL,
+               ClasspathEntry.EXCLUDE_NONE, 
+               null, // source attachment
+               null, // source attachment root
+               null, // specific output folder
+               isExported);
+}
 
   /**
    * Creates and returns a new non-exported classpath entry of kind
@@ -3498,17 +3526,21 @@ public class JavaCore {
    * @since 2.0
    */
   public static IClasspathEntry newProjectEntry(IPath path, boolean isExported) {
-
-    if (!path.isAbsolute())
-      Assert.isTrue(false, "Path for IClasspathEntry must be absolute"); //$NON-NLS-1$
-
-    return new ClasspathEntry(IPackageFragmentRoot.K_SOURCE,
-        IClasspathEntry.CPE_PROJECT, path,
-        ClasspathEntry.NO_EXCLUSION_PATTERNS, null, // source attachment
-        null, // source attachment root
-        null, // specific output folder
-        isExported);
-  }
+       
+       if (!path.isAbsolute()) Assert.isTrue(false, "Path for IClasspathEntry must be absolute"); //$NON-NLS-1$
+       
+       return new ClasspathEntry(
+               IPackageFragmentRoot.K_SOURCE,
+               IClasspathEntry.CPE_PROJECT,
+               path,
+               ClasspathEntry.INCLUDE_ALL, 
+               ClasspathEntry.EXCLUDE_NONE, 
+               null, // source attachment
+               null, // source attachment root
+               null, // specific output folder
+               isExported);
+}
+  
 
   /**
    * Returns a new empty region.
@@ -3520,184 +3552,164 @@ public class JavaCore {
   }
 
   /**
-   * Creates and returns a new classpath entry of kind <code>CPE_SOURCE</code>
-   * for the project's source folder identified by the given absolute
-   * workspace-relative path. This specifies that all package fragments within
-   * the root will have children of type <code>ICompilationUnit</code>.
-   * <p>
-   * The source folder is referred to using an absolute path relative to the
-   * workspace root, e.g. <code>/Project/src</code>. A project's source
-   * folders are located with that project. That is, a source classpath entry
-   * specifying the path <code>/P1/src</code> is only usable for project
-   * <code>P1</code>.
-   * </p>
-   * <p>
-   * The source classpath entry created by this method includes all source
-   * files below the given workspace-relative path. To selectively exclude
-   * some of these source files, use the factory method
-   * <code>JavaCore.newSourceEntry(IPath,IPath[])</code> instead.
-   * </p>
-   * <p>
-   * Note that all sources/binaries inside a project are contributed as a
-   * whole through a project entry (see <code>JavaCore.newProjectEntry</code>).
-   * Particular source entries cannot be selectively exported.
-   * </p>
-   * 
-   * @param path
-   *            the absolute workspace-relative path of a source folder
-   * @return a new source classpath entry with not exclusion patterns
-   * 
-   * @see #newSourceEntry(org.eclipse.core.runtime.IPath,org.eclipse.core.runtime.IPath[])
-   */
-  public static IClasspathEntry newSourceEntry(IPath path) {
+        * Creates and returns a new classpath entry of kind <code>CPE_SOURCE</code>
+        * for all files in the project's source folder identified by the given
+        * absolute workspace-relative path.
+        * <p>
+        * The convenience method is fully equivalent to:
+        * <pre>
+        * newSourceEntry(path, new IPath[] {}, new IPath[] {}, null);
+        * </pre>
+        * </p>
+        * 
+        * @param path the absolute workspace-relative path of a source folder
+        * @return a new source classpath entry
+        * @see #newSourceEntry(IPath, IPath[], IPath[], IPath)
+        */
+       public static IClasspathEntry newSourceEntry(IPath path) {
 
-    return newSourceEntry(path, ClasspathEntry.NO_EXCLUSION_PATTERNS, null /*
-     * output
-     * location
-     */);
-  }
+               return newSourceEntry(path, ClasspathEntry.INCLUDE_ALL, ClasspathEntry.EXCLUDE_NONE, null /*output location*/);
+       }
+       
+       /**
+        * Creates and returns a new classpath entry of kind <code>CPE_SOURCE</code>
+        * for the project's source folder identified by the given absolute 
+        * workspace-relative path but excluding all source files with paths
+        * matching any of the given patterns.
+        * <p>
+        * The convenience method is fully equivalent to:
+        * <pre>
+        * newSourceEntry(path, new IPath[] {}, exclusionPatterns, null);
+        * </pre>
+        * </p>
+        *
+        * @param path the absolute workspace-relative path of a source folder
+        * @param exclusionPatterns the possibly empty list of exclusion patterns
+        *    represented as relative paths
+        * @return a new source classpath entry
+        * @see #newSourceEntry(IPath, IPath[], IPath[], IPath)
+        * @since 2.1
+        */
+       public static IClasspathEntry newSourceEntry(IPath path, IPath[] exclusionPatterns) {
 
-  /**
-   * Creates and returns a new classpath entry of kind <code>CPE_SOURCE</code>
-   * for the project's source folder identified by the given absolute
-   * workspace-relative path but excluding all source files with paths
-   * matching any of the given patterns. This specifies that all package
-   * fragments within the root will have children of type
-   * <code>ICompilationUnit</code>.
-   * <p>
-   * The source folder is referred to using an absolute path relative to the
-   * workspace root, e.g. <code>/Project/src</code>. A project's source
-   * folders are located with that project. That is, a source classpath entry
-   * specifying the path <code>/P1/src</code> is only usable for project
-   * <code>P1</code>.
-   * </p>
-   * <p>
-   * The source classpath entry created by this method includes all source
-   * files below the given workspace-relative path except for those matched by
-   * one (or more) of the given exclusion patterns. Each exclusion pattern is
-   * represented by a relative path, which is interpreted as relative to the
-   * source folder. For example, if the source folder path is
-   * <code>/Project/src</code> and the exclusion pattern is
-   * <code>com/xyz/tests/&#42;&#42;</code>, then source files like
-   * <code>/Project/src/com/xyz/Foo.java</code> and
-   * <code>/Project/src/com/xyz/utils/Bar.java</code> would be included,
-   * whereas <code>/Project/src/com/xyz/tests/T1.java</code> and
-   * <code>/Project/src/com/xyz/tests/quick/T2.java</code> would be
-   * excluded. Exclusion patterns can contain can contain '**', '*' or '?'
-   * wildcards; see <code>IClasspathEntry.getExclusionPatterns</code> for
-   * the full description of the syntax and semantics of exclusion patterns.
-   * </p>
-   * If the empty list of exclusion patterns is specified, the source folder
-   * will automatically include all resources located inside the source
-   * folder. In that case, the result is entirely equivalent to using the
-   * factory method <code>JavaCore.newSourceEntry(IPath)</code>.
-   * </p>
-   * <p>
-   * Note that all sources/binaries inside a project are contributed as a
-   * whole through a project entry (see <code>JavaCore.newProjectEntry</code>).
-   * Particular source entries cannot be selectively exported.
-   * </p>
-   * 
-   * @param path
-   *            the absolute workspace-relative path of a source folder
-   * @param exclusionPatterns
-   *            the possibly empty list of exclusion patterns represented as
-   *            relative paths
-   * @return a new source classpath entry with the given exclusion patterns
-   * @see #newSourceEntry(org.eclipse.core.runtime.IPath)
-   * @see IClasspathEntry#getExclusionPatterns
-   * 
-   * @since 2.1
-   */
-  public static IClasspathEntry newSourceEntry(IPath path,
-      IPath[] exclusionPatterns) {
+               return newSourceEntry(path, ClasspathEntry.INCLUDE_ALL, exclusionPatterns, null /*output location*/); 
+       }
 
-    return newSourceEntry(path, exclusionPatterns, null /* output location */);
-  }
+       /**
+        * Creates and returns a new classpath entry of kind <code>CPE_SOURCE</code>
+        * for the project's source folder identified by the given absolute 
+        * workspace-relative path but excluding all source files with paths
+        * matching any of the given patterns, and associated with a specific output location
+        * (that is, ".class" files are not going to the project default output location). 
+        * <p>
+        * The convenience method is fully equivalent to:
+        * <pre>
+        * newSourceEntry(path, new IPath[] {}, exclusionPatterns, specificOutputLocation);
+        * </pre>
+        * </p>
+        *
+        * @param path the absolute workspace-relative path of a source folder
+        * @param exclusionPatterns the possibly empty list of exclusion patterns
+        *    represented as relative paths
+        * @param specificOutputLocation the specific output location for this source entry (<code>null</code> if using project default ouput location)
+        * @return a new source classpath entry
+        * @see #newSourceEntry(IPath, IPath[], IPath[], IPath)
+        * @since 2.1
+        */
+       public static IClasspathEntry newSourceEntry(IPath path, IPath[] exclusionPatterns, IPath specificOutputLocation) {
 
-  /**
-   * Creates and returns a new classpath entry of kind <code>CPE_SOURCE</code>
-   * for the project's source folder identified by the given absolute
-   * workspace-relative path but excluding all source files with paths
-   * matching any of the given patterns, and associated with a specific output
-   * location (that is, ".class" files are not going to the project default
-   * output location). All package fragments within the root will have
-   * children of type <code>ICompilationUnit</code>.
-   * <p>
-   * The source folder is referred to using an absolute path relative to the
-   * workspace root, e.g. <code>/Project/src</code>. A project's source
-   * folders are located with that project. That is, a source classpath entry
-   * specifying the path <code>/P1/src</code> is only usable for project
-   * <code>P1</code>.
-   * </p>
-   * <p>
-   * The source classpath entry created by this method includes all source
-   * files below the given workspace-relative path except for those matched by
-   * one (or more) of the given exclusion patterns. Each exclusion pattern is
-   * represented by a relative path, which is interpreted as relative to the
-   * source folder. For example, if the source folder path is
-   * <code>/Project/src</code> and the exclusion pattern is
-   * <code>com/xyz/tests/&#42;&#42;</code>, then source files like
-   * <code>/Project/src/com/xyz/Foo.java</code> and
-   * <code>/Project/src/com/xyz/utils/Bar.java</code> would be included,
-   * whereas <code>/Project/src/com/xyz/tests/T1.java</code> and
-   * <code>/Project/src/com/xyz/tests/quick/T2.java</code> would be
-   * excluded. Exclusion patterns can contain can contain '**', '*' or '?'
-   * wildcards; see <code>IClasspathEntry.getExclusionPatterns</code> for
-   * the full description of the syntax and semantics of exclusion patterns.
-   * </p>
-   * If the empty list of exclusion patterns is specified, the source folder
-   * will automatically include all resources located inside the source
-   * folder. In that case, the result is entirely equivalent to using the
-   * factory method <code>JavaCore.newSourceEntry(IPath)</code>.
-   * </p>
-   * <p>
-   * Additionally, a source entry can be associated with a specific output
-   * location. By doing so, the Java builder will ensure that the generated
-   * ".class" files will be issued inside this output location, as opposed to
-   * be generated into the project default output location (when output
-   * location is <code>null</code>). Note that multiple source entries may
-   * target the same output location. The output location is referred to using
-   * an absolute path relative to the workspace root, e.g.
-   * <code>"/Project/bin"</code>, it must be located inside the same
-   * project as the source folder.
-   * </p>
-   * <p>
-   * Also note that all sources/binaries inside a project are contributed as a
-   * whole through a project entry (see <code>JavaCore.newProjectEntry</code>).
-   * Particular source entries cannot be selectively exported.
-   * </p>
-   * 
-   * @param path
-   *            the absolute workspace-relative path of a source folder
-   * @param exclusionPatterns
-   *            the possibly empty list of exclusion patterns represented as
-   *            relative paths
-   * @param outputLocation
-   *            the specific output location for this source entry (
-   *            <code>null</code> if using project default ouput location)
-   * @return a new source classpath entry with the given exclusion patterns
-   * @see #newSourceEntry(org.eclipse.core.runtime.IPath)
-   * @see IClasspathEntry#getExclusionPatterns
-   * @see IClasspathEntry#getOutputLocation()
-   * 
-   * @since 2.1
-   */
-  public static IClasspathEntry newSourceEntry(IPath path,
-      IPath[] exclusionPatterns, IPath specificOutputLocation) {
-
-    if (!path.isAbsolute())
-      Assert.isTrue(false, "Path for IClasspathEntry must be absolute"); //$NON-NLS-1$
-    if (exclusionPatterns == null)
-      Assert.isTrue(false, "Exclusion pattern set cannot be null"); //$NON-NLS-1$
-
-    return new ClasspathEntry(IPackageFragmentRoot.K_SOURCE,
-        IClasspathEntry.CPE_SOURCE, path, exclusionPatterns, null, // source
-        // attachment
-        null, // source attachment root
-        specificOutputLocation, // custom output location
-        false);
-  }
+           return newSourceEntry(path, ClasspathEntry.INCLUDE_ALL, exclusionPatterns, specificOutputLocation);
+       }
+               
+       /**
+        * Creates and returns a new classpath entry of kind <code>CPE_SOURCE</code>
+        * for the project's source folder identified by the given absolute 
+        * workspace-relative path using the given inclusion and exclusion patterns
+        * to determine which source files are included, and the given output path
+        * to control the output location of generated files.
+        * <p>
+        * The source folder is referred to using an absolute path relative to the
+        * workspace root, e.g. <code>/Project/src</code>. A project's source 
+        * folders are located with that project. That is, a source classpath
+        * entry specifying the path <code>/P1/src</code> is only usable for
+        * project <code>P1</code>.
+        * </p>
+        * <p>
+        * The inclusion patterns determines the initial set of source files that
+        * are to be included; the exclusion patterns are then used to reduce this
+        * set. When no inclusion patterns are specified, the initial file set
+        * includes all relevent files in the resource tree rooted at the source
+        * entry's path. On the other hand, specifying one or more inclusion
+        * patterns means that all <b>and only</b> files matching at least one of
+        * the specified patterns are to be included. If exclusion patterns are 
+        * specified, the initial set of files is then reduced by eliminating files
+        * matched by at least one of the exclusion patterns. Inclusion and
+        * exclusion patterns look like relative file paths with wildcards and are
+        * interpreted relative to the source entry's path. File patterns are 
+        * case-sensitive can contain '**', '*' or '?' wildcards (see
+        * {@link IClasspathEntry#getExclusionPatterns()} for the full description
+        * of their syntax and semantics). The resulting set of files are included
+        * in the corresponding package fragment root; all package fragments within
+        * the root will have children of type <code>ICompilationUnit</code>.
+        * </p>
+        * <p>
+        * For example, if the source folder path is 
+        * <code>/Project/src</code>, there are no inclusion filters, and the
+        * exclusion pattern is 
+        * <code>com/xyz/tests/&#42;&#42;</code>, then source files
+        * like <code>/Project/src/com/xyz/Foo.java</code>
+        * and <code>/Project/src/com/xyz/utils/Bar.java</code> would be included,
+        * whereas <code>/Project/src/com/xyz/tests/T1.java</code>
+        * and <code>/Project/src/com/xyz/tests/quick/T2.java</code> would be
+        * excluded. 
+        * </p>
+        * <p>
+        * Additionally, a source entry can be associated with a specific output location. 
+        * By doing so, the Java builder will ensure that the generated ".class" files will 
+        * be issued inside this output location, as opposed to be generated into the 
+        * project default output location (when output location is <code>null</code>). 
+        * Note that multiple source entries may target the same output location.
+        * The output location is referred to using an absolute path relative to the 
+        * workspace root, e.g. <code>"/Project/bin"</code>, it must be located inside 
+        * the same project as the source folder.
+        * </p>
+        * <p>
+        * Also note that all sources/binaries inside a project are contributed as
+        * a whole through a project entry
+        * (see <code>JavaCore.newProjectEntry</code>). Particular source entries
+        * cannot be selectively exported.
+        * </p>
+        *
+        * @param path the absolute workspace-relative path of a source folder
+        * @param inclusionPatterns the possibly empty list of inclusion patterns
+        *    represented as relative paths
+        * @param exclusionPatterns the possibly empty list of exclusion patterns
+        *    represented as relative paths
+        * @param specificOutputLocation the specific output location for this source entry (<code>null</code> if using project default ouput location)
+        * @return a new source classpath entry with the given exclusion patterns
+        * @see IClasspathEntry#getInclusionPatterns()
+        * @see IClasspathEntry#getExclusionPatterns()
+        * @see IClasspathEntry#getOutputLocation()
+        * @since 3.0
+        */
+       public static IClasspathEntry newSourceEntry(IPath path, IPath[] inclusionPatterns, IPath[] exclusionPatterns, IPath specificOutputLocation) {
+
+               if (path == null) Assert.isTrue(false, "Source path cannot be null"); //$NON-NLS-1$
+               if (!path.isAbsolute()) Assert.isTrue(false, "Path for IClasspathEntry must be absolute"); //$NON-NLS-1$
+               if (exclusionPatterns == null) Assert.isTrue(false, "Exclusion pattern set cannot be null"); //$NON-NLS-1$
+               if (inclusionPatterns == null) Assert.isTrue(false, "Inclusion pattern set cannot be null"); //$NON-NLS-1$
+
+               return new ClasspathEntry(
+                       IPackageFragmentRoot.K_SOURCE,
+                       IClasspathEntry.CPE_SOURCE,
+                       path,
+                       inclusionPatterns,
+                       exclusionPatterns,
+                       null, // source attachment
+                       null, // source attachment root
+                       specificOutputLocation, // custom output location
+                       false);
+       }
 
   /**
    * Creates and returns a new non-exported classpath entry of kind
@@ -3712,7 +3724,7 @@ public class JavaCore {
    * It is possible to register an automatic initializer (
    * <code>ClasspathVariableInitializer</code>), which will be invoked
    * through the extension point
-   * "org.eclipse.jdt.core.classpathVariableInitializer". After resolution, a
+   * "net.sourceforge.phpdt.core.classpathVariableInitializer". After resolution, a
    * classpath variable entry may either correspond to a project or a library
    * entry.</li>
    * <p>
@@ -3773,7 +3785,7 @@ public class JavaCore {
    * It is possible to register an automatic initializer (
    * <code>ClasspathVariableInitializer</code>), which will be invoked
    * through the extension point
-   * "org.eclipse.jdt.core.classpathVariableInitializer". After resolution, a
+   * "net.sourceforge.phpdt.core.classpathVariableInitializer". After resolution, a
    * classpath variable entry may either correspond to a project or a library
    * entry.</li>
    * <p>
@@ -3907,7 +3919,7 @@ public class JavaCore {
    * formed by a first ID segment followed with extra segments, which can be
    * used as additional hints for the resolution. The container ID is used to
    * identify a <code>ClasspathContainerInitializer</code> registered on the
-   * extension point "org.eclipse.jdt.core.classpathContainerInitializer".
+   * extension point "net.sourceforge.phpdt.core.classpathContainerInitializer".
    * <p>
    * There is no assumption that each individual container value passed in
    * argument (<code>respectiveContainers</code>) must answer the exact
@@ -3916,7 +3928,7 @@ public class JavaCore {
    * actual container object. It can be delegated to a
    * <code>ClasspathContainerInitializer</code>, which can be activated
    * through the extension point
-   * "org.eclipse.jdt.core.ClasspathContainerInitializer").
+   * "net.sourceforge.phpdt.core.ClasspathContainerInitializer").
    * <p>
    * In reaction to changing container values, the JavaModel will be updated
    * to reflect the new state of the updated container.
@@ -3927,7 +3939,7 @@ public class JavaCore {
    * are not preserved from a session to another. It is thus highly
    * recommended to register a <code>ClasspathContainerInitializer</code>
    * for each referenced container (through the extension point
-   * "org.eclipse.jdt.core.ClasspathContainerInitializer").
+   * "net.sourceforge.phpdt.core.ClasspathContainerInitializer").
    * <p>
    * Note: setting a container to <code>null</code> will cause it to be
    * lazily resolved again whenever its value is required. In particular, this
index cc88627..2f77107 100644 (file)
@@ -15,7 +15,7 @@ import net.sourceforge.phpdt.internal.core.JavaModelStatus;
 import org.eclipse.core.runtime.CoreException;
 import org.eclipse.core.runtime.IStatus;
 
-//import org.eclipse.jdt.internal.core.JavaModelStatus;
+//import net.sourceforge.phpdt.internal.core.JavaModelStatus;
 
 /**
  * A checked exception representing a failure in the Java model.
diff --git a/net.sourceforge.phpeclipse/src/net/sourceforge/phpdt/core/NamingConventions.java b/net.sourceforge.phpeclipse/src/net/sourceforge/phpdt/core/NamingConventions.java
new file mode 100644 (file)
index 0000000..532ee06
--- /dev/null
@@ -0,0 +1,941 @@
+/*******************************************************************************
+ * Copyright (c) 2000, 2004 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials 
+ * are made available under the terms of the Common Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/cpl-v10.html
+ * 
+ * Contributors:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+package net.sourceforge.phpdt.core;
+
+import net.sourceforge.phpdt.core.compiler.CharOperation;
+import net.sourceforge.phpdt.internal.codeassist.impl.AssistOptions;
+import net.sourceforge.phpdt.internal.core.INamingRequestor;
+import net.sourceforge.phpdt.internal.core.InternalNamingConventions;
+
+
+/**
+ * Provides methods for computing Java-specific names.
+ * <p>
+ * The behavior of the methods is dependent of several JavaCore options.
+ * <p>
+ * The possible options are :
+ * <ul>
+ * <li>CODEASSIST_FIELD_PREFIXES : Define the Prefixes for Field Name.</li>
+ * <li>CODEASSIST_STATIC_FIELD_PREFIXES : Define the Prefixes for Static Field Name.</li>
+ * <li>CODEASSIST_LOCAL_PREFIXES : Define the Prefixes for Local Variable Name.</li>
+ * <li>CODEASSIST_ARGUMENT_PREFIXES : Define the Prefixes for Argument Name.</li>
+ * <li>CODEASSIST_FIELD_SUFFIXES : Define the Suffixes for Field Name.</li>
+ * <li>CODEASSIST_STATIC_FIELD_SUFFIXES : Define the Suffixes for Static Field Name.</li>
+ * <li>CODEASSIST_LOCAL_SUFFIXES : Define the Suffixes for Local Variable Name.</li>
+ * <li>CODEASSIST_ARGUMENT_SUFFIXES : Define the Suffixes for Argument Name.</li>
+ * </ul>
+ * </p>
+ * <p>
+ * For a complete description of the configurable options, see <code>getDefaultOptions</code>.
+ * For programmaticaly change these options, see <code>JavaCore#setOptions()</code>.
+ * </p>
+ * <p>
+ * This class provides static methods and constants only; it is not intended to be
+ * instantiated or subclassed by clients.
+ * </p>
+ * 
+ * @see JavaCore#setOptions(java.util.Hashtable)
+ * @see JavaCore#getDefaultOptions()
+ * @since 2.1
+ */
+public final class NamingConventions {
+       private static final char[] GETTER_BOOL_NAME = "is".toCharArray(); //$NON-NLS-1$
+       private static final char[] GETTER_NAME = "get".toCharArray(); //$NON-NLS-1$
+       private static final char[] SETTER_NAME = "set".toCharArray(); //$NON-NLS-1$
+       
+       private static class NamingRequestor implements INamingRequestor {
+               private final static int SIZE = 10;
+               
+               // for acceptNameWithPrefixAndSuffix
+               private char[][] firstPrefixAndFirstSuffixResults = new char[SIZE][];
+               private int firstPrefixAndFirstSuffixResultsCount = 0;
+               private char[][] firstPrefixAndSuffixResults = new char[SIZE][];
+               private int firstPrefixAndSuffixResultsCount = 0;
+               private char[][] prefixAndFirstSuffixResults = new char[SIZE][];
+               private int prefixAndFirstSuffixResultsCount = 0;
+               private char[][] prefixAndSuffixResults = new char[SIZE][];
+               private int prefixAndSuffixResultsCount = 0;
+               
+               // for acceptNameWithPrefix
+               private char[][] firstPrefixResults = new char[SIZE][];
+               private int firstPrefixResultsCount = 0;
+               private char[][] prefixResults = new char[SIZE][];
+               private int prefixResultsCount = 0;
+               
+               // for acceptNameWithSuffix
+               private char[][] firstSuffixResults = new char[SIZE][];
+               private int firstSuffixResultsCount = 0;
+               private char[][] suffixResults = new char[SIZE][];
+               private int suffixResultsCount = 0;
+               
+               // for acceptNameWithoutPrefixAndSuffix
+               private char[][] otherResults = new char[SIZE][];
+               private int otherResultsCount = 0;
+               public void acceptNameWithPrefixAndSuffix(char[] name, boolean isFirstPrefix, boolean isFirstSuffix) {
+                       if(isFirstPrefix && isFirstSuffix) {
+                               int length = this.firstPrefixAndFirstSuffixResults.length;
+                               if(length == this.firstPrefixAndFirstSuffixResultsCount) {
+                                       System.arraycopy(
+                                               this.firstPrefixAndFirstSuffixResults,
+                                               0,
+                                               this.firstPrefixAndFirstSuffixResults = new char[length * 2][],
+                                               0,
+                                               length);
+                               }
+                               this.firstPrefixAndFirstSuffixResults[this.firstPrefixAndFirstSuffixResultsCount++] = name;                     
+                       } else if (isFirstPrefix) {
+                               int length = this.firstPrefixAndSuffixResults.length;
+                               if(length == this.firstPrefixAndSuffixResultsCount) {
+                                       System.arraycopy(
+                                               this.firstPrefixAndSuffixResults,
+                                               0,
+                                               this.firstPrefixAndSuffixResults = new char[length * 2][],
+                                               0,
+                                               length);
+                               }
+                               this.firstPrefixAndSuffixResults[this.firstPrefixAndSuffixResultsCount++] = name;
+                       } else if(isFirstSuffix) {
+                               int length = this.prefixAndFirstSuffixResults.length;
+                               if(length == this.prefixAndFirstSuffixResultsCount) {
+                                       System.arraycopy(
+                                               this.prefixAndFirstSuffixResults,
+                                               0,
+                                               this.prefixAndFirstSuffixResults = new char[length * 2][],
+                                               0,
+                                               length);
+                               }
+                               this.prefixAndFirstSuffixResults[this.prefixAndFirstSuffixResultsCount++] = name;
+                       } else {
+                               int length = this.prefixAndSuffixResults.length;
+                               if(length == this.prefixAndSuffixResultsCount) {
+                                       System.arraycopy(
+                                               this.prefixAndSuffixResults,
+                                               0,
+                                               this.prefixAndSuffixResults = new char[length * 2][],
+                                               0,
+                                               length);
+                               }
+                               this.prefixAndSuffixResults[this.prefixAndSuffixResultsCount++] = name;
+                       }
+               }
+
+               public void acceptNameWithPrefix(char[] name, boolean isFirstPrefix) {
+                       if(isFirstPrefix) {
+                               int length = this.firstPrefixResults.length;
+                               if(length == this.firstPrefixResultsCount) {
+                                       System.arraycopy(
+                                               this.firstPrefixResults,
+                                               0,
+                                               this.firstPrefixResults = new char[length * 2][],
+                                               0,
+                                               length);
+                               }
+                               this.firstPrefixResults[this.firstPrefixResultsCount++] = name;
+                       } else{
+                               int length = this.prefixResults.length;
+                               if(length == this.prefixResultsCount) {
+                                       System.arraycopy(
+                                               this.prefixResults,
+                                               0,
+                                               this.prefixResults = new char[length * 2][],
+                                               0,
+                                               length);
+                               }
+                               this.prefixResults[this.prefixResultsCount++] = name;
+                       }
+               }
+
+               public void acceptNameWithSuffix(char[] name, boolean isFirstSuffix) {
+                       if(isFirstSuffix) {
+                               int length = this.firstSuffixResults.length;
+                               if(length == this.firstSuffixResultsCount) {
+                                       System.arraycopy(
+                                               this.firstSuffixResults,
+                                               0,
+                                               this.firstSuffixResults = new char[length * 2][],
+                                               0,
+                                               length);
+                               }
+                               this.firstSuffixResults[this.firstSuffixResultsCount++] = name;
+                       } else {
+                               int length = this.suffixResults.length;
+                               if(length == this.suffixResultsCount) {
+                                       System.arraycopy(
+                                               this.suffixResults,
+                                               0,
+                                               this.suffixResults = new char[length * 2][],
+                                               0,
+                                               length);
+                               }
+                               this.suffixResults[this.suffixResultsCount++] = name;
+                       }
+               }
+
+               public void acceptNameWithoutPrefixAndSuffix(char[] name) {
+                       int length = this.otherResults.length;
+                       if(length == this.otherResultsCount) {
+                               System.arraycopy(
+                                       this.otherResults,
+                                       0,
+                                       this.otherResults = new char[length * 2][],
+                                       0,
+                                       length);
+                       }
+                       this.otherResults[this.otherResultsCount++] = name;
+               }
+               public char[][] getResults(){
+                       int count = 
+                               this.firstPrefixAndFirstSuffixResultsCount
+                               + this.firstPrefixAndSuffixResultsCount
+                               + this.prefixAndFirstSuffixResultsCount
+                               + this.prefixAndSuffixResultsCount
+                               + this.firstPrefixResultsCount
+                               + this.prefixResultsCount
+                               + this.firstSuffixResultsCount
+                               + this.suffixResultsCount
+                               + this.otherResultsCount;
+                               
+                       char[][] results = new char[count][];
+                       
+                       int index = 0;
+                       System.arraycopy(this.firstPrefixAndFirstSuffixResults, 0, results, index, this.firstPrefixAndFirstSuffixResultsCount);
+                       index += this.firstPrefixAndFirstSuffixResultsCount;
+                       System.arraycopy(this.firstPrefixAndSuffixResults, 0, results, index, this.firstPrefixAndSuffixResultsCount);
+                       index += this.firstPrefixAndSuffixResultsCount;
+                       System.arraycopy(this.prefixAndFirstSuffixResults, 0, results, index, this.prefixAndFirstSuffixResultsCount);
+                       index += this.prefixAndFirstSuffixResultsCount;         
+                       System.arraycopy(this.prefixAndSuffixResults, 0, results, index, this.prefixAndSuffixResultsCount);
+                       index += this.prefixAndSuffixResultsCount;
+                       System.arraycopy(this.firstPrefixResults, 0, results, index, this.firstPrefixResultsCount);
+                       index += this.firstPrefixResultsCount;
+                       System.arraycopy(this.prefixResults, 0, results, index, this.prefixResultsCount);
+                       index += this.prefixResultsCount;
+                       System.arraycopy(this.firstSuffixResults, 0, results, index, this.firstSuffixResultsCount);
+                       index += this.firstSuffixResultsCount;
+                       System.arraycopy(this.suffixResults, 0, results, index, this.suffixResultsCount);
+                       index += this.suffixResultsCount;
+                       System.arraycopy(this.otherResults, 0, results, index, this.otherResultsCount);
+                       
+                       return results;
+               }
+       }
+
+       
+       private NamingConventions() {
+               // Not instantiable
+       }
+
+       private static char[] removePrefixAndSuffix(char[] name, char[][] prefixes, char[][] suffixes) {
+               // remove longer prefix
+               char[] withoutPrefixName = name;
+               if (prefixes != null) {
+                       int bestLength = 0;
+                       for (int i= 0; i < prefixes.length; i++) {
+                               char[] prefix = prefixes[i];
+                               if (CharOperation.prefixEquals(prefix, name)) {
+                                       int currLen = prefix.length;
+                                       boolean lastCharIsLetter = Character.isLetter(prefix[currLen - 1]);
+                                       if(!lastCharIsLetter || (lastCharIsLetter && name.length > currLen && Character.isUpperCase(name[currLen]))) {
+                                               if (bestLength < currLen && name.length != currLen) {
+                                                       withoutPrefixName = CharOperation.subarray(name, currLen, name.length);
+                                                       bestLength = currLen;
+                                               }
+                                       }
+                               }
+                       }
+               }
+               
+               // remove longer suffix
+               char[] withoutSuffixName = withoutPrefixName;
+               if(suffixes != null) {
+                       int bestLength = 0;
+                       for (int i = 0; i < suffixes.length; i++) {
+                               char[] suffix = suffixes[i];
+                               if(CharOperation.endsWith(withoutPrefixName, suffix)) {
+                                       int currLen = suffix.length;
+                                       if(bestLength < currLen && withoutPrefixName.length != currLen) {
+                                               withoutSuffixName = CharOperation.subarray(withoutPrefixName, 0, withoutPrefixName.length - currLen);
+                                               bestLength = currLen;
+                                       }
+                               }
+                       }
+               }
+               
+               withoutSuffixName[0] = Character.toLowerCase(withoutSuffixName[0]);
+               return withoutSuffixName;
+       }
+
+       /**
+        * Remove prefix and suffix from an argument name.
+        * <p>
+        * If argument name prefix is <code>pre</code> and argument name suffix is <code>suf</code>
+        * then for an argument named <code>preArgsuf</code> the result of this method is <code>arg</code>.
+        * If there is no prefix or suffix defined in JavaCore options the result is the unchanged
+        * name <code>preArgsuf</code>.
+        * </p>
+        * <p>
+        * This method is affected by the following JavaCore options : CODEASSIST_ARGUMENT_PREFIXES and
+        * CODEASSIST_ARGUMENT_SUFFIXES.
+        * </p>
+        * <p>
+        * For a complete description of these configurable options, see <code>getDefaultOptions</code>.
+        * For programmaticaly change these options, see <code>JavaCore#setOptions()</code>.
+        * </p>
+        * 
+        * @param javaProject project which contains the argument.
+        * @param argumentName argument's name.
+        * @return char[] the name without prefix and suffix.
+        * @see JavaCore#setOptions(java.util.Hashtable)
+        * @see JavaCore#getDefaultOptions()
+        */
+       public static char[] removePrefixAndSuffixForArgumentName(IJavaProject javaProject, char[] argumentName) {
+               AssistOptions assistOptions = new AssistOptions(javaProject.getOptions(true));
+               return  removePrefixAndSuffix(
+                       argumentName,
+                       assistOptions.argumentPrefixes,
+                       assistOptions.argumentSuffixes);
+       }
+       
+       /**
+        * Remove prefix and suffix from an argument name.
+        * <p>
+        * If argument name prefix is <code>pre</code> and argument name suffix is <code>suf</code>
+        * then for an argument named <code>preArgsuf</code> the result of this method is <code>arg</code>.
+        * If there is no prefix or suffix defined in JavaCore options the result is the unchanged
+        * name <code>preArgsuf</code>.
+        * </p>
+        * <p>
+        * This method is affected by the following JavaCore options : CODEASSIST_ARGUMENT_PREFIXES and
+        * CODEASSIST_ARGUMENT_SUFFIXES.
+        * </p>
+        * <p>
+        * For a complete description of these configurable options, see <code>getDefaultOptions</code>.
+        * For programmaticaly change these options, see <code>JavaCore#setOptions()</code>.
+        * </p>
+        * 
+        * @param javaProject project which contains the argument.
+        * @param argumentName argument's name.
+        * @return char[] the name without prefix and suffix.
+        * @see JavaCore#setOptions(java.util.Hashtable)
+        * @see JavaCore#getDefaultOptions()
+        */
+       public static String removePrefixAndSuffixForArgumentName(IJavaProject javaProject, String argumentName) {
+               return String.valueOf(removePrefixAndSuffixForArgumentName(javaProject, argumentName.toCharArray()));
+       }
+
+       /**
+        * Remove prefix and suffix from a field name.
+        * <p>
+        * If field name prefix is <code>pre</code> and field name suffix is <code>suf</code>
+        * then for a field named <code>preFieldsuf</code> the result of this method is <code>field</code>.
+        * If there is no prefix or suffix defined in JavaCore options the result is the unchanged
+        * name <code>preFieldsuf</code>.
+        * </p>
+        * <p>
+        * This method is affected by the following JavaCore options : CODEASSIST_FIELD_PREFIXES, 
+        * CODEASSIST_FIELD_SUFFIXES for instance field and CODEASSIST_STATIC_FIELD_PREFIXES,
+        * CODEASSIST_STATIC_FIELD_SUFFIXES for static field.
+        * </p>
+        * <p>
+        * For a complete description of these configurable options, see <code>getDefaultOptions</code>.
+        * For programmaticaly change these options, see <code>JavaCore#setOptions()</code>.
+        * </p>
+        * 
+        * @param javaProject project which contains the field.
+        * @param fieldName field's name.
+        * @param modifiers field's modifiers as defined by the class
+        * <code>Flags</code>.
+        * @return char[] the name without prefix and suffix.
+        * @see Flags
+        * @see JavaCore#setOptions(java.util.Hashtable)
+        * @see JavaCore#getDefaultOptions()
+        */
+       public static char[] removePrefixAndSuffixForFieldName(IJavaProject javaProject, char[] fieldName, int modifiers) {
+               boolean isStatic = Flags.isStatic(modifiers);
+               AssistOptions assistOptions = new AssistOptions(javaProject.getOptions(true));
+               return  removePrefixAndSuffix(
+                       fieldName,
+                       isStatic ? assistOptions.staticFieldPrefixes : assistOptions.fieldPrefixes,
+                       isStatic ? assistOptions.staticFieldSuffixes : assistOptions.fieldSuffixes);
+       }
+
+       /**
+        * Remove prefix and suffix from a field name.
+        * <p>
+        * If field name prefix is <code>pre</code> and field name suffix is <code>suf</code>
+        * then for a field named <code>preFieldsuf</code> the result of this method is <code>field</code>.
+        * If there is no prefix or suffix defined in JavaCore options the result is the unchanged
+        * name <code>preFieldsuf</code>.
+        * </p>
+        * <p>
+        * This method is affected by the following JavaCore options : CODEASSIST_FIELD_PREFIXES, 
+        * CODEASSIST_FIELD_SUFFIXES for instance field and CODEASSIST_STATIC_FIELD_PREFIXES,
+        * CODEASSIST_STATIC_FIELD_SUFFIXES for static field.
+        * </p>
+        * <p>
+        * For a complete description of these configurable options, see <code>getDefaultOptions</code>.
+        * For programmaticaly change these options, see <code>JavaCore#setOptions()</code>.
+        * </p>
+        * 
+        * @param javaProject project which contains the field.
+        * @param fieldName field's name.
+        * @param modifiers field's modifiers as defined by the class
+        * <code>Flags</code>.
+        * @return char[] the name without prefix and suffix.
+        * @see Flags
+        * @see JavaCore#setOptions(java.util.Hashtable)
+        * @see JavaCore#getDefaultOptions()
+        */
+       public static String removePrefixAndSuffixForFieldName(IJavaProject javaProject, String fieldName, int modifiers) {
+               return String.valueOf(removePrefixAndSuffixForFieldName(javaProject, fieldName.toCharArray(), modifiers));
+       }
+       /**
+        * Remove prefix and suffix from a local variable name.
+        * <p>
+        * If local variable name prefix is <code>pre</code> and local variable name suffix is <code>suf</code>
+        * then for a local variable named <code>preLocalsuf</code> the result of this method is <code>local</code>.
+        * If there is no prefix or suffix defined in JavaCore options the result is the unchanged
+        * name <code>preLocalsuf</code>.
+        * </p>
+        * <p>
+        * This method is affected by the following JavaCore options : CODEASSIST_LOCAL_PREFIXES and 
+        * CODEASSIST_LOCAL_SUFFIXES.
+        * </p>
+        * <p>
+        * For a complete description of these configurable options, see <code>getDefaultOptions</code>.
+        * For programmaticaly change these options, see <code>JavaCore#setOptions()</code>.
+        * </p>
+        * 
+        * @param javaProject project which contains the variable.
+        * @param localName variable's name.
+        * @return char[] the name without prefix and suffix.
+        * @see JavaCore#setOptions(java.util.Hashtable)
+        * @see JavaCore#getDefaultOptions()
+        */
+       public static char[] removePrefixAndSuffixForLocalVariableName(IJavaProject javaProject, char[] localName) {
+               AssistOptions assistOptions = new AssistOptions(javaProject.getOptions(true));
+               return  removePrefixAndSuffix(
+                       localName,
+                       assistOptions.argumentPrefixes,
+                       assistOptions.argumentSuffixes);
+       }
+       
+       /**
+        * Remove prefix and suffix from a local variable name.
+        * <p>
+        * If local variable name prefix is <code>pre</code> and local variable name suffix is <code>suf</code>
+        * then for a local variable named <code>preLocalsuf</code> the result of this method is <code>local</code>.
+        * If there is no prefix or suffix defined in JavaCore options the result is the unchanged
+        * name <code>preLocalsuf</code>.
+        * </p>
+        * <p>
+        * This method is affected by the following JavaCore options : CODEASSIST_LOCAL_PREFIXES and 
+        * CODEASSIST_LOCAL_SUFFIXES.
+        * </p>
+        * <p>
+        * For a complete description of these configurable options, see <code>getDefaultOptions</code>.
+        * For programmaticaly change these options, see <code>JavaCore#setOptions()</code>.
+        * </p>
+        * 
+        * @param javaProject project which contains the variable.
+        * @param localName variable's name.
+        * @return char[] the name without prefix and suffix.
+        * @see JavaCore#setOptions(java.util.Hashtable)
+        * @see JavaCore#getDefaultOptions()
+        */
+       public static String removePrefixAndSuffixForLocalVariableName(IJavaProject javaProject, String localName) {
+               return String.valueOf(removePrefixAndSuffixForLocalVariableName(javaProject, localName.toCharArray()));
+       }
+
+       /**
+        * Suggest names for an argument. The name is computed from argument's type
+        * and possible prefixes or suffixes are added.
+        * <p>
+        * If the type of the argument is <code>TypeName</code>, the prefix for argument is <code>pre</code>
+        * and the suffix for argument is <code>suf</code> then the proposed names are <code>preTypeNamesuf</code>
+        * and <code>preNamesuf</code>. If there is no prefix or suffix the proposals are <code>typeName</code>
+        * and <code>name</code>.
+        * </p>
+        * <p>
+        * This method is affected by the following JavaCore options : CODEASSIST_ARGUMENT_PREFIXES and 
+        * CODEASSIST_ARGUMENT_SUFFIXES.
+        * </p>
+        * <p>
+        * For a complete description of these configurable options, see <code>getDefaultOptions</code>.
+        * For programmaticaly change these options, see <code>JavaCore#setOptions()</code>.
+        * </p>
+        * 
+        * @param javaProject project which contains the argument.
+        * @param packageName package of the argument's type.
+        * @param qualifiedTypeName argument's type.
+        * @param dim argument's dimension (0 if the argument is not an array).
+        * @param excludedNames a list of names which cannot be suggested (already used names).
+        *         Can be <code>null</code> if there is no excluded names.
+        * @return char[][] an array of names.
+        * @see JavaCore#setOptions(java.util.Hashtable)
+        * @see JavaCore#getDefaultOptions()
+        */
+       public static char[][] suggestArgumentNames(IJavaProject javaProject, char[] packageName, char[] qualifiedTypeName, int dim, char[][] excludedNames) {
+               NamingRequestor requestor = new NamingRequestor();
+               InternalNamingConventions.suggestArgumentNames(
+                       javaProject,
+                       packageName,
+                       qualifiedTypeName,
+                       dim,
+                       excludedNames,
+                       requestor);
+
+               return requestor.getResults();
+       }
+       
+       /**
+        * Suggest names for an argument. The name is computed from argument's type
+        * and possible prefixes or suffixes are added.
+        * <p>
+        * If the type of the argument is <code>TypeName</code>, the prefix for argument is <code>pre</code>
+        * and the suffix for argument is <code>suf</code> then the proposed names are <code>preTypeNamesuf</code>
+        * and <code>preNamesuf</code>. If there is no prefix or suffix the proposals are <code>typeName</code>
+        * and <code>name</code>.
+        * </p>
+        * <p>
+        * This method is affected by the following JavaCore options : CODEASSIST_ARGUMENT_PREFIXES and 
+        * CODEASSIST_ARGUMENT_SUFFIXES.
+        * </p>
+        * <p>
+        * For a complete description of these configurable options, see <code>getDefaultOptions</code>.
+        * For programmaticaly change these options, see <code>JavaCore#setOptions()</code>.
+        * </p>
+        * 
+        * @param javaProject project which contains the argument.
+        * @param packageName package of the argument's type.
+        * @param qualifiedTypeName argument's type.
+        * @param dim argument's dimension (0 if the argument is not an array).
+        * @param excludedNames a list of names which cannot be suggested (already used names).
+        *         Can be <code>null</code> if there is no excluded names.
+        * @return char[][] an array of names.
+        * @see JavaCore#setOptions(java.util.Hashtable)
+        * @see JavaCore#getDefaultOptions()
+        */
+       public static String[] suggestArgumentNames(IJavaProject javaProject, String packageName, String qualifiedTypeName, int dim, String[] excludedNames) {
+               return convertCharsToString(
+                       suggestArgumentNames(
+                               javaProject,
+                               packageName.toCharArray(),
+                               qualifiedTypeName.toCharArray(),
+                               dim,
+                               convertStringToChars(excludedNames)));
+       }
+       /**
+        * Suggest names for a field. The name is computed from field's type
+        * and possible prefixes or suffixes are added.
+        * <p>
+        * If the type of the field is <code>TypeName</code>, the prefix for field is <code>pre</code>
+        * and the suffix for field is <code>suf</code> then the proposed names are <code>preTypeNamesuf</code>
+        * and <code>preNamesuf</code>. If there is no prefix or suffix the proposals are <code>typeName</code>
+        * and <code>name</code>.
+        * </p>
+        * <p>
+        * This method is affected by the following JavaCore options : CODEASSIST_FIELD_PREFIXES, 
+        * CODEASSIST_FIELD_SUFFIXES and for instance field and CODEASSIST_STATIC_FIELD_PREFIXES,
+        * CODEASSIST_STATIC_FIELD_SUFFIXES for static field.
+        * </p>
+        * <p>
+        * For a complete description of these configurable options, see <code>getDefaultOptions</code>.
+        * For programmaticaly change these options, see <code>JavaCore#setOptions()</code>.
+        * </p>
+        * 
+        * @param javaProject project which contains the field.
+        * @param packageName package of the field's type.
+        * @param qualifiedTypeName field's type.
+        * @param dim field's dimension (0 if the field is not an array).
+        * @param modifiers field's modifiers as defined by the class
+        * <code>Flags</code>.
+        * @param excludedNames a list of names which cannot be suggested (already used names).
+        *         Can be <code>null</code> if there is no excluded names.
+        * @return char[][] an array of names.
+        * @see Flags
+        * @see JavaCore#setOptions(java.util.Hashtable)
+        * @see JavaCore#getDefaultOptions()
+        */
+       public static char[][] suggestFieldNames(IJavaProject javaProject, char[] packageName, char[] qualifiedTypeName, int dim, int modifiers, char[][] excludedNames) {
+               NamingRequestor requestor = new NamingRequestor();
+               InternalNamingConventions.suggestFieldNames(
+                       javaProject,
+                       packageName,
+                       qualifiedTypeName,
+                       dim,
+                       modifiers,
+                       excludedNames,
+                       requestor);
+
+               return requestor.getResults();
+       }
+       
+       /**
+        * Suggest names for a field. The name is computed from field's type
+        * and possible prefixes or suffixes are added.
+        * <p>
+        * If the type of the field is <code>TypeName</code>, the prefix for field is <code>pre</code>
+        * and the suffix for field is <code>suf</code> then the proposed names are <code>preTypeNamesuf</code>
+        * and <code>preNamesuf</code>. If there is no prefix or suffix the proposals are <code>typeName</code>
+        * and <code>name</code>.
+        * </p>
+        * <p>
+        * This method is affected by the following JavaCore options : CODEASSIST_FIELD_PREFIXES, 
+        * CODEASSIST_FIELD_SUFFIXES and for instance field and CODEASSIST_STATIC_FIELD_PREFIXES,
+        * CODEASSIST_STATIC_FIELD_SUFFIXES for static field.
+        * </p>
+        * <p>
+        * For a complete description of these configurable options, see <code>getDefaultOptions</code>.
+        * For programmaticaly change these options, see <code>JavaCore#setOptions()</code>.
+        * </p>
+        * 
+        * @param javaProject project which contains the field.
+        * @param packageName package of the field's type.
+        * @param qualifiedTypeName field's type.
+        * @param dim field's dimension (0 if the field is not an array).
+        * @param modifiers field's modifiers as defined by the class
+        * <code>Flags</code>.
+        * @param excludedNames a list of names which cannot be suggested (already used names).
+        *         Can be <code>null</code> if there is no excluded names.
+        * @return char[][] an array of names.
+        * @see Flags
+        * @see JavaCore#setOptions(java.util.Hashtable)
+        * @see JavaCore#getDefaultOptions()
+        */
+       public static String[] suggestFieldNames(IJavaProject javaProject, String packageName, String qualifiedTypeName, int dim, int modifiers, String[] excludedNames) {
+               return convertCharsToString(
+                       suggestFieldNames(
+                               javaProject,
+                               packageName.toCharArray(),
+                               qualifiedTypeName.toCharArray(),
+                               dim,
+                               modifiers,
+                               convertStringToChars(excludedNames)));
+       }
+       
+       /**
+        * Suggest names for a local variable. The name is computed from variable's type
+        * and possible prefixes or suffixes are added.
+        * <p>
+        * If the type of the local variable is <code>TypeName</code>, the prefix for local variable is <code>pre</code>
+        * and the suffix for local variable is <code>suf</code> then the proposed names are <code>preTypeNamesuf</code>
+        * and <code>preNamesuf</code>. If there is no prefix or suffix the proposals are <code>typeName</code>
+        * and <code>name</code>.
+        * </p>
+        * <p>
+        * This method is affected by the following JavaCore options : CODEASSIST_LOCAL_PREFIXES and
+        * CODEASSIST_LOCAL_SUFFIXES.
+        * </p>
+        * <p>
+        * For a complete description of these configurable options, see <code>getDefaultOptions</code>.
+        * For programmaticaly change these options, see <code>JavaCore#setOptions()</code>.
+        * </p>
+        * 
+        * @param javaProject project which contains the variable.
+        * @param packageName package of the variable's type.
+        * @param qualifiedTypeName variable's type.
+        * @param dim variable's dimension (0 if the variable is not an array).
+        * @param excludedNames a list of names which cannot be suggested (already used names).
+        *         Can be <code>null</code> if there is no excluded names.
+        * @return char[][] an array of names.
+        * @see JavaCore#setOptions(java.util.Hashtable)
+        * @see JavaCore#getDefaultOptions()
+        */
+       public static char[][] suggestLocalVariableNames(IJavaProject javaProject, char[] packageName, char[] qualifiedTypeName, int dim, char[][] excludedNames) {
+               NamingRequestor requestor = new NamingRequestor();
+               InternalNamingConventions.suggestLocalVariableNames(
+                       javaProject,
+                       packageName,
+                       qualifiedTypeName,
+                       dim,
+                       excludedNames,
+                       requestor);
+
+               return requestor.getResults();
+       }
+       
+       /**
+        * Suggest names for a local variable. The name is computed from variable's type
+        * and possible prefixes or suffixes are added.
+        * <p>
+        * If the type of the local variable is <code>TypeName</code>, the prefix for local variable is <code>pre</code>
+        * and the suffix for local variable is <code>suf</code> then the proposed names are <code>preTypeNamesuf</code>
+        * and <code>preNamesuf</code>. If there is no prefix or suffix the proposals are <code>typeName</code>
+        * and <code>name</code>.
+        * </p>
+        * <p>
+        * This method is affected by the following JavaCore options : CODEASSIST_LOCAL_PREFIXES and
+        * CODEASSIST_LOCAL_SUFFIXES.
+        * </p>
+        * <p>
+        * For a complete description of these configurable options, see <code>getDefaultOptions</code>.
+        * For programmaticaly change these options, see <code>JavaCore#setOptions()</code>.
+        * </p>
+        * 
+        * @param javaProject project which contains the variable.
+        * @param packageName package of the variable's type.
+        * @param qualifiedTypeName variable's type.
+        * @param dim variable's dimension (0 if the variable is not an array).
+        * @param excludedNames a list of names which cannot be suggested (already used names).
+        *         Can be <code>null</code> if there is no excluded names.
+        * @return char[][] an array of names.
+        * @see JavaCore#setOptions(java.util.Hashtable)
+        * @see JavaCore#getDefaultOptions()
+        */
+       public static String[] suggestLocalVariableNames(IJavaProject javaProject, String packageName, String qualifiedTypeName, int dim, String[] excludedNames) {
+               return convertCharsToString(
+                       suggestLocalVariableNames(
+                               javaProject,
+                               packageName.toCharArray(),
+                               qualifiedTypeName.toCharArray(),
+                               dim,
+                               convertStringToChars(excludedNames)));
+       }
+       
+       /**
+        * Suggest name for a getter method. The name is computed from field's name
+        * and possible prefixes or suffixes are removed.
+        * <p>
+        * If the field name is <code>preFieldNamesuf</code> and the prefix for field is <code>pre</code> and
+        * the suffix for field is <code>suf</code> then the prosposed name is <code>isFieldName</code> for boolean field or
+        * <code>getFieldName</code> for others. If there is no prefix and suffix the proposal is <code>isPreFieldNamesuf</code>
+        * for boolean field or <code>getPreFieldNamesuf</code> for others.
+        * </p>
+        * <p>
+        * This method is affected by the following JavaCore options : CODEASSIST_FIELD_PREFIXES, 
+        * CODEASSIST_FIELD_SUFFIXES for instance field and CODEASSIST_STATIC_FIELD_PREFIXES,
+        * CODEASSIST_STATIC_FIELD_SUFFIXES for static field.
+        * </p>
+        * <p>
+        * For a complete description of these configurable options, see <code>getDefaultOptions</code>.
+        * For programmaticaly change these options, see <code>JavaCore#setOptions()</code>.
+        * </p>
+        * 
+        * @param project project which contains the field.
+        * @param fieldName field's name's.
+        * @param modifiers field's modifiers as defined by the class
+        * <code>Flags</code>.
+        * @param isBoolean <code>true</code> if the field's type is boolean
+        * @param excludedNames a list of names which cannot be suggested (already used names).
+        *         Can be <code>null</code> if there is no excluded names.
+        * @return char[] a name.
+        * @see Flags
+        * @see JavaCore#setOptions(java.util.Hashtable)
+        * @see JavaCore#getDefaultOptions()
+        */
+       public static char[] suggestGetterName(IJavaProject project, char[] fieldName, int modifiers, boolean isBoolean, char[][] excludedNames) {
+               if (isBoolean) {
+                       char[] name = removePrefixAndSuffixForFieldName(project, fieldName, modifiers);
+                       int prefixLen =  GETTER_BOOL_NAME.length;
+                       if (CharOperation.prefixEquals(GETTER_BOOL_NAME, name) 
+                               && name.length > prefixLen && Character.isUpperCase(name[prefixLen])) {
+                               return suggestNewName(name, excludedNames);
+                       } else {
+                               return suggestNewName(
+                                       CharOperation.concat(GETTER_BOOL_NAME, suggestAccessorName(project, fieldName, modifiers)),
+                                       excludedNames
+                               );
+                       }
+               } else {
+                       return suggestNewName(
+                               CharOperation.concat(GETTER_NAME, suggestAccessorName(project, fieldName, modifiers)),
+                               excludedNames
+                       );
+               }
+       }
+       
+       /**
+        * Suggest name for a getter method. The name is computed from field's name
+        * and possible prefixes or suffixes are removed.
+        * <p>
+        * If the field name is <code>preFieldNamesuf</code> and the prefix for field is <code>pre</code> and
+        * the suffix for field is <code>suf</code> then the prosposed name is <code>isFieldName</code> for boolean field or
+        * <code>getFieldName</code> for others. If there is no prefix and suffix the proposal is <code>isPreFieldNamesuf</code>
+        * for boolean field or <code>getPreFieldNamesuf</code> for others.
+        * </p>
+        * <p>
+        * This method is affected by the following JavaCore options : CODEASSIST_FIELD_PREFIXES, 
+        * CODEASSIST_FIELD_SUFFIXES for instance field and CODEASSIST_STATIC_FIELD_PREFIXES,
+        * CODEASSIST_STATIC_FIELD_SUFFIXES for static field.
+        * </p>
+        * <p>
+        * For a complete description of these configurable options, see <code>getDefaultOptions</code>.
+        * For programmaticaly change these options, see <code>JavaCore#setOptions()</code>.
+        * </p>
+        * 
+        * @param project project which contains the field.
+        * @param fieldName field's name's.
+        * @param modifiers field's modifiers as defined by the class
+        * <code>Flags</code>.
+        * @param isBoolean <code>true</code> if the field's type is boolean
+        * @param excludedNames a list of names which cannot be suggested (already used names).
+        *         Can be <code>null</code> if there is no excluded names.
+        * @return char[] a name.
+        * @see Flags
+        * @see JavaCore#setOptions(java.util.Hashtable)
+        * @see JavaCore#getDefaultOptions()
+        */
+       public static String suggestGetterName(IJavaProject project, String fieldName, int modifiers, boolean isBoolean, String[] excludedNames) {
+               return String.valueOf(
+                       suggestGetterName(
+                               project,
+                               fieldName.toCharArray(),
+                               modifiers,
+                               isBoolean,
+                               convertStringToChars(excludedNames)));
+       }
+
+       /**
+        * Suggest name for a setter method. The name is computed from field's name
+        * and possible prefixes or suffixes are removed.
+        * <p>
+        * If the field name is <code>preFieldNamesuf</code> and the prefix for field is <code>pre</code> and
+        * the suffix for field is <code>suf</code> then the proposed name is <code>setFieldName</code>.
+        * If there is no prefix and suffix the proposal is <code>setPreFieldNamesuf</code>.
+        * </p>
+        * <p>
+        * This method is affected by the following JavaCore options : CODEASSIST_FIELD_PREFIXES, 
+        * CODEASSIST_FIELD_SUFFIXES for instance field and CODEASSIST_STATIC_FIELD_PREFIXES,
+        * CODEASSIST_STATIC_FIELD_SUFFIXES for static field.
+        * </p>
+        * <p>
+        * For a complete description of these configurable options, see <code>getDefaultOptions</code>.
+        * For programmaticaly change these options, see <code>JavaCore#setOptions()</code>.
+        * </p>
+        * 
+        * @param project project which contains the field.
+        * @param fieldName field's name's.
+        * @param modifiers field's modifiers as defined by the class
+        * <code>Flags</code>.
+        * @param isBoolean <code>true</code> if the field's type is boolean
+        * @param excludedNames a list of names which cannot be suggested (already used names).
+        *         Can be <code>null</code> if there is no excluded names.
+        * @return char[] a name.
+        * @see Flags
+        * @see JavaCore#setOptions(java.util.Hashtable)
+        * @see JavaCore#getDefaultOptions()
+        */
+       public static char[] suggestSetterName(IJavaProject project, char[] fieldName, int modifiers, boolean isBoolean, char[][] excludedNames) {
+
+               if (isBoolean) {
+                       char[] name = removePrefixAndSuffixForFieldName(project, fieldName, modifiers);
+                       int prefixLen =  GETTER_BOOL_NAME.length;
+                       if (CharOperation.prefixEquals(GETTER_BOOL_NAME, name) 
+                               && name.length > prefixLen && Character.isUpperCase(name[prefixLen])) {
+                               name = CharOperation.subarray(name, prefixLen, name.length);
+                               return suggestNewName(
+                                       CharOperation.concat(SETTER_NAME, suggestAccessorName(project, name, modifiers)),
+                                       excludedNames
+                               );
+                       } else {
+                               return suggestNewName(
+                                       CharOperation.concat(SETTER_NAME, suggestAccessorName(project, fieldName, modifiers)),
+                                       excludedNames
+                               );
+                       }
+               } else {
+                       return suggestNewName(
+                               CharOperation.concat(SETTER_NAME, suggestAccessorName(project, fieldName, modifiers)),
+                               excludedNames
+                       );
+               }
+       }
+       
+       /**
+        * Suggest name for a setter method. The name is computed from field's name
+        * and possible prefixes or suffixes are removed.
+        * <p>
+        * If the field name is <code>preFieldNamesuf</code> and the prefix for field is <code>pre</code> and
+        * the suffix for field is <code>suf</code> then the proposed name is <code>setFieldName</code>.
+        * If there is no prefix and suffix the proposal is <code>setPreFieldNamesuf</code>.
+        * </p>
+        * <p>
+        * This method is affected by the following JavaCore options : CODEASSIST_FIELD_PREFIXES, 
+        * CODEASSIST_FIELD_SUFFIXES for instance field and CODEASSIST_STATIC_FIELD_PREFIXES,
+        * CODEASSIST_STATIC_FIELD_SUFFIXES for static field.
+        * </p>
+        * <p>
+        * For a complete description of these configurable options, see <code>getDefaultOptions</code>.
+        * For programmaticaly change these options, see <code>JavaCore#setOptions()</code>.
+        * </p>
+        * 
+        * @param project project which contains the field.
+        * @param fieldName field's name's.
+        * @param modifiers field's modifiers as defined by the class
+        * <code>Flags</code>.
+        * @param isBoolean <code>true</code> if the field's type is boolean
+        * @param excludedNames a list of names which cannot be suggested (already used names).
+        *         Can be <code>null</code> if there is no excluded names.
+        * @return char[] a name.
+        * @see Flags
+        * @see JavaCore#setOptions(java.util.Hashtable)
+        * @see JavaCore#getDefaultOptions()
+        */
+       public static String suggestSetterName(IJavaProject project, String fieldName, int modifiers, boolean isBoolean, String[] excludedNames) {
+               return String.valueOf(
+                       suggestSetterName(
+                               project,
+                               fieldName.toCharArray(),
+                               modifiers,
+                               isBoolean,
+                               convertStringToChars(excludedNames)));
+       }
+       
+       private static char[] suggestAccessorName(IJavaProject project, char[] fieldName, int modifiers) {
+               char[] name = removePrefixAndSuffixForFieldName(project, fieldName, modifiers);
+               if (name.length > 0 && Character.isLowerCase(name[0])) {
+                       name[0] = Character.toUpperCase(name[0]);
+               }
+               return name;
+       }
+       
+       private static char[] suggestNewName(char[] name, char[][] excludedNames){
+               if(excludedNames == null) {
+                       return name;
+               }
+               
+               char[] newName = name;
+               int count = 2;
+               int i = 0;
+               while (i < excludedNames.length) {
+                       if(CharOperation.equals(newName, excludedNames[i], false)) {
+                               newName = CharOperation.concat(name, String.valueOf(count++).toCharArray());
+                               i = 0;
+                       } else {
+                               i++;
+                       }
+               }
+               return newName;
+       }
+       
+       private static String[] convertCharsToString(char[][] c) {
+               int length = c == null ? 0 : c.length;
+               String[] s = new String[length];
+               for (int i = 0; i < length; i++) {
+                       s[i] = String.valueOf(c[i]);
+               }
+               return s;
+       }
+       
+       private static char[][] convertStringToChars(String[] s) {
+               int length = s == null ? 0 : s.length;
+               char[][] c = new char[length][];
+               for (int i = 0; i < length; i++) {
+                       if(s[i] == null) {
+                               c[i] = CharOperation.NO_CHAR;
+                       } else {
+                               c[i] = s[i].toCharArray();
+                       }
+               }
+               return c;
+       }
+}
index b143082..24cd371 100644 (file)
@@ -159,7 +159,10 @@ public interface IProblem {
        int ImportRelated = 0x10000000;
        int Internal = 0x20000000;
        int Syntax =  0x40000000;
-       
+       /**
+        * @since 3.0
+        */
+       int Javadoc = 0x80000000;
        /**
         * Mask to use in order to filter out the category portion of the problem ID.
         */
@@ -555,4 +558,114 @@ public interface IProblem {
        // detected task
        /** @since 2.1 */
        int Task = Internal + 450;
+       
+//      block
+       /** @since 3.0 */
+       int UndocumentedEmptyBlock = Internal + 460;
+               
+       /*
+        * Javadoc comments
+        */
+       /** @since 3.0 */
+       int JavadocUnexpectedTag = Javadoc + Internal + 470;
+       /** @since 3.0 */
+       int JavadocMissingParamTag = Javadoc + Internal + 471;
+       /** @since 3.0 */
+       int JavadocMissingParamName = Javadoc + Internal + 472;
+       /** @since 3.0 */
+       int JavadocDuplicateParamName = Javadoc + Internal + 473;
+       /** @since 3.0 */
+       int JavadocInvalidParamName = Javadoc + Internal + 474;
+       /** @since 3.0 */
+       int JavadocMissingReturnTag = Javadoc + Internal + 475;
+       /** @since 3.0 */
+       int JavadocDuplicateReturnTag = Javadoc + Internal + 476;
+       /** @since 3.0 */
+       int JavadocMissingThrowsTag = Javadoc + Internal + 477;
+       /** @since 3.0 */
+       int JavadocMissingThrowsClassName = Javadoc + Internal + 478;
+       /** @since 3.0 */
+       int JavadocInvalidThrowsClass = Javadoc + Internal + 479;
+       /** @since 3.0 */
+       int JavadocDuplicateThrowsClassName = Javadoc + Internal + 480;
+       /** @since 3.0 */
+       int JavadocInvalidThrowsClassName = Javadoc + Internal + 481;
+       /** @since 3.0 */
+       int JavadocMissingSeeReference = Javadoc + Internal + 482;
+       /** @since 3.0 */
+       int JavadocInvalidSeeReference = Javadoc + Internal + 483;
+       /** @since 3.0 */
+       int JavadocInvalidSeeHref = Javadoc + Internal + 484;
+       /** @since 3.0 */
+       int JavadocInvalidSeeArgs = Javadoc + Internal + 485;
+       /** @since 3.0 */
+       int JavadocMissing = Javadoc + Internal + 486;
+       /** @since 3.0 */
+       int JavadocInvalidTag = Javadoc + Internal + 487;
+       /*
+        * ID for field errors in Javadoc
+        */
+       /** @since 3.0 */
+       int JavadocUndefinedField = Javadoc + Internal + 488;
+       /** @since 3.0 */
+       int JavadocNotVisibleField = Javadoc + Internal + 489;
+       /** @since 3.0 */
+       int JavadocAmbiguousField = Javadoc + Internal + 490;
+       /** @since 3.0 */
+       int JavadocUsingDeprecatedField = Javadoc + Internal + 491;
+       /*
+        * IDs for constructor errors in Javadoc
+        */
+       /** @since 3.0 */
+       int JavadocUndefinedConstructor = Javadoc + Internal + 492;
+       /** @since 3.0 */
+       int JavadocNotVisibleConstructor = Javadoc + Internal + 493;
+       /** @since 3.0 */
+       int JavadocAmbiguousConstructor = Javadoc + Internal + 494;
+       /** @since 3.0 */
+       int JavadocUsingDeprecatedConstructor = Javadoc + Internal + 495;
+       /*
+        * IDs for method errors in Javadoc
+        */
+       /** @since 3.0 */
+       int JavadocUndefinedMethod = Javadoc + Internal + 496;
+       /** @since 3.0 */
+       int JavadocNotVisibleMethod = Javadoc + Internal + 497;
+       /** @since 3.0 */
+       int JavadocAmbiguousMethod = Javadoc + Internal + 498;
+       /** @since 3.0 */
+       int JavadocUsingDeprecatedMethod = Javadoc + Internal + 499;
+       /** @since 3.0 */
+       int JavadocNoMessageSendOnBaseType = Javadoc + Internal + 500;
+       /** @since 3.0 */
+       int JavadocParameterMismatch = Javadoc + Internal + 501;
+       /** @since 3.0 */
+       int JavadocNoMessageSendOnArrayType = Javadoc + Internal + 502;
+       /*
+        * IDs for type errors in Javadoc
+        */
+       /** @since 3.0 */
+       int JavadocUndefinedType = Javadoc + Internal + 503;
+       /** @since 3.0 */
+       int JavadocNotVisibleType = Javadoc + Internal + 504;
+       /** @since 3.0 */
+       int JavadocAmbiguousType = Javadoc + Internal + 505;
+       /** @since 3.0 */
+       int JavadocUsingDeprecatedType = Javadoc + Internal + 506;
+       /** @since 3.0 */
+       int JavadocInternalTypeNameProvided = Javadoc + Internal + 507;
+       /** @since 3.0 */
+       int JavadocInheritedMethodHidesEnclosingName = Javadoc + Internal + 508;
+       /** @since 3.0 */
+       int JavadocInheritedFieldHidesEnclosingName = Javadoc + Internal + 509;
+       /** @since 3.0 */
+       int JavadocInheritedNameHidesEnclosingTypeName = Javadoc + Internal + 510;
+       /** @since 3.0 */
+       int JavadocAmbiguousMethodReference = Javadoc + Internal + 511;
+       /** @since 3.0 */
+       int JavadocUnterminatedInlineTag = Javadoc + Internal + 512;
+       /** @since 3.0 */
+       int JavadocMalformedSeeReference = Javadoc + Internal + 513;
+       /** @since 3.0 */
+       int JavadocMessagePrefix = Internal + 515;
 }
index 6cb60c9..3207a73 100644 (file)
@@ -1,10 +1,10 @@
 /**********************************************************************
 Copyright (c) 2002 IBM Corp. and others.
-All rights reserved. Â  This program and the accompanying materials
+All rights reserved. ï¿½ This program and the accompanying materials
 are made available under the terms of the Common Public License v0.5
 which accompanies this distribution, and is available at
 http://www.eclipse.org/legal/cpl-v05.html
- 
+�
 Contributors:
      IBM Corporation - initial API and implementation
 **********************************************************************/
@@ -22,7 +22,7 @@ package net.sourceforge.phpdt.core.compiler;
   * 
   * When encountering lexical errors, an <code>InvalidInputException</code> is thrown.
   * 
-  * @see org.eclipse.jdt.core.ToolFactory
+  * @see net.sourceforge.phpdt.core.ToolFactory
   * @see ITerminalSymbols
   * @since 2.0
   */
index da5ea6b..cd4d327 100644 (file)
@@ -35,7 +35,7 @@ public String getComment();
  * <code>Flags</code> class.
  *
  * @return the flags
- * @see org.eclipse.jdt.core.Flags
+ * @see net.sourceforge.phpdt.core.Flags
  */
 public int getFlags();
 /**
@@ -55,7 +55,7 @@ public void setComment(String comment);
  * <code>Flags</code> class. The deprecated flag passed in is ignored.
  *
  * @param flags the flags
- * @see org.eclipse.jdt.core.Flags
+ * @see net.sourceforge.phpdt.core.Flags
  */
 public void setFlags(int flags);
 }
index 1aec40e..6c3a8ea 100644 (file)
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2003 IBM Corporation and others.
+ * Copyright (c) 2000, 2004 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials 
  * are made available under the terms of the Common Public License v1.0
  * which accompanies this distribution, and is available at
@@ -10,6 +10,7 @@
  *******************************************************************************/
 package net.sourceforge.phpdt.core.search;
 
+//import net.sourceforge.phpdt.internal.core.search.processing.*;
 
 /**
  * <p>
@@ -125,15 +126,18 @@ public interface IJavaSearchConstants {
        /**
         * The search pattern matches exactly the search result,
         * that is, the source of the search result equals the search pattern.
+        * @deprecated Use {@link SearchPattern#R_EXACT_MATCH} instead.
         */
        int EXACT_MATCH = 0;
        /**
         * The search pattern is a prefix of the search result.
+        * @deprecated Use {@link SearchPattern#R_PREFIX_MATCH} instead.
         */
        int PREFIX_MATCH = 1;
        /**
         * The search pattern contains one or more wild cards ('*') where a 
         * wild-card can replace 0 or more characters in the search result.
+        * @deprecated Use {@link SearchPattern#R_PATTERN_MATCH} instead.
         */
        int PATTERN_MATCH = 2;
 
@@ -143,31 +147,35 @@ public interface IJavaSearchConstants {
        /**
         * The search pattern matches the search result only
         * if cases are the same.
+        * @deprecated Use the methods that take the matchMode
+        *   with {@link SearchPattern#R_CASE_SENSITIVE} as a matchRule instead.
         */
        boolean CASE_SENSITIVE = true;
        /**
         * The search pattern ignores cases in the search result.
+        * @deprecated Use the methods that take the matchMode
+        *   without {@link SearchPattern#R_CASE_SENSITIVE} as a matchRule instead.
         */
        boolean CASE_INSENSITIVE = false;
        
 
        /* Waiting policies */
        
-//     /**
-//      * The search operation starts immediately, even if the underlying indexer
-//      * has not finished indexing the workspace. Results will more likely
-//      * not contain all the matches.
-//      */
+       /**
+        * The search operation starts immediately, even if the underlying indexer
+        * has not finished indexing the workspace. Results will more likely
+        * not contain all the matches.
+        */
 //     int FORCE_IMMEDIATE_SEARCH = IJob.ForceImmediate;
-//     /**
-//      * The search operation throws an <code>org.eclipse.core.runtime.OperationCanceledException</code>
-//      * if the underlying indexer has not finished indexing the workspace.
-//      */
+       /**
+        * The search operation throws an <code>org.eclipse.core.runtime.OperationCanceledException</code>
+        * if the underlying indexer has not finished indexing the workspace.
+        */
 //     int CANCEL_IF_NOT_READY_TO_SEARCH = IJob.CancelIfNotReady;
-//     /**
-//      * The search operation waits for the underlying indexer to finish indexing 
-//      * the workspace before starting the search.
-//      */
+       /**
+        * The search operation waits for the underlying indexer to finish indexing 
+        * the workspace before starting the search.
+        */
 //     int WAIT_UNTIL_READY_TO_SEARCH = IJob.WaitUntilReady;
        
        
index 2a092b8..776560a 100644 (file)
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2003 IBM Corporation and others.
+ * Copyright (c) 2000, 2004 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials 
  * are made available under the terms of the Common Public License v1.0
  * which accompanies this distribution, and is available at
index 201a295..5a9de70 100644 (file)
@@ -5,7 +5,7 @@ Copyright (c) 2002 IBM Corp. and others. All rights reserved.
 This file is made available under the terms of the Common Public License v1.0
 which accompanies this distribution, and is available at
 http://www.eclipse.org/legal/cpl-v10.html
- 
+�
 Contributors:
 **********************************************************************/
 
index b4f3b26..40d31b9 100644 (file)
@@ -5,7 +5,7 @@ Copyright (c) 2002 IBM Corp. and others. All rights reserved.
 This file is made available under the terms of the Common Public License v1.0
 which accompanies this distribution, and is available at
 http://www.eclipse.org/legal/cpl-v10.html
- 
+�
 Contributors:
 **********************************************************************/
 
index c46c7d3..e3fc7b2 100644 (file)
@@ -5,7 +5,7 @@ Copyright (c) 2002 IBM Corp. and others. All rights reserved.
 This file is made available under the terms of the Common Public License v1.0
 which accompanies this distribution, and is available at
 http://www.eclipse.org/legal/cpl-v10.html
- 
+�
 Contributors:
 **********************************************************************/
 
index 3225808..5e02868 100644 (file)
@@ -5,7 +5,7 @@ Copyright (c) 2002 IBM Corp. and others. All rights reserved.
 This file is made available under the terms of the Common Public License v1.0
 which accompanies this distribution, and is available at
 http://www.eclipse.org/legal/cpl-v10.html
- 
+�
 Contributors:
 **********************************************************************/
 
index 52f3a12..6fbbefb 100644 (file)
@@ -5,7 +5,7 @@ Copyright (c) 2002 IBM Corp. and others. All rights reserved.
 This file is made available under the terms of the Common Public License v1.0
 which accompanies this distribution, and is available at
 http://www.eclipse.org/legal/cpl-v10.html
- 
+�
 Contributors:
 **********************************************************************/
 
index 978883d..bd450ba 100644 (file)
@@ -5,7 +5,7 @@ Copyright (c) 2002 IBM Corp. and others. All rights reserved.
 This file is made available under the terms of the Common Public License v1.0
 which accompanies this distribution, and is available at
 http://www.eclipse.org/legal/cpl-v10.html
- 
+�
 Contributors:
 **********************************************************************/
 
index 2f14656..4385da3 100644 (file)
@@ -5,7 +5,7 @@ Copyright (c) 2002 IBM Corp. and others. All rights reserved.
 This file is made available under the terms of the Common Public License v1.0
 which accompanies this distribution, and is available at
 http://www.eclipse.org/legal/cpl-v10.html
- 
+�
 Contributors:
 **********************************************************************/
 
index 9897442..1a2fa3e 100644 (file)
@@ -5,7 +5,7 @@ Copyright (c) 2002 IBM Corp. and others. All rights reserved.
 This file is made available under the terms of the Common Public License v1.0
 which accompanies this distribution, and is available at
 http://www.eclipse.org/legal/cpl-v10.html
- 
+�
 Contributors:
 **********************************************************************/
 
index 24b2ab5..ea634ec 100644 (file)
@@ -5,7 +5,7 @@ Copyright (c) 2002 IBM Corp. and others. All rights reserved.
 This file is made available under the terms of the Common Public License v1.0
 which accompanies this distribution, and is available at
 http://www.eclipse.org/legal/cpl-v10.html
- 
+�
 Contributors:
 **********************************************************************/
 
index 111a210..d0b3d99 100644 (file)
@@ -5,7 +5,7 @@ Copyright (c) 2002 IBM Corp. and others. All rights reserved.
 This file is made available under the terms of the Common Public License v1.0
 which accompanies this distribution, and is available at
 http://www.eclipse.org/legal/cpl-v10.html
- 
+�
 Contributors:
 **********************************************************************/
 
index 17979d0..399f237 100644 (file)
@@ -5,7 +5,7 @@ Copyright (c) 2002 IBM Corp. and others. All rights reserved.
 This file is made available under the terms of the Common Public License v1.0
 which accompanies this distribution, and is available at
 http://www.eclipse.org/legal/cpl-v10.html
- 
+�
 Contributors:
 **********************************************************************/
 
index 988f842..e4c530b 100644 (file)
@@ -9,7 +9,7 @@ http://www.eclipse.org/legal/cpl-v10.html
 import java.util.Vector;
 
 /**
- * Copied from org.eclipse.jdt.internal.ui.util.StringMatcher
+ * Copied from net.sourceforge.phpdt.internal.ui.util.StringMatcher
  * 
  *  A string pattern matcher, suppporting * and ? wildcards.
  */
@@ -44,8 +44,8 @@ public class StringMatcher {
        }
        /**
         * StringMatcher constructor takes in a String object that is a simple
-        * pattern which may contain Â‘*Â’ for 0 and many characters and
-        * Â‘?Â’ for exactly one character.
+        * pattern which may contain ï¿½*� for 0 and many characters and
+        * ï¿½?� for exactly one character.
         *
         * Literal '*' and '?' characters must be escaped in the pattern
         * e.g., "\*" means literal "*", etc.
@@ -222,7 +222,7 @@ public class StringMatcher {
        }
        /**
         * Parses the given pattern into segments seperated by wildcard '*' characters.
-        * @param p, a String object that is a simple regular expression with Â‘*Â’ and/or Â‘?Â’
+        * @param p, a String object that is a simple regular expression with ï¿½*� and/or ï¿½?�
         */
        private void parseWildCards() {
                if(fPattern.startsWith("*"))//$NON-NLS-1$
index be61b92..c61833e 100644 (file)
@@ -5,7 +5,7 @@ Copyright (c) 2002 IBM Corp. and others. All rights reserved.
 This file is made available under the terms of the Common Public License v1.0
 which accompanies this distribution, and is available at
 http://www.eclipse.org/legal/cpl-v10.html
- 
+�
 Contributors:
 **********************************************************************/
 
index 2ee69aa..fe5cfa8 100644 (file)
@@ -5,7 +5,7 @@ Copyright (c) 2002 IBM Corp. and others. All rights reserved.
 This file is made available under the terms of the Common Public License v1.0
 which accompanies this distribution, and is available at
 http://www.eclipse.org/legal/cpl-v10.html
- 
+�
 Contributors:
 **********************************************************************/
 
diff --git a/net.sourceforge.phpeclipse/src/net/sourceforge/phpdt/internal/codeassist/impl/AssistOptions.java b/net.sourceforge.phpeclipse/src/net/sourceforge/phpdt/internal/codeassist/impl/AssistOptions.java
new file mode 100644 (file)
index 0000000..3244c02
--- /dev/null
@@ -0,0 +1,169 @@
+/*******************************************************************************
+ * Copyright (c) 2000, 2004 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials 
+ * are made available under the terms of the Common Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/cpl-v10.html
+ * 
+ * Contributors:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+package net.sourceforge.phpdt.internal.codeassist.impl;
+
+import java.util.Map;
+
+import net.sourceforge.phpdt.core.compiler.CharOperation;
+
+public class AssistOptions {
+       /**
+        * Option IDs
+        */
+       public static final String OPTION_PerformVisibilityCheck =
+               "net.sourceforge.phpdt.core.codeComplete.visibilityCheck";      //$NON-NLS-1$
+       public static final String OPTION_ForceImplicitQualification =
+               "net.sourceforge.phpdt.core.codeComplete.forceImplicitQualification";   //$NON-NLS-1$
+       public static final String OPTION_FieldPrefixes =
+               "net.sourceforge.phpdt.core.codeComplete.fieldPrefixes";        //$NON-NLS-1$
+       public static final String OPTION_StaticFieldPrefixes =
+               "net.sourceforge.phpdt.core.codeComplete.staticFieldPrefixes";  //$NON-NLS-1$
+       public static final String OPTION_LocalPrefixes =
+               "net.sourceforge.phpdt.core.codeComplete.localPrefixes";        //$NON-NLS-1$
+       public static final String OPTION_ArgumentPrefixes =
+               "net.sourceforge.phpdt.core.codeComplete.argumentPrefixes";     //$NON-NLS-1$
+       public static final String OPTION_FieldSuffixes =
+               "net.sourceforge.phpdt.core.codeComplete.fieldSuffixes";        //$NON-NLS-1$
+       public static final String OPTION_StaticFieldSuffixes =
+               "net.sourceforge.phpdt.core.codeComplete.staticFieldSuffixes";  //$NON-NLS-1$
+       public static final String OPTION_LocalSuffixes =
+               "net.sourceforge.phpdt.core.codeComplete.localSuffixes";        //$NON-NLS-1$
+       public static final String OPTION_ArgumentSuffixes =
+               "net.sourceforge.phpdt.core.codeComplete.argumentSuffixes";     //$NON-NLS-1$
+       public static final String ENABLED = "enabled"; //$NON-NLS-1$
+       public static final String DISABLED = "disabled"; //$NON-NLS-1$
+
+       public boolean checkVisibility = false;
+       public boolean forceImplicitQualification = false;
+       public char[][] fieldPrefixes = null;
+       public char[][] staticFieldPrefixes = null;
+       public char[][] localPrefixes = null;
+       public char[][] argumentPrefixes = null;
+       public char[][] fieldSuffixes = null;
+       public char[][] staticFieldSuffixes = null;
+       public char[][] localSuffixes = null;
+       public char[][] argumentSuffixes = null;
+
+       /** 
+        * Initializing the assist options with default settings
+        */
+       public AssistOptions() {
+               // Initializing the assist options with default settings
+       }
+
+       /** 
+        * Initializing the assist options with external settings
+        */
+       public AssistOptions(Map settings) {
+               if (settings == null)
+                       return;
+
+               set(settings);
+       }
+       public void set(Map optionsMap) {
+
+               Object optionValue;
+               if ((optionValue = optionsMap.get(OPTION_PerformVisibilityCheck)) != null) {
+                       if (ENABLED.equals(optionValue)) {
+                               this.checkVisibility = true;
+                       } else if (DISABLED.equals(optionValue)) {
+                               this.checkVisibility = false;
+                       }
+               }
+               if ((optionValue = optionsMap.get(OPTION_ForceImplicitQualification)) != null) {
+                       if (ENABLED.equals(optionValue)) {
+                               this.forceImplicitQualification = true;
+                       } else if (DISABLED.equals(optionValue)) {
+                               this.forceImplicitQualification = false;
+                       }
+               }
+               if ((optionValue = optionsMap.get(OPTION_FieldPrefixes)) != null) {
+                       if (optionValue instanceof String) {
+                               String stringValue = (String) optionValue;
+                               if (stringValue.length() > 0){
+                                       this.fieldPrefixes = CharOperation.splitAndTrimOn(',', stringValue.toCharArray());
+                               } else {
+                                       this.fieldPrefixes = null;
+                               }
+                       }
+               }
+               if ((optionValue = optionsMap.get(OPTION_StaticFieldPrefixes)) != null) {
+                       if (optionValue instanceof String) {
+                               String stringValue = (String) optionValue;
+                               if (stringValue.length() > 0){
+                                       this.staticFieldPrefixes = CharOperation.splitAndTrimOn(',', stringValue.toCharArray());
+                               } else {
+                                       this.staticFieldPrefixes = null;
+                               }
+                       }
+               }
+               if ((optionValue = optionsMap.get(OPTION_LocalPrefixes)) != null) {
+                       if (optionValue instanceof String) {
+                               String stringValue = (String) optionValue;
+                               if (stringValue.length() > 0){
+                                       this.localPrefixes = CharOperation.splitAndTrimOn(',', stringValue.toCharArray());
+                               } else {
+                                       this.localPrefixes = null;
+                               }
+                       }
+               }
+               if ((optionValue = optionsMap.get(OPTION_ArgumentPrefixes)) != null) {
+                       if (optionValue instanceof String) {
+                               String stringValue = (String) optionValue;
+                               if (stringValue.length() > 0){
+                                       this.argumentPrefixes = CharOperation.splitAndTrimOn(',', stringValue.toCharArray());
+                               } else {
+                                       this.argumentPrefixes = null;
+                               }
+                       }
+               }
+               if ((optionValue = optionsMap.get(OPTION_FieldSuffixes)) != null) {
+                       if (optionValue instanceof String) {
+                               String stringValue = (String) optionValue;
+                               if (stringValue.length() > 0){
+                                       this.fieldSuffixes = CharOperation.splitAndTrimOn(',', stringValue.toCharArray());
+                               } else {
+                                       this.fieldSuffixes = null;
+                               }
+                       }
+               }
+               if ((optionValue = optionsMap.get(OPTION_StaticFieldSuffixes)) != null) {
+                       if (optionValue instanceof String) {
+                               String stringValue = (String) optionValue;
+                               if (stringValue.length() > 0){
+                                       this.staticFieldSuffixes = CharOperation.splitAndTrimOn(',', stringValue.toCharArray());
+                               } else {
+                                       this.staticFieldSuffixes = null;
+                               }
+                       }
+               }
+               if ((optionValue = optionsMap.get(OPTION_LocalSuffixes)) != null) {
+                       if (optionValue instanceof String) {
+                               String stringValue = (String) optionValue;
+                               if (stringValue.length() > 0){
+                                       this.localSuffixes = CharOperation.splitAndTrimOn(',', stringValue.toCharArray());
+                               } else {
+                                       this.localSuffixes = null;
+                               }
+                       }
+               }
+               if ((optionValue = optionsMap.get(OPTION_ArgumentSuffixes)) != null) {
+                       if (optionValue instanceof String) {
+                               String stringValue = (String) optionValue;
+                               if (stringValue.length() > 0){
+                                       this.argumentSuffixes = CharOperation.splitAndTrimOn(',', stringValue.toCharArray());
+                               } else {
+                                       this.argumentSuffixes = null;
+                               }
+                       }
+               }
+       }
+}
index 06b7659..55769aa 100644 (file)
  *******************************************************************************/
 package net.sourceforge.phpdt.internal.compiler;
 
-import net.sourceforge.phpdt.core.compiler.*;
-import net.sourceforge.phpeclipse.internal.compiler.ast.*; 
-import net.sourceforge.phpdt.internal.compiler.lookup.*;
+import net.sourceforge.phpdt.core.compiler.IProblem;
+import net.sourceforge.phpdt.internal.compiler.lookup.BlockScope;
+import net.sourceforge.phpdt.internal.compiler.lookup.ClassScope;
+import net.sourceforge.phpdt.internal.compiler.lookup.CompilationUnitScope;
+import net.sourceforge.phpdt.internal.compiler.lookup.MethodScope;
+import net.sourceforge.phpeclipse.internal.compiler.ast.AND_AND_Expression;
+import net.sourceforge.phpeclipse.internal.compiler.ast.AllocationExpression;
+import net.sourceforge.phpeclipse.internal.compiler.ast.Argument;
+import net.sourceforge.phpeclipse.internal.compiler.ast.ArrayAllocationExpression;
+import net.sourceforge.phpeclipse.internal.compiler.ast.ArrayInitializer;
+import net.sourceforge.phpeclipse.internal.compiler.ast.ArrayQualifiedTypeReference;
+import net.sourceforge.phpeclipse.internal.compiler.ast.ArrayReference;
+import net.sourceforge.phpeclipse.internal.compiler.ast.ArrayTypeReference;
+import net.sourceforge.phpeclipse.internal.compiler.ast.AssertStatement;
+import net.sourceforge.phpeclipse.internal.compiler.ast.Assignment;
+import net.sourceforge.phpeclipse.internal.compiler.ast.BinaryExpression;
+import net.sourceforge.phpeclipse.internal.compiler.ast.Block;
+import net.sourceforge.phpeclipse.internal.compiler.ast.BreakStatement;
+import net.sourceforge.phpeclipse.internal.compiler.ast.CaseStatement;
+import net.sourceforge.phpeclipse.internal.compiler.ast.CastExpression;
+import net.sourceforge.phpeclipse.internal.compiler.ast.Clinit;
+import net.sourceforge.phpeclipse.internal.compiler.ast.CompilationUnitDeclaration;
+import net.sourceforge.phpeclipse.internal.compiler.ast.CompoundAssignment;
+import net.sourceforge.phpeclipse.internal.compiler.ast.ConditionalExpression;
+import net.sourceforge.phpeclipse.internal.compiler.ast.ConstructorDeclaration;
+import net.sourceforge.phpeclipse.internal.compiler.ast.ContinueStatement;
+import net.sourceforge.phpeclipse.internal.compiler.ast.DoStatement;
+import net.sourceforge.phpeclipse.internal.compiler.ast.DoubleLiteral;
+import net.sourceforge.phpeclipse.internal.compiler.ast.EmptyStatement;
+import net.sourceforge.phpeclipse.internal.compiler.ast.EqualExpression;
+import net.sourceforge.phpeclipse.internal.compiler.ast.ExplicitConstructorCall;
+import net.sourceforge.phpeclipse.internal.compiler.ast.ExtendedStringLiteral;
+import net.sourceforge.phpeclipse.internal.compiler.ast.FalseLiteral;
+import net.sourceforge.phpeclipse.internal.compiler.ast.FieldDeclaration;
+import net.sourceforge.phpeclipse.internal.compiler.ast.FieldReference;
+import net.sourceforge.phpeclipse.internal.compiler.ast.FloatLiteral;
+import net.sourceforge.phpeclipse.internal.compiler.ast.ForStatement;
+import net.sourceforge.phpeclipse.internal.compiler.ast.IfStatement;
+import net.sourceforge.phpeclipse.internal.compiler.ast.ImportReference;
+import net.sourceforge.phpeclipse.internal.compiler.ast.Initializer;
+import net.sourceforge.phpeclipse.internal.compiler.ast.InstanceOfExpression;
+import net.sourceforge.phpeclipse.internal.compiler.ast.IntLiteral;
+import net.sourceforge.phpeclipse.internal.compiler.ast.LabeledStatement;
+import net.sourceforge.phpeclipse.internal.compiler.ast.LocalDeclaration;
+import net.sourceforge.phpeclipse.internal.compiler.ast.LongLiteral;
+import net.sourceforge.phpeclipse.internal.compiler.ast.MessageSend;
+import net.sourceforge.phpeclipse.internal.compiler.ast.MethodDeclaration;
+import net.sourceforge.phpeclipse.internal.compiler.ast.NullLiteral;
+import net.sourceforge.phpeclipse.internal.compiler.ast.OR_OR_Expression;
+import net.sourceforge.phpeclipse.internal.compiler.ast.PostfixExpression;
+import net.sourceforge.phpeclipse.internal.compiler.ast.PrefixExpression;
+import net.sourceforge.phpeclipse.internal.compiler.ast.QualifiedAllocationExpression;
+import net.sourceforge.phpeclipse.internal.compiler.ast.QualifiedNameReference;
+import net.sourceforge.phpeclipse.internal.compiler.ast.QualifiedSuperReference;
+import net.sourceforge.phpeclipse.internal.compiler.ast.QualifiedThisReference;
+import net.sourceforge.phpeclipse.internal.compiler.ast.QualifiedTypeReference;
+import net.sourceforge.phpeclipse.internal.compiler.ast.ReturnStatement;
+import net.sourceforge.phpeclipse.internal.compiler.ast.SingleNameReference;
+import net.sourceforge.phpeclipse.internal.compiler.ast.SingleTypeReference;
+import net.sourceforge.phpeclipse.internal.compiler.ast.StringLiteral;
+import net.sourceforge.phpeclipse.internal.compiler.ast.SuperReference;
+import net.sourceforge.phpeclipse.internal.compiler.ast.SwitchStatement;
+import net.sourceforge.phpeclipse.internal.compiler.ast.ThisReference;
+import net.sourceforge.phpeclipse.internal.compiler.ast.ThrowStatement;
+import net.sourceforge.phpeclipse.internal.compiler.ast.TrueLiteral;
+import net.sourceforge.phpeclipse.internal.compiler.ast.TryStatement;
+import net.sourceforge.phpeclipse.internal.compiler.ast.TypeDeclaration;
+import net.sourceforge.phpeclipse.internal.compiler.ast.UnaryExpression;
+import net.sourceforge.phpeclipse.internal.compiler.ast.WhileStatement;
 
 /** 
  * A visitor for iterating through the parse tree.
@@ -99,21 +165,16 @@ public abstract class ASTVisitor {
        public void endVisit(Block block, BlockScope scope) {
                // do nothing by default
        }
-       public void endVisit(Break breakStatement, BlockScope scope) {
+       public void endVisit(BreakStatement breakStatement, BlockScope scope) {
                // do nothing by default
        }
-       public void endVisit(Case caseStatement, BlockScope scope) {
+       public void endVisit(CaseStatement caseStatement, BlockScope scope) {
                // do nothing by default
        }
        public void endVisit(CastExpression castExpression, BlockScope scope) {
                // do nothing by default
        }
-       public void endVisit(CharLiteral charLiteral, BlockScope scope) {
-               // do nothing by default
-       }
-       public void endVisit(ClassLiteralAccess classLiteral, BlockScope scope) {
-               // do nothing by default
-       }
+               
        public void endVisit(Clinit clinit, ClassScope scope) {
                // do nothing by default
        }
@@ -135,7 +196,7 @@ public abstract class ASTVisitor {
                ClassScope scope) {
                // do nothing by default
        }
-       public void endVisit(Continue continueStatement, BlockScope scope) {
+       public void endVisit(ContinueStatement continueStatement, BlockScope scope) {
                // do nothing by default
        }
        public void endVisit(DoStatement doStatement, BlockScope scope) {
@@ -279,11 +340,7 @@ public abstract class ASTVisitor {
        public void endVisit(SwitchStatement switchStatement, BlockScope scope) {
                // do nothing by default
        }
-       public void endVisit(
-               SynchronizedStatement synchronizedStatement,
-               BlockScope scope) {
-               // do nothing by default
-       }
+       
        public void endVisit(ThisReference thisReference, BlockScope scope) {
                // do nothing by default
        }
@@ -395,21 +452,16 @@ public abstract class ASTVisitor {
        public boolean visit(Block block, BlockScope scope) {
                return true; // do nothing by default, keep traversing
        }
-       public boolean visit(Break breakStatement, BlockScope scope) {
+       public boolean visit(BreakStatement breakStatement, BlockScope scope) {
                return true; // do nothing by default, keep traversing
        }
-       public boolean visit(Case caseStatement, BlockScope scope) {
+       public boolean visit(CaseStatement caseStatement, BlockScope scope) {
                return true; // do nothing by default, keep traversing
        }
        public boolean visit(CastExpression castExpression, BlockScope scope) {
                return true; // do nothing by default, keep traversing
        }
-       public boolean visit(CharLiteral charLiteral, BlockScope scope) {
-               return true; // do nothing by default, keep traversing
-       }
-       public boolean visit(ClassLiteralAccess classLiteral, BlockScope scope) {
-               return true; // do nothing by default, keep traversing
-       }
+       
        public boolean visit(Clinit clinit, ClassScope scope) {
                return true; // do nothing by default, keep traversing
        }
@@ -431,7 +483,7 @@ public abstract class ASTVisitor {
                ClassScope scope) {
                return true; // do nothing by default, keep traversing
        }
-       public boolean visit(Continue continueStatement, BlockScope scope) {
+       public boolean visit(ContinueStatement continueStatement, BlockScope scope) {
                return true; // do nothing by default, keep traversing
        }
        public boolean visit(DoStatement doStatement, BlockScope scope) {
@@ -577,11 +629,7 @@ public abstract class ASTVisitor {
        public boolean visit(SwitchStatement switchStatement, BlockScope scope) {
                return true; // do nothing by default, keep traversing
        }
-       public boolean visit(
-               SynchronizedStatement synchronizedStatement,
-               BlockScope scope) {
-               return true; // do nothing by default, keep traversing
-       }
+       
        public boolean visit(ThisReference thisReference, BlockScope scope) {
                return true; // do nothing by default, keep traversing
        }
index 3185e97..a0bcea4 100644 (file)
@@ -28,17 +28,15 @@ import net.sourceforge.phpeclipse.internal.compiler.ast.AssertStatement;
 import net.sourceforge.phpeclipse.internal.compiler.ast.Assignment;
 import net.sourceforge.phpeclipse.internal.compiler.ast.BinaryExpression;
 import net.sourceforge.phpeclipse.internal.compiler.ast.Block;
-import net.sourceforge.phpeclipse.internal.compiler.ast.Break;
-import net.sourceforge.phpeclipse.internal.compiler.ast.Case;
+import net.sourceforge.phpeclipse.internal.compiler.ast.BreakStatement;
+import net.sourceforge.phpeclipse.internal.compiler.ast.CaseStatement;
 import net.sourceforge.phpeclipse.internal.compiler.ast.CastExpression;
-import net.sourceforge.phpeclipse.internal.compiler.ast.CharLiteral;
-import net.sourceforge.phpeclipse.internal.compiler.ast.ClassLiteralAccess;
 import net.sourceforge.phpeclipse.internal.compiler.ast.Clinit;
 import net.sourceforge.phpeclipse.internal.compiler.ast.CompilationUnitDeclaration;
 import net.sourceforge.phpeclipse.internal.compiler.ast.CompoundAssignment;
 import net.sourceforge.phpeclipse.internal.compiler.ast.ConditionalExpression;
 import net.sourceforge.phpeclipse.internal.compiler.ast.ConstructorDeclaration;
-import net.sourceforge.phpeclipse.internal.compiler.ast.Continue;
+import net.sourceforge.phpeclipse.internal.compiler.ast.ContinueStatement;
 import net.sourceforge.phpeclipse.internal.compiler.ast.DefaultCase;
 import net.sourceforge.phpeclipse.internal.compiler.ast.DoStatement;
 import net.sourceforge.phpeclipse.internal.compiler.ast.DoubleLiteral;
@@ -78,7 +76,6 @@ import net.sourceforge.phpeclipse.internal.compiler.ast.SingleTypeReference;
 import net.sourceforge.phpeclipse.internal.compiler.ast.StringLiteral;
 import net.sourceforge.phpeclipse.internal.compiler.ast.SuperReference;
 import net.sourceforge.phpeclipse.internal.compiler.ast.SwitchStatement;
-import net.sourceforge.phpeclipse.internal.compiler.ast.SynchronizedStatement;
 import net.sourceforge.phpeclipse.internal.compiler.ast.ThisReference;
 import net.sourceforge.phpeclipse.internal.compiler.ast.ThrowStatement;
 import net.sourceforge.phpeclipse.internal.compiler.ast.TrueLiteral;
@@ -135,16 +132,12 @@ public class AbstractSyntaxTreeVisitorAdapter implements IAbstractSyntaxTreeVisi
        }
        public void endVisit(Block block, BlockScope scope) {
        }
-       public void endVisit(Break breakStatement, BlockScope scope) {
+       public void endVisit(BreakStatement breakStatement, BlockScope scope) {
        }
-       public void endVisit(Case caseStatement, BlockScope scope) {
+       public void endVisit(CaseStatement caseStatement, BlockScope scope) {
        }
        public void endVisit(CastExpression castExpression, BlockScope scope) {
        }
-       public void endVisit(CharLiteral charLiteral, BlockScope scope) {
-       }
-       public void endVisit(ClassLiteralAccess classLiteral, BlockScope scope) {
-       }
        public void endVisit(Clinit clinit, ClassScope scope) {
        }
        public void endVisit(
@@ -161,7 +154,7 @@ public class AbstractSyntaxTreeVisitorAdapter implements IAbstractSyntaxTreeVisi
                ConstructorDeclaration constructorDeclaration,
                ClassScope scope) {
        }
-       public void endVisit(Continue continueStatement, BlockScope scope) {
+       public void endVisit(ContinueStatement continueStatement, BlockScope scope) {
        }
        public void endVisit(DefaultCase defaultCaseStatement, BlockScope scope) {
        }
@@ -269,10 +262,7 @@ public class AbstractSyntaxTreeVisitorAdapter implements IAbstractSyntaxTreeVisi
        }
        public void endVisit(SwitchStatement switchStatement, BlockScope scope) {
        }
-       public void endVisit(
-               SynchronizedStatement synchronizedStatement,
-               BlockScope scope) {
-       }
+       
        public void endVisit(ThisReference thisReference, BlockScope scope) {
        }
        public void endVisit(ThrowStatement throwStatement, BlockScope scope) {
@@ -344,21 +334,16 @@ public class AbstractSyntaxTreeVisitorAdapter implements IAbstractSyntaxTreeVisi
        public boolean visit(Block block, BlockScope scope) {
                return true;
        }
-       public boolean visit(Break breakStatement, BlockScope scope) {
+       public boolean visit(BreakStatement breakStatement, BlockScope scope) {
                return true;
        }
-       public boolean visit(Case caseStatement, BlockScope scope) {
+       public boolean visit(CaseStatement caseStatement, BlockScope scope) {
                return true;
        }
        public boolean visit(CastExpression castExpression, BlockScope scope) {
                return true;
        }
-       public boolean visit(CharLiteral charLiteral, BlockScope scope) {
-               return true;
-       }
-       public boolean visit(ClassLiteralAccess classLiteral, BlockScope scope) {
-               return true;
-       }
+       
        public boolean visit(Clinit clinit, ClassScope scope) {
                return true;
        }
@@ -380,7 +365,7 @@ public class AbstractSyntaxTreeVisitorAdapter implements IAbstractSyntaxTreeVisi
                ClassScope scope) {
                return true;
        }
-       public boolean visit(Continue continueStatement, BlockScope scope) {
+       public boolean visit(ContinueStatement continueStatement, BlockScope scope) {
                return true;
        }
        public boolean visit(DefaultCase defaultCaseStatement, BlockScope scope) {
@@ -529,11 +514,7 @@ public class AbstractSyntaxTreeVisitorAdapter implements IAbstractSyntaxTreeVisi
        public boolean visit(SwitchStatement switchStatement, BlockScope scope) {
                return true;
        }
-       public boolean visit(
-               SynchronizedStatement synchronizedStatement,
-               BlockScope scope) {
-               return true;
-       }
+       
        public boolean visit(ThisReference thisReference, BlockScope scope) {
                return true;
        }
index b2f8ef1..509ac89 100644 (file)
@@ -1027,7 +1027,7 @@ public class DocumentElementParser extends UnitParser {
     try {
       initialize();
       goForCompilationUnit();
-      referenceContext = compilationUnit = compilationUnit = new CompilationUnitDeclaration(problemReporter(),
+      referenceContext = compilationUnit = new CompilationUnitDeclaration(problemReporter(),
           new CompilationResult(unit, 0, 0, 10), //this.options.maxProblemsPerUnit),
           regionSource.length);
       scanner.resetTo(0, regionSource.length);
index f08807b..6d921c2 100644 (file)
@@ -28,17 +28,15 @@ import net.sourceforge.phpeclipse.internal.compiler.ast.AssertStatement;
 import net.sourceforge.phpeclipse.internal.compiler.ast.Assignment;
 import net.sourceforge.phpeclipse.internal.compiler.ast.BinaryExpression;
 import net.sourceforge.phpeclipse.internal.compiler.ast.Block;
-import net.sourceforge.phpeclipse.internal.compiler.ast.Break;
-import net.sourceforge.phpeclipse.internal.compiler.ast.Case;
+import net.sourceforge.phpeclipse.internal.compiler.ast.BreakStatement;
+import net.sourceforge.phpeclipse.internal.compiler.ast.CaseStatement;
 import net.sourceforge.phpeclipse.internal.compiler.ast.CastExpression;
-import net.sourceforge.phpeclipse.internal.compiler.ast.CharLiteral;
-import net.sourceforge.phpeclipse.internal.compiler.ast.ClassLiteralAccess;
 import net.sourceforge.phpeclipse.internal.compiler.ast.Clinit;
 import net.sourceforge.phpeclipse.internal.compiler.ast.CompilationUnitDeclaration;
 import net.sourceforge.phpeclipse.internal.compiler.ast.CompoundAssignment;
 import net.sourceforge.phpeclipse.internal.compiler.ast.ConditionalExpression;
 import net.sourceforge.phpeclipse.internal.compiler.ast.ConstructorDeclaration;
-import net.sourceforge.phpeclipse.internal.compiler.ast.Continue;
+import net.sourceforge.phpeclipse.internal.compiler.ast.ContinueStatement;
 import net.sourceforge.phpeclipse.internal.compiler.ast.DefaultCase;
 import net.sourceforge.phpeclipse.internal.compiler.ast.DoStatement;
 import net.sourceforge.phpeclipse.internal.compiler.ast.DoubleLiteral;
@@ -78,7 +76,6 @@ import net.sourceforge.phpeclipse.internal.compiler.ast.SingleTypeReference;
 import net.sourceforge.phpeclipse.internal.compiler.ast.StringLiteral;
 import net.sourceforge.phpeclipse.internal.compiler.ast.SuperReference;
 import net.sourceforge.phpeclipse.internal.compiler.ast.SwitchStatement;
-import net.sourceforge.phpeclipse.internal.compiler.ast.SynchronizedStatement;
 import net.sourceforge.phpeclipse.internal.compiler.ast.ThisReference;
 import net.sourceforge.phpeclipse.internal.compiler.ast.ThrowStatement;
 import net.sourceforge.phpeclipse.internal.compiler.ast.TrueLiteral;
@@ -107,17 +104,17 @@ public interface IAbstractSyntaxTreeVisitor {
        void endVisit(Assignment assignment, BlockScope scope);
        void endVisit(BinaryExpression binaryExpression, BlockScope scope);
        void endVisit(Block block, BlockScope scope);
-       void endVisit(Break breakStatement, BlockScope scope);
-       void endVisit(Case caseStatement, BlockScope scope);
+       void endVisit(BreakStatement breakStatement, BlockScope scope);
+       void endVisit(CaseStatement caseStatement, BlockScope scope);
        void endVisit(CastExpression castExpression, BlockScope scope);
-       void endVisit(CharLiteral charLiteral, BlockScope scope);
-       void endVisit(ClassLiteralAccess classLiteral, BlockScope scope);
+//     void endVisit(CharLiteral charLiteral, BlockScope scope);
+//     void endVisit(ClassLiteralAccess classLiteral, BlockScope scope);
        void endVisit(Clinit clinit, ClassScope scope);
        void endVisit(CompilationUnitDeclaration compilationUnitDeclaration, CompilationUnitScope scope);
        void endVisit(CompoundAssignment compoundAssignment, BlockScope scope);
        void endVisit(ConditionalExpression conditionalExpression, BlockScope scope);
        void endVisit(ConstructorDeclaration constructorDeclaration, ClassScope scope);
-       void endVisit(Continue continueStatement, BlockScope scope);
+       void endVisit(ContinueStatement continueStatement, BlockScope scope);
        void endVisit(DefaultCase defaultCaseStatement, BlockScope scope);
        void endVisit(DoStatement doStatement, BlockScope scope);
        void endVisit(DoubleLiteral doubleLiteral, BlockScope scope);
@@ -159,7 +156,7 @@ public interface IAbstractSyntaxTreeVisitor {
        void endVisit(StringLiteral stringLiteral, BlockScope scope);
        void endVisit(SuperReference superReference, BlockScope scope);
        void endVisit(SwitchStatement switchStatement, BlockScope scope);
-       void endVisit(SynchronizedStatement synchronizedStatement, BlockScope scope);
+//     void endVisit(SynchronizedStatement synchronizedStatement, BlockScope scope);
        void endVisit(ThisReference thisReference, BlockScope scope);
        void endVisit(ThrowStatement throwStatement, BlockScope scope);
        void endVisit(TrueLiteral trueLiteral, BlockScope scope);
@@ -182,17 +179,17 @@ public interface IAbstractSyntaxTreeVisitor {
        boolean visit(Assignment assignment, BlockScope scope);
        boolean visit(BinaryExpression binaryExpression, BlockScope scope);
        boolean visit(Block block, BlockScope scope);
-       boolean visit(Break breakStatement, BlockScope scope);
-       boolean visit(Case caseStatement, BlockScope scope);
+       boolean visit(BreakStatement breakStatement, BlockScope scope);
+       boolean visit(CaseStatement caseStatement, BlockScope scope);
        boolean visit(CastExpression castExpression, BlockScope scope);
-       boolean visit(CharLiteral charLiteral, BlockScope scope);
-       boolean visit(ClassLiteralAccess classLiteral, BlockScope scope);
+//     boolean visit(CharLiteral charLiteral, BlockScope scope);
+//     boolean visit(ClassLiteralAccess classLiteral, BlockScope scope);
        boolean visit(Clinit clinit, ClassScope scope);
        boolean visit(CompilationUnitDeclaration compilationUnitDeclaration, CompilationUnitScope scope);
        boolean visit(CompoundAssignment compoundAssignment, BlockScope scope);
        boolean visit(ConditionalExpression conditionalExpression, BlockScope scope);
        boolean visit(ConstructorDeclaration constructorDeclaration, ClassScope scope);
-       boolean visit(Continue continueStatement, BlockScope scope);
+       boolean visit(ContinueStatement continueStatement, BlockScope scope);
        boolean visit(DefaultCase defaultCaseStatement, BlockScope scope);
        boolean visit(DoStatement doStatement, BlockScope scope);
        boolean visit(DoubleLiteral doubleLiteral, BlockScope scope);
@@ -234,7 +231,7 @@ public interface IAbstractSyntaxTreeVisitor {
        boolean visit(StringLiteral stringLiteral, BlockScope scope);
        boolean visit(SuperReference superReference, BlockScope scope);
        boolean visit(SwitchStatement switchStatement, BlockScope scope);
-       boolean visit(SynchronizedStatement synchronizedStatement, BlockScope scope);
+//     boolean visit(SynchronizedStatement synchronizedStatement, BlockScope scope);
        boolean visit(ThisReference thisReference, BlockScope scope);
        boolean visit(ThrowStatement throwStatement, BlockScope scope);
        boolean visit(TrueLiteral trueLiteral, BlockScope scope);
index 58c2541..ddf5ff8 100644 (file)
@@ -10,6 +10,8 @@
  *******************************************************************************/
 package net.sourceforge.phpdt.internal.compiler;
 
+import java.util.HashMap;
+
 import net.sourceforge.phpdt.core.compiler.IProblem;
 
 /*
index 7dc0c65..fc27be9 100644 (file)
@@ -32,7 +32,6 @@ import net.sourceforge.phpeclipse.internal.compiler.ast.ConstructorDeclaration;
 import net.sourceforge.phpeclipse.internal.compiler.ast.ExplicitConstructorCall;
 import net.sourceforge.phpeclipse.internal.compiler.ast.FieldDeclaration;
 import net.sourceforge.phpeclipse.internal.compiler.ast.ImportReference;
-import net.sourceforge.phpeclipse.internal.compiler.ast.LocalTypeDeclaration;
 import net.sourceforge.phpeclipse.internal.compiler.ast.MemberTypeDeclaration;
 import net.sourceforge.phpeclipse.internal.compiler.ast.MethodDeclaration;
 import net.sourceforge.phpeclipse.internal.compiler.ast.NameReference;
@@ -40,8 +39,6 @@ import net.sourceforge.phpeclipse.internal.compiler.ast.QualifiedAllocationExpre
 import net.sourceforge.phpeclipse.internal.compiler.ast.TypeDeclaration;
 import net.sourceforge.phpeclipse.internal.compiler.ast.TypeReference;
 
-import org.eclipse.core.resources.IResource;
-
 /**
  * A source element parser extracts structural and reference information
  * from a piece of source.
@@ -82,26 +79,16 @@ public class SourceElementParser extends CommentRecorderParser {//extends
   /**
    * An ast visitor that visits local type declarations.
    */
-  public class LocalDeclarationVisitor extends AbstractSyntaxTreeVisitorAdapter {
-    // public boolean visit(
-    //                 AnonymousLocalTypeDeclaration anonymousTypeDeclaration,
-    //                 BlockScope scope) {
-    //         notifySourceElementRequestor(anonymousTypeDeclaration, sourceType ==
-    // null);
-    //         return false; // don't visit members as this was done during
-    // notifySourceElementRequestor(...)
-    // }
-    public boolean visit(LocalTypeDeclaration typeDeclaration, BlockScope scope) {
-      notifySourceElementRequestor(typeDeclaration, sourceType == null);
-      return false; // don't visit members as this was done during
-                    // notifySourceElementRequestor(...)
-    }
-    public boolean visit(MemberTypeDeclaration typeDeclaration, ClassScope scope) {
-      notifySourceElementRequestor(typeDeclaration, sourceType == null);
-      return false; // don't visit members as this was done during
-                    // notifySourceElementRequestor(...)
-    }
-
+  public class LocalDeclarationVisitor extends ASTVisitor {
+       public boolean visit(TypeDeclaration typeDeclaration, BlockScope scope) {
+               notifySourceElementRequestor(typeDeclaration, sourceType == null);
+               return false; // don't visit members as this was done during notifySourceElementRequestor(...)
+       }
+       public boolean visit(TypeDeclaration typeDeclaration, ClassScope scope) {
+               notifySourceElementRequestor(typeDeclaration, sourceType == null);
+               return false; // don't visit members as this was done during notifySourceElementRequestor(...)
+       }
+       
   }
 
   public SourceElementParser(final ISourceElementRequestor requestor, IProblemFactory problemFactory, CompilerOptions options) {
@@ -128,21 +115,21 @@ public class SourceElementParser extends CommentRecorderParser {//extends
    * @deprecated use SourceElementParser(ISourceElementRequestor,
    *             IProblemFactory, CompilerOptions)
    */
-  //public SourceElementParser(
-  //   final ISourceElementRequestor requestor,
-  //   IProblemFactory problemFactory) {
-  //           this(requestor, problemFactory, new CompilerOptions());
-  //}
-  //public SourceElementParser(
-  //   final ISourceElementRequestor requestor,
-  //   IProblemFactory problemFactory,
-  //   CompilerOptions options,
-  //   boolean reportLocalDeclarations) {
-  //           this(requestor, problemFactory, options);
-  //           if (reportLocalDeclarations) {
-  //                   this.localDeclarationVisitor = new LocalDeclarationVisitor();
-  //           }
-  //}
+  public SourceElementParser(
+       final ISourceElementRequestor requestor,
+       IProblemFactory problemFactory) {
+               this(requestor, problemFactory, new CompilerOptions());
+  }
+  public SourceElementParser(
+       final ISourceElementRequestor requestor,
+       IProblemFactory problemFactory,
+       CompilerOptions options,
+       boolean reportLocalDeclarations) {
+               this(requestor, problemFactory, options);
+               if (reportLocalDeclarations) {
+                       this.localDeclarationVisitor = new LocalDeclarationVisitor();
+               }
+  }
   //public void checkAnnotation() {
   //   int firstCommentIndex = scanner.commentPtr;
   //
@@ -923,7 +910,7 @@ public class SourceElementParser extends CommentRecorderParser {//extends
 
     FieldDeclaration[] fields = typeDeclaration.fields;
     AbstractMethodDeclaration[] methods = typeDeclaration.methods;
-    MemberTypeDeclaration[] memberTypes = typeDeclaration.memberTypes;
+    TypeDeclaration[] memberTypes = typeDeclaration.memberTypes;
     int fieldCount = fields == null ? 0 : fields.length;
     int methodCount = methods == null ? 0 : methods.length;
     int memberTypeCount = memberTypes == null ? 0 : memberTypes.length;
diff --git a/net.sourceforge.phpeclipse/src/net/sourceforge/phpdt/internal/compiler/batch/ClasspathDirectory.java b/net.sourceforge.phpeclipse/src/net/sourceforge/phpdt/internal/compiler/batch/ClasspathDirectory.java
new file mode 100644 (file)
index 0000000..29069bc
--- /dev/null
@@ -0,0 +1,119 @@
+/*******************************************************************************
+ * Copyright (c) 2000, 2004 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials 
+ * are made available under the terms of the Common Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/cpl-v10.html
+ * 
+ * Contributors:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+package net.sourceforge.phpdt.internal.compiler.batch;
+
+import java.io.File;
+import java.util.Hashtable;
+
+import net.sourceforge.phpdt.internal.compiler.env.NameEnvironmentAnswer;
+import net.sourceforge.phpdt.internal.compiler.util.SuffixConstants;
+
+public class ClasspathDirectory implements FileSystem.Classpath, SuffixConstants {
+
+String path;
+Hashtable directoryCache;
+String[] missingPackageHolder = new String[1];
+String encoding;
+public int mode; // ability to only consider one kind of files (source vs. binaries), by default use both
+
+public static final int SOURCE = 1;
+public static final int BINARY = 2;
+
+ClasspathDirectory(File directory, String encoding, int mode) {
+       this.mode = mode;
+       this.path = directory.getAbsolutePath();
+       if (!this.path.endsWith(File.separator))
+               this.path += File.separator;
+       this.directoryCache = new Hashtable(11);
+       this.encoding = encoding;
+}
+
+ClasspathDirectory(File directory, String encoding) {
+       this(directory, encoding, SOURCE | BINARY); // by default consider both sources and binaries
+}
+
+String[] directoryList(String qualifiedPackageName) {
+       String[] dirList = (String[]) this.directoryCache.get(qualifiedPackageName);
+       if (dirList == this.missingPackageHolder) return null; // package exists in another classpath directory or jar
+       if (dirList != null) return dirList;
+
+       File dir = new File(this.path + qualifiedPackageName);
+       notFound : if (dir != null && dir.isDirectory()) {
+               // must protect against a case insensitive File call
+               // walk the qualifiedPackageName backwards looking for an uppercase character before the '/'
+               int index = qualifiedPackageName.length();
+               int last = qualifiedPackageName.lastIndexOf(File.separatorChar);
+               while (--index > last && !Character.isUpperCase(qualifiedPackageName.charAt(index))){/*empty*/}
+               if (index > last) {
+                       if (last == -1) {
+                               if (!doesFileExist(qualifiedPackageName, ""))  //$NON-NLS-1$ 
+                                       break notFound;
+                       } else {
+                               String packageName = qualifiedPackageName.substring(last + 1);
+                               String parentPackage = qualifiedPackageName.substring(0, last);
+                               if (!doesFileExist(packageName, parentPackage))
+                                       break notFound;
+                       }
+               }
+               if ((dirList = dir.list()) == null)
+                       dirList = new String[0];
+               this.directoryCache.put(qualifiedPackageName, dirList);
+               return dirList;
+       }
+       this.directoryCache.put(qualifiedPackageName, this.missingPackageHolder);
+       return null;
+}
+boolean doesFileExist(String fileName, String qualifiedPackageName) {
+       String[] dirList = directoryList(qualifiedPackageName);
+       if (dirList == null) return false; // most common case
+
+       for (int i = dirList.length; --i >= 0;)
+               if (fileName.equals(dirList[i]))
+                       return true;
+       return false;
+}
+public NameEnvironmentAnswer findClass(char[] typeName, String qualifiedPackageName, String qualifiedBinaryFileName) {
+       if (!isPackage(qualifiedPackageName)) return null; // most common case
+
+       String fileName = new String(typeName);
+//     boolean binaryExists = ((this.mode & BINARY) != 0) && doesFileExist(fileName + SUFFIX_STRING_class, qualifiedPackageName);
+       boolean sourceExists = ((this.mode & SOURCE) != 0) && doesFileExist(fileName + SUFFIX_STRING_php, qualifiedPackageName);
+       if (sourceExists) {
+               String fullSourcePath = this.path + qualifiedBinaryFileName.substring(0, qualifiedBinaryFileName.length() - 6)  + SUFFIX_STRING_php;
+//             if (!binaryExists)
+                       return new NameEnvironmentAnswer(new CompilationUnit(null, fullSourcePath, this.encoding));
+
+//             String fullBinaryPath = this.path + qualifiedBinaryFileName;
+//             long binaryModified = new File(fullBinaryPath).lastModified();
+//             long sourceModified = new File(fullSourcePath).lastModified();
+//             if (sourceModified > binaryModified)
+//                     return new NameEnvironmentAnswer(new CompilationUnit(null, fullSourcePath, this.encoding));
+       }
+//     if (binaryExists) {
+//             try {
+//                     ClassFileReader reader = ClassFileReader.read(this.path + qualifiedBinaryFileName);
+//                     if (reader != null) return new NameEnvironmentAnswer(reader);
+//             } catch (Exception e) { 
+//                     // treat as if file is missing
+//             }
+//     }
+       return null;
+}
+public boolean isPackage(String qualifiedPackageName) {
+       return directoryList(qualifiedPackageName) != null;
+}
+public void reset() {
+       this.directoryCache = new Hashtable(11);
+}
+public String toString() {
+       return "ClasspathDirectory " + this.path; //$NON-NLS-1$
+}
+}
diff --git a/net.sourceforge.phpeclipse/src/net/sourceforge/phpdt/internal/compiler/batch/CompilationUnit.java b/net.sourceforge.phpeclipse/src/net/sourceforge/phpdt/internal/compiler/batch/CompilationUnit.java
new file mode 100644 (file)
index 0000000..c944911
--- /dev/null
@@ -0,0 +1,86 @@
+/***********************************************************************************************************************************
+ * Copyright (c) 2000, 2004 IBM Corporation and others. All rights reserved. This program and the accompanying materials are made
+ * available under the terms of the Common Public License v1.0 which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/cpl-v10.html
+ * 
+ * Contributors: IBM Corporation - initial API and implementation
+ **********************************************************************************************************************************/
+package net.sourceforge.phpdt.internal.compiler.batch;
+
+import java.io.File;
+import java.io.IOException;
+
+import net.sourceforge.phpdt.core.compiler.CharOperation;
+import net.sourceforge.phpdt.internal.compiler.env.ICompilationUnit;
+import net.sourceforge.phpdt.internal.compiler.util.Util;
+
+import org.eclipse.core.resources.IResource;
+
+public class CompilationUnit implements ICompilationUnit {
+  public char[] contents;
+
+  public char[] fileName;
+
+  public char[] mainTypeName;
+
+  String encoding;
+
+  public CompilationUnit(char[] contents, String fileName, String encoding) {
+    this.contents = contents;
+    if (File.separator.equals("/")) { //$NON-NLS-1$
+      if (fileName.indexOf("\\") != -1) { //$NON-NLS-1$
+        fileName = fileName.replace('\\', File.separatorChar);
+      }
+    } else {
+      // the file separator is \
+      if (fileName.indexOf('/') != -1) {
+        fileName = fileName.replace('/', File.separatorChar);
+      }
+    }
+    this.fileName = fileName.toCharArray();
+
+    int start = fileName.lastIndexOf("/") + 1; //$NON-NLS-1$
+    if (start == 0 || start < fileName.lastIndexOf("\\")) //$NON-NLS-1$
+      start = fileName.lastIndexOf("\\") + 1; //$NON-NLS-1$
+
+    int end = fileName.lastIndexOf("."); //$NON-NLS-1$
+    if (end == -1)
+      end = fileName.length();
+
+    this.mainTypeName = fileName.substring(start, end).toCharArray();
+    this.encoding = encoding;
+  }
+
+  public char[] getContents() {
+    if (this.contents != null)
+      return this.contents; // answer the cached source
+
+    // otherwise retrieve it
+    try {
+      return Util.getFileCharContent(new File(new String(this.fileName)), this.encoding);
+    } catch (IOException e) {
+      // assume no content then
+    }
+    return CharOperation.NO_CHAR;
+  }
+
+  public char[] getFileName() {
+    return this.fileName;
+  }
+
+  public char[] getMainTypeName() {
+    return this.mainTypeName;
+  }
+
+  public char[][] getPackageName() {
+    return null;
+  }
+
+  public String toString() {
+    return "CompilationUnit[" + new String(this.fileName) + "]"; //$NON-NLS-2$ //$NON-NLS-1$
+  }
+
+  public IResource getResource() {
+    return null;
+  }
+}
\ No newline at end of file
diff --git a/net.sourceforge.phpeclipse/src/net/sourceforge/phpdt/internal/compiler/batch/FileFinder.java b/net.sourceforge.phpeclipse/src/net/sourceforge/phpdt/internal/compiler/batch/FileFinder.java
new file mode 100644 (file)
index 0000000..61cdefe
--- /dev/null
@@ -0,0 +1,48 @@
+/*******************************************************************************
+ * Copyright (c) 2000, 2004 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials 
+ * are made available under the terms of the Common Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/cpl-v10.html
+ * 
+ * Contributors:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+package net.sourceforge.phpdt.internal.compiler.batch;
+
+import java.io.File;
+
+public class FileFinder {
+       private static final int INITIAL_SIZE = 10;
+       public String[] resultFiles = new String[INITIAL_SIZE];
+       public int count = 0;
+public void find(File f, String pattern, boolean verbose) {
+       if (verbose) {
+//             System.out.println(Main.bind("scanning.start",f.getAbsolutePath())); //$NON-NLS-1$
+       }
+       find0(f, pattern, verbose);
+       System.arraycopy(this.resultFiles, 0, (this.resultFiles = new String[this.count]), 0, this.count);
+}
+public void find0(File f, String pattern, boolean verbose) {
+       if (f.isDirectory()) {
+               String[] files = f.list();
+               if (files == null) return;
+               for (int i = 0, max = files.length; i < max; i++) {
+                       File current = new File(f, files[i]);
+                       if (current.isDirectory()) {
+                               find0(current, pattern, verbose);
+                       } else {
+                               if (current.getName().toUpperCase().endsWith(pattern)) {
+                                       int length;
+                                       if ((length = this.resultFiles.length) == this.count) {
+                                               System.arraycopy(this.resultFiles, 0, (this.resultFiles = new String[length * 2]), 0, length);
+                                       }
+                                       this.resultFiles[this.count++] = current.getAbsolutePath();
+                                       if (verbose && (this.count % 100) == 0)
+                                               System.out.print('.');
+                               }
+                       }
+               }
+       }
+}
+}
diff --git a/net.sourceforge.phpeclipse/src/net/sourceforge/phpdt/internal/compiler/batch/FileSystem.java b/net.sourceforge.phpeclipse/src/net/sourceforge/phpdt/internal/compiler/batch/FileSystem.java
new file mode 100644 (file)
index 0000000..30ec35a
--- /dev/null
@@ -0,0 +1,175 @@
+/*******************************************************************************
+ * Copyright (c) 2000, 2004 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials 
+ * are made available under the terms of the Common Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/cpl-v10.html
+ * 
+ * Contributors:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+package net.sourceforge.phpdt.internal.compiler.batch;
+
+import java.io.File;
+import java.io.IOException;
+import java.util.zip.ZipFile;
+
+import net.sourceforge.phpdt.core.compiler.CharOperation;
+import net.sourceforge.phpdt.internal.compiler.env.INameEnvironment;
+import net.sourceforge.phpdt.internal.compiler.env.NameEnvironmentAnswer;
+import net.sourceforge.phpdt.internal.compiler.util.SuffixConstants;
+
+public class FileSystem implements INameEnvironment, SuffixConstants {
+       Classpath[] classpaths;
+       String[] knownFileNames;
+
+       interface Classpath {
+               NameEnvironmentAnswer findClass(char[] typeName, String qualifiedPackageName, String qualifiedBinaryFileName);
+               boolean isPackage(String qualifiedPackageName); 
+               /**
+                * This method resets the environment. The resulting state is equivalent to
+                * a new name environment without creating a new object.
+                */
+               void reset();
+       }
+/*
+       classPathNames is a collection is Strings representing the full path of each class path
+       initialFileNames is a collection is Strings, the trailing '.java' will be removed if its not already.
+*/
+
+public FileSystem(String[] classpathNames, String[] initialFileNames, String encoding) {
+       this(classpathNames, initialFileNames, encoding, null);
+}
+public FileSystem(String[] classpathNames, String[] initialFileNames, String encoding, int[] classpathDirectoryModes) {
+       int classpathSize = classpathNames.length;
+       this.classpaths = new Classpath[classpathSize];
+       String[] pathNames = new String[classpathSize];
+       int problemsOccured = 0;
+       for (int i = 0; i < classpathSize; i++) {
+//             try {
+                       File file = new File(convertPathSeparators(classpathNames[i]));
+                       if (file.isDirectory()) {
+                               if (file.exists()) {
+                                       if (classpathDirectoryModes == null){
+                                               this.classpaths[i] = new ClasspathDirectory(file, encoding);
+                                       } else {
+                                               this.classpaths[i] = new ClasspathDirectory(file, encoding, classpathDirectoryModes[i]);
+                                       }
+                                       pathNames[i] = ((ClasspathDirectory) this.classpaths[i]).path;
+                               }
+                       } else {
+                               String lowercaseClasspathName = classpathNames[i].toLowerCase();
+//                             if (lowercaseClasspathName.endsWith(SUFFIX_STRING_jar)
+//                                       || lowercaseClasspathName.endsWith(SUFFIX_STRING_zip)) {
+//                                     this.classpaths[i] = this.getClasspathJar(file); // will throw an IOException if file does not exist
+//                                     pathNames[i] = classpathNames[i].substring(0, classpathNames[i].lastIndexOf('.'));
+//                             }
+                       }
+//             } catch (IOException e) {
+//                     this.classpaths[i] = null;
+//             }
+               if (this.classpaths[i] == null)
+                       problemsOccured++;
+       }
+       if (problemsOccured > 0) {
+               Classpath[] newPaths = new Classpath[classpathSize - problemsOccured];
+               String[] newNames = new String[classpathSize - problemsOccured];
+               for (int i = 0, current = 0; i < classpathSize; i++)
+                       if (this.classpaths[i] != null) {
+                               newPaths[current] = this.classpaths[i];
+                               newNames[current++] = pathNames[i];
+                       }
+               classpathSize = newPaths.length;
+               this.classpaths = newPaths;
+               pathNames = newNames;
+       }
+
+       this.knownFileNames = new String[initialFileNames.length];
+       for (int i = initialFileNames.length; --i >= 0;) {
+               String fileName = initialFileNames[i];
+               String matchingPathName = null;
+               if (fileName.lastIndexOf(".") != -1) //$NON-NLS-1$
+                       fileName = fileName.substring(0, fileName.lastIndexOf('.')); // remove trailing ".java"
+
+               fileName = convertPathSeparators(fileName);
+               for (int j = 0; j < classpathSize; j++)
+                       if (fileName.startsWith(pathNames[j]))
+                               matchingPathName = pathNames[j];
+               if (matchingPathName == null)
+                       this.knownFileNames[i] = fileName; // leave as is...
+               else
+                       this.knownFileNames[i] = fileName.substring(matchingPathName.length());
+       }
+}
+public void cleanup() {
+       for (int i = 0, max = this.classpaths.length; i < max; i++)
+               this.classpaths[i].reset();
+}
+private String convertPathSeparators(String path) {
+       return File.separatorChar == '/'
+               ? path.replace('\\', '/')
+                : path.replace('/', '\\');
+}
+//private NameEnvironmentAnswer findClass(String qualifiedTypeName, char[] typeName){
+//     for (int i = 0, length = this.knownFileNames.length; i < length; i++)
+//             if (qualifiedTypeName.equals(this.knownFileNames[i]))
+//                     return null; // looking for a file which we know was provided at the beginning of the compilation
+//
+//     String qualifiedBinaryFileName = qualifiedTypeName + SUFFIX_STRING_class;
+//     String qualifiedPackageName =
+//             qualifiedTypeName.length() == typeName.length
+//                     ? "" //$NON-NLS-1$
+//                     : qualifiedBinaryFileName.substring(0, qualifiedTypeName.length() - typeName.length - 1);
+//     String qp2 = File.separatorChar == '/' ? qualifiedPackageName : qualifiedPackageName.replace('/', File.separatorChar);
+//     if (qualifiedPackageName == qp2) {
+//             for (int i = 0, length = this.classpaths.length; i < length; i++) {
+//                     NameEnvironmentAnswer answer = this.classpaths[i].findClass(typeName, qualifiedPackageName, qualifiedBinaryFileName);
+//                     if (answer != null) return answer;
+//             }
+//     } else {
+//             String qb2 = qualifiedBinaryFileName.replace('/', File.separatorChar);
+//             for (int i = 0, length = this.classpaths.length; i < length; i++) {
+//                     Classpath p = this.classpaths[i];
+//                     NameEnvironmentAnswer answer = (p instanceof ClasspathJar)
+//                             ? p.findClass(typeName, qualifiedPackageName, qualifiedBinaryFileName)
+//                             : p.findClass(typeName, qp2, qb2);
+//                     if (answer != null) return answer;
+//             }
+//     }
+//     return null;
+//}
+public NameEnvironmentAnswer findType(char[][] compoundName) {
+//     if (compoundName != null)
+//             return findClass(
+//                     new String(CharOperation.concatWith(compoundName, '/')),
+//                     compoundName[compoundName.length - 1]);
+       return null;
+}
+public NameEnvironmentAnswer findType(char[] typeName, char[][] packageName) {
+//     if (typeName != null)
+//             return findClass(
+//                     new String(CharOperation.concatWith(packageName, typeName, '/')),
+//                     typeName);
+       return null;
+}
+//public ClasspathJar getClasspathJar(File file) throws IOException {
+//     return new ClasspathJar(new ZipFile(file), true);
+//}
+public boolean isPackage(char[][] compoundName, char[] packageName) {
+       String qualifiedPackageName = new String(CharOperation.concatWith(compoundName, packageName, '/'));
+       String qp2 = File.separatorChar == '/' ? qualifiedPackageName : qualifiedPackageName.replace('/', File.separatorChar);
+       if (qualifiedPackageName == qp2) {
+               for (int i = 0, length = this.classpaths.length; i < length; i++)
+                       if (this.classpaths[i].isPackage(qualifiedPackageName))
+                               return true;
+       } 
+//     else {
+//             for (int i = 0, length = this.classpaths.length; i < length; i++) {
+//                     Classpath p = this.classpaths[i];
+//                     if ((p instanceof ClasspathJar) ? p.isPackage(qualifiedPackageName) : p.isPackage(qp2))
+//                             return true;
+//             }
+//     }
+       return false;
+}
+}
diff --git a/net.sourceforge.phpeclipse/src/net/sourceforge/phpdt/internal/compiler/batch/messages.properties b/net.sourceforge.phpeclipse/src/net/sourceforge/phpdt/internal/compiler/batch/messages.properties
new file mode 100644 (file)
index 0000000..cc69182
--- /dev/null
@@ -0,0 +1,167 @@
+###############################################################################
+# Copyright (c) 2000, 2004 IBM Corporation and others.
+# All rights reserved. This program and the accompanying materials 
+# are made available under the terms of the Common Public License v1.0
+# which accompanies this distribution, and is available at
+# http://www.eclipse.org/legal/cpl-v10.html
+# 
+# Contributors:
+#     IBM Corporation - initial API and implementation
+###############################################################################
+### JavaBatchCompiler messages.
+
+### compiler 
+compiler.name = Eclipse Java Compiler
+compiler.version = 0.452_R30x
+compiler.copyright = Copyright IBM Corp 2000, 2004. All rights reserved.
+
+### scanning
+scanning.start = Collecting source files inside {0}
+
+### progress
+progress.compiling = Compiling
+
+### compile
+compile.repetition = [repetition {0}/{1}]
+compile.instantTime = [compiled {0} lines in {1} ms: {2} lines/s]
+compile.totalTime = [total compilation time: {0}]
+compile.oneProblem = 1 problem
+compile.severalProblems = {0} problems
+compile.oneError = 1 error
+compile.severalErrors = {0} errors
+compile.oneWarning = 1 warning
+compile.severalWarnings = {0} warnings
+compile.oneClassFileGenerated = [1 .class file generated]
+compile.severalClassFilesGenerated = [{0} .class files generated]
+
+### configure
+configure.requiresJDK1.2orAbove = Need to use a JVM >= 1.2
+configure.duplicateLog = duplicate log specification: {0}
+configure.duplicateRepeat = duplicate repeat specification: {0}
+configure.duplicateMaxProblems = duplicate max problems specification: {0}
+configure.duplicateCompliance = duplicate compliance setting specification: {0}
+configure.source = invalid source option, source is either ''1.3'' or ''1.4'': {0}
+configure.duplicateOutputPath = duplicate output path specification: {0}
+configure.duplicateBootClasspath = duplicate bootclasspath specification: {0}
+configure.invalidDebugOption = invalid debug option: {0}
+configure.invalidWarningConfiguration = invalid warning configuration: {0}
+configure.invalidWarning = invalid warning: {0}
+configure.invalidWarningOption = invalid warning option: {0}
+configure.targetJDK = target JDK should be comprised in between ''1.1'' and ''1.4'': {0}
+configure.incompatibleTargetForSource14 = ''1.4'' source mode requires ''-target 1.4'' : {0}
+configure.incompatibleComplianceForSource14 = ''1.4'' source mode requires ''-1.4'' compliance mode: {0}
+configure.incompatibleComplianceForTarget14 = ''1.4'' target mode requires ''-1.4'' compliance mode: {0}
+configure.incompatibleComplianceForTarget11 = ''1.1'' target mode requires ''-1.3'' compliance mode: {0}
+configure.repetition = repetition must be a positive integer: {0}
+configure.maxProblems = max problems must be a positive integer: {0}
+configure.directoryNotExist = directory does not exist: {0}
+configure.IOError = i/o error : unable to retrieve .JAVA files in directory: {0}
+configure.noClasspath = no classpath defined, using default directory instead
+configure.incorrectClasspath = incorrect classpath: {0}
+configure.invalidexpansionargumentname = expansion argument file {0} doesn't exist or cannot be read
+configure.cannotOpenLog = cannot open .log file
+configure.unexpectedCustomEncoding = unexpected custom encoding specification: {0}[{1}]
+configure.unsupportedEncoding = unsupported encoding format: {0}
+configure.duplicateDefaultEncoding = duplicate default encoding format specification: {0}
+configure.invalidTaskTag ={0} is an invalid task tag
+
+### requestor
+requestor.error = ERROR
+requestor.warning = WARNING
+requestor.in = in {0}
+requestor.notRetrieveErrorMessage = Cannot retrieve the error message for {0}
+
+### unit
+unit.more = File {0} is specified more than once
+unit.missing = File {0} is missing
+
+### output
+output.noClassFileCreated = No .class file created for file named {0} because of an IOException.
+
+### miscellaneous
+misc.version = {compiler.name} {compiler.version}, {compiler.copyright}
+misc.usage = {compiler.name} {compiler.version}, {compiler.copyright}\n\
+\ \n\
+\ Usage: <options> <source files | directories>\n\
+\ If directories are specified, then their source contents are compiled.\n\
+\ Possible options are listed below. Options enabled by default are prefixed with ''+''\n\
+\ \n\
+\ Classpath options:\n\
+\    -cp -classpath <directories and zip/jar files separated by {0}>\n\
+\                       specify location for application classes and sources\n\
+\    -bootclasspath <directories and zip/jar files separated by {0}>\n\
+\                       specify location for system classes\n\
+\    -d <dir>           destination directory (if omitted, no directory is created)\n\
+\    -d none            generate no .class files\n\
+\    -encoding <enc>    specify custom encoding for all sources. Each file/directory can override it\n\
+\                       when suffixed with ''[''<enc>'']'' (e.g. X.java[utf8])\n\
+\ \n\
+\ Compliance options:\n\
+\    -1.3               use 1.3 compliance level (implicit -source 1.3 -target 1.1)\n\
+\    -1.4             + use 1.4 compliance level (implicit -source 1.3 -target 1.2)\n\
+\    -source <version>  set source level (1.3 or 1.4)\n\
+\    -target <version>  set classfile target (1.1 to 1.4)\n\
+\ \n\
+\ Warning options:\n\
+\    -deprecation     + deprecation outside deprecated code\n\
+\    -nowarn            disable all warnings\n\
+\    -warn:none         disable all warnings\n\
+\    -warn:<warnings separated by ,>    enable exactly the listed warnings\n\
+\    -warn:+<warnings separated by ,>   enable additional warnings\n\
+\    -warn:-<warnings separated by ,>   disable specific warnings\n\
+\      allDeprecation       deprecation including inside deprecated code\n\
+\      allJavadoc           invalid or missing javadoc\n\
+\      assertIdentifier   + ''assert'' used as identifier\n\
+\      charConcat         + char[] in String concat\n\
+\      conditionAssign      possible accidental boolean assignment\n\
+\      constructorName    + method with constructor name\n\
+\      deprecation        + deprecation outside deprecated code\n\
+\      emptyBlock           undocumented empty block\n\
+\      fieldHiding          field hiding another variable\n\
+\      finally            + finally block not completing normally\n\
+\      indirectStatic       indirect reference to static member\n\
+\      intfNonInherited   + interface non-inherited method compatibility\n\
+\      javadoc              invalid javadoc\n\
+\      localHiding          local variable hiding another variable\n\
+\      maskedCatchBlock   + hidden catch block\n\
+\      nls                  string literal lacking non-nls tag //$NON-NLS-<n>$\n\
+\      noEffectAssign     + assignment without effect\n\
+\      pkgDefaultMethod   + attempt to override package-default method\n\
+\      semicolon            unnecessary semicolon, empty statement\n\
+\      unqualifiedField     unqualified reference to field\n\
+\      unusedImport       + unused import declaration\n\
+\      unusedLocal          unread local variable\n\
+\      unusedPrivate        unused private member declaration\n\
+\      unusedThrown         unused declared thrown exception\n\
+\      unnecessaryElse      unnecessary else clause\n\
+\      uselessTypeCheck     unnecessary cast/instanceof operation\n\
+\      specialParamHiding   constructor or setter parameter hiding another field\n\
+\      staticReceiver     + non-static reference to static member\n\
+\      syntheticAccess      synthetic access for innerclass\n\
+\      tasks(<tags separated by |>) tasks identified by tags inside comments\n\
+\ \n\
+\ Debug options:\n\
+\    -g[:lines,vars,source] custom debug info\n\
+\    -g:lines,source  + both lines table and source debug info\n\
+\    -g                 all debug info\n\
+\    -g:none            no debug info\n\
+\    -preserveAllLocals preserve unused local vars for debug purpose\n\
+\ \n\
+\ Advanced options:\n\
+\    @<file>            read command line arguments from file\n\
+\    -maxProblems <n>   max number of problems per compilation unit (100 by default)\n\
+\    -log <file>        log to a file\n\
+\    -proceedOnError    do not stop at first error, dumping class files with problem methods\n\
+\    -verbose           enable verbose output\n\
+\    -referenceInfo     compute reference info\n\
+\    -progress          show progress (only in -log mode)\n\
+\    -time              display speed information \n\
+\    -noExit            do not call System.exit(n) at end of compilation (n==0 if no error)\n\
+\    -repeat <n>        repeat compilation process <n> times for perf analysis\n\
+\    -inlineJSR         inline JSR bytecode\n\
+\    -enableJavadoc     consider references in javadoc\n\
+\ \n\
+\    -? -help           print this help message\n\
+\    -v -version        print compiler version\n\
+\    -showversion       print compiler version and continue\n
+
index ff7ce6d..18b80c7 100644 (file)
@@ -15,7 +15,7 @@ public class CaseLabel extends Label {
        public int backwardsBranch = POS_NOT_SET;
 /**
  * CaseLabel constructor comment.
- * @param codeStream org.eclipse.jdt.internal.compiler.codegen.CodeStream
+ * @param codeStream net.sourceforge.phpdt.internal.compiler.codegen.CodeStream
  */
 //public CaseLabel(CodeStream codeStream) {
 //     super(codeStream);
index 5f8ee65..f7bdd9a 100644 (file)
@@ -24,7 +24,7 @@ public class Label {
 public Label() {
 }
 /**
- * @param codeStream org.eclipse.jdt.internal.compiler.codegen.CodeStream
+ * @param codeStream net.sourceforge.phpdt.internal.compiler.codegen.CodeStream
  */
 //public Label(CodeStream codeStream) {
 //     this.codeStream = codeStream;
index 441d128..9151ddb 100644 (file)
@@ -76,7 +76,7 @@ public int get(Object key) {
 /**
  * Return the hashcode for the key parameter
  *
- * @param key org.eclipse.jdt.internal.compiler.lookup.MethodBinding
+ * @param key net.sourceforge.phpdt.internal.compiler.lookup.MethodBinding
  * @return int
  */
 public int hashCode(Object key) {
index e59888a..c36a81b 100644 (file)
@@ -15,7 +15,7 @@ import net.sourceforge.phpdt.internal.compiler.impl.Constant;
 public interface IBinaryField extends IGenericField {
 /**
  * 
- * @return org.eclipse.jdt.internal.compiler.Constant
+ * @return net.sourceforge.phpdt.internal.compiler.Constant
  */
 Constant getConstant();
 /**
index 59c7534..6d25398 100644 (file)
@@ -10,6 +10,8 @@
  *******************************************************************************/
 package net.sourceforge.phpdt.internal.compiler.env;
 
+import net.sourceforge.phpdt.internal.compiler.env.ISourceImport;
+
 public interface ISourceType extends IGenericType {
 /**
  * Answer the source end position of the type's declaration.
@@ -34,15 +36,25 @@ ISourceType getEnclosingType();
  */
 
 ISourceField[] getFields();
+///**
+// * Answer the unresolved names of the receiver's imports
+// * or null if the array is empty.
+// *
+// * An import is a qualified, dot separated name.
+// * For example, java.util.Hashtable or java.lang.*.
+// */
+//
+//char[][] getImports();
 /**
- * Answer the unresolved names of the receiver's imports
- * or null if the array is empty.
+ * Answer the receiver's imports or null if the array is empty.
  *
  * An import is a qualified, dot separated name.
  * For example, java.util.Hashtable or java.lang.*.
+ * A static import used 'static.' as its first fragment, for
+ * example: static.java.util.Hashtable.*
  */
-
 char[][] getImports();
+
 /**
  * Answer the unresolved names of the receiver's interfaces
  * or null if the array is empty.
index e483357..9348747 100644 (file)
@@ -14,10 +14,13 @@ import java.util.ArrayList;
 
 import net.sourceforge.phpdt.internal.compiler.codegen.ObjectCache;
 import net.sourceforge.phpdt.internal.compiler.lookup.BlockScope;
+import net.sourceforge.phpdt.internal.compiler.lookup.CompilerModifiers;
+import net.sourceforge.phpdt.internal.compiler.lookup.MethodScope;
 import net.sourceforge.phpdt.internal.compiler.lookup.ReferenceBinding;
 import net.sourceforge.phpdt.internal.compiler.lookup.Scope;
 import net.sourceforge.phpdt.internal.compiler.lookup.TypeBinding;
 import net.sourceforge.phpeclipse.internal.compiler.ast.ASTNode;
+import net.sourceforge.phpeclipse.internal.compiler.ast.AbstractMethodDeclaration;
 import net.sourceforge.phpeclipse.internal.compiler.ast.TryStatement;
 
 /**
@@ -69,31 +72,32 @@ public class ExceptionHandlingFlowContext extends FlowContext {
                System.arraycopy(this.isReached, 0, this.isNeeded, 0, cacheSize);
                this.initsOnReturn = FlowInfo.DEAD_END; 
        }
-
-       public void complainIfUnusedExceptionHandlers(
-               ASTNode[] exceptionHandlers,
-               BlockScope scope,
-               TryStatement tryStatement) {
-               // report errors for unreachable exception handlers
-               for (int i = 0, count = handledExceptions.length; i < count; i++) {
-                       int index = indexes.get(handledExceptions[i]);
-                       int cacheIndex = index / BitCacheSize;
-                       int bitMask = 1 << (index % BitCacheSize);
-                       if ((isReached[cacheIndex] & bitMask) == 0) {
-                               scope.problemReporter().unreachableExceptionHandler(
-                                       handledExceptions[index],
-                                       exceptionHandlers[index]);
-                       } else {
-                               if ((isNeeded[cacheIndex] & bitMask) == 0) {
-                                       scope.problemReporter().maskedExceptionHandler(
-                                               handledExceptions[index],
-                                               exceptionHandlers[index]);
-                               }
-                       }
-               }
-               // will optimized out unnecessary catch block during code gen
-               tryStatement.preserveExceptionHandler = isNeeded;
-       }
+       
+       
+//     public void complainIfUnusedExceptionHandlers(
+//             ASTNode[] exceptionHandlers,
+//             BlockScope scope,
+//             TryStatement tryStatement) {
+//             // report errors for unreachable exception handlers
+//             for (int i = 0, count = handledExceptions.length; i < count; i++) {
+//                     int index = indexes.get(handledExceptions[i]);
+//                     int cacheIndex = index / BitCacheSize;
+//                     int bitMask = 1 << (index % BitCacheSize);
+//                     if ((isReached[cacheIndex] & bitMask) == 0) {
+//                             scope.problemReporter().unreachableExceptionHandler(
+//                                     handledExceptions[index],
+//                                     exceptionHandlers[index]);
+//                     } else {
+//                             if ((isNeeded[cacheIndex] & bitMask) == 0) {
+//                                     scope.problemReporter().maskedExceptionHandler(
+//                                             handledExceptions[index],
+//                                             exceptionHandlers[index]);
+//                             }
+//                     }
+//             }
+//             // will optimized out unnecessary catch block during code gen
+//             tryStatement.preserveExceptionHandler = isNeeded;
+//     }
 
        public String individualToString() {
                
index b369369..a7a802a 100644 (file)
@@ -36,6 +36,7 @@ public class CompilerOptions implements ProblemReasons, ProblemSeverities, ICons
        public static final String OPTION_LineNumberAttribute = "net.sourceforge.phpeclipse.compiler.debug.lineNumber"; //$NON-NLS-1$
        public static final String OPTION_SourceFileAttribute = "net.sourceforge.phpeclipse.compiler.debug.sourceFile"; //$NON-NLS-1$
 //     public static final String OPTION_PreserveUnusedLocal = "net.sourceforge.phpeclipse.compiler.codegen.unusedLocal"; //$NON-NLS-1$
+       public static final String OPTION_DocCommentSupport= "net.sourceforge.phpeclipse.compiler.doc.comment.support"; //$NON-NLS-1$
        public static final String OPTION_ReportMethodWithConstructorName = "net.sourceforge.phpeclipse.compiler.problem.methodWithConstructorName"; //$NON-NLS-1$
        public static final String OPTION_ReportOverridingPackageDefaultMethod = "net.sourceforge.phpeclipse.compiler.problem.overridingPackageDefaultMethod"; //$NON-NLS-1$
        public static final String OPTION_ReportDeprecation = "net.sourceforge.phpeclipse.compiler.problem.deprecation"; //$NON-NLS-1$
@@ -240,6 +241,8 @@ public class CompilerOptions implements ProblemReasons, ProblemSeverities, ICons
        // check missing javadoc comments
        public int reportMissingJavadocCommentsVisibility = AccPublic; 
        public boolean reportMissingJavadocCommentsOverriding = true; 
+//      javadoc comment support
+       public boolean docCommentSupport = false;
        
        /** 
         * Initializing the compiler options with defaults
@@ -268,6 +271,7 @@ public class CompilerOptions implements ProblemReasons, ProblemSeverities, ICons
                optionsMap.put(OPTION_LineNumberAttribute, (this.produceDebugAttributes & Lines) != 0 ? GENERATE : DO_NOT_GENERATE);
                optionsMap.put(OPTION_SourceFileAttribute, (this.produceDebugAttributes & Source) != 0 ? GENERATE : DO_NOT_GENERATE);
 //             optionsMap.put(OPTION_PreserveUnusedLocal, this.preserveAllLocalVariables ? PRESERVE : OPTIMIZE_OUT);
+               optionsMap.put(OPTION_DocCommentSupport, this.docCommentSupport ? ENABLED : DISABLED); 
                optionsMap.put(OPTION_ReportMethodWithConstructorName, getSeverityString(MethodWithConstructorName)); 
                optionsMap.put(OPTION_ReportOverridingPackageDefaultMethod, getSeverityString(OverriddenPackageDefaultMethod)); 
                optionsMap.put(OPTION_ReportDeprecation, getSeverityString(UsingDeprecatedAPI)); 
@@ -516,6 +520,14 @@ public class CompilerOptions implements ProblemReasons, ProblemSeverities, ICons
                if ((optionValue = optionsMap.get(OPTION_ReportNoEffectAssignment)) != null) updateSeverity(NoEffectAssignment, optionValue);
 
                // Javadoc options
+//              Javadoc options
+               if ((optionValue = optionsMap.get(OPTION_DocCommentSupport)) != null) {
+                       if (ENABLED.equals(optionValue)) {
+                               this.docCommentSupport = true;
+                       } else if (DISABLED.equals(optionValue)) {
+                               this.docCommentSupport = false;
+                       }
+               }
                if ((optionValue = optionsMap.get(OPTION_ReportInvalidJavadoc)) != null) {
                        updateSeverity(InvalidJavadoc, optionValue);
                }
index f366aaa..a3b1d92 100644 (file)
@@ -10,6 +10,8 @@
  *******************************************************************************/
 package net.sourceforge.phpdt.internal.compiler.lookup;
 
+import net.sourceforge.phpdt.internal.compiler.lookup.ReferenceBinding;
+
 import net.sourceforge.phpdt.core.compiler.CharOperation;
 import net.sourceforge.phpdt.internal.compiler.problem.ProblemReporter;
 import net.sourceforge.phpeclipse.internal.compiler.ast.AbstractMethodDeclaration;
@@ -418,7 +420,7 @@ public class BlockScope extends Scope {
                                        if (!((ReferenceBinding) binding).canBeSeenBy(this))
                                                return new ProblemReferenceBinding(
                                                        CharOperation.subarray(compoundName, 0, currentIndex),
-                                                       binding,
+                                                       (ReferenceBinding)binding,
                                                        NotVisible);
                                        break foundType;
                                }
@@ -522,7 +524,7 @@ public class BlockScope extends Scope {
                                        if (!((ReferenceBinding) binding).canBeSeenBy(this))
                                                return new ProblemReferenceBinding(
                                                        CharOperation.subarray(compoundName, 0, currentIndex),
-                                                       binding, 
+                                                       (ReferenceBinding)binding, 
                                                        NotVisible);
                                        break foundType;
                                }
index 85c5afa..bf7a59d 100644 (file)
@@ -375,7 +375,7 @@ public char[] readableName() /* foo(int, Thread) */ {
 }
 
 /**
- * @see org.eclipse.jdt.internal.compiler.lookup.Binding#shortReadableName()
+ * @see net.sourceforge.phpdt.internal.compiler.lookup.Binding#shortReadableName()
  */
 public char[] shortReadableName() {
        StringBuffer buffer = new StringBuffer(parameters.length + 1 * 20);
index 2cae6de..e246740 100644 (file)
@@ -10,6 +10,8 @@
  *******************************************************************************/
 package net.sourceforge.phpdt.internal.compiler.lookup;
 
+import net.sourceforge.phpdt.internal.compiler.lookup.FieldBinding;
+
 import net.sourceforge.phpdt.internal.compiler.flow.FlowInfo;
 import net.sourceforge.phpdt.internal.compiler.flow.UnconditionalFlowInfo;
 import net.sourceforge.phpdt.internal.compiler.impl.ReferenceContext;
@@ -33,6 +35,7 @@ public class MethodScope extends BlockScope {
        //fields used during name resolution
        public static final int NotInFieldDecl = -1; //must be a negative value 
        public boolean isConstructorCall = false; 
+       public FieldBinding initializedField; // the field being initialized
        public int fieldDeclarationIndex = NotInFieldDecl; 
 
        // flow analysis
@@ -462,6 +465,7 @@ public class MethodScope extends BlockScope {
                        s += newLine + "\t" + locals[i].toString(); //$NON-NLS-1$
                s += newLine + "startIndex = " + startIndex; //$NON-NLS-1$
                s += newLine + "isConstructorCall = " + isConstructorCall; //$NON-NLS-1$
+               s += newLine + "initializedField = " + initializedField; //$NON-NLS-1$
                s += newLine + "fieldDeclarationIndex = " + fieldDeclarationIndex; //$NON-NLS-1$
                s += newLine + "referenceContext = " + referenceContext; //$NON-NLS-1$
                return s;
index 5283ad3..3fa5886 100644 (file)
@@ -11,7 +11,7 @@
 package net.sourceforge.phpdt.internal.compiler.lookup;
 
 public class ProblemReferenceBinding extends ReferenceBinding {
-       public Binding original;
+       public ReferenceBinding original;
        private int problemId;
 // NOTE: must only answer the subset of the name related to the problem
 
@@ -22,12 +22,12 @@ public ProblemReferenceBinding(char[] name, int problemId) {
        this(new char[][] {name}, null, problemId);
 }
 
-public ProblemReferenceBinding(char[][] compoundName, Binding original, int problemId) {
+public ProblemReferenceBinding(char[][] compoundName, ReferenceBinding original, int problemId) {
        this.compoundName = compoundName;
        this.original = original;
        this.problemId = problemId;
 }
-public ProblemReferenceBinding(char[] name, Binding original, int problemId) {
+public ProblemReferenceBinding(char[] name, ReferenceBinding original, int problemId) {
        this(new char[][] {name}, original, problemId);
 }
 /* API
@@ -40,7 +40,7 @@ public final int problemId() {
 }
 
 /**
- * @see org.eclipse.jdt.internal.compiler.lookup.ReferenceBinding#shortReadableName()
+ * @see net.sourceforge.phpdt.internal.compiler.lookup.ReferenceBinding#shortReadableName()
  */
 public char[] shortReadableName() {
        return readableName();
index 9d210ac..7cc8aeb 100644 (file)
  *******************************************************************************/
 package net.sourceforge.phpdt.internal.compiler.lookup;
 
+import net.sourceforge.phpdt.internal.compiler.lookup.BlockScope;
+import net.sourceforge.phpdt.internal.compiler.lookup.ClassScope;
+import net.sourceforge.phpdt.internal.compiler.lookup.MethodBinding;
+import net.sourceforge.phpdt.internal.compiler.lookup.MethodScope;
+import net.sourceforge.phpdt.internal.compiler.lookup.ReferenceBinding;
+import net.sourceforge.phpdt.internal.compiler.lookup.SourceTypeBinding;
+
 import net.sourceforge.phpdt.core.compiler.CharOperation;
 import net.sourceforge.phpdt.internal.compiler.impl.ReferenceContext;
 import net.sourceforge.phpdt.internal.compiler.problem.ProblemReporter;
@@ -815,6 +822,42 @@ public abstract class Scope
                        unitScope = scope;
                return ((CompilationUnitScope) unitScope).fPackage;
        }
+       /**
+        * Returns the modifiers of the innermost enclosing declaration.
+        * @return modifiers
+        */
+       public int getDeclarationModifiers(){
+               switch(this.kind){
+                       case Scope.BLOCK_SCOPE :
+                       case Scope.METHOD_SCOPE :
+                               MethodScope methodScope = methodScope();
+                               if (!methodScope.isInsideInitializer()){
+                                       // check method modifiers to see if deprecated
+                                       MethodBinding context = ((AbstractMethodDeclaration)methodScope.referenceContext).binding;
+                                       if (context != null) {
+                                               return context.modifiers;
+                                       }
+                               } else {
+                                       SourceTypeBinding type = ((BlockScope)this).referenceType().binding;
+
+                                       // inside field declaration ? check field modifier to see if deprecated
+                                       if (methodScope.initializedField != null) {
+                                               return methodScope.initializedField.modifiers;
+                                       }
+                                       if (type != null) {
+                                               return type.modifiers;
+                                       }
+                               }
+                               break;
+                       case Scope.CLASS_SCOPE :
+                               ReferenceBinding context = ((ClassScope)this).referenceType().binding;
+                               if (context != null) {
+                                       return context.modifiers;
+                               }
+                               break;
+               }
+               return -1;
+       }
 
        public final ReferenceBinding getJavaIoSerializable() {
                compilationUnitScope().recordQualifiedReference(JAVA_IO_SERIALIZABLE);
diff --git a/net.sourceforge.phpeclipse/src/net/sourceforge/phpdt/internal/compiler/parser/AbstractCommentParser.java b/net.sourceforge.phpeclipse/src/net/sourceforge/phpdt/internal/compiler/parser/AbstractCommentParser.java
new file mode 100644 (file)
index 0000000..eafaa62
--- /dev/null
@@ -0,0 +1,1405 @@
+/*******************************************************************************
+ * Copyright (c) 2000, 2004 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials 
+ * are made available under the terms of the Common Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/cpl-v10.html
+ * 
+ * Contributors:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+package net.sourceforge.phpdt.internal.compiler.parser;
+
+import java.util.ArrayList;
+import java.util.List;
+
+import net.sourceforge.phpdt.core.compiler.CharOperation;
+import net.sourceforge.phpdt.core.compiler.ITerminalSymbols;
+import net.sourceforge.phpdt.core.compiler.InvalidInputException;
+
+/**
+ * Parser specialized for decoding javadoc comments
+ */
+public abstract class AbstractCommentParser {
+
+       // recognized tags
+       public static final char[] TAG_DEPRECATED = "deprecated".toCharArray(); //$NON-NLS-1$
+       public static final char[] TAG_PARAM = "param".toCharArray(); //$NON-NLS-1$
+       public static final char[] TAG_RETURN = "return".toCharArray(); //$NON-NLS-1$
+       public static final char[] TAG_THROWS = "throws".toCharArray(); //$NON-NLS-1$
+       public static final char[] TAG_EXCEPTION = "exception".toCharArray(); //$NON-NLS-1$
+       public static final char[] TAG_SEE = "see".toCharArray(); //$NON-NLS-1$
+       public static final char[] TAG_LINK = "link".toCharArray(); //$NON-NLS-1$
+       public static final char[] TAG_LINKPLAIN = "linkplain".toCharArray(); //$NON-NLS-1$
+       public static final char[] TAG_INHERITDOC = "inheritDoc".toCharArray(); //$NON-NLS-1$
+       
+       // tags expected positions
+       public final static int ORDERED_TAGS_NUMBER = 3;
+       public final static int PARAM_TAG_EXPECTED_ORDER = 0;
+       public final static int THROWS_TAG_EXPECTED_ORDER = 1;
+       public final static int SEE_TAG_EXPECTED_ORDER = 2;
+       
+       // Kind of comment parser
+       public final static int COMPIL_PARSER = 0x00000001;
+       public final static int DOM_PARSER = 0x00000002;
+       
+       // Public fields
+       public Scanner scanner;
+       public boolean checkDocComment = false;
+       
+       // Protected fields
+       protected boolean inherited, deprecated;
+       protected char[] source;
+       protected int index, endComment, lineEnd;
+       protected int tokenPreviousPosition, lastIdentifierEndPosition, starPosition;
+       protected int textStart, memberStart;
+       protected int tagSourceStart, tagSourceEnd;
+       protected int inlineTagStart;
+       protected Parser sourceParser;
+       protected Object returnStatement;
+       protected boolean lineStarted = false, inlineTagStarted = false;
+       protected int kind;
+       protected int[] lineEnds;
+       
+       // Private fields
+       private int currentTokenType = -1;
+       
+       // Line pointers
+       private int linePtr, lastLinePtr;
+       
+       // Identifier stack
+       protected int identifierPtr;
+       protected char[][] identifierStack;
+       protected int identifierLengthPtr;
+       protected int[] identifierLengthStack;
+       protected long[] identifierPositionStack;
+       // Ast stack
+       protected static int AstStackIncrement = 10;
+       protected int astPtr;
+       protected Object[] astStack;
+       protected int astLengthPtr;
+       protected int[] astLengthStack;
+
+       protected AbstractCommentParser(Parser sourceParser) {
+               this.sourceParser = sourceParser;
+               this.scanner = new Scanner(false, false, false, false, false, null, null, false);
+                  
+               this.identifierStack = new char[20][];
+               this.identifierPositionStack = new long[20];
+               this.identifierLengthStack = new int[10];
+               this.astStack = new Object[30];
+               this.astLengthStack = new int[20];
+       }
+
+       /* (non-Javadoc)
+        * Returns true if tag @deprecated is present in javadoc comment.
+        * 
+        * If javadoc checking is enabled, will also construct an Javadoc node, which will be stored into Parser.javadoc
+        * slot for being consumed later on.
+        */
+       protected boolean parseComment(int javadocStart, int javadocEnd) {
+
+               boolean validComment = true;
+               try {
+                       // Init scanner position
+                       this.scanner.resetTo(javadocStart, javadocEnd);
+                       this.endComment = javadocEnd;
+                       this.index = javadocStart;
+                       readChar(); // starting '/'
+                       int previousPosition = this.index;
+                       readChar(); // first '*'
+                       char nextCharacter= readChar(); // second '*'
+                       
+                       // Init local variables
+                       this.astLengthPtr = -1;
+                       this.astPtr = -1;
+                       this.currentTokenType = -1;
+                       this.inlineTagStarted = false;
+                       this.inlineTagStart = -1;
+                       this.lineStarted = false;
+                       this.returnStatement = null;
+                       this.inherited = false;
+                       this.deprecated = false;
+                       this.linePtr = getLineNumber(javadocStart);
+                       this.lastLinePtr = getLineNumber(javadocEnd);
+                       this.lineEnd = (this.linePtr == this.lastLinePtr) ? this.endComment : this.scanner.getLineEnd(this.linePtr);
+                       this.textStart = -1;
+                       char previousChar = 0;
+                       int invalidTagLineEnd = -1;
+                       int invalidInlineTagLineEnd = -1;
+                       
+                       // Loop on each comment character
+                       while (this.index < this.endComment) {
+                               previousPosition = this.index;
+                               previousChar = nextCharacter;
+                               
+                               // Calculate line end (cannot use this.scanner.linePtr as scanner does not parse line ends again)
+                               if (this.index > (this.lineEnd+1)) {
+                                       updateLineEnd();
+                               }
+                               
+                               // Read next char only if token was consumed
+                               if (this.currentTokenType < 0) {
+                                       nextCharacter = readChar(); // consider unicodes
+                               } else {
+                                       previousPosition = this.scanner.getCurrentTokenStartPosition();
+                                       switch (this.currentTokenType) {
+                                               case ITerminalSymbols.TokenNameRBRACE:
+                                                       nextCharacter = '}';
+                                                       break;
+                                               case ITerminalSymbols.TokenNameMULTIPLY:
+                                                       nextCharacter = '*';
+                                                       break;
+                                       default:
+                                                       nextCharacter = this.scanner.currentCharacter;
+                                       }
+                                       consumeToken();
+                               }
+                       
+                               if (this.index >= this.endComment) {
+                                       break;
+                               }
+                               
+                               switch (nextCharacter) {
+                                       case '@' :
+                                               boolean valid = false;
+                                               // Start tag parsing only if we have a java identifier start character and if we are on line beginning or at inline tag beginning
+                                               if ((!this.lineStarted || previousChar == '{')) {
+                                                       this.lineStarted = true;
+                                                       if (this.inlineTagStarted) {
+                                                               this.inlineTagStarted = false;
+                                                               // bug https://bugs.eclipse.org/bugs/show_bug.cgi?id=53279
+                                                               // Cannot have @ inside inline comment
+                                                               if (this.sourceParser != null) {
+                                                                       int end = previousPosition<invalidInlineTagLineEnd ? previousPosition : invalidInlineTagLineEnd;
+                                                                       this.sourceParser.problemReporter().javadocUnterminatedInlineTag(this.inlineTagStart, end);
+                                                               }
+                                                               validComment = false;
+                                                               if (this.lineStarted && this.textStart != -1 && this.textStart < previousPosition) {
+                                                                       pushText(this.textStart, previousPosition);
+                                                               }
+                                                               if (this.kind == DOM_PARSER) refreshInlineTagPosition(previousPosition);
+                                                       }
+                                                       if (previousChar == '{') {
+                                                               if (this.textStart != -1 && this.textStart < this.inlineTagStart) {
+                                                                       pushText(this.textStart, this.inlineTagStart);
+                                                               }
+                                                               this.inlineTagStarted = true;
+                                                               invalidInlineTagLineEnd = this.lineEnd;
+                                                       } else if (this.textStart != -1 && this.textStart < invalidTagLineEnd) {
+                                                               pushText(this.textStart, invalidTagLineEnd);
+                                                       }
+                                                       this.scanner.resetTo(this.index, this.endComment);
+                                                       this.currentTokenType = -1; // flush token cache at line begin
+                                                       try {
+                                                               int token = readTokenAndConsume();
+                                                               this.tagSourceStart = this.scanner.getCurrentTokenStartPosition();
+                                                               this.tagSourceEnd = this.scanner.getCurrentTokenEndPosition();
+                                                               char[] tag = this.scanner.getCurrentIdentifierSource(); // first token is either an identifier or a keyword
+                                                               if (this.kind == DOM_PARSER) {
+                                                                       // For DOM parser, try to get tag name other than java identifier
+                                                                       // (see bug https://bugs.eclipse.org/bugs/show_bug.cgi?id=51660)
+                                                                       int tk = token;
+                                                                       int le = this.lineEnd;
+                                                                       char pc = peekChar();
+                                                                       tagNameToken: while (tk != ITerminalSymbols.TokenNameEOF) {
+                                                                               this.tagSourceEnd = this.scanner.getCurrentTokenEndPosition();
+                                                                               token = tk;
+                                                                               // !, ", #, %, &, ', -, :, <, >, * chars and spaces are not allowed in tag names
+                                                                               switch (pc) {
+                                                                                       case '}':
+                                                                                       case '!':
+                                                                                       case '#':
+                                                                                       case '%':
+                                                                                       case '&':
+                                                                                       case '\'':
+                                                                                       case ':':
+                                                                                       // case '-': allowed in tag names as this character is often used in doclets (bug 68087)
+                                                                                       case '<':
+                                                                                       case '>':
+                                                                                       case '*': // break for '*' as this is perhaps the end of comment (bug 65288)
+                                                                                               break tagNameToken;
+                                                                                       default:
+                                                                                               if (pc == ' ' || Character.isWhitespace(pc)) break tagNameToken;
+                                                                               }
+                                                                               tk = readTokenAndConsume();
+                                                                               pc = peekChar();
+                                                                       }
+                                                                       int length = this.tagSourceEnd-this.tagSourceStart+1;
+                                                                       tag = new char[length];
+                                                                       System.arraycopy(this.source, this.tagSourceStart, tag, 0, length);
+                                                                       this.index = this.tagSourceEnd+1;
+                                                                       this.scanner.currentPosition = this.tagSourceEnd+1;
+                                                                       this.tagSourceStart = previousPosition;
+                                                                       this.lineEnd = le;
+                                                               }
+                                                               switch (token) {
+                                                                       case ITerminalSymbols.TokenNameIdentifier :
+                                                                               if (CharOperation.equals(tag, TAG_DEPRECATED)) {
+                                                                                       this.deprecated = true;
+                                                                                       if (this.kind == DOM_PARSER) {
+                                                                                               valid = parseTag();
+                                                                                       } else {
+                                                                                               valid = true;
+                                                                                       }
+                                                                               } else if (CharOperation.equals(tag, TAG_INHERITDOC)) {
+                                                                                       // inhibits inherited flag when tags have been already stored
+                                                                                       // see bug https://bugs.eclipse.org/bugs/show_bug.cgi?id=51606
+                                                                                       // Note that for DOM_PARSER, nodes stack may be not empty even no '@' tag
+                                                                                       // was encountered in comment. But it cannot be the case for COMPILER_PARSER
+                                                                                       // and so is enough as it is only this parser which signals the missing tag warnings...
+                                                                                       this.inherited = this.astPtr==-1;
+                                                                                       if (this.kind == DOM_PARSER) {
+                                                                                               valid = parseTag();
+                                                                                       } else {
+                                                                                               valid = true;
+                                                                                       }
+                                                                               } else if (CharOperation.equals(tag, TAG_PARAM)) {
+                                                                                       valid = parseParam();
+                                                                               } else if (CharOperation.equals(tag, TAG_EXCEPTION)) {
+                                                                                       valid = parseThrows(false);
+                                                                               } else if (CharOperation.equals(tag, TAG_SEE)) {
+                                                                                       if (this.inlineTagStarted) {
+                                                                                               // bug https://bugs.eclipse.org/bugs/show_bug.cgi?id=53290
+                                                                                               // Cannot have @see inside inline comment
+                                                                                               valid = false;
+                                                                                               if (this.sourceParser != null)
+                                                                                                       this.sourceParser.problemReporter().javadocUnexpectedTag(this.tagSourceStart, this.tagSourceEnd);
+                                                                                       } else {
+                                                                                               valid = parseSee(false);
+                                                                                       }
+                                                                               } else if (CharOperation.equals(tag, TAG_LINK)) {
+                                                                                       if (this.inlineTagStarted) {
+                                                                                               valid = parseSee(false);
+                                                                                       } else {
+                                                                                               // bug https://bugs.eclipse.org/bugs/show_bug.cgi?id=53290
+                                                                                               // Cannot have @link outside inline comment
+                                                                                               valid = false;
+                                                                                               if (this.sourceParser != null)
+                                                                                                       this.sourceParser.problemReporter().javadocUnexpectedTag(this.tagSourceStart, this.tagSourceEnd);
+                                                                                       }
+                                                                               } else if (CharOperation.equals(tag, TAG_LINKPLAIN)) {
+                                                                                       if (this.inlineTagStarted) {
+                                                                                               valid = parseSee(true);
+                                                                                       } else {
+                                                                                               valid = parseTag();
+                                                                                       }
+                                                                               } else {
+                                                                                       valid = parseTag();
+                                                                               }
+                                                                               break;
+                                                                       case ITerminalSymbols.TokenNamereturn :
+                                                                               valid = parseReturn();
+                                                                               // verify characters after return tag (we're expecting text description)
+                                                                               if(!verifyCharsAfterReturnTag(this.index)) {
+                                                                                       if (this.sourceParser != null) {
+                                                                                               int end = this.starPosition == -1 || this.lineEnd<this.starPosition ? this.lineEnd : this.starPosition;
+                                                                                               this.sourceParser.problemReporter().javadocInvalidTag(this.tagSourceStart, end);
+                                                                                       }
+                                                                               }
+                                                                               break;
+//                                                                     case ITerminalSymbols.TokenNamethrows :
+//                                                                             valid = parseThrows(true);
+//                                                                             break;
+                                                                       default:
+                                                                               if (this.kind == DOM_PARSER) {
+                                                                                       switch (token) {
+                                                                                               case ITerminalSymbols.TokenNameabstract:
+//                                                                                             case ITerminalSymbols.TokenNameassert:
+//                                                                                             case ITerminalSymbols.TokenNameboolean:
+                                                                                               case ITerminalSymbols.TokenNamebreak:
+//                                                                                             case ITerminalSymbols.TokenNamebyte:
+                                                                                               case ITerminalSymbols.TokenNamecase:
+                                                                                               case ITerminalSymbols.TokenNamecatch:
+//                                                                                             case ITerminalSymbols.TokenNamechar:
+                                                                                               case ITerminalSymbols.TokenNameclass:
+                                                                                               case ITerminalSymbols.TokenNamecontinue:
+                                                                                               case ITerminalSymbols.TokenNamedefault:
+                                                                                               case ITerminalSymbols.TokenNamedo:
+//                                                                                             case ITerminalSymbols.TokenNamedouble:
+                                                                                               case ITerminalSymbols.TokenNameelse:
+                                                                                               case ITerminalSymbols.TokenNameextends:
+//                                                                                             case ITerminalSymbols.TokenNamefalse:
+                                                                                               case ITerminalSymbols.TokenNamefinal:
+                                                                                               case ITerminalSymbols.TokenNamefinally:
+//                                                                                             case ITerminalSymbols.TokenNamefloat:
+                                                                                               case ITerminalSymbols.TokenNamefor:
+                                                                                               case ITerminalSymbols.TokenNameif:
+                                                                                               case ITerminalSymbols.TokenNameimplements:
+//                                                                                             case ITerminalSymbols.TokenNameimport:
+                                                                                               case ITerminalSymbols.TokenNameinstanceof:
+//                                                                                             case ITerminalSymbols.TokenNameint:
+                                                                                               case ITerminalSymbols.TokenNameinterface:
+//                                                                                             case ITerminalSymbols.TokenNamelong:
+//                                                                                             case ITerminalSymbols.TokenNamenative:
+                                                                                               case ITerminalSymbols.TokenNamenew:
+//                                                                                             case ITerminalSymbols.TokenNamenull:
+//                                                                                             case ITerminalSymbols.TokenNamepackage:
+                                                                                               case ITerminalSymbols.TokenNameprivate:
+                                                                                               case ITerminalSymbols.TokenNameprotected:
+                                                                                               case ITerminalSymbols.TokenNamepublic:
+//                                                                                             case ITerminalSymbols.TokenNameshort:
+                                                                                               case ITerminalSymbols.TokenNamestatic:
+//                                                                                             case ITerminalSymbols.TokenNamestrictfp:
+                                                                                               case ITerminalSymbols.TokenNamesuper:
+                                                                                               case ITerminalSymbols.TokenNameswitch:
+//                                                                                             case ITerminalSymbols.TokenNamesynchronized:
+//                                                                                             case ITerminalSymbols.TokenNamethis:
+                                                                                               case ITerminalSymbols.TokenNamethrow:
+//                                                                                             case ITerminalSymbols.TokenNametransient:
+//                                                                                             case ITerminalSymbols.TokenNametrue:
+                                                                                               case ITerminalSymbols.TokenNametry:
+//                                                                                             case ITerminalSymbols.TokenNamevoid:
+//                                                                                             case ITerminalSymbols.TokenNamevolatile:
+                                                                                               case ITerminalSymbols.TokenNamewhile:
+                                                                                                       valid = parseTag();
+                                                                                                       break;
+                                                                                       }
+                                                                               }
+                                                               }
+                                                               this.textStart = this.index;
+                                                               if (!valid) {
+                                                                       // bug https://bugs.eclipse.org/bugs/show_bug.cgi?id=51600
+                                                                       // do not stop the inline tag when error is encountered to get text after
+                                                                       validComment = false;
+                                                                       // bug https://bugs.eclipse.org/bugs/show_bug.cgi?id=51600
+                                                                       // for DOM AST node, store tag as text in case of invalid syntax
+                                                                       if (this.kind == DOM_PARSER) {
+                                                                               parseTag();
+                                                                               this.textStart = this.tagSourceEnd+1;
+                                                                               invalidTagLineEnd  = this.lineEnd;
+                                                                       }
+                                                               }
+                                                       } catch (InvalidInputException e) {
+                                                               consumeToken();
+                                                       }
+                                               }
+                                               break;
+                                       case '\r':
+                                       case '\n':
+                                               if (this.lineStarted && this.textStart < previousPosition) {
+                                                       pushText(this.textStart, previousPosition);
+                                               }
+                                               this.lineStarted = false;
+                                               // Fix bug 51650
+                                               this.textStart = -1;
+                                               break;
+                                       case '}' :
+                                               if (this.inlineTagStarted) {
+                                                       if (this.lineStarted && this.textStart != -1 && this.textStart < previousPosition) {
+                                                               pushText(this.textStart, previousPosition);
+                                                       }
+                                                       if (this.kind == DOM_PARSER) refreshInlineTagPosition(previousPosition);
+                                                       this.textStart = this.index;
+                                                       this.inlineTagStarted = false;
+                                               } else {
+                                                       if (!this.lineStarted) {
+                                                               this.textStart = previousPosition;
+                                                       }
+                                               }
+                                               this.lineStarted = true;
+                                               break;
+                                       case '{' :
+                                               if (this.inlineTagStarted) {
+                                                       this.inlineTagStarted = false;
+                                                       // bug https://bugs.eclipse.org/bugs/show_bug.cgi?id=53279
+                                                       // Cannot have opening brace in inline comment
+                                                       if (this.sourceParser != null) {
+                                                               int end = previousPosition<invalidInlineTagLineEnd ? previousPosition : invalidInlineTagLineEnd;
+                                                               this.sourceParser.problemReporter().javadocUnterminatedInlineTag(this.inlineTagStart, end);
+                                                       }
+                                                       if (this.lineStarted && this.textStart != -1 && this.textStart < previousPosition) {
+                                                               pushText(this.textStart, previousPosition);
+                                                       }
+                                                       if (this.kind == DOM_PARSER) refreshInlineTagPosition(previousPosition);
+                                               }
+                                               if (!this.lineStarted) {
+                                                       this.textStart = previousPosition;
+                                               }
+                                               this.lineStarted = true;
+                                               this.inlineTagStart = previousPosition;
+                                               break;
+                                       case '*' :
+                                       case '\u000c' : /* FORM FEED               */
+                                       case ' ' :                      /* SPACE                   */
+                                       case '\t' :                     /* HORIZONTAL TABULATION   */
+                                               // do nothing for space or '*' characters
+                                               break;
+                                       default :
+                                               if (!this.lineStarted) {
+                                                       this.textStart = previousPosition;
+                                               }
+                                               this.lineStarted = true;
+                                               break;
+                               }
+                       }
+                       // bug https://bugs.eclipse.org/bugs/show_bug.cgi?id=53279
+                       // Cannot leave comment inside inline comment
+                       if (this.inlineTagStarted) {
+                               this.inlineTagStarted = false;
+                               if (this.sourceParser != null) {
+                                       int end = previousPosition<invalidInlineTagLineEnd ? previousPosition : invalidInlineTagLineEnd;
+                                       if (this.index >= this.endComment) end = invalidInlineTagLineEnd;
+                                       this.sourceParser.problemReporter().javadocUnterminatedInlineTag(this.inlineTagStart, end);
+                               }
+                               if (this.lineStarted && this.textStart != -1 && this.textStart < previousPosition) {
+                                       pushText(this.textStart, previousPosition);
+                               }
+                               if (this.kind == DOM_PARSER) {
+                                       refreshInlineTagPosition(previousPosition);
+                               }
+                       } else if (this.lineStarted && this.textStart < previousPosition) {
+                               pushText(this.textStart, previousPosition);
+                       }
+                       updateDocComment();
+               } catch (Exception ex) {
+                       validComment = false;
+               }
+               return validComment;
+       }
+
+       private void consumeToken() {
+               this.currentTokenType = -1; // flush token cache
+               updateLineEnd();
+       }
+
+       protected abstract Object createArgumentReference(char[] name, int dim, Object typeRef, long[] dimPos, long argNamePos) throws InvalidInputException;
+       protected abstract Object createFieldReference(Object receiver) throws InvalidInputException;
+       protected abstract Object createMethodReference(Object receiver, List arguments) throws InvalidInputException;
+       protected Object createReturnStatement() { return null; }
+       protected abstract Object createTypeReference(int primitiveToken);
+       
+       private int getEndPosition() {
+               if (this.scanner.getCurrentTokenEndPosition() > this.lineEnd) {
+                       return this.lineEnd;
+               } else {
+                       return this.scanner.getCurrentTokenEndPosition();
+               }
+       }
+
+       /*
+        * Search the source position corresponding to the end of a given line number.
+        * Warning: returned position is 1-based index!
+        * @see Scanner#getLineEnd(int) We cannot directly use this method
+        * when linePtr field is not initialized.
+        *
+       private int getLineEnd(int lineNumber) {
+       
+               if (this.scanner.linePtr != -1) {
+                       return this.scanner.getLineEnd(lineNumber);
+               }
+               if (this.lineEnds == null) 
+                       return -1;
+               if (lineNumber > this.lineEnds.length+1) 
+                       return -1;
+               if (lineNumber <= 0) 
+                       return -1;
+               if (lineNumber == this.lineEnds.length + 1) 
+                       return this.scanner.eofPosition;
+               return this.lineEnds[lineNumber-1]; // next line start one character behind the lineEnd of the previous line
+       }
+       */
+
+       /**
+        * Search the line number corresponding to a specific position.
+        * Warning: returned position is 1-based index!
+        * @see Scanner#getLineNumber(int) We cannot directly use this method
+        * when linePtr field is not initialized.
+        */
+       private int getLineNumber(int position) {
+       
+               if (this.scanner.linePtr != -1) {
+                       return this.scanner.getLineNumber(position);
+               }
+               if (this.lineEnds == null)
+                       return 1;
+               int length = this.lineEnds.length;
+               if (length == 0)
+                       return 1;
+               int g = 0, d = length - 1;
+               int m = 0;
+               while (g <= d) {
+                       m = (g + d) /2;
+                       if (position < this.lineEnds[m]) {
+                               d = m-1;
+                       } else if (position > this.lineEnds[m]) {
+                               g = m+1;
+                       } else {
+                               return m + 1;
+                       }
+               }
+               if (position < this.lineEnds[m]) {
+                       return m+1;
+               }
+               return m+2;
+       }
+
+       /*
+        * Parse argument in @see tag method reference
+        */
+       private Object parseArguments(Object receiver) throws InvalidInputException {
+
+               // Init
+               int modulo = 0; // should be 2 for (Type,Type,...) or 3 for (Type arg,Type arg,...)
+               int iToken = 0;
+               char[] argName = null;
+               List arguments = new ArrayList(10);
+               int start = this.scanner.getCurrentTokenStartPosition();
+               
+               // Parse arguments declaration if method reference
+               nextArg : while (this.index < this.scanner.eofPosition) {
+
+                       // Read argument type reference
+                       Object typeRef;
+                       try {
+                               typeRef = parseQualifiedName(false);
+                       } catch (InvalidInputException e) {
+                               break nextArg;
+                       }
+                       boolean firstArg = modulo == 0;
+                       if (firstArg) { // verify position
+                               if (iToken != 0)
+                                       break nextArg;
+                       } else if ((iToken % modulo) != 0) {
+                                       break nextArg;
+                       }
+                       if (typeRef == null) {
+                               if (firstArg && this.currentTokenType == ITerminalSymbols.TokenNameRPAREN) {
+                                       // verify characters after arguments declaration (expecting white space or end comment)
+                                       if (!verifySpaceOrEndComment()) {
+                                               int end = this.starPosition == -1 ? this.lineEnd : this.starPosition;
+                                               if (this.source[end]=='\n') end--;
+                                               if (this.sourceParser != null) this.sourceParser.problemReporter().javadocMalformedSeeReference(start, end);
+                                               return null;
+                                       }
+                                       this.lineStarted = true;
+                                       return createMethodReference(receiver, null);
+                               }
+                               break nextArg;
+                       }
+                       iToken++;
+
+                       // Read possible array declaration
+                       int dim = 0;
+                       long[] dimPositions = new long[20]; // assume that there won't be more than 20 dimensions...
+                       if (readToken() == ITerminalSymbols.TokenNameLBRACKET) {
+                               int dimStart = this.scanner.getCurrentTokenStartPosition();
+                               while (readToken() == ITerminalSymbols.TokenNameLBRACKET) {
+                                       consumeToken();
+                                       if (readToken() != ITerminalSymbols.TokenNameRBRACKET) {
+                                               break nextArg;
+                                       }
+                                       consumeToken();
+                                       dimPositions[dim++] = (((long) dimStart) << 32) + this.scanner.getCurrentTokenEndPosition();
+                               }
+                       }
+
+                       // Read argument name
+                       long argNamePos = -1;
+                       if (readToken() == ITerminalSymbols.TokenNameIdentifier) {
+                               consumeToken();
+                               if (firstArg) { // verify position
+                                       if (iToken != 1)
+                                               break nextArg;
+                               } else if ((iToken % modulo) != 1) {
+                                               break nextArg;
+                               }
+                               if (argName == null) { // verify that all arguments name are declared
+                                       if (!firstArg) {
+                                               break nextArg;
+                                       }
+                               }
+                               argName = this.scanner.getCurrentIdentifierSource();
+                               argNamePos = (((long)this.scanner.getCurrentTokenStartPosition())<<32)+this.scanner.getCurrentTokenEndPosition();
+                               iToken++;
+                       } else if (argName != null) { // verify that no argument name is declared
+                               break nextArg;
+                       }
+                       
+                       // Verify token position
+                       if (firstArg) {
+                               modulo = iToken + 1;
+                       } else {
+                               if ((iToken % modulo) != (modulo - 1)) {
+                                       break nextArg;
+                               }
+                       }
+
+                       // Read separator or end arguments declaration
+                       int token = readToken();
+                       char[] name = argName == null ? new char[0] : argName;
+                       if (token == ITerminalSymbols.TokenNameCOMMA) {
+                               // Create new argument
+                               Object argument = createArgumentReference(name, dim, typeRef, dimPositions, argNamePos);
+                               arguments.add(argument);
+                               consumeToken();
+                               iToken++;
+                       } else if (token == ITerminalSymbols.TokenNameRPAREN) {
+                               // verify characters after arguments declaration (expecting white space or end comment)
+                               if (!verifySpaceOrEndComment()) {
+                                       int end = this.starPosition == -1 ? this.lineEnd : this.starPosition;
+                                       if (this.source[end]=='\n') end--;
+                                       if (this.sourceParser != null) this.sourceParser.problemReporter().javadocMalformedSeeReference(start, end);
+                                       return null;
+                               }
+                               // Create new argument
+                               Object argument = createArgumentReference(name, dim, typeRef, dimPositions, argNamePos);
+                               arguments.add(argument);
+                               consumeToken();
+                               return createMethodReference(receiver, arguments);
+                       } else {
+                               break nextArg;
+                       }
+               }
+
+               // Something wrong happened => Invalid input
+               throw new InvalidInputException();
+       }
+
+       /*
+        * Parse an URL link reference in @see tag
+        */
+       private boolean parseHref() throws InvalidInputException {
+               int start = this.scanner.getCurrentTokenStartPosition();
+               if (Character.toLowerCase(readChar()) == 'a') {
+                       this.scanner.currentPosition = this.index;
+                       if (readToken() == ITerminalSymbols.TokenNameIdentifier) {
+                               this.currentTokenType = -1; // do not update line end
+                               try {
+                                       if (CharOperation.equals(this.scanner.getCurrentIdentifierSource(), new char[]{'h', 'r', 'e', 'f'}, false) &&
+                                               readToken() == ITerminalSymbols.TokenNameEQUAL) {
+                                               this.currentTokenType = -1; // do not update line end
+                                               if (readToken() == ITerminalSymbols.TokenNameStringDoubleQuote ||
+                                                   readToken() == ITerminalSymbols.TokenNameStringSingleQuote) {
+                                                       this.currentTokenType = -1; // do not update line end
+                                                       // Skip all characters after string literal until closing '>' (see bug 68726)
+                                                       while (this.index <= this.lineEnd && readToken() != ITerminalSymbols.TokenNameGREATER) {
+                                                               this.currentTokenType = -1; // do not update line end
+                                                       }
+                                                       if (this.currentTokenType == ITerminalSymbols.TokenNameGREATER) {
+                                                               consumeToken(); // update line end as new lines are allowed in URL description
+                                                               while (readToken() != ITerminalSymbols.TokenNameLESS) {
+                                                                       if (this.scanner.currentPosition >= this.scanner.eofPosition || this.scanner.currentCharacter == '@') {
+                                                                               // Reset position: we want to rescan last token
+                                                                               this.index = this.tokenPreviousPosition;
+                                                                               this.scanner.currentPosition = this.tokenPreviousPosition;
+                                                                               this.currentTokenType = -1;
+                                                                               // Signal syntax error
+                                                                               if (this.sourceParser != null) this.sourceParser.problemReporter().javadocInvalidSeeUrlReference(start, this.lineEnd);
+                                                                               return false;
+                                                                       }
+                                                                       consumeToken();
+                                                               }
+                                                               this.currentTokenType = -1; // do not update line end
+                                                               if (readChar() == '/') {
+                                                                       if (Character.toLowerCase(readChar()) == 'a') {
+                                                                               if (readChar() == '>') {
+                                                                                       // Valid href
+                                                                                       return true;
+                                                                               }
+                                                                       }
+                                                               }
+                                                       }
+                                               }
+                                       }
+                               } catch (InvalidInputException ex) {
+                                       // Do nothing as we want to keep positions for error message
+                               }
+                       }
+               }
+               // Reset position: we want to rescan last token
+               this.index = this.tokenPreviousPosition;
+               this.scanner.currentPosition = this.tokenPreviousPosition;
+               this.currentTokenType = -1;
+               // Signal syntax error
+               if (this.sourceParser != null) this.sourceParser.problemReporter().javadocInvalidSeeUrlReference(start, this.lineEnd);
+               return false;
+       }
+
+       /*
+        * Parse a method reference in @see tag
+        */
+       private Object parseMember(Object receiver) throws InvalidInputException {
+               // Init
+               this.identifierPtr = -1;
+               this.identifierLengthPtr = -1;
+               int start = this.scanner.getCurrentTokenStartPosition();
+               this.memberStart = start;
+
+               // Get member identifier
+               if (readToken() == ITerminalSymbols.TokenNameIdentifier) {
+                       consumeToken();
+                       pushIdentifier(true);
+                       // Look for next token to know whether it's a field or method reference
+                       int previousPosition = this.index;
+                       if (readToken() == ITerminalSymbols.TokenNameLPAREN) {
+                               consumeToken();
+                               start = this.scanner.getCurrentTokenStartPosition();
+                               try {
+                                       return parseArguments(receiver);
+                               } catch (InvalidInputException e) {
+                                       int end = this.scanner.getCurrentTokenEndPosition() < this.lineEnd ?
+                                                       this.scanner.getCurrentTokenEndPosition() :
+                                                       this.scanner.getCurrentTokenStartPosition();
+                                       end = end < this.lineEnd ? end : this.lineEnd;
+                                       if (this.sourceParser != null) this.sourceParser.problemReporter().javadocInvalidSeeReferenceArgs(start, end);
+                               }
+                               return null;
+                       }
+
+                       // Reset position: we want to rescan last token
+                       this.index = previousPosition;
+                       this.scanner.currentPosition = previousPosition;
+                       this.currentTokenType = -1;
+
+                       // Verify character(s) after identifier (expecting space or end comment)
+                       if (!verifySpaceOrEndComment()) {
+                               int end = this.starPosition == -1 ? this.lineEnd : this.starPosition;
+                               if (this.source[end]=='\n') end--;
+                               if (this.sourceParser != null) this.sourceParser.problemReporter().javadocMalformedSeeReference(start, end);
+                               return null;
+                       }
+                       return createFieldReference(receiver);
+               }
+               int end = getEndPosition() - 1;
+               end = start > end ? start : end;
+               if (this.sourceParser != null) this.sourceParser.problemReporter().javadocInvalidSeeReference(start, end);
+               // Reset position: we want to rescan last token
+               this.index = this.tokenPreviousPosition;
+               this.scanner.currentPosition = this.tokenPreviousPosition;
+               this.currentTokenType = -1;
+               return null;
+       }
+
+       /*
+        * Parse @param tag declaration
+        */
+       protected boolean parseParam() {
+
+               // Store current token state
+               int start = this.tagSourceStart;
+               int end = this.tagSourceEnd;
+
+               try {
+                       // Push identifier next
+                       int token = readToken();
+                       switch (token) {
+                               case ITerminalSymbols.TokenNameIdentifier :
+                                       consumeToken();
+                                       return pushParamName();
+                               case ITerminalSymbols.TokenNameEOF :
+                                       break;
+                               default :
+                                       start = this.scanner.getCurrentTokenStartPosition();
+                                       end = getEndPosition();
+                                       if (end < start) start = this.tagSourceStart;
+                                       break;
+                       }
+               } catch (InvalidInputException e) {
+                       end = getEndPosition();
+               }
+
+               // Reset position to avoid missing tokens when new line was encountered
+               this.index = this.tokenPreviousPosition;
+               this.scanner.currentPosition = this.tokenPreviousPosition;
+               this.currentTokenType = -1;
+
+               // Report problem
+               if (this.sourceParser != null) this.sourceParser.problemReporter().javadocMissingParamName(start, end);
+               return false;
+       }
+
+       /*
+        * Parse a qualified name and built a type reference if the syntax is valid.
+        */
+       protected Object parseQualifiedName(boolean reset) throws InvalidInputException {
+
+               // Reset identifier stack if requested
+               if (reset) {
+                       this.identifierPtr = -1;
+                       this.identifierLengthPtr = -1;
+               }
+
+               // Scan tokens
+               int primitiveToken = -1;
+               nextToken : for (int iToken = 0; ; iToken++) {
+                       int token = readToken();
+                       switch (token) {
+                               case ITerminalSymbols.TokenNameIdentifier :
+                                       if (((iToken % 2) > 0)) { // identifiers must be odd tokens
+                                               break nextToken;
+                                       }
+                                       pushIdentifier(iToken == 0);
+                                       consumeToken();
+                                       break;
+
+                               case ITerminalSymbols.TokenNameDOT :
+                                       if ((iToken % 2) == 0) { // dots must be even tokens
+                                               throw new InvalidInputException();
+                                       }
+                                       consumeToken();
+                                       break;
+
+//                             case ITerminalSymbols.TokenNamevoid :
+//                             case ITerminalSymbols.TokenNameboolean :
+//                             case ITerminalSymbols.TokenNamebyte :
+//                             case ITerminalSymbols.TokenNamechar :
+//                             case ITerminalSymbols.TokenNamedouble :
+//                             case ITerminalSymbols.TokenNamefloat :
+//                             case ITerminalSymbols.TokenNameint :
+//                             case ITerminalSymbols.TokenNamelong :
+//                             case ITerminalSymbols.TokenNameshort :
+//                                     if (iToken > 0) {
+//                                             throw new InvalidInputException();
+//                                     }
+//                                     pushIdentifier(true);
+//                                     primitiveToken = token;
+//                                     consumeToken();
+//                                     break nextToken;
+
+                               default :
+                                       if (iToken == 0) {
+                                               return null;
+                                       }
+                                       if ((iToken % 2) == 0) { // cannot leave on a dot
+                                               // Reset position: we want to rescan last token
+                                               if (this.kind == DOM_PARSER && this.currentTokenType != -1) {
+                                                       this.index = this.tokenPreviousPosition;
+                                                       this.scanner.currentPosition = this.tokenPreviousPosition;
+                                                       this.currentTokenType = -1;
+                                               }
+                                               throw new InvalidInputException();
+                                       }
+                                       break nextToken;
+                       }
+               }
+               // Reset position: we want to rescan last token
+               if (this.currentTokenType != -1) {
+                       this.index = this.tokenPreviousPosition;
+                       this.scanner.currentPosition = this.tokenPreviousPosition;
+                       this.currentTokenType = -1;
+               }
+               this.lastIdentifierEndPosition = (int) this.identifierPositionStack[this.identifierPtr];
+               return createTypeReference(primitiveToken);
+       }
+
+       /*
+        * Parse a reference in @see tag
+        */
+       protected boolean parseReference(boolean plain) throws InvalidInputException {
+               Object typeRef = null;
+               Object reference = null;
+               int previousPosition = -1;
+               int typeRefStartPosition = -1;
+               nextToken : while (this.index < this.scanner.eofPosition) {
+                       previousPosition = this.index;
+                       int token = readToken();
+                       switch (token) {
+                               case ITerminalSymbols.TokenNameStringDoubleQuote : // @see "string"
+                               case ITerminalSymbols.TokenNameStringSingleQuote :
+                                       int start = this.scanner.getCurrentTokenStartPosition();
+                                       consumeToken();
+                                       // If typeRef != null we may raise a warning here to let user know there's an unused reference...
+                                       // Currently as javadoc 1.4.2 ignore it, we do the same (see bug 69302)
+                                       if (typeRef != null) {
+                                               start = this.tagSourceEnd+1;
+                                               previousPosition = start;
+                                               typeRef = null;
+                                       }
+                                       // verify end line (expecting empty or end comment)
+                                       if (verifyEndLine(previousPosition)) {
+                                               return true;
+                                       }
+                                       if (this.sourceParser != null) this.sourceParser.problemReporter().javadocInvalidSeeReference(start, this.lineEnd);
+                                       return false;
+                               case ITerminalSymbols.TokenNameLESS : // @see "<a href="URL#Value">label</a>
+                                       consumeToken();
+                                       start = this.scanner.getCurrentTokenStartPosition();
+                                       if (parseHref()) {
+                                               consumeToken();
+                                               // If typeRef != null we may raise a warning here to let user know there's an unused reference...
+                                               // Currently as javadoc 1.4.2 ignore it, we do the same (see bug 69302)
+                                               if (typeRef != null) {
+                                                       start = this.tagSourceEnd+1;
+                                                       previousPosition = start;
+                                                       typeRef = null;
+                                               }
+                                               // verify end line (expecting empty or end comment)
+                                               if (verifyEndLine(previousPosition)) {
+                                                       return true;
+                                               }
+                                               if (this.sourceParser != null) this.sourceParser.problemReporter().javadocInvalidSeeReference(start, this.lineEnd);
+                                       }
+                                       return false;
+                               case ITerminalSymbols.TokenNameERROR :
+                                       if (this.scanner.currentCharacter == '#') { // @see ...#member
+                                               consumeToken();
+                                               reference = parseMember(typeRef);
+                                               if (reference != null) {
+                                                       return pushSeeRef(reference, plain);
+                                               }
+                                               return false;
+                                       }
+                                       break nextToken;
+                               case ITerminalSymbols.TokenNameIdentifier :
+                                       if (typeRef == null) {
+                                               typeRefStartPosition = this.scanner.getCurrentTokenStartPosition();
+                                               typeRef = parseQualifiedName(true);
+                                               break;
+                                       }
+                                       break nextToken;
+                               default :
+                                       break nextToken;
+                       }
+               }
+               
+               // Verify that we got a reference
+               if (reference == null) reference = typeRef;
+               if (reference == null) {
+                       this.index = this.tokenPreviousPosition;
+                       this.scanner.currentPosition = this.tokenPreviousPosition;
+                       this.currentTokenType = -1;
+                       if (this.sourceParser != null) this.sourceParser.problemReporter().javadocMissingSeeReference(this.tagSourceStart, this.tagSourceEnd);
+                       return false;
+               }
+
+               // Reset position at the end of type reference
+               this.index = this.lastIdentifierEndPosition+1;
+               this.scanner.currentPosition = this.index;
+               this.currentTokenType = -1;
+
+               // Verify that line end does not start with an open parenthese (which could be a constructor reference wrongly written...)
+               // See bug https://bugs.eclipse.org/bugs/show_bug.cgi?id=47215
+               char ch = peekChar();
+               if (ch == '(') {
+                       if (this.sourceParser != null) this.sourceParser.problemReporter().javadocInvalidSeeReference(typeRefStartPosition, this.lineEnd);
+                       return false;
+               }
+
+               // Verify that we get white space after reference
+               if (!verifySpaceOrEndComment()) {
+                       this.index = this.tokenPreviousPosition;
+                       this.scanner.currentPosition = this.tokenPreviousPosition;
+                       this.currentTokenType = -1;
+                       int end = this.starPosition == -1 ? this.lineEnd : this.starPosition;
+                       if (this.source[end]=='\n') end--;
+                       if (this.sourceParser != null) this.sourceParser.problemReporter().javadocMalformedSeeReference(typeRefStartPosition, end);
+                       return false;
+               }
+               
+               // Everything is OK, store reference
+               return pushSeeRef(reference, plain);
+       }
+
+       /*
+        * Parse @return tag declaration
+        */
+       protected abstract boolean parseReturn();
+
+       /*
+        * Parse @see tag declaration
+        */
+       protected boolean parseSee(boolean plain) {
+               int start = this.scanner.currentPosition;
+               try {
+                       return parseReference(plain);
+               } catch (InvalidInputException ex) {
+                               if (this.sourceParser != null) this.sourceParser.problemReporter().javadocInvalidSeeReference(start, getEndPosition());
+               }
+               // Reset position to avoid missing tokens when new line was encountered
+               this.index = this.tokenPreviousPosition;
+               this.scanner.currentPosition = this.tokenPreviousPosition;
+               this.currentTokenType = -1;
+               return false;
+       }
+
+       /*
+        * Parse @return tag declaration
+        */
+       protected abstract boolean parseTag();
+
+       /*
+        * Parse @throws tag declaration
+        */
+       protected boolean parseThrows(boolean real) {
+               int start = this.scanner.currentPosition;
+               try {
+                       Object typeRef = parseQualifiedName(true);
+                       if (typeRef == null) {
+                               if (this.sourceParser != null) this.sourceParser.problemReporter().javadocMissingThrowsClassName(this.tagSourceStart, this.tagSourceEnd);
+                       } else {
+                               return pushThrowName(typeRef, real);
+                       }
+               } catch (InvalidInputException ex) {
+                       if (this.sourceParser != null) this.sourceParser.problemReporter().javadocInvalidThrowsClass(start, getEndPosition());
+               }
+               return false;
+       }
+
+       /*
+        * Return current character without move index position.
+        */
+       private char peekChar() {
+               int idx = this.index;
+               char c = this.source[idx++];
+               if (c == '\\' && this.source[idx] == 'u') {
+                       int c1, c2, c3, c4;
+                       idx++;
+                       while (this.source[idx] == 'u')
+                               idx++;
+                       if (!(((c1 = Character.getNumericValue(this.source[idx++])) > 15 || c1 < 0)
+                                       || ((c2 = Character.getNumericValue(this.source[idx++])) > 15 || c2 < 0)
+                                       || ((c3 = Character.getNumericValue(this.source[idx++])) > 15 || c3 < 0) || ((c4 = Character.getNumericValue(this.source[idx++])) > 15 || c4 < 0))) {
+                               c = (char) (((c1 * 16 + c2) * 16 + c3) * 16 + c4);
+                       }
+               }
+               return c;
+       }
+
+       /*
+        * push the consumeToken on the identifier stack. Increase the total number of identifier in the stack.
+        */
+       protected void pushIdentifier(boolean newLength) {
+
+               int stackLength = this.identifierStack.length;
+               if (++this.identifierPtr >= stackLength) {
+                       System.arraycopy(
+                               this.identifierStack, 0,
+                               this.identifierStack = new char[stackLength + 10][], 0,
+                               stackLength);
+                       System.arraycopy(
+                               this.identifierPositionStack, 0,
+                               this.identifierPositionStack = new long[stackLength + 10], 0,
+                               stackLength);
+               }
+               this.identifierStack[this.identifierPtr] = this.scanner.getCurrentIdentifierSource();
+               this.identifierPositionStack[this.identifierPtr] = (((long) this.scanner.startPosition) << 32) + (this.scanner.currentPosition - 1);
+
+               if (newLength) {
+                       stackLength = this.identifierLengthStack.length;
+                       if (++this.identifierLengthPtr >= stackLength) {
+                               System.arraycopy(
+                                       this.identifierLengthStack, 0,
+                                       this.identifierLengthStack = new int[stackLength + 10], 0,
+                                       stackLength);
+                       }
+                       this.identifierLengthStack[this.identifierLengthPtr] = 1;
+               } else {
+                       this.identifierLengthStack[this.identifierLengthPtr]++;
+               }
+       }
+
+       /*
+        * Add a new obj on top of the ast stack.
+        * If new length is required, then add also a new length in length stack.
+        */
+       protected void pushOnAstStack(Object node, boolean newLength) {
+
+               if (node == null) {
+                       this.astLengthStack[++this.astLengthPtr] = 0;
+                       return;
+               }
+
+               int stackLength = this.astStack.length;
+               if (++this.astPtr >= stackLength) {
+                       System.arraycopy(
+                               this.astStack, 0,
+                               this.astStack = new Object[stackLength + AstStackIncrement], 0,
+                               stackLength);
+                       this.astPtr = stackLength;
+               }
+               this.astStack[this.astPtr] = node;
+
+               if (newLength) {
+                       stackLength = this.astLengthStack.length;
+                       if (++this.astLengthPtr >= stackLength) {
+                               System.arraycopy(
+                                       this.astLengthStack, 0,
+                                       this.astLengthStack = new int[stackLength + AstStackIncrement], 0,
+                                       stackLength);
+                       }
+                       this.astLengthStack[this.astLengthPtr] = 1;
+               } else {
+                       this.astLengthStack[this.astLengthPtr]++;
+               }
+       }
+
+       /*
+        * Push a param name in ast node stack.
+        */
+       protected abstract boolean pushParamName();
+
+       /*
+        * Push a reference statement in ast node stack.
+        */
+       protected abstract boolean pushSeeRef(Object statement, boolean plain);
+
+       /*
+        * Push a text element in ast node stack
+        */
+       protected abstract void pushText(int start, int end);
+
+       /*
+        * Push a throws type ref in ast node stack.
+        */
+       protected abstract boolean pushThrowName(Object typeRef, boolean real);
+
+       /*
+        * Read current character and move index position.
+        * Warning: scanner position is unchanged using this method!
+        */
+       protected char readChar() {
+       
+               char c = this.source[this.index++];
+               if (c == '\\' && this.source[this.index] == 'u') {
+                       int c1, c2, c3, c4;
+                       int pos = this.index;
+                       this.index++;
+                       while (this.source[this.index] == 'u')
+                               this.index++;
+                       if (!(((c1 = Character.getNumericValue(this.source[this.index++])) > 15 || c1 < 0)
+                                       || ((c2 = Character.getNumericValue(this.source[this.index++])) > 15 || c2 < 0)
+                                       || ((c3 = Character.getNumericValue(this.source[this.index++])) > 15 || c3 < 0) || ((c4 = Character.getNumericValue(this.source[this.index++])) > 15 || c4 < 0))) {
+                               c = (char) (((c1 * 16 + c2) * 16 + c3) * 16 + c4);
+                       } else {
+                               // TODO (frederic) currently reset to previous position, perhaps signal a syntax error would be more appropriate
+                               this.index = pos;
+                       }
+               }
+               return c;
+       }
+
+       /*
+        * Read token only if previous was consumed
+        */
+       private int readToken() throws InvalidInputException {
+               if (this.currentTokenType < 0) {
+                       this.tokenPreviousPosition = this.scanner.currentPosition;
+                       this.currentTokenType = this.scanner.getNextToken();
+                       if (this.scanner.currentPosition > (this.lineEnd+1)) { // be sure to be on next line (lineEnd is still on the same line)
+                               this.lineStarted = false;
+                               while (this.currentTokenType == ITerminalSymbols.TokenNameMULTIPLY) {
+                                       this.currentTokenType = this.scanner.getNextToken();
+                               }
+                       }
+                       this.index = this.scanner.currentPosition;
+                       this.lineStarted = true; // after having read a token, line is obviously started...
+               }
+               return this.currentTokenType;
+       }
+
+       private int readTokenAndConsume() throws InvalidInputException {
+               int token = readToken();
+               consumeToken();
+               return token;
+       }
+       
+       /*
+        * Refresh start position and length of an inline tag.
+        */
+       protected void refreshInlineTagPosition(int previousPosition) {
+               // do nothing by default
+       }
+
+       public String toString() {
+               StringBuffer buffer = new StringBuffer();
+               int startPos = this.scanner.currentPosition<this.index ? this.scanner.currentPosition : this.index;
+               int endPos = this.scanner.currentPosition<this.index ? this.index : this.scanner.currentPosition;
+               if (startPos == this.source.length)
+                       return "EOF\n\n" + new String(this.source); //$NON-NLS-1$
+               if (endPos > this.source.length)
+                       return "behind the EOF\n\n" + new String(this.source); //$NON-NLS-1$
+       
+               char front[] = new char[startPos];
+               System.arraycopy(this.source, 0, front, 0, startPos);
+       
+               int middleLength = (endPos - 1) - startPos + 1;
+               char middle[];
+               if (middleLength > -1) {
+                       middle = new char[middleLength];
+                       System.arraycopy(
+                               this.source, 
+                               startPos, 
+                               middle, 
+                               0, 
+                               middleLength);
+               } else {
+                       middle = CharOperation.NO_CHAR;
+               }
+               
+               char end[] = new char[this.source.length - (endPos - 1)];
+               System.arraycopy(
+                       this.source, 
+                       (endPos - 1) + 1, 
+                       end, 
+                       0, 
+                       this.source.length - (endPos - 1) - 1);
+               
+               buffer.append(front);
+               if (this.scanner.currentPosition<this.index) {
+                       buffer.append("\n===============================\nScanner current position here -->"); //$NON-NLS-1$
+               } else {
+                       buffer.append("\n===============================\nParser index here -->"); //$NON-NLS-1$
+               }
+               buffer.append(middle);
+               if (this.scanner.currentPosition<this.index) {
+                       buffer.append("<-- Parser index here\n===============================\n"); //$NON-NLS-1$
+               } else {
+                       buffer.append("<-- Scanner current position here\n===============================\n"); //$NON-NLS-1$
+               }
+               buffer.append(end);
+
+               return buffer.toString();
+       }
+
+       /*
+        * Update 
+        */
+       protected abstract void updateDocComment();
+
+       /*
+        * Update line end
+        */
+       protected void updateLineEnd() {
+               while (this.index > (this.lineEnd+1)) { // be sure to be on next line (lineEnd is still on the same line)
+                       if (this.linePtr < this.lastLinePtr) {
+                               this.lineEnd = this.scanner.getLineEnd(++this.linePtr) - 1;
+                       } else {
+                               this.lineEnd = this.endComment;
+                               return;
+                       }
+               }
+       }
+
+       /*
+        * Verify that end of the line only contains space characters or end of comment.
+        * Note that end of comment may be preceeding by several contiguous '*' chars.
+        */
+       private boolean verifyEndLine(int textPosition) {
+               int startPosition = this.index;
+               int previousPosition = this.index;
+               this.starPosition = -1;
+               char ch = readChar();
+               nextChar: while (true) {
+                       switch (ch) {
+                               case '\r':
+                               case '\n':
+                                       if (this.kind == DOM_PARSER) {
+                                               parseTag();
+                                               pushText(textPosition, previousPosition);
+                                       }
+                                       this.index = previousPosition;
+                                       return true;
+                               case '\u000c' : /* FORM FEED               */
+                               case ' ' :                      /* SPACE                   */
+                               case '\t' :                     /* HORIZONTAL TABULATION   */
+                                       if (this.starPosition >= 0) break nextChar;
+                                       break;
+                               case '*':
+                                       this.starPosition = previousPosition;
+                                       break;
+                               case '/':
+                                       if (this.starPosition >= textPosition) {
+                                               if (this.kind == DOM_PARSER) {
+                                                       parseTag();
+                                                       pushText(textPosition, this.starPosition);
+                                               }
+                                               return true;
+                                       }
+                               default :
+                                       // leave loop
+                                       break nextChar;
+                               
+                       }
+                       previousPosition = this.index;
+                       ch = readChar();
+               }
+               this.index = startPosition;
+               return false;
+       }
+
+       /*
+        * Verify that some text exists after a @return tag. Text must be different than
+        * end of comment which may be preceeding by several '*' chars.
+        */
+       private boolean verifyCharsAfterReturnTag(int startPosition) {
+               // Whitespace or inline tag closing brace
+               int previousPosition = this.index;
+               char ch = readChar();
+               boolean malformed = true;
+               while (Character.isWhitespace(ch)) {
+                       malformed = false;
+                       previousPosition = this.index;
+                       ch = readChar();        
+               }
+               // End of comment
+               this.starPosition = -1;
+               nextChar: while (this.index<this.source.length) {
+                       switch (ch) {
+                               case '*':
+                                       // valid whatever the number of star before last '/'
+                                       this.starPosition = previousPosition;
+                                       break;
+                               case '/':
+                                       if (this.starPosition >= startPosition) { // valid only if a star was previous character
+                                               return false;
+                                       }
+                               default :
+                                       // valid if any other character is encountered, even white spaces
+                                       this.index = startPosition;
+                                       return !malformed;
+                               
+                       }
+                       previousPosition = this.index;
+                       ch = readChar();
+               }
+               this.index = startPosition;
+               return false;
+       }
+
+       /*
+        * Verify characters after a name matches one of following conditions:
+        *      1- first character is a white space
+        *      2- first character is a closing brace *and* we're currently parsing an inline tag
+        *      3- are the end of comment (several contiguous star ('*') characters may be
+        *          found before the last slash ('/') character).
+        */
+       private boolean verifySpaceOrEndComment() {
+               int startPosition = this.index;
+               // Whitespace or inline tag closing brace
+               char ch = peekChar();
+               switch (ch) {
+                       case '}':
+                               return this.inlineTagStarted;
+                       default:
+                               if (Character.isWhitespace(ch)) {
+                                       return true;
+                               }
+               }
+               // End of comment
+               int previousPosition = this.index;
+               this.starPosition = -1;
+               ch = readChar();
+               nextChar: while (this.index<this.source.length) {
+                       switch (ch) {
+                               case '*':
+                                       // valid whatever the number of star before last '/'
+                                       this.starPosition = previousPosition;
+                                       break;
+                               case '/':
+                                       if (this.starPosition >= startPosition) { // valid only if a star was previous character
+                                               return true;
+                                       }
+                               default :
+                                       // invalid whatever other character, even white spaces
+                                       this.index = startPosition;
+                                       return false;
+                               
+                       }
+                       previousPosition = this.index;
+                       ch = readChar();
+               }
+               this.index = startPosition;
+               return false;
+       }
+}
index b1d21e0..b1ddd61 100644 (file)
@@ -8,6 +8,7 @@
 package net.sourceforge.phpdt.internal.compiler.parser;
 
 import java.util.ArrayList;
+import java.util.HashMap;
 
 import net.sourceforge.phpdt.core.compiler.CharOperation;
 import net.sourceforge.phpdt.core.compiler.ITerminalSymbols;
@@ -27,39 +28,43 @@ import net.sourceforge.phpeclipse.internal.compiler.ast.AbstractMethodDeclaratio
 import net.sourceforge.phpeclipse.internal.compiler.ast.BinaryExpression;
 import net.sourceforge.phpeclipse.internal.compiler.ast.CompilationUnitDeclaration;
 import net.sourceforge.phpeclipse.internal.compiler.ast.ConditionalExpression;
+import net.sourceforge.phpeclipse.internal.compiler.ast.EmptyStatement;
 import net.sourceforge.phpeclipse.internal.compiler.ast.EqualExpression;
 import net.sourceforge.phpeclipse.internal.compiler.ast.Expression;
 import net.sourceforge.phpeclipse.internal.compiler.ast.FieldDeclaration;
+import net.sourceforge.phpeclipse.internal.compiler.ast.FieldReference;
 import net.sourceforge.phpeclipse.internal.compiler.ast.IfStatement;
 import net.sourceforge.phpeclipse.internal.compiler.ast.ImportReference;
+import net.sourceforge.phpeclipse.internal.compiler.ast.InstanceOfExpression;
 import net.sourceforge.phpeclipse.internal.compiler.ast.MethodDeclaration;
 import net.sourceforge.phpeclipse.internal.compiler.ast.OR_OR_Expression;
+import net.sourceforge.phpeclipse.internal.compiler.ast.OperatorIds;
 import net.sourceforge.phpeclipse.internal.compiler.ast.SingleTypeReference;
 import net.sourceforge.phpeclipse.internal.compiler.ast.Statement;
 import net.sourceforge.phpeclipse.internal.compiler.ast.StringLiteral;
 import net.sourceforge.phpeclipse.internal.compiler.ast.StringLiteralDQ;
 import net.sourceforge.phpeclipse.internal.compiler.ast.StringLiteralSQ;
 import net.sourceforge.phpeclipse.internal.compiler.ast.TypeDeclaration;
+import net.sourceforge.phpeclipse.internal.compiler.ast.TypeReference;
+import net.sourceforge.phpeclipse.ui.overlaypages.ProjectPrefUtil;
 
 import org.eclipse.core.resources.IFile;
 import org.eclipse.core.resources.IProject;
 import org.eclipse.core.resources.IResource;
 import org.eclipse.core.runtime.IPath;
 
-public class Parser //extends PHPParserSuperclass
-    implements ITerminalSymbols, CompilerModifiers, ParserBasicInformation {
-  //internal data for the automat
+public class Parser implements ITerminalSymbols, CompilerModifiers, ParserBasicInformation {
   protected final static int StackIncrement = 255;
+
   protected int stateStackTop;
 
-  protected int[] stack = new int[StackIncrement];
+  //  protected int[] stack = new int[StackIncrement];
 
   public int firstToken; // handle for multiple parsing goals
 
   public int lastAct; //handle for multiple parsing goals
 
-  protected RecoveredElement currentElement;
+  //  protected RecoveredElement currentElement;
 
   public static boolean VERBOSE_RECOVERY = false;
 
@@ -70,11 +75,11 @@ public class Parser //extends PHPParserSuperclass
   //scanner token
   public Scanner scanner;
 
-  private ArrayList phpList;
+  //  private ArrayList phpList;
 
-  private int currentPHPString;
+  //  private int currentPHPString;
 
-  private boolean phpEnd;
+  //  private boolean phpEnd;
 
   // private static HashMap keywordMap = null;
   private String str;
@@ -92,11 +97,11 @@ public class Parser //extends PHPParserSuperclass
   //
   //   // current identifier
   //   String identifier;
-  Long longNumber;
+  //  Long longNumber;
 
-  Double doubleNumber;
+  //  Double doubleNumber;
 
-  private String stringValue;
+  //  private String stringValue;
 
   /** Contains the current expression. */
   // private StringBuffer expression;
@@ -105,33 +110,31 @@ public class Parser //extends PHPParserSuperclass
 
   protected int modifiersSourceStart;
 
-  //  protected IdentifierIndexManager indexManager;
-
   protected Parser(ProblemReporter problemReporter) {
     this.problemReporter = problemReporter;
     this.options = problemReporter.options;
-    this.currentPHPString = 0;
+    //    this.currentPHPString = 0;
     //         PHPParserSuperclass.fileToParse = fileToParse;
-    this.phpList = null;
+    //    this.phpList = null;
     //    this.indexManager = null;
     this.str = "";
     this.token = TokenNameEOF;
     //    this.chIndx = 0;
     //    this.rowCount = 1;
     //    this.columnCount = 0;
-    this.phpEnd = false;
+    //    this.phpEnd = false;
     //   getNextToken();
     this.initializeScanner();
   }
 
   public void setFileToParse(IFile fileToParse) {
-    this.currentPHPString = 0;
+    //    this.currentPHPString = 0;
     //    PHPParserSuperclass.fileToParse = fileToParse;
-    this.phpList = null;
+    //    this.phpList = null;
     //    this.indexManager = null;
     this.str = "";
     this.token = TokenNameEOF;
-    this.phpEnd = false;
+    //    this.phpEnd = false;
     this.initializeScanner();
   }
 
@@ -150,16 +153,16 @@ public class Parser //extends PHPParserSuperclass
     //        keywordMap.put(PHP_KEYWORS[i], new Integer(PHP_KEYWORD_TOKEN[i]));
     //      }
     //    }
-    this.currentPHPString = 0;
+    //    this.currentPHPString = 0;
     //    PHPParserSuperclass.fileToParse = fileToParse;
-    this.phpList = null;
+    //    this.phpList = null;
     this.includesList = null;
     this.str = "";
     this.token = TokenNameEOF;
     //    this.chIndx = 0;
     //    this.rowCount = 1;
     //    this.columnCount = 0;
-    this.phpEnd = false;
+    //    this.phpEnd = false;
     //   getNextToken();
     this.initializeScanner();
   }
@@ -167,9 +170,7 @@ public class Parser //extends PHPParserSuperclass
   public void initializeScanner() {
     this.scanner = new Scanner(false /* comment */, false /* whitespace */, this.options
         .getSeverity(CompilerOptions.NonExternalizedString) != ProblemSeverities.Ignore /* nls */, false, false,
-        this.options.taskTags/* taskTags */, 
-        this.options.taskPriorites/* taskPriorities */,
-        true/*isTaskCaseSensitive*/);
+        this.options.taskTags/* taskTags */, this.options.taskPriorites/* taskPriorities */, true/* isTaskCaseSensitive */);
   }
 
   /**
@@ -205,8 +206,10 @@ public class Parser //extends PHPParserSuperclass
   //    throw new SyntaxError(startRow, 0, " ", error);
   //  }
   private void throwSyntaxError(String error, int problemStartPosition, int problemEndPosition) {
-    problemReporter.phpParsingError(new String[] { error }, problemStartPosition, problemEndPosition, referenceContext,
-        compilationUnit.compilationResult);
+    if (referenceContext != null) {
+      problemReporter.phpParsingError(new String[] { error }, problemStartPosition, problemEndPosition, referenceContext,
+          compilationUnit.compilationResult);
+    }
     throw new SyntaxError(1, 0, " ", error);
   }
 
@@ -215,15 +218,19 @@ public class Parser //extends PHPParserSuperclass
     int problemEndPosition = scanner.getCurrentTokenEndPosition();
     reportSyntaxError(error, problemStartPosition, problemEndPosition + 1);
   }
-  
+
   private void reportSyntaxError(String error, int problemStartPosition, int problemEndPosition) {
-    problemReporter.phpParsingError(new String[] { error }, problemStartPosition, problemEndPosition, referenceContext,
-        compilationUnit.compilationResult);
+    if (referenceContext != null) {
+      problemReporter.phpParsingError(new String[] { error }, problemStartPosition, problemEndPosition, referenceContext,
+          compilationUnit.compilationResult);
+    }
   }
 
   private void reportSyntaxWarning(String error, int problemStartPosition, int problemEndPosition) {
-    problemReporter.phpParsingWarning(new String[] { error }, problemStartPosition, problemEndPosition, referenceContext,
-        compilationUnit.compilationResult);
+    if (referenceContext != null) {
+      problemReporter.phpParsingWarning(new String[] { error }, problemStartPosition, problemEndPosition, referenceContext,
+          compilationUnit.compilationResult);
+    }
   }
 
   /**
@@ -254,14 +261,16 @@ public class Parser //extends PHPParserSuperclass
   public void init(String s) {
     this.str = s;
     this.token = TokenNameEOF;
+    this.includesList = new ArrayList();
     //    this.chIndx = 0;
     //    this.rowCount = 1;
     //    this.columnCount = 0;
-    this.phpEnd = false;
+    //    this.phpEnd = false;
     //    this.phpMode = false;
     /* scanner initialization */
     scanner.setSource(s.toCharArray());
     scanner.setPHPMode(false);
+    astPtr = 0;
   }
 
   protected void initialize(boolean phpMode) {
@@ -271,22 +280,31 @@ public class Parser //extends PHPParserSuperclass
   protected void initialize(boolean phpMode, IdentifierIndexManager indexManager) {
     compilationUnit = null;
     referenceContext = null;
-    includesList = new ArrayList();
+    this.includesList = new ArrayList();
     //    this.indexManager = indexManager;
     this.str = "";
     this.token = TokenNameEOF;
     //    this.chIndx = 0;
     //    this.rowCount = 1;
     //    this.columnCount = 0;
-    this.phpEnd = false;
+    //    this.phpEnd = false;
     //    this.phpMode = phpMode;
     scanner.setPHPMode(phpMode);
+    astPtr = 0;
   }
 
   /**
    * Parses a string with php tags i.e. '&lt;body&gt; &lt;?php phpinfo() ?&gt; &lt;/body&gt;'
    */
   public void parse(String s) {
+    parse(s, null);
+  }
+
+  /**
+   * Parses a string with php tags i.e. '&lt;body&gt; &lt;?php phpinfo() ?&gt; &lt;/body&gt;'
+   */
+  public void parse(String s, HashMap variables) {
+    fMethodVariables = variables;
     init(s);
     parse();
   }
@@ -295,6 +313,13 @@ public class Parser //extends PHPParserSuperclass
    * Parses a string with php tags i.e. '&lt;body&gt; &lt;?php phpinfo() ?&gt; &lt;/body&gt;'
    */
   protected void parse() {
+    if (scanner.compilationUnit != null) {
+      IResource resource = scanner.compilationUnit.getResource();
+      if (resource != null && resource instanceof IFile) {
+        // set the package name
+        consumePackageDeclarationName((IFile) resource);
+      }
+    }
     getNextToken();
     do {
       try {
@@ -327,58 +352,95 @@ public class Parser //extends PHPParserSuperclass
         }
         break;
       } catch (SyntaxError sytaxErr1) {
-        // setMarker(sytaxErr1.getMessage(), sytaxErr1.getLine(),
-        // ERROR);
-        //        setMarker(sytaxErr1.getMessage(),
-        // scanner.getCurrentTokenStartPosition(),
-        // scanner.getCurrentTokenEndPosition(), ERROR);
-        try {
-          // if an error occured,
-          // try to find keywords 'class' or 'function'
-          // to parse the rest of the string
-          while (token != TokenNameEOF && token != TokenNameERROR) {
-            if (token == TokenNameabstract || token == TokenNamefinal || token == TokenNameclass || token == TokenNamefunction) {
-              break;
-            }
-            getNextToken();
-          }
-          if (token == TokenNameEOF || token == TokenNameERROR) {
-            break;
-          }
-        } catch (SyntaxError sytaxErr2) {
-          //    setMarker(sytaxErr2.getMessage(), sytaxErr2.getLine(),
-          // ERROR);
-          //          setMarker(sytaxErr2.getMessage(),
-          // scanner.getCurrentTokenStartPosition(),
-          // scanner.getCurrentTokenEndPosition(), ERROR);
-          break;
-        }
+        break;
+        //        // if an error occured,
+        //        // try to find keywords 'abstract' 'final' 'class' or 'function'
+        //        // to parse the rest of the string
+        //        boolean tokenize = scanner.tokenizeStrings;
+        //        if (!tokenize) {
+        //          scanner.tokenizeStrings = true;
+        //        }
+        //        try {
+        //          while (token != TokenNameEOF) {
+        //            if (token == TokenNameabstract || token == TokenNamefinal || token == TokenNameclass || token == TokenNamefunction) {
+        //              break;
+        //            }
+        //            getNextToken();
+        //          }
+        //          if (token == TokenNameEOF) {
+        //            break;
+        //          }
+        //        } catch (SyntaxError sytaxErr2) {
+        //          break;
+        //        } finally {
+        //          scanner.tokenizeStrings = tokenize;
+        //        }
       }
     } while (true);
 
     endParse(0);
   }
 
+  /**
+   * Parses a string with php tags i.e. '&lt;body&gt; &lt;?php phpinfo() ?&gt; &lt;/body&gt;'
+   */
+  public void parseFunction(String s, HashMap variables) {
+    init(s);
+    scanner.phpMode = true;
+    parseFunction(variables);
+  }
+
+  /**
+   * Parses a string with php tags i.e. '&lt;body&gt; &lt;?php phpinfo() ?&gt; &lt;/body&gt;'
+   */
+  protected void parseFunction(HashMap variables) {
+    getNextToken();
+    boolean hasModifiers = member_modifiers();
+    if (token == TokenNamefunction) {
+      if (!hasModifiers) {
+        checkAndSetModifiers(AccPublic);
+      }
+      this.fMethodVariables = variables;
+
+      MethodDeclaration methodDecl = new MethodDeclaration(null);
+      methodDecl.declarationSourceStart = scanner.getCurrentTokenStartPosition();
+      methodDecl.modifiers = this.modifiers;
+      methodDecl.type = MethodDeclaration.METHOD_DEFINITION;
+      try {
+        getNextToken();
+        functionDefinition(methodDecl);
+      } catch (SyntaxError sytaxErr1) {
+        return;
+      } finally {
+        int sourceEnd = scanner.getCurrentTokenStartPosition();
+        if (sourceEnd <= 0 || methodDecl.declarationSourceStart > sourceEnd) {
+          sourceEnd = methodDecl.declarationSourceStart + 1;
+        }
+        methodDecl.declarationSourceEnd = sourceEnd;
+      }
+    }
+  }
+
   protected CompilationUnitDeclaration endParse(int act) {
 
     this.lastAct = act;
 
-    if (currentElement != null) {
-      currentElement.topElement().updateParseTree();
-      if (VERBOSE_RECOVERY) {
-        System.out.print(Util.bind("parser.syntaxRecovery")); //$NON-NLS-1$
-        System.out.println("--------------------------"); //$NON-NLS-1$
-        System.out.println(compilationUnit);
-        System.out.println("----------------------------------"); //$NON-NLS-1$
-      }
-    } else {
-      if (diet & VERBOSE_RECOVERY) {
-        System.out.print(Util.bind("parser.regularParse")); //$NON-NLS-1$
-        System.out.println("--------------------------"); //$NON-NLS-1$
-        System.out.println(compilationUnit);
-        System.out.println("----------------------------------"); //$NON-NLS-1$
-      }
+    //    if (currentElement != null) {
+    //      currentElement.topElement().updateParseTree();
+    //      if (VERBOSE_RECOVERY) {
+    //        System.out.print(Util.bind("parser.syntaxRecovery")); //$NON-NLS-1$
+    //        System.out.println("--------------------------"); //$NON-NLS-1$
+    //        System.out.println(compilationUnit);
+    //        System.out.println("----------------------------------"); //$NON-NLS-1$
+    //      }
+    //    } else {
+    if (diet & VERBOSE_RECOVERY) {
+      System.out.print(Util.bind("parser.regularParse")); //$NON-NLS-1$
+      System.out.println("--------------------------"); //$NON-NLS-1$
+      System.out.println(compilationUnit);
+      System.out.println("----------------------------------"); //$NON-NLS-1$
     }
+    //    }
     if (scanner.recordLineSeparator) {
       compilationUnit.compilationResult.lineSeparatorPositions = scanner.getLineEnds();
     }
@@ -396,203 +458,54 @@ public class Parser //extends PHPParserSuperclass
     return compilationUnit;
   }
 
-  //  public PHPOutlineInfo parseInfo(Object parent, String s) {
-  //    PHPOutlineInfo outlineInfo = new PHPOutlineInfo(parent);
-  //    // Stack stack = new Stack();
-  //    // stack.push(outlineInfo.getDeclarations());
-  //    this.str = s;
-  //    this.token = TokenNameEOF;
-  //    // this.chIndx = 0;
-  //    // this.rowCount = 1;
-  //    // this.columnCount = 0;
-  //    this.phpEnd = false;
-  //    this.phpMode = false;
-  //    scanner.setSource(s.toCharArray());
-  //    scanner.setPHPMode(false);
-  //    
-  //    getNextToken();
-  //    parseDeclarations(outlineInfo, outlineInfo.getDeclarations(), false);
-  //    
-  //    return outlineInfo;
-  //  }
   private boolean isVariable() {
     return token == TokenNameVariable; //  || token == TokenNamethis;
   }
 
-  //  private void parseDeclarations(PHPOutlineInfo outlineInfo,
-  //      OutlineableWithChildren current, boolean goBack) {
-  //    char[] ident;
-  //    // PHPClassDeclaration current = (PHPClassDeclaration) stack.peek();
-  //    PHPSegmentWithChildren temp;
-  //    int counter = 0;
-  //    IPreferenceStore store =
-  // PHPeclipsePlugin.getDefault().getPreferenceStore();
-  //    try {
-  //      while (token != TokenNameEOF && token != TokenNameERROR) {
-  //        if (token == TokenNameVariable) {
-  //          ident = scanner.getCurrentIdentifierSource();
-  //          outlineInfo.addVariable(new String(ident));
-  //          getNextToken();
-  //        } else if (token == TokenNamevar) {
-  //          getNextToken();
-  //          if (token == TokenNameVariable
-  //              && store.getBoolean(PHPeclipsePlugin.PHP_OUTLINE_VAR)) {
-  //            ident = scanner.getCurrentIdentifierSource();
-  //            //substring(1) added because PHPVarDeclaration doesn't
-  //            // need the $ anymore
-  //            String variableName = new String(ident).substring(1);
-  //            outlineInfo.addVariable(variableName);
-  //            getNextToken();
-  //            if (token != TokenNameSEMICOLON) {
-  //              getNextToken();
-  //              ident = scanner.getCurrentTokenSource();
-  //              if (token > TokenNameKEYWORD) {
-  //                current.add(new PHPVarDeclaration(current, variableName,
-  //                // chIndx - ident.length,
-  //                    scanner.getCurrentTokenStartPosition(), new String(ident)));
-  //              } else {
-  //                switch (token) {
-  //                  case TokenNameVariable :
-  //                  case TokenNamethis :
-  //                    current.add(new PHPVarDeclaration(current, variableName,
-  //                    // chIndx -
-  //                        // ident.length,
-  //                        scanner.getCurrentTokenStartPosition(), new String(
-  //                            ident)));
-  //                    break;
-  //                  case TokenNameIdentifier :
-  //                    current.add(new PHPVarDeclaration(current, variableName,
-  //                    // chIndx -
-  //                        // ident.length,
-  //                        scanner.getCurrentTokenStartPosition(), new String(
-  //                            ident)));
-  //                    break;
-  //                  case TokenNameDoubleLiteral :
-  //                    current.add(new PHPVarDeclaration(current, variableName
-  //                        + doubleNumber,
-  //                    // chIndx -
-  //                        // ident.length,
-  //                        scanner.getCurrentTokenStartPosition(), new String(
-  //                            ident)));
-  //                    break;
-  //                  case TokenNameIntegerLiteral :
-  //                    current.add(new PHPVarDeclaration(current, variableName,
-  //                    // chIndx -
-  //                        // ident.length,
-  //                        scanner.getCurrentTokenStartPosition(), new String(
-  //                            ident)));
-  //                    break;
-  //                  case TokenNameStringInterpolated :
-  //                  case TokenNameStringLiteral :
-  //                    current.add(new PHPVarDeclaration(current, variableName,
-  //                    // chIndx -
-  //                        // ident.length,
-  //                        scanner.getCurrentTokenStartPosition(), new String(
-  //                            ident)));
-  //                    break;
-  //                  case TokenNameStringConstant :
-  //                    current.add(new PHPVarDeclaration(current, variableName,
-  //                    // chIndx -
-  //                        // ident.length,
-  //                        scanner.getCurrentTokenStartPosition(), new String(
-  //                            ident)));
-  //                    break;
-  //                  default :
-  //                    current.add(new PHPVarDeclaration(current, variableName,
-  //                    // chIndx -
-  //                        // ident.length
-  //                        scanner.getCurrentTokenStartPosition()));
-  //                    break;
-  //                }
-  //              }
-  //            } else {
-  //              ident = scanner.getCurrentIdentifierSource();
-  //              current.add(new PHPVarDeclaration(current, variableName,
-  //              // chIndx - ident.length
-  //                  scanner.getCurrentTokenStartPosition()));
-  //            }
-  //          }
-  //        } else if (token == TokenNamefunction) {
-  //          getNextToken();
-  //          if (token == TokenNameAND) {
-  //            getNextToken();
-  //          }
-  //          if (token == TokenNameIdentifier
-  //              && store.getBoolean(PHPeclipsePlugin.PHP_OUTLINE_FUNC)) {
-  //            ident = scanner.getCurrentIdentifierSource();
-  //            outlineInfo.addVariable(new String(ident));
-  //            temp = new PHPFunctionDeclaration(current, new String(ident),
-  //            // chIndx - ident.length
-  //                scanner.getCurrentTokenStartPosition());
-  //            current.add(temp);
-  //            getNextToken();
-  //            parseDeclarations(outlineInfo, temp, true);
-  //          }
-  //        } else if (token == TokenNameclass) {
-  //          getNextToken();
-  //          if (token == TokenNameIdentifier
-  //              && store.getBoolean(PHPeclipsePlugin.PHP_OUTLINE_CLASS)) {
-  //            ident = scanner.getCurrentIdentifierSource();
-  //            outlineInfo.addVariable(new String(ident));
-  //            temp = new PHPClassDeclaration(current, new String(ident),
-  //            // chIndx - ident.len
-  //                scanner.getCurrentTokenStartPosition());
-  //            current.add(temp);
-  //            // stack.push(temp);
-  //            getNextToken();
-  //            //skip tokens for classname, extends and others until
-  //            // we have the opening '{'
-  //            while (token != TokenNameLBRACE && token != TokenNameEOF
-  //                && token != TokenNameERROR) {
-  //              getNextToken();
-  //            }
-  //            parseDeclarations(outlineInfo, temp, true);
-  //            // stack.pop();
-  //          }
-  //        } else if ((token == TokenNameLBRACE)
-  //            || (token == TokenNameDOLLAR_LBRACE)) {
-  //          getNextToken();
-  //          counter++;
-  //        } else if (token == TokenNameRBRACE) {
-  //          getNextToken();
-  //          --counter;
-  //          if (counter == 0 && goBack) {
-  //            return;
-  //          }
-  //        } else if (token == TokenNamerequire || token == TokenNamerequire_once
-  //            || token == TokenNameinclude || token == TokenNameinclude_once) {
-  //          ident = scanner.getCurrentTokenSource();
-  //          getNextToken();
-  //          int startPosition = scanner.getCurrentTokenStartPosition();
-  //          expr();
-  //          char[] expr = scanner.getCurrentTokenSource(startPosition);
-  //          outlineInfo.addVariable(new String(ident));
-  //          current.add(new PHPReqIncDeclaration(current, new String(ident),
-  //          // chIndx - ident.length,
-  //              startPosition, new String(expr)));
-  //          getNextToken();
-  //        } else {
-  //          getNextToken();
-  //        }
-  //      }
-  //    } catch (SyntaxError sytaxErr) {
-  //      // try {
-  //      // // setMarker(sytaxErr.getMessage(), sytaxErr.getLine(), ERROR);
-  //      // setMarker(sytaxErr.getMessage(),
-  //      // scanner.getCurrentTokenStartPosition(),
-  //      // scanner.getCurrentTokenEndPosition(), ERROR);
-  //      // } catch (CoreException e) {
-  //      // }
-  //    }
-  //  }
   private void statementList() {
     do {
-      statement(TokenNameEOF);
-      if ((token == TokenNameRBRACE) || (token == TokenNamecase) || (token == TokenNamedefault) || (token == TokenNameelse)
-          || (token == TokenNameelseif) || (token == TokenNameendif) || (token == TokenNameendfor)
-          || (token == TokenNameendforeach) || (token == TokenNameendwhile) || (token == TokenNameendswitch)
-          || (token == TokenNameenddeclare) || (token == TokenNameEOF) || (token == TokenNameERROR)) {
-        return;
+      try {
+        statement(TokenNameEOF);
+        if ((token == TokenNameRBRACE) || (token == TokenNamecase) || (token == TokenNamedefault) || (token == TokenNameelse)
+            || (token == TokenNameelseif) || (token == TokenNameendif) || (token == TokenNameendfor)
+            || (token == TokenNameendforeach) || (token == TokenNameendwhile) || (token == TokenNameendswitch)
+            || (token == TokenNameenddeclare) || (token == TokenNameEOF) || (token == TokenNameERROR)) {
+          return;
+        }
+      } catch (SyntaxError sytaxErr1) {
+        // if an error occured,
+        // try to find keywords
+        // to parse the rest of the string
+        boolean tokenize = scanner.tokenizeStrings;
+        if (!tokenize) {
+          scanner.tokenizeStrings = true;
+        }
+        try {
+          while (token != TokenNameEOF) {
+            if ((token == TokenNameRBRACE) || (token == TokenNamecase) || (token == TokenNamedefault) || (token == TokenNameelse)
+                || (token == TokenNameelseif) || (token == TokenNameendif) || (token == TokenNameendfor)
+                || (token == TokenNameendforeach) || (token == TokenNameendwhile) || (token == TokenNameendswitch)
+                || (token == TokenNameenddeclare) || (token == TokenNameEOF) || (token == TokenNameERROR)) {
+              return;
+            }
+            if (token == TokenNameif || token == TokenNameswitch || token == TokenNamefor || token == TokenNamewhile
+                || token == TokenNamedo || token == TokenNameforeach || token == TokenNamecontinue || token == TokenNamebreak
+                || token == TokenNamereturn || token == TokenNameexit || token == TokenNameecho || token == TokenNameglobal
+                || token == TokenNamestatic || token == TokenNameunset || token == TokenNamefunction || token == TokenNamedeclare
+                || token == TokenNametry || token == TokenNamecatch || token == TokenNamethrow || token == TokenNamefinal
+                || token == TokenNameabstract || token == TokenNameclass || token == TokenNameinterface) {
+              break;
+            }
+            //            System.out.println(scanner.toStringAction(token));
+            getNextToken();
+            //            System.out.println(scanner.toStringAction(token));
+          }
+          if (token == TokenNameEOF) {
+            throw sytaxErr1;
+          }
+        } finally {
+          scanner.tokenizeStrings = tokenize;
+        }
       }
     } while (true);
   }
@@ -608,7 +521,7 @@ public class Parser //extends PHPParserSuperclass
       statementList();
     }
     if (token == TokenNameRBRACE) {
-      methodDecl.declarationSourceEnd = scanner.getCurrentTokenEndPosition();
+      //      methodDecl.declarationSourceEnd = scanner.getCurrentTokenEndPosition();
       getNextToken();
     } else {
       throwSyntaxError("'}' expected in compound-statement.");
@@ -861,8 +774,17 @@ public class Parser //extends PHPParserSuperclass
       MethodDeclaration methodDecl = new MethodDeclaration(this.compilationUnit.compilationResult);
       methodDecl.declarationSourceStart = scanner.getCurrentTokenStartPosition();
       methodDecl.modifiers = AccDefault;
-      getNextToken();
-      functionDefinition(methodDecl);
+      methodDecl.type = MethodDeclaration.FUNCTION_DEFINITION;
+      try {
+        getNextToken();
+        functionDefinition(methodDecl);
+      } finally {
+        int sourceEnd = scanner.getCurrentTokenStartPosition();
+        if (sourceEnd <= 0 || methodDecl.declarationSourceStart > sourceEnd) {
+          sourceEnd = methodDecl.declarationSourceStart + 1;
+        }
+        methodDecl.declarationSourceEnd = sourceEnd;
+      }
       return statement;
     } else if (token == TokenNamedeclare) {
       //T_DECLARE '(' declare_list ')' declare_statement
@@ -928,18 +850,18 @@ public class Parser //extends PHPParserSuperclass
       }
       return statement;
     } else if (token == TokenNamefinal || token == TokenNameabstract || token == TokenNameclass || token == TokenNameinterface) {
-      TypeDeclaration typeDecl = new TypeDeclaration(this.compilationUnit.compilationResult);
-      typeDecl.declarationSourceStart = scanner.getCurrentTokenStartPosition();
-      typeDecl.declarationSourceEnd = scanner.getCurrentTokenEndPosition();
-      typeDecl.name = new char[] { ' ' };
-      // default super class
-      typeDecl.superclass = new SingleTypeReference(TypeConstants.OBJECT, 0);
-      compilationUnit.types.add(typeDecl);
       try {
+        TypeDeclaration typeDecl = new TypeDeclaration(this.compilationUnit.compilationResult);
+        typeDecl.declarationSourceStart = scanner.getCurrentTokenStartPosition();
+        typeDecl.declarationSourceEnd = scanner.getCurrentTokenEndPosition();
+        typeDecl.name = new char[] { ' ' };
+        // default super class
+        typeDecl.superclass = new SingleTypeReference(TypeConstants.OBJECT, 0);
+        compilationUnit.types.add(typeDecl);
         pushOnAstStack(typeDecl);
         unticked_class_declaration_statement(typeDecl);
-        //        classBody(typeDecl);
       } finally {
+        // reduce stack:
         astPtr--;
         astLengthPtr--;
       }
@@ -965,10 +887,14 @@ public class Parser //extends PHPParserSuperclass
         getNextToken();
         return statement;
       } else {
-        if (token != TokenNameINLINE_HTML && token != TokenNameEOF) {
-          throwSyntaxError("';' expected after expression (Found token: " + scanner.toStringAction(token) + ")");
+        if (token == TokenNameRBRACE) {
+          reportSyntaxError("';' expected after expression (Found token: " + scanner.toStringAction(token) + ")");
+        } else {
+          if (token != TokenNameINLINE_HTML && token != TokenNameEOF) {
+            throwSyntaxError("';' expected after expression (Found token: " + scanner.toStringAction(token) + ")");
+          }
+          getNextToken();
         }
-        getNextToken();
       }
     }
     // may be null
@@ -1083,14 +1009,18 @@ public class Parser //extends PHPParserSuperclass
     //| '$' r_variable
     //| '$' '{' expr '}'
     if (token == TokenNameVariable) {
+      VariableInfo info = new VariableInfo(scanner.getCurrentTokenStartPosition(), VariableInfo.LEVEL_GLOBAL_VAR);
+      if (fMethodVariables != null) {
+        fMethodVariables.put(new String(scanner.getCurrentIdentifierSource()), info);
+      }
       getNextToken();
     } else if (token == TokenNameDOLLAR) {
       getNextToken();
-      if (token == TokenNameLPAREN) {
+      if (token == TokenNameLBRACE) {
         getNextToken();
         expr();
-        if (token != TokenNameLPAREN) {
-          throwSyntaxError("')' expected in global variable.");
+        if (token != TokenNameRBRACE) {
+          throwSyntaxError("'}' expected in global variable.");
         }
         getNextToken();
       } else {
@@ -1107,6 +1037,10 @@ public class Parser //extends PHPParserSuperclass
     //| T_VARIABLE '=' static_scalar
     while (true) {
       if (token == TokenNameVariable) {
+        VariableInfo info = new VariableInfo(scanner.getCurrentTokenStartPosition(), VariableInfo.LEVEL_STATIC_VAR);
+        if (fMethodVariables != null) {
+          fMethodVariables.put(new String(scanner.getCurrentIdentifierSource()), info);
+        }
         getNextToken();
         if (token == TokenNameEQUAL) {
           getNextToken();
@@ -1272,8 +1206,8 @@ public class Parser //extends PHPParserSuperclass
         throwSyntaxError("Class name expected after keyword 'extends'.");
       }
     }
-  } 
-  
+  }
+
   private void interface_extends_list(TypeDeclaration typeDecl) {
     // /* empty */
     // | T_EXTENDS interface_list
@@ -1287,7 +1221,7 @@ public class Parser //extends PHPParserSuperclass
     // /* empty */
     // | T_IMPLEMENTS interface_list
     if (token == TokenNameimplements) {
-      getNextToken(); 
+      getNextToken();
       interface_list();
     }
   }
@@ -1328,10 +1262,43 @@ public class Parser //extends PHPParserSuperclass
   //  }
   private void class_statement_list(ArrayList list) {
     do {
-      class_statement(list);
-    } while (token == TokenNamepublic || token == TokenNameprotected || token == TokenNameprivate || token == TokenNamestatic
-        || token == TokenNameabstract || token == TokenNamefinal || token == TokenNamefunction || token == TokenNamevar
-        || token == TokenNameconst);
+      try {
+        class_statement(list);
+        if (token == TokenNamepublic || token == TokenNameprotected || token == TokenNameprivate || token == TokenNamestatic
+            || token == TokenNameabstract || token == TokenNamefinal || token == TokenNamefunction || token == TokenNamevar
+            || token == TokenNameconst) {
+          continue;
+        }
+        if (token == TokenNameRBRACE) {
+          break;
+        }
+        throwSyntaxError("'}' at end of class statement.");
+      } catch (SyntaxError sytaxErr1) {
+        boolean tokenize = scanner.tokenizeStrings;
+        if (!tokenize) {
+          scanner.tokenizeStrings = true;
+        }
+        try {
+          // if an error occured,
+          // try to find keywords
+          // to parse the rest of the string
+          while (token != TokenNameEOF) {
+            if (token == TokenNamepublic || token == TokenNameprotected || token == TokenNameprivate || token == TokenNamestatic
+                || token == TokenNameabstract || token == TokenNamefinal || token == TokenNamefunction || token == TokenNamevar
+                || token == TokenNameconst) {
+              break;
+            }
+            //            System.out.println(scanner.toStringAction(token));
+            getNextToken();
+          }
+          if (token == TokenNameEOF) {
+            throw sytaxErr1;
+          }
+        } finally {
+          scanner.tokenizeStrings = tokenize;
+        }
+      }
+    } while (true);
   }
 
   private void class_statement(ArrayList list) {
@@ -1365,8 +1332,17 @@ public class Parser //extends PHPParserSuperclass
         MethodDeclaration methodDecl = new MethodDeclaration(this.compilationUnit.compilationResult);
         methodDecl.declarationSourceStart = scanner.getCurrentTokenStartPosition();
         methodDecl.modifiers = this.modifiers;
-        getNextToken();
-        functionDefinition(methodDecl);
+        methodDecl.type = MethodDeclaration.METHOD_DEFINITION;
+        try {
+          getNextToken();
+          functionDefinition(methodDecl);
+        } finally {
+          int sourceEnd = scanner.getCurrentTokenStartPosition();
+          if (sourceEnd <= 0 || methodDecl.declarationSourceStart > sourceEnd) {
+            sourceEnd = methodDecl.declarationSourceStart + 1;
+          }
+          methodDecl.declarationSourceEnd = sourceEnd;
+        }
       } else {
         if (!hasModifiers) {
           throwSyntaxError("'public' 'private' or 'protected' modifier expected for field declarations.");
@@ -1496,8 +1472,11 @@ public class Parser //extends PHPParserSuperclass
         fieldDeclaration.declarationSourceStart = declarationSourceStart;
         fieldDeclaration.declarationSourceEnd = scanner.getCurrentTokenEndPosition();
         fieldDeclaration.modifiersSourceStart = declarationSourceStart;
-        //        fieldDeclaration.type
         list.add(fieldDeclaration);
+        if (fTypeVariables != null) {
+          VariableInfo info = new VariableInfo(scanner.getCurrentTokenStartPosition(), VariableInfo.LEVEL_CLASS_UNIT);
+          fTypeVariables.put(new String(scanner.getCurrentIdentifierSource()), info);
+        }
         getNextToken();
         if (token == TokenNameEQUAL) {
           getNextToken();
@@ -1524,7 +1503,9 @@ public class Parser //extends PHPParserSuperclass
   private void functionDefinition(MethodDeclaration methodDecl) {
     boolean isAbstract = false;
     if (astPtr == 0) {
-      compilationUnit.types.add(methodDecl);
+      if (compilationUnit != null) {
+        compilationUnit.types.add(methodDecl);
+      }
     } else {
       ASTNode node = astStack[astPtr];
       if (node instanceof TypeDeclaration) {
@@ -1533,8 +1514,7 @@ public class Parser //extends PHPParserSuperclass
           typeDecl.methods = new AbstractMethodDeclaration[] { methodDecl };
         } else {
           AbstractMethodDeclaration[] newMethods;
-          System.arraycopy(typeDecl.methods, 0, 
-              newMethods = new AbstractMethodDeclaration[typeDecl.methods.length + 1], 0,
+          System.arraycopy(typeDecl.methods, 0, newMethods = new AbstractMethodDeclaration[typeDecl.methods.length + 1], 0,
               typeDecl.methods.length);
           newMethods[typeDecl.methods.length] = methodDecl;
           typeDecl.methods = newMethods;
@@ -1569,8 +1549,6 @@ public class Parser //extends PHPParserSuperclass
       if (token > TokenNameKEYWORD) {
         problemReporter.phpKeywordWarning(new String[] { scanner.toStringAction(token) }, scanner.getCurrentTokenStartPosition(),
             scanner.getCurrentTokenEndPosition(), referenceContext, compilationUnit.compilationResult);
-        //        reportSyntaxWarning("Don't use keyword for function declaration [" + scanner.toStringAction(token) + "].",
-        //          scanner.getCurrentTokenStartPosition(), scanner.getCurrentTokenEndPosition());
       }
       getNextToken();
       if (token == TokenNameLPAREN) {
@@ -1579,7 +1557,7 @@ public class Parser //extends PHPParserSuperclass
         throwSyntaxError("'(' expected in function declaration.");
       }
       if (token != TokenNameRPAREN) {
-        parameter_list();
+        parameter_list(methodDecl);
       }
       if (token != TokenNameRPAREN) {
         throwSyntaxError("')' expected in function declaration.");
@@ -1594,13 +1572,13 @@ public class Parser //extends PHPParserSuperclass
   }
 
   //
-  private void parameter_list() {
+  private void parameter_list(MethodDeclaration methodDecl) {
     // non_empty_parameter_list
     // | /* empty */
-    non_empty_parameter_list(true);
+    non_empty_parameter_list(methodDecl, true);
   }
 
-  private void non_empty_parameter_list(boolean empty_allowed) {
+  private void non_empty_parameter_list(MethodDeclaration methodDecl, boolean empty_allowed) {
     // optional_class_type T_VARIABLE
     // | optional_class_type '&' T_VARIABLE
     // | optional_class_type '&' T_VARIABLE '=' static_scalar
@@ -1611,15 +1589,27 @@ public class Parser //extends PHPParserSuperclass
     // static_scalar
     // | non_empty_parameter_list ',' optional_class_type T_VARIABLE '='
     // static_scalar
+    char[] typeIdentifier = null;
     if (token == TokenNameIdentifier || token == TokenNameVariable || token == TokenNameAND) {
       while (true) {
         if (token == TokenNameIdentifier) {
+          typeIdentifier = scanner.getCurrentIdentifierSource();
           getNextToken();
         }
         if (token == TokenNameAND) {
           getNextToken();
         }
         if (token == TokenNameVariable) {
+          if (fMethodVariables != null) {
+            VariableInfo info;
+            if (methodDecl.type == MethodDeclaration.FUNCTION_DEFINITION) {
+              info = new VariableInfo(scanner.getCurrentTokenStartPosition(), VariableInfo.LEVEL_FUNCTION_DEFINITION);
+            } else {
+              info = new VariableInfo(scanner.getCurrentTokenStartPosition(), VariableInfo.LEVEL_METHOD_DEFINITION);
+            }
+            info.typeIdentifier = typeIdentifier;
+            fMethodVariables.put(new String(scanner.getCurrentIdentifierSource()), info);
+          }
           getNextToken();
           if (token == TokenNameEQUAL) {
             getNextToken();
@@ -1645,31 +1635,31 @@ public class Parser //extends PHPParserSuperclass
     //| T_STRING
   }
 
-  private void parameterDeclaration() {
-    //variable
-    //variable-reference
-    if (token == TokenNameAND) {
-      getNextToken();
-      if (isVariable()) {
-        getNextToken();
-      } else {
-        throwSyntaxError("Variable expected after reference operator '&'.");
-      }
-    }
-    //variable '=' constant
-    if (token == TokenNameVariable) {
-      getNextToken();
-      if (token == TokenNameEQUAL) {
-        getNextToken();
-        static_scalar();
-      }
-      return;
-    }
-    //    if (token == TokenNamethis) {
-    //      throwSyntaxError("Reserved word '$this' not allowed in parameter
-    // declaration.");
-    //    }
-  }
+  //  private void parameterDeclaration() {
+  //    //variable
+  //    //variable-reference
+  //    if (token == TokenNameAND) {
+  //      getNextToken();
+  //      if (isVariable()) {
+  //        getNextToken();
+  //      } else {
+  //        throwSyntaxError("Variable expected after reference operator '&'.");
+  //      }
+  //    }
+  //    //variable '=' constant
+  //    if (token == TokenNameVariable) {
+  //      getNextToken();
+  //      if (token == TokenNameEQUAL) {
+  //        getNextToken();
+  //        static_scalar();
+  //      }
+  //      return;
+  //    }
+  //    // if (token == TokenNamethis) {
+  //    // throwSyntaxError("Reserved word '$this' not allowed in parameter
+  //    // declaration.");
+  //    // }
+  //  }
 
   private void labeledStatementList() {
     if (token != TokenNamecase && token != TokenNamedefault) {
@@ -2002,450 +1992,532 @@ public class Parser //extends PHPParserSuperclass
     expression.sourceStart = exprSourceStart;
     // default, may be overwritten
     expression.sourceEnd = exprSourceEnd;
-    //         internal_functions_in_yacc
-    // | T_CLONE expr
-    // | T_PRINT expr
-    // | '(' expr ')'
-    // | '@' expr
-    // | '+' expr
-    // | '-' expr
-    // | '!' expr
-    // | '~' expr
-    // | T_INC rw_variable
-    // | T_DEC rw_variable
-    // | T_INT_CAST expr
-    // | T_DOUBLE_CAST expr
-    // | T_STRING_CAST expr
-    // | T_ARRAY_CAST expr
-    // | T_OBJECT_CAST expr
-    // | T_BOOL_CAST expr
-    // | T_UNSET_CAST expr
-    // | T_EXIT exit_expr
-    // | scalar
-    // | T_ARRAY '(' array_pair_list ')'
-    // | '`' encaps_list '`'
-    // | T_LIST '(' assignment_list ')' '=' expr
-    // | T_NEW class_name_reference ctor_arguments
-    // | variable '=' expr
-    // | variable '=' '&' variable
-    // | variable '=' '&' T_NEW class_name_reference ctor_arguments
-    // | variable T_PLUS_EQUAL expr
-    // | variable T_MINUS_EQUAL expr
-    // | variable T_MUL_EQUAL expr
-    // | variable T_DIV_EQUAL expr
-    // | variable T_CONCAT_EQUAL expr
-    // | variable T_MOD_EQUAL expr
-    // | variable T_AND_EQUAL expr
-    // | variable T_OR_EQUAL expr
-    // | variable T_XOR_EQUAL expr
-    // | variable T_SL_EQUAL expr
-    // | variable T_SR_EQUAL expr
-    // | rw_variable T_INC
-    // | rw_variable T_DEC
-    // | expr T_BOOLEAN_OR expr
-    // | expr T_BOOLEAN_AND expr
-    // | expr T_LOGICAL_OR expr
-    // | expr T_LOGICAL_AND expr
-    // | expr T_LOGICAL_XOR expr
-    // | expr '|' expr
-    // | expr '&' expr
-    // | expr '^' expr
-    // | expr '.' expr
-    // | expr '+' expr
-    // | expr '-' expr
-    // | expr '*' expr
-    // | expr '/' expr
-    // | expr '%' expr
-    // | expr T_SL expr
-    // | expr T_SR expr
-    // | expr T_IS_IDENTICAL expr
-    // | expr T_IS_NOT_IDENTICAL expr
-    // | expr T_IS_EQUAL expr
-    // | expr T_IS_NOT_EQUAL expr
-    // | expr '<' expr
-    // | expr T_IS_SMALLER_OR_EQUAL expr
-    // | expr '>' expr
-    // | expr T_IS_GREATER_OR_EQUAL expr
-    // | expr T_INSTANCEOF class_name_reference
-    // | expr '?' expr ':' expr
-    if (Scanner.TRACE) {
-      System.out.println("TRACE: expr_without_variable() PART 1");
-    }
-    switch (token) {
-    case TokenNameisset:
-    case TokenNameempty:
-    case TokenNameeval:
-    case TokenNameinclude:
-    case TokenNameinclude_once:
-    case TokenNamerequire:
-    case TokenNamerequire_once:
-      internal_functions_in_yacc();
-      break;
-    //         | '(' expr ')'
-    case TokenNameLPAREN:
-      getNextToken();
-      expr();
-      if (token == TokenNameRPAREN) {
-        getNextToken();
-      } else {
-        throwSyntaxError("')' expected in expression.");
+    try {
+      //               internal_functions_in_yacc
+      //       | T_CLONE expr
+      //       | T_PRINT expr
+      //       | '(' expr ')'
+      //       | '@' expr
+      //       | '+' expr
+      //       | '-' expr
+      //       | '!' expr
+      //       | '~' expr
+      //       | T_INC rw_variable
+      //       | T_DEC rw_variable
+      //       | T_INT_CAST expr
+      //       | T_DOUBLE_CAST expr
+      //       | T_STRING_CAST expr
+      //       | T_ARRAY_CAST expr
+      //       | T_OBJECT_CAST expr
+      //       | T_BOOL_CAST expr
+      //       | T_UNSET_CAST expr
+      //       | T_EXIT exit_expr
+      //       | scalar
+      //       | T_ARRAY '(' array_pair_list ')'
+      //       | '`' encaps_list '`'
+      //       | T_LIST '(' assignment_list ')' '=' expr
+      //       | T_NEW class_name_reference ctor_arguments
+      //       | variable '=' expr
+      //       | variable '=' '&' variable
+      //       | variable '=' '&' T_NEW class_name_reference ctor_arguments
+      //       | variable T_PLUS_EQUAL expr
+      //       | variable T_MINUS_EQUAL expr
+      //       | variable T_MUL_EQUAL expr
+      //       | variable T_DIV_EQUAL expr
+      //       | variable T_CONCAT_EQUAL expr
+      //       | variable T_MOD_EQUAL expr
+      //       | variable T_AND_EQUAL expr
+      //       | variable T_OR_EQUAL expr
+      //       | variable T_XOR_EQUAL expr
+      //       | variable T_SL_EQUAL expr
+      //       | variable T_SR_EQUAL expr
+      //       | rw_variable T_INC
+      //       | rw_variable T_DEC
+      //       | expr T_BOOLEAN_OR expr
+      //       | expr T_BOOLEAN_AND expr
+      //       | expr T_LOGICAL_OR expr
+      //       | expr T_LOGICAL_AND expr
+      //       | expr T_LOGICAL_XOR expr
+      //       | expr '|' expr
+      //       | expr '&' expr
+      //       | expr '^' expr
+      //       | expr '.' expr
+      //       | expr '+' expr
+      //       | expr '-' expr
+      //       | expr '*' expr
+      //       | expr '/' expr
+      //       | expr '%' expr
+      //       | expr T_SL expr
+      //       | expr T_SR expr
+      //       | expr T_IS_IDENTICAL expr
+      //       | expr T_IS_NOT_IDENTICAL expr
+      //       | expr T_IS_EQUAL expr
+      //       | expr T_IS_NOT_EQUAL expr
+      //       | expr '<' expr
+      //       | expr T_IS_SMALLER_OR_EQUAL expr
+      //       | expr '>' expr
+      //       | expr T_IS_GREATER_OR_EQUAL expr
+      //       | expr T_INSTANCEOF class_name_reference
+      //       | expr '?' expr ':' expr
+      if (Scanner.TRACE) {
+        System.out.println("TRACE: expr_without_variable() PART 1");
       }
-      break;
-    //    | T_CLONE expr
-    //    | T_PRINT expr
-    //    | '@' expr
-    //    | '+' expr
-    //    | '-' expr
-    //    | '!' expr
-    //    | '~' expr
-    //    | T_INT_CAST expr
-    // | T_DOUBLE_CAST expr
-    // | T_STRING_CAST expr
-    // | T_ARRAY_CAST expr
-    // | T_OBJECT_CAST expr
-    // | T_BOOL_CAST expr
-    // | T_UNSET_CAST expr
-    case TokenNameclone:
-    case TokenNameprint:
-    case TokenNameAT:
-    case TokenNamePLUS:
-    case TokenNameMINUS:
-    case TokenNameNOT:
-    case TokenNameTWIDDLE:
-    case TokenNameintCAST:
-    case TokenNamedoubleCAST:
-    case TokenNamestringCAST:
-    case TokenNamearrayCAST:
-    case TokenNameobjectCAST:
-    case TokenNameboolCAST:
-    case TokenNameunsetCAST:
-      getNextToken();
-      expr();
-      break;
-    case TokenNameexit:
-      getNextToken();
-      exit_expr();
-      break;
-    //  scalar:
-    // T_STRING
-    //| T_STRING_VARNAME
-    //| class_constant
-    //| T_START_HEREDOC encaps_list T_END_HEREDOC
-    //         | '`' encaps_list '`'
-    //  | common_scalar
-    // | '`' encaps_list '`'
-    case TokenNameEncapsedString0:
-      scanner.encapsedStringStack.push(new Character('`'));
-      getNextToken();
-      try {
-        if (token == TokenNameEncapsedString0) {
+      switch (token) {
+      case TokenNameisset:
+      case TokenNameempty:
+      case TokenNameeval:
+      case TokenNameinclude:
+      case TokenNameinclude_once:
+      case TokenNamerequire:
+      case TokenNamerequire_once:
+        internal_functions_in_yacc();
+        break;
+      //       | '(' expr ')'
+      case TokenNameLPAREN:
+        getNextToken();
+        expr();
+        if (token == TokenNameRPAREN) {
+          getNextToken();
         } else {
-          encaps_list();
-          if (token != TokenNameEncapsedString0) {
-            throwSyntaxError("\'`\' expected at end of string" + "(Found token: " + scanner.toStringAction(token) + " )");
-          }
+          throwSyntaxError("')' expected in expression.");
         }
-      } finally {
-        scanner.encapsedStringStack.pop();
+        break;
+      //    | T_CLONE expr
+      //    | T_PRINT expr
+      //    | '@' expr
+      //    | '+' expr
+      //    | '-' expr
+      //    | '!' expr
+      //    | '~' expr
+      //    | T_INT_CAST expr
+      //       | T_DOUBLE_CAST expr
+      //       | T_STRING_CAST expr
+      //       | T_ARRAY_CAST expr
+      //       | T_OBJECT_CAST expr
+      //       | T_BOOL_CAST expr
+      //       | T_UNSET_CAST expr
+      case TokenNameclone:
+      case TokenNameprint:
+      case TokenNameAT:
+      case TokenNamePLUS:
+      case TokenNameMINUS:
+      case TokenNameNOT:
+      case TokenNameTWIDDLE:
+      case TokenNameintCAST:
+      case TokenNamedoubleCAST:
+      case TokenNamestringCAST:
+      case TokenNamearrayCAST:
+      case TokenNameobjectCAST:
+      case TokenNameboolCAST:
+      case TokenNameunsetCAST:
         getNextToken();
-      }
-      break;
-    //      | '\'' encaps_list '\''
-    case TokenNameEncapsedString1:
-      scanner.encapsedStringStack.push(new Character('\''));
-      getNextToken();
-      try {
-        exprSourceStart = scanner.getCurrentTokenStartPosition();
-        if (token == TokenNameEncapsedString1) {
-          expression = new StringLiteralSQ(scanner.getCurrentStringLiteralSource(exprSourceStart), exprSourceStart, scanner
-              .getCurrentTokenEndPosition());
-        } else {
-          encaps_list();
-          if (token != TokenNameEncapsedString1) {
-            throwSyntaxError("\'\'\' expected at end of string" + "(Found token: " + scanner.toStringAction(token) + " )");
+        expr();
+        break;
+      case TokenNameexit:
+        getNextToken();
+        exit_expr();
+        break;
+      //  scalar:
+      //       T_STRING
+      //| T_STRING_VARNAME
+      //| class_constant
+      //| T_START_HEREDOC encaps_list T_END_HEREDOC
+      //       | '`' encaps_list '`'
+      //  | common_scalar
+      //       | '`' encaps_list '`'
+      case TokenNameEncapsedString0:
+        scanner.encapsedStringStack.push(new Character('`'));
+        getNextToken();
+        try {
+          if (token == TokenNameEncapsedString0) {
           } else {
+            encaps_list();
+            if (token != TokenNameEncapsedString0) {
+              throwSyntaxError("\'`\' expected at end of string" + "(Found token: " + scanner.toStringAction(token) + " )");
+            }
+          }
+        } finally {
+          scanner.encapsedStringStack.pop();
+          getNextToken();
+        }
+        break;
+      //      | '\'' encaps_list '\''
+      case TokenNameEncapsedString1:
+        scanner.encapsedStringStack.push(new Character('\''));
+        getNextToken();
+        try {
+          exprSourceStart = scanner.getCurrentTokenStartPosition();
+          if (token == TokenNameEncapsedString1) {
             expression = new StringLiteralSQ(scanner.getCurrentStringLiteralSource(exprSourceStart), exprSourceStart, scanner
                 .getCurrentTokenEndPosition());
+          } else {
+            encaps_list();
+            if (token != TokenNameEncapsedString1) {
+              throwSyntaxError("\'\'\' expected at end of string" + "(Found token: " + scanner.toStringAction(token) + " )");
+            } else {
+              expression = new StringLiteralSQ(scanner.getCurrentStringLiteralSource(exprSourceStart), exprSourceStart, scanner
+                  .getCurrentTokenEndPosition());
+            }
           }
+        } finally {
+          scanner.encapsedStringStack.pop();
+          getNextToken();
         }
-      } finally {
-        scanner.encapsedStringStack.pop();
+        break;
+      //| '"' encaps_list '"'
+      case TokenNameEncapsedString2:
+        scanner.encapsedStringStack.push(new Character('"'));
         getNextToken();
-      }
-      break;
-    //| '"' encaps_list '"'
-    case TokenNameEncapsedString2:
-      scanner.encapsedStringStack.push(new Character('"'));
-      getNextToken();
-      try {
-        exprSourceStart = scanner.getCurrentTokenStartPosition();
-        if (token == TokenNameEncapsedString2) {
-          expression = new StringLiteralDQ(scanner.getCurrentStringLiteralSource(exprSourceStart), exprSourceStart, scanner
-              .getCurrentTokenEndPosition());
-        } else {
-          encaps_list();
-          if (token != TokenNameEncapsedString2) {
-            throwSyntaxError("'\"' expected at end of string" + "(Found token: " + scanner.toStringAction(token) + " )");
-          } else {
+        try {
+          exprSourceStart = scanner.getCurrentTokenStartPosition();
+          if (token == TokenNameEncapsedString2) {
             expression = new StringLiteralDQ(scanner.getCurrentStringLiteralSource(exprSourceStart), exprSourceStart, scanner
                 .getCurrentTokenEndPosition());
+          } else {
+            encaps_list();
+            if (token != TokenNameEncapsedString2) {
+              throwSyntaxError("'\"' expected at end of string" + "(Found token: " + scanner.toStringAction(token) + " )");
+            } else {
+              expression = new StringLiteralDQ(scanner.getCurrentStringLiteralSource(exprSourceStart), exprSourceStart, scanner
+                  .getCurrentTokenEndPosition());
+            }
           }
-        }
-      } finally {
-        scanner.encapsedStringStack.pop();
-        getNextToken();
-      }
-      break;
-    case TokenNameStringDoubleQuote:
-      expression = new StringLiteralDQ(scanner.getCurrentStringLiteralSource(), scanner.getCurrentTokenStartPosition(), scanner
-          .getCurrentTokenEndPosition());
-      common_scalar();
-      break;
-    case TokenNameStringSingleQuote:
-      expression = new StringLiteralSQ(scanner.getCurrentStringLiteralSource(), scanner.getCurrentTokenStartPosition(), scanner
-          .getCurrentTokenEndPosition());
-      common_scalar();
-      break;
-    case TokenNameIntegerLiteral:
-    case TokenNameDoubleLiteral:
-    case TokenNameStringInterpolated:
-    case TokenNameFILE:
-    case TokenNameLINE:
-    case TokenNameCLASS_C:
-    case TokenNameMETHOD_C:
-    case TokenNameFUNC_C:
-      common_scalar();
-      break;
-    case TokenNameHEREDOC:
-      getNextToken();
-      break;
-    case TokenNamearray:
-      //    T_ARRAY '(' array_pair_list ')'
-      getNextToken();
-      if (token == TokenNameLPAREN) {
-        getNextToken();
-        if (token == TokenNameRPAREN) {
+        } finally {
+          scanner.encapsedStringStack.pop();
           getNextToken();
-          break;
-        }
-        array_pair_list();
-        if (token != TokenNameRPAREN) {
-          throwSyntaxError("')' expected after keyword 'array'" + "(Found token: " + scanner.toStringAction(token) + ")");
-        }
-        getNextToken();
-      } else {
-        throwSyntaxError("'(' expected after keyword 'array'" + "(Found token: " + scanner.toStringAction(token) + ")");
-      }
-      break;
-    case TokenNamelist:
-      //    | T_LIST '(' assignment_list ')' '=' expr
-      getNextToken();
-      if (token == TokenNameLPAREN) {
-        getNextToken();
-        assignment_list();
-        if (token != TokenNameRPAREN) {
-          throwSyntaxError("')' expected after 'list' keyword.");
-        }
-        getNextToken();
-        if (token != TokenNameEQUAL) {
-          throwSyntaxError("'=' expected after 'list' keyword.");
         }
+        break;
+      case TokenNameStringDoubleQuote:
+        expression = new StringLiteralDQ(scanner.getCurrentStringLiteralSource(), scanner.getCurrentTokenStartPosition(), scanner
+            .getCurrentTokenEndPosition());
+        common_scalar();
+        break;
+      case TokenNameStringSingleQuote:
+        expression = new StringLiteralSQ(scanner.getCurrentStringLiteralSource(), scanner.getCurrentTokenStartPosition(), scanner
+            .getCurrentTokenEndPosition());
+        common_scalar();
+        break;
+      case TokenNameIntegerLiteral:
+      case TokenNameDoubleLiteral:
+      case TokenNameStringInterpolated:
+      case TokenNameFILE:
+      case TokenNameLINE:
+      case TokenNameCLASS_C:
+      case TokenNameMETHOD_C:
+      case TokenNameFUNC_C:
+        common_scalar();
+        break;
+      case TokenNameHEREDOC:
         getNextToken();
-        expr();
-      } else {
-        throwSyntaxError("'(' expected after 'list' keyword.");
-      }
-      break;
-    case TokenNamenew:
-      //       | T_NEW class_name_reference ctor_arguments
-      getNextToken();
-      class_name_reference();
-      ctor_arguments();
-      break;
-    //         | T_INC rw_variable
-    //         | T_DEC rw_variable
-    case TokenNamePLUS_PLUS:
-    case TokenNameMINUS_MINUS:
-      getNextToken();
-      rw_variable();
-      break;
-    // | variable '=' expr
-    // | variable '=' '&' variable
-    // | variable '=' '&' T_NEW class_name_reference ctor_arguments
-    // | variable T_PLUS_EQUAL expr
-    // | variable T_MINUS_EQUAL expr
-    // | variable T_MUL_EQUAL expr
-    // | variable T_DIV_EQUAL expr
-    // | variable T_CONCAT_EQUAL expr
-    // | variable T_MOD_EQUAL expr
-    // | variable T_AND_EQUAL expr
-    // | variable T_OR_EQUAL expr
-    // | variable T_XOR_EQUAL expr
-    // | variable T_SL_EQUAL expr
-    // | variable T_SR_EQUAL expr
-    // | rw_variable T_INC
-    // | rw_variable T_DEC
-    case TokenNameIdentifier:
-    case TokenNameVariable:
-    case TokenNameDOLLAR:
-      variable();
-      switch (token) {
-      case TokenNameEQUAL:
+        break;
+      case TokenNamearray:
+        //    T_ARRAY '(' array_pair_list ')'
         getNextToken();
-        if (token == TokenNameAND) {
+        if (token == TokenNameLPAREN) {
           getNextToken();
-          if (token == TokenNamenew) {
-            // | variable '=' '&' T_NEW class_name_reference
-            // ctor_arguments
+          if (token == TokenNameRPAREN) {
             getNextToken();
-            class_name_reference();
-            ctor_arguments();
-          } else {
-            variable();
+            break;
           }
+          array_pair_list();
+          if (token != TokenNameRPAREN) {
+            throwSyntaxError("')' or ',' expected after keyword 'array'" + "(Found token: " + scanner.toStringAction(token) + ")");
+          }
+          getNextToken();
         } else {
+          throwSyntaxError("'(' expected after keyword 'array'" + "(Found token: " + scanner.toStringAction(token) + ")");
+        }
+        break;
+      case TokenNamelist:
+        //    | T_LIST '(' assignment_list ')' '=' expr
+        getNextToken();
+        if (token == TokenNameLPAREN) {
+          getNextToken();
+          assignment_list();
+          if (token != TokenNameRPAREN) {
+            throwSyntaxError("')' expected after 'list' keyword.");
+          }
+          getNextToken();
+          if (token != TokenNameEQUAL) {
+            throwSyntaxError("'=' expected after 'list' keyword.");
+          }
+          getNextToken();
           expr();
+        } else {
+          throwSyntaxError("'(' expected after 'list' keyword.");
         }
         break;
-      case TokenNamePLUS_EQUAL:
-      case TokenNameMINUS_EQUAL:
-      case TokenNameMULTIPLY_EQUAL:
-      case TokenNameDIVIDE_EQUAL:
-      case TokenNameDOT_EQUAL:
-      case TokenNameREMAINDER_EQUAL:
-      case TokenNameAND_EQUAL:
-      case TokenNameOR_EQUAL:
-      case TokenNameXOR_EQUAL:
-      case TokenNameRIGHT_SHIFT_EQUAL:
-      case TokenNameLEFT_SHIFT_EQUAL:
+      case TokenNamenew:
+        //     | T_NEW class_name_reference ctor_arguments
         getNextToken();
-        expr();
+        Expression typeRef = class_name_reference();
+        ctor_arguments();
+        if (typeRef != null) {
+          expression = typeRef;
+        }
         break;
+      //       | T_INC rw_variable
+      //       | T_DEC rw_variable
       case TokenNamePLUS_PLUS:
       case TokenNameMINUS_MINUS:
         getNextToken();
+        rw_variable();
+        break;
+      //       | variable '=' expr
+      //       | variable '=' '&' variable
+      //       | variable '=' '&' T_NEW class_name_reference ctor_arguments
+      //       | variable T_PLUS_EQUAL expr
+      //       | variable T_MINUS_EQUAL expr
+      //       | variable T_MUL_EQUAL expr
+      //       | variable T_DIV_EQUAL expr
+      //       | variable T_CONCAT_EQUAL expr
+      //       | variable T_MOD_EQUAL expr
+      //       | variable T_AND_EQUAL expr
+      //       | variable T_OR_EQUAL expr
+      //       | variable T_XOR_EQUAL expr
+      //       | variable T_SL_EQUAL expr
+      //       | variable T_SR_EQUAL expr
+      //       | rw_variable T_INC
+      //       | rw_variable T_DEC
+      case TokenNameIdentifier:
+      case TokenNameVariable:
+      case TokenNameDOLLAR:
+        boolean rememberedVar = false;
+        Expression lhs = variable();
+        switch (token) {
+        case TokenNameEQUAL:
+          getNextToken();
+          if (token == TokenNameAND) {
+            getNextToken();
+            if (token == TokenNamenew) {
+              // | variable '=' '&' T_NEW class_name_reference
+              // ctor_arguments
+              getNextToken();
+              SingleTypeReference classRef = class_name_reference();
+              ctor_arguments();
+              if (classRef != null) {
+                if (lhs != null && lhs instanceof FieldReference) {
+                  // example:
+                  // $var = & new Object();
+                  if (fMethodVariables != null) {
+                    VariableInfo lhsInfo = new VariableInfo(((FieldReference) lhs).sourceStart());
+                    lhsInfo.reference = classRef;
+                    lhsInfo.typeIdentifier = classRef.token;
+                    fMethodVariables.put(new String(((FieldReference) lhs).token), lhsInfo);
+                    rememberedVar = true;
+                  }
+                }
+              }
+            } else {
+              Expression rhs = variable();
+              if (rhs != null && rhs instanceof FieldReference && lhs != null && lhs instanceof FieldReference) {
+                // example:
+                // $var = &$ref;
+                if (fMethodVariables != null) {
+                  VariableInfo rhsInfo = (VariableInfo) fMethodVariables.get(((FieldReference) rhs).token);
+                  if (rhsInfo != null && rhsInfo.reference != null) {
+                    VariableInfo lhsInfo = new VariableInfo(((FieldReference) lhs).sourceStart());
+                    lhsInfo.reference = rhsInfo.reference;
+                    lhsInfo.typeIdentifier = rhsInfo.typeIdentifier;
+                    fMethodVariables.put(new String(((FieldReference) lhs).token), lhsInfo);
+                    rememberedVar = true;
+                  }
+                }
+              }
+            }
+          } else {
+            Expression rhs = expr();
+            if (lhs != null && lhs instanceof FieldReference) {
+              if (rhs != null && rhs instanceof FieldReference) {
+                // example:
+                // $var = $ref;
+                if (fMethodVariables != null) {
+                  VariableInfo rhsInfo = (VariableInfo) fMethodVariables.get(((FieldReference) rhs).token);
+                  if (rhsInfo != null && rhsInfo.reference != null) {
+                    VariableInfo lhsInfo = new VariableInfo(((FieldReference) lhs).sourceStart());
+                    lhsInfo.reference = rhsInfo.reference;
+                    lhsInfo.typeIdentifier = rhsInfo.typeIdentifier;
+                    fMethodVariables.put(new String(((FieldReference) lhs).token), lhsInfo);
+                    rememberedVar = true;
+                  }
+                }
+              } else if (rhs != null && rhs instanceof SingleTypeReference) {
+                // example:
+                // $var = new Object();
+                if (fMethodVariables != null) {
+                  VariableInfo lhsInfo = new VariableInfo(((FieldReference) lhs).sourceStart());
+                  lhsInfo.reference = (SingleTypeReference) rhs;
+                  lhsInfo.typeIdentifier = ((SingleTypeReference) rhs).token;
+                  fMethodVariables.put(new String(((FieldReference) lhs).token), lhsInfo);
+                  rememberedVar = true;
+                }
+              }
+            }
+          }
+          if (rememberedVar == false && lhs != null && lhs instanceof FieldReference) {
+            if (fMethodVariables != null) {
+              VariableInfo lhsInfo = new VariableInfo(((FieldReference) lhs).sourceStart());
+              fMethodVariables.put(new String(((FieldReference) lhs).token), lhsInfo);
+            }
+          }
+          break;
+        case TokenNamePLUS_EQUAL:
+        case TokenNameMINUS_EQUAL:
+        case TokenNameMULTIPLY_EQUAL:
+        case TokenNameDIVIDE_EQUAL:
+        case TokenNameDOT_EQUAL:
+        case TokenNameREMAINDER_EQUAL:
+        case TokenNameAND_EQUAL:
+        case TokenNameOR_EQUAL:
+        case TokenNameXOR_EQUAL:
+        case TokenNameRIGHT_SHIFT_EQUAL:
+        case TokenNameLEFT_SHIFT_EQUAL:
+          getNextToken();
+          expr();
+          break;
+        case TokenNamePLUS_PLUS:
+        case TokenNameMINUS_MINUS:
+          getNextToken();
+          break;
+        default:
+          if (!only_variable) {
+            throwSyntaxError("Variable expression not allowed (found token '" + scanner.toStringAction(token) + "').");
+          }
+          if (lhs != null) {
+            expression = lhs;
+          }
+        }
         break;
       default:
-        if (!only_variable) {
-          throwSyntaxError("Variable expression not allowed (found token '" + scanner.toStringAction(token) + "').");
+        if (token != TokenNameINLINE_HTML) {
+          if (token > TokenNameKEYWORD) {
+            getNextToken();
+            break;
+          } else {
+            throwSyntaxError("Error in expression (found token '" + scanner.toStringAction(token) + "').");
+          }
         }
+        return expression;
       }
-      break;
-    default:
-      if (token != TokenNameINLINE_HTML) {
-        if (token > TokenNameKEYWORD) {
+      if (Scanner.TRACE) {
+        System.out.println("TRACE: expr_without_variable() PART 2");
+      }
+      //       | expr T_BOOLEAN_OR expr
+      //       | expr T_BOOLEAN_AND expr
+      //       | expr T_LOGICAL_OR expr
+      //       | expr T_LOGICAL_AND expr
+      //       | expr T_LOGICAL_XOR expr
+      //       | expr '|' expr
+      //       | expr '&' expr
+      //       | expr '^' expr
+      //       | expr '.' expr
+      //       | expr '+' expr
+      //       | expr '-' expr
+      //       | expr '*' expr
+      //       | expr '/' expr
+      //       | expr '%' expr
+      //       | expr T_SL expr
+      //       | expr T_SR expr
+      //       | expr T_IS_IDENTICAL expr
+      //       | expr T_IS_NOT_IDENTICAL expr
+      //       | expr T_IS_EQUAL expr
+      //       | expr T_IS_NOT_EQUAL expr
+      //       | expr '<' expr
+      //       | expr T_IS_SMALLER_OR_EQUAL expr
+      //       | expr '>' expr
+      //       | expr T_IS_GREATER_OR_EQUAL expr
+      while (true) {
+        switch (token) {
+        case TokenNameOR_OR:
           getNextToken();
+          expression = new OR_OR_Expression(expression, expr(), token);
           break;
-        } else {
-          throwSyntaxError("Error in expression (found token '" + scanner.toStringAction(token) + "').");
+        case TokenNameAND_AND:
+          getNextToken();
+          expression = new AND_AND_Expression(expression, expr(), token);
+          break;
+        case TokenNameEQUAL_EQUAL:
+          getNextToken();
+          expression = new EqualExpression(expression, expr(), token);
+          break;
+        case TokenNameand:
+        case TokenNameor:
+        case TokenNamexor:
+        case TokenNameAND:
+        case TokenNameOR:
+        case TokenNameXOR:
+        case TokenNameDOT:
+        case TokenNamePLUS:
+        case TokenNameMINUS:
+        case TokenNameMULTIPLY:
+        case TokenNameDIVIDE:
+        case TokenNameREMAINDER:
+        case TokenNameLEFT_SHIFT:
+        case TokenNameRIGHT_SHIFT:
+        case TokenNameEQUAL_EQUAL_EQUAL:
+        case TokenNameNOT_EQUAL_EQUAL:
+        case TokenNameNOT_EQUAL:
+        case TokenNameLESS:
+        case TokenNameLESS_EQUAL:
+        case TokenNameGREATER:
+        case TokenNameGREATER_EQUAL:
+          getNextToken();
+          expression = new BinaryExpression(expression, expr(), token);
+          break;
+        //  | expr T_INSTANCEOF class_name_reference
+        //     | expr '?' expr ':' expr
+        case TokenNameinstanceof:
+          getNextToken();
+          TypeReference classRef = class_name_reference();
+          expression = new InstanceOfExpression(expression, classRef, OperatorIds.INSTANCEOF);
+          expression.sourceStart = exprSourceStart;
+          expression.sourceEnd = scanner.getCurrentTokenEndPosition();
+          break;
+        case TokenNameQUESTION:
+          getNextToken();
+          Expression valueIfTrue = expr();
+          if (token != TokenNameCOLON) {
+            throwSyntaxError("':' expected in conditional expression.");
+          }
+          getNextToken();
+          Expression valueIfFalse = expr();
+
+          expression = new ConditionalExpression(expression, valueIfTrue, valueIfFalse);
+          break;
+        default:
+          return expression;
         }
       }
-      return expression;
-    }
-    if (Scanner.TRACE) {
-      System.out.println("TRACE: expr_without_variable() PART 2");
-    }
-    // | expr T_BOOLEAN_OR expr
-    // | expr T_BOOLEAN_AND expr
-    // | expr T_LOGICAL_OR expr
-    // | expr T_LOGICAL_AND expr
-    // | expr T_LOGICAL_XOR expr
-    // | expr '|' expr
-    // | expr '&' expr
-    // | expr '^' expr
-    // | expr '.' expr
-    // | expr '+' expr
-    // | expr '-' expr
-    // | expr '*' expr
-    // | expr '/' expr
-    // | expr '%' expr
-    // | expr T_SL expr
-    // | expr T_SR expr
-    // | expr T_IS_IDENTICAL expr
-    // | expr T_IS_NOT_IDENTICAL expr
-    // | expr T_IS_EQUAL expr
-    // | expr T_IS_NOT_EQUAL expr
-    // | expr '<' expr
-    // | expr T_IS_SMALLER_OR_EQUAL expr
-    // | expr '>' expr
-    // | expr T_IS_GREATER_OR_EQUAL expr
-    while (true) {
-      switch (token) {
-      case TokenNameOR_OR:
-        getNextToken();
-        expression = new OR_OR_Expression(expression, expr(), token);
-        break;
-      case TokenNameAND_AND:
-        getNextToken();
-        expression = new AND_AND_Expression(expression, expr(), token);
-        break;
-      case TokenNameEQUAL_EQUAL:
-        getNextToken();
-        expression = new EqualExpression(expression, expr(), token);
-        break;
-      case TokenNameand:
-      case TokenNameor:
-      case TokenNamexor:
-      case TokenNameAND:
-      case TokenNameOR:
-      case TokenNameXOR:
-      case TokenNameDOT:
-      case TokenNamePLUS:
-      case TokenNameMINUS:
-      case TokenNameMULTIPLY:
-      case TokenNameDIVIDE:
-      case TokenNameREMAINDER:
-      case TokenNameLEFT_SHIFT:
-      case TokenNameRIGHT_SHIFT:
-      case TokenNameEQUAL_EQUAL_EQUAL:
-      case TokenNameNOT_EQUAL_EQUAL:
-      case TokenNameNOT_EQUAL:
-      case TokenNameLESS:
-      case TokenNameLESS_EQUAL:
-      case TokenNameGREATER:
-      case TokenNameGREATER_EQUAL:
-        getNextToken();
-        expression = new BinaryExpression(expression, expr(), token);
-        break;
-      //  | expr T_INSTANCEOF class_name_reference
-      //       | expr '?' expr ':' expr
-      case TokenNameinstanceof:
-        getNextToken();
-        class_name_reference();
-        // TODO use InstanceofExpression
-        expression = new Expression();
-        expression.sourceStart = exprSourceStart;
-        expression.sourceEnd = scanner.getCurrentTokenEndPosition();
-        break;
-      case TokenNameQUESTION:
+    } catch (SyntaxError e) {
+      // try to find next token after expression with errors:
+      if (token == TokenNameSEMICOLON) {
         getNextToken();
-        Expression valueIfTrue = expr();
-        if (token != TokenNameCOLON) {
-          throwSyntaxError("':' expected in conditional expression.");
-        }
+        return expression;
+      }
+      if (token == TokenNameRBRACE || token == TokenNameRPAREN || token == TokenNameRBRACKET) {
         getNextToken();
-        Expression valueIfFalse = expr();
-
-        expression = new ConditionalExpression(expression, valueIfTrue, valueIfFalse);
-        break;
-      default:
         return expression;
       }
+      throw e;
     }
   }
 
-  private void class_name_reference() {
+  private SingleTypeReference class_name_reference() {
     //  class_name_reference:
     // T_STRING
     //| dynamic_class_name_reference
+    SingleTypeReference ref = null;
     if (Scanner.TRACE) {
       System.out.println("TRACE: class_name_reference()");
     }
     if (token == TokenNameIdentifier) {
+      ref = new SingleTypeReference(scanner.getCurrentIdentifierSource(), scanner.getCurrentTokenStartPosition());
       getNextToken();
     } else {
+      ref = null;
       dynamic_class_name_reference();
     }
+    return ref;
   }
 
   private void dynamic_class_name_reference() {
@@ -2603,7 +2675,7 @@ public class Parser //extends PHPParserSuperclass
   //      }
   //    } while (true);
   //  }
-  private void variable_without_objects() {
+  private Expression variable_without_objects() {
     //  variable_without_objects:
     //                 reference_variable
     //         | simple_indirect_reference reference_variable
@@ -2613,10 +2685,10 @@ public class Parser //extends PHPParserSuperclass
     while (token == TokenNameDOLLAR) {
       getNextToken();
     }
-    reference_variable();
+    return reference_variable();
   }
 
-  private void function_call() {
+  private Expression function_call() {
     //  function_call:
     // T_STRING '(' function_call_parameter_list ')'
     //| class_constant '(' function_call_parameter_list ')'
@@ -2626,6 +2698,7 @@ public class Parser //extends PHPParserSuperclass
     char[] ident = null;
     int startPos = 0;
     int endPos = 0;
+    Expression ref = null;
     if (Scanner.TRACE) {
       System.out.println("TRACE: function_call()");
     }
@@ -2650,7 +2723,7 @@ public class Parser //extends PHPParserSuperclass
         break;
       }
     } else {
-      variable_without_objects();
+      ref = variable_without_objects();
     }
     if (token != TokenNameLPAREN) {
       if (defineName != null) {
@@ -2680,13 +2753,13 @@ public class Parser //extends PHPParserSuperclass
         }
       }
       // TODO is this ok ?
-      return;
+      return ref;
       //      throwSyntaxError("'(' expected in function call.");
     }
     getNextToken();
     if (token == TokenNameRPAREN) {
       getNextToken();
-      return;
+      return ref;
     }
     non_empty_function_call_parameter_list();
     if (token != TokenNameRPAREN) {
@@ -2699,6 +2772,7 @@ public class Parser //extends PHPParserSuperclass
       throwSyntaxError("')' expected in function call (" + functionName + ").");
     }
     getNextToken();
+    return ref;
   }
 
   //  private void function_call_parameter_list() {
@@ -2760,7 +2834,7 @@ public class Parser //extends PHPParserSuperclass
     variable_without_objects();
   }
 
-  private void base_variable_with_function_calls() {
+  private Expression base_variable_with_function_calls() {
     //  base_variable_with_function_calls:
     // base_variable
     //| function_call
@@ -2782,17 +2856,18 @@ public class Parser //extends PHPParserSuperclass
     //      scanner.phpMode = true;
     //    }
     //    if (functionCall) {
-    function_call();
+    return function_call();
     //    } else {
     //      base_variable();
     //    }
   }
 
-  private void base_variable() {
+  private Expression base_variable() {
     //  base_variable:
     //                 reference_variable
     //         | simple_indirect_reference reference_variable
     //         | static_member
+    Expression ref = null;
     if (Scanner.TRACE) {
       System.out.println("TRACE: base_variable()");
     }
@@ -2804,6 +2879,7 @@ public class Parser //extends PHPParserSuperclass
       }
       reference_variable();
     }
+    return ref;
   }
 
   //  private void simple_indirect_reference() {
@@ -2811,17 +2887,19 @@ public class Parser //extends PHPParserSuperclass
   //    // '$'
   //    //| simple_indirect_reference '$'
   //  }
-  private void reference_variable() {
+  private Expression reference_variable() {
     //  reference_variable:
     //                 reference_variable '[' dim_offset ']'
     //         | reference_variable '{' expr '}'
     //         | compound_variable
+    Expression ref = null;
     if (Scanner.TRACE) {
       System.out.println("TRACE: reference_variable()");
     }
-    compound_variable();
+    ref = compound_variable();
     while (true) {
       if (token == TokenNameLBRACE) {
+        ref = null;
         getNextToken();
         expr();
         if (token != TokenNameRBRACE) {
@@ -2829,6 +2907,7 @@ public class Parser //extends PHPParserSuperclass
         }
         getNextToken();
       } else if (token == TokenNameLBRACKET) {
+        ref = null;
         getNextToken();
         if (token != TokenNameRBRACKET) {
           expr();
@@ -2842,9 +2921,10 @@ public class Parser //extends PHPParserSuperclass
         break;
       }
     }
+    return ref;
   }
 
-  private void compound_variable() {
+  private Expression compound_variable() {
     //  compound_variable:
     //                 T_VARIABLE
     //         | '$' '{' expr '}'
@@ -2852,14 +2932,17 @@ public class Parser //extends PHPParserSuperclass
       System.out.println("TRACE: compound_variable()");
     }
     if (token == TokenNameVariable) {
+      FieldReference ref = new FieldReference(scanner.getCurrentIdentifierSource(), scanner.getCurrentTokenStartPosition());
       getNextToken();
+      return ref;
     } else {
       // because of simple_indirect_reference
       while (token == TokenNameDOLLAR) {
         getNextToken();
       }
       if (token != TokenNameLBRACE) {
-        throwSyntaxError("'{' expected after compound variable token '$'.");
+        reportSyntaxError("'{' expected after compound variable token '$'.");
+        return null;
       }
       getNextToken();
       expr();
@@ -2868,6 +2951,7 @@ public class Parser //extends PHPParserSuperclass
       }
       getNextToken();
     }
+    return null;
   }
 
   //  private void dim_offset() {
@@ -2961,44 +3045,20 @@ public class Parser //extends PHPParserSuperclass
     variable();
   }
 
-  private void variable() {
+  private Expression variable() {
     //    variable:
     //         base_variable_with_function_calls T_OBJECT_OPERATOR
     //                 object_property method_or_not variable_properties
     // | base_variable_with_function_calls
-    base_variable_with_function_calls();
+    Expression ref = base_variable_with_function_calls();
     if (token == TokenNameMINUS_GREATER) {
+      ref = null;
       getNextToken();
       object_property();
       method_or_not();
       variable_properties();
     }
-    //    if (token == TokenNameDOLLAR_LBRACE) {
-    //      getNextToken();
-    //      expr();
-    //      ;
-    //      if (token != TokenNameRBRACE) {
-    //        throwSyntaxError("'}' expected after indirect variable token '${'.");
-    //      }
-    //      getNextToken();
-    //    } else {
-    //      if (token == TokenNameVariable) {
-    //        getNextToken();
-    //        if (token == TokenNameLBRACKET) {
-    //          getNextToken();
-    //          expr();
-    //          if (token != TokenNameRBRACKET) {
-    //            throwSyntaxError("']' expected in variable-list.");
-    //          }
-    //          getNextToken();
-    //        } else if (token == TokenNameEQUAL) {
-    //          getNextToken();
-    //          static_scalar();
-    //        }
-    //      } else {
-    //        throwSyntaxError("$-variable expected in variable-list.");
-    //      }
-    //    }
+    return ref;
   }
 
   private void variable_properties() {
@@ -3308,7 +3368,6 @@ public class Parser //extends PHPParserSuperclass
 
   private void internal_functions_in_yacc() {
     //    int start = 0;
-    ImportReference impt = null;
     switch (token) {
     case TokenNameisset:
       //       T_ISSET '(' isset_variables ')'
@@ -3338,11 +3397,11 @@ public class Parser //extends PHPParserSuperclass
       break;
     case TokenNameinclude:
       //T_INCLUDE expr
-      checkFileName(token, impt);
+      checkFileName(token);
       break;
     case TokenNameinclude_once:
       //       T_INCLUDE_ONCE expr
-      checkFileName(token, impt);
+      checkFileName(token);
       break;
     case TokenNameeval:
       //       T_EVAL '(' expr ')'
@@ -3359,16 +3418,16 @@ public class Parser //extends PHPParserSuperclass
       break;
     case TokenNamerequire:
       //T_REQUIRE expr
-      checkFileName(token, impt);
+      checkFileName(token);
       break;
     case TokenNamerequire_once:
       //       T_REQUIRE_ONCE expr
-      checkFileName(token, impt);
+      checkFileName(token);
       break;
     }
   }
 
-  private void checkFileName(int includeToken, ImportReference impt) {
+  private void checkFileName(int includeToken) {
     //<include-token> expr
     int start = scanner.getCurrentTokenStartPosition();
     boolean hasLPAREN = false;
@@ -3385,7 +3444,19 @@ public class Parser //extends PHPParserSuperclass
         throwSyntaxError("')' expected for keyword '" + scanner.toStringAction(includeToken) + "'");
       }
     }
-    impt = new ImportReference(scanner.getCurrentTokenSource(start), start, scanner.getCurrentTokenEndPosition(), false);
+    char[] currTokenSource = scanner.getCurrentTokenSource(start);
+    IFile file = null;
+    if (scanner.compilationUnit != null) {
+      IResource resource = scanner.compilationUnit.getResource();
+      if (resource != null && resource instanceof IFile) {
+        file = (IFile) resource;
+      }
+    }
+    char[][] tokens;
+    tokens = new char[1][];
+    tokens[0] = currTokenSource;
+
+    ImportReference impt = new ImportReference(tokens, currTokenSource, start, scanner.getCurrentTokenEndPosition(), false);
     impt.declarationSourceEnd = impt.sourceEnd;
     impt.declarationEnd = impt.declarationSourceEnd;
     //endPosition is just before the ;
@@ -3410,30 +3481,32 @@ public class Parser //extends PHPParserSuperclass
         // assuming external include location
         return;
       }
-      if (scanner.compilationUnit != null) {
-        IResource resource = scanner.compilationUnit.getResource();
-        //        java.io.File f = new java.io.File(new String(compilationUnit.getFileName()));
-        //        System.out.println(expression.toStringExpression());
-        //      }
-        if (resource != null && resource instanceof IFile) {
-          // check the filename:
-          //      System.out.println(new String(compilationUnit.getFileName())+" - "+ expression.toStringExpression());
-          IProject project = resource.getProject();
-          if (project != null) {
-            IPath path = PHPFileUtil.determineFilePath(includeNameString, resource, project);
-            
-            if (path == null) {
-              //              reportSyntaxError("File: " + expression.toStringExpression() + " doesn't exist in project: "
-              //                  + project.getLocation().toString(), literal.sourceStart, literal.sourceEnd);
-              String[] args = { expression.toStringExpression(), project.getLocation().toString() };
-              problemReporter.phpIncludeNotExistWarning(args, literal.sourceStart, literal.sourceEnd, referenceContext,
-                  compilationUnit.compilationResult);
-            } else {
-              try {
-                impt.setFile( PHPFileUtil.createFile(path, project) );
-              } catch (Exception e) {
-                // the file is outside of the workspace
-              }
+      if (file != null) {
+        // check the filename:
+        //      System.out.println(new String(compilationUnit.getFileName())+" - "+ expression.toStringExpression());
+        IProject project = file.getProject();
+        if (project != null) {
+          IPath path = PHPFileUtil.determineFilePath(includeNameString, file, project);
+
+          if (path == null) {
+            //              reportSyntaxError("File: " + expression.toStringExpression() + " doesn't exist in project: "
+            //                  + project.getLocation().toString(), literal.sourceStart, literal.sourceEnd);
+            String[] args = { expression.toStringExpression(), project.getLocation().toString() };
+            problemReporter.phpIncludeNotExistWarning(args, literal.sourceStart, literal.sourceEnd, referenceContext,
+                compilationUnit.compilationResult);
+          } else {
+            try {
+              //              String projectPath = ProjectPrefUtil.getDocumentRoot(file.getProject()).toString();
+              //              String filePath = file.getRawLocation().toString();
+              String filePath = path.toString();
+              String ext = file.getRawLocation().getFileExtension();
+              int fileExtensionLength = ext == null ? 0 : ext.length() + 1;
+              int length;
+
+              impt.tokens = CharOperation.splitOn('/', filePath.toCharArray(), 0, filePath.length() - fileExtensionLength);
+              impt.setFile(PHPFileUtil.createFile(path, project));
+            } catch (Exception e) {
+              // the file is outside of the workspace
             }
           }
         }
@@ -3601,7 +3674,7 @@ public class Parser //extends PHPParserSuperclass
       }
       non_empty_static_array_pair_list();
       if (token != TokenNameRPAREN) {
-        throwSyntaxError("')' expected after keyword 'array'");
+        throwSyntaxError("')' or ',' expected after keyword 'array'");
       }
       getNextToken();
       break;
@@ -3759,6 +3832,13 @@ public class Parser //extends PHPParserSuperclass
 
   protected int nestedType, dimensions;
 
+  //variable set stack
+  final static int VariableStackIncrement = 10;
+
+  HashMap fTypeVariables = null;
+
+  HashMap fMethodVariables = null;
+
   //ast stack
   final static int AstStackIncrement = 100;
 
@@ -4236,4 +4316,31 @@ public class Parser //extends PHPParserSuperclass
     // modifiersFlag(int)
     this.scanner.commentPtr = -1;
   }
+
+  protected void consumePackageDeclarationName(IFile file) {
+    // create a package name similar to java package names
+    String projectPath = ProjectPrefUtil.getDocumentRoot(file.getProject()).toString();
+    String filePath = file.getRawLocation().toString();
+    String ext = file.getRawLocation().getFileExtension();
+    int fileExtensionLength = ext == null ? 0 : ext.length() + 1;
+    ImportReference impt;
+    int length;
+    char[][] tokens;
+    if (filePath.startsWith(projectPath)) {
+      tokens = CharOperation
+          .splitOn('/', filePath.toCharArray(), projectPath.length() + 1, filePath.length() - fileExtensionLength);
+    } else {
+      String name = file.getName();
+      tokens = new char[1][];
+      tokens[0] = name.substring(0, ext.length() - fileExtensionLength).toCharArray();
+    }
+
+    this.compilationUnit.currentPackage = impt = new ImportReference(tokens, new char[0], 0, 0, true);
+
+    impt.declarationSourceStart = 0;
+    impt.declarationSourceEnd = 0;
+    impt.declarationEnd = 0;
+    //endPosition is just before the ;
+
+  }
 }
\ No newline at end of file
index 4ed6bf2..1740a02 100644 (file)
@@ -213,9 +213,20 @@ public class Scanner implements IScanner, ITerminalSymbols {
   public ICompilationUnit compilationUnit = null;
 
   /**
+   * Determines if the specified character is permissible as the first character in a PHP identifier or
+   * variable
+   * 
+   * The '$' character for PHP variables is regarded as a correct first character !
+   * 
+   */
+  public static boolean isPHPIdentOrVarStart(char ch) {
+    return Character.isLetter(ch) || (ch == '$') ||(ch == '_') || (0x7F <= ch && ch <= 0xFF);
+  }
+  
+  /**
    * Determines if the specified character is permissible as the first character in a PHP identifier.
    * 
-   * The '$' character for HP variables isn't regarded as the first character !
+   * The '$' character for PHP variables isn't regarded as the first character !
    */
   public static boolean isPHPIdentifierStart(char ch) {
     return Character.isLetter(ch) || (ch == '_') || (0x7F <= ch && ch <= 0xFF);
@@ -322,7 +333,13 @@ public class Scanner implements IScanner, ITerminalSymbols {
     }
     return result;
   }
-
+  
+  public final char[] getRawTokenSourceEnd() {
+       int length = this.eofPosition - this.currentPosition - 1;
+       char[] sourceEnd = new char[length];
+       System.arraycopy(this.source, this.currentPosition, sourceEnd, 0, length);
+       return sourceEnd;       
+}
   public int getCurrentTokenStartPosition() {
     return this.startPosition;
   }
@@ -4237,8 +4254,8 @@ public class Scanner implements IScanner, ITerminalSymbols {
             continue nextTag;
 
           // ensure tag is not leaded with letter if tag starts with a letter
-          if (Character.isJavaIdentifierStart(tag[0])) {
-            if (Character.isJavaIdentifierPart(previous)) {
+          if (Scanner.isPHPIdentifierStart(tag[0])) {
+            if (Scanner.isPHPIdentifierPart(previous)) {
               continue nextTag;
             }
           }
@@ -4255,8 +4272,8 @@ public class Scanner implements IScanner, ITerminalSymbols {
             }
           }
           // ensure tag is not followed with letter if tag finishes with a letter
-          if (i + tagLength < commentEnd && Character.isJavaIdentifierPart(src[i + tagLength - 1])) {
-            if (Character.isJavaIdentifierPart(src[i + tagLength]))
+          if (i + tagLength < commentEnd && Scanner.isPHPIdentifierPart(src[i + tagLength - 1])) {
+            if (Scanner.isPHPIdentifierPart(src[i + tagLength]))
               continue nextTag;
           }
           if (this.foundTaskTags == null) {
index f9981b9..9785834 100644 (file)
@@ -7,6 +7,7 @@ import net.sourceforge.phpdt.internal.compiler.CompilationResult;
 import net.sourceforge.phpdt.internal.compiler.env.ICompilationUnit;
 import net.sourceforge.phpdt.internal.compiler.problem.AbortCompilation;
 import net.sourceforge.phpdt.internal.compiler.problem.ProblemReporter;
+import net.sourceforge.phpeclipse.internal.compiler.ast.ASTNode;
 import net.sourceforge.phpeclipse.internal.compiler.ast.CompilationUnitDeclaration;
 import net.sourceforge.phpeclipse.internal.compiler.ast.ConstructorDeclaration;
 import net.sourceforge.phpeclipse.internal.compiler.ast.FieldDeclaration;
@@ -222,7 +223,7 @@ public class UnitParser extends Parser {
 
     referenceContext = cd;
     compilationUnit = unit;
-
+    
     scanner.resetTo(cd.sourceEnd + 1, cd.declarationSourceEnd);
     try {
       parse();
@@ -284,7 +285,7 @@ public class UnitParser extends Parser {
 
     referenceContext = type;
     compilationUnit = unit;
-
+    
     scanner.setSource(initializationSource);
     scanner.resetTo(0, initializationSource.length - 1);
     try {
@@ -320,7 +321,7 @@ public class UnitParser extends Parser {
 
     referenceContext = type;
     compilationUnit = unit;
-
+    
     scanner.resetTo(ini.sourceStart, ini.sourceEnd); // just on the beginning {
     try {
       parse();
@@ -410,6 +411,7 @@ public class UnitParser extends Parser {
       /* unit creation */
       referenceContext =
         compilationUnit = new CompilationUnitDeclaration(problemReporter, compilationResult, scanner.source.length);
+      
       /* run automaton */
       parse();
     } catch (SyntaxError syntaxError) {
@@ -436,4 +438,48 @@ public class UnitParser extends Parser {
     }
     return parsedUnit;
   }
+  
+  public void getMethodBodies(CompilationUnitDeclaration unit) {
+       //fill the methods bodies in order for the code to be generated
+
+       if (unit == null) return;
+       
+       if (unit.ignoreMethodBodies) {
+               unit.ignoreFurtherInvestigation = true;
+               return;
+               // if initial diet parse did not work, no need to dig into method bodies.
+       }
+
+       if ((unit.bits & ASTNode.HasAllMethodBodies) != 0)
+               return; //work already done ...
+
+       //real parse of the method....
+       char[] contents = unit.compilationResult.compilationUnit.getContents();
+       this.scanner.setSource(contents);
+       
+       // save existing values to restore them at the end of the parsing process
+       // see bug 47079 for more details
+       int[] oldLineEnds = this.scanner.lineEnds;
+       int oldLinePtr = this.scanner.linePtr;
+
+       final int[] lineSeparatorPositions = unit.compilationResult.lineSeparatorPositions;
+       this.scanner.lineEnds = lineSeparatorPositions;
+       this.scanner.linePtr = lineSeparatorPositions.length - 1;
+
+//     if (this.javadocParser != null && this.javadocParser.checkDocComment) {
+//             this.javadocParser.scanner.setSource(contents);
+//     }
+       if (unit.types != null) {
+               for (int i = unit.types.size(); --i >= 0;)
+                       ((TypeDeclaration)unit.types.get(i)).parseMethod(this, unit);
+       }
+       
+       // tag unit has having read bodies
+       unit.bits |= ASTNode.HasAllMethodBodies;
+
+       // this is done to prevent any side effects on the compilation unit result
+       // line separator positions array.
+       this.scanner.lineEnds = oldLineEnds;
+       this.scanner.linePtr = oldLinePtr;
+}
 }
diff --git a/net.sourceforge.phpeclipse/src/net/sourceforge/phpdt/internal/compiler/parser/VariableInfo.java b/net.sourceforge.phpeclipse/src/net/sourceforge/phpdt/internal/compiler/parser/VariableInfo.java
new file mode 100644 (file)
index 0000000..ce09406
--- /dev/null
@@ -0,0 +1,34 @@
+package net.sourceforge.phpdt.internal.compiler.parser;
+
+import net.sourceforge.phpeclipse.internal.compiler.ast.SingleTypeReference;
+
+public class VariableInfo {
+  static final public int LEVEL_UNDEFINED = 0;
+
+  static final public int LEVEL_GLOBAL_VAR = 3;
+
+  static final public int LEVEL_STATIC_VAR = 4;
+
+  static final public int LEVEL_CLASS_UNIT = 5;
+
+  static final public int LEVEL_FUNCTION_DEFINITION = 6;
+
+  static final public int LEVEL_METHOD_DEFINITION = 7;
+
+  public int level = LEVEL_UNDEFINED;
+
+  int startPosition;
+
+  public SingleTypeReference reference = null;
+
+  public char[] typeIdentifier = null;
+  
+  public VariableInfo(int startPosition) {
+    this(startPosition, LEVEL_UNDEFINED);
+  }
+
+  public VariableInfo(int startPosition, int level) {
+    this.startPosition = startPosition;
+    this.level = level;
+  }
+}
\ No newline at end of file
index 83d80cf..c154b28 100644 (file)
@@ -176,7 +176,7 @@ public class DefaultProblem implements ProblemSeverities, IProblem {
        /**
         * Answer the type of problem.
         * 
-        * @see org.eclipse.jdt.core.compiler.IProblem#getID()
+        * @see net.sourceforge.phpdt.core.compiler.IProblem#getID()
         * @return int
         */
        public int getID() {
index fe0896d..33b6b24 100644 (file)
@@ -60,7 +60,7 @@ public DefaultProblemFactory(Locale loc) {
  * @param startPosition int
  * @param endPosition int
  * @param lineNumber int
- * @return org.eclipse.jdt.internal.compiler.IProblem
+ * @return net.sourceforge.phpdt.internal.compiler.IProblem
  */
 public IProblem createProblem(
        char[] originatingFileName, 
@@ -132,7 +132,7 @@ public final String getLocalizedMessage(int id, String[] problemArguments) {
        return output.toString();
 }
 /**
- * @param problem org.eclipse.jdt.internal.compiler.IProblem
+ * @param problem net.sourceforge.phpdt.internal.compiler.IProblem
  * @return String
  */
 public final String localizedMessage(IProblem problem) {
index b0f6fef..f29e11d 100644 (file)
@@ -160,7 +160,7 @@ public void record(IProblem problem, CompilationResult unitResult, ReferenceCont
 /**
  * Search the line number corresponding to a specific position
  *
- * @param methodBinding org.eclipse.jdt.internal.compiler.nameloopkup.SyntheticAccessMethodBinding
+ * @param methodBinding net.sourceforge.phpdt.internal.compiler.nameloopkup.SyntheticAccessMethodBinding
  */
 public static final int searchLineNumber(int[] startLineIndexes, int position) {
        if (startLineIndexes == null)
index 0be0218..3d5be38 100644 (file)
@@ -13,10 +13,12 @@ import net.sourceforge.phpdt.core.compiler.InvalidInputException;
 import net.sourceforge.phpdt.internal.compiler.CompilationResult;
 import net.sourceforge.phpdt.internal.compiler.IErrorHandlingPolicy;
 import net.sourceforge.phpdt.internal.compiler.IProblemFactory;
+import net.sourceforge.phpdt.internal.compiler.env.IConstants;
 import net.sourceforge.phpdt.internal.compiler.impl.CompilerOptions;
 import net.sourceforge.phpdt.internal.compiler.impl.Constant;
 import net.sourceforge.phpdt.internal.compiler.impl.ReferenceContext;
 import net.sourceforge.phpdt.internal.compiler.lookup.Binding;
+import net.sourceforge.phpdt.internal.compiler.lookup.CompilerModifiers;
 import net.sourceforge.phpdt.internal.compiler.lookup.FieldBinding;
 import net.sourceforge.phpdt.internal.compiler.lookup.LocalVariableBinding;
 import net.sourceforge.phpdt.internal.compiler.lookup.MethodBinding;
@@ -30,6 +32,7 @@ import net.sourceforge.phpdt.internal.compiler.lookup.TypeConstants;
 import net.sourceforge.phpdt.internal.compiler.parser.Parser;
 import net.sourceforge.phpdt.internal.compiler.parser.Scanner;
 import net.sourceforge.phpdt.internal.compiler.util.Util;
+import net.sourceforge.phpeclipse.internal.compiler.ast.ASTNode;
 import net.sourceforge.phpeclipse.internal.compiler.ast.AbstractMethodDeclaration;
 import net.sourceforge.phpeclipse.internal.compiler.ast.AbstractVariableDeclaration;
 import net.sourceforge.phpeclipse.internal.compiler.ast.AllocationExpression;
@@ -37,10 +40,9 @@ import net.sourceforge.phpeclipse.internal.compiler.ast.Argument;
 import net.sourceforge.phpeclipse.internal.compiler.ast.ArrayAllocationExpression;
 import net.sourceforge.phpeclipse.internal.compiler.ast.ArrayReference;
 import net.sourceforge.phpeclipse.internal.compiler.ast.Assignment;
-import net.sourceforge.phpeclipse.internal.compiler.ast.ASTNode;
 import net.sourceforge.phpeclipse.internal.compiler.ast.BinaryExpression;
 import net.sourceforge.phpeclipse.internal.compiler.ast.BranchStatement;
-import net.sourceforge.phpeclipse.internal.compiler.ast.Case;
+import net.sourceforge.phpeclipse.internal.compiler.ast.CaseStatement;
 import net.sourceforge.phpeclipse.internal.compiler.ast.CastExpression;
 import net.sourceforge.phpeclipse.internal.compiler.ast.CompilationUnitDeclaration;
 import net.sourceforge.phpeclipse.internal.compiler.ast.CompoundAssignment;
@@ -596,7 +598,7 @@ public class ProblemReporter extends ProblemHandler implements ProblemReasons {
         .shortReadableName()) }, location.sourceStart, location.sourceEnd);
   }
 
-  public void duplicateCase(Case statement, Constant constant) {
+  public void duplicateCase(CaseStatement statement, Constant constant) {
     String[] arguments = new String[] { String.valueOf(constant.intValue()) };
     this.handle(IProblem.DuplicateCase, arguments, arguments, statement.sourceStart, statement.sourceEnd);
   }
@@ -1592,9 +1594,402 @@ public class ProblemReporter extends ProblemHandler implements ProblemReasons {
         : compUnitDecl.sourceStart, compUnitDecl == null ? 1 : compUnitDecl.sourceEnd);
   }
 
-  public void maskedExceptionHandler(ReferenceBinding exceptionType, ASTNode location) {
-    this.handle(IProblem.MaskedCatch, NoArgument, NoArgument, location.sourceStart, location.sourceEnd);
-  }
+  public void javadocDuplicatedReturnTag(int sourceStart, int sourceEnd){
+       this.handle(IProblem.JavadocDuplicateReturnTag, NoArgument, NoArgument, sourceStart, sourceEnd);
+}
+public void javadocDeprecatedField(FieldBinding field, ASTNode location, int modifiers) {
+       if (javadocVisibility(this.options.reportInvalidJavadocTagsVisibility, modifiers)) {
+               this.handle(
+                       IProblem.JavadocUsingDeprecatedField,
+                       new String[] {new String(field.declaringClass.readableName()), new String(field.name)},
+                       new String[] {new String(field.declaringClass.shortReadableName()), new String(field.name)},
+                       location.sourceStart,
+                       location.sourceEnd);
+       }
+}
+public void javadocDeprecatedMethod(MethodBinding method, ASTNode location, int modifiers) {
+       if (javadocVisibility(this.options.reportInvalidJavadocTagsVisibility, modifiers)) {
+               if (method.isConstructor()) {
+                       this.handle(
+                               IProblem.JavadocUsingDeprecatedConstructor,
+                               new String[] {new String(method.declaringClass.readableName()), parametersAsString(method)},
+                               new String[] {new String(method.declaringClass.shortReadableName()), parametersAsShortString(method)},
+                               location.sourceStart,
+                               location.sourceEnd);
+               } else {
+                       this.handle(
+                               IProblem.JavadocUsingDeprecatedMethod,
+                               new String[] {new String(method.declaringClass.readableName()), new String(method.selector), parametersAsString(method)},
+                               new String[] {new String(method.declaringClass.shortReadableName()), new String(method.selector), parametersAsShortString(method)},
+                               location.sourceStart,
+                               location.sourceEnd);
+               }
+       }
+}
+public void javadocDeprecatedType(TypeBinding type, ASTNode location, int modifiers) {
+       if (location == null) return; // 1G828DN - no type ref for synthetic arguments
+       if (javadocVisibility(this.options.reportInvalidJavadocTagsVisibility, modifiers)) {
+               this.handle(
+                       IProblem.JavadocUsingDeprecatedType,
+                       new String[] {new String(type.readableName())},
+                       new String[] {new String(type.shortReadableName())},
+                       location.sourceStart,
+                       location.sourceEnd);
+       }
+}
+//public void javadocDuplicatedParamTag(JavadocSingleNameReference param, int modifiers) {
+//     if (javadocVisibility(this.options.reportInvalidJavadocTagsVisibility, modifiers)) {
+//             String[] arguments = new String[] {String.valueOf(param.token)};
+//             this.handle(IProblem.JavadocDuplicateParamName, arguments, arguments, param.sourceStart, param.sourceEnd);
+//     }
+//}
+public void javadocDuplicatedThrowsClassName(TypeReference typeReference, int modifiers) {
+       if (javadocVisibility(this.options.reportInvalidJavadocTagsVisibility, modifiers)) {
+               String[] arguments = new String[] {String.valueOf(typeReference.resolvedType.sourceName())};
+               this.handle(IProblem.JavadocDuplicateThrowsClassName, arguments, arguments, typeReference.sourceStart, typeReference.sourceEnd);
+       }
+}
+public void javadocErrorNoMethodFor(MessageSend messageSend, TypeBinding recType, TypeBinding[] params, int modifiers) {
+       StringBuffer buffer = new StringBuffer();
+       StringBuffer shortBuffer = new StringBuffer();
+       for (int i = 0, length = params.length; i < length; i++) {
+               if (i != 0){
+                       buffer.append(", "); //$NON-NLS-1$
+                       shortBuffer.append(", "); //$NON-NLS-1$
+               }
+               buffer.append(new String(params[i].readableName()));
+               shortBuffer.append(new String(params[i].shortReadableName()));
+       }
+
+       int id = recType.isArrayType() ? IProblem.JavadocNoMessageSendOnArrayType : IProblem.JavadocNoMessageSendOnBaseType;
+       if (javadocVisibility(this.options.reportInvalidJavadocTagsVisibility, modifiers)) {
+               this.handle(
+                       id,
+                       new String[] {new String(recType.readableName()), new String(messageSend.selector), buffer.toString()},
+                       new String[] {new String(recType.shortReadableName()), new String(messageSend.selector), shortBuffer.toString()},
+                       messageSend.sourceStart,
+                       messageSend.sourceEnd);
+       }
+}
+public void javadocInvalidConstructor(Statement statement, MethodBinding targetConstructor, int modifiers) {
+
+       if (!javadocVisibility(this.options.reportInvalidJavadocTagsVisibility, modifiers)) {
+               return;
+       }
+//     boolean insideDefaultConstructor = 
+//             (this.referenceContext instanceof ConstructorDeclaration)
+//                     && ((ConstructorDeclaration)this.referenceContext).isDefaultConstructor();
+//     boolean insideImplicitConstructorCall =
+//             (statement instanceof ExplicitConstructorCall)
+//                     && (((ExplicitConstructorCall) statement).accessMode == ExplicitConstructorCall.ImplicitSuper);
+
+       int id = IProblem.JavadocUndefinedConstructor; //default...
+       switch (targetConstructor.problemId()) {
+               case NotFound :
+//                     if (insideDefaultConstructor){
+//                             id = IProblem.JavadocUndefinedConstructorInDefaultConstructor;
+//                     } else if (insideImplicitConstructorCall){
+//                             id = IProblem.JavadocUndefinedConstructorInImplicitConstructorCall;
+//                     } else {
+                               id = IProblem.JavadocUndefinedConstructor;
+//                     }
+                       break;
+               case NotVisible :
+//                     if (insideDefaultConstructor){
+//                             id = IProblem.JavadocNotVisibleConstructorInDefaultConstructor;
+//                     } else if (insideImplicitConstructorCall){
+//                             id = IProblem.JavadocNotVisibleConstructorInImplicitConstructorCall;
+//                     } else {
+                               id = IProblem.JavadocNotVisibleConstructor;
+//                     }
+                       break;
+               case Ambiguous :
+//                     if (insideDefaultConstructor){
+//                             id = IProblem.AmbiguousConstructorInDefaultConstructor;
+//                     } else if (insideImplicitConstructorCall){
+//                             id = IProblem.AmbiguousConstructorInImplicitConstructorCall;
+//                     } else {
+                               id = IProblem.JavadocAmbiguousConstructor;
+//                     }
+                       break;
+               case NoError : // 0
+               default :
+                       needImplementation(); // want to fail to see why we were here...
+                       break;
+       }
+
+       this.handle(
+               id,
+               new String[] {new String(targetConstructor.declaringClass.readableName()), parametersAsString(targetConstructor)},
+               new String[] {new String(targetConstructor.declaringClass.shortReadableName()), parametersAsShortString(targetConstructor)},
+               statement.sourceStart,
+               statement.sourceEnd);
+}
+public void javadocAmbiguousMethodReference(int sourceStart, int sourceEnd, Binding fieldBinding, int modifiers) {
+       int id = IProblem.JavadocAmbiguousMethodReference;
+       if (javadocVisibility(this.options.reportInvalidJavadocTagsVisibility, modifiers)) {
+               String[] arguments = new String[] {new String(fieldBinding.readableName())};
+               handle(id, arguments, arguments, sourceStart, sourceEnd);
+       }
+}
+/*
+ * Similar implementation than invalidField(FieldReference...)
+ * Note that following problem id cannot occur for Javadoc:
+ *     - NonStaticReferenceInStaticContext :
+ *     - NonStaticReferenceInConstructorInvocation :
+ *     - ReceiverTypeNotVisible :
+ */
+public void javadocInvalidField(int sourceStart, int sourceEnd, Binding fieldBinding, TypeBinding searchedType, int modifiers) {
+       int id = IProblem.JavadocUndefinedField;
+       switch (fieldBinding.problemId()) {
+               case NotFound :
+                       id = IProblem.JavadocUndefinedField;
+                       break;
+               case NotVisible :
+                       id = IProblem.JavadocNotVisibleField;
+                       break;
+               case Ambiguous :
+                       id = IProblem.JavadocAmbiguousField;
+                       break;
+               case InheritedNameHidesEnclosingName :
+                       id = IProblem.JavadocInheritedFieldHidesEnclosingName;
+                       break;
+               case NoError : // 0
+               default :
+                       needImplementation(); // want to fail to see why we were here...
+                       break;
+       }
+
+       if (javadocVisibility(this.options.reportInvalidJavadocTagsVisibility, modifiers)) {
+               String[] arguments = new String[] {new String(fieldBinding.readableName())};
+               handle(id, arguments, arguments, sourceStart, sourceEnd);
+       }
+}
+/*
+ * Similar implementation than invalidMethod(MessageSend...)
+ * Note that following problem id cannot occur for Javadoc:
+ *     - NonStaticReferenceInStaticContext :
+ *     - NonStaticReferenceInConstructorInvocation :
+ *     - ReceiverTypeNotVisible :
+ */
+public void javadocInvalidMethod(MessageSend messageSend, MethodBinding method, int modifiers) {
+       if (!javadocVisibility(this.options.reportInvalidJavadocTagsVisibility, modifiers)) {
+               return;
+       }
+       int id = IProblem.JavadocUndefinedMethod; //default...
+       switch (method.problemId()) {
+               case NotFound :
+                       id = IProblem.JavadocUndefinedMethod;
+                       break;
+               case NotVisible :
+                       id = IProblem.JavadocNotVisibleMethod;
+                       break;
+               case Ambiguous :
+                       id = IProblem.JavadocAmbiguousMethod;
+                       break;
+               case InheritedNameHidesEnclosingName :
+                       id = IProblem.JavadocInheritedMethodHidesEnclosingName;
+                       break;
+               case NoError : // 0
+               default :
+                       needImplementation(); // want to fail to see why we were here...
+                       break;
+       }
+
+       if (id == IProblem.JavadocUndefinedMethod) {
+               ProblemMethodBinding problemMethod = (ProblemMethodBinding) method;
+               if (problemMethod.closestMatch != null) {
+                               String closestParameterTypeNames = parametersAsString(problemMethod.closestMatch);
+                               String parameterTypeNames = parametersAsString(method);
+                               String closestParameterTypeShortNames = parametersAsShortString(problemMethod.closestMatch);
+                               String parameterTypeShortNames = parametersAsShortString(method);
+                               if (closestParameterTypeShortNames.equals(parameterTypeShortNames)){
+                                       closestParameterTypeShortNames = closestParameterTypeNames;
+                                       parameterTypeShortNames = parameterTypeNames;
+                               }
+                               this.handle(
+                                       IProblem.JavadocParameterMismatch,
+                                       new String[] {
+                                               new String(problemMethod.closestMatch.declaringClass.readableName()),
+                                               new String(problemMethod.closestMatch.selector),
+                                               closestParameterTypeNames,
+                                               parameterTypeNames 
+                                       },
+                                       new String[] {
+                                               new String(problemMethod.closestMatch.declaringClass.shortReadableName()),
+                                               new String(problemMethod.closestMatch.selector),
+                                               closestParameterTypeShortNames,
+                                               parameterTypeShortNames
+                                       },
+                                       (int) (messageSend.nameSourcePosition >>> 32),
+                                       (int) messageSend.nameSourcePosition);
+                               return;
+               }
+       }
+
+       this.handle(
+               id,
+               new String[] {
+                       new String(method.declaringClass.readableName()),
+                       new String(method.selector), parametersAsString(method)},
+               new String[] {
+                       new String(method.declaringClass.shortReadableName()),
+                       new String(method.selector), parametersAsShortString(method)},
+               (int) (messageSend.nameSourcePosition >>> 32),
+               (int) messageSend.nameSourcePosition);
+}
+//public void javadocInvalidParamName(JavadocSingleNameReference param, int modifiers) {
+//     if (javadocVisibility(this.options.reportInvalidJavadocTagsVisibility, modifiers)) {
+//             String[] arguments = new String[] {String.valueOf(param.token)};
+//             this.handle(IProblem.JavadocInvalidParamName, arguments, arguments, param.sourceStart, param.sourceEnd);
+//     }
+//}
+public void javadocInvalidSeeReference(int sourceStart, int sourceEnd) {
+       this.handle(IProblem.JavadocInvalidSeeReference, NoArgument, NoArgument, sourceStart, sourceEnd);
+}
+public void javadocInvalidSeeReferenceArgs(int sourceStart, int sourceEnd) {
+       this.handle(IProblem.JavadocInvalidSeeArgs, NoArgument, NoArgument, sourceStart, sourceEnd);
+}
+public void javadocInvalidSeeUrlReference(int sourceStart, int sourceEnd) {
+       this.handle(IProblem.JavadocInvalidSeeHref, NoArgument, NoArgument, sourceStart, sourceEnd);
+}
+public void javadocInvalidTag(int sourceStart, int sourceEnd) {
+       this.handle(IProblem.JavadocInvalidTag, NoArgument, NoArgument, sourceStart, sourceEnd);
+}
+public void javadocInvalidThrowsClass(int sourceStart, int sourceEnd) {
+       this.handle(IProblem.JavadocInvalidThrowsClass, NoArgument, NoArgument, sourceStart, sourceEnd);
+}
+public void javadocInvalidThrowsClassName(TypeReference typeReference, int modifiers) {
+       if (javadocVisibility(this.options.reportInvalidJavadocTagsVisibility, modifiers)) {
+               String[] arguments = new String[] {String.valueOf(typeReference.resolvedType.sourceName())};
+               this.handle(IProblem.JavadocInvalidThrowsClassName, arguments, arguments, typeReference.sourceStart, typeReference.sourceEnd);
+       }
+}
+public void javadocInvalidType(ASTNode location, TypeBinding type, int modifiers) {
+       if (javadocVisibility(this.options.reportInvalidJavadocTagsVisibility, modifiers)) {
+               int id = IProblem.JavadocUndefinedType; // default
+               switch (type.problemId()) {
+                       case NotFound :
+                               id = IProblem.JavadocUndefinedType;
+                               break;
+                       case NotVisible :
+                               id = IProblem.JavadocNotVisibleType;
+                               break;
+                       case Ambiguous :
+                               id = IProblem.JavadocAmbiguousType;
+                               break;
+                       case InternalNameProvided :
+                               id = IProblem.JavadocInternalTypeNameProvided;
+                               break;
+                       case InheritedNameHidesEnclosingName :
+                               id = IProblem.JavadocInheritedNameHidesEnclosingTypeName;
+                               break;
+                       case NoError : // 0
+                       default :
+                               needImplementation(); // want to fail to see why we were here...
+                               break;
+               }
+               this.handle(
+                       id,
+                       new String[] {new String(type.readableName())},
+                       new String[] {new String(type.shortReadableName())},
+                       location.sourceStart,
+                       location.sourceEnd);
+       }
+}
+public void javadocMalformedSeeReference(int sourceStart, int sourceEnd) {
+       this.handle(IProblem.JavadocMalformedSeeReference, NoArgument, NoArgument, sourceStart, sourceEnd);
+}
+public void javadocMissing(int sourceStart, int sourceEnd, int modifiers){
+       boolean overriding = (modifiers & (CompilerModifiers.AccImplementing+CompilerModifiers.AccOverriding)) != 0;
+       boolean report = (this.options.getSeverity(CompilerOptions.MissingJavadocComments) != ProblemSeverities.Ignore)
+                                       && (!overriding || this.options.reportMissingJavadocCommentsOverriding);
+       if (report) {
+               String arg = javadocVisibilityArgument(this.options.reportMissingJavadocCommentsVisibility, modifiers);
+               if (arg != null) {
+                       String[] arguments = new String[] { arg };
+                       this.handle(IProblem.JavadocMissing, arguments, arguments, sourceStart, sourceEnd);
+               }
+       }
+}
+public void javadocMissingParamName(int sourceStart, int sourceEnd){
+       this.handle(IProblem.JavadocMissingParamName, NoArgument, NoArgument, sourceStart, sourceEnd);
+}
+public void javadocMissingParamTag(Argument param, int modifiers) {
+       boolean overriding = (modifiers & (CompilerModifiers.AccImplementing+CompilerModifiers.AccOverriding)) != 0;
+       boolean report = (this.options.getSeverity(CompilerOptions.MissingJavadocTags) != ProblemSeverities.Ignore)
+                                       && (!overriding || this.options.reportMissingJavadocTagsOverriding);
+       if (report && javadocVisibility(this.options.reportMissingJavadocTagsVisibility, modifiers)) {
+               String[] arguments = new String[] { String.valueOf(param.name) };
+               this.handle(IProblem.JavadocMissingParamTag, arguments, arguments, param.sourceStart, param.sourceEnd);
+       }
+}
+public void javadocMissingReturnTag(int sourceStart, int sourceEnd, int modifiers){
+       boolean overriding = (modifiers & (CompilerModifiers.AccImplementing+CompilerModifiers.AccOverriding)) != 0;
+       boolean report = (this.options.getSeverity(CompilerOptions.MissingJavadocTags) != ProblemSeverities.Ignore)
+                                       && (!overriding || this.options.reportMissingJavadocTagsOverriding);
+       if (report && javadocVisibility(this.options.reportMissingJavadocTagsVisibility, modifiers)) {
+               this.handle(IProblem.JavadocMissingReturnTag, NoArgument, NoArgument, sourceStart, sourceEnd);
+       }
+}
+public void javadocMissingSeeReference(int sourceStart, int sourceEnd){
+       this.handle(IProblem.JavadocMissingSeeReference, NoArgument, NoArgument, sourceStart, sourceEnd);
+}
+public void javadocMissingThrowsClassName(int sourceStart, int sourceEnd){
+       this.handle(IProblem.JavadocMissingThrowsClassName, NoArgument, NoArgument, sourceStart, sourceEnd);
+}
+public void javadocMissingThrowsTag(TypeReference typeRef, int modifiers){
+       boolean overriding = (modifiers & (CompilerModifiers.AccImplementing+CompilerModifiers.AccOverriding)) != 0;
+       boolean report = (this.options.getSeverity(CompilerOptions.MissingJavadocTags) != ProblemSeverities.Ignore)
+                                       && (!overriding || this.options.reportMissingJavadocTagsOverriding);
+       if (report && javadocVisibility(this.options.reportMissingJavadocTagsVisibility, modifiers)) {
+               String[] arguments = new String[] { String.valueOf(typeRef.resolvedType.sourceName()) };
+               this.handle(IProblem.JavadocMissingThrowsTag, arguments, arguments, typeRef.sourceStart, typeRef.sourceEnd);
+       }
+}
+public void javadocUnexpectedTag(int sourceStart, int sourceEnd) {
+       this.handle(IProblem.JavadocUnexpectedTag, NoArgument, NoArgument, sourceStart, sourceEnd);
+}
+public void javadocUnterminatedInlineTag(int sourceStart, int sourceEnd) {
+       this.handle(IProblem.JavadocUnterminatedInlineTag, NoArgument, NoArgument, sourceStart, sourceEnd);
+}
+private boolean javadocVisibility(int visibility, int modifiers) {
+       switch (modifiers & CompilerModifiers.AccVisibilityMASK) {
+               case IConstants.AccPublic :
+                       return true;
+               case IConstants.AccProtected:
+                       return (visibility != IConstants.AccPublic);
+//             case IConstants.AccDefault:
+//                     return (visibility == IConstants.AccDefault || visibility == IConstants.AccPrivate);
+               case IConstants.AccPrivate:
+                       return (visibility == IConstants.AccPrivate);
+       }
+       return true;
+}
+private String javadocVisibilityArgument(int visibility, int modifiers) {
+       String argument = null;
+       switch (modifiers & CompilerModifiers.AccVisibilityMASK) {
+               case IConstants.AccPublic :
+                       argument = CompilerOptions.PUBLIC;
+                       break;
+               case IConstants.AccProtected:
+                       if (visibility != IConstants.AccPublic) {
+                               argument = CompilerOptions.PROTECTED;
+                       }
+                       break;
+//             case IConstants.AccDefault:
+//                     if (visibility == IConstants.AccDefault || visibility == IConstants.AccPrivate) {
+//                             argument = CompilerOptions.DEFAULT;
+//                     }
+//                     break;
+               case IConstants.AccPrivate:
+                       if (visibility == IConstants.AccPrivate) {
+                               argument = CompilerOptions.PRIVATE;
+                       }
+                       break;
+       }
+       return argument;
+}
 
   public void methodNeedingAbstractModifier(MethodDeclaration methodDecl) {
     this.handle(IProblem.MethodRequiresBody, NoArgument, NoArgument, methodDecl.sourceStart, methodDecl.sourceEnd);
diff --git a/net.sourceforge.phpeclipse/src/net/sourceforge/phpdt/internal/compiler/util/HashtableOfIntValues.java b/net.sourceforge.phpeclipse/src/net/sourceforge/phpdt/internal/compiler/util/HashtableOfIntValues.java
new file mode 100644 (file)
index 0000000..f7e6bb7
--- /dev/null
@@ -0,0 +1,148 @@
+/*******************************************************************************
+ * Copyright (c) 2000, 2004 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials 
+ * are made available under the terms of the Common Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/cpl-v10.html
+ * 
+ * Contributors:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+package net.sourceforge.phpdt.internal.compiler.util;
+
+import net.sourceforge.phpdt.core.compiler.CharOperation;
+
+/**
+ * Hashtable of {char[] --> int}
+ */
+public final class HashtableOfIntValues implements Cloneable {
+       
+       public static final int NO_VALUE = Integer.MIN_VALUE;
+       
+       // to avoid using Enumerations, walk the individual tables skipping nulls
+       public char[] keyTable[];
+       public int valueTable[];
+
+       public int elementSize; // number of elements in the table
+       int threshold;
+
+       public HashtableOfIntValues() {
+               this(13);
+       }
+
+       public HashtableOfIntValues(int size) {
+
+               this.elementSize = 0;
+               this.threshold = size; // size represents the expected number of elements
+               int extraRoom = (int) (size * 1.75f);
+               if (this.threshold == extraRoom)
+                       extraRoom++;
+               this.keyTable = new char[extraRoom][];
+               this.valueTable = new int[extraRoom];
+       }
+
+       public Object clone() throws CloneNotSupportedException {
+               HashtableOfIntValues result = (HashtableOfIntValues) super.clone();
+               result.elementSize = this.elementSize;
+               result.threshold = this.threshold;
+
+               int length = this.keyTable.length;
+               result.keyTable = new char[length][];
+               System.arraycopy(this.keyTable, 0, result.keyTable, 0, length);
+
+               length = this.valueTable.length;
+               result.valueTable = new int[length];
+               System.arraycopy(this.valueTable, 0, result.valueTable, 0, length);
+               return result;
+       }
+
+       public boolean containsKey(char[] key) {
+
+               int index = CharOperation.hashCode(key) % valueTable.length;
+               int keyLength = key.length;
+               char[] currentKey;
+               while ((currentKey = keyTable[index]) != null) {
+                       if (currentKey.length == keyLength && CharOperation.equals(currentKey, key))
+                               return true;
+                       index = (index + 1) % keyTable.length;
+               }
+               return false;
+       }
+
+       public int get(char[] key) {
+
+               int index = CharOperation.hashCode(key) % valueTable.length;
+               int keyLength = key.length;
+               char[] currentKey;
+               while ((currentKey = keyTable[index]) != null) {
+                       if (currentKey.length == keyLength && CharOperation.equals(currentKey, key))
+                               return valueTable[index];
+                       index = (index + 1) % keyTable.length;
+               }
+               return NO_VALUE;
+       }
+
+       public int put(char[] key, int value) {
+
+               int index = CharOperation.hashCode(key) % valueTable.length;
+               int keyLength = key.length;
+               char[] currentKey;
+               while ((currentKey = keyTable[index]) != null) {
+                       if (currentKey.length == keyLength && CharOperation.equals(currentKey, key))
+                               return valueTable[index] = value;
+                       index = (index + 1) % keyTable.length;
+               }
+               keyTable[index] = key;
+               valueTable[index] = value;
+
+               // assumes the threshold is never equal to the size of the table
+               if (++elementSize > threshold)
+                       rehash();
+               return value;
+       }
+
+       public int removeKey(char[] key) {
+
+               int index = CharOperation.hashCode(key) % valueTable.length;
+               int keyLength = key.length;
+               char[] currentKey;
+               while ((currentKey = keyTable[index]) != null) {
+                       if (currentKey.length == keyLength && CharOperation.equals(currentKey, key)) {
+                               int value = valueTable[index];
+                               elementSize--;
+                               keyTable[index] = null;
+                               valueTable[index] = NO_VALUE;
+                               rehash();
+                               return value;
+                       }
+                       index = (index + 1) % keyTable.length;
+               }
+               return NO_VALUE;
+       }
+
+       private void rehash() {
+
+               HashtableOfIntValues newHashtable = new HashtableOfIntValues(elementSize * 2);          // double the number of expected elements
+               char[] currentKey;
+               for (int i = keyTable.length; --i >= 0;)
+                       if ((currentKey = keyTable[i]) != null)
+                               newHashtable.put(currentKey, valueTable[i]);
+
+               this.keyTable = newHashtable.keyTable;
+               this.valueTable = newHashtable.valueTable;
+               this.threshold = newHashtable.threshold;
+       }
+
+       public int size() {
+               return elementSize;
+       }
+
+       public String toString() {
+               String s = ""; //$NON-NLS-1$
+               char[] key;
+               for (int i = 0, length = valueTable.length; i < length; i++)
+                       if ((key = keyTable[i]) != null)
+                               s += new String(key) + " -> " + valueTable[i] + "\n";   //$NON-NLS-2$ //$NON-NLS-1$
+               return s;
+       }
+}
diff --git a/net.sourceforge.phpeclipse/src/net/sourceforge/phpdt/internal/compiler/util/SuffixConstants.java b/net.sourceforge.phpeclipse/src/net/sourceforge/phpdt/internal/compiler/util/SuffixConstants.java
new file mode 100644 (file)
index 0000000..972bf8a
--- /dev/null
@@ -0,0 +1,43 @@
+/*******************************************************************************
+ * Copyright (c) 2000, 2004 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials 
+ * are made available under the terms of the Common Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/cpl-v10.html
+ * 
+ * Contributors:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+package net.sourceforge.phpdt.internal.compiler.util;
+
+public interface SuffixConstants {
+//     public final static String EXTENSION_class = "class"; //$NON-NLS-1$
+//     public final static String EXTENSION_CLASS = "CLASS"; //$NON-NLS-1$
+       public final static String EXTENSION_php = "php"; //$NON-NLS-1$
+       public final static String EXTENSION_PHP = "PHP"; //$NON-NLS-1$
+       
+//     public final static String SUFFIX_STRING_class = "." + EXTENSION_class; //$NON-NLS-1$
+//     public final static String SUFFIX_STRING_CLASS = "." + EXTENSION_CLASS; //$NON-NLS-1$
+       public final static String SUFFIX_STRING_php = "." + EXTENSION_php; //$NON-NLS-1$
+       public final static String SUFFIX_STRING_PHP = "." + EXTENSION_PHP; //$NON-NLS-1$
+       
+//     public final static char[] SUFFIX_class = SUFFIX_STRING_class.toCharArray();
+//     public final static char[] SUFFIX_CLASS = SUFFIX_STRING_CLASS.toCharArray();
+       public final static char[] SUFFIX_php = SUFFIX_STRING_php.toCharArray();
+       public final static char[] SUFFIX_PHP = SUFFIX_STRING_PHP.toCharArray();
+       
+//     public final static String EXTENSION_jar = "jar"; //$NON-NLS-1$
+//     public final static String EXTENSION_JAR = "JAR"; //$NON-NLS-1$
+//     public final static String EXTENSION_zip = "zip"; //$NON-NLS-1$
+//     public final static String EXTENSION_ZIP = "ZIP"; //$NON-NLS-1$
+
+//     public final static String SUFFIX_STRING_jar = "." + EXTENSION_jar; //$NON-NLS-1$
+//     public final static String SUFFIX_STRING_JAR = "." + EXTENSION_JAR; //$NON-NLS-1$
+//     public final static String SUFFIX_STRING_zip = "." + EXTENSION_zip; //$NON-NLS-1$
+//     public final static String SUFFIX_STRING_ZIP = "." + EXTENSION_ZIP; //$NON-NLS-1$
+
+//     public final static char[] SUFFIX_jar = SUFFIX_STRING_jar.toCharArray();
+//     public final static char[] SUFFIX_JAR = SUFFIX_STRING_JAR.toCharArray();
+//     public final static char[] SUFFIX_zip = SUFFIX_STRING_zip.toCharArray(); 
+//     public final static char[] SUFFIX_ZIP = SUFFIX_STRING_ZIP.toCharArray();
+}
\ No newline at end of file
index b286f8f..be36943 100644 (file)
@@ -29,7 +29,7 @@ public class BatchOperation extends JavaModelOperation {
        }
 
        /* (non-Javadoc)
-        * @see org.eclipse.jdt.internal.core.JavaModelOperation#executeOperation()
+        * @see net.sourceforge.phpdt.internal.core.JavaModelOperation#executeOperation()
         */
        protected void executeOperation() throws JavaModelException {
                try {
@@ -50,7 +50,7 @@ public class BatchOperation extends JavaModelOperation {
        }
        
        /* (non-Javadoc)
-        * @see org.eclipse.jdt.internal.core.JavaModelOperation#verify()
+        * @see net.sourceforge.phpdt.internal.core.JavaModelOperation#verify()
         */
        protected IJavaModelStatus verify() {
                // cannot verify user defined operation
index 2eb68cc..a12e82a 100644 (file)
@@ -32,7 +32,7 @@ public class BufferFactoryWrapper extends WorkingCopyOwner {
        }
 
        /* (non-Javadoc)
-        * @see org.eclipse.jdt.core.WorkingCopyOwner#createBuffer(org.eclipse.jdt.core.ICompilationUnit)
+        * @see net.sourceforge.phpdt.core.WorkingCopyOwner#createBuffer(net.sourceforge.phpdt.core.ICompilationUnit)
         */
        public IBuffer createBuffer(ICompilationUnit workingCopy) {
                if (this.factory == null) return super.createBuffer(workingCopy);
index 8237f92..6ca5c30 100644 (file)
  *******************************************************************************/
 package net.sourceforge.phpdt.internal.core;
 
+import java.io.File;
 import java.util.HashMap;
+import java.util.HashSet;
 
 import net.sourceforge.phpdt.core.IClasspathEntry;
+import net.sourceforge.phpdt.core.IJavaModelStatus;
+import net.sourceforge.phpdt.core.IJavaModelStatusConstants;
 import net.sourceforge.phpdt.core.IJavaProject;
 import net.sourceforge.phpdt.core.IPackageFragmentRoot;
 import net.sourceforge.phpdt.core.JavaCore;
 import net.sourceforge.phpdt.core.JavaModelException;
 import net.sourceforge.phpdt.core.compiler.CharOperation;
+import net.sourceforge.phpdt.internal.compiler.impl.CompilerOptions;
 import net.sourceforge.phpdt.internal.core.util.Util;
 import net.sourceforge.phpdt.internal.corext.Assert;
+import net.sourceforge.phpeclipse.PHPeclipsePlugin;
 
+import org.eclipse.core.resources.IProject;
+import org.eclipse.core.resources.IResource;
+import org.eclipse.core.resources.IWorkspaceRoot;
+import org.eclipse.core.resources.ResourcesPlugin;
+import org.eclipse.core.runtime.CoreException;
 import org.eclipse.core.runtime.IPath;
 import org.eclipse.core.runtime.Path;
 import org.w3c.dom.Document;
@@ -66,16 +77,26 @@ public class ClasspathEntry implements IClasspathEntry {
         */
        public IPath path;
 
+       
        /**
-        * Patterns allowing to exclude portions of the resource tree denoted by this entry path.
+        * Patterns allowing to include/exclude portions of the resource tree denoted by this entry path.
         */
-       
+       public IPath[] inclusionPatterns;
+       private char[][] fullCharInclusionPatterns;
        public IPath[] exclusionPatterns;
        private char[][] fullCharExclusionPatterns;
        private final static char[][] UNINIT_PATTERNS = new char[][] { "Non-initialized yet".toCharArray() }; //$NON-NLS-1$
 
        private String rootID;
+       /*
+        * Default inclusion pattern set
+        */
+       public final static IPath[] INCLUDE_ALL = {};
        
+       /*
+        * Default exclusion pattern set
+        */
+       public final static IPath[] EXCLUDE_NONE = {};
        /**
         * Default exclusion pattern set
         */
@@ -125,6 +146,7 @@ public class ClasspathEntry implements IClasspathEntry {
                int contentKind,
                int entryKind,
                IPath path,
+               IPath[] inclusionPatterns,
                IPath[] exclusionPatterns,
                IPath sourceAttachmentPath,
                IPath sourceAttachmentRootPath,
@@ -134,6 +156,12 @@ public class ClasspathEntry implements IClasspathEntry {
                this.contentKind = contentKind;
                this.entryKind = entryKind;
                this.path = path;
+               this.inclusionPatterns = inclusionPatterns;
+           if (inclusionPatterns != INCLUDE_ALL && inclusionPatterns.length > 0) {
+                       this.fullCharInclusionPatterns = UNINIT_PATTERNS;
+           } else {
+                       this.fullCharInclusionPatterns = null; // empty inclusion pattern means everything is included
+           }
                this.exclusionPatterns = exclusionPatterns;
                if (exclusionPatterns.length > 0) {
                        this.fullCharExclusionPatterns = UNINIT_PATTERNS;
@@ -152,7 +180,7 @@ public class ClasspathEntry implements IClasspathEntry {
                if (this.fullCharExclusionPatterns == UNINIT_PATTERNS) {
                        int length = this.exclusionPatterns.length;
                        this.fullCharExclusionPatterns = new char[length][];
-                       IPath prefixPath = path.removeTrailingSeparator();
+                       IPath prefixPath = this.path.removeTrailingSeparator();
                        for (int i = 0; i < length; i++) {
                                this.fullCharExclusionPatterns[i] = 
                                        prefixPath.append(this.exclusionPatterns[i]).toString().toCharArray();
@@ -161,6 +189,22 @@ public class ClasspathEntry implements IClasspathEntry {
                return this.fullCharExclusionPatterns;
        }
        
+       /*
+        * Returns a char based representation of the exclusions patterns full path.
+        */
+       public char[][] fullInclusionPatternChars() {
+
+               if (this.fullCharInclusionPatterns == UNINIT_PATTERNS) {
+                       int length = this.inclusionPatterns.length;
+                       this.fullCharInclusionPatterns = new char[length][];
+                       IPath prefixPath = this.path.removeTrailingSeparator();
+                       for (int i = 0; i < length; i++) {
+                               this.fullCharInclusionPatterns[i] = 
+                                       prefixPath.append(this.inclusionPatterns[i]).toString().toCharArray();
+                       }
+               }
+               return this.fullCharInclusionPatterns;
+       }
        /**
         * Returns the XML encoding of the class path.
         */
@@ -290,16 +334,18 @@ public class ClasspathEntry implements IClasspathEntry {
                                                isExported);
 
                        case ClasspathEntry.K_OUTPUT :
-                               if (!path.isAbsolute()) return null;
-                               return new ClasspathEntry(
-                                               ClasspathEntry.K_OUTPUT,
-                                               IClasspathEntry.CPE_LIBRARY,
-                                               path,
-                                               ClasspathEntry.NO_EXCLUSION_PATTERNS, 
-                                               null, // source attachment
-                                               null, // source attachment root
-                                               null, // custom output location
-                                               false);
+                         if (!path.isAbsolute()) return null;
+                           return new ClasspathEntry(
+                                       ClasspathEntry.K_OUTPUT,
+                                       IClasspathEntry.CPE_LIBRARY,
+                                       path,
+                                       ClasspathEntry.INCLUDE_ALL, 
+                                       ClasspathEntry.EXCLUDE_NONE, 
+                                       null, // source attachment
+                                       null, // source attachment root
+                                       null, // custom output location
+                                       false);
+                               
                        default :
                                throw new Assert.AssertionFailedException(Util.bind("classpath.unknownKind", kindAttr)); //$NON-NLS-1$
                }
@@ -345,6 +391,20 @@ public class ClasspathEntry implements IClasspathEntry {
                                        return false;
                        }
 
+                       IPath[] otherIncludes = otherEntry.getInclusionPatterns();
+                       if (this.inclusionPatterns != otherIncludes){
+                           if (this.inclusionPatterns == null) return false;
+                               int includeLength = this.inclusionPatterns.length;
+                               if (otherIncludes == null || otherIncludes.length != includeLength) 
+                                       return false;
+                               for (int i = 0; i < includeLength; i++) {
+                                       // compare toStrings instead of IPaths 
+                                       // since IPath.equals is specified to ignore trailing separators
+                                       if (!this.inclusionPatterns[i].toString().equals(otherIncludes[i].toString()))
+                                               return false;
+                               }
+                       }
+                       
                        IPath[] otherExcludes = otherEntry.getExclusionPatterns();
                        if (this.exclusionPatterns != otherExcludes){
                                int excludeLength = this.exclusionPatterns.length;
@@ -392,7 +452,12 @@ public class ClasspathEntry implements IClasspathEntry {
        public IPath[] getExclusionPatterns() {
                return this.exclusionPatterns;
        }
-
+       /**
+        * @see IClasspathEntry#getExclusionPatterns()
+        */
+       public IPath[] getInclusionPatterns() {
+               return this.inclusionPatterns;
+       }
        /**
         * @see IClasspathEntry#getOutputLocation()
         */
@@ -653,4 +718,476 @@ public class ClasspathEntry implements IClasspathEntry {
 
                writer.printTag("classpathentry", parameters, indent, newLine, true);//$NON-NLS-1$
        }
+       
+       /**
+        * Validate a given classpath and output location for a project, using the following rules:
+        * <ul>
+        *   <li> Classpath entries cannot collide with each other; that is, all entry paths must be unique.
+        *   <li> The project output location path cannot be null, must be absolute and located inside the project.
+        *   <li> Specific output locations (specified on source entries) can be null, if not they must be located inside the project,
+        *   <li> A project entry cannot refer to itself directly (that is, a project cannot prerequisite itself).
+     *   <li> Classpath entries or output locations cannot coincidate or be nested in each other, except for the following scenarii listed below:
+        *      <ul><li> A source folder can coincidate with its own output location, in which case this output can then contain library archives. 
+        *                     However, a specific output location cannot coincidate with any library or a distinct source folder than the one referring to it. </li> 
+        *              <li> A source/library folder can be nested in any source folder as long as the nested folder is excluded from the enclosing one. </li>
+        *                      <li> An output location can be nested in a source folder, if the source folder coincidates with the project itself, or if the output
+        *                                      location is excluded from the source folder. </li>
+        *      </ul>
+        * </ul>
+        * 
+        *  Note that the classpath entries are not validated automatically. Only bound variables or containers are considered 
+        *  in the checking process (this allows to perform a consistency check on a classpath which has references to
+        *  yet non existing projects, folders, ...).
+        *  <p>
+        *  This validation is intended to anticipate classpath issues prior to assigning it to a project. In particular, it will automatically
+        *  be performed during the classpath setting operation (if validation fails, the classpath setting will not complete).
+        *  <p>
+        * @param javaProject the given java project
+        * @param rawClasspath a given classpath
+        * @param projectOutputLocation a given output location
+        * @return a status object with code <code>IStatus.OK</code> if
+        *              the given classpath and output location are compatible, otherwise a status 
+        *              object indicating what is wrong with the classpath or output location
+        */
+       public static IJavaModelStatus validateClasspath(IJavaProject javaProject, IClasspathEntry[] rawClasspath, IPath projectOutputLocation) {
+       
+               IProject project = javaProject.getProject();
+               IPath projectPath= project.getFullPath();
+               String projectName = javaProject.getElementName();
+       
+               /* validate output location */
+               if (projectOutputLocation == null) {
+                       return new JavaModelStatus(IJavaModelStatusConstants.NULL_PATH);
+               }
+               if (projectOutputLocation.isAbsolute()) {
+                       if (!projectPath.isPrefixOf(projectOutputLocation)) {
+                               return new JavaModelStatus(IJavaModelStatusConstants.PATH_OUTSIDE_PROJECT, javaProject, projectOutputLocation.toString());
+                       }
+               } else {
+                       return new JavaModelStatus(IJavaModelStatusConstants.RELATIVE_PATH, projectOutputLocation);
+               }
+       
+               boolean hasSource = false;
+               boolean hasLibFolder = false;
+       
+
+               // tolerate null path, it will be reset to default
+               if (rawClasspath == null) 
+                       return JavaModelStatus.VERIFIED_OK;
+               
+               // retrieve resolved classpath
+               IClasspathEntry[] classpath; 
+               try {
+                       classpath = ((JavaProject)javaProject).getResolvedClasspath(rawClasspath, null /*output*/, true/*ignore pb*/, false/*no marker*/, null /*no reverse map*/);
+               } catch(JavaModelException e){
+                       return e.getJavaModelStatus();
+               }
+               int length = classpath.length; 
+
+               int outputCount = 1;
+               IPath[] outputLocations = new IPath[length+1];
+               boolean[] allowNestingInOutputLocations = new boolean[length+1];
+               outputLocations[0] = projectOutputLocation;
+               
+               // retrieve and check output locations
+               IPath potentialNestedOutput = null; // for error reporting purpose
+               int sourceEntryCount = 0;
+               boolean disableExclusionPatterns = JavaCore.DISABLED.equals(javaProject.getOption(JavaCore.CORE_ENABLE_CLASSPATH_EXCLUSION_PATTERNS, true));
+               boolean disableCustomOutputLocations = JavaCore.DISABLED.equals(javaProject.getOption(JavaCore.CORE_ENABLE_CLASSPATH_MULTIPLE_OUTPUT_LOCATIONS, true));
+               
+               for (int i = 0 ; i < length; i++) {
+                       IClasspathEntry resolvedEntry = classpath[i];
+                       switch(resolvedEntry.getEntryKind()){
+                               case IClasspathEntry.CPE_SOURCE :
+                                       sourceEntryCount++;
+
+                                       if (disableExclusionPatterns &&
+                                               ((resolvedEntry.getInclusionPatterns() != null && resolvedEntry.getInclusionPatterns().length > 0) 
+                                               || (resolvedEntry.getExclusionPatterns() != null && resolvedEntry.getExclusionPatterns().length > 0))) {
+                                               return new JavaModelStatus(IJavaModelStatusConstants.DISABLED_CP_EXCLUSION_PATTERNS, javaProject, resolvedEntry.getPath());
+                                       }
+                                       IPath customOutput; 
+                                       if ((customOutput = resolvedEntry.getOutputLocation()) != null) {
+
+                                               if (disableCustomOutputLocations) {
+                                                       return new JavaModelStatus(IJavaModelStatusConstants.DISABLED_CP_MULTIPLE_OUTPUT_LOCATIONS, javaProject, resolvedEntry.getPath());
+                                               }
+                                               // ensure custom output is in project
+                                               if (customOutput.isAbsolute()) {
+                                                       if (!javaProject.getPath().isPrefixOf(customOutput)) {
+                                                               return new JavaModelStatus(IJavaModelStatusConstants.PATH_OUTSIDE_PROJECT, javaProject, customOutput.toString());
+                                                       }
+                                               } else {
+                                                       return new JavaModelStatus(IJavaModelStatusConstants.RELATIVE_PATH, customOutput);
+                                               }
+                                               
+                                               // ensure custom output doesn't conflict with other outputs
+                                               // check exact match
+                                               if (Util.indexOfMatchingPath(customOutput, outputLocations, outputCount) != -1) {
+                                                       continue; // already found
+                                               }
+                                               // accumulate all outputs, will check nesting once all available (to handle ordering issues)
+                                               outputLocations[outputCount++] = customOutput;
+                                       }
+                       }
+               }
+               // check nesting across output locations
+               for (int i = 1 /*no check for default output*/ ; i < outputCount; i++) {
+                   IPath customOutput = outputLocations[i];
+                   int index;
+                       // check nesting
+                       if ((index = Util.indexOfEnclosingPath(customOutput, outputLocations, outputCount)) != -1 && index != i) {
+                               if (index == 0) {
+                                       // custom output is nested in project's output: need to check if all source entries have a custom
+                                       // output before complaining
+                                       if (potentialNestedOutput == null) potentialNestedOutput = customOutput;
+                               } else {
+                                       return new JavaModelStatus(IJavaModelStatusConstants.INVALID_CLASSPATH, Util.bind("classpath.cannotNestOutputInOutput", customOutput.makeRelative().toString(), outputLocations[index].makeRelative().toString())); //$NON-NLS-1$
+                               }
+                       }
+               }       
+               // allow custom output nesting in project's output if all source entries have a custom output
+               if (sourceEntryCount <= outputCount-1) {
+                   allowNestingInOutputLocations[0] = true;
+               } else if (potentialNestedOutput != null) {
+                       return new JavaModelStatus(IJavaModelStatusConstants.INVALID_CLASSPATH, Util.bind("classpath.cannotNestOutputInOutput", potentialNestedOutput.makeRelative().toString(), outputLocations[0].makeRelative().toString())); //$NON-NLS-1$
+               }
+
+               for (int i = 0 ; i < length; i++) {
+                       IClasspathEntry resolvedEntry = classpath[i];
+                       IPath path = resolvedEntry.getPath();
+                       int index;
+                       switch(resolvedEntry.getEntryKind()){
+                               
+                               case IClasspathEntry.CPE_SOURCE :
+                                       hasSource = true;
+                                       if ((index = Util.indexOfMatchingPath(path, outputLocations, outputCount)) != -1){
+                                               allowNestingInOutputLocations[index] = true;
+                                       }
+                                       break;
+
+//                             case IClasspathEntry.CPE_LIBRARY:
+//                                     hasLibFolder |= !org.eclipse.jdt.internal.compiler.util.Util.isArchiveFileName(path.lastSegment());
+//                                     if ((index = Util.indexOfMatchingPath(path, outputLocations, outputCount)) != -1){
+//                                             allowNestingInOutputLocations[index] = true;
+//                                     }
+//                                     break;
+                       }
+               }
+               if (!hasSource && !hasLibFolder) { // if no source and no lib folder, then allowed
+                       for (int i = 0; i < outputCount; i++) allowNestingInOutputLocations[i] = true;
+               }
+               
+               HashSet pathes = new HashSet(length);
+               
+               // check all entries
+               for (int i = 0 ; i < length; i++) {
+                       IClasspathEntry entry = classpath[i];
+                       if (entry == null) continue;
+                       IPath entryPath = entry.getPath();
+                       int kind = entry.getEntryKind();
+                       
+                       // Build some common strings for status message
+                       boolean isProjectRelative = entryPath.segment(0).toString().equals(projectName);
+                       String entryPathMsg = isProjectRelative ? entryPath.removeFirstSegments(1).toString() : entryPath.makeRelative().toString();
+       
+                       // complain if duplicate path
+                       if (!pathes.add(entryPath)){
+                               return new JavaModelStatus(IJavaModelStatusConstants.NAME_COLLISION, Util.bind("classpath.duplicateEntryPath", entryPathMsg, projectName)); //$NON-NLS-1$
+                       }
+                       // no further check if entry coincidates with project or output location
+                       if (entryPath.equals(projectPath)){
+                               // complain if self-referring project entry
+                               if (kind == IClasspathEntry.CPE_PROJECT){
+                                       return new JavaModelStatus(IJavaModelStatusConstants.INVALID_PATH, Util.bind("classpath.cannotReferToItself", entryPath.makeRelative().toString()));//$NON-NLS-1$
+                               }
+                               // tolerate nesting output in src if src==prj
+                               continue;
+                       }
+       
+                       // allow nesting source entries in each other as long as the outer entry excludes the inner one
+                       if (kind == IClasspathEntry.CPE_SOURCE ) {
+//                                     || (kind == IClasspathEntry.CPE_LIBRARY && !org.eclipse.jdt.internal.compiler.util.Util.isArchiveFileName(entryPath.lastSegment()))){
+                               for (int j = 0; j < classpath.length; j++){
+                                       IClasspathEntry otherEntry = classpath[j];
+                                       if (otherEntry == null) continue;
+                                       int otherKind = otherEntry.getEntryKind();
+                                       IPath otherPath = otherEntry.getPath();
+                                       if (entry != otherEntry 
+                                               && (otherKind == IClasspathEntry.CPE_SOURCE ) ) {
+//                                                             || (otherKind == IClasspathEntry.CPE_LIBRARY 
+//                                                                             && !org.eclipse.jdt.internal.compiler.util.Util.isArchiveFileName(otherPath.lastSegment())))){
+                                               char[][] inclusionPatterns, exclusionPatterns;
+                                               if (otherPath.isPrefixOf(entryPath) 
+                                                               && !otherPath.equals(entryPath)
+                                                               && !Util.isExcluded(entryPath.append("*"), inclusionPatterns = ((ClasspathEntry)otherEntry).fullInclusionPatternChars(), exclusionPatterns = ((ClasspathEntry)otherEntry).fullExclusionPatternChars(), false)) { //$NON-NLS-1$
+                                                       String exclusionPattern = entryPath.removeFirstSegments(otherPath.segmentCount()).segment(0);
+                                                       if (Util.isExcluded(entryPath, inclusionPatterns, exclusionPatterns, false)) {
+                                                               return new JavaModelStatus(IJavaModelStatusConstants.INVALID_CLASSPATH, Util.bind("classpath.mustEndWithSlash", exclusionPattern, entryPath.makeRelative().toString())); //$NON-NLS-1$
+                                                       } else {
+                                                               if (otherKind == IClasspathEntry.CPE_SOURCE) {
+                                                                       exclusionPattern += '/';
+                                                                       return new JavaModelStatus(IJavaModelStatusConstants.INVALID_CLASSPATH, Util.bind("classpath.cannotNestEntryInEntry", new String[] {entryPath.makeRelative().toString(), otherEntry.getPath().makeRelative().toString(), exclusionPattern})); //$NON-NLS-1$
+                                                               } else {
+                                                                       return new JavaModelStatus(IJavaModelStatusConstants.INVALID_CLASSPATH, Util.bind("classpath.cannotNestEntryInLibrary", entryPath.makeRelative().toString(), otherEntry.getPath().makeRelative().toString())); //$NON-NLS-1$
+                                                               }
+                                                       }
+                                               }
+                                       }
+                               }
+                       }
+                       
+                       // prevent nesting output location inside entry unless enclosing is a source entry which explicitly exclude the output location
+                   char[][] inclusionPatterns = ((ClasspathEntry)entry).fullInclusionPatternChars();
+                   char[][] exclusionPatterns = ((ClasspathEntry)entry).fullExclusionPatternChars();
+                   for (int j = 0; j < outputCount; j++){
+                       IPath currentOutput = outputLocations[j];
+                       if (entryPath.equals(currentOutput)) continue;
+                               if (entryPath.isPrefixOf(currentOutput)) {
+                                   if (kind != IClasspathEntry.CPE_SOURCE || !Util.isExcluded(currentOutput, inclusionPatterns, exclusionPatterns, true)) {
+                                               return new JavaModelStatus(IJavaModelStatusConstants.INVALID_CLASSPATH, Util.bind("classpath.cannotNestOutputInEntry", currentOutput.makeRelative().toString(), entryPath.makeRelative().toString())); //$NON-NLS-1$
+                                   }
+                               }
+                   }
+
+                   // prevent nesting entry inside output location - when distinct from project or a source folder
+                   for (int j = 0; j < outputCount; j++){
+                       if (allowNestingInOutputLocations[j]) continue;
+                       IPath currentOutput = outputLocations[j];
+                               if (currentOutput.isPrefixOf(entryPath)) {
+                                       return new JavaModelStatus(IJavaModelStatusConstants.INVALID_CLASSPATH, Util.bind("classpath.cannotNestEntryInOutput", entryPath.makeRelative().toString(), currentOutput.makeRelative().toString())); //$NON-NLS-1$
+                               }
+                   }                   
+               }
+               // ensure that no specific output is coincidating with another source folder (only allowed if matching current source folder)
+               // 36465 - for 2.0 backward compatibility, only check specific output locations (the default can still coincidate)
+               // perform one separate iteration so as to not take precedence over previously checked scenarii (in particular should
+               // diagnose nesting source folder issue before this one, for example, [src]"Project/", [src]"Project/source/" and output="Project/" should
+               // first complain about missing exclusion pattern
+               for (int i = 0 ; i < length; i++) {
+                       IClasspathEntry entry = classpath[i];
+                       if (entry == null) continue;
+                       IPath entryPath = entry.getPath();
+                       int kind = entry.getEntryKind();
+
+                       // Build some common strings for status message
+                       boolean isProjectRelative = entryPath.segment(0).toString().equals(projectName);
+                       String entryPathMsg = isProjectRelative ? entryPath.removeFirstSegments(1).toString() : entryPath.makeRelative().toString();
+       
+                       if (kind == IClasspathEntry.CPE_SOURCE) {
+                               IPath output = entry.getOutputLocation();
+                               if (output == null) continue; // 36465 - for 2.0 backward compatibility, only check specific output locations (the default can still coincidate)
+                               // if (output == null) output = projectOutputLocation; // if no specific output, still need to check using default output (this line would check default output)
+                               for (int j = 0; j < length; j++) {
+                                       IClasspathEntry otherEntry = classpath[j];
+                                       if (otherEntry == entry) continue;
+
+                                       // Build some common strings for status message
+                                       boolean opStartsWithProject = otherEntry.getPath().segment(0).toString().equals(projectName);
+                                       String otherPathMsg = opStartsWithProject ? otherEntry.getPath().removeFirstSegments(1).toString() : otherEntry.getPath().makeRelative().toString();
+       
+                                       switch (otherEntry.getEntryKind()) {
+                                               case IClasspathEntry.CPE_SOURCE :
+                                                       if (otherEntry.getPath().equals(output)) {
+                                                               return new JavaModelStatus(IJavaModelStatusConstants.INVALID_CLASSPATH, Util.bind("classpath.cannotUseDistinctSourceFolderAsOutput", new String[] {entryPathMsg, otherPathMsg, projectName})); //$NON-NLS-1$
+                                                       }
+                                                       break;
+                                               case IClasspathEntry.CPE_LIBRARY :
+                                                       if (otherEntry.getPath().equals(output)) {
+                                                               return new JavaModelStatus(IJavaModelStatusConstants.INVALID_CLASSPATH, Util.bind("classpath.cannotUseLibraryAsOutput", new String[] {entryPathMsg, otherPathMsg, projectName})); //$NON-NLS-1$
+                                                       }
+                                       }
+                               }
+                       }                       
+               }
+               return JavaModelStatus.VERIFIED_OK;     
+       }
+       
+       /**
+        * Returns a Java model status describing the problem related to this classpath entry if any, 
+        * a status object with code <code>IStatus.OK</code> if the entry is fine (that is, if the
+        * given classpath entry denotes a valid element to be referenced onto a classpath).
+        * 
+        * @param project the given java project
+        * @param entry the given classpath entry
+        * @param checkSourceAttachment a flag to determine if source attachement should be checked
+        * @param recurseInContainers flag indicating whether validation should be applied to container entries recursively
+        * @return a java model status describing the problem related to this classpath entry if any, a status object with code <code>IStatus.OK</code> if the entry is fine
+        */
+       public static IJavaModelStatus validateClasspathEntry(IJavaProject project, IClasspathEntry entry, boolean checkSourceAttachment, boolean recurseInContainers){
+               
+               IWorkspaceRoot workspaceRoot = ResourcesPlugin.getWorkspace().getRoot();                        
+               IPath path = entry.getPath();
+       
+               // Build some common strings for status message
+               String projectName = project.getElementName();
+               boolean pathStartsWithProject = path.segment(0).toString().equals(projectName);
+               String entryPathMsg = pathStartsWithProject ? path.removeFirstSegments(1).toString() : path.makeRelative().toString();
+       
+               switch(entry.getEntryKind()){
+       
+                       // container entry check
+//                     case IClasspathEntry.CPE_CONTAINER :
+//                             if (path != null && path.segmentCount() >= 1){
+//                                     try {
+//                                             IClasspathContainer container = JavaModelManager.getJavaModelManager().getClasspathContainer(path, project);
+//                                             // container retrieval is performing validation check on container entry kinds.
+//                                             if (container == null){
+//                                                     return new JavaModelStatus(IJavaModelStatusConstants.CP_CONTAINER_PATH_UNBOUND, project, path);
+//                                             } else if (container == JavaModelManager.CONTAINER_INITIALIZATION_IN_PROGRESS) {
+//                                                     // don't create a marker if initialization is in progress (case of cp initialization batching)
+//                                                     return JavaModelStatus.VERIFIED_OK;
+//                                             }
+//                                             IClasspathEntry[] containerEntries = container.getClasspathEntries();
+//                                             if (containerEntries != null){
+//                                                     for (int i = 0, length = containerEntries.length; i < length; i++){
+//                                                             IClasspathEntry containerEntry = containerEntries[i];
+//                                                             int kind = containerEntry == null ? 0 : containerEntry.getEntryKind();
+//                                                             if (containerEntry == null
+//                                                                     || kind == IClasspathEntry.CPE_SOURCE
+//                                                                     || kind == IClasspathEntry.CPE_VARIABLE
+//                                                                     || kind == IClasspathEntry.CPE_CONTAINER){
+//                                                                             String description = container.getDescription();
+//                                                                             if (description == null) description = path.makeRelative().toString();
+//                                                                             return new JavaModelStatus(IJavaModelStatusConstants.INVALID_CP_CONTAINER_ENTRY, project, path);
+//                                                             }
+//                                                             if (recurseInContainers) {
+//                                                                     IJavaModelStatus containerEntryStatus = validateClasspathEntry(project, containerEntry, checkSourceAttachment, recurseInContainers);
+//                                                                     if (!containerEntryStatus.isOK()){
+//                                                                             return containerEntryStatus;
+//                                                                     }
+//                                                             } 
+//                                                     }
+//                                             }
+//                                     } catch(JavaModelException e){
+//                                             return new JavaModelStatus(e);
+//                                     }
+//                             } else {
+//                                     return new JavaModelStatus(IJavaModelStatusConstants.INVALID_CLASSPATH, Util.bind("classpath.illegalContainerPath", entryPathMsg, projectName));                                         //$NON-NLS-1$
+//                             }
+//                             break;
+                               
+                       // variable entry check
+                       case IClasspathEntry.CPE_VARIABLE :
+                               if (path != null && path.segmentCount() >= 1){
+                                       try {
+                                               entry = JavaCore.getResolvedClasspathEntry(entry);
+                                       } catch (Assert.AssertionFailedException e) {
+                                               // Catch the assertion failure and throw java model exception instead
+                                               // see bug https://bugs.eclipse.org/bugs/show_bug.cgi?id=55992
+                                               return new JavaModelStatus(IJavaModelStatusConstants.INVALID_PATH, e.getMessage());
+                                       }
+                                       if (entry == null){
+                                               return new JavaModelStatus(IJavaModelStatusConstants.CP_VARIABLE_PATH_UNBOUND, project, path);
+                                       }
+                                       return validateClasspathEntry(project, entry, checkSourceAttachment, recurseInContainers);
+                               } else {
+                                       return new JavaModelStatus(IJavaModelStatusConstants.INVALID_CLASSPATH, Util.bind("classpath.illegalVariablePath", path.makeRelative().toString(), projectName));                                        //$NON-NLS-1$
+                               }
+       
+                       // library entry check
+//                     case IClasspathEntry.CPE_LIBRARY :
+//                             if (path != null && path.isAbsolute() && !path.isEmpty()) {
+//                                     IPath sourceAttachment = entry.getSourceAttachmentPath();
+//                                     Object target = JavaModel.getTarget(workspaceRoot, path, true);
+//                                     if (target != null && project.getOption(JavaCore.CORE_INCOMPATIBLE_JDK_LEVEL, true) != JavaCore.IGNORE) {
+//                                             long projectTargetJDK = CompilerOptions.versionToJdkLevel(project.getOption(JavaCore.COMPILER_CODEGEN_TARGET_PLATFORM, true));
+//                                             long libraryJDK = Util.getJdkLevel(target);
+//                                             if (libraryJDK != 0 && libraryJDK > projectTargetJDK) {
+//                                                     return new JavaModelStatus(IJavaModelStatusConstants.INCOMPATIBLE_JDK_LEVEL, project, path, CompilerOptions.versionFromJdkLevel(libraryJDK)); 
+//                                             }
+//                                     }
+//                                     if (target instanceof IResource){
+//                                             IResource resolvedResource = (IResource) target;
+//                                             switch(resolvedResource.getType()){
+//                                                     case IResource.FILE :
+//                                                             if (org.eclipse.jdt.internal.compiler.util.Util.isArchiveFileName(resolvedResource.getName())) {
+//                                                                     if (checkSourceAttachment 
+//                                                                             && sourceAttachment != null
+//                                                                             && !sourceAttachment.isEmpty()
+//                                                                             && JavaModel.getTarget(workspaceRoot, sourceAttachment, true) == null){
+//                                                                             return new JavaModelStatus(IJavaModelStatusConstants.INVALID_CLASSPATH, Util.bind("classpath.unboundSourceAttachment", new String [] {sourceAttachment.makeRelative().toString(), path.makeRelative().toString(), projectName})); //$NON-NLS-1$
+//                                                                     }
+//                                                             } else {
+//                                                                     return new JavaModelStatus(IJavaModelStatusConstants.INVALID_CLASSPATH, Util.bind("classpath.illegalLibraryArchive", entryPathMsg, projectName)); //$NON-NLS-1$
+//                                                             }
+//                                                             break;
+//                                                     case IResource.FOLDER : // internal binary folder
+//                                                             if (checkSourceAttachment 
+//                                                                     && sourceAttachment != null 
+//                                                                     && !sourceAttachment.isEmpty()
+//                                                                     && JavaModel.getTarget(workspaceRoot, sourceAttachment, true) == null){
+//                                                                     return  new JavaModelStatus(IJavaModelStatusConstants.INVALID_CLASSPATH, Util.bind("classpath.unboundSourceAttachment", new String [] {sourceAttachment.makeRelative().toString(), path.makeRelative().toString(), projectName})); //$NON-NLS-1$
+//                                                             }
+//                                             }
+//                                     } else if (target instanceof File){
+//                                         File file = (File) target;
+//                                         if (!file.isFile()) {
+//                                                     return  new JavaModelStatus(IJavaModelStatusConstants.INVALID_CLASSPATH, Util.bind("classpath.illegalExternalFolder", path.toOSString(), projectName)); //$NON-NLS-1$
+//                                         } else if (!org.eclipse.jdt.internal.compiler.util.Util.isArchiveFileName(file.getName())) {
+//                                                     return  new JavaModelStatus(IJavaModelStatusConstants.INVALID_CLASSPATH, Util.bind("classpath.illegalLibraryArchive", path.toOSString(), projectName)); //$NON-NLS-1$
+//                                         } else if (checkSourceAttachment 
+//                                                             && sourceAttachment != null 
+//                                                             && !sourceAttachment.isEmpty()
+//                                                             && JavaModel.getTarget(workspaceRoot, sourceAttachment, true) == null){
+//                                                             return  new JavaModelStatus(IJavaModelStatusConstants.INVALID_CLASSPATH, Util.bind("classpath.unboundSourceAttachment", new String [] {sourceAttachment.toString(), path.makeRelative().toString(), projectName})); //$NON-NLS-1$
+//                                         }
+//                                     } else {
+//                                             return new JavaModelStatus(IJavaModelStatusConstants.INVALID_CLASSPATH, Util.bind("classpath.unboundLibrary", path.makeRelative().toString(), projectName)); //$NON-NLS-1$
+//                                     }
+//                             } else {
+//                                     return new JavaModelStatus(IJavaModelStatusConstants.INVALID_CLASSPATH, Util.bind("classpath.illegalLibraryPath", path.makeRelative().toString(), projectName)); //$NON-NLS-1$
+//                             }
+//                             break;
+       
+                       // project entry check
+                       case IClasspathEntry.CPE_PROJECT :
+                               if (path != null && path.isAbsolute() && !path.isEmpty()) {
+                                       IProject prereqProjectRsc = workspaceRoot.getProject(path.segment(0));
+                                       IJavaProject prereqProject = JavaCore.create(prereqProjectRsc);
+                                       try {
+                                               if (!prereqProjectRsc.exists() || !prereqProjectRsc.hasNature(PHPeclipsePlugin.PHP_NATURE_ID)){
+                                                       return new JavaModelStatus(IJavaModelStatusConstants.INVALID_CLASSPATH, Util.bind("classpath.unboundProject", path.makeRelative().segment(0).toString(), projectName)); //$NON-NLS-1$
+                                               }
+                                               if (!prereqProjectRsc.isOpen()){
+                                                       return new JavaModelStatus(IJavaModelStatusConstants.INVALID_CLASSPATH, Util.bind("classpath.closedProject", path.segment(0).toString())); //$NON-NLS-1$
+                                               }
+//                                             if (project.getOption(JavaCore.CORE_INCOMPATIBLE_JDK_LEVEL, true) != JavaCore.IGNORE) {
+//                                                     long projectTargetJDK = CompilerOptions.versionToJdkLevel(project.getOption(JavaCore.COMPILER_CODEGEN_TARGET_PLATFORM, true));
+//                                                     long prereqProjectTargetJDK = CompilerOptions.versionToJdkLevel(prereqProject.getOption(JavaCore.COMPILER_CODEGEN_TARGET_PLATFORM, true));
+//                                                     if (prereqProjectTargetJDK > projectTargetJDK) {
+//                                                             return new JavaModelStatus(IJavaModelStatusConstants.INCOMPATIBLE_JDK_LEVEL, project, path, CompilerOptions.versionFromJdkLevel(prereqProjectTargetJDK)); 
+//                                                     }
+//                                             }
+                                       } catch (CoreException e){
+                                               return new JavaModelStatus(IJavaModelStatusConstants.INVALID_CLASSPATH, Util.bind("classpath.unboundProject", path.segment(0).toString(), projectName)); //$NON-NLS-1$
+                                       }
+                               } else {
+                                       return new JavaModelStatus(IJavaModelStatusConstants.INVALID_CLASSPATH, Util.bind("classpath.illegalProjectPath", path.segment(0).toString(), projectName)); //$NON-NLS-1$
+                               }
+                               break;
+       
+                       // project source folder
+                       case IClasspathEntry.CPE_SOURCE :
+                               if (((entry.getInclusionPatterns() != null && entry.getInclusionPatterns().length > 0)
+                                               || (entry.getExclusionPatterns() != null && entry.getExclusionPatterns().length > 0))
+                                               && JavaCore.DISABLED.equals(project.getOption(JavaCore.CORE_ENABLE_CLASSPATH_EXCLUSION_PATTERNS, true))) {
+                                       return new JavaModelStatus(IJavaModelStatusConstants.DISABLED_CP_EXCLUSION_PATTERNS, project, path);
+                               }
+                               if (entry.getOutputLocation() != null && JavaCore.DISABLED.equals(project.getOption(JavaCore.CORE_ENABLE_CLASSPATH_MULTIPLE_OUTPUT_LOCATIONS, true))) {
+                                       return new JavaModelStatus(IJavaModelStatusConstants.DISABLED_CP_MULTIPLE_OUTPUT_LOCATIONS, project, path);
+                               }
+                               if (path != null && path.isAbsolute() && !path.isEmpty()) {
+                                       IPath projectPath= project.getProject().getFullPath();
+                                       if (!projectPath.isPrefixOf(path) || JavaModel.getTarget(workspaceRoot, path, true) == null){
+                                               return new JavaModelStatus(IJavaModelStatusConstants.INVALID_CLASSPATH, Util.bind("classpath.unboundSourceFolder", entryPathMsg, projectName)); //$NON-NLS-1$
+                                       }
+                               } else {
+                                       return new JavaModelStatus(IJavaModelStatusConstants.INVALID_CLASSPATH, Util.bind("classpath.illegalSourceFolderPath", entryPathMsg, projectName)); //$NON-NLS-1$
+                               }
+                               break;
+               }
+               return JavaModelStatus.VERIFIED_OK;             
+       }
 }
+
index 2fb069d..d150dd3 100644 (file)
@@ -16,7 +16,10 @@ import java.util.Map;
 
 import net.sourceforge.phpdt.core.IBuffer;
 import net.sourceforge.phpdt.core.IBufferFactory;
+import net.sourceforge.phpdt.core.ICodeAssist;
+import net.sourceforge.phpdt.core.ICodeCompletionRequestor;
 import net.sourceforge.phpdt.core.ICompilationUnit;
+import net.sourceforge.phpdt.core.IImportContainer;
 import net.sourceforge.phpdt.core.IImportDeclaration;
 import net.sourceforge.phpdt.core.IJavaElement;
 import net.sourceforge.phpdt.core.IJavaModelStatusConstants;
@@ -42,6 +45,7 @@ import net.sourceforge.phpdt.internal.compiler.IProblemFactory;
 import net.sourceforge.phpdt.internal.compiler.SourceElementParser;
 import net.sourceforge.phpdt.internal.compiler.impl.CompilerOptions;
 import net.sourceforge.phpdt.internal.compiler.problem.DefaultProblemFactory;
+import net.sourceforge.phpdt.internal.core.util.MementoTokenizer;
 import net.sourceforge.phpdt.internal.core.util.Util;
 import net.sourceforge.phpeclipse.internal.compiler.ast.CompilationUnitDeclaration;
 
@@ -60,7 +64,6 @@ import org.eclipse.core.runtime.Path;
 public class CompilationUnit extends Openable implements ICompilationUnit,
     net.sourceforge.phpdt.internal.compiler.env.ICompilationUnit {
   public WorkingCopyOwner owner;
-
   /**
    * Constructs a handle to a compilation unit with the given name in the specified package for the specified owner
    * 
@@ -193,7 +196,6 @@ public class CompilationUnit extends Openable implements ICompilationUnit,
     // update timestamp (might be IResource.NULL_STAMP if original does not exist)
 
     unitInfo.timestamp = ((IFile) underlyingResource).getModificationStamp();
-
     // compute other problems if needed
     CompilationUnitDeclaration compilationUnitDeclaration = null;
     try {
@@ -206,7 +208,7 @@ public class CompilationUnit extends Openable implements ICompilationUnit,
 
       //               if (info instanceof ASTHolderCUInfo) {
       //                       int astLevel = ((ASTHolderCUInfo) info).astLevel;
-      //                       org.eclipse.jdt.core.dom.CompilationUnit cu = AST.convertCompilationUnit(astLevel, unit, contents, options, pm);
+      //                       net.sourceforge.phpdt.core.dom.CompilationUnit cu = AST.convertCompilationUnit(astLevel, unit, contents, options, pm);
       //                       ((ASTHolderCUInfo) info).ast = cu;
       //               }
     } finally {
@@ -222,7 +224,7 @@ public class CompilationUnit extends Openable implements ICompilationUnit,
   // * @see ICodeAssist#codeComplete(int, ICompletionRequestor)
   // */
   //public void codeComplete(int offset, ICompletionRequestor requestor) throws JavaModelException {
-  //   codeComplete(this, isWorkingCopy() ? (org.eclipse.jdt.internal.compiler.env.ICompilationUnit) getOriginalElement() : this,
+  //   codeComplete(this, isWorkingCopy() ? (net.sourceforge.phpdt.internal.compiler.env.ICompilationUnit) getOriginalElement() : this,
   // offset, requestor);
   //}
   /**
@@ -303,8 +305,8 @@ public class CompilationUnit extends Openable implements ICompilationUnit,
   //           String source = ""; //$NON-NLS-1$
   //           if (pkg.getElementName().length() > 0) {
   //                   //not the default package...add the package declaration
-  //                   source = "package " + pkg.getElementName() + ";" + org.eclipse.jdt.internal.compiler.util.ProjectPrefUtil.LINE_SEPARATOR +
-  // org.eclipse.jdt.internal.compiler.util.ProjectPrefUtil.LINE_SEPARATOR; //$NON-NLS-1$ //$NON-NLS-2$
+  //                   source = "package " + pkg.getElementName() + ";" + net.sourceforge.phpdt.internal.compiler.util.ProjectPrefUtil.LINE_SEPARATOR +
+  // net.sourceforge.phpdt.internal.compiler.util.ProjectPrefUtil.LINE_SEPARATOR; //$NON-NLS-1$ //$NON-NLS-2$
   //           }
   //           CreateCompilationUnitOperation op = new CreateCompilationUnitOperation(pkg, fName, source, force);
   //           runOperation(op, monitor);
@@ -534,7 +536,7 @@ public class CompilationUnit extends Openable implements ICompilationUnit,
   }
 
   /**
-   * @see org.eclipse.jdt.internal.compiler.env.ICompilationUnit#getContents()
+   * @see net.sourceforge.phpdt.internal.compiler.env.ICompilationUnit#getContents()
    */
   public char[] getContents() {
     try {
@@ -582,47 +584,68 @@ public class CompilationUnit extends Openable implements ICompilationUnit,
   public char[] getFileName() {
     return getElementName().toCharArray();
   }
+  /*
+   * @see JavaElement
+   */
+  public IJavaElement getHandleFromMemento(String token, MementoTokenizer memento, WorkingCopyOwner workingCopyOwner) {
+       switch (token.charAt(0)) {
+               case JEM_COUNT:
+                       return getHandleUpdatingCountFromMemento(memento, workingCopyOwner);
+               case JEM_IMPORTDECLARATION:
+                       JavaElement container = (JavaElement)getImportContainer();
+                       return container.getHandleFromMemento(token, memento, workingCopyOwner);
+               case JEM_PACKAGEDECLARATION:
+                       String pkgName = memento.nextToken();
+                       JavaElement pkgDecl = (JavaElement)getPackageDeclaration(pkgName);
+                       return pkgDecl.getHandleFromMemento(memento, workingCopyOwner);
+               case JEM_TYPE:
+                       String typeName = memento.nextToken();
+                       JavaElement type = (JavaElement)getType(typeName);
+                       return type.getHandleFromMemento(memento, workingCopyOwner);
+       }
+       return null;
+  }
 
   /**
    * @see JavaElement#getHandleMementoDelimiter()
    */
   protected char getHandleMementoDelimiter() {
-    return JavaElement.JEM_COMPILATIONUNIT;
+       return JavaElement.JEM_COMPILATIONUNIT;
   }
-
   /**
    * @see ICompilationUnit#getImport(String)
    */
   public IImportDeclaration getImport(String importName) {
-    return new ImportDeclaration((ImportContainer) getImportContainer(), importName);
+       return new ImportDeclaration((ImportContainer)getImportContainer(), importName);
   }
-
   /**
    * @see ICompilationUnit#getImportContainer()
    */
-  public ImportContainer getImportContainer() {
-    return new ImportContainer(this);
+  public IImportContainer getImportContainer() {
+       return new ImportContainer(this);
   }
 
+
   /**
    * @see ICompilationUnit#getImports()
    */
-  //public IImportDeclaration[] getImports() throws JavaModelException {
-  //   IImportContainer container= getImportContainer();
-  //   if (container.exists()) {
-  //           IJavaElement[] elements= container.getChildren();
-  //           IImportDeclaration[] imprts= new IImportDeclaration[elements.length];
-  //           System.arraycopy(elements, 0, imprts, 0, elements.length);
-  //           return imprts;
-  //   } else if (!exists()) {
-  //                   throw newNotPresentException();
-  //   } else {
-  //           return new IImportDeclaration[0];
-  //   }
-  //
-  //}
+  public IImportDeclaration[] getImports() throws JavaModelException {
+       IImportContainer container= getImportContainer();
+       if (container.exists()) {
+               IJavaElement[] elements= container.getChildren();
+               IImportDeclaration[] imprts= new IImportDeclaration[elements.length];
+               System.arraycopy(elements, 0, imprts, 0, elements.length);
+               return imprts;
+       } else if (!exists()) {
+                       throw newNotPresentException();
+       } else {
+               return new IImportDeclaration[0];
+       }
+
+  }
   /**
-   * @see org.eclipse.jdt.internal.compiler.env.ICompilationUnit#getMainTypeName()
+   * @see net.sourceforge.phpdt.internal.compiler.env.ICompilationUnit#getMainTypeName()
    */
   public char[] getMainTypeName() {
     String name = getElementName();
@@ -684,7 +707,7 @@ public class CompilationUnit extends Openable implements ICompilationUnit,
   }
 
   /**
-   * @see org.eclipse.jdt.internal.compiler.env.ICompilationUnit#getPackageName()
+   * @see net.sourceforge.phpdt.internal.compiler.env.ICompilationUnit#getPackageName()
    */
   public char[][] getPackageName() {
     return null;
@@ -1015,7 +1038,7 @@ public class CompilationUnit extends Openable implements ICompilationUnit,
     //         ASTHolderCUInfo info = new ASTHolderCUInfo();
     //         info.astLevel = astLevel;
     //         openWhenClosed(info, monitor);
-    //         org.eclipse.jdt.core.dom.CompilationUnit result = info.ast;
+    //         net.sourceforge.phpdt.core.dom.CompilationUnit result = info.ast;
     //         info.ast = null;
     //         return result;
     // } else {
@@ -1166,7 +1189,7 @@ public class CompilationUnit extends Openable implements ICompilationUnit,
    * @see ICompilationUnit#reconcile(int, boolean, WorkingCopyOwner, IProgressMonitor)
    * @since 3.0
    */
-  //public org.eclipse.jdt.core.dom.CompilationUnit reconcile(
+  //public net.sourceforge.phpdt.core.dom.CompilationUnit reconcile(
   public Object reconcile(int astLevel, boolean forceProblemDetection, WorkingCopyOwner workingCopyOwner, IProgressMonitor monitor)
       throws JavaModelException {
 
index 24255af..5ebd54c 100644 (file)
@@ -132,7 +132,7 @@ public class CompilationUnitProblemFinder extends Compiler {
                throws JavaModelException {
                return (SearchableEnvironment) ((JavaProject) sourceUnit.getJavaProject())
                        .getSearchableNameEnvironment();
-       }
+       } 
 
        /*
         * Answer the component to which will be handed back compilation results from the compiler
index 8b9fcb0..a09a6c6 100644 (file)
  *******************************************************************************/
 package net.sourceforge.phpdt.internal.core;
 
+import java.util.HashMap;
+import java.util.HashSet;
 import java.util.Map;
 import java.util.Stack;
 
+import net.sourceforge.phpdt.internal.core.ImportContainer;
+import net.sourceforge.phpdt.internal.core.ImportDeclaration;
+import net.sourceforge.phpdt.internal.core.ImportDeclarationElementInfo;
+import net.sourceforge.phpdt.internal.core.JavaElement;
+import net.sourceforge.phpdt.internal.core.JavaElementInfo;
+
 import net.sourceforge.phpdt.core.Flags;
 import net.sourceforge.phpdt.core.ICompilationUnit;
 import net.sourceforge.phpdt.core.IField;
@@ -36,17 +44,17 @@ public class CompilationUnitStructureRequestor extends ReferenceInfoAdapter impl
   /**
    * The handle to the compilation unit being parsed
    */
-  protected ICompilationUnit fUnit;
+  protected ICompilationUnit unit;
 
   /**
    * The info object for the compilation unit being parsed
    */
-  protected CompilationUnitElementInfo fUnitInfo;
+  protected CompilationUnitElementInfo unitInfo;
 
   /**
    * The import container info - null until created
    */
-  protected JavaElementInfo fImportContainerInfo = null;
+  protected JavaElementInfo importContainerInfo = null;
 
   /**
    * Hashtable of children elements of the compilation unit.
@@ -54,7 +62,7 @@ public class CompilationUnitStructureRequestor extends ReferenceInfoAdapter impl
    * the parser. Keys are handles, values are corresponding
    * info objects.
    */
-  protected Map fNewElements;
+  protected Map newElements;
 
   /**
    * Stack of parent scope info objects. The info on the
@@ -62,14 +70,14 @@ public class CompilationUnitStructureRequestor extends ReferenceInfoAdapter impl
    * For example, when we locate a method, the parent info object
    * will be the type the method is contained in.
    */
-  protected Stack fInfoStack;
+  protected Stack infoStack;
 
   /**
    * Stack of parent handles, corresponding to the info stack. We
    * keep both, since info objects do not have back pointers to
    * handles.
    */
-  protected Stack fHandleStack;
+  protected Stack handleStack;
 
   /**
    * The name of the source file being parsed.
@@ -126,29 +134,31 @@ public class CompilationUnitStructureRequestor extends ReferenceInfoAdapter impl
 
   protected CompilationUnitStructureRequestor(ICompilationUnit unit, CompilationUnitElementInfo unitInfo, Map newElements)
     throws JavaModelException {
-    this.fUnit = unit;
-    this.fUnitInfo = unitInfo;
-    this.fNewElements = newElements;
+    this.unit = unit;
+    this.unitInfo = unitInfo;
+    this.newElements = newElements;
     this.fSourceFileName = unit.getElementName().toCharArray();
   }
   /**
    * @see ISourceElementRequestor
    */
-  public void acceptImport(int declarationStart, int declarationEnd, char[] name, boolean onDemand) {
-       JavaElementInfo parentInfo = (JavaElementInfo) fInfoStack.peek();
-       JavaElement parentHandle= (JavaElement)fHandleStack.peek();
+  public void acceptImport(int declarationStart, int declarationEnd, char[] name, boolean onDemand)  {
+    //, int modifiers) {
+  
+       JavaElementInfo parentInfo = (JavaElementInfo) this.infoStack.peek();
+       JavaElement parentHandle= (JavaElement) this.handleStack.peek();
        if (!(parentHandle.getElementType() == IJavaElement.COMPILATION_UNIT)) {
                Assert.isTrue(false); // Should not happen
        }
-  
+
        ICompilationUnit parentCU= (ICompilationUnit)parentHandle;
        //create the import container and its info
-       ImportContainer importContainer= parentCU.getImportContainer();
-       if (fImportContainerInfo == null) {
-               fImportContainerInfo= new JavaElementInfo();
-               fImportContainerInfo.setIsStructureKnown(true);
+       ImportContainer importContainer= (ImportContainer)parentCU.getImportContainer();
+       if (this.importContainerInfo == null) {
+               this.importContainerInfo= new JavaElementInfo();
+               this.importContainerInfo.setIsStructureKnown(true);
                parentInfo.addChild(importContainer);
-               fNewElements.put(importContainer, fImportContainerInfo);
+               this.newElements.put(importContainer, this.importContainerInfo);
        }
        
        // tack on the '.*' if it is onDemand
@@ -160,16 +170,22 @@ public class CompilationUnitStructureRequestor extends ReferenceInfoAdapter impl
        }
        
        ImportDeclaration handle = new ImportDeclaration(importContainer, importName);
-//     ImportDeclaration handle = new ImportDeclaration(null, importName);
-//     resolveDuplicates(handle);
+       resolveDuplicates(handle);
        
-       SourceRefElementInfo info = new SourceRefElementInfo();
+       ImportDeclarationElementInfo info = new ImportDeclarationElementInfo();
        info.setSourceRangeStart(declarationStart);
        info.setSourceRangeEnd(declarationEnd);
-  
-       fImportContainerInfo.addChild(handle);
-       fNewElements.put(handle, info);
+//     info.setFlags(modifiers);
+       info.setName(name); // no trailing * if onDemand
+       info.setOnDemand(onDemand);
+
+       this.importContainerInfo.addChild(handle);
+       this.newElements.put(handle, info);
   }
+  /**
+   * @see ISourceElementRequestor
+   */
+  
   /*
    * Table of line separator position. This table is passed once at the end
    * of the parse action, so as to allow computation of normalized ranges.
@@ -246,10 +262,10 @@ public class CompilationUnitStructureRequestor extends ReferenceInfoAdapter impl
    * @see ISourceElementRequestor
    */
   public void enterCompilationUnit() {
-    fInfoStack = new Stack();
-    fHandleStack = new Stack();
-    fInfoStack.push(fUnitInfo);
-    fHandleStack.push(fUnit);
+    infoStack = new Stack();
+    handleStack = new Stack();
+    infoStack.push(unitInfo);
+    handleStack.push(unit);
   }
   /**
    * @see ISourceElementRequestor
@@ -282,8 +298,8 @@ public class CompilationUnitStructureRequestor extends ReferenceInfoAdapter impl
    */
   public void enterField(int declarationStart, int modifiers, char[] type, char[] name, int nameSourceStart, int nameSourceEnd) {
 
-    SourceTypeElementInfo parentInfo = (SourceTypeElementInfo) fInfoStack.peek();
-    JavaElement parentHandle = (JavaElement) fHandleStack.peek();
+    SourceTypeElementInfo parentInfo = (SourceTypeElementInfo) infoStack.peek();
+    JavaElement parentHandle = (JavaElement) handleStack.peek();
     IField handle = null;
 
     if (parentHandle.getElementType() == IJavaElement.TYPE) {
@@ -302,10 +318,10 @@ public class CompilationUnitStructureRequestor extends ReferenceInfoAdapter impl
     info.setTypeName(type);
 
     parentInfo.addChild(handle);
-    fNewElements.put(handle, info);
+    newElements.put(handle, info);
 
-    fInfoStack.push(info);
-    fHandleStack.push(handle);
+    infoStack.push(info);
+    handleStack.push(handle);
   }
   /**
    * @see ISourceElementRequestor
@@ -391,11 +407,11 @@ public class CompilationUnitStructureRequestor extends ReferenceInfoAdapter impl
     boolean isConstructor) {
     SourceTypeElementInfo parentInfo = null;
     try {
-      parentInfo = (SourceTypeElementInfo) fInfoStack.peek();
+      parentInfo = (SourceTypeElementInfo) infoStack.peek();
     } catch (ClassCastException e) {
       //                       parentInfo = null;
     }
-    JavaElement parentHandle = (JavaElement) fHandleStack.peek();
+    JavaElement parentHandle = (JavaElement) handleStack.peek();
     IMethod handle = null;
 
     // translate nulls to empty arrays
@@ -434,13 +450,13 @@ public class CompilationUnitStructureRequestor extends ReferenceInfoAdapter impl
     info.setExceptionTypeNames(exceptionTypes);
 
     if (parentInfo == null) {
-      fUnitInfo.addChild(handle);
+      unitInfo.addChild(handle);
     } else {
       parentInfo.addChild(handle);
     }
-    fNewElements.put(handle, info);
-    fInfoStack.push(info);
-    fHandleStack.push(handle);
+    newElements.put(handle, info);
+    infoStack.push(info);
+    handleStack.push(handle);
   }
   /**
    * Common processing for classes and interfaces.
@@ -457,8 +473,8 @@ public class CompilationUnitStructureRequestor extends ReferenceInfoAdapter impl
     char[] enclosingTypeName = null;
     char[] qualifiedName = null;
 
-    JavaElementInfo parentInfo = (JavaElementInfo) fInfoStack.peek();
-    JavaElement parentHandle = (JavaElement) fHandleStack.peek();
+    JavaElementInfo parentInfo = (JavaElementInfo) infoStack.peek();
+    JavaElement parentHandle = (JavaElement) handleStack.peek();
     IType handle = null;
     String nameString = new String(name);
 
@@ -498,10 +514,10 @@ public class CompilationUnitStructureRequestor extends ReferenceInfoAdapter impl
     // }
 
     parentInfo.addChild(handle);
-    fNewElements.put(handle, info);
+    newElements.put(handle, info);
 
-    fInfoStack.push(info);
-    fHandleStack.push(handle);
+    infoStack.push(info);
+    handleStack.push(handle);
 
   }
   /**
@@ -515,10 +531,10 @@ public class CompilationUnitStructureRequestor extends ReferenceInfoAdapter impl
    * @see ISourceElementRequestor
    */
   public void exitCompilationUnit(int declarationEnd) {
-    fUnitInfo.setSourceLength(declarationEnd + 1);
+    unitInfo.setSourceLength(declarationEnd + 1);
 
     // determine if there were any parsing errors
-    fUnitInfo.setIsStructureKnown(!this.hasSyntaxErrors);
+    unitInfo.setIsStructureKnown(!this.hasSyntaxErrors);
   }
   /**
    * @see ISourceElementRequestor
@@ -530,7 +546,7 @@ public class CompilationUnitStructureRequestor extends ReferenceInfoAdapter impl
    * @see ISourceElementRequestor
    */
   public void exitField(int initializationStart, int declarationEnd, int declarationSourceEnd) {
-       SourceFieldElementInfo info = (SourceFieldElementInfo) fInfoStack.pop();
+       SourceFieldElementInfo info = (SourceFieldElementInfo) infoStack.pop();
        info.setSourceRangeEnd(declarationSourceEnd);
        
        // remember initializer source if field is a constant
@@ -538,7 +554,7 @@ public class CompilationUnitStructureRequestor extends ReferenceInfoAdapter impl
                int flags = info.flags;
                Object typeInfo;
                if (Flags.isStatic(flags) && Flags.isFinal(flags)
-                               || ((typeInfo = fInfoStack.peek()) instanceof SourceTypeElementInfo
+                               || ((typeInfo = infoStack.peek()) instanceof SourceTypeElementInfo
                                         && (Flags.isInterface(((SourceTypeElementInfo)typeInfo).flags)))) {
                        int length = declarationEnd - initializationStart;
                        if (length > 0) {
@@ -548,7 +564,7 @@ public class CompilationUnitStructureRequestor extends ReferenceInfoAdapter impl
                        }
                }
        }
-       fHandleStack.pop();
+       handleStack.pop();
   }
   /**
    * @see ISourceElementRequestor
@@ -566,9 +582,9 @@ public class CompilationUnitStructureRequestor extends ReferenceInfoAdapter impl
    * common processing for classes and interfaces
    */
   protected void exitMember(int declarationEnd) {
-    SourceRefElementInfo info = (SourceRefElementInfo) fInfoStack.pop();
+    SourceRefElementInfo info = (SourceRefElementInfo) infoStack.pop();
     info.setSourceRangeEnd(declarationEnd);
-    fHandleStack.pop();
+    handleStack.pop();
   }
   /**
    * @see ISourceElementRequestor
@@ -582,7 +598,7 @@ public class CompilationUnitStructureRequestor extends ReferenceInfoAdapter impl
    * of the handle being created until there is no conflict.
    */
   protected void resolveDuplicates(IJavaElement handle) {
-    while (fNewElements.containsKey(handle)) {
+    while (newElements.containsKey(handle)) {
       JavaElement h = (JavaElement) handle;
       h.setOccurrenceCount(h.getOccurrenceCount() + 1);
     }
diff --git a/net.sourceforge.phpeclipse/src/net/sourceforge/phpdt/internal/core/INamingRequestor.java b/net.sourceforge.phpeclipse/src/net/sourceforge/phpdt/internal/core/INamingRequestor.java
new file mode 100644 (file)
index 0000000..4efbb83
--- /dev/null
@@ -0,0 +1,18 @@
+/*******************************************************************************
+ * Copyright (c) 2000, 2004 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials 
+ * are made available under the terms of the Common Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/cpl-v10.html
+ * 
+ * Contributors:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+package net.sourceforge.phpdt.internal.core;
+
+public interface INamingRequestor {
+       void acceptNameWithPrefixAndSuffix(char[] name, boolean isFirstPrefix, boolean isFirstSuffix);
+       void acceptNameWithPrefix(char[] name, boolean isFirstPrefix);
+       void acceptNameWithSuffix(char[] name, boolean isFirstSuffix);
+       void acceptNameWithoutPrefixAndSuffix(char[] name);
+}
diff --git a/net.sourceforge.phpeclipse/src/net/sourceforge/phpdt/internal/core/IPathRequestor.java b/net.sourceforge.phpeclipse/src/net/sourceforge/phpdt/internal/core/IPathRequestor.java
new file mode 100644 (file)
index 0000000..1cf2eee
--- /dev/null
@@ -0,0 +1,15 @@
+/*******************************************************************************
+ * Copyright (c) 2000, 2004 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials 
+ * are made available under the terms of the Common Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/cpl-v10.html
+ * 
+ * Contributors:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+package net.sourceforge.phpdt.internal.core;
+
+public interface IPathRequestor {
+       void acceptPath(String path, boolean containsLocalTypes);
+}
index 54089a2..e8da010 100644 (file)
@@ -17,106 +17,126 @@ import net.sourceforge.phpdt.core.IParent;
 import net.sourceforge.phpdt.core.ISourceRange;
 import net.sourceforge.phpdt.core.ISourceReference;
 import net.sourceforge.phpdt.core.JavaModelException;
+import net.sourceforge.phpdt.core.WorkingCopyOwner;
+import net.sourceforge.phpdt.internal.core.util.MementoTokenizer;
+
 //import net.sourceforge.phpdt.internal.core.util.MementoTokenizer;
 
 /**
  * @see IImportContainer
  */
 public class ImportContainer extends SourceRefElement implements IImportContainer {
-protected ImportContainer(CompilationUnit parent) {
-       super(parent, ""); //$NON-NLS-1$
-}
-public boolean equals(Object o) {
-       if (!(o instanceof ImportContainer)) return false;
-       return super.equals(o);
-}
-/**
- * @see IJavaElement
- */
-public int getElementType() {
-       return IMPORT_CONTAINER;
-}
-/*
- * @see JavaElement
- */
-//public IJavaElement getHandleFromMemento(String token, MementoTokenizer memento, WorkingCopyOwner workingCopyOwner) {
-//     switch (token.charAt(0)) {
-//             case JEM_COUNT:
-//                     return getHandleUpdatingCountFromMemento(memento, workingCopyOwner);
-//             case JEM_IMPORTDECLARATION:
-//                     if (memento.hasMoreTokens()) {
-//                             String importName = memento.nextToken();
-//                             JavaElement importDecl = (JavaElement)getImport(importName);
-//                             return importDecl.getHandleFromMemento(memento, workingCopyOwner);
-//                     } else {
-//                             return this;
-//                     }
-//     }
-//     return null;
-//}
-/**
- * @see JavaElement#getHandleMemento()
- */
-protected char getHandleMementoDelimiter() {
-       return JavaElement.JEM_IMPORTDECLARATION;
-}
-/**
- * @see IImportContainer
- */
-public IImportDeclaration getImport(String importName) {
-       return new ImportDeclaration(this, importName);
-}
-/*
- * @see JavaElement#getPrimaryElement(boolean)
- */
-public IJavaElement getPrimaryElement(boolean checkOwner) {
-       CompilationUnit cu = (CompilationUnit)this.parent;
-       if (checkOwner && cu.isPrimary()) return this;
-       return cu.getImportContainer();
-}
-/**
- * @see ISourceReference
- */
-public ISourceRange getSourceRange() throws JavaModelException {
-       IJavaElement[] imports= getChildren();
-       ISourceRange firstRange= ((ISourceReference)imports[0]).getSourceRange();
-       ISourceRange lastRange= ((ISourceReference)imports[imports.length - 1]).getSourceRange();
-       SourceRange range= new SourceRange(firstRange.getOffset(), lastRange.getOffset() + lastRange.getLength() - firstRange.getOffset());
-       return range;
-}
-/**
- * Import containers only exist if they have children.
- * @see IParent
- */
-public boolean hasChildren() {
-       return true;
-}
-/**
- */
-public String readableName() {
+  protected ImportContainer(CompilationUnit parent) {
+    super(parent, ""); //$NON-NLS-1$
+  }
 
-       return null;
-}
-/**
- * @private Debugging purposes
- */
-protected void toString(int tab, StringBuffer buffer) {
-       Object info = JavaModelManager.getJavaModelManager().peekAtInfo(this);
-       if (info == null || !(info instanceof JavaElementInfo)) return;
-       IJavaElement[] children = ((JavaElementInfo)info).getChildren();
-       for (int i = 0; i < children.length; i++) {
-               if (i > 0) buffer.append("\n"); //$NON-NLS-1$
-               ((JavaElement)children[i]).toString(tab, buffer);
-       }
-}
-/**
- *  Debugging purposes
- */
-protected void toStringInfo(int tab, StringBuffer buffer, Object info) {
-       buffer.append(this.tabString(tab));
-       buffer.append("<import container>"); //$NON-NLS-1$
-       if (info == null) {
-               buffer.append(" (not open)"); //$NON-NLS-1$
-       }
-}
-}
+  public boolean equals(Object o) {
+    if (!(o instanceof ImportContainer))
+      return false;
+    return super.equals(o);
+  }
+
+  /**
+   * @see IJavaElement
+   */
+  public int getElementType() {
+    return IMPORT_CONTAINER;
+  }
+
+  /*
+   * @see JavaElement
+   */
+  public IJavaElement getHandleFromMemento(String token, MementoTokenizer memento, WorkingCopyOwner workingCopyOwner) {
+    switch (token.charAt(0)) {
+    case JEM_COUNT:
+      return getHandleUpdatingCountFromMemento(memento, workingCopyOwner);
+    case JEM_IMPORTDECLARATION:
+      if (memento.hasMoreTokens()) {
+        String importName = memento.nextToken();
+        JavaElement importDecl = (JavaElement) getImport(importName);
+        return importDecl.getHandleFromMemento(memento, workingCopyOwner);
+      } else {
+        return this;
+      }
+    }
+    return null;
+  }
+
+  /**
+   * @see JavaElement#getHandleMemento()
+   */
+  protected char getHandleMementoDelimiter() {
+    return JavaElement.JEM_IMPORTDECLARATION;
+  }
+
+  /**
+   * @see IImportContainer
+   */
+  public IImportDeclaration getImport(String importName) {
+    return new ImportDeclaration(this, importName);
+  }
+
+  /*
+   * @see JavaElement#getPrimaryElement(boolean)
+   */
+  public IJavaElement getPrimaryElement(boolean checkOwner) {
+    CompilationUnit cu = (CompilationUnit) this.parent;
+    if (checkOwner && cu.isPrimary())
+      return this;
+    return cu.getImportContainer();
+  }
+
+  /**
+   * @see ISourceReference
+   */
+  public ISourceRange getSourceRange() throws JavaModelException {
+    IJavaElement[] imports = getChildren();
+    ISourceRange firstRange = ((ISourceReference) imports[0]).getSourceRange();
+    ISourceRange lastRange = ((ISourceReference) imports[imports.length - 1]).getSourceRange();
+    SourceRange range = new SourceRange(firstRange.getOffset(), lastRange.getOffset() + lastRange.getLength()
+        - firstRange.getOffset());
+    return range;
+  }
+
+  /**
+   * Import containers only exist if they have children.
+   * 
+   * @see IParent
+   */
+  public boolean hasChildren() {
+    return true;
+  }
+
+  /**
+   */
+  public String readableName() {
+
+    return null;
+  }
+
+  /**
+   * @private Debugging purposes
+   */
+  protected void toString(int tab, StringBuffer buffer) {
+    Object info = JavaModelManager.getJavaModelManager().peekAtInfo(this);
+    if (info == null || !(info instanceof JavaElementInfo))
+      return;
+    IJavaElement[] children = ((JavaElementInfo) info).getChildren();
+    for (int i = 0; i < children.length; i++) {
+      if (i > 0)
+        buffer.append("\n"); //$NON-NLS-1$
+      ((JavaElement) children[i]).toString(tab, buffer);
+    }
+  }
+
+  /**
+   * Debugging purposes
+   */
+  protected void toStringInfo(int tab, StringBuffer buffer, Object info) {
+    buffer.append(this.tabString(tab));
+    buffer.append("<import container>"); //$NON-NLS-1$
+    if (info == null) {
+      buffer.append(" (not open)"); //$NON-NLS-1$
+    }
+  }
+}
\ No newline at end of file
index 0bff672..7b15656 100644 (file)
@@ -10,6 +10,9 @@
  *******************************************************************************/
 package net.sourceforge.phpdt.internal.core;
 
+import net.sourceforge.phpdt.internal.core.Assert;
+import net.sourceforge.phpdt.internal.core.JavaElement;
+
 import net.sourceforge.phpdt.core.IImportDeclaration;
 import net.sourceforge.phpdt.core.IJavaElement;
 import net.sourceforge.phpdt.core.JavaModelException;
@@ -49,7 +52,7 @@ public int getElementType() {
        return IMPORT_DECLARATION;
 }
 /**
- * @see org.eclipse.jdt.core.IImportDeclaration#getFlags()
+ * @see net.sourceforge.phpdt.core.IImportDeclaration#getFlags()
  */
 public int getFlags() throws JavaModelException {
        ImportDeclarationElementInfo info = (ImportDeclarationElementInfo)getElementInfo();
@@ -59,15 +62,15 @@ public int getFlags() throws JavaModelException {
  * @see JavaElement#getHandleMemento()
  * For import declarations, the handle delimiter is associated to the import container already
  */
-//public String getHandleMemento(){
-//     StringBuffer buff= new StringBuffer(((JavaElement)getParent()).getHandleMemento());
-//     escapeMementoName(buff, getElementName());
-//     if (this.occurrenceCount > 1) {
-//             buff.append(JEM_COUNT);
-//             buff.append(this.occurrenceCount);
-//     }
-//     return buff.toString();
-//}
+public String getHandleMemento(){
+       StringBuffer buff= new StringBuffer(((JavaElement)getParent()).getHandleMemento());
+       escapeMementoName(buff, getElementName());
+       if (this.occurrenceCount > 1) {
+               buff.append(JEM_COUNT);
+               buff.append(this.occurrenceCount);
+       }
+       return buff.toString();
+}
 /**
  * @see JavaElement#getHandleMemento()
  */
@@ -76,6 +79,7 @@ protected char getHandleMementoDelimiter() {
        Assert.isTrue(false, "Should not be called"); //$NON-NLS-1$
        return 0;
 }
+
 /*
  * @see JavaElement#getPrimaryElement(boolean)
  */
index 9a5911d..2f99fc0 100644 (file)
@@ -14,7 +14,7 @@ import net.sourceforge.phpdt.internal.compiler.env.ISourceImport;
 
 /**
  * Element info for IImportDeclaration elements.
- * @see org.eclipse.jdt.core.IImportDeclaration
+ * @see net.sourceforge.phpdt.core.IImportDeclaration
  */
 public class ImportDeclarationElementInfo extends MemberElementInfo implements ISourceImport{
        
@@ -22,7 +22,7 @@ public class ImportDeclarationElementInfo extends MemberElementInfo implements I
        boolean onDemand;
        
        /* (non-Javadoc)
-        * @see org.eclipse.jdt.internal.compiler.env.ISourceImport#onDemand()
+        * @see net.sourceforge.phpdt.internal.compiler.env.ISourceImport#onDemand()
         */
        public boolean onDemand() {
                return this.onDemand;
diff --git a/net.sourceforge.phpeclipse/src/net/sourceforge/phpdt/internal/core/InternalNamingConventions.java b/net.sourceforge.phpeclipse/src/net/sourceforge/phpdt/internal/core/InternalNamingConventions.java
new file mode 100644 (file)
index 0000000..419223e
--- /dev/null
@@ -0,0 +1,302 @@
+/*******************************************************************************
+ * Copyright (c) 2000, 2004 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials 
+ * are made available under the terms of the Common Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/cpl-v10.html
+ * 
+ * Contributors:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+package net.sourceforge.phpdt.internal.core;
+
+import java.util.Map;
+
+import net.sourceforge.phpdt.core.Flags;
+import net.sourceforge.phpdt.core.IJavaProject;
+import net.sourceforge.phpdt.core.JavaConventions;
+import net.sourceforge.phpdt.core.compiler.CharOperation;
+import net.sourceforge.phpdt.core.compiler.InvalidInputException;
+import net.sourceforge.phpdt.internal.codeassist.impl.AssistOptions;
+import net.sourceforge.phpdt.internal.compiler.impl.CompilerOptions;
+import net.sourceforge.phpdt.internal.compiler.parser.Scanner;
+
+public class InternalNamingConventions {
+       private static final char[] DEFAULT_NAME = "name".toCharArray(); //$NON-NLS-1$
+       
+       private static Scanner getNameScanner(CompilerOptions compilerOptions) {
+               return
+                       new Scanner(
+                               false /*comment*/, 
+                               false /*whitespace*/, 
+                               false /*nls*/, 
+//                             compilerOptions.sourceLevel /*sourceLevel*/, 
+                               false,
+                               false,
+                               null /*taskTags*/, 
+                               null/*taskPriorities*/, false);
+                 
+       }
+       public static void suggestArgumentNames(IJavaProject javaProject, char[] packageName, char[] qualifiedTypeName, int dim, char[][] excludedNames, INamingRequestor requestor) {
+               Map options = javaProject.getOptions(true);
+               CompilerOptions compilerOptions = new CompilerOptions(options);
+               AssistOptions assistOptions = new AssistOptions(options);
+
+               suggestNames(
+                       packageName,
+                       qualifiedTypeName,
+                       dim,
+                       assistOptions.argumentPrefixes,
+                       assistOptions.argumentSuffixes,
+                       excludedNames,
+                       getNameScanner(compilerOptions),
+                       requestor);
+       }
+       public static void suggestFieldNames(IJavaProject javaProject, char[] packageName, char[] qualifiedTypeName, int dim, int modifiers, char[][] excludedNames, INamingRequestor requestor) {
+               boolean isStatic = Flags.isStatic(modifiers);
+               
+               Map options = javaProject.getOptions(true);
+               CompilerOptions compilerOptions = new CompilerOptions(options);
+               AssistOptions assistOptions = new AssistOptions(options);
+
+               suggestNames(
+                       packageName,
+                       qualifiedTypeName,
+                       dim,
+                       isStatic ? assistOptions.staticFieldPrefixes : assistOptions.fieldPrefixes,
+                       isStatic ? assistOptions.staticFieldSuffixes : assistOptions.fieldSuffixes,
+                       excludedNames,
+                       getNameScanner(compilerOptions),
+                       requestor);
+       }
+       public static void suggestLocalVariableNames(IJavaProject javaProject, char[] packageName, char[] qualifiedTypeName, int dim, char[][] excludedNames, INamingRequestor requestor) {
+               Map options = javaProject.getOptions(true);
+               CompilerOptions compilerOptions = new CompilerOptions(options);
+               AssistOptions assistOptions = new AssistOptions(options);
+
+               suggestNames(
+                       packageName,
+                       qualifiedTypeName,
+                       dim,
+                       assistOptions.localPrefixes,
+                       assistOptions.localSuffixes,
+                       excludedNames,
+                       getNameScanner(compilerOptions),
+                       requestor);
+       }
+       
+       private static void suggestNames(
+               char[] packageName,
+               char[] qualifiedTypeName,
+               int dim,
+               char[][] prefixes,
+               char[][] suffixes,
+               char[][] excludedNames,
+               Scanner nameScanner,
+               INamingRequestor requestor){
+               
+               if(qualifiedTypeName == null || qualifiedTypeName.length == 0)
+                       return;
+               
+               char[] typeName = CharOperation.lastSegment(qualifiedTypeName, '.');
+       
+               if(prefixes == null || prefixes.length == 0) {
+                       prefixes = new char[1][0];
+               } else {
+                       int length = prefixes.length;
+                       System.arraycopy(prefixes, 0, prefixes = new char[length+1][], 0, length);
+                       prefixes[length] = CharOperation.NO_CHAR;
+               }
+       
+               if(suffixes == null || suffixes.length == 0) {
+                       suffixes = new char[1][0];
+               } else {
+                       int length = suffixes.length;
+                       System.arraycopy(suffixes, 0, suffixes = new char[length+1][], 0, length);
+                       suffixes[length] = CharOperation.NO_CHAR;
+               }
+       
+               char[][] tempNames = null;
+       
+               // compute variable name for base type
+//             try{
+//                     nameScanner.setSource(typeName);
+//                     switch (nameScanner.getNextToken()) {
+//                             case TerminalTokens.TokenNameint :
+//                             case TerminalTokens.TokenNamebyte :
+//                             case TerminalTokens.TokenNameshort :
+//                             case TerminalTokens.TokenNamechar :
+//                             case TerminalTokens.TokenNamelong :
+//                             case TerminalTokens.TokenNamefloat :
+//                             case TerminalTokens.TokenNamedouble :
+//                             case TerminalTokens.TokenNameboolean :  
+//                                     char[] name = computeBaseTypeNames(typeName[0], excludedNames);
+//                                     if(name != null) {
+//                                             tempNames =  new char[][]{name};
+//                                     }
+//                                     break;
+//                     }       
+//             } catch(InvalidInputException e){
+//                     // ignore
+//             }
+
+               // compute variable name for non base type
+               if(tempNames == null) {
+                       tempNames = computeNames(typeName);
+               }
+       
+               boolean acceptDefaultName = true;
+               
+               for (int i = 0; i < tempNames.length; i++) {
+                       char[] tempName = tempNames[i];
+                       if(dim > 0) {
+                               int length = tempName.length;
+                               if (tempName[length-1] == 's'){
+                                       if(tempName.length > 1 && tempName[length-2] == 's') {
+                                               System.arraycopy(tempName, 0, tempName = new char[length + 2], 0, length);
+                                               tempName[length] = 'e';
+                                               tempName[length+1] = 's';
+                                       }
+                               } else if(tempName[length-1] == 'y') {
+                                       System.arraycopy(tempName, 0, tempName = new char[length + 2], 0, length);
+                                       tempName[length-1] = 'i';
+                                       tempName[length] = 'e';
+                                       tempName[length+1] = 's';
+                               } else {
+                                       System.arraycopy(tempName, 0, tempName = new char[length + 1], 0, length);
+                                       tempName[length] = 's';
+                               }
+                       }
+               
+                       for (int j = 0; j < prefixes.length; j++) {
+                               if(prefixes[j].length > 0
+                                       && Character.isLetterOrDigit(prefixes[j][prefixes[j].length - 1])) {
+                                       tempName[0] = Character.toUpperCase(tempName[0]);
+                               } else {
+                                       tempName[0] = Character.toLowerCase(tempName[0]);
+                               }
+                               char[] prefixName = CharOperation.concat(prefixes[j], tempName);
+                               for (int k = 0; k < suffixes.length; k++) {
+                                       char[] suffixName = CharOperation.concat(prefixName, suffixes[k]);
+                                       suffixName =
+                                               excludeNames(
+                                                       suffixName,
+                                                       prefixName,
+                                                       suffixes[k],
+                                                       excludedNames);
+                                       if(JavaConventions.validateFieldName(new String(suffixName)).isOK()) {
+                                               acceptName(suffixName, prefixes[j], suffixes[k],  j == 0, k == 0, requestor);
+                                               acceptDefaultName = false;
+                                       } else {
+                                               suffixName = CharOperation.concat(
+                                                       prefixName,
+                                                       String.valueOf(1).toCharArray(),
+                                                       suffixes[k]
+                                               );
+                                               suffixName =
+                                                       excludeNames(
+                                                               suffixName,
+                                                               prefixName,
+                                                               suffixes[k],
+                                                               excludedNames);
+                                               if(JavaConventions.validateFieldName(new String(suffixName)).isOK()) {
+                                                       acceptName(suffixName, prefixes[j], suffixes[k], j == 0, k == 0, requestor);
+                                                       acceptDefaultName = false;
+                                               }
+                                       }
+                               }
+                       
+                       }
+               }
+               // if no names were found
+               if(acceptDefaultName) {
+                       char[] name = excludeNames(DEFAULT_NAME, DEFAULT_NAME, CharOperation.NO_CHAR, excludedNames);
+                       requestor.acceptNameWithoutPrefixAndSuffix(name);
+               }
+       }
+       
+       private static void acceptName(
+               char[] name,
+               char[] prefix,
+               char[] suffix,
+               boolean isFirstPrefix,
+               boolean isFirstSuffix,
+               INamingRequestor requestor) {
+               if(prefix.length > 0 && suffix.length > 0) {
+                       requestor.acceptNameWithPrefixAndSuffix(name, isFirstPrefix, isFirstSuffix);
+               } else if(prefix.length > 0){
+                       requestor.acceptNameWithPrefix(name, isFirstPrefix);
+               } else if(suffix.length > 0){
+                       requestor.acceptNameWithSuffix(name, isFirstSuffix);
+               } else {
+                       requestor.acceptNameWithoutPrefixAndSuffix(name);
+               }
+       }
+       
+       private static char[] computeBaseTypeNames(char firstName, char[][] excludedNames){
+               char[] name = new char[]{firstName};
+               
+               for(int i = 0 ; i < excludedNames.length ; i++){
+                       if(CharOperation.equals(name, excludedNames[i], false)) {
+                               name[0]++;
+                               if(name[0] > 'z')
+                                       name[0] = 'a';
+                               if(name[0] == firstName)
+                                       return null;
+                               i = 0;
+                       }       
+               }
+               
+               return name;
+       }
+       
+       private static char[][] computeNames(char[] sourceName){
+               char[][] names = new char[5][];
+               int nameCount = 0;
+               boolean previousIsUpperCase = false;
+               boolean previousIsLetter = true;
+               for(int i = sourceName.length - 1 ; i >= 0 ; i--){
+                       boolean isUpperCase = Character.isUpperCase(sourceName[i]);
+                       boolean isLetter = Character.isLetter(sourceName[i]);
+                       if(isUpperCase && !previousIsUpperCase && previousIsLetter){
+                               char[] name = CharOperation.subarray(sourceName,i,sourceName.length);
+                               if(name.length > 1){
+                                       if(nameCount == names.length) {
+                                               System.arraycopy(names, 0, names = new char[nameCount * 2][], 0, nameCount);
+                                       }
+                                       name[0] = Character.toLowerCase(name[0]);
+                                       names[nameCount++] = name;
+                               }
+                       }
+                       previousIsUpperCase = isUpperCase;
+                       previousIsLetter = isLetter;
+               }
+               if(nameCount == 0){
+                       names[nameCount++] = CharOperation.toLowerCase(sourceName);                             
+               }
+               System.arraycopy(names, 0, names = new char[nameCount][], 0, nameCount);
+               return names;
+       }
+
+       private static char[] excludeNames(
+               char[] suffixName,
+               char[] prefixName,
+               char[] suffix,
+               char[][] excludedNames) {
+               int count = 2;
+               int m = 0;
+               while (m < excludedNames.length) {
+                       if(CharOperation.equals(suffixName, excludedNames[m], false)) {
+                               suffixName = CharOperation.concat(
+                                       prefixName,
+                                       String.valueOf(count++).toCharArray(),
+                                       suffix
+                               );
+                               m = 0;
+                       } else {
+                               m++;
+                       }
+               }
+               return suffixName;
+       }
+}
index 6eb79ee..a14455c 100644 (file)
@@ -25,8 +25,10 @@ import net.sourceforge.phpdt.core.IParent;
 import net.sourceforge.phpdt.core.ISourceRange;
 import net.sourceforge.phpdt.core.ISourceReference;
 import net.sourceforge.phpdt.core.JavaModelException;
+import net.sourceforge.phpdt.core.WorkingCopyOwner;
 import net.sourceforge.phpdt.core.jdom.IDOMCompilationUnit;
 import net.sourceforge.phpdt.core.jdom.IDOMNode;
+import net.sourceforge.phpdt.internal.core.util.MementoTokenizer;
 import net.sourceforge.phpdt.internal.core.util.Util;
 import net.sourceforge.phpdt.internal.corext.Assert;
 
@@ -43,13 +45,13 @@ import org.eclipse.core.runtime.jobs.ISchedulingRule;
 
 /**
  * Root of Java element handle hierarchy.
- * 
+ *  
  * @see IJavaElement
  */
 public abstract class JavaElement extends PlatformObject
                implements
                        IJavaElement {
-
+    public static final char JEM_ESCAPE = '\\';
        public static final char JEM_JAVAPROJECT = '=';
        public static final char JEM_PACKAGEFRAGMENTROOT = Path.SEPARATOR;
        public static final char JEM_PACKAGEFRAGMENT = '<';
@@ -57,10 +59,12 @@ public abstract class JavaElement extends PlatformObject
        public static final char JEM_METHOD = '~';
        public static final char JEM_INITIALIZER = '|';
        public static final char JEM_COMPILATIONUNIT = '{';
-       public static final char JEM_CLASSFILE = '(';
+//     public static final char JEM_CLASSFILE = '(';
        public static final char JEM_TYPE = '[';
        public static final char JEM_PACKAGEDECLARATION = '%';
        public static final char JEM_IMPORTDECLARATION = '#';
+       public static final char JEM_COUNT = '!';
+       public static final char JEM_LOCALVARIABLE = '@';
 
        /**
         * A count to uniquely identify this element in the case that a duplicate
@@ -77,10 +81,10 @@ public abstract class JavaElement extends PlatformObject
         */
        //protected int fLEType = 0;
        /**
-        * This element's parent, or <code>null</code> if this element does not
-        * have a parent.
+        * This element's parent, or <code>null</code> if this
+        * element does not have a parent.
         */
-       protected IJavaElement parent;
+       protected JavaElement parent;
 
        /**
         * This element's name, or an empty <code>String</code> if this element
@@ -159,6 +163,30 @@ public abstract class JavaElement extends PlatformObject
        protected boolean equalsDOMNode(IDOMNode node) throws JavaModelException {
                return false;
        }
+       protected void escapeMementoName(StringBuffer buffer, String mementoName) {
+               for (int i = 0, length = mementoName.length(); i < length; i++) {
+                       char character = mementoName.charAt(i);
+                       switch (character) {
+                               case JEM_ESCAPE:
+                               case JEM_COUNT:
+                               case JEM_JAVAPROJECT:
+                               case JEM_PACKAGEFRAGMENTROOT:
+                               case JEM_PACKAGEFRAGMENT:
+                               case JEM_FIELD:
+                               case JEM_METHOD:
+                               case JEM_INITIALIZER:
+                               case JEM_COMPILATIONUNIT:
+//                             case JEM_CLASSFILE:
+                               case JEM_TYPE:
+                               case JEM_PACKAGEDECLARATION:
+                               case JEM_IMPORTDECLARATION:
+                               case JEM_LOCALVARIABLE:
+                                       buffer.append(JEM_ESCAPE);
+                       }
+                       buffer.append(character);
+               }
+       }
+       
        /**
         * @see IJavaElement
         */
@@ -332,6 +360,31 @@ public abstract class JavaElement extends PlatformObject
                return name;
        }
 
+       /*
+        * Creates a Java element handle from the given memento.
+        * The given token is the current delimiter indicating the type of the next token(s).
+        * The given working copy owner is used only for compilation unit handles.
+        */
+       public abstract IJavaElement getHandleFromMemento(String token, MementoTokenizer memento, WorkingCopyOwner owner);
+       /*
+        * Creates a Java element handle from the given memento.
+        * The given working copy owner is used only for compilation unit handles.
+        */
+       public IJavaElement getHandleFromMemento(MementoTokenizer memento, WorkingCopyOwner owner) {
+               if (!memento.hasMoreTokens()) return this;
+               String token = memento.nextToken();
+               return getHandleFromMemento(token, memento, owner);
+       }
+       /*
+        * Update the occurence count of the receiver and creates a Java element handle from the given memento.
+        * The given working copy owner is used only for compilation unit handles.
+        */
+       public IJavaElement getHandleUpdatingCountFromMemento(MementoTokenizer memento, WorkingCopyOwner owner) {
+               this.occurrenceCount = Integer.parseInt(memento.nextToken());
+               if (!memento.hasMoreTokens()) return this;
+               String token = memento.nextToken();
+               return getHandleFromMemento(token, memento, owner);
+       }
        /**
         * @see IJavaElement
         */
@@ -341,17 +394,25 @@ public abstract class JavaElement extends PlatformObject
        /**
         * @see JavaElement#getHandleMemento()
         */
-       public String getHandleMemento() {
-               StringBuffer buff = new StringBuffer(((JavaElement) getParent())
-                               .getHandleMemento());
+       public String getHandleMemento(){
+               StringBuffer buff= new StringBuffer(((JavaElement)getParent()).getHandleMemento());
                buff.append(getHandleMementoDelimiter());
-               buff.append(getElementName());
+               escapeMementoName(buff, getElementName());
+               if (this.occurrenceCount > 1) {
+                       buff.append(JEM_COUNT);
+                       buff.append(this.occurrenceCount);
+               }
                return buff.toString();
        }
        /**
         * Returns the <code>char</code> that marks the start of this handles
         * contribution to a memento.
         */
+       
+       /**
+        * Returns the <code>char</code> that marks the start of this handles
+        * contribution to a memento.
+        */
        protected abstract char getHandleMementoDelimiter();
        /**
         * @see IJavaElement
@@ -399,6 +460,7 @@ public abstract class JavaElement extends PlatformObject
 
                return (IOpenable) parent;
        }
+       
        /**
         * @see IJavaElement
         */
@@ -434,9 +496,13 @@ public abstract class JavaElement extends PlatformObject
                        int i;
                        for (i = 0; i < children.length; i++) {
                                IJavaElement aChild = children[i];
+                               
                                if (aChild instanceof SourceRefElement) {
                                        SourceRefElement child = (SourceRefElement) children[i];
                                        ISourceRange range = child.getSourceRange();
+//                                     if (child.name.equals("stopObject")||range==null || range.getOffset()<=0) {
+//                                       System.out.println(child.name);
+//                                     }
                                        if (position < range.getOffset() + range.getLength()
                                                        && position >= range.getOffset()) {
                                                if (child instanceof IParent) {
@@ -463,7 +529,7 @@ public abstract class JavaElement extends PlatformObject
        /*
         * (non-Javadoc)
         * 
-        * @see org.eclipse.jdt.core.IJavaElement#getSchedulingRule()
+        * @see net.sourceforge.phpdt.core.IJavaElement#getSchedulingRule()
         */
        public ISchedulingRule getSchedulingRule() {
                IResource resource = getResource();
@@ -523,19 +589,18 @@ public abstract class JavaElement extends PlatformObject
                return Util.combineHashCodes(this.name.hashCode(), this.parent
                                .hashCode());
        }
-
        /**
         * Returns true if this element is an ancestor of the given element,
         * otherwise false.
         */
-       protected boolean isAncestorOf(IJavaElement e) {
-               IJavaElement parent = e.getParent();
-               while (parent != null && !parent.equals(this)) {
-                       parent = parent.getParent();
+       public boolean isAncestorOf(IJavaElement e) {
+               IJavaElement parentElement= e.getParent();
+               while (parentElement != null && !parentElement.equals(this)) {
+                       parentElement= parentElement.getParent();
                }
-               return parent != null;
+               return parentElement != null;
        }
-
+       
        /**
         * @see IJavaElement
         */
index 489e3c6..e184748 100644 (file)
@@ -18,7 +18,10 @@ import java.util.Map;
 import net.sourceforge.phpdt.core.IJavaElement;
 import net.sourceforge.phpdt.core.IJavaModel;
 import net.sourceforge.phpdt.core.IJavaProject;
+import net.sourceforge.phpdt.core.IOpenable;
 import net.sourceforge.phpdt.core.JavaModelException;
+import net.sourceforge.phpdt.core.WorkingCopyOwner;
+import net.sourceforge.phpdt.internal.core.util.MementoTokenizer;
 import net.sourceforge.phpdt.internal.core.util.Util;
 
 import org.eclipse.core.resources.IContainer;
@@ -31,9 +34,6 @@ import org.eclipse.core.resources.ResourcesPlugin;
 import org.eclipse.core.runtime.IPath;
 import org.eclipse.core.runtime.IProgressMonitor;
 import org.eclipse.core.runtime.Path;
-import net.sourceforge.phpdt.internal.core.JavaModelInfo;
-import net.sourceforge.phpdt.internal.core.JavaProject;
-import net.sourceforge.phpdt.internal.core.OpenableElementInfo;
 import org.eclipse.jface.util.Assert;
 
 
@@ -358,6 +358,20 @@ protected boolean generateInfos(
 //}
 
 
+/*
+ * @see JavaElement
+ */
+public IJavaElement getHandleFromMemento(String token, MementoTokenizer memento, WorkingCopyOwner owner) {
+       switch (token.charAt(0)) {
+               case JEM_COUNT:
+                       return getHandleUpdatingCountFromMemento(memento, owner);
+               case JEM_JAVAPROJECT:
+                       String projectName = memento.nextToken();
+                       JavaElement project = (JavaElement)getJavaProject(projectName);
+                       return project.getHandleFromMemento(memento, owner);
+       }
+       return null;
+}
 /**
  * @see JavaElement#getHandleMemento()
  */
@@ -372,6 +386,7 @@ protected char getHandleMementoDelimiter(){
        Assert.isTrue(false, "Should not be called"); //$NON-NLS-1$
        return 0;
 }
+
 /**
  * @see IJavaModel
  */
index 6ed2fdb..f860394 100644 (file)
@@ -52,7 +52,6 @@ import net.sourceforge.phpeclipse.PHPeclipsePlugin;
 
 import org.eclipse.core.resources.IFile;
 import org.eclipse.core.resources.IFolder;
-import org.eclipse.core.resources.IMarker;
 import org.eclipse.core.resources.IProject;
 import org.eclipse.core.resources.IResource;
 import org.eclipse.core.resources.IResourceDelta;
@@ -88,7 +87,7 @@ public class JavaModelManager implements ISaveParticipant {
         * Unique handle onto the JavaModel
         */
        final JavaModel javaModel = new JavaModel();
-       
+//     public IndexManager indexManager = new IndexManager();
        /**
         * Classpath variables pool
         */
@@ -96,13 +95,13 @@ public class JavaModelManager implements ISaveParticipant {
        public static HashMap PreviousSessionVariables = new HashMap(5);
        public static HashSet OptionNames = new HashSet(20);
        public final static String CP_VARIABLE_PREFERENCES_PREFIX = PHPeclipsePlugin.PLUGIN_ID+".classpathVariable."; //$NON-NLS-1$
-//     public final static String CP_CONTAINER_PREFERENCES_PREFIX = PHPCore.PLUGIN_ID+".classpathContainer."; //$NON-NLS-1$
+       public final static String CP_CONTAINER_PREFERENCES_PREFIX = PHPeclipsePlugin.PLUGIN_ID+".classpathContainer."; //$NON-NLS-1$
        public final static String CP_ENTRY_IGNORE = "##<cp entry ignore>##"; //$NON-NLS-1$
                
        /**
         * Classpath containers pool
         */
-       public static HashMap Containers = new HashMap(5);
+       public static HashMap containers = new HashMap(5);
        public static HashMap PreviousSessionContainers = new HashMap(5);
 
        /**
@@ -432,8 +431,8 @@ public class JavaModelManager implements ISaveParticipant {
                                if (entry.getEntryKind() == IClasspathEntry.CPE_PROJECT) continue;
                                IPath rootPath = entry.getPath();
                                if (rootPath.equals(resourcePath)) {
-                                       return project.getPackageFragmentRoot(resource);
-                               } else if (rootPath.isPrefixOf(resourcePath) && !Util.isExcluded(resource, ((ClasspathEntry)entry).fullExclusionPatternChars())) {
+                                       return project.getPackageFragmentRoot(resource);  
+                               } else if (rootPath.isPrefixOf(resourcePath) && !Util.isExcluded(resource, null, ((ClasspathEntry)entry).fullExclusionPatternChars())) {
                                        // given we have a resource child of the root, it cannot be a JAR pkg root
                                        IPackageFragmentRoot root = ((JavaProject) project).getFolderPackageFragmentRoot(rootPath);
                                        if (root == null) return null;
@@ -541,24 +540,85 @@ public class JavaModelManager implements ISaveParticipant {
        /**
         * A weak set of the known scopes.
         */
-       protected WeakHashMap scopes = new WeakHashMap();
-
+       protected WeakHashMap searchScopes = new WeakHashMap();
+
+//     public static class PerProjectInfo {
+//             public IProject project;
+//             public Object savedState;
+//             public boolean triedRead;
+//             public IClasspathEntry[] classpath;
+//             public IClasspathEntry[] lastResolvedClasspath;
+//             public Map resolvedPathToRawEntries; // reverse map from resolved path to raw entries
+//             public IPath outputLocation;
+//             public Preferences preferences;
+//             public PerProjectInfo(IProject project) {
+//
+//                     this.triedRead = false;
+//                     this.savedState = null;
+//                     this.project = project;
+//             }
+//     }
+       
        public static class PerProjectInfo {
+               
                public IProject project;
                public Object savedState;
                public boolean triedRead;
-               public IClasspathEntry[] classpath;
-               public IClasspathEntry[] lastResolvedClasspath;
+               public IClasspathEntry[] rawClasspath;
+               public IClasspathEntry[] resolvedClasspath;
                public Map resolvedPathToRawEntries; // reverse map from resolved path to raw entries
                public IPath outputLocation;
                public Preferences preferences;
+               
                public PerProjectInfo(IProject project) {
 
                        this.triedRead = false;
                        this.savedState = null;
                        this.project = project;
                }
+               
+               // updating raw classpath need to flush obsoleted cached information about resolved entries
+               public synchronized void updateClasspathInformation(IClasspathEntry[] newRawClasspath) {
+
+                       this.rawClasspath = newRawClasspath;
+                       this.resolvedClasspath = null;
+                       this.resolvedPathToRawEntries = null;
+               }
+               public String toString() {
+                       StringBuffer buffer = new StringBuffer();
+                       buffer.append("Info for "); //$NON-NLS-1$
+                       buffer.append(this.project.getFullPath());
+                       buffer.append("\nRaw classpath:\n"); //$NON-NLS-1$
+                       if (this.rawClasspath == null) {
+                               buffer.append("  <null>\n"); //$NON-NLS-1$
+                       } else {
+                               for (int i = 0, length = this.rawClasspath.length; i < length; i++) {
+                                       buffer.append("  "); //$NON-NLS-1$
+                                       buffer.append(this.rawClasspath[i]);
+                                       buffer.append('\n');
+                               }
+                       }
+                       buffer.append("Resolved classpath:\n"); //$NON-NLS-1$
+                       IClasspathEntry[] resolvedCP = this.resolvedClasspath;
+                       if (resolvedCP == null) {
+                               buffer.append("  <null>\n"); //$NON-NLS-1$
+                       } else {
+                               for (int i = 0, length = resolvedCP.length; i < length; i++) {
+                                       buffer.append("  "); //$NON-NLS-1$
+                                       buffer.append(resolvedCP[i]);
+                                       buffer.append('\n');
+                               }
+                       }
+                       buffer.append("Output location:\n  "); //$NON-NLS-1$
+                       if (this.outputLocation == null) {
+                               buffer.append("<null>"); //$NON-NLS-1$
+                       } else {
+                               buffer.append(this.outputLocation);
+                       }
+                       return buffer.toString();
+               }
        }
+       
        public static class PerWorkingCopyInfo implements IProblemRequestor {
                int useCount = 0;
                IProblemRequestor problemRequestor;
@@ -979,6 +1039,9 @@ public class JavaModelManager implements ISaveParticipant {
                return this.elementsOutOfSynchWithBuffers;
        }
 
+//     public IndexManager getIndexManager() {
+//             return this.indexManager;
+//     }
        /**
         * Returns the <code>IJavaElement</code> represented by the 
         * <code>String</code> memento.
@@ -1582,9 +1645,14 @@ public class JavaModelManager implements ISaveParticipant {
                }
        }
        
-//     PROTECTED VOID REMOVEINFO(IJAVAELEMENT ELEMENT) {
-//             THIS.CACHE.REMOVEINFO(ELEMENT);
-//     }
+       /**
+        * Remembers the given scope in a weak set
+        * (so no need to remove it: it will be removed by the garbage collector)
+        */
+//     public void rememberScope(AbstractSearchScope scope) {
+//             // NB: The value has to be null so as to not create a strong reference on the scope
+//             this.searchScopes.put(scope, null); 
+//     }       
        /*
         * Removes all cached info for the given element (including all children)
         * from the cache.
@@ -1689,11 +1757,55 @@ public class JavaModelManager implements ISaveParticipant {
                        System.out.println(Util.bind("build.saveStateComplete", String.valueOf(t))); //$NON-NLS-1$
                }
        }
-
+       private synchronized Map containerClone(IJavaProject project) {
+               Map originalProjectContainers = (Map)this.containers.get(project); 
+               if (originalProjectContainers == null) return null;
+               Map projectContainers = new HashMap(originalProjectContainers.size());
+               projectContainers.putAll(originalProjectContainers);
+               return projectContainers;
+       }
        /**
         * @see ISaveParticipant
         */
        public void saving(ISaveContext context) throws CoreException {
+               
+           // save container values on snapshot/full save
+               Preferences preferences = JavaCore.getPlugin().getPluginPreferences();
+               IJavaProject[] projects = getJavaModel().getJavaProjects();
+               for (int i = 0, length = projects.length; i < length; i++) {
+                   IJavaProject project = projects[i];
+                       // clone while iterating (see https://bugs.eclipse.org/bugs/show_bug.cgi?id=59638)
+                       Map projectContainers = containerClone(project);
+                       if (projectContainers == null) continue;
+                       for (Iterator keys = projectContainers.keySet().iterator(); keys.hasNext();) {
+                           IPath containerPath = (IPath) keys.next();
+//                         IClasspathContainer container = (IClasspathContainer) projectContainers.get(containerPath);
+                               String containerKey = CP_CONTAINER_PREFERENCES_PREFIX+project.getElementName() +"|"+containerPath;//$NON-NLS-1$
+                               String containerString = CP_ENTRY_IGNORE;
+//                             try {
+//                                     if (container != null) {
+//                                             containerString = ((JavaProject)project).encodeClasspath(container.getClasspathEntries(), null, false);
+//                                     }
+//                             } catch(JavaModelException e){
+//                                     // could not encode entry: leave it as CP_ENTRY_IGNORE
+//                             }
+                               preferences.setDefault(containerKey, CP_ENTRY_IGNORE); // use this default to get rid of removed ones
+                               preferences.setValue(containerKey, containerString);
+                       }
+               }
+               JavaCore.getPlugin().savePluginPreferences();
+               
+//             if (context.getKind() == ISaveContext.FULL_SAVE) {
+//                     // will need delta since this save (see https://bugs.eclipse.org/bugs/show_bug.cgi?id=38658)
+//                     context.needDelta();
+//                     
+//                     // clean up indexes on workspace full save
+//                     // (see https://bugs.eclipse.org/bugs/show_bug.cgi?id=52347)
+//                     IndexManager manager = this.indexManager;
+//                     if (manager != null) {
+//                             manager.cleanUpIndexes();
+//                     }
+//             }
        
                IProject savedProject = context.getProject();
                if (savedProject != null) {
@@ -1720,6 +1832,36 @@ public class JavaModelManager implements ISaveParticipant {
                        throw new CoreException(new MultiStatus(JavaCore.PLUGIN_ID, IStatus.ERROR, stats, Util.bind("build.cannotSaveStates"), null)); //$NON-NLS-1$
                }
        }
+       /**
+        * @see ISaveParticipant
+        */
+//     public void saving(ISaveContext context) throws CoreException {
+//     
+//             IProject savedProject = context.getProject();
+//             if (savedProject != null) {
+//                     if (!JavaProject.hasJavaNature(savedProject)) return; // ignore
+//                     PerProjectInfo info = getPerProjectInfo(savedProject, true /* create info */);
+//                     saveState(info, context);
+//                     return;
+//             }
+//
+//             ArrayList vStats= null; // lazy initialized
+//             for (Iterator iter =  perProjectInfo.values().iterator(); iter.hasNext();) {
+//                     try {
+//                             PerProjectInfo info = (PerProjectInfo) iter.next();
+//                             saveState(info, context);
+//                     } catch (CoreException e) {
+//                             if (vStats == null)
+//                                     vStats= new ArrayList();
+//                             vStats.add(e.getStatus());
+//                     }
+//             }
+//             if (vStats != null) {
+//                     IStatus[] stats= new IStatus[vStats.size()];
+//                     vStats.toArray(stats);
+//                     throw new CoreException(new MultiStatus(JavaCore.PLUGIN_ID, IStatus.ERROR, stats, Util.bind("build.cannotSaveStates"), null)); //$NON-NLS-1$
+//             }
+//     }
 
        /**
         * Record the order in which to build the java projects (batch build). This order is based
@@ -1903,4 +2045,29 @@ public class JavaModelManager implements ISaveParticipant {
                        return result;
                }               
        }
+       
+       /*
+        * A HashSet that contains the IJavaProject whose classpath is being resolved.
+        */
+       private ThreadLocal classpathsBeingResolved = new ThreadLocal();
+       
+       private HashSet getClasspathBeingResolved() {
+           HashSet result = (HashSet) this.classpathsBeingResolved.get();
+           if (result == null) {
+               result = new HashSet();
+               this.classpathsBeingResolved.set(result);
+           }
+           return result;
+       }
+       public boolean isClasspathBeingResolved(IJavaProject project) {
+           return getClasspathBeingResolved().contains(project);
+       }
+       
+       public void setClasspathBeingResolved(IJavaProject project, boolean classpathIsResolved) {
+           if (classpathIsResolved) {
+               getClasspathBeingResolved().add(project);
+           } else {
+               getClasspathBeingResolved().remove(project);
+           }
+       }
 }
index f803855..e3fdb4d 100644 (file)
@@ -49,6 +49,7 @@ import net.sourceforge.phpdt.core.JavaModelException;
 import net.sourceforge.phpdt.core.WorkingCopyOwner;
 import net.sourceforge.phpdt.internal.codeassist.ISearchableNameEnvironment;
 import net.sourceforge.phpdt.internal.compiler.util.ObjectVector;
+import net.sourceforge.phpdt.internal.core.util.MementoTokenizer;
 import net.sourceforge.phpdt.internal.core.util.Util;
 import net.sourceforge.phpdt.internal.corext.Assert;
 import net.sourceforge.phpeclipse.LoadPathEntry;
@@ -136,7 +137,11 @@ public class JavaProject
        public static final IClasspathEntry[] INVALID_CLASSPATH = new IClasspathEntry[0];
 
        private static final String CUSTOM_DEFAULT_OPTION_VALUE = "#\r\n\r#custom-non-empty-default-value#\r\n\r#"; //$NON-NLS-1$
-       
+       /*
+        * Value of project's resolved classpath while it is being resolved
+        */
+       private static final IClasspathEntry[] RESOLUTION_IN_PROGRESS = new IClasspathEntry[0];
+
        /**
         * Returns a canonicalized path from the given external path.
         * Note that the return path contains the same number of segments
@@ -426,57 +431,117 @@ public class JavaProject
 //     }
        
 
-
        /**
         * Internal computation of an expanded classpath. It will eliminate duplicates, and produce copies
         * of exported classpath entries to avoid possible side-effects ever after.
         */                     
        private void computeExpandedClasspath(
-               JavaProject initialProject, 
+               JavaProject initialProject,  
                boolean ignoreUnresolvedVariable,
                boolean generateMarkerOnError,
-               HashSet visitedProjects, 
-               ObjectVector accumulatedEntries) throws JavaModelException {
+               HashSet rootIDs,
+               ObjectVector accumulatedEntries,
+               Map preferredClasspaths,
+               Map preferredOutputs) throws JavaModelException {
                
-               if (visitedProjects.contains(this)){
+               String projectRootId = this.rootID();
+               if (rootIDs.contains(projectRootId)){
                        return; // break cycles if any
                }
-               visitedProjects.add(this);
+               rootIDs.add(projectRootId);
 
-               if (generateMarkerOnError && !this.equals(initialProject)){
-                       generateMarkerOnError = false;
-               }
+               IClasspathEntry[] preferredClasspath = preferredClasspaths != null ? (IClasspathEntry[])preferredClasspaths.get(this) : null;
+               IPath preferredOutput = preferredOutputs != null ? (IPath)preferredOutputs.get(this) : null;
                IClasspathEntry[] immediateClasspath = 
-                       getResolvedClasspath(ignoreUnresolvedVariable, generateMarkerOnError);
+                       preferredClasspath != null 
+                               ? getResolvedClasspath(preferredClasspath, preferredOutput, ignoreUnresolvedVariable, generateMarkerOnError, null)
+                               : getResolvedClasspath(ignoreUnresolvedVariable, generateMarkerOnError, false/*don't returnResolutionInProgress*/);
                        
                IWorkspaceRoot workspaceRoot = ResourcesPlugin.getWorkspace().getRoot();
+               boolean isInitialProject = this.equals(initialProject);
                for (int i = 0, length = immediateClasspath.length; i < length; i++){
-                       IClasspathEntry entry = immediateClasspath[i];
-
-                       boolean isInitialProject = this.equals(initialProject);
+                       ClasspathEntry entry = (ClasspathEntry) immediateClasspath[i];
                        if (isInitialProject || entry.isExported()){
+                               String rootID = entry.rootID();
+                               if (rootIDs.contains(rootID)) {
+                                       continue;
+                               }
                                
                                accumulatedEntries.add(entry);
                                
                                // recurse in project to get all its indirect exports (only consider exported entries from there on)                            
-                               if (entry.getEntryKind() == ClasspathEntry.CPE_PROJECT) {
+                               if (entry.getEntryKind() == IClasspathEntry.CPE_PROJECT) {
                                        IResource member = workspaceRoot.findMember(entry.getPath()); 
                                        if (member != null && member.getType() == IResource.PROJECT){ // double check if bound to project (23977)
                                                IProject projRsc = (IProject) member;
                                                if (JavaProject.hasJavaNature(projRsc)) {                               
-                                                       JavaProject project = (JavaProject) JavaCore.create(projRsc);
-                                                       project.computeExpandedClasspath(
+                                                       JavaProject javaProject = (JavaProject) JavaCore.create(projRsc);
+                                                       javaProject.computeExpandedClasspath(
                                                                initialProject, 
                                                                ignoreUnresolvedVariable, 
-                                                               generateMarkerOnError,
-                                                               visitedProjects, 
-                                                               accumulatedEntries);
+                                                               false /* no marker when recursing in prereq*/,
+                                                               rootIDs,
+                                                               accumulatedEntries,
+                                                               preferredClasspaths,
+                                                               preferredOutputs);
                                                }
                                        }
+                               } else {
+                                       rootIDs.add(rootID);
                                }
                        }                       
                }
        }
+       /**
+        * Internal computation of an expanded classpath. It will eliminate duplicates, and produce copies
+        * of exported classpath entries to avoid possible side-effects ever after.
+        */                     
+//     private void computeExpandedClasspath(
+//             JavaProject initialProject, 
+//             boolean ignoreUnresolvedVariable,
+//             boolean generateMarkerOnError,
+//             HashSet visitedProjects, 
+//             ObjectVector accumulatedEntries) throws JavaModelException {
+//             
+//             if (visitedProjects.contains(this)){
+//                     return; // break cycles if any
+//             }
+//             visitedProjects.add(this);
+//
+//             if (generateMarkerOnError && !this.equals(initialProject)){
+//                     generateMarkerOnError = false;
+//             }
+//             IClasspathEntry[] immediateClasspath = 
+//                     getResolvedClasspath(ignoreUnresolvedVariable, generateMarkerOnError);
+//                     
+//             IWorkspaceRoot workspaceRoot = ResourcesPlugin.getWorkspace().getRoot();
+//             for (int i = 0, length = immediateClasspath.length; i < length; i++){
+//                     IClasspathEntry entry = immediateClasspath[i];
+//
+//                     boolean isInitialProject = this.equals(initialProject);
+//                     if (isInitialProject || entry.isExported()){
+//                             
+//                             accumulatedEntries.add(entry);
+//                             
+//                             // recurse in project to get all its indirect exports (only consider exported entries from there on)                            
+//                             if (entry.getEntryKind() == ClasspathEntry.CPE_PROJECT) {
+//                                     IResource member = workspaceRoot.findMember(entry.getPath()); 
+//                                     if (member != null && member.getType() == IResource.PROJECT){ // double check if bound to project (23977)
+//                                             IProject projRsc = (IProject) member;
+//                                             if (JavaProject.hasJavaNature(projRsc)) {                               
+//                                                     JavaProject project = (JavaProject) JavaCore.create(projRsc);
+//                                                     project.computeExpandedClasspath(
+//                                                             initialProject, 
+//                                                             ignoreUnresolvedVariable, 
+//                                                             generateMarkerOnError,
+//                                                             visitedProjects, 
+//                                                             accumulatedEntries);
+//                                             }
+//                                     }
+//                             }
+//                     }                       
+//             }
+//     }
        
        /**
         * Returns (local/all) the package fragment roots identified by the given project's classpath.
@@ -1301,38 +1366,95 @@ public class JavaProject
         * This is a helper method returning the expanded classpath for the project, as a list of classpath entries, 
         * where all classpath variable entries have been resolved and substituted with their final target entries.
         * All project exports have been appended to project entries.
+        * @param ignoreUnresolvedVariable boolean
+        * @return IClasspathEntry[]
+        * @throws JavaModelException
         */
        public IClasspathEntry[] getExpandedClasspath(boolean ignoreUnresolvedVariable) throws JavaModelException {
                        
-                       return getExpandedClasspath(ignoreUnresolvedVariable, false);
+                       return getExpandedClasspath(ignoreUnresolvedVariable, false/*don't create markers*/, null, null);
        }
                
+       /*
+        * @see JavaElement
+        */
+       public IJavaElement getHandleFromMemento(String token, MementoTokenizer memento, WorkingCopyOwner owner) {
+               switch (token.charAt(0)) {
+                       case JEM_COUNT:
+                               return getHandleUpdatingCountFromMemento(memento, owner);
+                       case JEM_PACKAGEFRAGMENTROOT:
+                               String rootPath = IPackageFragmentRoot.DEFAULT_PACKAGEROOT_PATH;
+                               token = null;
+                               while (memento.hasMoreTokens()) {
+                                       token = memento.nextToken();
+                                       char firstChar = token.charAt(0);
+                                       if (firstChar != JEM_PACKAGEFRAGMENT && firstChar != JEM_COUNT) {
+                                               rootPath += token;
+                                       } else {
+                                               break;
+                                       }
+                               }
+                               JavaElement root = (JavaElement)getPackageFragmentRoot(new Path(rootPath));
+                               if (token != null && token.charAt(0) == JEM_PACKAGEFRAGMENT) {
+                                       return root.getHandleFromMemento(token, memento, owner);
+                               } else {
+                                       return root.getHandleFromMemento(memento, owner);
+                               }
+               }
+               return null;
+       }
+
+       /**
+        * Returns the <code>char</code> that marks the start of this handles
+        * contribution to a memento.
+        */
+       protected char getHandleMementoDelimiter() {
+
+               return JEM_JAVAPROJECT;
+       }
+       
        /**
         * Internal variant which can create marker on project for invalid entries,
         * it will also perform classpath expansion in presence of project prerequisites
         * exporting their entries.
+        * @param ignoreUnresolvedVariable boolean
+        * @param generateMarkerOnError boolean
+        * @param preferredClasspaths Map
+        * @param preferredOutputs Map
+        * @return IClasspathEntry[]
+        * @throws JavaModelException
         */
        public IClasspathEntry[] getExpandedClasspath(
                boolean ignoreUnresolvedVariable,
-               boolean generateMarkerOnError) throws JavaModelException {
+               boolean generateMarkerOnError,
+               Map preferredClasspaths,
+               Map preferredOutputs) throws JavaModelException {
        
                ObjectVector accumulatedEntries = new ObjectVector();           
-               computeExpandedClasspath(this, ignoreUnresolvedVariable, generateMarkerOnError, new HashSet(5), accumulatedEntries);
+               computeExpandedClasspath(this, ignoreUnresolvedVariable, generateMarkerOnError, new HashSet(5), accumulatedEntries, preferredClasspaths, preferredOutputs);
                
                IClasspathEntry[] expandedPath = new IClasspathEntry[accumulatedEntries.size()];
                accumulatedEntries.copyInto(expandedPath);
 
                return expandedPath;
        }
-
-       /**
-        * Returns the <code>char</code> that marks the start of this handles
-        * contribution to a memento.
-        */
-       protected char getHandleMementoDelimiter() {
-
-               return JEM_JAVAPROJECT;
-       }
+//     /**
+//      * Internal variant which can create marker on project for invalid entries,
+//      * it will also perform classpath expansion in presence of project prerequisites
+//      * exporting their entries.
+//      */
+//     public IClasspathEntry[] getExpandedClasspath(
+//             boolean ignoreUnresolvedVariable,
+//             boolean generateMarkerOnError) throws JavaModelException {
+//     
+//             ObjectVector accumulatedEntries = new ObjectVector();           
+//             computeExpandedClasspath(this, ignoreUnresolvedVariable, generateMarkerOnError, new HashSet(5), accumulatedEntries);
+//             
+//             IClasspathEntry[] expandedPath = new IClasspathEntry[accumulatedEntries.size()];
+//             accumulatedEntries.copyInto(expandedPath);
+//
+//             return expandedPath;
+//     }
 
        /**
         * Find the specific Java command amongst the build spec of a given description
@@ -1405,7 +1527,7 @@ public class JavaProject
 //     }
 
        /**
-        * @see org.eclipse.jdt.core.IJavaProject#getOption(String, boolean)
+        * @see net.sourceforge.phpdt.core.IJavaProject#getOption(String, boolean)
         */     
        public String getOption(String optionName, boolean inheritJavaCoreOptions) {
                
@@ -1421,7 +1543,7 @@ public class JavaProject
        }
        
        /**
-        * @see org.eclipse.jdt.core.IJavaProject#getOptions(boolean)
+        * @see net.sourceforge.phpdt.core.IJavaProject#getOptions(boolean)
         */
        public Map getOptions(boolean inheritJavaCoreOptions) {
                
@@ -1456,21 +1578,48 @@ public class JavaProject
        /**
         * @see IJavaProject
         */
+//     public IPath getOutputLocation() throws JavaModelException {
+//
+//             JavaModelManager.PerProjectInfo perProjectInfo = JavaModelManager.getJavaModelManager().getPerProjectInfoCheckExistence(project);
+//             IPath outputLocation = perProjectInfo.outputLocation;
+//             if (outputLocation != null) return outputLocation;
+//
+//             // force to read classpath - will position output location as well
+//             this.getRawClasspath();
+//             outputLocation = perProjectInfo.outputLocation;
+//             if (outputLocation == null) {
+//                     return defaultOutputLocation();
+//             }
+//             return outputLocation;
+//     }
+       /**
+        * @see IJavaProject
+        */
        public IPath getOutputLocation() throws JavaModelException {
+               // Do not create marker but log problems while getting output location
+               return this.getOutputLocation(false, true);
+       }
+       
+       /**
+        * @param createMarkers boolean
+        * @param logProblems boolean
+        * @return IPath
+        * @throws JavaModelException
+        */
+       public IPath getOutputLocation(boolean createMarkers, boolean logProblems) throws JavaModelException {
 
-               JavaModelManager.PerProjectInfo perProjectInfo = JavaModelManager.getJavaModelManager().getPerProjectInfoCheckExistence(project);
+               JavaModelManager.PerProjectInfo perProjectInfo = getPerProjectInfo();
                IPath outputLocation = perProjectInfo.outputLocation;
                if (outputLocation != null) return outputLocation;
 
                // force to read classpath - will position output location as well
-               this.getRawClasspath();
+               this.getRawClasspath(createMarkers, logProblems);
                outputLocation = perProjectInfo.outputLocation;
                if (outputLocation == null) {
                        return defaultOutputLocation();
                }
                return outputLocation;
        }
-
        /**
         * @return A handle to the package fragment root identified by the given path.
         * This method is handle-only and the element may or may not exist. Returns
@@ -1638,6 +1787,10 @@ public class JavaProject
                return this.getProject().getFullPath();
        }
        
+       public JavaModelManager.PerProjectInfo getPerProjectInfo() throws JavaModelException {
+               return JavaModelManager.getJavaModelManager().getPerProjectInfoCheckExistence(this.project);
+       }
+       
        /**
         * @see IJavaProject
         */
@@ -1694,13 +1847,61 @@ public class JavaProject
        /**
         * @see IJavaProject
         */
+//     public IClasspathEntry[] getRawClasspath() throws JavaModelException {
+//
+//             JavaModelManager.PerProjectInfo perProjectInfo = JavaModelManager.getJavaModelManager().getPerProjectInfoCheckExistence(project);
+//             IClasspathEntry[] classpath = perProjectInfo.classpath;
+//             if (classpath != null) return classpath;
+//             classpath = this.readClasspathFile(false/*don't create markers*/, true/*log problems*/);
+//             
+//             // extract out the output location
+//             IPath outputLocation = null;
+//             if (classpath != null && classpath.length > 0) {
+//                     IClasspathEntry entry = classpath[classpath.length - 1];
+//                     if (entry.getContentKind() == ClasspathEntry.K_OUTPUT) {
+//                             outputLocation = entry.getPath();
+//                             IClasspathEntry[] copy = new IClasspathEntry[classpath.length - 1];
+//                             System.arraycopy(classpath, 0, copy, 0, copy.length);
+//                             classpath = copy;
+//                     }
+//             }
+//             if (classpath == null) {
+//                     return defaultClasspath();
+//             }
+//             /* Disable validate: classpath can contain CP variables and container that need to be resolved 
+//             if (classpath != INVALID_CLASSPATH
+//                             && !JavaConventions.validateClasspath(this, classpath, outputLocation).isOK()) {
+//                     classpath = INVALID_CLASSPATH;
+//             }
+//             */
+//             perProjectInfo.classpath = classpath;
+//             perProjectInfo.outputLocation = outputLocation;
+//             return classpath;
+//     }
+       /**
+        * @see IJavaProject
+        */
        public IClasspathEntry[] getRawClasspath() throws JavaModelException {
+               // Do not create marker but log problems while getting raw classpath
+               return getRawClasspath(false, true);
+       }
 
-               JavaModelManager.PerProjectInfo perProjectInfo = JavaModelManager.getJavaModelManager().getPerProjectInfoCheckExistence(project);
-               IClasspathEntry[] classpath = perProjectInfo.classpath;
-               if (classpath != null) return classpath;
-               classpath = this.readClasspathFile(false/*don't create markers*/, true/*log problems*/);
-               
+       /*
+        * Internal variant allowing to parameterize problem creation/logging
+        */
+       public IClasspathEntry[] getRawClasspath(boolean createMarkers, boolean logProblems) throws JavaModelException {
+
+               JavaModelManager.PerProjectInfo perProjectInfo = null;
+               IClasspathEntry[] classpath;
+               if (createMarkers) {
+                       this.flushClasspathProblemMarkers(false/*cycle*/, true/*format*/);
+                       classpath = this.readClasspathFile(createMarkers, logProblems);
+               } else {
+                       perProjectInfo = getPerProjectInfo();
+                       classpath = perProjectInfo.rawClasspath;
+                       if (classpath != null) return classpath;
+                       classpath = this.readClasspathFile(createMarkers, logProblems);
+               }
                // extract out the output location
                IPath outputLocation = null;
                if (classpath != null && classpath.length > 0) {
@@ -1721,11 +1922,13 @@ public class JavaProject
                        classpath = INVALID_CLASSPATH;
                }
                */
-               perProjectInfo.classpath = classpath;
-               perProjectInfo.outputLocation = outputLocation;
+               if (!createMarkers) {
+                       perProjectInfo.rawClasspath = classpath;
+                       perProjectInfo.outputLocation = outputLocation;
+               }
                return classpath;
        }
-
+       
        /**
         * @see IJavaProject#getRequiredProjectNames
         */
@@ -1754,39 +1957,108 @@ public class JavaProject
                boolean ignoreUnresolvedEntry,
                boolean generateMarkerOnError)
                throws JavaModelException {
+         return 
+               getResolvedClasspath(
+                       ignoreUnresolvedEntry, 
+                       generateMarkerOnError,
+                       true // returnResolutionInProgress
+               );
+//             JavaModelManager manager = JavaModelManager.getJavaModelManager();
+//             JavaModelManager.PerProjectInfo perProjectInfo = manager.getPerProjectInfoCheckExistence(project);
+//             
+//             // reuse cache if not needing to refresh markers or checking bound variables
+//             if (ignoreUnresolvedEntry && !generateMarkerOnError && perProjectInfo != null){
+//                     // resolved path is cached on its info
+//                     IClasspathEntry[] infoPath = perProjectInfo.lastResolvedClasspath;
+//                     if (infoPath != null) return infoPath;
+//             }
+//             Map reverseMap = perProjectInfo == null ? null : new HashMap(5);
+//             IClasspathEntry[] resolvedPath = getResolvedClasspath(
+//                     getRawClasspath(), 
+//                     generateMarkerOnError ? getOutputLocation() : null, 
+//                     ignoreUnresolvedEntry, 
+//                     generateMarkerOnError,
+//                     reverseMap);
+//
+//             if (perProjectInfo != null){
+//                     if (perProjectInfo.classpath == null // .classpath file could not be read
+//                             && generateMarkerOnError 
+//                             && JavaProject.hasJavaNature(project)) {
+//                                     this.createClasspathProblemMarker(new JavaModelStatus(
+//                                             IJavaModelStatusConstants.INVALID_CLASSPATH_FILE_FORMAT,
+//                                             Util.bind("classpath.cannotReadClasspathFile", this.getElementName()))); //$NON-NLS-1$
+//                             }
+//
+//                     perProjectInfo.lastResolvedClasspath = resolvedPath;
+//                     perProjectInfo.resolvedPathToRawEntries = reverseMap;
+//             }
+//             return resolvedPath;
+       }
+       /*
+        * Internal variant which can create marker on project for invalid entries
+        * and caches the resolved classpath on perProjectInfo.
+        * If requested, return a special classpath (RESOLUTION_IN_PROGRESS) if the classpath is being resolved.
+        */
+       public IClasspathEntry[] getResolvedClasspath(
+               boolean ignoreUnresolvedEntry,
+               boolean generateMarkerOnError,
+               boolean returnResolutionInProgress)
+               throws JavaModelException {
 
-               JavaModelManager manager = JavaModelManager.getJavaModelManager();
-               JavaModelManager.PerProjectInfo perProjectInfo = manager.getPerProjectInfoCheckExistence(project);
-               
-               // reuse cache if not needing to refresh markers or checking bound variables
-               if (ignoreUnresolvedEntry && !generateMarkerOnError && perProjectInfo != null){
-                       // resolved path is cached on its info
-                       IClasspathEntry[] infoPath = perProjectInfo.lastResolvedClasspath;
-                       if (infoPath != null) return infoPath;
+           JavaModelManager manager = JavaModelManager.getJavaModelManager();
+               JavaModelManager.PerProjectInfo perProjectInfo = null;
+               if (ignoreUnresolvedEntry && !generateMarkerOnError) {
+                       perProjectInfo = getPerProjectInfo();
+                       if (perProjectInfo != null) {
+                               // resolved path is cached on its info
+                               IClasspathEntry[] infoPath = perProjectInfo.resolvedClasspath;
+                               if (infoPath != null) {
+                                       return infoPath;
+                               } else if  (returnResolutionInProgress && manager.isClasspathBeingResolved(this)) {
+                                       if (JavaModelManager.CP_RESOLVE_VERBOSE) {
+                                               Util.verbose(
+                                                       "CPResolution: reentering raw classpath resolution, will use empty classpath instead" + //$NON-NLS-1$
+                                                       "       project: " + getElementName() + '\n' + //$NON-NLS-1$
+                                                       "       invocation stack trace:"); //$NON-NLS-1$
+                                               new Exception("<Fake exception>").printStackTrace(System.out); //$NON-NLS-1$
+                                       }                                               
+                                   return RESOLUTION_IN_PROGRESS;
+                               }
+                       }
                }
                Map reverseMap = perProjectInfo == null ? null : new HashMap(5);
-               IClasspathEntry[] resolvedPath = getResolvedClasspath(
-                       getRawClasspath(), 
-                       generateMarkerOnError ? getOutputLocation() : null, 
-                       ignoreUnresolvedEntry, 
-                       generateMarkerOnError,
-                       reverseMap);
+               IClasspathEntry[] resolvedPath = null;
+               boolean nullOldResolvedCP = perProjectInfo != null && perProjectInfo.resolvedClasspath == null;
+               try {
+                       // protect against misbehaving clients (see https://bugs.eclipse.org/bugs/show_bug.cgi?id=61040)
+                       if (nullOldResolvedCP) manager.setClasspathBeingResolved(this, true);
+                       resolvedPath = getResolvedClasspath(
+                               getRawClasspath(generateMarkerOnError, !generateMarkerOnError), 
+                               generateMarkerOnError ? getOutputLocation() : null, 
+                               ignoreUnresolvedEntry, 
+                               generateMarkerOnError,
+                               reverseMap);
+               } finally {
+                       if (nullOldResolvedCP) perProjectInfo.resolvedClasspath = null;
+               }
 
                if (perProjectInfo != null){
-                       if (perProjectInfo.classpath == null // .classpath file could not be read
+                       if (perProjectInfo.rawClasspath == null // .classpath file could not be read
                                && generateMarkerOnError 
-                               && JavaProject.hasJavaNature(project)) {
+                               && JavaProject.hasJavaNature(this.project)) {
+                                       // flush .classpath format markers (bug 39877), but only when file cannot be read (bug 42366)
+                                       this.flushClasspathProblemMarkers(false, true);
                                        this.createClasspathProblemMarker(new JavaModelStatus(
                                                IJavaModelStatusConstants.INVALID_CLASSPATH_FILE_FORMAT,
                                                Util.bind("classpath.cannotReadClasspathFile", this.getElementName()))); //$NON-NLS-1$
-                               }
+                       }
 
-                       perProjectInfo.lastResolvedClasspath = resolvedPath;
+                       perProjectInfo.resolvedClasspath = resolvedPath;
                        perProjectInfo.resolvedPathToRawEntries = reverseMap;
+                       manager.setClasspathBeingResolved(this, false);
                }
                return resolvedPath;
        }
-       
        /**
         * Internal variant which can process any arbitrary classpath
         */
@@ -1894,11 +2166,12 @@ public class JavaProject
        public ISearchableNameEnvironment getSearchableNameEnvironment()
                throws JavaModelException {
 
-               JavaProjectElementInfo info = getJavaProjectElementInfo();
-               if (info.getSearchableEnvironment() == null) {
-                       info.setSearchableEnvironment(new SearchableEnvironment(this));
-               }
-               return info.getSearchableEnvironment();
+//             JavaProjectElementInfo info = getJavaProjectElementInfo();
+//             if (info.getSearchableEnvironment() == null) {
+//                     info.setSearchableEnvironment(new SearchableEnvironment(this));
+//             }
+//             return info.getSearchableEnvironment();
+         return null;
        }
 
        /**
@@ -2055,7 +2328,7 @@ public class JavaProject
                for (int i = 0; i < classpath.length; i++) {
                        IClasspathEntry entry = classpath[i];
                        if (entry.getPath().isPrefixOf(path) 
-                                       && !Util.isExcluded(path, ((ClasspathEntry)entry).fullExclusionPatternChars())) {
+                                       && !Util.isExcluded(path, null,((ClasspathEntry)entry).fullExclusionPatternChars(),true)) {
                                return true;
                        }
                }
@@ -2356,7 +2629,7 @@ public class JavaProject
        }
 
        /**
-        * @see org.eclipse.jdt.core.IJavaProject#setOptions(Map)
+        * @see net.sourceforge.phpdt.core.IJavaProject#setOptions(Map)
         */
        public void setOptions(Map newOptions) {
 
@@ -2480,21 +2753,21 @@ public class JavaProject
         *
         * @exception NotPresentException if this project does not exist.
         */
-       protected void setRawClasspath0(IClasspathEntry[] rawEntries)
-               throws JavaModelException {
-
-               JavaModelManager.PerProjectInfo info = JavaModelManager.getJavaModelManager().getPerProjectInfoCheckExistence(project);
-       
-               synchronized (info) {
-                       if (rawEntries != null) {
-                               info.classpath = rawEntries;
-                       }
-                       
-                       // clear cache of resolved classpath
-                       info.lastResolvedClasspath = null;
-                       info.resolvedPathToRawEntries = null;
-               }
-       }
+//     protected void setRawClasspath0(IClasspathEntry[] rawEntries)
+//             throws JavaModelException {
+//
+//             JavaModelManager.PerProjectInfo info = JavaModelManager.getJavaModelManager().getPerProjectInfoCheckExistence(project);
+//     
+//             synchronized (info) {
+//                     if (rawEntries != null) {
+//                             info.classpath = rawEntries;
+//                     }
+//                     
+//                     // clear cache of resolved classpath
+//                     info.lastResolvedClasspath = null;
+//                     info.resolvedPathToRawEntries = null;
+//             }
+//     }
 
        /**
         * Record a shared persistent property onto a project.
index 98b96c3..7da81a6 100644 (file)
@@ -42,7 +42,7 @@ class JavaProjectElementInfo extends OpenableElementInfo {
         * The searchable builder environment facility used
         * with this project (doubles as the builder environment). 
         */
-       protected SearchableEnvironment fSearchableEnvironment = null;
+//     protected SearchableEnvironment fSearchableEnvironment = null;
 
        /**
         * A array with all the non-java resources contained by this PackageFragment
@@ -181,10 +181,10 @@ class JavaProjectElementInfo extends OpenableElementInfo {
        /**
         * @see IJavaProject 
         */
-       protected SearchableEnvironment getSearchableEnvironment() {
-
-               return fSearchableEnvironment;
-       }
+//     protected SearchableEnvironment getSearchableEnvironment() {
+//
+//             return fSearchableEnvironment;
+//     }
        /*
         * Returns whether the given path is a classpath entry or an output location.
         */
@@ -209,7 +209,7 @@ class JavaProjectElementInfo extends OpenableElementInfo {
 
                // Reinitialize the searchable name environment since it caches
                // the name lookup.
-               fSearchableEnvironment = null;
+//             fSearchableEnvironment = null;
        }
        
        /**
@@ -220,8 +220,8 @@ class JavaProjectElementInfo extends OpenableElementInfo {
                fNonJavaResources = resources;
        }
        
-       protected void setSearchableEnvironment(SearchableEnvironment newSearchableEnvironment) {
-
-               fSearchableEnvironment = newSearchableEnvironment;
-       }
+//     protected void setSearchableEnvironment(SearchableEnvironment newSearchableEnvironment) {
+//
+//             fSearchableEnvironment = newSearchableEnvironment;
+//     }
 }
diff --git a/net.sourceforge.phpeclipse/src/net/sourceforge/phpdt/internal/core/LocalVariable.java b/net.sourceforge.phpeclipse/src/net/sourceforge/phpdt/internal/core/LocalVariable.java
new file mode 100644 (file)
index 0000000..834c112
--- /dev/null
@@ -0,0 +1,186 @@
+/*******************************************************************************
+ * Copyright (c) 2000, 2004 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials 
+ * are made available under the terms of the Common Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/cpl-v10.html
+ * 
+ * Contributors:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+package net.sourceforge.phpdt.internal.core;
+
+import java.util.HashMap;
+
+import org.eclipse.core.resources.IResource;
+import org.eclipse.core.runtime.IPath;
+import org.eclipse.core.runtime.IProgressMonitor;
+import net.sourceforge.phpdt.core.*;
+import net.sourceforge.phpdt.core.IJavaElement;
+import net.sourceforge.phpdt.core.JavaModelException;
+import net.sourceforge.phpdt.core.WorkingCopyOwner;
+import net.sourceforge.phpdt.internal.core.util.MementoTokenizer;
+import net.sourceforge.phpdt.internal.core.util.Util;
+
+
+public class LocalVariable extends JavaElement implements ILocalVariable {
+
+       public int declarationSourceStart, declarationSourceEnd;
+       public int nameStart, nameEnd;
+       String typeSignature;
+       
+       public LocalVariable(
+                       JavaElement parent, 
+                       String name, 
+                       int declarationSourceStart, 
+                       int declarationSourceEnd,
+                       int nameStart, 
+                       int nameEnd,
+                       String typeSignature) {
+               
+               super(parent, name);
+               this.declarationSourceStart = declarationSourceStart;
+               this.declarationSourceEnd = declarationSourceEnd;
+               this.nameStart = nameStart;
+               this.nameEnd = nameEnd;
+               this.typeSignature = typeSignature;
+       }
+
+       protected void closing(Object info) {
+               // a local variable has no info
+       }
+
+       protected Object createElementInfo() {
+               // a local variable has no info
+               return null;
+       }
+
+       public boolean equals(Object o) {
+               if (!(o instanceof LocalVariable)) return false;
+               LocalVariable other = (LocalVariable)o;
+               return 
+                       this.declarationSourceStart == other.declarationSourceStart 
+                       && this.declarationSourceEnd == other.declarationSourceEnd
+                       && this.nameStart == other.nameStart
+                       && this.nameEnd == other.nameEnd
+                       && super.equals(o);
+       }
+       
+       public boolean exists() {
+               return this.parent.exists(); // see https://bugs.eclipse.org/bugs/show_bug.cgi?id=46192
+       }
+
+       protected void generateInfos(Object info, HashMap newElements, IProgressMonitor pm) {
+               // a local variable has no info
+       }
+
+       public IJavaElement getHandleFromMemento(String token, MementoTokenizer memento, WorkingCopyOwner owner) {
+               switch (token.charAt(0)) {
+                       case JEM_COUNT:
+                               return getHandleUpdatingCountFromMemento(memento, owner);
+               }
+               return this;
+       }
+
+       /*
+        * @see JavaElement#getHandleMemento()
+        */
+       public String getHandleMemento(){
+               StringBuffer buff= new StringBuffer(((JavaElement)getParent()).getHandleMemento());
+               buff.append(getHandleMementoDelimiter());
+               buff.append(this.name);
+               buff.append(JEM_COUNT);
+               buff.append(this.declarationSourceStart);
+               buff.append(JEM_COUNT);
+               buff.append(this.declarationSourceEnd);
+               buff.append(JEM_COUNT);
+               buff.append(this.nameStart);
+               buff.append(JEM_COUNT);
+               buff.append(this.nameEnd);
+               buff.append(JEM_COUNT);
+               buff.append(this.typeSignature);
+               if (this.occurrenceCount > 1) {
+                       buff.append(JEM_COUNT);
+                       buff.append(this.occurrenceCount);
+               }
+               return buff.toString();
+       }
+
+       protected char getHandleMementoDelimiter() {
+               return JavaElement.JEM_LOCALVARIABLE;
+       }
+
+       public IResource getCorrespondingResource() {
+               return null;
+       }
+
+       public int getElementType() {
+               return LOCAL_VARIABLE;
+       }
+
+       public ISourceRange getNameRange() {
+               return new SourceRange(this.nameStart, this.nameEnd-this.nameStart+1);
+       }
+       
+       public IPath getPath() {
+               return this.parent.getPath();
+       }
+
+       public IResource getResource() {
+               return this.parent.getResource();
+       }
+
+       /**
+        * @see ISourceReference
+        */
+       public String getSource() throws JavaModelException {
+               IOpenable openable = this.parent.getOpenableParent();
+               IBuffer buffer = openable.getBuffer();
+               if (buffer == null) {
+                       return null;
+               }
+               ISourceRange range = getSourceRange();
+               int offset = range.getOffset();
+               int length = range.getLength();
+               if (offset == -1 || length == 0 ) {
+                       return null;
+               }
+               try {
+                       return buffer.getText(offset, length);
+               } catch(RuntimeException e) {
+                       return null;
+               }
+       }
+       
+       /**
+        * @see ISourceReference
+        */
+       public ISourceRange getSourceRange() {
+               return new SourceRange(this.declarationSourceStart, this.declarationSourceEnd-this.declarationSourceStart+1);
+       }
+       
+       public String getTypeSignature() {
+               return this.typeSignature;
+       }
+
+       public IResource getUnderlyingResource() throws JavaModelException {
+               return this.parent.getUnderlyingResource();
+       }
+
+       public int hashCode() {
+               return Util.combineHashCodes(this.parent.hashCode(), this.nameStart);
+       }
+       
+       public boolean isStructureKnown() throws JavaModelException {
+        return true;
+    }
+       
+       protected void toStringInfo(int tab, StringBuffer buffer, Object info) {
+               buffer.append(this.tabString(tab));
+               if (info != NO_INFO) {
+                       buffer.append(Signature.toString(this.getTypeSignature()));
+                       buffer.append(" "); //$NON-NLS-1$
+               }
+               toStringName(buffer);
+       }
+}
index eb6d570..63576cf 100644 (file)
@@ -12,6 +12,8 @@ package net.sourceforge.phpdt.internal.core;
 
 import java.util.ArrayList;
 
+import net.sourceforge.phpdt.internal.core.SourceType;
+
 import net.sourceforge.phpdt.core.Flags;
 import net.sourceforge.phpdt.core.IJavaElement;
 import net.sourceforge.phpdt.core.IMember;
@@ -27,7 +29,7 @@ import net.sourceforge.phpdt.core.jdom.IDOMNode;
  * @see IMember
  */
 
-/* package */ abstract class Member extends SourceRefElement implements IMember {
+public abstract class Member extends SourceRefElement implements IMember {
        protected Member(JavaElement parent, String name) {
                super(parent, name);
        }
@@ -154,6 +156,33 @@ public int getFlags() throws JavaModelException {
 protected char getHandleMementoDelimiter() {
        return JavaElement.JEM_TYPE;
 }
+/*
+ * Returns the outermost context defining a local element. Per construction, it can only be a
+ * method/field/initializarer member; thus, returns null if this member is already a top-level type or member type.
+ * e.g for X.java/X/Y/foo()/Z/bar()/T, it will return X.java/X/Y/foo()
+ */
+public Member getOuterMostLocalContext() {
+       IJavaElement current = this;
+       Member lastLocalContext = null;
+       parentLoop: while (true) {
+               switch (current.getElementType()) {
+                       case CLASS_FILE:
+                       case COMPILATION_UNIT:
+                               break parentLoop; // done recursing
+                       case TYPE:
+                               // cannot be a local context
+                               break;
+                       case INITIALIZER:
+                       case FIELD:
+                       case METHOD:
+                                // these elements can define local members
+                               lastLocalContext = (Member) current;
+                               break;
+               }               
+               current = current.getParent();
+       } 
+       return lastLocalContext;
+}
 /**
  * @see IMember
  */
@@ -164,6 +193,18 @@ public ISourceRange getNameRange() throws JavaModelException {
 /**
  * @see IMember
  */
+public IType getType(String typeName, int count) {
+       if (isBinary()) {
+               throw new IllegalArgumentException("Not a source member " + toStringWithAncestors()); //$NON-NLS-1$
+       } else {
+               SourceType type = new SourceType(this, typeName);
+               type.occurrenceCount = count;
+               return type;
+       }
+}
+/**
+ * @see IMember
+ */
 public boolean isBinary() {
        return false;
 }
index 5c7e7f9..fe6a5bf 100644 (file)
@@ -40,31 +40,31 @@ import net.sourceforge.phpdt.internal.compiler.env.IConstants;
         */
        protected char[] name;
        /**
-        * @see org.eclipse.jdt.internal.compiler.env.IGenericType#getModifiers()
-        * @see org.eclipse.jdt.internal.compiler.env.IGenericMethod#getModifiers()
-        * @see org.eclipse.jdt.internal.compiler.env.IGenericField#getModifiers()
+        * @see net.sourceforge.phpdt.internal.compiler.env.IGenericType#getModifiers()
+        * @see net.sourceforge.phpdt.internal.compiler.env.IGenericMethod#getModifiers()
+        * @see net.sourceforge.phpdt.internal.compiler.env.IGenericField#getModifiers()
         */
        public int getModifiers() {
                return this.flags;
        }
        /**
-        * @see org.eclipse.jdt.internal.compiler.env.ISourceType#getName()
+        * @see net.sourceforge.phpdt.internal.compiler.env.ISourceType#getName()
         */
        public char[] getName() {
                return this.name;
        }
        /**
-        * @see org.eclipse.jdt.internal.compiler.env.ISourceType#getNameSourceEnd()
-        * @see org.eclipse.jdt.internal.compiler.env.ISourceMethod#getNameSourceEnd()
-        * @see org.eclipse.jdt.internal.compiler.env.ISourceField#getNameSourceEnd()
+        * @see net.sourceforge.phpdt.internal.compiler.env.ISourceType#getNameSourceEnd()
+        * @see net.sourceforge.phpdt.internal.compiler.env.ISourceMethod#getNameSourceEnd()
+        * @see net.sourceforge.phpdt.internal.compiler.env.ISourceField#getNameSourceEnd()
         */
        public int getNameSourceEnd() {
                return this.nameEnd;
        }
        /**
-        * @see org.eclipse.jdt.internal.compiler.env.ISourceType#getNameSourceStart()
-        * @see org.eclipse.jdt.internal.compiler.env.ISourceMethod#getNameSourceStart()
-        * @see org.eclipse.jdt.internal.compiler.env.ISourceField#getNameSourceStart()
+        * @see net.sourceforge.phpdt.internal.compiler.env.ISourceType#getNameSourceStart()
+        * @see net.sourceforge.phpdt.internal.compiler.env.ISourceMethod#getNameSourceStart()
+        * @see net.sourceforge.phpdt.internal.compiler.env.ISourceField#getNameSourceStart()
         */
        public int getNameSourceStart() {
                return this.nameStart;
index d73ef9d..2c9a3c5 100644 (file)
@@ -147,7 +147,7 @@ protected void closing(Object info) {
 ///**
 // * @see ICodeAssist
 // */
-//protected void codeComplete(org.eclipse.jdt.internal.compiler.env.ICompilationUnit cu, org.eclipse.jdt.internal.compiler.env.ICompilationUnit unitToSkip, int position, ICompletionRequestor requestor) throws JavaModelException {
+//protected void codeComplete(net.sourceforge.phpdt.internal.compiler.env.ICompilationUnit cu, net.sourceforge.phpdt.internal.compiler.env.ICompilationUnit unitToSkip, int position, ICompletionRequestor requestor) throws JavaModelException {
 //     if (requestor == null) {
 //             throw new IllegalArgumentException(ProjectPrefUtil.bind("codeAssist.nullRequestor")); //$NON-NLS-1$
 //     }
@@ -567,7 +567,7 @@ public PackageFragmentRoot getPackageFragmentRoot() {
 // * @see ICodeAssist
 // * @deprecated - use codeComplete(ICompilationUnit, ICompilationUnit, int, ICompletionRequestor) instead
 // */
-//protected void codeComplete(org.eclipse.jdt.internal.compiler.env.ICompilationUnit cu, org.eclipse.jdt.internal.compiler.env.ICompilationUnit unitToSkip, int position, final ICodeCompletionRequestor requestor) throws JavaModelException {
+//protected void codeComplete(net.sourceforge.phpdt.internal.compiler.env.ICompilationUnit cu, net.sourceforge.phpdt.internal.compiler.env.ICompilationUnit unitToSkip, int position, final ICodeCompletionRequestor requestor) throws JavaModelException {
 //
 //     if (requestor == null){
 //             codeComplete(cu, unitToSkip, position, (ICompletionRequestor)null);
index 06f1c5f..9af6588 100644 (file)
@@ -19,6 +19,8 @@ import net.sourceforge.phpdt.core.IJavaElement;
 import net.sourceforge.phpdt.core.IPackageFragment;
 import net.sourceforge.phpdt.core.IPackageFragmentRoot;
 import net.sourceforge.phpdt.core.JavaModelException;
+import net.sourceforge.phpdt.core.WorkingCopyOwner;
+import net.sourceforge.phpdt.internal.core.util.MementoTokenizer;
 import net.sourceforge.phpdt.internal.core.util.Util;
 import net.sourceforge.phpdt.internal.ui.util.PHPFileUtil;
 
@@ -260,6 +262,24 @@ public ICompilationUnit[] getCompilationUnits() throws JavaModelException {
 public int getElementType() {
        return PACKAGE_FRAGMENT;
 }
+/*
+ * @see JavaElement
+ */
+public IJavaElement getHandleFromMemento(String token, MementoTokenizer memento, WorkingCopyOwner owner) {
+       switch (token.charAt(0)) {
+               case JEM_COUNT:
+                       return getHandleUpdatingCountFromMemento(memento, owner);
+//             case JEM_CLASSFILE:
+//                     String classFileName = memento.nextToken();
+//                     JavaElement classFile = (JavaElement)getClassFile(classFileName);
+//                     return classFile.getHandleFromMemento(memento, owner);
+               case JEM_COMPILATIONUNIT:
+                       String cuName = memento.nextToken();
+                       JavaElement cu = new CompilationUnit(this, cuName, owner);
+                       return cu.getHandleFromMemento(memento, owner);
+       }
+       return null;
+}
 /**
  * @see JavaElement#getHandleMementoDelimiter()
  */
index c8fb6b0..a07e245 100644 (file)
@@ -19,7 +19,9 @@ import net.sourceforge.phpdt.core.IPackageFragment;
 import net.sourceforge.phpdt.core.IPackageFragmentRoot;
 import net.sourceforge.phpdt.core.JavaCore;
 import net.sourceforge.phpdt.core.JavaModelException;
+import net.sourceforge.phpdt.core.WorkingCopyOwner;
 import net.sourceforge.phpdt.core.compiler.CharOperation;
+import net.sourceforge.phpdt.internal.core.util.MementoTokenizer;
 import net.sourceforge.phpdt.internal.core.util.Util;
 
 import org.eclipse.core.resources.IContainer;
@@ -31,942 +33,962 @@ import org.eclipse.core.runtime.IPath;
 import org.eclipse.core.runtime.IProgressMonitor;
 import org.eclipse.core.runtime.QualifiedName;
 
-
 /**
  * @see IPackageFragmentRoot
  */
 public class PackageFragmentRoot extends Openable implements IPackageFragmentRoot {
 
-       /**
-        * The delimiter between the source path and root path in the
-        * attachment server property.
-        */
-       protected final static char ATTACHMENT_PROPERTY_DELIMITER= '*';
-       /*
-        * No source attachment property
-        */
-       protected final static String NO_SOURCE_ATTACHMENT = ""; //$NON-NLS-1$
-       /*
-        * No source mapper singleton
-        */
-//     protected final static SourceMapper NO_SOURCE_MAPPER = new SourceMapper();
-
-       /**
-        * The resource associated with this root.
-        * (an IResource or a java.io.File (for external jar only))
-        */
-       protected Object resource;
-       
-       /**
-        * Constructs a package fragment root which is the root of the java package
-        * directory hierarchy.
-        */
-       protected PackageFragmentRoot(IResource resource, JavaProject project, String name) {
-               super(project, name);
-               this.resource = resource;
-       }
-
-       /**
-        * @see Openable
-        */
-       protected boolean buildStructure(OpenableElementInfo info, IProgressMonitor pm, Map newElements, IResource underlyingResource) throws JavaModelException {
-               
-               // check whether this pkg fragment root can be opened
-               if (!resourceExists() ) { //|| !isOnClasspath()) {
-                       throw newNotPresentException();
-               }
-
-               ((PackageFragmentRootInfo) info).setRootKind(determineKind(underlyingResource));
-               return computeChildren(info, newElements);
-       }
-       /**
-        * Returns the root's kind - K_SOURCE or K_BINARY, defaults
-        * to K_SOURCE if it is not on the classpath.
-        *
-        * @exception NotPresentException if the project and root do
-        *              not exist.
-        */
-       protected int determineKind(IResource underlyingResource) throws JavaModelException {
-//             IClasspathEntry[] entries= ((JavaProject)getJavaProject()).getExpandedClasspath(true);
-//             for (int i= 0; i < entries.length; i++) {
-//                     IClasspathEntry entry= entries[i];
-//                     if (entry.getPath().equals(underlyingResource.getFullPath())) {
-//                             return entry.getContentKind();
-//                     }
-//             }
-               return IPackageFragmentRoot.K_SOURCE;
-       }
-       /**
-        * Compute the package fragment children of this package fragment root.
-        * 
-        * @exception JavaModelException  The resource associated with this package fragment root does not exist
-        */
-       protected boolean computeChildren(OpenableElementInfo info, Map newElements) throws JavaModelException {
-               // Note the children are not opened (so not added to newElements) for a regular package fragment root
-               // Howver they are opened for a Jar package fragment root (see JarPackageFragmentRoot#computeChildren)
-               try {
-                       // the underlying resource may be a folder or a project (in the case that the project folder
-                       // is actually the package fragment root)
-                       IResource underlyingResource = getResource();
-                       if (underlyingResource.getType() == IResource.FOLDER || underlyingResource.getType() == IResource.PROJECT) {
-                               ArrayList vChildren = new ArrayList(5);
-                               IContainer rootFolder = (IContainer) underlyingResource;
-                       //      char[][] inclusionPatterns = fullInclusionPatternChars();
-                               char[][] exclusionPatterns = fullExclusionPatternChars();
-                               computeFolderChildren(rootFolder, !Util.isExcluded(rootFolder, exclusionPatterns), "", vChildren, exclusionPatterns); //$NON-NLS-1$
-                               
-                               IJavaElement[] children = new IJavaElement[vChildren.size()];
-                               vChildren.toArray(children);
-                               info.setChildren(children);
-                       }
-               } catch (JavaModelException e) {
-                       //problem resolving children; structure remains unknown
-                       info.setChildren(new IJavaElement[]{});
-                       throw e;
-               }
-               return true;
-       }
-       /**
-        * Starting at this folder, create package fragments and add the fragments that are not exclused
-        * to the collection of children.
-        * 
-        * @exception JavaModelException  The resource associated with this package fragment does not exist
-        */
-       protected void computeFolderChildren(IContainer folder, boolean isIncluded, String prefix, ArrayList vChildren, char[][] exclusionPatterns) throws JavaModelException {
-               //, char[][] inclusionPatterns, char[][] exclusionPatterns) throws JavaModelException {
-
-               if (isIncluded) {
-                   IPackageFragment pkg = getPackageFragment(prefix);
-                       vChildren.add(pkg);
-               }
-               try {
-                       JavaProject javaProject = (JavaProject)getJavaProject();
-                       IResource[] members = folder.members();
-                       boolean hasIncluded = isIncluded;
-                       for (int i = 0, max = members.length; i < max; i++) {
-                               IResource member = members[i];
-                               String memberName = member.getName();
-                               
-                               switch(member.getType()) {
-                                   
-                                   case IResource.FOLDER:
-                                               if (Util.isValidFolderNameForPackage(memberName)) {
-                                                   boolean isMemberIncluded = !Util.isExcluded(member, exclusionPatterns);
-                                                       // keep looking inside as long as included already, or may have child included due to inclusion patterns
-//                                                 if (isMemberIncluded || inclusionPatterns != null) { 
-//                                                             // eliminate binary output only if nested inside direct subfolders
-//                                                             if (javaProject.contains(member)) {
-//                                                                     String newPrefix;
-//                                                                     if (prefix.length() == 0) {
-//                                                                             newPrefix = memberName;
-//                                                                     } else {
-//                                                                             newPrefix = prefix + "." + memberName; //$NON-NLS-1$
-//                                                                     }
-//                                                                     computeFolderChildren((IFolder) member, isMemberIncluded, newPrefix, vChildren, inclusionPatterns, exclusionPatterns);
-//                                                             }
-//                                                     }
-                                               }
-                                       break;
-                                   case IResource.FILE:
-                                       // inclusion filter may only include files, in which case we still want to include the immediate parent package (lazily)
-                                               if (!hasIncluded
-                                                                       && Util.isValidCompilationUnitName(memberName)
-                                                                       && !Util.isExcluded(member, exclusionPatterns)) {
-                                                       hasIncluded = true;
-                                                   IPackageFragment pkg = getPackageFragment(prefix);
-                                                   vChildren.add(pkg); 
-                                               }
-                                       break;
-                               }
-                       }
-               } catch(IllegalArgumentException e){
-                       throw new JavaModelException(e, IJavaModelStatusConstants.ELEMENT_DOES_NOT_EXIST); // could be thrown by ElementTree when path is not found
-               } catch (CoreException e) {
-                       throw new JavaModelException(e);
-               }
-       }
-/**
- * @see IPackageFragmentRoot
- */
-//public void attachSource(IPath sourcePath, IPath rootPath, IProgressMonitor monitor) throws JavaModelException {
-//     try {
-//             verifyAttachSource(sourcePath);
-//             if (monitor != null) {
-//                     monitor.beginTask(ProjectPrefUtil.bind("element.attachingSource"), 2); //$NON-NLS-1$
-//             }
-//             SourceMapper oldMapper= getSourceMapper();
-//             IWorkspace workspace = ResourcesPlugin.getWorkspace();
-//             boolean rootNeedsToBeClosed= false;
-//
-//             if (sourcePath == null) {
-//                     //source being detached
-//                     rootNeedsToBeClosed= true;
-//                     setSourceMapper(null);
-//             /* Disable deltas (see 1GDTUSD)
-//                     // fire a delta to notify the UI about the source detachement.
-//                     JavaModelManager manager = (JavaModelManager) JavaModelManager.getJavaModelManager();
-//                     JavaModel model = (JavaModel) getJavaModel();
-//                     JavaElementDelta attachedSourceDelta = new JavaElementDelta(model);
-//                     attachedSourceDelta .sourceDetached(this); // this would be a PackageFragmentRoot
-//                     manager.registerResourceDelta(attachedSourceDelta );
-//                     manager.fire(); // maybe you want to fire the change later. Let us know about it.
-//             */
-//             } else {
-//             /*
-//                     // fire a delta to notify the UI about the source attachement.
-//                     JavaModelManager manager = (JavaModelManager) JavaModelManager.getJavaModelManager();
-//                     JavaModel model = (JavaModel) getJavaModel();
-//                     JavaElementDelta attachedSourceDelta = new JavaElementDelta(model);
-//                     attachedSourceDelta .sourceAttached(this); // this would be a PackageFragmentRoot
-//                     manager.registerResourceDelta(attachedSourceDelta );
-//                     manager.fire(); // maybe you want to fire the change later. Let us know about it.
-//              */
-//
-//                     //check if different from the current attachment
-//                     IPath storedSourcePath= getSourceAttachmentPath();
-//                     IPath storedRootPath= getSourceAttachmentRootPath();
-//                     if (monitor != null) {
-//                             monitor.worked(1);
-//                     }
-//                     if (storedSourcePath != null) {
-//                             if (!(storedSourcePath.equals(sourcePath) && (rootPath != null && rootPath.equals(storedRootPath)) || storedRootPath == null)) {
-//                                     rootNeedsToBeClosed= true;
-//                             }
-//                     }
-//                     // check if source path is valid
-//                     Object target = JavaModel.getTarget(workspace.getRoot(), sourcePath, false);
-//                     if (target == null) {
-//                             if (monitor != null) {
-//                                     monitor.done();
-//                             }
-//                             throw new JavaModelException(new JavaModelStatus(IJavaModelStatusConstants.INVALID_PATH, sourcePath));
-//                     }
-//                     SourceMapper mapper = createSourceMapper(sourcePath, rootPath);
-//                     if (rootPath == null && mapper.rootPath != null) {
-//                             // as a side effect of calling the SourceMapper constructor, the root path was computed
-//                             rootPath = new Path(mapper.rootPath);
-//                     }
-//                     setSourceMapper(mapper);
-//             }
-//             if (sourcePath == null) {
-//                     setSourceAttachmentProperty(null); //remove the property
-//             } else {
-//                     //set the property to the path of the mapped source
-//                     setSourceAttachmentProperty(
-//                             sourcePath.toString() 
-//                             + (rootPath == null ? "" : (ATTACHMENT_PROPERTY_DELIMITER + rootPath.toString()))); //$NON-NLS-1$
-//             }
-//             if (rootNeedsToBeClosed) {
-//                     if (oldMapper != null) {
-//                             oldMapper.close();
-//                     }
-//                     BufferManager manager= BufferManager.getDefaultBufferManager();
-//                     Enumeration openBuffers= manager.getOpenBuffers();
-//                     while (openBuffers.hasMoreElements()) {
-//                             IBuffer buffer= (IBuffer) openBuffers.nextElement();
-//                             IOpenable possibleMember= buffer.getOwner();
-//                             if (isAncestorOf((IJavaElement) possibleMember)) {
-//                                     buffer.close();
-//                             }
-//                     }
-//                     if (monitor != null) {
-//                             monitor.worked(1);
-//                     }
-//             }
-//     } catch (JavaModelException e) {
-//             setSourceAttachmentProperty(null); // loose info - will be recomputed
-//             throw e;
-//     } finally {
-//             if (monitor != null) {
-//                     monitor.done();
-//             }
-//     }
-//}
-
-//SourceMapper createSourceMapper(IPath sourcePath, IPath rootPath) {
-//     SourceMapper mapper = new SourceMapper(
-//             sourcePath, 
-//             rootPath == null ? null : rootPath.toOSString(), 
-//             this.isExternal() ? JavaCore.getOptions() : this.getJavaProject().getOptions(true)); // only project options if associated with resource
-//     return mapper;
-//}
-/*
- * @see org.eclipse.jdt.core.IPackageFragmentRoot#delete
- */
-//public void delete(
-//     int updateResourceFlags,
-//     int updateModelFlags,
-//     IProgressMonitor monitor)
-//     throws JavaModelException {
-//
-//     DeletePackageFragmentRootOperation op = new DeletePackageFragmentRootOperation(this, updateResourceFlags, updateModelFlags);
-//     runOperation(op, monitor);
-//}
-
-/**
- * This root is being closed.  If this root has an associated source attachment, 
- * close it too.
- *
- * @see JavaElement
- */
-//protected void closing(Object info) throws JavaModelException { TODO remove after 2.1
-//     ((PackageFragmentRootInfo) info).sourceMapper = null;
-//     super.closing(info);
-//}
-/**
- * Compute the package fragment children of this package fragment root.
- * 
- * @exception JavaModelException  The resource associated with this package fragment root does not exist
- */
-//protected boolean computeChildren(OpenableElementInfo info) throws JavaModelException {
-//     try {
-//             // the underlying resource may be a folder or a project (in the case that the project folder
-//             // is actually the package fragment root)
-//             IResource resource = getResource();
-//             if (resource.getType() == IResource.FOLDER || resource.getType() == IResource.PROJECT) {
-//                     ArrayList vChildren = new ArrayList(5);
-//                     char[][] exclusionPatterns = fullExclusionPatternChars();
-//                     computeFolderChildren((IContainer) resource, "", vChildren, exclusionPatterns); //$NON-NLS-1$
-//                     IJavaElement[] children = new IJavaElement[vChildren.size()];
-//                     vChildren.toArray(children);
-//                     info.setChildren(children);
-//             }
-//     } catch (JavaModelException e) {
-//             //problem resolving children; structure remains unknown
-//             info.setChildren(new IJavaElement[]{});
-//             throw e;
-//     }
-//     return true;
-//}
-
-/**
- * Starting at this folder, create package fragments and add the fragments that are not exclused
- * to the collection of children.
- * 
- * @exception JavaModelException  The resource associated with this package fragment does not exist
- */
-//protected void computeFolderChildren(IContainer folder, String prefix, ArrayList vChildren, char[][] exclusionPatterns) throws JavaModelException {
-//     IPackageFragment pkg = getPackageFragment(prefix);
-//     vChildren.add(pkg);
-//     try {
-//             JavaProject javaProject = (JavaProject)getJavaProject();
-//             IResource[] members = folder.members();
-//             for (int i = 0, max = members.length; i < max; i++) {
-//                     IResource member = members[i];
-//                     String memberName = member.getName();
-//                     if (member.getType() == IResource.FOLDER 
-//                             && ProjectPrefUtil.isValidFolderNameForPackage(memberName)
-//                             && !ProjectPrefUtil.isExcluded(member, exclusionPatterns)) {
-//                                     
-//                             // eliminate binary output only if nested inside direct subfolders
-//                             if (javaProject.contains(member)) {
-//                                     String newPrefix;
-//                                     if (prefix.length() == 0) {
-//                                             newPrefix = memberName;
-//                                     } else {
-//                                             newPrefix = prefix + "." + memberName; //$NON-NLS-1$
-//                                     }
-//                                     computeFolderChildren((IFolder) member, newPrefix, vChildren, exclusionPatterns);
-//                             }
-//                     }
-//             }
-//     } catch(IllegalArgumentException e){
-//             throw new JavaModelException(e, IJavaModelStatusConstants.ELEMENT_DOES_NOT_EXIST); // could be thrown by ElementTree when path is not found
-//     } catch (CoreException e) {
-//             throw new JavaModelException(e);
-//     }
-//}
-/*
- * Computes and returns the source attachment root path for the given source attachment path.
- * Returns <code>null</code> if none could be found.
- * 
- * @param sourceAttachmentPath the given absolute path to the source archive or folder
- * @return the computed source attachment root path or <code>null</cde> if none could be found
- * @throws JavaModelException
- */
-//public IPath computeSourceAttachmentRootPath(IPath sourceAttachmentPath) throws JavaModelException {
-//     IPath sourcePath = this.getSourceAttachmentPath();
-//     if (sourcePath == null) return null;
-//     SourceMapper mapper = 
-//             new SourceMapper(
-//             sourcePath, 
-//             null, // detect root path
-//             this.isExternal() ? JavaCore.getOptions() : this.getJavaProject().getOptions(true) // only project options if associated with resource
-//     );
-//     if (mapper.rootPath == null) return null;
-//     return new Path(mapper.rootPath);
-//}
-/*
- * @see org.eclipse.jdt.core.IPackageFragmentRoot#copy
- */
-//public void copy(
-//     IPath destination,
-//     int updateResourceFlags,
-//     int updateModelFlags,
-//     IClasspathEntry sibling,
-//     IProgressMonitor monitor)
-//     throws JavaModelException {
-//             
-//     CopyPackageFragmentRootOperation op = 
-//             new CopyPackageFragmentRootOperation(this, destination, updateResourceFlags, updateModelFlags, sibling);
-//     runOperation(op, monitor);
-//}
-
-
-
-       /**
-        * Returns a new element info for this element.
-        */
-       protected Object createElementInfo() {
-               return new PackageFragmentRootInfo();
-       }
-
-/**
- * @see IPackageFragmentRoot
- */
-//public IPackageFragment createPackageFragment(String name, boolean force, IProgressMonitor monitor) throws JavaModelException {
-//     CreatePackageFragmentOperation op = new CreatePackageFragmentOperation(this, name, force);
-//     runOperation(op, monitor);
-//     return getPackageFragment(name);
-//}
-
-/**
- * Returns the root's kind - K_SOURCE or K_BINARY, defaults
- * to K_SOURCE if it is not on the classpath.
- *
- * @exception NotPresentException if the project and root do
- *             not exist.
- */
-//protected int determineKind(IResource underlyingResource) throws JavaModelException {
-//     IClasspathEntry[] entries= ((JavaProject)getJavaProject()).getExpandedClasspath(true);
-//     for (int i= 0; i < entries.length; i++) {
-//             IClasspathEntry entry= entries[i];
-//             if (entry.getPath().equals(underlyingResource.getFullPath())) {
-//                     return entry.getContentKind();
-//             }
-//     }
-//     return IPackageFragmentRoot.K_SOURCE;
-//}
-
-/**
- * Compares two objects for equality;
- * for <code>PackageFragmentRoot</code>s, equality is having the
- * same <code>JavaModel</code>, same resources, and occurrence count.
- *
- */
-public boolean equals(Object o) {
-       if (this == o)
-               return true;
-       if (!(o instanceof PackageFragmentRoot))
-               return false;
-       PackageFragmentRoot other = (PackageFragmentRoot) o;
-       return getJavaModel().equals(other.getJavaModel()) && 
-                       this.resource.equals(other.resource) &&
-                       occurrenceCount == other.occurrenceCount;
-}
-
-/**
- * @see IJavaElement
- */
-//public boolean exists() {
-//     return super.exists() 
-//                             && isOnClasspath();
-//}
-
-//public IClasspathEntry findSourceAttachmentRecommendation() {
-//     try {
-//             IPath rootPath = this.getPath();
-//             IClasspathEntry entry;
-//             IWorkspaceRoot workspaceRoot = ResourcesPlugin.getWorkspace().getRoot();
-//             
-//             // try on enclosing project first
-//             JavaProject parentProject = (JavaProject) getJavaProject();
-//             try {
-//                     entry = parentProject.getClasspathEntryFor(rootPath);
-//                     if (entry != null){
-//                             Object target = JavaModel.getTarget(workspaceRoot, entry.getSourceAttachmentPath(), true);
-//                             if (target instanceof IFile){
-//                                     IFile file = (IFile) target;
-//                                     if (ProjectPrefUtil.isArchiveFileName(file.getName())){
-//                                             return entry;
-//                                     }
-//                             } else if (target instanceof IFolder) {
-//                                     return entry;
-//                             }
-//                             if (target instanceof java.io.File){
-//                                     java.io.File file = (java.io.File) target;
-//                                     if (file.isFile()) {
-//                                             if (ProjectPrefUtil.isArchiveFileName(file.getName())){
-//                                                     return entry;
-//                                             }
-//                                     } else {
-//                                             // external directory
-//                                             return entry;
-//                                     }
-//                             }
-//                     }
-//             } catch(JavaModelException e){
-//             }
-//             
-//             // iterate over all projects
-//             IJavaModel model = getJavaModel();
-//             IJavaProject[] jProjects = model.getJavaProjects();
-//             for (int i = 0, max = jProjects.length; i < max; i++){
-//                     JavaProject jProject = (JavaProject) jProjects[i];
-//                     if (jProject == parentProject) continue; // already done
-//                     try {
-//                             entry = jProject.getClasspathEntryFor(rootPath);
-//                             if (entry != null){
-//                                     Object target = JavaModel.getTarget(workspaceRoot, entry.getSourceAttachmentPath(), true);
-//                                     if (target instanceof IFile){
-//                                             IFile file = (IFile) target;
-//                                             if (ProjectPrefUtil.isArchiveFileName(file.getName())){
-//                                                     return entry;
-//                                             }
-//                                     } else if (target instanceof IFolder) {
-//                                             return entry;
-//                                     }
-//                                     if (target instanceof java.io.File){
-//                                             java.io.File file = (java.io.File) target;
-//                                             if (file.isFile()) {
-//                                                     if (ProjectPrefUtil.isArchiveFileName(file.getName())){
-//                                                             return entry;
-//                                                     }
-//                                             } else {
-//                                                     // external directory
-//                                                     return entry;
-//                                             }
-//                                     }
-//                             }
-//                     } catch(JavaModelException e){
-//                     }
-//             }
-//     } catch(JavaModelException e){
-//     }
-//
-//     return null;
-//}
-
-/*
- * Returns the exclusion patterns from the classpath entry associated with this root.
- */
-char[][] fullExclusionPatternChars() {
-       return null;
-//     try {
-               
-//             if (this.isOpen() && this.getKind() != IPackageFragmentRoot.K_SOURCE) return null;
-//             ClasspathEntry entry = (ClasspathEntry)getRawClasspathEntry();
-//             if (entry == null) {
-//                     return null;
-//             } else {
-//                     return entry.fullExclusionPatternChars();
-//             }
-//     } catch (JavaModelException e) { 
-//             return null;
-//     }
-}              
-
-/**
- * @see Openable
- */
-protected boolean generateInfos(OpenableElementInfo info, IProgressMonitor pm, Map newElements, IResource underlyingResource) throws JavaModelException {
-       
-//     ((PackageFragmentRootInfo) info).setRootKind(determineKind(underlyingResource));
-//     return computeChildren(info);
-  return false;
-}
-
-/**
- * @see JavaElement#getHandleMemento()
- */
-protected char getHandleMementoDelimiter() {
-       return JavaElement.JEM_PACKAGEFRAGMENTROOT;
-}
-/**
- * @see IJavaElement
- */
-public int getElementType() {
-       return PACKAGE_FRAGMENT_ROOT;
-}
-/**
- * @see JavaElement#getHandleMemento()
- */
-public String getHandleMemento(){
-       IPath path;
-       IResource resource = getResource();
-       if (resource != null) {
-               // internal jar or regular root
-               if (getResource().getProject().equals(getJavaProject().getProject())) {
-                       path = resource.getProjectRelativePath();
-               } else {
-                       path = resource.getFullPath();
-               }
-       } else {
-               // external jar
-               path = getPath();
-       }
-       StringBuffer buff= new StringBuffer(((JavaElement)getParent()).getHandleMemento());
-       buff.append(getHandleMementoDelimiter());
-       buff.append(path.toString()); 
-       return buff.toString();
-}
-/**
- * @see IPackageFragmentRoot
- */
-public int getKind() throws JavaModelException {
-       return ((PackageFragmentRootInfo)getElementInfo()).getRootKind();
-}
-
-/**
- * Returns an array of non-java resources contained in the receiver.
- */
-//public Object[] getNonJavaResources() throws JavaModelException {
-//     return ((PackageFragmentRootInfo) getElementInfo()).getNonJavaResources(getJavaProject(), getResource(), this);
-//}
-
-/**
- * @see IPackageFragmentRoot
- */
-public IPackageFragment getPackageFragment(String packageName) {
-       if (packageName.indexOf(' ') != -1) { // tolerate package names with spaces (e.g. 'x . y') (http://bugs.eclipse.org/bugs/show_bug.cgi?id=21957)
-               char[][] compoundName = Util.toCompoundChars(packageName);
-               StringBuffer buffer = new StringBuffer(packageName.length());
-               for (int i = 0, length = compoundName.length; i < length; i++) {
-                       buffer.append(CharOperation.trim(compoundName[i]));
-                       if (i != length-1) {
-                               buffer.append('.');
-                       }
-               }
-               packageName = buffer.toString();
-       }
-       return new PackageFragment(this, packageName);
-}
-
-/**
- * Returns the package name for the given folder
- * (which is a decendent of this root).
- */
-protected String getPackageName(IFolder folder) throws JavaModelException {
-       IPath myPath= getPath();
-       IPath pkgPath= folder.getFullPath();
-       int mySegmentCount= myPath.segmentCount();
-       int pkgSegmentCount= pkgPath.segmentCount();
-       StringBuffer name = new StringBuffer(IPackageFragment.DEFAULT_PACKAGE_NAME);
-       for (int i= mySegmentCount; i < pkgSegmentCount; i++) {
-               if (i > mySegmentCount) {
-                       name.append('.');
-               }
-               name.append(pkgPath.segment(i));
-       }
-       return name.toString();
-}
-
-/**
- * @see IJavaElement
- */
-public IPath getPath() {
-       return getResource().getFullPath();
-}
-
-/*
- * @see IPackageFragmentRoot 
- */
-//public IClasspathEntry getRawClasspathEntry() throws JavaModelException {
-//
-//     IClasspathEntry rawEntry = null;
-//     IJavaProject project = this.getJavaProject();
-//     project.getResolvedClasspath(true); // force the reverse rawEntry cache to be populated
-//     JavaModelManager.PerProjectInfo perProjectInfo = 
-//             JavaModelManager.getJavaModelManager().getPerProjectInfoCheckExistence(project.getProject());
-//     if (perProjectInfo != null && perProjectInfo.resolvedPathToRawEntries != null) {
-//             rawEntry = (IClasspathEntry) perProjectInfo.resolvedPathToRawEntries.get(this.getPath());
-//     }
-//     return rawEntry;
-//}
-
-/*
- * @see IJavaElement
- */
-public IResource getResource() {
-       return (IResource)this.resource;
-}
-
-/**
- * @see IPackageFragmentRoot
- */
-//public IPath getSourceAttachmentPath() throws JavaModelException {
-//     if (getKind() != K_BINARY) return null;
-//     
-//     String serverPathString= getSourceAttachmentProperty();
-//     if (serverPathString == null) {
-//             return null;
-//     }
-//     int index= serverPathString.lastIndexOf(ATTACHMENT_PROPERTY_DELIMITER);
-//     if (index < 0) {
-//             // no root path specified
-//             return new Path(serverPathString);
-//     } else {
-//             String serverSourcePathString= serverPathString.substring(0, index);
-//             return new Path(serverSourcePathString);
-//     }
-//}
-
-/**
- * Returns the server property for this package fragment root's
- * source attachement.
- */
-//protected String getSourceAttachmentProperty() throws JavaModelException {
-//     String propertyString = null;
-//     QualifiedName qName= getSourceAttachmentPropertyName();
-//     try {
-//             propertyString = ResourcesPlugin.getWorkspace().getRoot().getPersistentProperty(qName);
-//             
-//             // if no existing source attachment information, then lookup a recommendation from classpath entries
-//             if (propertyString == null) {
-//                     IClasspathEntry recommendation = findSourceAttachmentRecommendation();
-//                     if (recommendation != null) {
-//                             IPath rootPath = recommendation.getSourceAttachmentRootPath();
-//                             propertyString = 
-//                                     recommendation.getSourceAttachmentPath().toString() 
-//                                             + ((rootPath == null) 
-//                                                     ? "" : //$NON-NLS-1$
-//                                                     (ATTACHMENT_PROPERTY_DELIMITER + rootPath.toString())); 
-//                             setSourceAttachmentProperty(propertyString);
-//                     } else {
-//                             // mark as being already looked up
-//                             setSourceAttachmentProperty(NO_SOURCE_ATTACHMENT);
-//                     }
-//             } else if (NO_SOURCE_ATTACHMENT.equals(propertyString)) {
-//                     // already looked up and no source attachment found
-//                     return null;
-//             }
-//             return propertyString;
-//     } catch (CoreException ce) {
-//             throw new JavaModelException(ce);
-//     }
-//}
-       
-/**
- * Returns the qualified name for the source attachment property
- * of this root.
- */
-protected QualifiedName getSourceAttachmentPropertyName() throws JavaModelException {
-       return new QualifiedName(JavaCore.PLUGIN_ID, "sourceattachment: " + this.getPath().toOSString()); //$NON-NLS-1$
-}
-
-public void setSourceAttachmentProperty(String property) {
-       try {
-               ResourcesPlugin.getWorkspace().getRoot().setPersistentProperty(this.getSourceAttachmentPropertyName(), property);
-       } catch (CoreException ce) {
-       }
-}
-
-/**
- * For use by <code>AttachSourceOperation</code> only.
- * Sets the source mapper associated with this root.
- */
-//public void setSourceMapper(SourceMapper mapper) throws JavaModelException {
-//     ((PackageFragmentRootInfo) getElementInfo()).setSourceMapper(mapper);
-//}
-
-
-
-/**
- * @see IPackageFragmentRoot
- */
-//public IPath getSourceAttachmentRootPath() throws JavaModelException {
-//     if (getKind() != K_BINARY) return null;
-//     
-//     String serverPathString= getSourceAttachmentProperty();
-//     if (serverPathString == null) {
-//             return null;
-//     }
-//     int index = serverPathString.lastIndexOf(ATTACHMENT_PROPERTY_DELIMITER);
-//     if (index == -1) return null;
-//     String serverRootPathString= IPackageFragmentRoot.DEFAULT_PACKAGEROOT_PATH;
-//     if (index != serverPathString.length() - 1) {
-//             serverRootPathString= serverPathString.substring(index + 1);
-//     }
-//     return new Path(serverRootPathString);
-//}
-
-/**
- * @see JavaElement
- */
-//public SourceMapper getSourceMapper() {
-//     SourceMapper mapper;
-//     try {
-//             PackageFragmentRootInfo rootInfo = (PackageFragmentRootInfo) getElementInfo();
-//             mapper = rootInfo.getSourceMapper();
-//             if (mapper == null) {
-//                     // first call to this method
-//                     IPath sourcePath= getSourceAttachmentPath();
-//                     if (sourcePath != null) {
-//                             IPath rootPath= getSourceAttachmentRootPath();
-//                             mapper = this.createSourceMapper(sourcePath, rootPath);
-//                             if (rootPath == null && mapper.rootPath != null) {
-//                                     // as a side effect of calling the SourceMapper constructor, the root path was computed
-//                                     rootPath = new Path(mapper.rootPath);
-//                                     
-//                                     //set the property to the path of the mapped source
-//                                     this.setSourceAttachmentProperty(
-//                                             sourcePath.toString() 
-//                                             + ATTACHMENT_PROPERTY_DELIMITER 
-//                                             + rootPath.toString());
-//                             }
-//                             rootInfo.setSourceMapper(mapper);
-//                     } else {
-//                             // remember that no source is attached
-//                             rootInfo.setSourceMapper(NO_SOURCE_MAPPER);
-//                             mapper = null;
-//                     }
-//             } else if (mapper == NO_SOURCE_MAPPER) {
-//                     // a previous call to this method found out that no source was attached
-//                     mapper = null;
-//             }
-//     } catch (JavaModelException e) {
-//             // no source can be attached
-//             mapper = null;
-//     }
-//     return mapper;
-//}
-
-/**
- * @see IJavaElement
- */
-public IResource getUnderlyingResource() throws JavaModelException {
-       if (!exists()) throw newNotPresentException();
-       return getResource();
-}
-
-public int hashCode() {
-       return this.resource.hashCode();
-}
-
-/**
- * @see IPackageFragmentRoot
- */
-public boolean isArchive() {
-       return false;
-}
-
-/**
- * @see IPackageFragmentRoot
- */
-public boolean isExternal() {
-       return false;
-}
-
-/*
- * Returns whether this package fragment root is on the classpath of its project.
- */
-//protected boolean isOnClasspath() {
-//     if (this.getElementType() == IJavaElement.JAVA_PROJECT){
-//             return true;
-//     }
-//     
-//     IPath path = this.getPath();
-//     try {
-//             // check package fragment root on classpath of its project
-//             IJavaProject project = this.getJavaProject();
-//             IClasspathEntry[] classpath = project.getResolvedClasspath(true);       
-//             for (int i = 0, length = classpath.length; i < length; i++) {
-//                     IClasspathEntry entry = classpath[i];
-//                     if (entry.getPath().equals(path)) {
-//                             return true;
-//                     }
-//             }
-//     } catch(JavaModelException e){
-//             // could not read classpath, then assume it is outside
-//     }
-//     return false;
-//}
-/*
- * @see org.eclipse.jdt.core.IPackageFragmentRoot#move
- */
-//public void move(
-//     IPath destination,
-//     int updateResourceFlags,
-//     int updateModelFlags,
-//     IClasspathEntry sibling,
-//     IProgressMonitor monitor)
-//     throws JavaModelException {
-//
-//     MovePackageFragmentRootOperation op = 
-//             new MovePackageFragmentRootOperation(this, destination, updateResourceFlags, updateModelFlags, sibling);
-//     runOperation(op, monitor);
-//}
-//
-//
-//protected void openWhenClosed(IProgressMonitor pm) throws JavaModelException {
-//     if (!this.resourceExists() 
-//                     || !this.isOnClasspath()) {
-//             throw newNotPresentException();
-//     }
-//     super.openWhenClosed(pm);
-//}
-
-/**
- * Recomputes the children of this element, based on the current state
- * of the workbench.
- */
-//public void refreshChildren() {
-//     try {
-//             OpenableElementInfo info= (OpenableElementInfo)getElementInfo();
-//             computeChildren(info);
-//     } catch (JavaModelException e) {
-//             // do nothing.
-//     }
-//}
-
-///*
-// * @see JavaElement#rootedAt(IJavaProject)
-// */
-//public IJavaElement rootedAt(IJavaProject project) {
-//     return
-//             new PackageFragmentRoot(
-//                     getResource(),
-//                     project, 
-//                     name);
-//}
-
-/**
- * @private Debugging purposes
- */
-protected void toStringInfo(int tab, StringBuffer buffer, Object info) {
-       buffer.append(this.tabString(tab));
-       if (getElementName().length() == 0) {
-               buffer.append("[project root]"); //$NON-NLS-1$
-       } else {
-               IPath path = getPath();
-               if (getJavaProject().getElementName().equals(path.segment(0))) {
-                       buffer.append(path.removeFirstSegments(1).makeRelative());
-               } else {
-                       buffer.append(path);
-               }
-       }
-       if (info == null) {
-               buffer.append(" (not open)"); //$NON-NLS-1$
-       }
-}
-
-/**
- * Possible failures: <ul>
- *  <li>ELEMENT_NOT_PRESENT - the root supplied to the operation
- *      does not exist
- *  <li>INVALID_ELEMENT_TYPES - the root is not of kind K_BINARY
- *   <li>RELATIVE_PATH - the path supplied to this operation must be
- *      an absolute path
- *  </ul>
- */
-//protected void verifyAttachSource(IPath sourcePath) throws JavaModelException {
-//     if (!exists()) {
-//             throw newNotPresentException();
-//     } else if (this.getKind() != K_BINARY) {
-//             throw new JavaModelException(new JavaModelStatus(IJavaModelStatusConstants.INVALID_ELEMENT_TYPES, this));
-//     } else if (sourcePath != null && !sourcePath.isAbsolute()) {
-//             throw new JavaModelException(new JavaModelStatus(IJavaModelStatusConstants.RELATIVE_PATH, sourcePath));
-//     }
-//}
-
-}
+  /**
+   * The delimiter between the source path and root path in the attachment server property.
+   */
+  protected final static char ATTACHMENT_PROPERTY_DELIMITER = '*';
+
+  /*
+   * No source attachment property
+   */
+  protected final static String NO_SOURCE_ATTACHMENT = ""; //$NON-NLS-1$
+
+  /*
+   * No source mapper singleton
+   */
+  //   protected final static SourceMapper NO_SOURCE_MAPPER = new SourceMapper();
+  /**
+   * The resource associated with this root. (an IResource or a java.io.File (for external jar only))
+   */
+  protected Object resource;
+
+  /**
+   * Constructs a package fragment root which is the root of the java package directory hierarchy.
+   */
+  protected PackageFragmentRoot(IResource resource, JavaProject project, String name) {
+    super(project, name);
+    this.resource = resource;
+  }
+
+  /**
+   * @see Openable
+   */
+  protected boolean buildStructure(OpenableElementInfo info, IProgressMonitor pm, Map newElements, IResource underlyingResource)
+      throws JavaModelException {
+
+    // check whether this pkg fragment root can be opened
+    if (!resourceExists()) { //|| !isOnClasspath()) {
+      throw newNotPresentException();
+    }
+
+    ((PackageFragmentRootInfo) info).setRootKind(determineKind(underlyingResource));
+    return computeChildren(info, newElements);
+  }
+
+  /**
+   * Returns the root's kind - K_SOURCE or K_BINARY, defaults to K_SOURCE if it is not on the classpath.
+   * 
+   * @exception NotPresentException
+   *              if the project and root do not exist.
+   */
+  protected int determineKind(IResource underlyingResource) throws JavaModelException {
+    //         IClasspathEntry[] entries= ((JavaProject)getJavaProject()).getExpandedClasspath(true);
+    //         for (int i= 0; i < entries.length; i++) {
+    //                 IClasspathEntry entry= entries[i];
+    //                 if (entry.getPath().equals(underlyingResource.getFullPath())) {
+    //                         return entry.getContentKind();
+    //                 }
+    //         }
+    return IPackageFragmentRoot.K_SOURCE;
+  }
+
+  /**
+   * Compute the package fragment children of this package fragment root.
+   * 
+   * @exception JavaModelException
+   *              The resource associated with this package fragment root does not exist
+   */
+  protected boolean computeChildren(OpenableElementInfo info, Map newElements) throws JavaModelException {
+    // Note the children are not opened (so not added to newElements) for a regular package fragment root
+    // Howver they are opened for a Jar package fragment root (see JarPackageFragmentRoot#computeChildren)
+    try {
+      // the underlying resource may be a folder or a project (in the case that the project folder
+      // is actually the package fragment root)
+      IResource underlyingResource = getResource();
+      if (underlyingResource.getType() == IResource.FOLDER || underlyingResource.getType() == IResource.PROJECT) {
+        ArrayList vChildren = new ArrayList(5);
+        IContainer rootFolder = (IContainer) underlyingResource;
+        //     char[][] inclusionPatterns = fullInclusionPatternChars();
+        char[][] exclusionPatterns = fullExclusionPatternChars();
+        computeFolderChildren(rootFolder, !Util.isExcluded(rootFolder, exclusionPatterns), "", vChildren, exclusionPatterns); //$NON-NLS-1$
+
+        IJavaElement[] children = new IJavaElement[vChildren.size()];
+        vChildren.toArray(children);
+        info.setChildren(children);
+      }
+    } catch (JavaModelException e) {
+      //problem resolving children; structure remains unknown
+      info.setChildren(new IJavaElement[] {});
+      throw e;
+    }
+    return true;
+  }
+
+  /**
+   * Starting at this folder, create package fragments and add the fragments that are not exclused to the collection of children.
+   * 
+   * @exception JavaModelException
+   *              The resource associated with this package fragment does not exist
+   */
+  protected void computeFolderChildren(IContainer folder, boolean isIncluded, String prefix, ArrayList vChildren,
+      char[][] exclusionPatterns) throws JavaModelException {
+    //, char[][] inclusionPatterns, char[][] exclusionPatterns) throws JavaModelException {
+
+    if (isIncluded) {
+      IPackageFragment pkg = getPackageFragment(prefix);
+      vChildren.add(pkg);
+    }
+    try {
+      JavaProject javaProject = (JavaProject) getJavaProject();
+      IResource[] members = folder.members();
+      boolean hasIncluded = isIncluded;
+      for (int i = 0, max = members.length; i < max; i++) {
+        IResource member = members[i];
+        String memberName = member.getName();
+
+        switch (member.getType()) {
+
+        case IResource.FOLDER:
+          if (Util.isValidFolderNameForPackage(memberName)) {
+            boolean isMemberIncluded = !Util.isExcluded(member, exclusionPatterns);
+            // keep looking inside as long as included already, or may have child included due to inclusion patterns
+            //                                             if (isMemberIncluded || inclusionPatterns != null) {
+            //                                                         // eliminate binary output only if nested inside direct subfolders
+            //                                                         if (javaProject.contains(member)) {
+            //                                                                 String newPrefix;
+            //                                                                 if (prefix.length() == 0) {
+            //                                                                         newPrefix = memberName;
+            //                                                                 } else {
+            //                                                                         newPrefix = prefix + "." + memberName; //$NON-NLS-1$
+            //                                                                 }
+            //                                                                 computeFolderChildren((IFolder) member, isMemberIncluded, newPrefix, vChildren, inclusionPatterns,
+            // exclusionPatterns);
+            //                                                         }
+            //                                                 }
+          }
+          break;
+        case IResource.FILE:
+          // inclusion filter may only include files, in which case we still want to include the immediate parent package (lazily)
+          if (!hasIncluded && Util.isValidCompilationUnitName(memberName) && !Util.isExcluded(member, exclusionPatterns)) {
+            hasIncluded = true;
+            IPackageFragment pkg = getPackageFragment(prefix);
+            vChildren.add(pkg);
+          }
+          break;
+        }
+      }
+    } catch (IllegalArgumentException e) {
+      throw new JavaModelException(e, IJavaModelStatusConstants.ELEMENT_DOES_NOT_EXIST); // could be thrown by ElementTree when path
+                                                                                         // is not found
+    } catch (CoreException e) {
+      throw new JavaModelException(e);
+    }
+  }
+
+  /**
+   * @see IPackageFragmentRoot
+   */
+  //public void attachSource(IPath sourcePath, IPath rootPath, IProgressMonitor monitor) throws JavaModelException {
+  //   try {
+  //           verifyAttachSource(sourcePath);
+  //           if (monitor != null) {
+  //                   monitor.beginTask(ProjectPrefUtil.bind("element.attachingSource"), 2); //$NON-NLS-1$
+  //           }
+  //           SourceMapper oldMapper= getSourceMapper();
+  //           IWorkspace workspace = ResourcesPlugin.getWorkspace();
+  //           boolean rootNeedsToBeClosed= false;
+  //
+  //           if (sourcePath == null) {
+  //                   //source being detached
+  //                   rootNeedsToBeClosed= true;
+  //                   setSourceMapper(null);
+  //           /* Disable deltas (see 1GDTUSD)
+  //                   // fire a delta to notify the UI about the source detachement.
+  //                   JavaModelManager manager = (JavaModelManager) JavaModelManager.getJavaModelManager();
+  //                   JavaModel model = (JavaModel) getJavaModel();
+  //                   JavaElementDelta attachedSourceDelta = new JavaElementDelta(model);
+  //                   attachedSourceDelta .sourceDetached(this); // this would be a PackageFragmentRoot
+  //                   manager.registerResourceDelta(attachedSourceDelta );
+  //                   manager.fire(); // maybe you want to fire the change later. Let us know about it.
+  //           */
+  //           } else {
+  //           /*
+  //                   // fire a delta to notify the UI about the source attachement.
+  //                   JavaModelManager manager = (JavaModelManager) JavaModelManager.getJavaModelManager();
+  //                   JavaModel model = (JavaModel) getJavaModel();
+  //                   JavaElementDelta attachedSourceDelta = new JavaElementDelta(model);
+  //                   attachedSourceDelta .sourceAttached(this); // this would be a PackageFragmentRoot
+  //                   manager.registerResourceDelta(attachedSourceDelta );
+  //                   manager.fire(); // maybe you want to fire the change later. Let us know about it.
+  //            */
+  //
+  //                   //check if different from the current attachment
+  //                   IPath storedSourcePath= getSourceAttachmentPath();
+  //                   IPath storedRootPath= getSourceAttachmentRootPath();
+  //                   if (monitor != null) {
+  //                           monitor.worked(1);
+  //                   }
+  //                   if (storedSourcePath != null) {
+  //                           if (!(storedSourcePath.equals(sourcePath) && (rootPath != null && rootPath.equals(storedRootPath)) || storedRootPath == null))
+  // {
+  //                                   rootNeedsToBeClosed= true;
+  //                           }
+  //                   }
+  //                   // check if source path is valid
+  //                   Object target = JavaModel.getTarget(workspace.getRoot(), sourcePath, false);
+  //                   if (target == null) {
+  //                           if (monitor != null) {
+  //                                   monitor.done();
+  //                           }
+  //                           throw new JavaModelException(new JavaModelStatus(IJavaModelStatusConstants.INVALID_PATH, sourcePath));
+  //                   }
+  //                   SourceMapper mapper = createSourceMapper(sourcePath, rootPath);
+  //                   if (rootPath == null && mapper.rootPath != null) {
+  //                           // as a side effect of calling the SourceMapper constructor, the root path was computed
+  //                           rootPath = new Path(mapper.rootPath);
+  //                   }
+  //                   setSourceMapper(mapper);
+  //           }
+  //           if (sourcePath == null) {
+  //                   setSourceAttachmentProperty(null); //remove the property
+  //           } else {
+  //                   //set the property to the path of the mapped source
+  //                   setSourceAttachmentProperty(
+  //                           sourcePath.toString()
+  //                           + (rootPath == null ? "" : (ATTACHMENT_PROPERTY_DELIMITER + rootPath.toString()))); //$NON-NLS-1$
+  //           }
+  //           if (rootNeedsToBeClosed) {
+  //                   if (oldMapper != null) {
+  //                           oldMapper.close();
+  //                   }
+  //                   BufferManager manager= BufferManager.getDefaultBufferManager();
+  //                   Enumeration openBuffers= manager.getOpenBuffers();
+  //                   while (openBuffers.hasMoreElements()) {
+  //                           IBuffer buffer= (IBuffer) openBuffers.nextElement();
+  //                           IOpenable possibleMember= buffer.getOwner();
+  //                           if (isAncestorOf((IJavaElement) possibleMember)) {
+  //                                   buffer.close();
+  //                           }
+  //                   }
+  //                   if (monitor != null) {
+  //                           monitor.worked(1);
+  //                   }
+  //           }
+  //   } catch (JavaModelException e) {
+  //           setSourceAttachmentProperty(null); // loose info - will be recomputed
+  //           throw e;
+  //   } finally {
+  //           if (monitor != null) {
+  //                   monitor.done();
+  //           }
+  //   }
+  //}
+  //SourceMapper createSourceMapper(IPath sourcePath, IPath rootPath) {
+  //   SourceMapper mapper = new SourceMapper(
+  //           sourcePath,
+  //           rootPath == null ? null : rootPath.toOSString(),
+  //           this.isExternal() ? JavaCore.getOptions() : this.getJavaProject().getOptions(true)); // only project options if associated with
+  // resource
+  //   return mapper;
+  //}
+  /*
+   * @see net.sourceforge.phpdt.core.IPackageFragmentRoot#delete
+   */
+  //public void delete(
+  //   int updateResourceFlags,
+  //   int updateModelFlags,
+  //   IProgressMonitor monitor)
+  //   throws JavaModelException {
+  //
+  //   DeletePackageFragmentRootOperation op = new DeletePackageFragmentRootOperation(this, updateResourceFlags, updateModelFlags);
+  //   runOperation(op, monitor);
+  //}
+  /**
+   * This root is being closed. If this root has an associated source attachment, close it too.
+   * 
+   * @see JavaElement
+   */
+  //protected void closing(Object info) throws JavaModelException { TODO remove after 2.1
+  //   ((PackageFragmentRootInfo) info).sourceMapper = null;
+  //   super.closing(info);
+  //}
+  /**
+   * Compute the package fragment children of this package fragment root.
+   * 
+   * @exception JavaModelException
+   *              The resource associated with this package fragment root does not exist
+   */
+  //protected boolean computeChildren(OpenableElementInfo info) throws JavaModelException {
+  //   try {
+  //           // the underlying resource may be a folder or a project (in the case that the project folder
+  //           // is actually the package fragment root)
+  //           IResource resource = getResource();
+  //           if (resource.getType() == IResource.FOLDER || resource.getType() == IResource.PROJECT) {
+  //                   ArrayList vChildren = new ArrayList(5);
+  //                   char[][] exclusionPatterns = fullExclusionPatternChars();
+  //                   computeFolderChildren((IContainer) resource, "", vChildren, exclusionPatterns); //$NON-NLS-1$
+  //                   IJavaElement[] children = new IJavaElement[vChildren.size()];
+  //                   vChildren.toArray(children);
+  //                   info.setChildren(children);
+  //           }
+  //   } catch (JavaModelException e) {
+  //           //problem resolving children; structure remains unknown
+  //           info.setChildren(new IJavaElement[]{});
+  //           throw e;
+  //   }
+  //   return true;
+  //}
+  /**
+   * Starting at this folder, create package fragments and add the fragments that are not exclused to the collection of children.
+   * 
+   * @exception JavaModelException
+   *              The resource associated with this package fragment does not exist
+   */
+  //protected void computeFolderChildren(IContainer folder, String prefix, ArrayList vChildren, char[][] exclusionPatterns) throws
+  // JavaModelException {
+  //   IPackageFragment pkg = getPackageFragment(prefix);
+  //   vChildren.add(pkg);
+  //   try {
+  //           JavaProject javaProject = (JavaProject)getJavaProject();
+  //           IResource[] members = folder.members();
+  //           for (int i = 0, max = members.length; i < max; i++) {
+  //                   IResource member = members[i];
+  //                   String memberName = member.getName();
+  //                   if (member.getType() == IResource.FOLDER
+  //                           && ProjectPrefUtil.isValidFolderNameForPackage(memberName)
+  //                           && !ProjectPrefUtil.isExcluded(member, exclusionPatterns)) {
+  //                                   
+  //                           // eliminate binary output only if nested inside direct subfolders
+  //                           if (javaProject.contains(member)) {
+  //                                   String newPrefix;
+  //                                   if (prefix.length() == 0) {
+  //                                           newPrefix = memberName;
+  //                                   } else {
+  //                                           newPrefix = prefix + "." + memberName; //$NON-NLS-1$
+  //                                   }
+  //                                   computeFolderChildren((IFolder) member, newPrefix, vChildren, exclusionPatterns);
+  //                           }
+  //                   }
+  //           }
+  //   } catch(IllegalArgumentException e){
+  //           throw new JavaModelException(e, IJavaModelStatusConstants.ELEMENT_DOES_NOT_EXIST); // could be thrown by ElementTree when path
+  // is not found
+  //   } catch (CoreException e) {
+  //           throw new JavaModelException(e);
+  //   }
+  //}
+  /*
+   * Computes and returns the source attachment root path for the given source attachment path. Returns <code> null </code> if none
+   * could be found.
+   * 
+   * @param sourceAttachmentPath the given absolute path to the source archive or folder @return the computed source attachment root
+   * path or <code> null </cde> if none could be found @throws JavaModelException
+   */
+  //public IPath computeSourceAttachmentRootPath(IPath sourceAttachmentPath) throws JavaModelException {
+  //   IPath sourcePath = this.getSourceAttachmentPath();
+  //   if (sourcePath == null) return null;
+  //   SourceMapper mapper =
+  //           new SourceMapper(
+  //           sourcePath,
+  //           null, // detect root path
+  //           this.isExternal() ? JavaCore.getOptions() : this.getJavaProject().getOptions(true) // only project options if associated with
+  // resource
+  //   );
+  //   if (mapper.rootPath == null) return null;
+  //   return new Path(mapper.rootPath);
+  //}
+  /*
+   * @see net.sourceforge.phpdt.core.IPackageFragmentRoot#copy
+   */
+  //public void copy(
+  //   IPath destination,
+  //   int updateResourceFlags,
+  //   int updateModelFlags,
+  //   IClasspathEntry sibling,
+  //   IProgressMonitor monitor)
+  //   throws JavaModelException {
+  //           
+  //   CopyPackageFragmentRootOperation op =
+  //           new CopyPackageFragmentRootOperation(this, destination, updateResourceFlags, updateModelFlags, sibling);
+  //   runOperation(op, monitor);
+  //}
+
+  /**
+   * Returns a new element info for this element.
+   */
+  protected Object createElementInfo() {
+    return new PackageFragmentRootInfo();
+  }
+
+  /**
+   * @see IPackageFragmentRoot
+   */
+  //public IPackageFragment createPackageFragment(String name, boolean force, IProgressMonitor monitor) throws JavaModelException {
+  //   CreatePackageFragmentOperation op = new CreatePackageFragmentOperation(this, name, force);
+  //   runOperation(op, monitor);
+  //   return getPackageFragment(name);
+  //}
+  /**
+   * Returns the root's kind - K_SOURCE or K_BINARY, defaults to K_SOURCE if it is not on the classpath.
+   * 
+   * @exception NotPresentException
+   *              if the project and root do not exist.
+   */
+  //protected int determineKind(IResource underlyingResource) throws JavaModelException {
+  //   IClasspathEntry[] entries= ((JavaProject)getJavaProject()).getExpandedClasspath(true);
+  //   for (int i= 0; i < entries.length; i++) {
+  //           IClasspathEntry entry= entries[i];
+  //           if (entry.getPath().equals(underlyingResource.getFullPath())) {
+  //                   return entry.getContentKind();
+  //           }
+  //   }
+  //   return IPackageFragmentRoot.K_SOURCE;
+  //}
+  /**
+   * Compares two objects for equality; for <code>PackageFragmentRoot</code>s, equality is having the same <code>JavaModel</code>,
+   * same resources, and occurrence count.
+   *  
+   */
+  public boolean equals(Object o) {
+    if (this == o)
+      return true;
+    if (!(o instanceof PackageFragmentRoot))
+      return false;
+    PackageFragmentRoot other = (PackageFragmentRoot) o;
+    return getJavaModel().equals(other.getJavaModel()) && this.resource.equals(other.resource)
+        && occurrenceCount == other.occurrenceCount;
+  }
+
+  /**
+   * @see IJavaElement
+   */
+  //public boolean exists() {
+  //   return super.exists()
+  //                           && isOnClasspath();
+  //}
+  //public IClasspathEntry findSourceAttachmentRecommendation() {
+  //   try {
+  //           IPath rootPath = this.getPath();
+  //           IClasspathEntry entry;
+  //           IWorkspaceRoot workspaceRoot = ResourcesPlugin.getWorkspace().getRoot();
+  //           
+  //           // try on enclosing project first
+  //           JavaProject parentProject = (JavaProject) getJavaProject();
+  //           try {
+  //                   entry = parentProject.getClasspathEntryFor(rootPath);
+  //                   if (entry != null){
+  //                           Object target = JavaModel.getTarget(workspaceRoot, entry.getSourceAttachmentPath(), true);
+  //                           if (target instanceof IFile){
+  //                                   IFile file = (IFile) target;
+  //                                   if (ProjectPrefUtil.isArchiveFileName(file.getName())){
+  //                                           return entry;
+  //                                   }
+  //                           } else if (target instanceof IFolder) {
+  //                                   return entry;
+  //                           }
+  //                           if (target instanceof java.io.File){
+  //                                   java.io.File file = (java.io.File) target;
+  //                                   if (file.isFile()) {
+  //                                           if (ProjectPrefUtil.isArchiveFileName(file.getName())){
+  //                                                   return entry;
+  //                                           }
+  //                                   } else {
+  //                                           // external directory
+  //                                           return entry;
+  //                                   }
+  //                           }
+  //                   }
+  //           } catch(JavaModelException e){
+  //           }
+  //           
+  //           // iterate over all projects
+  //           IJavaModel model = getJavaModel();
+  //           IJavaProject[] jProjects = model.getJavaProjects();
+  //           for (int i = 0, max = jProjects.length; i < max; i++){
+  //                   JavaProject jProject = (JavaProject) jProjects[i];
+  //                   if (jProject == parentProject) continue; // already done
+  //                   try {
+  //                           entry = jProject.getClasspathEntryFor(rootPath);
+  //                           if (entry != null){
+  //                                   Object target = JavaModel.getTarget(workspaceRoot, entry.getSourceAttachmentPath(), true);
+  //                                   if (target instanceof IFile){
+  //                                           IFile file = (IFile) target;
+  //                                           if (ProjectPrefUtil.isArchiveFileName(file.getName())){
+  //                                                   return entry;
+  //                                           }
+  //                                   } else if (target instanceof IFolder) {
+  //                                           return entry;
+  //                                   }
+  //                                   if (target instanceof java.io.File){
+  //                                           java.io.File file = (java.io.File) target;
+  //                                           if (file.isFile()) {
+  //                                                   if (ProjectPrefUtil.isArchiveFileName(file.getName())){
+  //                                                           return entry;
+  //                                                   }
+  //                                           } else {
+  //                                                   // external directory
+  //                                                   return entry;
+  //                                           }
+  //                                   }
+  //                           }
+  //                   } catch(JavaModelException e){
+  //                   }
+  //           }
+  //   } catch(JavaModelException e){
+  //   }
+  //
+  //   return null;
+  //}
+  /*
+   * Returns the exclusion patterns from the classpath entry associated with this root.
+   */
+  char[][] fullExclusionPatternChars() {
+    return null;
+    // try {
+
+    //         if (this.isOpen() && this.getKind() != IPackageFragmentRoot.K_SOURCE) return null;
+    //         ClasspathEntry entry = (ClasspathEntry)getRawClasspathEntry();
+    //         if (entry == null) {
+    //                 return null;
+    //         } else {
+    //                 return entry.fullExclusionPatternChars();
+    //         }
+    // } catch (JavaModelException e) {
+    //         return null;
+    // }
+  }
+
+  /**
+   * @see Openable
+   */
+  protected boolean generateInfos(OpenableElementInfo info, IProgressMonitor pm, Map newElements, IResource underlyingResource)
+      throws JavaModelException {
+
+    // ((PackageFragmentRootInfo) info).setRootKind(determineKind(underlyingResource));
+    // return computeChildren(info);
+    return false;
+  }
+
+  /**
+   * @see JavaElement#getHandleMemento()
+   */
+  protected char getHandleMementoDelimiter() {
+    return JavaElement.JEM_PACKAGEFRAGMENTROOT;
+  }
+
+  /**
+   * @see IJavaElement
+   */
+  public int getElementType() {
+    return PACKAGE_FRAGMENT_ROOT;
+  }
+
+  /*
+   * @see JavaElement
+   */
+  public IJavaElement getHandleFromMemento(String token, MementoTokenizer memento, WorkingCopyOwner owner) {
+    switch (token.charAt(0)) {
+    case JEM_COUNT:
+      return getHandleUpdatingCountFromMemento(memento, owner);
+    case JEM_PACKAGEFRAGMENT:
+      String pkgName;
+      if (memento.hasMoreTokens()) {
+        pkgName = memento.nextToken();
+        char firstChar = pkgName.charAt(0);
+        //                             if (firstChar == JEM_CLASSFILE || firstChar == JEM_COMPILATIONUNIT || firstChar == JEM_COUNT) {
+        if (firstChar == JEM_COMPILATIONUNIT || firstChar == JEM_COUNT) {
+          token = pkgName;
+          pkgName = IPackageFragment.DEFAULT_PACKAGE_NAME;
+        } else {
+          token = null;
+        }
+      } else {
+        pkgName = IPackageFragment.DEFAULT_PACKAGE_NAME;
+        token = null;
+      }
+      JavaElement pkg = (JavaElement) getPackageFragment(pkgName);
+      if (token == null) {
+        return pkg.getHandleFromMemento(memento, owner);
+      } else {
+        return pkg.getHandleFromMemento(token, memento, owner);
+      }
+    }
+    return null;
+  }
+
+  /**
+   * @see JavaElement#getHandleMemento()
+   */
+  public String getHandleMemento() {
+    IPath path;
+    IResource underlyingResource = getResource();
+    if (underlyingResource != null) {
+      // internal jar or regular root
+      if (getResource().getProject().equals(getJavaProject().getProject())) {
+        path = underlyingResource.getProjectRelativePath();
+      } else {
+        path = underlyingResource.getFullPath();
+      }
+    } else {
+      // external jar
+      path = getPath();
+    }
+    StringBuffer buff = new StringBuffer(((JavaElement) getParent()).getHandleMemento());
+    buff.append(getHandleMementoDelimiter());
+    escapeMementoName(buff, path.toString());
+    if (this.occurrenceCount > 1) {
+      buff.append(JEM_COUNT);
+      buff.append(this.occurrenceCount);
+    }
+    return buff.toString();
+  }
+
+  /**
+   * @see IPackageFragmentRoot
+   */
+  public int getKind() throws JavaModelException {
+    return ((PackageFragmentRootInfo) getElementInfo()).getRootKind();
+  }
+
+  /**
+   * Returns an array of non-java resources contained in the receiver.
+   */
+  //public Object[] getNonJavaResources() throws JavaModelException {
+  //   return ((PackageFragmentRootInfo) getElementInfo()).getNonJavaResources(getJavaProject(), getResource(), this);
+  //}
+  /**
+   * @see IPackageFragmentRoot
+   */
+  public IPackageFragment getPackageFragment(String packageName) {
+    if (packageName.indexOf(' ') != -1) { // tolerate package names with spaces (e.g. 'x . y')
+                                          // (http://bugs.eclipse.org/bugs/show_bug.cgi?id=21957)
+      char[][] compoundName = Util.toCompoundChars(packageName);
+      StringBuffer buffer = new StringBuffer(packageName.length());
+      for (int i = 0, length = compoundName.length; i < length; i++) {
+        buffer.append(CharOperation.trim(compoundName[i]));
+        if (i != length - 1) {
+          buffer.append('.');
+        }
+      }
+      packageName = buffer.toString();
+    }
+    return new PackageFragment(this, packageName);
+  }
+
+  /**
+   * Returns the package name for the given folder (which is a decendent of this root).
+   */
+  protected String getPackageName(IFolder folder) throws JavaModelException {
+    IPath myPath = getPath();
+    IPath pkgPath = folder.getFullPath();
+    int mySegmentCount = myPath.segmentCount();
+    int pkgSegmentCount = pkgPath.segmentCount();
+    StringBuffer name = new StringBuffer(IPackageFragment.DEFAULT_PACKAGE_NAME);
+    for (int i = mySegmentCount; i < pkgSegmentCount; i++) {
+      if (i > mySegmentCount) {
+        name.append('.');
+      }
+      name.append(pkgPath.segment(i));
+    }
+    return name.toString();
+  }
+
+  /**
+   * @see IJavaElement
+   */
+  public IPath getPath() {
+    return getResource().getFullPath();
+  }
+
+  /*
+   * @see IPackageFragmentRoot
+   */
+  //public IClasspathEntry getRawClasspathEntry() throws JavaModelException {
+  //
+  //   IClasspathEntry rawEntry = null;
+  //   IJavaProject project = this.getJavaProject();
+  //   project.getResolvedClasspath(true); // force the reverse rawEntry cache to be populated
+  //   JavaModelManager.PerProjectInfo perProjectInfo =
+  //           JavaModelManager.getJavaModelManager().getPerProjectInfoCheckExistence(project.getProject());
+  //   if (perProjectInfo != null && perProjectInfo.resolvedPathToRawEntries != null) {
+  //           rawEntry = (IClasspathEntry) perProjectInfo.resolvedPathToRawEntries.get(this.getPath());
+  //   }
+  //   return rawEntry;
+  //}
+  /*
+   * @see IJavaElement
+   */
+  public IResource getResource() {
+    return (IResource) this.resource;
+  }
+
+  /**
+   * @see IPackageFragmentRoot
+   */
+  //public IPath getSourceAttachmentPath() throws JavaModelException {
+  //   if (getKind() != K_BINARY) return null;
+  //   
+  //   String serverPathString= getSourceAttachmentProperty();
+  //   if (serverPathString == null) {
+  //           return null;
+  //   }
+  //   int index= serverPathString.lastIndexOf(ATTACHMENT_PROPERTY_DELIMITER);
+  //   if (index < 0) {
+  //           // no root path specified
+  //           return new Path(serverPathString);
+  //   } else {
+  //           String serverSourcePathString= serverPathString.substring(0, index);
+  //           return new Path(serverSourcePathString);
+  //   }
+  //}
+  /**
+   * Returns the server property for this package fragment root's source attachement.
+   */
+  //protected String getSourceAttachmentProperty() throws JavaModelException {
+  //   String propertyString = null;
+  //   QualifiedName qName= getSourceAttachmentPropertyName();
+  //   try {
+  //           propertyString = ResourcesPlugin.getWorkspace().getRoot().getPersistentProperty(qName);
+  //           
+  //           // if no existing source attachment information, then lookup a recommendation from classpath entries
+  //           if (propertyString == null) {
+  //                   IClasspathEntry recommendation = findSourceAttachmentRecommendation();
+  //                   if (recommendation != null) {
+  //                           IPath rootPath = recommendation.getSourceAttachmentRootPath();
+  //                           propertyString =
+  //                                   recommendation.getSourceAttachmentPath().toString()
+  //                                           + ((rootPath == null)
+  //                                                   ? "" : //$NON-NLS-1$
+  //                                                   (ATTACHMENT_PROPERTY_DELIMITER + rootPath.toString()));
+  //                           setSourceAttachmentProperty(propertyString);
+  //                   } else {
+  //                           // mark as being already looked up
+  //                           setSourceAttachmentProperty(NO_SOURCE_ATTACHMENT);
+  //                   }
+  //           } else if (NO_SOURCE_ATTACHMENT.equals(propertyString)) {
+  //                   // already looked up and no source attachment found
+  //                   return null;
+  //           }
+  //           return propertyString;
+  //   } catch (CoreException ce) {
+  //           throw new JavaModelException(ce);
+  //   }
+  //}
+  /**
+   * Returns the qualified name for the source attachment property of this root.
+   */
+  protected QualifiedName getSourceAttachmentPropertyName() throws JavaModelException {
+    return new QualifiedName(JavaCore.PLUGIN_ID, "sourceattachment: " + this.getPath().toOSString()); //$NON-NLS-1$
+  }
+
+  public void setSourceAttachmentProperty(String property) {
+    try {
+      ResourcesPlugin.getWorkspace().getRoot().setPersistentProperty(this.getSourceAttachmentPropertyName(), property);
+    } catch (CoreException ce) {
+    }
+  }
+
+  /**
+   * For use by <code>AttachSourceOperation</code> only. Sets the source mapper associated with this root.
+   */
+  //public void setSourceMapper(SourceMapper mapper) throws JavaModelException {
+  //   ((PackageFragmentRootInfo) getElementInfo()).setSourceMapper(mapper);
+  //}
+
+  /**
+   * @see IPackageFragmentRoot
+   */
+  //public IPath getSourceAttachmentRootPath() throws JavaModelException {
+  //   if (getKind() != K_BINARY) return null;
+  //   
+  //   String serverPathString= getSourceAttachmentProperty();
+  //   if (serverPathString == null) {
+  //           return null;
+  //   }
+  //   int index = serverPathString.lastIndexOf(ATTACHMENT_PROPERTY_DELIMITER);
+  //   if (index == -1) return null;
+  //   String serverRootPathString= IPackageFragmentRoot.DEFAULT_PACKAGEROOT_PATH;
+  //   if (index != serverPathString.length() - 1) {
+  //           serverRootPathString= serverPathString.substring(index + 1);
+  //   }
+  //   return new Path(serverRootPathString);
+  //}
+  /**
+   * @see JavaElement
+   */
+  //public SourceMapper getSourceMapper() {
+  //   SourceMapper mapper;
+  //   try {
+  //           PackageFragmentRootInfo rootInfo = (PackageFragmentRootInfo) getElementInfo();
+  //           mapper = rootInfo.getSourceMapper();
+  //           if (mapper == null) {
+  //                   // first call to this method
+  //                   IPath sourcePath= getSourceAttachmentPath();
+  //                   if (sourcePath != null) {
+  //                           IPath rootPath= getSourceAttachmentRootPath();
+  //                           mapper = this.createSourceMapper(sourcePath, rootPath);
+  //                           if (rootPath == null && mapper.rootPath != null) {
+  //                                   // as a side effect of calling the SourceMapper constructor, the root path was computed
+  //                                   rootPath = new Path(mapper.rootPath);
+  //                                   
+  //                                   //set the property to the path of the mapped source
+  //                                   this.setSourceAttachmentProperty(
+  //                                           sourcePath.toString()
+  //                                           + ATTACHMENT_PROPERTY_DELIMITER
+  //                                           + rootPath.toString());
+  //                           }
+  //                           rootInfo.setSourceMapper(mapper);
+  //                   } else {
+  //                           // remember that no source is attached
+  //                           rootInfo.setSourceMapper(NO_SOURCE_MAPPER);
+  //                           mapper = null;
+  //                   }
+  //           } else if (mapper == NO_SOURCE_MAPPER) {
+  //                   // a previous call to this method found out that no source was attached
+  //                   mapper = null;
+  //           }
+  //   } catch (JavaModelException e) {
+  //           // no source can be attached
+  //           mapper = null;
+  //   }
+  //   return mapper;
+  //}
+  /**
+   * @see IJavaElement
+   */
+  public IResource getUnderlyingResource() throws JavaModelException {
+    if (!exists())
+      throw newNotPresentException();
+    return getResource();
+  }
+
+  public int hashCode() {
+    return this.resource.hashCode();
+  }
+
+  /**
+   * @see IPackageFragmentRoot
+   */
+  public boolean isArchive() {
+    return false;
+  }
+
+  /**
+   * @see IPackageFragmentRoot
+   */
+  public boolean isExternal() {
+    return false;
+  }
+
+  /*
+   * Returns whether this package fragment root is on the classpath of its project.
+   */
+  //protected boolean isOnClasspath() {
+  //   if (this.getElementType() == IJavaElement.JAVA_PROJECT){
+  //           return true;
+  //   }
+  //   
+  //   IPath path = this.getPath();
+  //   try {
+  //           // check package fragment root on classpath of its project
+  //           IJavaProject project = this.getJavaProject();
+  //           IClasspathEntry[] classpath = project.getResolvedClasspath(true);
+  //           for (int i = 0, length = classpath.length; i < length; i++) {
+  //                   IClasspathEntry entry = classpath[i];
+  //                   if (entry.getPath().equals(path)) {
+  //                           return true;
+  //                   }
+  //           }
+  //   } catch(JavaModelException e){
+  //           // could not read classpath, then assume it is outside
+  //   }
+  //   return false;
+  //}
+  /*
+   * @see net.sourceforge.phpdt.core.IPackageFragmentRoot#move
+   */
+  //public void move(
+  //   IPath destination,
+  //   int updateResourceFlags,
+  //   int updateModelFlags,
+  //   IClasspathEntry sibling,
+  //   IProgressMonitor monitor)
+  //   throws JavaModelException {
+  //
+  //   MovePackageFragmentRootOperation op =
+  //           new MovePackageFragmentRootOperation(this, destination, updateResourceFlags, updateModelFlags, sibling);
+  //   runOperation(op, monitor);
+  //}
+  //
+  //
+  //protected void openWhenClosed(IProgressMonitor pm) throws JavaModelException {
+  //   if (!this.resourceExists()
+  //                   || !this.isOnClasspath()) {
+  //           throw newNotPresentException();
+  //   }
+  //   super.openWhenClosed(pm);
+  //}
+  /**
+   * Recomputes the children of this element, based on the current state of the workbench.
+   */
+  //public void refreshChildren() {
+  //   try {
+  //           OpenableElementInfo info= (OpenableElementInfo)getElementInfo();
+  //           computeChildren(info);
+  //   } catch (JavaModelException e) {
+  //           // do nothing.
+  //   }
+  //}
+  ///*
+  // * @see JavaElement#rootedAt(IJavaProject)
+  // */
+  //public IJavaElement rootedAt(IJavaProject project) {
+  //   return
+  //           new PackageFragmentRoot(
+  //                   getResource(),
+  //                   project,
+  //                   name);
+  //}
+  /**
+   * @private Debugging purposes
+   */
+  protected void toStringInfo(int tab, StringBuffer buffer, Object info) {
+    buffer.append(this.tabString(tab));
+    if (getElementName().length() == 0) {
+      buffer.append("[project root]"); //$NON-NLS-1$
+    } else {
+      IPath path = getPath();
+      if (getJavaProject().getElementName().equals(path.segment(0))) {
+        buffer.append(path.removeFirstSegments(1).makeRelative());
+      } else {
+        buffer.append(path);
+      }
+    }
+    if (info == null) {
+      buffer.append(" (not open)"); //$NON-NLS-1$
+    }
+  }
+
+  /**
+   * Possible failures:
+   * <ul>
+   * <li>ELEMENT_NOT_PRESENT - the root supplied to the operation does not exist
+   * <li>INVALID_ELEMENT_TYPES - the root is not of kind K_BINARY
+   * <li>RELATIVE_PATH - the path supplied to this operation must be an absolute path
+   * </ul>
+   */
+  //protected void verifyAttachSource(IPath sourcePath) throws JavaModelException {
+  //   if (!exists()) {
+  //           throw newNotPresentException();
+  //   } else if (this.getKind() != K_BINARY) {
+  //           throw new JavaModelException(new JavaModelStatus(IJavaModelStatusConstants.INVALID_ELEMENT_TYPES, this));
+  //   } else if (sourcePath != null && !sourcePath.isAbsolute()) {
+  //           throw new JavaModelException(new JavaModelStatus(IJavaModelStatusConstants.RELATIVE_PATH, sourcePath));
+  //   }
+  //}
+}
\ No newline at end of file
index be6bb19..64e55bf 100644 (file)
@@ -28,7 +28,7 @@ public class ReconcileWorkingCopyOperation extends JavaModelOperation {
        int astLevel;
        boolean forceProblemDetection;
        WorkingCopyOwner workingCopyOwner;
-//     org.eclipse.jdt.core.dom.CompilationUnit ast;
+//     net.sourceforge.phpdt.core.dom.CompilationUnit ast;
        
        public ReconcileWorkingCopyOperation(IJavaElement workingCopy, boolean forceProblemDetection) {
                super(new IJavaElement[] {workingCopy});
@@ -124,7 +124,6 @@ public class ReconcileWorkingCopyOperation extends JavaModelOperation {
                                        problemRequestor.beginReporting();
                                        char[] contents = workingCopy.getContents();
                                        unit = CompilationUnitProblemFinder.process(workingCopy, contents, this.workingCopyOwner, problemRequestor, false/*don't cleanup cu*/, this.progressMonitor);
-                                       
                                        CompilationUnitProblemFinder.process(workingCopy, problemRequestor, progressMonitor);
                                        problemRequestor.endReporting();
                                }
index ac51e61..0329e7e 100644 (file)
 package net.sourceforge.phpdt.internal.core;
 
 import java.util.ArrayList;
+import java.util.HashMap;
 import java.util.HashSet;
 import java.util.Iterator;
+import java.util.Map;
 
 import net.sourceforge.phpdt.core.IClasspathEntry;
 import net.sourceforge.phpdt.core.IJavaElement;
@@ -22,6 +24,7 @@ import net.sourceforge.phpdt.core.IJavaModelStatus;
 import net.sourceforge.phpdt.core.IJavaProject;
 import net.sourceforge.phpdt.core.IPackageFragmentRoot;
 import net.sourceforge.phpdt.core.JavaModelException;
+import net.sourceforge.phpdt.internal.compiler.util.ObjectVector;
 import net.sourceforge.phpdt.internal.core.util.Util;
 
 import org.eclipse.core.resources.IFolder;
@@ -43,6 +46,7 @@ public class SetClasspathOperation extends JavaModelOperation {
        IClasspathEntry[] oldResolvedPath, newResolvedPath;
        IClasspathEntry[] newRawPath;
        boolean canChangeResources;
+       boolean classpathWasSaved;
        boolean needCycleCheck;
        boolean needValidation;
        boolean needSave;
@@ -273,109 +277,112 @@ public class SetClasspathOperation extends JavaModelOperation {
         * Use three deltas in case the same root is removed/added/reordered (for
         * instance, if it is changed from K_SOURCE to K_BINARY or vice versa)
         */
-//     protected void generateClasspathChangeDeltas(
-//             IClasspathEntry[] oldResolvedPath,
-//             IClasspathEntry[] newResolvedPath,
-//             final JavaProject project) {
-//     
-//             JavaModelManager manager = JavaModelManager.getJavaModelManager();
-//             boolean needToUpdateDependents = false;
-//             JavaElementDelta delta = new JavaElementDelta(getJavaModel());
-//             boolean hasDelta = false;
-//             int oldLength = oldResolvedPath.length;
-//             int newLength = newResolvedPath.length;
-//                     
+       protected void generateClasspathChangeDeltas() {
+
+               JavaModelManager manager = JavaModelManager.getJavaModelManager();
+               boolean needToUpdateDependents = false;
+               JavaElementDelta delta = new JavaElementDelta(getJavaModel());
+               boolean hasDelta = false;
+               if (this.classpathWasSaved) {
+                       delta.changed(this.project, IJavaElementDelta.F_CLASSPATH_CHANGED);
+                       hasDelta = true;
+               }
+               int oldLength = oldResolvedPath.length;
+               int newLength = newResolvedPath.length;
+                       
 //             final IndexManager indexManager = manager.getIndexManager();
-//             Map oldRoots = null;
-//             IPackageFragmentRoot[] roots = null;
-//             if (project.isOpen()) {
-//                     try {
-//                             roots = project.getPackageFragmentRoots();
-//                     } catch (JavaModelException e) {
-//                     }
-//             } else {
-//                     Map allRemovedRoots ;
-//                     if ((allRemovedRoots = manager.deltaProcessor.removedRoots) != null) {
-//                             roots = (IPackageFragmentRoot[]) allRemovedRoots.get(project);
-//                     }
-//             }
-//             if (roots != null) {
-//                     oldRoots = new HashMap();
-//                     for (int i = 0; i < roots.length; i++) {
-//                             IPackageFragmentRoot root = roots[i];
-//                             oldRoots.put(root.getPath(), root);
-//                     }
-//             }
-//             for (int i = 0; i < oldLength; i++) {
-//                     
-//                     int index = classpathContains(newResolvedPath, oldResolvedPath[i]);
-//                     if (index == -1) {
-//                             // do not notify remote project changes
-//                             if (oldResolvedPath[i].getEntryKind() == IClasspathEntry.CPE_PROJECT){
-//                                     needToUpdateDependents = true;
-//                                     this.needCycleCheck = true;
-//                                     continue; 
-//                             }
-//     
-//                             IPackageFragmentRoot[] pkgFragmentRoots = null;
-//                             if (oldRoots != null) {
-//                                     IPackageFragmentRoot oldRoot = (IPackageFragmentRoot)  oldRoots.get(oldResolvedPath[i].getPath());
-//                                     if (oldRoot != null) { // use old root if any (could be none if entry wasn't bound)
-//                                             pkgFragmentRoots = new IPackageFragmentRoot[] { oldRoot };
-//                                     }
-//                             }
-//                             if (pkgFragmentRoots == null) {
-//                                     try {
-//                                             ObjectVector accumulatedRoots = new ObjectVector();
-//                                             HashSet rootIDs = new HashSet(5);
-//                                             rootIDs.add(project.rootID());
-//                                             project.computePackageFragmentRoots(
-//                                                     oldResolvedPath[i], 
-//                                                     accumulatedRoots, 
-//                                                     rootIDs,
-//                                                     true, // inside original project
-//                                                     false, // don't check existency
-//                                                     false); // don't retrieve exported roots
-//                                             pkgFragmentRoots = new IPackageFragmentRoot[accumulatedRoots.size()];
-//                                             accumulatedRoots.copyInto(pkgFragmentRoots);
-//                                     } catch (JavaModelException e) {
-//                                             pkgFragmentRoots =  new IPackageFragmentRoot[] {};
-//                                     }
-//                             }
-//                             addClasspathDeltas(pkgFragmentRoots, IJavaElementDelta.F_REMOVED_FROM_CLASSPATH, delta);
-//                             
-//                             int changeKind = oldResolvedPath[i].getEntryKind();
-//                             needToUpdateDependents |= (changeKind == IClasspathEntry.CPE_SOURCE) || oldResolvedPath[i].isExported();
-//     
-//                             // Remove the .java files from the index for a source folder
-//                             // For a lib folder or a .jar file, remove the corresponding index if not shared.
+               Map oldRoots = null;
+               IPackageFragmentRoot[] roots = null;
+               if (project.isOpen()) {
+                       try {
+                               roots = project.getPackageFragmentRoots();
+                       } catch (JavaModelException e) {
+                               // ignore
+                       }
+               } else {
+                       Map allRemovedRoots ;
+                       if ((allRemovedRoots = manager.getDeltaProcessor().removedRoots) != null) {
+                               roots = (IPackageFragmentRoot[]) allRemovedRoots.get(project);
+                       }
+               }
+               if (roots != null) {
+                       oldRoots = new HashMap();
+                       for (int i = 0; i < roots.length; i++) {
+                               IPackageFragmentRoot root = roots[i];
+                               oldRoots.put(root.getPath(), root);
+                       }
+               }
+               for (int i = 0; i < oldLength; i++) {
+                       
+                       int index = classpathContains(newResolvedPath, oldResolvedPath[i]);
+                       if (index == -1) {
+                               // do not notify remote project changes
+                               if (oldResolvedPath[i].getEntryKind() == IClasspathEntry.CPE_PROJECT){
+                                       needToUpdateDependents = true;
+                                       this.needCycleCheck = true;
+                                       continue; 
+                               }
+
+                               IPackageFragmentRoot[] pkgFragmentRoots = null;
+                               if (oldRoots != null) {
+                                       IPackageFragmentRoot oldRoot = (IPackageFragmentRoot)  oldRoots.get(oldResolvedPath[i].getPath());
+                                       if (oldRoot != null) { // use old root if any (could be none if entry wasn't bound)
+                                               pkgFragmentRoots = new IPackageFragmentRoot[] { oldRoot };
+                                       }
+                               }
+                               if (pkgFragmentRoots == null) {
+                                       try {
+                                               ObjectVector accumulatedRoots = new ObjectVector();
+                                               HashSet rootIDs = new HashSet(5);
+                                               rootIDs.add(project.rootID());
+                                               project.computePackageFragmentRoots(
+                                                       oldResolvedPath[i], 
+                                                       accumulatedRoots, 
+                                                       rootIDs,
+                                                       true, // inside original project
+                                                       false, // don't check existency
+                                                       false); // don't retrieve exported roots
+                                               pkgFragmentRoots = new IPackageFragmentRoot[accumulatedRoots.size()];
+                                               accumulatedRoots.copyInto(pkgFragmentRoots);
+                                       } catch (JavaModelException e) {
+                                               pkgFragmentRoots =  new IPackageFragmentRoot[] {};
+                                       }
+                               }
+                               addClasspathDeltas(pkgFragmentRoots, IJavaElementDelta.F_REMOVED_FROM_CLASSPATH, delta);
+                               
+                               int changeKind = oldResolvedPath[i].getEntryKind();
+                               needToUpdateDependents |= (changeKind == IClasspathEntry.CPE_SOURCE) || oldResolvedPath[i].isExported();
+
+                               // Remove the .java files from the index for a source folder
+                               // For a lib folder or a .jar file, remove the corresponding index if not shared.
 //                             if (indexManager != null) {
 //                                     IClasspathEntry oldEntry = oldResolvedPath[i];
 //                                     final IPath path = oldEntry.getPath();
 //                                     switch (changeKind) {
 //                                             case IClasspathEntry.CPE_SOURCE:
+//                                                     final char[][] inclusionPatterns = null; //((ClasspathEntry)oldEntry).fullInclusionPatternChars();
 //                                                     final char[][] exclusionPatterns = ((ClasspathEntry)oldEntry).fullExclusionPatternChars();
 //                                                     postAction(new IPostAction() {
 //                                                             public String getID() {
 //                                                                     return path.toString();
 //                                                             }
-//                                                             public void run() throws JavaModelException {
-//                                                                     indexManager.removeSourceFolderFromIndex(project, path, exclusionPatterns);
+//                                                             public void run() /* throws JavaModelException */ {
+//                                                                     indexManager.removeSourceFolderFromIndex(project, path, inclusionPatterns, exclusionPatterns);
 //                                                             }
 //                                                     }, 
 //                                                     REMOVEALL_APPEND);
 //                                                     break;
 //                                             case IClasspathEntry.CPE_LIBRARY:
-//                                                     final DeltaProcessor deltaProcessor = manager.deltaProcessor;
+//                                                     final DeltaProcessingState deltaState = manager.deltaState;
 //                                                     postAction(new IPostAction() {
 //                                                             public String getID() {
 //                                                                     return path.toString();
 //                                                             }
-//                                                             public void run() throws JavaModelException {
-//                                                                     if (deltaProcessor.otherRoots.get(path) == null) { // if root was not shared
+//                                                             public void run() /* throws JavaModelException */ {
+//                                                                     if (deltaState.otherRoots.get(path) == null) { // if root was not shared
 //                                                                             indexManager.discardJobs(path.toString());
 //                                                                             indexManager.removeIndex(path);
-//                                                                             // TODO: we could just remove the in-memory index and have the indexing check for timestamps
+//                                                                             // TODO (kent) we could just remove the in-memory index and have the indexing check for timestamps
 //                                                                     }
 //                                                             }
 //                                                     }, 
@@ -383,66 +390,76 @@ public class SetClasspathOperation extends JavaModelOperation {
 //                                                     break;
 //                                     }               
 //                             }
-//                             hasDelta = true;
-//     
-//                     } else {
-//                             // do not notify remote project changes
-//                             if (oldResolvedPath[i].getEntryKind() == IClasspathEntry.CPE_PROJECT){
-//                                     this.needCycleCheck |= (oldResolvedPath[i].isExported() != newResolvedPath[index].isExported());
-//                                     continue; 
-//                             }                               
-//                             needToUpdateDependents |= (oldResolvedPath[i].isExported() != newResolvedPath[index].isExported());
-//                             if (index != i) { //reordering of the classpath
-//                                             addClasspathDeltas(
-//                                                     project.computePackageFragmentRoots(oldResolvedPath[i]),
-//                                                     IJavaElementDelta.F_REORDER,
-//                                                     delta);
-//                                             int changeKind = oldResolvedPath[i].getEntryKind();
-//                                             needToUpdateDependents |= (changeKind == IClasspathEntry.CPE_SOURCE);
-//             
-//                                             hasDelta = true;
-//                             }
-//                             
-//                             // check source attachment
-//                             IPath newSourcePath = newResolvedPath[index].getSourceAttachmentPath();
-//                             int sourceAttachmentFlags = 
-//                                     this.getSourceAttachmentDeltaFlag(
-//                                             oldResolvedPath[i].getSourceAttachmentPath(),
-//                                             newSourcePath,
-//                                             null/*not a source root path*/);
-//                             int sourceAttachmentRootFlags = 
-//                                     this.getSourceAttachmentDeltaFlag(
-//                                             oldResolvedPath[i].getSourceAttachmentRootPath(),
-//                                             newResolvedPath[index].getSourceAttachmentRootPath(),
-//                                             newSourcePath/*in case both root paths are null*/);
-//                             int flags = sourceAttachmentFlags | sourceAttachmentRootFlags;
-//                             if (flags != 0) {
-//                                     addClasspathDeltas(
-//                                             project.computePackageFragmentRoots(oldResolvedPath[i]),
-//                                             flags,
-//                                             delta);
-//                                     hasDelta = true;
-//                             }
-//                     }
-//             }
-//     
-//             for (int i = 0; i < newLength; i++) {
-//     
-//                     int index = classpathContains(oldResolvedPath, newResolvedPath[i]);
-//                     if (index == -1) {
-//                             // do not notify remote project changes
-//                             if (newResolvedPath[i].getEntryKind() == IClasspathEntry.CPE_PROJECT){
-//                                     needToUpdateDependents = true;
-//                                     this.needCycleCheck = true;
-//                                     continue; 
-//                             }
-//                             addClasspathDeltas(
-//                                     project.computePackageFragmentRoots(newResolvedPath[i]),
-//                                     IJavaElementDelta.F_ADDED_TO_CLASSPATH,
-//                                     delta);
-//                             int changeKind = newResolvedPath[i].getEntryKind();
-//                             
-//                             // Request indexing
+                               hasDelta = true;
+
+                       } else {
+                               // do not notify remote project changes
+                               if (oldResolvedPath[i].getEntryKind() == IClasspathEntry.CPE_PROJECT){
+                                       this.needCycleCheck |= (oldResolvedPath[i].isExported() != newResolvedPath[index].isExported());
+                                       continue; 
+                               }                               
+                               needToUpdateDependents |= (oldResolvedPath[i].isExported() != newResolvedPath[index].isExported());
+                               if (index != i) { //reordering of the classpath
+                                               addClasspathDeltas(
+                                                       project.computePackageFragmentRoots(oldResolvedPath[i]),
+                                                       IJavaElementDelta.F_REORDER,
+                                                       delta);
+                                               int changeKind = oldResolvedPath[i].getEntryKind();
+                                               needToUpdateDependents |= (changeKind == IClasspathEntry.CPE_SOURCE);
+               
+                                               hasDelta = true;
+                               }
+                               
+                               // check source attachment
+                               IPath newSourcePath = newResolvedPath[index].getSourceAttachmentPath();
+                               int sourceAttachmentFlags = 
+                                       this.getSourceAttachmentDeltaFlag(
+                                               oldResolvedPath[i].getSourceAttachmentPath(),
+                                               newSourcePath);
+                               IPath oldRootPath = oldResolvedPath[i].getSourceAttachmentRootPath();
+                               IPath newRootPath = newResolvedPath[index].getSourceAttachmentRootPath();
+                               int sourceAttachmentRootFlags = getSourceAttachmentDeltaFlag(oldRootPath, newRootPath);
+                               int flags = sourceAttachmentFlags | sourceAttachmentRootFlags;
+                               if (flags != 0) {
+                                       addClasspathDeltas(project.computePackageFragmentRoots(oldResolvedPath[i]), flags, delta);
+                                       hasDelta = true;
+                               } else {
+                                       if (oldRootPath == null && newRootPath == null) {
+                                               // if source path is specified and no root path, it needs to be recomputed dynamically
+                                               // force detach source on jar package fragment roots (source will be lazily computed when needed)
+                                               IPackageFragmentRoot[] computedRoots = project.computePackageFragmentRoots(oldResolvedPath[i]);
+                                               for (int j = 0; j < computedRoots.length; j++) {
+                                                       IPackageFragmentRoot root = computedRoots[j];
+                                                       // force detach source on jar package fragment roots (source will be lazily computed when needed)
+                                                       try {
+                                                               root.close();
+                                                       } catch (JavaModelException e) {
+                                                               // ignore
+                                                       }
+                                                       ((PackageFragmentRoot) root).setSourceAttachmentProperty(null);// loose info - will be recomputed
+                                               }
+                                       }
+                               }
+                       }
+               }
+
+               for (int i = 0; i < newLength; i++) {
+
+                       int index = classpathContains(oldResolvedPath, newResolvedPath[i]);
+                       if (index == -1) {
+                               // do not notify remote project changes
+                               if (newResolvedPath[i].getEntryKind() == IClasspathEntry.CPE_PROJECT){
+                                       needToUpdateDependents = true;
+                                       this.needCycleCheck = true;
+                                       continue; 
+                               }
+                               addClasspathDeltas(
+                                       project.computePackageFragmentRoots(newResolvedPath[i]),
+                                       IJavaElementDelta.F_ADDED_TO_CLASSPATH,
+                                       delta);
+                               int changeKind = newResolvedPath[i].getEntryKind();
+                               
+                               // Request indexing
 //                             if (indexManager != null) {
 //                                     switch (changeKind) {
 //                                             case IClasspathEntry.CPE_LIBRARY:
@@ -460,7 +477,7 @@ public class SetClasspathOperation extends JavaModelOperation {
 //                                                                     public String getID() {
 //                                                                             return newPath.toString();
 //                                                                     }
-//                                                                     public void run() throws JavaModelException {
+//                                                                     public void run() /* throws JavaModelException */ {
 //                                                                             indexManager.indexLibrary(newPath, project.getProject());
 //                                                                     }
 //                                                             }, 
@@ -470,34 +487,58 @@ public class SetClasspathOperation extends JavaModelOperation {
 //                                             case IClasspathEntry.CPE_SOURCE:
 //                                                     IClasspathEntry entry = newResolvedPath[i];
 //                                                     final IPath path = entry.getPath();
+//                                                     final char[][] inclusionPatterns = null; //((ClasspathEntry)entry).fullInclusionPatternChars();
 //                                                     final char[][] exclusionPatterns = ((ClasspathEntry)entry).fullExclusionPatternChars();
 //                                                     postAction(new IPostAction() {
 //                                                             public String getID() {
 //                                                                     return path.toString();
 //                                                             }
-//                                                             public void run() throws JavaModelException {
-//                                                                     indexManager.indexSourceFolder(project, path, exclusionPatterns);
+//                                                             public void run() /* throws JavaModelException */ {
+//                                                                     indexManager.indexSourceFolder(project, path, inclusionPatterns, exclusionPatterns);
 //                                                             }
 //                                                     }, 
 //                                                     APPEND); // append so that a removeSourceFolder action is not removed
 //                                                     break;
 //                                     }
 //                             }
-//                             
-//                             needToUpdateDependents |= (changeKind == IClasspathEntry.CPE_SOURCE) || newResolvedPath[i].isExported();
-//                             hasDelta = true;
-//     
-//                     } // classpath reordering has already been generated in previous loop
-//             }
-//     
-//             if (hasDelta) {
-//                     this.addDelta(delta);
-//             }
-//             if (needToUpdateDependents){
-//                     updateAffectedProjects(project.getProject().getFullPath());
-//             }
-//     }
+                               
+                               needToUpdateDependents |= (changeKind == IClasspathEntry.CPE_SOURCE) || newResolvedPath[i].isExported();
+                               hasDelta = true;
 
+                       } // classpath reordering has already been generated in previous loop
+               }
+
+               if (hasDelta) {
+                       this.addDelta(delta);
+               } else {
+                       this.identicalRoots = true;
+               }
+               if (needToUpdateDependents){
+                       updateAffectedProjects(project.getProject().getFullPath());
+               }
+       }
+       protected void saveClasspathIfNecessary() throws JavaModelException {
+               
+               if (!this.canChangeResources || !this.needSave) return;
+                               
+               IClasspathEntry[] classpathForSave;
+               if (this.newRawPath == ReuseClasspath || this.newRawPath == UpdateClasspath){
+                       classpathForSave = project.getRawClasspath();
+               } else {
+                       classpathForSave = this.newRawPath;
+               }
+               IPath outputLocationForSave;
+               if (this.newOutputLocation == ReuseOutputLocation){
+                       outputLocationForSave = project.getOutputLocation();
+               } else {
+                       outputLocationForSave = this.newOutputLocation;
+               }
+               // if read-only .classpath, then the classpath setting will never been performed completely
+               if (project.saveClasspath(classpathForSave, outputLocationForSave)) {
+                       this.classpathWasSaved = true;
+                       this.setAttribute(HAS_MODIFIED_RESOURCE_ATTR, TRUE); 
+               }
+       }
        protected JavaProject getProject() {
                return ((JavaProject) getElementsToProcess()[0]);
        }
@@ -528,6 +569,27 @@ public class SetClasspathOperation extends JavaModelOperation {
                }
        }
 
+       /*
+        * Returns the source attachment flag for the delta between the 2 give source paths.
+        * Returns either F_SOURCEATTACHED, F_SOURCEDETACHED, F_SOURCEATTACHED | F_SOURCEDETACHED
+        * or 0 if there is no difference.
+        */
+       private int getSourceAttachmentDeltaFlag(IPath oldPath, IPath newPath) {
+               if (oldPath == null) {
+                       if (newPath != null) {
+                               return IJavaElementDelta.F_SOURCEATTACHED;
+                       } else {
+                               return 0;
+                       }
+               } else if (newPath == null) {
+                       return IJavaElementDelta.F_SOURCEDETACHED;
+               } else if (!oldPath.equals(newPath)) {
+                       return IJavaElementDelta.F_SOURCEATTACHED | IJavaElementDelta.F_SOURCEDETACHED;
+               } else {
+                       return 0;
+               }
+       }
+       
        /**
         * Returns <code>true</code> if this operation performs no resource modifications,
         * otherwise <code>false</code>. Subclasses must override.
@@ -536,28 +598,28 @@ public class SetClasspathOperation extends JavaModelOperation {
                return !this.canChangeResources;
        }
 
-       protected void saveClasspathIfNecessary() throws JavaModelException {
-               
-               if (!this.canChangeResources || !this.needSave) return;
-                               
-               IClasspathEntry[] classpathForSave;
-               JavaProject project = getProject();
-               if (this.newRawPath == ReuseClasspath || this.newRawPath == UpdateClasspath){
-                       classpathForSave = project.getRawClasspath();
-               } else {
-                       classpathForSave = this.newRawPath;
-               }
-               IPath outputLocationForSave;
-               if (this.newOutputLocation == ReuseOutputLocation){
-                       outputLocationForSave = project.getOutputLocation();
-               } else {
-                       outputLocationForSave = this.newOutputLocation;
-               }
-               // if read-only .classpath, then the classpath setting will never been performed completely
-               if (project.saveClasspath(classpathForSave, outputLocationForSave)) {
-                       this.setAttribute(HAS_MODIFIED_RESOURCE_ATTR, TRUE); 
-               }
-       }
+//     protected void saveClasspathIfNecessary() throws JavaModelException {
+//             
+//             if (!this.canChangeResources || !this.needSave) return;
+//                             
+//             IClasspathEntry[] classpathForSave;
+//             JavaProject project = getProject();
+//             if (this.newRawPath == ReuseClasspath || this.newRawPath == UpdateClasspath){
+//                     classpathForSave = project.getRawClasspath();
+//             } else {
+//                     classpathForSave = this.newRawPath;
+//             }
+//             IPath outputLocationForSave;
+//             if (this.newOutputLocation == ReuseOutputLocation){
+//                     outputLocationForSave = project.getOutputLocation();
+//             } else {
+//                     outputLocationForSave = this.newOutputLocation;
+//             }
+//             // if read-only .classpath, then the classpath setting will never been performed completely
+//             if (project.saveClasspath(classpathForSave, outputLocationForSave)) {
+//                     this.setAttribute(HAS_MODIFIED_RESOURCE_ATTR, TRUE); 
+//             }
+//     }
        
        public String toString(){
                StringBuffer buffer = new StringBuffer(20);
@@ -582,31 +644,52 @@ public class SetClasspathOperation extends JavaModelOperation {
                return buffer.toString();
        }
 
+//     private void updateClasspath() throws JavaModelException {
+//
+//             JavaProject project = ((JavaProject) getElementsToProcess()[0]);
+//
+//             beginTask(Util.bind("classpath.settingProgress", project.getElementName()), 2); //$NON-NLS-1$
+//
+//             // SIDE-EFFECT: from thereon, the classpath got modified
+//             project.setRawClasspath0(this.newRawPath);
+//
+//             // resolve new path (asking for marker creation if problems)
+//             if (this.newResolvedPath == null) {
+//                     this.newResolvedPath = project.getResolvedClasspath(true, this.canChangeResources);
+//             }
+//             
+////           if (this.oldResolvedPath != null) {
+////                   generateClasspathChangeDeltas(
+////                           this.oldResolvedPath,
+////                           this.newResolvedPath,
+////                           project);
+////           } else {
+//                     this.needCycleCheck = true;
+//                     updateAffectedProjects(project.getProject().getFullPath());
+////           }
+//             
+//             updateCycleMarkersIfNecessary(newResolvedPath);
+//     }
        private void updateClasspath() throws JavaModelException {
 
-               JavaProject project = ((JavaProject) getElementsToProcess()[0]);
-
                beginTask(Util.bind("classpath.settingProgress", project.getElementName()), 2); //$NON-NLS-1$
 
                // SIDE-EFFECT: from thereon, the classpath got modified
-               project.setRawClasspath0(this.newRawPath);
+               project.getPerProjectInfo().updateClasspathInformation(this.newRawPath);
 
                // resolve new path (asking for marker creation if problems)
                if (this.newResolvedPath == null) {
-                       this.newResolvedPath = project.getResolvedClasspath(true, this.canChangeResources);
+                       this.newResolvedPath = project.getResolvedClasspath(true, this.canChangeResources, false/*don't returnResolutionInProgress*/);
                }
                
-//             if (this.oldResolvedPath != null) {
-//                     generateClasspathChangeDeltas(
-//                             this.oldResolvedPath,
-//                             this.newResolvedPath,
-//                             project);
-//             } else {
+               if (this.oldResolvedPath != null) {
+                       generateClasspathChangeDeltas();
+               } else {
                        this.needCycleCheck = true;
                        updateAffectedProjects(project.getProject().getFullPath());
-//             }
+               }
                
-               updateCycleMarkersIfNecessary(newResolvedPath);
+               updateCycleMarkersIfNecessary();
        }
 
        /**
@@ -654,30 +737,53 @@ public class SetClasspathOperation extends JavaModelOperation {
        /**
         * Update cycle markers
         */
-       protected void updateCycleMarkersIfNecessary(IClasspathEntry[] newResolvedPath) {
+       protected void updateCycleMarkersIfNecessary() {
 
                if (!this.needCycleCheck) return;
                if (!this.canChangeResources) return;
                 
-               try {
-                       JavaProject project = getProject();
-                       if (!project.hasCycleMarker() && !project.hasClasspathCycle(project.getResolvedClasspath(true))){
-                               return;
-                       }
-               
-                       postAction(
-                               new IPostAction() {
-                                       public String getID() {
-                                               return "updateCycleMarkers";  //$NON-NLS-1$
-                                       }
-                                       public void run() throws JavaModelException {
-                                               JavaProject.updateAllCycleMarkers();
-                                       }
-                               },
-                               REMOVEALL_APPEND);
-               } catch(JavaModelException e){
+               if (!project.hasCycleMarker() && !project.hasClasspathCycle(newResolvedPath)){
+                       return;
                }
+       
+               postAction(
+                       new IPostAction() {
+                               public String getID() {
+                                       return "updateCycleMarkers";  //$NON-NLS-1$
+                               }
+                               public void run() throws JavaModelException {
+                                       JavaProject.updateAllCycleMarkers();
+                               }
+                       },
+                       REMOVEALL_APPEND);
        }
+//     /**
+//      * Update cycle markers
+//      */
+//     protected void updateCycleMarkersIfNecessary(IClasspathEntry[] newResolvedPath) {
+//
+//             if (!this.needCycleCheck) return;
+//             if (!this.canChangeResources) return;
+//              
+//             try {
+//                     JavaProject project = getProject();
+//                     if (!project.hasCycleMarker() && !project.hasClasspathCycle(project.getResolvedClasspath(true))){
+//                             return;
+//                     }
+//             
+//                     postAction(
+//                             new IPostAction() {
+//                                     public String getID() {
+//                                             return "updateCycleMarkers";  //$NON-NLS-1$
+//                                     }
+//                                     public void run() throws JavaModelException {
+//                                             JavaProject.updateAllCycleMarkers();
+//                                     }
+//                             },
+//                             REMOVEALL_APPEND);
+//             } catch(JavaModelException e){
+//             }
+//     }
 
        /**
         * Sets the output location of the pre-specified project.
index c1e4ab7..91f17a5 100644 (file)
@@ -10,6 +10,8 @@
  *******************************************************************************/
 package net.sourceforge.phpdt.internal.core;
 
+import java.util.HashMap;
+
 import net.sourceforge.phpdt.core.Flags;
 import net.sourceforge.phpdt.core.IJavaElement;
 import net.sourceforge.phpdt.core.IMethod;
@@ -25,7 +27,7 @@ import net.sourceforge.phpdt.internal.corext.Assert;
  * @see IMethod
  */
 
-/* package */ class SourceMethod extends Member implements IMethod {
+public class SourceMethod extends Member implements IMethod {
 
        /**
         * The parameter type signatures of the method - stored locally
index d3dcce0..6f89844 100644 (file)
@@ -22,6 +22,8 @@ import net.sourceforge.phpdt.core.ISourceManipulation;
 import net.sourceforge.phpdt.core.ISourceRange;
 import net.sourceforge.phpdt.core.ISourceReference;
 import net.sourceforge.phpdt.core.JavaModelException;
+import net.sourceforge.phpdt.core.WorkingCopyOwner;
+import net.sourceforge.phpdt.internal.core.util.MementoTokenizer;
 
 import org.eclipse.core.resources.IResource;
 import org.eclipse.core.runtime.IPath;
@@ -101,6 +103,16 @@ public IResource getCorrespondingResource() throws JavaModelException {
        if (!exists()) throw newNotPresentException();
        return null;
 }
+/*
+ * @see JavaElement
+ */
+public IJavaElement getHandleFromMemento(String token, MementoTokenizer memento, WorkingCopyOwner workingCopyOwner) {
+       switch (token.charAt(0)) {
+               case JEM_COUNT:
+                       return getHandleUpdatingCountFromMemento(memento, workingCopyOwner);
+       }
+       return this;
+}
 /**
  * Return the first instance of IOpenable in the hierarchy of this
  * type (going up the hierarchy from this type);
@@ -115,6 +127,7 @@ public IOpenable getOpenableParent() {
        }
        return null;
 }
+
 /*
  * @see IJavaElement
  */
index 73b267b..70a171e 100644 (file)
@@ -22,17 +22,17 @@ protected SourceRefElementInfo() {
        setIsStructureKnown(true);
 }
 /**
- * @see org.eclipse.jdt.internal.compiler.env.ISourceType#getDeclarationSourceEnd()
- * @see org.eclipse.jdt.internal.compiler.env.ISourceMethod#getDeclarationSourceEnd()
- * @see org.eclipse.jdt.internal.compiler.env.ISourceField#getDeclarationSourceEnd()
+ * @see net.sourceforge.phpdt.internal.compiler.env.ISourceType#getDeclarationSourceEnd()
+ * @see net.sourceforge.phpdt.internal.compiler.env.ISourceMethod#getDeclarationSourceEnd()
+ * @see net.sourceforge.phpdt.internal.compiler.env.ISourceField#getDeclarationSourceEnd()
  */
 public int getDeclarationSourceEnd() {
        return fSourceRangeEnd;
 }
 /**
- * @see org.eclipse.jdt.internal.compiler.env.ISourceType#getDeclarationSourceStart()
- * @see org.eclipse.jdt.internal.compiler.env.ISourceMethod#getDeclarationSourceStart()
- * @see org.eclipse.jdt.internal.compiler.env.ISourceField#getDeclarationSourceStart()
+ * @see net.sourceforge.phpdt.internal.compiler.env.ISourceType#getDeclarationSourceStart()
+ * @see net.sourceforge.phpdt.internal.compiler.env.ISourceMethod#getDeclarationSourceStart()
+ * @see net.sourceforge.phpdt.internal.compiler.env.ISourceField#getDeclarationSourceStart()
  */
 public int getDeclarationSourceStart() {
        return fSourceRangeStart;
index 9af3643..4088fad 100644 (file)
  *******************************************************************************/
 package net.sourceforge.phpdt.internal.core;
 
+import java.io.InputStream;
 import java.util.ArrayList;
 
+import net.sourceforge.phpdt.core.ICompilationUnit;
 import net.sourceforge.phpdt.core.IField;
 import net.sourceforge.phpdt.core.IJavaElement;
+import net.sourceforge.phpdt.core.IJavaProject;
 import net.sourceforge.phpdt.core.IMember;
 import net.sourceforge.phpdt.core.IMethod;
 import net.sourceforge.phpdt.core.IPackageFragment;
 import net.sourceforge.phpdt.core.IParent;
 import net.sourceforge.phpdt.core.IType;
+import net.sourceforge.phpdt.core.ITypeHierarchy;
+import net.sourceforge.phpdt.core.IWorkingCopy;
 import net.sourceforge.phpdt.core.JavaModelException;
+import net.sourceforge.phpdt.core.WorkingCopyOwner;
 import net.sourceforge.phpdt.core.jdom.IDOMNode;
 import net.sourceforge.phpdt.internal.core.util.Util;
 import net.sourceforge.phpdt.internal.corext.Assert;
 
+import org.eclipse.core.runtime.IProgressMonitor;
+
 /**
  * Handle for a source type. Info object is a SourceTypeElementInfo.
  * 
@@ -37,7 +45,6 @@ public class SourceType extends Member implements IType {
    * An empty list of Strings
    */
   protected static final String[] fgEmptyList = new String[] {};
-
   protected SourceType(JavaElement parent, String name) {
     super(parent, name);
     Assert.isTrue(name.indexOf('.') == -1, Util.bind("sourcetype.invalidName", name)); //$NON-NLS-1$
@@ -365,66 +372,186 @@ public class SourceType extends Member implements IType {
   /**
    * @see IType
    */
-  //public ITypeHierarchy loadTypeHierachy(InputStream input, IProgressMonitor monitor) throws JavaModelException {
-  //   return TypeHierarchy.load(this, input);
-  //}
+//  public ITypeHierarchy loadTypeHierachy(InputStream input, IProgressMonitor monitor) throws JavaModelException {
+//     return loadTypeHierachy(input, DefaultWorkingCopyOwner.PRIMARY, monitor);
+//  }
+  /**
+   * NOTE: This method is not part of the API has it is not clear clients would easily use it: they would need to
+   * first make sure all working copies for the given owner exist before calling it. This is especially har at startup 
+   * time.
+   * In case clients want this API, here is how it should be specified:
+   * <p>
+   * Loads a previously saved ITypeHierarchy from an input stream. A type hierarchy can
+   * be stored using ITypeHierachy#store(OutputStream). A compilation unit of a
+   * loaded type has the given owner if such a working copy exists, otherwise the type's 
+   * compilation unit is a primary compilation unit.
+   * 
+   * Only hierarchies originally created by the following methods can be loaded:
+   * <ul>
+   * <li>IType#newSupertypeHierarchy(IProgressMonitor)</li>
+   * <li>IType#newSupertypeHierarchy(WorkingCopyOwner, IProgressMonitor)</li>
+   * <li>IType#newTypeHierarchy(IJavaProject, IProgressMonitor)</li>
+   * <li>IType#newTypeHierarchy(IJavaProject, WorkingCopyOwner, IProgressMonitor)</li>
+   * <li>IType#newTypeHierarchy(IProgressMonitor)</li>
+   * <li>IType#newTypeHierarchy(WorkingCopyOwner, IProgressMonitor)</li>
+   * </u>
+   * 
+   * @param input stream where hierarchy will be read
+   * @param monitor the given progress monitor
+   * @return the stored hierarchy
+   * @exception JavaModelException if the hierarchy could not be restored, reasons include:
+   *      - type is not the focus of the hierarchy or 
+   *           - unable to read the input stream (wrong format, IOException during reading, ...)
+   * @see ITypeHierarchy#store(java.io.OutputStream, IProgressMonitor)
+   * @since 3.0
+   */
+//  public ITypeHierarchy loadTypeHierachy(InputStream input, WorkingCopyOwner owner, IProgressMonitor monitor) throws JavaModelException {
+//     // TODO monitor should be passed to TypeHierarchy.load(...)
+//     return TypeHierarchy.load(this, input, owner);
+//  }
   /**
    * @see IType
    */
-  //public ITypeHierarchy newSupertypeHierarchy(IProgressMonitor monitor) throws JavaModelException {
-  //   return this.newSupertypeHierarchy(null, monitor);
-  //}
-  /**
+//  public ITypeHierarchy newSupertypeHierarchy(IProgressMonitor monitor) throws JavaModelException {
+//     return this.newSupertypeHierarchy(DefaultWorkingCopyOwner.PRIMARY, monitor);
+//  }
+  /*
+   * @see IType#newSupertypeHierarchy(ICompilationUnit[], IProgressMonitor)
+   */
+//  public ITypeHierarchy newSupertypeHierarchy(
+//     ICompilationUnit[] workingCopies,
+//     IProgressMonitor monitor)
+//     throws JavaModelException {
+//
+//     CreateTypeHierarchyOperation op= new CreateTypeHierarchyOperation(this, workingCopies, SearchEngine.createWorkspaceScope(), false);
+//     op.runOperation(monitor);
+//     return op.getResult();
+//  }
+  /**
+   * @param workingCopies the working copies that take precedence over their original compilation units
+   * @param monitor the given progress monitor
+   * @return a type hierarchy for this type containing this type and all of its supertypes
+   * @exception JavaModelException if this element does not exist or if an
+   *           exception occurs while accessing its corresponding resource.
+   *
    * @see IType#newSupertypeHierarchy(IWorkingCopy[], IProgressMonitor)
+   * @deprecated
    */
-  //public ITypeHierarchy newSupertypeHierarchy(
-  //   IWorkingCopy[] workingCopies,
-  //   IProgressMonitor monitor)
-  //   throws JavaModelException {
-  //
-  //   CreateTypeHierarchyOperation op= new CreateTypeHierarchyOperation(this, workingCopies, SearchEngine.createWorkspaceScope(),
-  // false);
-  //   runOperation(op, monitor);
-  //   return op.getResult();
-  //}
+  public ITypeHierarchy newSupertypeHierarchy(
+       IWorkingCopy[] workingCopies,
+       IProgressMonitor monitor)
+       throws JavaModelException {
+
+       ICompilationUnit[] copies;
+       if (workingCopies == null) {
+               copies = null;
+       } else {
+               int length = workingCopies.length;
+               System.arraycopy(workingCopies, 0, copies = new ICompilationUnit[length], 0, length);
+       }
+       return newSupertypeHierarchy(copies, monitor);
+  }
   /**
-   * @see IType
+   * @see IType#newSupertypeHierarchy(WorkingCopyOwner, IProgressMonitor)
    */
-  //public ITypeHierarchy newTypeHierarchy(IProgressMonitor monitor) throws JavaModelException {
-  //   return this.newTypeHierarchy((IWorkingCopy[])null, monitor);
-  //}
+//  public ITypeHierarchy newSupertypeHierarchy(
+//     WorkingCopyOwner owner,
+//     IProgressMonitor monitor)
+//     throws JavaModelException {
+//
+//     ICompilationUnit[] workingCopies = JavaModelManager.getJavaModelManager().getWorkingCopies(owner, true/*add primary working copies*/);
+//     CreateTypeHierarchyOperation op= new CreateTypeHierarchyOperation(this, workingCopies, SearchEngine.createWorkspaceScope(), false);
+//     op.runOperation(monitor);
+//     return op.getResult();
+//  }
   /**
-   * @see IType#newTypeHierarchy(IWorkingCopy[], IProgressMonitor)
+   * @see IType
    */
-  //public ITypeHierarchy newTypeHierarchy(
-  //   IWorkingCopy[] workingCopies,
-  //   IProgressMonitor monitor)
-  //   throws JavaModelException {
-  //           
-  //   CreateTypeHierarchyOperation op= new CreateTypeHierarchyOperation(this, workingCopies, SearchEngine.createWorkspaceScope(),
-  // true);
-  //   runOperation(op, monitor);
-  //   return op.getResult();
-  //}
+//  public ITypeHierarchy newTypeHierarchy(IJavaProject project, IProgressMonitor monitor) throws JavaModelException {
+//     return newTypeHierarchy(project, DefaultWorkingCopyOwner.PRIMARY, monitor);
+//  }
+  /**
+   * @see IType#newTypeHierarchy(IJavaProject, WorkingCopyOwner, IProgressMonitor)
+   */
+//  public ITypeHierarchy newTypeHierarchy(IJavaProject project, WorkingCopyOwner owner, IProgressMonitor monitor) throws JavaModelException {
+//     if (project == null) {
+//             throw new IllegalArgumentException(Util.bind("hierarchy.nullProject")); //$NON-NLS-1$
+//     }
+//     ICompilationUnit[] workingCopies = JavaModelManager.getJavaModelManager().getWorkingCopies(owner, true/*add primary working copies*/);
+//     ICompilationUnit[] projectWCs = null;
+//     if (workingCopies != null) {
+//             int length = workingCopies.length;
+//             projectWCs = new ICompilationUnit[length];
+//             int index = 0;
+//             for (int i = 0; i < length; i++) {
+//                     ICompilationUnit wc = workingCopies[i];
+//                     if (project.equals(wc.getJavaProject())) {
+//                             projectWCs[index++] = wc;
+//                     }
+//             }
+//             if (index != length) {
+//                     System.arraycopy(projectWCs, 0, projectWCs = new ICompilationUnit[index], 0, index);
+//             }
+//     }
+//     CreateTypeHierarchyOperation op= new CreateTypeHierarchyOperation(
+//             this, 
+//             projectWCs,
+//             project, 
+//             true);
+//     op.runOperation(monitor);
+//     return op.getResult();
+//  }
   /**
    * @see IType
    */
-  //public ITypeHierarchy newTypeHierarchy(IJavaProject project, IProgressMonitor monitor) throws JavaModelException {
-  //   if (project == null) {
-  //           throw new IllegalArgumentException(ProjectPrefUtil.bind("hierarchy.nullProject")); //$NON-NLS-1$
-  //   }
-  //   
-  //   CreateTypeHierarchyOperation op= new CreateTypeHierarchyOperation(
-  //           this,
-  //           (IWorkingCopy[])null, // no working copies
-  //           project,
-  //           true);
-  //   runOperation(op, monitor);
-  //   return op.getResult();
-  //}
+//  public ITypeHierarchy newTypeHierarchy(IProgressMonitor monitor) throws JavaModelException {
+//     CreateTypeHierarchyOperation op= new CreateTypeHierarchyOperation(this, null, SearchEngine.createWorkspaceScope(), true);
+//     op.runOperation(monitor);
+//     return op.getResult();
+//  }
+  /*
+   * @see IType#newTypeHierarchy(ICompilationUnit[], IProgressMonitor)
+   */
+//  public ITypeHierarchy newTypeHierarchy(
+//     ICompilationUnit[] workingCopies,
+//     IProgressMonitor monitor)
+//     throws JavaModelException {
+//             
+//     CreateTypeHierarchyOperation op= new CreateTypeHierarchyOperation(this, workingCopies, SearchEngine.createWorkspaceScope(), true);
+//     op.runOperation(monitor);
+//     return op.getResult();
+//  }
   /**
-   * See ISourceType.resolveType(...)
-   */
+   * @see IType#newTypeHierarchy(IWorkingCopy[], IProgressMonitor)
+   * @deprecated
+   */
+  public ITypeHierarchy newTypeHierarchy(
+       IWorkingCopy[] workingCopies,
+       IProgressMonitor monitor)
+       throws JavaModelException {
+               
+       ICompilationUnit[] copies;
+       if (workingCopies == null) {
+               copies = null;
+       } else {
+               int length = workingCopies.length;
+               System.arraycopy(workingCopies, 0, copies = new ICompilationUnit[length], 0, length);
+       }
+       return newTypeHierarchy(copies, monitor);
+  }
+  /**
+   * @see IType#newTypeHierarchy(WorkingCopyOwner, IProgressMonitor)
+   */
+//  public ITypeHierarchy newTypeHierarchy(
+//     WorkingCopyOwner owner,
+//     IProgressMonitor monitor)
+//     throws JavaModelException {
+//             
+//     ICompilationUnit[] workingCopies = JavaModelManager.getJavaModelManager().getWorkingCopies(owner, true/*add primary working copies*/);
+//     CreateTypeHierarchyOperation op= new CreateTypeHierarchyOperation(this, workingCopies, SearchEngine.createWorkspaceScope(), true);
+//     op.runOperation(monitor);
+//     return op.getResult();  
+//  }
 
   // public String[][] resolveType(String typeName) throws JavaModelException {
   //   ISourceType info = (ISourceType) this.getElementInfo();
diff --git a/net.sourceforge.phpeclipse/src/net/sourceforge/phpdt/internal/core/TypeVector.java b/net.sourceforge.phpeclipse/src/net/sourceforge/phpdt/internal/core/TypeVector.java
new file mode 100644 (file)
index 0000000..39ccea4
--- /dev/null
@@ -0,0 +1,113 @@
+/*******************************************************************************
+ * Copyright (c) 2000, 2004 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials 
+ * are made available under the terms of the Common Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/cpl-v10.html
+ * 
+ * Contributors:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+package net.sourceforge.phpdt.internal.core;
+
+import net.sourceforge.phpdt.core.IType;
+
+public final class TypeVector {
+       static int INITIAL_SIZE = 10;
+       
+       public int size;
+       int maxSize;
+       IType[] elements;
+       
+       public final static IType[] NoElements = new IType[0];
+       
+public TypeVector() {
+       maxSize = INITIAL_SIZE;
+       size = 0;
+       elements = new IType[maxSize];
+}
+public TypeVector(IType[] types) {
+       this.size = types.length; 
+       this.maxSize = this.size + 1; // when an element is added, it assumes that the length is > 0
+       elements = new IType[this.maxSize];
+       System.arraycopy(types, 0, elements, 0, this.size);     
+}
+public TypeVector(IType type) {
+       this.maxSize = INITIAL_SIZE;
+       this.size = 1;
+       elements = new IType[this.maxSize];
+       elements[0] = type;
+}
+public void add(IType newElement) {
+       if (size == maxSize)    // knows that size starts <= maxSize
+               System.arraycopy(elements, 0, (elements = new IType[maxSize *= 2]), 0, size);
+       elements[size++] = newElement;
+}
+public void addAll(IType[] newElements) {
+       if (size + newElements.length >= maxSize) {
+               maxSize = size + newElements.length;    // assume no more elements will be added
+               System.arraycopy(elements, 0, (elements = new IType[maxSize]), 0, size);
+       }
+       System.arraycopy(newElements, 0, elements, size, newElements.length);
+       size += newElements.length;
+}
+public boolean contains(IType element) {
+       for (int i = size; --i >= 0;)
+               if (element.equals(elements[i]))
+                       return true;
+       return false;
+}
+public TypeVector copy() {
+       TypeVector clone = new TypeVector();
+       int length = this.elements.length;
+       System.arraycopy(this.elements, 0, clone.elements = new IType[length], 0, length);
+       clone.size = this.size;
+       clone.maxSize = this.maxSize;
+       return clone;
+}
+public IType elementAt(int index) {
+       return elements[index];
+}
+public IType[] elements() {
+       
+       // do not resize to 0 if empty since may add more elements later
+       if (this.size == 0) return NoElements;
+       
+       if (this.size < this.maxSize) {
+               maxSize = size;
+               System.arraycopy(this.elements, 0, (this.elements = new IType[maxSize]), 0, size);
+       }
+       return this.elements;
+}
+public IType find(IType element) {
+       for (int i = size; --i >= 0;)
+               if (element == elements[i])
+                       return elements[i];
+       return null;
+}
+public IType remove(IType element) {
+       // assumes only one occurrence of the element exists
+       for (int i = size; --i >= 0;)
+               if (element == elements[i]) {
+                       // shift the remaining elements down one spot
+                       System.arraycopy(elements, i + 1, elements, i, --size - i);
+                       elements[size] = null;
+                       return element;
+               }
+       return null;
+}
+public void removeAll() {
+       for (int i = size; --i >= 0;)
+               elements[i] = null;
+       size = 0;
+}
+public String toString() {
+       StringBuffer buffer = new StringBuffer("["); //$NON-NLS-1$
+       for (int i = 0; i < size; i++) {
+               buffer.append("\n"); //$NON-NLS-1$
+               buffer.append(elements[i]);
+       }
+       buffer.append("\n]"); //$NON-NLS-1$
+       return buffer.toString();
+}
+}
index 22e9a7e..32a8b41 100644 (file)
@@ -360,8 +360,8 @@ protected void storeProblemsFor(SourceFile sourceFile, IProblem[] problems) thro
 
                // compute a user-friendly location
                IJavaElement element = JavaCore.create(resource);
-               if (element instanceof org.eclipse.jdt.core.ICompilationUnit) { // try to find a finer grain element
-                       org.eclipse.jdt.core.ICompilationUnit unit = (org.eclipse.jdt.core.ICompilationUnit) element;
+               if (element instanceof net.sourceforge.phpdt.core.ICompilationUnit) { // try to find a finer grain element
+                       net.sourceforge.phpdt.core.ICompilationUnit unit = (net.sourceforge.phpdt.core.ICompilationUnit) element;
                        IJavaElement fragment = unit.getElementAt(problem.getSourceStart());
                        if (fragment != null) element = fragment;
                }
index f932e9f..ffdbaf0 100644 (file)
@@ -87,19 +87,20 @@ public class NameEnvironment implements INameEnvironment {
        JavaProject javaProject,
        SimpleLookupTable binaryLocationsPerProject) throws CoreException {
   
+    /* Update cycle marker */
+       IMarker cycleMarker = javaProject.getCycleMarker();
+       if (cycleMarker != null) {
+               int severity = JavaCore.ERROR.equals(javaProject.getOption(JavaCore.CORE_CIRCULAR_CLASSPATH, true))
+                       ? IMarker.SEVERITY_ERROR
+                       : IMarker.SEVERITY_WARNING;
+               if (severity != ((Integer) cycleMarker.getAttribute(IMarker.SEVERITY)).intValue())
+                       cycleMarker.setAttribute(IMarker.SEVERITY, severity);
+       }
+       
        /* Update incomplete classpath marker */
-       IClasspathEntry[] classpathEntries = javaProject.getExpandedClasspath(true, true);
-  
-       /* Update cycle marker */
-       IMarker cycleMarker = javaProject.getCycleMarker();
-       if (cycleMarker != null) {
-               int severity = JavaCore.ERROR.equals(javaProject.getOption(JavaCore.CORE_CIRCULAR_CLASSPATH, true))
-                       ? IMarker.SEVERITY_ERROR
-                       : IMarker.SEVERITY_WARNING;
-               if (severity != ((Integer) cycleMarker.getAttribute(IMarker.SEVERITY)).intValue())
-                       cycleMarker.setAttribute(IMarker.SEVERITY, severity);
-       }
-  
+//     IClasspathEntry[] classpathEntries = javaProject.getExpandedClasspath(true, true);
+       IClasspathEntry[] classpathEntries = javaProject.getExpandedClasspath(true/*ignore unresolved variable*/, false/*don't create markers*/, null/*preferred cp*/, null/*preferred output*/);
+       
        ArrayList sLocations = new ArrayList(classpathEntries.length);
        ArrayList bLocations = new ArrayList(classpathEntries.length);
        nextEntry : for (int i = 0, l = classpathEntries.length; i < l; i++) {
index a0e5300..a1e3280 100644 (file)
@@ -83,7 +83,7 @@ DOMField() {
  *             character following the last comment. If no comments are present,
  *             this array contains two -1's.
  * @param flags - an integer representing the modifiers for this member. The
- *             integer can be analyzed with org.eclipse.jdt.core.Flags
+ *             integer can be analyzed with net.sourceforge.phpdt.core.Flags
  * @param modifierRange - a two element array describing the location of
  *             modifiers for this member within its source range. The first integer
  *             is the first character of the first modifier for this member, and
@@ -133,7 +133,7 @@ DOMField(char[] document, int[] sourceRange, String name, int[] nameRange, int[]
  *             entire inclusive source range of this node's name within its document,
  *             including any array qualifiers that might follow the name.
  * @param flags - an integer representing the modifiers for this member. The
- *             integer can be analyzed with org.eclipse.jdt.core.Flags
+ *             integer can be analyzed with net.sourceforge.phpdt.core.Flags
  * @param type - the type of the field, in normalized form, as defined in
  *      Type in Field Declaration (JLS 8.3)
  * @param isVariableDeclarator - true if the field is a seconday variable declarator
index a0d1ad8..d52d796 100644 (file)
@@ -60,7 +60,7 @@ DOMInitializer() {
  *             character following the last comment. If no comments are present,
  *             this array contains two -1's.
  * @param flags - an integer representing the modifiers for this member. The
- *             integer can be analyzed with org.eclipse.jdt.core.Flags
+ *             integer can be analyzed with net.sourceforge.phpdt.core.Flags
  * @param modifierRange - a two element array describing the location of
  *             modifiers for this member within its source range. The first integer
  *             is the first character of the first modifier for this member, and
@@ -90,7 +90,7 @@ DOMInitializer(char[] document, int[] sourceRange, int[] commentRange, int flags
  *             An array of -1's indicates this node's contents do not exist
  *             in the document.
  * @param flags - an integer representing the modifiers for this member. The
- *             integer can be analyzed with org.eclipse.jdt.core.Flags
+ *             integer can be analyzed with net.sourceforge.phpdt.core.Flags
  */
 DOMInitializer(char[] document, int[] sourceRange, int flags) {
        this(document, sourceRange, new int[] {-1, -1}, flags, new int[] {-1, -1}, -1);
index 19bde2e..fe42621 100644 (file)
@@ -27,7 +27,7 @@ abstract class DOMMember extends DOMNode implements IDOMMember {
 
        /**
         * The modifier flags for this member that can be
-        * analyzed with org.eclipse.jdt.core.Flags
+        * analyzed with net.sourceforge.phpdt.core.Flags
         */
        protected int    fFlags= 0;
 
@@ -88,7 +88,7 @@ DOMMember() {
  *             character following the last comment. If no comments are present,
  *             this array contains two -1's.
  * @param flags - an integer representing the modifiers for this member. The
- *             integer can be analyzed with org.eclipse.jdt.core.Flags
+ *             integer can be analyzed with net.sourceforge.phpdt.core.Flags
  * @param modifierRange - a two element array describing the location of
  *             modifiers for this member within its source range. The first integer
  *             is the first character of the first modifier for this member, and
index 3221fdf..bb30eb3 100644 (file)
@@ -140,7 +140,7 @@ DOMMethod() {
  *             character following the last comment. If no comments are present,
  *             this array contains two -1's.
  * @param flags - an integer representing the modifiers for this member. The
- *             integer can be analyzed with org.eclipse.jdt.core.Flags
+ *             integer can be analyzed with net.sourceforge.phpdt.core.Flags
  * @param modifierRange - a two element array describing the location of
  *             modifiers for this member within its source range. The first integer
  *             is the first character of the first modifier for this member, and
@@ -212,7 +212,7 @@ DOMMethod(char[] document, int[] sourceRange, String name, int[] nameRange, int[
  *             including any array qualifiers that might immediately follow the name
  *             or -1's if this node does not have a name.
  * @param flags - an integer representing the modifiers for this member. The
- *             integer can be analyzed with org.eclipse.jdt.core.Flags
+ *             integer can be analyzed with net.sourceforge.phpdt.core.Flags
  * @param isConstructor - true if the method is a contructor, otherwise false
  * @param returnType - the normalized return type of this method
  * @param parameterTypes - an array of parameter types in the method declaration
index 0ec3b3f..710eb59 100644 (file)
@@ -150,7 +150,7 @@ DOMType() {
  *             character following the last comment. If no comments are present,
  *             this array contains two -1's.
  * @param flags - an integer representing the modifiers for this member. The
- *             integer can be analyzed with org.eclipse.jdt.core.Flags
+ *             integer can be analyzed with net.sourceforge.phpdt.core.Flags
  * @param modifierRange - a two element array describing the location of
  *             modifiers for this member within its source range. The first integer
  *             is the first character of the first modifier for this member, and
@@ -221,7 +221,7 @@ DOMType(char[] document, int[] sourceRange, String name, int[] nameRange, int[]
  *             including any array qualifiers that might immediately follow the name
  *             or -1's if this node does not have a name.
  * @param flags - an integer representing the modifiers for this member. The
- *             integer can be analyzed with org.eclipse.jdt.core.Flags
+ *             integer can be analyzed with net.sourceforge.phpdt.core.Flags
  * @param implementsList - an array of names of the interfaces this type implements
  *             or extends, or <code>null</code> if this type does not implement or extend
  *             any interfaces.
index a308317..37414d2 100644 (file)
@@ -10,6 +10,7 @@
  *******************************************************************************/
 package net.sourceforge.phpdt.internal.core.jdom;
 
+import java.util.HashMap;
 import java.util.Map;
 
 import net.sourceforge.phpdt.core.JavaCore;
diff --git a/net.sourceforge.phpeclipse/src/net/sourceforge/phpdt/internal/core/util/ASTNodeFinder.java b/net.sourceforge.phpeclipse/src/net/sourceforge/phpdt/internal/core/util/ASTNodeFinder.java
new file mode 100644 (file)
index 0000000..40f0d2a
--- /dev/null
@@ -0,0 +1,187 @@
+/*******************************************************************************
+ * Copyright (c) 2000, 2004 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials 
+ * are made available under the terms of the Common Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/cpl-v10.html
+ * 
+ * Contributors:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+package net.sourceforge.phpdt.internal.core.util;
+
+import java.util.ArrayList;
+
+import net.sourceforge.phpdt.core.IField;
+import net.sourceforge.phpdt.core.IJavaElement;
+import net.sourceforge.phpdt.core.IMethod;
+import net.sourceforge.phpdt.core.IType;
+import net.sourceforge.phpdt.core.compiler.CharOperation;
+import net.sourceforge.phpdt.internal.compiler.ASTVisitor;
+import net.sourceforge.phpdt.internal.compiler.lookup.BlockScope;
+import net.sourceforge.phpdt.internal.compiler.lookup.ClassScope;
+import net.sourceforge.phpdt.internal.core.SourceType;
+import net.sourceforge.phpeclipse.internal.compiler.ast.ASTNode;
+import net.sourceforge.phpeclipse.internal.compiler.ast.AbstractMethodDeclaration;
+import net.sourceforge.phpeclipse.internal.compiler.ast.Argument;
+import net.sourceforge.phpeclipse.internal.compiler.ast.CompilationUnitDeclaration;
+import net.sourceforge.phpeclipse.internal.compiler.ast.FieldDeclaration;
+import net.sourceforge.phpeclipse.internal.compiler.ast.TypeDeclaration;
+import net.sourceforge.phpeclipse.internal.compiler.ast.TypeReference;
+
+/**
+ * Finds an ASTNode given an IJavaElement in a CompilationUnitDeclaration
+ */
+public class ASTNodeFinder {
+       private CompilationUnitDeclaration unit;
+
+       public ASTNodeFinder(CompilationUnitDeclaration unit) {
+               this.unit = unit;
+       }
+
+       /*
+        * Finds the FieldDeclaration in the given ast corresponding to the given field handle.
+        * Returns null if not found.
+        */
+       public FieldDeclaration findField(IField fieldHandle) {
+               TypeDeclaration typeDecl = findType((IType)fieldHandle.getParent());
+               if (typeDecl == null) return null;
+               FieldDeclaration[] fields = typeDecl.fields;
+               if (fields != null) {
+                       char[] fieldName = fieldHandle.getElementName().toCharArray();
+                       for (int i = 0, length = fields.length; i < length; i++) {
+                               FieldDeclaration field = fields[i];
+                               if (CharOperation.equals(fieldName, field.name)) {
+                                       return field;
+                               }
+                       }
+               }
+               return null;
+       }
+
+       /*
+        * Finds the Initializer in the given ast corresponding to the given initializer handle.
+        * Returns null if not found.
+        */
+//     public Initializer findInitializer(IInitializer initializerHandle) {
+//             TypeDeclaration typeDecl = findType((IType)initializerHandle.getParent());
+//             if (typeDecl == null) return null;
+//             FieldDeclaration[] fields = typeDecl.fields;
+//             if (fields != null) {
+//                     int occurenceCount = ((JavaElement)initializerHandle).occurrenceCount;
+//                     for (int i = 0, length = fields.length; i < length; i++) {
+//                             FieldDeclaration field = fields[i];
+//                             if (field instanceof Initializer && --occurenceCount == 0) {
+//                                     return (Initializer)field;
+//                             }
+//                     }
+//             }
+//             return null;
+//     }
+
+       /*
+        * Finds the AbstractMethodDeclaration in the given ast corresponding to the given method handle.
+        * Returns null if not found.
+        */
+       public AbstractMethodDeclaration findMethod(IMethod methodHandle) {
+               TypeDeclaration typeDecl = findType((IType)methodHandle.getParent());
+               if (typeDecl == null) return null;
+               AbstractMethodDeclaration[] methods = typeDecl.methods;
+               if (methods != null) {
+                       char[] selector = methodHandle.getElementName().toCharArray();
+                       String[] parameterTypeSignatures = methodHandle.getParameterTypes();
+                       int parameterCount = parameterTypeSignatures.length;
+                       nextMethod: for (int i = 0, length = methods.length; i < length; i++) {
+                               AbstractMethodDeclaration method = methods[i];
+                               if (CharOperation.equals(selector, method.selector)) {
+                                       Argument[] args = method.arguments;
+                                       int argsLength = args == null ? 0 : args.length;
+                                       if (argsLength == parameterCount) {
+                                               for (int j = 0; j < parameterCount; j++) {
+                                                       TypeReference type = args[j].type;
+                                                       String signature = Util.typeSignature(type);
+                                                       if (!signature.equals(parameterTypeSignatures[j])) {
+                                                               continue nextMethod;
+                                                       }
+                                               }
+                                               return method;
+                                       }
+                               }
+                       }
+               }
+               return null;
+       }
+
+       /*
+        * Finds the TypeDeclaration in the given ast corresponding to the given type handle.
+        * Returns null if not found.
+        */
+       public TypeDeclaration findType(IType typeHandle) {
+               IJavaElement parent = typeHandle.getParent();
+               final char[] typeName = typeHandle.getElementName().toCharArray();
+//             final int occurenceCount = ((SourceType)typeHandle).occurrenceCount;
+               final boolean findAnonymous = typeName.length == 0;
+               class Visitor extends ASTVisitor {
+                       TypeDeclaration result;
+                       int count = 0;
+                       public boolean visit(TypeDeclaration typeDeclaration, BlockScope scope) {
+                               if (result != null) return false;
+//                             if ((typeDeclaration.bits & ASTNode.IsAnonymousTypeMASK) != 0) {
+//                                     if (findAnonymous && ++count == occurenceCount) {
+//                                             result = typeDeclaration;
+//                                     }
+//                             } else {
+                                       if (!findAnonymous && CharOperation.equals(typeName, typeDeclaration.name)) {
+                                               result = typeDeclaration;
+                                       }
+//                             }
+                               return false; // visit only one level
+                       }
+               }
+               switch (parent.getElementType()) {
+                       case IJavaElement.COMPILATION_UNIT:
+                               ArrayList types = this.unit.types;
+                               if (types != null) {
+                                       for (int i = 0, length = types.size(); i < length; i++) {
+                                               TypeDeclaration type = (TypeDeclaration)types.get(i);//[i];
+                                               if (CharOperation.equals(typeName, type.name)) {
+                                                       return type;
+                                               }
+                                       }
+                               }
+                               break;
+                       case IJavaElement.TYPE:
+                               TypeDeclaration parentDecl = findType((IType)parent);
+                               if (parentDecl == null) return null;
+//                             types = parentDecl.memberTypes;
+//                             if (types != null) {
+//                                     for (int i = 0, length = types.length; i < length; i++) {
+//                                             TypeDeclaration type = types[i];
+//                                             if (CharOperation.equals(typeName, type.name)) {
+//                                                     return type;
+//                                             }
+//                                     }
+//                             }
+                               break;
+                       case IJavaElement.FIELD:
+                               FieldDeclaration fieldDecl = findField((IField)parent);
+                               if (fieldDecl == null) return null;
+                               Visitor visitor = new Visitor();
+                               fieldDecl.traverse(visitor, null);
+                               return visitor.result;
+//                     case IJavaElement.INITIALIZER:
+//                             Initializer initializer = findInitializer((IInitializer)parent);
+//                             if (initializer == null) return null;
+//                             visitor = new Visitor();
+//                             initializer.traverse(visitor, null);
+//                             return visitor.result;
+                       case IJavaElement.METHOD:
+                               AbstractMethodDeclaration methodDecl = findMethod((IMethod)parent);
+                               if (methodDecl == null) return null;
+                               visitor = new Visitor();
+                               methodDecl.traverse(visitor, (ClassScope)null);
+                               return visitor.result;
+               }
+               return null;
+       }
+}
index ae22db0..9133d69 100644 (file)
@@ -84,28 +84,28 @@ public class CommentRecorderParser extends UnitParser {
 //     }
 
 //     /* (non-Javadoc)
-//      * @see org.eclipse.jdt.internal.compiler.parser.Parser#consumeClassHeader()
+//      * @see net.sourceforge.phpdt.internal.compiler.parser.Parser#consumeClassHeader()
 //      */
 //     protected void consumeClassHeader() {
 //             pushOnCommentsStack(0, this.scanner.commentPtr);
 //             super.consumeClassHeader();
 //     }
 //     /* (non-Javadoc)
-//      * @see org.eclipse.jdt.internal.compiler.parser.Parser#consumeEmptyClassMemberDeclaration()
+//      * @see net.sourceforge.phpdt.internal.compiler.parser.Parser#consumeEmptyClassMemberDeclaration()
 //      */
 //     protected void consumeEmptyClassMemberDeclaration() {
 //             pushOnCommentsStack(0, this.scanner.commentPtr);
 //             super.consumeEmptyClassMemberDeclaration();
 //     }
 //     /* (non-Javadoc)
-//      * @see org.eclipse.jdt.internal.compiler.parser.Parser#consumeEmptyTypeDeclaration()
+//      * @see net.sourceforge.phpdt.internal.compiler.parser.Parser#consumeEmptyTypeDeclaration()
 //      */
 //     protected void consumeEmptyTypeDeclaration() {
 //             pushOnCommentsStack(0, this.scanner.commentPtr);
 //             super.consumeEmptyTypeDeclaration();
 //     }
 //     /* (non-Javadoc)
-//      * @see org.eclipse.jdt.internal.compiler.parser.Parser#consumeInterfaceHeader()
+//      * @see net.sourceforge.phpdt.internal.compiler.parser.Parser#consumeInterfaceHeader()
 //      */
 //     protected void consumeInterfaceHeader() {
 //             pushOnCommentsStack(0, this.scanner.commentPtr);
@@ -114,7 +114,7 @@ public class CommentRecorderParser extends UnitParser {
 
        /**
         * Insure that start position is always positive.
-        * @see org.eclipse.jdt.internal.compiler.parser.Parser#containsComment(int, int)
+        * @see net.sourceforge.phpdt.internal.compiler.parser.Parser#containsComment(int, int)
         */
        public boolean containsComment(int sourceStart, int sourceEnd) {
                int iComment = this.scanner.commentPtr;
@@ -133,7 +133,7 @@ public class CommentRecorderParser extends UnitParser {
        }
 
        /* (non-Javadoc)
-        * @see org.eclipse.jdt.internal.compiler.parser.Parser#endParse(int)
+        * @see net.sourceforge.phpdt.internal.compiler.parser.Parser#endParse(int)
         */
        protected CompilationUnitDeclaration endParse(int act) {
                CompilationUnitDeclaration unit = super.endParse(act);
@@ -146,7 +146,7 @@ public class CommentRecorderParser extends UnitParser {
 
        /* (non-Javadoc)
         * Save all source comments currently stored before flushing them.
-        * @see org.eclipse.jdt.internal.compiler.parser.Parser#flushCommentsDefinedPriorTo(int)
+        * @see net.sourceforge.phpdt.internal.compiler.parser.Parser#flushCommentsDefinedPriorTo(int)
         */
        public int flushCommentsDefinedPriorTo(int position) {
 
@@ -204,7 +204,7 @@ public class CommentRecorderParser extends UnitParser {
        }
 
        /* (non-Javadoc)
-        * @see org.eclipse.jdt.internal.compiler.parser.Parser#initialize()
+        * @see net.sourceforge.phpdt.internal.compiler.parser.Parser#initialize()
         */
        public void initialize(boolean phpMode) {
                super.initialize(phpMode);
@@ -213,7 +213,7 @@ public class CommentRecorderParser extends UnitParser {
        
        /* (non-Javadoc)
         * Create and store a specific comment recorder scanner.
-        * @see org.eclipse.jdt.internal.compiler.parser.Parser#initializeScanner()
+        * @see net.sourceforge.phpdt.internal.compiler.parser.Parser#initializeScanner()
         */
        public void initializeScanner() {
                this.scanner = new CommentRecorderScanner(
@@ -257,7 +257,7 @@ public class CommentRecorderParser extends UnitParser {
        }
        /* (non-Javadoc)
         * Save all source comments currently stored before flushing them.
-        * @see org.eclipse.jdt.internal.compiler.parser.Parser#resetModifiers()
+        * @see net.sourceforge.phpdt.internal.compiler.parser.Parser#resetModifiers()
         */
        protected void resetModifiers() {
                pushOnCommentsStack(0, this.scanner.commentPtr);
index ce634b8..6abef12 100644 (file)
@@ -38,7 +38,7 @@ public class CommentRecorderScanner extends Scanner {
        
        /**
         * Set start position negative for line comments.
-        * @see org.eclipse.jdt.internal.compiler.parser.Scanner#recordComment(int)
+        * @see net.sourceforge.phpdt.internal.compiler.parser.Scanner#recordComment(int)
         */
        public void recordComment(int token) {
                super.recordComment(token);
index e1a933a..9bc14b9 100644 (file)
@@ -26,7 +26,7 @@ import java.util.Hashtable;
  * <p>This implementation is NOT thread-safe.  Synchronization wrappers would
  * have to be added to ensure atomic insertions and deletions from the cache.
  *
- * @see org.eclipse.jdt.internal.core.util.ILRUCacheable
+ * @see net.sourceforge.phpdt.internal.core.util.ILRUCacheable
  */
 public class LRUCache implements Cloneable {
 
diff --git a/net.sourceforge.phpeclipse/src/net/sourceforge/phpdt/internal/core/util/MementoTokenizer.java b/net.sourceforge.phpeclipse/src/net/sourceforge/phpdt/internal/core/util/MementoTokenizer.java
new file mode 100644 (file)
index 0000000..92cc164
--- /dev/null
@@ -0,0 +1,112 @@
+/*******************************************************************************
+ * Copyright (c) 2004 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials 
+ * are made available under the terms of the Common Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/cpl-v10.html
+ * 
+ * Contributors:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+package net.sourceforge.phpdt.internal.core.util;
+
+import net.sourceforge.phpdt.core.compiler.CharOperation;
+import net.sourceforge.phpdt.internal.core.JavaElement;
+
+public class MementoTokenizer {
+       private static final String COUNT = Character.toString(JavaElement.JEM_COUNT);
+       private static final String JAVAPROJECT = Character.toString(JavaElement.JEM_JAVAPROJECT);
+       private static final String PACKAGEFRAGMENTROOT = Character.toString(JavaElement.JEM_PACKAGEFRAGMENTROOT);
+       private static final String PACKAGEFRAGMENT = Character.toString(JavaElement.JEM_PACKAGEFRAGMENT);
+       private static final String FIELD = Character.toString(JavaElement.JEM_FIELD);
+       private static final String METHOD = Character.toString(JavaElement.JEM_METHOD);
+       private static final String INITIALIZER = Character.toString(JavaElement.JEM_INITIALIZER);
+       private static final String COMPILATIONUNIT = Character.toString(JavaElement.JEM_COMPILATIONUNIT);
+//     private static final String CLASSFILE = Character.toString(JavaElement.JEM_CLASSFILE);
+       private static final String TYPE = Character.toString(JavaElement.JEM_TYPE);
+       private static final String PACKAGEDECLARATION = Character.toString(JavaElement.JEM_PACKAGEDECLARATION);
+       private static final String IMPORTDECLARATION = Character.toString(JavaElement.JEM_IMPORTDECLARATION);
+       private static final String LOCALVARIABLE = Character.toString(JavaElement.JEM_LOCALVARIABLE);
+
+       private final char[] memento;
+       private final int length;
+       private int index = 0;
+       
+       public MementoTokenizer(String memento) {
+               this.memento = memento.toCharArray();
+               this.length = this.memento.length;
+       }
+       
+       public boolean hasMoreTokens() {
+               return this.index < this.length;
+       }
+       
+       public String nextToken() {
+               int start = this.index;
+               StringBuffer buffer = null;
+               switch (this.memento[this.index++]) {
+                       case JavaElement.JEM_ESCAPE:
+                               buffer = new StringBuffer();
+                               buffer.append(this.memento[this.index]);
+                               start = ++this.index;
+                               break;
+                       case JavaElement.JEM_COUNT:
+                               return COUNT;
+                       case JavaElement.JEM_JAVAPROJECT:
+                               return JAVAPROJECT;
+                       case JavaElement.JEM_PACKAGEFRAGMENTROOT:
+                               return PACKAGEFRAGMENTROOT;
+                       case JavaElement.JEM_PACKAGEFRAGMENT:
+                               return PACKAGEFRAGMENT;
+                       case JavaElement.JEM_FIELD:
+                               return FIELD;
+                       case JavaElement.JEM_METHOD:
+                               return METHOD;
+                       case JavaElement.JEM_INITIALIZER:
+                               return INITIALIZER;
+                       case JavaElement.JEM_COMPILATIONUNIT:
+                               return COMPILATIONUNIT;
+//                     case JavaElement.JEM_CLASSFILE:
+//                             return CLASSFILE;
+                       case JavaElement.JEM_TYPE:
+                               return TYPE;
+                       case JavaElement.JEM_PACKAGEDECLARATION:
+                               return PACKAGEDECLARATION;
+                       case JavaElement.JEM_IMPORTDECLARATION:
+                               return IMPORTDECLARATION;
+                       case JavaElement.JEM_LOCALVARIABLE:
+                               return LOCALVARIABLE;
+               }
+               loop: while (this.index < this.length) {
+                       switch (this.memento[this.index]) {
+                               case JavaElement.JEM_ESCAPE:
+                                       if (buffer == null) buffer = new StringBuffer();
+                                       buffer.append(CharOperation.subarray(this.memento, start, this.index));
+                                       start = ++this.index;
+                                       break;
+                               case JavaElement.JEM_COUNT:
+                               case JavaElement.JEM_JAVAPROJECT:
+                               case JavaElement.JEM_PACKAGEFRAGMENTROOT:
+                               case JavaElement.JEM_PACKAGEFRAGMENT:
+                               case JavaElement.JEM_FIELD:
+                               case JavaElement.JEM_METHOD:
+                               case JavaElement.JEM_INITIALIZER:
+                               case JavaElement.JEM_COMPILATIONUNIT:
+//                             case JavaElement.JEM_CLASSFILE:
+                               case JavaElement.JEM_TYPE:
+                               case JavaElement.JEM_PACKAGEDECLARATION:
+                               case JavaElement.JEM_IMPORTDECLARATION:
+                               case JavaElement.JEM_LOCALVARIABLE:
+                                       break loop;
+                       }
+                       this.index++;
+               }
+               if (buffer != null) {
+                       buffer.append(CharOperation.subarray(this.memento, start, this.index));
+                       return buffer.toString();
+               } else {
+                       return new String(CharOperation.subarray(this.memento, start, this.index));
+               }
+       }
+       
+}
diff --git a/net.sourceforge.phpeclipse/src/net/sourceforge/phpdt/internal/core/util/SimpleDocument.java b/net.sourceforge.phpeclipse/src/net/sourceforge/phpdt/internal/core/util/SimpleDocument.java
new file mode 100644 (file)
index 0000000..bccd2f0
--- /dev/null
@@ -0,0 +1,371 @@
+/*******************************************************************************
+ * Copyright (c) 2000, 2004 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials 
+ * are made available under the terms of the Common Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/cpl-v10.html
+ * 
+ * Contributors:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+package net.sourceforge.phpdt.internal.core.util;
+
+import org.eclipse.jface.text.IDocument;
+import org.eclipse.jface.text.IDocumentListener;
+import org.eclipse.jface.text.IDocumentPartitioner;
+import org.eclipse.jface.text.IDocumentPartitioningListener;
+import org.eclipse.jface.text.IPositionUpdater;
+import org.eclipse.jface.text.IRegion;
+import org.eclipse.jface.text.ITypedRegion;
+import org.eclipse.jface.text.Position;
+
+/**
+ * Minimal implementation of IDocument to apply text edit onto a string.
+ */
+public class SimpleDocument implements IDocument {
+       
+       private StringBuffer buffer;
+
+       
+       public SimpleDocument(String source) {
+               this.buffer = new StringBuffer(source);
+       }
+       
+       /* (non-Javadoc)
+        * @see org.eclipse.jface.text.IDocument#getChar(int)
+        */
+       public char getChar(int offset) {
+               return 0;
+       }
+
+       /* (non-Javadoc)
+        * @see org.eclipse.jface.text.IDocument#getLength()
+        */
+       public int getLength() {
+               return this.buffer.length();
+       }
+
+       /* (non-Javadoc)
+        * @see org.eclipse.jface.text.IDocument#get()
+        */
+       public String get() {
+               return this.buffer.toString();
+       }
+
+       /* (non-Javadoc)
+        * @see org.eclipse.jface.text.IDocument#get(int, int)
+        */
+       public String get(int offset, int length) {
+               return this.buffer.substring(offset, offset + length);
+       }
+
+       /* (non-Javadoc)
+        * @see org.eclipse.jface.text.IDocument#set(java.lang.String)
+        */
+       public void set(String text) {
+               // defining interface method
+       }
+
+       /* (non-Javadoc)
+        * @see org.eclipse.jface.text.IDocument#replace(int, int, java.lang.String)
+        */
+       public void replace(int offset, int length, String text) {
+               
+               this.buffer.replace(offset, offset + length, text);
+       }
+
+       /* (non-Javadoc)
+        * @see org.eclipse.jface.text.IDocument#addDocumentListener(org.eclipse.jface.text.IDocumentListener)
+        */
+       public void addDocumentListener(IDocumentListener listener) {
+               // defining interface method
+       }
+
+       /* (non-Javadoc)
+        * @see org.eclipse.jface.text.IDocument#removeDocumentListener(org.eclipse.jface.text.IDocumentListener)
+        */
+       public void removeDocumentListener(IDocumentListener listener) {
+               // defining interface method
+       }
+
+       /* (non-Javadoc)
+        * @see org.eclipse.jface.text.IDocument#addPrenotifiedDocumentListener(org.eclipse.jface.text.IDocumentListener)
+        */
+       public void addPrenotifiedDocumentListener(IDocumentListener documentAdapter) {
+               // defining interface method
+       }
+
+       /* (non-Javadoc)
+        * @see org.eclipse.jface.text.IDocument#removePrenotifiedDocumentListener(org.eclipse.jface.text.IDocumentListener)
+        */
+       public void removePrenotifiedDocumentListener(IDocumentListener documentAdapter) {
+               // defining interface method
+       }
+
+       /* (non-Javadoc)
+        * @see org.eclipse.jface.text.IDocument#addPositionCategory(java.lang.String)
+        */
+       public void addPositionCategory(String category) {
+               // defining interface method
+       }
+
+       /* (non-Javadoc)
+        * @see org.eclipse.jface.text.IDocument#removePositionCategory(java.lang.String)
+        */
+       public void removePositionCategory(String category) {
+                       // defining interface method
+       }
+
+       /* (non-Javadoc)
+        * @see org.eclipse.jface.text.IDocument#getPositionCategories()
+        */
+       public String[] getPositionCategories() {
+               // defining interface method
+               return null;
+       }
+
+       /* (non-Javadoc)
+        * @see org.eclipse.jface.text.IDocument#containsPositionCategory(java.lang.String)
+        */
+       public boolean containsPositionCategory(String category) {
+               // defining interface method
+               return false;
+       }
+
+       /* (non-Javadoc)
+        * @see org.eclipse.jface.text.IDocument#addPosition(org.eclipse.jface.text.Position)
+        */
+       public void addPosition(Position position) {
+               // defining interface method
+       }
+
+       /* (non-Javadoc)
+        * @see org.eclipse.jface.text.IDocument#removePosition(org.eclipse.jface.text.Position)
+        */
+       public void removePosition(Position position) {
+               // defining interface method
+       }
+
+       /* (non-Javadoc)
+        * @see org.eclipse.jface.text.IDocument#addPosition(java.lang.String, org.eclipse.jface.text.Position)
+        */
+       public void addPosition(String category, Position position) {
+               // defining interface method
+       }
+
+       /* (non-Javadoc)
+        * @see org.eclipse.jface.text.IDocument#removePosition(java.lang.String, org.eclipse.jface.text.Position)
+        */
+       public void removePosition(String category, Position position) {
+               // defining interface method
+       }
+
+       /* (non-Javadoc)
+        * @see org.eclipse.jface.text.IDocument#getPositions(java.lang.String)
+        */
+       public Position[] getPositions(String category) {
+               // defining interface method
+               return null;
+       }
+
+       /* (non-Javadoc)
+        * @see org.eclipse.jface.text.IDocument#containsPosition(java.lang.String, int, int)
+        */
+       public boolean containsPosition(String category, int offset, int length) {
+               // defining interface method
+               return false;
+       }
+
+       /* (non-Javadoc)
+        * @see org.eclipse.jface.text.IDocument#computeIndexInCategory(java.lang.String, int)
+        */
+       public int computeIndexInCategory(String category, int offset) {
+               // defining interface method
+               return 0;
+       }
+
+       /* (non-Javadoc)
+        * @see org.eclipse.jface.text.IDocument#addPositionUpdater(org.eclipse.jface.text.IPositionUpdater)
+        */
+       public void addPositionUpdater(IPositionUpdater updater) {
+               // defining interface method
+       }
+
+       /* (non-Javadoc)
+        * @see org.eclipse.jface.text.IDocument#removePositionUpdater(org.eclipse.jface.text.IPositionUpdater)
+        */
+       public void removePositionUpdater(IPositionUpdater updater) {
+               // defining interface method
+       }
+
+       /* (non-Javadoc)
+        * @see org.eclipse.jface.text.IDocument#insertPositionUpdater(org.eclipse.jface.text.IPositionUpdater, int)
+        */
+       public void insertPositionUpdater(IPositionUpdater updater, int index) {
+               // defining interface method
+       }
+
+       /* (non-Javadoc)
+        * @see org.eclipse.jface.text.IDocument#getPositionUpdaters()
+        */
+       public IPositionUpdater[] getPositionUpdaters() {
+               // defining interface method
+               return null;
+       }
+
+       /* (non-Javadoc)
+        * @see org.eclipse.jface.text.IDocument#getLegalContentTypes()
+        */
+       public String[] getLegalContentTypes() {
+               // defining interface method
+               return null;
+       }
+
+       /* (non-Javadoc)
+        * @see org.eclipse.jface.text.IDocument#getContentType(int)
+        */
+       public String getContentType(int offset) {
+               // defining interface method
+               return null;
+       }
+
+       /* (non-Javadoc)
+        * @see org.eclipse.jface.text.IDocument#getPartition(int)
+        */
+       public ITypedRegion getPartition(int offset) {
+               // defining interface method
+               return null;
+       }
+
+       /* (non-Javadoc)
+        * @see org.eclipse.jface.text.IDocument#computePartitioning(int, int)
+        */
+       public ITypedRegion[] computePartitioning(int offset, int length) {
+               // defining interface method
+               return null;
+       }
+
+       /* (non-Javadoc)
+        * @see org.eclipse.jface.text.IDocument#addDocumentPartitioningListener(org.eclipse.jface.text.IDocumentPartitioningListener)
+        */
+       public void addDocumentPartitioningListener(IDocumentPartitioningListener listener) {
+               // defining interface method
+       }
+
+       /* (non-Javadoc)
+        * @see org.eclipse.jface.text.IDocument#removeDocumentPartitioningListener(org.eclipse.jface.text.IDocumentPartitioningListener)
+        */
+       public void removeDocumentPartitioningListener(IDocumentPartitioningListener listener) {
+               // defining interface method
+       }
+
+       /* (non-Javadoc)
+        * @see org.eclipse.jface.text.IDocument#setDocumentPartitioner(org.eclipse.jface.text.IDocumentPartitioner)
+        */
+       public void setDocumentPartitioner(IDocumentPartitioner partitioner) {
+               // defining interface method
+       }
+
+       /* (non-Javadoc)
+        * @see org.eclipse.jface.text.IDocument#getDocumentPartitioner()
+        */
+       public IDocumentPartitioner getDocumentPartitioner() {
+               // defining interface method
+               return null;
+       }
+
+       /* (non-Javadoc)
+        * @see org.eclipse.jface.text.IDocument#getLineLength(int)
+        */
+       public int getLineLength(int line) {
+               // defining interface method
+               return 0;
+       }
+
+       /* (non-Javadoc)
+        * @see org.eclipse.jface.text.IDocument#getLineOfOffset(int)
+        */
+       public int getLineOfOffset(int offset) {
+               // defining interface method
+               return 0;
+       }
+
+       /* (non-Javadoc)
+        * @see org.eclipse.jface.text.IDocument#getLineOffset(int)
+        */
+       public int getLineOffset(int line) {
+               // defining interface method
+               return 0;
+       }
+
+       /* (non-Javadoc)
+        * @see org.eclipse.jface.text.IDocument#getLineInformation(int)
+        */
+       public IRegion getLineInformation(int line) {
+               // defining interface method
+               return null;
+       }
+
+       /* (non-Javadoc)
+        * @see org.eclipse.jface.text.IDocument#getLineInformationOfOffset(int)
+        */
+       public IRegion getLineInformationOfOffset(int offset) {
+               // defining interface method
+               return null;
+       }
+
+       /* (non-Javadoc)
+        * @see org.eclipse.jface.text.IDocument#getNumberOfLines()
+        */
+       public int getNumberOfLines() {
+               // defining interface method
+               return 0;
+       }
+
+       /* (non-Javadoc)
+        * @see org.eclipse.jface.text.IDocument#getNumberOfLines(int, int)
+        */
+       public int getNumberOfLines(int offset, int length) {
+               // defining interface method
+               return 0;
+       }
+
+       /* (non-Javadoc)
+        * @see org.eclipse.jface.text.IDocument#computeNumberOfLines(java.lang.String)
+        */
+       public int computeNumberOfLines(String text) {
+               // defining interface method
+               return 0;
+       }
+
+       /* (non-Javadoc)
+        * @see org.eclipse.jface.text.IDocument#getLegalLineDelimiters()
+        */
+       public String[] getLegalLineDelimiters() {
+               // defining interface method
+               return null;
+       }
+
+       /* (non-Javadoc)
+        * @see org.eclipse.jface.text.IDocument#getLineDelimiter(int)
+        */
+       public String getLineDelimiter(int line) {
+               // defining interface method
+               return null;
+       }
+
+       /**
+        * @see org.eclipse.jface.text.IDocument#search(int, java.lang.String, boolean, boolean, boolean)
+        * @deprecated
+        */
+       public int search(
+               int startOffset,
+               String findString,
+               boolean forwardSearch,
+               boolean caseSensitive,
+               boolean wholeWord) {
+               // defining interface method
+               return 0;
+       }
+
+}
index 01c61a6..a0819d4 100644 (file)
@@ -97,21 +97,23 @@ public Object put(Object key, Object value) {
        return value;
 }
 
-public void removeKey(Object key) {
+public Object removeKey(Object key) {
        int length = keyTable.length;
        int index = (key.hashCode() & 0x7FFFFFFF) % length;
        Object currentKey;
        while ((currentKey = keyTable[index]) != null) {
                if (currentKey.equals(key)) {
                        elementSize--;
+                       Object oldValue = valueTable[index];
                        keyTable[index] = null;
                        valueTable[index] = null;
                        if (keyTable[index + 1 == length ? 0 : index + 1] != null)
                                rehash(); // only needed if a possible collision existed
-                       return;
+                       return oldValue;
                }
                if (++index == length) index = 0;
        }
+       return null;
 }
 
 public void removeValue(Object valueToRemove) {
diff --git a/net.sourceforge.phpeclipse/src/net/sourceforge/phpdt/internal/core/util/SimpleSet.java b/net.sourceforge.phpeclipse/src/net/sourceforge/phpdt/internal/core/util/SimpleSet.java
new file mode 100644 (file)
index 0000000..3e1544f
--- /dev/null
@@ -0,0 +1,111 @@
+/*******************************************************************************
+ * Copyright (c) 2000, 2004 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials 
+ * are made available under the terms of the Common Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/cpl-v10.html
+ * 
+ * Contributors:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+package net.sourceforge.phpdt.internal.core.util;
+
+/**
+ * A simple lookup table is a non-synchronized Hashtable, whose keys
+ * and values are Objects. It also uses linear probing to resolve collisions
+ * rather than a linked list of hash table entries.
+ */
+public final class SimpleSet implements Cloneable {
+
+// to avoid using Enumerations, walk the individual values skipping nulls
+public Object[] values;
+public int elementSize; // number of elements in the table
+public int threshold;
+
+public SimpleSet() {
+       this(13);
+}
+
+public SimpleSet(int size) {
+       if (size < 3) size = 3;
+       this.elementSize = 0;
+       this.threshold = size + 1; // size is the expected number of elements
+       this.values = new Object[2 * size + 1];
+}
+
+public Object add(Object object) {
+       int length = values.length;
+       int index = (object.hashCode() & 0x7FFFFFFF) % length;
+       Object current;
+       while ((current = values[index]) != null) {
+               if (current.equals(object)) return values[index] = object;
+               if (++index == length) index = 0;
+       }
+       values[index] = object;
+
+       // assumes the threshold is never equal to the size of the table
+       if (++elementSize > threshold) rehash();
+       return object;
+}
+
+public Object clone() throws CloneNotSupportedException {
+       SimpleSet result = (SimpleSet) super.clone();
+       result.elementSize = this.elementSize;
+       result.threshold = this.threshold;
+
+       int length = this.values.length;
+       result.values = new Object[length];
+       System.arraycopy(this.values, 0, result.values, 0, length);
+       return result;
+}
+
+public boolean includes(Object object) {
+       int length = values.length;
+       int index = (object.hashCode() & 0x7FFFFFFF) % length;
+       Object current;
+       while ((current = values[index]) != null) {
+               if (current.equals(object)) return true;
+               if (++index == length) index = 0;
+       }
+       return false;
+}
+
+public Object remove(Object object) {
+       int length = values.length;
+       int index = (object.hashCode() & 0x7FFFFFFF) % length;
+       Object current;
+       while ((current = values[index]) != null) {
+               if (current.equals(object)) {
+                       elementSize--;
+                       Object oldValue = values[index];
+                       values[index] = null;
+                       if (values[index + 1 == length ? 0 : index + 1] != null)
+                               rehash(); // only needed if a possible collision existed
+                       return oldValue;
+               }
+               if (++index == length) index = 0;
+       }
+       return null;
+}
+
+private void rehash() {
+       SimpleSet newSet = new SimpleSet(elementSize * 2); // double the number of expected elements
+       Object current;
+       for (int i = values.length; --i >= 0;)
+               if ((current = values[i]) != null)
+                       newSet.add(current);
+
+       this.values = newSet.values;
+       this.elementSize = newSet.elementSize;
+       this.threshold = newSet.threshold;
+}
+
+public String toString() {
+       String s = ""; //$NON-NLS-1$
+       Object object;
+       for (int i = 0, l = values.length; i < l; i++)
+               if ((object = values[i]) != null)
+                       s += object.toString() + "\n"; //$NON-NLS-1$
+       return s;
+}
+}
diff --git a/net.sourceforge.phpeclipse/src/net/sourceforge/phpdt/internal/core/util/SimpleWordSet.java b/net.sourceforge.phpeclipse/src/net/sourceforge/phpdt/internal/core/util/SimpleWordSet.java
new file mode 100644 (file)
index 0000000..ab69d75
--- /dev/null
@@ -0,0 +1,68 @@
+/*******************************************************************************
+ * Copyright (c) 2000, 2004 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials 
+ * are made available under the terms of the Common Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/cpl-v10.html
+ * 
+ * Contributors:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+package net.sourceforge.phpdt.internal.core.util;
+
+import net.sourceforge.phpdt.core.compiler.CharOperation;
+
+public final class SimpleWordSet {
+
+// to avoid using Enumerations, walk the individual values skipping nulls
+public char[][] words;
+public int elementSize; // number of elements in the table
+public int threshold;
+
+public SimpleWordSet(int size) {
+       this.elementSize = 0;
+       this.threshold = size; // size represents the expected number of elements
+       int extraRoom = (int) (size * 1.5f);
+       if (this.threshold == extraRoom)
+               extraRoom++;
+       this.words = new char[extraRoom][];
+}
+
+public char[] add(char[] word) {
+       int length = this.words.length;
+       int index = CharOperation.hashCode(word) % length;
+       char[] current;
+       while ((current = words[index]) != null) {
+               if (CharOperation.equals(current, word)) return current;
+               if (++index == length) index = 0;
+       }
+       words[index] = word;
+
+       // assumes the threshold is never equal to the size of the table
+       if (++elementSize > threshold) rehash();
+       return word;
+}
+
+public boolean includes(char[] word) {
+       int length = this.words.length;
+       int index = CharOperation.hashCode(word) % length;
+       char[] current;
+       while ((current = words[index]) != null) {
+               if (CharOperation.equals(current, word)) return true;
+               if (++index == length) index = 0;
+       }
+       return false;
+}
+
+private void rehash() {
+       SimpleWordSet newSet = new SimpleWordSet(elementSize * 2); // double the number of expected elements
+       char[] current;
+       for (int i = words.length; --i >= 0;)
+               if ((current = words[i]) != null)
+                       newSet.add(current);
+
+       this.words = newSet.words;
+       this.elementSize = newSet.elementSize;
+       this.threshold = newSet.threshold;
+}
+}
\ No newline at end of file
index d78c6ce..39b4d39 100644 (file)
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2003 IBM Corporation and others.
+ * Copyright (c) 2000, 2004 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials 
  * are made available under the terms of the Common Public License v1.0
  * which accompanies this distribution, and is available at
 package net.sourceforge.phpdt.internal.core.util;
 
 import java.io.BufferedInputStream;
+import java.io.DataInput;
+import java.io.EOFException;
 import java.io.IOException;
 import java.io.InputStream;
+import java.io.OutputStream;
 import java.io.PrintStream;
+import java.io.UTFDataFormatException;
 import java.util.Locale;
 import java.util.MissingResourceException;
 import java.util.ResourceBundle;
@@ -22,1360 +26,1767 @@ import java.util.StringTokenizer;
 import net.sourceforge.phpdt.core.IJavaElement;
 import net.sourceforge.phpdt.core.IJavaModelStatusConstants;
 import net.sourceforge.phpdt.core.IPackageFragment;
-import net.sourceforge.phpdt.core.JavaModelException;
 import net.sourceforge.phpdt.core.JavaCore;
+import net.sourceforge.phpdt.core.JavaModelException;
 import net.sourceforge.phpdt.core.Signature;
 import net.sourceforge.phpdt.core.compiler.CharOperation;
+import net.sourceforge.phpdt.internal.core.Assert;
 import net.sourceforge.phpdt.internal.core.PackageFragmentRoot;
-import net.sourceforge.phpdt.internal.corext.Assert;
 import net.sourceforge.phpdt.internal.ui.util.PHPFileUtil;
+import net.sourceforge.phpeclipse.internal.compiler.ast.TypeReference;
 
 import org.eclipse.core.resources.IFile;
+import org.eclipse.core.resources.IFolder;
 import org.eclipse.core.resources.IResource;
 import org.eclipse.core.runtime.CoreException;
 import org.eclipse.core.runtime.IPath;
 import org.eclipse.core.runtime.IStatus;
 import org.eclipse.core.runtime.Status;
+import org.eclipse.jface.text.BadLocationException;
+import org.eclipse.text.edits.MalformedTreeException;
+import org.eclipse.text.edits.TextEdit;
 
 /**
  * Provides convenient utility methods to other types in this package.
  */
 public class Util {
 
-       private final static char[] DOUBLE_QUOTES = "''".toCharArray(); //$NON-NLS-1$
-       private final static char[] SINGLE_QUOTE = "'".toCharArray(); //$NON-NLS-1$
-       private static final String ARGUMENTS_DELIMITER = "#"; //$NON-NLS-1$
-       private static final String EMPTY_ARGUMENT = "   "; //$NON-NLS-1$
-
-       public interface Comparable {
-               /**
-                * Returns 0 if this and c are equal, >0 if this is greater than c,
-                * or <0 if this is less than c.
-                */
-               int compareTo(Comparable c);
-       }
+  public interface Comparable {
+    /**
+     * Returns 0 if this and c are equal, >0 if this is greater than c, or <0 if this is less than c.
+     */
+    int compareTo(Comparable c);
+  }
 
-       public interface Comparer {
-               /**
-                * Returns 0 if a and b are equal, >0 if a is greater than b,
-                * or <0 if a is less than b.
-                */
-               int compare(Object a, Object b);
-       }
-       
-       public interface Displayable {
-               String displayString(Object o);
-       }
-       
-       public static final String[] fgEmptyStringArray = new String[0];
+  public interface Comparer {
+    /**
+     * Returns 0 if a and b are equal, >0 if a is greater than b, or <0 if a is less than b.
+     */
+    int compare(Object a, Object b);
+  }
 
-       /**
-        * Are we running JDK 1.1?
-        */
-       private static boolean JDK1_1 = false;
-
-       /* Bundle containing messages */
-       protected static ResourceBundle bundle;
-       private final static String bundleName = "net.sourceforge.phpdt.internal.core.util.messages"; //$NON-NLS-1$
-
-//     public final static char[] SUFFIX_class = ".class".toCharArray(); //$NON-NLS-1$
-//     public final static char[] SUFFIX_CLASS = ".CLASS".toCharArray(); //$NON-NLS-1$
-//     public final static char[] SUFFIX_java = ".java".toCharArray(); //$NON-NLS-1$
-//     public final static char[] SUFFIX_JAVA = ".JAVA".toCharArray(); //$NON-NLS-1$
-//     public final static char[] SUFFIX_jar = ".jar".toCharArray(); //$NON-NLS-1$
-//     public final static char[] SUFFIX_JAR = ".JAR".toCharArray(); //$NON-NLS-1$
-//     public final static char[] SUFFIX_zip = ".zip".toCharArray(); //$NON-NLS-1$
-//     public final static char[] SUFFIX_ZIP = ".ZIP".toCharArray(); //$NON-NLS-1$
-
-       static {
-               String ver = System.getProperty("java.version"); //$NON-NLS-1$
-               JDK1_1 = ((ver != null) && ver.startsWith("1.1")); //$NON-NLS-1$
-               relocalize();
-       }       
-       
-       /**
-        * Lookup the message with the given ID in this catalog 
-        */
-       public static String bind(String id) {
-               return bind(id, (String[])null);
-       }
-       
-       /**
-        * Lookup the message with the given ID in this catalog and bind its
-        * substitution locations with the given string values.
-        */
-       public static String bind(String id, String[] bindings) {
-               if (id == null)
-                       return "No message available"; //$NON-NLS-1$
-               String message = null;
-               try {
-                       message = bundle.getString(id);
-               } catch (MissingResourceException e) {
-                       // If we got an exception looking for the message, fail gracefully by just returning
-                       // the id we were looking for.  In most cases this is semi-informative so is not too bad.
-                       return "Missing message: " + id + " in: " + bundleName; //$NON-NLS-2$ //$NON-NLS-1$
-               }
-               // for compatibility with MessageFormat which eliminates double quotes in original message
-               char[] messageWithNoDoubleQuotes =
-               CharOperation.replace(message.toCharArray(), DOUBLE_QUOTES, SINGLE_QUOTE);
-               message = new String(messageWithNoDoubleQuotes);
-       
-               if (bindings == null)
-                       return message;
-       
-               int length = message.length();
-               int start = -1;
-               int end = length;
-               StringBuffer output = new StringBuffer(80);
-               while (true) {
-                       if ((end = message.indexOf('{', start)) > -1) {
-                               output.append(message.substring(start + 1, end));
-                               if ((start = message.indexOf('}', end)) > -1) {
-                                       int index = -1;
-                                       try {
-                                               index = Integer.parseInt(message.substring(end + 1, start));
-                                               output.append(bindings[index]);
-                                       } catch (NumberFormatException nfe) {
-                                               output.append(message.substring(end + 1, start + 1));
-                                       } catch (ArrayIndexOutOfBoundsException e) {
-                                               output.append("{missing " + Integer.toString(index) + "}"); //$NON-NLS-2$ //$NON-NLS-1$
-                                       }
-                               } else {
-                                       output.append(message.substring(end, length));
-                                       break;
-                               }
-                       } else {
-                               output.append(message.substring(start + 1, length));
-                               break;
-                       }
-               }
-               return output.toString();
-       }
+  private static final String ARGUMENTS_DELIMITER = "#"; //$NON-NLS-1$
 
-       /**
-        * Lookup the message with the given ID in this catalog and bind its
-        * substitution locations with the given string.
-        */
-       public static String bind(String id, String binding) {
-               return bind(id, new String[] {binding});
-       }
-       
-       /**
-        * Lookup the message with the given ID in this catalog and bind its
-        * substitution locations with the given strings.
-        */
-       public static String bind(String id, String binding1, String binding2) {
-               return bind(id, new String[] {binding1, binding2});
-       }
+  /* Bundle containing messages */
+  protected static ResourceBundle bundle;
 
-       /**
-        * Checks the type signature in String sig, 
-        * starting at start and ending before end (end is not included).
-        * Returns the index of the character immediately after the signature if valid,
-        * or -1 if not valid.
-        */
-       private static int checkTypeSignature(String sig, int start, int end, boolean allowVoid) {
-               if (start >= end) return -1;
-               int i = start;
-               char c = sig.charAt(i++);
-               int nestingDepth = 0;
-               while (c == '[') {
-                       ++nestingDepth;
-                       if (i >= end) return -1;
-                       c = sig.charAt(i++);
-               }
-               switch (c) {
-                       case 'B':
-                       case 'C': 
-                       case 'D':
-                       case 'F':
-                       case 'I':
-                       case 'J':
-                       case 'S': 
-                       case 'Z':
-                               break;
-                       case 'V':
-                               if (!allowVoid) return -1;
-                               // array of void is not allowed
-                               if (nestingDepth != 0) return -1;
-                               break;
-                       case 'L':
-                               int semicolon = sig.indexOf(';', i);
-                               // Must have at least one character between L and ;
-                               if (semicolon <= i || semicolon >= end) return -1;
-                               i = semicolon + 1;
-                               break;
-                       default:
-                               return -1;
-               }
-               return i;
-       }
-       
-       /**
-        * Combines two hash codes to make a new one.
-        */
-       public static int combineHashCodes(int hashCode1, int hashCode2) {
-               return hashCode1 * 17 + hashCode2;
-       }
-       
-       /**
-        * Compares two byte arrays.  
-        * Returns <0 if a byte in a is less than the corresponding byte in b, or if a is shorter, or if a is null.
-        * Returns >0 if a byte in a is greater than the corresponding byte in b, or if a is longer, or if b is null.
-        * Returns 0 if they are equal or both null.
-        */
-       public static int compare(byte[] a, byte[] b) {
-               if (a == b)
-                       return 0;
-               if (a == null)
-                       return -1;
-               if (b == null)
-                       return 1;
-               int len = Math.min(a.length, b.length);
-               for (int i = 0; i < len; ++i) {
-                       int diff = a[i] - b[i];
-                       if (diff != 0)
-                               return diff;
-               }
-               if (a.length > len)
-                       return 1;
-               if (b.length > len)
-                       return -1;
-               return 0;
-       }
+  private final static String bundleName = "net.sourceforge.phpdt.internal.core.util.messages"; //$NON-NLS-1$
 
-       /**
-        * Compares two char arrays lexicographically. 
-        * The comparison is based on the Unicode value of each character in
-        * the char arrays. 
-        * @return  the value <code>0</code> if a is equal to
-        *          b; a value less than <code>0</code> if a
-        *          is lexicographically less than b; and a
-        *          value greater than <code>0</code> if a is
-        *          lexicographically greater than b.
-        */
-       public static int compare(char[] v1, char[] v2) {
-               int len1 = v1.length;
-               int len2 = v2.length;
-               int n = Math.min(len1, len2);
-               int i = 0;
-               while (n-- != 0) {
-                       if (v1[i] != v2[i]) {
-                               return v1[i] - v2[i];
-                       }
-                       ++i;
-               }
-               return len1 - len2;
-       }
+  private final static char[] DOUBLE_QUOTES = "''".toCharArray(); //$NON-NLS-1$
 
-       /**
-        * Concatenate two strings with a char in between.
-        * @see #concat(String, String)
-        */
-       public static String concat(String s1, char c, String s2) {
-               if (s1 == null) s1 = "null"; //$NON-NLS-1$
-               if (s2 == null) s2 = "null"; //$NON-NLS-1$
-               int l1 = s1.length();
-               int l2 = s2.length();
-               char[] buf = new char[l1 + 1 + l2];
-               s1.getChars(0, l1, buf, 0);
-               buf[l1] = c;
-               s2.getChars(0, l2, buf, l1 + 1);
-               return new String(buf);
-       }
-       
-       /**
-        * Concatenate two strings.
-        * Much faster than using +, which:
-        *              - creates a StringBuffer,
-        *              - which is synchronized,
-        *              - of default size, so the resulting char array is
-        *        often larger than needed.
-        * This implementation creates an extra char array, since the
-        * String constructor copies its argument, but there's no way around this.
-        */
-       public static String concat(String s1, String s2) {
-               if (s1 == null) s1 = "null"; //$NON-NLS-1$
-               if (s2 == null) s2 = "null"; //$NON-NLS-1$
-               int l1 = s1.length();
-               int l2 = s2.length();
-               char[] buf = new char[l1 + l2];
-               s1.getChars(0, l1, buf, 0);
-               s2.getChars(0, l2, buf, l1);
-               return new String(buf);
-       }
+  private static final String EMPTY_ARGUMENT = "   "; //$NON-NLS-1$
 
-       /**
-        * Concatenate three strings.
-        * @see #concat(String, String)
-        */
-       public static String concat(String s1, String s2, String s3) {
-               if (s1 == null) s1 = "null"; //$NON-NLS-1$
-               if (s2 == null) s2 = "null"; //$NON-NLS-1$
-               if (s3 == null) s3 = "null"; //$NON-NLS-1$
-               int l1 = s1.length();
-               int l2 = s2.length();
-               int l3 = s3.length();
-               char[] buf = new char[l1 + l2 + l3];
-               s1.getChars(0, l1, buf, 0);
-               s2.getChars(0, l2, buf, l1);
-               s3.getChars(0, l3, buf, l1 + l2);
-               return new String(buf);
-       }
-       
-       /**
-        * Converts a type signature from the IBinaryType representation to the DC representation.
-        */
-       public static String convertTypeSignature(char[] sig) {
-               return new String(sig).replace('/', '.');
-       }
+  public static final String[] fgEmptyStringArray = new String[0];
 
-       /**
-        * Returns true iff str.toLowerCase().endsWith(end.toLowerCase())
-        * implementation is not creating extra strings.
-        */
-       public final static boolean endsWithIgnoreCase(String str, String end) {
-               
-               int strLength = str == null ? 0 : str.length();
-               int endLength = end == null ? 0 : end.length();
-               
-               // return false if the string is smaller than the end.
-               if(endLength > strLength)
-                       return false;
-                       
-               // return false if any character of the end are
-               // not the same in lower case.
-               for(int i = 1 ; i <= endLength; i++){
-                       if(Character.toLowerCase(end.charAt(endLength - i)) != Character.toLowerCase(str.charAt(strLength - i)))
-                               return false;
-               }
-               
-               return true;
-       }
+  private final static char[] SINGLE_QUOTE = "'".toCharArray(); //$NON-NLS-1$
 
-       /**
-        * Compares two arrays using equals() on the elements.
-        * Either or both arrays may be null.
-        * Returns true if both are null.
-        * Returns false if only one is null.
-        * If both are arrays, returns true iff they have the same length and
-        * all elements are equal.
-        */
-       public static boolean equalArraysOrNull(int[] a, int[] b) {
-               if (a == b)
-                       return true;
-               if (a == null || b == null)
-                       return false;
-               int len = a.length;
-               if (len != b.length)
-                       return false;
-               for (int i = 0; i < len; ++i) {
-                       if (a[i] != b[i])
-                               return false;
-               }
-               return true;
-       }
+  static {
+    relocalize();
+  }
 
-       /**
-        * Compares two arrays using equals() on the elements.
-        * Either or both arrays may be null.
-        * Returns true if both are null.
-        * Returns false if only one is null.
-        * If both are arrays, returns true iff they have the same length and
-        * all elements compare true with equals.
-        */
-       public static boolean equalArraysOrNull(Object[] a, Object[] b) {
-               if (a == b)     return true;
-               if (a == null || b == null) return false;
-
-               int len = a.length;
-               if (len != b.length) return false;
-               for (int i = 0; i < len; ++i) {
-                       if (a[i] == null) {
-                               if (b[i] != null) return false;
-                       } else {
-                               if (!a[i].equals(b[i])) return false;
-                       }
-               }
-               return true;
-       }
-       
-       /**
-        * Compares two String arrays using equals() on the elements.
-        * The arrays are first sorted.
-        * Either or both arrays may be null.
-        * Returns true if both are null.
-        * Returns false if only one is null.
-        * If both are arrays, returns true iff they have the same length and
-        * iff, after sorting both arrays, all elements compare true with equals.
-        * The original arrays are left untouched.
-        */
-       public static boolean equalArraysOrNullSortFirst(String[] a, String[] b) {
-               if (a == b)     return true;
-               if (a == null || b == null) return false;
-               int len = a.length;
-               if (len != b.length) return false;
-               if (len >= 2) {  // only need to sort if more than two items
-                       a = sortCopy(a);
-                       b = sortCopy(b);
-               }
-               for (int i = 0; i < len; ++i) {
-                       if (!a[i].equals(b[i])) return false;
-               }
-               return true;
-       }
-       
-       /**
-        * Compares two arrays using equals() on the elements.
-        * The arrays are first sorted.
-        * Either or both arrays may be null.
-        * Returns true if both are null.
-        * Returns false if only one is null.
-        * If both are arrays, returns true iff they have the same length and
-        * iff, after sorting both arrays, all elements compare true with equals.
-        * The original arrays are left untouched.
-        */
-       public static boolean equalArraysOrNullSortFirst(Comparable[] a, Comparable[] b) {
-               if (a == b)     return true;
-               if (a == null || b == null) return false;
-               int len = a.length;
-               if (len != b.length) return false;
-               if (len >= 2) {  // only need to sort if more than two items
-                       a = sortCopy(a);
-                       b = sortCopy(b);
-               }
-               for (int i = 0; i < len; ++i) {
-                       if (!a[i].equals(b[i])) return false;
-               }
-               return true;
-       }
-       
-       /**
-        * Compares two objects using equals().
-        * Either or both array may be null.
-        * Returns true if both are null.
-        * Returns false if only one is null.
-        * Otherwise, return the result of comparing with equals().
-        */
-       public static boolean equalOrNull(Object a, Object b) {
-               if (a == b) {
-                       return true;
-               }
-               if (a == null || b == null) {
-                       return false;
-               }
-               return a.equals(b);
-       }
-       
-       /**
-        * Given a qualified name, extract the last component.
-        * If the input is not qualified, the same string is answered.
-        */
-       public static String extractLastName(String qualifiedName) {
-               int i = qualifiedName.lastIndexOf('.');
-               if (i == -1) return qualifiedName;
-               return qualifiedName.substring(i+1);
-       }
-       
-       /**
-        * Extracts the parameter types from a method signature.
-        */
-       public static String[] extractParameterTypes(char[] sig) {
-               int count = getParameterCount(sig);
-               String[] result = new String[count];
-               if (count == 0)
-                       return result;
-               int i = CharOperation.indexOf('(', sig) + 1;
-               count = 0;
-               int len = sig.length;
-               int start = i;
-               for (;;) {
-                       if (i == len)
-                               break;
-                       char c = sig[i];
-                       if (c == ')')
-                               break;
-                       if (c == '[') {
-                               ++i;
-                       } else
-                               if (c == 'L') {
-                                       i = CharOperation.indexOf(';', sig, i + 1) + 1;
-                                       Assert.isTrue(i != 0);
-                                       result[count++] = convertTypeSignature(CharOperation.subarray(sig, start, i));
-                                       start = i;
-                               } else {
-                                       ++i;
-                                       result[count++] = convertTypeSignature(CharOperation.subarray(sig, start, i));
-                                       start = i;
-                               }
-               }
-               return result;
-       }
+  private Util() {
+    // cannot be instantiated
+  }
 
-       /**
-        * Extracts the return type from a method signature.
-        */
-       public static String extractReturnType(String sig) {
-               int i = sig.lastIndexOf(')');
-               Assert.isTrue(i != -1);
-               return sig.substring(i+1);      
-       }
-       
-       /**
-        * Finds the first line separator used by the given text.
-        *
-        * @return </code>"\n"</code> or </code>"\r"</code> or  </code>"\r\n"</code>,
-        *                      or <code>null</code> if none found
-        */
-       public static String findLineSeparator(char[] text) {
-               // find the first line separator
-               int length = text.length;
-               if (length > 0) {
-                       char nextChar = text[0];
-                       for (int i = 0; i < length; i++) {
-                               char currentChar = nextChar;
-                               nextChar = i < length-1 ? text[i+1] : ' ';
-                               switch (currentChar) {
-                                       case '\n': return "\n"; //$NON-NLS-1$
-                                       case '\r': return nextChar == '\n' ? "\r\n" : "\r"; //$NON-NLS-1$ //$NON-NLS-2$
-                               }
-                       }
-               }
-               // not found
-               return null;
-       }
-       
-       /**
-        * Returns the line separator used by the given buffer.
-        * Uses the given text if none found.
-        *
-        * @return </code>"\n"</code> or </code>"\r"</code> or  </code>"\r\n"</code>
-        */
-       private static String getLineSeparator(char[] text, char[] buffer) {
-               // search in this buffer's contents first
-               String lineSeparator = findLineSeparator(buffer);
-               if (lineSeparator == null) {
-                       // search in the given text
-                       lineSeparator = findLineSeparator(text);
-                       if (lineSeparator == null) {
-                               // default to system line separator
-                               return System.getProperty("line.separator");
-                       }
-               }
-               return lineSeparator;
-       }
-               
-       /**
-        * Returns the number of parameter types in a method signature.
-        */
-       public static int getParameterCount(char[] sig) {
-               int i = CharOperation.indexOf('(', sig) + 1;
-               Assert.isTrue(i != 0);
-               int count = 0;
-               int len = sig.length;
-               for (;;) {
-                       if (i == len)
-                               break;
-                       char c = sig[i];
-                       if (c == ')')
-                               break;
-                       if (c == '[') {
-                               ++i;
-                       } else
-                               if (c == 'L') {
-                                       ++count;
-                                       i = CharOperation.indexOf(';', sig, i + 1) + 1;
-                                       Assert.isTrue(i != 0);
-                               } else {
-                                       ++count;
-                                       ++i;
-                               }
-               }
-               return count;
-       }
-       
-       /**
-        * Returns the given file's contents as a byte array.
-        */
-       public static byte[] getResourceContentsAsByteArray(IFile file) throws JavaModelException {
-               InputStream stream= null;
-               try {
-                       stream = new BufferedInputStream(file.getContents(true));
-               } catch (CoreException e) {
-                       throw new JavaModelException(e);
-               }
-               try {
-                       return net.sourceforge.phpdt.internal.compiler.util.Util.getInputStreamAsByteArray(stream, -1);
-               } catch (IOException e) {
-                       throw new JavaModelException(e, IJavaModelStatusConstants.IO_EXCEPTION);
-               } finally {
-                       try {
-                               stream.close();
-                       } catch (IOException e) {
-                       }
-               }
-       }
-       
-       /**
-        * Returns the given file's contents as a character array.
-        */
-       public static char[] getResourceContentsAsCharArray(IFile file) throws JavaModelException {
-               String encoding = JavaCore.create(file.getProject()).getOption(JavaCore.CORE_ENCODING, true);
-               return getResourceContentsAsCharArray(file, encoding);
-       }
+  /**
+   * Lookup the message with the given ID in this catalog
+   */
+  public static String bind(String id) {
+    return bind(id, (String[]) null);
+  }
 
-       public static char[] getResourceContentsAsCharArray(IFile file, String encoding) throws JavaModelException {
-               InputStream stream= null;
-               try {
-                       stream = new BufferedInputStream(file.getContents(true));
-               } catch (CoreException e) {
-                       throw new JavaModelException(e, IJavaModelStatusConstants.ELEMENT_DOES_NOT_EXIST);
-               }
-               try {
-                       return net.sourceforge.phpdt.internal.compiler.util.Util.getInputStreamAsCharArray(stream, -1, encoding);
-               } catch (IOException e) {
-                       throw new JavaModelException(e, IJavaModelStatusConstants.IO_EXCEPTION);
-               } finally {
-                       try {
-                               stream.close();
-                       } catch (IOException e) {
-                       }
-               }
-       }
-       
-       /**
-        * Returns a trimmed version the simples names returned by Signature.
-        */
-       public static String[] getTrimmedSimpleNames(String name) {
-               String[] result = Signature.getSimpleNames(name);
-               if (result == null) return null;
-               for (int i = 0, length = result.length; i < length; i++) {
-                       result[i] = result[i].trim();
-               }
-               return result;
-       }
-       
-       /**
-        * Returns true iff str.toLowerCase().endsWith(".class")
-        * implementation is not creating extra strings.
-        */
-//     public final static boolean isClassFileName(String name) {
-//             int nameLength = name == null ? 0 : name.length();
-//             int suffixLength = SUFFIX_CLASS.length;
-//             if (nameLength < suffixLength) return false;
-//
-//             for (int i = 0, offset = nameLength - suffixLength; i < suffixLength; i++) {
-//                     char c = name.charAt(offset + i);
-//                     if (c != SUFFIX_class[i] && c != SUFFIX_CLASS[i]) return false;
-//             }
-//             return true;            
-//     }
-       
-       /*
-        * Returns whether the given java element is exluded from its root's classpath.
-        */
-       public static final boolean isExcluded(IJavaElement element) {
-               int elementType = element.getElementType();
-       PackageFragmentRoot root = null;
-       IResource resource = null;
-               switch (elementType) {
-//                     case IJavaElement.PACKAGE_FRAGMENT:
-//                             PackageFragmentRoot root = (PackageFragmentRoot)element.getAncestor(IJavaElement.PACKAGE_FRAGMENT_ROOT);
-//                             IResource resource = element.getResource();
-//                             return resource != null && ProjectPrefUtil.isExcluded(resource, root.fullExclusionPatternChars());
-                       case IJavaElement.COMPILATION_UNIT:
-                               root = (PackageFragmentRoot)element.getAncestor(IJavaElement.PACKAGE_FRAGMENT_ROOT);
-                               resource = element.getResource();
-//                             if (resource != null && ProjectPrefUtil.isExcluded(resource, root.fullExclusionPatternChars()))
-//                                     return true;
-                               return isExcluded(element.getParent());
-                       default:
-                               IJavaElement cu = element.getAncestor(IJavaElement.COMPILATION_UNIT);
-                               return cu != null && isExcluded(cu);
-               }
-       }
-       /*
-        * Returns whether the given resource path matches one of the exclusion
-        * patterns.
-        * 
-        * @see IClasspathEntry#getExclusionPatterns
-        */
-       public final static boolean isExcluded(IPath resourcePath, char[][] exclusionPatterns) {
-               if (exclusionPatterns == null) return false;
-               char[] path = resourcePath.toString().toCharArray();
-               for (int i = 0, length = exclusionPatterns.length; i < length; i++)
-                       if (CharOperation.pathMatch(exclusionPatterns[i], path, true, '/'))
-                               return true;
-               return false;
-       }       
-       
-       /*
-        * Returns whether the given resource matches one of the exclusion patterns.
-        * 
-        * @see IClasspathEntry#getExclusionPatterns
-        */
-       public final static boolean isExcluded(IResource resource, char[][] exclusionPatterns) {
-               IPath path = resource.getFullPath();
-               // ensure that folders are only excluded if all of their children are excluded
-               if (resource.getType() == IResource.FOLDER)
-                       path = path.append("*"); //$NON-NLS-1$
-               return isExcluded(path, exclusionPatterns);
-       }
+  /**
+   * Lookup the message with the given ID in this catalog and bind its substitution locations with the given string.
+   */
+  public static String bind(String id, String binding) {
+    return bind(id, new String[] { binding });
+  }
 
-       /**
-        * Returns true iff str.toLowerCase().endsWith(".jar" or ".zip")
-        * implementation is not creating extra strings.
-        */
-//     public final static boolean isArchiveFileName(String name) {
-//             int nameLength = name == null ? 0 : name.length();
-//             int suffixLength = SUFFIX_JAR.length;
-//             if (nameLength < suffixLength) return false;
-//
-//             int i, offset;
-//             for ( i = 0, offset = nameLength - suffixLength; i < suffixLength; i++) {
-//                     char c = name.charAt(offset + i);
-//                     if (c != SUFFIX_jar[i] && c != SUFFIX_JAR[i]) break;
-//             }
-//             if (i == suffixLength) return true;             
-//             for ( i = 0, offset = nameLength - suffixLength; i < suffixLength; i++) {
-//                     char c = name.charAt(offset + i);
-//                     if (c != SUFFIX_zip[i] && c != SUFFIX_ZIP[i]) return false;
-//             }
-//             return true;
-//     }
-       
-       /**
-        * Validate the given compilation unit name.
-        * A compilation unit name must obey the following rules:
-        * <ul>
-        * <li> it must not be null
-        * <li> it must include the <code>".java"</code> suffix
-        * <li> its prefix must be a valid identifier
-        * </ul>
-        * </p>
-        * @param name the name of a compilation unit
-        * @return a status object with code <code>IStatus.OK</code> if
-        *              the given name is valid as a compilation unit name, otherwise a status 
-        *              object indicating what is wrong with the name
-        */
-       public static boolean isValidCompilationUnitName(String name) {
-               return PHPFileUtil.isPHPFileName(name);
-//             return JavaConventions.validateCompilationUnitName(name).getSeverity() != IStatus.ERROR;
-       }
+  /**
+   * Lookup the message with the given ID in this catalog and bind its substitution locations with the given strings.
+   */
+  public static String bind(String id, String binding1, String binding2) {
+    return bind(id, new String[] { binding1, binding2 });
+  }
 
-       /**
-        * Validate the given .class file name.
-        * A .class file name must obey the following rules:
-        * <ul>
-        * <li> it must not be null
-        * <li> it must include the <code>".class"</code> suffix
-        * <li> its prefix must be a valid identifier
-        * </ul>
-        * </p>
-        * @param name the name of a .class file
-        * @return a status object with code <code>IStatus.OK</code> if
-        *              the given name is valid as a .class file name, otherwise a status 
-        *              object indicating what is wrong with the name
-        */
-//     public static boolean isValidClassFileName(String name) {
-//             return JavaConventions.validateClassFileName(name).getSeverity() != IStatus.ERROR;
-//     }
+  /**
+   * Lookup the message with the given ID in this catalog and bind its substitution locations with the given string values.
+   */
+  public static String bind(String id, String[] bindings) {
+    if (id == null)
+      return "No message available"; //$NON-NLS-1$
+    String message = null;
+    try {
+      message = bundle.getString(id);
+    } catch (MissingResourceException e) {
+      // If we got an exception looking for the message, fail gracefully by just returning
+      // the id we were looking for. In most cases this is semi-informative so is not too bad.
+      return "Missing message: " + id + " in: " + bundleName; //$NON-NLS-2$ //$NON-NLS-1$
+    }
+    // for compatibility with MessageFormat which eliminates double quotes in original message
+    char[] messageWithNoDoubleQuotes = CharOperation.replace(message.toCharArray(), DOUBLE_QUOTES, SINGLE_QUOTE);
 
-       /**
-        * Returns true if the given method signature is valid,
-        * false if it is not.
-        */
-       public static boolean isValidMethodSignature(String sig) {
-               int len = sig.length();
-               if (len == 0) return false;
-               int i = 0;
-               char c = sig.charAt(i++);
-               if (c != '(') return false;
-               if (i >= len) return false;
-               while (sig.charAt(i) != ')') {
-                       // Void is not allowed as a parameter type.
-                       i = checkTypeSignature(sig, i, len, false);
-                       if (i == -1) return false;
-                       if (i >= len) return false;
-               }
-               ++i;
-               i = checkTypeSignature(sig, i, len, true);
-               return i == len;
-       }
-       
-       /**
-        * Returns true if the given type signature is valid,
-        * false if it is not.
-        */
-       public static boolean isValidTypeSignature(String sig, boolean allowVoid) {
-               int len = sig.length();
-               return checkTypeSignature(sig, 0, len, allowVoid) == len;
-       }
-       
-       /**
-        * Returns true if the given folder name is valid for a package,
-        * false if it is not.
-        */
-       public static boolean isValidFolderNameForPackage(String folderName) {
-//             return JavaConventions.validateIdentifier(folderName).getSeverity() != IStatus.ERROR;
-         return true;
-       }       
+    if (bindings == null)
+      return new String(messageWithNoDoubleQuotes);
 
-       /*
-        * Add a log entry
-        */
-//     public static void log(Throwable e, String message) {
-//             Throwable nestedException;
-//             if (e instanceof JavaModelException 
-//                             && (nestedException = ((JavaModelException)e).getException()) != null) {
-//                     e = nestedException;
-//             }
-//             IStatus status= new Status(
-//                     IStatus.ERROR, 
-//                     JavaCore.getPlugin().getDescriptor().getUniqueIdentifier(), 
-//                     IStatus.ERROR, 
-//                     message, 
-//                     e); 
-//             JavaCore.getPlugin().getLog().log(status);
-//     }       
-       /*
-        * Add a log entry
-        */
-       public static void log(Throwable e, String message) {
-               Throwable nestedException;
-               if (e instanceof JavaModelException 
-                               && (nestedException = ((JavaModelException)e).getException()) != null) {
-                       e = nestedException;
-               }
-               IStatus status= new Status(
-                       IStatus.ERROR, 
-                       JavaCore.PLUGIN_ID, 
-                       IStatus.ERROR, 
-                       message, 
-                       e); 
-               JavaCore.getPlugin().getLog().log(status);
-       }       
-       /**
-        * Normalizes the cariage returns in the given text.
-        * They are all changed  to use the given buffer's line separator.
-        */
-       public static char[] normalizeCRs(char[] text, char[] buffer) {
-               CharArrayBuffer result = new CharArrayBuffer();
-               int lineStart = 0;
-               int length = text.length;
-               if (length == 0) return text;
-               String lineSeparator = getLineSeparator(text, buffer);
-               char nextChar = text[0];
-               for (int i = 0; i < length; i++) {
-                       char currentChar = nextChar;
-                       nextChar = i < length-1 ? text[i+1] : ' ';
-                       switch (currentChar) {
-                               case '\n':
-                                       int lineLength = i-lineStart;
-                                       char[] line = new char[lineLength];
-                                       System.arraycopy(text, lineStart, line, 0, lineLength);
-                                       result.append(line);
-                                       result.append(lineSeparator);
-                                       lineStart = i+1;
-                                       break;
-                               case '\r':
-                                       lineLength = i-lineStart;
-                                       if (lineLength >= 0) {
-                                               line = new char[lineLength];
-                                               System.arraycopy(text, lineStart, line, 0, lineLength);
-                                               result.append(line);
-                                               result.append(lineSeparator);
-                                               if (nextChar == '\n') {
-                                                       nextChar = ' ';
-                                                       lineStart = i+2;
-                                               } else {
-                                                       // when line separator are mixed in the same file
-                                                       // \r might not be followed by a \n. If not, we should increment
-                                                       // lineStart by one and not by two.
-                                                       lineStart = i+1;
-                                               }
-                                       } else {
-                                               // when line separator are mixed in the same file
-                                               // we need to prevent NegativeArraySizeException
-                                               lineStart = i+1;
-                                       }
-                                       break;
-                       }
-               }
-               char[] lastLine;
-               if (lineStart > 0) {
-                       int lastLineLength = length-lineStart;
-                       if (lastLineLength > 0) {
-                               lastLine = new char[lastLineLength];
-                               System.arraycopy(text, lineStart, lastLine, 0, lastLineLength);
-                               result.append(lastLine);
-                       }
-                       return result.getContents();
-               } else {
-                       return text;
-               }
-       }
+    int length = messageWithNoDoubleQuotes.length;
+    int start = 0;
+    int end = length;
+    StringBuffer output = null;
+    while (true) {
+      if ((end = CharOperation.indexOf('{', messageWithNoDoubleQuotes, start)) > -1) {
+        if (output == null)
+          output = new StringBuffer(length + bindings.length * 20);
+        output.append(messageWithNoDoubleQuotes, start, end - start);
+        if ((start = CharOperation.indexOf('}', messageWithNoDoubleQuotes, end + 1)) > -1) {
+          int index = -1;
+          String argId = new String(messageWithNoDoubleQuotes, end + 1, start - end - 1);
+          try {
+            index = Integer.parseInt(argId);
+            output.append(bindings[index]);
+          } catch (NumberFormatException nfe) { // could be nested message ID {compiler.name}
+            boolean done = false;
+            if (!id.equals(argId)) {
+              String argMessage = null;
+              try {
+                argMessage = bundle.getString(argId);
+                output.append(argMessage);
+                done = true;
+              } catch (MissingResourceException e) {
+                // unable to bind argument, ignore (will leave argument in)
+              }
+            }
+            if (!done)
+              output.append(messageWithNoDoubleQuotes, end + 1, start - end);
+          } catch (ArrayIndexOutOfBoundsException e) {
+            output.append("{missing " + Integer.toString(index) + "}"); //$NON-NLS-2$ //$NON-NLS-1$
+          }
+          start++;
+        } else {
+          output.append(messageWithNoDoubleQuotes, end, length);
+          break;
+        }
+      } else {
+        if (output == null)
+          return new String(messageWithNoDoubleQuotes);
+        output.append(messageWithNoDoubleQuotes, start, length - start);
+        break;
+      }
+    }
+    return output.toString();
+  }
 
-       /**
-        * Normalizes the cariage returns in the given text.
-        * They are all changed  to use given buffer's line sepatator.
-        */
-       public static String normalizeCRs(String text, String buffer) {
-               return new String(normalizeCRs(text.toCharArray(), buffer.toCharArray()));
-       }
+  /**
+   * Checks the type signature in String sig, starting at start and ending before end (end is not included). Returns the index of
+   * the character immediately after the signature if valid, or -1 if not valid.
+   */
+  private static int checkTypeSignature(String sig, int start, int end, boolean allowVoid) {
+    if (start >= end)
+      return -1;
+    int i = start;
+    char c = sig.charAt(i++);
+    int nestingDepth = 0;
+    while (c == '[') {
+      ++nestingDepth;
+      if (i >= end)
+        return -1;
+      c = sig.charAt(i++);
+    }
+    switch (c) {
+    case 'B':
+    case 'C':
+    case 'D':
+    case 'F':
+    case 'I':
+    case 'J':
+    case 'S':
+    case 'Z':
+      break;
+    case 'V':
+      if (!allowVoid)
+        return -1;
+      // array of void is not allowed
+      if (nestingDepth != 0)
+        return -1;
+      break;
+    case 'L':
+      int semicolon = sig.indexOf(';', i);
+      // Must have at least one character between L and ;
+      if (semicolon <= i || semicolon >= end)
+        return -1;
+      i = semicolon + 1;
+      break;
+    default:
+      return -1;
+    }
+    return i;
+  }
 
-       /**
-        * Sort the objects in the given collection using the given sort order.
-        */
-       private static void quickSort(Object[] sortedCollection, int left, int right, int[] sortOrder) {
-               int original_left = left;
-               int original_right = right;
-               int mid = sortOrder[ (left + right) / 2];
-               do {
-                       while (sortOrder[left] < mid) {
-                               left++;
-                       }
-                       while (mid < sortOrder[right]) {
-                               right--;
-                       }
-                       if (left <= right) {
-                               Object tmp = sortedCollection[left];
-                               sortedCollection[left] = sortedCollection[right];
-                               sortedCollection[right] = tmp;
-                               int tmp2 = sortOrder[left];
-                               sortOrder[left] = sortOrder[right];
-                               sortOrder[right] = tmp2;
-                               left++;
-                               right--;
-                       }
-               } while (left <= right);
-               if (original_left < right) {
-                       quickSort(sortedCollection, original_left, right, sortOrder);
-               }
-               if (left < original_right) {
-                       quickSort(sortedCollection, left, original_right, sortOrder);
-               }
-       }
+  /**
+   * Combines two hash codes to make a new one.
+   */
+  public static int combineHashCodes(int hashCode1, int hashCode2) {
+    return hashCode1 * 17 + hashCode2;
+  }
 
-       /**
-        * Sort the objects in the given collection using the given comparer.
-        */
-       private static void quickSort(Object[] sortedCollection, int left, int right, Comparer comparer) {
-               int original_left = left;
-               int original_right = right;
-               Object mid = sortedCollection[ (left + right) / 2];
-               do {
-                       while (comparer.compare(sortedCollection[left], mid) < 0) {
-                               left++;
-                       }
-                       while (comparer.compare(mid, sortedCollection[right]) < 0) {
-                               right--;
-                       }
-                       if (left <= right) {
-                               Object tmp = sortedCollection[left];
-                               sortedCollection[left] = sortedCollection[right];
-                               sortedCollection[right] = tmp;
-                               left++;
-                               right--;
-                       }
-               } while (left <= right);
-               if (original_left < right) {
-                       quickSort(sortedCollection, original_left, right, comparer);
-               }
-               if (left < original_right) {
-                       quickSort(sortedCollection, left, original_right, comparer);
-               }
-       }
+  /**
+   * Compares two byte arrays. Returns <0 if a byte in a is less than the corresponding byte in b, or if a is shorter, or if a is
+   * null. Returns >0 if a byte in a is greater than the corresponding byte in b, or if a is longer, or if b is null. Returns 0 if
+   * they are equal or both null.
+   */
+  public static int compare(byte[] a, byte[] b) {
+    if (a == b)
+      return 0;
+    if (a == null)
+      return -1;
+    if (b == null)
+      return 1;
+    int len = Math.min(a.length, b.length);
+    for (int i = 0; i < len; ++i) {
+      int diff = a[i] - b[i];
+      if (diff != 0)
+        return diff;
+    }
+    if (a.length > len)
+      return 1;
+    if (b.length > len)
+      return -1;
+    return 0;
+  }
 
-       /**
-        * Sort the strings in the given collection.
-        */
-       private static void quickSort(String[] sortedCollection, int left, int right) {
-               int original_left = left;
-               int original_right = right;
-               String mid = sortedCollection[ (left + right) / 2];
-               do {
-                       while (sortedCollection[left].compareTo(mid) < 0) {
-                               left++;
-                       }
-                       while (mid.compareTo(sortedCollection[right]) < 0) {
-                               right--;
-                       }
-                       if (left <= right) {
-                               String tmp = sortedCollection[left];
-                               sortedCollection[left] = sortedCollection[right];
-                               sortedCollection[right] = tmp;
-                               left++;
-                               right--;
-                       }
-               } while (left <= right);
-               if (original_left < right) {
-                       quickSort(sortedCollection, original_left, right);
-               }
-               if (left < original_right) {
-                       quickSort(sortedCollection, left, original_right);
-               }
-       }
+  /**
+   * Compares two strings lexicographically. The comparison is based on the Unicode value of each character in the strings.
+   * 
+   * @return the value <code>0</code> if the str1 is equal to str2; a value less than <code>0</code> if str1 is
+   *         lexicographically less than str2; and a value greater than <code>0</code> if str1 is lexicographically greater than
+   *         str2.
+   */
+  public static int compare(char[] str1, char[] str2) {
+    int len1 = str1.length;
+    int len2 = str2.length;
+    int n = Math.min(len1, len2);
+    int i = 0;
+    while (n-- != 0) {
+      char c1 = str1[i];
+      char c2 = str2[i++];
+      if (c1 != c2) {
+        return c1 - c2;
+      }
+    }
+    return len1 - len2;
+  }
 
-       /**
-        * Converts the given relative path into a package name.
-        * Returns null if the path is not a valid package name.
-        */
-       public static String packageName(IPath pkgPath) {
-               StringBuffer pkgName = new StringBuffer(IPackageFragment.DEFAULT_PACKAGE_NAME);
-               for (int j = 0, max = pkgPath.segmentCount(); j < max; j++) {
-                       String segment = pkgPath.segment(j);
-                       if (!isValidFolderNameForPackage(segment)) {
-                               return null;
-                       }
-                       pkgName.append(segment);
-                       if (j < pkgPath.segmentCount() - 1) {
-                               pkgName.append("." ); //$NON-NLS-1$
-                       }
-               }
-               return pkgName.toString();
-       }
+  /**
+   * Concatenate two strings with a char in between.
+   * 
+   * @see #concat(String, String)
+   */
+  public static String concat(String s1, char c, String s2) {
+    if (s1 == null)
+      s1 = "null"; //$NON-NLS-1$
+    if (s2 == null)
+      s2 = "null"; //$NON-NLS-1$
+    int l1 = s1.length();
+    int l2 = s2.length();
+    char[] buf = new char[l1 + 1 + l2];
+    s1.getChars(0, l1, buf, 0);
+    buf[l1] = c;
+    s2.getChars(0, l2, buf, l1 + 1);
+    return new String(buf);
+  }
 
-       /**
-        * Sort the comparable objects in the given collection.
-        */
-       private static void quickSort(Comparable[] sortedCollection, int left, int right) {
-               int original_left = left;
-               int original_right = right;
-               Comparable mid = sortedCollection[ (left + right) / 2];
-               do {
-                       while (sortedCollection[left].compareTo(mid) < 0) {
-                               left++;
-                       }
-                       while (mid.compareTo(sortedCollection[right]) < 0) {
-                               right--;
-                       }
-                       if (left <= right) {
-                               Comparable tmp = sortedCollection[left];
-                               sortedCollection[left] = sortedCollection[right];
-                               sortedCollection[right] = tmp;
-                               left++;
-                               right--;
-                       }
-               } while (left <= right);
-               if (original_left < right) {
-                       quickSort(sortedCollection, original_left, right);
-               }
-               if (left < original_right) {
-                       quickSort(sortedCollection, left, original_right);
-               }
-       }
+  /**
+   * Concatenate two strings. Much faster than using +, which: - creates a StringBuffer, - which is synchronized, - of default size,
+   * so the resulting char array is often larger than needed. This implementation creates an extra char array, since the String
+   * constructor copies its argument, but there's no way around this.
+   */
+  public static String concat(String s1, String s2) {
+    if (s1 == null)
+      s1 = "null"; //$NON-NLS-1$
+    if (s2 == null)
+      s2 = "null"; //$NON-NLS-1$
+    int l1 = s1.length();
+    int l2 = s2.length();
+    char[] buf = new char[l1 + l2];
+    s1.getChars(0, l1, buf, 0);
+    s2.getChars(0, l2, buf, l1);
+    return new String(buf);
+  }
 
-       /**
-        * Sort the strings in the given collection in reverse alphabetical order.
-        */
-       private static void quickSortReverse(String[] sortedCollection, int left, int right) {
-               int original_left = left;
-               int original_right = right;
-               String mid = sortedCollection[ (left + right) / 2];
-               do {
-                       while (sortedCollection[left].compareTo(mid) > 0) {
-                               left++;
-                       }
-                       while (mid.compareTo(sortedCollection[right]) > 0) {
-                               right--;
-                       }
-                       if (left <= right) {
-                               String tmp = sortedCollection[left];
-                               sortedCollection[left] = sortedCollection[right];
-                               sortedCollection[right] = tmp;
-                               left++;
-                               right--;
-                       }
-               } while (left <= right);
-               if (original_left < right) {
-                       quickSortReverse(sortedCollection, original_left, right);
-               }
-               if (left < original_right) {
-                       quickSortReverse(sortedCollection, left, original_right);
-               }
-       }
+  /**
+   * Concatenate three strings.
+   * 
+   * @see #concat(String, String)
+   */
+  public static String concat(String s1, String s2, String s3) {
+    if (s1 == null)
+      s1 = "null"; //$NON-NLS-1$
+    if (s2 == null)
+      s2 = "null"; //$NON-NLS-1$
+    if (s3 == null)
+      s3 = "null"; //$NON-NLS-1$
+    int l1 = s1.length();
+    int l2 = s2.length();
+    int l3 = s3.length();
+    char[] buf = new char[l1 + l2 + l3];
+    s1.getChars(0, l1, buf, 0);
+    s2.getChars(0, l2, buf, l1);
+    s3.getChars(0, l3, buf, l1 + l2);
+    return new String(buf);
+  }
 
-       /**
-        * Sorts an array of objects in place, using the sort order given for each item.
-        */
-       public static void sort(Object[] objects, int[] sortOrder) {
-               if (objects.length > 1)
-                       quickSort(objects, 0, objects.length - 1, sortOrder);
-       }
+  /**
+   * Converts a type signature from the IBinaryType representation to the DC representation.
+   */
+  public static String convertTypeSignature(char[] sig) {
+    return new String(sig).replace('/', '.');
+  }
 
-       /**
-        * Sorts an array of objects in place.
-        * The given comparer compares pairs of items.
-        */
-       public static void sort(Object[] objects, Comparer comparer) {
-               if (objects.length > 1)
-                       quickSort(objects, 0, objects.length - 1, comparer);
-       }
+  /**
+   * Apply the given edit on the given string and return the updated string. Return the given string if anything wrong happen while
+   * applying the edit.
+   * 
+   * @param original
+   *          the given string
+   * @param edit
+   *          the given edit
+   * 
+   * @return the updated string
+   */
+  public final static String editedString(String original, TextEdit edit) {
+    if (edit == null) {
+      return original;
+    }
+    SimpleDocument document = new SimpleDocument(original);
+    try {
+      edit.apply(document, TextEdit.NONE);
+      return document.get();
+    } catch (MalformedTreeException e) {
+      e.printStackTrace();
+    } catch (BadLocationException e) {
+      e.printStackTrace();
+    }
+    return original;
+  }
 
-       /**
-        * Sorts an array of strings in place using quicksort.
-        */
-       public static void sort(String[] strings) {
-               if (strings.length > 1)
-                       quickSort(strings, 0, strings.length - 1);
-       }
+  /**
+   * Returns true iff str.toLowerCase().endsWith(end.toLowerCase()) implementation is not creating extra strings.
+   */
+  public final static boolean endsWithIgnoreCase(String str, String end) {
 
-       /**
-        * Sorts an array of Comparable objects in place.
-        */
-       public static void sort(Comparable[] objects) {
-               if (objects.length > 1)
-                       quickSort(objects, 0, objects.length - 1);
-       }
+    int strLength = str == null ? 0 : str.length();
+    int endLength = end == null ? 0 : end.length();
 
-       /**
-        * Sorts an array of Strings, returning a new array
-        * with the sorted items.  The original array is left untouched.
-        */
-       public static Object[] sortCopy(Object[] objects, Comparer comparer) {
-               int len = objects.length;
-               Object[] copy = new Object[len];
-               System.arraycopy(objects, 0, copy, 0, len);
-               sort(copy, comparer);
-               return copy;
-       }
+    // return false if the string is smaller than the end.
+    if (endLength > strLength)
+      return false;
 
-       /**
-        * Sorts an array of Strings, returning a new array
-        * with the sorted items.  The original array is left untouched.
-        */
-       public static String[] sortCopy(String[] objects) {
-               int len = objects.length;
-               String[] copy = new String[len];
-               System.arraycopy(objects, 0, copy, 0, len);
-               sort(copy);
-               return copy;
-       }
+    // return false if any character of the end are
+    // not the same in lower case.
+    for (int i = 1; i <= endLength; i++) {
+      if (Character.toLowerCase(end.charAt(endLength - i)) != Character.toLowerCase(str.charAt(strLength - i)))
+        return false;
+    }
 
-       /**
-        * Sorts an array of Comparable objects, returning a new array
-        * with the sorted items.  The original array is left untouched.
-        */
-       public static Comparable[] sortCopy(Comparable[] objects) {
-               int len = objects.length;
-               Comparable[] copy = new Comparable[len];
-               System.arraycopy(objects, 0, copy, 0, len);
-               sort(copy);
-               return copy;
-       }
+    return true;
+  }
 
-       /**
-        * Sorts an array of strings in place using quicksort
-        * in reverse alphabetical order.
-        */
-       public static void sortReverseOrder(String[] strings) {
-               if (strings.length > 1)
-                       quickSortReverse(strings, 0, strings.length - 1);
-       }
+  /**
+   * Compares two arrays using equals() on the elements. Either or both arrays may be null. Returns true if both are null. Returns
+   * false if only one is null. If both are arrays, returns true iff they have the same length and all elements are equal.
+   */
+  public static boolean equalArraysOrNull(int[] a, int[] b) {
+    if (a == b)
+      return true;
+    if (a == null || b == null)
+      return false;
+    int len = a.length;
+    if (len != b.length)
+      return false;
+    for (int i = 0; i < len; ++i) {
+      if (a[i] != b[i])
+        return false;
+    }
+    return true;
+  }
 
-       /**
-        * Converts a String[] to char[][].
-        */
-       public static char[][] toCharArrays(String[] a) {
-               int len = a.length;
-               char[][] result = new char[len][];
-               for (int i = 0; i < len; ++i) {
-                       result[i] = toChars(a[i]);
-               }
-               return result;
-       }
+  /**
+   * Compares two arrays using equals() on the elements. Either or both arrays may be null. Returns true if both are null. Returns
+   * false if only one is null. If both are arrays, returns true iff they have the same length and all elements compare true with
+   * equals.
+   */
+  public static boolean equalArraysOrNull(Object[] a, Object[] b) {
+    if (a == b)
+      return true;
+    if (a == null || b == null)
+      return false;
 
-       /**
-        * Converts a String to char[].
-        */
-       public static char[] toChars(String s) {
-               int len = s.length();
-               char[] chars = new char[len];
-               s.getChars(0, len, chars, 0);
-               return chars;
-       }
+    int len = a.length;
+    if (len != b.length)
+      return false;
+    for (int i = 0; i < len; ++i) {
+      if (a[i] == null) {
+        if (b[i] != null)
+          return false;
+      } else {
+        if (!a[i].equals(b[i]))
+          return false;
+      }
+    }
+    return true;
+  }
 
-       /**
-        * Converts a String to char[][], where segments are separate by '.'.
-        */
-       public static char[][] toCompoundChars(String s) {
-               int len = s.length();
-               if (len == 0) {
-                       return CharOperation.NO_CHAR_CHAR;
-               }
-               int segCount = 1;
-               for (int off = s.indexOf('.'); off != -1; off = s.indexOf('.', off + 1)) {
-                       ++segCount;
-               }
-               char[][] segs = new char[segCount][];
-               int start = 0;
-               for (int i = 0; i < segCount; ++i) {
-                       int dot = s.indexOf('.', start);
-                       int end = (dot == -1 ? s.length() : dot);
-                       segs[i] = new char[end - start];
-                       s.getChars(start, end, segs[i], 0);
-                       start = end + 1;
-               }
-               return segs;
-       }
+  /**
+   * Compares two arrays using equals() on the elements. The arrays are first sorted. Either or both arrays may be null. Returns
+   * true if both are null. Returns false if only one is null. If both are arrays, returns true iff they have the same length and
+   * iff, after sorting both arrays, all elements compare true with equals. The original arrays are left untouched.
+   */
+  public static boolean equalArraysOrNullSortFirst(Comparable[] a, Comparable[] b) {
+    if (a == b)
+      return true;
+    if (a == null || b == null)
+      return false;
+    int len = a.length;
+    if (len != b.length)
+      return false;
+    if (len >= 2) { // only need to sort if more than two items
+      a = sortCopy(a);
+      b = sortCopy(b);
+    }
+    for (int i = 0; i < len; ++i) {
+      if (!a[i].equals(b[i]))
+        return false;
+    }
+    return true;
+  }
 
-       /**
-        * Converts a char[][] to String, where segments are separated by '.'.
-        */
-       public static String toString(char[][] c) {
-               StringBuffer sb = new StringBuffer();
-               for (int i = 0, max = c.length; i < max; ++i) {
-                       if (i != 0) sb.append('.');
-                       sb.append(c[i]);
-               }
-               return sb.toString();
-       }
+  /**
+   * Compares two String arrays using equals() on the elements. The arrays are first sorted. Either or both arrays may be null.
+   * Returns true if both are null. Returns false if only one is null. If both are arrays, returns true iff they have the same
+   * length and iff, after sorting both arrays, all elements compare true with equals. The original arrays are left untouched.
+   */
+  public static boolean equalArraysOrNullSortFirst(String[] a, String[] b) {
+    if (a == b)
+      return true;
+    if (a == null || b == null)
+      return false;
+    int len = a.length;
+    if (len != b.length)
+      return false;
+    if (len >= 2) { // only need to sort if more than two items
+      a = sortCopy(a);
+      b = sortCopy(b);
+    }
+    for (int i = 0; i < len; ++i) {
+      if (!a[i].equals(b[i]))
+        return false;
+    }
+    return true;
+  }
 
-       /**
-        * Converts a char[][] and a char[] to String, where segments are separated by '.'.
-        */
-       public static String toString(char[][] c, char[] d) {
-               if (c == null) return new String(d);
-               StringBuffer sb = new StringBuffer();
-               for (int i = 0, max = c.length; i < max; ++i) {
-                       sb.append(c[i]);
-                       sb.append('.');
-               }
-               sb.append(d);
-               return sb.toString();
-       }
+  /**
+   * Compares two objects using equals(). Either or both array may be null. Returns true if both are null. Returns false if only one
+   * is null. Otherwise, return the result of comparing with equals().
+   */
+  public static boolean equalOrNull(Object a, Object b) {
+    if (a == b) {
+      return true;
+    }
+    if (a == null || b == null) {
+      return false;
+    }
+    return a.equals(b);
+  }
 
-       /**
-        * Converts a char[] to String.
-        */
-       public static String toString(char[] c) {
-               return new String(c);
-       }
+  /**
+   * Given a qualified name, extract the last component. If the input is not qualified, the same string is answered.
+   */
+  public static String extractLastName(String qualifiedName) {
+    int i = qualifiedName.lastIndexOf('.');
+    if (i == -1)
+      return qualifiedName;
+    return qualifiedName.substring(i + 1);
+  }
 
-       /**
-        * Converts an array of Objects into String.
-        */
-       public static String toString(Object[] objects) {
-               return toString(objects, 
-                       new Displayable(){ 
-                               public String displayString(Object o) { 
-                                       if (o == null) return "null"; //$NON-NLS-1$
-                                       return o.toString(); 
-                               }
-                       });
-       }
+  /**
+   * Extracts the parameter types from a method signature.
+   */
+  public static String[] extractParameterTypes(char[] sig) {
+    int count = getParameterCount(sig);
+    String[] result = new String[count];
+    if (count == 0)
+      return result;
+    int i = CharOperation.indexOf('(', sig) + 1;
+    count = 0;
+    int len = sig.length;
+    int start = i;
+    for (;;) {
+      if (i == len)
+        break;
+      char c = sig[i];
+      if (c == ')')
+        break;
+      if (c == '[') {
+        ++i;
+      } else if (c == 'L') {
+        i = CharOperation.indexOf(';', sig, i + 1) + 1;
+        Assert.isTrue(i != 0);
+        result[count++] = convertTypeSignature(CharOperation.subarray(sig, start, i));
+        start = i;
+      } else {
+        ++i;
+        result[count++] = convertTypeSignature(CharOperation.subarray(sig, start, i));
+        start = i;
+      }
+    }
+    return result;
+  }
 
-       /**
-        * Converts an array of Objects into String.
-        */
-       public static String toString(Object[] objects, Displayable renderer) {
-               if (objects == null) return ""; //$NON-NLS-1$
-               StringBuffer buffer = new StringBuffer(10);
-               for (int i = 0; i < objects.length; i++){
-                       if (i > 0) buffer.append(", "); //$NON-NLS-1$
-                       buffer.append(renderer.displayString(objects[i]));
-               }
-               return buffer.toString();
-       }
-       
-       /**
-        * Asserts that the given method signature is valid.
-        */
-       public static void validateMethodSignature(String sig) {
-               Assert.isTrue(isValidMethodSignature(sig));
-       }
+  /**
+   * Extracts the return type from a method signature.
+   */
+  public static String extractReturnType(String sig) {
+    int i = sig.lastIndexOf(')');
+    Assert.isTrue(i != -1);
+    return sig.substring(i + 1);
+  }
 
-       /**
-        * Asserts that the given type signature is valid.
-        */
-       public static void validateTypeSignature(String sig, boolean allowVoid) {
-               Assert.isTrue(isValidTypeSignature(sig, allowVoid));
-       }
-       public static void verbose(String log) {
-               verbose(log, System.out);
-       }
-       public static synchronized void verbose(String log, PrintStream printStream) {
-               int start = 0;
-               do {
-                       int end = log.indexOf('\n', start);
-                       printStream.print(Thread.currentThread());
-                       printStream.print(" "); //$NON-NLS-1$
-                       printStream.print(log.substring(start, end == -1 ? log.length() : end+1));
-                       start = end+1;
-               } while (start != 0);
-               printStream.println();
-       }
-       /**
-        * Creates a NLS catalog for the given locale.
-        */
-       public static void relocalize() {
-               try {
-                       bundle = ResourceBundle.getBundle(bundleName, Locale.getDefault());
-               } catch(MissingResourceException e) {
-                       System.out.println("Missing resource : " + bundleName.replace('.', '/') + ".properties for locale " + Locale.getDefault()); //$NON-NLS-1$//$NON-NLS-2$
-                       throw e;
-               }
-       }
-       
-       /**
-        * Put all the arguments in one String.
-        */
-       public static String getProblemArgumentsForMarker(String[] arguments){
-               StringBuffer args = new StringBuffer(10);
-               
-               args.append(arguments.length);
-               args.append(':');
-               
-                       
-               for (int j = 0; j < arguments.length; j++) {
-                       if(j != 0)
-                               args.append(ARGUMENTS_DELIMITER);
-                       
-                       if(arguments[j].length() == 0) {
-                               args.append(EMPTY_ARGUMENT);
-                       } else {                        
-                               args.append(arguments[j]);
-                       }
-               }
-               
-               return args.toString();
-       }
-       
-       /**
-        * Separate all the arguments of a String made by getProblemArgumentsForMarker
-        */
-       public static String[] getProblemArgumentsFromMarker(String argumentsString){
-               if (argumentsString == null) return null;
-               int index = argumentsString.indexOf(':');
-               if(index == -1)
-                       return null;
-               
-               int length = argumentsString.length();
-               int numberOfArg;
-               try{
-                       numberOfArg = Integer.parseInt(argumentsString.substring(0 , index));
-               } catch (NumberFormatException e) {
-                       return null;
-               }
-               argumentsString = argumentsString.substring(index + 1, length);
-               
-               String[] args = new String[length];
-               int count = 0;
-               
-               StringTokenizer tokenizer = new StringTokenizer(argumentsString, ARGUMENTS_DELIMITER);
-               while(tokenizer.hasMoreTokens()) {
-                       String argument = tokenizer.nextToken();
-                       if(argument.equals(EMPTY_ARGUMENT))
-                               argument = "";  //$NON-NLS-1$
-                       args[count++] = argument;
+  private static IFile findFirstClassFile(IFolder folder) {
+    try {
+      IResource[] members = folder.members();
+      for (int i = 0, max = members.length; i < max; i++) {
+        IResource member = members[i];
+        if (member.getType() == IResource.FOLDER) {
+          return findFirstClassFile((IFolder) member);
+        } else if (net.sourceforge.phpdt.internal.compiler.util.Util.isClassFileName(member.getName())) {
+          return (IFile) member;
+        }
+      }
+    } catch (CoreException e) {
+      // ignore
+    }
+    return null;
+  }
+
+  /**
+   * Finds the first line separator used by the given text.
+   * 
+   * @return</code> "\n"</code> or</code> "\r"</code> or</code> "\r\n"</code>, or <code>null</code> if none found
+   */
+  public static String findLineSeparator(char[] text) {
+    // find the first line separator
+    int length = text.length;
+    if (length > 0) {
+      char nextChar = text[0];
+      for (int i = 0; i < length; i++) {
+        char currentChar = nextChar;
+        nextChar = i < length - 1 ? text[i + 1] : ' ';
+        switch (currentChar) {
+        case '\n':
+          return "\n"; //$NON-NLS-1$
+        case '\r':
+          return nextChar == '\n' ? "\r\n" : "\r"; //$NON-NLS-1$ //$NON-NLS-2$
+        }
+      }
+    }
+    // not found
+    return null;
+  }
+
+  //   public static IClassFileAttribute getAttribute(IClassFileReader classFileReader, char[] attributeName) {
+  //           IClassFileAttribute[] attributes = classFileReader.getAttributes();
+  //           for (int i = 0, max = attributes.length; i < max; i++) {
+  //                   if (CharOperation.equals(attributes[i].getAttributeName(), attributeName)) {
+  //                           return attributes[i];
+  //                   }
+  //           }
+  //           return null;
+  //   }
+  //   
+  //   public static IClassFileAttribute getAttribute(ICodeAttribute codeAttribute, char[] attributeName) {
+  //           IClassFileAttribute[] attributes = codeAttribute.getAttributes();
+  //           for (int i = 0, max = attributes.length; i < max; i++) {
+  //                   if (CharOperation.equals(attributes[i].getAttributeName(), attributeName)) {
+  //                           return attributes[i];
+  //                   }
+  //           }
+  //           return null;
+  //   }
+
+  //   public static IClassFileAttribute getAttribute(IFieldInfo fieldInfo, char[] attributeName) {
+  //           IClassFileAttribute[] attributes = fieldInfo.getAttributes();
+  //           for (int i = 0, max = attributes.length; i < max; i++) {
+  //                   if (CharOperation.equals(attributes[i].getAttributeName(), attributeName)) {
+  //                           return attributes[i];
+  //                   }
+  //           }
+  //           return null;
+  //   }
+  //
+  //   public static IClassFileAttribute getAttribute(IMethodInfo methodInfo, char[] attributeName) {
+  //           IClassFileAttribute[] attributes = methodInfo.getAttributes();
+  //           for (int i = 0, max = attributes.length; i < max; i++) {
+  //                   if (CharOperation.equals(attributes[i].getAttributeName(), attributeName)) {
+  //                           return attributes[i];
+  //                   }
+  //           }
+  //           return null;
+  //   }
+  /**
+   * Get the jdk level of this root. The value can be:
+   * <ul>
+   * <li>major < <16 + minor : see predefined constants on ClassFileConstants</li>
+   * <li><code>0</null> if the root is a source package fragment root or if a Java model exception occured</li>
+   * </ul>
+   * Returns the jdk level
+   */
+  //   public static long getJdkLevel(Object targetLibrary) {
+  //           try {
+  //                           ClassFileReader reader = null;
+  //                           if (targetLibrary instanceof IFolder) {
+  //                                   IFile classFile = findFirstClassFile((IFolder) targetLibrary); // only internal classfolders are allowed
+  //                                   if (classFile != null) {
+  //                                           byte[] bytes = Util.getResourceContentsAsByteArray(classFile);
+  //                                           IPath location = classFile.getLocation();
+  //                                           reader = new ClassFileReader(bytes, location == null ? null : location.toString().toCharArray());
+  //                                   }
+  //                           } else {
+  //                                   // root is a jar file or a zip file
+  //                                   ZipFile jar = null;
+  //                                   try {
+  //                                           IPath path = null;
+  //                                           if (targetLibrary instanceof IResource) {
+  //                                                   path = ((IResource)targetLibrary).getLocation();
+  //                                           } else if (targetLibrary instanceof File){
+  //                                                   File f = (File) targetLibrary;
+  //                                                   if (!f.isDirectory()) {
+  //                                                           path = new Path(((File)targetLibrary).getPath());
+  //                                                   }
+  //                                           }
+  //                                           if (path != null) {
+  //                                                   jar = JavaModelManager.getJavaModelManager().getZipFile(path);
+  //                                                   for (Enumeration e= jar.entries(); e.hasMoreElements();) {
+  //                                                           ZipEntry member= (ZipEntry) e.nextElement();
+  //                                                           String entryName= member.getName();
+  //                                                           if (net.sourceforge.phpdt.internal.compiler.util.Util.isClassFileName(entryName)) {
+  //                                                                   reader = ClassFileReader.read(jar, entryName);
+  //                                                                   break;
+  //                                                           }
+  //                                                   }
+  //                                           }
+  //                                   } catch (CoreException e) {
+  //                                           // ignore
+  //                                   } finally {
+  //                                           JavaModelManager.getJavaModelManager().closeZipFile(jar);
+  //                                   }
+  //                           }
+  //                           if (reader != null) {
+  //                                   return reader.getVersion();
+  //                           }
+  //           } catch(JavaModelException e) {
+  //                   // ignore
+  //           } catch(ClassFormatException e) {
+  //                   // ignore
+  //           } catch(IOException e) {
+  //                   // ignore
+  //           }
+  //           return 0;
+  //   }
+  /**
+   * Returns the line separator used by the given buffer. Uses the given text if none found.
+   * 
+   * @return</code> "\n"</code> or</code> "\r"</code> or</code> "\r\n"</code>
+   */
+  private static String getLineSeparator(char[] text, char[] buffer) {
+    // search in this buffer's contents first
+    String lineSeparator = findLineSeparator(buffer);
+    if (lineSeparator == null) {
+      // search in the given text
+      lineSeparator = findLineSeparator(text);
+      if (lineSeparator == null) {
+        // default to system line separator
+        return net.sourceforge.phpdt.internal.compiler.util.Util.LINE_SEPARATOR;
+      }
+    }
+    return lineSeparator;
+  }
+
+  /**
+   * Returns the number of parameter types in a method signature.
+   */
+  public static int getParameterCount(char[] sig) {
+    int i = CharOperation.indexOf('(', sig) + 1;
+    Assert.isTrue(i != 0);
+    int count = 0;
+    int len = sig.length;
+    for (;;) {
+      if (i == len)
+        break;
+      char c = sig[i];
+      if (c == ')')
+        break;
+      if (c == '[') {
+        ++i;
+      } else if (c == 'L') {
+        ++count;
+        i = CharOperation.indexOf(';', sig, i + 1) + 1;
+        Assert.isTrue(i != 0);
+      } else {
+        ++count;
+        ++i;
+      }
+    }
+    return count;
+  }
+
+  /**
+   * Put all the arguments in one String.
+   */
+  public static String getProblemArgumentsForMarker(String[] arguments) {
+    StringBuffer args = new StringBuffer(10);
+
+    args.append(arguments.length);
+    args.append(':');
+
+    for (int j = 0; j < arguments.length; j++) {
+      if (j != 0)
+        args.append(ARGUMENTS_DELIMITER);
+
+      if (arguments[j].length() == 0) {
+        args.append(EMPTY_ARGUMENT);
+      } else {
+        args.append(arguments[j]);
+      }
+    }
+
+    return args.toString();
+  }
+
+  /**
+   * Separate all the arguments of a String made by getProblemArgumentsForMarker
+   */
+  public static String[] getProblemArgumentsFromMarker(String argumentsString) {
+    if (argumentsString == null)
+      return null;
+    int index = argumentsString.indexOf(':');
+    if (index == -1)
+      return null;
+
+    int length = argumentsString.length();
+    int numberOfArg;
+    try {
+      numberOfArg = Integer.parseInt(argumentsString.substring(0, index));
+    } catch (NumberFormatException e) {
+      return null;
+    }
+    argumentsString = argumentsString.substring(index + 1, length);
+
+    String[] args = new String[length];
+    int count = 0;
+
+    StringTokenizer tokenizer = new StringTokenizer(argumentsString, ARGUMENTS_DELIMITER);
+    while (tokenizer.hasMoreTokens()) {
+      String argument = tokenizer.nextToken();
+      if (argument.equals(EMPTY_ARGUMENT))
+        argument = ""; //$NON-NLS-1$
+      args[count++] = argument;
+    }
+
+    if (count != numberOfArg)
+      return null;
+
+    System.arraycopy(args, 0, args = new String[count], 0, count);
+    return args;
+  }
+
+  /**
+   * Returns the given file's contents as a byte array.
+   */
+  public static byte[] getResourceContentsAsByteArray(IFile file) throws JavaModelException {
+    InputStream stream = null;
+    try {
+      stream = new BufferedInputStream(file.getContents(true));
+    } catch (CoreException e) {
+      throw new JavaModelException(e);
+    }
+    try {
+      return net.sourceforge.phpdt.internal.compiler.util.Util.getInputStreamAsByteArray(stream, -1);
+    } catch (IOException e) {
+      throw new JavaModelException(e, IJavaModelStatusConstants.IO_EXCEPTION);
+    } finally {
+      try {
+        stream.close();
+      } catch (IOException e) {
+        // ignore
+      }
+    }
+  }
+
+  /**
+   * Returns the given file's contents as a character array.
+   */
+  public static char[] getResourceContentsAsCharArray(IFile file) throws JavaModelException {
+    // Get encoding from file
+    String encoding = null;
+    try {
+      encoding = file.getCharset();
+    } catch (CoreException ce) {
+      // do not use any encoding
+    }
+    return getResourceContentsAsCharArray(file, encoding);
+  }
+
+  public static char[] getResourceContentsAsCharArray(IFile file, String encoding) throws JavaModelException {
+    // Get resource contents
+    InputStream stream = null;
+    try {
+      stream = new BufferedInputStream(file.getContents(true));
+    } catch (CoreException e) {
+      throw new JavaModelException(e, IJavaModelStatusConstants.ELEMENT_DOES_NOT_EXIST);
+    }
+    try {
+      return net.sourceforge.phpdt.internal.compiler.util.Util.getInputStreamAsCharArray(stream, -1, encoding);
+    } catch (IOException e) {
+      throw new JavaModelException(e, IJavaModelStatusConstants.IO_EXCEPTION);
+    } finally {
+      try {
+        stream.close();
+      } catch (IOException e) {
+        // ignore
+      }
+    }
+  }
+
+  /**
+   * Returns a trimmed version the simples names returned by Signature.
+   */
+  public static String[] getTrimmedSimpleNames(String name) {
+    String[] result = Signature.getSimpleNames(name);
+    if (result == null)
+      return null;
+    for (int i = 0, length = result.length; i < length; i++) {
+      result[i] = result[i].trim();
+    }
+    return result;
+  }
+
+  /*
+   * Returns the index of the most specific argument paths which is strictly enclosing the path to check
+   */
+  public static int indexOfEnclosingPath(IPath checkedPath, IPath[] paths, int pathCount) {
+
+    int bestMatch = -1, bestLength = -1;
+    for (int i = 0; i < pathCount; i++) {
+      if (paths[i].equals(checkedPath))
+        continue;
+      if (paths[i].isPrefixOf(checkedPath)) {
+        int currentLength = paths[i].segmentCount();
+        if (currentLength > bestLength) {
+          bestLength = currentLength;
+          bestMatch = i;
+        }
+      }
+    }
+    return bestMatch;
+  }
+
+  /*
+   * Returns the index of the first argument paths which is equal to the path to check
+   */
+  public static int indexOfMatchingPath(IPath checkedPath, IPath[] paths, int pathCount) {
+
+    for (int i = 0; i < pathCount; i++) {
+      if (paths[i].equals(checkedPath))
+        return i;
+    }
+    return -1;
+  }
+
+  /*
+   * Returns the index of the first argument paths which is strictly nested inside the path to check
+   */
+  public static int indexOfNestedPath(IPath checkedPath, IPath[] paths, int pathCount) {
+
+    for (int i = 0; i < pathCount; i++) {
+      if (checkedPath.equals(paths[i]))
+        continue;
+      if (checkedPath.isPrefixOf(paths[i]))
+        return i;
+    }
+    return -1;
+  }
+
+  /*
+   * Returns whether the given java element is exluded from its root's classpath. It doesn't check whether the root itself is on the
+   * classpath or not
+   */
+  public static final boolean isExcluded(IJavaElement element) {
+    int elementType = element.getElementType();
+    PackageFragmentRoot root = null;
+    IResource resource = null;
+    switch (elementType) {
+    case IJavaElement.JAVA_MODEL:
+    case IJavaElement.JAVA_PROJECT:
+    case IJavaElement.PACKAGE_FRAGMENT_ROOT:
+      return false;
+
+    //                 case IJavaElement.PACKAGE_FRAGMENT:
+    //                         PackageFragmentRoot root = (PackageFragmentRoot)element.getAncestor(IJavaElement.PACKAGE_FRAGMENT_ROOT);
+    //                         IResource resource = element.getResource();
+    //                         return resource != null && isExcluded(resource, root.fullInclusionPatternChars(), root.fullExclusionPatternChars());
+
+    case IJavaElement.COMPILATION_UNIT:
+      root = (PackageFragmentRoot) element.getAncestor(IJavaElement.PACKAGE_FRAGMENT_ROOT);
+      resource = element.getResource();
+      //                               if (resource != null && isExcluded(resource, root.fullInclusionPatternChars(), root.fullExclusionPatternChars()))
+      //                                       return true;
+      return isExcluded(element.getParent());
+
+    default:
+      IJavaElement cu = element.getAncestor(IJavaElement.COMPILATION_UNIT);
+      return cu != null && isExcluded(cu);
+    }
+  }
+
+  /*
+   * Returns whether the given resource path matches one of the inclusion/exclusion patterns. NOTE: should not be asked directly
+   * using pkg root pathes
+   * 
+   * @see IClasspathEntry#getInclusionPatterns
+   * @see IClasspathEntry#getExclusionPatterns
+   */
+  public final static boolean isExcluded(IPath resourcePath, char[][] inclusionPatterns, char[][] exclusionPatterns,
+      boolean isFolderPath) {
+    if (inclusionPatterns == null && exclusionPatterns == null)
+      return false;
+    char[] path = resourcePath.toString().toCharArray();
+
+    inclusionCheck: if (inclusionPatterns != null) {
+      for (int i = 0, length = inclusionPatterns.length; i < length; i++) {
+        char[] pattern = inclusionPatterns[i];
+        char[] folderPattern = pattern;
+        if (isFolderPath) {
+          int lastSlash = CharOperation.lastIndexOf('/', pattern);
+          if (lastSlash != -1 && lastSlash != pattern.length - 1) { // trailing slash -> adds '**' for free (see
+                                                                    // http://ant.apache.org/manual/dirtasks.html)
+            int star = CharOperation.indexOf('*', pattern, lastSlash);
+            if ((star == -1 || star >= pattern.length - 1 || pattern[star + 1] != '*')) {
+              folderPattern = CharOperation.subarray(pattern, 0, lastSlash);
+            }
+          }
+        }
+        if (CharOperation.pathMatch(folderPattern, path, true, '/')) {
+          break inclusionCheck;
+        }
+      }
+      return true; // never included
+    }
+    if (isFolderPath) {
+      path = CharOperation.concat(path, new char[] { '*' }, '/');
+    }
+    exclusionCheck: if (exclusionPatterns != null) {
+      for (int i = 0, length = exclusionPatterns.length; i < length; i++) {
+        if (CharOperation.pathMatch(exclusionPatterns[i], path, true, '/')) {
+          return true;
+        }
+      }
+    }
+    return false;
+  }
+
+  public final static boolean isExcluded(IResource resource, char[][] exclusionPatterns) {
+    IPath path = resource.getFullPath();
+    // ensure that folders are only excluded if all of their children are excluded
+    return isExcluded(path, null, exclusionPatterns, resource.getType() == IResource.FOLDER);
+  }
+
+  /*
+   * Returns whether the given resource matches one of the exclusion patterns. NOTE: should not be asked directly using pkg root
+   * pathes
+   * 
+   * @see IClasspathEntry#getExclusionPatterns
+   */
+  public final static boolean isExcluded(IResource resource, char[][] inclusionPatterns, char[][] exclusionPatterns) {
+    IPath path = resource.getFullPath();
+    // ensure that folders are only excluded if all of their children are excluded
+    return isExcluded(path, inclusionPatterns, exclusionPatterns, resource.getType() == IResource.FOLDER);
+  }
+
+  /**
+   * Validate the given .class file name. A .class file name must obey the following rules:
+   * <ul>
+   * <li>it must not be null
+   * <li>it must include the <code>".class"</code> suffix
+   * <li>its prefix must be a valid identifier
+   * </ul>
+   * </p>
+   * 
+   * @param name
+   *          the name of a .class file
+   * @return a status object with code <code>IStatus.OK</code> if the given name is valid as a .class file name, otherwise a
+   *         status object indicating what is wrong with the name
+   */
+  //   public static boolean isValidClassFileName(String name) {
+  //           return JavaConventions.validateClassFileName(name).getSeverity() != IStatus.ERROR;
+  //   }
+  /**
+   * Validate the given compilation unit name. A compilation unit name must obey the following rules:
+   * <ul>
+   * <li>it must not be null
+   * <li>it must include the <code>".java"</code> suffix
+   * <li>its prefix must be a valid identifier
+   * </ul>
+   * </p>
+   * 
+   * @param name
+   *          the name of a compilation unit
+   * @return a status object with code <code>IStatus.OK</code> if the given name is valid as a compilation unit name, otherwise a
+   *         status object indicating what is wrong with the name
+   */
+  public static boolean isValidCompilationUnitName(String name) {
+    return PHPFileUtil.isPHPFileName(name);
+    //         return JavaConventions.validateCompilationUnitName(name).getSeverity() != IStatus.ERROR;
+  }
+
+  /**
+   * Returns true if the given folder name is valid for a package, false if it is not.
+   */
+       public static boolean isValidFolderNameForPackage(String folderName) {
+  //           return JavaConventions.validateIdentifier(folderName).getSeverity() != IStatus.ERROR;
+         return true;
+       }
+  /**
+   * Returns true if the given method signature is valid, false if it is not.
+   */
+  public static boolean isValidMethodSignature(String sig) {
+    int len = sig.length();
+    if (len == 0)
+      return false;
+    int i = 0;
+    char c = sig.charAt(i++);
+    if (c != '(')
+      return false;
+    if (i >= len)
+      return false;
+    while (sig.charAt(i) != ')') {
+      // Void is not allowed as a parameter type.
+      i = checkTypeSignature(sig, i, len, false);
+      if (i == -1)
+        return false;
+      if (i >= len)
+        return false;
+    }
+    ++i;
+    i = checkTypeSignature(sig, i, len, true);
+    return i == len;
+  }
+
+  /**
+   * Returns true if the given type signature is valid, false if it is not.
+   */
+  public static boolean isValidTypeSignature(String sig, boolean allowVoid) {
+    int len = sig.length();
+    return checkTypeSignature(sig, 0, len, allowVoid) == len;
+  }
+
+  /*
+   * Add a log entry
+   */
+  public static void log(Throwable e, String message) {
+    Throwable nestedException;
+    if (e instanceof JavaModelException && (nestedException = ((JavaModelException) e).getException()) != null) {
+      e = nestedException;
+    }
+    IStatus status = new Status(IStatus.ERROR, JavaCore.PLUGIN_ID, IStatus.ERROR, message, e);
+    JavaCore.getPlugin().getLog().log(status);
+  }
+
+  /**
+   * Normalizes the cariage returns in the given text. They are all changed to use the given buffer's line separator.
+   */
+  public static char[] normalizeCRs(char[] text, char[] buffer) {
+    CharArrayBuffer result = new CharArrayBuffer();
+    int lineStart = 0;
+    int length = text.length;
+    if (length == 0)
+      return text;
+    String lineSeparator = getLineSeparator(text, buffer);
+    char nextChar = text[0];
+    for (int i = 0; i < length; i++) {
+      char currentChar = nextChar;
+      nextChar = i < length - 1 ? text[i + 1] : ' ';
+      switch (currentChar) {
+      case '\n':
+        int lineLength = i - lineStart;
+        char[] line = new char[lineLength];
+        System.arraycopy(text, lineStart, line, 0, lineLength);
+        result.append(line);
+        result.append(lineSeparator);
+        lineStart = i + 1;
+        break;
+      case '\r':
+        lineLength = i - lineStart;
+        if (lineLength >= 0) {
+          line = new char[lineLength];
+          System.arraycopy(text, lineStart, line, 0, lineLength);
+          result.append(line);
+          result.append(lineSeparator);
+          if (nextChar == '\n') {
+            nextChar = ' ';
+            lineStart = i + 2;
+          } else {
+            // when line separator are mixed in the same file
+            // \r might not be followed by a \n. If not, we should increment
+            // lineStart by one and not by two.
+            lineStart = i + 1;
+          }
+        } else {
+          // when line separator are mixed in the same file
+          // we need to prevent NegativeArraySizeException
+          lineStart = i + 1;
+        }
+        break;
+      }
+    }
+    char[] lastLine;
+    if (lineStart > 0) {
+      int lastLineLength = length - lineStart;
+      if (lastLineLength > 0) {
+        lastLine = new char[lastLineLength];
+        System.arraycopy(text, lineStart, lastLine, 0, lastLineLength);
+        result.append(lastLine);
+      }
+      return result.getContents();
+    }
+    return text;
+  }
+
+  /**
+   * Normalizes the cariage returns in the given text. They are all changed to use given buffer's line sepatator.
+   */
+  public static String normalizeCRs(String text, String buffer) {
+    return new String(normalizeCRs(text.toCharArray(), buffer.toCharArray()));
+  }
+
+  /**
+   * Converts the given relative path into a package name. Returns null if the path is not a valid package name.
+   */
+  public static String packageName(IPath pkgPath) {
+    StringBuffer pkgName = new StringBuffer(IPackageFragment.DEFAULT_PACKAGE_NAME);
+    for (int j = 0, max = pkgPath.segmentCount(); j < max; j++) {
+      String segment = pkgPath.segment(j);
+      //                       if (!isValidFolderNameForPackage(segment)) {
+      //                               return null;
+      //                       }
+      pkgName.append(segment);
+      if (j < pkgPath.segmentCount() - 1) {
+        pkgName.append("."); //$NON-NLS-1$
+      }
+    }
+    return pkgName.toString();
+  }
+
+  /**
+   * Returns the length of the common prefix between s1 and s2.
+   */
+  public static int prefixLength(char[] s1, char[] s2) {
+    int len = 0;
+    int max = Math.min(s1.length, s2.length);
+    for (int i = 0; i < max && s1[i] == s2[i]; ++i)
+      ++len;
+    return len;
+  }
+
+  /**
+   * Returns the length of the common prefix between s1 and s2.
+   */
+  public static int prefixLength(String s1, String s2) {
+    int len = 0;
+    int max = Math.min(s1.length(), s2.length());
+    for (int i = 0; i < max && s1.charAt(i) == s2.charAt(i); ++i)
+      ++len;
+    return len;
+  }
+
+  private static void quickSort(char[][] list, int left, int right) {
+    int original_left = left;
+    int original_right = right;
+    char[] mid = list[(left + right) / 2];
+    do {
+      while (compare(list[left], mid) < 0) {
+        left++;
+      }
+      while (compare(mid, list[right]) < 0) {
+        right--;
+      }
+      if (left <= right) {
+        char[] tmp = list[left];
+        list[left] = list[right];
+        list[right] = tmp;
+        left++;
+        right--;
+      }
+    } while (left <= right);
+    if (original_left < right) {
+      quickSort(list, original_left, right);
+    }
+    if (left < original_right) {
+      quickSort(list, left, original_right);
+    }
+  }
+
+  /**
+   * Sort the comparable objects in the given collection.
+   */
+  private static void quickSort(Comparable[] sortedCollection, int left, int right) {
+    int original_left = left;
+    int original_right = right;
+    Comparable mid = sortedCollection[(left + right) / 2];
+    do {
+      while (sortedCollection[left].compareTo(mid) < 0) {
+        left++;
+      }
+      while (mid.compareTo(sortedCollection[right]) < 0) {
+        right--;
+      }
+      if (left <= right) {
+        Comparable tmp = sortedCollection[left];
+        sortedCollection[left] = sortedCollection[right];
+        sortedCollection[right] = tmp;
+        left++;
+        right--;
+      }
+    } while (left <= right);
+    if (original_left < right) {
+      quickSort(sortedCollection, original_left, right);
+    }
+    if (left < original_right) {
+      quickSort(sortedCollection, left, original_right);
+    }
+  }
+
+  private static void quickSort(int[] list, int left, int right) {
+    int original_left = left;
+    int original_right = right;
+    int mid = list[(left + right) / 2];
+    do {
+      while (list[left] < mid) {
+        left++;
+      }
+      while (mid < list[right]) {
+        right--;
+      }
+      if (left <= right) {
+        int tmp = list[left];
+        list[left] = list[right];
+        list[right] = tmp;
+        left++;
+        right--;
+      }
+    } while (left <= right);
+    if (original_left < right) {
+      quickSort(list, original_left, right);
+    }
+    if (left < original_right) {
+      quickSort(list, left, original_right);
+    }
+  }
+
+  /**
+   * Sort the objects in the given collection using the given comparer.
+   */
+  private static void quickSort(Object[] sortedCollection, int left, int right, Comparer comparer) {
+    int original_left = left;
+    int original_right = right;
+    Object mid = sortedCollection[(left + right) / 2];
+    do {
+      while (comparer.compare(sortedCollection[left], mid) < 0) {
+        left++;
+      }
+      while (comparer.compare(mid, sortedCollection[right]) < 0) {
+        right--;
+      }
+      if (left <= right) {
+        Object tmp = sortedCollection[left];
+        sortedCollection[left] = sortedCollection[right];
+        sortedCollection[right] = tmp;
+        left++;
+        right--;
+      }
+    } while (left <= right);
+    if (original_left < right) {
+      quickSort(sortedCollection, original_left, right, comparer);
+    }
+    if (left < original_right) {
+      quickSort(sortedCollection, left, original_right, comparer);
+    }
+  }
+
+  /**
+   * Sort the objects in the given collection using the given sort order.
+   */
+  private static void quickSort(Object[] sortedCollection, int left, int right, int[] sortOrder) {
+    int original_left = left;
+    int original_right = right;
+    int mid = sortOrder[(left + right) / 2];
+    do {
+      while (sortOrder[left] < mid) {
+        left++;
+      }
+      while (mid < sortOrder[right]) {
+        right--;
+      }
+      if (left <= right) {
+        Object tmp = sortedCollection[left];
+        sortedCollection[left] = sortedCollection[right];
+        sortedCollection[right] = tmp;
+        int tmp2 = sortOrder[left];
+        sortOrder[left] = sortOrder[right];
+        sortOrder[right] = tmp2;
+        left++;
+        right--;
+      }
+    } while (left <= right);
+    if (original_left < right) {
+      quickSort(sortedCollection, original_left, right, sortOrder);
+    }
+    if (left < original_right) {
+      quickSort(sortedCollection, left, original_right, sortOrder);
+    }
+  }
+
+  /**
+   * Sort the strings in the given collection.
+   */
+  private static void quickSort(String[] sortedCollection, int left, int right) {
+    int original_left = left;
+    int original_right = right;
+    String mid = sortedCollection[(left + right) / 2];
+    do {
+      while (sortedCollection[left].compareTo(mid) < 0) {
+        left++;
+      }
+      while (mid.compareTo(sortedCollection[right]) < 0) {
+        right--;
+      }
+      if (left <= right) {
+        String tmp = sortedCollection[left];
+        sortedCollection[left] = sortedCollection[right];
+        sortedCollection[right] = tmp;
+        left++;
+        right--;
+      }
+    } while (left <= right);
+    if (original_left < right) {
+      quickSort(sortedCollection, original_left, right);
+    }
+    if (left < original_right) {
+      quickSort(sortedCollection, left, original_right);
+    }
+  }
+
+  /**
+   * Sort the strings in the given collection in reverse alphabetical order.
+   */
+  private static void quickSortReverse(String[] sortedCollection, int left, int right) {
+    int original_left = left;
+    int original_right = right;
+    String mid = sortedCollection[(left + right) / 2];
+    do {
+      while (sortedCollection[left].compareTo(mid) > 0) {
+        left++;
+      }
+      while (mid.compareTo(sortedCollection[right]) > 0) {
+        right--;
+      }
+      if (left <= right) {
+        String tmp = sortedCollection[left];
+        sortedCollection[left] = sortedCollection[right];
+        sortedCollection[right] = tmp;
+        left++;
+        right--;
+      }
+    } while (left <= right);
+    if (original_left < right) {
+      quickSortReverse(sortedCollection, original_left, right);
+    }
+    if (left < original_right) {
+      quickSortReverse(sortedCollection, left, original_right);
+    }
+  }
+
+  /**
+   * Reads in a string from the specified data input stream. The string has been encoded using a modified UTF-8 format.
+   * <p>
+   * The first two bytes are read as if by <code>readUnsignedShort</code>. This value gives the number of following bytes that
+   * are in the encoded string, not the length of the resulting string. The following bytes are then interpreted as bytes encoding
+   * characters in the UTF-8 format and are converted into characters.
+   * <p>
+   * This method blocks until all the bytes are read, the end of the stream is detected, or an exception is thrown.
+   * 
+   * @param in
+   *          a data input stream.
+   * @return a Unicode string.
+   * @exception EOFException
+   *              if the input stream reaches the end before all the bytes.
+   * @exception IOException
+   *              if an I/O error occurs.
+   * @exception UTFDataFormatException
+   *              if the bytes do not represent a valid UTF-8 encoding of a Unicode string.
+   * @see java.io.DataInputStream#readUnsignedShort()
+   */
+  public final static char[] readUTF(DataInput in) throws IOException {
+    int utflen = in.readUnsignedShort();
+    char str[] = new char[utflen];
+    int count = 0;
+    int strlen = 0;
+    while (count < utflen) {
+      int c = in.readUnsignedByte();
+      int char2, char3;
+      switch (c >> 4) {
+      case 0:
+      case 1:
+      case 2:
+      case 3:
+      case 4:
+      case 5:
+      case 6:
+      case 7:
+        // 0xxxxxxx
+        count++;
+        str[strlen++] = (char) c;
+        break;
+      case 12:
+      case 13:
+        // 110x xxxx 10xx xxxx
+        count += 2;
+        if (count > utflen)
+          throw new UTFDataFormatException();
+        char2 = in.readUnsignedByte();
+        if ((char2 & 0xC0) != 0x80)
+          throw new UTFDataFormatException();
+        str[strlen++] = (char) (((c & 0x1F) << 6) | (char2 & 0x3F));
+        break;
+      case 14:
+        // 1110 xxxx 10xx xxxx 10xx xxxx
+        count += 3;
+        if (count > utflen)
+          throw new UTFDataFormatException();
+        char2 = in.readUnsignedByte();
+        char3 = in.readUnsignedByte();
+        if (((char2 & 0xC0) != 0x80) || ((char3 & 0xC0) != 0x80))
+          throw new UTFDataFormatException();
+        str[strlen++] = (char) (((c & 0x0F) << 12) | ((char2 & 0x3F) << 6) | ((char3 & 0x3F) << 0));
+        break;
+      default:
+        // 10xx xxxx, 1111 xxxx
+        throw new UTFDataFormatException();
+      }
+    }
+    if (strlen < utflen) {
+      System.arraycopy(str, 0, str = new char[strlen], 0, strlen);
+    }
+    return str;
+  }
+
+  /**
+   * Creates a NLS catalog for the given locale.
+   */
+  public static void relocalize() {
+    try {
+      bundle = ResourceBundle.getBundle(bundleName, Locale.getDefault());
+    } catch (MissingResourceException e) {
+      System.out.println("Missing resource : " + bundleName.replace('.', '/') + ".properties for locale " + Locale.getDefault()); //$NON-NLS-1$//$NON-NLS-2$
+      throw e;
+    }
+  }
+
+  public static void sort(char[][] list) {
+    if (list.length > 1)
+      quickSort(list, 0, list.length - 1);
+  }
+
+  /**
+   * Sorts an array of Comparable objects in place.
+   */
+  public static void sort(Comparable[] objects) {
+    if (objects.length > 1)
+      quickSort(objects, 0, objects.length - 1);
+  }
+
+  public static void sort(int[] list) {
+    if (list.length > 1)
+      quickSort(list, 0, list.length - 1);
+  }
+
+  /**
+   * Sorts an array of objects in place. The given comparer compares pairs of items.
+   */
+  public static void sort(Object[] objects, Comparer comparer) {
+    if (objects.length > 1)
+      quickSort(objects, 0, objects.length - 1, comparer);
+  }
+
+  /**
+   * Sorts an array of objects in place, using the sort order given for each item.
+   */
+  public static void sort(Object[] objects, int[] sortOrder) {
+    if (objects.length > 1)
+      quickSort(objects, 0, objects.length - 1, sortOrder);
+  }
+
+  /**
+   * Sorts an array of strings in place using quicksort.
+   */
+  public static void sort(String[] strings) {
+    if (strings.length > 1)
+      quickSort(strings, 0, strings.length - 1);
+  }
+
+  /**
+   * Sorts an array of Comparable objects, returning a new array with the sorted items. The original array is left untouched.
+   */
+  public static Comparable[] sortCopy(Comparable[] objects) {
+    int len = objects.length;
+    Comparable[] copy = new Comparable[len];
+    System.arraycopy(objects, 0, copy, 0, len);
+    sort(copy);
+    return copy;
+  }
+
+  /**
+   * Sorts an array of Strings, returning a new array with the sorted items. The original array is left untouched.
+   */
+  public static Object[] sortCopy(Object[] objects, Comparer comparer) {
+    int len = objects.length;
+    Object[] copy = new Object[len];
+    System.arraycopy(objects, 0, copy, 0, len);
+    sort(copy, comparer);
+    return copy;
+  }
+
+  /**
+   * Sorts an array of Strings, returning a new array with the sorted items. The original array is left untouched.
+   */
+  public static String[] sortCopy(String[] objects) {
+    int len = objects.length;
+    String[] copy = new String[len];
+    System.arraycopy(objects, 0, copy, 0, len);
+    sort(copy);
+    return copy;
+  }
+
+  /**
+   * Sorts an array of strings in place using quicksort in reverse alphabetical order.
+   */
+  public static void sortReverseOrder(String[] strings) {
+    if (strings.length > 1)
+      quickSortReverse(strings, 0, strings.length - 1);
+  }
+
+  /**
+   * Converts a String[] to char[][].
+   */
+  public static char[][] toCharArrays(String[] a) {
+    int len = a.length;
+    char[][] result = new char[len][];
+    for (int i = 0; i < len; ++i) {
+      result[i] = toChars(a[i]);
+    }
+    return result;
+  }
+
+  /**
+   * Converts a String to char[].
+   */
+  public static char[] toChars(String s) {
+    int len = s.length();
+    char[] chars = new char[len];
+    s.getChars(0, len, chars, 0);
+    return chars;
+  }
+
+  /**
+   * Converts a String to char[][], where segments are separate by '.'.
+   */
+  public static char[][] toCompoundChars(String s) {
+    int len = s.length();
+    if (len == 0) {
+      return CharOperation.NO_CHAR_CHAR;
+    }
+    int segCount = 1;
+    for (int off = s.indexOf('.'); off != -1; off = s.indexOf('.', off + 1)) {
+      ++segCount;
+    }
+    char[][] segs = new char[segCount][];
+    int start = 0;
+    for (int i = 0; i < segCount; ++i) {
+      int dot = s.indexOf('.', start);
+      int end = (dot == -1 ? s.length() : dot);
+      segs[i] = new char[end - start];
+      s.getChars(start, end, segs[i], 0);
+      start = end + 1;
+    }
+    return segs;
+  }
+
+  /**
+   * Converts a char[] to String.
+   */
+  public static String toString(char[] c) {
+    return new String(c);
+  }
+
+  /**
+   * Converts a char[][] to String, where segments are separated by '.'.
+   */
+  public static String toString(char[][] c) {
+    StringBuffer sb = new StringBuffer();
+    for (int i = 0, max = c.length; i < max; ++i) {
+      if (i != 0)
+        sb.append('.');
+      sb.append(c[i]);
+    }
+    return sb.toString();
+  }
+
+  /**
+   * Converts a char[][] and a char[] to String, where segments are separated by '.'.
+   */
+  public static String toString(char[][] c, char[] d) {
+    if (c == null)
+      return new String(d);
+    StringBuffer sb = new StringBuffer();
+    for (int i = 0, max = c.length; i < max; ++i) {
+      sb.append(c[i]);
+      sb.append('.');
+    }
+    sb.append(d);
+    return sb.toString();
+  }
+
+  /*
+   * Returns the unresolved type parameter signatures of the given method e.g. {"QString;", "[int", "[[Qjava.util.Vector;"}
+   */
+  //   public static String[] typeParameterSignatures(AbstractMethodDeclaration method) {
+  //           Argument[] args = method.arguments;
+  //           if (args != null) {
+  //                   int length = args.length;
+  //                   String[] signatures = new String[length];
+  //                   for (int i = 0; i < args.length; i++) {
+  //                           Argument arg = args[i];
+  //                           signatures[i] = typeSignature(arg.type);
+  //                   }
+  //                   return signatures;
+  //           }
+  //           return new String[0];
+  //   }
+  /*
+   * Returns the unresolved type signature of the given type reference, e.g. "QString;", "[int", "[[Qjava.util.Vector;"
+   */
+  //   public static String typeSignature(TypeReference type) {
+  //           char[][] compoundName = type.getTypeName();
+  //           char[] typeName =CharOperation.concatWith(compoundName, '.');
+  //           String signature = Signature.createTypeSignature(typeName, false/*don't resolve*/);
+  //           int dimensions = type.dimensions();
+  //           if (dimensions > 0) {
+  //                   signature = Signature.createArraySignature(signature, dimensions);
+  //           }
+  //           return signature;
+  //   }
+  /*
+        * Returns the unresolved type signature of the given type reference, 
+        * e.g. "QString;", "[int", "[[Qjava.util.Vector;"
+        */
+       public static String typeSignature(TypeReference type) {
+               char[][] compoundName = type.getTypeName();
+               char[] typeName =CharOperation.concatWith(compoundName, '.');
+               String signature = Signature.createTypeSignature(typeName, false/*don't resolve*/);
+               int dimensions = type.dimensions();
+               if (dimensions > 0) {
+                       signature =  Signature.createArraySignature(signature, dimensions);
                }
-               
-               if(count != numberOfArg)
-                       return null;
-               
-               System.arraycopy(args, 0, args = new String[count], 0, count);
-               return args;
-       }
-       
-}
+               return signature;
+       }
+  /**
+   * Asserts that the given method signature is valid.
+   */
+  public static void validateMethodSignature(String sig) {
+    Assert.isTrue(isValidMethodSignature(sig));
+  }
+
+  /**
+   * Asserts that the given type signature is valid.
+   */
+  public static void validateTypeSignature(String sig, boolean allowVoid) {
+    Assert.isTrue(isValidTypeSignature(sig, allowVoid));
+  }
+
+  public static void verbose(String log) {
+    verbose(log, System.out);
+  }
+
+  public static synchronized void verbose(String log, PrintStream printStream) {
+    int start = 0;
+    do {
+      int end = log.indexOf('\n', start);
+      printStream.print(Thread.currentThread());
+      printStream.print(" "); //$NON-NLS-1$
+      printStream.print(log.substring(start, end == -1 ? log.length() : end + 1));
+      start = end + 1;
+    } while (start != 0);
+    printStream.println();
+  }
+
+  /**
+   * Writes a string to the given output stream using UTF-8 encoding in a machine-independent manner.
+   * <p>
+   * First, two bytes are written to the output stream as if by the <code>writeShort</code> method giving the number of bytes to
+   * follow. This value is the number of bytes actually written out, not the length of the string. Following the length, each
+   * character of the string is output, in sequence, using the UTF-8 encoding for the character.
+   * 
+   * @param str
+   *          a string to be written.
+   * @return the number of bytes written to the stream.
+   * @exception IOException
+   *              if an I/O error occurs.
+   * @since JDK1.0
+   */
+  public static int writeUTF(OutputStream out, char[] str) throws IOException {
+    int strlen = str.length;
+    int utflen = 0;
+    for (int i = 0; i < strlen; i++) {
+      int c = str[i];
+      if ((c >= 0x0001) && (c <= 0x007F)) {
+        utflen++;
+      } else if (c > 0x07FF) {
+        utflen += 3;
+      } else {
+        utflen += 2;
+      }
+    }
+    if (utflen > 65535)
+      throw new UTFDataFormatException();
+    out.write((utflen >>> 8) & 0xFF);
+    out.write((utflen >>> 0) & 0xFF);
+    if (strlen == utflen) {
+      for (int i = 0; i < strlen; i++)
+        out.write(str[i]);
+    } else {
+      for (int i = 0; i < strlen; i++) {
+        int c = str[i];
+        if ((c >= 0x0001) && (c <= 0x007F)) {
+          out.write(c);
+        } else if (c > 0x07FF) {
+          out.write(0xE0 | ((c >> 12) & 0x0F));
+          out.write(0x80 | ((c >> 6) & 0x3F));
+          out.write(0x80 | ((c >> 0) & 0x3F));
+        } else {
+          out.write(0xC0 | ((c >> 6) & 0x1F));
+          out.write(0x80 | ((c >> 0) & 0x3F));
+        }
+      }
+    }
+    return utflen + 2; // the number of bytes written to the stream
+  }
+}
\ No newline at end of file
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2003 IBM Corporation and others.
+ * Copyright (c) 2000, 2004 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials 
  * are made available under the terms of the Common Public License v1.0
  * which accompanies this distribution, and is available at
@@ -8,26 +8,25 @@
  * Contributors:
  *     IBM Corporation - initial API and implementation
  *******************************************************************************/
-package net.sourceforge.phpdt.internal.ui.packageview;
+package net.sourceforge.phpdt.internal.corext.codemanipulation;
 
 import java.text.MessageFormat;
 import java.util.MissingResourceException;
 import java.util.ResourceBundle;
 
-public class PackagesMessages {
-
-       private static final String RESOURCE_BUNDLE= "net.sourceforge.phpdt.internal.ui.packageview.PackagesMessages";//$NON-NLS-1$
+public class CodeGenerationMessages {
 
+       private static final String RESOURCE_BUNDLE= CodeGenerationMessages.class.getName();
        private static ResourceBundle fgResourceBundle= ResourceBundle.getBundle(RESOURCE_BUNDLE);
 
-       private PackagesMessages() {
+       private CodeGenerationMessages() {
        }
 
        public static String getString(String key) {
                try {
                        return fgResourceBundle.getString(key);
                } catch (MissingResourceException e) {
-                       return "!" + key + "!";//$NON-NLS-2$ //$NON-NLS-1$
+                       return '!' + key + '!';
                }
        }
        
@@ -37,22 +36,16 @@ public class PackagesMessages {
         * @param key   the string used to get the bundle value, must not be null
         */
        public static String getFormattedString(String key, Object arg) {
-               String format= null;
-               try {
-                       format= fgResourceBundle.getString(key);
-               } catch (MissingResourceException e) {
-                       return "!" + key + "!";//$NON-NLS-2$ //$NON-NLS-1$
-               }
-               if (arg == null)
-                       arg= ""; //$NON-NLS-1$
-               return MessageFormat.format(format, new Object[] { arg });
+               return MessageFormat.format(getString(key), new Object[] { arg });
        }
 
+
        /**
         * Gets a string from the resource bundle and formats it with arguments
         */     
-       public static String getFormattedString(String key, String[] args) {
-               return MessageFormat.format(fgResourceBundle.getString(key), args);
+       public static String getFormattedString(String key, Object[] args) {
+               return MessageFormat.format(getString(key), args);
        }
 
+
 }
diff --git a/net.sourceforge.phpeclipse/src/net/sourceforge/phpdt/internal/corext/codemanipulation/CodeGenerationMessages.properties b/net.sourceforge.phpeclipse/src/net/sourceforge/phpdt/internal/corext/codemanipulation/CodeGenerationMessages.properties
new file mode 100644 (file)
index 0000000..7c41c12
--- /dev/null
@@ -0,0 +1,27 @@
+###############################################################################
+# Copyright (c) 2000, 2004 IBM Corporation and others.
+# All rights reserved. This program and the accompanying materials 
+# are made available under the terms of the Common Public License v1.0
+# which accompanies this distribution, and is available at
+# http://www.eclipse.org/legal/cpl-v10.html
+# 
+# Contributors:
+#     IBM Corporation - initial API and implementation
+###############################################################################
+
+AddGetterSetterOperation.description=Generate Getters and Setters...
+
+AddImportsOperation.description=Adding import...
+
+AddMethodStubOperation.description=Create method...
+
+AddUnimplementedMethodsOperation.description=Evaluating and adding unimplemented methods...
+
+AddCustomConstructorOperation.description=Evaluating and adding new constructor...
+
+OrganizeImportsOperation.description=Organizing imports of {0}...
+
+AddJavaDocStubOperation.description=Create Javadoc stub...
+
+AddDelegateMethodsOperation.monitor.message=Creating {0} methods...
+ImportsStructure.operation.description=Updating imports...
diff --git a/net.sourceforge.phpeclipse/src/net/sourceforge/phpdt/internal/corext/codemanipulation/GetterSetterUtil.java b/net.sourceforge.phpeclipse/src/net/sourceforge/phpdt/internal/corext/codemanipulation/GetterSetterUtil.java
new file mode 100644 (file)
index 0000000..2866303
--- /dev/null
@@ -0,0 +1,205 @@
+/*******************************************************************************
+ * Copyright (c) 2000, 2004 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials 
+ * are made available under the terms of the Common Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/cpl-v10.html
+ * 
+ * Contributors:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+package net.sourceforge.phpdt.internal.corext.codemanipulation;
+
+import org.eclipse.core.runtime.CoreException;
+
+import net.sourceforge.phpdt.core.Flags;
+import net.sourceforge.phpdt.core.IField;
+import net.sourceforge.phpdt.core.IJavaProject;
+import net.sourceforge.phpdt.core.IMethod;
+import net.sourceforge.phpdt.core.IType;
+import net.sourceforge.phpdt.core.JavaModelException;
+import net.sourceforge.phpdt.core.NamingConventions;
+import net.sourceforge.phpdt.core.Signature;
+
+import net.sourceforge.phpdt.ui.CodeGeneration;
+import net.sourceforge.phpdt.ui.PreferenceConstants;
+
+import net.sourceforge.phpdt.internal.corext.util.JavaModelUtil;
+import net.sourceforge.phpdt.internal.corext.util.JdtFlags;
+
+public class GetterSetterUtil {
+       
+       private static final String[] EMPTY= new String[0];
+       
+       //no instances
+       private GetterSetterUtil(){
+       }
+       
+       public static String getGetterName(IField field, String[] excludedNames) throws JavaModelException {
+               boolean useIs= PreferenceConstants.getPreferenceStore().getBoolean(PreferenceConstants.CODEGEN_IS_FOR_GETTERS);
+               return getGetterName(field, excludedNames, useIs);
+       }
+       
+       private static String getGetterName(IField field, String[] excludedNames, boolean useIsForBoolGetters) throws JavaModelException {
+               if (excludedNames == null) {
+                       excludedNames= EMPTY;
+               }
+               return getGetterName(field.getJavaProject(), field.getElementName(), field.getFlags(), useIsForBoolGetters && JavaModelUtil.isBoolean(field), excludedNames);
+       }       
+       
+       public static String getGetterName(IJavaProject project, String fieldName, int flags, boolean isBoolean, String[] excludedNames){
+               return NamingConventions.suggestGetterName(project, fieldName, flags, isBoolean, excludedNames);        
+       }
+
+       public static String getSetterName(IJavaProject project, String fieldName, int flags, boolean isBoolean, String[] excludedNames){
+               return NamingConventions.suggestSetterName(project, fieldName, flags, isBoolean, excludedNames);        
+       }
+
+       public static String getSetterName(IField field, String[] excludedNames) throws JavaModelException {
+               if (excludedNames == null) {
+                       excludedNames= EMPTY;
+               }               
+               return NamingConventions.suggestSetterName(field.getJavaProject(), field.getElementName(), field.getFlags(), JavaModelUtil.isBoolean(field), excludedNames);
+       }       
+
+       public static IMethod getGetter(IField field) throws JavaModelException{
+               IMethod primaryCandidate= JavaModelUtil.findMethod(getGetterName(field, EMPTY, true), new String[0], false, field.getDeclaringType());
+               if (! JavaModelUtil.isBoolean(field) || (primaryCandidate != null && primaryCandidate.exists()))
+                       return primaryCandidate;
+               //bug 30906 describes why we need to look for other alternatives here
+               String secondCandidateName= getGetterName(field, EMPTY, false);
+               return JavaModelUtil.findMethod(secondCandidateName, new String[0], false, field.getDeclaringType());
+       }
+       
+       public static IMethod getSetter(IField field) throws JavaModelException{
+               String[] args= new String[] { field.getTypeSignature() };       
+               return JavaModelUtil.findMethod(getSetterName(field, EMPTY), args, false, field.getDeclaringType());
+       }
+       
+       /**
+        * Create a stub for a getter of the given field using getter/setter templates. The resulting code
+        * has to be formatted and indented.
+        * @param field The field to create a getter for
+        * @param setterName The chosen name for the setter
+        * @param addComments If <code>true</code>, comments will be added.
+        * @param flags The flags signaling visibility, if static, synchronized or final
+        * @return Returns the generated stub.
+        * @throws CoreException
+        */
+       public static String getSetterStub(IField field, String setterName, boolean addComments, int flags) throws CoreException {
+               
+               String fieldName= field.getElementName();
+               IType parentType= field.getDeclaringType();
+               
+               String returnSig= field.getTypeSignature();
+               String typeName= Signature.toString(returnSig);
+               
+               IJavaProject project= field.getJavaProject();
+
+               String accessorName = NamingConventions.removePrefixAndSuffixForFieldName(project, fieldName, field.getFlags());
+               String argname= StubUtility.suggestArgumentName(project, accessorName, EMPTY);
+
+               boolean isStatic= Flags.isStatic(flags);
+//             boolean isSync= Flags.isSynchronized(flags);
+               boolean isFinal= Flags.isFinal(flags);
+               
+               // create the setter stub
+               StringBuffer buf= new StringBuffer();
+               if (addComments) {
+                       String comment= CodeGeneration.getSetterComment(field.getCompilationUnit(), parentType.getTypeQualifiedName('.'), setterName, field.getElementName(), typeName, argname, accessorName, String.valueOf('\n'));
+                       if (comment != null) {
+                               buf.append(comment);
+                               buf.append('\n');
+                       }
+               }
+               buf.append(JdtFlags.getVisibilityString(flags));
+               buf.append(' ');        
+               if (isStatic)
+                       buf.append("static "); //$NON-NLS-1$
+//             if (isSync)
+//                     buf.append("synchronized "); //$NON-NLS-1$
+               if (isFinal)
+                       buf.append("final "); //$NON-NLS-1$                             
+                       
+               buf.append("void "); //$NON-NLS-1$
+               buf.append(setterName);
+               buf.append('('); 
+               buf.append(typeName); 
+               buf.append(' '); 
+               buf.append(argname); 
+               buf.append(") {\n"); //$NON-NLS-1$
+               
+               boolean useThis= PreferenceConstants.getPreferenceStore().getBoolean(PreferenceConstants.CODEGEN_KEYWORD_THIS);
+               if (argname.equals(fieldName) || (useThis && !isStatic)) {
+                       if (isStatic)
+                               fieldName= parentType.getElementName() + '.' + fieldName;
+                       else
+                               fieldName= "this." + fieldName; //$NON-NLS-1$
+               }
+               String body= CodeGeneration.getSetterMethodBodyContent(field.getCompilationUnit(), parentType.getTypeQualifiedName('.'), setterName, fieldName, argname, String.valueOf('\n'));
+               if (body != null) {
+                       buf.append(body);
+               }
+               buf.append("}\n"); //$NON-NLS-1$                
+               return buf.toString();
+       }
+       
+       /**
+        * Create a stub for a getter of the given field using getter/setter templates. The resulting code
+        * has to be formatted and indented.
+        * @param field The field to create a getter for
+        * @param getterName The chosen name for the getter
+        * @param addComments If <code>true</code>, comments will be added.
+        * @param flags The flags signaling visibility, if static, synchronized or final
+        * @return Returns the generated stub.
+        * @throws CoreException
+        */
+       public static String getGetterStub(IField field, String getterName, boolean addComments, int flags) throws CoreException {
+               String fieldName= field.getElementName();
+               IType parentType= field.getDeclaringType();
+               
+               boolean isStatic= Flags.isStatic(flags);
+//             boolean isSync= Flags.isSynchronized(flags);
+               boolean isFinal= Flags.isFinal(flags);
+               
+               String typeName= Signature.toString(field.getTypeSignature());
+               String accessorName = NamingConventions.removePrefixAndSuffixForFieldName(field.getJavaProject(), fieldName, field.getFlags());
+
+               // create the getter stub
+               StringBuffer buf= new StringBuffer();
+               if (addComments) {
+                       String comment= CodeGeneration.getGetterComment(field.getCompilationUnit(), parentType.getTypeQualifiedName('.'), getterName, field.getElementName(), typeName, accessorName, String.valueOf('\n'));
+                       if (comment != null) {
+                               buf.append(comment);
+                               buf.append('\n');
+                       }                                       
+               }
+               
+               buf.append(JdtFlags.getVisibilityString(flags));
+               buf.append(' ');                        
+               if (isStatic)
+                       buf.append("static "); //$NON-NLS-1$
+//             if (isSync)
+//                     buf.append("synchronized "); //$NON-NLS-1$
+               if (isFinal)
+                       buf.append("final "); //$NON-NLS-1$
+                       
+               buf.append(typeName);
+               buf.append(' ');
+               buf.append(getterName);
+               buf.append("() {\n"); //$NON-NLS-1$
+               
+               boolean useThis= PreferenceConstants.getPreferenceStore().getBoolean(PreferenceConstants.CODEGEN_KEYWORD_THIS);
+               if (useThis && !isStatic) {
+                       fieldName= "this." + fieldName; //$NON-NLS-1$
+               }
+               
+               String body= CodeGeneration.getGetterMethodBodyContent(field.getCompilationUnit(), parentType.getTypeQualifiedName('.'), getterName, fieldName, String.valueOf('\n'));
+               if (body != null) {
+                       buf.append(body);
+               }
+               buf.append("}\n"); //$NON-NLS-1$
+               return buf.toString(); 
+       }
+
+}
diff --git a/net.sourceforge.phpeclipse/src/net/sourceforge/phpdt/internal/corext/codemanipulation/IRequestQuery.java b/net.sourceforge.phpeclipse/src/net/sourceforge/phpdt/internal/corext/codemanipulation/IRequestQuery.java
new file mode 100644 (file)
index 0000000..3f24fa1
--- /dev/null
@@ -0,0 +1,32 @@
+/*******************************************************************************
+ * Copyright (c) 2000, 2004 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials 
+ * are made available under the terms of the Common Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/cpl-v10.html
+ * 
+ * Contributors:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+package net.sourceforge.phpdt.internal.corext.codemanipulation;
+
+import net.sourceforge.phpdt.core.IMember;
+
+
+/**
+ * Query object to let operations callback the actions.
+ * Example is a callback to ask if a existing method should be replaced.
+ */
+public interface IRequestQuery {
+       
+       // return codes
+       public static final int CANCEL= 0;
+       public static final int NO= 1;
+       public static final int YES= 2;
+       public static final int YES_ALL= 3;
+       
+       /**
+        * Do the callback. Returns YES, NO, YES_ALL or CANCEL
+        */
+       int doQuery(IMember member);
+}
index 8c4c7e0..b0ae2b9 100644 (file)
@@ -336,7 +336,7 @@ public class StubUtility {
                }               
                
                /**
-                * @see org.eclipse.jdt.ui.CodeGeneration#getTypeComment(ICompilationUnit, String, String)
+                * @see net.sourceforge.phpdt.ui.CodeGeneration#getTypeComment(ICompilationUnit, String, String)
                 */     
                public static String getCompilationUnitContent(ICompilationUnit cu, String typeComment, String typeContent, String lineDelimiter) throws CoreException {
                        IPackageFragment pack= (IPackageFragment) cu.getParent();
@@ -358,7 +358,7 @@ public class StubUtility {
                }               
 
                /*
-                * @see org.eclipse.jdt.ui.CodeGeneration#getTypeComment(ICompilationUnit, String, String)
+                * @see net.sourceforge.phpdt.ui.CodeGeneration#getTypeComment(ICompilationUnit, String, String)
                 */             
                public static String getTypeComment(ICompilationUnit cu, String typeQualifiedName, String lineDelim) throws CoreException {
                        Template template= PHPeclipsePlugin.getDefault().getCodeTemplateStore().findTemplate(CodeTemplateContextType.TYPECOMMENT);
@@ -424,7 +424,7 @@ public class StubUtility {
                }
                
                /**
-                * @see org.eclipse.jdt.ui.CodeGeneration#getMethodComment(IMethod,IMethod,String)
+                * @see net.sourceforge.phpdt.ui.CodeGeneration#getMethodComment(IMethod,IMethod,String)
                 */
                public static String getMethodComment(IMethod method, IMethod overridden, String lineDelimiter) throws CoreException {
                        String retType= method.isConstructor() ? null : method.getReturnType();
@@ -435,7 +435,7 @@ public class StubUtility {
                }
 
                /**
-                * @see org.eclipse.jdt.ui.CodeGeneration#getMethodComment(ICompilationUnit, String, String, String[], String[], String, IMethod, String)
+                * @see net.sourceforge.phpdt.ui.CodeGeneration#getMethodComment(ICompilationUnit, String, String, String[], String[], String, IMethod, String)
                 */
                public static String getMethodComment(ICompilationUnit cu, String typeName, String methodName, String[] paramNames, String[] excTypeSig, String retTypeSig, IMethod overridden, String lineDelimiter) throws CoreException {
                        String templateName= CodeTemplateContextType.METHODCOMMENT;
@@ -512,7 +512,7 @@ public class StubUtility {
                
                
                /**
-                * @see org.eclipse.jdt.ui.CodeGeneration#getSetterComment(ICompilationUnit, String, String, String, String, String, String, String)
+                * @see net.sourceforge.phpdt.ui.CodeGeneration#getSetterComment(ICompilationUnit, String, String, String, String, String, String, String)
                 */
                public static String getSetterComment(ICompilationUnit cu, String typeName, String methodName, String fieldName, String fieldType, String paramName, String bareFieldName, String lineDelimiter) throws CoreException {
                        String templateName= CodeTemplateContextType.SETTERCOMMENT;
@@ -534,7 +534,7 @@ public class StubUtility {
                }       
                
                /**
-                * @see org.eclipse.jdt.ui.CodeGeneration#getGetterComment(ICompilationUnit, String, String, String, String, String, String)
+                * @see net.sourceforge.phpdt.ui.CodeGeneration#getGetterComment(ICompilationUnit, String, String, String, String, String, String)
                 */
                public static String getGetterComment(ICompilationUnit cu, String typeName, String methodName, String fieldName, String fieldType, String bareFieldName, String lineDelimiter) throws CoreException {
                        String templateName= CodeTemplateContextType.GETTERCOMMENT;
@@ -572,7 +572,7 @@ public class StubUtility {
                }
 
                /**
-                * @see org.eclipse.jdt.ui.CodeGeneration#getMethodComment(ICompilationUnit, String, MethodDeclaration, IMethodBinding, String)
+                * @see net.sourceforge.phpdt.ui.CodeGeneration#getMethodComment(ICompilationUnit, String, MethodDeclaration, IMethodBinding, String)
                 */
 //             public static String getMethodComment(ICompilationUnit cu, String typeName, IMethodBinding overridden, String lineDelimiter) throws CoreException {
 //                     if (overridden != null) {
index f28361a..5e8a298 100644 (file)
@@ -23,7 +23,7 @@ import org.eclipse.jface.text.templates.Template;
 /**
  * <code>CodeTemplates</code> gives access to the available code templates.
  * @since 3.0
- * @deprecated use {@link org.eclipse.jdt.internal.ui.JavaPlugin#getCodeTemplateStore()} instead 
+ * @deprecated use {@link net.sourceforge.phpdt.internal.ui.JavaPlugin#getCodeTemplateStore()} instead 
  */
 public class CodeTemplates extends net.sourceforge.phpdt.internal.corext.template.php.TemplateSet {
 
index eb0f0cf..4205ed6 100644 (file)
@@ -4,7 +4,7 @@
  */
 package net.sourceforge.phpdt.internal.corext.template.php;
 
-//import org.eclipse.jdt.core.ICompilationUnit;
+//import net.sourceforge.phpdt.core.ICompilationUnit;
 
 import net.sourceforge.phpdt.core.ICompilationUnit;
 
@@ -46,7 +46,7 @@ public class HTMLContextType extends CompilationUnitContextType {
                        return new HTMLUnitContext(this, document, offset, length, compilationUnit); 
        }
        /* (non-Javadoc)
-        * @see org.eclipse.jdt.internal.corext.template.java.CompilationUnitContextType#createContext(org.eclipse.jface.text.IDocument, int, int, org.eclipse.jdt.core.ICompilationUnit)
+        * @see net.sourceforge.phpdt.internal.corext.template.java.CompilationUnitContextType#createContext(org.eclipse.jface.text.IDocument, int, int, net.sourceforge.phpdt.core.ICompilationUnit)
         */
 //     public CompilationUnitContext createContext(IDocument document, int offset, int length, ICompilationUnit compilationUnit) {
 //             return new JavaDocContext(this, document, offset, length, compilationUnit);
index 0c4dfb3..e83cc10 100644 (file)
@@ -105,7 +105,7 @@ public class HTMLUnitContext extends CompilationUnitContext {
   }
 
   /*
-   * @see org.eclipse.jdt.internal.corext.template.DocumentTemplateContext#getEnd()
+   * @see net.sourceforge.phpdt.internal.corext.template.DocumentTemplateContext#getEnd()
    */
   public int getEnd() {
 
@@ -129,7 +129,7 @@ public class HTMLUnitContext extends CompilationUnitContext {
   }
 
   /*
-   * @see org.eclipse.jdt.internal.corext.template.DocumentTemplateContext#getKey()
+   * @see net.sourceforge.phpdt.internal.corext.template.DocumentTemplateContext#getKey()
    */
   public String getKey() {
 
index d1eaa07..f31b7af 100644 (file)
@@ -112,7 +112,7 @@ public class JavaDocContext extends CompilationUnitContext {
        }
 
        /*
-        * @see org.eclipse.jdt.internal.corext.template.DocumentTemplateContext#getEnd()
+        * @see net.sourceforge.phpdt.internal.corext.template.DocumentTemplateContext#getEnd()
         */
        public int getEnd() {
                
@@ -136,7 +136,7 @@ public class JavaDocContext extends CompilationUnitContext {
        }
 
        /*
-        * @see org.eclipse.jdt.internal.corext.template.DocumentTemplateContext#getKey()
+        * @see net.sourceforge.phpdt.internal.corext.template.DocumentTemplateContext#getKey()
         */
        public String getKey() {
 
index c44e026..4882d95 100644 (file)
@@ -51,7 +51,7 @@ public class JavaDocContextType extends CompilationUnitContextType {
        }
        
        /* (non-Javadoc)
-        * @see org.eclipse.jdt.internal.corext.template.java.CompilationUnitContextType#createContext(org.eclipse.jface.text.IDocument, int, int, org.eclipse.jdt.core.ICompilationUnit)
+        * @see net.sourceforge.phpdt.internal.corext.template.java.CompilationUnitContextType#createContext(org.eclipse.jface.text.IDocument, int, int, net.sourceforge.phpdt.core.ICompilationUnit)
         */
        public CompilationUnitContext createContext(IDocument document, int offset, int length, ICompilationUnit compilationUnit) {
                return new JavaDocContext(this, document, offset, length, compilationUnit);
index 77a8db5..de964c9 100644 (file)
@@ -7,7 +7,7 @@ package net.sourceforge.phpdt.internal.corext.textmanipulation;
 import org.eclipse.core.runtime.CoreException;
 
 
-//import org.eclipse.jdt.internal.corext.Assert;
+//import net.sourceforge.phpdt.internal.corext.Assert;
 
 /**
  * A text edit that moves text inside a text buffer.
index 1000537..9072f2e 100644 (file)
@@ -6,7 +6,7 @@ package net.sourceforge.phpdt.internal.corext.textmanipulation;
 
 import org.eclipse.core.runtime.CoreException;
 
-//import org.eclipse.jdt.internal.corext.Assert;
+//import net.sourceforge.phpdt.internal.corext.Assert;
 
 public abstract class SimpleTextEdit extends TextEdit {
 
index 6559085..8f8a79d 100644 (file)
@@ -24,8 +24,8 @@ import org.eclipse.jface.text.ILineTracker;
 import org.eclipse.jface.text.IRegion;
 import org.eclipse.jface.util.Assert;
 
-//import org.eclipse.jdt.internal.ui.JavaPlugin;
-//import org.eclipse.jdt.internal.ui.JavaStatusConstants;
+//import net.sourceforge.phpdt.internal.ui.JavaPlugin;
+//import net.sourceforge.phpdt.internal.ui.JavaStatusConstants;
 
 /**
  * An implementation of a <code>TextBuffer</code> that is based on <code>ITextSelection</code>
index 192cb3f..d622569 100644 (file)
@@ -14,10 +14,10 @@ import org.eclipse.core.runtime.CoreException;
 import org.eclipse.core.runtime.IProgressMonitor;
 import org.eclipse.core.runtime.NullProgressMonitor;
 
-//import org.eclipse.jdt.core.IJavaModelStatusConstants;
-//import org.eclipse.jdt.core.JavaModelException;
+//import net.sourceforge.phpdt.core.IJavaModelStatusConstants;
+//import net.sourceforge.phpdt.core.JavaModelException;
 //
-//import org.eclipse.jdt.internal.corext.Assert;
+//import net.sourceforge.phpdt.internal.corext.Assert;
 
 
 /**
index d92fba2..9694ddb 100644 (file)
@@ -4,9 +4,9 @@
  */
 package net.sourceforge.phpdt.internal.corext.textmanipulation;
 
-//import org.eclipse.jdt.core.ISourceRange;
+//import net.sourceforge.phpdt.core.ISourceRange;
 //
-//import org.eclipse.jdt.internal.corext.Assert;
+//import net.sourceforge.phpdt.internal.corext.Assert;
 
 public final class TextRange {
 
index 60fc71d..f9c116b 100644 (file)
@@ -12,12 +12,12 @@ package net.sourceforge.phpdt.internal.corext.util;
 
 import java.util.Map;
 
-import net.sourceforge.phpdt.core.IJavaProject;
 import net.sourceforge.phpdt.core.ToolFactory;
-import net.sourceforge.phpdt.core.formatter.CodeFormatter;
+import net.sourceforge.phpdt.core.formatter.DefaultCodeFormatterConstants;
 import net.sourceforge.phpdt.internal.corext.Assert;
 import net.sourceforge.phpeclipse.PHPeclipsePlugin;
 
+import org.eclipse.core.runtime.Preferences;
 import org.eclipse.jface.text.BadLocationException;
 import org.eclipse.jface.text.BadPositionCategoryException;
 import org.eclipse.jface.text.DefaultPositionUpdater;
@@ -42,10 +42,10 @@ public class CodeFormatterUtil {
                // axelcl change end
        } 
                
-//     public static int getTabWidth() {
-//             Preferences preferences= JavaCore.getPlugin().getPluginPreferences();
-//             return preferences.getInt(DefaultCodeFormatterConstants.FORMATTER_TAB_SIZE);
-//     }
+       public static int getTabWidth() {
+               Preferences preferences= PHPeclipsePlugin.getDefault().getPluginPreferences();
+               return preferences.getInt(DefaultCodeFormatterConstants.FORMATTER_TAB_SIZE);
+       }
 
        // transition code
 
index 6ed53f7..1e16693 100644 (file)
@@ -16,7 +16,7 @@ import java.io.Reader;
 
 import net.sourceforge.phpeclipse.PHPeclipsePlugin;
 
-//import org.eclipse.jdt.internal.ui.JavaPlugin;
+//import net.sourceforge.phpdt.internal.ui.JavaPlugin;
 
 public class IOCloser {
        public static void perform(Reader reader, InputStream stream) {
index 6f19917..a098975 100644 (file)
@@ -692,7 +692,7 @@ public class JavaModelUtil {
        private static final String EMPTY_ARGUMENT = "   "; //$NON-NLS-1$
        
        /**
-        * Copied from org.eclipse.jdt.internal.core.ProjectPrefUtil;
+        * Copied from net.sourceforge.phpdt.internal.core.ProjectPrefUtil;
         */
        public static String[] getProblemArgumentsFromMarker(String argumentsString){
                if (argumentsString == null) return null;
index b5a8f8f..bba5607 100644 (file)
@@ -380,7 +380,7 @@ AppearancePreferencePage.description= Appearance of Java elements in viewers:
 AppearancePreferencePage.methodreturntype.label= Show &method return types
 AppearancePreferencePage.overrideindicator.label= Show &override indicators in outline and hierarchy
 AppearancePreferencePage.pkgNamePatternEnable.label= &Compress package name segments (except for the last one)
-AppearancePreferencePage.pkgNamePattern.label= Com&pression pattern (e.g. given package name 'org.eclipse.jdt' pattern '.' will compress it to '..jdt',  '0' to 'jdt', '1~.' to 'o~.e~.jdt'):
+AppearancePreferencePage.pkgNamePattern.label= Com&pression pattern (e.g. given package name 'net.sourceforge.phpdt' pattern '.' will compress it to '..jdt',  '0' to 'jdt', '1~.' to 'o~.e~.jdt'):
 
 AppearancePreferencePage.showMembersInPackagesView=S&how members in Package Explorer
 AppearancePreferencePage.stackViewsVerticallyInTheJavaBrowsingPerspective=&Stack views vertically in the Java Browsing perspective
index 68c90df..500644f 100644 (file)
@@ -50,8 +50,8 @@ public class AddBlockCommentAction extends BlockCommentAction {
   }
 
   /*
-   * @see org.eclipse.jdt.internal.ui.actions.BlockCommentAction#runInternal(org.eclipse.jface.text.ITextSelection,
-   *      org.eclipse.jface.text.IDocumentExtension3, org.eclipse.jdt.internal.ui.actions.BlockCommentAction.Edit.EditFactory)
+   * @see net.sourceforge.phpdt.internal.ui.actions.BlockCommentAction#runInternal(org.eclipse.jface.text.ITextSelection,
+   *      org.eclipse.jface.text.IDocumentExtension3, net.sourceforge.phpdt.internal.ui.actions.BlockCommentAction.Edit.EditFactory)
    */
   protected void runInternal(ITextSelection selection, IDocumentExtension3 docExtension, Edit.EditFactory factory)
       throws BadLocationException, BadPartitioningException {
@@ -198,7 +198,7 @@ public class AddBlockCommentAction extends BlockCommentAction {
   }
 
   /*
-   * @see org.eclipse.jdt.internal.ui.actions.BlockCommentAction#validSelection(org.eclipse.jface.text.ITextSelection)
+   * @see net.sourceforge.phpdt.internal.ui.actions.BlockCommentAction#validSelection(org.eclipse.jface.text.ITextSelection)
    */
   protected boolean isValidSelection(ITextSelection selection) {
     return selection != null && !selection.isEmpty() && selection.getLength() > 0;
index ea5e0b2..c58c0ad 100644 (file)
@@ -45,7 +45,7 @@ public class RemoveBlockCommentAction extends BlockCommentAction {
        }
        
        /*
-        * @see org.eclipse.jdt.internal.ui.actions.AddBlockCommentAction#runInternal(org.eclipse.jface.text.ITextSelection, org.eclipse.jface.text.IDocumentExtension3, org.eclipse.jdt.internal.ui.actions.AddBlockCommentAction.Edit.EditFactory)
+        * @see net.sourceforge.phpdt.internal.ui.actions.AddBlockCommentAction#runInternal(org.eclipse.jface.text.ITextSelection, org.eclipse.jface.text.IDocumentExtension3, net.sourceforge.phpdt.internal.ui.actions.AddBlockCommentAction.Edit.EditFactory)
         */
        protected void runInternal(ITextSelection selection, IDocumentExtension3 docExtension, Edit.EditFactory factory) throws BadPartitioningException, BadLocationException {
                List edits= new LinkedList();
@@ -79,7 +79,7 @@ public class RemoveBlockCommentAction extends BlockCommentAction {
        }
 
        /*
-        * @see org.eclipse.jdt.internal.ui.actions.AddBlockCommentAction#validSelection(org.eclipse.jface.text.ITextSelection)
+        * @see net.sourceforge.phpdt.internal.ui.actions.AddBlockCommentAction#validSelection(org.eclipse.jface.text.ITextSelection)
         */
        protected boolean isValidSelection(ITextSelection selection) {
                return selection != null && !selection.isEmpty();
index 249c97c..2d21450 100644 (file)
@@ -31,7 +31,7 @@ import org.eclipse.ui.activities.WorkbenchActivityHelper;
 
 /**
  * Represents a custom filter which is provided by the
- * "org.eclipse.jdt.ui.javaElementFilters" extension point.
+ * "net.sourceforge.phpdt.ui.javaElementFilters" extension point.
  * 
  * since 2.0
  */
@@ -99,9 +99,9 @@ public class FilterDescriptor implements Comparable, IPluginContribution {
        private FilterDescriptor(IConfigurationElement element) {
                fElement= element;
                // it is either a pattern filter or a custom filter
-               Assert.isTrue(isPatternFilter() ^ isCustomFilter(), "An extension for extension-point org.eclipse.jdt.ui.javaElementFilters does not specify a correct filter"); //$NON-NLS-1$
-               Assert.isNotNull(getId(), "An extension for extension-point org.eclipse.jdt.ui.javaElementFilters does not provide a valid ID"); //$NON-NLS-1$
-               Assert.isNotNull(getName(), "An extension for extension-point org.eclipse.jdt.ui.javaElementFilters does not provide a valid name"); //$NON-NLS-1$
+               Assert.isTrue(isPatternFilter() ^ isCustomFilter(), "An extension for extension-point net.sourceforge.phpdt.ui.javaElementFilters does not specify a correct filter"); //$NON-NLS-1$
+               Assert.isNotNull(getId(), "An extension for extension-point net.sourceforge.phpdt.ui.javaElementFilters does not provide a valid ID"); //$NON-NLS-1$
+               Assert.isNotNull(getName(), "An extension for extension-point net.sourceforge.phpdt.ui.javaElementFilters does not provide a valid name"); //$NON-NLS-1$
        }
 
        /**
index 7687a76..5904766 100644 (file)
@@ -19,6 +19,6 @@ CustomFiltersDialog.DeselectAllButton.label= &Deselect All
 
 OpenCustomFiltersDialogAction.text= &Filters...
 
-FilterDescriptor.filterDescriptionCreationError.message= One of the extensions for extension-point org.eclipse.jdt.ui.javaElementFilters is incorrect.
+FilterDescriptor.filterDescriptionCreationError.message= One of the extensions for extension-point net.sourceforge.phpdt.ui.javaElementFilters is incorrect.
 FilterDescriptor.filterCreationError.title= Filter Creation Error
-FilterDescriptor.filterCreationError.message= The org.eclipse.jdt.ui.javaElementFilters plug-in extension "{0}" specifies a viewer filter class which does not exist.
+FilterDescriptor.filterCreationError.message= The net.sourceforge.phpdt.ui.javaElementFilters plug-in extension "{0}" specifies a viewer filter class which does not exist.
diff --git a/net.sourceforge.phpeclipse/src/net/sourceforge/phpdt/internal/ui/packageview/PackagesMessages.properties b/net.sourceforge.phpeclipse/src/net/sourceforge/phpdt/internal/ui/packageview/PackagesMessages.properties
deleted file mode 100644 (file)
index 01bac3f..0000000
+++ /dev/null
@@ -1,97 +0,0 @@
-###############################################################################
-# Copyright (c) 2000, 2003 IBM Corporation and others.
-# All rights reserved. This program and the accompanying materials 
-# are made available under the terms of the Common Public License v1.0
-# which accompanies this distribution, and is available at
-# http://www.eclipse.org/legal/cpl-v10.html
-# 
-# Contributors:
-#     IBM Corporation - initial API and implementation
-###############################################################################
-
-BuildGroup.buildProject=&Build Project
-BuildGroup.rebuildProject=Rebuild Pro&ject
-
-DragAdapter.deleting=Deleting ...
-DragAdapter.problem=Problem while moving or copying files.
-DragAdapter.problemTitle=Drag & Drop
-DragAdapter.refreshing=Refreshing...
-
-DropAdapter.alreadyExists={0} already exists. Would you like to overwrite it?
-DropAdapter.errorMessage=Error while moving or copying files.
-DropAdapter.errorSame=Cannot copy {0}: the destination folder is the same as the source folder.
-DropAdapter.errorSubfolder=Cannot copy {0}: the destination folder is a subfolder of the source folder.
-DropAdapter.errorTitle=Drag & Drop
-DropAdapter.question=Question
-
-FilterSelectionAction.apply.label=Select &filters to apply (matching files will be hidden):
-FilterSelectionAction.apply.toolTip=Apply the defined filters
-FilterSelectionAction.dialog.title=Package Explorer Filters
-
-GotoPackage.action.label=&Package...
-GotoPackage.dialog.message=&Choose a package (? = any character, * = any string):
-GotoPackage.dialog.title=Go to Package
-GotoPackage.action.description=Searches for and selects the package entered.
-
-GotoType.action.label=&Type...
-GotoType.action.description=Searches for and selects the type entered.
-GotoType.dialog.message=&Choose a type (? = any character, * = any string):
-GotoType.dialog.title=Go to Type
-GotoType.error.message=An exception occurred while searching for types
-
-GotoResource.action.label=&Resource...
-GotoResource.dialog.title= Go to Resource
-
-OpenResource.action.description=Open the selected file in an editor.
-OpenResource.action.label=&Open
-OpenResource.error.message=Cannot open Java editor.
-OpenResource.error.messageArgs=Cannot open Java editor on {0}. {1}
-OpenResource.error.messageProblems=Problems Opening Editor.
-OpenResource.error.title=Open Resource
-
-Sorter.expectPackage=expects a PackageFragment or PackageFragmentRoot
-
-ShowLibraries.hideReferencedLibs=Hide referenced libraries
-ShowLibraries.showReferencedLibs=Show referenced libraries
-
-ShowBinaries.hideBinaryProjects=Hide library projects
-ShowBinaries.showBinaryProjects=Show library projects
-
-ShowInNavigator.description=Show the selected object(s) in the navigator
-ShowInNavigator.error=Cannot open navigator
-ShowInNavigator.label=Show in &Navigator
-
-PackageExplorer.filters=&Filters...
-PackageExplorer.gotoTitle=G&o To
-PackageExplorer.openPerspective=Open &Perspective
-PackageExplorer.refactoringTitle=&Refactor
-PackageExplorer.referencedLibs=Show Referenced &Libraries
-PackageExplorer.binaryProjects=Show Library Projects
-PackageExplorer.title=Package Explorer
-PackageExplorer.argTitle={0}: {1}
-PackageExplorer.toolTip= Working Set: {0}
-PackageExplorer.toolTip2= {0} - Working Set: {1}
-PackageExplorer.openWith=Open Wit&h
-
-PackageExplorer.element_not_present=Cannot reveal {0} in Package Explorer.  The element may be hidden by a filter or an active working set.
-
-SelectionTransferDropAdapter.error.title=Drag and drop
-SelectionTransferDropAdapter.error.message=Unexpected exception. See log for details
-SelectionTransferDropAdapter.dialog.title=Move
-SelectionTransferDropAdapter.dialog.preview.label=Pre&view
-SelectionTransferDropAdapter.dialog.question=Do you want to update references to the moved element(s)? Click 'Preview' to see the preview of the reference updates.
-
-CollapseAllAction.label=Collapse All
-CollapseAllAction.tooltip=Collapse All
-CollapseAllAction.description=Collapse All
-
-ToggleLinkingAction.label=Lin&k With Editor
-ToggleLinkingAction.tooltip=Link with Editor
-ToggleLinkingAction.description=Link with active editor
-
-LayoutActionGroup.label= &Layout
-LayoutActionGroup.flatLayoutAction.label= &Flat
-LayoutActionGroup.hierarchicalLayoutAction.label= &Hierarchical
-
-ClassPathContainer.error_label=Could not resolve class path entry
-PackageExplorerPart.workspace=Workspace
diff --git a/net.sourceforge.phpeclipse/src/net/sourceforge/phpdt/internal/ui/packageview/SelectionTransferDragAdapter.java b/net.sourceforge.phpeclipse/src/net/sourceforge/phpdt/internal/ui/packageview/SelectionTransferDragAdapter.java
deleted file mode 100644 (file)
index c0fca07..0000000
+++ /dev/null
@@ -1,43 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2000, 2003 IBM Corporation and others.
- * All rights reserved. This program and the accompanying materials 
- * are made available under the terms of the Common Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/cpl-v10.html
- * 
- * Contributors:
- *     IBM Corporation - initial API and implementation
- *******************************************************************************/
-package net.sourceforge.phpdt.internal.ui.packageview;
-
-import java.util.Iterator;
-
-import net.sourceforge.phpdt.core.IJavaElement;
-import net.sourceforge.phpdt.core.IPackageFragmentRoot;
-
-import net.sourceforge.phpdt.internal.ui.dnd.BasicSelectionTransferDragAdapter;
-import org.eclipse.jface.viewers.ISelection;
-import org.eclipse.jface.viewers.ISelectionProvider;
-import org.eclipse.jface.viewers.IStructuredSelection;
-
-public class SelectionTransferDragAdapter extends BasicSelectionTransferDragAdapter {
-               
-       public SelectionTransferDragAdapter(ISelectionProvider provider) {
-               super(provider);
-       }
-
-       protected boolean isDragable(ISelection selection) {
-               if (selection instanceof IStructuredSelection) {
-                       for (Iterator iter= ((IStructuredSelection)selection).iterator(); iter.hasNext();) {
-                               Object element= iter.next();
-                               if (element instanceof IJavaElement) {
-                                       IPackageFragmentRoot root= (IPackageFragmentRoot)((IJavaElement)element).getAncestor(IJavaElement.PACKAGE_FRAGMENT_ROOT);
-                                       if (root != null && root.isArchive())
-                                               return false;
-                               }
-                       }
-                       return true;
-               }
-               return false;
-       }
-}
index c263688..e2bf8be 100644 (file)
@@ -25,7 +25,7 @@ import org.eclipse.ui.help.WorkbenchHelp;
 
 /**
  * Abstract preference page which is used to wrap a
- * {@link org.eclipse.jdt.internal.ui.preferences.IPreferenceConfigurationBlock}.
+ * {@link net.sourceforge.phpdt.internal.ui.preferences.IPreferenceConfigurationBlock}.
  * 
  * @since 3.0
  */
index 019607d..3409f64 100644 (file)
@@ -27,28 +27,28 @@ import net.sourceforge.phpeclipse.PHPeclipsePlugin;
 public class CodeAssistPreferencePage extends AbstractConfigurationBlockPreferencePage {
 
        /*
-        * @see org.eclipse.jdt.internal.ui.preferences.AbstractConfigureationBlockPreferencePage#getHelpId()
+        * @see net.sourceforge.phpdt.internal.ui.preferences.AbstractConfigureationBlockPreferencePage#getHelpId()
         */
        protected String getHelpId() {
                return IJavaHelpContextIds.JAVA_EDITOR_PREFERENCE_PAGE;
        }
 
        /*
-        * @see org.eclipse.jdt.internal.ui.preferences.AbstractConfigurationBlockPreferencePage#setDescription()
+        * @see net.sourceforge.phpdt.internal.ui.preferences.AbstractConfigurationBlockPreferencePage#setDescription()
         */
        protected void setDescription() {
                // This page has no description
        }
        
        /*
-        * @see org.eclipse.jdt.internal.ui.preferences.AbstractConfigurationBlockPreferencePage#setPreferenceStore()
+        * @see net.sourceforge.phpdt.internal.ui.preferences.AbstractConfigurationBlockPreferencePage#setPreferenceStore()
         */
        protected void setPreferenceStore() {
                setPreferenceStore(PHPeclipsePlugin.getDefault().getPreferenceStore());
        }
 
        /*
-        * @see org.eclipse.jdt.internal.ui.preferences.AbstractConfigureationBlockPreferencePage#createConfigurationBlock(org.eclipse.jdt.internal.ui.preferences.OverlayPreferenceStore)
+        * @see net.sourceforge.phpdt.internal.ui.preferences.AbstractConfigureationBlockPreferencePage#createConfigurationBlock(net.sourceforge.phpdt.internal.ui.preferences.OverlayPreferenceStore)
         */
        protected IPreferenceConfigurationBlock createConfigurationBlock(OverlayPreferenceStore overlayPreferenceStore) {
                return new CodeAssistConfigurationBlock(this, overlayPreferenceStore);
index 64f687b..16b4c43 100644 (file)
@@ -83,7 +83,7 @@ public class CompilerPreferencePage extends PreferencePage implements IWorkbench
        }
        
        /* (non-Javadoc)
-        * @see org.eclipse.jdt.internal.ui.wizards.IStatusChangeListener#statusChanged(org.eclipse.core.runtime.IStatus)
+        * @see net.sourceforge.phpdt.internal.ui.wizards.IStatusChangeListener#statusChanged(org.eclipse.core.runtime.IStatus)
         */
        public void statusChanged(IStatus status) {
                setValid(!status.matches(IStatus.ERROR));
index c64b204..40f2f61 100644 (file)
@@ -138,7 +138,7 @@ public class CompilerPropertyPage extends PropertyPage {
        
        private void doDialogFieldChanged(DialogField field) {
                if (field == fChangeWorkspaceSettings) {
-                       String id= "org.eclipse.jdt.ui.preferences.CompilerPreferencePage"; //$NON-NLS-1$
+                       String id= "net.sourceforge.phpdt.ui.preferences.CompilerPreferencePage"; //$NON-NLS-1$
                        CompilerPreferencePage page= new CompilerPreferencePage();
                        showPreferencePage(id, page);
                } else {
index b0a223c..a1dfb5d 100644 (file)
@@ -64,7 +64,7 @@ class FoldingConfigurationBlock {
                }
                
                /*
-                * @see org.eclipse.jdt.internal.ui.text.folding.IJavaFoldingPreferences#createControl(org.eclipse.swt.widgets.Group)
+                * @see net.sourceforge.phpdt.internal.ui.text.folding.IJavaFoldingPreferences#createControl(org.eclipse.swt.widgets.Group)
                 */
                public Control createControl(Composite composite) {
                        Composite inner= new Composite(composite, SWT.NONE);
index 423f680..5690e85 100644 (file)
@@ -17,7 +17,7 @@ import org.eclipse.swt.widgets.Control;
 
 /**
  * Interface for preference configuration blocks which can either be
- * wrapped by a {@link org.eclipse.jdt.internal.ui.preferences.AbstractConfigurationBlockPreferencePage}
+ * wrapped by a {@link net.sourceforge.phpdt.internal.ui.preferences.AbstractConfigurationBlockPreferencePage}
  * or be included some preference page.
  * <p>
  * Clients may implement this interface.
diff --git a/net.sourceforge.phpeclipse/src/net/sourceforge/phpdt/internal/ui/preferences/JavaPreferencesSettings.java b/net.sourceforge.phpeclipse/src/net/sourceforge/phpdt/internal/ui/preferences/JavaPreferencesSettings.java
new file mode 100644 (file)
index 0000000..3ea2cf3
--- /dev/null
@@ -0,0 +1,65 @@
+/*******************************************************************************
+ * Copyright (c) 2000, 2004 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials 
+ * are made available under the terms of the Common Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/cpl-v10.html
+ * 
+ * Contributors:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+package net.sourceforge.phpdt.internal.ui.preferences;
+
+import java.util.StringTokenizer;
+
+import org.eclipse.jface.preference.IPreferenceStore;
+
+import net.sourceforge.phpdt.ui.PreferenceConstants;
+
+import net.sourceforge.phpdt.internal.corext.codemanipulation.CodeGenerationSettings;
+import net.sourceforge.phpdt.internal.corext.util.CodeFormatterUtil;
+public class JavaPreferencesSettings  {
+       
+       public static CodeGenerationSettings getCodeGenerationSettings() {
+               IPreferenceStore store= PreferenceConstants.getPreferenceStore();
+               
+               CodeGenerationSettings res= new CodeGenerationSettings();
+               res.createComments= store.getBoolean(PreferenceConstants.CODEGEN_ADD_COMMENTS);
+               res.useKeywordThis= store.getBoolean(PreferenceConstants.CODEGEN_KEYWORD_THIS);
+               res.importOrder= getImportOrderPreference(store);
+               res.importThreshold= getImportNumberThreshold(store);
+               res.tabWidth= CodeFormatterUtil.getTabWidth();
+               return res;
+       }
+
+       public static int getImportNumberThreshold(IPreferenceStore prefs) {
+               int threshold= prefs.getInt(PreferenceConstants.ORGIMPORTS_ONDEMANDTHRESHOLD);
+               if (threshold < 0) {
+                       threshold= Integer.MAX_VALUE;
+               }
+               return threshold;
+       }
+
+
+       public static String[] getImportOrderPreference(IPreferenceStore prefs) {
+               String str= prefs.getString(PreferenceConstants.ORGIMPORTS_IMPORTORDER);
+               if (str != null) {
+                       return unpackList(str, ";"); //$NON-NLS-1$
+               }
+               return new String[0];
+       }
+               
+       private static String[] unpackList(String str, String separator) {
+               StringTokenizer tok= new StringTokenizer(str, separator); //$NON-NLS-1$
+               int nTokens= tok.countTokens();
+               String[] res= new String[nTokens];
+               for (int i= 0; i < nTokens; i++) {
+                       res[i]= tok.nextToken().trim();
+               }
+               return res;
+       }
+       
+               
+}
+
index 5ba2d19..bd11016 100644 (file)
@@ -283,7 +283,7 @@ AppearancePreferencePage.description= Appearance of PHP elements in viewers:
 AppearancePreferencePage.methodreturntype.label= Show &method return types
 AppearancePreferencePage.overrideindicator.label= Show &override indicators in outline and hierarchy
 AppearancePreferencePage.pkgNamePatternEnable.label= &Compress all package name segments, except the final segment
-AppearancePreferencePage.pkgNamePattern.label= Com&pression pattern (e.g. given package name 'org.eclipse.jdt' pattern '.' will compress it to '..jdt',  '0' to 'jdt', '1~.' to 'o~.e~.jdt'):
+AppearancePreferencePage.pkgNamePattern.label= Com&pression pattern (e.g. given package name 'net.sourceforge.phpdt' pattern '.' will compress it to '..jdt',  '0' to 'jdt', '1~.' to 'o~.e~.jdt'):
 AppearancePreferencePage.showMembersInPackagesView=S&how members in Package Explorer
 AppearancePreferencePage.stackViewsVerticallyInTheJavaBrowsingPerspective=&Stack views vertically in the Java Browsing perspective
 AppearancePreferencePage.note=Note:
index 169901a..a48fb80 100644 (file)
@@ -262,7 +262,7 @@ public class SpellingConfigurationBlock extends OptionsConfigurationBlock {
        }
 
        /*
-        * @see org.eclipse.jdt.internal.ui.preferences.OptionsConfigurationBlock#createContents(org.eclipse.swt.widgets.Composite)
+        * @see net.sourceforge.phpdt.internal.ui.preferences.OptionsConfigurationBlock#createContents(org.eclipse.swt.widgets.Composite)
         */
        protected Control createContents(final Composite parent) {
 
@@ -363,7 +363,7 @@ public class SpellingConfigurationBlock extends OptionsConfigurationBlock {
        }
 
        /*
-        * @see org.eclipse.jdt.internal.ui.preferences.OptionsConfigurationBlock#getDefaultOptions()
+        * @see net.sourceforge.phpdt.internal.ui.preferences.OptionsConfigurationBlock#getDefaultOptions()
         */
        protected Map getDefaultOptions() {
 
@@ -378,14 +378,14 @@ public class SpellingConfigurationBlock extends OptionsConfigurationBlock {
        }
 
        /*
-        * @see org.eclipse.jdt.internal.ui.preferences.OptionsConfigurationBlock#getFullBuildDialogStrings(boolean)
+        * @see net.sourceforge.phpdt.internal.ui.preferences.OptionsConfigurationBlock#getFullBuildDialogStrings(boolean)
         */
        protected final String[] getFullBuildDialogStrings(final boolean workspace) {
                return null;
        }
 
        /*
-        * @see org.eclipse.jdt.internal.ui.preferences.OptionsConfigurationBlock#getOptions(boolean)
+        * @see net.sourceforge.phpdt.internal.ui.preferences.OptionsConfigurationBlock#getOptions(boolean)
         */
        protected Map getOptions(final boolean inherit) {
 
@@ -415,7 +415,7 @@ public class SpellingConfigurationBlock extends OptionsConfigurationBlock {
        }
 
        /*
-        * @see org.eclipse.jdt.internal.ui.preferences.OptionsConfigurationBlock#setOptions(java.util.Map)
+        * @see net.sourceforge.phpdt.internal.ui.preferences.OptionsConfigurationBlock#setOptions(java.util.Map)
         */
        protected void setOptions(final Map options) {
 
@@ -427,7 +427,7 @@ public class SpellingConfigurationBlock extends OptionsConfigurationBlock {
        }
 
        /*
-        * @see org.eclipse.jdt.internal.ui.preferences.OptionsConfigurationBlock#validateSettings(java.lang.String,java.lang.String)
+        * @see net.sourceforge.phpdt.internal.ui.preferences.OptionsConfigurationBlock#validateSettings(java.lang.String,java.lang.String)
         */
        protected void validateSettings(final String key, final String value) {
 
index 3ab69b1..e4e8b8e 100644 (file)
@@ -92,7 +92,7 @@ public class SpellingPreferencePage extends PreferencePage implements IWorkbench
        }
 
        /*
-        * @see org.eclipse.jdt.internal.ui.wizards.IStatusChangeListener#statusChanged(org.eclipse.core.runtime.IStatus)
+        * @see net.sourceforge.phpdt.internal.ui.wizards.IStatusChangeListener#statusChanged(org.eclipse.core.runtime.IStatus)
         */
        public void statusChanged(final IStatus status) {
                setValid(!status.matches(IStatus.ERROR));
index 2a0196c..381482d 100644 (file)
@@ -217,7 +217,7 @@ public class TodoTaskConfigurationBlock extends OptionsConfigurationBlock {
        }       
 
        /* (non-Javadoc)
-        * @see org.eclipse.jdt.internal.ui.preferences.OptionsConfigurationBlock#performOk(boolean)
+        * @see net.sourceforge.phpdt.internal.ui.preferences.OptionsConfigurationBlock#performOk(boolean)
         */
        public boolean performOk(boolean enabled) {
                packTodoTasks();
@@ -237,7 +237,7 @@ public class TodoTaskConfigurationBlock extends OptionsConfigurationBlock {
        }       
        
        /* (non-Javadoc)
-        * @see org.eclipse.jdt.internal.ui.preferences.OptionsConfigurationBlock#updateControls()
+        * @see net.sourceforge.phpdt.internal.ui.preferences.OptionsConfigurationBlock#updateControls()
         */
        protected void updateControls() {
                unpackTodoTasks();
index 5d7c765..60b3716 100644 (file)
@@ -29,7 +29,7 @@ import org.eclipse.ui.help.WorkbenchHelp;
  */
 public class TodoTaskPreferencePage extends PreferencePage implements IWorkbenchPreferencePage, IStatusChangeListener {
 
-       public static final String ID= "org.eclipse.jdt.ui.preferences.TodoTaskPreferencePage"; //$NON-NLS-1$
+       public static final String ID= "net.sourceforge.phpdt.ui.preferences.TodoTaskPreferencePage"; //$NON-NLS-1$
 
        private TodoTaskConfigurationBlock fConfigurationBlock;
 
@@ -86,7 +86,7 @@ public class TodoTaskPreferencePage extends PreferencePage implements IWorkbench
        }
 
        /* (non-Javadoc)
-        * @see org.eclipse.jdt.internal.ui.wizards.IStatusChangeListener#statusChanged(org.eclipse.core.runtime.IStatus)
+        * @see net.sourceforge.phpdt.internal.ui.wizards.IStatusChangeListener#statusChanged(org.eclipse.core.runtime.IStatus)
         */
        public void statusChanged(IStatus status) {
                setValid(!status.matches(IStatus.ERROR));
index 06e67f9..245aaf3 100644 (file)
@@ -34,7 +34,7 @@ import org.eclipse.swt.widgets.Shell;
 public class CustomSourceInformationControl extends SourceViewerInformationControl {
 
        /** The font name for the viewer font - the same as the java editor's. */
-       private static final String SYMBOLIC_FONT_NAME= "org.eclipse.jdt.ui.editors.textfont"; //$NON-NLS-1$
+       private static final String SYMBOLIC_FONT_NAME= "net.sourceforge.phpdt.ui.editors.textfont"; //$NON-NLS-1$
        
        /** The maximum width of the control, set in <code>setSizeConstraints(int, int)</code>. */
        int fMaxWidth= Integer.MAX_VALUE;
@@ -200,7 +200,7 @@ public class CustomSourceInformationControl extends SourceViewerInformationContr
        }
        
        /*
-        * @see org.eclipse.jdt.internal.ui.text.java.hover.SourceViewerInformationControl#hasContents()
+        * @see net.sourceforge.phpdt.internal.ui.text.java.hover.SourceViewerInformationControl#hasContents()
         */
        public boolean hasContents() {
                return super.hasContents() && fMaxWidth > 0;
index 14a9b0b..eb4067f 100644 (file)
@@ -13,6 +13,8 @@ package net.sourceforge.phpdt.internal.ui.text;
 import java.text.BreakIterator;
 import java.text.CharacterIterator;
 
+import net.sourceforge.phpdt.internal.compiler.parser.Scanner;
+
 import org.eclipse.jface.text.Assert;
 
 
@@ -84,7 +86,7 @@ public class JavaBreakIterator extends BreakIterator {
                private static final char EXIT= '\1';
                
                /*
-                * @see org.eclipse.jdt.internal.ui.text.JavaBreakIterator.Run#init()
+                * @see net.sourceforge.phpdt.internal.ui.text.JavaBreakIterator.Run#init()
                 */
                protected void init() {
                        super.init();
@@ -92,7 +94,7 @@ public class JavaBreakIterator extends BreakIterator {
                }
                
                /*
-                * @see org.eclipse.jdt.internal.ui.text.JavaBreakIterator.Run#consume(char)
+                * @see net.sourceforge.phpdt.internal.ui.text.JavaBreakIterator.Run#consume(char)
                 */
                protected boolean consume(char ch) {
                        if (!isValid(ch) || fState == EXIT)
@@ -118,10 +120,10 @@ public class JavaBreakIterator extends BreakIterator {
        
        static final class Identifier extends Run {
                /*
-                * @see org.eclipse.jdt.internal.ui.text.JavaBreakIterator.Run#isValid(char)
+                * @see net.sourceforge.phpdt.internal.ui.text.JavaBreakIterator.Run#isValid(char)
                 */
                protected boolean isValid(char ch) {
-                       return Character.isJavaIdentifierPart(ch);
+                       return Scanner.isPHPIdentifierPart(ch);
                }
        }
        
@@ -151,7 +153,7 @@ public class JavaBreakIterator extends BreakIterator {
                };
                
                /*
-                * @see org.eclipse.jdt.internal.ui.text.JavaBreakIterator.Run#init()
+                * @see net.sourceforge.phpdt.internal.ui.text.JavaBreakIterator.Run#init()
                 */
                protected void init() {
                        super.init();
@@ -159,7 +161,7 @@ public class JavaBreakIterator extends BreakIterator {
                }
                
                /*
-                * @see org.eclipse.jdt.internal.ui.text.JavaBreakIterator.Run#consumes(char)
+                * @see net.sourceforge.phpdt.internal.ui.text.JavaBreakIterator.Run#consumes(char)
                 */
                protected boolean consume(char ch) {
                        int kind= getKind(ch);
@@ -191,25 +193,25 @@ public class JavaBreakIterator extends BreakIterator {
                                return K_UPPER;
                        if (Character.isLowerCase(ch))
                                return K_LOWER;
-                       if (Character.isJavaIdentifierPart(ch)) // _, digits...
+                       if (Scanner.isPHPIdentifierPart(ch)) // _, digits...
                                return K_OTHER;
                        return K_INVALID;
                }
 
                /*
-                * @see org.eclipse.jdt.internal.ui.text.JavaBreakIterator.Run#isValid(char)
+                * @see net.sourceforge.phpdt.internal.ui.text.JavaBreakIterator.Run#isValid(char)
                 */
                protected boolean isValid(char ch) {
-                       return Character.isJavaIdentifierPart(ch);
+                       return Scanner.isPHPIdentifierPart(ch);
                }
        }
 
        static final class Other extends Run {
                /*
-                * @see org.eclipse.jdt.internal.ui.text.JavaBreakIterator.Run#isValid(char)
+                * @see net.sourceforge.phpdt.internal.ui.text.JavaBreakIterator.Run#isValid(char)
                 */
                protected boolean isValid(char ch) {
-                       return !Character.isWhitespace(ch) && !Character.isJavaIdentifierPart(ch);
+                       return !Character.isWhitespace(ch) && !Scanner.isPHPIdentifierPart(ch);
                }
        }
        
index ebeef70..d7ef909 100644 (file)
@@ -12,6 +12,8 @@ package net.sourceforge.phpdt.internal.ui.text;
 
 import java.util.Arrays;
 
+import net.sourceforge.phpdt.internal.compiler.parser.Scanner;
+
 import org.eclipse.jface.text.Assert;
 import org.eclipse.jface.text.BadLocationException;
 import org.eclipse.jface.text.IDocument;
@@ -75,7 +77,7 @@ public class JavaHeuristicScanner implements Symbols {
         */
        private static class NonWhitespace implements StopCondition {
                /*
-                * @see org.eclipse.jdt.internal.ui.text.JavaHeuristicScanner.StopCondition#stop(char)
+                * @see net.sourceforge.phpdt.internal.ui.text.JavaHeuristicScanner.StopCondition#stop(char)
                 */
                public boolean stop(char ch, int position, boolean forward) {
                        return !Character.isWhitespace(ch);
@@ -89,7 +91,7 @@ public class JavaHeuristicScanner implements Symbols {
         */
        private class NonWhitespaceDefaultPartition extends NonWhitespace {
                /*
-                * @see org.eclipse.jdt.internal.ui.text.JavaHeuristicScanner.StopCondition#stop(char)
+                * @see net.sourceforge.phpdt.internal.ui.text.JavaHeuristicScanner.StopCondition#stop(char)
                 */
                public boolean stop(char ch, int position, boolean forward) {
                        return super.stop(ch, position, true) && isDefaultPartition(position);
@@ -97,14 +99,14 @@ public class JavaHeuristicScanner implements Symbols {
        }
        
        /**
-        * Stops upon a non-java identifier (as defined by {@link Character#isJavaIdentifierPart(char)}) character. 
+        * Stops upon a non-java identifier (as defined by {@link Scanner#isPHPIdentifierPart(char)}) character. 
         */
        private static class NonJavaIdentifierPart implements StopCondition {
                /*
-                * @see org.eclipse.jdt.internal.ui.text.JavaHeuristicScanner.StopCondition#stop(char)
+                * @see net.sourceforge.phpdt.internal.ui.text.JavaHeuristicScanner.StopCondition#stop(char)
                 */
                public boolean stop(char ch, int position, boolean forward) {
-                       return !Character.isJavaIdentifierPart(ch);
+                       return !Scanner.isPHPIdentifierPart(ch);
                }
        }
        
@@ -115,7 +117,7 @@ public class JavaHeuristicScanner implements Symbols {
         */
        private class NonJavaIdentifierPartDefaultPartition extends NonJavaIdentifierPart {
                /*
-                * @see org.eclipse.jdt.internal.ui.text.JavaHeuristicScanner.StopCondition#stop(char)
+                * @see net.sourceforge.phpdt.internal.ui.text.JavaHeuristicScanner.StopCondition#stop(char)
                 */
                public boolean stop(char ch, int position, boolean forward) {
                        return super.stop(ch, position, true) || !isDefaultPartition(position);
@@ -148,7 +150,7 @@ public class JavaHeuristicScanner implements Symbols {
                }
                
                /*
-                * @see org.eclipse.jdt.internal.ui.text.JavaHeuristicScanner.StopCondition#stop(char, int)
+                * @see net.sourceforge.phpdt.internal.ui.text.JavaHeuristicScanner.StopCondition#stop(char, int)
                 */
                public boolean stop(char ch, int position, boolean forward) {
                        return Arrays.binarySearch(fChars, ch) >= 0 && isDefaultPartition(position);
@@ -180,7 +182,7 @@ public class JavaHeuristicScanner implements Symbols {
                }
 
                /*
-                * @see org.eclipse.jdt.internal.ui.text.JavaHeuristicScanner.StopCondition#stop(char, int)
+                * @see net.sourceforge.phpdt.internal.ui.text.JavaHeuristicScanner.StopCondition#stop(char, int)
                 */
                public boolean stop(char ch, int position, boolean forward) {
                        
@@ -332,7 +334,7 @@ public class JavaHeuristicScanner implements Symbols {
                }
                
                // else
-               if (Character.isJavaIdentifierPart(fChar)) {
+               if (Scanner.isPHPIdentifierPart(fChar)) {
                        // assume an ident or keyword
                        int from= pos, to;
                        pos= scanForward(pos + 1, bound, fNonIdent);
@@ -400,7 +402,7 @@ public class JavaHeuristicScanner implements Symbols {
                }
                
                // else
-               if (Character.isJavaIdentifierPart(fChar)) {
+               if (Scanner.isPHPIdentifierPart(fChar)) {
                        // assume an ident or keyword
                        int from, to= pos + 1;
                        pos= scanBackward(pos - 1, bound, fNonIdent);
index a2f5b2c..8dfb26f 100644 (file)
@@ -121,7 +121,7 @@ public class JavaReconciler extends MonoReconciler {
         */
        private class ElementChangedListener implements IElementChangedListener {
                /*
-                * @see org.eclipse.jdt.core.IElementChangedListener#elementChanged(org.eclipse.jdt.core.ElementChangedEvent)
+                * @see net.sourceforge.phpdt.core.IElementChangedListener#elementChanged(net.sourceforge.phpdt.core.ElementChangedEvent)
                 */
                public void elementChanged(ElementChangedEvent event) {
                        setJavaModelChanged(true);
index edd3013..7b8e3d3 100644 (file)
@@ -12,6 +12,7 @@ package net.sourceforge.phpdt.internal.ui.text;
 
 import java.util.Arrays;
 
+import net.sourceforge.phpdt.internal.compiler.parser.Scanner;
 import net.sourceforge.phpdt.internal.core.Assert;
 import net.sourceforge.phpdt.internal.ui.text.SmartBackspaceManager.UndoSpec;
 import net.sourceforge.phpdt.ui.PreferenceConstants;
@@ -327,7 +328,7 @@ public class SmartSemicolonAutoEditStrategy implements IAutoEditStrategy {
                                return -1;
                        
                        ch= document.getChar(p);
-                       if (Character.isJavaIdentifierPart(ch) || ch == ']' || ch == '[')
+                       if (Scanner.isPHPIdentifierPart(ch) || ch == ']' || ch == '[')
                                return offset;
        
                } catch (BadLocationException e) {
@@ -636,10 +637,10 @@ public class SmartSemicolonAutoEditStrategy implements IAutoEditStrategy {
                        if (pos < 0)
                                return false;
 
-                       if (pos != 0 && Character.isJavaIdentifierPart(text.charAt(pos - 1)))
+                       if (pos != 0 && Scanner.isPHPIdentifierPart(text.charAt(pos - 1)))
                                return false;
 
-                       if (pos + 3 < length && Character.isJavaIdentifierPart(text.charAt(pos + 3)))
+                       if (pos + 3 < length && Scanner.isPHPIdentifierPart(text.charAt(pos + 3)))
                                return false;
                        
                        return true;
@@ -759,7 +760,7 @@ public class SmartSemicolonAutoEditStrategy implements IAutoEditStrategy {
        /**
         * Checks whether code>document</code> contains the <code>String</code> <code>like</code> such 
         * that its last character is at <code>position</code>. If <code>like</code> starts with a
-        * identifier part (as determined by {@link Character#isJavaIdentifier(char)}), it is also made
+        * identifier part (as determined by {@link Scanner#isPHPIdentifierPart(char)}), it is also made
         * sure that <code>like</code> is preceded by some non-identifier character or stands at the
         * document start.
         * 
@@ -777,7 +778,7 @@ public class SmartSemicolonAutoEditStrategy implements IAutoEditStrategy {
                        if (!like.equals(document.get(position - length + 1, length)))
                                return false;
 
-                       if (position >= length && Character.isJavaIdentifierPart(like.charAt(0)) && Character.isJavaIdentifierPart(document.getChar(position - length)))
+                       if (position >= length && Scanner.isPHPIdentifierPart(like.charAt(0)) && Scanner.isPHPIdentifierPart(document.getChar(position - length)))
                                return false;
 
                } catch (BadLocationException e) {
@@ -864,7 +865,7 @@ public class SmartSemicolonAutoEditStrategy implements IAutoEditStrategy {
                        while (p >= 0) {
 
                                char ch= document.getChar(p);
-                               if (Character.isJavaIdentifierPart(ch)) {
+                               if (Scanner.isPHPIdentifierPart(ch)) {
                                        p--;
                                        continue;
                                }
@@ -980,7 +981,7 @@ public class SmartSemicolonAutoEditStrategy implements IAutoEditStrategy {
                /* searching for (^|\s)for(\s|$) */
                int forPos= line.indexOf("for"); //$NON-NLS-1$
                if (forPos != -1) {
-                       if ((forPos == 0 || !Character.isJavaIdentifierPart(line.charAt(forPos - 1))) && (line.length() == forPos + 3 || !Character.isJavaIdentifierPart(line.charAt(forPos + 3))))
+                       if ((forPos == 0 || !Scanner.isPHPIdentifierPart(line.charAt(forPos - 1))) && (line.length() == forPos + 3 || !Scanner.isPHPIdentifierPart(line.charAt(forPos + 3))))
                                return true;
                }
                return false;
index fc45294..4b637b1 100644 (file)
@@ -41,10 +41,10 @@ public interface IInvocationContext {
                        
        /**
         * Returns an AST of the compilation unit, possibly only a partial AST focused on the selection
-        * offset (see {@link org.eclipse.jdt.core.dom.ASTParser#setFocalPosition(int)}).
+        * offset (see {@link net.sourceforge.phpdt.core.dom.ASTParser#setFocalPosition(int)}).
         * The returned AST is shared and therefore protected and cannot be modified.
         * The client must check the AST API level and do nothing if they are given an AST
-        * they can't handle. (see {@link org.eclipse.jdt.core.dom.AST#apiLevel()}).
+        * they can't handle. (see {@link net.sourceforge.phpdt.core.dom.AST#apiLevel()}).
         * @return Returns the root of the AST corresponding to the current compilation unit.
         */
        CompilationUnit getASTRoot();
index fc4e006..929f858 100644 (file)
@@ -51,7 +51,7 @@ import org.eclipse.ui.texteditor.AnnotationPreferenceLookup;
 public class JavaExpandHover extends AnnotationExpandHover {
        
        /** Id of the no breakpoint fake annotation */
-       public static final String NO_BREAKPOINT_ANNOTATION= "org.eclipse.jdt.internal.ui.NoBreakpointAnnotation"; //$NON-NLS-1$
+       public static final String NO_BREAKPOINT_ANNOTATION= "net.sourceforge.phpdt.internal.ui.NoBreakpointAnnotation"; //$NON-NLS-1$
 
        private static class NoBreakpointAnnotation extends Annotation implements IAnnotationPresentation {
                
index b47befa..bf483a5 100644 (file)
@@ -322,7 +322,7 @@ public class LinkedPositionUI implements ILinkedPositionListener,
        }
 
        /*
-        * @see org.eclipse.jdt.internal.ui.text.link.ILinkedPositionListener#exit(boolean)
+        * @see net.sourceforge.phpdt.internal.ui.text.link.ILinkedPositionListener#exit(boolean)
         */
        public void exit(int flags) {
                leave(flags);
index 46ddd75..13f73c5 100644 (file)
@@ -12,7 +12,7 @@ package net.sourceforge.phpdt.internal.ui.text.link;
 
 import java.util.Arrays;
 
-//import org.eclipse.jdt.internal.ui.text.java.JavaCompletionProposal;
+//import net.sourceforge.phpdt.internal.ui.text.java.JavaCompletionProposal;
 import org.eclipse.jface.text.TypedPosition;
 import org.eclipse.jface.text.contentassist.ICompletionProposal;
 
index 3619060..c0140c1 100644 (file)
@@ -93,7 +93,7 @@ public class AddWordProposal implements IPHPCompletionProposal {
        }
 
        /*
-        * @see org.eclipse.jdt.ui.text.java.IJavaCompletionProposal#getRelevance()
+        * @see net.sourceforge.phpdt.ui.text.java.IJavaCompletionProposal#getRelevance()
         */
        public int getRelevance() {
                return Integer.MIN_VALUE;
index 5e8907f..2b2ba07 100644 (file)
@@ -25,14 +25,14 @@ import net.sourceforge.phpdt.internal.ui.text.spelling.engine.AbstractSpellDicti
 public class HtmlTagDictionary extends AbstractSpellDictionary implements IHtmlTagConstants {
 
        /*
-        * @see org.eclipse.jdt.internal.ui.text.spelling.engine.AbstractSpellDictionary#getName()
+        * @see net.sourceforge.phpdt.internal.ui.text.spelling.engine.AbstractSpellDictionary#getName()
         */
        protected final URL getURL() {
                return null;
        }
 
        /*
-        * @see org.eclipse.jdt.internal.ui.text.spelling.engine.ISpellDictionary#isCorrect(java.lang.String)
+        * @see net.sourceforge.phpdt.internal.ui.text.spelling.engine.ISpellDictionary#isCorrect(java.lang.String)
         */
        public boolean isCorrect(final String word) {
 
@@ -43,7 +43,7 @@ public class HtmlTagDictionary extends AbstractSpellDictionary implements IHtmlT
        }
 
        /*
-        * @see org.eclipse.jdt.ui.text.spelling.engine.AbstractSpellDictionary#load(java.net.URL)
+        * @see net.sourceforge.phpdt.ui.text.spelling.engine.AbstractSpellDictionary#load(java.net.URL)
         */
        protected boolean load(final URL url) {
 
index 891d87b..b2f05b7 100644 (file)
@@ -25,14 +25,14 @@ import net.sourceforge.phpdt.internal.ui.text.spelling.engine.AbstractSpellDicti
 public class JavaDocTagDictionary extends AbstractSpellDictionary implements IJavaDocTagConstants {
 
        /*
-        * @see org.eclipse.jdt.internal.ui.text.spelling.engine.AbstractSpellDictionary#getName()
+        * @see net.sourceforge.phpdt.internal.ui.text.spelling.engine.AbstractSpellDictionary#getName()
         */
        protected final URL getURL() {
                return null;
        }
 
        /*
-        * @see org.eclipse.jdt.internal.ui.text.spelling.engine.ISpellDictionary#isCorrect(java.lang.String)
+        * @see net.sourceforge.phpdt.internal.ui.text.spelling.engine.ISpellDictionary#isCorrect(java.lang.String)
         */
        public boolean isCorrect(final String word) {
 
@@ -43,7 +43,7 @@ public class JavaDocTagDictionary extends AbstractSpellDictionary implements IJa
        }
 
        /*
-        * @see org.eclipse.jdt.ui.text.spelling.engine.AbstractSpellDictionary#load(java.net.URL)
+        * @see net.sourceforge.phpdt.ui.text.spelling.engine.AbstractSpellDictionary#load(java.net.URL)
         */
        protected boolean load(final URL url) {
 
index 4215576..568f1d7 100644 (file)
@@ -176,7 +176,7 @@ public class SpellCheckEngine implements ISpellCheckEngine, IPropertyChangeListe
        }
 
        /*
-        * @see org.eclipse.jdt.ui.text.spelling.engine.ISpellCheckEngine#createSpellChecker(java.util.Locale,org.eclipse.jface.preference.IPreferenceStore)
+        * @see net.sourceforge.phpdt.ui.text.spelling.engine.ISpellCheckEngine#createSpellChecker(java.util.Locale,org.eclipse.jface.preference.IPreferenceStore)
         */
        public final synchronized ISpellChecker createSpellChecker(final Locale locale, final IPreferenceStore store) {
 
@@ -232,7 +232,7 @@ public class SpellCheckEngine implements ISpellCheckEngine, IPropertyChangeListe
        }
 
        /*
-        * @see org.eclipse.jdt.ui.text.spelling.engine.ISpellCheckEngine#getLocale()
+        * @see net.sourceforge.phpdt.ui.text.spelling.engine.ISpellCheckEngine#getLocale()
         */
        public final Locale getLocale() {
                return fLocale;
@@ -276,7 +276,7 @@ public class SpellCheckEngine implements ISpellCheckEngine, IPropertyChangeListe
        }
 
        /*
-        * @see org.eclipse.jdt.ui.text.spelling.engine.ISpellCheckEngine#registerDictionary(org.eclipse.jdt.ui.text.spelling.engine.ISpellDictionary)
+        * @see net.sourceforge.phpdt.ui.text.spelling.engine.ISpellCheckEngine#registerDictionary(net.sourceforge.phpdt.ui.text.spelling.engine.ISpellDictionary)
         */
        public synchronized final void registerDictionary(final ISpellDictionary dictionary) {
 
@@ -287,7 +287,7 @@ public class SpellCheckEngine implements ISpellCheckEngine, IPropertyChangeListe
        }
 
        /*
-        * @see org.eclipse.jdt.ui.text.spelling.engine.ISpellCheckEngine#registerDictionary(java.util.Locale,org.eclipse.jdt.ui.text.spelling.engine.ISpellDictionary)
+        * @see net.sourceforge.phpdt.ui.text.spelling.engine.ISpellCheckEngine#registerDictionary(java.util.Locale,net.sourceforge.phpdt.ui.text.spelling.engine.ISpellDictionary)
         */
        public synchronized final void registerDictionary(final Locale locale, final ISpellDictionary dictionary) {
 
@@ -298,7 +298,7 @@ public class SpellCheckEngine implements ISpellCheckEngine, IPropertyChangeListe
        }
 
        /*
-        * @see org.eclipse.jdt.ui.text.spelling.engine.ISpellCheckEngine#unload()
+        * @see net.sourceforge.phpdt.ui.text.spelling.engine.ISpellCheckEngine#unload()
         */
        public synchronized final void unload() {
 
@@ -323,7 +323,7 @@ public class SpellCheckEngine implements ISpellCheckEngine, IPropertyChangeListe
        }
 
        /*
-        * @see org.eclipse.jdt.ui.text.spelling.engine.ISpellCheckEngine#unregisterDictionary(org.eclipse.jdt.ui.text.spelling.engine.ISpellDictionary)
+        * @see net.sourceforge.phpdt.ui.text.spelling.engine.ISpellCheckEngine#unregisterDictionary(net.sourceforge.phpdt.ui.text.spelling.engine.ISpellDictionary)
         */
        public synchronized final void unregisterDictionary(final ISpellDictionary dictionary) {
 
index b19b0c4..d9edc82 100644 (file)
@@ -39,7 +39,7 @@ public class SpellReconcileDictionary extends LocaleSensitiveSpellDictionary imp
        }
 
        /*
-        * @see org.eclipse.jdt.internal.ui.text.spelling.engine.ISpellDictionary#isCorrect(java.lang.String)
+        * @see net.sourceforge.phpdt.internal.ui.text.spelling.engine.ISpellDictionary#isCorrect(java.lang.String)
         */
        public boolean isCorrect(final String word) {
 
index 84d5f35..81d4b19 100644 (file)
@@ -82,7 +82,7 @@ public class SpellReconcileStrategy implements IReconcilingStrategy, IReconcilin
                }
 
                /*
-                * @see org.eclipse.jdt.core.compiler.IProblem#getArguments()
+                * @see net.sourceforge.phpdt.core.compiler.IProblem#getArguments()
                 */
                public String[] getArguments() {
 
@@ -103,14 +103,14 @@ public class SpellReconcileStrategy implements IReconcilingStrategy, IReconcilin
                }
 
                /*
-                * @see org.eclipse.jdt.core.compiler.IProblem#getID()
+                * @see net.sourceforge.phpdt.core.compiler.IProblem#getID()
                 */
                public int getID() {
                        return Spelling;
                }
 
                /*
-                * @see org.eclipse.jdt.core.compiler.IProblem#getMessage()
+                * @see net.sourceforge.phpdt.core.compiler.IProblem#getMessage()
                 */
                public String getMessage() {
 
@@ -121,28 +121,28 @@ public class SpellReconcileStrategy implements IReconcilingStrategy, IReconcilin
                }
 
                /*
-                * @see org.eclipse.jdt.core.compiler.IProblem#getOriginatingFileName()
+                * @see net.sourceforge.phpdt.core.compiler.IProblem#getOriginatingFileName()
                 */
                public char[] getOriginatingFileName() {
                        return fEditor.getEditorInput().getName().toCharArray();
                }
 
                /*
-                * @see org.eclipse.jdt.core.compiler.IProblem#getSourceEnd()
+                * @see net.sourceforge.phpdt.core.compiler.IProblem#getSourceEnd()
                 */
                public final int getSourceEnd() {
                        return fEnd;
                }
 
                /*
-                * @see org.eclipse.jdt.core.compiler.IProblem#getSourceLineNumber()
+                * @see net.sourceforge.phpdt.core.compiler.IProblem#getSourceLineNumber()
                 */
                public final int getSourceLineNumber() {
                        return fLine;
                }
 
                /*
-                * @see org.eclipse.jdt.core.compiler.IProblem#getSourceStart()
+                * @see net.sourceforge.phpdt.core.compiler.IProblem#getSourceStart()
                 */
                public final int getSourceStart() {
                        return fStart;
@@ -159,7 +159,7 @@ public class SpellReconcileStrategy implements IReconcilingStrategy, IReconcilin
                }
 
                /*
-                * @see org.eclipse.jdt.core.compiler.IProblem#isError()
+                * @see net.sourceforge.phpdt.core.compiler.IProblem#isError()
                 */
                public final boolean isError() {
                        return false;
@@ -176,7 +176,7 @@ public class SpellReconcileStrategy implements IReconcilingStrategy, IReconcilin
                }
 
                /*
-                * @see org.eclipse.jdt.core.compiler.IProblem#isWarning()
+                * @see net.sourceforge.phpdt.core.compiler.IProblem#isWarning()
                 */
                public final boolean isWarning() {
                        return true;
@@ -205,21 +205,21 @@ public class SpellReconcileStrategy implements IReconcilingStrategy, IReconcilin
                }
 
                /*
-                * @see org.eclipse.jdt.core.compiler.IProblem#setSourceEnd(int)
+                * @see net.sourceforge.phpdt.core.compiler.IProblem#setSourceEnd(int)
                 */
                public final void setSourceEnd(final int end) {
                        fEnd= end;
                }
 
                /*
-                * @see org.eclipse.jdt.core.compiler.IProblem#setSourceLineNumber(int)
+                * @see net.sourceforge.phpdt.core.compiler.IProblem#setSourceLineNumber(int)
                 */
                public final void setSourceLineNumber(final int line) {
                        fLine= line;
                }
 
                /*
-                * @see org.eclipse.jdt.core.compiler.IProblem#setSourceStart(int)
+                * @see net.sourceforge.phpdt.core.compiler.IProblem#setSourceStart(int)
                 */
                public final void setSourceStart(final int start) {
                        fStart= start;
@@ -280,7 +280,7 @@ public class SpellReconcileStrategy implements IReconcilingStrategy, IReconcilin
        }
 
        /*
-        * @see org.eclipse.jdt.internal.ui.text.spelling.engine.ISpellEventListener#handle(org.eclipse.jdt.internal.ui.text.spelling.engine.ISpellEvent)
+        * @see net.sourceforge.phpdt.internal.ui.text.spelling.engine.ISpellEventListener#handle(net.sourceforge.phpdt.internal.ui.text.spelling.engine.ISpellEvent)
         */
        public void handle(final ISpellEvent event) {
                
index 92b1ef5..ea03a5d 100644 (file)
@@ -29,14 +29,14 @@ import org.eclipse.core.runtime.Preferences.PropertyChangeEvent;
 public class TaskTagDictionary extends AbstractSpellDictionary implements IPropertyChangeListener {
 
        /*
-        * @see org.eclipse.jdt.internal.ui.text.spelling.engine.AbstractSpellDictionary#getName()
+        * @see net.sourceforge.phpdt.internal.ui.text.spelling.engine.AbstractSpellDictionary#getName()
         */
        protected final URL getURL() {
                return null;
        }
 
        /*
-        * @see org.eclipse.jdt.ui.text.spelling.engine.AbstractSpellDictionary#load(java.net.URL)
+        * @see net.sourceforge.phpdt.ui.text.spelling.engine.AbstractSpellDictionary#load(java.net.URL)
         */
        protected boolean load(final URL url) {
 
@@ -59,7 +59,7 @@ public class TaskTagDictionary extends AbstractSpellDictionary implements IPrope
        }
 
        /*
-        * @see org.eclipse.jdt.ui.text.spelling.engine.ISpellDictionary#unload()
+        * @see net.sourceforge.phpdt.ui.text.spelling.engine.ISpellDictionary#unload()
         */
        public void unload() {
 
index 6d0d4ad..64ac2fe 100644 (file)
@@ -154,7 +154,7 @@ public class WordCorrectionProposal implements IPHPCompletionProposal, IHtmlTagC
        }
 
        /*
-        * @see org.eclipse.jdt.ui.text.java.IJavaCompletionProposal#getRelevance()
+        * @see net.sourceforge.phpdt.ui.text.java.IJavaCompletionProposal#getRelevance()
         */
        public final int getRelevance() {
                return fRelevance;
index a8cfbf0..d2e076b 100644 (file)
@@ -92,7 +92,7 @@ public class WordIgnoreProposal implements IPHPCompletionProposal {
                return PHPUiImages.get(PHPUiImages.IMG_OBJS_NLS_NEVER_TRANSLATE);
        }
        /*
-        * @see org.eclipse.jdt.ui.text.java.IJavaCompletionProposal#getRelevance()
+        * @see net.sourceforge.phpdt.ui.text.java.IJavaCompletionProposal#getRelevance()
         */
        public final int getRelevance() {
                return Integer.MIN_VALUE + 1;
index d15172a..e268c0b 100644 (file)
@@ -191,7 +191,7 @@ public abstract class AbstractSpellDictionary implements ISpellDictionary {
        }
 
        /*
-        * @see org.eclipse.jdt.internal.ui.text.spelling.engine.ISpellDictionary#getProposals(java.lang.String,boolean)
+        * @see net.sourceforge.phpdt.internal.ui.text.spelling.engine.ISpellDictionary#getProposals(java.lang.String,boolean)
         */
        public Set getProposals(final String word, final boolean sentence) {
 
@@ -328,7 +328,7 @@ public abstract class AbstractSpellDictionary implements ISpellDictionary {
        }
 
        /*
-        * @see org.eclipse.jdt.internal.ui.text.spelling.engine.ISpellDictionary#isCorrect(java.lang.String)
+        * @see net.sourceforge.phpdt.internal.ui.text.spelling.engine.ISpellDictionary#isCorrect(java.lang.String)
         */
        public boolean isCorrect(final String word) {
 
@@ -350,7 +350,7 @@ public abstract class AbstractSpellDictionary implements ISpellDictionary {
        }
 
        /*
-        * @see org.eclipse.jdt.ui.text.spelling.engine.ISpellDictionary#isLoaded()
+        * @see net.sourceforge.phpdt.ui.text.spelling.engine.ISpellDictionary#isLoaded()
         */
        public final synchronized boolean isLoaded() {
                return fLoaded || fHashBuckets.size() > 0;
@@ -409,7 +409,7 @@ public abstract class AbstractSpellDictionary implements ISpellDictionary {
        }
 
        /*
-        * @see org.eclipse.jdt.ui.text.spelling.engine.ISpellDictionary#unload()
+        * @see net.sourceforge.phpdt.ui.text.spelling.engine.ISpellDictionary#unload()
         */
        public synchronized void unload() {
 
@@ -418,14 +418,14 @@ public abstract class AbstractSpellDictionary implements ISpellDictionary {
        }
        
        /*
-        * @see org.eclipse.jdt.ui.text.spelling.engine.ISpellDictionary#acceptsWords()
+        * @see net.sourceforge.phpdt.ui.text.spelling.engine.ISpellDictionary#acceptsWords()
         */
        public boolean acceptsWords() {
                return false;
        }
        
        /*
-        * @see org.eclipse.jdt.internal.ui.text.spelling.engine.ISpellDictionary#addWord(java.lang.String)
+        * @see net.sourceforge.phpdt.internal.ui.text.spelling.engine.ISpellDictionary#addWord(java.lang.String)
         */
        public void addWord(final String word) {
                // Do nothing
index 4ca16c5..3453691 100644 (file)
@@ -167,7 +167,7 @@ public class DefaultSpellChecker implements ISpellChecker {
        }
        
        /*
-        * @see org.eclipse.jdt.ui.text.spelling.engine.ISpellChecker#acceptsWords()
+        * @see net.sourceforge.phpdt.ui.text.spelling.engine.ISpellChecker#acceptsWords()
         */
        public boolean acceptsWords() {
                // synchronizing might not be needed here since acceptWords is 
@@ -189,7 +189,7 @@ public class DefaultSpellChecker implements ISpellChecker {
        }
 
        /*
-        * @see org.eclipse.jdt.internal.ui.text.spelling.engine.ISpellChecker#addWord(java.lang.String)
+        * @see net.sourceforge.phpdt.internal.ui.text.spelling.engine.ISpellChecker#addWord(java.lang.String)
         */
        public void addWord(final String word) {
                // synchronizing is necessary as this is a write access
@@ -210,7 +210,7 @@ public class DefaultSpellChecker implements ISpellChecker {
        }
 
        /*
-        * @see org.eclipse.jdt.ui.text.spelling.engine.ISpellChecker#checkWord(java.lang.String)
+        * @see net.sourceforge.phpdt.ui.text.spelling.engine.ISpellChecker#checkWord(java.lang.String)
         */
        public final void checkWord(final String word) {
                // synchronizing is necessary as this is a write access
@@ -302,7 +302,7 @@ public class DefaultSpellChecker implements ISpellChecker {
        }
 
        /*
-        * @see org.eclipse.jdt.internal.ui.text.spelling.engine.ISpellChecker#ignoreWord(java.lang.String)
+        * @see net.sourceforge.phpdt.internal.ui.text.spelling.engine.ISpellChecker#ignoreWord(java.lang.String)
         */
        public final void ignoreWord(final String word) {
                // synchronizing is necessary as this is a write access
@@ -310,7 +310,7 @@ public class DefaultSpellChecker implements ISpellChecker {
        }
 
        /*
-        * @see org.eclipse.jdt.internal.ui.text.spelling.engine.ISpellChecker#isCorrect(java.lang.String)
+        * @see net.sourceforge.phpdt.internal.ui.text.spelling.engine.ISpellChecker#isCorrect(java.lang.String)
         */
        public final boolean isCorrect(final String word) {
                // synchronizing is necessary as this is called from execute
index 8553ab5..15b88f2 100644 (file)
@@ -53,7 +53,7 @@ public class LocaleSensitiveSpellDictionary extends AbstractSpellDictionary {
        }
 
        /*
-        * @see org.eclipse.jdt.internal.ui.text.spelling.engine.AbstractSpellDictionary#getURL()
+        * @see net.sourceforge.phpdt.internal.ui.text.spelling.engine.AbstractSpellDictionary#getURL()
         */
        protected final URL getURL() throws MalformedURLException {
                return new URL(fLocation, fLocale.toString().toLowerCase() + "." + PHPUIMessages.getString("Spelling.dictionary.file.extension")); //$NON-NLS-1$ //$NON-NLS-2$
index fe555f3..be610d8 100644 (file)
@@ -36,14 +36,14 @@ public class PersistentSpellDictionary extends AbstractSpellDictionary {
        }
        
        /*
-        * @see org.eclipse.jdt.ui.text.spelling.engine.AbstractSpellDictionary#acceptsWords()
+        * @see net.sourceforge.phpdt.ui.text.spelling.engine.AbstractSpellDictionary#acceptsWords()
         */
        public boolean acceptsWords() {
                return true;
        }
 
        /*
-        * @see org.eclipse.jdt.internal.ui.text.spelling.engine.ISpellDictionary#addWord(java.lang.String)
+        * @see net.sourceforge.phpdt.internal.ui.text.spelling.engine.ISpellDictionary#addWord(java.lang.String)
         */
        public void addWord(final String word) {
 
@@ -64,7 +64,7 @@ public class PersistentSpellDictionary extends AbstractSpellDictionary {
        }
 
        /*
-        * @see org.eclipse.jdt.internal.ui.text.spelling.engine.AbstractSpellDictionary#getURL()
+        * @see net.sourceforge.phpdt.internal.ui.text.spelling.engine.AbstractSpellDictionary#getURL()
         */
        protected final URL getURL() {
                return fLocation;
index 9d3eff5..627ea52 100644 (file)
@@ -66,42 +66,42 @@ public class SpellEvent implements ISpellEvent {
        }
 
        /*
-        * @see org.eclipse.jdt.internal.ui.text.spelling.engine.ISpellEvent#getBegin()
+        * @see net.sourceforge.phpdt.internal.ui.text.spelling.engine.ISpellEvent#getBegin()
         */
        public final int getBegin() {
                return fBegin;
        }
 
        /*
-        * @see org.eclipse.jdt.internal.ui.text.spelling.engine.ISpellEvent#getEnd()
+        * @see net.sourceforge.phpdt.internal.ui.text.spelling.engine.ISpellEvent#getEnd()
         */
        public final int getEnd() {
                return fEnd;
        }
 
        /*
-        * @see org.eclipse.jdt.internal.ui.text.spelling.engine.ISpellEvent#getProposals()
+        * @see net.sourceforge.phpdt.internal.ui.text.spelling.engine.ISpellEvent#getProposals()
         */
        public final Set getProposals() {
                return fChecker.getProposals(fWord, fSentence);
        }
 
        /*
-        * @see org.eclipse.jdt.internal.ui.text.spelling.engine.ISpellEvent#getWord()
+        * @see net.sourceforge.phpdt.internal.ui.text.spelling.engine.ISpellEvent#getWord()
         */
        public final String getWord() {
                return fWord;
        }
 
        /*
-        * @see org.eclipse.jdt.internal.ui.text.spelling.engine.ISpellEvent#isMatch()
+        * @see net.sourceforge.phpdt.internal.ui.text.spelling.engine.ISpellEvent#isMatch()
         */
        public final boolean isMatch() {
                return fMatch;
        }
 
        /*
-        * @see org.eclipse.jdt.internal.ui.text.spelling.engine.ISpellEvent#isStart()
+        * @see net.sourceforge.phpdt.internal.ui.text.spelling.engine.ISpellEvent#isStart()
         */
        public final boolean isStart() {
                return fSentence;
index 1954ea4..f26f6a8 100644 (file)
@@ -16,9 +16,9 @@ import org.eclipse.jface.text.IRegion;
 import org.eclipse.jface.text.ITextViewer;
 import org.eclipse.swt.graphics.Point;
 import org.eclipse.swt.widgets.Shell;
-//import org.eclipse.jdt.internal.ui.text.link.LinkedPositionManager;
-//import org.eclipse.jdt.internal.ui.text.link.LinkedPositionUI;
-//import org.eclipse.jdt.internal.ui.util.ExceptionHandler;
+//import net.sourceforge.phpdt.internal.ui.text.link.LinkedPositionManager;
+//import net.sourceforge.phpdt.internal.ui.text.link.LinkedPositionUI;
+//import net.sourceforge.phpdt.internal.ui.util.ExceptionHandler;
 
 /**
  * A PHP identifier proposal.
index c6e0c51..8aac30a 100644 (file)
@@ -21,7 +21,7 @@ import org.eclipse.jface.text.IRegion;
 import org.eclipse.jface.text.ITextViewer;
 import org.eclipse.jface.text.Region;
 import org.eclipse.swt.graphics.Point;
-//import org.eclipse.jdt.internal.ui.text.link.LinkedPositionManager;
+//import net.sourceforge.phpdt.internal.ui.text.link.LinkedPositionManager;
 
 public class BuiltInEngine {
 
index 1a8504c..7c9570c 100644 (file)
@@ -18,9 +18,9 @@ import org.eclipse.jface.text.ITextViewer;
 import org.eclipse.jface.text.contentassist.IContextInformation;
 import org.eclipse.jface.text.templates.TemplateContext;
 import org.eclipse.swt.graphics.Image;
-//import org.eclipse.jdt.internal.ui.text.link.LinkedPositionManager;
-//import org.eclipse.jdt.internal.ui.text.link.LinkedPositionUI;
-//import org.eclipse.jdt.internal.ui.util.ExceptionHandler;
+//import net.sourceforge.phpdt.internal.ui.text.link.LinkedPositionManager;
+//import net.sourceforge.phpdt.internal.ui.text.link.LinkedPositionUI;
+//import net.sourceforge.phpdt.internal.ui.util.ExceptionHandler;
 
 /**
  * A PHP identifier proposal.
index 56274cd..835b5d4 100644 (file)
@@ -25,7 +25,7 @@ import org.eclipse.jface.text.IRegion;
 import org.eclipse.jface.text.ITextViewer;
 import org.eclipse.jface.text.Region;
 import org.eclipse.swt.graphics.Point;
-//import org.eclipse.jdt.internal.ui.text.link.LinkedPositionManager;
+//import net.sourceforge.phpdt.internal.ui.text.link.LinkedPositionManager;
 
 public class DeclarationEngine {
 
@@ -37,8 +37,8 @@ public class DeclarationEngine {
   private int fLastSignificantToken;
 
   private IProject fProject;
-  private IFile fFile;
-//  private String fFileName;
+//  private IFile fFile;
+  private String fFileName;
 
   /**
    * Creates the template engine for a particular context type.
@@ -50,12 +50,12 @@ public class DeclarationEngine {
     fContextType = contextType;
 
     fLastSignificantToken = lastSignificantToken;
-    fFile = file;
-//    if (fFile != null) {
-//      fFileName = fFile.getFullPath().toString();
-//    } else {
-//      fFileName = "";
-//    }
+//    fFile = file;
+    if (file != null) {
+      fFileName = file.getProjectRelativePath().toString();
+    } else {
+      fFileName = "";
+    }
   }
 
   /**
@@ -78,6 +78,98 @@ public class DeclarationEngine {
   /**
    * Inspects the context of the compilation unit around <code>completionPosition</code>
    * and feeds the collector with proposals.
+   * 
+   * @param viewer the text viewer
+   * @param completionPosition the context position in the document of the text viewer
+   * @param compilationUnit the compilation unit (may be <code>null</code>)
+   */
+  public void completeObject(ITextViewer viewer, int completionPosition, SortedMap map, ICompilationUnit compilationUnit) {
+    IDocument document = viewer.getDocument();
+
+    if (!(fContextType instanceof CompilationUnitContextType))
+      return;
+
+    Point selection = viewer.getSelectedRange();
+
+    // remember selected text
+    String selectedText = null;
+
+    if (selection.y != 0) {
+      try {
+        selectedText = document.get(selection.x, selection.y);
+      } catch (BadLocationException e) {
+      }
+    }
+
+    JavaContext context = (JavaContext) fContextType.createContext(document, completionPosition,selection.y,compilationUnit);
+    context.setVariable("selection", selectedText); //$NON-NLS-1$
+
+    int start = context.getStart();
+    int end = context.getEnd();
+    String prefix = context.getKey();
+    IRegion region = new Region(start, end - start);
+
+    String identifier = null;
+
+    SortedMap subMap = map.subMap(prefix, prefix + '\255');
+    Iterator iter = subMap.keySet().iterator();
+    PHPIdentifierLocation location;
+    ArrayList list; 
+    int maxProposals = PHPeclipsePlugin.MAX_PROPOSALS;
+    while (iter.hasNext()) {
+      identifier = (String) iter.next();
+      if (context.canEvaluate(identifier)) {
+        list = (ArrayList) subMap.get(identifier);
+        for (int i = 0; i < list.size(); i++) {
+          location = (PHPIdentifierLocation) list.get(i);
+          int type = location.getType();
+          switch (fLastSignificantToken) {
+            case ITerminalSymbols.TokenNameMINUS_GREATER :
+              if (type != PHPIdentifierLocation.METHOD && type != PHPIdentifierLocation.VARIABLE) {
+                continue; // for loop
+              }
+              break;
+            case ITerminalSymbols.TokenNameVariable :
+              if (type != PHPIdentifierLocation.METHOD && type != PHPIdentifierLocation.VARIABLE) {
+                continue; // for loop
+              }
+//            check all filenames of the subclasses
+//              if (fFileName.equals(location.getFilename())) {
+//                continue; // for loop
+//              }
+              break;
+            case ITerminalSymbols.TokenNamethis_PHP_COMPLETION:
+              if (type != PHPIdentifierLocation.METHOD && type != PHPIdentifierLocation.VARIABLE) {
+                continue; // for loop
+              }
+              // check all filenames of the subclasses
+//              if (!fFileName.equals(location.getFilename())) {
+//                continue; // for loop
+//              }
+              break;
+            case ITerminalSymbols.TokenNamenew :
+              if (type != PHPIdentifierLocation.CLASS && type != PHPIdentifierLocation.CONSTRUCTOR) {
+                continue; // for loop
+              }
+              break;
+            default :
+              if (type == PHPIdentifierLocation.METHOD || type == PHPIdentifierLocation.CONSTRUCTOR || type == PHPIdentifierLocation.VARIABLE) {
+                continue; // for loop
+              }
+          }
+          if (maxProposals-- < 0) {
+            return;
+          }
+          fProposals.add( new DeclarationProposal(fProject, identifier, location, context, region, viewer));
+        }
+      }
+    }
+
+  }
+  
+  /**
+   * Inspects the context of the compilation unit around <code>completionPosition</code>
+   * and feeds the collector with proposals.
    * @param viewer the text viewer
    * @param completionPosition the context position in the document of the text viewer
    * @param compilationUnit the compilation unit (may be <code>null</code>)
@@ -135,15 +227,19 @@ public class DeclarationEngine {
               if (type != PHPIdentifierLocation.METHOD && type != PHPIdentifierLocation.VARIABLE) {
                 continue; // for loop
               }
+//            check all filenames of the subclasses
+              if (fFileName.equals(location.getFilename())) {
+                continue; // for loop
+              }
               break;
             case ITerminalSymbols.TokenNamethis_PHP_COMPLETION:
               if (type != PHPIdentifierLocation.METHOD && type != PHPIdentifierLocation.VARIABLE) {
                 continue; // for loop
               }
               // check all filenames of the subclasses
-//              if (!fFileName.equals(location.getFilename())) {
-//                continue; // for loop
-//              }
+              if (!fFileName.equals(location.getFilename())) {
+                continue; // for loop
+              }
               break;
             case ITerminalSymbols.TokenNamenew :
               if (type != PHPIdentifierLocation.CLASS && type != PHPIdentifierLocation.CONSTRUCTOR) {
index f14a31c..9723320 100644 (file)
@@ -21,9 +21,9 @@ import org.eclipse.jface.text.ITextViewer;
 import org.eclipse.jface.text.contentassist.IContextInformation;
 import org.eclipse.jface.text.templates.TemplateContext;
 import org.eclipse.swt.graphics.Image;
-//import org.eclipse.jdt.internal.ui.text.link.LinkedPositionManager;
-//import org.eclipse.jdt.internal.ui.text.link.LinkedPositionUI;
-//import org.eclipse.jdt.internal.ui.util.ExceptionHandler;
+//import net.sourceforge.phpdt.internal.ui.text.link.LinkedPositionManager;
+//import net.sourceforge.phpdt.internal.ui.text.link.LinkedPositionUI;
+//import net.sourceforge.phpdt.internal.ui.util.ExceptionHandler;
 
 /**
  * A PHP identifier proposal.
@@ -201,7 +201,7 @@ public class DeclarationProposal extends AbstractProposal { //implements IPHPCom
         return PHPUiImages.get(PHPUiImages.IMG_VAR);
     }
     return PHPUiImages.get(PHPUiImages.IMG_FUN);
-  }
+  } 
 
   /*
    * @see IJavaCompletionProposal#getRelevance()
@@ -216,15 +216,15 @@ public class DeclarationProposal extends AbstractProposal { //implements IPHPCom
         case '\r' :
         case '\n' :
         case '\t' :
-          return 90;
+          return 80;
         case '>' : // ->
         case ':' : // ::
-          return 95;
+          return 85;
         default :
           return 0;
       }
     } else {
-      return 90;
+      return 80;
     }
   }
 
index 78df545..f9f0d99 100644 (file)
@@ -20,7 +20,7 @@ import org.eclipse.jface.text.IRegion;
 import org.eclipse.jface.text.ITextViewer;
 import org.eclipse.jface.text.Region;
 import org.eclipse.swt.graphics.Point;
-//import org.eclipse.jdt.internal.ui.text.link.LinkedPositionManager;
+//import net.sourceforge.phpdt.internal.ui.text.link.LinkedPositionManager;
 
 public class IdentifierEngine {
 
index 92d05eb..ec4eef6 100644 (file)
@@ -16,9 +16,9 @@ import org.eclipse.jface.text.ITextViewer;
 import org.eclipse.jface.text.contentassist.IContextInformation;
 import org.eclipse.jface.text.templates.TemplateContext;
 import org.eclipse.swt.graphics.Image;
-//import org.eclipse.jdt.internal.ui.text.link.LinkedPositionManager;
-//import org.eclipse.jdt.internal.ui.text.link.LinkedPositionUI;
-//import org.eclipse.jdt.internal.ui.util.ExceptionHandler;
+//import net.sourceforge.phpdt.internal.ui.text.link.LinkedPositionManager;
+//import net.sourceforge.phpdt.internal.ui.text.link.LinkedPositionUI;
+//import net.sourceforge.phpdt.internal.ui.util.ExceptionHandler;
 /**
  * A PHP identifier proposal.
  */
index 2e79bb8..d74f323 100644 (file)
@@ -18,21 +18,28 @@ import org.eclipse.swt.graphics.Image;
 public class LocalVariableProposal extends AbstractProposal {
 
   private final String fIdentifierName;
+
   private final IRegion fRegion;
-  private int fRelevance;
+
+  private final int fRelevance;
 
   /**
    * Creates a template proposal with a template and its context.
+   * 
    * @param template
    *          the template
    * @param image
    *          the icon of the proposal.
    */
   public LocalVariableProposal(String identifierName, IRegion region, ITextViewer viewer) {
+    this(identifierName, region, viewer, 99);
+  }
+
+  public LocalVariableProposal(String identifierName, IRegion region, ITextViewer viewer, int relevance) {
     super(viewer);
     fIdentifierName = identifierName;
     fRegion = region;
-    fRelevance = 99;
+    fRelevance = relevance;
   }
 
   /*
@@ -84,15 +91,11 @@ public class LocalVariableProposal extends AbstractProposal {
    */
   public String getAdditionalProposalInfo() {
     StringBuffer hoverInfoBuffer = new StringBuffer();
-    //    String workspaceLocation = PHPeclipsePlugin.getWorkspace().getRoot().getLocation().toString();
-//    String workspaceLocation;
-//    if (fProject != null) {
-//      workspaceLocation = fProject.getLocation().toString() + '/';
-//    } else {
-//      // should never happen?
-//      workspaceLocation = PHPeclipsePlugin.getWorkspace().getRoot().getLocation().toString();
-//    }
-    hoverInfoBuffer.append("local variable -");
+    if (fRelevance>95) {
+      hoverInfoBuffer.append("function source variable -");
+    } else {
+      hoverInfoBuffer.append("editor source variable -");
+    }
     hoverInfoBuffer.append(fIdentifierName);
     return hoverInfoBuffer.toString();
   }
@@ -133,10 +136,5 @@ public class LocalVariableProposal extends AbstractProposal {
   public int hashCode() {
     return fIdentifierName.hashCode();
   }
-  /**
-   * @param relevance The relevance to set.
-   */
-  public void setRelevance(int relevance) {
-    fRelevance = relevance;
-  }
+
 }
\ No newline at end of file
diff --git a/net.sourceforge.phpeclipse/src/net/sourceforge/phpdt/internal/ui/viewsupport/FilterUpdater.java b/net.sourceforge.phpeclipse/src/net/sourceforge/phpdt/internal/ui/viewsupport/FilterUpdater.java
new file mode 100644 (file)
index 0000000..0a95480
--- /dev/null
@@ -0,0 +1,57 @@
+/*******************************************************************************
+ * Copyright (c) 2000, 2004 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials 
+ * are made available under the terms of the Common Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/cpl-v10.html
+ * 
+ * Contributors:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+package net.sourceforge.phpdt.internal.ui.viewsupport;
+
+import org.eclipse.swt.widgets.Control;
+
+import org.eclipse.jface.util.Assert;
+import org.eclipse.jface.viewers.StructuredViewer;
+
+import org.eclipse.core.resources.IResourceChangeEvent;
+import org.eclipse.core.resources.IResourceChangeListener;
+import org.eclipse.core.resources.IResourceDelta;
+
+
+public class FilterUpdater implements IResourceChangeListener {
+
+       private StructuredViewer fViewer;
+       
+       public FilterUpdater(StructuredViewer viewer) {
+               Assert.isNotNull(viewer);
+               fViewer= viewer;
+       }
+
+       /* (non-Javadoc)
+        * @see org.eclipse.core.resources.IResourceChangeListener#resourceChanged(org.eclipse.core.resources.IResourceChangeEvent)
+        */
+       public void resourceChanged(IResourceChangeEvent event) {
+               IResourceDelta delta= event.getDelta();
+               if (delta == null)
+                       return;
+               
+               IResourceDelta[] projDeltas = delta.getAffectedChildren(IResourceDelta.CHANGED);
+               for (int i= 0; i < projDeltas.length; i++) {
+                       IResourceDelta pDelta= projDeltas[i];
+                       if ((pDelta.getFlags() & IResourceDelta.DESCRIPTION) != 0) {
+                               final Control ctrl= fViewer.getControl();
+                               if (ctrl != null && !ctrl.isDisposed()) {
+                                       // async is needed due to bug 33783
+                                       ctrl.getDisplay().asyncExec(new Runnable() {
+                                               public void run() {
+                                                       if (!ctrl.isDisposed())
+                                                               fViewer.refresh(false);
+                                               }
+                                       });
+                               }
+                       }
+               }
+       }
+}
index 4e71612..325d623 100644 (file)
@@ -216,7 +216,7 @@ public class JavaElementLabels {
 
   /**
    * Post qualify referenced package fragement roots. For example
-   * <code>jdt.jar - org.eclipse.jdt.ui</code> if the jar is referenced
+   * <code>jdt.jar - net.sourceforge.phpdt.ui</code> if the jar is referenced
    * from another project.
    */
   public final static int REFERENCED_ROOT_POST_QUALIFIED = 1 << 30;
index 23bf845..efb355c 100644 (file)
@@ -45,7 +45,7 @@ public class NewClassCreationWizard extends NewElementWizard {
 
 
        /* (non-Javadoc)
-        * @see org.eclipse.jdt.internal.ui.wizards.NewElementWizard#finishPage(org.eclipse.core.runtime.IProgressMonitor)
+        * @see net.sourceforge.phpdt.internal.ui.wizards.NewElementWizard#finishPage(org.eclipse.core.runtime.IProgressMonitor)
         */
        protected void finishPage(IProgressMonitor monitor) throws InterruptedException, CoreException {
                fPage.createType(monitor); // use the full progress monitor
index 6bb3fd6..9b9164f 100644 (file)
@@ -23,7 +23,7 @@ public interface IContextMenuConstants {
        
        /**
         * Type hierarchy view part: pop-up menu target ID for type hierarchy viewer
-        * (value <code>"org.eclipse.jdt.ui.TypeHierarchy.typehierarchy"</code>).
+        * (value <code>"net.sourceforge.phpdt.ui.TypeHierarchy.typehierarchy"</code>).
         * 
         * @since 2.0
         */
@@ -31,7 +31,7 @@ public interface IContextMenuConstants {
 
        /**
         * Type hierarchy view part: pop-up menu target ID for supertype hierarchy viewer
-        * (value <code>"org.eclipse.jdt.ui.TypeHierarchy.supertypes"</code>).
+        * (value <code>"net.sourceforge.phpdt.ui.TypeHierarchy.supertypes"</code>).
         * 
         * @since 2.0
         */
@@ -39,7 +39,7 @@ public interface IContextMenuConstants {
 
        /**
         * Type hierarchy view part: Pop-up menu target ID for the subtype hierarchy viewer
-        * (value <code>"org.eclipse.jdt.ui.TypeHierarchy.subtypes"</code>).
+        * (value <code>"net.sourceforge.phpdt.ui.TypeHierarchy.subtypes"</code>).
         * 
         * @since 2.0
         */
@@ -47,7 +47,7 @@ public interface IContextMenuConstants {
 
        /**
         * Type hierarchy view part: pop-up menu target ID for the meber viewer
-        * (value <code>"org.eclipse.jdt.ui.TypeHierarchy.members"</code>).
+        * (value <code>"net.sourceforge.phpdt.ui.TypeHierarchy.members"</code>).
         * 
         * @since 2.0
         */
diff --git a/net.sourceforge.phpeclipse/src/net/sourceforge/phpdt/ui/IJavaElementSearchConstants.java b/net.sourceforge.phpeclipse/src/net/sourceforge/phpdt/ui/IJavaElementSearchConstants.java
new file mode 100644 (file)
index 0000000..705fe7c
--- /dev/null
@@ -0,0 +1,62 @@
+/*******************************************************************************
+ * Copyright (c) 2000, 2004 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials 
+ * are made available under the terms of the Common Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/cpl-v10.html
+ * 
+ * Contributors:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+package net.sourceforge.phpdt.ui;
+
+/**
+ * Search scope constants for Java selection dialogs.
+ * <p>
+ * This interface declares constants only; it is not intended to be implemented.
+ * </p>
+ *
+ * @see JavaUI
+ */
+public interface IJavaElementSearchConstants {
+
+       /** 
+        * Search scope constant (bit mask) indicating that classes should be considered.
+        * Used when opening certain kinds of selection dialogs.
+        */
+       public static final int CONSIDER_CLASSES= 1 << 1;
+
+       /** 
+        * Search scope constant (bit mask) indicating that interfaces should be considered.
+        * Used when opening certain kinds of selection dialogs.
+        */
+       public static final int CONSIDER_INTERFACES= 1 << 2;
+
+       /**
+        * Search scope constant (bit mask) indicating that both classes and interfaces 
+        * should be considered. Equivalent to
+        * <code>CONSIDER_CLASSES | CONSIDER_INTERFACES</code>.
+        */
+       public static final int CONSIDER_TYPES= CONSIDER_CLASSES | CONSIDER_INTERFACES;
+
+       /**
+        * Search scope constant (bit mask) indicating that binaries should be considered.
+        * Used when opening certain kinds of selection dialogs.
+        */
+       public static final int CONSIDER_BINARIES= 1 << 3;
+
+       /**
+        * Search scope constant (bit mask) indicating that external JARs should be considered.
+        * Used when opening certain kinds of selection dialogs.
+        */
+       public static final int CONSIDER_EXTERNAL_JARS= 1 << 4;
+
+       /**
+        * Search scope constant (bit mask) indicating that required projects should be considered.
+        * Used when opening certain kinds of selection dialogs.
+        * 
+        * @since 2.0
+        */     
+       public static final int CONSIDER_REQUIRED_PROJECTS= 1 << 5;
+
+}
diff --git a/net.sourceforge.phpeclipse/src/net/sourceforge/phpdt/ui/IPackagesViewPart.java b/net.sourceforge.phpeclipse/src/net/sourceforge/phpdt/ui/IPackagesViewPart.java
new file mode 100644 (file)
index 0000000..392ea8d
--- /dev/null
@@ -0,0 +1,44 @@
+/*******************************************************************************
+ * Copyright (c) 2000, 2004 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials 
+ * are made available under the terms of the Common Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/cpl-v10.html
+ * 
+ * Contributors:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+package net.sourceforge.phpdt.ui;
+
+import org.eclipse.jface.viewers.TreeViewer;
+import org.eclipse.ui.IViewPart;
+
+/**
+ * The standard Packages view presents a Java-centric view of the workspace.
+ * Within Java projects, the resource hierarchy is organized into Java packages
+ * as described by the project's classpath. Note that this view shows both Java 
+ * elements and ordinary resources.
+ * <p>
+ * This interface is not intended to be implemented by clients.
+ * </p>
+ *
+ * @see JavaUI#ID_PACKAGES
+ */
+public interface IPackagesViewPart extends IViewPart {
+       /**
+        * Selects and reveals the given element in this packages view.
+        * The tree will be expanded as needed to show the element.
+        *
+        * @param element the element to be revealed
+        */
+       void selectAndReveal(Object element);
+       
+       /**
+        * Returns the TreeViewer shown in the Packages view.
+        * 
+        * @return the tree viewer used in the Packages view
+        * 
+        * @since 2.0
+        */
+       TreeViewer getTreeViewer();
+}
index 7d588ff..585cfc9 100644 (file)
@@ -19,8 +19,8 @@ package net.sourceforge.phpdt.ui;
  * This interface is not intended to be implemented by clients.
  * </p>
  *
- * @see org.eclipse.jdt.ui.StandardJavaElementContentProvider
- * @see org.eclipse.jdt.core.IWorkingCopy
+ * @see net.sourceforge.phpdt.ui.StandardJavaElementContentProvider
+ * @see net.sourceforge.phpdt.core.IWorkingCopy
  * 
  * @since 2.0 
  */
index 6236042..db03eaa 100644 (file)
@@ -25,7 +25,7 @@ import org.eclipse.ui.internal.SharedImages;
 import org.eclipse.ui.texteditor.IDocumentProvider;
 
 /**
- * Central access point for the Java UI plug-in (id <code>"org.eclipse.jdt.ui"</code>).
+ * Central access point for the Java UI plug-in (id <code>"net.sourceforge.phpdt.ui"</code>).
  * This class provides static methods for:
  * <ul>
  *  <li> creating various kinds of selection dialogs to present a collection
@@ -46,81 +46,81 @@ public final class JavaUI {
        }
        
        /**
-        * The id of the Java plugin (value <code>"org.eclipse.jdt.ui"</code>).
+        * The id of the Java plugin (value <code>"net.sourceforge.phpdt.ui"</code>).
         */     
-//     public static final String ID_PLUGIN= "org.eclipse.jdt.ui"; //$NON-NLS-1$
+//     public static final String ID_PLUGIN= "net.sourceforge.phpdt.ui"; //$NON-NLS-1$
        
        /**
         * The id of the Java perspective
-        * (value <code>"org.eclipse.jdt.ui.JavaPerspective"</code>).
+        * (value <code>"net.sourceforge.phpdt.ui.JavaPerspective"</code>).
         */     
- //    public static final String ID_PERSPECTIVE=              "org.eclipse.jdt.ui.JavaPerspective"; //$NON-NLS-1$
+ //    public static final String ID_PERSPECTIVE=              "net.sourceforge.phpdt.ui.JavaPerspective"; //$NON-NLS-1$
        
        /**
         * The id of the Java hierarchy perspective
-        * (value <code>"org.eclipse.jdt.ui.JavaHierarchyPerspective"</code>).
+        * (value <code>"net.sourceforge.phpdt.ui.JavaHierarchyPerspective"</code>).
         */     
-//     public static final String ID_HIERARCHYPERSPECTIVE= "org.eclipse.jdt.ui.JavaHierarchyPerspective"; //$NON-NLS-1$
+//     public static final String ID_HIERARCHYPERSPECTIVE= "net.sourceforge.phpdt.ui.JavaHierarchyPerspective"; //$NON-NLS-1$
 
        /**
         * The id of the Java action set
-        * (value <code>"org.eclipse.jdt.ui.JavaActionSet"</code>).
+        * (value <code>"net.sourceforge.phpdt.ui.JavaActionSet"</code>).
         */
-//     public static final String ID_ACTION_SET= "org.eclipse.jdt.ui.JavaActionSet"; //$NON-NLS-1$
+//     public static final String ID_ACTION_SET= "net.sourceforge.phpdt.ui.JavaActionSet"; //$NON-NLS-1$
 
        /**
         * The id of the Java Element Creation action set
-        * (value <code>"org.eclipse.jdt.ui.JavaElementCreationActionSet"</code>).
+        * (value <code>"net.sourceforge.phpdt.ui.JavaElementCreationActionSet"</code>).
         * 
         * @since 2.0
         */
-//     public static final String ID_ELEMENT_CREATION_ACTION_SET= "org.eclipse.jdt.ui.JavaElementCreationActionSet"; //$NON-NLS-1$
+//     public static final String ID_ELEMENT_CREATION_ACTION_SET= "net.sourceforge.phpdt.ui.JavaElementCreationActionSet"; //$NON-NLS-1$
        
        /**
         * The id of the Java Coding action set
-        * (value <code>"org.eclipse.jdt.ui.CodingActionSet"</code>).
+        * (value <code>"net.sourceforge.phpdt.ui.CodingActionSet"</code>).
         * 
         * @since 2.0
         */
-//     public static final String ID_CODING_ACTION_SET= "org.eclipse.jdt.ui.CodingActionSet"; //$NON-NLS-1$
+//     public static final String ID_CODING_ACTION_SET= "net.sourceforge.phpdt.ui.CodingActionSet"; //$NON-NLS-1$
 
        /**
         * The id of the Java action set for open actions
-        * (value <code>"org.eclipse.jdt.ui.A_OpenActionSet"</code>).
+        * (value <code>"net.sourceforge.phpdt.ui.A_OpenActionSet"</code>).
         * 
         * @since 2.0
         */
-//     public static final String ID_OPEN_ACTION_SET= "org.eclipse.jdt.ui.A_OpenActionSet"; //$NON-NLS-1$
+//     public static final String ID_OPEN_ACTION_SET= "net.sourceforge.phpdt.ui.A_OpenActionSet"; //$NON-NLS-1$
 
        /**
         * The id of the Java Search action set
-        * (value <code>org.eclipse.jdt.ui.SearchActionSet"</code>).
+        * (value <code>net.sourceforge.phpdt.ui.SearchActionSet"</code>).
         * 
         * @since 2.0
         */
-//     public static final String ID_SEARCH_ACTION_SET= "org.eclipse.jdt.ui.SearchActionSet"; //$NON-NLS-1$
+//     public static final String ID_SEARCH_ACTION_SET= "net.sourceforge.phpdt.ui.SearchActionSet"; //$NON-NLS-1$
        
        /**
         * The editor part id of the editor that presents Java compilation units
-        * (value <code>"org.eclipse.jdt.ui.CompilationUnitEditor"</code>).
+        * (value <code>"net.sourceforge.phpdt.ui.CompilationUnitEditor"</code>).
         */     
 //     public static final String ID_CU_EDITOR=                        "net.sourceforge.phpdt.ui.PHPUnitEditor"; //$NON-NLS-1$
        
        /**
         * The editor part id of the editor that presents Java binary class files
-        * (value <code>"org.eclipse.jdt.ui.ClassFileEditor"</code>).
+        * (value <code>"net.sourceforge.phpdt.ui.ClassFileEditor"</code>).
         */
-//     public static final String ID_CF_EDITOR=                        "org.eclipse.jdt.ui.ClassFileEditor"; //$NON-NLS-1$
+//     public static final String ID_CF_EDITOR=                        "net.sourceforge.phpdt.ui.ClassFileEditor"; //$NON-NLS-1$
        
        /**
         * The editor part id of the code snippet editor
-        * (value <code>"org.eclipse.jdt.ui.SnippetEditor"</code>).
+        * (value <code>"net.sourceforge.phpdt.ui.SnippetEditor"</code>).
         */
-//     public static final String ID_SNIPPET_EDITOR=           "org.eclipse.jdt.ui.SnippetEditor"; //$NON-NLS-1$
+//     public static final String ID_SNIPPET_EDITOR=           "net.sourceforge.phpdt.ui.SnippetEditor"; //$NON-NLS-1$
 
        /**
         * The view part id of the Packages view
-        * (value <code>"org.eclipse.jdt.ui.PackageExplorer"</code>).
+        * (value <code>"net.sourceforge.phpdt.ui.PackageExplorer"</code>).
         * <p>
         * When this id is used to access
         * a view part with <code>IWorkbenchPage.findView</code> or 
@@ -136,7 +136,7 @@ public final class JavaUI {
        
        /** 
         * The view part id of the type hierarchy part.
-        * (value <code>"org.eclipse.jdt.ui.TypeHierarchy"</code>).
+        * (value <code>"net.sourceforge.phpdt.ui.TypeHierarchy"</code>).
         * <p>
         * When this id is used to access
         * a view part with <code>IWorkbenchPage.findView</code> or 
@@ -152,43 +152,43 @@ public final class JavaUI {
 
        /**
         * The id of the Java Browsing Perspective
-        * (value <code>"org.eclipse.jdt.ui.JavaBrowsingPerspective"</code>).
+        * (value <code>"net.sourceforge.phpdt.ui.JavaBrowsingPerspective"</code>).
         * 
         * @since 2.0
         */
-//     public static String ID_BROWSING_PERSPECTIVE= "org.eclipse.jdt.ui.JavaBrowsingPerspective"; //$NON-NLS-1$
+//     public static String ID_BROWSING_PERSPECTIVE= "net.sourceforge.phpdt.ui.JavaBrowsingPerspective"; //$NON-NLS-1$
 
        /**
         * The view part id of the Java Browsing Projects view
-        * (value <code>"org.eclipse.jdt.ui.ProjectsView"</code>).
+        * (value <code>"net.sourceforge.phpdt.ui.ProjectsView"</code>).
         * 
         * @since 2.0
         */
-//     public static String ID_PROJECTS_VIEW= "org.eclipse.jdt.ui.ProjectsView"; //$NON-NLS-1$
+//     public static String ID_PROJECTS_VIEW= "net.sourceforge.phpdt.ui.ProjectsView"; //$NON-NLS-1$
 
        /**
         * The view part id of the Java Browsing Packages view
-        * (value <code>"org.eclipse.jdt.ui.PackagesView"</code>).
+        * (value <code>"net.sourceforge.phpdt.ui.PackagesView"</code>).
         * 
         * @since 2.0
         */
-//     public static String ID_PACKAGES_VIEW= "org.eclipse.jdt.ui.PackagesView"; //$NON-NLS-1$
+//     public static String ID_PACKAGES_VIEW= "net.sourceforge.phpdt.ui.PackagesView"; //$NON-NLS-1$
 
        /**
         * The view part id of the Java Browsing Types view
-        * (value <code>"org.eclipse.jdt.ui.TypesView"</code>).
+        * (value <code>"net.sourceforge.phpdt.ui.TypesView"</code>).
         * 
         * @since 2.0
         */
-//     public static String ID_TYPES_VIEW= "org.eclipse.jdt.ui.TypesView"; //$NON-NLS-1$
+//     public static String ID_TYPES_VIEW= "net.sourceforge.phpdt.ui.TypesView"; //$NON-NLS-1$
 
        /**
         * The view part id of the Java Browsing Members view
-        * (value <code>"org.eclipse.jdt.ui.MembersView"</code>).
+        * (value <code>"net.sourceforge.phpdt.ui.MembersView"</code>).
         * 
         * @since 2.0
         */
-//     public static String ID_MEMBERS_VIEW= "org.eclipse.jdt.ui.MembersView"; //$NON-NLS-1$
+//     public static String ID_MEMBERS_VIEW= "net.sourceforge.phpdt.ui.MembersView"; //$NON-NLS-1$
 
        /**
         * The class org.eclipse.debug.core.model.IProcess allows attaching
@@ -199,7 +199,7 @@ public final class JavaUI {
         * was launched with.
         * @deprecated
         */
-//     public final static String ATTR_CMDLINE= "org.eclipse.jdt.ui.launcher.cmdLine"; //$NON-NLS-1$
+//     public final static String ATTR_CMDLINE= "net.sourceforge.phpdt.ui.launcher.cmdLine"; //$NON-NLS-1$
 
        /**
         * Returns the shared images for the Java UI.
@@ -551,7 +551,7 @@ public final class JavaUI {
         * 
         * @return the list of shared working copies
         * 
-        * @see org.eclipse.jdt.core.JavaCore#getSharedWorkingCopies(org.eclipse.jdt.core.IBufferFactory)
+        * @see net.sourceforge.phpdt.core.JavaCore#getSharedWorkingCopies(net.sourceforge.phpdt.core.IBufferFactory)
         * @since 2.0
         */
        public static IWorkingCopy[] getSharedWorkingCopies() {
@@ -588,9 +588,9 @@ public final class JavaUI {
         *
         * @return the BufferFactory for the Java UI plug-in
         * 
-        * @see org.eclipse.jdt.core.IBufferFactory
+        * @see net.sourceforge.phpdt.core.IBufferFactory
         * @since 2.0
-        * @deprecated {@link IBufferFactory} has been replaced by {@link org.eclipse.jdt.core.WorkingCopyOwner}.
+        * @deprecated {@link IBufferFactory} has been replaced by {@link net.sourceforge.phpdt.core.WorkingCopyOwner}.
         * The Java UI plug-in uses the <i>primary working copy owner</i> that can be accessed with <code>null</code> in
         * API's that require an owner
         */
index 8a27f28..15796fe 100644 (file)
@@ -58,7 +58,7 @@ public class PreferenceConstants {
   /**
    * A named preference that defines the pattern used for package name compression.
    * <p>
-   * Value is of type <code>String</code>. For example foe the given package name 'org.eclipse.jdt' pattern '.' will compress it
+   * Value is of type <code>String</code>. For example foe the given package name 'net.sourceforge.phpdt' pattern '.' will compress it
    * to '..jdt', '1~' to 'o~.e~.jdt'.
    * </p>
    */
@@ -168,7 +168,37 @@ public class PreferenceConstants {
    * @see #CODEGEN_USE_GETTERSETTER_SUFFIX
    */
   public static final String CODEGEN_GETTERSETTER_SUFFIX = "net.sourceforge.phpdt.ui.gettersetter.suffix.list"; //$NON-NLS-1$
-
+  /**
+        * A named preference that controls whether the keyword "this" will be added
+        * automatically to field accesses in generated methods.
+        * <p>
+        * Value is of type <code>Boolean</code>.
+        * </p>
+        * @since 3.0
+        */
+       public static final String CODEGEN_KEYWORD_THIS= "org.eclipse.jdt.ui.keywordthis"; //$NON-NLS-1$
+
+       /**
+        * A named preference that controls whether to use the prefix "is" or the prefix "get" for
+        * automatically created getters which return a boolean field.
+        * <p>
+        * Value is of type <code>Boolean</code>.
+        * </p>
+        * @since 3.0
+        */
+       public static final String CODEGEN_IS_FOR_GETTERS= "org.eclipse.jdt.ui.gettersetter.use.is"; //$NON-NLS-1$
+       
+       
+       /**
+        * A named preference that defines the preferred variable names for exceptions in
+        * catch clauses.
+        * <p>
+        * Value is of type <code>String</code>.
+        * </p>
+        * @since 3.0
+        */     
+       public static final String CODEGEN_EXCEPTION_VAR_NAME= "org.eclipse.jdt.ui.exception.name"; //$NON-NLS-1$
+       
   /**
    * A named preference that controls if comment stubs will be added automatically to newly created types and methods.
    * <p>
@@ -1032,7 +1062,7 @@ public class PreferenceConstants {
   public final static String EDITOR_MULTI_LINE_COMMENT_COLOR = IPreferenceConstants.PHP_MULTILINE_COMMENT;
 
   /**
-   * The symbolic font name for the Java editor text font (value <code>"org.eclipse.jdt.ui.editors.textfont"</code>).
+   * The symbolic font name for the Java editor text font (value <code>"net.sourceforge.phpdt.ui.editors.textfont"</code>).
    * 
    * @since 2.1
    */
@@ -2270,6 +2300,10 @@ public class PreferenceConstants {
     store.setDefault(PreferenceConstants.CODEGEN_USE_GETTERSETTER_SUFFIX, false);
     store.setDefault(PreferenceConstants.CODEGEN_GETTERSETTER_PREFIX, "fg, f, _$, _, m_"); //$NON-NLS-1$
     store.setDefault(PreferenceConstants.CODEGEN_GETTERSETTER_SUFFIX, "_"); //$NON-NLS-1$
+    
+    store.setDefault(PreferenceConstants.CODEGEN_KEYWORD_THIS, false);
+       store.setDefault(PreferenceConstants.CODEGEN_IS_FOR_GETTERS, true);
+       store.setDefault(PreferenceConstants.CODEGEN_EXCEPTION_VAR_NAME, "e"); //$NON-NLS-1$
     store.setDefault(PreferenceConstants.CODEGEN_ADD_COMMENTS, true);
     store.setDefault(PreferenceConstants.CODEGEN__NON_JAVADOC_COMMENTS, false);
     store.setDefault(PreferenceConstants.CODEGEN__FILE_COMMENTS, false);
index 7f1d21b..1495209 100644 (file)
@@ -64,8 +64,8 @@ Java model (<code>IJavaModel</code>)
  * compilation units in the Java element hierarchy for which a shared working copy exists 
  * in JDT core.
  * 
- * @see org.eclipse.jdt.ui.IWorkingCopyProvider
- * @see JavaCore#getSharedWorkingCopies(org.eclipse.jdt.core.IBufferFactory)
+ * @see net.sourceforge.phpdt.ui.IWorkingCopyProvider
+ * @see JavaCore#getSharedWorkingCopies(net.sourceforge.phpdt.core.IBufferFactory)
  * 
  * @since 2.0
  */
index 2ca32ae..226f4f1 100644 (file)
@@ -423,7 +423,7 @@ public class CustomFiltersActionGroup extends ActionGroup {
                        String id= filterDescs[i].getId();
                        Boolean isEnabled= new Boolean(filterDescs[i].isEnabled());
                        if (fEnabledFilterIds.containsKey(id))
-                               PHPeclipsePlugin.logErrorMessage("WARNING: Duplicate id for extension-point \"org.eclipse.jdt.ui.javaElementFilters\""); //$NON-NLS-1$
+                               PHPeclipsePlugin.logErrorMessage("WARNING: Duplicate id for extension-point \"net.sourceforge.phpdt.ui.javaElementFilters\""); //$NON-NLS-1$
                        fEnabledFilterIds.put(id, isEnabled);
                        fFilterDescriptorMap.put(id, filterDescs[i]);
                }
index 40aa451..58bf8da 100644 (file)
@@ -50,7 +50,7 @@ import org.eclipse.ui.texteditor.IUpdate;
  */
 public class GenerateActionGroup extends ActionGroup {
   /**
-        * Pop-up menu: id of the source sub menu (value <code>org.eclipse.jdt.ui.source.menu</code>).
+        * Pop-up menu: id of the source sub menu (value <code>net.sourceforge.phpdt.ui.source.menu</code>).
         * 
         * @since 3.0
         */
index 324b300..e0065b7 100644 (file)
@@ -20,19 +20,19 @@ public interface PHPEditorActionDefinitionIds {
   public static final String OPEN_EDITOR = "net.sourceforge.phpeclipse.ui.edit.text.java.open.editor"; //$NON-NLS-1$
   /**
         * Action definition ID of the toggle presentation toolbar button action
-        * (value <code>"org.eclipse.jdt.ui.edit.text.java.toggle.presentation"</code>).
+        * (value <code>"net.sourceforge.phpdt.ui.edit.text.java.toggle.presentation"</code>).
         */
   public static final String TOGGLE_PRESENTATION = "net.sourceforge.phpeclipse.ui.edit.text.java.toggle.presentation"; //$NON-NLS-1$
 
   /**
    * Action definition ID of the toggle text hover toolbar button action
-   * (value <code>"org.eclipse.jdt.ui.edit.text.java.toggle.text.hover"</code>).
+   * (value <code>"net.sourceforge.phpdt.ui.edit.text.java.toggle.text.hover"</code>).
    */
   public static final String TOGGLE_TEXT_HOVER = "net.sourceforge.phpeclipse.ui.edit.text.java.toggle.text.hover"; //$NON-NLS-1$
 
   /**
         * Action definition ID of the edit -> show Javadoc action
-        * (value <code>"org.eclipse.jdt.ui.edit.text.java.show.javadoc"</code>).
+        * (value <code>"net.sourceforge.phpdt.ui.edit.text.java.show.javadoc"</code>).
         */
 public static final String SHOW_JAVADOC = "net.sourceforge.phpeclipse.ui.edit.text.java.show.javadoc"; //$NON-NLS-1$
 
index b9fc4d7..1f6fc5f 100644 (file)
@@ -25,7 +25,7 @@ public class PHPdtActionConstants {
   //   Edit menu
   /**
         * Edit menu: name of standard Show Javadoc global action
-        * (value <code>"org.eclipse.jdt.ui.actions.ShowJavaDoc"</code>).
+        * (value <code>"net.sourceforge.phpdt.ui.actions.ShowJavaDoc"</code>).
         */
        public static final String SHOW_JAVA_DOC= "net.sourceforge.phpeclipse.phpeditor.ShowJavaDoc"; //$NON-NLS-1$
        
@@ -51,14 +51,14 @@ public class PHPdtActionConstants {
   
   /**
         * Source menu: name of standard ToggleComment global action
-        * (value <code>"org.eclipse.jdt.ui.actions.ToggleComment"</code>).
+        * (value <code>"net.sourceforge.phpdt.ui.actions.ToggleComment"</code>).
         * @since 3.0
         */
        public static final String TOGGLE_COMMENT= "net.sourceforge.phpeclipse.ui.actions.ToggleComment"; //$NON-NLS-1$
        
        /**
         * Source menu: name of standard Comment global action
-        * (value <code>"org.eclipse.jdt.ui.actions.AddBlockComment"</code>).
+        * (value <code>"net.sourceforge.phpdt.ui.actions.AddBlockComment"</code>).
         * 
         * @since 3.0
         */
@@ -66,7 +66,7 @@ public class PHPdtActionConstants {
        
        /**
         * Source menu: name of standard Uncomment global action
-        * (value <code>"org.eclipse.jdt.ui.actions.RemoveBlockComment"</code>).
+        * (value <code>"net.sourceforge.phpdt.ui.actions.RemoveBlockComment"</code>).
         * 
         * @since 3.0
         */
@@ -74,7 +74,7 @@ public class PHPdtActionConstants {
        
        /**
         * Source menu: name of standard Indent global action
-        * (value <code>"org.eclipse.jdt.ui.actions.Indent"</code>).
+        * (value <code>"net.sourceforge.phpdt.ui.actions.Indent"</code>).
         * 
         * @since 3.0
         */
index fb386ab..e4710b0 100644 (file)
@@ -159,7 +159,7 @@ public class JavaTextTools implements IPHPPartitions {
    * @param coreStore
    *          optional preference store to initialize the text tools. The text tool instance installs a listener on the passed
    *          preference store to adapt itself to changes in the preference store.
-   * @see org.eclipse.jdt.ui.PreferenceConstants#getPreferenceStore()
+   * @see net.sourceforge.phpdt.ui.PreferenceConstants#getPreferenceStore()
    * @since 2.1
    */
   public JavaTextTools(IPreferenceStore store, Preferences coreStore) {
@@ -180,7 +180,7 @@ public class JavaTextTools implements IPHPPartitions {
    * @param autoDisposeOnDisplayDispose
    *          if <code>true</code> the color manager automatically disposes all managed colors when the current display gets
    *          disposed and all calls to {@link org.eclipse.jface.text.source.ISharedTextColors#dispose()}are ignored.
-   * @see org.eclipse.jdt.ui.PreferenceConstants#getPreferenceStore()
+   * @see net.sourceforge.phpdt.ui.PreferenceConstants#getPreferenceStore()
    * @since 2.1
    */
   public JavaTextTools(IPreferenceStore store, Preferences coreStore, boolean autoDisposeOnDisplayDispose) {
@@ -479,7 +479,7 @@ public class JavaTextTools implements IPHPPartitions {
    * @return <code>true</code> if event causes a behavioral change
    * @since 2.0
    * @deprecated As of 3.0, replaced by
-   *             {@link org.eclipse.jdt.ui.text.JavaSourceViewerConfiguration#affectsTextPresentation(PropertyChangeEvent)}
+   *             {@link net.sourceforge.phpdt.ui.text.JavaSourceViewerConfiguration#affectsTextPresentation(PropertyChangeEvent)}
    */
   //  public boolean affectsBehavior(PropertyChangeEvent event) {
   //    return fCodeScanner.affectsBehavior(event)
index 7708050..cfd2d31 100644 (file)
@@ -503,16 +503,6 @@ public class PHPSourceViewerConfiguration extends SourceViewerConfiguration {
     return null;
   }
 
-  //   public IReconciler getReconciler(ISourceViewer sourceViewer) {
-  //           if (getEditor() != null && getEditor().isEditable()) {
-  //                   JavaReconciler reconciler = new JavaReconciler(getEditor(),
-  //                                   new JavaReconcilingStrategy(getEditor()), false);
-  //                   reconciler.setProgressMonitor(new NullProgressMonitor());
-  //                   reconciler.setDelay(500);
-  //                   return reconciler;
-  //           }
-  //           return null;
-  //   }
   /*
    * @see SourceViewerConfiguration#getConfiguredTextHoverStateMasks(ISourceViewer, String)
    * @since 2.1
index 99d71c2..3148d97 100644 (file)
@@ -11,6 +11,6 @@ Application programming interfaces for interaction
 with the Eclipse Java Editor folding.
 <h2>
 Package Specification</h2>
-Interfaces for contributions to the <code>org.eclipse.jdt.ui.foldingStructureProviders</code> extension point.
+Interfaces for contributions to the <code>net.sourceforge.phpdt.ui.foldingStructureProviders</code> extension point.
 </body>
 </html>
index 0d8a251..8105380 100644 (file)
@@ -78,8 +78,8 @@ import org.eclipse.swt.widgets.Control;
  * example usage of <code>NewTypeWizardPage</code>.
  * </p>
  * 
- * @see org.eclipse.jdt.ui.wizards.NewClassWizardPage
- * @see org.eclipse.jdt.ui.wizards.NewInterfaceWizardPage
+ * @see net.sourceforge.phpdt.ui.wizards.NewClassWizardPage
+ * @see net.sourceforge.phpdt.ui.wizards.NewInterfaceWizardPage
  * 
  * @since 2.0
  */
@@ -601,7 +601,7 @@ public abstract class NewTypeWizardPage extends NewContainerWizardPage {
   // -------- update message ----------------          
 
   /*
-   * @see org.eclipse.jdt.ui.wizards.NewContainerWizardPage#handleFieldChanged(String)
+   * @see net.sourceforge.phpdt.ui.wizards.NewContainerWizardPage#handleFieldChanged(String)
    */
   protected void handleFieldChanged(String fieldName) {
     super.handleFieldChanged(fieldName);
index dabecf1..8dab12b 100644 (file)
@@ -51,7 +51,7 @@ public class PHPPerspectiveFactory implements IPerspectiveFactory {
     layout.addShowViewShortcut(IPageLayout.ID_PROBLEM_VIEW);
     layout.addShowViewShortcut(IPageLayout.ID_RES_NAV);
     // new actions - PHP project creation wizards
-    //         layout.addNewWizardShortcut("org.eclipse.jdt.ui.wizards.NewInterfaceCreationWizard");
+    //         layout.addNewWizardShortcut("net.sourceforge.phpdt.ui.wizards.NewInterfaceCreationWizard");
     // //$NON-NLS-1$
     layout
         .addNewWizardShortcut("net.sourceforge.phpeclipse.wizards.PHPFileWizard"); //$NON-NLS-1$
index 7b7954c..8e859cf 100644 (file)
@@ -11,6 +11,7 @@ import java.util.ArrayList;
 import java.util.Collection;
 import java.util.Comparator;
 import java.util.HashMap;
+import java.util.HashSet;
 import java.util.Iterator;
 import java.util.List;
 import java.util.Set;
@@ -53,6 +54,24 @@ public class IdentifierIndexManager {
      *          current identifier
      * @param line
      *          Buffer for the current index line
+     */
+    private void addIdentifierInformation(char typeOfIdentifier, char[] identifier, StringBuffer line) {
+      line.append('\t');
+      line.append(typeOfIdentifier);
+      line.append(identifier);
+      //      line.append("\to"); // Offset
+      //      line.append(fScanner.getCurrentTokenStartPosition());
+    }
+
+    /**
+     * Add the information of the current identifier to the line
+     * 
+     * @param typeOfIdentifier
+     *          the type of the identifier ('c'lass, 'd'efine, 'f'unction, 'm'ethod(class), 'v'ariable(class) 'g'lobal variable)
+     * @param identifier
+     *          current identifier
+     * @param line
+     *          Buffer for the current index line
      * @param phpdocOffset
      *          the offset of the PHPdoc comment if available
      * @param phpdocLength
@@ -161,6 +180,30 @@ public class IdentifierIndexManager {
               ident = fScanner.getCurrentIdentifierSource();
               addIdentifierInformation('c', ident, buf, phpdocOffset, phpdocLength);
               getNextToken();
+              if (fToken == TokenNameextends) {
+                getNextToken();
+                while (fToken == TokenNameIdentifier) {
+                  ident = fScanner.getCurrentIdentifierSource();
+                  // extends ident
+                  addIdentifierInformation('e', ident, buf);
+                  getNextToken();
+                  if (fToken == TokenNameCOMMA) {
+                    getNextToken();
+                  }
+                }
+              }
+              if (fToken == TokenNameimplements) {
+                getNextToken();
+                while (fToken == TokenNameIdentifier) {
+                  ident = fScanner.getCurrentIdentifierSource();
+                  // implements ident
+                  addIdentifierInformation('e', ident, buf);
+                  getNextToken();
+                  if (fToken == TokenNameCOMMA) {
+                    getNextToken();
+                  }
+                }
+              }
               //skip tokens for classname, extends and others until we have
               // the opening '{'
               while (fToken != TokenNameLBRACE && fToken != TokenNameEOF && fToken != TokenNameERROR) {
@@ -276,6 +319,30 @@ public class IdentifierIndexManager {
               ident = fScanner.getCurrentIdentifierSource();
               addIdentifierInformation('c', ident, buf, phpdocOffset, phpdocLength);
               getNextToken();
+              if (fToken == TokenNameextends) {
+                getNextToken();
+                while (fToken == TokenNameIdentifier) {
+                  ident = fScanner.getCurrentIdentifierSource();
+                  // extends ident
+                  addIdentifierInformation('e', ident, buf);
+                  getNextToken();
+                  if (fToken == TokenNameCOMMA) {
+                    getNextToken();
+                  }
+                }
+              }
+              if (fToken == TokenNameimplements) {
+                getNextToken();
+                while (fToken == TokenNameIdentifier) {
+                  ident = fScanner.getCurrentIdentifierSource();
+                  // implements ident
+                  addIdentifierInformation('e', ident, buf);
+                  getNextToken();
+                  if (fToken == TokenNameCOMMA) {
+                    getNextToken();
+                  }
+                }
+              }
               //skip fTokens for classname, extends and others until we have
               // the opening '{'
               while (fToken != TokenNameLBRACE && fToken != TokenNameEOF && fToken != TokenNameERROR) {
@@ -415,6 +482,75 @@ public class IdentifierIndexManager {
    * @param line
    */
   private void addLine(String line) {
+    addLine(fIndentifierMap, fFileMap, line, null);
+  }
+
+  public TreeMap getIdentifiers(IFile file) {
+    TreeMap treeMap = new TreeMap(new StringComparator());
+    addIdentifiers(treeMap, file);
+    return treeMap;
+  }
+  public TreeMap getIdentifiers(String startClazz) {
+    TreeMap treeMap = new TreeMap(new StringComparator());
+    addIdentifiers(treeMap, startClazz);
+    return treeMap;
+  }
+  
+  public void addIdentifiers(TreeMap treeMap, IFile file) {
+    String line = (String) fFileMap.get(file.getProjectRelativePath().toString());
+    if (line != null) {
+      PHPIdentifierLocation ident;
+      ArrayList allClassNames = new ArrayList();
+      addLine(treeMap, null, line, allClassNames);
+      int i=0;
+      while (i<allClassNames.size()) {
+        String clazz = (String) allClassNames.get(i++);
+        addClassName(treeMap, clazz, allClassNames);
+      }
+    }
+  }
+
+  public void addIdentifiers(TreeMap treeMap, String startClazz) {
+    PHPIdentifierLocation ident;
+    ArrayList allClassNames = new ArrayList();
+    addClassName(treeMap, startClazz, allClassNames);
+    int i=0;
+    while (i<allClassNames.size()) {
+      String clazz = (String) allClassNames.get(i++);
+      addClassName(treeMap, clazz, allClassNames);
+    }
+  }
+
+  /**
+   * @param treeMap
+   * @param clazz
+   * @param allClassNames
+   */
+  private boolean addClassName(TreeMap treeMap, String clazz, List allClassNames) {
+    String line;
+    PHPIdentifierLocation ident;
+    List list = getLocations(clazz);
+    if (list==null) {
+      return false;
+    }
+    boolean result = false;
+    for (int i = 0; i < list.size(); i++) {
+      ident = (PHPIdentifierLocation) list.get(i);
+      if (ident.isClass()) {
+        line = (String) fFileMap.get(ident.getFilename());
+        addLine(treeMap, null, line, allClassNames);
+        result = true;
+      }
+    }
+    return result;
+  }
+
+  /**
+   * Adds a line of the index file for function, class, class-method and class-variable names
+   * 
+   * @param line
+   */
+  public void addLine(TreeMap treeMap, HashMap fileMap, String line, List allClassNames) {
     StringTokenizer tokenizer;
     String phpFileName = null;
     String token;
@@ -448,6 +584,18 @@ public class IdentifierIndexManager {
           identifier = token.substring(1);
           phpIdentifier = new PHPIdentifierLocation(identifier, PHPIdentifier.DEFINE, phpFileName);
           break;
+        case 'e':
+          // extends <class name>
+          // not in map
+          identifier = null;
+          phpIdentifier = null;
+          if (allClassNames != null) {
+            String extName = token.substring(1);
+            if (!allClassNames.contains(extName)) {
+              allClassNames.add(extName);
+            }
+          }
+          break;
         case 'f':
           // function name
           identifier = token.substring(1);
@@ -458,6 +606,18 @@ public class IdentifierIndexManager {
           identifier = token.substring(1);
           phpIdentifier = new PHPIdentifierLocation(identifier, PHPIdentifier.GLOBAL_VARIABLE, phpFileName);
           break;
+        case 'i':
+          // implements <class name>
+          // not in map
+          identifier = null;
+          phpIdentifier = null;
+          if (allClassNames != null) {
+            String implName = token.substring(1);
+            if (!allClassNames.contains(implName)) {
+              allClassNames.add(implName);
+            }
+          }
+          break;
         case 'k':
           // constructor function name
           identifier = token.substring(1);
@@ -505,11 +665,11 @@ public class IdentifierIndexManager {
         }
         if (identifier != null && phpIdentifier != null) {
           tokenExists = true;
-          ArrayList list = (ArrayList) fIndentifierMap.get(identifier);
+          ArrayList list = (ArrayList) treeMap.get(identifier);
           if (list == null) {
             list = new ArrayList();
             list.add(phpIdentifier);
-            fIndentifierMap.put(identifier, list);
+            treeMap.put(identifier, list);
           } else {
             boolean flag = false;
             for (int i = 0; i < list.size(); i++) {
@@ -524,13 +684,15 @@ public class IdentifierIndexManager {
           }
         }
       }
-      fFileMap.put(phpFileName, line);
+      if (fileMap != null) {
+        fileMap.put(phpFileName, line);
+      }
     } catch (Throwable e) {
       // write to workspace/.metadata/.log file
       PHPeclipsePlugin.log(e);
     }
     //    if (tokenExists) {
-    
+
     //    }
   }
 
@@ -635,6 +797,11 @@ public class IdentifierIndexManager {
         identifier = token.substring(1);
         phpIdentifier = new PHPIdentifierLocation(identifier, PHPIdentifier.DEFINE, phpFileName);
         break;
+      case 'e':
+        // extends <class name>
+        identifier = null;
+        phpIdentifier = null;
+        break;
       case 'f':
         // function name
         identifier = token.substring(1);
@@ -645,6 +812,11 @@ public class IdentifierIndexManager {
         identifier = token.substring(1);
         phpIdentifier = new PHPIdentifierLocation(identifier, PHPIdentifier.GLOBAL_VARIABLE, phpFileName);
         break;
+      case 'i':
+        // implements <class name>
+        identifier = null;
+        phpIdentifier = null;
+        break;
       case 'k':
         // constructor function name
         identifier = token.substring(1);
index 26c44ec..a0ae11f 100644 (file)
@@ -10,7 +10,7 @@
  *******************************************************************************/
 package net.sourceforge.phpeclipse.internal.compiler.ast;
 
-import net.sourceforge.phpdt.internal.compiler.IAbstractSyntaxTreeVisitor;
+import net.sourceforge.phpdt.internal.compiler.ASTVisitor;
 import net.sourceforge.phpdt.internal.compiler.flow.FlowContext;
 import net.sourceforge.phpdt.internal.compiler.flow.FlowInfo;
 import net.sourceforge.phpdt.internal.compiler.impl.Constant;
@@ -299,7 +299,7 @@ public class AND_AND_Expression extends BinaryExpression {
                return false;
        }
 
-       public void traverse(IAbstractSyntaxTreeVisitor visitor, BlockScope scope) {
+       public void traverse(ASTVisitor visitor, BlockScope scope) {
                if (visitor.visit(this, scope)) {
                        left.traverse(visitor, scope);
                        right.traverse(visitor, scope);
index 264a0ca..2d7dd88 100644 (file)
@@ -10,7 +10,7 @@
  *******************************************************************************/
 package net.sourceforge.phpeclipse.internal.compiler.ast;
 
-import net.sourceforge.phpdt.internal.compiler.IAbstractSyntaxTreeVisitor;
+import net.sourceforge.phpdt.internal.compiler.ASTVisitor;
 import net.sourceforge.phpdt.internal.compiler.impl.Constant;
 import net.sourceforge.phpdt.internal.compiler.lookup.ArrayBinding;
 import net.sourceforge.phpdt.internal.compiler.lookup.BaseTypes;
@@ -94,7 +94,8 @@ public abstract class ASTNode implements BaseTypes, CompilerModifiers, TypeConst
 
        // for type declaration
        public static final int AddAssertionMASK = Bit1;
-
+       public static final int IsMemberTypeMASK = Bit11; // local member do not know it is local at parse time (need to look at binding)
+       
        // for type, method and field declarations 
        public static final int HasLocalTypeMASK = Bit2; // cannot conflict with AddAssertionMASK
 
@@ -107,6 +108,22 @@ public abstract class ASTNode implements BaseTypes, CompilerModifiers, TypeConst
        
        // for references on lhs of assignment (set only for true assignments, as opposed to compound ones)
        public static final int IsStrictlyAssignedMASK = Bit14;
+       public static final int IsCompoundAssignedMASK = Bit17; // set only for compound assignments, as opposed to other ones
+
+       // for empty statement
+       public static final int IsUsefulEmptyStatementMASK = Bit1;
+
+       // for block and method declaration
+       public static final int UndocumentedEmptyBlockMASK = Bit4;
+
+       // for compilation unit
+       public static final int HasAllMethodBodies = Bit5;
+       
+       // for references in Javadoc comments
+       public static final int InsideJavadoc = Bit16;
+       
+       // for if statement
+       public static final int IsElseIfStatement = Bit30;
        
        public ASTNode() {
 
@@ -229,6 +246,38 @@ public abstract class ASTNode implements BaseTypes, CompilerModifiers, TypeConst
                return s;
        }
 
+       public abstract StringBuffer print(int indent, StringBuffer output);
+
+       public static StringBuffer printIndent(int indent, StringBuffer output) {
+
+               for (int i = indent; i > 0; i--) output.append("  "); //$NON-NLS-1$
+               return output;
+       }
+
+       public static StringBuffer printModifiers(int modifiers, StringBuffer output) {
+
+               if ((modifiers & AccPublic) != 0)
+                       output.append("public "); //$NON-NLS-1$
+               if ((modifiers & AccPrivate) != 0)
+                       output.append("private "); //$NON-NLS-1$
+               if ((modifiers & AccProtected) != 0)
+                       output.append("protected "); //$NON-NLS-1$
+               if ((modifiers & AccStatic) != 0)
+                       output.append("static "); //$NON-NLS-1$
+               if ((modifiers & AccFinal) != 0)
+                       output.append("final "); //$NON-NLS-1$
+//             if ((modifiers & AccSynchronized) != 0)
+//                     output.append("synchronized "); //$NON-NLS-1$
+//             if ((modifiers & AccVolatile) != 0)
+//                     output.append("volatile "); //$NON-NLS-1$
+//             if ((modifiers & AccTransient) != 0)
+//                     output.append("transient "); //$NON-NLS-1$
+//             if ((modifiers & AccNative) != 0)
+//                     output.append("native "); //$NON-NLS-1$
+               if ((modifiers & AccAbstract) != 0)
+                       output.append("abstract "); //$NON-NLS-1$
+               return output;
+       }
        /** 
         * @deprecated - use field instead
        */
@@ -261,6 +310,6 @@ public abstract class ASTNode implements BaseTypes, CompilerModifiers, TypeConst
                return "****" + super.toString() + "****";  //$NON-NLS-2$ //$NON-NLS-1$
        }
        
-       public void traverse(IAbstractSyntaxTreeVisitor visitor, BlockScope scope) {
+       public void traverse(ASTVisitor visitor, BlockScope scope) {
        }
 }
index 7919157..217f853 100644 (file)
@@ -11,8 +11,8 @@
 package net.sourceforge.phpeclipse.internal.compiler.ast;
 
 import net.sourceforge.phpdt.core.compiler.CharOperation;
+import net.sourceforge.phpdt.internal.compiler.ASTVisitor;
 import net.sourceforge.phpdt.internal.compiler.CompilationResult;
-import net.sourceforge.phpdt.internal.compiler.IAbstractSyntaxTreeVisitor;
 import net.sourceforge.phpdt.internal.compiler.flow.FlowInfo;
 import net.sourceforge.phpdt.internal.compiler.flow.InitializationFlowContext;
 import net.sourceforge.phpdt.internal.compiler.impl.ReferenceContext;
@@ -309,7 +309,50 @@ public abstract class AbstractMethodDeclaration
        public abstract void parseStatements(
                UnitParser parser,
                CompilationUnitDeclaration unit);
+       public StringBuffer print(int tab, StringBuffer output) {
+
+               printIndent(tab, output);
+               printModifiers(this.modifiers, output);
+               printReturnType(0, output).append(this.selector).append('(');
+               if (this.arguments != null) {
+                       for (int i = 0; i < this.arguments.length; i++) {
+                               if (i > 0) output.append(", "); //$NON-NLS-1$
+                               this.arguments[i].print(0, output);
+                       }
+               }
+               output.append(')');
+               if (this.thrownExceptions != null) {
+                       output.append(" throws "); //$NON-NLS-1$
+                       for (int i = 0; i < this.thrownExceptions.length; i++) {
+                               if (i > 0) output.append(", "); //$NON-NLS-1$
+                               this.thrownExceptions[i].print(0, output);
+                       }
+               }
+               printBody(tab + 1, output);
+               return output;
+       }
+
+       public StringBuffer printBody(int indent, StringBuffer output) {
+
+               if (isAbstract() || (this.modifiers & AccSemicolonBody) != 0) 
+                       return output.append(';');
 
+               output.append(" {"); //$NON-NLS-1$
+               if (this.statements != null) {
+                       for (int i = 0; i < this.statements.length; i++) {
+                               output.append('\n');
+                               this.statements[i].printStatement(indent, output); 
+                       }
+               }
+               output.append('\n'); //$NON-NLS-1$
+               printIndent(indent == 0 ? 0 : indent - 1, output).append('}');
+               return output;
+       }
+
+       public StringBuffer printReturnType(int indent, StringBuffer output) {
+               
+               return output;
+       }
        public void resolve(ClassScope upperScope) {
 
                if (binding == null) {
@@ -393,7 +436,7 @@ public abstract class AbstractMethodDeclaration
        }
 
        public void traverse(
-               IAbstractSyntaxTreeVisitor visitor,
+           ASTVisitor visitor,
                ClassScope classScope) {
        }
 }
index 3f7803b..a426061 100644 (file)
@@ -33,6 +33,17 @@ public abstract class AbstractVariableDeclaration extends Statement {
        }
 
        public abstract String name();
+       public StringBuffer printStatement(int indent, StringBuffer output) {
+
+               printIndent(indent, output);
+               printModifiers(this.modifiers, output);
+               type.print(0, output).append(' ').append(this.name); 
+               if (initialization != null) {
+                       output.append(" = "); //$NON-NLS-1$
+                       initialization.printExpression(indent, output);
+               }
+               return output.append(';');
+       }
 
        public void resolve(BlockScope scope) {}
                
index 9e898ac..b1c2034 100644 (file)
@@ -10,7 +10,7 @@
  *******************************************************************************/
 package net.sourceforge.phpeclipse.internal.compiler.ast;
 
-import net.sourceforge.phpdt.internal.compiler.IAbstractSyntaxTreeVisitor;
+import net.sourceforge.phpdt.internal.compiler.ASTVisitor;
 import net.sourceforge.phpdt.internal.compiler.flow.FlowContext;
 import net.sourceforge.phpdt.internal.compiler.flow.FlowInfo;
 import net.sourceforge.phpdt.internal.compiler.lookup.BlockScope;
@@ -200,7 +200,19 @@ public class AllocationExpression
 //                     }
                }
        }
+       public StringBuffer printExpression(int indent, StringBuffer output) {
 
+               output.append("new "); //$NON-NLS-1$
+               type.printExpression(0, output); 
+               output.append('(');
+               if (arguments != null) {
+                       for (int i = 0; i < arguments.length; i++) {
+                               if (i > 0) output.append(", "); //$NON-NLS-1$
+                               arguments[i].printExpression(0, output);
+                       }
+               }
+               return output.append(')');
+       }
        public TypeBinding resolveType(BlockScope scope) {
 
                // Propagate the type checking to the arguments, and check if the constructor is defined.
@@ -274,7 +286,7 @@ public class AllocationExpression
                return s;
        }
 
-       public void traverse(IAbstractSyntaxTreeVisitor visitor, BlockScope scope) {
+       public void traverse(ASTVisitor visitor, BlockScope scope) {
 
                if (visitor.visit(this, scope)) {
                        int argumentsLength;
index 21793c9..9891351 100644 (file)
@@ -10,8 +10,8 @@
  *******************************************************************************/
 package net.sourceforge.phpeclipse.internal.compiler.ast;
 
+import net.sourceforge.phpdt.internal.compiler.ASTVisitor;
 import net.sourceforge.phpdt.internal.compiler.CompilationResult;
-import net.sourceforge.phpdt.internal.compiler.IAbstractSyntaxTreeVisitor;
 import net.sourceforge.phpdt.internal.compiler.lookup.BlockScope;
 import net.sourceforge.phpdt.internal.compiler.lookup.LocalTypeBinding;
 import net.sourceforge.phpdt.internal.compiler.lookup.MethodBinding;
@@ -133,7 +133,7 @@ public class AnonymousLocalTypeDeclaration extends LocalTypeDeclaration {
         *
         */
        public void traverse(
-               IAbstractSyntaxTreeVisitor visitor,
+           ASTVisitor visitor,
                BlockScope blockScope) {
 
                if (ignoreFurtherInvestigation)
index f803c13..af11ab6 100644 (file)
@@ -10,7 +10,7 @@
  *******************************************************************************/
 package net.sourceforge.phpeclipse.internal.compiler.ast;
 
-import net.sourceforge.phpdt.internal.compiler.IAbstractSyntaxTreeVisitor;
+import net.sourceforge.phpdt.internal.compiler.ASTVisitor;
 import net.sourceforge.phpdt.internal.compiler.lookup.BlockScope;
 import net.sourceforge.phpdt.internal.compiler.lookup.LocalVariableBinding;
 import net.sourceforge.phpdt.internal.compiler.lookup.MethodScope;
@@ -83,7 +83,7 @@ public class Argument extends LocalDeclaration {
                return s;
        }
 
-       public void traverse(IAbstractSyntaxTreeVisitor visitor, BlockScope scope) {
+       public void traverse(ASTVisitor visitor, BlockScope scope) {
                
                if (visitor.visit(this, scope)) {
                        if (type != null)
index 93a145a..524ad04 100644 (file)
@@ -10,7 +10,7 @@
  *******************************************************************************/
 package net.sourceforge.phpeclipse.internal.compiler.ast;
 
-import net.sourceforge.phpdt.internal.compiler.IAbstractSyntaxTreeVisitor;
+import net.sourceforge.phpdt.internal.compiler.ASTVisitor;
 import net.sourceforge.phpdt.internal.compiler.flow.FlowContext;
 import net.sourceforge.phpdt.internal.compiler.flow.FlowInfo;
 import net.sourceforge.phpdt.internal.compiler.impl.Constant;
@@ -91,7 +91,22 @@ public class ArrayAllocationExpression extends Expression {
 //
 //             codeStream.recordPositionsFrom(pc, this.sourceStart);
 //     }
+       public StringBuffer printExpression(int indent, StringBuffer output) {
 
+               output.append("new "); //$NON-NLS-1$
+               type.print(0, output); 
+               for (int i = 0; i < dimensions.length; i++) {
+                       if (dimensions[i] == null)
+                               output.append("[]"); //$NON-NLS-1$
+                       else {
+                               output.append('[');
+                               dimensions[i].printExpression(0, output);
+                               output.append(']');
+                       }
+               } 
+               if (initializer != null) initializer.printExpression(0, output);
+               return output;
+       }
        public TypeBinding resolveType(BlockScope scope) {
 
                // Build an array type reference using the current dimensions
@@ -169,7 +184,7 @@ public class ArrayAllocationExpression extends Expression {
                return s;
        }
 
-       public void traverse(IAbstractSyntaxTreeVisitor visitor, BlockScope scope) {
+       public void traverse(ASTVisitor visitor, BlockScope scope) {
 
                if (visitor.visit(this, scope)) {
                        int dimensionsLength = dimensions.length;
index 9fe1e25..ad55a8a 100644 (file)
@@ -1,16 +1,13 @@
-/*******************************************************************************
- * Copyright (c) 2000, 2003 IBM Corporation and others.
- * All rights reserved. This program and the accompanying materials 
- * are made available under the terms of the Common Public License v1.0
- * which accompanies this distribution, and is available at
+/***********************************************************************************************************************************
+ * Copyright (c) 2000, 2003 IBM Corporation and others. All rights reserved. This program and the accompanying materials are made
+ * available under the terms of the Common Public License v1.0 which accompanies this distribution, and is available at
  * http://www.eclipse.org/legal/cpl-v10.html
  * 
- * Contributors:
- *     IBM Corporation - initial API and implementation
- *******************************************************************************/
+ * Contributors: IBM Corporation - initial API and implementation
+ **********************************************************************************************************************************/
 package net.sourceforge.phpeclipse.internal.compiler.ast;
 
-import net.sourceforge.phpdt.internal.compiler.IAbstractSyntaxTreeVisitor;
+import net.sourceforge.phpdt.internal.compiler.ASTVisitor;
 import net.sourceforge.phpdt.internal.compiler.flow.FlowContext;
 import net.sourceforge.phpdt.internal.compiler.flow.FlowInfo;
 import net.sourceforge.phpdt.internal.compiler.lookup.ArrayBinding;
@@ -19,180 +16,203 @@ import net.sourceforge.phpdt.internal.compiler.lookup.BlockScope;
 import net.sourceforge.phpdt.internal.compiler.lookup.TypeBinding;
 
 public class ArrayInitializer extends Expression {
-       public Expression[] expressions;
-       public ArrayBinding binding; //the type of the { , , , }
+  public Expression[] expressions;
 
-/**
- * ArrayInitializer constructor comment.
- */
-public ArrayInitializer() {
-       super();
-}
-public FlowInfo analyseCode(BlockScope currentScope, FlowContext flowContext, FlowInfo flowInfo) {
-       if (expressions != null) {
-               for (int i = 0, max = expressions.length; i < max; i++) {
-                       flowInfo = expressions[i].analyseCode(currentScope, flowContext, flowInfo).unconditionalInits();
-               }
-       }
-       return flowInfo;
-}
-/**
- * Code generation for a array initializer
- */
-//public void generateCode(BlockScope currentScope, CodeStream codeStream, boolean valueRequired) {
-//     // Flatten the values and compute the dimensions, by iterating in depth into nested array initializers
-//
-//     int pc = codeStream.position;
-//     int expressionLength = (expressions == null) ? 0: expressions.length;
-//     codeStream.generateInlinedValue(expressionLength);
-//     codeStream.newArray(currentScope, binding);
-//     if (expressions != null) {
-//             // binding is an ArrayType, so I can just deal with the dimension
-//             int elementsTypeID = binding.dimensions > 1 ? -1 : binding.leafComponentType.id;
-//             for (int i = 0; i < expressionLength; i++) {
-//                     Expression expr;
-//                     if ((expr = expressions[i]).constant != NotAConstant) {
-//                             switch (elementsTypeID) { // filter out initializations to default values
-//                                     case T_int :
-//                                     case T_short :
-//                                     case T_byte :
-//                                     case T_char :
-//                                     case T_long :
-//                                             if (expr.constant.longValue() != 0) {
-//                                                     codeStream.dup();
-//                                                     codeStream.generateInlinedValue(i);
-//                                                     expr.generateCode(currentScope, codeStream, true);
-//                                                     codeStream.arrayAtPut(elementsTypeID, false);
-//                                             }
-//                                             break;
-//                                     case T_float :
-//                                     case T_double :
-//                                             double constantValue = expr.constant.doubleValue();
-//                                             if (constantValue == -0.0 || constantValue != 0) {
-//                                                     codeStream.dup();
-//                                                     codeStream.generateInlinedValue(i);
-//                                                     expr.generateCode(currentScope, codeStream, true);
-//                                                     codeStream.arrayAtPut(elementsTypeID, false);
-//                                             }
-//                                             break;
-//                                     case T_boolean :
-//                                             if (expr.constant.booleanValue() != false) {
-//                                                     codeStream.dup();
-//                                                     codeStream.generateInlinedValue(i);
-//                                                     expr.generateCode(currentScope, codeStream, true);
-//                                                     codeStream.arrayAtPut(elementsTypeID, false);
-//                                             }
-//                                             break;
-//                                     default :
-//                                             if (!(expr instanceof NullLiteral)) {
-//                                                     codeStream.dup();
-//                                                     codeStream.generateInlinedValue(i);
-//                                                     expr.generateCode(currentScope, codeStream, true);
-//                                                     codeStream.arrayAtPut(elementsTypeID, false);
-//                                             }
-//                             }
-//                     } else if (!(expr instanceof NullLiteral)) {
-//                             codeStream.dup();
-//                             codeStream.generateInlinedValue(i);
-//                             expr.generateCode(currentScope, codeStream, true);
-//                             codeStream.arrayAtPut(elementsTypeID, false);
-//                     }
-//             }
-//     }
-//     if (!valueRequired) {
-//             codeStream.pop();
-//     }
-//     codeStream.recordPositionsFrom(pc, this.sourceStart);
-//}
-public TypeBinding resolveTypeExpecting(BlockScope scope, TypeBinding expectedTb) {
-       // Array initializers can only occur on the right hand side of an assignment
-       // expression, therefore the expected type contains the valid information
-       // concerning the type that must be enforced by the elements of the array initializer.
+  public ArrayBinding binding; //the type of the { , , , }
 
-       // this method is recursive... (the test on isArrayType is the stop case)
+  /**
+   * ArrayInitializer constructor comment.
+   */
+  public ArrayInitializer() {
+    super();
+  }
 
-       constant = NotAConstant;
-       if (expectedTb.isArrayType()) {
-               binding = (ArrayBinding) expectedTb;
-               if (expressions == null)
-                       return binding;
-               TypeBinding expectedElementsTb = binding.elementsType(scope);
-               if (expectedElementsTb.isBaseType()) {
-                       for (int i = 0, length = expressions.length; i < length; i++) {
-                               Expression expression = expressions[i];
-                               TypeBinding expressionTb =
-                                       (expression instanceof ArrayInitializer)
-                                               ? expression.resolveTypeExpecting(scope, expectedElementsTb)
-                                               : expression.resolveType(scope);
-                               if (expressionTb == null)
-                                       return null;
+  public FlowInfo analyseCode(BlockScope currentScope, FlowContext flowContext, FlowInfo flowInfo) {
+    if (expressions != null) {
+      for (int i = 0, max = expressions.length; i < max; i++) {
+        flowInfo = expressions[i].analyseCode(currentScope, flowContext, flowInfo).unconditionalInits();
+      }
+    }
+    return flowInfo;
+  }
 
-                               // Compile-time conversion required?
-                               if (expression.isConstantValueOfTypeAssignableToType(expressionTb, expectedElementsTb)) {
-                                       expression.implicitWidening(expectedElementsTb, expressionTb);
-                               } else if (BaseTypeBinding.isWidening(expectedElementsTb.id, expressionTb.id)) {
-                                       expression.implicitWidening(expectedElementsTb, expressionTb);
-                               } else {
-                                       scope.problemReporter().typeMismatchErrorActualTypeExpectedType(expression, expressionTb, expectedElementsTb);
-                                       return null;
-                               }
-                       }
-               } else {
-                       for (int i = 0, length = expressions.length; i < length; i++)
-                               if (expressions[i].resolveTypeExpecting(scope, expectedElementsTb) == null)
-                                       return null;
-               }
-               return binding;
-       }
-       
-       // infer initializer type for error reporting based on first element
-       TypeBinding leafElementType = null;
-       int dim = 1;
-       if (expressions == null) {
-               leafElementType = scope.getJavaLangObject();
-       } else {
-               Expression currentExpression = expressions[0];
-               while(currentExpression != null && currentExpression instanceof ArrayInitializer) {
-                       dim++;
-                       Expression[] subExprs = ((ArrayInitializer) currentExpression).expressions;
-                       if (subExprs == null){
-                               leafElementType = scope.getJavaLangObject();
-                               currentExpression = null;
-                               break;
-                       }
-                       currentExpression = ((ArrayInitializer) currentExpression).expressions[0];
-               }
-               if (currentExpression != null) {
-                       leafElementType = currentExpression.resolveType(scope);
-               }
-       }
-       if (leafElementType != null) {
-               TypeBinding probableTb = scope.createArray(leafElementType, dim);
-               scope.problemReporter().typeMismatchErrorActualTypeExpectedType(this, probableTb, expectedTb);
-       }
-       return null;
-}
-public String toStringExpression() {
+  /**
+   * Code generation for a array initializer
+   */
+  //public void generateCode(BlockScope currentScope, CodeStream codeStream, boolean valueRequired) {
+  //   // Flatten the values and compute the dimensions, by iterating in depth into nested array initializers
+  //
+  //   int pc = codeStream.position;
+  //   int expressionLength = (expressions == null) ? 0: expressions.length;
+  //   codeStream.generateInlinedValue(expressionLength);
+  //   codeStream.newArray(currentScope, binding);
+  //   if (expressions != null) {
+  //           // binding is an ArrayType, so I can just deal with the dimension
+  //           int elementsTypeID = binding.dimensions > 1 ? -1 : binding.leafComponentType.id;
+  //           for (int i = 0; i < expressionLength; i++) {
+  //                   Expression expr;
+  //                   if ((expr = expressions[i]).constant != NotAConstant) {
+  //                           switch (elementsTypeID) { // filter out initializations to default values
+  //                                   case T_int :
+  //                                   case T_short :
+  //                                   case T_byte :
+  //                                   case T_char :
+  //                                   case T_long :
+  //                                           if (expr.constant.longValue() != 0) {
+  //                                                   codeStream.dup();
+  //                                                   codeStream.generateInlinedValue(i);
+  //                                                   expr.generateCode(currentScope, codeStream, true);
+  //                                                   codeStream.arrayAtPut(elementsTypeID, false);
+  //                                           }
+  //                                           break;
+  //                                   case T_float :
+  //                                   case T_double :
+  //                                           double constantValue = expr.constant.doubleValue();
+  //                                           if (constantValue == -0.0 || constantValue != 0) {
+  //                                                   codeStream.dup();
+  //                                                   codeStream.generateInlinedValue(i);
+  //                                                   expr.generateCode(currentScope, codeStream, true);
+  //                                                   codeStream.arrayAtPut(elementsTypeID, false);
+  //                                           }
+  //                                           break;
+  //                                   case T_boolean :
+  //                                           if (expr.constant.booleanValue() != false) {
+  //                                                   codeStream.dup();
+  //                                                   codeStream.generateInlinedValue(i);
+  //                                                   expr.generateCode(currentScope, codeStream, true);
+  //                                                   codeStream.arrayAtPut(elementsTypeID, false);
+  //                                           }
+  //                                           break;
+  //                                   default :
+  //                                           if (!(expr instanceof NullLiteral)) {
+  //                                                   codeStream.dup();
+  //                                                   codeStream.generateInlinedValue(i);
+  //                                                   expr.generateCode(currentScope, codeStream, true);
+  //                                                   codeStream.arrayAtPut(elementsTypeID, false);
+  //                                           }
+  //                           }
+  //                   } else if (!(expr instanceof NullLiteral)) {
+  //                           codeStream.dup();
+  //                           codeStream.generateInlinedValue(i);
+  //                           expr.generateCode(currentScope, codeStream, true);
+  //                           codeStream.arrayAtPut(elementsTypeID, false);
+  //                   }
+  //           }
+  //   }
+  //   if (!valueRequired) {
+  //           codeStream.pop();
+  //   }
+  //   codeStream.recordPositionsFrom(pc, this.sourceStart);
+  //}
+  public StringBuffer printExpression(int indent, StringBuffer output) {
 
-       String s = "{" ; //$NON-NLS-1$
-       if (expressions != null)
-       {       int j = 20 ; 
-               for (int i = 0 ; i < expressions.length ; i++)
-               {       s = s + expressions[i].toStringExpression() + "," ; //$NON-NLS-1$
-                       j -- ;
-                       if (j == 0)
-                       {       s = s + "\n                "; j = 20;}}}; //$NON-NLS-1$
-       s = s + "}"; //$NON-NLS-1$
-       return s;}
+    output.append('{');
+    if (expressions != null) {
+      int j = 20;
+      for (int i = 0; i < expressions.length; i++) {
+        if (i > 0)
+          output.append(", "); //$NON-NLS-1$
+        expressions[i].printExpression(0, output);
+        j--;
+        if (j == 0) {
+          output.append('\n');
+          printIndent(indent + 1, output);
+          j = 20;
+        }
+      }
+    }
+    return output.append('}');
+  }
 
-public void traverse(IAbstractSyntaxTreeVisitor visitor, BlockScope scope) {
-       if (visitor.visit(this, scope)) {
-               if (expressions != null) {
-                       int expressionsLength = expressions.length;
-                       for (int i = 0; i < expressionsLength; i++)
-                               expressions[i].traverse(visitor, scope);
-               }
-       }
-       visitor.endVisit(this, scope);
-}
-}
+  public TypeBinding resolveTypeExpecting(BlockScope scope, TypeBinding expectedTb) {
+    // Array initializers can only occur on the right hand side of an assignment
+    // expression, therefore the expected type contains the valid information
+    // concerning the type that must be enforced by the elements of the array initializer.
+
+    // this method is recursive... (the test on isArrayType is the stop case)
+
+    constant = NotAConstant;
+    if (expectedTb.isArrayType()) {
+      binding = (ArrayBinding) expectedTb;
+      if (expressions == null)
+        return binding;
+      TypeBinding expectedElementsTb = binding.elementsType(scope);
+      if (expectedElementsTb.isBaseType()) {
+        for (int i = 0, length = expressions.length; i < length; i++) {
+          Expression expression = expressions[i];
+          TypeBinding expressionTb = (expression instanceof ArrayInitializer) ? expression.resolveTypeExpecting(scope,
+              expectedElementsTb) : expression.resolveType(scope);
+          if (expressionTb == null)
+            return null;
+
+          // Compile-time conversion required?
+          if (expression.isConstantValueOfTypeAssignableToType(expressionTb, expectedElementsTb)) {
+            expression.implicitWidening(expectedElementsTb, expressionTb);
+          } else if (BaseTypeBinding.isWidening(expectedElementsTb.id, expressionTb.id)) {
+            expression.implicitWidening(expectedElementsTb, expressionTb);
+          } else {
+            scope.problemReporter().typeMismatchErrorActualTypeExpectedType(expression, expressionTb, expectedElementsTb);
+            return null;
+          }
+        }
+      } else {
+        for (int i = 0, length = expressions.length; i < length; i++)
+          if (expressions[i].resolveTypeExpecting(scope, expectedElementsTb) == null)
+            return null;
+      }
+      return binding;
+    }
+
+    // infer initializer type for error reporting based on first element
+    TypeBinding leafElementType = null;
+    int dim = 1;
+    if (expressions == null) {
+      leafElementType = scope.getJavaLangObject();
+    } else {
+      Expression currentExpression = expressions[0];
+      while (currentExpression != null && currentExpression instanceof ArrayInitializer) {
+        dim++;
+        Expression[] subExprs = ((ArrayInitializer) currentExpression).expressions;
+        if (subExprs == null) {
+          leafElementType = scope.getJavaLangObject();
+          currentExpression = null;
+          break;
+        }
+        currentExpression = ((ArrayInitializer) currentExpression).expressions[0];
+      }
+      if (currentExpression != null) {
+        leafElementType = currentExpression.resolveType(scope);
+      }
+    }
+    if (leafElementType != null) {
+      TypeBinding probableTb = scope.createArray(leafElementType, dim);
+      scope.problemReporter().typeMismatchErrorActualTypeExpectedType(this, probableTb, expectedTb);
+    }
+    return null;
+  }
+
+  public String toStringExpression() {
+
+    String s = "{"; //$NON-NLS-1$
+    if (expressions != null) {
+      int j = 20;
+      for (int i = 0; i < expressions.length; i++) {
+        s = s + expressions[i].toStringExpression() + ","; //$NON-NLS-1$
+        j--;
+        if (j == 0) {
+          s = s + "\n                ";j = 20;}}}; //$NON-NLS-1$
+    s = s + "}"; //$NON-NLS-1$
+    return s;
+  }
+
+  public void traverse(ASTVisitor visitor, BlockScope scope) {
+    if (visitor.visit(this, scope)) {
+      if (expressions != null) {
+        int expressionsLength = expressions.length;
+        for (int i = 0; i < expressionsLength; i++)
+          expressions[i].traverse(visitor, scope);
+      }
+    }
+    visitor.endVisit(this, scope);
+  }
+}
\ No newline at end of file
index ee45ff3..af3291a 100644 (file)
@@ -10,7 +10,7 @@
  *******************************************************************************/
 package net.sourceforge.phpeclipse.internal.compiler.ast;
 
-import net.sourceforge.phpdt.internal.compiler.IAbstractSyntaxTreeVisitor;
+import net.sourceforge.phpdt.internal.compiler.ASTVisitor;
 import net.sourceforge.phpdt.internal.compiler.flow.FlowContext;
 import net.sourceforge.phpdt.internal.compiler.flow.FlowInfo;
 import net.sourceforge.phpdt.internal.compiler.impl.Constant;
@@ -159,7 +159,12 @@ public class ArrayReference extends Reference {
 //                     postIncrement.assignmentImplicitConversion);
 //             codeStream.arrayAtPut(this.resolvedType.id, false);
 //     }
+       public StringBuffer printExpression(int indent, StringBuffer output) {
 
+               receiver.printExpression(0, output).append('[');
+               return position.printExpression(0, output).append(']');
+       }
+       
        public TypeBinding resolveType(BlockScope scope) {
 
                constant = Constant.NotAConstant;
@@ -184,7 +189,7 @@ public class ArrayReference extends Reference {
                +position.toStringExpression() + "]"; //$NON-NLS-1$
        } 
 
-       public void traverse(IAbstractSyntaxTreeVisitor visitor, BlockScope scope) {
+       public void traverse(ASTVisitor visitor, BlockScope scope) {
                
                if (visitor.visit(this, scope)) {
                        receiver.traverse(visitor, scope);
index 1d42371..56889f7 100644 (file)
@@ -10,8 +10,7 @@
  *******************************************************************************/
 package net.sourceforge.phpeclipse.internal.compiler.ast;
 
-import net.sourceforge.phpdt.internal.compiler.IAbstractSyntaxTreeVisitor;
-import net.sourceforge.phpdt.internal.compiler.codegen.Label;
+import net.sourceforge.phpdt.internal.compiler.ASTVisitor;
 import net.sourceforge.phpdt.internal.compiler.flow.FlowContext;
 import net.sourceforge.phpdt.internal.compiler.flow.FlowInfo;
 import net.sourceforge.phpdt.internal.compiler.impl.Constant;
@@ -118,7 +117,17 @@ public class AssertStatement extends Statement {
 //             }       
 //             codeStream.recordPositionsFrom(pc, this.sourceStart);
 //     }
+       public StringBuffer printStatement(int tab, StringBuffer output) {
 
+               printIndent(tab, output);
+               output.append("assert "); //$NON-NLS-1$
+               this.assertExpression.printExpression(0, output);
+               if (this.exceptionArgument != null) {
+                       output.append(": "); //$NON-NLS-1$
+                       this.exceptionArgument.printExpression(0, output);
+               }
+               return output.append(';');
+       }
        public void resolve(BlockScope scope) {
 
                assertExpression.resolveTypeExpecting(scope, BooleanBinding);
@@ -133,7 +142,7 @@ public class AssertStatement extends Statement {
                }
        }
        
-       public void traverse(IAbstractSyntaxTreeVisitor visitor, BlockScope scope) {
+       public void traverse(ASTVisitor visitor, BlockScope scope) {
 
                if (visitor.visit(this, scope)) {
                        assertExpression.traverse(visitor, scope);
index 4950b2b..d6fca69 100644 (file)
@@ -11,7 +11,7 @@
  *******************************************************************************/
 package net.sourceforge.phpeclipse.internal.compiler.ast;
 
-import net.sourceforge.phpdt.internal.compiler.IAbstractSyntaxTreeVisitor;
+import net.sourceforge.phpdt.internal.compiler.ASTVisitor;
 import net.sourceforge.phpdt.internal.compiler.flow.FlowContext;
 import net.sourceforge.phpdt.internal.compiler.flow.FlowInfo;
 import net.sourceforge.phpdt.internal.compiler.lookup.BaseTypeBinding;
@@ -92,7 +92,30 @@ public class Assignment extends Expression {
                }
                return null;
        }
+       public StringBuffer print(int indent, StringBuffer output) {
 
+               //no () when used as a statement 
+               printIndent(indent, output);
+               return printExpressionNoParenthesis(indent, output);
+       }
+       public StringBuffer printExpression(int indent, StringBuffer output) {
+
+               //subclass redefine printExpressionNoParenthesis()
+               output.append('(');
+               return printExpressionNoParenthesis(0, output).append(')');
+       } 
+
+       public StringBuffer printExpressionNoParenthesis(int indent, StringBuffer output) {
+
+               lhs.printExpression(indent, output).append(" = "); //$NON-NLS-1$
+               return expression.printExpression(0, output);
+       }
+       
+       public StringBuffer printStatement(int indent, StringBuffer output) {
+
+               //no () when used as a statement 
+               return print(indent, output).append(';');
+       }
        public TypeBinding resolveType(BlockScope scope) {
 
                // due to syntax lhs may be only a NameReference, a FieldReference or an ArrayReference
@@ -143,7 +166,7 @@ public class Assignment extends Expression {
                                : " ")  //$NON-NLS-1$
                        + expression.toStringExpression();
        }
-       public void traverse(IAbstractSyntaxTreeVisitor visitor, BlockScope scope) {
+       public void traverse(ASTVisitor visitor, BlockScope scope) {
                
                if (visitor.visit(this, scope)) {
                        lhs.traverse(visitor, scope);
index ea6c70d..9cb7f88 100644 (file)
@@ -10,8 +10,7 @@
  *******************************************************************************/
 package net.sourceforge.phpeclipse.internal.compiler.ast;
 
-import net.sourceforge.phpdt.internal.compiler.IAbstractSyntaxTreeVisitor;
-import net.sourceforge.phpdt.internal.compiler.codegen.Label;
+import net.sourceforge.phpdt.internal.compiler.ASTVisitor;
 import net.sourceforge.phpdt.internal.compiler.flow.FlowContext;
 import net.sourceforge.phpdt.internal.compiler.flow.FlowInfo;
 import net.sourceforge.phpdt.internal.compiler.impl.Constant;
@@ -1643,8 +1642,12 @@ public class BinaryExpression extends OperatorExpression {
 //                                     }
 //                             }
 //             }
-//     }
-       
+//     } 
+       public StringBuffer printExpressionNoParenthesis(int indent, StringBuffer output) {
+
+               left.printExpression(indent, output).append(' ').append(operatorToString()).append(' ');
+               return right.printExpression(0, output);
+       }
        public TypeBinding resolveType(BlockScope scope) {
 
                // use the id of the type to navigate into the table
@@ -1740,7 +1743,7 @@ public class BinaryExpression extends OperatorExpression {
                right.toStringExpression();
        }
 
-       public void traverse(IAbstractSyntaxTreeVisitor visitor, BlockScope scope) {
+       public void traverse(ASTVisitor visitor, BlockScope scope) {
                
                if (visitor.visit(this, scope)) {
                        left.traverse(visitor, scope);
index d2fe75f..fa38430 100644 (file)
@@ -10,7 +10,7 @@
  *******************************************************************************/
 package net.sourceforge.phpeclipse.internal.compiler.ast;
 
-import net.sourceforge.phpdt.internal.compiler.IAbstractSyntaxTreeVisitor;
+import net.sourceforge.phpdt.internal.compiler.ASTVisitor;
 import net.sourceforge.phpdt.internal.compiler.codegen.Label;
 import net.sourceforge.phpdt.internal.compiler.flow.FlowContext;
 import net.sourceforge.phpdt.internal.compiler.flow.FlowInfo;
@@ -80,7 +80,23 @@ public class Block extends Statement {
 
                return statements == null;
        }
+       public StringBuffer printBody(int indent, StringBuffer output) {
 
+               if (this.statements == null) return output;
+               for (int i = 0; i < statements.length; i++) {
+                       statements[i].printStatement(indent + 1, output);
+                       output.append('\n'); 
+               }
+               return output;
+       }
+
+       public StringBuffer printStatement(int indent, StringBuffer output) {
+
+               printIndent(indent, output);
+               output.append("{\n"); //$NON-NLS-1$
+               printBody(indent, output);
+               return printIndent(indent, output).append('}');
+       }
        public void resolve(BlockScope upperScope) {
 
                if (statements != null) {
@@ -138,7 +154,7 @@ public class Block extends Statement {
        }
 
        public void traverse(
-               IAbstractSyntaxTreeVisitor visitor,
+           ASTVisitor visitor,
                BlockScope blockScope) {
 
                if (visitor.visit(this, blockScope)) {
@@ -15,9 +15,9 @@ import net.sourceforge.phpdt.internal.compiler.flow.FlowContext;
 import net.sourceforge.phpdt.internal.compiler.flow.FlowInfo;
 import net.sourceforge.phpdt.internal.compiler.lookup.BlockScope;
 
-public class Break extends BranchStatement {
+public class BreakStatement extends BranchStatement {
        
-       public Break(char[] label, int sourceStart, int e) {
+       public BreakStatement(char[] label, int sourceStart, int e) {
                super(label, sourceStart, e);
        }
 
@@ -87,7 +87,12 @@ public class Break extends BranchStatement {
                        s += new String(label);
                return s;
        }
-       
+       public StringBuffer printStatement(int tab, StringBuffer output) {
+
+               printIndent(tab, output).append("break "); //$NON-NLS-1$
+               if (label != null) output.append(label);
+               return output.append(';');
+       }
        public void traverse(
                IAbstractSyntaxTreeVisitor visitor,
                BlockScope blockscope) {
@@ -10,7 +10,7 @@
  *******************************************************************************/
 package net.sourceforge.phpeclipse.internal.compiler.ast;
 
-import net.sourceforge.phpdt.internal.compiler.IAbstractSyntaxTreeVisitor;
+import net.sourceforge.phpdt.internal.compiler.ASTVisitor;
 import net.sourceforge.phpdt.internal.compiler.codegen.CaseLabel;
 import net.sourceforge.phpdt.internal.compiler.flow.FlowContext;
 import net.sourceforge.phpdt.internal.compiler.flow.FlowInfo;
@@ -19,11 +19,11 @@ import net.sourceforge.phpdt.internal.compiler.lookup.BlockScope;
 import net.sourceforge.phpdt.internal.compiler.lookup.TypeBinding;
 
 
-public class Case extends Statement {
+public class CaseStatement extends Statement {
        
        public Expression constantExpression;
        public CaseLabel targetLabel;
-       public Case(int sourceStart, Expression constantExpression) {
+       public CaseStatement(int sourceStart, Expression constantExpression) {
                this.constantExpression = constantExpression;
                this.sourceEnd = constantExpression.sourceEnd;
                this.sourceStart = sourceStart;
@@ -54,7 +54,17 @@ public class Case extends Statement {
 //             targetLabel.place();
 //             codeStream.recordPositionsFrom(pc, this.sourceStart);
 //     }
+       public StringBuffer printStatement(int tab, StringBuffer output) {
 
+               printIndent(tab, output);
+               if (constantExpression == null) {
+                       output.append("default : "); //$NON-NLS-1$
+               } else {
+                       output.append("case "); //$NON-NLS-1$
+                       constantExpression.printExpression(0, output).append(" : "); //$NON-NLS-1$
+               }
+               return output.append(';');
+       }
        /**
         * No-op : should use resolveCase(...) instead.
         */
@@ -90,7 +100,7 @@ public class Case extends Statement {
        }
 
        public void traverse(
-               IAbstractSyntaxTreeVisitor visitor,
+           ASTVisitor visitor,
                BlockScope blockScope) {
 
                if (visitor.visit(this, blockScope)) {
index 776c33a..c4eb848 100644 (file)
@@ -10,7 +10,7 @@
  *******************************************************************************/
 package net.sourceforge.phpeclipse.internal.compiler.ast;
 
-import net.sourceforge.phpdt.internal.compiler.IAbstractSyntaxTreeVisitor;
+import net.sourceforge.phpdt.internal.compiler.ASTVisitor;
 import net.sourceforge.phpdt.internal.compiler.flow.FlowContext;
 import net.sourceforge.phpdt.internal.compiler.flow.FlowInfo;
 import net.sourceforge.phpdt.internal.compiler.impl.Constant;
@@ -218,8 +218,8 @@ public class CastExpression extends Expression {
        /**
         * Cast expression code generation
         *
-        * @param currentScope org.eclipse.jdt.internal.compiler.lookup.BlockScope
-        * @param codeStream org.eclipse.jdt.internal.compiler.codegen.CodeStream
+        * @param currentScope net.sourceforge.phpdt.internal.compiler.lookup.BlockScope
+        * @param codeStream net.sourceforge.phpdt.internal.compiler.codegen.CodeStream
         * @param valueRequired boolean
         */
 //     public void generateCode(
@@ -263,6 +263,12 @@ public class CastExpression extends Expression {
                }
                return current;
        }
+       public StringBuffer printExpression(int indent, StringBuffer output) {
+
+               output.append('(');
+               type.print(0, output).append(") "); //$NON-NLS-1$
+               return expression.printExpression(0, output);
+       }
 
        public TypeBinding resolveType(BlockScope scope) {
                // compute a new constant if the cast is effective
@@ -295,7 +301,7 @@ public class CastExpression extends Expression {
        }
 
        public void traverse(
-               IAbstractSyntaxTreeVisitor visitor,
+           ASTVisitor visitor,
                BlockScope blockScope) {
 
                if (visitor.visit(this, blockScope)) {
diff --git a/net.sourceforge.phpeclipse/src/net/sourceforge/phpeclipse/internal/compiler/ast/CharLiteral.java b/net.sourceforge.phpeclipse/src/net/sourceforge/phpeclipse/internal/compiler/ast/CharLiteral.java
deleted file mode 100644 (file)
index b9946df..0000000
+++ /dev/null
@@ -1,102 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2000, 2003 IBM Corporation and others.
- * All rights reserved. This program and the accompanying materials 
- * are made available under the terms of the Common Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/cpl-v10.html
- * 
- * Contributors:
- *     IBM Corporation - initial API and implementation
- *******************************************************************************/
-package net.sourceforge.phpeclipse.internal.compiler.ast;
-
-import net.sourceforge.phpdt.internal.compiler.IAbstractSyntaxTreeVisitor;
-import net.sourceforge.phpdt.internal.compiler.impl.Constant;
-import net.sourceforge.phpdt.internal.compiler.lookup.BlockScope;
-import net.sourceforge.phpdt.internal.compiler.lookup.TypeBinding;
-
-
-public class CharLiteral extends NumberLiteral {
-       char value;
-public CharLiteral(char[] token, int s, int e) {
-       super(token, s, e);
-       computeValue();
-}
-public void computeConstant() {
-       //The source is a  char[3] first and last char are '
-       //This is true for both regular char AND unicode char
-       //BUT not for escape char like '\b' which are char[4]....
-
-       constant = Constant.fromValue(value);
-}
-private void computeValue() {
-       //The source is a  char[3] first and last char are '
-       //This is true for both regular char AND unicode char
-       //BUT not for escape char like '\b' which are char[4]....
-
-       if ((value = source[1]) != '\\')
-               return;
-       char digit;
-       switch (digit = source[2]) {
-               case 'b' :
-                       value = '\b';
-                       break;
-               case 't' :
-                       value = '\t';
-                       break;
-               case 'n' :
-                       value = '\n';
-                       break;
-               case 'f' :
-                       value = '\f';
-                       break;
-               case 'r' :
-                       value = '\r';
-                       break;
-               case '\"' :
-                       value = '\"';
-                       break;
-               case '\'' :
-                       value = '\'';
-                       break;
-               case '\\' :
-                       value = '\\';
-                       break;
-               default : //octal (well-formed: ended by a ' )
-                       int number = Character.getNumericValue(digit);
-                       if ((digit = source[3]) != '\'')
-                               number = (number * 8) + Character.getNumericValue(digit);
-                       else {
-                               constant = Constant.fromValue(value = (char) number);
-                               break;
-                       };
-                       if ((digit = source[4]) != '\'')
-                               number = (number * 8) + Character.getNumericValue(digit);
-                       value = (char) number;
-                       break;
-       }
-}
-/**
- * CharLiteral code generation
- *
- * @param currentScope org.eclipse.jdt.internal.compiler.lookup.BlockScope
- * @param codeStream org.eclipse.jdt.internal.compiler.codegen.CodeStream
- * @param valueRequired boolean
- */
-//public void generateCode(BlockScope currentScope, CodeStream codeStream, boolean valueRequired) {
-//     int pc = codeStream.position;
-//     if (valueRequired)
-//             if ((implicitConversion >> 4) == T_char)
-//                     codeStream.generateInlinedValue(value);
-//             else
-//                     codeStream.generateConstant(constant, implicitConversion);
-//     codeStream.recordPositionsFrom(pc, this.sourceStart);
-//}
-public TypeBinding literalType(BlockScope scope) {
-       return CharBinding;
-}
-public void traverse(IAbstractSyntaxTreeVisitor visitor, BlockScope blockScope) {
-       visitor.visit(this, blockScope);
-       visitor.endVisit(this, blockScope);
-}
-}
diff --git a/net.sourceforge.phpeclipse/src/net/sourceforge/phpeclipse/internal/compiler/ast/ClassLiteralAccess.java b/net.sourceforge.phpeclipse/src/net/sourceforge/phpeclipse/internal/compiler/ast/ClassLiteralAccess.java
deleted file mode 100644 (file)
index 4c24608..0000000
+++ /dev/null
@@ -1,100 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2000, 2003 IBM Corporation and others.
- * All rights reserved. This program and the accompanying materials 
- * are made available under the terms of the Common Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/cpl-v10.html
- * 
- * Contributors:
- *     IBM Corporation - initial API and implementation
- *******************************************************************************/
-package net.sourceforge.phpeclipse.internal.compiler.ast;
-
-import net.sourceforge.phpdt.internal.compiler.IAbstractSyntaxTreeVisitor;
-import net.sourceforge.phpdt.internal.compiler.flow.FlowContext;
-import net.sourceforge.phpdt.internal.compiler.flow.FlowInfo;
-import net.sourceforge.phpdt.internal.compiler.lookup.ArrayBinding;
-import net.sourceforge.phpdt.internal.compiler.lookup.BlockScope;
-import net.sourceforge.phpdt.internal.compiler.lookup.FieldBinding;
-import net.sourceforge.phpdt.internal.compiler.lookup.SourceTypeBinding;
-import net.sourceforge.phpdt.internal.compiler.lookup.TypeBinding;
-
-public class ClassLiteralAccess extends Expression {
-       
-       public TypeReference type;
-       public TypeBinding targetType;
-       FieldBinding syntheticField;
-
-       public ClassLiteralAccess(int sourceEnd, TypeReference t) {
-               type = t;
-               this.sourceStart = t.sourceStart;
-               this.sourceEnd = sourceEnd;
-       }
-
-       public FlowInfo analyseCode(
-               BlockScope currentScope,
-               FlowContext flowContext,
-               FlowInfo flowInfo) {
-
-               // if reachable, request the addition of a synthetic field for caching the class descriptor
-               SourceTypeBinding sourceType =
-                       currentScope.outerMostMethodScope().enclosingSourceType();
-               if (!(sourceType.isInterface()
-                       // no field generated in interface case (would'nt verify) see 1FHHEZL
-                       || sourceType.isBaseType())) {
-                       syntheticField = sourceType.addSyntheticField(targetType, currentScope);
-               }
-               return flowInfo;
-       }
-
-       /**
-        * MessageSendDotClass code generation
-        *
-        * @param currentScope org.eclipse.jdt.internal.compiler.lookup.BlockScope
-        * @param codeStream org.eclipse.jdt.internal.compiler.codegen.CodeStream
-        * @param valueRequired boolean
-        */
-//     public void generateCode(
-//             BlockScope currentScope,
-//             CodeStream codeStream,
-//             boolean valueRequired) {
-//             int pc = codeStream.position;
-//
-//             // in interface case, no caching occurs, since cannot make a cache field for interface
-//             if (valueRequired)
-//                     codeStream.generateClassLiteralAccessForType(type.resolvedType, syntheticField);
-//             codeStream.recordPositionsFrom(pc, this.sourceStart);
-//     }
-
-       public TypeBinding resolveType(BlockScope scope) {
-
-               constant = NotAConstant;
-               if ((targetType = type.resolveType(scope)) == null)
-                       return null;
-
-               if (targetType.isArrayType()
-                       && ((ArrayBinding) targetType).leafComponentType == VoidBinding) {
-                       scope.problemReporter().cannotAllocateVoidArray(this);
-                       return null;
-               }
-
-               return this.resolvedType = scope.getJavaLangClass();
-       }
-
-       public String toStringExpression() {
-
-               String s = ""; //$NON-NLS-1$
-               s = s + type.toString(0) + ".class"; //$NON-NLS-1$
-               return s;
-       }
-
-       public void traverse(
-               IAbstractSyntaxTreeVisitor visitor,
-               BlockScope blockScope) {
-
-               if (visitor.visit(this, blockScope)) {
-                       type.traverse(visitor, blockScope);
-               }
-               visitor.endVisit(this, blockScope);
-       }
-}
index 787f28d..2f74317 100644 (file)
@@ -81,8 +81,8 @@ public class Clinit extends AbstractMethodDeclaration {
        /**
         * Bytecode generation for a <clinit> method
         *
-        * @param classScope org.eclipse.jdt.internal.compiler.lookup.ClassScope
-        * @param classFile org.eclipse.jdt.internal.compiler.codegen.ClassFile
+        * @param classScope net.sourceforge.phpdt.internal.compiler.lookup.ClassScope
+        * @param classFile net.sourceforge.phpdt.internal.compiler.codegen.ClassFile
         */
 //     public void generateCode(ClassScope classScope, ClassFile classFile) {
 //
@@ -129,8 +129,8 @@ public class Clinit extends AbstractMethodDeclaration {
        /**
         * Bytecode generation for a <clinit> method
         *
-        * @param classScope org.eclipse.jdt.internal.compiler.lookup.ClassScope
-        * @param classFile org.eclipse.jdt.internal.compiler.codegen.ClassFile
+        * @param classScope net.sourceforge.phpdt.internal.compiler.lookup.ClassScope
+        * @param classFile net.sourceforge.phpdt.internal.compiler.codegen.ClassFile
         */
 //     private void generateCode(
 //             ClassScope classScope,
@@ -218,7 +218,12 @@ public class Clinit extends AbstractMethodDeclaration {
        public void parseStatements(UnitParser parser, CompilationUnitDeclaration unit) {
                //the clinit is filled by hand .... 
        }
+       public StringBuffer print(int tab, StringBuffer output) {
 
+               printIndent(tab, output).append("<clinit>()"); //$NON-NLS-1$
+               printBody(tab + 1, output);
+               return output;
+       }
        public void resolve(ClassScope scope) {
 
                this.scope = new MethodScope(scope, scope.referenceContext, true);
index f6852b8..53274a0 100644 (file)
@@ -12,8 +12,8 @@ package net.sourceforge.phpeclipse.internal.compiler.ast;
 import java.util.ArrayList;
 
 import net.sourceforge.phpdt.core.compiler.CharOperation;
+import net.sourceforge.phpdt.internal.compiler.ASTVisitor;
 import net.sourceforge.phpdt.internal.compiler.CompilationResult;
-import net.sourceforge.phpdt.internal.compiler.IAbstractSyntaxTreeVisitor;
 import net.sourceforge.phpdt.internal.compiler.impl.ReferenceContext;
 import net.sourceforge.phpdt.internal.compiler.lookup.CompilationUnitScope;
 import net.sourceforge.phpdt.internal.compiler.lookup.LocalTypeBinding;
@@ -52,7 +52,6 @@ public class CompilationUnitDeclaration extends ASTNode implements ProblemSeveri
     //by definition of a compilation unit....
     sourceStart = 0;
     sourceEnd = sourceLength - 1;
-
   }
 
   /*
@@ -222,7 +221,26 @@ public class CompilationUnitDeclaration extends ASTNode implements ProblemSeveri
   public boolean hasErrors() {
     return this.ignoreFurtherInvestigation;
   }
-
+       public StringBuffer print(int indent, StringBuffer output) {
+
+               if (currentPackage != null) {
+                       printIndent(indent, output).append("package "); //$NON-NLS-1$
+                       currentPackage.print(0, output, false).append(";\n"); //$NON-NLS-1$
+               }
+               if (imports != null)
+                       for (int i = 0; i < imports.length; i++) {
+                               printIndent(indent, output).append("import "); //$NON-NLS-1$
+                               imports[i].print(0, output).append(";\n"); //$NON-NLS-1$ 
+                       }
+
+               if (types != null) {
+                       for (int i = 0; i < types.size(); i++) {
+                               ((ASTNode)types.get(i)).print(indent, output).append("\n"); //$NON-NLS-1$
+                       }
+               }
+               return output;
+       }
+       
   /*
    * Force inner local types to update their innerclass emulation
    */
@@ -298,7 +316,7 @@ public class CompilationUnitDeclaration extends ASTNode implements ProblemSeveri
     return s;
   }
 
-  public void traverse(IAbstractSyntaxTreeVisitor visitor, CompilationUnitScope scope) {
+  public void traverse(ASTVisitor visitor, CompilationUnitScope scope) {
 
     if (ignoreFurtherInvestigation)
       return;
index fed69c7..e0d7090 100644 (file)
@@ -10,7 +10,7 @@
  *******************************************************************************/
 package net.sourceforge.phpeclipse.internal.compiler.ast;
 
-import net.sourceforge.phpdt.internal.compiler.IAbstractSyntaxTreeVisitor;
+import net.sourceforge.phpdt.internal.compiler.ASTVisitor;
 import net.sourceforge.phpdt.internal.compiler.flow.FlowContext;
 import net.sourceforge.phpdt.internal.compiler.flow.FlowInfo;
 import net.sourceforge.phpdt.internal.compiler.lookup.BlockScope;
@@ -136,7 +136,7 @@ public String toStringExpressionNoParenthesis() {
        return  lhs.toStringExpression() + " " + //$NON-NLS-1$
                        operatorToString() + " " + //$NON-NLS-1$
                        expression.toStringExpression() ; }
-public void traverse(IAbstractSyntaxTreeVisitor visitor, BlockScope scope) {
+public void traverse(ASTVisitor visitor, BlockScope scope) {
        if (visitor.visit(this, scope)) {
                lhs.traverse(visitor, scope);
                expression.traverse(visitor, scope);
index dabfd54..4472c01 100644 (file)
  *******************************************************************************/
 package net.sourceforge.phpeclipse.internal.compiler.ast;
 
-import net.sourceforge.phpdt.internal.compiler.IAbstractSyntaxTreeVisitor;
-import net.sourceforge.phpdt.internal.compiler.codegen.Label;
+import net.sourceforge.phpdt.internal.compiler.ASTVisitor;
 import net.sourceforge.phpdt.internal.compiler.flow.FlowContext;
 import net.sourceforge.phpdt.internal.compiler.flow.FlowInfo;
 import net.sourceforge.phpdt.internal.compiler.flow.UnconditionalFlowInfo;
 import net.sourceforge.phpdt.internal.compiler.impl.Constant;
-import net.sourceforge.phpdt.internal.compiler.lookup.BaseTypeBinding;
 import net.sourceforge.phpdt.internal.compiler.lookup.BlockScope;
-import net.sourceforge.phpdt.internal.compiler.lookup.TypeBinding;
 
 public class ConditionalExpression extends OperatorExpression {
 
@@ -116,8 +113,8 @@ public class ConditionalExpression extends OperatorExpression {
        /**
         * Code generation for the conditional operator ?:
         *
-        * @param currentScope org.eclipse.jdt.internal.compiler.lookup.BlockScope
-        * @param codeStream org.eclipse.jdt.internal.compiler.codegen.CodeStream
+        * @param currentScope net.sourceforge.phpdt.internal.compiler.lookup.BlockScope
+        * @param codeStream net.sourceforge.phpdt.internal.compiler.codegen.CodeStream
         * @param valueRequired boolean
        */
 //     public void generateCode(
@@ -407,14 +404,19 @@ public class ConditionalExpression extends OperatorExpression {
 //                     valueIfFalseType);
 //             return null;
 //     }
-       
+       public StringBuffer printExpressionNoParenthesis(int indent, StringBuffer output) {
+               
+               condition.printExpression(indent, output).append(" ? "); //$NON-NLS-1$
+               valueIfTrue.printExpression(0, output).append(" : "); //$NON-NLS-1$
+               return valueIfFalse.printExpression(0, output);
+       }
        public String toStringExpressionNoParenthesis() {
                return condition.toStringExpression() + " ? " + //$NON-NLS-1$
                valueIfTrue.toStringExpression() + " : " + //$NON-NLS-1$
                valueIfFalse.toStringExpression();
        }
 
-       public void traverse(IAbstractSyntaxTreeVisitor visitor, BlockScope scope) {
+       public void traverse(ASTVisitor visitor, BlockScope scope) {
                if (visitor.visit(this, scope)) {
                        condition.traverse(visitor, scope);
                        valueIfTrue.traverse(visitor, scope);
index 4a49302..444c67d 100644 (file)
@@ -13,8 +13,8 @@ package net.sourceforge.phpeclipse.internal.compiler.ast;
 import java.util.ArrayList;
 
 import net.sourceforge.phpdt.core.compiler.CharOperation;
+import net.sourceforge.phpdt.internal.compiler.ASTVisitor;
 import net.sourceforge.phpdt.internal.compiler.CompilationResult;
-import net.sourceforge.phpdt.internal.compiler.IAbstractSyntaxTreeVisitor;
 import net.sourceforge.phpdt.internal.compiler.flow.ExceptionHandlingFlowContext;
 import net.sourceforge.phpdt.internal.compiler.flow.FlowInfo;
 import net.sourceforge.phpdt.internal.compiler.flow.InitializationFlowContext;
@@ -134,8 +134,8 @@ public class ConstructorDeclaration extends AbstractMethodDeclaration {
        /**
         * Bytecode generation for a constructor
         *
-        * @param classScope org.eclipse.jdt.internal.compiler.lookup.ClassScope
-        * @param classFile org.eclipse.jdt.internal.compiler.codegen.ClassFile
+        * @param classScope net.sourceforge.phpdt.internal.compiler.lookup.ClassScope
+        * @param classFile net.sourceforge.phpdt.internal.compiler.codegen.ClassFile
         */
 //     public void generateCode(ClassScope classScope, ClassFile classFile) {
 //             
@@ -420,7 +420,7 @@ public class ConstructorDeclaration extends AbstractMethodDeclaration {
        }
 
        public void traverse(
-               IAbstractSyntaxTreeVisitor visitor,
+           ASTVisitor visitor,
                ClassScope classScope) {
 
                if (visitor.visit(this, classScope)) {
@@ -15,9 +15,9 @@ import net.sourceforge.phpdt.internal.compiler.flow.FlowContext;
 import net.sourceforge.phpdt.internal.compiler.flow.FlowInfo;
 import net.sourceforge.phpdt.internal.compiler.lookup.BlockScope;
 
-public class Continue extends BranchStatement {
+public class ContinueStatement extends BranchStatement {
 
-       public Continue(char[] l, int s, int e) {
+       public ContinueStatement(char[] l, int s, int e) {
                
                super(l, s, e);
        }
@@ -83,7 +83,12 @@ public class Continue extends BranchStatement {
                }
                return FlowInfo.DEAD_END;
        }
+       public StringBuffer printStatement(int tab, StringBuffer output) {
 
+               printIndent(tab, output).append("continue "); //$NON-NLS-1$
+               if (label != null) output.append(label);
+               return output.append(';');
+       }
        public String toString(int tab) {
 
                String s = tabString(tab);
index 73adba9..0cfac6a 100644 (file)
@@ -1,13 +1,10 @@
-/*******************************************************************************
- * Copyright (c) 2000, 2003 IBM Corporation and others.
- * All rights reserved. This program and the accompanying materials 
- * are made available under the terms of the Common Public License v1.0
- * which accompanies this distribution, and is available at
+/***********************************************************************************************************************************
+ * Copyright (c) 2000, 2003 IBM Corporation and others. All rights reserved. This program and the accompanying materials are made
+ * available under the terms of the Common Public License v1.0 which accompanies this distribution, and is available at
  * http://www.eclipse.org/legal/cpl-v10.html
  * 
- * Contributors:
- *     IBM Corporation - initial API and implementation
- *******************************************************************************/
+ * Contributors: IBM Corporation - initial API and implementation
+ **********************************************************************************************************************************/
 package net.sourceforge.phpeclipse.internal.compiler.ast;
 
 import net.sourceforge.phpdt.internal.compiler.IAbstractSyntaxTreeVisitor;
@@ -18,76 +15,77 @@ import net.sourceforge.phpdt.internal.compiler.impl.Constant;
 import net.sourceforge.phpdt.internal.compiler.lookup.BlockScope;
 import net.sourceforge.phpdt.internal.compiler.lookup.TypeBinding;
 
-
 public class DefaultCase extends Statement {
 
-       public CaseLabel targetLabel;
-       /**
-        * DefautCase constructor comment.
-        */
-       public DefaultCase(int sourceEnd, int sourceStart) {
-
-               this.sourceStart = sourceStart;
-               this.sourceEnd = sourceEnd;
-       }
-
-       public FlowInfo analyseCode(
-               BlockScope currentScope,
-               FlowContext flowContext,
-               FlowInfo flowInfo) {
-
-               return flowInfo;
-       }
-
-       /**
-        * Default case code generation
-        *
-        * @param currentScope org.eclipse.jdt.internal.compiler.lookup.BlockScope
-        * @param codeStream org.eclipse.jdt.internal.compiler.codegen.CodeStream
-        */
-//     public void generateCode(BlockScope currentScope, CodeStream codeStream) {
-//
-//             if ((bits & IsReachableMASK) == 0) {
-//                     return;
-//             }
-//             int pc = codeStream.position;
-//             targetLabel.place();
-//             codeStream.recordPositionsFrom(pc, this.sourceStart);
-//
-//     }
-       /**
-        * No-op : should use resolveCase(...) instead.
-        */
-       public void resolve(BlockScope scope) {
-       }
-
-       public Constant resolveCase(
-               BlockScope scope,
-               TypeBinding testType,
-               SwitchStatement switchStatement) {
-
-               // remember the default case into the associated switch statement
-               if (switchStatement.defaultCase != null)
-                       scope.problemReporter().duplicateDefaultCase(this);
-
-               // on error the last default will be the selected one .... (why not) ....       
-               switchStatement.defaultCase = this;
-               resolve(scope);
-               return null;
-       }
-
-       public String toString(int tab) {
-
-               String s = tabString(tab);
-               s = s + "default : "; //$NON-NLS-1$
-               return s;
-       }
-
-       public void traverse(
-               IAbstractSyntaxTreeVisitor visitor,
-               BlockScope blockScope) {
-
-               visitor.visit(this, blockScope);
-               visitor.endVisit(this, blockScope);
-       }
-}
+  public CaseLabel targetLabel;
+
+  /**
+   * DefautCase constructor comment.
+   */
+  public DefaultCase(int sourceEnd, int sourceStart) {
+
+    this.sourceStart = sourceStart;
+    this.sourceEnd = sourceEnd;
+  }
+
+  public FlowInfo analyseCode(BlockScope currentScope, FlowContext flowContext, FlowInfo flowInfo) {
+
+    return flowInfo;
+  }
+
+  /**
+   * Default case code generation
+   * 
+   * @param currentScope
+   *          net.sourceforge.phpdt.internal.compiler.lookup.BlockScope
+   * @param codeStream
+   *          net.sourceforge.phpdt.internal.compiler.codegen.CodeStream
+   */
+  //   public void generateCode(BlockScope currentScope, CodeStream codeStream) {
+  //
+  //           if ((bits & IsReachableMASK) == 0) {
+  //                   return;
+  //           }
+  //           int pc = codeStream.position;
+  //           targetLabel.place();
+  //           codeStream.recordPositionsFrom(pc, this.sourceStart);
+  //
+  //   }
+  /**
+   * No-op : should use resolveCase(...) instead.
+   */
+  public void resolve(BlockScope scope) {
+  }
+
+  public Constant resolveCase(BlockScope scope, TypeBinding testType, SwitchStatement switchStatement) {
+
+    // remember the default case into the associated switch statement
+    if (switchStatement.defaultCase != null)
+      scope.problemReporter().duplicateDefaultCase(this);
+
+    // on error the last default will be the selected one .... (why not) ....
+    switchStatement.defaultCase = this;
+    resolve(scope);
+    return null;
+  }
+
+  public StringBuffer printStatement(int tab, StringBuffer output) {
+
+    printIndent(tab, output);
+    output.append("default : "); //$NON-NLS-1$
+    return output.append(';');
+  }
+
+  public String toString(int tab) {
+
+    String s = tabString(tab);
+    s = s + "default : "; //$NON-NLS-1$
+    return s;
+  }
+
+  public void traverse(IAbstractSyntaxTreeVisitor visitor, BlockScope blockScope) {
+
+    visitor.visit(this, blockScope);
+    visitor.endVisit(this, blockScope);
+  }
+}
\ No newline at end of file
index 8dedd3b..d9c5745 100644 (file)
@@ -10,7 +10,7 @@
  *******************************************************************************/
 package net.sourceforge.phpeclipse.internal.compiler.ast;
 
-import net.sourceforge.phpdt.internal.compiler.IAbstractSyntaxTreeVisitor;
+import net.sourceforge.phpdt.internal.compiler.ASTVisitor;
 import net.sourceforge.phpdt.internal.compiler.codegen.Label;
 import net.sourceforge.phpdt.internal.compiler.flow.FlowContext;
 import net.sourceforge.phpdt.internal.compiler.flow.FlowInfo;
@@ -166,7 +166,18 @@ public class DoStatement extends Statement {
                if (action != null)
                        action.resolve(scope);
        }
+       public StringBuffer printStatement(int indent, StringBuffer output) {
 
+               printIndent(indent, output).append("do"); //$NON-NLS-1$
+               if (action == null)
+                       output.append(" ;\n"); //$NON-NLS-1$
+               else {
+                       output.append('\n');
+                       action.printStatement(indent + 1, output).append('\n');
+               }
+               output.append("while ("); //$NON-NLS-1$
+               return condition.printExpression(0, output).append(");"); //$NON-NLS-1$
+       }
        public String toString(int tab) {
 
                String inFront, s = tabString(tab);
@@ -182,7 +193,7 @@ public class DoStatement extends Statement {
                return s;
        }
 
-       public void traverse(IAbstractSyntaxTreeVisitor visitor, BlockScope scope) {
+       public void traverse(ASTVisitor visitor, BlockScope scope) {
 
                if (visitor.visit(this, scope)) {
                        if (action != null) {
index fbead1b..f350c92 100644 (file)
@@ -49,8 +49,8 @@ public void computeConstant() {
 /**
  * Code generation for the double literak
  *
- * @param currentScope org.eclipse.jdt.internal.compiler.lookup.BlockScope
- * @param codeStream org.eclipse.jdt.internal.compiler.codegen.CodeStream
+ * @param currentScope net.sourceforge.phpdt.internal.compiler.lookup.BlockScope
+ * @param codeStream net.sourceforge.phpdt.internal.compiler.codegen.CodeStream
  * @param valueRequired boolean
  */
 //public void generateCode(BlockScope currentScope, CodeStream codeStream, boolean valueRequired) {
index 374b220..90076cc 100644 (file)
@@ -29,7 +29,9 @@ public class EmptyStatement extends Statement {
 //     public void generateCode(BlockScope currentScope, CodeStream codeStream){
 //             // no bytecode, no need to check for reachability or recording source positions
 //     }
-       
+       public StringBuffer printStatement(int tab, StringBuffer output) {
+               return printIndent(tab, output).append(';');
+       }
        public void resolve(BlockScope scope) {
        }
        
index 111af7c..9e38661 100644 (file)
@@ -10,8 +10,7 @@
  *******************************************************************************/
 package net.sourceforge.phpeclipse.internal.compiler.ast;
 
-import net.sourceforge.phpdt.internal.compiler.IAbstractSyntaxTreeVisitor;
-import net.sourceforge.phpdt.internal.compiler.codegen.Label;
+import net.sourceforge.phpdt.internal.compiler.ASTVisitor;
 import net.sourceforge.phpdt.internal.compiler.flow.FlowContext;
 import net.sourceforge.phpdt.internal.compiler.flow.FlowInfo;
 import net.sourceforge.phpdt.internal.compiler.impl.Constant;
@@ -220,8 +219,8 @@ public final void computeConstant(TypeBinding leftType, TypeBinding rightType) {
 /**
  * Normal == or != code generation.
  *
- * @param currentScope org.eclipse.jdt.internal.compiler.lookup.BlockScope
- * @param codeStream org.eclipse.jdt.internal.compiler.codegen.CodeStream
+ * @param currentScope net.sourceforge.phpdt.internal.compiler.lookup.BlockScope
+ * @param codeStream net.sourceforge.phpdt.internal.compiler.codegen.CodeStream
  * @param valueRequired boolean
  */
 //public void generateCode(BlockScope currentScope, CodeStream codeStream, boolean valueRequired) {
@@ -551,7 +550,7 @@ public TypeBinding resolveType(BlockScope scope) {
        scope.problemReporter().notCompatibleTypesError(this, leftType, rightType);
        return null;
 }
-public void traverse(IAbstractSyntaxTreeVisitor visitor, BlockScope scope) {
+public void traverse(ASTVisitor visitor, BlockScope scope) {
        if (visitor.visit(this, scope)) {
                left.traverse(visitor, scope);
                right.traverse(visitor, scope);
index 175afee..467b9dd 100644 (file)
@@ -10,7 +10,7 @@
  *******************************************************************************/
 package net.sourceforge.phpeclipse.internal.compiler.ast;
 
-import net.sourceforge.phpdt.internal.compiler.IAbstractSyntaxTreeVisitor;
+import net.sourceforge.phpdt.internal.compiler.ASTVisitor;
 import net.sourceforge.phpdt.internal.compiler.flow.FlowContext;
 import net.sourceforge.phpdt.internal.compiler.flow.FlowInfo;
 import net.sourceforge.phpdt.internal.compiler.lookup.BlockScope;
@@ -95,8 +95,8 @@ public class ExplicitConstructorCall
        /**
         * Constructor call code generation
         *
-        * @param currentScope org.eclipse.jdt.internal.compiler.lookup.BlockScope
-        * @param codeStream org.eclipse.jdt.internal.compiler.codegen.CodeStream
+        * @param currentScope net.sourceforge.phpdt.internal.compiler.lookup.BlockScope
+        * @param codeStream net.sourceforge.phpdt.internal.compiler.codegen.CodeStream
         */
 //     public void generateCode(BlockScope currentScope, CodeStream codeStream) {
 //
@@ -291,7 +291,23 @@ public class ExplicitConstructorCall
        public void setFieldIndex(int depth) {
                // ignore for here
        }
+       public StringBuffer printStatement(int indent, StringBuffer output) {
 
+               printIndent(indent, output);
+               if (qualification != null) qualification.printExpression(0, output).append('.');
+               if (accessMode == This) {
+                       output.append("this("); //$NON-NLS-1$
+               } else {
+                       output.append("super("); //$NON-NLS-1$
+               }
+               if (arguments != null) {
+                       for (int i = 0; i < arguments.length; i++) {
+                               if (i > 0) output.append(", "); //$NON-NLS-1$
+                               arguments[i].printExpression(0, output);
+                       }
+               }
+               return output.append(");"); //$NON-NLS-1$
+       }
        public String toString(int tab) {
 
                String s = tabString(tab);
@@ -312,7 +328,7 @@ public class ExplicitConstructorCall
                return s;
        }
 
-       public void traverse(IAbstractSyntaxTreeVisitor visitor, BlockScope scope) {
+       public void traverse(ASTVisitor visitor, BlockScope scope) {
 
                if (visitor.visit(this, scope)) {
                        if (qualification != null) {
index 6bc82a1..effc5d9 100644 (file)
@@ -214,8 +214,8 @@ public class Expression extends Statement {
         * Expression statements are plain expressions, however they generate like
         * normal expressions with no value required.
         *
-        * @param currentScope org.eclipse.jdt.internal.compiler.lookup.BlockScope
-        * @param codeStream org.eclipse.jdt.internal.compiler.codegen.CodeStream 
+        * @param currentScope net.sourceforge.phpdt.internal.compiler.lookup.BlockScope
+        * @param codeStream net.sourceforge.phpdt.internal.compiler.codegen.CodeStream 
         */
 //     public void generateCode(BlockScope currentScope, CodeStream codeStream) {
 //
@@ -228,8 +228,8 @@ public class Expression extends Statement {
        /**
         * Every expression is responsible for generating its implicit conversion when necessary.
         *
-        * @param currentScope org.eclipse.jdt.internal.compiler.lookup.BlockScope
-        * @param codeStream org.eclipse.jdt.internal.compiler.codegen.CodeStream
+        * @param currentScope net.sourceforge.phpdt.internal.compiler.lookup.BlockScope
+        * @param codeStream net.sourceforge.phpdt.internal.compiler.codegen.CodeStream
         * @param valueRequired boolean
         */
 //     public void generateCode(
@@ -315,7 +315,7 @@ public class Expression extends Statement {
 //      */
 //     public void generateOptimizedStringBuffer(
 //             BlockScope blockScope,
-//             org.eclipse.jdt.internal.compiler.codegen.CodeStream codeStream,
+//             net.sourceforge.phpdt.internal.compiler.codegen.CodeStream codeStream,
 //             int typeID) {
 //
 //             generateCode(blockScope, codeStream, true);
@@ -426,7 +426,19 @@ public class Expression extends Statement {
        public boolean isTypeReference() {
                return false;
        }
+       public StringBuffer print(int indent, StringBuffer output) {
+               printIndent(indent, output);
+               return printExpression(indent, output);
+       }
 
+       public StringBuffer printExpression(int indent, StringBuffer output) {
+         output.append(super.toString(0));
+         return output;
+       }
+       
+       public StringBuffer printStatement(int indent, StringBuffer output) {
+               return print(indent, output).append(";"); //$NON-NLS-1$
+       }
        public void resolve(BlockScope scope) {
                // drops the returning expression's type whatever the type is.
 
index 3911796..7bb50fe 100644 (file)
@@ -18,11 +18,11 @@ public class ExtendedStringLiteral extends StringLiteral {
        /** 
         *  Build a string+char literal
         */
-       public ExtendedStringLiteral(StringLiteral str, CharLiteral character) {
-
-               super(str.source, str.sourceStart, str.sourceEnd);
-               extendWith(character);
-       }
+//     public ExtendedStringLiteral(StringLiteral str, CharLiteral character) {
+//
+//             super(str.source, str.sourceStart, str.sourceEnd);
+//             extendWith(character);
+//     }
 
        /**     
         * Build a two-strings literal
@@ -36,16 +36,16 @@ public class ExtendedStringLiteral extends StringLiteral {
        /**
         * Add the lit source to mine, just as if it was mine
         */
-       public ExtendedStringLiteral extendWith(CharLiteral lit) {
-
-               //update the source
-               int length = source.length;
-               System.arraycopy(source, 0, (source = new char[length + 1]), 0, length);
-               source[length] = lit.value;
-               //position at the end of all literals
-               sourceEnd = lit.sourceEnd;
-               return this;
-       }
+//     public ExtendedStringLiteral extendWith(CharLiteral lit) {
+//
+//             //update the source
+//             int length = source.length;
+//             System.arraycopy(source, 0, (source = new char[length + 1]), 0, length);
+//             source[length] = lit.value;
+//             //position at the end of all literals
+//             sourceEnd = lit.sourceEnd;
+//             return this;
+//     }
 
        /**
         *  Add the lit source to mine, just as if it was mine
@@ -65,7 +65,10 @@ public class ExtendedStringLiteral extends StringLiteral {
                sourceEnd = lit.sourceEnd;
                return this;
        }
+       public StringBuffer printExpression(int indent, StringBuffer output) {
 
+               return output.append("ExtendedStringLiteral{").append(source).append('}'); //$NON-NLS-1$
+       }
        public String toStringExpression() {
 
                String str = "ExtendedStringLiteral{" + new String(source) + "}";       //$NON-NLS-2$ //$NON-NLS-1$
index 1d6283f..84ecabe 100644 (file)
@@ -27,8 +27,8 @@ public void computeConstant() {
 /**
  * Code generation for false literal
  *
- * @param currentScope org.eclipse.jdt.internal.compiler.lookup.BlockScope
- * @param codeStream org.eclipse.jdt.internal.compiler.codegen.CodeStream
+ * @param currentScope net.sourceforge.phpdt.internal.compiler.lookup.BlockScope
+ * @param codeStream net.sourceforge.phpdt.internal.compiler.codegen.CodeStream
  * @param valueRequired boolean
  */
 //public void generateCode(BlockScope currentScope, CodeStream codeStream, boolean valueRequired) {
index 9b90707..6a50ccb 100644 (file)
@@ -1,16 +1,13 @@
-/*******************************************************************************
- * Copyright (c) 2000, 2003 IBM Corporation and others.
- * All rights reserved. This program and the accompanying materials 
- * are made available under the terms of the Common Public License v1.0
- * which accompanies this distribution, and is available at
+/***********************************************************************************************************************************
+ * Copyright (c) 2000, 2003 IBM Corporation and others. All rights reserved. This program and the accompanying materials are made
+ * available under the terms of the Common Public License v1.0 which accompanies this distribution, and is available at
  * http://www.eclipse.org/legal/cpl-v10.html
  * 
- * Contributors:
- *     IBM Corporation - initial API and implementation
- *******************************************************************************/
+ * Contributors: IBM Corporation - initial API and implementation
+ **********************************************************************************************************************************/
 package net.sourceforge.phpeclipse.internal.compiler.ast;
 
-import net.sourceforge.phpdt.internal.compiler.IAbstractSyntaxTreeVisitor;
+import net.sourceforge.phpdt.internal.compiler.ASTVisitor;
 import net.sourceforge.phpdt.internal.compiler.flow.FlowContext;
 import net.sourceforge.phpdt.internal.compiler.flow.FlowInfo;
 import net.sourceforge.phpdt.internal.compiler.impl.Constant;
@@ -23,212 +20,216 @@ import net.sourceforge.phpdt.internal.compiler.lookup.SourceTypeBinding;
 import net.sourceforge.phpdt.internal.compiler.lookup.TypeBinding;
 
 public class FieldDeclaration extends AbstractVariableDeclaration {
-       public FieldBinding binding;
-       boolean hasBeenResolved = false;
-
-       //allows to retrieve both the "type" part of the declaration (part1)
-       //and also the part that decribe the name and the init and optionally
-       //some other dimension ! .... 
-       //public int[] a, b[] = X, c ;
-       //for b that would give for 
-       // - part1 : public int[]
-       // - part2 : b[] = X,
-
-       public int endPart1Position;
-       public int endPart2Position;
-
-       public FieldDeclaration() {
-       }
-       public FieldDeclaration(
-                       char[] name,
-                       int sourceStart,
-                       int sourceEnd) {
-
-                       this.name = name;
-
-                       //due to some declaration like 
-                       // int x, y = 3, z , x ;
-                       //the sourceStart and the sourceEnd is ONLY on  the name
-                       this.sourceStart = sourceStart;
-                       this.sourceEnd = sourceEnd;
-               }
-       public FieldDeclaration(
-               Expression initialization,
-               char[] name,
-               int sourceStart,
-               int sourceEnd) {
-
-               this.initialization = initialization;
-               this.name = name;
-
-               //due to some declaration like 
-               // int x, y = 3, z , x ;
-               //the sourceStart and the sourceEnd is ONLY on  the name
-               this.sourceStart = sourceStart;
-               this.sourceEnd = sourceEnd;
-       }
-
-       public FlowInfo analyseCode(
-               MethodScope initializationScope,
-               FlowContext flowContext,
-               FlowInfo flowInfo) {
-
-               if (this.binding != null && this.binding.isPrivate() && !this.binding.isPrivateUsed()) {
-                       if (!initializationScope.referenceCompilationUnit().compilationResult.hasSyntaxError()) {
-                               initializationScope.problemReporter().unusedPrivateField(this);
-                       }
-               }
-               // cannot define static non-constant field inside nested class
-               if (binding != null
-                       && binding.isValidBinding()
-                       && binding.isStatic()
-                       && binding.constant == NotAConstant
-                       && binding.declaringClass.isNestedType()
-                       && binding.declaringClass.isClass()
-                       && !binding.declaringClass.isStatic()) {
-                       initializationScope.problemReporter().unexpectedStaticModifierForField(
-                               (SourceTypeBinding) binding.declaringClass,
-                               this);
-               }
-
-               if (initialization != null) {
-                       flowInfo =
-                               initialization
-                                       .analyseCode(initializationScope, flowContext, flowInfo)
-                                       .unconditionalInits();
-                       flowInfo.markAsDefinitelyAssigned(binding);
-               }
-               return flowInfo;
-       }
-
-       /**
-        * Code generation for a field declaration:
-        *         standard assignment to a field 
-        *
-        * @param currentScope org.eclipse.jdt.internal.compiler.lookup.BlockScope
-        * @param codeStream org.eclipse.jdt.internal.compiler.codegen.CodeStream
-        */
-//     public void generateCode(BlockScope currentScope, CodeStream codeStream) {
-//
-//             if ((bits & IsReachableMASK) == 0) {
-//                     return;
-//             }
-//             // do not generate initialization code if final and static (constant is then
-//             // recorded inside the field itself).
-//             int pc = codeStream.position;
-//             boolean isStatic;
-//             if (initialization != null
-//                     && !((isStatic = binding.isStatic()) && binding.constant != NotAConstant)) {
-//                     // non-static field, need receiver
-//                     if (!isStatic)
-//                             codeStream.aload_0();
-//                     // generate initialization value
-//                     initialization.generateCode(currentScope, codeStream, true);
-//                     // store into field
-//                     if (isStatic) {
-//                             codeStream.putstatic(binding);
-//                     } else {
-//                             codeStream.putfield(binding);
-//                     }
-//             }
-//             codeStream.recordPositionsFrom(pc, this.sourceStart);
-//     }
-
-       public TypeBinding getTypeBinding(Scope scope) {
-
-               return type.getTypeBinding(scope);
-       }
-
-       public boolean isField() {
-
-               return true;
-       }
-
-       public boolean isStatic() {
-
-               if (binding != null)
-                       return binding.isStatic();
-               return (modifiers & AccStatic) != 0;
-       }
-
-       public String name() {
-
-               return String.valueOf(name);
-       }
-
-       public void resolve(MethodScope initializationScope) {
-
-               // the two <constant = Constant.NotAConstant> could be regrouped into
-               // a single line but it is clearer to have two lines while the reason of their
-               // existence is not at all the same. See comment for the second one.
-
-               //--------------------------------------------------------
-               if (!this.hasBeenResolved && binding != null && this.binding.isValidBinding()) {
-
-                       this.hasBeenResolved = true;
-
-                       if (isTypeUseDeprecated(this.binding.type, initializationScope))
-                               initializationScope.problemReporter().deprecatedType(this.binding.type, this.type);
-
-                       this.type.resolvedType = this.binding.type; // update binding for type reference
-
-                       // the resolution of the initialization hasn't been done
-                       if (this.initialization == null) {
-                               this.binding.constant = Constant.NotAConstant;
-                       } else {
-                               int previous = initializationScope.fieldDeclarationIndex;
-                               try {
-                                       initializationScope.fieldDeclarationIndex = this.binding.id;
-
-                                       // break dead-lock cycles by forcing constant to NotAConstant
-                                       this.binding.constant = Constant.NotAConstant;
-                                       
-                                       TypeBinding typeBinding = this.binding.type;
-                                       TypeBinding initializationTypeBinding;
-                                       
-                                       if (initialization instanceof ArrayInitializer) {
-
-                                               if ((initializationTypeBinding = this.initialization.resolveTypeExpecting(initializationScope, typeBinding)) != null) {
-                                                       ((ArrayInitializer) this.initialization).binding = (ArrayBinding) initializationTypeBinding;
-                                                       this.initialization.implicitWidening(typeBinding, initializationTypeBinding);
-                                               }
-                                       } else if ((initializationTypeBinding = initialization.resolveType(initializationScope)) != null) {
-
-                                               if (this.initialization.isConstantValueOfTypeAssignableToType(initializationTypeBinding, typeBinding)
-                                                       || (typeBinding.isBaseType() && BaseTypeBinding.isWidening(typeBinding.id, initializationTypeBinding.id))) {
-
-                                                       this.initialization.implicitWidening(typeBinding, initializationTypeBinding);
-
-                                               }       else if (initializationTypeBinding.isCompatibleWith(typeBinding)) {
-                                                       this.initialization.implicitWidening(typeBinding, initializationTypeBinding);
-
-                                               } else {
-                                                       initializationScope.problemReporter().typeMismatchError(initializationTypeBinding, typeBinding, this);
-                                               }
-                                               if (this.binding.isFinal()){ // cast from constant actual type to variable type
-                                                       this.binding.constant =
-                                                               this.initialization.constant.castTo(
-                                                                       (this.binding.type.id << 4) + this.initialization.constant.typeID());
-                                               }
-                                       } else {
-                                               this.binding.constant = NotAConstant;
-                                       }
-                               } finally {
-                                       initializationScope.fieldDeclarationIndex = previous;
-                                       if (this.binding.constant == null)
-                                               this.binding.constant = Constant.NotAConstant;
-                               }
-                       }
-               }
-       }
-
-       public void traverse(IAbstractSyntaxTreeVisitor visitor, MethodScope scope) {
-
-               if (visitor.visit(this, scope)) {
-                       type.traverse(visitor, scope);
-                       if (initialization != null)
-                               initialization.traverse(visitor, scope);
-               }
-               visitor.endVisit(this, scope);
-       }
-}
+  public FieldBinding binding;
+
+  boolean hasBeenResolved = false;
+
+  //allows to retrieve both the "type" part of the declaration (part1)
+  //and also the part that decribe the name and the init and optionally
+  //some other dimension ! ....
+  //public int[] a, b[] = X, c ;
+  //for b that would give for
+  // - part1 : public int[]
+  // - part2 : b[] = X,
+
+  public int endPart1Position;
+
+  public int endPart2Position;
+
+  public FieldDeclaration() {
+  }
+
+  public FieldDeclaration(char[] name, int sourceStart, int sourceEnd) {
+
+    this.name = name;
+
+    //due to some declaration like
+    // int x, y = 3, z , x ;
+    //the sourceStart and the sourceEnd is ONLY on the name
+    this.sourceStart = sourceStart;
+    this.sourceEnd = sourceEnd;
+  }
+
+  public FieldDeclaration(Expression initialization, char[] name, int sourceStart, int sourceEnd) {
+
+    this.initialization = initialization;
+    this.name = name;
+
+    //due to some declaration like
+    // int x, y = 3, z , x ;
+    //the sourceStart and the sourceEnd is ONLY on the name
+    this.sourceStart = sourceStart;
+    this.sourceEnd = sourceEnd;
+  }
+
+  public FlowInfo analyseCode(MethodScope initializationScope, FlowContext flowContext, FlowInfo flowInfo) {
+
+    if (this.binding != null && this.binding.isPrivate() && !this.binding.isPrivateUsed()) {
+      if (!initializationScope.referenceCompilationUnit().compilationResult.hasSyntaxError()) {
+        initializationScope.problemReporter().unusedPrivateField(this);
+      }
+    }
+    // cannot define static non-constant field inside nested class
+    if (binding != null && binding.isValidBinding() && binding.isStatic() && binding.constant == NotAConstant
+        && binding.declaringClass.isNestedType() && binding.declaringClass.isClass() && !binding.declaringClass.isStatic()) {
+      initializationScope.problemReporter().unexpectedStaticModifierForField((SourceTypeBinding) binding.declaringClass, this);
+    }
+
+    if (initialization != null) {
+      flowInfo = initialization.analyseCode(initializationScope, flowContext, flowInfo).unconditionalInits();
+      flowInfo.markAsDefinitelyAssigned(binding);
+    }
+    return flowInfo;
+  }
+
+  /**
+   * Code generation for a field declaration: standard assignment to a field
+   * 
+   * @param currentScope
+   *          net.sourceforge.phpdt.internal.compiler.lookup.BlockScope
+   * @param codeStream
+   *          net.sourceforge.phpdt.internal.compiler.codegen.CodeStream
+   */
+  //   public void generateCode(BlockScope currentScope, CodeStream codeStream) {
+  //
+  //           if ((bits & IsReachableMASK) == 0) {
+  //                   return;
+  //           }
+  //           // do not generate initialization code if final and static (constant is then
+  //           // recorded inside the field itself).
+  //           int pc = codeStream.position;
+  //           boolean isStatic;
+  //           if (initialization != null
+  //                   && !((isStatic = binding.isStatic()) && binding.constant != NotAConstant)) {
+  //                   // non-static field, need receiver
+  //                   if (!isStatic)
+  //                           codeStream.aload_0();
+  //                   // generate initialization value
+  //                   initialization.generateCode(currentScope, codeStream, true);
+  //                   // store into field
+  //                   if (isStatic) {
+  //                           codeStream.putstatic(binding);
+  //                   } else {
+  //                           codeStream.putfield(binding);
+  //                   }
+  //           }
+  //           codeStream.recordPositionsFrom(pc, this.sourceStart);
+  //   }
+  public TypeBinding getTypeBinding(Scope scope) {
+
+    return type.getTypeBinding(scope);
+  }
+
+  public boolean isField() {
+
+    return true;
+  }
+
+  public boolean isStatic() {
+
+    if (binding != null)
+      return binding.isStatic();
+    return (modifiers & AccStatic) != 0;
+  }
+
+  public String name() {
+
+    return String.valueOf(name);
+  }
+
+  public void resolve(MethodScope initializationScope) {
+
+    // the two <constant = Constant.NotAConstant> could be regrouped into
+    // a single line but it is clearer to have two lines while the reason of their
+    // existence is not at all the same. See comment for the second one.
+
+    //--------------------------------------------------------
+    if (!this.hasBeenResolved && binding != null && this.binding.isValidBinding()) {
+
+      this.hasBeenResolved = true;
+
+      if (isTypeUseDeprecated(this.binding.type, initializationScope))
+        initializationScope.problemReporter().deprecatedType(this.binding.type, this.type);
+
+      this.type.resolvedType = this.binding.type; // update binding for type reference
+
+      // the resolution of the initialization hasn't been done
+      if (this.initialization == null) {
+        this.binding.constant = Constant.NotAConstant;
+      } else {
+        int previous = initializationScope.fieldDeclarationIndex;
+        try {
+          initializationScope.fieldDeclarationIndex = this.binding.id;
+
+          // break dead-lock cycles by forcing constant to NotAConstant
+          this.binding.constant = Constant.NotAConstant;
+
+          TypeBinding typeBinding = this.binding.type;
+          TypeBinding initializationTypeBinding;
+
+          if (initialization instanceof ArrayInitializer) {
+
+            if ((initializationTypeBinding = this.initialization.resolveTypeExpecting(initializationScope, typeBinding)) != null) {
+              ((ArrayInitializer) this.initialization).binding = (ArrayBinding) initializationTypeBinding;
+              this.initialization.implicitWidening(typeBinding, initializationTypeBinding);
+            }
+          } else if ((initializationTypeBinding = initialization.resolveType(initializationScope)) != null) {
+
+            if (this.initialization.isConstantValueOfTypeAssignableToType(initializationTypeBinding, typeBinding)
+                || (typeBinding.isBaseType() && BaseTypeBinding.isWidening(typeBinding.id, initializationTypeBinding.id))) {
+
+              this.initialization.implicitWidening(typeBinding, initializationTypeBinding);
+
+            } else if (initializationTypeBinding.isCompatibleWith(typeBinding)) {
+              this.initialization.implicitWidening(typeBinding, initializationTypeBinding);
+
+            } else {
+              initializationScope.problemReporter().typeMismatchError(initializationTypeBinding, typeBinding, this);
+            }
+            if (this.binding.isFinal()) { // cast from constant actual type to variable type
+              this.binding.constant = this.initialization.constant.castTo((this.binding.type.id << 4)
+                  + this.initialization.constant.typeID());
+            }
+          } else {
+            this.binding.constant = NotAConstant;
+          }
+        } finally {
+          initializationScope.fieldDeclarationIndex = previous;
+          if (this.binding.constant == null)
+            this.binding.constant = Constant.NotAConstant;
+        }
+      }
+    }
+  }
+
+  public void traverse(ASTVisitor visitor, MethodScope scope) {
+
+    if (visitor.visit(this, scope)) {
+      type.traverse(visitor, scope);
+      if (initialization != null)
+        initialization.traverse(visitor, scope);
+    }
+    visitor.endVisit(this, scope);
+  }
+
+  /*
+   * (non-Javadoc)
+   * 
+   * @see java.lang.Object#equals(java.lang.Object)
+   */
+  public boolean equals(Object obj) {
+    if (obj instanceof FieldDeclaration) {
+      char[] objName = ((FieldDeclaration) obj).name;
+      if (name.length != objName.length) {
+        return false;
+      }
+      for (int i = 0; i < objName.length; i++) {
+        if (name[i] != objName[i]) {
+          return false;
+        }
+      }
+      return true;
+    }
+    return super.equals(obj);
+  }
+}
\ No newline at end of file
index 6a384f5..5011646 100644 (file)
@@ -10,7 +10,7 @@
  *******************************************************************************/
 package net.sourceforge.phpeclipse.internal.compiler.ast;
 
-import net.sourceforge.phpdt.internal.compiler.IAbstractSyntaxTreeVisitor;
+import net.sourceforge.phpdt.internal.compiler.ASTVisitor;
 import net.sourceforge.phpdt.internal.compiler.flow.FlowContext;
 import net.sourceforge.phpdt.internal.compiler.flow.FlowInfo;
 import net.sourceforge.phpdt.internal.compiler.impl.Constant;
@@ -150,8 +150,8 @@ public class FieldReference extends Reference implements InvocationSite {
        /**
         * Field reference code generation
         *
-        * @param currentScope org.eclipse.jdt.internal.compiler.lookup.BlockScope
-        * @param codeStream org.eclipse.jdt.internal.compiler.codegen.CodeStream
+        * @param currentScope net.sourceforge.phpdt.internal.compiler.lookup.BlockScope
+        * @param codeStream net.sourceforge.phpdt.internal.compiler.codegen.CodeStream
         * @param valueRequired boolean
         */
 //     public void generateCode(
@@ -535,14 +535,17 @@ public class FieldReference extends Reference implements InvocationSite {
        public void setFieldIndex(int index) {
                // ignored
        }
+       public StringBuffer printExpression(int indent, StringBuffer output) {
 
+               return receiver.printExpression(0, output).append('.').append(token);
+       }
        public String toStringExpression() {
 
                return receiver.toString() + "." //$NON-NLS-1$
                + new String(token);
        }
 
-       public void traverse(IAbstractSyntaxTreeVisitor visitor, BlockScope scope) {
+       public void traverse(ASTVisitor visitor, BlockScope scope) {
 
                if (visitor.visit(this, scope)) {
                        receiver.traverse(visitor, scope);
index 446aa9d..7843039 100644 (file)
@@ -62,8 +62,8 @@ public void computeConstant() {
 /**
  * Code generation for float literal
  *
- * @param currentScope org.eclipse.jdt.internal.compiler.lookup.BlockScope
- * @param codeStream org.eclipse.jdt.internal.compiler.codegen.CodeStream
+ * @param currentScope net.sourceforge.phpdt.internal.compiler.lookup.BlockScope
+ * @param codeStream net.sourceforge.phpdt.internal.compiler.codegen.CodeStream
  * @param valueRequired boolean
  */ 
 //public void generateCode(BlockScope currentScope, CodeStream codeStream, boolean valueRequired) {
index 5bbaa9f..4231b49 100644 (file)
@@ -10,7 +10,7 @@
  *******************************************************************************/
 package net.sourceforge.phpeclipse.internal.compiler.ast;
 
-import net.sourceforge.phpdt.internal.compiler.IAbstractSyntaxTreeVisitor;
+import net.sourceforge.phpdt.internal.compiler.ASTVisitor;
 import net.sourceforge.phpdt.internal.compiler.codegen.Label;
 import net.sourceforge.phpdt.internal.compiler.flow.FlowContext;
 import net.sourceforge.phpdt.internal.compiler.flow.FlowInfo;
@@ -176,8 +176,8 @@ public class ForStatement extends Statement {
        /**
         * For statement code generation
         *
-        * @param currentScope org.eclipse.jdt.internal.compiler.lookup.BlockScope
-        * @param codeStream org.eclipse.jdt.internal.compiler.codegen.CodeStream
+        * @param currentScope net.sourceforge.phpdt.internal.compiler.lookup.BlockScope
+        * @param codeStream net.sourceforge.phpdt.internal.compiler.codegen.CodeStream
         */
 //     public void generateCode(BlockScope currentScope, CodeStream codeStream) {
 //
@@ -269,7 +269,38 @@ public class ForStatement extends Statement {
                        this.continueLabel.resetStateForCodeGeneration();
                }
        }
+       public StringBuffer printStatement(int tab, StringBuffer output) {
 
+               printIndent(tab, output).append("for ("); //$NON-NLS-1$
+               //inits
+               if (initializations != null) {
+                       for (int i = 0; i < initializations.length; i++) {
+                               //nice only with expressions
+                               if (i > 0) output.append(", "); //$NON-NLS-1$
+                               initializations[i].print(0, output);
+                       }
+               }
+               output.append("; "); //$NON-NLS-1$
+               //cond
+               if (condition != null) condition.printExpression(0, output);
+               output.append("; "); //$NON-NLS-1$
+               //updates
+               if (increments != null) {
+                       for (int i = 0; i < increments.length; i++) {
+                               if (i > 0) output.append(", "); //$NON-NLS-1$
+                               increments[i].print(0, output);
+                       }
+               }
+               output.append(") "); //$NON-NLS-1$
+               //block
+               if (action == null)
+                       output.append(';');
+               else {
+                       output.append('\n');
+                       action.printStatement(tab + 1, output); //$NON-NLS-1$
+               }
+               return output.append(';');
+       }
        public void resolve(BlockScope upperScope) {
 
                // use the scope that will hold the init declarations
@@ -326,7 +357,7 @@ public class ForStatement extends Statement {
        }
        
        public void traverse(
-               IAbstractSyntaxTreeVisitor visitor,
+           ASTVisitor visitor,
                BlockScope blockScope) {
 
                if (visitor.visit(this, blockScope)) {
index 74b907b..d0257f3 100644 (file)
@@ -10,8 +10,7 @@
  *******************************************************************************/
 package net.sourceforge.phpeclipse.internal.compiler.ast;
 
-import net.sourceforge.phpdt.internal.compiler.IAbstractSyntaxTreeVisitor;
-import net.sourceforge.phpdt.internal.compiler.codegen.Label;
+import net.sourceforge.phpdt.internal.compiler.ASTVisitor;
 import net.sourceforge.phpdt.internal.compiler.flow.FlowContext;
 import net.sourceforge.phpdt.internal.compiler.flow.FlowInfo;
 import net.sourceforge.phpdt.internal.compiler.impl.Constant;
@@ -151,8 +150,8 @@ public class IfStatement extends Statement {
        /**
         * If code generation
         *
-        * @param currentScope org.eclipse.jdt.internal.compiler.lookup.BlockScope
-        * @param codeStream org.eclipse.jdt.internal.compiler.codegen.CodeStream
+        * @param currentScope net.sourceforge.phpdt.internal.compiler.lookup.BlockScope
+        * @param codeStream net.sourceforge.phpdt.internal.compiler.codegen.CodeStream
         */
 //     public void generateCode(BlockScope currentScope, CodeStream codeStream) {
 //
@@ -236,7 +235,19 @@ public class IfStatement extends Statement {
 //             }
 //             codeStream.recordPositionsFrom(pc, this.sourceStart);
 //     }
+       public StringBuffer printStatement(int indent, StringBuffer output) {
 
+               printIndent(indent, output).append("if ("); //$NON-NLS-1$
+               condition.printExpression(0, output).append(")\n");     //$NON-NLS-1$ 
+               thenStatement.printStatement(indent + 2, output);
+               if (elseStatement != null) {
+                       output.append('\n');
+                       printIndent(indent, output);
+                       output.append("else\n"); //$NON-NLS-1$
+                       elseStatement.printStatement(indent + 2, output);
+               }
+               return output;
+       }
        public void resolve(BlockScope scope) {
 
                TypeBinding type = condition.resolveTypeExpecting(scope, BooleanBinding);
@@ -259,7 +270,7 @@ public class IfStatement extends Statement {
        }
 
        public void traverse(
-               IAbstractSyntaxTreeVisitor visitor,
+           ASTVisitor visitor,
                BlockScope blockScope) {
 
                if (visitor.visit(this, blockScope)) {
diff --git a/net.sourceforge.phpeclipse/src/net/sourceforge/phpeclipse/internal/compiler/ast/ImplicitDocTypeReference.java b/net.sourceforge.phpeclipse/src/net/sourceforge/phpeclipse/internal/compiler/ast/ImplicitDocTypeReference.java
new file mode 100644 (file)
index 0000000..e435e07
--- /dev/null
@@ -0,0 +1,66 @@
+/*******************************************************************************
+ * Copyright (c) 2000, 2004 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials 
+ * are made available under the terms of the Common Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/cpl-v10.html
+ * 
+ * Contributors:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+package net.sourceforge.phpeclipse.internal.compiler.ast;
+
+import net.sourceforge.phpdt.internal.compiler.ASTVisitor;
+import net.sourceforge.phpdt.internal.compiler.lookup.ClassScope;
+import net.sourceforge.phpdt.internal.compiler.lookup.Scope;
+import net.sourceforge.phpdt.internal.compiler.lookup.TypeBinding;
+
+public class ImplicitDocTypeReference extends TypeReference {
+       
+       public char[] token;
+
+       public ImplicitDocTypeReference(char[] name, int pos) {
+               super();
+               this.token = name;
+               this.sourceStart = pos;
+               this.sourceEnd = pos;
+       }
+       /* (non-Javadoc)
+        * @see org.eclipse.jdt.internal.compiler.ast.TypeReference#copyDims(int)
+        */
+       public TypeReference copyDims(int dim) {
+               return null;
+       }
+       /* (non-Javadoc)
+        * @see org.eclipse.jdt.internal.compiler.ast.TypeReference#getTypeBinding(org.eclipse.jdt.internal.compiler.lookup.Scope)
+        */
+       public TypeBinding getTypeBinding(Scope scope) {
+               this.constant = NotAConstant;
+               return this.resolvedType = scope.enclosingSourceType();
+       }
+       /* (non-Javadoc)
+        * @see org.eclipse.jdt.internal.compiler.ast.TypeReference#getTypeName()
+        */
+       public char[][] getTypeName() {
+               if (this.token != null) {
+                       char[][] tokens = { this.token };
+                       return tokens;
+               }
+               return null;
+       }
+       public boolean isThis() {
+               return true;
+       }
+       /* (non-Javadoc)
+        * @see org.eclipse.jdt.internal.compiler.ast.TypeReference#traverse(org.eclipse.jdt.internal.compiler.ASTVisitor, org.eclipse.jdt.internal.compiler.lookup.ClassScope)
+        */
+       public void traverse(ASTVisitor visitor, ClassScope classScope) {
+               // Do nothing
+       }
+       /* (non-Javadoc)
+        * @see org.eclipse.jdt.internal.compiler.ast.Expression#printExpression(int, java.lang.StringBuffer)
+        */
+       public StringBuffer printExpression(int indent, StringBuffer output) {
+               return new StringBuffer();
+       }
+}
index 8c1a460..4f45ff4 100644 (file)
-/*******************************************************************************
- * Copyright (c) 2000, 2003 IBM Corporation and others.
- * All rights reserved. This program and the accompanying materials 
- * are made available under the terms of the Common Public License v1.0
- * which accompanies this distribution, and is available at
+/***********************************************************************************************************************************
+ * Copyright (c) 2000, 2003 IBM Corporation and others. All rights reserved. This program and the accompanying materials are made
+ * available under the terms of the Common Public License v1.0 which accompanies this distribution, and is available at
  * http://www.eclipse.org/legal/cpl-v10.html
  * 
- * Contributors:
- *     IBM Corporation - initial API and implementation
- *******************************************************************************/
+ * Contributors: IBM Corporation - initial API and implementation
+ **********************************************************************************************************************************/
 package net.sourceforge.phpeclipse.internal.compiler.ast;
 
-import net.sourceforge.phpdt.internal.compiler.IAbstractSyntaxTreeVisitor;
+import net.sourceforge.phpdt.internal.compiler.ASTVisitor;
 import net.sourceforge.phpdt.internal.compiler.lookup.CompilationUnitScope;
 
 import org.eclipse.core.resources.IFile;
-import org.eclipse.core.runtime.IPath;
 
 public class ImportReference extends ASTNode {
-       
-//     public char[][] tokens;
-//     public long[] sourcePositions; //each entry is using the code : (start<<32) + end
-       public boolean onDemand = true; //most of the time
-       public final char[] includeSource;
-       public int declarationEnd;// doesn't include an potential trailing comment
-       public int declarationSourceStart;
-       public int declarationSourceEnd;
-       public boolean used; 
-       private IFile fFile;
-
-public ImportReference(char[] sourceString, int start, int end, boolean d) { // char[][] sources , long[] poss , boolean d) {
-//     tokens = sources ;
-//     sourcePositions = poss ;
+
+  public char[][] tokens;
+
+  //   public long[] sourcePositions; //each entry is using the code : (start<<32) + end
+  public boolean onDemand = true; //most of the time
+
+  public final char[] includeSource;
+
+  public int declarationEnd;// doesn't include an potential trailing comment
+
+  public int declarationSourceStart;
+
+  public int declarationSourceEnd;
+
+  public boolean used;
+
+  private IFile fFile;
+
+  public ImportReference(char[][] sources, char[] sourceString, int start, int end, boolean d) { // char[][] sources , long[] poss ,
+                                                                                                 // boolean d) {
+    tokens = sources;
+    // sourcePositions = poss ;
     includeSource = sourceString;
-       onDemand = d;
-       sourceEnd = end;//(int)(sourcePositions[sourcePositions.length-1] & 0x00000000FFFFFFFF);
-       sourceStart = start;//(int)(sourcePositions[0]>>>32) ;
-       fFile = null;
-}
-/**
- * @return char[][]
- */
-//public char[][] getImportName() {
-//     return tokens;
-//}
-
-public char[] getIncludeName() {
-return includeSource;
-}
-public String toString(int tab ){
-
-       return toString(tab,true);
-}
-public String toString(int tab, boolean withOnDemand) {
-       /* when withOnDemand is false, only the name is printed */
-//     StringBuffer buffer = new StringBuffer();
-//     for (int i = 0; i < tokens.length; i++) {
-//             buffer.append(tokens[i]);
-//             if (i < (tokens.length - 1)) {
-//                     buffer.append("."); //$NON-NLS-1$
-//             }
-//     }
-//     if (withOnDemand && onDemand) {
-//             buffer.append(".*"); //$NON-NLS-1$
-//     }
-//     return buffer.toString();
-    return new String(includeSource);
-}
-public void traverse(IAbstractSyntaxTreeVisitor visitor, CompilationUnitScope scope) {
-       visitor.visit(this, scope);
-       visitor.endVisit(this, scope);
-}
-/**
- * @return Returns the filePath.
- */
-public IFile getFile() {
-  return fFile;
-}
-/**
- * @param filePath The filePath to set.
- */
-public void setFile(IFile filePath) {
-  fFile = filePath;
-}
-}
+    onDemand = d;
+    sourceEnd = end;//(int)(sourcePositions[sourcePositions.length-1] & 0x00000000FFFFFFFF);
+    sourceStart = start;//(int)(sourcePositions[0]>>>32) ;
+    fFile = null;
+  }
+
+  /**
+   * @return char[][]
+   */
+  public char[][] getImportName() {
+    return tokens;
+  }
+
+  public char[] getIncludeName() {
+    return includeSource;
+  }
+
+  public StringBuffer print(int indent, StringBuffer output) {
+
+    return print(indent, output, true);
+  }
+
+  public StringBuffer print(int tab, StringBuffer output, boolean withOnDemand) {
+
+    /* when withOnDemand is false, only the name is printed */
+    for (int i = 0; i < tokens.length; i++) {
+      if (i > 0)
+        output.append('.');
+      output.append(tokens[i]);
+    }
+    if (withOnDemand && onDemand) {
+      output.append(".*"); //$NON-NLS-1$
+    }
+    return output;
+  }
+
+  public String toString(int tab) {
+
+    return toString(tab, true);
+  }
+
+  public String toString(int tab, boolean withOnDemand) {
+    /* when withOnDemand is false, only the name is printed */
+    StringBuffer buffer = new StringBuffer();
+    for (int i = 0; i < tokens.length; i++) {
+      buffer.append(tokens[i]);
+      if (i < (tokens.length - 1)) {
+        buffer.append("."); //$NON-NLS-1$
+      }
+    }
+    if (withOnDemand && onDemand) {
+      buffer.append(".*"); //$NON-NLS-1$
+    }
+    buffer.append(" - ");
+    buffer.append(includeSource);
+    return buffer.toString();
+    //    return new String(includeSource);
+  }
+
+  public void traverse(ASTVisitor visitor, CompilationUnitScope scope) {
+    visitor.visit(this, scope);
+    visitor.endVisit(this, scope);
+  }
+
+  /**
+   * @return Returns the filePath.
+   */
+  public IFile getFile() {
+    return fFile;
+  }
+
+  /**
+   * @param filePath
+   *          The filePath to set.
+   */
+  public void setFile(IFile filePath) {
+    fFile = filePath;
+  }
+}
\ No newline at end of file
index 6058eb7..3f0296c 100644 (file)
@@ -10,7 +10,7 @@
  *******************************************************************************/
 package net.sourceforge.phpeclipse.internal.compiler.ast;
 
-import net.sourceforge.phpdt.internal.compiler.IAbstractSyntaxTreeVisitor;
+import net.sourceforge.phpdt.internal.compiler.ASTVisitor;
 import net.sourceforge.phpdt.internal.compiler.flow.FlowContext;
 import net.sourceforge.phpdt.internal.compiler.flow.FlowInfo;
 import net.sourceforge.phpdt.internal.compiler.lookup.MethodScope;
@@ -41,8 +41,8 @@ public class Initializer extends FieldDeclaration {
         * Code generation for a non-static initializer: 
         *    standard block code gen
         *
-        * @param currentScope org.eclipse.jdt.internal.compiler.lookup.BlockScope
-        * @param codeStream org.eclipse.jdt.internal.compiler.codegen.CodeStream
+        * @param currentScope net.sourceforge.phpdt.internal.compiler.lookup.BlockScope
+        * @param codeStream net.sourceforge.phpdt.internal.compiler.codegen.CodeStream
         */
 //     public void generateCode(BlockScope currentScope, CodeStream codeStream) {
 //
@@ -107,7 +107,7 @@ public class Initializer extends FieldDeclaration {
                }
        }
 
-       public void traverse(IAbstractSyntaxTreeVisitor visitor, MethodScope scope) {
+       public void traverse(ASTVisitor visitor, MethodScope scope) {
 
                if (visitor.visit(this, scope)) {
                        block.traverse(visitor, scope);
index 0d9ce97..f3e8b49 100644 (file)
@@ -10,7 +10,7 @@
  *******************************************************************************/
 package net.sourceforge.phpeclipse.internal.compiler.ast;
 
-import net.sourceforge.phpdt.internal.compiler.IAbstractSyntaxTreeVisitor;
+import net.sourceforge.phpdt.internal.compiler.ASTVisitor;
 import net.sourceforge.phpdt.internal.compiler.flow.FlowContext;
 import net.sourceforge.phpdt.internal.compiler.flow.FlowInfo;
 import net.sourceforge.phpdt.internal.compiler.lookup.ArrayBinding;
@@ -204,8 +204,8 @@ public class InstanceOfExpression extends OperatorExpression {
        /**
         * Code generation for instanceOfExpression
         *
-        * @param currentScope org.eclipse.jdt.internal.compiler.lookup.BlockScope
-        * @param codeStream org.eclipse.jdt.internal.compiler.codegen.CodeStream
+        * @param currentScope net.sourceforge.phpdt.internal.compiler.lookup.BlockScope
+        * @param codeStream net.sourceforge.phpdt.internal.compiler.codegen.CodeStream
         * @param valueRequired boolean
        */
 //     public void generateCode(
@@ -236,14 +236,18 @@ public class InstanceOfExpression extends OperatorExpression {
                this.resolvedType = BooleanBinding;
                return BooleanBinding;
        }
+       public StringBuffer printExpressionNoParenthesis(int indent, StringBuffer output) {
 
+               expression.printExpression(indent, output).append(" instanceof "); //$NON-NLS-1$
+               return type.print(0, output);
+       }
        public String toStringExpressionNoParenthesis() {
 
                return expression.toStringExpression() + " instanceof " + //$NON-NLS-1$
                type.toString(0);
        }
 
-       public void traverse(IAbstractSyntaxTreeVisitor visitor, BlockScope scope) {
+       public void traverse(ASTVisitor visitor, BlockScope scope) {
 
                if (visitor.visit(this, scope)) {
                        expression.traverse(visitor, scope);
index 1c6ce09..b75afa9 100644 (file)
@@ -90,8 +90,8 @@ public void computeConstant() {
 /**
  * Code generation for int literal
  *
- * @param currentScope org.eclipse.jdt.internal.compiler.lookup.BlockScope
- * @param codeStream org.eclipse.jdt.internal.compiler.codegen.CodeStream
+ * @param currentScope net.sourceforge.phpdt.internal.compiler.lookup.BlockScope
+ * @param codeStream net.sourceforge.phpdt.internal.compiler.codegen.CodeStream
  * @param valueRequired boolean
  */ 
 //public void generateCode(BlockScope currentScope, CodeStream codeStream, boolean valueRequired) {
diff --git a/net.sourceforge.phpeclipse/src/net/sourceforge/phpeclipse/internal/compiler/ast/JavadocArrayQualifiedTypeReference.java b/net.sourceforge.phpeclipse/src/net/sourceforge/phpeclipse/internal/compiler/ast/JavadocArrayQualifiedTypeReference.java
new file mode 100644 (file)
index 0000000..56f1e22
--- /dev/null
@@ -0,0 +1,42 @@
+/*******************************************************************************
+ * Copyright (c) 2000, 2004 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials 
+ * are made available under the terms of the Common Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/cpl-v10.html
+ * 
+ * Contributors:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+package net.sourceforge.phpeclipse.internal.compiler.ast;
+
+import net.sourceforge.phpdt.internal.compiler.ASTVisitor;
+import net.sourceforge.phpdt.internal.compiler.lookup.BlockScope;
+import net.sourceforge.phpdt.internal.compiler.lookup.Scope;
+
+
+
+public class JavadocArrayQualifiedTypeReference extends ArrayQualifiedTypeReference {
+
+       public int tagSourceStart, tagSourceEnd;
+
+       public JavadocArrayQualifiedTypeReference(JavadocQualifiedTypeReference typeRef, int dim) {
+               super(typeRef.tokens, dim, typeRef.sourcePositions);
+       }
+
+       protected void reportInvalidType(Scope scope) {
+               scope.problemReporter().javadocInvalidType(this, this.resolvedType, scope.getDeclarationModifiers());
+       }
+       protected void reportDeprecatedType(Scope scope) {
+               scope.problemReporter().javadocDeprecatedType(this.resolvedType, this, scope.getDeclarationModifiers());
+       }
+
+       /* (non-Javadoc)
+        * Redefine to capture javadoc specific signatures
+        * @see net.sourceforge.phpdt.internal.compiler.ast.ASTNode#traverse(net.sourceforge.phpdt.internal.compiler.ASTVisitor, net.sourceforge.phpdt.internal.compiler.lookup.BlockScope)
+        */
+       public void traverse(ASTVisitor visitor, BlockScope scope) {
+               visitor.visit(this, scope);
+               visitor.endVisit(this, scope);
+       }
+}
diff --git a/net.sourceforge.phpeclipse/src/net/sourceforge/phpeclipse/internal/compiler/ast/JavadocArraySingleTypeReference.java b/net.sourceforge.phpeclipse/src/net/sourceforge/phpeclipse/internal/compiler/ast/JavadocArraySingleTypeReference.java
new file mode 100644 (file)
index 0000000..8298d2e
--- /dev/null
@@ -0,0 +1,40 @@
+/*******************************************************************************
+ * Copyright (c) 2000, 2004 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials 
+ * are made available under the terms of the Common Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/cpl-v10.html
+ * 
+ * Contributors:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+package net.sourceforge.phpeclipse.internal.compiler.ast;
+
+import net.sourceforge.phpdt.internal.compiler.ASTVisitor;
+import net.sourceforge.phpdt.internal.compiler.lookup.BlockScope;
+import net.sourceforge.phpdt.internal.compiler.lookup.Scope;
+
+
+public class JavadocArraySingleTypeReference extends ArrayTypeReference {
+
+       public JavadocArraySingleTypeReference(char[] name, int dim, long pos) {
+               super(name, dim, pos);
+               this.bits |= InsideJavadoc;
+       }
+
+       protected void reportInvalidType(Scope scope) {
+               scope.problemReporter().javadocInvalidType(this, this.resolvedType, scope.getDeclarationModifiers());
+       }
+       protected void reportDeprecatedType(Scope scope) {
+               scope.problemReporter().javadocDeprecatedType(this.resolvedType, this, scope.getDeclarationModifiers());
+       }
+
+       /* (non-Javadoc)
+        * Redefine to capture javadoc specific signatures
+        * @see net.sourceforge.phpdt.internal.compiler.ast.ASTNode#traverse(net.sourceforge.phpdt.internal.compiler.ASTVisitor, net.sourceforge.phpdt.internal.compiler.lookup.BlockScope)
+        */
+       public void traverse(ASTVisitor visitor, BlockScope scope) {
+               visitor.visit(this, scope);
+               visitor.endVisit(this, scope);
+       }
+}
diff --git a/net.sourceforge.phpeclipse/src/net/sourceforge/phpeclipse/internal/compiler/ast/JavadocQualifiedTypeReference.java b/net.sourceforge.phpeclipse/src/net/sourceforge/phpeclipse/internal/compiler/ast/JavadocQualifiedTypeReference.java
new file mode 100644 (file)
index 0000000..0edef17
--- /dev/null
@@ -0,0 +1,93 @@
+/*******************************************************************************
+ * Copyright (c) 2000, 2004 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials 
+ * are made available under the terms of the Common Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/cpl-v10.html
+ * 
+ * Contributors:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+package net.sourceforge.phpeclipse.internal.compiler.ast;
+
+import net.sourceforge.phpdt.internal.compiler.ASTVisitor;
+import net.sourceforge.phpdt.internal.compiler.lookup.Binding;
+import net.sourceforge.phpdt.internal.compiler.lookup.BlockScope;
+import net.sourceforge.phpdt.internal.compiler.lookup.ClassScope;
+import net.sourceforge.phpdt.internal.compiler.lookup.PackageBinding;
+import net.sourceforge.phpdt.internal.compiler.lookup.Scope;
+import net.sourceforge.phpdt.internal.compiler.lookup.TypeBinding;
+
+
+
+public class JavadocQualifiedTypeReference extends QualifiedTypeReference {
+
+       public int tagSourceStart, tagSourceEnd;
+       public PackageBinding packageBinding;
+
+       public JavadocQualifiedTypeReference(char[][] sources, long[] pos, int tagStart, int tagEnd) {
+               super(sources, pos);
+               this.tagSourceStart = tagStart;
+               this.tagSourceEnd = tagEnd;
+               this.bits |= InsideJavadoc;
+       }
+
+       protected void reportInvalidType(Scope scope) {
+               scope.problemReporter().javadocInvalidType(this, this.resolvedType, scope.getDeclarationModifiers());
+       }
+       protected void reportDeprecatedType(Scope scope) {
+               scope.problemReporter().javadocDeprecatedType(this.resolvedType, this, scope.getDeclarationModifiers());
+       }
+
+       /* (non-Javadoc)
+        * Redefine to capture javadoc specific signatures
+        * @see net.sourceforge.phpdt.internal.compiler.ast.ASTNode#traverse(net.sourceforge.phpdt.internal.compiler.ASTVisitor, net.sourceforge.phpdt.internal.compiler.lookup.BlockScope)
+        */
+       public void traverse(ASTVisitor visitor, BlockScope scope) {
+               visitor.visit(this, scope);
+               visitor.endVisit(this, scope);
+       }
+
+       /*
+        * 
+        */
+       private TypeBinding internalResolveType(Scope scope) {
+               // handle the error here
+               this.constant = NotAConstant;
+               if (this.resolvedType != null) { // is a shared type reference which was already resolved
+                       if (!this.resolvedType.isValidBinding())
+                               return null; // already reported error
+               } else {
+                       this.resolvedType = getTypeBinding(scope);
+                       if (!this.resolvedType.isValidBinding()) {
+                               Binding binding = scope.getTypeOrPackage(this.tokens);
+                               if (binding instanceof PackageBinding) {
+                                       this.packageBinding = (PackageBinding) binding;
+                               } else {
+                                       reportInvalidType(scope);
+                               }
+                               return null;
+                       }
+                       if (isTypeUseDeprecated(this.resolvedType, scope)) {
+                               reportDeprecatedType(scope);
+                       }
+               }
+               return this.resolvedType;
+       }
+
+       /* (non-Javadoc)
+        * @see net.sourceforge.phpdt.internal.compiler.ast.Expression#resolveType(net.sourceforge.phpdt.internal.compiler.lookup.BlockScope)
+        * We need to override to handle package references
+        */
+       public TypeBinding resolveType(BlockScope blockScope) {
+               return internalResolveType(blockScope);
+       }
+
+       /* (non-Javadoc)
+        * @see net.sourceforge.phpdt.internal.compiler.ast.Expression#resolveType(net.sourceforge.phpdt.internal.compiler.lookup.ClassScope)
+        * We need to override to handle package references
+        */
+       public TypeBinding resolveType(ClassScope classScope) {
+               return internalResolveType(classScope);
+       }
+}
diff --git a/net.sourceforge.phpeclipse/src/net/sourceforge/phpeclipse/internal/compiler/ast/JavadocReturnStatement.java b/net.sourceforge.phpeclipse/src/net/sourceforge/phpeclipse/internal/compiler/ast/JavadocReturnStatement.java
new file mode 100644 (file)
index 0000000..5d941d0
--- /dev/null
@@ -0,0 +1,48 @@
+/*******************************************************************************
+ * Copyright (c) 2000, 2004 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials 
+ * are made available under the terms of the Common Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/cpl-v10.html
+ * 
+ * Contributors:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+package net.sourceforge.phpeclipse.internal.compiler.ast;
+
+import net.sourceforge.phpdt.internal.compiler.ASTVisitor;
+import net.sourceforge.phpdt.internal.compiler.lookup.*;
+
+
+public class JavadocReturnStatement extends ReturnStatement {
+       public char[] description;
+
+       public JavadocReturnStatement(int s, int e, char[] descr) {
+               super(null, s, e);
+               this.description = descr;
+               this.bits |= InsideJavadoc;
+       }
+
+       public void resolve(BlockScope scope) {
+               MethodScope methodScope = scope.methodScope();
+               MethodBinding methodBinding;
+               TypeBinding methodType =
+                       (methodScope.referenceContext instanceof AbstractMethodDeclaration)
+                               ? ((methodBinding = ((AbstractMethodDeclaration) methodScope.referenceContext).binding) == null 
+                                       ? null 
+                                       : methodBinding.returnType)
+                               : VoidBinding;
+               if (methodType == null || methodType == VoidBinding) {
+                       scope.problemReporter().javadocUnexpectedTag(this.sourceStart, this.sourceEnd);
+               }
+       }
+
+       /* (non-Javadoc)
+        * Redefine to capture javadoc specific signatures
+        * @see net.sourceforge.phpdt.internal.compiler.ast.ASTNode#traverse(net.sourceforge.phpdt.internal.compiler.ASTVisitor, net.sourceforge.phpdt.internal.compiler.lookup.BlockScope)
+        */
+       public void traverse(ASTVisitor visitor, BlockScope scope) {
+               visitor.visit(this, scope);
+               visitor.endVisit(this, scope);
+       }
+}
diff --git a/net.sourceforge.phpeclipse/src/net/sourceforge/phpeclipse/internal/compiler/ast/JavadocSingleTypeReference.java b/net.sourceforge.phpeclipse/src/net/sourceforge/phpeclipse/internal/compiler/ast/JavadocSingleTypeReference.java
new file mode 100644 (file)
index 0000000..5261574
--- /dev/null
@@ -0,0 +1,93 @@
+/*******************************************************************************
+ * Copyright (c) 2000, 2004 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials 
+ * are made available under the terms of the Common Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/cpl-v10.html
+ * 
+ * Contributors:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+package net.sourceforge.phpeclipse.internal.compiler.ast;
+
+import net.sourceforge.phpdt.internal.compiler.ASTVisitor;
+import net.sourceforge.phpdt.internal.compiler.lookup.Binding;
+import net.sourceforge.phpdt.internal.compiler.lookup.BlockScope;
+import net.sourceforge.phpdt.internal.compiler.lookup.ClassScope;
+import net.sourceforge.phpdt.internal.compiler.lookup.PackageBinding;
+import net.sourceforge.phpdt.internal.compiler.lookup.Scope;
+import net.sourceforge.phpdt.internal.compiler.lookup.TypeBinding;
+
+
+public class JavadocSingleTypeReference extends SingleTypeReference {
+       
+       public int tagSourceStart, tagSourceEnd;
+       public PackageBinding packageBinding;
+
+       public JavadocSingleTypeReference(char[] source, long pos, int tagStart, int tagEnd) {
+               super(source, pos);
+               this.tagSourceStart = tagStart;
+               this.tagSourceEnd = tagEnd;
+               this.bits |= InsideJavadoc;
+       }
+
+       protected void reportInvalidType(Scope scope) {
+               scope.problemReporter().javadocInvalidType(this, this.resolvedType, scope.getDeclarationModifiers());
+       }
+       protected void reportDeprecatedType(Scope scope) {
+               scope.problemReporter().javadocDeprecatedType(this.resolvedType, this, scope.getDeclarationModifiers());
+       }
+
+       /* (non-Javadoc)
+        * Redefine to capture javadoc specific signatures
+        * @see net.sourceforge.phpdt.internal.compiler.ast.ASTNode#traverse(net.sourceforge.phpdt.internal.compiler.ASTVisitor, net.sourceforge.phpdt.internal.compiler.lookup.BlockScope)
+        */
+       public void traverse(ASTVisitor visitor, BlockScope scope) {
+               visitor.visit(this, scope);
+               visitor.endVisit(this, scope);
+       }
+
+       /*
+        * 
+        */
+       private TypeBinding internalResolveType(Scope scope) {
+               // handle the error here
+               this.constant = NotAConstant;
+               if (this.resolvedType != null) { // is a shared type reference which was already resolved
+                       if (!this.resolvedType.isValidBinding())
+                               return null; // already reported error
+               } else {
+                       this.resolvedType = getTypeBinding(scope);
+                       if (!this.resolvedType.isValidBinding()) {
+                               char[][] tokens = { this.token };
+                               Binding binding = scope.getTypeOrPackage(tokens);
+                               if (binding instanceof PackageBinding) {
+                                       this.packageBinding = (PackageBinding) binding;
+                               } else {
+                                       reportInvalidType(scope);
+                               }
+                               return null;
+                       }
+                       if (isTypeUseDeprecated(this.resolvedType, scope)) {
+                               reportDeprecatedType(scope);
+                       }
+               }
+               return this.resolvedType;
+       }
+
+       /* (non-Javadoc)
+        * @see net.sourceforge.phpdt.internal.compiler.ast.Expression#resolveType(net.sourceforge.phpdt.internal.compiler.lookup.BlockScope)
+        * We need to override to handle package references
+        */
+       public TypeBinding resolveType(BlockScope blockScope) {
+               return internalResolveType(blockScope);
+       }
+
+       /* (non-Javadoc)
+        * @see net.sourceforge.phpdt.internal.compiler.ast.Expression#resolveType(net.sourceforge.phpdt.internal.compiler.lookup.ClassScope)
+        * We need to override to handle package references
+        */
+       public TypeBinding resolveType(ClassScope classScope) {
+               return internalResolveType(classScope);
+       }
+}
index 08fe9d5..31f7e1f 100644 (file)
@@ -10,7 +10,7 @@
  *******************************************************************************/
 package net.sourceforge.phpeclipse.internal.compiler.ast;
 
-import net.sourceforge.phpdt.internal.compiler.IAbstractSyntaxTreeVisitor;
+import net.sourceforge.phpdt.internal.compiler.ASTVisitor;
 import net.sourceforge.phpdt.internal.compiler.codegen.Label;
 import net.sourceforge.phpdt.internal.compiler.flow.FlowContext;
 import net.sourceforge.phpdt.internal.compiler.flow.FlowInfo;
@@ -79,8 +79,8 @@ public class LabeledStatement extends Statement {
         *
         * may not need actual source positions recording
         *
-        * @param currentScope org.eclipse.jdt.internal.compiler.lookup.BlockScope
-        * @param codeStream org.eclipse.jdt.internal.compiler.codegen.CodeStream
+        * @param currentScope net.sourceforge.phpdt.internal.compiler.lookup.BlockScope
+        * @param codeStream net.sourceforge.phpdt.internal.compiler.codegen.CodeStream
         */
 //     public void generateCode(BlockScope currentScope, CodeStream codeStream) {
 //             
@@ -100,7 +100,15 @@ public class LabeledStatement extends Statement {
 //             }
 //             codeStream.recordPositionsFrom(pc, this.sourceStart);
 //     }
-       
+       public StringBuffer printStatement(int tab, StringBuffer output) {
+
+               printIndent(tab, output).append(label).append(": "); //$NON-NLS-1$
+               if (this.statement == null) 
+                       output.append(';');
+               else 
+                       this.statement.printStatement(0, output); 
+               return output;
+       }
        public void resolve(BlockScope scope) {
                
                statement.resolve(scope);
@@ -114,7 +122,7 @@ public class LabeledStatement extends Statement {
        }
 
        public void traverse(
-               IAbstractSyntaxTreeVisitor visitor,
+           ASTVisitor visitor,
                BlockScope blockScope) {
 
                if (visitor.visit(this, blockScope)) {
index 7e1d239..54c3414 100644 (file)
@@ -31,6 +31,10 @@ public FlowInfo analyseCode(BlockScope currentScope, FlowContext flowContext, Fl
 public abstract void computeConstant() ;
        //ON ERROR constant STAYS NULL
 public abstract TypeBinding literalType(BlockScope scope);
+public StringBuffer printExpression(int indent, StringBuffer output){
+       
+               return output.append(source());
+        }
 public TypeBinding resolveType(BlockScope scope) {
        // compute the real value, which must range its type's range
 
index 0cb726c..c2912bb 100644 (file)
  *******************************************************************************/
 package net.sourceforge.phpeclipse.internal.compiler.ast;
 
-import net.sourceforge.phpdt.internal.compiler.IAbstractSyntaxTreeVisitor;
+import net.sourceforge.phpdt.internal.compiler.ASTVisitor;
 import net.sourceforge.phpdt.internal.compiler.flow.FlowContext;
 import net.sourceforge.phpdt.internal.compiler.flow.FlowInfo;
-import net.sourceforge.phpdt.internal.compiler.impl.Constant;
 import net.sourceforge.phpdt.internal.compiler.lookup.ArrayBinding;
 import net.sourceforge.phpdt.internal.compiler.lookup.BaseTypeBinding;
 import net.sourceforge.phpdt.internal.compiler.lookup.BlockScope;
@@ -217,7 +216,7 @@ public class LocalDeclaration extends AbstractVariableDeclaration {
                }
        }
 
-       public void traverse(IAbstractSyntaxTreeVisitor visitor, BlockScope scope) {
+       public void traverse(ASTVisitor visitor, BlockScope scope) {
 
                if (visitor.visit(this, scope)) {
                        type.traverse(visitor, scope);
index 6dbdb9c..83b154f 100644 (file)
@@ -10,8 +10,8 @@
  *******************************************************************************/
 package net.sourceforge.phpeclipse.internal.compiler.ast;
 
+import net.sourceforge.phpdt.internal.compiler.ASTVisitor;
 import net.sourceforge.phpdt.internal.compiler.CompilationResult;
-import net.sourceforge.phpdt.internal.compiler.IAbstractSyntaxTreeVisitor;
 import net.sourceforge.phpdt.internal.compiler.lookup.BlockScope;
 import net.sourceforge.phpdt.internal.compiler.problem.AbortType;
 
@@ -26,7 +26,7 @@ public LocalTypeDeclaration(CompilationResult compilationResult){
  *     Iteration for a local innertype
  *
  */
-public void traverse(IAbstractSyntaxTreeVisitor visitor, BlockScope blockScope) {
+public void traverse(ASTVisitor visitor, BlockScope blockScope) {
        if (ignoreFurtherInvestigation)
                return;
        try {
index f2a85b8..7ae7d85 100644 (file)
@@ -81,8 +81,8 @@ public void computeConstant() {
 /**
  * Code generation for long literal
  *
- * @param currentScope org.eclipse.jdt.internal.compiler.lookup.BlockScope
- * @param codeStream org.eclipse.jdt.internal.compiler.codegen.CodeStream
+ * @param currentScope net.sourceforge.phpdt.internal.compiler.lookup.BlockScope
+ * @param codeStream net.sourceforge.phpdt.internal.compiler.codegen.CodeStream
  * @param valueRequired boolean
  */ 
 //public void generateCode(BlockScope currentScope, CodeStream codeStream, boolean valueRequired) {
index aa901e8..3070b63 100644 (file)
@@ -10,8 +10,8 @@
  *******************************************************************************/
 package net.sourceforge.phpeclipse.internal.compiler.ast;
 
+import net.sourceforge.phpdt.internal.compiler.ASTVisitor;
 import net.sourceforge.phpdt.internal.compiler.CompilationResult;
-import net.sourceforge.phpdt.internal.compiler.IAbstractSyntaxTreeVisitor;
 import net.sourceforge.phpdt.internal.compiler.lookup.ClassScope;
 import net.sourceforge.phpdt.internal.compiler.problem.AbortType;
 
@@ -25,7 +25,7 @@ public MemberTypeDeclaration(CompilationResult compilationResult){
  *     Iteration for a member innertype
  *
  */
-public void traverse(IAbstractSyntaxTreeVisitor visitor, ClassScope classScope) {
+public void traverse(ASTVisitor visitor, ClassScope classScope) {
        if (ignoreFurtherInvestigation)
                return;
        try {
index bf10b1e..f3e9dfb 100644 (file)
@@ -10,7 +10,7 @@
  *******************************************************************************/
 package net.sourceforge.phpeclipse.internal.compiler.ast;
 
-import net.sourceforge.phpdt.internal.compiler.IAbstractSyntaxTreeVisitor;
+import net.sourceforge.phpdt.internal.compiler.ASTVisitor;
 import net.sourceforge.phpdt.internal.compiler.flow.FlowContext;
 import net.sourceforge.phpdt.internal.compiler.flow.FlowInfo;
 import net.sourceforge.phpdt.internal.compiler.lookup.BindingIds;
@@ -57,8 +57,8 @@ public FlowInfo analyseCode(BlockScope currentScope, FlowContext flowContext, Fl
 /**
  * MessageSend code generation
  *
- * @param currentScope org.eclipse.jdt.internal.compiler.lookup.BlockScope
- * @param codeStream org.eclipse.jdt.internal.compiler.codegen.CodeStream
+ * @param currentScope net.sourceforge.phpdt.internal.compiler.lookup.BlockScope
+ * @param codeStream net.sourceforge.phpdt.internal.compiler.codegen.CodeStream
  * @param valueRequired boolean
  */ 
 //public void generateCode(BlockScope currentScope, CodeStream codeStream, boolean valueRequired) {
@@ -172,7 +172,18 @@ public void manageSyntheticAccessIfNecessary(BlockScope currentScope){
 //             this.codegenBinding = currentScope.enclosingSourceType().getUpdatedMethodBinding(binding, (ReferenceBinding) this.qualifyingType);
 //     }
 }
-
+public StringBuffer printExpression(int indent, StringBuffer output){
+       
+       if (!receiver.isImplicitThis()) receiver.printExpression(0, output).append('.');
+       output.append(selector).append('(') ; //$NON-NLS-1$
+       if (arguments != null) {
+               for (int i = 0; i < arguments.length ; i ++) {  
+                       if (i > 0) output.append(", "); //$NON-NLS-1$
+                       arguments[i].printExpression(0, output);
+               }
+       }
+       return output.append(')');
+}
 public TypeBinding resolveType(BlockScope scope) {
        // Answer the signature return type
        // Base type promotion
@@ -287,7 +298,7 @@ public String toStringExpression(){
        return s;
 }
 
-public void traverse(IAbstractSyntaxTreeVisitor visitor, BlockScope blockScope) {
+public void traverse(ASTVisitor visitor, BlockScope blockScope) {
        if (visitor.visit(this, blockScope)) {
                receiver.traverse(visitor, blockScope);
                if (arguments != null) {
index e63c662..b5988a9 100644 (file)
@@ -11,8 +11,8 @@
 package net.sourceforge.phpeclipse.internal.compiler.ast;
 
 import net.sourceforge.phpdt.core.compiler.CharOperation;
+import net.sourceforge.phpdt.internal.compiler.ASTVisitor;
 import net.sourceforge.phpdt.internal.compiler.CompilationResult;
-import net.sourceforge.phpdt.internal.compiler.IAbstractSyntaxTreeVisitor;
 import net.sourceforge.phpdt.internal.compiler.flow.ExceptionHandlingFlowContext;
 import net.sourceforge.phpdt.internal.compiler.flow.FlowInfo;
 import net.sourceforge.phpdt.internal.compiler.flow.InitializationFlowContext;
@@ -24,6 +24,9 @@ import net.sourceforge.phpdt.internal.compiler.problem.AbortMethod;
 public class MethodDeclaration extends AbstractMethodDeclaration {
 
   public TypeReference returnType;
+  public static final int FUNCTION_DEFINITION = 1;
+  public static final int METHOD_DEFINITION = 2;
+  public int type;
 
   /**
    * MethodDeclaration constructor comment.
@@ -129,7 +132,7 @@ public class MethodDeclaration extends AbstractMethodDeclaration {
     return returnType.toString(tab) + " "; //$NON-NLS-1$
   }
 
-  public void traverse(IAbstractSyntaxTreeVisitor visitor, ClassScope classScope) {
+  public void traverse(ASTVisitor visitor, ClassScope classScope) {
 
     if (visitor.visit(this, classScope)) {
       if (returnType != null)
index 86bdb79..bc1151c 100644 (file)
@@ -31,8 +31,8 @@ public class NullLiteral extends MagicLiteral {
        /**
         * Code generation for the null literal
         *
-        * @param currentScope org.eclipse.jdt.internal.compiler.lookup.BlockScope
-        * @param codeStream org.eclipse.jdt.internal.compiler.codegen.CodeStream
+        * @param currentScope net.sourceforge.phpdt.internal.compiler.lookup.BlockScope
+        * @param codeStream net.sourceforge.phpdt.internal.compiler.codegen.CodeStream
         * @param valueRequired boolean
         */ 
 //     public void generateCode(BlockScope currentScope, CodeStream codeStream, boolean valueRequired) {
index 2dc01c1..796956e 100644 (file)
@@ -10,8 +10,7 @@
  *******************************************************************************/
 package net.sourceforge.phpeclipse.internal.compiler.ast;
 
-import net.sourceforge.phpdt.internal.compiler.IAbstractSyntaxTreeVisitor;
-import net.sourceforge.phpdt.internal.compiler.codegen.Label;
+import net.sourceforge.phpdt.internal.compiler.ASTVisitor;
 import net.sourceforge.phpdt.internal.compiler.flow.FlowContext;
 import net.sourceforge.phpdt.internal.compiler.flow.FlowInfo;
 import net.sourceforge.phpdt.internal.compiler.impl.Constant;
@@ -76,8 +75,8 @@ public class OR_OR_Expression extends BinaryExpression {
        /**
         * Code generation for a binary operation
         *
-        * @param currentScope org.eclipse.jdt.internal.compiler.lookup.BlockScope
-        * @param codeStream org.eclipse.jdt.internal.compiler.codegen.CodeStream
+        * @param currentScope net.sourceforge.phpdt.internal.compiler.lookup.BlockScope
+        * @param codeStream net.sourceforge.phpdt.internal.compiler.codegen.CodeStream
         * @param valueRequired boolean
         */
 //     public void generateCode(
@@ -296,7 +295,7 @@ public class OR_OR_Expression extends BinaryExpression {
                return false;
        }
 
-       public void traverse(IAbstractSyntaxTreeVisitor visitor, BlockScope scope) {
+       public void traverse(ASTVisitor visitor, BlockScope scope) {
                if (visitor.visit(this, scope)) {
                        left.traverse(visitor, scope);
                        right.traverse(visitor, scope);
index 0c17dc7..2988f4e 100644 (file)
@@ -48,7 +48,7 @@ public abstract class OperatorExpression extends Expression implements OperatorI
                //the non zero entries of all tables
        
                /*
-               org.eclipse.jdt.internal.compiler.ast.
+               net.sourceforge.phpdt.internal.compiler.ast.
                OperatorExpression.generateTableTestCase();
                */
        
@@ -120,7 +120,7 @@ public abstract class OperatorExpression extends Expression implements OperatorI
        
                        "\t\t//TC test : all binary operation (described in tables)\n"+ //$NON-NLS-1$
                        "\t\t//method automatically generated by\n"+ //$NON-NLS-1$
-                       "\t\t//org.eclipse.jdt.internal.compiler.ast.OperatorExpression.generateTableTestCase();\n"+ //$NON-NLS-1$
+                       "\t\t//net.sourceforge.phpdt.internal.compiler.ast.OperatorExpression.generateTableTestCase();\n"+ //$NON-NLS-1$
                
                        "\t\tString str0 ;\t String str\t= "+decode.constant(T_String)+";\n"+ //$NON-NLS-1$ //$NON-NLS-2$
                        "\t\tint i0 ;\t int i\t= "+decode.constant(T_int)+" ;\n"+ //$NON-NLS-1$ //$NON-NLS-2$
@@ -1553,6 +1553,13 @@ public abstract class OperatorExpression extends Expression implements OperatorI
                };
                return "unknown operator"; //$NON-NLS-1$
        }
+       public StringBuffer printExpression(int indent, StringBuffer output){
+
+               output.append('(');
+               return printExpressionNoParenthesis(0, output).append(')');
+       }
+       
+       public abstract StringBuffer printExpressionNoParenthesis(int indent, StringBuffer output);
 
        public String toStringExpression(){
 
index cd8df9a..b231308 100644 (file)
@@ -10,7 +10,7 @@
  *******************************************************************************/
 package net.sourceforge.phpeclipse.internal.compiler.ast;
 
-import net.sourceforge.phpdt.internal.compiler.IAbstractSyntaxTreeVisitor;
+import net.sourceforge.phpdt.internal.compiler.ASTVisitor;
 import net.sourceforge.phpdt.internal.compiler.lookup.BlockScope;
 
 public class PostfixExpression extends CompoundAssignment {
@@ -25,8 +25,8 @@ public class PostfixExpression extends CompoundAssignment {
        /**
         * Code generation for PostfixExpression
         *
-        * @param currentScope org.eclipse.jdt.internal.compiler.lookup.BlockScope
-        * @param codeStream org.eclipse.jdt.internal.compiler.codegen.CodeStream
+        * @param currentScope net.sourceforge.phpdt.internal.compiler.lookup.BlockScope
+        * @param codeStream net.sourceforge.phpdt.internal.compiler.codegen.CodeStream
         * @param valueRequired boolean
         */
 //     public void generateCode(
@@ -66,7 +66,7 @@ public class PostfixExpression extends CompoundAssignment {
                return lhs.toStringExpression() + " " + operatorToString(); //$NON-NLS-1$
        } 
 
-       public void traverse(IAbstractSyntaxTreeVisitor visitor, BlockScope scope) {
+       public void traverse(ASTVisitor visitor, BlockScope scope) {
 
                if (visitor.visit(this, scope)) {
                        lhs.traverse(visitor, scope);
index f956d58..9dfb251 100644 (file)
  *******************************************************************************/
 package net.sourceforge.phpeclipse.internal.compiler.ast;
 
-import net.sourceforge.phpdt.internal.compiler.IAbstractSyntaxTreeVisitor;
+import net.sourceforge.phpdt.internal.compiler.ASTVisitor;
 import net.sourceforge.phpdt.internal.compiler.lookup.BlockScope;
 
 public class PrefixExpression extends CompoundAssignment {
 
        /**
         * PrefixExpression constructor comment.
-        * @param l org.eclipse.jdt.internal.compiler.ast.Expression
-        * @param r org.eclipse.jdt.internal.compiler.ast.Expression
+        * @param l net.sourceforge.phpdt.internal.compiler.ast.Expression
+        * @param r net.sourceforge.phpdt.internal.compiler.ast.Expression
         * @param op int
         */
        public PrefixExpression(Expression l, Expression e, int op, int pos) {
@@ -50,7 +50,7 @@ public class PrefixExpression extends CompoundAssignment {
 
        }
 
-       public void traverse(IAbstractSyntaxTreeVisitor visitor, BlockScope scope) {
+       public void traverse(ASTVisitor visitor, BlockScope scope) {
 
                if (visitor.visit(this, scope)) {
                        lhs.traverse(visitor, scope);
index dc5dc2a..b8e885a 100644 (file)
@@ -10,7 +10,7 @@
  *******************************************************************************/
 package net.sourceforge.phpeclipse.internal.compiler.ast;
 
-import net.sourceforge.phpdt.internal.compiler.IAbstractSyntaxTreeVisitor;
+import net.sourceforge.phpdt.internal.compiler.ASTVisitor;
 import net.sourceforge.phpdt.internal.compiler.flow.FlowContext;
 import net.sourceforge.phpdt.internal.compiler.flow.FlowInfo;
 import net.sourceforge.phpdt.internal.compiler.lookup.BlockScope;
@@ -331,7 +331,7 @@ public class QualifiedAllocationExpression extends AllocationExpression {
                return s;
        }
 
-       public void traverse(IAbstractSyntaxTreeVisitor visitor, BlockScope scope) {
+       public void traverse(ASTVisitor visitor, BlockScope scope) {
 
                if (visitor.visit(this, scope)) {
                        if (enclosingInstance != null)
index 449a39c..ca262ed 100644 (file)
@@ -722,6 +722,14 @@ public class QualifiedNameReference extends NameReference {
                }
                return null;
        }
+       public StringBuffer printExpression(int indent, StringBuffer output) {
+               
+               for (int i = 0; i < tokens.length; i++) {
+                       if (i > 0) output.append('.');
+                       output.append(tokens[i]);
+               }
+               return output;
+       }
        public TypeBinding resolveType(BlockScope scope) {
                // field and/or local are done before type lookups
                // the only available value for the restrictiveFlag BEFORE
index 2d70b69..fc114ff 100644 (file)
@@ -10,7 +10,7 @@
  *******************************************************************************/
 package net.sourceforge.phpeclipse.internal.compiler.ast;
 
-import net.sourceforge.phpdt.internal.compiler.IAbstractSyntaxTreeVisitor;
+import net.sourceforge.phpdt.internal.compiler.ASTVisitor;
 import net.sourceforge.phpdt.internal.compiler.lookup.BlockScope;
 import net.sourceforge.phpdt.internal.compiler.lookup.TypeBinding;
 
@@ -53,7 +53,7 @@ public class QualifiedSuperReference extends QualifiedThisReference {
        }
 
        public void traverse(
-               IAbstractSyntaxTreeVisitor visitor,
+           ASTVisitor visitor,
                BlockScope blockScope) {
 
                if (visitor.visit(this, blockScope)) {
index 77cadf6..321c41f 100644 (file)
@@ -10,7 +10,7 @@
  *******************************************************************************/
 package net.sourceforge.phpeclipse.internal.compiler.ast;
 
-import net.sourceforge.phpdt.internal.compiler.IAbstractSyntaxTreeVisitor;
+import net.sourceforge.phpdt.internal.compiler.ASTVisitor;
 import net.sourceforge.phpdt.internal.compiler.flow.FlowContext;
 import net.sourceforge.phpdt.internal.compiler.flow.FlowInfo;
 import net.sourceforge.phpdt.internal.compiler.lookup.BlockScope;
@@ -48,8 +48,8 @@ public class QualifiedThisReference extends ThisReference {
        /**
         * Code generation for QualifiedThisReference
         *
-        * @param currentScope org.eclipse.jdt.internal.compiler.lookup.BlockScope
-        * @param codeStream org.eclipse.jdt.internal.compiler.codegen.CodeStream
+        * @param currentScope net.sourceforge.phpdt.internal.compiler.lookup.BlockScope
+        * @param codeStream net.sourceforge.phpdt.internal.compiler.codegen.CodeStream
         * @param valueRequired boolean
         */
 //     public void generateCode(
@@ -107,7 +107,7 @@ public class QualifiedThisReference extends ThisReference {
        }
 
        public void traverse(
-               IAbstractSyntaxTreeVisitor visitor,
+           ASTVisitor visitor,
                BlockScope blockScope) {
 
                if (visitor.visit(this, blockScope)) {
index dc6e277..fc4b45c 100644 (file)
@@ -10,7 +10,7 @@
  *******************************************************************************/
 package net.sourceforge.phpeclipse.internal.compiler.ast;
 
-import net.sourceforge.phpdt.internal.compiler.IAbstractSyntaxTreeVisitor;
+import net.sourceforge.phpdt.internal.compiler.ASTVisitor;
 import net.sourceforge.phpdt.internal.compiler.lookup.BlockScope;
 import net.sourceforge.phpdt.internal.compiler.lookup.ClassScope;
 import net.sourceforge.phpdt.internal.compiler.lookup.Scope;
@@ -44,6 +44,14 @@ public char[][] getTypeName(){
 
        return tokens;
 }
+public StringBuffer printExpression(int indent, StringBuffer output) {
+       
+       for (int i = 0; i < tokens.length; i++) {
+               if (i > 0) output.append('.');
+               output.append(tokens[i]);
+       }
+       return output;
+}
 public String toStringExpression(int tab) {
        StringBuffer buffer = new StringBuffer();
        for (int i = 0; i < tokens.length; i++) {
@@ -54,11 +62,11 @@ public String toStringExpression(int tab) {
        }
        return buffer.toString();
 }
-public void traverse(IAbstractSyntaxTreeVisitor visitor, BlockScope scope) {
+public void traverse(ASTVisitor visitor, BlockScope scope) {
        visitor.visit(this, scope);
        visitor.endVisit(this, scope);
 }
-public void traverse(IAbstractSyntaxTreeVisitor visitor, ClassScope scope) {
+public void traverse(ASTVisitor visitor, ClassScope scope) {
        visitor.visit(this, scope);
        visitor.endVisit(this, scope);
 }
index 13e7baf..6ace7a6 100644 (file)
@@ -1,16 +1,13 @@
-/*******************************************************************************
- * Copyright (c) 2000, 2003 IBM Corporation and others.
- * All rights reserved. This program and the accompanying materials 
- * are made available under the terms of the Common Public License v1.0
- * which accompanies this distribution, and is available at
+/***********************************************************************************************************************************
+ * Copyright (c) 2000, 2003 IBM Corporation and others. All rights reserved. This program and the accompanying materials are made
+ * available under the terms of the Common Public License v1.0 which accompanies this distribution, and is available at
  * http://www.eclipse.org/legal/cpl-v10.html
  * 
- * Contributors:
- *     IBM Corporation - initial API and implementation
- *******************************************************************************/
+ * Contributors: IBM Corporation - initial API and implementation
+ **********************************************************************************************************************************/
 package net.sourceforge.phpeclipse.internal.compiler.ast;
 
-import net.sourceforge.phpdt.internal.compiler.IAbstractSyntaxTreeVisitor;
+import net.sourceforge.phpdt.internal.compiler.ASTVisitor;
 import net.sourceforge.phpdt.internal.compiler.flow.FlowContext;
 import net.sourceforge.phpdt.internal.compiler.flow.FlowInfo;
 import net.sourceforge.phpdt.internal.compiler.flow.InitializationFlowContext;
@@ -21,228 +18,248 @@ import net.sourceforge.phpdt.internal.compiler.lookup.MethodScope;
 import net.sourceforge.phpdt.internal.compiler.lookup.TypeBinding;
 
 public class ReturnStatement extends Statement {
-       public Expression expression;
-
-       public TypeBinding expressionType;
-       public boolean isSynchronized;
-       public ASTNode[] subroutines;
-       public LocalVariableBinding saveValueVariable;
-
-public ReturnStatement(Expression expr, int s, int e ) {
-       sourceStart = s;
-       sourceEnd = e;
-       expression = expr ;
-}
-public FlowInfo analyseCode(BlockScope currentScope, FlowContext flowContext, FlowInfo flowInfo) {     // here requires to generate a sequence of finally blocks invocations depending corresponding
-       // to each of the traversed try statements, so that execution will terminate properly.
-
-       // lookup the label, this should answer the returnContext
-
-       if (expression != null) {
-               flowInfo = expression.analyseCode(currentScope, flowContext, flowInfo);
-       }
-       // compute the return sequence (running the finally blocks)
-       FlowContext traversedContext = flowContext;
-       int subIndex = 0, maxSub = 5;
-       boolean saveValueNeeded = false;
-       boolean hasValueToSave = expression != null && expression.constant == NotAConstant;
-       do {
-               ASTNode sub;
-               if ((sub = traversedContext.subRoutine()) != null) {
-                       if (this.subroutines == null){
-                               this.subroutines = new ASTNode[maxSub];
-                       }
-                       if (subIndex == maxSub) {
-                               System.arraycopy(this.subroutines, 0, (this.subroutines = new ASTNode[maxSub *= 2]), 0, subIndex); // grow
-                       }
-                       this.subroutines[subIndex++] = sub;
-                       if (sub.cannotReturn()) {
-                               saveValueNeeded = false;
-                               break;
-                       }
-               }
-               traversedContext.recordReturnFrom(flowInfo.unconditionalInits());
-
-               ASTNode node;
-               if ((node = traversedContext.associatedNode) instanceof SynchronizedStatement) {
-                       isSynchronized = true;
-
-               } else if (node instanceof TryStatement) {
-                       TryStatement tryStatement = (TryStatement) node;
-                       flowInfo.addInitializationsFrom(tryStatement.subRoutineInits); // collect inits
-                       if (hasValueToSave) {
-                               if (this.saveValueVariable == null){ // closest subroutine secret variable is used
-                                       prepareSaveValueLocation(tryStatement);
-                               }
-                               saveValueNeeded = true;
-                       }
-
-               } else if (traversedContext instanceof InitializationFlowContext) {
-                               currentScope.problemReporter().cannotReturnInInitializer(this);
-                               return FlowInfo.DEAD_END;
-               }
-       } while ((traversedContext = traversedContext.parent) != null);
-       
-       // resize subroutines
-       if ((subroutines != null) && (subIndex != maxSub)) {
-               System.arraycopy(subroutines, 0, (subroutines = new ASTNode[subIndex]), 0, subIndex);
-       }
-
-       // secret local variable for return value (note that this can only occur in a real method)
-       if (saveValueNeeded) {
-               if (this.saveValueVariable != null) {
-                       this.saveValueVariable.useFlag = LocalVariableBinding.USED;
-               }
-       } else {
-               this.saveValueVariable = null;
-               if ((!isSynchronized) && (expressionType == BooleanBinding)) {
-                       this.expression.bits |= ValueForReturnMASK;
-               }
-       }
-       return FlowInfo.DEAD_END;
-}
-/**
- * Retrun statement code generation
- *
- *   generate the finallyInvocationSequence.
- *
- * @param currentScope org.eclipse.jdt.internal.compiler.lookup.BlockScope
- * @param codeStream org.eclipse.jdt.internal.compiler.codegen.CodeStream
- */
-//public void generateCode(BlockScope currentScope, CodeStream codeStream) {
-//     if ((bits & IsReachableMASK) == 0) {
-//             return;
-//     }
-//     int pc = codeStream.position;
-//     // generate the expression
-//     if ((expression != null) && (expression.constant == NotAConstant)) {
-//             expression.generateCode(currentScope, codeStream, needValue()); // no value needed if non-returning subroutine
-//             generateStoreSaveValueIfNecessary(codeStream);
-//     }
-//     
-//     // generation of code responsible for invoking the finally blocks in sequence
-//     if (subroutines != null) {
-//             for (int i = 0, max = subroutines.length; i < max; i++) {
-//                     ASTNode sub;
-//                     if ((sub = subroutines[i]) instanceof SynchronizedStatement) {
-//                             codeStream.load(((SynchronizedStatement) sub).synchroVariable);
-//                             codeStream.monitorexit();
-//                     } else {
-//                             TryStatement trySub = (TryStatement) sub;
-//                             if (trySub.subRoutineCannotReturn) {
-//                                     codeStream.goto_(trySub.subRoutineStartLabel);
-//                                     codeStream.recordPositionsFrom(pc, this.sourceStart);
-//                                     return;
-//                             } else {
-//                                     codeStream.jsr(trySub.subRoutineStartLabel);
-//                             }
-//                     }
-//             }
-//     }
-//     if (saveValueVariable != null) codeStream.load(saveValueVariable);
-//     
-//     if ((expression != null) && (expression.constant != NotAConstant)) {
-//             codeStream.generateConstant(expression.constant, expression.implicitConversion);
-//             generateStoreSaveValueIfNecessary(codeStream);          
-//     }
-//     // output the suitable return bytecode or wrap the value inside a descriptor for doits
-//     this.generateReturnBytecode(codeStream);
-//     
-//     codeStream.recordPositionsFrom(pc, this.sourceStart);
-//}
-/**
- * Dump the suitable return bytecode for a return statement
- *
- */
-//public void generateReturnBytecode(CodeStream codeStream) {
+  public Expression expression;
+
+  public TypeBinding expressionType;
+
+  public boolean isSynchronized;
+
+  public ASTNode[] subroutines;
+
+  public LocalVariableBinding saveValueVariable;
+
+  public ReturnStatement(Expression expr, int s, int e) {
+    sourceStart = s;
+    sourceEnd = e;
+    expression = expr;
+  }
+
+  public FlowInfo analyseCode(BlockScope currentScope, FlowContext flowContext, FlowInfo flowInfo) { // here requires to generate a
+                                                                                                     // sequence of finally blocks
+                                                                                                     // invocations depending
+                                                                                                     // corresponding
+    // to each of the traversed try statements, so that execution will terminate properly.
+
+    // lookup the label, this should answer the returnContext
+
+    if (expression != null) {
+      flowInfo = expression.analyseCode(currentScope, flowContext, flowInfo);
+    }
+    // compute the return sequence (running the finally blocks)
+    FlowContext traversedContext = flowContext;
+    int subIndex = 0, maxSub = 5;
+    boolean saveValueNeeded = false;
+    boolean hasValueToSave = expression != null && expression.constant == NotAConstant;
+    do {
+      ASTNode sub;
+      if ((sub = traversedContext.subRoutine()) != null) {
+        if (this.subroutines == null) {
+          this.subroutines = new ASTNode[maxSub];
+        }
+        if (subIndex == maxSub) {
+          System.arraycopy(this.subroutines, 0, (this.subroutines = new ASTNode[maxSub *= 2]), 0, subIndex); // grow
+        }
+        this.subroutines[subIndex++] = sub;
+        if (sub.cannotReturn()) {
+          saveValueNeeded = false;
+          break;
+        }
+      }
+      traversedContext.recordReturnFrom(flowInfo.unconditionalInits());
+
+      ASTNode node = traversedContext.associatedNode;
+//      if ((node = traversedContext.associatedNode) instanceof SynchronizedStatement) {
+//        isSynchronized = true;
 //
-//     if (expression == null) {
-//             codeStream.return_();
-//     } else {
-//             switch (expression.implicitConversion >> 4) {
-//                     case T_boolean :
-//                     case T_int :
-//                             codeStream.ireturn();
-//                             break;
-//                     case T_float :
-//                             codeStream.freturn();
-//                             break;
-//                     case T_long :
-//                             codeStream.lreturn();
-//                             break;
-//                     case T_double :
-//                             codeStream.dreturn();
-//                             break;
-//                     default :
-//                             codeStream.areturn();
-//             }
-//     }
-//}
-//public void generateStoreSaveValueIfNecessary(CodeStream codeStream){
-//     if (saveValueVariable != null) codeStream.store(saveValueVariable, false);
-//}
-public boolean needValue(){
-       return (subroutines == null) || (saveValueVariable != null) || isSynchronized;
-}
-public void prepareSaveValueLocation(TryStatement targetTryStatement){
-               
-       this.saveValueVariable = targetTryStatement.secretReturnValue;
-}
-public void resolve(BlockScope scope) {
-       MethodScope methodScope = scope.methodScope();
-       MethodBinding methodBinding;
-       TypeBinding methodType =
-               (methodScope.referenceContext instanceof AbstractMethodDeclaration)
-                       ? ((methodBinding = ((AbstractMethodDeclaration) methodScope.referenceContext).binding) == null 
-                               ? null 
-                               : methodBinding.returnType)
-                       : VoidBinding;
-       if (methodType == VoidBinding) {
-               // the expression should be null
-               if (expression == null)
-                       return;
-               if ((expressionType = expression.resolveType(scope)) != null)
-                       scope.problemReporter().attemptToReturnNonVoidExpression(this, expressionType);
-               return;
-       }
-       if (expression == null) {
-               if (methodType != null) scope.problemReporter().shouldReturn(methodType, this);
-               return;
-       }
-       if ((expressionType = expression.resolveType(scope)) == null)
-               return;
-
-       if (methodType != null && expression.isConstantValueOfTypeAssignableToType(expressionType, methodType)) {
-               // dealing with constant
-               expression.implicitWidening(methodType, expressionType);
-               return;
-       }
-       if (expressionType == VoidBinding) {
-               scope.problemReporter().attemptToReturnVoidValue(this);
-               return;
-       }
-       if (methodType != null && expressionType.isCompatibleWith(methodType)) {
-               expression.implicitWidening(methodType, expressionType);
-               return;
-       }
-       if (methodType != null){
-               scope.problemReporter().typeMismatchErrorActualTypeExpectedType(expression, expressionType, methodType);
-       }
-}
-public String toString(int tab){
-
-       String s = tabString(tab) ;
-       s = s + "return "; //$NON-NLS-1$
-       if (expression != null )
-               s = s + expression.toStringExpression() ;
-       return s;
-}
-public void traverse(IAbstractSyntaxTreeVisitor visitor, BlockScope scope) {
-       if (visitor.visit(this, scope)) {
-               if (expression != null)
-                       expression.traverse(visitor, scope);
-       }
-       visitor.endVisit(this, scope);
-}
-}
+//      } else 
+      if (node instanceof TryStatement) {
+        TryStatement tryStatement = (TryStatement) node;
+        flowInfo.addInitializationsFrom(tryStatement.subRoutineInits); // collect inits
+        if (hasValueToSave) {
+          if (this.saveValueVariable == null) { // closest subroutine secret variable is used
+            prepareSaveValueLocation(tryStatement);
+          }
+          saveValueNeeded = true;
+        }
+
+      } else if (traversedContext instanceof InitializationFlowContext) {
+        currentScope.problemReporter().cannotReturnInInitializer(this);
+        return FlowInfo.DEAD_END;
+      }
+    } while ((traversedContext = traversedContext.parent) != null);
+
+    // resize subroutines
+    if ((subroutines != null) && (subIndex != maxSub)) {
+      System.arraycopy(subroutines, 0, (subroutines = new ASTNode[subIndex]), 0, subIndex);
+    }
+
+    // secret local variable for return value (note that this can only occur in a real method)
+    if (saveValueNeeded) {
+      if (this.saveValueVariable != null) {
+        this.saveValueVariable.useFlag = LocalVariableBinding.USED;
+      }
+    } else {
+      this.saveValueVariable = null;
+      if ((!isSynchronized) && (expressionType == BooleanBinding)) {
+        this.expression.bits |= ValueForReturnMASK;
+      }
+    }
+    return FlowInfo.DEAD_END;
+  }
+
+  /**
+   * Retrun statement code generation
+   * 
+   * generate the finallyInvocationSequence.
+   * 
+   * @param currentScope
+   *          net.sourceforge.phpdt.internal.compiler.lookup.BlockScope
+   * @param codeStream
+   *          net.sourceforge.phpdt.internal.compiler.codegen.CodeStream
+   */
+  //public void generateCode(BlockScope currentScope, CodeStream codeStream) {
+  //   if ((bits & IsReachableMASK) == 0) {
+  //           return;
+  //   }
+  //   int pc = codeStream.position;
+  //   // generate the expression
+  //   if ((expression != null) && (expression.constant == NotAConstant)) {
+  //           expression.generateCode(currentScope, codeStream, needValue()); // no value needed if non-returning subroutine
+  //           generateStoreSaveValueIfNecessary(codeStream);
+  //   }
+  //   
+  //   // generation of code responsible for invoking the finally blocks in sequence
+  //   if (subroutines != null) {
+  //           for (int i = 0, max = subroutines.length; i < max; i++) {
+  //                   ASTNode sub;
+  //                   if ((sub = subroutines[i]) instanceof SynchronizedStatement) {
+  //                           codeStream.load(((SynchronizedStatement) sub).synchroVariable);
+  //                           codeStream.monitorexit();
+  //                   } else {
+  //                           TryStatement trySub = (TryStatement) sub;
+  //                           if (trySub.subRoutineCannotReturn) {
+  //                                   codeStream.goto_(trySub.subRoutineStartLabel);
+  //                                   codeStream.recordPositionsFrom(pc, this.sourceStart);
+  //                                   return;
+  //                           } else {
+  //                                   codeStream.jsr(trySub.subRoutineStartLabel);
+  //                           }
+  //                   }
+  //           }
+  //   }
+  //   if (saveValueVariable != null) codeStream.load(saveValueVariable);
+  //   
+  //   if ((expression != null) && (expression.constant != NotAConstant)) {
+  //           codeStream.generateConstant(expression.constant, expression.implicitConversion);
+  //           generateStoreSaveValueIfNecessary(codeStream);
+  //   }
+  //   // output the suitable return bytecode or wrap the value inside a descriptor for doits
+  //   this.generateReturnBytecode(codeStream);
+  //   
+  //   codeStream.recordPositionsFrom(pc, this.sourceStart);
+  //}
+  /**
+   * Dump the suitable return bytecode for a return statement
+   *  
+   */
+  //public void generateReturnBytecode(CodeStream codeStream) {
+  //
+  //   if (expression == null) {
+  //           codeStream.return_();
+  //   } else {
+  //           switch (expression.implicitConversion >> 4) {
+  //                   case T_boolean :
+  //                   case T_int :
+  //                           codeStream.ireturn();
+  //                           break;
+  //                   case T_float :
+  //                           codeStream.freturn();
+  //                           break;
+  //                   case T_long :
+  //                           codeStream.lreturn();
+  //                           break;
+  //                   case T_double :
+  //                           codeStream.dreturn();
+  //                           break;
+  //                   default :
+  //                           codeStream.areturn();
+  //           }
+  //   }
+  //}
+  //public void generateStoreSaveValueIfNecessary(CodeStream codeStream){
+  //   if (saveValueVariable != null) codeStream.store(saveValueVariable, false);
+  //}
+  public boolean needValue() {
+    return (subroutines == null) || (saveValueVariable != null) || isSynchronized;
+  }
+
+  public void prepareSaveValueLocation(TryStatement targetTryStatement) {
+
+    this.saveValueVariable = targetTryStatement.secretReturnValue;
+  }
+
+  public void resolve(BlockScope scope) {
+    MethodScope methodScope = scope.methodScope();
+    MethodBinding methodBinding;
+    TypeBinding methodType = (methodScope.referenceContext instanceof AbstractMethodDeclaration) ? ((methodBinding = ((AbstractMethodDeclaration) methodScope.referenceContext).binding) == null ? null
+        : methodBinding.returnType)
+        : VoidBinding;
+    if (methodType == VoidBinding) {
+      // the expression should be null
+      if (expression == null)
+        return;
+      if ((expressionType = expression.resolveType(scope)) != null)
+        scope.problemReporter().attemptToReturnNonVoidExpression(this, expressionType);
+      return;
+    }
+    if (expression == null) {
+      if (methodType != null)
+        scope.problemReporter().shouldReturn(methodType, this);
+      return;
+    }
+    if ((expressionType = expression.resolveType(scope)) == null)
+      return;
+
+    if (methodType != null && expression.isConstantValueOfTypeAssignableToType(expressionType, methodType)) {
+      // dealing with constant
+      expression.implicitWidening(methodType, expressionType);
+      return;
+    }
+    if (expressionType == VoidBinding) {
+      scope.problemReporter().attemptToReturnVoidValue(this);
+      return;
+    }
+    if (methodType != null && expressionType.isCompatibleWith(methodType)) {
+      expression.implicitWidening(methodType, expressionType);
+      return;
+    }
+    if (methodType != null) {
+      scope.problemReporter().typeMismatchErrorActualTypeExpectedType(expression, expressionType, methodType);
+    }
+  }
+
+  public StringBuffer printStatement(int tab, StringBuffer output) {
+
+    printIndent(tab, output).append("return "); //$NON-NLS-1$
+    if (expression != null)
+      expression.printExpression(0, output);
+    return output.append(';');
+  }
+
+  public String toString(int tab) {
+
+    String s = tabString(tab);
+    s = s + "return "; //$NON-NLS-1$
+    if (expression != null)
+      s = s + expression.toStringExpression();
+    return s;
+  }
+
+  public void traverse(ASTVisitor visitor, BlockScope scope) {
+    if (visitor.visit(this, scope)) {
+      if (expression != null)
+        expression.traverse(visitor, scope);
+    }
+    visitor.endVisit(this, scope);
+  }
+}
\ No newline at end of file
index 175cd27..f3f7324 100644 (file)
@@ -661,6 +661,10 @@ public TypeBinding resolveType(BlockScope scope) {
        // error scenarii
        return this.resolvedType = this.reportError(scope);
 }
+public StringBuffer printExpression(int indent, StringBuffer output){
+       
+               return output.append(token);
+       }
 public String toStringExpression(){
 
        return new String(token);}
index c50e83b..0965c8e 100644 (file)
@@ -10,6 +10,7 @@
  *******************************************************************************/
 package net.sourceforge.phpeclipse.internal.compiler.ast;
 
+import net.sourceforge.phpdt.internal.compiler.ASTVisitor;
 import net.sourceforge.phpdt.internal.compiler.IAbstractSyntaxTreeVisitor;
 import net.sourceforge.phpdt.internal.compiler.lookup.BlockScope;
 import net.sourceforge.phpdt.internal.compiler.lookup.ClassScope;
@@ -55,14 +56,18 @@ public TypeBinding resolveTypeEnclosing(BlockScope scope, ReferenceBinding enclo
                scope.problemReporter().deprecatedType(memberTb, this);
        return this.resolvedType = memberTb;
 }
+public StringBuffer printExpression(int indent, StringBuffer output){
+       
+       return output.append(token);
+}
 public String toStringExpression(int tab){
        return new String(token) ;
 }
-public void traverse(IAbstractSyntaxTreeVisitor visitor, BlockScope scope) {
+public void traverse(ASTVisitor visitor, BlockScope scope) {
        visitor.visit(this, scope);
        visitor.endVisit(this, scope);
 }
-public void traverse(IAbstractSyntaxTreeVisitor visitor, ClassScope scope) {
+public void traverse(ASTVisitor visitor, ClassScope scope) {
        visitor.visit(this, scope);
        visitor.endVisit(this, scope);
 }
index 1559614..bcd71cb 100644 (file)
@@ -49,7 +49,11 @@ public abstract class Statement extends ASTNode {
 
                return true;
        }
-       
+       public StringBuffer print(int indent, StringBuffer output) {
+               return printStatement(indent, output);
+       }
+       public abstract StringBuffer printStatement(int indent, StringBuffer output);
+
        public abstract void resolve(BlockScope scope);
        
        public Constant resolveCase(BlockScope scope, TypeBinding testType, SwitchStatement switchStatement) {
index a77ef11..df8f307 100644 (file)
@@ -1,13 +1,10 @@
-/*******************************************************************************
- * Copyright (c) 2000, 2003 IBM Corporation and others.
- * All rights reserved. This program and the accompanying materials 
- * are made available under the terms of the Common Public License v1.0
- * which accompanies this distribution, and is available at
+/***********************************************************************************************************************************
+ * Copyright (c) 2000, 2003 IBM Corporation and others. All rights reserved. This program and the accompanying materials are made
+ * available under the terms of the Common Public License v1.0 which accompanies this distribution, and is available at
  * http://www.eclipse.org/legal/cpl-v10.html
  * 
- * Contributors:
- *     IBM Corporation - initial API and implementation
- *******************************************************************************/
+ * Contributors: IBM Corporation - initial API and implementation
+ **********************************************************************************************************************************/
 package net.sourceforge.phpeclipse.internal.compiler.ast;
 
 import net.sourceforge.phpdt.internal.compiler.IAbstractSyntaxTreeVisitor;
@@ -15,100 +12,136 @@ import net.sourceforge.phpdt.internal.compiler.impl.Constant;
 import net.sourceforge.phpdt.internal.compiler.lookup.BlockScope;
 import net.sourceforge.phpdt.internal.compiler.lookup.TypeBinding;
 
-
 public class StringLiteral extends Literal {
 
-       char[] source;
-
-       public StringLiteral(char[] token, int s, int e) {
-
-               this(s,e);
-               source = token;
-       }
-
-       public StringLiteral(int s, int e) {
+  char[] source;
 
-               super(s,e);
-       }
+  public StringLiteral(char[] token, int s, int e) {
 
-       public void computeConstant() {
-       
-               constant = Constant.fromValue(String.valueOf(source));
-       }
+    this(s, e);
+    source = token;
+  }
 
-       public ExtendedStringLiteral extendWith(CharLiteral lit){
+  public StringLiteral(int s, int e) {
 
-               //add the lit source to mine, just as if it was mine
-               return new ExtendedStringLiteral(this,lit);
-       }
+    super(s, e);
+  }
 
-       public ExtendedStringLiteral extendWith(StringLiteral lit){
+  public void computeConstant() {
 
-               //add the lit source to mine, just as if it was mine
-               return new ExtendedStringLiteral(this,lit);
-       }
+    constant = Constant.fromValue(String.valueOf(source));
+  }
 
-       /**
-        * Code generation for string literal
-        */ 
-//     public void generateCode(BlockScope currentScope, CodeStream codeStream, boolean valueRequired) {
+//  public ExtendedStringLiteral extendWith(CharLiteral lit) {
 //
-//             int pc = codeStream.position;
-//             if (valueRequired)
-//                     codeStream.ldc(constant.stringValue());
-//             codeStream.recordPositionsFrom(pc, this.sourceStart);
-//     }
-
-       public TypeBinding literalType(BlockScope scope) {
-
-               return scope.getJavaLangString();
-       }
-
-       public char[] source() {
-
-               return source;
-       }
-
-       public String toStringExpression() {
-       
-               // handle some special char.....
-               StringBuffer result = new StringBuffer("\""); //$NON-NLS-1$
-               for (int i = 0; i < source.length; i++) {
-                       switch (source[i]) {
-                               case '\b' :
-                                       result.append("\\b"); //$NON-NLS-1$
-                                       break;
-                               case '\t' :
-                                       result.append("\\t"); //$NON-NLS-1$
-                                       break;
-                               case '\n' :
-                                       result.append("\\n"); //$NON-NLS-1$
-                                       break;
-                               case '\f' :
-                                       result.append("\\f"); //$NON-NLS-1$
-                                       break;
-                               case '\r' :
-                                       result.append("\\r"); //$NON-NLS-1$
-                                       break;
-                               case '\"' :
-                                       result.append("\\\""); //$NON-NLS-1$
-                                       break;
-                               case '\'' :
-                                       result.append("\\'"); //$NON-NLS-1$
-                                       break;
-                               case '\\' : //take care not to display the escape as a potential real char
-                                       result.append("\\\\"); //$NON-NLS-1$
-                                       break;
-                               default :
-                                       result.append(source[i]);
-                       }
-               }
-               result.append("\""); //$NON-NLS-1$
-               return result.toString();
-       }
-
-       public void traverse(IAbstractSyntaxTreeVisitor visitor, BlockScope scope) {
-               visitor.visit(this, scope);
-               visitor.endVisit(this, scope);
-       }
-}
+//    //add the lit source to mine, just as if it was mine
+//    return new ExtendedStringLiteral(this, lit);
+//  }
+
+  public ExtendedStringLiteral extendWith(StringLiteral lit) {
+
+    //add the lit source to mine, just as if it was mine
+    return new ExtendedStringLiteral(this, lit);
+  }
+
+  /**
+   * Code generation for string literal
+   */
+  //   public void generateCode(BlockScope currentScope, CodeStream codeStream, boolean valueRequired) {
+  //
+  //           int pc = codeStream.position;
+  //           if (valueRequired)
+  //                   codeStream.ldc(constant.stringValue());
+  //           codeStream.recordPositionsFrom(pc, this.sourceStart);
+  //   }
+  public TypeBinding literalType(BlockScope scope) {
+
+    return scope.getJavaLangString();
+  }
+
+  public StringBuffer printExpression(int indent, StringBuffer output) {
+
+    // handle some special char.....
+    output.append('\"');
+    for (int i = 0; i < source.length; i++) {
+      switch (source[i]) {
+      case '\b':
+        output.append("\\b"); //$NON-NLS-1$
+        break;
+      case '\t':
+        output.append("\\t"); //$NON-NLS-1$
+        break;
+      case '\n':
+        output.append("\\n"); //$NON-NLS-1$
+        break;
+      case '\f':
+        output.append("\\f"); //$NON-NLS-1$
+        break;
+      case '\r':
+        output.append("\\r"); //$NON-NLS-1$
+        break;
+      case '\"':
+        output.append("\\\""); //$NON-NLS-1$
+        break;
+      case '\'':
+        output.append("\\'"); //$NON-NLS-1$
+        break;
+      case '\\': //take care not to display the escape as a potential real char
+        output.append("\\\\"); //$NON-NLS-1$
+        break;
+      default:
+        output.append(source[i]);
+      }
+    }
+    output.append('\"');
+    return output;
+  }
+
+  public char[] source() {
+
+    return source;
+  }
+
+  public String toStringExpression() {
+
+    // handle some special char.....
+    StringBuffer result = new StringBuffer("\""); //$NON-NLS-1$
+    for (int i = 0; i < source.length; i++) {
+      switch (source[i]) {
+      case '\b':
+        result.append("\\b"); //$NON-NLS-1$
+        break;
+      case '\t':
+        result.append("\\t"); //$NON-NLS-1$
+        break;
+      case '\n':
+        result.append("\\n"); //$NON-NLS-1$
+        break;
+      case '\f':
+        result.append("\\f"); //$NON-NLS-1$
+        break;
+      case '\r':
+        result.append("\\r"); //$NON-NLS-1$
+        break;
+      case '\"':
+        result.append("\\\""); //$NON-NLS-1$
+        break;
+      case '\'':
+        result.append("\\'"); //$NON-NLS-1$
+        break;
+      case '\\': //take care not to display the escape as a potential real char
+        result.append("\\\\"); //$NON-NLS-1$
+        break;
+      default:
+        result.append(source[i]);
+      }
+    }
+    result.append("\""); //$NON-NLS-1$
+    return result.toString();
+  }
+
+  public void traverse(IAbstractSyntaxTreeVisitor visitor, BlockScope scope) {
+    visitor.visit(this, scope);
+    visitor.endVisit(this, scope);
+  }
+}
\ No newline at end of file
index ddc5514..82dc2b3 100644 (file)
@@ -10,7 +10,7 @@
  *******************************************************************************/
 package net.sourceforge.phpeclipse.internal.compiler.ast;
 
-import net.sourceforge.phpdt.internal.compiler.IAbstractSyntaxTreeVisitor;
+import net.sourceforge.phpdt.internal.compiler.ASTVisitor;
 import net.sourceforge.phpdt.internal.compiler.codegen.Label;
 import net.sourceforge.phpdt.internal.compiler.flow.FlowContext;
 import net.sourceforge.phpdt.internal.compiler.flow.FlowInfo;
@@ -20,12 +20,12 @@ import net.sourceforge.phpdt.internal.compiler.lookup.BlockScope;
 import net.sourceforge.phpdt.internal.compiler.lookup.TypeBinding;
 
 public class SwitchStatement extends Statement {
-       public Expression testExpression;
+       public Expression expression;
        public Statement[] statements;
        public BlockScope scope;
        public int explicitDeclarations;
        public Label breakLabel;
-       public Case[] cases;
+       public CaseStatement[] cases;
        public DefaultCase defaultCase;
        public int caseCount = 0;
 
@@ -42,7 +42,7 @@ public class SwitchStatement extends Statement {
                BlockScope currentScope,
                FlowContext flowContext,
                FlowInfo flowInfo) {
-               flowInfo = testExpression.analyseCode(currentScope, flowContext, flowInfo);
+               flowInfo = expression.analyseCode(currentScope, flowContext, flowInfo);
                SwitchFlowContext switchContext =
                        new SwitchFlowContext(flowContext, this, (breakLabel = new Label()));
 
@@ -92,8 +92,8 @@ public class SwitchStatement extends Statement {
        /**
         * Switch code generation
         *
-        * @param currentScope org.eclipse.jdt.internal.compiler.lookup.BlockScope
-        * @param codeStream org.eclipse.jdt.internal.compiler.codegen.CodeStream
+        * @param currentScope net.sourceforge.phpdt.internal.compiler.lookup.BlockScope
+        * @param codeStream net.sourceforge.phpdt.internal.compiler.codegen.CodeStream
         */
 //     public void generateCode(BlockScope currentScope, CodeStream codeStream) {
 //             int[] sortedIndexes = new int[caseCount];
@@ -207,15 +207,32 @@ public class SwitchStatement extends Statement {
                }
        }
 
+       public StringBuffer printStatement(int indent, StringBuffer output) {
+
+               printIndent(indent, output).append("switch ("); //$NON-NLS-1$
+               expression.printExpression(0, output).append(") {"); //$NON-NLS-1$
+               if (statements != null) {
+                       for (int i = 0; i < statements.length; i++) {
+                               output.append('\n');
+                               if (statements[i] instanceof CaseStatement) {
+                                       statements[i].printStatement(indent, output);
+                               } else {
+                                       statements[i].printStatement(indent+2, output);
+                               }
+                       }
+               }
+               output.append("\n"); //$NON-NLS-1$
+               return printIndent(indent, output).append('}');
+       }
        public void resolve(BlockScope upperScope) {
 
-               TypeBinding testType = testExpression.resolveType(upperScope);
+               TypeBinding testType = expression.resolveType(upperScope);
                if (testType == null)
                        return;
-               testExpression.implicitWidening(testType, testType);
-               if (!(testExpression.isConstantValueOfTypeAssignableToType(testType, IntBinding))) {
+               expression.implicitWidening(testType, testType);
+               if (!(expression.isConstantValueOfTypeAssignableToType(testType, IntBinding))) {
                        if (!testType.isCompatibleWith(IntBinding)) {
-                               upperScope.problemReporter().incorrectSwitchType(testExpression, testType);
+                               upperScope.problemReporter().incorrectSwitchType(expression, testType);
                                return;
                        }
                }
@@ -223,7 +240,7 @@ public class SwitchStatement extends Statement {
                        scope = explicitDeclarations == 0 ? upperScope : new BlockScope(upperScope);
                        int length;
                        // collection of cases is too big but we will only iterate until caseCount
-                       cases = new Case[length = statements.length];
+                       cases = new CaseStatement[length = statements.length];
                        int[] casesValues = new int[length];
                        int counter = 0;
                        for (int i = 0; i < length; i++) {
@@ -234,7 +251,7 @@ public class SwitchStatement extends Statement {
                                                int key = cst.intValue();
                                                for (int j = 0; j < counter; j++) {
                                                        if (casesValues[j] == key) {
-                                                               scope.problemReporter().duplicateCase((Case) statements[i], cst); //TODO: (philippe) could improve diagnosis to indicate colliding case
+                                                               scope.problemReporter().duplicateCase((CaseStatement) statements[i], cst); //TODO: (philippe) could improve diagnosis to indicate colliding case
                                                        }
                                                }
                                                casesValues[counter++] = key;
@@ -247,7 +264,7 @@ public class SwitchStatement extends Statement {
 
                String inFront, s = tabString(tab);
                inFront = s;
-               s = s + "switch (" + testExpression.toStringExpression() + ") "; //$NON-NLS-1$ //$NON-NLS-2$
+               s = s + "switch (" + expression.toStringExpression() + ") "; //$NON-NLS-1$ //$NON-NLS-2$
                if (statements == null) {
                        s = s + "{}"; //$NON-NLS-1$
                        return s;
@@ -267,17 +284,17 @@ public class SwitchStatement extends Statement {
                                //use instanceof in order not to polluate classes with behavior only needed for printing purpose.
                                if (statements[i] instanceof Expression)
                                        s = s + "\n" + inFront + tabulation; //$NON-NLS-1$
-                               if (statements[i] instanceof Break)
+                               if (statements[i] instanceof BreakStatement)
                                        s = s + statements[i].toString(0);
                                else
                                        s = s + "\n" + statements[i].toString(tab + 2); //$NON-NLS-1$
                                //============= 
-                               if ((statements[i] instanceof Case)
+                               if ((statements[i] instanceof CaseStatement)
                                        || (statements[i] instanceof DefaultCase)) {
                                        i++;
-                                       while (!((statements[i] instanceof Case)
+                                       while (!((statements[i] instanceof CaseStatement)
                                                || (statements[i] instanceof DefaultCase))) {
-                                               if ((statements[i] instanceof Expression) || (statements[i] instanceof Break))
+                                               if ((statements[i] instanceof Expression) || (statements[i] instanceof BreakStatement))
                                                        s = s + statements[i].toString(0) + " ; "; //$NON-NLS-1$
                                                else
                                                        s = s + "\n" + statements[i].toString(tab + 6) + " ; "; //$NON-NLS-1$ //$NON-NLS-2$
@@ -295,11 +312,11 @@ public class SwitchStatement extends Statement {
        }
 
        public void traverse(
-               IAbstractSyntaxTreeVisitor visitor,
+               ASTVisitor visitor,
                BlockScope blockScope) {
 
                if (visitor.visit(this, blockScope)) {
-                       testExpression.traverse(visitor, scope);
+                       expression.traverse(visitor, scope);
                        if (statements != null) {
                                int statementsLength = statements.length;
                                for (int i = 0; i < statementsLength; i++)
diff --git a/net.sourceforge.phpeclipse/src/net/sourceforge/phpeclipse/internal/compiler/ast/SynchronizedStatement.java b/net.sourceforge.phpeclipse/src/net/sourceforge/phpeclipse/internal/compiler/ast/SynchronizedStatement.java
deleted file mode 100644 (file)
index cbe43d3..0000000
+++ /dev/null
@@ -1,173 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2000, 2003 IBM Corporation and others.
- * All rights reserved. This program and the accompanying materials 
- * are made available under the terms of the Common Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/cpl-v10.html
- * 
- * Contributors:
- *     IBM Corporation - initial API and implementation
- *******************************************************************************/
-package net.sourceforge.phpeclipse.internal.compiler.ast;
-
-import net.sourceforge.phpdt.internal.compiler.IAbstractSyntaxTreeVisitor;
-import net.sourceforge.phpdt.internal.compiler.codegen.Label;
-import net.sourceforge.phpdt.internal.compiler.flow.FlowContext;
-import net.sourceforge.phpdt.internal.compiler.flow.FlowInfo;
-import net.sourceforge.phpdt.internal.compiler.flow.InsideSubRoutineFlowContext;
-import net.sourceforge.phpdt.internal.compiler.lookup.BlockScope;
-import net.sourceforge.phpdt.internal.compiler.lookup.LocalVariableBinding;
-import net.sourceforge.phpdt.internal.compiler.lookup.TypeBinding;
-
-public class SynchronizedStatement extends Statement {
-
-       public Expression expression;
-       public Block block;
-       public BlockScope scope;
-
-       boolean blockExit;
-       public LocalVariableBinding synchroVariable;
-       static final char[] SecretLocalDeclarationName = " syncValue".toCharArray(); //$NON-NLS-1$
-
-       public SynchronizedStatement(
-               Expression expression,
-               Block statement,
-               int s,
-               int e) {
-
-               this.expression = expression;
-               this.block = statement;
-               sourceEnd = e;
-               sourceStart = s;
-       }
-
-       public FlowInfo analyseCode(
-               BlockScope currentScope,
-               FlowContext flowContext,
-               FlowInfo flowInfo) {
-
-               // mark the synthetic variable as being used
-               synchroVariable.useFlag = LocalVariableBinding.USED;
-
-               // simple propagation to subnodes
-               flowInfo =
-                       block.analyseCode(
-                               scope,
-                               new InsideSubRoutineFlowContext(flowContext, this),
-                               expression.analyseCode(scope, flowContext, flowInfo));
-
-               // optimizing code gen
-               this.blockExit = !flowInfo.isReachable();
-
-               return flowInfo;
-       }
-
-       /**
-        * Synchronized statement code generation
-        *
-        * @param currentScope org.eclipse.jdt.internal.compiler.lookup.BlockScope
-        * @param codeStream org.eclipse.jdt.internal.compiler.codegen.CodeStream
-        */
-//     public void generateCode(BlockScope currentScope, CodeStream codeStream) {
-//
-//             if ((bits & IsReachableMASK) == 0) {
-//                     return;
-//             }
-//             int pc = codeStream.position;
-//
-//             // generate the synchronization expression
-//             expression.generateCode(scope, codeStream, true);
-//             if (block.isEmptyBlock()) {
-//                     if ((synchroVariable.type == LongBinding)
-//                             || (synchroVariable.type == DoubleBinding)) {
-//                             codeStream.dup2();
-//                     } else {
-//                             codeStream.dup();
-//                     }
-//                     // only take the lock
-//                     codeStream.monitorenter();
-//                     codeStream.monitorexit();
-//             } else {
-//                     // enter the monitor
-//                     codeStream.store(synchroVariable, true);
-//                     codeStream.monitorenter();
-//
-//                     // generate  the body of the synchronized block
-//                     ExceptionLabel anyExceptionHandler = new ExceptionLabel(codeStream, null);
-//                     //'null' denotes any kind of exception
-//                     block.generateCode(scope, codeStream);
-//                     Label endLabel = new Label(codeStream);
-//                     if (!blockExit) {
-//                             codeStream.load(synchroVariable);
-//                             codeStream.monitorexit();
-//                             codeStream.goto_(endLabel);
-//                     }
-//                     // generate the body of the exception handler
-//                     anyExceptionHandler.placeEnd();
-//                     anyExceptionHandler.place();
-//                     codeStream.incrStackSize(1);
-//                     codeStream.load(synchroVariable);
-//                     codeStream.monitorexit();
-//                     codeStream.athrow();
-//                     if (!blockExit) {
-//                             endLabel.place();
-//                     }
-//             }
-//             if (scope != currentScope) {
-//                     codeStream.exitUserScope(scope);
-//             }
-//             codeStream.recordPositionsFrom(pc, this.sourceStart);
-//     }
-
-       public void resolve(BlockScope upperScope) {
-
-               // special scope for secret locals optimization.
-               scope = new BlockScope(upperScope);
-               TypeBinding type = expression.resolveType(scope);
-               if (type == null)
-                       return;
-               switch (type.id) {
-                       case (T_boolean) :
-                       case (T_char) :
-                       case (T_float) :
-                       case (T_double) :
-                       case (T_byte) :
-                       case (T_short) :
-                       case (T_int) :
-                       case (T_long) :
-                               scope.problemReporter().invalidTypeToSynchronize(expression, type);
-                               break;
-                       case (T_void) :
-                               scope.problemReporter().illegalVoidExpression(expression);
-                               break;
-                       case (T_null) :
-                               scope.problemReporter().invalidNullToSynchronize(expression);
-                               break; 
-               }
-               //continue even on errors in order to have the TC done into the statements
-               synchroVariable = new LocalVariableBinding(SecretLocalDeclarationName, type, AccDefault, false);
-               scope.addLocalVariable(synchroVariable);
-               synchroVariable.constant = NotAConstant; // not inlinable
-               expression.implicitWidening(type, type);
-               block.resolveUsing(scope);
-       }
-
-       public String toString(int tab) {
-
-               String s = tabString(tab);
-               s = s + "synchronized (" + expression.toStringExpression() + ")";  //$NON-NLS-1$ //$NON-NLS-2$
-               s = s + "\n" + block.toString(tab + 1); //$NON-NLS-1$
-               return s;
-       }
-
-       public void traverse(
-               IAbstractSyntaxTreeVisitor visitor,
-               BlockScope blockScope) {
-
-               if (visitor.visit(this, blockScope)) {
-                       expression.traverse(visitor, scope);
-                       block.traverse(visitor, scope);
-               }
-               visitor.endVisit(this, blockScope);
-       }
-}
index d13353d..ab9190b 100644 (file)
@@ -1,13 +1,10 @@
-/*******************************************************************************
- * Copyright (c) 2000, 2003 IBM Corporation and others.
- * All rights reserved. This program and the accompanying materials 
- * are made available under the terms of the Common Public License v1.0
- * which accompanies this distribution, and is available at
+/***********************************************************************************************************************************
+ * Copyright (c) 2000, 2003 IBM Corporation and others. All rights reserved. This program and the accompanying materials are made
+ * available under the terms of the Common Public License v1.0 which accompanies this distribution, and is available at
  * http://www.eclipse.org/legal/cpl-v10.html
  * 
- * Contributors:
- *     IBM Corporation - initial API and implementation
- *******************************************************************************/
+ * Contributors: IBM Corporation - initial API and implementation
+ **********************************************************************************************************************************/
 package net.sourceforge.phpeclipse.internal.compiler.ast;
 
 import net.sourceforge.phpdt.internal.compiler.IAbstractSyntaxTreeVisitor;
@@ -19,102 +16,112 @@ import net.sourceforge.phpdt.internal.compiler.lookup.TypeBinding;
 
 public class ThisReference extends Reference {
 
-       public static ThisReference implicitThis(){
-
-               ThisReference implicitThis = new ThisReference(0, 0); 
-               implicitThis.bits |= IsImplicitThisMask;
-               return implicitThis;
-       }
-               
-       public ThisReference(int sourceStart, int sourceEnd) {
-       
-               this.sourceStart = sourceStart;
-               this.sourceEnd = sourceEnd;
-       }
-
-       /* 
-        * @see Reference#analyseAssignment(...)
-        */
-       public FlowInfo analyseAssignment(BlockScope currentScope, FlowContext flowContext, FlowInfo flowInfo, Assignment assignment, boolean isCompound) {
-
-               return flowInfo; // this cannot be assigned
-       }
-
-       public boolean checkAccess(MethodScope methodScope) {
-       
-               // this/super cannot be used in constructor call
-               if (methodScope.isConstructorCall) {
-                       methodScope.problemReporter().fieldsOrThisBeforeConstructorInvocation(this);
-                       return false;
-               }
-       
-               // static may not refer to this/super
-               if (methodScope.isStatic) {
-                       methodScope.problemReporter().errorThisSuperInStatic(this);
-                       return false;
-               }
-               return true;
-       }
-
-       /* 
-        * @see Reference#generateAssignment(...)
-        */
-//     public void generateAssignment(BlockScope currentScope, CodeStream codeStream, Assignment assignment, boolean valueRequired) {
-//
-//              // this cannot be assigned
-//     }
-//
-//     public void generateCode(BlockScope currentScope, CodeStream codeStream, boolean valueRequired) {
-//     
-//             int pc = codeStream.position;
-//             if (valueRequired)
-//                     codeStream.aload_0();
-//             if ((this.bits & IsImplicitThisMask) == 0) codeStream.recordPositionsFrom(pc, this.sourceStart);
-//     }
-//
-//     /* 
-//      * @see Reference#generateCompoundAssignment(...)
-//      */
-//     public void generateCompoundAssignment(BlockScope currentScope, CodeStream codeStream, Expression expression, int operator, int assignmentImplicitConversion,  boolean valueRequired) {
-//
-//              // this cannot be assigned
-//     }
-//     
-//     /* 
-//      * @see org.eclipse.jdt.internal.compiler.ast.Reference#generatePostIncrement()
-//      */
-//     public void generatePostIncrement(BlockScope currentScope, CodeStream codeStream, CompoundAssignment postIncrement, boolean valueRequired) {
-//
-//              // this cannot be assigned
-//     }
-       
-       public boolean isImplicitThis() {
-               
-               return (this.bits & IsImplicitThisMask) != 0;
-       }
-
-       public boolean isThis() {
-               
-               return true ;
-       }
-
-       public TypeBinding resolveType(BlockScope scope) {
-       
-               constant = NotAConstant;
-               if (!this.isImplicitThis() && !checkAccess(scope.methodScope()))
-                       return null;
-               return this.resolvedType = scope.enclosingSourceType();
-       }
-
-       public String toStringExpression(){
-       
-               if (this.isImplicitThis()) return "" ; //$NON-NLS-1$
-               return "this"; //$NON-NLS-1$
-       }
-
-       public void traverse(IAbstractSyntaxTreeVisitor visitor, BlockScope blockScope) {
-
-               visitor.visit(this, blockScope);
-               visitor.endVisit(this, blockScope);
-       }
-}
+  public static ThisReference implicitThis() {
+
+    ThisReference implicitThis = new ThisReference(0, 0);
+    implicitThis.bits |= IsImplicitThisMask;
+    return implicitThis;
+  }
+
+  public ThisReference(int sourceStart, int sourceEnd) {
+
+    this.sourceStart = sourceStart;
+    this.sourceEnd = sourceEnd;
+  }
+
+  /*
+   * @see Reference#analyseAssignment(...)
+   */
+  public FlowInfo analyseAssignment(BlockScope currentScope, FlowContext flowContext, FlowInfo flowInfo, Assignment assignment,
+      boolean isCompound) {
+
+    return flowInfo; // this cannot be assigned
+  }
+
+  public boolean checkAccess(MethodScope methodScope) {
+
+    // this/super cannot be used in constructor call
+    if (methodScope.isConstructorCall) {
+      methodScope.problemReporter().fieldsOrThisBeforeConstructorInvocation(this);
+      return false;
+    }
+
+    // static may not refer to this/super
+    if (methodScope.isStatic) {
+      methodScope.problemReporter().errorThisSuperInStatic(this);
+      return false;
+    }
+    return true;
+  }
+
+  /*
+   * @see Reference#generateAssignment(...)
+   */
+  //   public void generateAssignment(BlockScope currentScope, CodeStream codeStream, Assignment assignment, boolean valueRequired) {
+  //
+  //            // this cannot be assigned
+  //   }
+  //
+  //   public void generateCode(BlockScope currentScope, CodeStream codeStream, boolean valueRequired) {
+  //   
+  //           int pc = codeStream.position;
+  //           if (valueRequired)
+  //                   codeStream.aload_0();
+  //           if ((this.bits & IsImplicitThisMask) == 0) codeStream.recordPositionsFrom(pc, this.sourceStart);
+  //   }
+  //
+  //   /*
+  //    * @see Reference#generateCompoundAssignment(...)
+  //    */
+  //   public void generateCompoundAssignment(BlockScope currentScope, CodeStream codeStream, Expression expression, int operator, int
+  // assignmentImplicitConversion, boolean valueRequired) {
+  //
+  //            // this cannot be assigned
+  //   }
+  //   
+  //   /*
+  //    * @see net.sourceforge.phpdt.internal.compiler.ast.Reference#generatePostIncrement()
+  //    */
+  //   public void generatePostIncrement(BlockScope currentScope, CodeStream codeStream, CompoundAssignment postIncrement, boolean
+  // valueRequired) {
+  //
+  //            // this cannot be assigned
+  //   }
+  public boolean isImplicitThis() {
+
+    return (this.bits & IsImplicitThisMask) != 0;
+  }
+
+  public boolean isThis() {
+
+    return true;
+  }
+
+  public TypeBinding resolveType(BlockScope scope) {
+
+    constant = NotAConstant;
+    if (!this.isImplicitThis() && !checkAccess(scope.methodScope()))
+      return null;
+    return this.resolvedType = scope.enclosingSourceType();
+  }
+
+  public StringBuffer printExpression(int indent, StringBuffer output) {
+
+    if (this.isImplicitThis())
+      return output;
+    return output.append("this"); //$NON-NLS-1$
+  }
+
+  public String toStringExpression() {
+
+    if (this.isImplicitThis())
+      return ""; //$NON-NLS-1$
+    return "this"; //$NON-NLS-1$
+  }
+
+  public void traverse(IAbstractSyntaxTreeVisitor visitor, BlockScope blockScope) {
+
+    visitor.visit(this, blockScope);
+    visitor.endVisit(this, blockScope);
+  }
+}
\ No newline at end of file
index 25aaa89..f2a0e5c 100644 (file)
@@ -10,7 +10,7 @@
  *******************************************************************************/
 package net.sourceforge.phpeclipse.internal.compiler.ast;
 
-import net.sourceforge.phpdt.internal.compiler.IAbstractSyntaxTreeVisitor;
+import net.sourceforge.phpdt.internal.compiler.ASTVisitor;
 import net.sourceforge.phpdt.internal.compiler.flow.FlowContext;
 import net.sourceforge.phpdt.internal.compiler.flow.FlowInfo;
 import net.sourceforge.phpdt.internal.compiler.lookup.BlockScope;
@@ -37,8 +37,8 @@ public class ThrowStatement extends Statement {
        /**
         * Throw code generation
         *
-        * @param currentScope org.eclipse.jdt.internal.compiler.lookup.BlockScope
-        * @param codeStream org.eclipse.jdt.internal.compiler.codegen.CodeStream
+        * @param currentScope net.sourceforge.phpdt.internal.compiler.lookup.BlockScope
+        * @param codeStream net.sourceforge.phpdt.internal.compiler.codegen.CodeStream
         */
 //     public void generateCode(BlockScope currentScope, CodeStream codeStream) {
 //
@@ -61,7 +61,12 @@ public class ThrowStatement extends Statement {
 //             }
                exception.implicitWidening(exceptionType, exceptionType);
        }
+       public StringBuffer printStatement(int indent, StringBuffer output) {
 
+               printIndent(indent, output).append("throw "); //$NON-NLS-1$
+               exception.printExpression(0, output);
+               return output.append(';');
+       }
        public String toString(int tab) {
                String s = tabString(tab);
                s = s + "throw "; //$NON-NLS-1$
@@ -69,7 +74,7 @@ public class ThrowStatement extends Statement {
                return s;
        }
 
-       public void traverse(IAbstractSyntaxTreeVisitor visitor, BlockScope blockScope) {
+       public void traverse(ASTVisitor visitor, BlockScope blockScope) {
                if (visitor.visit(this, blockScope))
                        exception.traverse(visitor, blockScope);
                visitor.endVisit(this, blockScope);
index 07f7385..3740dbe 100644 (file)
@@ -28,8 +28,8 @@ public void computeConstant() {
 /**
  * Code generation for the true literal
  *
- * @param currentScope org.eclipse.jdt.internal.compiler.lookup.BlockScope
- * @param codeStream org.eclipse.jdt.internal.compiler.codegen.CodeStream
+ * @param currentScope net.sourceforge.phpdt.internal.compiler.lookup.BlockScope
+ * @param codeStream net.sourceforge.phpdt.internal.compiler.codegen.CodeStream
  * @param valueRequired boolean
  */ 
 //public void generateCode(BlockScope currentScope, CodeStream codeStream, boolean valueRequired) {
index 8eca475..b2a2c71 100644 (file)
@@ -10,7 +10,7 @@
  *******************************************************************************/
 package net.sourceforge.phpeclipse.internal.compiler.ast;
 
-import net.sourceforge.phpdt.internal.compiler.IAbstractSyntaxTreeVisitor;
+import net.sourceforge.phpdt.internal.compiler.ASTVisitor;
 import net.sourceforge.phpdt.internal.compiler.codegen.Label;
 import net.sourceforge.phpdt.internal.compiler.flow.ExceptionHandlingFlowContext;
 import net.sourceforge.phpdt.internal.compiler.flow.FinallyFlowContext;
@@ -119,7 +119,7 @@ public class TryStatement extends Statement {
                }
 
                // check unreachable catch blocks
-               handlingContext.complainIfUnusedExceptionHandlers(catchBlocks, scope, this);
+//             handlingContext.complainIfUnusedExceptionHandlers(catchBlocks, scope, this);
 
                // process the catch blocks - computing the minimal exit depth amongst try/catch
                if (catchArguments != null) {
@@ -407,7 +407,27 @@ public class TryStatement extends Statement {
                        this.subRoutineStartLabel.resetStateForCodeGeneration();
                }
        }       
+       public StringBuffer printStatement(int indent, StringBuffer output) {
+               printIndent(indent, output).append("try \n"); //$NON-NLS-1$
+               tryBlock.printStatement(indent + 1, output); //$NON-NLS-1$
 
+               //catches
+               if (catchBlocks != null)
+                       for (int i = 0; i < catchBlocks.length; i++) {
+                                       output.append('\n');
+                                       printIndent(indent, output).append("catch ("); //$NON-NLS-1$
+                                       catchArguments[i].print(0, output).append(") "); //$NON-NLS-1$
+                                       catchBlocks[i].printStatement(indent + 1, output);
+                       }
+               //finally
+               if (finallyBlock != null) {
+                       output.append('\n');
+                       printIndent(indent, output).append("finally\n"); //$NON-NLS-1$
+                       finallyBlock.printStatement(indent + 1, output);
+               }
+
+               return output;
+       }
        public void resolve(BlockScope upperScope) {
 
                // special scope for secret locals optimization.        
@@ -527,7 +547,7 @@ public class TryStatement extends Statement {
        }
 
        public void traverse(
-               IAbstractSyntaxTreeVisitor visitor,
+           ASTVisitor visitor,
                BlockScope blockScope) {
 
                if (visitor.visit(this, blockScope)) {
index 308f852..6bf3530 100644 (file)
@@ -1,18 +1,17 @@
-/*******************************************************************************
- * Copyright (c) 2000, 2003 IBM Corporation and others.
- * All rights reserved. This program and the accompanying materials 
- * are made available under the terms of the Common Public License v1.0
- * which accompanies this distribution, and is available at
+/***********************************************************************************************************************************
+ * Copyright (c) 2000, 2003 IBM Corporation and others. All rights reserved. This program and the accompanying materials are made
+ * available under the terms of the Common Public License v1.0 which accompanies this distribution, and is available at
  * http://www.eclipse.org/legal/cpl-v10.html
  * 
- * Contributors:
- *     IBM Corporation - initial API and implementation
- *******************************************************************************/
+ * Contributors: IBM Corporation - initial API and implementation
+ **********************************************************************************************************************************/
 package net.sourceforge.phpeclipse.internal.compiler.ast;
 
+import net.sourceforge.phpeclipse.internal.compiler.ast.FieldDeclaration;
+
 import net.sourceforge.phpdt.core.compiler.CharOperation;
+import net.sourceforge.phpdt.internal.compiler.ASTVisitor;
 import net.sourceforge.phpdt.internal.compiler.CompilationResult;
-import net.sourceforge.phpdt.internal.compiler.IAbstractSyntaxTreeVisitor;
 import net.sourceforge.phpdt.internal.compiler.flow.FlowContext;
 import net.sourceforge.phpdt.internal.compiler.flow.FlowInfo;
 import net.sourceforge.phpdt.internal.compiler.flow.InitializationFlowContext;
@@ -38,943 +37,1055 @@ import net.sourceforge.phpdt.internal.compiler.problem.AbortMethod;
 import net.sourceforge.phpdt.internal.compiler.problem.AbortType;
 import net.sourceforge.phpdt.internal.compiler.problem.ProblemSeverities;
 
-public class TypeDeclaration
-       extends Statement
-       implements ProblemSeverities, ReferenceContext {
-
-       public int modifiers;
-       public int modifiersSourceStart;
-       public char[] name;
-       public TypeReference superclass;
-       public TypeReference[] superInterfaces;
-       public FieldDeclaration[] fields;
-       public AbstractMethodDeclaration[] methods;
-       public MemberTypeDeclaration[] memberTypes;
-       public SourceTypeBinding binding;
-       public ClassScope scope;
-       public MethodScope initializerScope;
-       public MethodScope staticInitializerScope;
-       public boolean ignoreFurtherInvestigation = false;
-       public int maxFieldCount;
-       public int declarationSourceStart;
-       public int declarationSourceEnd;
-       public int bodyStart;
-       public int bodyEnd; // doesn't include the trailing comment if any.
-       protected boolean hasBeenGenerated = false;
-       public CompilationResult compilationResult;
-       private MethodDeclaration[] missingAbstractMethods;
-
-       public TypeDeclaration(CompilationResult compilationResult){
-               this.compilationResult = compilationResult;
-       }
-               
-       /*
-        *      We cause the compilation task to abort to a given extent.
-        */
-       public void abort(int abortLevel) {
-
-               if (scope == null) {
-                       throw new AbortCompilation(); // cannot do better
-               }
-
-               CompilationResult compilationResult =
-                       scope.referenceCompilationUnit().compilationResult;
-
-               switch (abortLevel) {
-                       case AbortCompilation :
-                               throw new AbortCompilation(compilationResult);
-                       case AbortCompilationUnit :
-                               throw new AbortCompilationUnit(compilationResult);
-                       case AbortMethod :
-                               throw new AbortMethod(compilationResult);
-                       default :
-                               throw new AbortType(compilationResult);
-               }
-       }
-       /**
-        * This method is responsible for adding a <clinit> method declaration to the type method collections.
-        * Note that this implementation is inserting it in first place (as VAJ or javac), and that this
-        * impacts the behavior of the method ConstantPool.resetForClinit(int. int), in so far as 
-        * the latter will have to reset the constant pool state accordingly (if it was added first, it does 
-        * not need to preserve some of the method specific cached entries since this will be the first method).
-        * inserts the clinit method declaration in the first position.
-        * 
-        * @see org.eclipse.jdt.internal.compiler.codegen.ConstantPool#resetForClinit(int, int)
-        */
-       public final void addClinit() {
-
-               //see comment on needClassInitMethod
-               if (needClassInitMethod()) {
-                       int length;
-                       AbstractMethodDeclaration[] methods;
-                       if ((methods = this.methods) == null) {
-                               length = 0;
-                               methods = new AbstractMethodDeclaration[1];
-                       } else {
-                               length = methods.length;
-                               System.arraycopy(
-                                       methods,
-                                       0,
-                                       (methods = new AbstractMethodDeclaration[length + 1]),
-                                       1,
-                                       length);
-                       }
-                       Clinit clinit = new Clinit(this.compilationResult);
-                       methods[0] = clinit;
-                       // clinit is added in first location, so as to minimize the use of ldcw (big consumer of constant inits)
-                       clinit.declarationSourceStart = clinit.sourceStart = sourceStart;
-                       clinit.declarationSourceEnd = clinit.sourceEnd = sourceEnd;
-                       clinit.bodyEnd = sourceEnd;
-                       this.methods = methods;
-               }
-       }
-
-       /**
-        *      Flow analysis for a local innertype
-        *
-        */
-       public FlowInfo analyseCode(
-               BlockScope currentScope,
-               FlowContext flowContext,
-               FlowInfo flowInfo) {
-
-               if (ignoreFurtherInvestigation)
-                       return flowInfo;
-               try {
-                       bits |= IsReachableMASK;
-                       LocalTypeBinding localType = (LocalTypeBinding) binding;
-                       
-                       localType.setConstantPoolName(currentScope.compilationUnitScope().computeConstantPoolName(localType));
-                       manageEnclosingInstanceAccessIfNecessary(currentScope);
-                       
-                       updateMaxFieldCount(); // propagate down the max field count
-                       internalAnalyseCode(flowContext, flowInfo); 
-               } catch (AbortType e) {
-                       this.ignoreFurtherInvestigation = true;
-               }
-               return flowInfo;
-       }
-
-       /**
-        *      Flow analysis for a member innertype
-        *
-        */
-       public void analyseCode(ClassScope enclosingClassScope) {
-
-               if (ignoreFurtherInvestigation)
-                       return;
-               try {
-                       // propagate down the max field count
-                       updateMaxFieldCount();
-                       internalAnalyseCode(null, FlowInfo.initial(maxFieldCount));
-               } catch (AbortType e) {
-                       this.ignoreFurtherInvestigation = true;
-               }
-       }
-
-       /**
-        *      Flow analysis for a local member innertype
-        *
-        */
-       public void analyseCode(
-               ClassScope currentScope,
-               FlowContext flowContext,
-               FlowInfo flowInfo) {
-
-               if (ignoreFurtherInvestigation)
-                       return;
-               try {
-                       bits |= IsReachableMASK;
-                       LocalTypeBinding localType = (LocalTypeBinding) binding;
-
-                       localType.setConstantPoolName(currentScope.compilationUnitScope().computeConstantPoolName(localType));
-                       manageEnclosingInstanceAccessIfNecessary(currentScope);
-                       
-                       updateMaxFieldCount(); // propagate down the max field count
-                       internalAnalyseCode(flowContext, flowInfo);
-               } catch (AbortType e) {
-                       this.ignoreFurtherInvestigation = true;
-               }
-       }
-
-       /**
-        *      Flow analysis for a package member type
-        *
-        */
-       public void analyseCode(CompilationUnitScope unitScope) {
-
-               if (ignoreFurtherInvestigation)
-                       return;
-               try {
-                       internalAnalyseCode(null, FlowInfo.initial(maxFieldCount));
-               } catch (AbortType e) {
-                       this.ignoreFurtherInvestigation = true;
-               }
-       }
-
-       /*
-        * Check for constructor vs. method with no return type.
-        * Answers true if at least one constructor is defined
-        */
-       public boolean checkConstructors(Parser parser) {
-
-               //if a constructor has not the name of the type,
-               //convert it into a method with 'null' as its return type
-               boolean hasConstructor = false;
-               if (methods != null) {
-                       for (int i = methods.length; --i >= 0;) {
-                               AbstractMethodDeclaration am;
-                               if ((am = methods[i]).isConstructor()) {
-                                       if (!CharOperation.equals(am.selector, name)) {
-                                               // the constructor was in fact a method with no return type
-                                               // unless an explicit constructor call was supplied
-                                               ConstructorDeclaration c = (ConstructorDeclaration) am;
-                                               if ((c.constructorCall == null)
-                                                       || (c.constructorCall.isImplicitSuper())) { //changed to a method
-                                                       MethodDeclaration m = new MethodDeclaration(this.compilationResult);
-                                                       m.sourceStart = c.sourceStart;
-                                                       m.sourceEnd = c.sourceEnd;
-                                                       m.bodyStart = c.bodyStart;
-                                                       m.bodyEnd = c.bodyEnd;
-                                                       m.declarationSourceEnd = c.declarationSourceEnd;
-                                                       m.declarationSourceStart = c.declarationSourceStart;
-                                                       m.selector = c.selector;
-                                                       m.statements = c.statements;
-                                                       m.modifiers = c.modifiers;
-                                                       m.arguments = c.arguments;
-                                                       m.thrownExceptions = c.thrownExceptions;
-                                                       m.explicitDeclarations = c.explicitDeclarations;
-                                                       m.returnType = null;
-                                                       methods[i] = m;
-                                               }
-                                       } else {
-                                               if (this.isInterface()) {
-                                                       // report the problem and continue the parsing
-                                                       parser.problemReporter().interfaceCannotHaveConstructors(
-                                                               (ConstructorDeclaration) am);
-                                               }
-                                               hasConstructor = true;
-                                       }
-                               }
-                       }
-               }
-               return hasConstructor;
-       }
-
-       public CompilationResult compilationResult() {
-
-               return this.compilationResult;
-       }
-
-       public ConstructorDeclaration createsInternalConstructor(
-               boolean needExplicitConstructorCall,
-               boolean needToInsert) {
-
-               //Add to method'set, the default constuctor that just recall the
-               //super constructor with no arguments
-               //The arguments' type will be positionned by the TC so just use
-               //the default int instead of just null (consistency purpose)
-
-               //the constructor
-               ConstructorDeclaration constructor = new ConstructorDeclaration(this.compilationResult);
-               constructor.isDefaultConstructor = true;
-               constructor.selector = name;
-               if (modifiers != AccDefault) {
-                       constructor.modifiers =
-                               ((this instanceof MemberTypeDeclaration) && (modifiers & AccPrivate) != 0)
-                                       ? AccDefault
-                                       : modifiers & AccVisibilityMASK;
-               }
-
-               //if you change this setting, please update the 
-               //SourceIndexer2.buildTypeDeclaration(TypeDeclaration,char[]) method
-               constructor.declarationSourceStart = constructor.sourceStart = sourceStart;
-               constructor.declarationSourceEnd =
-                       constructor.sourceEnd = constructor.bodyEnd = sourceEnd;
-
-               //the super call inside the constructor
-               if (needExplicitConstructorCall) {
-                       constructor.constructorCall = SuperReference.implicitSuperConstructorCall();
-                       constructor.constructorCall.sourceStart = sourceStart;
-                       constructor.constructorCall.sourceEnd = sourceEnd;
-               }
-
-               //adding the constructor in the methods list
-               if (needToInsert) {
-                       if (methods == null) {
-                               methods = new AbstractMethodDeclaration[] { constructor };
-                       } else {
-                               AbstractMethodDeclaration[] newMethods;
-                               System.arraycopy(
-                                       methods,
-                                       0,
-                                       newMethods = new AbstractMethodDeclaration[methods.length + 1],
-                                       1,
-                                       methods.length);
-                               newMethods[0] = constructor;
-                               methods = newMethods;
-                       }
-               }
-               return constructor;
-       }
-
-       /**
-        * INTERNAL USE ONLY - Creates a fake method declaration for the corresponding binding.
-        * It is used to report errors for missing abstract methods.
-        */
-       public MethodDeclaration addMissingAbstractMethodFor(MethodBinding methodBinding) {
-               TypeBinding[] argumentTypes = methodBinding.parameters;
-               int argumentsLength = argumentTypes.length;
-               //the constructor
-               MethodDeclaration methodDeclaration = new MethodDeclaration(this.compilationResult);
-               methodDeclaration.selector = methodBinding.selector;
-               methodDeclaration.sourceStart = sourceStart;
-               methodDeclaration.sourceEnd = sourceEnd;
-               methodDeclaration.modifiers = methodBinding.getAccessFlags() & ~AccAbstract;
-
-               if (argumentsLength > 0) {
-                       String baseName = "arg";//$NON-NLS-1$
-                       Argument[] arguments = (methodDeclaration.arguments = new Argument[argumentsLength]);
-                       for (int i = argumentsLength; --i >= 0;) {
-                               arguments[i] = new Argument((baseName + i).toCharArray(), 0L, null /*type ref*/, AccDefault);
-                       }
-               }
-
-               //adding the constructor in the methods list
-               if (this.missingAbstractMethods == null) {
-                       this.missingAbstractMethods = new MethodDeclaration[] { methodDeclaration };
-               } else {
-                       MethodDeclaration[] newMethods;
-                       System.arraycopy(
-                               this.missingAbstractMethods,
-                               0,
-                               newMethods = new MethodDeclaration[this.missingAbstractMethods.length + 1],
-                               1,
-                               this.missingAbstractMethods.length);
-                       newMethods[0] = methodDeclaration;
-                       this.missingAbstractMethods = newMethods;
-               }
-
-               //============BINDING UPDATE==========================
-               methodDeclaration.binding = new MethodBinding(
-                               methodDeclaration.modifiers, //methodDeclaration
-                               methodBinding.selector,
-                               methodBinding.returnType,
-                               argumentsLength == 0 ? NoParameters : argumentTypes, //arguments bindings
-                               methodBinding.thrownExceptions, //exceptions
-                               binding); //declaringClass
-                               
-               methodDeclaration.scope = new MethodScope(scope, methodDeclaration, true);
-               methodDeclaration.bindArguments();
-
-/*             if (binding.methods == null) {
-                       binding.methods = new MethodBinding[] { methodDeclaration.binding };
-               } else {
-                       MethodBinding[] newMethods;
-                       System.arraycopy(
-                               binding.methods,
-                               0,
-                               newMethods = new MethodBinding[binding.methods.length + 1],
-                               1,
-                               binding.methods.length);
-                       newMethods[0] = methodDeclaration.binding;
-                       binding.methods = newMethods;
-               }*/
-               //===================================================
-
-               return methodDeclaration;
-       }
-       
-       /*
-        * Find the matching parse node, answers null if nothing found
-        */
-       public FieldDeclaration declarationOf(FieldBinding fieldBinding) {
-
-               if (fieldBinding != null) {
-                       for (int i = 0, max = this.fields.length; i < max; i++) {
-                               FieldDeclaration fieldDecl;
-                               if ((fieldDecl = this.fields[i]).binding == fieldBinding)
-                                       return fieldDecl;
-                       }
-               }
-               return null;
-       }
-
-       /*
-        * Find the matching parse node, answers null if nothing found
-        */
-       public TypeDeclaration declarationOf(MemberTypeBinding memberTypeBinding) {
-
-               if (memberTypeBinding != null) {
-                       for (int i = 0, max = this.memberTypes.length; i < max; i++) {
-                               TypeDeclaration memberTypeDecl;
-                               if ((memberTypeDecl = this.memberTypes[i]).binding == memberTypeBinding)
-                                       return memberTypeDecl;
-                       }
-               }
-               return null;
-       }
-
-       /*
-        * Find the matching parse node, answers null if nothing found
-        */
-       public AbstractMethodDeclaration declarationOf(MethodBinding methodBinding) {
-
-               if (methodBinding != null) {
-                       for (int i = 0, max = this.methods.length; i < max; i++) {
-                               AbstractMethodDeclaration methodDecl;
-
-                               if ((methodDecl = this.methods[i]).binding == methodBinding)
-                                       return methodDecl;
-                       }
-               }
-               return null;
-       }
-
-       /*
-        * Finds the matching type amoung this type's member types.
-        * Returns null if no type with this name is found.
-        * The type name is a compound name relative to this type
-        * eg. if this type is X and we're looking for Y.X.A.B
-        *     then a type name would be {X, A, B}
-        */
-       public TypeDeclaration declarationOfType(char[][] typeName) {
-
-               int typeNameLength = typeName.length;
-               if (typeNameLength < 1 || !CharOperation.equals(typeName[0], this.name)) {
-                       return null;
-               }
-               if (typeNameLength == 1) {
-                       return this;
-               }
-               char[][] subTypeName = new char[typeNameLength - 1][];
-               System.arraycopy(typeName, 1, subTypeName, 0, typeNameLength - 1);
-               for (int i = 0; i < this.memberTypes.length; i++) {
-                       TypeDeclaration typeDecl = this.memberTypes[i].declarationOfType(subTypeName);
-                       if (typeDecl != null) {
-                               return typeDecl;
-                       }
-               }
-               return null;
-       }
-
-       /**
-        * Generic bytecode generation for type
-        */
-//     public void generateCode(ClassFile enclosingClassFile) {
-//
-//             if (hasBeenGenerated)
-//                     return;
-//             hasBeenGenerated = true;
-//             if (ignoreFurtherInvestigation) {
-//                     if (binding == null)
-//                             return;
-//                     ClassFile.createProblemType(
-//                             this,
-//                             scope.referenceCompilationUnit().compilationResult);
-//                     return;
-//             }
-//             try {
-//                     // create the result for a compiled type
-//                     ClassFile classFile = new ClassFile(binding, enclosingClassFile, false);
-//                     // generate all fiels
-//                     classFile.addFieldInfos();
-//
-//                     // record the inner type inside its own .class file to be able
-//                     // to generate inner classes attributes
-//                     if (binding.isMemberType())
-//                             classFile.recordEnclosingTypeAttributes(binding);
-//                     if (binding.isLocalType()) {
-//                             enclosingClassFile.recordNestedLocalAttribute(binding);
-//                             classFile.recordNestedLocalAttribute(binding);
-//                     }
-//                     if (memberTypes != null) {
-//                             for (int i = 0, max = memberTypes.length; i < max; i++) {
-//                                     // record the inner type inside its own .class file to be able
-//                                     // to generate inner classes attributes
-//                                     classFile.recordNestedMemberAttribute(memberTypes[i].binding);
-//                                     memberTypes[i].generateCode(scope, classFile);
-//                             }
-//                     }
-//                     // generate all methods
-//                     classFile.setForMethodInfos();
-//                     if (methods != null) {
-//                             for (int i = 0, max = methods.length; i < max; i++) {
-//                                     methods[i].generateCode(scope, classFile);
-//                             }
-//                     }
-//                     
-//                     classFile.generateMissingAbstractMethods(this.missingAbstractMethods, scope.referenceCompilationUnit().compilationResult);
-//
-//                     // generate all methods
-//                     classFile.addSpecialMethods();
-//
-//                     if (ignoreFurtherInvestigation) { // trigger problem type generation for code gen errors
-//                             throw new AbortType(scope.referenceCompilationUnit().compilationResult);
-//                     }
-//
-//                     // finalize the compiled type result
-//                     classFile.addAttributes();
-//                     scope.referenceCompilationUnit().compilationResult.record(
-//                             binding.constantPoolName(),
-//                             classFile);
-//             } catch (AbortType e) {
-//                     if (binding == null)
-//                             return;
-//                     ClassFile.createProblemType(
-//                             this,
-//                             scope.referenceCompilationUnit().compilationResult);
-//             }
-//     }
-
-       /**
-        * Bytecode generation for a local inner type (API as a normal statement code gen)
-        */
-//     public void generateCode(BlockScope blockScope, CodeStream codeStream) {
-//
-//             if (hasBeenGenerated) return;
-//             int pc = codeStream.position;
-//             if (binding != null) ((NestedTypeBinding) binding).computeSyntheticArgumentSlotSizes();
-//             generateCode(codeStream.classFile);
-//             codeStream.recordPositionsFrom(pc, this.sourceStart);
-//     }
-
-       /**
-        * Bytecode generation for a member inner type
-        */
-//     public void generateCode(ClassScope classScope, ClassFile enclosingClassFile) {
-//
-//             if (hasBeenGenerated) return;
-//             if (binding != null) ((NestedTypeBinding) binding).computeSyntheticArgumentSlotSizes();
-//             generateCode(enclosingClassFile);
-//     }
-
-       /**
-        * Bytecode generation for a package member
-        */
-//     public void generateCode(CompilationUnitScope unitScope) {
-//
-//             generateCode((ClassFile) null);
-//     }
-
-       public boolean hasErrors() {
-               return this.ignoreFurtherInvestigation;
-       }
-
-       /**
-        *      Common flow analysis for all types
-        *
-        */
-       public void internalAnalyseCode(FlowContext flowContext, FlowInfo flowInfo) {
-
-               if (this.binding.isPrivate() && !this.binding.isPrivateUsed()) {
-                       if (!scope.referenceCompilationUnit().compilationResult.hasSyntaxError()) {
-                               scope.problemReporter().unusedPrivateType(this);
-                       }
-               }
-
-               ReferenceBinding[] defaultHandledExceptions = new ReferenceBinding[] { scope.getJavaLangThrowable()}; // tolerate any kind of exception
-               InitializationFlowContext initializerContext = new InitializationFlowContext(null, this, initializerScope);
-               InitializationFlowContext staticInitializerContext = new InitializationFlowContext(null, this, staticInitializerScope);
-               FlowInfo nonStaticFieldInfo = flowInfo.copy().unconditionalInits().discardFieldInitializations();
-               FlowInfo staticFieldInfo = flowInfo.copy().unconditionalInits().discardFieldInitializations();
-               if (fields != null) {
-                       for (int i = 0, count = fields.length; i < count; i++) {
-                               FieldDeclaration field = fields[i];
-                               if (field.isStatic()) {
-                                       /*if (field.isField()){
-                                               staticInitializerContext.handledExceptions = NoExceptions; // no exception is allowed jls8.3.2
-                                       } else {*/
-                                       staticInitializerContext.handledExceptions = defaultHandledExceptions; // tolerate them all, and record them
-                                       /*}*/
-                                       staticFieldInfo =
-                                               field.analyseCode(
-                                                       staticInitializerScope,
-                                                       staticInitializerContext,
-                                                       staticFieldInfo);
-                                       // in case the initializer is not reachable, use a reinitialized flowInfo and enter a fake reachable
-                                       // branch, since the previous initializer already got the blame.
-                                       if (staticFieldInfo == FlowInfo.DEAD_END) {
-                                               staticInitializerScope.problemReporter().initializerMustCompleteNormally(field);
-                                               staticFieldInfo = FlowInfo.initial(maxFieldCount).setReachMode(FlowInfo.UNREACHABLE);
-                                       }
-                               } else {
-                                       /*if (field.isField()){
-                                               initializerContext.handledExceptions = NoExceptions; // no exception is allowed jls8.3.2
-                                       } else {*/
-                                               initializerContext.handledExceptions = defaultHandledExceptions; // tolerate them all, and record them
-                                       /*}*/
-                                       nonStaticFieldInfo =
-                                               field.analyseCode(initializerScope, initializerContext, nonStaticFieldInfo);
-                                       // in case the initializer is not reachable, use a reinitialized flowInfo and enter a fake reachable
-                                       // branch, since the previous initializer already got the blame.
-                                       if (nonStaticFieldInfo == FlowInfo.DEAD_END) {
-                                               initializerScope.problemReporter().initializerMustCompleteNormally(field);
-                                               nonStaticFieldInfo = FlowInfo.initial(maxFieldCount).setReachMode(FlowInfo.UNREACHABLE);
-                                       }
-                               }
-                       }
-               }
-               if (memberTypes != null) {
-                       for (int i = 0, count = memberTypes.length; i < count; i++) {
-                               if (flowContext != null){ // local type
-                                       memberTypes[i].analyseCode(scope, flowContext, nonStaticFieldInfo.copy());
-                               } else {
-                                       memberTypes[i].analyseCode(scope);
-                               }
-                       }
-               }
-               if (methods != null) {
-                       UnconditionalFlowInfo outerInfo = flowInfo.copy().unconditionalInits().discardFieldInitializations();
-                       FlowInfo constructorInfo = nonStaticFieldInfo.unconditionalInits().discardNonFieldInitializations().addInitializationsFrom(outerInfo);
-                       for (int i = 0, count = methods.length; i < count; i++) {
-                               AbstractMethodDeclaration method = methods[i];
-                               if (method.ignoreFurtherInvestigation)
-                                       continue;
-                               if (method.isInitializationMethod()) {
-                                       if (method.isStatic()) { // <clinit>
-                                               method.analyseCode(
-                                                       scope, 
-                                                       staticInitializerContext, 
-                                                       staticFieldInfo.unconditionalInits().discardNonFieldInitializations().addInitializationsFrom(outerInfo));
-                                       } else { // constructor
-                                               method.analyseCode(scope, initializerContext, constructorInfo.copy());
-                                       }
-                               } else { // regular method
-                                       method.analyseCode(scope, null, flowInfo.copy());
-                               }
-                       }
-               }
-       }
-
-       public boolean isInterface() {
-
-               return (modifiers & AccInterface) != 0;
-       }
-
-       /* 
-        * Access emulation for a local type
-        * force to emulation of access to direct enclosing instance.
-        * By using the initializer scope, we actually only request an argument emulation, the
-        * field is not added until actually used. However we will force allocations to be qualified
-        * with an enclosing instance.
-        * 15.9.2
-        */
-       public void manageEnclosingInstanceAccessIfNecessary(BlockScope currentScope) {
-
-               NestedTypeBinding nestedType = (NestedTypeBinding) binding;
-               
-               MethodScope methodScope = currentScope.methodScope();
-               if (!methodScope.isStatic && !methodScope.isConstructorCall){
-
-                       nestedType.addSyntheticArgumentAndField(binding.enclosingType());       
-               }
-               // add superclass enclosing instance arg for anonymous types (if necessary)
-               if (binding.isAnonymousType()) { 
-                       ReferenceBinding superclass = binding.superclass;
-                       if (superclass.enclosingType() != null && !superclass.isStatic()) {
-                               if (!binding.superclass.isLocalType()
-                                               || ((NestedTypeBinding)binding.superclass).getSyntheticField(superclass.enclosingType(), true) != null){
-
-                                       nestedType.addSyntheticArgument(superclass.enclosingType());    
-                               }
-                       }
-               }
-       }
-       
-       /* 
-        * Access emulation for a local member type
-        * force to emulation of access to direct enclosing instance.
-        * By using the initializer scope, we actually only request an argument emulation, the
-        * field is not added until actually used. However we will force allocations to be qualified
-        * with an enclosing instance.
-        * 
-        * Local member cannot be static.
-        */
-       public void manageEnclosingInstanceAccessIfNecessary(ClassScope currentScope) {
-
-               NestedTypeBinding nestedType = (NestedTypeBinding) binding;
-               nestedType.addSyntheticArgumentAndField(binding.enclosingType());
-       }       
-       
-       /**
-        * A <clinit> will be requested as soon as static fields or assertions are present. It will be eliminated during
-        * classfile creation if no bytecode was actually produced based on some optimizations/compiler settings.
-        */
-       public final boolean needClassInitMethod() {
-
-               // always need a <clinit> when assertions are present
-               if ((this.bits & AddAssertionMASK) != 0)
-                       return true;
-               if (fields == null)
-                       return false;
-               if (isInterface())
-                       return true; // fields are implicitly statics
-               for (int i = fields.length; --i >= 0;) {
-                       FieldDeclaration field = fields[i];
-                       //need to test the modifier directly while there is no binding yet
-                       if ((field.modifiers & AccStatic) != 0)
-                               return true;
-               }
-               return false;
-       }
-
-       public void parseMethod(UnitParser parser, CompilationUnitDeclaration unit) {
-
-               //connect method bodies
-               if (unit.ignoreMethodBodies)
-                       return;
-
-               // no scope were created, so cannot report further errors
-//             if (binding == null)
-//                     return;
-
-               //members
-               if (memberTypes != null) {
-                       int length = memberTypes.length;
-                       for (int i = 0; i < length; i++)
-                               memberTypes[i].parseMethod(parser, unit);
-               }
-
-               //methods
-               if (methods != null) {
-                       int length = methods.length;
-                       for (int i = 0; i < length; i++)
-                               methods[i].parseStatements(parser, unit);
-               }
-
-               //initializers
-               if (fields != null) {
-                       int length = fields.length;
-                       for (int i = 0; i < length; i++) {
-                               if (fields[i] instanceof Initializer) {
-                                       ((Initializer) fields[i]).parseStatements(parser, this, unit);
-                               }
-                       }
-               }
-       }
-
-       public void resolve() {
-
-               if (binding == null) {
-                       ignoreFurtherInvestigation = true;
-                       return;
-               }
-
-               try {
-                       // check superclass & interfaces
-                       if (binding.superclass != null) // watch out for Object ! (and other roots)     
-                               if (isTypeUseDeprecated(binding.superclass, scope))
-                                       scope.problemReporter().deprecatedType(binding.superclass, superclass);
-                       if (superInterfaces != null)
-                               for (int i = superInterfaces.length; --i >= 0;)
-                                       if (superInterfaces[i].resolvedType != null)
-                                               if (isTypeUseDeprecated(superInterfaces[i].resolvedType, scope))
-                                                       scope.problemReporter().deprecatedType(
-                                                               superInterfaces[i].resolvedType,
-                                                               superInterfaces[i]);
-                       maxFieldCount = 0;
-                       int lastFieldID = -1;
-                       if (fields != null) {
-                               for (int i = 0, count = fields.length; i < count; i++) {
-                                       FieldDeclaration field = fields[i];
-                                       if (field.isField()) {
-                                               if (field.binding == null) {
-                                                       // still discover secondary errors
-                                                       if (field.initialization != null) field.initialization.resolve(field.isStatic() ? staticInitializerScope : initializerScope);
-                                                       ignoreFurtherInvestigation = true;
-                                                       continue;
-                                               }
-                                               maxFieldCount++;
-                                               lastFieldID = field.binding.id;
-                                       } else { // initializer
-                                                ((Initializer) field).lastFieldID = lastFieldID + 1;
-                                       }
-                                       field.resolve(field.isStatic() ? staticInitializerScope : initializerScope);
-                               }
-                       }
-                       if (memberTypes != null) {
-                               for (int i = 0, count = memberTypes.length; i < count; i++) {
-                                       memberTypes[i].resolve(scope);
-                               }
-                       }
-                       int missingAbstractMethodslength = this.missingAbstractMethods == null ? 0 : this.missingAbstractMethods.length;
-                       int methodsLength = this.methods == null ? 0 : methods.length;
-                       if ((methodsLength + missingAbstractMethodslength) > 0xFFFF) {
-                               scope.problemReporter().tooManyMethods(this);
-                       }
-                       
-                       if (methods != null) {
-                               for (int i = 0, count = methods.length; i < count; i++) {
-                                       methods[i].resolve(scope);
-                               }
-                       }
-               } catch (AbortType e) {
-                       this.ignoreFurtherInvestigation = true;
-                       return;
-               };
-       }
-
-       public void resolve(BlockScope blockScope) {
-               // local type declaration
-
-               // need to build its scope first and proceed with binding's creation
-               blockScope.addLocalType(this);
-
-               // and TC....
-               if (binding != null) {
-                       // remember local types binding for innerclass emulation propagation
-                       blockScope.referenceCompilationUnit().record((LocalTypeBinding)binding);
-
-                       // binding is not set if the receiver could not be created
-                       resolve();
-                       updateMaxFieldCount();
-               }
-       }
-
-       public void resolve(ClassScope upperScope) {
-               // member scopes are already created
-               // request the construction of a binding if local member type
-
-               if (binding != null && binding instanceof LocalTypeBinding) {
-                       // remember local types binding for innerclass emulation propagation
-                       upperScope.referenceCompilationUnit().record((LocalTypeBinding)binding);
-               }
-               resolve();
-               updateMaxFieldCount();
-       }
-
-       public void resolve(CompilationUnitScope upperScope) {
-               // top level : scope are already created
-
-               resolve();
-               updateMaxFieldCount();
-       }
-
-       public void tagAsHavingErrors() {
-               ignoreFurtherInvestigation = true;
-       }
-
-       public String toString(int tab) {
-
-               return tabString(tab) + toStringHeader() + toStringBody(tab);
-       }
-
-       public String toStringBody(int tab) {
-
-               String s = " {"; //$NON-NLS-1$
-               if (memberTypes != null) {
-                       for (int i = 0; i < memberTypes.length; i++) {
-                               if (memberTypes[i] != null) {
-                                       s += "\n" + memberTypes[i].toString(tab + 1); //$NON-NLS-1$
-                               }
-                       }
-               }
-               if (fields != null) {
-                       for (int fieldI = 0; fieldI < fields.length; fieldI++) {
-                               if (fields[fieldI] != null) {
-                                       s += "\n" + fields[fieldI].toString(tab + 1); //$NON-NLS-1$
-                                       if (fields[fieldI].isField())
-                                               s += ";"; //$NON-NLS-1$
-                               }
-                       }
-               }
-               if (methods != null) {
-                       for (int i = 0; i < methods.length; i++) {
-                               if (methods[i] != null) {
-                                       s += "\n" + methods[i].toString(tab + 1); //$NON-NLS-1$
-                               }
-                       }
-               }
-               s += "\n" + tabString(tab) + "}"; //$NON-NLS-2$ //$NON-NLS-1$
-               return s;
-       }
-
-       public String toStringHeader() {
-
-               String s = ""; //$NON-NLS-1$
-               if (modifiers != AccDefault) {
-                       s += modifiersString(modifiers);
-               }
-               s += (isInterface() ? "interface " : "class ") + new String(name);//$NON-NLS-1$ //$NON-NLS-2$
-               if (superclass != null)
-                       s += " extends " + superclass.toString(0); //$NON-NLS-1$
-               if (superInterfaces != null && superInterfaces.length > 0) {
-                       s += (isInterface() ? " extends " : " implements ");//$NON-NLS-2$ //$NON-NLS-1$
-                       for (int i = 0; i < superInterfaces.length; i++) {
-                               s += superInterfaces[i].toString(0);
-                               if (i != superInterfaces.length - 1)
-                                       s += ", "; //$NON-NLS-1$
-                       };
-               };
-               return s;
-       }
-
-       /**
-        *      Iteration for a package member type
-        *
-        */
-       public void traverse(
-               IAbstractSyntaxTreeVisitor visitor,
-               CompilationUnitScope unitScope) {
-
-               if (ignoreFurtherInvestigation)
-                       return;
-               try {
-                       if (visitor.visit(this, unitScope)) {
-                               if (superclass != null)
-                                       superclass.traverse(visitor, scope);
-                               if (superInterfaces != null) {
-                                       int superInterfaceLength = superInterfaces.length;
-                                       for (int i = 0; i < superInterfaceLength; i++)
-                                               superInterfaces[i].traverse(visitor, scope);
-                               }
-                               if (memberTypes != null) {
-                                       int memberTypesLength = memberTypes.length;
-                                       for (int i = 0; i < memberTypesLength; i++)
-                                               memberTypes[i].traverse(visitor, scope);
-                               }
-                               if (fields != null) {
-                                       int fieldsLength = fields.length;
-                                       for (int i = 0; i < fieldsLength; i++) {
-                                               FieldDeclaration field;
-                                               if ((field = fields[i]).isStatic()) {
-                                                       field.traverse(visitor, staticInitializerScope);
-                                               } else {
-                                                       field.traverse(visitor, initializerScope);
-                                               }
-                                       }
-                               }
-                               if (methods != null) {
-                                       int methodsLength = methods.length;
-                                       for (int i = 0; i < methodsLength; i++)
-                                               methods[i].traverse(visitor, scope);
-                               }
-                       }
-                       visitor.endVisit(this, unitScope);
-               } catch (AbortType e) {
-               }
-       }
-
-       /**
-        * MaxFieldCount's computation is necessary so as to reserve space for
-        * the flow info field portions. It corresponds to the maximum amount of
-        * fields this class or one of its innertypes have.
-        *
-        * During name resolution, types are traversed, and the max field count is recorded
-        * on the outermost type. It is then propagated down during the flow analysis.
-        *
-        * This method is doing either up/down propagation.
-        */
-       void updateMaxFieldCount() {
-
-               if (binding == null)
-                       return; // error scenario
-               TypeDeclaration outerMostType = scope.outerMostClassScope().referenceType();
-               if (maxFieldCount > outerMostType.maxFieldCount) {
-                       outerMostType.maxFieldCount = maxFieldCount; // up
-               } else {
-                       maxFieldCount = outerMostType.maxFieldCount; // down
-               }
-       }
-}
+public class TypeDeclaration extends Statement implements ProblemSeverities, ReferenceContext {
+
+  public int modifiers;
+
+  public int modifiersSourceStart;
+
+  public char[] name;
+
+  public TypeReference superclass;
+
+  public TypeReference[] superInterfaces;
+
+  public FieldDeclaration[] fields;
+
+  public AbstractMethodDeclaration[] methods;
+
+  public TypeDeclaration[] memberTypes;
+
+  public SourceTypeBinding binding;
+
+  public ClassScope scope;
+
+  public MethodScope initializerScope;
+
+  public MethodScope staticInitializerScope;
+
+  public boolean ignoreFurtherInvestigation = false;
+
+  public int maxFieldCount;
+
+  public int declarationSourceStart;
+
+  public int declarationSourceEnd;
+
+  public int bodyStart;
+
+  public int bodyEnd; // doesn't include the trailing comment if any.
+
+  protected boolean hasBeenGenerated = false;
+
+  public CompilationResult compilationResult;
+
+  private MethodDeclaration[] missingAbstractMethods;
+
+  public TypeDeclaration(CompilationResult compilationResult) {
+    this.compilationResult = compilationResult;
+  }
+
+  /*
+   * We cause the compilation task to abort to a given extent.
+   */
+  public void abort(int abortLevel) {
+
+    if (scope == null) {
+      throw new AbortCompilation(); // cannot do better
+    }
+
+    CompilationResult compilationResult = scope.referenceCompilationUnit().compilationResult;
+
+    switch (abortLevel) {
+    case AbortCompilation:
+      throw new AbortCompilation(compilationResult);
+    case AbortCompilationUnit:
+      throw new AbortCompilationUnit(compilationResult);
+    case AbortMethod:
+      throw new AbortMethod(compilationResult);
+    default:
+      throw new AbortType(compilationResult);
+    }
+  }
+
+  /**
+   * This method is responsible for adding a <clinit>method declaration to the type method collections. Note that this
+   * implementation is inserting it in first place (as VAJ or javac), and that this impacts the behavior of the method
+   * ConstantPool.resetForClinit(int. int), in so far as the latter will have to reset the constant pool state accordingly (if it
+   * was added first, it does not need to preserve some of the method specific cached entries since this will be the first method).
+   * inserts the clinit method declaration in the first position.
+   * 
+   * @see net.sourceforge.phpdt.internal.compiler.codegen.ConstantPool#resetForClinit(int, int)
+   */
+  public final void addClinit() {
+
+    //see comment on needClassInitMethod
+    if (needClassInitMethod()) {
+      int length;
+      AbstractMethodDeclaration[] methods;
+      if ((methods = this.methods) == null) {
+        length = 0;
+        methods = new AbstractMethodDeclaration[1];
+      } else {
+        length = methods.length;
+        System.arraycopy(methods, 0, (methods = new AbstractMethodDeclaration[length + 1]), 1, length);
+      }
+      Clinit clinit = new Clinit(this.compilationResult);
+      methods[0] = clinit;
+      // clinit is added in first location, so as to minimize the use of ldcw (big consumer of constant inits)
+      clinit.declarationSourceStart = clinit.sourceStart = sourceStart;
+      clinit.declarationSourceEnd = clinit.sourceEnd = sourceEnd;
+      clinit.bodyEnd = sourceEnd;
+      this.methods = methods;
+    }
+  }
+
+  /**
+   * Flow analysis for a local innertype
+   *  
+   */
+  public FlowInfo analyseCode(BlockScope currentScope, FlowContext flowContext, FlowInfo flowInfo) {
+
+    if (ignoreFurtherInvestigation)
+      return flowInfo;
+    try {
+      bits |= IsReachableMASK;
+      LocalTypeBinding localType = (LocalTypeBinding) binding;
+
+      localType.setConstantPoolName(currentScope.compilationUnitScope().computeConstantPoolName(localType));
+      manageEnclosingInstanceAccessIfNecessary(currentScope);
+
+      updateMaxFieldCount(); // propagate down the max field count
+      internalAnalyseCode(flowContext, flowInfo);
+    } catch (AbortType e) {
+      this.ignoreFurtherInvestigation = true;
+    }
+    return flowInfo;
+  }
+
+  /**
+   * Flow analysis for a member innertype
+   *  
+   */
+  public void analyseCode(ClassScope enclosingClassScope) {
+
+    if (ignoreFurtherInvestigation)
+      return;
+    try {
+      // propagate down the max field count
+      updateMaxFieldCount();
+      internalAnalyseCode(null, FlowInfo.initial(maxFieldCount));
+    } catch (AbortType e) {
+      this.ignoreFurtherInvestigation = true;
+    }
+  }
+
+  /**
+   * Flow analysis for a local member innertype
+   *  
+   */
+  public void analyseCode(ClassScope currentScope, FlowContext flowContext, FlowInfo flowInfo) {
+
+    if (ignoreFurtherInvestigation)
+      return;
+    try {
+      bits |= IsReachableMASK;
+      LocalTypeBinding localType = (LocalTypeBinding) binding;
+
+      localType.setConstantPoolName(currentScope.compilationUnitScope().computeConstantPoolName(localType));
+      manageEnclosingInstanceAccessIfNecessary(currentScope);
+
+      updateMaxFieldCount(); // propagate down the max field count
+      internalAnalyseCode(flowContext, flowInfo);
+    } catch (AbortType e) {
+      this.ignoreFurtherInvestigation = true;
+    }
+  }
+
+  /**
+   * Flow analysis for a package member type
+   *  
+   */
+  public void analyseCode(CompilationUnitScope unitScope) {
+
+    if (ignoreFurtherInvestigation)
+      return;
+    try {
+      internalAnalyseCode(null, FlowInfo.initial(maxFieldCount));
+    } catch (AbortType e) {
+      this.ignoreFurtherInvestigation = true;
+    }
+  }
+
+  /*
+   * Check for constructor vs. method with no return type. Answers true if at least one constructor is defined
+   */
+  public boolean checkConstructors(Parser parser) {
+
+    //if a constructor has not the name of the type,
+    //convert it into a method with 'null' as its return type
+    boolean hasConstructor = false;
+    if (methods != null) {
+      for (int i = methods.length; --i >= 0;) {
+        AbstractMethodDeclaration am;
+        if ((am = methods[i]).isConstructor()) {
+          if (!CharOperation.equals(am.selector, name)) {
+            // the constructor was in fact a method with no return type
+            // unless an explicit constructor call was supplied
+            ConstructorDeclaration c = (ConstructorDeclaration) am;
+            if ((c.constructorCall == null) || (c.constructorCall.isImplicitSuper())) { //changed to a method
+              MethodDeclaration m = new MethodDeclaration(this.compilationResult);
+              m.sourceStart = c.sourceStart;
+              m.sourceEnd = c.sourceEnd;
+              m.bodyStart = c.bodyStart;
+              m.bodyEnd = c.bodyEnd;
+              m.declarationSourceEnd = c.declarationSourceEnd;
+              m.declarationSourceStart = c.declarationSourceStart;
+              m.selector = c.selector;
+              m.statements = c.statements;
+              m.modifiers = c.modifiers;
+              m.arguments = c.arguments;
+              m.thrownExceptions = c.thrownExceptions;
+              m.explicitDeclarations = c.explicitDeclarations;
+              m.returnType = null;
+              methods[i] = m;
+            }
+          } else {
+            if (this.isInterface()) {
+              // report the problem and continue the parsing
+              parser.problemReporter().interfaceCannotHaveConstructors((ConstructorDeclaration) am);
+            }
+            hasConstructor = true;
+          }
+        }
+      }
+    }
+    return hasConstructor;
+  }
+
+  public CompilationResult compilationResult() {
+
+    return this.compilationResult;
+  }
+
+  public ConstructorDeclaration createsInternalConstructor(boolean needExplicitConstructorCall, boolean needToInsert) {
+
+    //Add to method'set, the default constuctor that just recall the
+    //super constructor with no arguments
+    //The arguments' type will be positionned by the TC so just use
+    //the default int instead of just null (consistency purpose)
+
+    //the constructor
+    ConstructorDeclaration constructor = new ConstructorDeclaration(this.compilationResult);
+    constructor.isDefaultConstructor = true;
+    constructor.selector = name;
+    if (modifiers != AccDefault) {
+      constructor.modifiers = ((this instanceof MemberTypeDeclaration) && (modifiers & AccPrivate) != 0) ? AccDefault : modifiers
+          & AccVisibilityMASK;
+    }
+
+    //if you change this setting, please update the
+    //SourceIndexer2.buildTypeDeclaration(TypeDeclaration,char[]) method
+    constructor.declarationSourceStart = constructor.sourceStart = sourceStart;
+    constructor.declarationSourceEnd = constructor.sourceEnd = constructor.bodyEnd = sourceEnd;
+
+    //the super call inside the constructor
+    if (needExplicitConstructorCall) {
+      constructor.constructorCall = SuperReference.implicitSuperConstructorCall();
+      constructor.constructorCall.sourceStart = sourceStart;
+      constructor.constructorCall.sourceEnd = sourceEnd;
+    }
+
+    //adding the constructor in the methods list
+    if (needToInsert) {
+      if (methods == null) {
+        methods = new AbstractMethodDeclaration[] { constructor };
+      } else {
+        AbstractMethodDeclaration[] newMethods;
+        System.arraycopy(methods, 0, newMethods = new AbstractMethodDeclaration[methods.length + 1], 1, methods.length);
+        newMethods[0] = constructor;
+        methods = newMethods;
+      }
+    }
+    return constructor;
+  }
+
+  /**
+   * INTERNAL USE ONLY - Creates a fake method declaration for the corresponding binding. It is used to report errors for missing
+   * abstract methods.
+   */
+  public MethodDeclaration addMissingAbstractMethodFor(MethodBinding methodBinding) {
+    TypeBinding[] argumentTypes = methodBinding.parameters;
+    int argumentsLength = argumentTypes.length;
+    //the constructor
+    MethodDeclaration methodDeclaration = new MethodDeclaration(this.compilationResult);
+    methodDeclaration.selector = methodBinding.selector;
+    methodDeclaration.sourceStart = sourceStart;
+    methodDeclaration.sourceEnd = sourceEnd;
+    methodDeclaration.modifiers = methodBinding.getAccessFlags() & ~AccAbstract;
+
+    if (argumentsLength > 0) {
+      String baseName = "arg";//$NON-NLS-1$
+      Argument[] arguments = (methodDeclaration.arguments = new Argument[argumentsLength]);
+      for (int i = argumentsLength; --i >= 0;) {
+        arguments[i] = new Argument((baseName + i).toCharArray(), 0L, null /* type ref */, AccDefault);
+      }
+    }
+
+    //adding the constructor in the methods list
+    if (this.missingAbstractMethods == null) {
+      this.missingAbstractMethods = new MethodDeclaration[] { methodDeclaration };
+    } else {
+      MethodDeclaration[] newMethods;
+      System.arraycopy(this.missingAbstractMethods, 0, newMethods = new MethodDeclaration[this.missingAbstractMethods.length + 1],
+          1, this.missingAbstractMethods.length);
+      newMethods[0] = methodDeclaration;
+      this.missingAbstractMethods = newMethods;
+    }
+
+    //============BINDING UPDATE==========================
+    methodDeclaration.binding = new MethodBinding(methodDeclaration.modifiers, //methodDeclaration
+        methodBinding.selector, methodBinding.returnType, argumentsLength == 0 ? NoParameters : argumentTypes, //arguments bindings
+        methodBinding.thrownExceptions, //exceptions
+        binding); //declaringClass
+
+    methodDeclaration.scope = new MethodScope(scope, methodDeclaration, true);
+    methodDeclaration.bindArguments();
+
+    /*
+     * if (binding.methods == null) { binding.methods = new MethodBinding[] { methodDeclaration.binding }; } else { MethodBinding[]
+     * newMethods; System.arraycopy( binding.methods, 0, newMethods = new MethodBinding[binding.methods.length + 1], 1,
+     * binding.methods.length); newMethods[0] = methodDeclaration.binding; binding.methods = newMethods; }
+     */
+    //===================================================
+    return methodDeclaration;
+  }
+
+  /*
+   * Find the matching parse node, answers null if nothing found
+   */
+  public FieldDeclaration declarationOf(FieldBinding fieldBinding) {
+
+    if (fieldBinding != null) {
+      for (int i = 0, max = this.fields.length; i < max; i++) {
+        FieldDeclaration fieldDecl;
+        if ((fieldDecl = this.fields[i]).binding == fieldBinding)
+          return fieldDecl;
+      }
+    }
+    return null;
+  }
+
+  /*
+   * Find the matching parse node, answers null if nothing found
+   */
+  public TypeDeclaration declarationOf(MemberTypeBinding memberTypeBinding) {
+
+    if (memberTypeBinding != null) {
+      for (int i = 0, max = this.memberTypes.length; i < max; i++) {
+        TypeDeclaration memberTypeDecl;
+        if ((memberTypeDecl = this.memberTypes[i]).binding == memberTypeBinding)
+          return memberTypeDecl;
+      }
+    }
+    return null;
+  }
+
+  /*
+   * Find the matching parse node, answers null if nothing found
+   */
+  public AbstractMethodDeclaration declarationOf(MethodBinding methodBinding) {
+
+    if (methodBinding != null) {
+      for (int i = 0, max = this.methods.length; i < max; i++) {
+        AbstractMethodDeclaration methodDecl;
+
+        if ((methodDecl = this.methods[i]).binding == methodBinding)
+          return methodDecl;
+      }
+    }
+    return null;
+  }
+
+  /*
+   * Finds the matching type amoung this type's member types. Returns null if no type with this name is found. The type name is a
+   * compound name relative to this type eg. if this type is X and we're looking for Y.X.A.B then a type name would be {X, A, B}
+   */
+  public TypeDeclaration declarationOfType(char[][] typeName) {
+
+    int typeNameLength = typeName.length;
+    if (typeNameLength < 1 || !CharOperation.equals(typeName[0], this.name)) {
+      return null;
+    }
+    if (typeNameLength == 1) {
+      return this;
+    }
+    char[][] subTypeName = new char[typeNameLength - 1][];
+    System.arraycopy(typeName, 1, subTypeName, 0, typeNameLength - 1);
+    for (int i = 0; i < this.memberTypes.length; i++) {
+      TypeDeclaration typeDecl = this.memberTypes[i].declarationOfType(subTypeName);
+      if (typeDecl != null) {
+        return typeDecl;
+      }
+    }
+    return null;
+  }
+
+  /**
+   * Generic bytecode generation for type
+   */
+  //   public void generateCode(ClassFile enclosingClassFile) {
+  //
+  //           if (hasBeenGenerated)
+  //                   return;
+  //           hasBeenGenerated = true;
+  //           if (ignoreFurtherInvestigation) {
+  //                   if (binding == null)
+  //                           return;
+  //                   ClassFile.createProblemType(
+  //                           this,
+  //                           scope.referenceCompilationUnit().compilationResult);
+  //                   return;
+  //           }
+  //           try {
+  //                   // create the result for a compiled type
+  //                   ClassFile classFile = new ClassFile(binding, enclosingClassFile, false);
+  //                   // generate all fiels
+  //                   classFile.addFieldInfos();
+  //
+  //                   // record the inner type inside its own .class file to be able
+  //                   // to generate inner classes attributes
+  //                   if (binding.isMemberType())
+  //                           classFile.recordEnclosingTypeAttributes(binding);
+  //                   if (binding.isLocalType()) {
+  //                           enclosingClassFile.recordNestedLocalAttribute(binding);
+  //                           classFile.recordNestedLocalAttribute(binding);
+  //                   }
+  //                   if (memberTypes != null) {
+  //                           for (int i = 0, max = memberTypes.length; i < max; i++) {
+  //                                   // record the inner type inside its own .class file to be able
+  //                                   // to generate inner classes attributes
+  //                                   classFile.recordNestedMemberAttribute(memberTypes[i].binding);
+  //                                   memberTypes[i].generateCode(scope, classFile);
+  //                           }
+  //                   }
+  //                   // generate all methods
+  //                   classFile.setForMethodInfos();
+  //                   if (methods != null) {
+  //                           for (int i = 0, max = methods.length; i < max; i++) {
+  //                                   methods[i].generateCode(scope, classFile);
+  //                           }
+  //                   }
+  //                   
+  //                   classFile.generateMissingAbstractMethods(this.missingAbstractMethods, scope.referenceCompilationUnit().compilationResult);
+  //
+  //                   // generate all methods
+  //                   classFile.addSpecialMethods();
+  //
+  //                   if (ignoreFurtherInvestigation) { // trigger problem type generation for code gen errors
+  //                           throw new AbortType(scope.referenceCompilationUnit().compilationResult);
+  //                   }
+  //
+  //                   // finalize the compiled type result
+  //                   classFile.addAttributes();
+  //                   scope.referenceCompilationUnit().compilationResult.record(
+  //                           binding.constantPoolName(),
+  //                           classFile);
+  //           } catch (AbortType e) {
+  //                   if (binding == null)
+  //                           return;
+  //                   ClassFile.createProblemType(
+  //                           this,
+  //                           scope.referenceCompilationUnit().compilationResult);
+  //           }
+  //   }
+  /**
+   * Bytecode generation for a local inner type (API as a normal statement code gen)
+   */
+  //   public void generateCode(BlockScope blockScope, CodeStream codeStream) {
+  //
+  //           if (hasBeenGenerated) return;
+  //           int pc = codeStream.position;
+  //           if (binding != null) ((NestedTypeBinding) binding).computeSyntheticArgumentSlotSizes();
+  //           generateCode(codeStream.classFile);
+  //           codeStream.recordPositionsFrom(pc, this.sourceStart);
+  //   }
+  /**
+   * Bytecode generation for a member inner type
+   */
+  //   public void generateCode(ClassScope classScope, ClassFile enclosingClassFile) {
+  //
+  //           if (hasBeenGenerated) return;
+  //           if (binding != null) ((NestedTypeBinding) binding).computeSyntheticArgumentSlotSizes();
+  //           generateCode(enclosingClassFile);
+  //   }
+  /**
+   * Bytecode generation for a package member
+   */
+  //   public void generateCode(CompilationUnitScope unitScope) {
+  //
+  //           generateCode((ClassFile) null);
+  //   }
+  public boolean hasErrors() {
+    return this.ignoreFurtherInvestigation;
+  }
+
+  /**
+   * Common flow analysis for all types
+   *  
+   */
+  public void internalAnalyseCode(FlowContext flowContext, FlowInfo flowInfo) {
+
+    if (this.binding.isPrivate() && !this.binding.isPrivateUsed()) {
+      if (!scope.referenceCompilationUnit().compilationResult.hasSyntaxError()) {
+        scope.problemReporter().unusedPrivateType(this);
+      }
+    }
+
+    ReferenceBinding[] defaultHandledExceptions = new ReferenceBinding[] { scope.getJavaLangThrowable() }; // tolerate any kind of
+    // exception
+    InitializationFlowContext initializerContext = new InitializationFlowContext(null, this, initializerScope);
+    InitializationFlowContext staticInitializerContext = new InitializationFlowContext(null, this, staticInitializerScope);
+    FlowInfo nonStaticFieldInfo = flowInfo.copy().unconditionalInits().discardFieldInitializations();
+    FlowInfo staticFieldInfo = flowInfo.copy().unconditionalInits().discardFieldInitializations();
+    if (fields != null) {
+      for (int i = 0, count = fields.length; i < count; i++) {
+        FieldDeclaration field = fields[i];
+        if (field.isStatic()) {
+          /*
+           * if (field.isField()){ staticInitializerContext.handledExceptions = NoExceptions; // no exception is allowed jls8.3.2 }
+           * else {
+           */
+          staticInitializerContext.handledExceptions = defaultHandledExceptions; // tolerate them all, and record them
+          /* } */
+          staticFieldInfo = field.analyseCode(staticInitializerScope, staticInitializerContext, staticFieldInfo);
+          // in case the initializer is not reachable, use a reinitialized flowInfo and enter a fake reachable
+          // branch, since the previous initializer already got the blame.
+          if (staticFieldInfo == FlowInfo.DEAD_END) {
+            staticInitializerScope.problemReporter().initializerMustCompleteNormally(field);
+            staticFieldInfo = FlowInfo.initial(maxFieldCount).setReachMode(FlowInfo.UNREACHABLE);
+          }
+        } else {
+          /*
+           * if (field.isField()){ initializerContext.handledExceptions = NoExceptions; // no exception is allowed jls8.3.2 } else {
+           */
+          initializerContext.handledExceptions = defaultHandledExceptions; // tolerate them all, and record them
+          /* } */
+          nonStaticFieldInfo = field.analyseCode(initializerScope, initializerContext, nonStaticFieldInfo);
+          // in case the initializer is not reachable, use a reinitialized flowInfo and enter a fake reachable
+          // branch, since the previous initializer already got the blame.
+          if (nonStaticFieldInfo == FlowInfo.DEAD_END) {
+            initializerScope.problemReporter().initializerMustCompleteNormally(field);
+            nonStaticFieldInfo = FlowInfo.initial(maxFieldCount).setReachMode(FlowInfo.UNREACHABLE);
+          }
+        }
+      }
+    }
+    if (memberTypes != null) {
+      for (int i = 0, count = memberTypes.length; i < count; i++) {
+        if (flowContext != null) { // local type
+          memberTypes[i].analyseCode(scope, flowContext, nonStaticFieldInfo.copy());
+        } else {
+          memberTypes[i].analyseCode(scope);
+        }
+      }
+    }
+    if (methods != null) {
+      UnconditionalFlowInfo outerInfo = flowInfo.copy().unconditionalInits().discardFieldInitializations();
+      FlowInfo constructorInfo = nonStaticFieldInfo.unconditionalInits().discardNonFieldInitializations().addInitializationsFrom(
+          outerInfo);
+      for (int i = 0, count = methods.length; i < count; i++) {
+        AbstractMethodDeclaration method = methods[i];
+        if (method.ignoreFurtherInvestigation)
+          continue;
+        if (method.isInitializationMethod()) {
+          if (method.isStatic()) { // <clinit>
+            method.analyseCode(scope, staticInitializerContext, staticFieldInfo.unconditionalInits()
+                .discardNonFieldInitializations().addInitializationsFrom(outerInfo));
+          } else { // constructor
+            method.analyseCode(scope, initializerContext, constructorInfo.copy());
+          }
+        } else { // regular method
+          method.analyseCode(scope, null, flowInfo.copy());
+        }
+      }
+    }
+  }
+
+  public boolean isInterface() {
+
+    return (modifiers & AccInterface) != 0;
+  }
+
+  /*
+   * Access emulation for a local type force to emulation of access to direct enclosing instance. By using the initializer scope, we
+   * actually only request an argument emulation, the field is not added until actually used. However we will force allocations to
+   * be qualified with an enclosing instance. 15.9.2
+   */
+  public void manageEnclosingInstanceAccessIfNecessary(BlockScope currentScope) {
+
+    NestedTypeBinding nestedType = (NestedTypeBinding) binding;
+
+    MethodScope methodScope = currentScope.methodScope();
+    if (!methodScope.isStatic && !methodScope.isConstructorCall) {
+
+      nestedType.addSyntheticArgumentAndField(binding.enclosingType());
+    }
+    // add superclass enclosing instance arg for anonymous types (if necessary)
+    if (binding.isAnonymousType()) {
+      ReferenceBinding superclass = binding.superclass;
+      if (superclass.enclosingType() != null && !superclass.isStatic()) {
+        if (!binding.superclass.isLocalType()
+            || ((NestedTypeBinding) binding.superclass).getSyntheticField(superclass.enclosingType(), true) != null) {
+
+          nestedType.addSyntheticArgument(superclass.enclosingType());
+        }
+      }
+    }
+  }
+
+  /*
+   * Access emulation for a local member type force to emulation of access to direct enclosing instance. By using the initializer
+   * scope, we actually only request an argument emulation, the field is not added until actually used. However we will force
+   * allocations to be qualified with an enclosing instance.
+   * 
+   * Local member cannot be static.
+   */
+  public void manageEnclosingInstanceAccessIfNecessary(ClassScope currentScope) {
+
+    NestedTypeBinding nestedType = (NestedTypeBinding) binding;
+    nestedType.addSyntheticArgumentAndField(binding.enclosingType());
+  }
+
+  /**
+   * A <clinit>will be requested as soon as static fields or assertions are present. It will be eliminated during classfile creation
+   * if no bytecode was actually produced based on some optimizations/compiler settings.
+   */
+  public final boolean needClassInitMethod() {
+
+    // always need a <clinit> when assertions are present
+    if ((this.bits & AddAssertionMASK) != 0)
+      return true;
+    if (fields == null)
+      return false;
+    if (isInterface())
+      return true; // fields are implicitly statics
+    for (int i = fields.length; --i >= 0;) {
+      FieldDeclaration field = fields[i];
+      //need to test the modifier directly while there is no binding yet
+      if ((field.modifiers & AccStatic) != 0)
+        return true;
+    }
+    return false;
+  }
+
+  public void parseMethod(UnitParser parser, CompilationUnitDeclaration unit) {
+
+    //connect method bodies
+    if (unit.ignoreMethodBodies)
+      return;
+
+    // no scope were created, so cannot report further errors
+    //         if (binding == null)
+    //                 return;
+
+    //members
+    if (memberTypes != null) {
+      int length = memberTypes.length;
+      for (int i = 0; i < length; i++)
+        memberTypes[i].parseMethod(parser, unit);
+    }
+
+    //methods
+    if (methods != null) {
+      int length = methods.length;
+      for (int i = 0; i < length; i++)
+        methods[i].parseStatements(parser, unit);
+    }
+
+    //initializers
+    if (fields != null) {
+      int length = fields.length;
+      for (int i = 0; i < length; i++) {
+        if (fields[i] instanceof Initializer) {
+          ((Initializer) fields[i]).parseStatements(parser, this, unit);
+        }
+      }
+    }
+  }
+
+  public void resolve() {
+
+    if (binding == null) {
+      ignoreFurtherInvestigation = true;
+      return;
+    }
+
+    try {
+      // check superclass & interfaces
+      if (binding.superclass != null) // watch out for Object ! (and other roots)
+        if (isTypeUseDeprecated(binding.superclass, scope))
+          scope.problemReporter().deprecatedType(binding.superclass, superclass);
+      if (superInterfaces != null)
+        for (int i = superInterfaces.length; --i >= 0;)
+          if (superInterfaces[i].resolvedType != null)
+            if (isTypeUseDeprecated(superInterfaces[i].resolvedType, scope))
+              scope.problemReporter().deprecatedType(superInterfaces[i].resolvedType, superInterfaces[i]);
+      maxFieldCount = 0;
+      int lastFieldID = -1;
+      if (fields != null) {
+        for (int i = 0, count = fields.length; i < count; i++) {
+          FieldDeclaration field = fields[i];
+          if (field.isField()) {
+            if (field.binding == null) {
+              // still discover secondary errors
+              if (field.initialization != null)
+                field.initialization.resolve(field.isStatic() ? staticInitializerScope : initializerScope);
+              ignoreFurtherInvestigation = true;
+              continue;
+            }
+            maxFieldCount++;
+            lastFieldID = field.binding.id;
+          } else { // initializer
+            ((Initializer) field).lastFieldID = lastFieldID + 1;
+          }
+          field.resolve(field.isStatic() ? staticInitializerScope : initializerScope);
+        }
+      }
+      if (memberTypes != null) {
+        for (int i = 0, count = memberTypes.length; i < count; i++) {
+          memberTypes[i].resolve(scope);
+        }
+      }
+      int missingAbstractMethodslength = this.missingAbstractMethods == null ? 0 : this.missingAbstractMethods.length;
+      int methodsLength = this.methods == null ? 0 : methods.length;
+      if ((methodsLength + missingAbstractMethodslength) > 0xFFFF) {
+        scope.problemReporter().tooManyMethods(this);
+      }
+
+      if (methods != null) {
+        for (int i = 0, count = methods.length; i < count; i++) {
+          methods[i].resolve(scope);
+        }
+      }
+    } catch (AbortType e) {
+      this.ignoreFurtherInvestigation = true;
+      return;
+    }
+    ;
+  }
+
+  public void resolve(BlockScope blockScope) {
+    // local type declaration
+
+    // need to build its scope first and proceed with binding's creation
+    blockScope.addLocalType(this);
+
+    // and TC....
+    if (binding != null) {
+      // remember local types binding for innerclass emulation propagation
+      blockScope.referenceCompilationUnit().record((LocalTypeBinding) binding);
+
+      // binding is not set if the receiver could not be created
+      resolve();
+      updateMaxFieldCount();
+    }
+  }
+
+  public void resolve(ClassScope upperScope) {
+    // member scopes are already created
+    // request the construction of a binding if local member type
+
+    if (binding != null && binding instanceof LocalTypeBinding) {
+      // remember local types binding for innerclass emulation propagation
+      upperScope.referenceCompilationUnit().record((LocalTypeBinding) binding);
+    }
+    resolve();
+    updateMaxFieldCount();
+  }
+
+  public void resolve(CompilationUnitScope upperScope) {
+    // top level : scope are already created
+
+    resolve();
+    updateMaxFieldCount();
+  }
+
+  public void tagAsHavingErrors() {
+    ignoreFurtherInvestigation = true;
+  }
+
+  public StringBuffer print(int indent, StringBuffer output) {
+
+    //    if ((this.bits & IsAnonymousTypeMASK) == 0) {
+    printIndent(indent, output);
+    printHeader(0, output);
+    //    }
+    return printBody(indent, output);
+  }
+
+  public StringBuffer printBody(int indent, StringBuffer output) {
+
+    output.append(" {"); //$NON-NLS-1$
+    if (memberTypes != null) {
+      for (int i = 0; i < memberTypes.length; i++) {
+        if (memberTypes[i] != null) {
+          output.append('\n');
+          memberTypes[i].print(indent + 1, output);
+        }
+      }
+    }
+    if (fields != null) {
+      for (int fieldI = 0; fieldI < fields.length; fieldI++) {
+        if (fields[fieldI] != null) {
+          output.append('\n');
+          fields[fieldI].print(indent + 1, output);
+        }
+      }
+    }
+    if (methods != null) {
+      for (int i = 0; i < methods.length; i++) {
+        if (methods[i] != null) {
+          output.append('\n');
+          methods[i].print(indent + 1, output);
+        }
+      }
+    }
+    output.append('\n');
+    return printIndent(indent, output).append('}');
+  }
+
+  public StringBuffer printHeader(int indent, StringBuffer output) {
+
+    printModifiers(this.modifiers, output);
+    output.append(isInterface() ? "interface " : "class "); //$NON-NLS-1$ //$NON-NLS-2$
+    output.append(name);
+    if (superclass != null) {
+      output.append(" extends "); //$NON-NLS-1$
+      superclass.print(0, output);
+    }
+    if (superInterfaces != null && superInterfaces.length > 0) {
+      output.append(isInterface() ? " extends " : " implements ");//$NON-NLS-2$ //$NON-NLS-1$
+      for (int i = 0; i < superInterfaces.length; i++) {
+        if (i > 0)
+          output.append(", "); //$NON-NLS-1$
+        superInterfaces[i].print(0, output);
+      }
+    }
+    return output;
+  }
+
+  public StringBuffer printStatement(int tab, StringBuffer output) {
+    return print(tab, output);
+  }
+
+  public String toString(int tab) {
+
+    return tabString(tab) + toStringHeader() + toStringBody(tab);
+  }
+
+  public String toStringBody(int tab) {
+
+    String s = " {"; //$NON-NLS-1$
+    if (memberTypes != null) {
+      for (int i = 0; i < memberTypes.length; i++) {
+        if (memberTypes[i] != null) {
+          s += "\n" + memberTypes[i].toString(tab + 1); //$NON-NLS-1$
+        }
+      }
+    }
+    if (fields != null) {
+      for (int fieldI = 0; fieldI < fields.length; fieldI++) {
+        if (fields[fieldI] != null) {
+          s += "\n" + fields[fieldI].toString(tab + 1); //$NON-NLS-1$
+          if (fields[fieldI].isField())
+            s += ";"; //$NON-NLS-1$
+        }
+      }
+    }
+    if (methods != null) {
+      for (int i = 0; i < methods.length; i++) {
+        if (methods[i] != null) {
+          s += "\n" + methods[i].toString(tab + 1); //$NON-NLS-1$
+        }
+      }
+    }
+    s += "\n" + tabString(tab) + "}"; //$NON-NLS-2$ //$NON-NLS-1$
+    return s;
+  }
+
+  public String toStringHeader() {
+
+    String s = ""; //$NON-NLS-1$
+    if (modifiers != AccDefault) {
+      s += modifiersString(modifiers);
+    }
+    s += (isInterface() ? "interface " : "class ") + new String(name);//$NON-NLS-1$ //$NON-NLS-2$
+    if (superclass != null)
+      s += " extends " + superclass.toString(0); //$NON-NLS-1$
+    if (superInterfaces != null && superInterfaces.length > 0) {
+      s += (isInterface() ? " extends " : " implements ");//$NON-NLS-2$ //$NON-NLS-1$
+      for (int i = 0; i < superInterfaces.length; i++) {
+        s += superInterfaces[i].toString(0);
+        if (i != superInterfaces.length - 1)
+          s += ", "; //$NON-NLS-1$
+      }
+      ;
+    }
+    ;
+    return s;
+  }
+
+  /**
+   * Iteration for a local innertype
+   *  
+   */
+  public void traverse(ASTVisitor visitor, BlockScope blockScope) {
+    if (ignoreFurtherInvestigation)
+      return;
+    try {
+      if (visitor.visit(this, blockScope)) {
+        if (superclass != null)
+          superclass.traverse(visitor, scope);
+        if (superInterfaces != null) {
+          int superInterfaceLength = superInterfaces.length;
+          for (int i = 0; i < superInterfaceLength; i++)
+            superInterfaces[i].traverse(visitor, scope);
+        }
+        if (memberTypes != null) {
+          int memberTypesLength = memberTypes.length;
+          for (int i = 0; i < memberTypesLength; i++)
+            memberTypes[i].traverse(visitor, scope);
+        }
+        if (fields != null) {
+          int fieldsLength = fields.length;
+          for (int i = 0; i < fieldsLength; i++) {
+            FieldDeclaration field;
+            if ((field = fields[i]).isStatic()) {
+              // local type cannot have static fields
+            } else {
+              field.traverse(visitor, initializerScope);
+            }
+          }
+        }
+        if (methods != null) {
+          int methodsLength = methods.length;
+          for (int i = 0; i < methodsLength; i++)
+            methods[i].traverse(visitor, scope);
+        }
+      }
+      visitor.endVisit(this, blockScope);
+    } catch (AbortType e) {
+      // silent abort
+    }
+  }
+
+  /**
+   * Iteration for a member innertype
+   *  
+   */
+  public void traverse(ASTVisitor visitor, ClassScope classScope) {
+    if (ignoreFurtherInvestigation)
+      return;
+    try {
+      if (visitor.visit(this, classScope)) {
+        if (superclass != null)
+          superclass.traverse(visitor, scope);
+        if (superInterfaces != null) {
+          int superInterfaceLength = superInterfaces.length;
+          for (int i = 0; i < superInterfaceLength; i++)
+            superInterfaces[i].traverse(visitor, scope);
+        }
+        if (memberTypes != null) {
+          int memberTypesLength = memberTypes.length;
+          for (int i = 0; i < memberTypesLength; i++)
+            memberTypes[i].traverse(visitor, scope);
+        }
+        if (fields != null) {
+          int fieldsLength = fields.length;
+          for (int i = 0; i < fieldsLength; i++) {
+            FieldDeclaration field;
+            if ((field = fields[i]).isStatic()) {
+              field.traverse(visitor, staticInitializerScope);
+            } else {
+              field.traverse(visitor, initializerScope);
+            }
+          }
+        }
+        if (methods != null) {
+          int methodsLength = methods.length;
+          for (int i = 0; i < methodsLength; i++)
+            methods[i].traverse(visitor, scope);
+        }
+      }
+      visitor.endVisit(this, classScope);
+    } catch (AbortType e) {
+      // silent abort
+    }
+  }
+
+  /**
+   * Iteration for a package member type
+   *  
+   */
+  public void traverse(ASTVisitor visitor, CompilationUnitScope unitScope) {
+
+    if (ignoreFurtherInvestigation)
+      return;
+    try {
+      if (visitor.visit(this, unitScope)) {
+        if (superclass != null)
+          superclass.traverse(visitor, scope);
+        if (superInterfaces != null) {
+          int superInterfaceLength = superInterfaces.length;
+          for (int i = 0; i < superInterfaceLength; i++)
+            superInterfaces[i].traverse(visitor, scope);
+        }
+        if (memberTypes != null) {
+          int memberTypesLength = memberTypes.length;
+          for (int i = 0; i < memberTypesLength; i++)
+            memberTypes[i].traverse(visitor, scope);
+        }
+        if (fields != null) {
+          int fieldsLength = fields.length;
+          for (int i = 0; i < fieldsLength; i++) {
+            FieldDeclaration field;
+            if ((field = fields[i]).isStatic()) {
+              field.traverse(visitor, staticInitializerScope);
+            } else {
+              field.traverse(visitor, initializerScope);
+            }
+          }
+        }
+        if (methods != null) {
+          int methodsLength = methods.length;
+          for (int i = 0; i < methodsLength; i++)
+            methods[i].traverse(visitor, scope);
+        }
+      }
+      visitor.endVisit(this, unitScope);
+    } catch (AbortType e) {
+    }
+  }
+
+  /**
+   * MaxFieldCount's computation is necessary so as to reserve space for the flow info field portions. It corresponds to the maximum
+   * amount of fields this class or one of its innertypes have.
+   * 
+   * During name resolution, types are traversed, and the max field count is recorded on the outermost type. It is then propagated
+   * down during the flow analysis.
+   * 
+   * This method is doing either up/down propagation.
+   */
+  void updateMaxFieldCount() {
+
+    if (binding == null)
+      return; // error scenario
+    TypeDeclaration outerMostType = scope.outerMostClassScope().referenceType();
+    if (maxFieldCount > outerMostType.maxFieldCount) {
+      outerMostType.maxFieldCount = maxFieldCount; // up
+    } else {
+      maxFieldCount = outerMostType.maxFieldCount; // down
+    }
+  }
+}
\ No newline at end of file
index 94571a7..0d28662 100644 (file)
  *******************************************************************************/
 package net.sourceforge.phpeclipse.internal.compiler.ast;
 
-import net.sourceforge.phpdt.internal.compiler.IAbstractSyntaxTreeVisitor;
+import net.sourceforge.phpdt.internal.compiler.ASTVisitor;
+import net.sourceforge.phpdt.internal.compiler.flow.FlowContext;
+import net.sourceforge.phpdt.internal.compiler.flow.FlowInfo;
 import net.sourceforge.phpdt.internal.compiler.lookup.BlockScope;
 import net.sourceforge.phpdt.internal.compiler.lookup.ClassScope;
 import net.sourceforge.phpdt.internal.compiler.lookup.Scope;
 import net.sourceforge.phpdt.internal.compiler.lookup.TypeBinding;
 
-import net.sourceforge.phpdt.internal.compiler.flow.FlowContext;
-import net.sourceforge.phpdt.internal.compiler.flow.FlowInfo;
-
 public abstract class TypeReference extends Expression {
 
 public TypeReference() {
@@ -108,5 +107,5 @@ public TypeBinding resolveType(BlockScope scope) {
        }
        return this.resolvedType;
 }
-public abstract void traverse(IAbstractSyntaxTreeVisitor visitor, ClassScope classScope);
+public abstract void traverse(ASTVisitor visitor, ClassScope classScope);
 }
index ac2a75d..c46764e 100644 (file)
@@ -10,8 +10,7 @@
  *******************************************************************************/
 package net.sourceforge.phpeclipse.internal.compiler.ast;
 
-import net.sourceforge.phpdt.internal.compiler.IAbstractSyntaxTreeVisitor;
-import net.sourceforge.phpdt.internal.compiler.codegen.Label;
+import net.sourceforge.phpdt.internal.compiler.ASTVisitor;
 import net.sourceforge.phpdt.internal.compiler.flow.FlowContext;
 import net.sourceforge.phpdt.internal.compiler.flow.FlowInfo;
 import net.sourceforge.phpdt.internal.compiler.impl.Constant;
@@ -53,8 +52,8 @@ public class UnaryExpression extends OperatorExpression {
        /**
         * Code generation for an unary operation
         *
-        * @param currentScope org.eclipse.jdt.internal.compiler.lookup.BlockScope
-        * @param codeStream org.eclipse.jdt.internal.compiler.codegen.CodeStream
+        * @param currentScope net.sourceforge.phpdt.internal.compiler.lookup.BlockScope
+        * @param codeStream net.sourceforge.phpdt.internal.compiler.codegen.CodeStream
         * @param valueRequired boolean
         */
 //     public void generateCode(
@@ -279,14 +278,18 @@ public class UnaryExpression extends OperatorExpression {
                }
                return this.resolvedType;
        }
-
+       public StringBuffer printExpressionNoParenthesis(int indent, StringBuffer output) {
+               
+               output.append(operatorToString()).append(' ');
+               return this.expression.printExpression(0, output);
+       } 
        public String toStringExpressionNoParenthesis() {
                
                return operatorToString() + " " + this.expression.toStringExpression(); //$NON-NLS-1$
        } 
        
        public void traverse(
-               IAbstractSyntaxTreeVisitor visitor,
+           ASTVisitor visitor,
                BlockScope blockScope) {
                        
                if (visitor.visit(this, blockScope)) {
index 2fd8e96..982efc1 100644 (file)
@@ -10,7 +10,7 @@
  *******************************************************************************/
 package net.sourceforge.phpeclipse.internal.compiler.ast;
 
-import net.sourceforge.phpdt.internal.compiler.IAbstractSyntaxTreeVisitor;
+import net.sourceforge.phpdt.internal.compiler.ASTVisitor;
 import net.sourceforge.phpdt.internal.compiler.codegen.Label;
 import net.sourceforge.phpdt.internal.compiler.flow.FlowContext;
 import net.sourceforge.phpdt.internal.compiler.flow.FlowInfo;
@@ -141,8 +141,8 @@ public class WhileStatement extends Statement {
        /**
         * While code generation
         *
-        * @param currentScope org.eclipse.jdt.internal.compiler.lookup.BlockScope
-        * @param codeStream org.eclipse.jdt.internal.compiler.codegen.CodeStream
+        * @param currentScope net.sourceforge.phpdt.internal.compiler.lookup.BlockScope
+        * @param codeStream net.sourceforge.phpdt.internal.compiler.codegen.CodeStream
         */
 //     public void generateCode(BlockScope currentScope, CodeStream codeStream) {
 //
@@ -223,7 +223,16 @@ public class WhileStatement extends Statement {
                        this.continueLabel.resetStateForCodeGeneration();
                }
        }
+       public StringBuffer printStatement(int tab, StringBuffer output) {
 
+               printIndent(tab, output).append("while ("); //$NON-NLS-1$
+               condition.printExpression(0, output).append(')');
+               if (action == null)
+                       output.append(';');
+               else
+                       action.printStatement(tab + 1, output); 
+               return output;
+       }
        public void resolve(BlockScope scope) {
 
                TypeBinding type = condition.resolveTypeExpecting(scope, BooleanBinding);
@@ -246,7 +255,7 @@ public class WhileStatement extends Statement {
        }
 
        public void traverse(
-               IAbstractSyntaxTreeVisitor visitor,
+           ASTVisitor visitor,
                BlockScope blockScope) {
 
                if (visitor.visit(this, blockScope)) {
index c485caf..fab771e 100644 (file)
@@ -13,6 +13,8 @@ public class PHPIdentifier {
   public final static int DEFINE = 5;
   public final static int CONSTRUCTOR = 6;
   public final static int GLOBAL_VARIABLE = 7;
+  public final static int EXTENDS = 8;
+  public final static int IMPLEMENTS = 9;
 
   private String fIdentifier;
 
index 1a6e429..d32638a 100644 (file)
@@ -27,7 +27,7 @@ import org.eclipse.core.resources.IResource;
 public class CustomBufferFactory implements IBufferFactory {
        
        /*
-        * @see org.eclipse.jdt.core.IBufferFactory#createBuffer(org.eclipse.jdt.core.IOpenable)
+        * @see net.sourceforge.phpdt.core.IBufferFactory#createBuffer(net.sourceforge.phpdt.core.IOpenable)
         */
        public IBuffer createBuffer(IOpenable owner) {
                if (owner instanceof ICompilationUnit) {
index 5382a0f..f35399b 100644 (file)
@@ -22,7 +22,7 @@ import org.eclipse.swt.widgets.Display;
  * and problems.
  * 
  * @see org.eclipse.core.resources.IMarker
- * @see org.eclipse.jdt.core.compiler.IProblem
+ * @see net.sourceforge.phpdt.core.compiler.IProblem
  */
 public interface IJavaAnnotation {
        
index bd1fb72..2e6c47f 100644 (file)
@@ -43,7 +43,7 @@ public class JavaMarkerAnnotation extends MarkerAnnotation implements IJavaAnnot
        }
        
        /*
-        * @see org.eclipse.jdt.internal.ui.javaeditor.IJavaAnnotation#getImage(org.eclipse.swt.widgets.Display)
+        * @see net.sourceforge.phpdt.internal.ui.javaeditor.IJavaAnnotation#getImage(org.eclipse.swt.widgets.Display)
         */
        public Image getImage(Display display) {
                return super.getImage(display);
@@ -116,7 +116,7 @@ public class JavaMarkerAnnotation extends MarkerAnnotation implements IJavaAnnot
        }
        
        /*
-        * @see org.eclipse.jdt.internal.ui.javaeditor.IJavaAnnotation#getOverlay()
+        * @see net.sourceforge.phpdt.internal.ui.javaeditor.IJavaAnnotation#getOverlay()
         */
        public IJavaAnnotation getOverlay() {
                return fOverlay;
@@ -145,7 +145,7 @@ public class JavaMarkerAnnotation extends MarkerAnnotation implements IJavaAnnot
        }
 
        /* (non-Javadoc)
-        * @see org.eclipse.jdt.internal.ui.javaeditor.IJavaAnnotation#getCompilationUnit()
+        * @see net.sourceforge.phpdt.internal.ui.javaeditor.IJavaAnnotation#getCompilationUnit()
         */
        public ICompilationUnit getCompilationUnit() {
                IJavaElement element= JavaCore.create(getMarker().getResource());
index 6a23ef8..68e3777 100644 (file)
@@ -37,7 +37,6 @@ import net.sourceforge.phpdt.internal.ui.actions.AbstractToggleLinkingAction;
 import net.sourceforge.phpdt.internal.ui.actions.CompositeActionGroup;
 import net.sourceforge.phpdt.internal.ui.dnd.JdtViewerDragAdapter;
 import net.sourceforge.phpdt.internal.ui.dnd.TransferDragSourceListener;
-import net.sourceforge.phpdt.internal.ui.packageview.SelectionTransferDragAdapter;
 import net.sourceforge.phpdt.internal.ui.preferences.MembersOrderPreferenceCache;
 import net.sourceforge.phpdt.internal.ui.viewsupport.AppearanceAwareLabelProvider;
 import net.sourceforge.phpdt.internal.ui.viewsupport.DecoratingJavaLabelProvider;
@@ -142,12 +141,12 @@ public class JavaOutlinePage extends Page implements IContentOutlinePage, IAdapt
                                                                ICompilationUnit cu= (ICompilationUnit) fInput;
                                                                IJavaElement base= cu;
 //                                                             if (fTopLevelTypeOnly) {
-                                                                       base= getMainType(cu);
-                                                                       if (base == null) {
+//                                                                     base= getMainType(cu);
+//                                                                     if (base == null) {
                                                                                if (fOutlineViewer != null)
                                                                                        fOutlineViewer.refresh(true);
                                                                                return;
-                                                                       }
+//                                                                     }
 //                                                             }
 //                                                             IJavaElementDelta delta= findElement(base, e.getDelta());
 //                                                             if (delta != null && fOutlineViewer != null) {
@@ -1334,9 +1333,9 @@ public class JavaOutlinePage extends Page implements IContentOutlinePage, IAdapt
 //             fOutlineViewer.addDropSupport(ops | DND.DROP_DEFAULT, transfers, new DelegatingDropAdapter(dropListeners));
                
                // Drag Adapter
-               TransferDragSourceListener[] dragListeners= new TransferDragSourceListener[] {
-                       new SelectionTransferDragAdapter(fOutlineViewer)
-               };
-               fOutlineViewer.addDragSupport(ops, transfers, new JdtViewerDragAdapter(fOutlineViewer, dragListeners));
+//             TransferDragSourceListener[] dragListeners= new TransferDragSourceListener[] {
+//                     new SelectionTransferDragAdapter(fOutlineViewer)
+//             };
+//             fOutlineViewer.addDragSupport(ops, transfers, new JdtViewerDragAdapter(fOutlineViewer, dragListeners));
        }
 }
index 5d59b6f..1de298b 100644 (file)
@@ -26,10 +26,10 @@ import org.eclipse.ui.texteditor.ITextEditorActionConstants;
 import org.eclipse.ui.texteditor.IUpdate;
 import org.eclipse.ui.texteditor.SelectAnnotationRulerAction;
 
-//import org.eclipse.jdt.internal.ui.IJavaHelpContextIds;
-//import org.eclipse.jdt.internal.ui.text.correction.JavaCorrectionProcessor;
-//import org.eclipse.jdt.internal.ui.text.correction.QuickAssistLightBulbUpdater.AssistAnnotation;
-//import org.eclipse.jdt.internal.ui.text.java.hover.JavaExpandHover;
+//import net.sourceforge.phpdt.internal.ui.IJavaHelpContextIds;
+//import net.sourceforge.phpdt.internal.ui.text.correction.JavaCorrectionProcessor;
+//import net.sourceforge.phpdt.internal.ui.text.correction.QuickAssistLightBulbUpdater.AssistAnnotation;
+//import net.sourceforge.phpdt.internal.ui.text.java.hover.JavaExpandHover;
 
 /**
  * A special select marker ruler action which activates quick fix if clicked on a quick fixable problem.
index f79b536..c8660ec 100644 (file)
@@ -161,7 +161,7 @@ public class PHPDocumentProvider extends TextFileDocumentProvider implements ICo
                }
                
                /*
-                * @see org.eclipse.jdt.internal.ui.text.java.IProblemRequestorExtension#beginReportingSequence()
+                * @see net.sourceforge.phpdt.internal.ui.text.java.IProblemRequestorExtension#beginReportingSequence()
                 */
                public void beginReportingSequence() {
                        ProblemRequestorState state= (ProblemRequestorState) fProblemRequestorState.get();
@@ -209,7 +209,7 @@ public class PHPDocumentProvider extends TextFileDocumentProvider implements ICo
                }
                
                /*
-                * @see org.eclipse.jdt.internal.ui.text.java.IProblemRequestorExtension#endReportingSequence()
+                * @see net.sourceforge.phpdt.internal.ui.text.java.IProblemRequestorExtension#endReportingSequence()
                 */
                public void endReportingSequence() {
                        ProblemRequestorState state= (ProblemRequestorState) fProblemRequestorState.get();
@@ -623,7 +623,7 @@ public class PHPDocumentProvider extends TextFileDocumentProvider implements ICo
                }
                
                /*
-                * @see org.eclipse.jdt.internal.ui.javaeditor.IJavaAnnotation#getOverlay()
+                * @see net.sourceforge.phpdt.internal.ui.javaeditor.IJavaAnnotation#getOverlay()
                 */
                public IJavaAnnotation getOverlay() {
                        return null;
@@ -659,7 +659,7 @@ public class PHPDocumentProvider extends TextFileDocumentProvider implements ICo
                }
                
                /*
-                * @see org.eclipse.jdt.internal.ui.javaeditor.IJavaAnnotation#getCompilationUnit()
+                * @see net.sourceforge.phpdt.internal.ui.javaeditor.IJavaAnnotation#getCompilationUnit()
                 */
                public ICompilationUnit getCompilationUnit() {
                        return fCompilationUnit;
@@ -1515,7 +1515,7 @@ protected DocumentProviderOperation createSaveOperation(final Object element, fi
 //  }
 
        /*
-        * @see org.eclipse.jdt.internal.ui.javaeditor.ICompilationUnitDocumentProvider#getWorkingCopy(java.lang.Object)
+        * @see net.sourceforge.phpdt.internal.ui.javaeditor.ICompilationUnitDocumentProvider#getWorkingCopy(java.lang.Object)
         */
        public ICompilationUnit getWorkingCopy(Object element) {
                FileInfo fileInfo= getFileInfo(element);                
@@ -1528,7 +1528,7 @@ protected DocumentProviderOperation createSaveOperation(final Object element, fi
 
 
   /*
-        * @see org.eclipse.jdt.internal.ui.javaeditor.ICompilationUnitDocumentProvider#shutdown()
+        * @see net.sourceforge.phpdt.internal.ui.javaeditor.ICompilationUnitDocumentProvider#shutdown()
         */
        public void shutdown() {
                PHPeclipsePlugin.getDefault().getPreferenceStore().removePropertyChangeListener(fPropertyListener);
index ade4363..1b2011c 100644 (file)
@@ -901,7 +901,7 @@ public abstract class PHPEditor extends AbstractDecoratedTextEditor implements I
   //
   //        while (offset >= 0) {
   //          c = document.getChar(offset);
-  //          if (!Character.isJavaIdentifierPart(c))
+  //          if (!Scanner.isPHPIdentifierPart(c))
   //            break;
   //          --offset;
   //        }
@@ -913,7 +913,7 @@ public abstract class PHPEditor extends AbstractDecoratedTextEditor implements I
   //
   //        while (offset < length) {
   //          c = document.getChar(offset);
-  //          if (!Character.isJavaIdentifierPart(c))
+  //          if (!Scanner.isPHPIdentifierPart(c))
   //            break;
   //          ++offset;
   //        }
@@ -1578,7 +1578,6 @@ public abstract class PHPEditor extends AbstractDecoratedTextEditor implements I
 
         while (offset >= 0) {
           c = document.getChar(offset);
-          //                                   if (!Character.isJavaIdentifierPart(c)&&c!='$')
           if (!Scanner.isPHPIdentifierPart(c) && c != '$')
             break;
           --offset;
@@ -1591,7 +1590,6 @@ public abstract class PHPEditor extends AbstractDecoratedTextEditor implements I
 
         while (offset < length) {
           c = document.getChar(offset);
-          //                                   if (!Character.isJavaIdentifierPart(c)&&c!='$')
           if (!Scanner.isPHPIdentifierPart(c) && c != '$')
             break;
           ++offset;
@@ -2287,7 +2285,7 @@ public abstract class PHPEditor extends AbstractDecoratedTextEditor implements I
     }
 
     /*
-     * @see org.eclipse.jdt.internal.ui.javaeditor.JavaEditor.NextSubWordAction#setCaretPosition(int)
+     * @see net.sourceforge.phpdt.internal.ui.javaeditor.JavaEditor.NextSubWordAction#setCaretPosition(int)
      */
     protected void setCaretPosition(final int position) {
       getTextWidget().setCaretOffset(modelOffset2WidgetOffset(getSourceViewer(), position));
@@ -2309,7 +2307,7 @@ public abstract class PHPEditor extends AbstractDecoratedTextEditor implements I
     }
 
     /*
-     * @see org.eclipse.jdt.internal.ui.javaeditor.JavaEditor.NextSubWordAction#setCaretPosition(int)
+     * @see net.sourceforge.phpdt.internal.ui.javaeditor.JavaEditor.NextSubWordAction#setCaretPosition(int)
      */
     protected void setCaretPosition(final int position) {
       if (!validateEditorInputState())
@@ -2326,7 +2324,7 @@ public abstract class PHPEditor extends AbstractDecoratedTextEditor implements I
     }
 
     /*
-     * @see org.eclipse.jdt.internal.ui.javaeditor.JavaEditor.NextSubWordAction#findNextPosition(int)
+     * @see net.sourceforge.phpdt.internal.ui.javaeditor.JavaEditor.NextSubWordAction#findNextPosition(int)
      */
     protected int findNextPosition(int position) {
       return fIterator.following(position);
@@ -2355,7 +2353,7 @@ public abstract class PHPEditor extends AbstractDecoratedTextEditor implements I
     }
 
     /*
-     * @see org.eclipse.jdt.internal.ui.javaeditor.JavaEditor.NextSubWordAction#setCaretPosition(int)
+     * @see net.sourceforge.phpdt.internal.ui.javaeditor.JavaEditor.NextSubWordAction#setCaretPosition(int)
      */
     protected void setCaretPosition(final int position) {
       final ISourceViewer viewer = getSourceViewer();
@@ -2464,7 +2462,7 @@ public abstract class PHPEditor extends AbstractDecoratedTextEditor implements I
     }
 
     /*
-     * @see org.eclipse.jdt.internal.ui.javaeditor.JavaEditor.PreviousSubWordAction#setCaretPosition(int)
+     * @see net.sourceforge.phpdt.internal.ui.javaeditor.JavaEditor.PreviousSubWordAction#setCaretPosition(int)
      */
     protected void setCaretPosition(final int position) {
       getTextWidget().setCaretOffset(modelOffset2WidgetOffset(getSourceViewer(), position));
@@ -2486,7 +2484,7 @@ public abstract class PHPEditor extends AbstractDecoratedTextEditor implements I
     }
 
     /*
-     * @see org.eclipse.jdt.internal.ui.javaeditor.JavaEditor.PreviousSubWordAction#setCaretPosition(int)
+     * @see net.sourceforge.phpdt.internal.ui.javaeditor.JavaEditor.PreviousSubWordAction#setCaretPosition(int)
      */
     protected void setCaretPosition(final int position) {
       if (!validateEditorInputState())
@@ -2503,7 +2501,7 @@ public abstract class PHPEditor extends AbstractDecoratedTextEditor implements I
     }
 
     /*
-     * @see org.eclipse.jdt.internal.ui.javaeditor.JavaEditor.PreviousSubWordAction#findPreviousPosition(int)
+     * @see net.sourceforge.phpdt.internal.ui.javaeditor.JavaEditor.PreviousSubWordAction#findPreviousPosition(int)
      */
     protected int findPreviousPosition(int position) {
       return fIterator.preceding(position);
@@ -2532,7 +2530,7 @@ public abstract class PHPEditor extends AbstractDecoratedTextEditor implements I
     }
 
     /*
-     * @see org.eclipse.jdt.internal.ui.javaeditor.JavaEditor.PreviousSubWordAction#setCaretPosition(int)
+     * @see net.sourceforge.phpdt.internal.ui.javaeditor.JavaEditor.PreviousSubWordAction#setCaretPosition(int)
      */
     protected void setCaretPosition(final int position) {
       final ISourceViewer viewer = getSourceViewer();
index 5ee914e..34c9941 100644 (file)
@@ -12,7 +12,7 @@ public interface PHPEditorActionDefinitionIds  extends ITextEditorActionDefiniti
   public static final String GOTO_MATCHING_BRACKET = "net.sourceforge.phpeclipse.ui.edit.text.php.goto.matching.bracket"; //$NON-NLS-1$
   /**
         * Action definition ID of the edit -> go to next member action
-        * (value <code>"org.eclipse.jdt.ui.edit.text.java.goto.next.member"</code>).
+        * (value <code>"net.sourceforge.phpdt.ui.edit.text.java.goto.next.member"</code>).
         *
         * @since 2.1
         */
@@ -20,7 +20,7 @@ public interface PHPEditorActionDefinitionIds  extends ITextEditorActionDefiniti
 
        /**
         * Action definition ID of the edit -> go to previous member action
-        * (value <code>"org.eclipse.jdt.ui.edit.text.java.goto.previous.member"</code>).
+        * (value <code>"net.sourceforge.phpdt.ui.edit.text.java.goto.previous.member"</code>).
         *
         * @since 2.1
         */
@@ -37,7 +37,7 @@ public interface PHPEditorActionDefinitionIds  extends ITextEditorActionDefiniti
   public static final String UNCOMMENT = "net.sourceforge.phpeclipse.phpeditor.uncomment";
   /**
         * Action definition ID of the source -> toggle comment action
-        * (value <code>"org.eclipse.jdt.ui.edit.text.java.toggle.comment"</code>).
+        * (value <code>"net.sourceforge.phpdt.ui.edit.text.java.toggle.comment"</code>).
         * @since 3.0
         */
        public static final String TOGGLE_COMMENT= "net.sourceforge.phpeclipse.phpeditor.toggle.comment"; //$NON-NLS-1$
@@ -45,21 +45,21 @@ public interface PHPEditorActionDefinitionIds  extends ITextEditorActionDefiniti
 
        /**
         * Action definition ID of the source -> add block comment action
-        * (value <code>"org.eclipse.jdt.ui.edit.text.java.add.block.comment"</code>).
+        * (value <code>"net.sourceforge.phpdt.ui.edit.text.java.add.block.comment"</code>).
         * @since 3.0
         */
        public static final String ADD_BLOCK_COMMENT= "net.sourceforge.phpeclipse.phpeditor.add.block.comment"; //$NON-NLS-1$
 
        /**
         * Action definition ID of the source -> remove block comment action
-        * (value <code>"org.eclipse.jdt.ui.edit.text.java.remove.block.comment"</code>).
+        * (value <code>"net.sourceforge.phpdt.ui.edit.text.java.remove.block.comment"</code>).
         * @since 3.0
         */
        public static final String REMOVE_BLOCK_COMMENT= "net.sourceforge.phpeclipse.phpeditor.remove.block.comment"; //$NON-NLS-1$
        
        /**
         * Action definition ID of the source -> indent action
-        * (value <code>"org.eclipse.jdt.ui.edit.text.java.indent"</code>).
+        * (value <code>"net.sourceforge.phpdt.ui.edit.text.java.indent"</code>).
         */
        public static final String INDENT= "net.sourceforge.phpeclipse.phpeditor.indent"; //$NON-NLS-1$
        
index dd1c5a4..fb51811 100644 (file)
@@ -44,17 +44,17 @@ import org.xml.sax.SAXParseException;
  */
 
 public class PHPSyntaxRdr {
-  private static final String PHPDEFAULT_FILE = "default-phpsyntax.xml"; //$NON-NLS-1$
-  private static final String PHPSYNTAX_FILE = "phpsyntax.xml"; //$NON-NLS-1$
-  private static final String USERSYNTAX_FILE = "usersyntax.xml"; //$NON-NLS-1$
-  private static final String USERDEFAULT_FILE = "default-usersyntax.xml"; //$NON-NLS-1$
-  private static final String PHPSYNTAX_TAG = "phpsyntax"; //$NON-NLS-1$
-  private static final String KEYWORD_ATTR = "keyword"; //$NON-NLS-1$
-  private static final String TYPE_ATTR = "type"; //$NON-NLS-1$
-  private static final String CONSTANT_ATTR = "constant"; //$NON-NLS-1$
-  private static final String FN_ATTR = "function"; //$NON-NLS-1$
-  private static final String USAGE_ATTR = "usage"; //$NON-NLS-1$
-  private static final String TOKENVAL_ATTR = "tokenval"; //$NON-NLS-1$
+//  private static final String PHPDEFAULT_FILE = "default-syntax.xml"; //$NON-NLS-1$
+  private static final String PHPSYNTAX_FILE = "syntax.xml"; //$NON-NLS-1$
+//  private static final String USERSYNTAX_FILE = "usersyntax.xml"; //$NON-NLS-1$
+//  private static final String USERDEFAULT_FILE = "default-usersyntax.xml"; //$NON-NLS-1$
+  private static final String PHPSYNTAX_TAG = "s"; //$NON-NLS-1$
+  private static final String KEYWORD_ATTR = "k"; //$NON-NLS-1$
+  private static final String TYPE_ATTR = "t"; //$NON-NLS-1$
+  private static final String CONSTANT_ATTR = "c"; //$NON-NLS-1$
+  private static final String FN_ATTR = "f"; //$NON-NLS-1$
+  private static final String USAGE_ATTR = "u"; //$NON-NLS-1$
+//  private static final String TOKENVAL_ATTR = "tokenval"; //$NON-NLS-1$
   private static IPreferenceStore store;
   private static boolean hasXMLFileBeenRead = true;
 
@@ -144,7 +144,7 @@ public class PHPSyntaxRdr {
         String Function = getAttributeValue(attributes, FN_ATTR);
         String Constant = getAttributeValue(attributes, CONSTANT_ATTR);
         String usage = getAttributeValue(attributes, USAGE_ATTR);
-        String Tokenval = getAttributeValue(attributes, TOKENVAL_ATTR);
+//        String Tokenval = getAttributeValue(attributes, TOKENVAL_ATTR);
       
         StringBuffer buffer = new StringBuffer();
         NodeList children = node.getChildNodes();
@@ -159,7 +159,8 @@ public class PHPSyntaxRdr {
           //ignore as it is not a valid phpsyntax tag
         } else {
           if (Keyword != null) {
-            syntaxdata.add(new PHPKeyword(Keyword, usage, Tokenval));
+//            syntaxdata.add(new PHPKeyword(Keyword, usage, Tokenval));
+            syntaxdata.add(new PHPKeyword(Keyword, usage));
           } else if (Type != null) {
             syntaxdata.add(new PHPType(Type, usage));
           } else if (Function != null) {
@@ -254,11 +255,11 @@ public class PHPSyntaxRdr {
         Attr description = document.createAttribute(USAGE_ATTR);
         description.setValue(((PHPElement) bufferobj).getUsage());
         attributes.setNamedItem(description);
-        if (bufferobj instanceof PHPKeyword) {
-          Attr tokenval = document.createAttribute(TOKENVAL_ATTR);
-          tokenval.setValue((new Integer(((PHPKeyword) bufferobj).gettokenval())).toString());
-          attributes.setNamedItem(tokenval);
-        }
+//        if (bufferobj instanceof PHPKeyword) {
+//          Attr tokenval = document.createAttribute(TOKENVAL_ATTR);
+//          tokenval.setValue((new Integer(((PHPKeyword) bufferobj).gettokenval())).toString());
+//          attributes.setNamedItem(tokenval);
+//        }
         if (bufferobj instanceof PHPFunction) {
           //      Attr usage = document.createAttribute(USAGE_ATTR);
           Text usage = document.createTextNode(((PHPFunction) bufferobj).getDescription());
index d1a3355..49f7d5f 100644 (file)
@@ -1942,7 +1942,7 @@ public class PHPUnitEditor extends PHPEditor { //implements
   }
 
   /*
-   * @see org.eclipse.jdt.internal.ui.javaeditor.JavaEditor#handlePreferencePropertyChanged(org.eclipse.core.runtime.Preferences.PropertyChangeEvent)
+   * @see net.sourceforge.phpdt.internal.ui.javaeditor.JavaEditor#handlePreferencePropertyChanged(org.eclipse.core.runtime.Preferences.PropertyChangeEvent)
    */
   protected void handlePreferencePropertyChanged(org.eclipse.core.runtime.Preferences.PropertyChangeEvent event) {
     AdaptedSourceViewer asv = (AdaptedSourceViewer) getSourceViewer();
@@ -1978,7 +1978,7 @@ public class PHPUnitEditor extends PHPEditor { //implements
   //    }
   //  }
   /*
-   * @see org.eclipse.jdt.internal.ui.javaeditor.JavaEditor#createJavaSourceViewer(org.eclipse.swt.widgets.Composite,
+   * @see net.sourceforge.phpdt.internal.ui.javaeditor.JavaEditor#createJavaSourceViewer(org.eclipse.swt.widgets.Composite,
    *      org.eclipse.jface.text.source.IVerticalRuler, org.eclipse.jface.text.source.IOverviewRuler, boolean, int)
    */
   protected ISourceViewer createJavaSourceViewer(Composite parent, IVerticalRuler verticalRuler, IOverviewRuler overviewRuler,
@@ -2004,7 +2004,7 @@ public class PHPUnitEditor extends PHPEditor { //implements
   }
 
   /*
-   * @see org.eclipse.jdt.internal.ui.javaeditor.JavaEditor#getInputElement()
+   * @see net.sourceforge.phpdt.internal.ui.javaeditor.JavaEditor#getInputElement()
    */
   protected IJavaElement getInputJavaElement() {
     return PHPeclipsePlugin.getDefault().getWorkingCopyManager().getWorkingCopy(getEditorInput());
@@ -2192,7 +2192,7 @@ public class PHPUnitEditor extends PHPEditor { //implements
 
   //   /*
   //    * @see
-  // org.eclipse.jdt.internal.ui.javaeditor.JavaEditor#installOverrideIndicator(boolean)
+  // net.sourceforge.phpdt.internal.ui.javaeditor.JavaEditor#installOverrideIndicator(boolean)
   //    * @since 3.0
   //    */
   //   protected void installOverrideIndicator(boolean waitForReconcilation) {
@@ -2214,7 +2214,7 @@ public class PHPUnitEditor extends PHPEditor { //implements
   //   
   //   /*
   //    * @see
-  // org.eclipse.jdt.internal.ui.javaeditor.JavaEditor#uninstallOverrideIndicator()
+  // net.sourceforge.phpdt.internal.ui.javaeditor.JavaEditor#uninstallOverrideIndicator()
   //    * @since 3.0
   //    */
   //   protected void uninstallOverrideIndicator() {
@@ -2348,7 +2348,7 @@ public class PHPUnitEditor extends PHPEditor { //implements
   }
 
   /*
-   * @see org.eclipse.jdt.internal.ui.text.java.IJavaReconcilingListener#aboutToBeReconciled()
+   * @see net.sourceforge.phpdt.internal.ui.text.java.IJavaReconcilingListener#aboutToBeReconciled()
    * @since 3.0
    */
   public void aboutToBeReconciled() {
@@ -2363,7 +2363,7 @@ public class PHPUnitEditor extends PHPEditor { //implements
   }
 
   /*
-   * @see org.eclipse.jdt.internal.ui.text.java.IJavaReconcilingListener#reconciled(CompilationUnit, boolean, IProgressMonitor)
+   * @see net.sourceforge.phpdt.internal.ui.text.java.IJavaReconcilingListener#reconciled(CompilationUnit, boolean, IProgressMonitor)
    * @since 3.0
    */
   public void reconciled(CompilationUnit ast, boolean forced, IProgressMonitor progressMonitor) {
@@ -2546,7 +2546,7 @@ public class PHPUnitEditor extends PHPEditor { //implements
   }
 
   /*
-   * @see org.eclipse.jdt.internal.ui.javaeditor.JavaEditor#getAdapter(java.lang.Class)
+   * @see net.sourceforge.phpdt.internal.ui.javaeditor.JavaEditor#getAdapter(java.lang.Class)
    */
   public Object getAdapter(Class required) {
     if (SmartBackspaceManager.class.equals(required)) {
index 341108e..ca09dc9 100644 (file)
@@ -47,21 +47,21 @@ public class WorkingCopyManager implements IWorkingCopyManager, IWorkingCopyMana
        }
 
        /*
-        * @see org.eclipse.jdt.ui.IWorkingCopyManager#connect(org.eclipse.ui.IEditorInput)
+        * @see net.sourceforge.phpdt.ui.IWorkingCopyManager#connect(org.eclipse.ui.IEditorInput)
         */
        public void connect(IEditorInput input) throws CoreException {
                fDocumentProvider.connect(input);
        }
        
        /*
-        * @see org.eclipse.jdt.ui.IWorkingCopyManager#disconnect(org.eclipse.ui.IEditorInput)
+        * @see net.sourceforge.phpdt.ui.IWorkingCopyManager#disconnect(org.eclipse.ui.IEditorInput)
         */
        public void disconnect(IEditorInput input) {
                fDocumentProvider.disconnect(input);
        }
        
        /*
-        * @see org.eclipse.jdt.ui.IWorkingCopyManager#shutdown()
+        * @see net.sourceforge.phpdt.ui.IWorkingCopyManager#shutdown()
         */
        public void shutdown() {
                if (!fIsShuttingDown) {
@@ -79,7 +79,7 @@ public class WorkingCopyManager implements IWorkingCopyManager, IWorkingCopyMana
        }
 
        /*
-        * @see org.eclipse.jdt.ui.IWorkingCopyManager#getWorkingCopy(org.eclipse.ui.IEditorInput)
+        * @see net.sourceforge.phpdt.ui.IWorkingCopyManager#getWorkingCopy(org.eclipse.ui.IEditorInput)
         */
        public ICompilationUnit getWorkingCopy(IEditorInput input) {
                ICompilationUnit unit= fMap == null ? null : (ICompilationUnit) fMap.get(input);
@@ -87,7 +87,7 @@ public class WorkingCopyManager implements IWorkingCopyManager, IWorkingCopyMana
        }
        
        /*
-        * @see org.eclipse.jdt.internal.ui.javaeditor.IWorkingCopyManagerExtension#setWorkingCopy(org.eclipse.ui.IEditorInput, org.eclipse.jdt.core.ICompilationUnit)
+        * @see net.sourceforge.phpdt.internal.ui.javaeditor.IWorkingCopyManagerExtension#setWorkingCopy(org.eclipse.ui.IEditorInput, net.sourceforge.phpdt.core.ICompilationUnit)
         */
        public void setWorkingCopy(IEditorInput input, ICompilationUnit workingCopy) {
                if (fDocumentProvider.getDocument(input) != null) {
@@ -97,7 +97,7 @@ public class WorkingCopyManager implements IWorkingCopyManager, IWorkingCopyMana
                }
        }
        /*
-        * @see org.eclipse.jdt.internal.ui.javaeditor.IWorkingCopyManagerExtension#removeWorkingCopy(org.eclipse.ui.IEditorInput)
+        * @see net.sourceforge.phpdt.internal.ui.javaeditor.IWorkingCopyManagerExtension#removeWorkingCopy(org.eclipse.ui.IEditorInput)
         */
        public void removeWorkingCopy(IEditorInput input) {
                fMap.remove(input);
index 0a52a0e..eba86b6 100644 (file)
@@ -97,7 +97,7 @@ public class HTMLFormattingStrategy implements IFormattingStrategy, IHTMLConstan
         * @param line the text line
         * @param tabWidth the width of the '\t' character.
         * 
-        * @see org.eclipse.jdt.internal.corext.util.Strings.computeIndent(String,int)
+        * @see net.sourceforge.phpdt.internal.corext.util.Strings.computeIndent(String,int)
         */
        public static int computeIndent(String line, int tabWidth) {
                int result = 0;
index d1c86b4..7c950b0 100644 (file)
@@ -67,7 +67,7 @@ public class HTMLWordExtractor {
 
       while (position < length) {
         character = document.getChar(position);
-        if (!Character.isJavaIdentifierPart(character))
+        if (!Scanner.isPHPIdentifierPart(character))
           break;
         ++position;
       }
index c8755e0..cdb26b9 100644 (file)
  **********************************************************************/
 package net.sourceforge.phpeclipse.phpeditor.php;
 
-import java.sql.Connection;
-import java.sql.DatabaseMetaData;
+import java.io.IOException;
 import java.sql.ResultSet;
-import java.sql.SQLException;
 import java.util.ArrayList;
 import java.util.Arrays;
+import java.util.HashMap;
 import java.util.HashSet;
+import java.util.Iterator;
 import java.util.List;
+import java.util.Set;
 import java.util.SortedMap;
 
 import net.sourceforge.phpdt.core.ICompilationUnit;
 import net.sourceforge.phpdt.core.IJavaElement;
 import net.sourceforge.phpdt.core.IMethod;
-import net.sourceforge.phpdt.core.ISourceRange;
+import net.sourceforge.phpdt.core.IType;
+import net.sourceforge.phpdt.core.JavaCore;
 import net.sourceforge.phpdt.core.ToolFactory;
 import net.sourceforge.phpdt.core.compiler.ITerminalSymbols;
 import net.sourceforge.phpdt.core.compiler.InvalidInputException;
+import net.sourceforge.phpdt.internal.compiler.DefaultErrorHandlingPolicies;
+import net.sourceforge.phpdt.internal.compiler.impl.CompilerOptions;
 import net.sourceforge.phpdt.internal.compiler.parser.Scanner;
+import net.sourceforge.phpdt.internal.compiler.parser.SyntaxError;
+import net.sourceforge.phpdt.internal.compiler.parser.UnitParser;
+import net.sourceforge.phpdt.internal.compiler.parser.VariableInfo;
+import net.sourceforge.phpdt.internal.compiler.problem.DefaultProblemFactory;
+import net.sourceforge.phpdt.internal.compiler.problem.ProblemReporter;
+import net.sourceforge.phpdt.internal.core.CompilationUnit;
+import net.sourceforge.phpdt.internal.core.SourceMethod;
+import net.sourceforge.phpdt.internal.core.SourceType;
 import net.sourceforge.phpdt.internal.corext.template.php.JavaContext;
 import net.sourceforge.phpdt.internal.corext.template.php.JavaContextType;
 import net.sourceforge.phpdt.internal.ui.PHPUiImages;
+import net.sourceforge.phpdt.internal.ui.text.PHPCodeReader;
 import net.sourceforge.phpdt.internal.ui.text.java.IPHPCompletionProposal;
 import net.sourceforge.phpdt.internal.ui.text.java.PHPCompletionProposalComparator;
 import net.sourceforge.phpdt.internal.ui.text.template.BuiltInEngine;
 import net.sourceforge.phpdt.internal.ui.text.template.DeclarationEngine;
-import net.sourceforge.phpdt.internal.ui.text.template.IdentifierEngine;
 import net.sourceforge.phpdt.internal.ui.text.template.LocalVariableProposal;
 import net.sourceforge.phpdt.internal.ui.text.template.SQLProposal;
 import net.sourceforge.phpdt.internal.ui.text.template.contentassist.TemplateEngine;
 import net.sourceforge.phpdt.ui.IWorkingCopyManager;
 import net.sourceforge.phpeclipse.PHPeclipsePlugin;
 import net.sourceforge.phpeclipse.builder.IdentifierIndexManager;
+import net.sourceforge.phpeclipse.internal.compiler.ast.CompilationUnitDeclaration;
 import net.sourceforge.phpeclipse.phpeditor.PHPEditor;
 import net.sourceforge.phpeclipse.phpeditor.PHPSyntaxRdr;
 import net.sourceforge.phpeclipse.ui.IPreferenceConstants;
@@ -68,10 +81,8 @@ import org.eclipse.swt.graphics.Point;
 import org.eclipse.ui.IEditorPart;
 import org.eclipse.ui.IFileEditorInput;
 
-import com.quantum.model.Bookmark;
-import com.quantum.model.BookmarkCollection;
+import com.quantum.ExternalInterface;
 import com.quantum.model.NotConnectedException;
-import com.quantum.util.connection.ConnectionUtil;
 
 /**
  * Example PHP completion processor.
@@ -224,7 +235,7 @@ public class PHPCompletionProcessor implements IContentAssistProcessor {
     return internalComputeCompletionProposals(viewer, documentOffset, contextInformationPosition);
   }
 
-  private int getLastToken(ITextViewer viewer, int completionPosition, JavaContext context, TableName tableName) {
+  private int getLastToken(List list, ITextViewer viewer, int completionPosition, JavaContext context, TableName tableName) {
     IDocument document = viewer.getDocument();
     int start = context.getStart();
     int end = context.getEnd();
@@ -262,23 +273,24 @@ public class PHPCompletionProcessor implements IContentAssistProcessor {
         scanner.setPHPMode(true);
         int beforeLastToken = ITerminalSymbols.TokenNameEOF;
         int lastToken = ITerminalSymbols.TokenNameEOF;
-        char[] ident;
+        char[] ident = null;
         try {
           token = scanner.getNextToken();
           lastToken = token;
           while (token != ITerminalSymbols.TokenNameERROR && token != ITerminalSymbols.TokenNameEOF) {
             beforeLastToken = lastToken;
-            if (lastToken == ITerminalSymbols.TokenNameVariable) {
+            if (token == ITerminalSymbols.TokenNameVariable) {
               ident = scanner.getCurrentTokenSource();
               if (ident.length == 5 && ident[0] == '$' && ident[1] == 't' && ident[2] == 'h' && ident[3] == 'i' && ident[4] == 's') {
-                beforeLastToken = ITerminalSymbols.TokenNamethis_PHP_COMPLETION;
+                token = ITerminalSymbols.TokenNamethis_PHP_COMPLETION;
               }
             }
             lastToken = token;
-            //                                                         System.out.println(scanner.toStringAction(lastToken));
+            // System.out.println(scanner.toStringAction(lastToken));
             token = scanner.getNextToken();
           }
         } catch (InvalidInputException e1) {
+        } catch (SyntaxError e) {
         }
         switch (lastToken) {
         case ITerminalSymbols.TokenNameMINUS_GREATER:
@@ -286,6 +298,10 @@ public class PHPCompletionProcessor implements IContentAssistProcessor {
           lastSignificantToken = ITerminalSymbols.TokenNameMINUS_GREATER;
           if (beforeLastToken == ITerminalSymbols.TokenNameVariable) {
             lastSignificantToken = ITerminalSymbols.TokenNameVariable;
+            list.set(0, ident);
+          } else if (beforeLastToken == ITerminalSymbols.TokenNamethis_PHP_COMPLETION) {
+            lastSignificantToken = ITerminalSymbols.TokenNamethis_PHP_COMPLETION;
+            list.set(0, ident);
           }
           break;
         case ITerminalSymbols.TokenNamenew:
@@ -305,10 +321,10 @@ public class PHPCompletionProcessor implements IContentAssistProcessor {
     try {
       while (true) {
         ch = sqlText.charAt(currentCharacterPosition++);
-        if (tableNameStart == -1 && Character.isJavaIdentifierStart(ch)) {
+        if (tableNameStart == -1 && Scanner.isPHPIdentifierStart(ch)) {
           tableNameStart = currentCharacterPosition - 1;
         } else {
-          if (!Character.isJavaIdentifierPart(ch)) {
+          if (!Scanner.isPHPIdentifierPart(ch)) {
             return sqlText.substring(tableNameStart, currentCharacterPosition - 1);
           }
         }
@@ -502,7 +518,6 @@ public class PHPCompletionProcessor implements IContentAssistProcessor {
   private ICompletionProposal[] internalComputeCompletionProposals(ITextViewer viewer, int offset, int contextOffset) {
     ICompilationUnit unit = fManager.getWorkingCopy(fEditor.getEditorInput());
     IDocument document = viewer.getDocument();
-    Object[] identifiers = null;
     IFile file = null;
     IProject project = null;
     if (offset > 0) {
@@ -515,7 +530,6 @@ public class PHPCompletionProcessor implements IContentAssistProcessor {
     }
 
     Point selection = viewer.getSelectedRange();
-
     // remember selected text
     String selectedText = null;
     if (selection.y != 0) {
@@ -530,17 +544,46 @@ public class PHPCompletionProcessor implements IContentAssistProcessor {
     JavaContext context = (JavaContext) phpContextType.createContext(document, offset, selection.y, unit);
     context.setVariable("selection", selectedText); //$NON-NLS-1$
     String prefix = context.getKey();
+
+    HashMap methodVariables = null;
+    HashMap typeVariables = null;
+    HashMap unitVariables = null;
+    ICompilationUnit compilationUnit = (ICompilationUnit) context.findEnclosingElement(IJavaElement.COMPILATION_UNIT);
+    //    if (compilationUnit != null) {
+    //      unitVariables = ((CompilationUnit) compilationUnit).variables;
+    //    }
+    IType type = (IType) context.findEnclosingElement(IJavaElement.TYPE);
+    //    if (type != null) {
+    //      typeVariables = ((SourceType) type).variables;
+    //    }
+    IMethod method = (IMethod) context.findEnclosingElement(IJavaElement.METHOD);
+    //    if (method != null) {
+    //      methodVariables = ((SourceMethod) method).variables;
+    //    }
+
     boolean emptyPrefix = prefix == null || prefix.equals("");
     IPHPCompletionProposal[] localVariableResults = new IPHPCompletionProposal[0];
+
     if (!emptyPrefix && prefix.length() >= 1 && prefix.charAt(0) == '$') { // php Variable ?
-      HashSet localVariables = getLocalVariableProposals(viewer, project, context, prefix);
-      if (localVariables.size() > 0) {
+      String lowerCasePrefix = prefix.toLowerCase();
+      HashSet localVariables = new HashSet();
+      if (compilationUnit != null) {
+        unitVariables = getUnitVariables(unitVariables, compilationUnit);
+        getVariableProposals(localVariables, viewer, project, context, unitVariables, lowerCasePrefix, 94);
+      }
+      if (method != null) {
+        methodVariables = getMethodVariables(methodVariables, method);
+        getVariableProposals(localVariables, viewer, project, context, methodVariables, lowerCasePrefix, 99);
+      }
+      if (!localVariables.isEmpty()) {
         localVariableResults = (IPHPCompletionProposal[]) localVariables.toArray(new IPHPCompletionProposal[localVariables.size()]);
       }
     }
 
     TableName sqlTable = new TableName();
-    int lastSignificantToken = getLastToken(viewer, offset, context, sqlTable);
+    ArrayList list = new ArrayList();
+    list.add(null);
+    int lastSignificantToken = getLastToken(list, viewer, offset, context, sqlTable);
     boolean useClassMembers = (lastSignificantToken == ITerminalSymbols.TokenNameMINUS_GREATER)
         || (lastSignificantToken == ITerminalSymbols.TokenNameVariable) || (lastSignificantToken == ITerminalSymbols.TokenNamenew)
         || (lastSignificantToken == ITerminalSymbols.TokenNamethis_PHP_COMPLETION);
@@ -553,17 +596,9 @@ public class PHPCompletionProcessor implements IContentAssistProcessor {
         fTemplateEngine.complete(viewer, offset, unit);
         templateResults = fTemplateEngine.getResults();
       }
+      // TODO delete this
       IPHPCompletionProposal[] identifierResults = new IPHPCompletionProposal[0];
-      if ((!useClassMembers) && identifiers != null) {
-        IdentifierEngine identifierEngine;
-        JavaContextType contextType = (JavaContextType) PHPeclipsePlugin.getDefault().getTemplateContextRegistry().getContextType(
-            "php"); //$NON-NLS-1$
-        if (contextType != null) {
-          identifierEngine = new IdentifierEngine(contextType);
-          identifierEngine.complete(viewer, offset, identifiers, unit);
-          identifierResults = identifierEngine.getResults();
-        }
-      }
+
       // declarations stored in file project.index on project level
       IPHPCompletionProposal[] declarationResults = new IPHPCompletionProposal[0];
       if (project != null) {
@@ -572,9 +607,35 @@ public class PHPCompletionProcessor implements IContentAssistProcessor {
             "php"); //$NON-NLS-1$
         if (contextType != null) {
           IdentifierIndexManager indexManager = PHPeclipsePlugin.getDefault().getIndexManager(project);
-          SortedMap sortedMap = indexManager.getIdentifierMap();
+          SortedMap sortedMap;
           declarationEngine = new DeclarationEngine(project, contextType, lastSignificantToken, file);
-          declarationEngine.complete(viewer, offset, sortedMap, unit);
+          if (lastSignificantToken == ITerminalSymbols.TokenNamethis_PHP_COMPLETION) {
+            // complete '$this->'
+            sortedMap = indexManager.getIdentifiers(file);
+            declarationEngine.completeObject(viewer, offset, sortedMap, unit);
+          } else {
+            String typeRef = null;
+            char[] varName = (char[]) list.get(0);
+            if (varName != null) {
+              if (method != null) {
+                methodVariables = getMethodVariables(methodVariables, method);
+                VariableInfo info = (VariableInfo) methodVariables.get(new String(varName));
+                if (info != null && info.typeIdentifier != null) {
+                  typeRef = new String(info.typeIdentifier);
+                }
+
+              }
+            }
+            if (typeRef != null) {
+              // complete '$variable->' with type information
+              sortedMap = indexManager.getIdentifiers(typeRef);
+              declarationEngine.completeObject(viewer, offset, sortedMap, unit);
+            } else {
+              // complete '$variable->' without type information
+              sortedMap = indexManager.getIdentifierMap();
+              declarationEngine.complete(viewer, offset, sortedMap, unit);
+            }
+          }
           declarationResults = declarationEngine.getResults();
         }
       }
@@ -619,6 +680,54 @@ public class PHPCompletionProcessor implements IContentAssistProcessor {
     }
     return new IPHPCompletionProposal[0];
   }
+  /**
+   * @param unitVariables
+   * @param unit
+   */
+  private HashMap getUnitVariables(HashMap unitVariables, ICompilationUnit unit) {
+    if (unitVariables == null) {
+      try {
+        String unitText = unit.getSource();
+        unitVariables = new HashMap();
+        
+        ProblemReporter problemReporter = new ProblemReporter(DefaultErrorHandlingPolicies.exitAfterAllProblems(),
+            new CompilerOptions(JavaCore.getOptions()), new DefaultProblemFactory());
+        UnitParser parser = new UnitParser(problemReporter);
+        parser.compilationUnit = new CompilationUnitDeclaration(problemReporter, null, unitText.length());
+        parser.parse(unitText, unitVariables);
+        
+      } catch (Exception e) {
+        // TODO Auto-generated catch block
+        e.printStackTrace();
+        PHPeclipsePlugin.log(e);
+      }
+    }
+    return unitVariables;
+  }
+  
+  /**
+   * @param methodVariables
+   * @param method
+   */
+  private HashMap getMethodVariables(HashMap methodVariables, IMethod method) {
+    if (methodVariables == null) {
+      try {
+        String methodText = method.getSource();
+        methodVariables = new HashMap();
+        ProblemReporter problemReporter = new ProblemReporter(DefaultErrorHandlingPolicies.exitAfterAllProblems(),
+            new CompilerOptions(JavaCore.getOptions()), new DefaultProblemFactory());
+        UnitParser parser = new UnitParser(problemReporter);
+        parser.compilationUnit = new CompilationUnitDeclaration(problemReporter, null, methodText.length());
+        parser.parseFunction(methodText, methodVariables);
+      } catch (Exception e) {
+        // TODO Auto-generated catch block
+        e.printStackTrace();
+        PHPeclipsePlugin.log(e);
+      }
+    }
+    return methodVariables;
+  }
 
   /**
    * @param viewer
@@ -627,48 +736,76 @@ public class PHPCompletionProcessor implements IContentAssistProcessor {
    * @param prefix
    * @return
    */
-  private HashSet getLocalVariableProposals(ITextViewer viewer, IProject project, JavaContext context, String prefix) {
-    HashSet localVariables = new HashSet();
-    try {
-      IMethod method = (IMethod) context.findEnclosingElement(IJavaElement.METHOD);
+  private void getVariableProposals(HashSet localVariables, ITextViewer viewer, IProject project, JavaContext context,
+      HashMap variables, String prefix, int relevance) {
+//    try {
       int start = context.getStart();
       int end = context.getEnd();
       IRegion region = new Region(start, end - start);
-      char[] varName;
+      //      IMethod method = (IMethod) context.findEnclosingElement(IJavaElement.METHOD);
+      //      if (method != null && (method instanceof SourceMethod) && ((SourceMethod) method).variables != null) {
+      //        HashMap map = ((SourceMethod) method).variables;
+      Set set = variables.keySet();
+      Iterator iter = set.iterator();
+      String varName;
       boolean matchesVarName;
-      if (method != null) {
-        ISourceRange range = method.getSourceRange();
-        char[] source = method.getSource().toCharArray();
-        Scanner scanner = new Scanner();
-        scanner.setSource(source);
-        scanner.phpMode = true;
-        int token = Scanner.TokenNameWHITESPACE;
-        while ((token = scanner.getNextToken()) != Scanner.TokenNameEOF) {
-          if (token == Scanner.TokenNameVariable) {
-            varName = scanner.getCurrentTokenSource();
-            if (varName.length >= prefix.length()) {
-              matchesVarName = true;
-              for (int i = 0; i < prefix.length(); i++) {
-                if (prefix.charAt(i) != varName[i]) {
-                  matchesVarName = false;
-                  break;
-                }
-              }
-              if (matchesVarName) {
-                LocalVariableProposal prop = new LocalVariableProposal(new String(varName), region, viewer);
-                if (varName.length == prefix.length()) {
-                  prop.setRelevance(98);
-                }
-                localVariables.add(prop);
-              }
+      while (iter.hasNext()) {
+        varName = (String) iter.next();
+        if (varName.length() >= prefix.length()) {
+          matchesVarName = true;
+          for (int i = 0; i < prefix.length(); i++) {
+            if (prefix.charAt(i) != Character.toLowerCase(varName.charAt(i))) {
+              matchesVarName = false;
+              break;
             }
           }
+          if (matchesVarName) {
+            LocalVariableProposal prop;
+            //            if (varName.length == prefix.length()) {
+            //              prop = new LocalVariableProposal(new String(varName), region, viewer, relevance-10);
+            //            } else {
+            prop = new LocalVariableProposal(new String(varName), region, viewer, relevance);
+            //            }
+            localVariables.add(prop);
+          }
         }
       }
-    } catch (Throwable e) {
-      // ignore - Syntax exceptions could occur, if there are syntax errors !
-    }
-    return localVariables;
+      //      }
+
+      //      char[] varName;
+      //      boolean matchesVarName;
+      //      if (method != null) {
+      //        ISourceRange range = method.getSourceRange();
+      //        char[] source = method.getSource().toCharArray();
+      //        Scanner scanner = new Scanner();
+      //        scanner.setSource(source);
+      //        scanner.phpMode = true;
+      //        int token = Scanner.TokenNameWHITESPACE;
+      //        while ((token = scanner.getNextToken()) != Scanner.TokenNameEOF) {
+      //          if (token == Scanner.TokenNameVariable) {
+      //            varName = scanner.getCurrentTokenSource();
+      //            if (varName.length >= prefix.length()) {
+      //              matchesVarName = true;
+      //              for (int i = 0; i < prefix.length(); i++) {
+      //                if (prefix.charAt(i) != varName[i]) {
+      //                  matchesVarName = false;
+      //                  break;
+      //                }
+      //              }
+      //              if (matchesVarName) {
+      //                LocalVariableProposal prop = new LocalVariableProposal(new String(varName), region, viewer);
+      //                if (varName.length == prefix.length()) {
+      //                  prop.setRelevance(98);
+      //                }
+      //                localVariables.add(prop);
+      //              }
+      //            }
+      //          }
+      //        }
+      //      }
+    //    } catch (Throwable e) {
+    //      // ignore - Syntax exceptions could occur, if there are syntax errors !
+    //    }
   }
 
   /**
@@ -684,118 +821,149 @@ public class PHPCompletionProcessor implements IContentAssistProcessor {
       String prefix, TableName sqlTable) {
     ICompletionProposal[] sqlResults = new ICompletionProposal[0];
     // Get The Database bookmark from the Quantum SQL plugin:
-    BookmarkCollection sqlBookMarks = BookmarkCollection.getInstance();
-    if (sqlBookMarks != null) {
-      String bookmarkString = ProjectPrefUtil.getMiscProjectsPreferenceValue(project, IPreferenceConstants.PHP_BOOKMARK_DEFAULT);
-      if (bookmarkString != null && !bookmarkString.equals("")) {
-        Bookmark bookmark = sqlBookMarks.find(bookmarkString);
-        ArrayList sqlList = new ArrayList();
-        if (bookmark != null && !bookmark.isConnected()) {
-          new ConnectionUtil().connect(bookmark, null);
+    //    BookmarkCollection sqlBookMarks = BookmarkCollection.getInstance();
+    //    if (sqlBookMarks != null) {
+    String bookmarkString = ProjectPrefUtil.getMiscProjectsPreferenceValue(project, IPreferenceConstants.PHP_BOOKMARK_DEFAULT);
+    if (bookmarkString != null && !bookmarkString.equals("")) {
+      String[] bookmarks = ExternalInterface.getBookmarkNames();
+      boolean foundBookmark = false;
+      for (int i = 0; i < bookmarks.length; i++) {
+        if (bookmarks[i].equals(bookmarkString)) {
+          foundBookmark = true;
         }
-        if (bookmark != null && bookmark.isConnected()) {
-          try {
-            Connection connection = bookmark.getConnection();
-            DatabaseMetaData metaData = connection.getMetaData();
-
-            if (metaData != null) {
-              int start = context.getStart();
-              int end = context.getEnd();
-              String foundSQLTableName = sqlTable.getTableName();
-              String tableName;
-              String columnName;
-              String prefixWithoutDollar = prefix;
-              boolean isDollarPrefix = false;
-              if (prefix.length() > 0 && prefix.charAt(0) == '$') {
-                prefixWithoutDollar = prefix.substring(1);
-                isDollarPrefix = true;
-              }
-              IRegion region = new Region(start, end - start);
-              ResultSet set;
-              if (!isDollarPrefix) {
-                set = metaData.getTables(null, null, prefixWithoutDollar + "%", null);
-                while (set.next()) {
-                  //                  String tempSchema = set.getString("TABLE_SCHEM");
-                  //                  tempSchema = (tempSchema == null) ? "" :
-                  // tempSchema.trim();
-                  tableName = set.getString("TABLE_NAME");
-                  tableName = (tableName == null) ? "" : tableName.trim();
-                  if (tableName != null && tableName.length() > 0) {
-                    sqlList.add(new SQLProposal(tableName, context, region, viewer, PHPUiImages.get(PHPUiImages.IMG_TABLE)));
-                  }
-                }
-                set.close();
-              }
-              set = metaData.getColumns(null, null, "%", prefixWithoutDollar + "%");
-              SQLProposal sqlProposal;
-              while (set.next()) {
-                columnName = set.getString("COLUMN_NAME");
-                columnName = (columnName == null) ? "" : columnName.trim();
-                tableName = set.getString("TABLE_NAME");
-                tableName = (tableName == null) ? "" : tableName.trim();
-                if (tableName != null && tableName.length() > 0 && columnName != null && columnName.length() > 0) {
-                  if (isDollarPrefix) {
-                    sqlProposal = new SQLProposal(tableName, "$" + columnName, context, region, viewer, PHPUiImages
-                        .get(PHPUiImages.IMG_COLUMN));
-                  } else {
-                    sqlProposal = new SQLProposal(tableName, columnName, context, region, viewer, PHPUiImages
-                        .get(PHPUiImages.IMG_COLUMN));
-                  }
-                  if (tableName.equals(foundSQLTableName)) {
-                    sqlProposal.setRelevance(90);
-                  } else if (tableName.indexOf(foundSQLTableName) >= 0) {
-                    sqlProposal.setRelevance(75);
-                  }
-                  sqlList.add(sqlProposal);
-                }
-              }
-              set.close();
-              sqlResults = new IPHPCompletionProposal[sqlList.size()];
-              for (int i = 0; i < sqlList.size(); i++) {
-                sqlResults[i] = (SQLProposal) sqlList.get(i);
-              }
-            }
-          } catch (NotConnectedException e) {
-            // ignore this - not mission critical
-          } catch (SQLException e) {
-            e.printStackTrace();
+      }
+      if (!foundBookmark) {
+        return sqlResults;
+      }
+      //        Bookmark bookmark = sqlBookMarks.find(bookmarkString);
+      ArrayList sqlList = new ArrayList();
+      if (!ExternalInterface.isBookmarkConnected(bookmarkString)) {
+        ExternalInterface.connectBookmark(bookmarkString, null);
+        if (!ExternalInterface.isBookmarkConnected(bookmarkString)) {
+          return sqlResults;
+        }
+      }
+      //      if (ExternalInterface.isBookmarkConnected(bookmarkString)) {
+      try {
+        //            Connection connection = bookmark.getConnection();
+        //            DatabaseMetaData metaData = connection.getMetaData();
+
+        //            if (metaData != null) {
+        int start = context.getStart();
+        int end = context.getEnd();
+        String foundSQLTableName = sqlTable.getTableName();
+        String tableName;
+        String columnName;
+        String prefixWithoutDollar = prefix;
+        boolean isDollarPrefix = false;
+        if (prefix.length() > 0 && prefix.charAt(0) == '$') {
+          prefixWithoutDollar = prefix.substring(1);
+          isDollarPrefix = true;
+        }
+        IRegion region = new Region(start, end - start);
+        ResultSet set;
+        if (!isDollarPrefix) {
+          String[] tableNames = ExternalInterface.getMatchingTableNames(null, bookmarkString, prefixWithoutDollar, null, false);
+          for (int i = 0; i < tableNames.length; i++) {
+            sqlList.add(new SQLProposal(tableNames[i], context, region, viewer, PHPUiImages.get(PHPUiImages.IMG_TABLE)));
           }
+
+          //                set = metaData.getTables(null, null, prefixWithoutDollar + "%", null);
+          //                while (set.next()) {
+          //                  tableName = set.getString("TABLE_NAME");
+          //                  tableName = (tableName == null) ? "" : tableName.trim();
+          //                  if (tableName != null && tableName.length() > 0) {
+          //                    sqlList.add(new SQLProposal(tableName, context, region, viewer, PHPUiImages.get(PHPUiImages.IMG_TABLE)));
+          //                  }
+          //                }
+          //                set.close();
+        }
+
+        String[] columnNames = ExternalInterface.getMatchingColumnNames(null, bookmarkString, prefixWithoutDollar, null, false);
+        for (int i = 0; i < columnNames.length; i++) {
+          sqlList.add(new SQLProposal(columnNames[i], context, region, viewer, PHPUiImages.get(PHPUiImages.IMG_TABLE)));
+        }
+        //              set = metaData.getColumns(null, null, "%", prefixWithoutDollar + "%");
+        //              SQLProposal sqlProposal;
+        //              while (set.next()) {
+        //                columnName = set.getString("COLUMN_NAME");
+        //                columnName = (columnName == null) ? "" : columnName.trim();
+        //                tableName = set.getString("TABLE_NAME");
+        //                tableName = (tableName == null) ? "" : tableName.trim();
+        //                if (tableName != null && tableName.length() > 0 && columnName != null && columnName.length() > 0) {
+        //                  if (isDollarPrefix) {
+        //                    sqlProposal = new SQLProposal(tableName, "$" + columnName, context, region, viewer, PHPUiImages
+        //                        .get(PHPUiImages.IMG_COLUMN));
+        //                  } else {
+        //                    sqlProposal = new SQLProposal(tableName, columnName, context, region, viewer, PHPUiImages
+        //                        .get(PHPUiImages.IMG_COLUMN));
+        //                  }
+        //                  if (tableName.equals(foundSQLTableName)) {
+        //                    sqlProposal.setRelevance(90);
+        //                  } else if (tableName.indexOf(foundSQLTableName) >= 0) {
+        //                    sqlProposal.setRelevance(75);
+        //                  }
+        //                  sqlList.add(sqlProposal);
+        //                }
+        //              }
+        //              set.close();
+        sqlResults = new IPHPCompletionProposal[sqlList.size()];
+        for (int i = 0; i < sqlList.size(); i++) {
+          sqlResults[i] = (SQLProposal) sqlList.get(i);
         }
+        //            }
+      } catch (NotConnectedException e) {
+        // ignore this - not mission critical
+        //        } catch (SQLException e) {
+        //          e.printStackTrace();
       }
+      //      }
     }
+    //    }
     return sqlResults;
   }
 
+  private boolean looksLikeMethod(PHPCodeReader reader) throws IOException {
+    int curr = reader.read();
+    while (curr != PHPCodeReader.EOF && Character.isWhitespace((char) curr))
+      curr = reader.read();
+
+    if (curr == PHPCodeReader.EOF)
+      return false;
+
+    return Scanner.isPHPIdentifierPart((char) curr) || Scanner.isPHPIdentifierStart((char) curr);
+  }
+
   private int guessContextInformationPosition(ITextViewer viewer, int offset) {
     int contextPosition = offset;
     IDocument document = viewer.getDocument();
-    //    try {
-    //
-    //      PHPCodeReader reader= new PHPCodeReader();
-    //      reader.configureBackwardReader(document, offset, true, true);
-    //  
-    //      int nestingLevel= 0;
-    //
-    //      int curr= reader.read();
-    //      while (curr != PHPCodeReader.EOF) {
-    //
-    //        if (')' == (char) curr)
-    //          ++ nestingLevel;
-    //
-    //        else if ('(' == (char) curr) {
-    //          -- nestingLevel;
-    //        
-    //          if (nestingLevel < 0) {
-    //            int start= reader.getOffset();
-    //            if (looksLikeMethod(reader))
-    //              return start + 1;
-    //          }
-    //        }
-    //
-    //        curr= reader.read();
-    //      }
-    //    } catch (IOException e) {
-    //    }
+    try {
+
+      PHPCodeReader reader = new PHPCodeReader();
+      reader.configureBackwardReader(document, offset, true, true);
+
+      int nestingLevel = 0;
+
+      int curr = reader.read();
+      while (curr != PHPCodeReader.EOF) {
+
+        if (')' == (char) curr)
+          ++nestingLevel;
+
+        else if ('(' == (char) curr) {
+          --nestingLevel;
+
+          if (nestingLevel < 0) {
+            int start = reader.getOffset();
+            if (looksLikeMethod(reader))
+              return start + 1;
+          }
+        }
+
+        curr = reader.read();
+      }
+    } catch (IOException e) {
+    }
     return contextPosition;
   }
 
@@ -827,6 +995,13 @@ public class PHPCompletionProcessor implements IContentAssistProcessor {
    */
   private ICompletionProposal[] order(ICompletionProposal[] proposals) {
     Arrays.sort(proposals, fComparator);
+    //    int len = proposals.length;
+    //    if (len > 10) {
+    //      len = 10;
+    //    }
+    //    for (int i = 0; i < len; i++) {
+    //      System.out.println(proposals[i].getDisplayString());
+    //    }
     return proposals;
   }
 
index f12544a..099d95e 100644 (file)
@@ -9,21 +9,21 @@ package net.sourceforge.phpeclipse.phpeditor.php;
  * Window>Preferences>Java>Code Generation.
  */
 public class PHPKeyword extends PHPElement{
-       private int tokenval;
-       public void settokenval(String tokenval) { this.tokenval = Integer.parseInt(tokenval);}
-       public void settokenval(int tokenval) { this.tokenval = tokenval;}
-       public int gettokenval() { return this.tokenval; }
+//     private int tokenval;
+//     public void settokenval(String tokenval) { this.tokenval = Integer.parseInt(tokenval);}
+//     public void settokenval(int tokenval) { this.tokenval = tokenval;}
+//     public int gettokenval() { return this.tokenval; }
        
-       public PHPKeyword(String Name, String Description, String tokenval){
+       public PHPKeyword(String Name, String Description){
                super(Name, Description);
-               if ((tokenval == null) || (tokenval.equals("")))
-                               {
-                                       //if there is not a tokenval, then not implemented.
-                                       settokenval(-1);
-                               }
-                               else {
-                                       settokenval(tokenval); 
-                               }               
+//             if ((tokenval == null) || (tokenval.equals("")))
+//                             {
+//                                     //if there is not a tokenval, then not implemented.
+//                                     settokenval(-1);
+//                             }
+//                             else {
+//                                     settokenval(tokenval); 
+//                             }               
                //settokenval(tokenval);
        }
 }
diff --git a/net.sourceforge.phpeclipse/src/net/sourceforge/phpeclipse/phpeditor/phpsyntax.xml b/net.sourceforge.phpeclipse/src/net/sourceforge/phpeclipse/phpeditor/phpsyntax.xml
deleted file mode 100644 (file)
index d710d21..0000000
+++ /dev/null
@@ -1,4837 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-
-<phpstandardsyntax>
-===================================================        
-*Below this are the various PHP-specific functions *
-===================================================     
-<phpsyntax function="class_exists" usage="bool class_exists(string classname [, bool autoload])">Checks if the class exists</phpsyntax>
-<phpsyntax function="create_function" usage="string create_function(string args, string code)">Creates an anonymous function, and returns its name (funny, eh?)</phpsyntax>
-<phpsyntax function="debug_backtrace" usage="array debug_backtrace(void)">Return backtrace as array</phpsyntax>
-<phpsyntax function="debug_print_backtrace" usage="void debug_print_backtrace(void)"></phpsyntax>
-<phpsyntax function="define" usage="bool define(string constant_name, mixed value, case_sensitive=true)">Define a new constant</phpsyntax>
-<phpsyntax function="defined" usage="bool defined(string constant_name)">Check whether a constant exists</phpsyntax>
-<phpsyntax function="each" usage="array each(array arr)">Return the currently pointed key..value pair in the passed array, and advance the pointer to the next element</phpsyntax>
-<phpsyntax function="error_reporting" usage="int error_reporting(int new_error_level=null)">Return the current error_reporting level, and if an argument was passed - change to the new level</phpsyntax>
-<phpsyntax function="extension_loaded" usage="bool extension_loaded(string extension_name)">Returns true if the named extension is loaded</phpsyntax>
-<phpsyntax function="func_get_arg" usage="mixed func_get_arg(int arg_num)">Get the $arg_num'th argument that was passed to the function</phpsyntax>
-<phpsyntax function="func_get_args" usage="array func_get_args()">Get an array of the arguments that were passed to the function</phpsyntax>
-<phpsyntax function="func_num_args" usage="int func_num_args(void)">Get the number of arguments that were passed to the function</phpsyntax>
-<phpsyntax function="function_exists" usage="bool function_exists(string function_name)">Checks if the function exists</phpsyntax>
-<phpsyntax function="get_class" usage="string get_class([object object])">Retrieves the class name</phpsyntax>
-<phpsyntax function="get_class_methods" usage="array get_class_methods(mixed class)">Returns an array of method names for class or class instance.</phpsyntax>
-<phpsyntax function="get_class_vars" usage="array get_class_vars(string class_name)">Returns an array of default properties of the class</phpsyntax>
-<phpsyntax function="get_declared_classes" usage="array get_declared_classes()">Returns an array of all declared classes.</phpsyntax>
-<phpsyntax function="get_declared_interfaces" usage="array get_declared_interfaces()">Returns an array of all declared interfaces.</phpsyntax>
-<phpsyntax function="get_defined_constants" usage="array get_defined_constants(void)">Return an array containing the names and values of all defined constants</phpsyntax>
-<phpsyntax function="get_defined_functions" usage="array get_defined_functions(void)">Returns an array of all defined functions</phpsyntax>
-<phpsyntax function="get_defined_vars" usage="array get_defined_vars(void)">Returns an associative array of names and values of all currently defined variable names (variables in the current scope)</phpsyntax>
-<phpsyntax function="get_extension_funcs" usage="array get_extension_funcs(string extension_name)">Returns an array with the names of functions belonging to the named extension</phpsyntax>
-<phpsyntax function="get_included_files" usage="array get_included_files(void)">Returns an array with the file names that were include_once()'d</phpsyntax>
-<phpsyntax function="get_loaded_extensions" usage="array get_loaded_extensions(void)">Return an array containing names of loaded extensions</phpsyntax>
-<phpsyntax function="get_object_vars" usage="array get_object_vars(object obj)">Returns an array of object properties</phpsyntax>
-<phpsyntax function="get_parent_class" usage="string get_parent_class(mixed object)">Retrieves the parent class name for object or class.</phpsyntax>
-<phpsyntax function="get_resource_type" usage="string get_resource_type(resource res)">Get the resource type name for a given resource</phpsyntax>
-<phpsyntax function="is_a" usage="bool is_a(object object, string class_name)">Returns true if the object is of this class or has this class as one of its parents</phpsyntax>
-<phpsyntax function="is_subclass_of" usage="bool is_subclass_of(object object, string class_name)">Returns true if the object has this class as one of its parents</phpsyntax>
-<phpsyntax function="leak" usage="void leak(int num_bytes=3)">Cause an intentional memory leak, for testing/debugging purposes</phpsyntax>
-<phpsyntax function="method_exists" usage="bool method_exists(object object, string method)">Checks if the class method exists</phpsyntax>
-<phpsyntax function="restore_error_handler" usage="void restore_error_handler(void)">Restores the previously defined error handler function</phpsyntax>
-<phpsyntax function="restore_exception_handler" usage="void restore_exception_handler(void)">Restores the previously defined exception handler function</phpsyntax>
-<phpsyntax function="set_error_handler" usage="string set_error_handler(string error_handler [, int error_types])">Sets a user-defined error handler function.  Returns the previously defined error handler, or false on error</phpsyntax>
-<phpsyntax function="set_exception_handler" usage="string set_exception_handler(callable exception_handler)">Sets a user-defined exception handler function.  Returns the previously defined exception handler, or false on error</phpsyntax>
-<phpsyntax function="strcasecmp" usage="int strcasecmp(string str1, string str2)">Binary safe case-insensitive string comparison</phpsyntax>
-<phpsyntax function="strcmp" usage="int strcmp(string str1, string str2)">Binary safe string comparison</phpsyntax>
-<phpsyntax function="strlen" usage="int strlen(string str)">Get string length</phpsyntax>
-<phpsyntax function="strncasecmp" usage="int strncasecmp(string str1, string str2, int len)">Binary safe string comparison</phpsyntax>
-<phpsyntax function="strncmp" usage="int strncmp(string str1, string str2, int len)">Binary safe string comparison</phpsyntax>
-<phpsyntax function="trigger_error" usage="void trigger_error(string messsage [, int error_type])">Generates a user-level error/warning/notice message</phpsyntax>
-<phpsyntax function="zend_version" usage="string zend_version(void)">Get the version of the Zend Engine</phpsyntax>
-<phpsyntax function="bcadd" usage="string bcadd(string left_operand, string right_operand [, int scale])">Returns the sum of two arbitrary precision numbers</phpsyntax>
-<phpsyntax function="bccomp" usage="int bccomp(string left_operand, string right_operand [, int scale])">Compares two arbitrary precision numbers</phpsyntax>
-<phpsyntax function="bcdiv" usage="string bcdiv(string left_operand, string right_operand [, int scale])">Returns the quotient of two arbitrary precision numbers (division)</phpsyntax>
-<phpsyntax function="bcmod" usage="string bcmod(string left_operand, string right_operand)">Returns the modulus of the two arbitrary precision operands</phpsyntax>
-<phpsyntax function="bcmul" usage="string bcmul(string left_operand, string right_operand [, int scale])">Returns the multiplication of two arbitrary precision numbers</phpsyntax>
-<phpsyntax function="bcpow" usage="string bcpow(string x, string y [, int scale])">Returns the value of an arbitrary precision number raised to the power of another</phpsyntax>
-<phpsyntax function="bcpowmod" usage="string bcpowmod(string x, string y, string mod [, int scale])">Returns the value of an arbitrary precision number raised to the power of another reduced by a modulous</phpsyntax>
-<phpsyntax function="bcscale" usage="bool bcscale(int scale)">Sets default scale parameter for all bc math functions</phpsyntax>
-<phpsyntax function="bcsqrt" usage="string bcsqrt(string operand [, int scale])">Returns the square root of an arbitray precision number</phpsyntax>
-<phpsyntax function="bcsub" usage="string bcsub(string left_operand, string right_operand [, int scale])">Returns the difference between two arbitrary precision numbers</phpsyntax>
-<phpsyntax function="bzcompress" usage="string bzcompress(string source [, int blocksize100k [, int workfactor]])">Compresses a string into BZip2 encoded data</phpsyntax>
-<phpsyntax function="bzdecompress" usage="string bzdecompress(string source [, int small])">Decompresses BZip2 compressed data</phpsyntax>
-<phpsyntax function="bzerrno" usage="int bzerrno(resource bz)">Returns the error number</phpsyntax>
-<phpsyntax function="bzerror" usage="array bzerror(resource bz)">Returns the error number and error string in an associative array</phpsyntax>
-<phpsyntax function="bzerrstr" usage="string bzerrstr(resource bz)">Returns the error string</phpsyntax>
-<phpsyntax function="bzopen" usage="resource bzopen(string|int file|fp, string mode)">Opens a new BZip2 stream</phpsyntax>
-<phpsyntax function="bzread" usage="string bzread(int bz[, int length])">Reads up to length bytes from a BZip2 stream, or 1024 bytes if length is not specified</phpsyntax>
-<phpsyntax function="jdtounix" usage="int jdtounix(int jday)">Convert Julian Day to UNIX timestamp</phpsyntax>
-<phpsyntax function="unixtojd" usage="int unixtojd([int timestamp])">Convert UNIX timestamp to Julian Day</phpsyntax>
-<phpsyntax function="cal_days_in_month" usage="int cal_days_in_month(int calendar, int month, int year)">Returns the number of days in a month for a given year and calendar</phpsyntax>
-<phpsyntax function="cal_from_jd" usage="array cal_from_jd(int jd, int calendar)">Converts from Julian Day Count to a supported calendar and return extended information</phpsyntax>
-<phpsyntax function="cal_info" usage="array cal_info(int calendar)">Returns information about a particular calendar</phpsyntax>
-<phpsyntax function="cal_to_jd" usage="int cal_to_jd(int calendar, int month, int day, int year)">Converts from a supported calendar to Julian Day Count</phpsyntax>
-<phpsyntax function="frenchtojd" usage="int frenchtojd(int month, int day, int year)">Converts a french republic calendar date to julian day count</phpsyntax>
-<phpsyntax function="gregoriantojd" usage="int gregoriantojd(int month, int day, int year)">Converts a gregorian calendar date to julian day count</phpsyntax>
-<phpsyntax function="jddayofweek" usage="mixed jddayofweek(int juliandaycount [, int mode])">Returns name or number of day of week from julian day count</phpsyntax>
-<phpsyntax function="jdmonthname" usage="string jdmonthname(int juliandaycount, int mode)">Returns name of month for julian day count</phpsyntax>
-<phpsyntax function="jdtofrench" usage="string jdtofrench(int juliandaycount)">Converts a julian day count to a french republic calendar date</phpsyntax>
-<phpsyntax function="jdtogregorian" usage="string jdtogregorian(int juliandaycount)">Converts a julian day count to a gregorian calendar date</phpsyntax>
-<phpsyntax function="jdtojewish" usage="string jdtojewish(int juliandaycount [, bool hebrew [, int fl]])">Converts a julian day count to a jewish calendar date</phpsyntax>
-<phpsyntax function="jdtojulian" usage="string jdtojulian(int juliandaycount)">Convert a julian day count to a julian calendar date</phpsyntax>
-<phpsyntax function="jewishtojd" usage="int jewishtojd(int month, int day, int year)">Converts a jewish calendar date to a julian day count</phpsyntax>
-<phpsyntax function="juliantojd" usage="int juliantojd(int month, int day, int year)">Converts a julian calendar date to julian day count</phpsyntax>
-<phpsyntax function="easter_date" usage="int easter_date([int year])">Return the timestamp of midnight on Easter of a given year (defaults to current year)</phpsyntax>
-<phpsyntax function="easter_days" usage="int easter_days([int year, [int method]])">Return the number of days after March 21 that Easter falls on for a given year (defaults to current year)</phpsyntax>
-<phpsyntax function="com_create_guid" usage="string com_create_guid()">Generate a globally unique identifier (GUID)</phpsyntax>
-<phpsyntax function="com_event_sink" usage="bool com_event_sink(object comobject, object sinkobject [, mixed sinkinterface])">Connect events from a COM object to a PHP object</phpsyntax>
-<phpsyntax function="com_load_typelib" usage="bool com_load_typelib(string typelib_name [, int case_insensitive])">Loads a Typelibrary and registers its constants</phpsyntax>
-<phpsyntax function="com_message_pump" usage="bool com_message_pump([int timeoutms])">Process COM messages, sleeping for up to timeoutms milliseconds</phpsyntax>
-<phpsyntax function="com_print_typeinfo" usage="bool com_print_typeinfo(object comobject | string typelib, string dispinterface, bool wantsink)">Print out a PHP class definition for a dispatchable interface</phpsyntax>
-<phpsyntax function="variant_abs" usage="mixed variant_abs(mixed left)">Returns the absolute value of a variant</phpsyntax>
-<phpsyntax function="variant_add" usage="mixed variant_add(mixed left, mixed right)">"Adds" two variant values together and returns the result</phpsyntax>
-<phpsyntax function="variant_and" usage="mixed variant_and(mixed left, mixed right)">performs a bitwise AND operation between two variants and returns the result</phpsyntax>
-<phpsyntax function="variant_cast" usage="object variant_cast(object variant, int type)">Convert a variant into a new variant object of another type</phpsyntax>
-<phpsyntax function="variant_cat" usage="mixed variant_cat(mixed left, mixed right)">concatenates two variant values together and returns the result</phpsyntax>
-<phpsyntax function="variant_cmp" usage="int variant_cmp(mixed left, mixed right [, int lcid [, int flags]])">Compares two variants</phpsyntax>
-<phpsyntax function="variant_date_from_timestamp" usage="object variant_date_from_timestamp(int timestamp)">Returns a variant date representation of a unix timestamp</phpsyntax>
-<phpsyntax function="variant_date_to_timestamp" usage="int variant_date_to_timestamp(object variant)">Converts a variant date/time value to unix timestamp</phpsyntax>
-<phpsyntax function="variant_div" usage="mixed variant_div(mixed left, mixed right)">Returns the result from dividing two variants</phpsyntax>
-<phpsyntax function="variant_eqv" usage="mixed variant_eqv(mixed left, mixed right)">Performs a bitwise equivalence on two variants</phpsyntax>
-<phpsyntax function="variant_fix" usage="mixed variant_fix(mixed left)">Returns the ? of a variant</phpsyntax>
-<phpsyntax function="variant_get_type" usage="int variant_get_type(object variant)">Returns the VT_XXX type code for a variant</phpsyntax>
-<phpsyntax function="variant_idiv" usage="mixed variant_idiv(mixed left, mixed right)">Converts variants to operands and then returns the result from dividing them</phpsyntax>
-<phpsyntax function="variant_imp" usage="mixed variant_imp(mixed left, mixed right)">Performs a bitwise implication on two variants</phpsyntax>
-<phpsyntax function="variant_index_get" usage="mixed variant_index_get(object variant, mixed index1 [, mixed index2 [, ...]])">Get the value of a multi dimensional array property</phpsyntax>
-<phpsyntax function="variant_int" usage="mixed variant_int(mixed left)">Returns the integer portion of a variant</phpsyntax>
-<phpsyntax function="variant_mod" usage="mixed variant_mod(mixed left, mixed right)">Divides two variants and returns only the remainder</phpsyntax>
-<phpsyntax function="variant_mul" usage="mixed variant_mul(mixed left, mixed right)">multiplies the values of the two variants and returns the result</phpsyntax>
-<phpsyntax function="variant_neg" usage="mixed variant_neg(mixed left)">Performs logical negation on a variant</phpsyntax>
-<phpsyntax function="variant_not" usage="mixed variant_not(mixed left)">Performs bitwise not negation on a variant</phpsyntax>
-<phpsyntax function="variant_or" usage="mixed variant_or(mixed left, mixed right)">Performs a logical disjunction on two variants</phpsyntax>
-<phpsyntax function="variant_pow" usage="mixed variant_pow(mixed left, mixed right)">Returns the result of performing the power function with two variants</phpsyntax>
-<phpsyntax function="variant_round" usage="mixed variant_round(mixed left, int decimals)">Rounds a variant to the specified number of decimal places</phpsyntax>
-<phpsyntax function="variant_set" usage="void variant_set(object variant, mixed value)">Assigns a new value for a variant object (like "set" in VB)</phpsyntax>
-<phpsyntax function="variant_set_type" usage="void variant_set_type(object variant, int type)">Convert a variant into another type.  Variant is modified "in-place"</phpsyntax>
-<phpsyntax function="variant_sub" usage="mixed variant_sub(mixed left, mixed right)">subjects the value of the right variant from the left variant value and returns the result</phpsyntax>
-<phpsyntax function="variant_xor" usage="mixed variant_xor(mixed left, mixed right)">Performs a logical exclusion on two variants</phpsyntax>
-<phpsyntax function="cpdf_add_annotation" usage="bool cpdf_add_annotation(int pdfdoc, float xll, float yll, float xur, float xur, string title, string text [, int mode])">Sets annotation</phpsyntax>
-<phpsyntax function="cpdf_add_outline" usage="int cpdf_add_outline(int pdfdoc, int lastoutline, int sublevel, int open, int pagenr, string title)">Adds outline</phpsyntax>
-<phpsyntax function="cpdf_arc" usage="bool cpdf_arc(int pdfdoc, float x, float y, float radius, float start, float end [, int mode])">Draws an arc</phpsyntax>
-<phpsyntax function="cpdf_begin_text" usage="bool cpdf_begin_text(int pdfdoc)">Starts text section</phpsyntax>
-<phpsyntax function="cpdf_circle" usage="bool cpdf_circle(int pdfdoc, float x, float y, float radius [, int mode])">Draws a circle</phpsyntax>
-<phpsyntax function="cpdf_clip" usage="bool cpdf_clip(int pdfdoc)">Clips to current path</phpsyntax>
-<phpsyntax function="cpdf_close" usage="bool cpdf_close(int pdfdoc)">Closes the pdf document</phpsyntax>
-<phpsyntax function="cpdf_closepath" usage="bool cpdf_closepath(int pdfdoc)">Close path</phpsyntax>
-<phpsyntax function="cpdf_closepath_fill_stroke" usage="bool cpdf_closepath_fill_stroke(int pdfdoc)">Close, fill and stroke current path</phpsyntax>
-<phpsyntax function="cpdf_closepath_stroke" usage="bool cpdf_closepath_stroke(int pdfdoc)">Close path and draw line along path</phpsyntax>
-<phpsyntax function="cpdf_continue_text" usage="bool cpdf_continue_text(int pdfdoc, string text)">Outputs text in next line</phpsyntax>
-<phpsyntax function="cpdf_curveto" usage="bool cpdf_curveto(int pdfdoc, float x1, float y1, float x2, float y2, float x3, float y3 [, int mode])">Draws a curve</phpsyntax>
-<phpsyntax function="cpdf_end_text" usage="bool cpdf_end_text(int pdfdoc)">Ends text section</phpsyntax>
-<phpsyntax function="cpdf_fill" usage="bool cpdf_fill(int pdfdoc)">Fills current path</phpsyntax>
-<phpsyntax function="cpdf_fill_stroke" usage="bool cpdf_fill_stroke(int pdfdoc)">Fills and stroke current path</phpsyntax>
-<phpsyntax function="cpdf_finalize" usage="bool cpdf_finalize(int pdfdoc)">Creates PDF doc in memory</phpsyntax>
-<phpsyntax function="cpdf_finalize_page" usage="bool cpdf_finalize_page(int pdfdoc, int pagenr)">Ends the page to save memory</phpsyntax>
-<phpsyntax function="cpdf_global_set_document_limits" usage="bool cpdf_global_set_document_limits(int maxPages, int maxFonts, int maxImages, int maxAnnots, int maxObjects)">Sets document settings for all documents</phpsyntax>
-<phpsyntax function="cpdf_import_jpeg" usage="bool cpdf_import_jpeg(int pdfdoc, string filename, float x, float y, float angle, float width, float height, float x_scale, float y_scale, int gsave [, int mode])">Includes JPEG image</phpsyntax>
-<phpsyntax function="cpdf_lineto" usage="bool cpdf_lineto(int pdfdoc, float x, float y [, int mode])">Draws a line</phpsyntax>
-<phpsyntax function="cpdf_moveto" usage="bool cpdf_moveto(int pdfdoc, float x, float y [, int mode])">Sets current point</phpsyntax>
-<phpsyntax function="cpdf_newpath" usage="bool cpdf_newpath(int pdfdoc)">Starts new path</phpsyntax>
-<phpsyntax function="cpdf_open" usage="int cpdf_open(int compression [, string filename [, array doc_limits]])">Opens a new pdf document</phpsyntax>
-<phpsyntax function="cpdf_output_buffer" usage="bool cpdf_output_buffer(int pdfdoc)">Returns the internal memory stream as string</phpsyntax>
-<phpsyntax function="cpdf_page_init" usage="bool cpdf_page_init(int pdfdoc, int pagenr, int orientation, int height, int width [, float unit])">Starts page</phpsyntax>
-<phpsyntax function="cpdf_place_inline_image" usage="bool cpdf_place_inline_image(int pdfdoc, int gdimage, float x, float y, float angle, fload width, float height, int gsave [, int mode])">Includes image</phpsyntax>
-<phpsyntax function="cpdf_rect" usage="bool cpdf_rect(int pdfdoc, float x, float y, float width, float height [, int mode])">Draws a rectangle</phpsyntax>
-<phpsyntax function="cpdf_restore" usage="bool cpdf_restore(int pdfdoc)">Restores formerly saved enviroment</phpsyntax>
-<phpsyntax function="cpdf_rlineto" usage="bool cpdf_rlineto(int pdfdoc, float x, float y [, int mode])">Draws a line relative to current point</phpsyntax>
-<phpsyntax function="cpdf_rmoveto" usage="bool cpdf_rmoveto(int pdfdoc, float x, float y [, int mode])">Sets current point</phpsyntax>
-<phpsyntax function="cpdf_rotate" usage="bool cpdf_rotate(int pdfdoc, float angle)">Sets rotation</phpsyntax>
-<phpsyntax function="cpdf_rotate_text" usage="bool cpdf_rotate_text(int pdfdoc, float angle)">Sets text rotation angle</phpsyntax>
-<phpsyntax function="cpdf_save" usage="bool cpdf_save(int pdfdoc)">Saves current enviroment</phpsyntax>
-<phpsyntax function="cpdf_save_to_file" usage="bool cpdf_save_to_file(int pdfdoc, string filename)">Saves the internal memory stream to a file</phpsyntax>
-<phpsyntax function="cpdf_scale" usage="bool cpdf_scale(int pdfdoc, float x_scale, float y_scale)">Sets scaling</phpsyntax>
-<phpsyntax function="cpdf_set_action_url" usage="bool cpdf_set_action_url(int pdfdoc, float xll, float yll, float xur, float xur, string url [, int mode])">Sets hyperlink</phpsyntax>
-<phpsyntax function="cpdf_set_char_spacing" usage="bool cpdf_set_char_spacing(int pdfdoc, float space)">Sets character spacing</phpsyntax>
-<phpsyntax function="cpdf_set_creator" usage="bool cpdf_set_creator(int pdfdoc, string creator)">Sets the creator field</phpsyntax>
-<phpsyntax function="cpdf_set_current_page" usage="bool cpdf_set_current_page(int pdfdoc, int pagenr)">Sets page for output</phpsyntax>
-<phpsyntax function="cpdf_set_font" usage="bool cpdf_set_font(int pdfdoc, string font, float size, string encoding)">Selects the current font face, size and encoding</phpsyntax>
-<phpsyntax function="cpdf_set_font_directories" usage="bool cpdf_set_font_directories(int pdfdoc, string pfmdir, string pfbdir)">Sets directories to search when using external fonts</phpsyntax>
-<phpsyntax function="cpdf_set_font_map_file" usage="bool cpdf_set_font_map_file(int pdfdoc, string filename)">Sets fontname to filename translation map when using external fonts</phpsyntax>
-<phpsyntax function="cpdf_set_horiz_scaling" usage="bool cpdf_set_horiz_scaling(int pdfdoc, float scale)">Sets horizontal scaling of text</phpsyntax>
-<phpsyntax function="cpdf_set_keywords" usage="bool cpdf_set_keywords(int pdfptr, string keywords)">Fills the keywords field of the info structure</phpsyntax>
-<phpsyntax function="cpdf_set_leading" usage="bool cpdf_set_leading(int pdfdoc, float distance)">Sets distance between text lines</phpsyntax>
-<phpsyntax function="cpdf_set_page_animation" usage="bool cpdf_set_page_animation(int pdfdoc, int transition, float duration, float direction, int orientation, int inout)">Sets transition between pages</phpsyntax>
-<phpsyntax function="cpdf_set_subject" usage="bool cpdf_set_subject(int pdfptr, string subject)">Fills the subject field of the info structure</phpsyntax>
-<phpsyntax function="cpdf_set_text_matrix" usage="bool cpdf_set_text_matrix(int pdfdoc, arry matrix)">Sets the text matrix</phpsyntax>
-<phpsyntax function="cpdf_set_text_pos" usage="bool cpdf_set_text_pos(int pdfdoc, float x, float y [, int mode])">Sets the position of text for the next cpdf_show call</phpsyntax>
-<phpsyntax function="cpdf_set_text_rendering" usage="bool cpdf_set_text_rendering(int pdfdoc, int rendermode)">Determines how text is rendered</phpsyntax>
-<phpsyntax function="cpdf_set_text_rise" usage="bool cpdf_set_text_rise(int pdfdoc, float value)">Sets the text rise</phpsyntax>
-<phpsyntax function="cpdf_set_title" usage="bool cpdf_set_title(int pdfptr, string title)">Fills the title field of the info structure</phpsyntax>
-<phpsyntax function="cpdf_set_viewer_preferences" usage="bool cpdf_set_viewer_preferences(int pdfdoc, array preferences)">How to show the document in the viewer</phpsyntax>
-<phpsyntax function="cpdf_set_word_spacing" usage="bool cpdf_set_word_spacing(int pdfdoc, float space)">Sets spacing between words</phpsyntax>
-<phpsyntax function="cpdf_setdash" usage="bool cpdf_setdash(int pdfdoc, long white, long black)">Sets dash pattern</phpsyntax>
-<phpsyntax function="cpdf_setflat" usage="bool cpdf_setflat(int pdfdoc, float value)">Sets flatness</phpsyntax>
-<phpsyntax function="cpdf_setgray" usage="bool cpdf_setgray(int pdfdoc, float value)">Sets drawing and filling color to gray value</phpsyntax>
-<phpsyntax function="cpdf_setgray_fill" usage="bool cpdf_setgray_fill(int pdfdoc, float value)">Sets filling color to gray value</phpsyntax>
-<phpsyntax function="cpdf_setgray_stroke" usage="bool cpdf_setgray_stroke(int pdfdoc, float value)">Sets drawing color to gray value</phpsyntax>
-<phpsyntax function="cpdf_setlinecap" usage="bool cpdf_setlinecap(int pdfdoc, int value)">Sets linecap parameter</phpsyntax>
-<phpsyntax function="cpdf_setlinejoin" usage="bool cpdf_setlinejoin(int pdfdoc, int value)">Sets linejoin parameter</phpsyntax>
-<phpsyntax function="cpdf_setlinewidth" usage="bool cpdf_setlinewidth(int pdfdoc, float width)">Sets line width</phpsyntax>
-<phpsyntax function="cpdf_setmiterlimit" usage="bool cpdf_setmiterlimit(int pdfdoc, float value)">Sets miter limit</phpsyntax>
-<phpsyntax function="cpdf_setrgbcolor" usage="bool cpdf_setrgbcolor(int pdfdoc, float red, float green, float blue)">Sets drawing and filling color to RGB color value</phpsyntax>
-<phpsyntax function="cpdf_setrgbcolor_fill" usage="bool cpdf_setrgbcolor_fill(int pdfdoc, float red, float green, float blue)">Sets filling color to rgb color value</phpsyntax>
-<phpsyntax function="cpdf_setrgbcolor_stroke" usage="bool cpdf_setrgbcolor_stroke(int pdfdoc, float red, float green, float blue)">Sets drawing color to RGB color value</phpsyntax>
-<phpsyntax function="cpdf_show" usage="bool cpdf_show(int pdfdoc, string text)">Output text at current position</phpsyntax>
-<phpsyntax function="cpdf_show_xy" usage="bool cpdf_show_xy(int pdfdoc, string text, float x-koor, float y-koor [, int mode])">Output text at position</phpsyntax>
-<phpsyntax function="cpdf_stringwidth" usage="float cpdf_stringwidth(int pdfdoc, string text)">Returns width of text in current font</phpsyntax>
-<phpsyntax function="cpdf_stroke" usage="bool cpdf_stroke(int pdfdoc)">Draws line along path path</phpsyntax>
-<phpsyntax function="cpdf_text" usage="bool cpdf_text(int pdfdoc, string text [, float x-koor, float y-koor [, int mode [, float orientation [, int alignmode]]]])">Outputs text</phpsyntax>
-<phpsyntax function="cpdf_translate" usage="bool cpdf_translate(int pdfdoc, float x, float y)">Sets origin of coordinate system</phpsyntax>
-<phpsyntax function="ctype_alnum" usage="bool ctype_alnum(mixed c)">Checks for alphanumeric character(s)</phpsyntax>
-<phpsyntax function="ctype_alpha" usage="bool ctype_alpha(mixed c)">Checks for alphabetic character(s)</phpsyntax>
-<phpsyntax function="ctype_cntrl" usage="bool ctype_cntrl(mixed c)">Checks for control character(s)</phpsyntax>
-<phpsyntax function="ctype_digit" usage="bool ctype_digit(mixed c)">Checks for numeric character(s)</phpsyntax>
-<phpsyntax function="ctype_graph" usage="bool ctype_graph(mixed c)">Checks for any printable character(s) except space</phpsyntax>
-<phpsyntax function="ctype_lower" usage="bool ctype_lower(mixed c)">Checks for lowercase character(s)</phpsyntax>
-<phpsyntax function="ctype_print" usage="bool ctype_print(mixed c)">Checks for printable character(s)</phpsyntax>
-<phpsyntax function="ctype_punct" usage="bool ctype_punct(mixed c)">Checks for any printable character which is not whitespace or an alphanumeric character</phpsyntax>
-<phpsyntax function="ctype_space" usage="bool ctype_space(mixed c)">Checks for whitespace character(s)</phpsyntax>
-<phpsyntax function="ctype_upper" usage="bool ctype_upper(mixed c)">Checks for uppercase character(s)</phpsyntax>
-<phpsyntax function="ctype_xdigit" usage="bool ctype_xdigit(mixed c)">Checks for character(s) representing a hexadecimal digit</phpsyntax>
-<phpsyntax function="curl_close" usage="void curl_close(resource ch)">Close a CURL session</phpsyntax>
-<phpsyntax function="curl_copy_handle" usage="resource curl_copy_handle(resource ch)">Copy a cURL handle along with all of it's preferences</phpsyntax>
-<phpsyntax function="curl_errno" usage="int curl_errno(resource ch)">Return an integer containing the last error number</phpsyntax>
-<phpsyntax function="curl_error" usage="string curl_error(resource ch)">Return a string contain the last error for the current session</phpsyntax>
-<phpsyntax function="curl_exec" usage="bool curl_exec(resource ch)">Perform a CURL session</phpsyntax>
-<phpsyntax function="curl_getinfo" usage="mixed curl_getinfo(resource ch, int opt)">Get information regarding a specific transfer</phpsyntax>
-<phpsyntax function="curl_init" usage="resource curl_init([string url])">Initialize a CURL session</phpsyntax>
-<phpsyntax function="curl_setopt" usage="bool curl_setopt(resource ch, string option, mixed value)">Set an option for a CURL transfer</phpsyntax>
-<phpsyntax function="curl_version" usage="array curl_version([int version])">Return cURL version information.</phpsyntax>
-<phpsyntax function="curl_multi_add_handle" usage="int curl_multi_add_handle(resource multi, resource ch)">Add a normal cURL handle to a cURL multi handle</phpsyntax>
-<phpsyntax function="curl_multi_close" usage="void curl_multi_close(resource mh)">Close a set of cURL handles</phpsyntax>
-<phpsyntax function="curl_multi_exec" usage="int curl_multi_exec(resource mh, int &amp;still_running)">Run the sub-connections of the current cURL handle</phpsyntax>
-<phpsyntax function="curl_multi_getcontent" usage="string curl_multi_getcontent(resource ch)">Return the content of a cURL handle if CURLOPT_RETURNTRANSFER is set</phpsyntax>
-<phpsyntax function="curl_multi_info_read" usage="array curl_multi_info_read(resource mh)">Get information about the current transfers</phpsyntax>
-<phpsyntax function="curl_multi_init" usage="resource curl_multi_init(void)">Returns a new cURL multi handle</phpsyntax>
-<phpsyntax function="curl_multi_remove_handle" usage="int curl_multi_remove_handle(resource mh, resource ch)">Remove a multi handle from a set of cURL handles</phpsyntax>
-<phpsyntax function="curl_multi_select" usage="int curl_multi_select(resource mh[, double timeout])">Get all the sockets associated with the cURL extension, which can then be "selected"</phpsyntax>
-<phpsyntax function="dba_close" usage="void dba_close(resource handle)">Closes database</phpsyntax>
-<phpsyntax function="dba_delete" usage="bool dba_delete(string key, resource handle)">Deletes the entry associated with key     If inifile: remove all other key lines</phpsyntax>
-<phpsyntax function="dba_exists" usage="bool dba_exists(string key, resource handle)">Checks, if the specified key exists</phpsyntax>
-<phpsyntax function="dba_fetch" usage="string dba_fetch(string key, [int skip ,] resource handle)">Fetches the data associated with key</phpsyntax>
-<phpsyntax function="dba_firstkey" usage="string dba_firstkey(resource handle)">Resets the internal key pointer and returns the first key</phpsyntax>
-<phpsyntax function="dba_handlers" usage="array dba_handlers([bool full_info])">List configured database handlers</phpsyntax>
-<phpsyntax function="dba_insert" usage="bool dba_insert(string key, string value, resource handle)">If not inifile: Insert value as key, return false, if key exists already      If inifile: Add vakue as key (next instance of key)</phpsyntax>
-<phpsyntax function="dba_list" usage="array dba_list()">List opened databases</phpsyntax>
-<phpsyntax function="dba_nextkey" usage="string dba_nextkey(resource handle)">Returns the next key</phpsyntax>
-<phpsyntax function="dba_open" usage="resource dba_open(string path, string mode [, string handlername, string ...])">Opens path using the specified handler in mode</phpsyntax>
-<phpsyntax function="dba_optimize" usage="bool dba_optimize(resource handle)">Optimizes (e.g. clean up, vacuum) database</phpsyntax>
-<phpsyntax function="dba_popen" usage="resource dba_popen(string path, string mode [, string handlername, string ...])">Opens path using the specified handler in mode persistently</phpsyntax>
-<phpsyntax function="dba_replace" usage="bool dba_replace(string key, string value, resource handle)">Inserts value as key, replaces key, if key exists already     If inifile: remove all other key lines</phpsyntax>
-<phpsyntax function="dba_sync" usage="bool dba_sync(resource handle)">Synchronizes database</phpsyntax>
-<phpsyntax function="dbase_add_record" usage="bool dbase_add_record(int identifier, array data)">Adds a record to the database</phpsyntax>
-<phpsyntax function="dbase_close" usage="bool dbase_close(int identifier)">Closes an open dBase-format database file</phpsyntax>
-<phpsyntax function="dbase_create" usage="bool dbase_create(string filename, array fields)">Creates a new dBase-format database file</phpsyntax>
-<phpsyntax function="dbase_delete_record" usage="bool dbase_delete_record(int identifier, int record)">Marks a record to be deleted</phpsyntax>
-<phpsyntax function="dbase_get_header_info" usage="array dbase_get_header_info(int database_handle)"></phpsyntax>
-<phpsyntax function="dbase_get_record" usage="array dbase_get_record(int identifier, int record)">Returns an array representing a record from the database</phpsyntax>
-<phpsyntax function="dbase_get_record_with_names" usage="array dbase_get_record_with_names(int identifier, int record)">Returns an associative array representing a record from the database</phpsyntax>
-<phpsyntax function="dbase_numfields" usage="int dbase_numfields(int identifier)">Returns the number of fields (columns) in the database</phpsyntax>
-<phpsyntax function="dbase_numrecords" usage="int dbase_numrecords(int identifier)">Returns the number of records in the database</phpsyntax>
-<phpsyntax function="dbase_open" usage="int dbase_open(string name, int mode)">Opens a dBase-format database file</phpsyntax>
-<phpsyntax function="dbase_pack" usage="bool dbase_pack(int identifier)">Packs the database (deletes records marked for deletion)</phpsyntax>
-<phpsyntax function="dbase_replace_record" usage="bool dbase_replace_record(int identifier, array data, int recnum)">Replaces a record to the database</phpsyntax>
-<phpsyntax function="dbx_close" usage="int dbx_close(dbx_link_object dbx_link)">Returns success or failure</phpsyntax>
-<phpsyntax function="dbx_compare" usage="int dbx_compare(array row_x, array row_y, string columnname [, int flags])">Returns row_y[columnname] - row_x[columnname], converted to -1, 0 or 1</phpsyntax>
-<phpsyntax function="dbx_connect" usage="dbx_link_object dbx_connect(string module_name, string host, string db, string username, string password [, bool persistent])">Returns a dbx_link_object on success and returns 0 on failure</phpsyntax>
-<phpsyntax function="dbx_error" usage="string dbx_error(dbx_link_object dbx_link)">Returns success or failure</phpsyntax>
-<phpsyntax function="dbx_escape_string" usage="string dbx_escape_string(dbx_link_object dbx_link, string sz)">Returns escaped string or NULL on error</phpsyntax>
-<phpsyntax function="dbx_fetch_row" usage="dbx_row dbx_fetch_row(dbx_query_object dbx_q)">Returns a row (index and assoc based on query) on success and returns 0 on failure or no more rows</phpsyntax>
-<phpsyntax function="dbx_query" usage="dbx_result_object dbx_query(dbx_link_object dbx_link, string sql_statement [, int flags])">Returns a dbx_link_object on success and returns 0 on failure</phpsyntax>
-<phpsyntax function="dbx_sort" usage="int dbx_sort(object dbx_result, string compare_function_name)">Returns 0 on failure, 1 on success</phpsyntax>
-<phpsyntax function="dio_close" usage="void dio_close(resource fd)">Close the file descriptor given by fd</phpsyntax>
-<phpsyntax function="dio_fcntl" usage="mixed dio_fcntl(resource fd, int cmd[, mixed arg])">Perform a c library fcntl on fd</phpsyntax>
-<phpsyntax function="dio_open" usage="resource dio_open(string filename, int flags[, int mode])">Open a new filename with specified permissions of flags and creation permissions of mode</phpsyntax>
-<phpsyntax function="dio_read" usage="string dio_read(resource fd[, int n])">Read n bytes from fd and return them, if n is not specified, read 1k</phpsyntax>
-<phpsyntax function="dio_seek" usage="int dio_seek(resource fd, int pos, int whence)">Seek to pos on fd from whence</phpsyntax>
-<phpsyntax function="dio_stat" usage="array dio_stat(resource fd)">Get stat information about the file descriptor fd</phpsyntax>
-<phpsyntax function="dio_tcsetattr" usage="mixed dio_tcsetattr(resource fd,  array args )">Perform a c library tcsetattr on fd</phpsyntax>
-<phpsyntax function="dio_truncate" usage="bool dio_truncate(resource fd, int offset)">Truncate file descriptor fd to offset bytes</phpsyntax>
-<phpsyntax function="dio_write" usage="int dio_write(resource fd, string data[, int len])">Write data to fd with optional truncation at length</phpsyntax>
-<phpsyntax function="dom_document_xinclude" usage="int dom_document_xinclude()">Substitutues xincludes in a DomDocument</phpsyntax>
-<phpsyntax function="dom_import_simplexml" usage="somNode dom_import_simplexml(sxeobject node)">Get a simplexml_element object from dom to allow for processing</phpsyntax>
-<phpsyntax function="exif_imagetype" usage="int exif_imagetype(string imagefile)">Get the type of an image</phpsyntax>
-<phpsyntax function="exif_read_data" usage="array exif_read_data(string filename [, sections_needed [, sub_arrays[, read_thumbnail]]])">Reads header data from the JPEG/TIFF image filename and optionally reads the internal thumbnails</phpsyntax>
-<phpsyntax function="exif_tagname" usage="string exif_tagname(index)">Get headername for index or false if not defined</phpsyntax>
-<phpsyntax function="exif_thumbnail" usage="string exif_thumbnail(string filename [, &amp;width, &amp;height [, &amp;imagetype]])">Reads the embedded thumbnail</phpsyntax>
-<phpsyntax function="fam_cancel_monitor" usage="bool fam_cancel_monitor(resource id, resource monitor_id)">Terminate monitoring</phpsyntax>
-<phpsyntax function="fam_close" usage="void fam_close(resource id)">Close FAM connection</phpsyntax>
-<phpsyntax function="fam_monitor_collection" usage="resource fam_monitor_collection(resource id, string dirname, int depth, string mask)">Monitor a collection of files in a directory for changes</phpsyntax>
-<phpsyntax function="fam_monitor_directory" usage="resource fam_monitor_directory(resource id, string dirname)">Monitor a directory for changes</phpsyntax>
-<phpsyntax function="fam_monitor_file" usage="resource fam_monitor_file(resource id, string filename)">Monitor a regular file for changes</phpsyntax>
-<phpsyntax function="fam_next_event" usage="array fam_next_event(resource id)">Get next pending FAM event</phpsyntax>
-<phpsyntax function="fam_open" usage="resource fam_open([string appname])">Open FAM connection</phpsyntax>
-<phpsyntax function="fam_pending" usage="int fam_pending(resource id)">Check for pending FAM events</phpsyntax>
-<phpsyntax function="fam_resume_monitor" usage="bool fam_resume_monitor(resource id, resource monitor_id)">Resume suspended monitoring</phpsyntax>
-<phpsyntax function="fam_suspend_monitor" usage="bool fam_suspend_monitor(resource id, resource monitor_id)">Temporary suspend monitoring</phpsyntax>
-<phpsyntax function="fbsql_affected_rows" usage="int fbsql_affected_rows([resource link_identifier])">Get the number of rows affected by the last statement</phpsyntax>
-<phpsyntax function="fbsql_autocommit" usage="bool fbsql_autocommit(resource link_identifier [, bool OnOff])">Turns on auto-commit</phpsyntax>
-<phpsyntax function="fbsql_blob_size" usage="int fbsql_blob_size(string blob_handle [, resource link_identifier])">Get the size of a BLOB identified by blob_handle</phpsyntax>
-<phpsyntax function="fbsql_change_user" usage="int fbsql_change_user(string user, string password [, string database [, resource link_identifier]])">Change the user for a session</phpsyntax>
-<phpsyntax function="fbsql_clob_size" usage="int fbsql_clob_size(string clob_handle [, resource link_identifier])">Get the size of a CLOB identified by clob_handle</phpsyntax>
-<phpsyntax function="fbsql_close" usage="bool fbsql_close([resource link_identifier])">Close a connection to a database server</phpsyntax>
-<phpsyntax function="fbsql_commit" usage="bool fbsql_commit([resource link_identifier])">Commit the transaction</phpsyntax>
-<phpsyntax function="fbsql_connect" usage="resource fbsql_connect([string hostname [, string username [, string password]]])">Create a connection to a database server</phpsyntax>
-<phpsyntax function="fbsql_create_blob" usage="string fbsql_create_blob(string blob_data [, resource link_identifier])">Create a BLOB in the database for use with an insert or update statement</phpsyntax>
-<phpsyntax function="fbsql_create_clob" usage="string fbsql_create_clob(string clob_data [, resource link_identifier])">Create a CLOB in the database for use with an insert or update statement</phpsyntax>
-<phpsyntax function="fbsql_create_db" usage="bool fbsql_create_db(string database_name [, resource link_identifier])">Create a new database on the server</phpsyntax>
-<phpsyntax function="fbsql_data_seek" usage="bool fbsql_data_seek(int result, int row_number)">Move the internal row counter to the specified row_number</phpsyntax>
-<phpsyntax function="fbsql_database" usage="string fbsql_database(resource link_identifier [, string database])">Get or set the database name used with a connection</phpsyntax>
-<phpsyntax function="fbsql_database_password" usage="string fbsql_database_password(resource link_identifier [, string database_password])">Get or set the databsae password used with a connection</phpsyntax>
-<phpsyntax function="fbsql_db_query" usage="resource fbsql_db_query(string database_name, string query [, resource link_identifier])">Send one or more SQL statements to a specified database on the server</phpsyntax>
-<phpsyntax function="fbsql_db_status" usage="int fbsql_db_status(string database_name [, resource link_identifier])">Gets the status (Stopped, Starting, Running, Stopping) for a given database</phpsyntax>
-<phpsyntax function="fbsql_drop_db" usage="int fbsql_drop_db(string database_name [, resource link_identifier])">Drop a database on the server</phpsyntax>
-<phpsyntax function="fbsql_errno" usage="int fbsql_errno([resource link_identifier])">Returns the last error code</phpsyntax>
-<phpsyntax function="fbsql_error" usage="string fbsql_error([resource link_identifier])">Returns the last error string</phpsyntax>
-<phpsyntax function="fbsql_fetch_array" usage="array fbsql_fetch_array(resource result [, int result_type])">Fetches a result row as an array (associative, numeric or both)</phpsyntax>
-<phpsyntax function="fbsql_fetch_assoc" usage="object fbsql_fetch_assoc(resource result)">Detch a row of data. Returns an assoc array</phpsyntax>
-<phpsyntax function="fbsql_fetch_field" usage="object fbsql_fetch_field(int result [, int field_index])">Get the field properties for a specified field_index</phpsyntax>
-<phpsyntax function="fbsql_fetch_lengths" usage="array fbsql_fetch_lengths(int result)">Returns an array of the lengths of each column in the result set</phpsyntax>
-<phpsyntax function="fbsql_fetch_object" usage="object fbsql_fetch_object(resource result [, int result_type])">Fetch a row of data. Returns an object</phpsyntax>
-<phpsyntax function="fbsql_fetch_row" usage="array fbsql_fetch_row(resource result)">Fetch a row of data. Returns an indexed array</phpsyntax>
-<phpsyntax function="fbsql_field_flags" usage="string fbsql_field_flags(int result [, int field_index])">???</phpsyntax>
-<phpsyntax function="fbsql_field_len" usage="mixed fbsql_field_len(int result [, int field_index])">Get the column length for a specified field_index</phpsyntax>
-<phpsyntax function="fbsql_field_name" usage="string fbsql_field_name(int result [, int field_index])">Get the column name for a specified field_index</phpsyntax>
-<phpsyntax function="fbsql_field_seek" usage="bool fbsql_field_seek(int result [, int field_index])">???</phpsyntax>
-<phpsyntax function="fbsql_field_table" usage="string fbsql_field_table(int result [, int field_index])">Get the table name for a specified field_index</phpsyntax>
-<phpsyntax function="fbsql_field_type" usage="string fbsql_field_type(int result [, int field_index])">Get the field type for a specified field_index</phpsyntax>
-<phpsyntax function="fbsql_free_result" usage="bool fbsql_free_result(resource result)">free the memory used to store a result</phpsyntax>
-<phpsyntax function="fbsql_get_autostart_info" usage="array fbsql_get_autostart_info([resource link_identifier])">???</phpsyntax>
-<phpsyntax function="fbsql_hostname" usage="string fbsql_hostname(resource link_identifier [, string host_name])">Get or set the host name used with a connection</phpsyntax>
-<phpsyntax function="fbsql_insert_id" usage="int fbsql_insert_id([resource link_identifier])">Get the internal index for the last insert statement</phpsyntax>
-<phpsyntax function="fbsql_list_dbs" usage="resource fbsql_list_dbs([resource link_identifier])">Retreive a list of all databases on the server</phpsyntax>
-<phpsyntax function="fbsql_list_fields" usage="resource fbsql_list_fields(string database_name, string table_name [, resource link_identifier])">Retrieve a list of all fields for the specified database.table</phpsyntax>
-<phpsyntax function="fbsql_list_tables" usage="resource fbsql_list_tables(string database [, int link_identifier])">Retreive a list of all tables from the specifoied database</phpsyntax>
-<phpsyntax function="fbsql_next_result" usage="bool fbsql_next_result(int result)">Switch to the next result if multiple results are available</phpsyntax>
-<phpsyntax function="fbsql_num_fields" usage="int fbsql_num_fields(int result)">Get number of fields in the result set</phpsyntax>
-<phpsyntax function="fbsql_num_rows" usage="int fbsql_num_rows(int result)">Get number of rows</phpsyntax>
-<phpsyntax function="fbsql_password" usage="string fbsql_password(resource link_identifier [, string password])">Get or set the user password used with a connection</phpsyntax>
-<phpsyntax function="fbsql_pconnect" usage="resource fbsql_pconnect([string hostname [, string username [, string password]]])">Create a persistant connection to a database server</phpsyntax>
-<phpsyntax function="fbsql_query" usage="resource fbsql_query(string query [, resource link_identifier])">Send one or more SQL statements to the server and execute them</phpsyntax>
-<phpsyntax function="fbsql_read_blob" usage="string fbsql_read_blob(string blob_handle [, resource link_identifier])">Read the BLOB data identified by blob_handle</phpsyntax>
-<phpsyntax function="fbsql_read_clob" usage="string fbsql_read_clob(string clob_handle [, resource link_identifier])">Read the CLOB data identified by clob_handle</phpsyntax>
-<phpsyntax function="fbsql_result" usage="mixed fbsql_result(int result [, int row [, mixed field]])">???</phpsyntax>
-<phpsyntax function="fbsql_rollback" usage="bool fbsql_rollback([resource link_identifier])">Rollback all statments since last commit</phpsyntax>
-<phpsyntax function="fbsql_select_db" usage="bool fbsql_select_db([string database_name [, resource link_identifier]])">Select the database to open</phpsyntax>
-<phpsyntax function="fbsql_set_lob_mode" usage="bool fbsql_set_lob_mode(resource result, int lob_mode)">Sets the mode for how LOB data re retreived (actual data or a handle)</phpsyntax>
-<phpsyntax function="fbsql_set_password" usage="bool fbsql_set_password(resource link_identifier, string user, string password, string old_password)">Change the password for a given user</phpsyntax>
-<phpsyntax function="fbsql_set_transaction" usage="void fbsql_set_transaction(resource link_identifier, int locking, int isolation)">Sets the transaction locking and isolation</phpsyntax>
-<phpsyntax function="fbsql_start_db" usage="bool fbsql_start_db(string database_name [, resource link_identifier])">Start a database on the server</phpsyntax>
-<phpsyntax function="fbsql_stop_db" usage="bool fbsql_stop_db(string database_name [, resource link_identifier])">Stop a database on the server</phpsyntax>
-<phpsyntax function="fbsql_table_name" usage="string fbsql_table_name(resource result, int index)">Retreive the table name for index after a call to fbsql_list_tables()</phpsyntax>
-<phpsyntax function="fbsql_username" usage="string fbsql_username(resource link_identifier [, string username])">Get or set the host user used with a connection</phpsyntax>
-<phpsyntax function="fbsql_warnings" usage="bool fbsql_warnings([int flag])">Enable or disable FrontBase warnings</phpsyntax>
-<phpsyntax function="fdf_add_doc_javascript" usage="bool fdf_add_doc_javascript(resource fdfdoc, string scriptname, string script)">Add javascript code to the fdf file</phpsyntax>
-<phpsyntax function="fdf_add_template" usage="bool fdf_add_template(resource fdfdoc, int newpage, string filename, string template, int rename)">Adds a template into the FDF document</phpsyntax>
-<phpsyntax function="fdf_close" usage="void fdf_close(resource fdfdoc)">Closes the FDF document</phpsyntax>
-<phpsyntax function="fdf_create" usage="resource fdf_create(void)">Creates a new FDF document</phpsyntax>
-<phpsyntax function="fdf_enum_values" usage="bool fdf_enum_values(resource fdfdoc, callback function [, mixed userdata])">Call a user defined function for each document value</phpsyntax>
-<phpsyntax function="fdf_errno" usage="int fdf_errno(void)">Gets error code for last operation</phpsyntax>
-<phpsyntax function="fdf_error" usage="string fdf_error([int errno])">Gets error description for error code</phpsyntax>
-<phpsyntax function="fdf_get_ap" usage="bool fdf_get_ap(resource fdfdoc, string fieldname, int face, string filename)">Gets the appearance of a field and creates a PDF document out of it.</phpsyntax>
-<phpsyntax function="fdf_get_attachment" usage="array fdf_get_attachment(resource fdfdoc, string fieldname, string savepath)">Get attached uploaded file</phpsyntax>
-<phpsyntax function="fdf_get_encoding" usage="string fdf_get_encoding(resource fdf)">Gets FDF file encoding scheme</phpsyntax>
-<phpsyntax function="fdf_get_file" usage="string fdf_get_file(resource fdfdoc)">Gets the value of /F key</phpsyntax>
-<phpsyntax function="fdf_get_flags" usage="int fdf_get_flags(resorce fdfdoc, string fieldname, int whichflags)">Gets the flags of a field</phpsyntax>
-<phpsyntax function="fdf_get_opt" usage="mixed fdf_get_opt(resource fdfdof, string fieldname [, int element])">Gets a value from the opt array of a field</phpsyntax>
-<phpsyntax function="fdf_get_status" usage="string fdf_get_status(resource fdfdoc)">Gets the value of /Status key</phpsyntax>
-<phpsyntax function="fdf_get_value" usage="string fdf_get_value(resource fdfdoc, string fieldname [, int which])">Gets the value of a field as string</phpsyntax>
-<phpsyntax function="fdf_get_version" usage="string fdf_get_version([resource fdfdoc])">Gets version number for FDF api or file</phpsyntax>
-<phpsyntax function="fdf_header" usage="void fdf_header(void)">Set FDF specific HTTP headers</phpsyntax>
-<phpsyntax function="fdf_next_field_name" usage="string fdf_next_field_name(resource fdfdoc [, string fieldname])">Gets the name of the next field name or the first field name</phpsyntax>
-<phpsyntax function="fdf_open" usage="resource fdf_open(string filename)">Opens a new FDF document</phpsyntax>
-<phpsyntax function="fdf_open_string" usage="resource fdf_open_string(string fdf_data)">Opens a new FDF document from string</phpsyntax>
-<phpsyntax function="fdf_remove_item" usage="bool fdf_remove_item(resource fdfdoc, string fieldname, int item)">Sets target frame for form</phpsyntax>
-<phpsyntax function="fdf_save" usage="bool fdf_save(resource fdfdoc [, string filename])">Writes out the FDF file</phpsyntax>
-<phpsyntax function="fdf_save_string" usage="string fdf_save_string(resource fdfdoc)">Returns the FDF file as a string</phpsyntax>
-<phpsyntax function="fdf_set_ap" usage="bool fdf_set_ap(resource fdfdoc, string fieldname, int face, string filename, int pagenr)">Sets the appearence of a field</phpsyntax>
-<phpsyntax function="fdf_set_encoding" usage="bool fdf_set_encoding(resource fdf_document, string encoding)">Sets FDF encoding (either "Shift-JIS" or "Unicode")</phpsyntax>
-<phpsyntax function="fdf_set_file" usage="bool fdf_set_file(resource fdfdoc, string filename [, string target_frame])">Sets the value of /F key</phpsyntax>
-<phpsyntax function="fdf_set_flags" usage="bool fdf_set_flags(resource fdfdoc, string fieldname, int whichflags, int newflags)">Sets flags for a field in the FDF document</phpsyntax>
-<phpsyntax function="fdf_set_javascript_action" usage="bool fdf_set_javascript_action(resource fdfdoc, string fieldname, int whichtrigger, string script)">Sets the javascript action for a field</phpsyntax>
-<phpsyntax function="fdf_set_on_import_javascript" usage="bool fdf_set_on_import_javascript(resource fdfdoc, string script [, bool before_data_import])">Adds javascript code to be executed when Acrobat opens the FDF</phpsyntax>
-<phpsyntax function="fdf_set_opt" usage="bool fdf_set_opt(resource fdfdoc, string fieldname, int element, string value, string name)">Sets a value in the opt array for a field</phpsyntax>
-<phpsyntax function="fdf_set_status" usage="bool fdf_set_status(resource fdfdoc, string status)">Sets the value of /Status key</phpsyntax>
-<phpsyntax function="fdf_set_submit_form_action" usage="bool fdf_set_submit_form_action(resource fdfdoc, string fieldname, int whichtrigger, string url, int flags)">Sets the submit form action for a field</phpsyntax>
-<phpsyntax function="fdf_set_target_frame" usage="bool fdf_set_target_frame(resource fdfdoc, string target)">Sets target frame for form</phpsyntax>
-<phpsyntax function="fdf_set_value" usage="bool fdf_set_value(resource fdfdoc, string fieldname, mixed value [, int isname])">Sets the value of a field</phpsyntax>
-<phpsyntax function="fdf_set_version" usage="bool fdf_set_version(resourece fdfdoc, string version)">Sets FDF version for a file</phpsyntax>
-<phpsyntax function="filepro" usage="bool filepro(string directory)">Read and verify the map file</phpsyntax>
-<phpsyntax function="filepro_fieldcount" usage="int filepro_fieldcount(void)">Find out how many fields are in a filePro database</phpsyntax>
-<phpsyntax function="filepro_fieldname" usage="string filepro_fieldname(int fieldnumber)">Gets the name of a field</phpsyntax>
-<phpsyntax function="filepro_fieldtype" usage="string filepro_fieldtype(int field_number)">Gets the type of a field</phpsyntax>
-<phpsyntax function="filepro_fieldwidth" usage="int filepro_fieldwidth(int field_number)">Gets the width of a field</phpsyntax>
-<phpsyntax function="filepro_retrieve" usage="string filepro_retrieve(int row_number, int field_number)">Retrieves data from a filePro database</phpsyntax>
-<phpsyntax function="filepro_rowcount" usage="int filepro_rowcount(void)">Find out how many rows are in a filePro database</phpsyntax>
-<phpsyntax function="ftp_alloc" usage="bool ftp_alloc(resource stream, int size[, &amp;response])">Attempt to allocate space on the remote FTP server</phpsyntax>
-<phpsyntax function="ftp_cdup" usage="bool ftp_cdup(resource stream)">Changes to the parent directory</phpsyntax>
-<phpsyntax function="ftp_chdir" usage="bool ftp_chdir(resource stream, string directory)">Changes directories</phpsyntax>
-<phpsyntax function="ftp_chmod" usage="int ftp_chmod(resource stream, int mode, string filename)">Sets permissions on a file</phpsyntax>
-<phpsyntax function="ftp_close" usage="bool ftp_close(resource stream)">Closes the FTP stream</phpsyntax>
-<phpsyntax function="ftp_connect" usage="resource ftp_connect(string host [, int port [, int timeout]])">Opens a FTP stream</phpsyntax>
-<phpsyntax function="ftp_delete" usage="bool ftp_delete(resource stream, string file)">Deletes a file</phpsyntax>
-<phpsyntax function="ftp_exec" usage="bool ftp_exec(resource stream, string command)">Requests execution of a program on the FTP server</phpsyntax>
-<phpsyntax function="ftp_fget" usage="bool ftp_fget(resource stream, resource fp, string remote_file, int mode[, int resumepos])">Retrieves a file from the FTP server and writes it to an open file</phpsyntax>
-<phpsyntax function="ftp_fput" usage="bool ftp_fput(resource stream, string remote_file, resource fp, int mode[, int startpos])">Stores a file from an open file to the FTP server</phpsyntax>
-<phpsyntax function="ftp_get" usage="bool ftp_get(resource stream, string local_file, string remote_file, int mode[, int resume_pos])">Retrieves a file from the FTP server and writes it to a local file</phpsyntax>
-<phpsyntax function="ftp_get_option" usage="mixed ftp_get_option(resource stream, int option)">Gets an FTP option</phpsyntax>
-<phpsyntax function="ftp_login" usage="bool ftp_login(resource stream, string username, string password)">Logs into the FTP server</phpsyntax>
-<phpsyntax function="ftp_mdtm" usage="int ftp_mdtm(resource stream, string filename)">Returns the last modification time of the file, or -1 on error</phpsyntax>
-<phpsyntax function="ftp_mkdir" usage="string ftp_mkdir(resource stream, string directory)">Creates a directory and returns the absolute path for the new directory or false on error</phpsyntax>
-<phpsyntax function="ftp_nb_continue" usage="int ftp_nb_continue(resource stream)">Continues retrieving/sending a file nbronously</phpsyntax>
-<phpsyntax function="ftp_nb_fget" usage="int ftp_nb_fget(resource stream, resource fp, string remote_file, int mode[, int resumepos])">Retrieves a file from the FTP server asynchronly and writes it to an open file</phpsyntax>
-<phpsyntax function="ftp_nb_fput" usage="int ftp_nb_fput(resource stream, string remote_file, resource fp, int mode[, int startpos])">Stores a file from an open file to the FTP server nbronly</phpsyntax>
-<phpsyntax function="ftp_nb_get" usage="int ftp_nb_get(resource stream, string local_file, string remote_file, int mode[, int resume_pos])">Retrieves a file from the FTP server nbhronly and writes it to a local file</phpsyntax>
-<phpsyntax function="ftp_nb_put" usage="int ftp_nb_put(resource stream, string remote_file, string local_file, int mode[, int startpos])">Stores a file on the FTP server</phpsyntax>
-<phpsyntax function="ftp_nlist" usage="array ftp_nlist(resource stream, string directory)">Returns an array of filenames in the given directory</phpsyntax>
-<phpsyntax function="ftp_pasv" usage="bool ftp_pasv(resource stream, bool pasv)">Turns passive mode on or off</phpsyntax>
-<phpsyntax function="ftp_put" usage="bool ftp_put(resource stream, string remote_file, string local_file, int mode[, int startpos])">Stores a file on the FTP server</phpsyntax>
-<phpsyntax function="ftp_pwd" usage="string ftp_pwd(resource stream)">Returns the present working directory</phpsyntax>
-<phpsyntax function="ftp_raw" usage="array ftp_raw(resource stream, string command)">Sends a literal command to the FTP server</phpsyntax>
-<phpsyntax function="ftp_rawlist" usage="array ftp_rawlist(resource stream, string directory [, bool recursive])">Returns a detailed listing of a directory as an array of output lines</phpsyntax>
-<phpsyntax function="ftp_rename" usage="bool ftp_rename(resource stream, string src, string dest)">Renames the given file to a new path</phpsyntax>
-<phpsyntax function="ftp_rmdir" usage="bool ftp_rmdir(resource stream, string directory)">Removes a directory</phpsyntax>
-<phpsyntax function="ftp_set_option" usage="bool ftp_set_option(resource stream, int option, mixed value)">Sets an FTP option</phpsyntax>
-<phpsyntax function="ftp_site" usage="bool ftp_site(resource stream, string cmd)">Sends a SITE command to the server</phpsyntax>
-<phpsyntax function="ftp_size" usage="int ftp_size(resource stream, string filename)">Returns the size of the file, or -1 on error</phpsyntax>
-<phpsyntax function="ftp_ssl_connect" usage="resource ftp_ssl_connect(string host [, int port [, int timeout]])">Opens a FTP-SSL stream</phpsyntax>
-<phpsyntax function="ftp_systype" usage="string ftp_systype(resource stream)">Returns the system type identifier</phpsyntax>
-<phpsyntax function="gd_info" usage="array gd_info()"></phpsyntax>
-<phpsyntax function="imagealphablending" usage="bool imagealphablending(resource im, bool on)">Turn alpha blending mode on or off for the given image</phpsyntax>
-<phpsyntax function="imageantialias" usage="bool imageantialias(resource im, bool on)">Should antialiased functions used or not</phpsyntax>
-<phpsyntax function="imagearc" usage="bool imagearc(resource im, int cx, int cy, int w, int h, int s, int e, int col)">Draw a partial ellipse</phpsyntax>
-<phpsyntax function="imagechar" usage="bool imagechar(resource im, int font, int x, int y, string c, int col)">Draw a character</phpsyntax>
-<phpsyntax function="imagecharup" usage="bool imagecharup(resource im, int font, int x, int y, string c, int col)">Draw a character rotated 90 degrees counter-clockwise</phpsyntax>
-<phpsyntax function="imagecolorallocate" usage="int imagecolorallocate(resource im, int red, int green, int blue)">Allocate a color for an image</phpsyntax>
-<phpsyntax function="imagecolorallocatealpha" usage="int imagecolorallocatealpha(resource im, int red, int green, int blue, int alpha)">Allocate a color with an alpha level.  Works for true color and palette based images</phpsyntax>
-<phpsyntax function="imagecolorat" usage="int imagecolorat(resource im, int x, int y)">Get the index of the color of a pixel</phpsyntax>
-<phpsyntax function="imagecolorclosest" usage="int imagecolorclosest(resource im, int red, int green, int blue)">Get the index of the closest color to the specified color</phpsyntax>
-<phpsyntax function="imagecolorclosestalpha" usage="int imagecolorclosestalpha(resource im, int red, int green, int blue, int alpha)">Find the closest matching colour with alpha transparency</phpsyntax>
-<phpsyntax function="imagecolorclosesthwb" usage="int imagecolorclosesthwb(resource im, int red, int green, int blue)">Get the index of the color which has the hue, white and blackness nearest to the given color</phpsyntax>
-<phpsyntax function="imagecolordeallocate" usage="bool imagecolordeallocate(resource im, int index)">De-allocate a color for an image</phpsyntax>
-<phpsyntax function="imagecolorexact" usage="int imagecolorexact(resource im, int red, int green, int blue)">Get the index of the specified color</phpsyntax>
-<phpsyntax function="imagecolorexactalpha" usage="int imagecolorexactalpha(resource im, int red, int green, int blue, int alpha)">Find exact match for colour with transparency</phpsyntax>
-<phpsyntax function="imagecolormatch" usage="bool imagecolormatch(resource im1, resource im2)">Makes the colors of the palette version of an image more closely match the true color version</phpsyntax>
-<phpsyntax function="imagecolorresolve" usage="int imagecolorresolve(resource im, int red, int green, int blue)">Get the index of the specified color or its closest possible alternative</phpsyntax>
-<phpsyntax function="imagecolorresolvealpha" usage="int imagecolorresolvealpha(resource im, int red, int green, int blue, int alpha)">Resolve/Allocate a colour with an alpha level.  Works for true colour and palette based images</phpsyntax>
-<phpsyntax function="imagecolorset" usage="void imagecolorset(resource im, int col, int red, int green, int blue)">Set the color for the specified palette index</phpsyntax>
-<phpsyntax function="imagecolorsforindex" usage="array imagecolorsforindex(resource im, int col)">Get the colors for an index</phpsyntax>
-<phpsyntax function="imagecolorstotal" usage="int imagecolorstotal(resource im)">Find out the number of colors in an image's palette</phpsyntax>
-<phpsyntax function="imagecolortransparent" usage="int imagecolortransparent(resource im [, int col])">Define a color as transparent</phpsyntax>
-<phpsyntax function="imagecopy" usage="bool imagecopy(resource dst_im, resource src_im, int dst_x, int dst_y, int src_x, int src_y, int src_w, int src_h)">Copy part of an image</phpsyntax>
-<phpsyntax function="imagecopymerge" usage="bool imagecopymerge(resource src_im, resource dst_im, int dst_x, int dst_y, int src_x, int src_y, int src_w, int src_h, int pct)">Merge one part of an image with another</phpsyntax>
-<phpsyntax function="imagecopymergegray" usage="bool imagecopymergegray(resource src_im, resource dst_im, int dst_x, int dst_y, int src_x, int src_y, int src_w, int src_h, int pct)">Merge one part of an image with another</phpsyntax>
-<phpsyntax function="imagecopyresampled" usage="bool imagecopyresampled(resource dst_im, resource src_im, int dst_x, int dst_y, int src_x, int src_y, int dst_w, int dst_h, int src_w, int src_h)">Copy and resize part of an image using resampling to help ensure clarity</phpsyntax>
-<phpsyntax function="imagecopyresized" usage="bool imagecopyresized(resource dst_im, resource src_im, int dst_x, int dst_y, int src_x, int src_y, int dst_w, int dst_h, int src_w, int src_h)">Copy and resize part of an image</phpsyntax>
-<phpsyntax function="imagecreate" usage="resource imagecreate(int x_size, int y_size)">Create a new image</phpsyntax>
-<phpsyntax function="imagecreatefromgd" usage="resource imagecreatefromgd(string filename)">Create a new image from GD file or URL</phpsyntax>
-<phpsyntax function="imagecreatefromgif" usage="resource imagecreatefromgif(string filename)">Create a new image from GIF file or URL</phpsyntax>
-<phpsyntax function="imagecreatefromjpeg" usage="resource imagecreatefromjpeg(string filename)">Create a new image from JPEG file or URL</phpsyntax>
-<phpsyntax function="imagecreatefrompng" usage="resource imagecreatefrompng(string filename)">Create a new image from PNG file or URL</phpsyntax>
-<phpsyntax function="imagecreatefromstring" usage="resource imagecreatefromstring(string image)">Create a new image from the image stream in the string</phpsyntax>
-<phpsyntax function="imagecreatefromwbmp" usage="resource imagecreatefromwbmp(string filename)">Create a new image from WBMP file or URL</phpsyntax>
-<phpsyntax function="imagecreatefromxbm" usage="resource imagecreatefromxbm(string filename)">Create a new image from XBM file or URL</phpsyntax>
-<phpsyntax function="imagecreatefromxpm" usage="resource imagecreatefromxpm(string filename)">Create a new image from XPM file or URL</phpsyntax>
-<phpsyntax function="imagecreatetruecolor" usage="resource imagecreatetruecolor(int x_size, int y_size)">Create a new true color image</phpsyntax>
-<phpsyntax function="imagedashedline" usage="bool imagedashedline(resource im, int x1, int y1, int x2, int y2, int col)">Draw a dashed line</phpsyntax>
-<phpsyntax function="imagedestroy" usage="bool imagedestroy(resource im)">Destroy an image</phpsyntax>
-<phpsyntax function="imageellipse" usage="bool imageellipse(resource im, int cx, int cy, int w, int h, int color)">Draw an ellipse</phpsyntax>
-<phpsyntax function="imagefill" usage="bool imagefill(resource im, int x, int y, int col)">Flood fill</phpsyntax>
-<phpsyntax function="imagefilledarc" usage="bool imagefilledarc(resource im, int cx, int cy, int w, int h, int s, int e, int col, int style)">Draw a filled partial ellipse</phpsyntax>
-<phpsyntax function="imagefilledellipse" usage="bool imagefilledellipse(resource im, int cx, int cy, int w, int h, int color)">Draw an ellipse</phpsyntax>
-<phpsyntax function="imagefilledpolygon" usage="bool imagefilledpolygon(resource im, array point, int num_points, int col)">Draw a filled polygon</phpsyntax>
-<phpsyntax function="imagefilledrectangle" usage="bool imagefilledrectangle(resource im, int x1, int y1, int x2, int y2, int col)">Draw a filled rectangle</phpsyntax>
-<phpsyntax function="imagefilltoborder" usage="bool imagefilltoborder(resource im, int x, int y, int border, int col)">Flood fill to specific color</phpsyntax>
-<phpsyntax function="imagefilter" usage="bool imagefilter(resource src_im, int filtertype, [args] )">Applies Filter an image using a custom angle</phpsyntax>
-<phpsyntax function="imagefontheight" usage="int imagefontheight(int font)">Get font height</phpsyntax>
-<phpsyntax function="imagefontwidth" usage="int imagefontwidth(int font)">Get font width</phpsyntax>
-<phpsyntax function="imageftbbox" usage="array imageftbbox(int size, int angle, string font_file, string text[, array extrainfo])">Give the bounding box of a text using fonts via freetype2</phpsyntax>
-<phpsyntax function="imagefttext" usage="array imagefttext(resource im, int size, int angle, int x, int y, int col, string font_file, string text, [array extrainfo])">Write text to the image using fonts via freetype2</phpsyntax>
-<phpsyntax function="imagegammacorrect" usage="bool imagegammacorrect(resource im, float inputgamma, float outputgamma)">Apply a gamma correction to a GD image</phpsyntax>
-<phpsyntax function="imagegd" usage="bool imagegd(resource im [, string filename])">Output GD image to browser or file</phpsyntax>
-<phpsyntax function="imagegif" usage="bool imagegif(resource im [, string filename])">Output GIF image to browser or file</phpsyntax>
-<phpsyntax function="imageinterlace" usage="int imageinterlace(resource im [, int interlace])">Enable or disable interlace</phpsyntax>
-<phpsyntax function="imageistruecolor" usage="bool imageistruecolor(resource im)">return true if the image uses truecolor</phpsyntax>
-<phpsyntax function="imagejpeg" usage="bool imagejpeg(resource im [, string filename [, int quality]])">Output JPEG image to browser or file</phpsyntax>
-<phpsyntax function="imagelayereffect" usage="bool imagelayereffect(resource im, int effect)">Set the alpha blending flag to use the bundled libgd layering effects</phpsyntax>
-<phpsyntax function="imageline" usage="bool imageline(resource im, int x1, int y1, int x2, int y2, int col)">Draw a line</phpsyntax>
-<phpsyntax function="imageloadfont" usage="int imageloadfont(string filename)">Load a new font</phpsyntax>
-<phpsyntax function="imagepalettecopy" usage="void imagepalettecopy(resource dst, resource src)">Copy the palette from the src image onto the dst image</phpsyntax>
-<phpsyntax function="imagepng" usage="bool imagepng(resource im [, string filename])">Output PNG image to browser or file</phpsyntax>
-<phpsyntax function="imagepolygon" usage="bool imagepolygon(resource im, array point, int num_points, int col)">Draw a polygon</phpsyntax>
-<phpsyntax function="imagepsbbox" usage="array imagepsbbox(string text, resource font, int size [, int space, int tightness, int angle])">Return the bounding box needed by a string if rasterized</phpsyntax>
-<phpsyntax function="imagepscopyfont" usage="int imagepscopyfont(int font_index)">Make a copy of a font for purposes like extending or reenconding</phpsyntax>
-<phpsyntax function="imagepsencodefont" usage="bool imagepsencodefont(resource font_index, string filename)">To change a fonts character encoding vector</phpsyntax>
-<phpsyntax function="imagepsextendfont" usage="bool imagepsextendfont(resource font_index, float extend)">Extend or or condense (if extend &lt; 1) a font</phpsyntax>
-<phpsyntax function="imagepsfreefont" usage="bool imagepsfreefont(resource font_index)">Free memory used by a font</phpsyntax>
-<phpsyntax function="imagepsloadfont" usage="resource imagepsloadfont(string pathname)">Load a new font from specified file</phpsyntax>
-<phpsyntax function="imagepsslantfont" usage="bool imagepsslantfont(resource font_index, float slant)">Slant a font</phpsyntax>
-<phpsyntax function="imagepstext" usage="array imagepstext(resource image, string text, resource font, int size, int xcoord, int ycoord [, int space, int tightness, float angle, int antialias])">Rasterize a string over an image</phpsyntax>
-<phpsyntax function="imagerectangle" usage="bool imagerectangle(resource im, int x1, int y1, int x2, int y2, int col)">Draw a rectangle</phpsyntax>
-<phpsyntax function="imagerotate" usage="resource imagerotate(resource src_im, float angle, int bgdcolor)">Rotate an image using a custom angle</phpsyntax>
-<phpsyntax function="imagesavealpha" usage="bool imagesavealpha(resource im, bool on)">Include alpha channel to a saved image</phpsyntax>
-<phpsyntax function="imagesetbrush" usage="bool imagesetbrush(resource image, resource brush)">Set the brush image to $brush when filling $image with the "IMG_COLOR_BRUSHED" color</phpsyntax>
-<phpsyntax function="imagesetpixel" usage="bool imagesetpixel(resource im, int x, int y, int col)">Set a single pixel</phpsyntax>
-<phpsyntax function="imagesetstyle" usage="bool imagesetstyle(resource im, array styles)">Set the line drawing styles for use with imageline and IMG_COLOR_STYLED.</phpsyntax>
-<phpsyntax function="imagesetthickness" usage="bool imagesetthickness(resource im, int thickness)">Set line thickness for drawing lines, ellipses, rectangles, polygons etc.</phpsyntax>
-<phpsyntax function="imagesettile" usage="bool imagesettile(resource image, resource tile)">Set the tile image to $tile when filling $image with the "IMG_COLOR_TILED" color</phpsyntax>
-<phpsyntax function="imagestring" usage="bool imagestring(resource im, int font, int x, int y, string str, int col)">Draw a string horizontally</phpsyntax>
-<phpsyntax function="imagestringup" usage="bool imagestringup(resource im, int font, int x, int y, string str, int col)">Draw a string vertically - rotated 90 degrees counter-clockwise</phpsyntax>
-<phpsyntax function="imagesx" usage="int imagesx(resource im)">Get image width</phpsyntax>
-<phpsyntax function="imagesy" usage="int imagesy(resource im)">Get image height</phpsyntax>
-<phpsyntax function="imagetruecolortopalette" usage="void imagetruecolortopalette(resource im, bool ditherFlag, int colorsWanted)">Convert a true colour image to a palette based image with a number of colours, optionally using dithering.</phpsyntax>
-<phpsyntax function="imagettfbbox" usage="array imagettfbbox(int size, int angle, string font_file, string text)">Give the bounding box of a text using TrueType fonts</phpsyntax>
-<phpsyntax function="imagettftext" usage="array imagettftext(resource im, int size, int angle, int x, int y, int col, string font_file, string text)">Write text to the image using a TrueType font</phpsyntax>
-<phpsyntax function="imagetypes" usage="int imagetypes(void)">Return the types of images supported in a bitfield - 1=GIF, 2=JPEG, 4=PNG, 8=WBMP, 16=XPM</phpsyntax>
-<phpsyntax function="imagewbmp" usage="bool imagewbmp(resource im [, string filename, [, int foreground]])">Output WBMP image to browser or file</phpsyntax>
-<phpsyntax function="imagexbm" usage="int imagexbm(int im, string filename [, int foreground])">Output XBM image to browser or file</phpsyntax>
-<phpsyntax function="bindtextdomain" usage="string bindtextdomain(string domain_name, string dir)">Bind to the text domain domain_name, looking for translations in dir. Returns the current domain</phpsyntax>
-<phpsyntax function="dcgettext" usage="string dcgettext(string domain_name, string msgid, long category)">Return the translation of msgid for domain_name and category, or msgid unaltered if a translation does not exist</phpsyntax>
-<phpsyntax function="dgettext" usage="string dgettext(string domain_name, string msgid)">Return the translation of msgid for domain_name, or msgid unaltered if a translation does not exist</phpsyntax>
-<phpsyntax function="gettext" usage="string gettext(string msgid)">Return the translation of msgid for the current domain, or msgid unaltered if a translation does not exist</phpsyntax>
-<phpsyntax function="ngettext" usage="string ngettext(string MSGID1, string MSGID2, int N)">Plural version of gettext()</phpsyntax>
-<phpsyntax function="textdomain" usage="string textdomain(string domain)">Set the textdomain to "domain". Returns the current domain</phpsyntax>
-<phpsyntax function="gmp_abs" usage="resource gmp_abs(resource a)">Calculates absolute value</phpsyntax>
-<phpsyntax function="gmp_add" usage="resource gmp_add(resource a, resource b)">Add a and b</phpsyntax>
-<phpsyntax function="gmp_and" usage="resource gmp_and(resource a, resource b)">Calculates logical AND of a and b</phpsyntax>
-<phpsyntax function="gmp_clrbit" usage="void gmp_clrbit(resource &amp;a, int index)">Clears bit in a</phpsyntax>
-<phpsyntax function="gmp_cmp" usage="int gmp_cmp(resource a, resource b)">Compares two numbers</phpsyntax>
-<phpsyntax function="gmp_com" usage="resource gmp_com(resource a)">Calculates one's complement of a</phpsyntax>
-<phpsyntax function="gmp_div_q" usage="resource gmp_div_q(resource a, resource b [, int round])">Divide a by b, returns quotient only</phpsyntax>
-<phpsyntax function="gmp_div_qr" usage="array gmp_div_qr(resource a, resource b [, int round])">Divide a by b, returns quotient and reminder</phpsyntax>
-<phpsyntax function="gmp_div_r" usage="resource gmp_div_r(resource a, resource b [, int round])">Divide a by b, returns reminder only</phpsyntax>
-<phpsyntax function="gmp_divexact" usage="resource gmp_divexact(resource a, resource b)">Divide a by b using exact division algorithm</phpsyntax>
-<phpsyntax function="gmp_fact" usage="resource gmp_fact(int a)">Calculates factorial function</phpsyntax>
-<phpsyntax function="gmp_gcd" usage="resource gmp_gcd(resource a, resource b)">Computes greatest common denominator (gcd) of a and b</phpsyntax>
-<phpsyntax function="gmp_gcdext" usage="array gmp_gcdext(resource a, resource b)">Computes G, S, and T, such that AS      BT = G = `gcd' (A, B)</phpsyntax>
-<phpsyntax function="gmp_hamdist" usage="int gmp_hamdist(resource a, resource b)">Calculates hamming distance between a and b</phpsyntax>
-<phpsyntax function="gmp_init" usage="resource gmp_init(mixed number [, int base])">Initializes GMP number</phpsyntax>
-<phpsyntax function="gmp_intval" usage="int gmp_intval(resource gmpnumber)">Gets signed long value of GMP number</phpsyntax>
-<phpsyntax function="gmp_invert" usage="resource gmp_invert(resource a, resource b)">Computes the inverse of a modulo b</phpsyntax>
-<phpsyntax function="gmp_jacobi" usage="int gmp_jacobi(resource a, resource b)">Computes Jacobi symbol</phpsyntax>
-<phpsyntax function="gmp_legendre" usage="int gmp_legendre(resource a, resource b)">Computes Legendre symbol</phpsyntax>
-<phpsyntax function="gmp_mod" usage="resource gmp_mod(resource a, resource b)">Computes a modulo b</phpsyntax>
-<phpsyntax function="gmp_mul" usage="resource gmp_mul(resource a, resource b)">Multiply a and b</phpsyntax>
-<phpsyntax function="gmp_neg" usage="resource gmp_neg(resource a)">Negates a number</phpsyntax>
-<phpsyntax function="gmp_or" usage="resource gmp_or(resource a, resource b)">Calculates logical OR of a and b</phpsyntax>
-<phpsyntax function="gmp_perfect_square" usage="bool gmp_perfect_square(resource a)">Checks if a is an exact square</phpsyntax>
-<phpsyntax function="gmp_popcount" usage="int gmp_popcount(resource a)">Calculates the population count of a</phpsyntax>
-<phpsyntax function="gmp_pow" usage="resource gmp_pow(resource base, int exp)">Raise base to power exp</phpsyntax>
-<phpsyntax function="gmp_powm" usage="resource gmp_powm(resource base, resource exp, resource mod)">Raise base to power exp and take result modulo mod</phpsyntax>
-<phpsyntax function="gmp_prob_prime" usage="int gmp_prob_prime(resource a[, int reps])">Checks if a is "probably prime"</phpsyntax>
-<phpsyntax function="gmp_random" usage="resource gmp_random([int limiter])">Gets random number</phpsyntax>
-<phpsyntax function="gmp_setbit" usage="void gmp_setbit(resource &amp;a, int index[, bool set_clear])">Sets or clear bit in a</phpsyntax>
-<phpsyntax function="gmp_sign" usage="int gmp_sign(resource a)">Gets the sign of the number</phpsyntax>
-<phpsyntax function="gmp_sqrt" usage="resource gmp_sqrt(resource a)">Takes integer part of square root of a</phpsyntax>
-<phpsyntax function="gmp_sqrtrem" usage="array gmp_sqrtrem(resource a)">Square root with remainder</phpsyntax>
-<phpsyntax function="gmp_strval" usage="string gmp_strval(resource gmpnumber [, int base])">Gets string representation of GMP number</phpsyntax>
-<phpsyntax function="gmp_sub" usage="resource gmp_sub(resource a, resource b)">Subtract b from a</phpsyntax>
-<phpsyntax function="gmp_xor" usage="resource gmp_xor(resource a, resource b)">Calculates logical exclusive OR of a and b</phpsyntax>
-<phpsyntax function="iconv" usage="string iconv(string in_charset, string out_charset, string str)">Returns str converted to the out_charset character set</phpsyntax>
-<phpsyntax function="iconv_get_encoding" usage="mixed iconv_get_encoding([string type])">Get internal encoding and output encoding for ob_iconv_handler()</phpsyntax>
-<phpsyntax function="iconv_mime_decode" usage="string iconv_mime_decode(string encoded_string [, int mode, string charset])">Decodes a mime header field</phpsyntax>
-<phpsyntax function="iconv_mime_decode_headers" usage="array iconv_mime_decode_headers(string headers [, int mode, string charset])">Decodes multiple mime header fields</phpsyntax>
-<phpsyntax function="iconv_mime_encode" usage="string iconv_mime_encode(string field_name, string field_value, [, array preference])">Composes a mime header field with field_name and field_value in a specified scheme</phpsyntax>
-<phpsyntax function="iconv_set_encoding" usage="bool iconv_set_encoding(string type, string charset)">Sets internal encoding and output encoding for ob_iconv_handler()</phpsyntax>
-<phpsyntax function="iconv_strlen" usage="int iconv_strlen(string str [, string charset])">Returns the character count of str</phpsyntax>
-<phpsyntax function="iconv_strpos" usage="int iconv_strpos(string haystack, string needle, int offset [, string charset])">Finds position of first occurrence of needle within part of haystack beginning with offset</phpsyntax>
-<phpsyntax function="iconv_strrpos" usage="int iconv_strrpos(string haystack, string needle [, string charset])">Finds position of last occurrence of needle within part of haystack beginning with offset</phpsyntax>
-<phpsyntax function="iconv_substr" usage="string iconv_substr(string str, int offset, [int length, string charset])">Returns specified part of a string</phpsyntax>
-<phpsyntax function="ob_iconv_handler" usage="string ob_iconv_handler(string contents, int status)">Returns str in output buffer converted to the iconv.output_encoding character set</phpsyntax>
-<phpsyntax function="imap_alerts" usage="array imap_alerts(void)">Returns an array of all IMAP alerts that have been generated since the last page load or since the last imap_alerts() call, whichever came last. The alert stack is cleared after imap_alerts() is called.</phpsyntax>
-<phpsyntax function="imap_append" usage="bool imap_append(resource stream_id, string folder, string message [, string options])">Append a new message to a specified mailbox</phpsyntax>
-<phpsyntax function="imap_binary" usage="string imap_binary(string text)">Convert an 8bit string to a base64 string</phpsyntax>
-<phpsyntax function="imap_body" usage="string imap_body(resource stream_id, int msg_no [, int options])">Read the message body</phpsyntax>
-<phpsyntax function="imap_bodystruct" usage="object imap_bodystruct(resource stream_id, int msg_no, int section)">Read the structure of a specified body section of a specific message</phpsyntax>
-<phpsyntax function="imap_check" usage="object imap_check(resource stream_id)">Get mailbox properties</phpsyntax>
-<phpsyntax function="imap_clearflag_full" usage="bool imap_clearflag_full(resource stream_id, string sequence, string flag [, int options])">Clears flags on messages</phpsyntax>
-<phpsyntax function="imap_close" usage="bool imap_close(resource stream_id [, int options])">Close an IMAP stream</phpsyntax>
-<phpsyntax function="imap_createmailbox" usage="bool imap_createmailbox(resource stream_id, string mailbox)">Create a new mailbox</phpsyntax>
-<phpsyntax function="imap_delete" usage="bool imap_delete(resource stream_id, int msg_no [, int options])">Mark a message for deletion</phpsyntax>
-<phpsyntax function="imap_deletemailbox" usage="bool imap_deletemailbox(resource stream_id, string mailbox)">Delete a mailbox</phpsyntax>
-<phpsyntax function="imap_errors" usage="array imap_errors(void)">Returns an array of all IMAP errors generated since the last page load, or since the last imap_errors() call, whichever came last. The error stack is cleared after imap_errors() is called.</phpsyntax>
-<phpsyntax function="imap_expunge" usage="bool imap_expunge(resource stream_id)">Permanently delete all messages marked for deletion</phpsyntax>
-<phpsyntax function="imap_fetch_overview" usage="array imap_fetch_overview(resource stream_id, int msg_no [, int options])">Read an overview of the information in the headers of the given message sequence</phpsyntax>
-<phpsyntax function="imap_fetchbody" usage="string imap_fetchbody(resource stream_id, int msg_no, int section [, int options])">Get a specific body section</phpsyntax>
-<phpsyntax function="imap_fetchheader" usage="string imap_fetchheader(resource stream_id, int msg_no [, int options])">Get the full unfiltered header for a message</phpsyntax>
-<phpsyntax function="imap_fetchstructure" usage="object imap_fetchstructure(resource stream_id, int msg_no [, int options])">Read the full structure of a message</phpsyntax>
-<phpsyntax function="imap_get_quota" usage="array imap_get_quota(resource stream_id, string qroot)">Returns the quota set to the mailbox account qroot</phpsyntax>
-<phpsyntax function="imap_get_quotaroot" usage="array imap_get_quotaroot(resource stream_id, string mbox)">Returns the quota set to the mailbox account mbox</phpsyntax>
-<phpsyntax function="imap_getacl" usage="array imap_getacl(resource stream_id, string mailbox)">Gets the ACL for a given mailbox</phpsyntax>
-<phpsyntax function="imap_getmailboxes" usage="array imap_getmailboxes(resource stream_id, string ref, string pattern)">Reads the list of mailboxes and returns a full array of objects containing name, attributes, and delimiter</phpsyntax>
-<phpsyntax function="imap_getsubscribed" usage="array imap_getsubscribed(resource stream_id, string ref, string pattern)">Return a list of subscribed mailboxes, in the same format as imap_getmailboxes()</phpsyntax>
-<phpsyntax function="imap_headerinfo" usage="object imap_headerinfo(resource stream_id, int msg_no [, int from_length [, int subject_length [, string default_host]]])">Read the headers of the message</phpsyntax>
-<phpsyntax function="imap_headers" usage="array imap_headers(resource stream_id)">Returns headers for all messages in a mailbox</phpsyntax>
-<phpsyntax function="imap_last_error" usage="string imap_last_error(void)">Returns the last error that was generated by an IMAP function. The error stack is NOT cleared after this call.</phpsyntax>
-<phpsyntax function="imap_list" usage="array imap_list(resource stream_id, string ref, string pattern)">Read the list of mailboxes</phpsyntax>
-<phpsyntax function="imap_lsub" usage="array imap_lsub(resource stream_id, string ref, string pattern)">Return a list of subscribed mailboxes</phpsyntax>
-<phpsyntax function="imap_mail" usage="bool imap_mail(string to, string subject, string message [, string additional_headers [, string cc [, string bcc [, string rpath]]]])">Send an email message</phpsyntax>
-<phpsyntax function="imap_mail_compose" usage="string imap_mail_compose(array envelope, array body)">Create a MIME message based on given envelope and body sections</phpsyntax>
-<phpsyntax function="imap_mail_copy" usage="bool imap_mail_copy(resource stream_id, int msg_no, string mailbox [, int options])">Copy specified message to a mailbox</phpsyntax>
-<phpsyntax function="imap_mail_move" usage="bool imap_mail_move(resource stream_id, int msg_no, string mailbox [, int options])">Move specified message to a mailbox</phpsyntax>
-<phpsyntax function="imap_mailboxmsginfo" usage="object imap_mailboxmsginfo(resource stream_id)">Returns info about the current mailbox</phpsyntax>
-<phpsyntax function="imap_mime_header_decode" usage="array imap_mime_header_decode(string str)">Decode mime header element in accordance with RFC 2047 and return array of objects containing 'charset' encoding and decoded 'text'</phpsyntax>
-<phpsyntax function="imap_msgno" usage="int imap_msgno(resource stream_id, int unique_msg_id)">Get the sequence number associated with a UID</phpsyntax>
-<phpsyntax function="imap_num_msg" usage="int imap_num_msg(resource stream_id)">Gives the number of messages in the current mailbox</phpsyntax>
-<phpsyntax function="imap_num_recent" usage="int imap_num_recent(resource stream_id)">Gives the number of recent messages in current mailbox</phpsyntax>
-<phpsyntax function="imap_open" usage="resource imap_open(string mailbox, string user, string password [, int options])">Open an IMAP stream to a mailbox</phpsyntax>
-<phpsyntax function="imap_ping" usage="bool imap_ping(resource stream_id)">Check if the IMAP stream is still active</phpsyntax>
-<phpsyntax function="imap_qprint" usage="string imap_qprint(string text)">Convert a quoted-printable string to an 8-bit string</phpsyntax>
-<phpsyntax function="imap_renamemailbox" usage="bool imap_renamemailbox(resource stream_id, string old_name, string new_name)">Rename a mailbox</phpsyntax>
-<phpsyntax function="imap_reopen" usage="bool imap_reopen(resource stream_id, string mailbox [, int options])">Reopen an IMAP stream to a new mailbox</phpsyntax>
-<phpsyntax function="imap_scan" usage="array imap_scan(resource stream_id, string ref, string pattern, string content)">Read list of mailboxes containing a certain string</phpsyntax>
-<phpsyntax function="imap_search" usage="array imap_search(resource stream_id, string criteria [, int options [, string charset]])">Return a list of messages matching the given criteria</phpsyntax>
-<phpsyntax function="imap_set_quota" usage="bool imap_set_quota(resource stream_id, string qroot, int mailbox_size)">Will set the quota for qroot mailbox</phpsyntax>
-<phpsyntax function="imap_setacl" usage="bool imap_setacl(resource stream_id, string mailbox, string id, string rights)">Sets the ACL for a given mailbox</phpsyntax>
-<phpsyntax function="imap_setflag_full" usage="bool imap_setflag_full(resource stream_id, string sequence, string flag [, int options])">Sets flags on messages</phpsyntax>
-<phpsyntax function="imap_sort" usage="array imap_sort(resource stream_id, int criteria, int reverse [, int options [, string search_criteria [, string charset]]])">Sort an array of message headers, optionally including only messages that meet specified criteria.</phpsyntax>
-<phpsyntax function="imap_status" usage="object imap_status(resource stream_id, string mailbox, int options)">Get status info from a mailbox</phpsyntax>
-<phpsyntax function="imap_subscribe" usage="bool imap_subscribe(resource stream_id, string mailbox)">Subscribe to a mailbox</phpsyntax>
-<phpsyntax function="imap_thread" usage="array imap_thread(resource stream_id [, int options])">Return threaded by REFERENCES tree</phpsyntax>
-<phpsyntax function="imap_timeout" usage="mixed imap_timeout(int timeout_type [, int timeout])">Set or fetch imap timeout</phpsyntax>
-<phpsyntax function="imap_uid" usage="int imap_uid(resource stream_id, int msg_no)">Get the unique message id associated with a standard sequential message number</phpsyntax>
-<phpsyntax function="imap_undelete" usage="bool imap_undelete(resource stream_id, int msg_no)">Remove the delete flag from a message</phpsyntax>
-<phpsyntax function="imap_unsubscribe" usage="bool imap_unsubscribe(resource stream_id, string mailbox)">Unsubscribe from a mailbox</phpsyntax>
-<phpsyntax function="ifx_affected_rows" usage="int ifx_affected_rows(resource resultid)">Returns the number of rows affected by query identified by resultid</phpsyntax>
-<phpsyntax function="ifx_blobinfile_mode" usage="bool ifx_blobinfile_mode(int mode)">Sets the default blob-mode for all select-queries</phpsyntax>
-<phpsyntax function="ifx_byteasvarchar" usage="bool ifx_byteasvarchar(int mode)">Sets the default byte-mode for all select-queries</phpsyntax>
-<phpsyntax function="ifx_close" usage="bool ifx_close([resource connid])">Close informix connection</phpsyntax>
-<phpsyntax function="ifx_connect" usage="resource ifx_connect([string database [, string userid [, string password]]])">Connects to database using userid/password, returns connection id</phpsyntax>
-<phpsyntax function="ifx_copy_blob" usage="int ifx_copy_blob(int bid)">Duplicates the given blob-object</phpsyntax>
-<phpsyntax function="ifx_create_blob" usage="int ifx_create_blob(int type, int mode, string param)">Creates a blob-object</phpsyntax>
-<phpsyntax function="ifx_create_char" usage="int ifx_create_char(string param)">Creates a char-object</phpsyntax>
-<phpsyntax function="ifx_do" usage="bool ifx_do(resource resultid)">Executes a previously prepared query or opens a cursor for it</phpsyntax> 
-<phpsyntax function="ifx_error" usage="string ifx_error([resource connection_id])">Returns the Informix error codes (SQLSTATE &amp; SQLCODE)</phpsyntax>
-<phpsyntax function="ifx_errormsg" usage="string ifx_errormsg([int errorcode])">Returns the Informix errormessage associated with</phpsyntax>
-<phpsyntax function="ifx_fetch_row" usage="array ifx_fetch_row(resource resultid [, mixed position])">Fetches the next row or &lt;position&gt; row if using a scroll cursor</phpsyntax>
-<phpsyntax function="ifx_fieldproperties" usage="array ifx_fieldproperties(resource resultid)">Returns an associative for query &lt;resultid&gt; array with fieldnames as key</phpsyntax>
-<phpsyntax function="ifx_fieldtypes" usage="array ifx_fieldtypes(resource resultid)">Returns an associative array with fieldnames as key for query &lt;resultid&gt;</phpsyntax>
-<phpsyntax function="ifx_free_blob" usage="int ifx_free_blob(int bid)">Deletes the blob-object</phpsyntax>
-<phpsyntax function="ifx_free_char" usage="bool ifx_free_char(int bid)">Deletes the char-object</phpsyntax>
-<phpsyntax function="ifx_free_result" usage="bool ifx_free_result(resource resultid)">Releases resources for query associated with resultid</phpsyntax>
-<phpsyntax function="ifx_get_blob" usage="string ifx_get_blob(int bid)">Returns the content of the blob-object</phpsyntax>
-<phpsyntax function="ifx_get_char" usage="string ifx_get_char(int bid)">Returns the content of the char-object</phpsyntax>
-<phpsyntax function="ifx_getsqlca" usage="array ifx_getsqlca(resource resultid)">Returns the sqlerrd[] fields of the sqlca struct for query resultid</phpsyntax>
-<phpsyntax function="ifx_htmltbl_result" usage="int ifx_htmltbl_result(resource resultid [, string htmltableoptions])">Formats all rows of the resultid query into a html table</phpsyntax>
-<phpsyntax function="ifx_nullformat" usage="bool ifx_nullformat(int mode)">Sets the default return value of a NULL-value on a fetch-row</phpsyntax>
-<phpsyntax function="ifx_num_fields" usage="int ifx_num_fields(resource resultid)">Returns the number of columns in query resultid</phpsyntax> 
-<phpsyntax function="ifx_num_rows" usage="int ifx_num_rows(resource resultid)">Returns the number of rows already fetched for query identified by resultid</phpsyntax>
-<phpsyntax function="ifx_pconnect" usage="resource ifx_pconnect([string database [, string userid [, string password]]])">Connects to database using userid/password, returns connection id</phpsyntax>
-<phpsyntax function="ifx_prepare" usage="resource ifx_prepare(string query, resource connid [, int cursortype] [, array idarray])">Prepare a query on a given connection</phpsyntax>
-<phpsyntax function="ifx_query" usage="resource ifx_query(string query, resource connid [, int cursortype] [, array idarray])">Perform a query on a given connection</phpsyntax>
-<phpsyntax function="ifx_textasvarchar" usage="bool ifx_textasvarchar(int mode)">Sets the default text-mode for all select-queries</phpsyntax>
-<phpsyntax function="ifx_update_blob" usage="int ifx_update_blob(int bid, string content)">Updates the content of the blob-object</phpsyntax>
-<phpsyntax function="ifx_update_char" usage="bool ifx_update_char(int bid, string content)">Updates the content of the char-object</phpsyntax>
-<phpsyntax function="ifxus_close_slob" usage="bool ifxus_close_slob(int bid)">Deletes the slob-object</phpsyntax>
-<phpsyntax function="ifxus_create_slob" usage="int ifxus_create_slob(int mode)">Creates a slob-object and opens it</phpsyntax>
-<phpsyntax function="ifxus_free_slob" usage="bool ifxus_free_slob(int bid)">Deletes the slob-object</phpsyntax>
-<phpsyntax function="ifxus_open_slob" usage="int ifxus_open_slob(int bid, int mode)">Opens an slob-object</phpsyntax>
-<phpsyntax function="ifxus_read_slob" usage="string ifxus_read_slob(int bid, int nbytes)">Reads nbytes of the slob-object</phpsyntax>
-<phpsyntax function="ifxus_seek_slob" usage="int ifxus_seek_slob(int bid, int mode, long offset)">Sets the current file or seek position of an open slob-object</phpsyntax>
-<phpsyntax function="ifxus_tell_slob" usage="int ifxus_tell_slob(int bid)">Returns the current file or seek position of an open slob-object</phpsyntax>
-<phpsyntax function="ifxus_write_slob" usage="int ifxus_write_slob(int bid, string content)">Writes a string into the slob-object</phpsyntax>
-<phpsyntax function="ingres_autocommit" usage="bool ingres_autocommit([resource link])">Switch autocommit on or off</phpsyntax> 
-<phpsyntax function="ingres_close" usage="bool ingres_close([resource link])">Close an Ingres II database connection</phpsyntax>
-<phpsyntax function="ingres_commit" usage="bool ingres_commit([resource link])">Commit a transaction</phpsyntax>
-<phpsyntax function="ingres_connect" usage="resource ingres_connect([string database [, string username [, string password]]])">Open a connection to an Ingres II database the syntax of database is [node_id::]dbname[/svr_class]</phpsyntax>
-<phpsyntax function="ingres_fetch_array" usage="array ingres_fetch_array([int result_type [, resource link]])">Fetch a row of result into an array result_type can be II_NUM for enumerated array, II_ASSOC for associative array, or II_BOTH (default)</phpsyntax>
-<phpsyntax function="ingres_fetch_object" usage="array ingres_fetch_object([int result_type [, resource link]])">Fetch a row of result into an object result_type can be II_NUM for enumerated object, II_ASSOC for associative object, or II_BOTH (default)</phpsyntax>
-<phpsyntax function="ingres_fetch_row" usage="array ingres_fetch_row([resource link])">Fetch a row of result into an enumerated array</phpsyntax>
-<phpsyntax function="ingres_field_length" usage="string ingres_field_length(int index [, resource link])">Return the length of a field in a query result index must be &gt;0 and &lt;= ingres_num_fields()</phpsyntax>
-<phpsyntax function="ingres_field_name" usage="string ingres_field_name(int index [, resource link])">Return the name of a field in a query result index must be &gt;0 and &lt;= ingres_num_fields()</phpsyntax>
-<phpsyntax function="ingres_field_nullable" usage="string ingres_field_nullable(int index [, resource link])">Return true if the field is nullable and false otherwise index must be &gt;0 and &lt;= ingres_num_fields()</phpsyntax>
-<phpsyntax function="ingres_field_precision" usage="string ingres_field_precision(int index [, resource link])">Return the precision of a field in a query result index must be &gt;0 and &lt;= ingres_num_fields()</phpsyntax>
-<phpsyntax function="ingres_field_scale" usage="string ingres_field_scale(int index [, resource link])">Return the scale of a field in a query result index must be &gt;0 and &lt;= ingres_num_fields()</phpsyntax>
-<phpsyntax function="ingres_field_type" usage="string ingres_field_type(int index [, resource link])">Return the type of a field in a query result index must be &gt;0 and &lt;= ingres_num_fields()</phpsyntax>
-<phpsyntax function="ingres_num_fields" usage="int ingres_num_fields([resource link])">Return the number of fields returned by the last query</phpsyntax>
-<phpsyntax function="ingres_num_rows" usage="int ingres_num_rows([resource link])">Return the number of rows affected/returned by the last query</phpsyntax>
-<phpsyntax function="ingres_pconnect" usage="resource ingres_pconnect([string database [, string username [, string password]]])">Open a persistent connection to an Ingres II database the syntax of database is [node_id::]dbname[/svr_class]</phpsyntax>
-<phpsyntax function="ingres_query" usage="bool ingres_query(string query [, resource link])">Send a SQL query to Ingres II</phpsyntax>
-<phpsyntax function="ingres_rollback" usage="bool ingres_rollback([resource link])">Roll back a transaction</phpsyntax>
-<phpsyntax function="ibase_blob_add" usage="bool ibase_blob_add(resource blob_handle, string data)">Add data into created blob</phpsyntax>
-<phpsyntax function="ibase_blob_cancel" usage="bool ibase_blob_cancel(resource blob_handle)">Cancel creating blob</phpsyntax>
-<phpsyntax function="ibase_blob_close" usage="string ibase_blob_close(resource blob_handle)">Close blob</phpsyntax>
-<phpsyntax function="ibase_blob_create" usage="resource ibase_blob_create([resource link_identifier])">Create blob for adding data</phpsyntax>
-<phpsyntax function="ibase_blob_echo" usage="bool ibase_blob_echo([ resource link_identifier, ] string blob_id)">Output blob contents to browser</phpsyntax>
-<phpsyntax function="ibase_blob_get" usage="string ibase_blob_get(resource blob_handle, int len)">Get len bytes data from open blob</phpsyntax>
-<phpsyntax function="ibase_blob_import" usage="string ibase_blob_import([ resource link_identifier, ] resource file)">Create blob, copy file in it, and close it</phpsyntax>
-<phpsyntax function="ibase_blob_info" usage="array ibase_blob_info([ resource link_identifier, ] string blob_id)">Return blob length and other useful info</phpsyntax>
-<phpsyntax function="ibase_blob_open" usage="resource ibase_blob_open([ resource link_identifier, ] string blob_id)">Open blob for retrieving data parts</phpsyntax>
-<phpsyntax function="ibase_free_event_handler" usage="bool ibase_free_event_handler(resource event)">Frees the event handler set by ibase_set_event_handler()</phpsyntax>
-<phpsyntax function="ibase_set_event_handler" usage="resource ibase_set_event_handler([resource link_identifier,] callback handler, string event [, string event [, ...]])">Register the callback for handling each of the named events</phpsyntax>
-<phpsyntax function="ibase_wait_event" usage="string ibase_wait_event([resource link_identifier,] string event [, string event [, ...]])">Waits for any one of the passed Interbase events to be posted by the database, and returns its name</phpsyntax>
-<phpsyntax function="ibase_affected_rows" usage="int ibase_affected_rows( [ resource link_identifier ] )">Returns the number of rows affected by the previous INSERT, UPDATE or DELETE statement</phpsyntax>
-<phpsyntax function="ibase_execute" usage="mixed ibase_execute(resource query [, mixed bind_arg [, mixed bind_arg [, ...]]])">Execute a previously prepared query</phpsyntax>
-<phpsyntax function="ibase_fetch_assoc" usage="array ibase_fetch_assoc(resource result [, int fetch_flags])">Fetch a row  from the results of a query</phpsyntax>
-<phpsyntax function="ibase_fetch_object" usage="object ibase_fetch_object(resource result [, int fetch_flags])">Fetch a object from the results of a query</phpsyntax>
-<phpsyntax function="ibase_fetch_row" usage="array ibase_fetch_row(resource result [, int fetch_flags])">Fetch a row  from the results of a query</phpsyntax>
-<phpsyntax function="ibase_field_info" usage="array ibase_field_info(resource query_result, int field_number)">Get information about a field</phpsyntax>
-<phpsyntax function="ibase_free_query" usage="bool ibase_free_query(resource query)">Free memory used by a query</phpsyntax>
-<phpsyntax function="ibase_free_result" usage="bool ibase_free_result(resource result)">Free the memory used by a result</phpsyntax>
-<phpsyntax function="ibase_name_result" usage="bool ibase_name_result(resource result, string name)">Assign a name to a result for use with ... WHERE CURRENT OF &lt;name&gt; statements</phpsyntax>
-<phpsyntax function="ibase_num_fields" usage="int ibase_num_fields(resource query_result)">Get the number of fields in result</phpsyntax>
-<phpsyntax function="ibase_num_params" usage="int ibase_num_params(resource query)">Get the number of params in a prepared query</phpsyntax>
-<phpsyntax function="ibase_num_rows" usage="int ibase_num_rows( resource result_identifier )">Return the number of rows that are available in a result</phpsyntax>
-<phpsyntax function="ibase_param_info" usage="array ibase_param_info(resource query, int field_number)">Get information about a parameter</phpsyntax>
-<phpsyntax function="ibase_prepare" usage="resource ibase_prepare([resource link_identifier, ] string query)">Prepare a query for later execution</phpsyntax>
-<phpsyntax function="ibase_query" usage="mixed ibase_query([resource link_identifier, [ resource link_identifier, ]] string query [, mixed bind_arg [, mixed bind_arg [, ...]]])">Execute a query</phpsyntax>
-<phpsyntax function="ibase_add_user" usage="bool ibase_add_user(resource service_handle, string user_name, string password [, string first_name [, string middle_name [, string last_name]]])">Add a user to security database</phpsyntax>
-<phpsyntax function="ibase_backup" usage="mixed ibase_backup(resource service_handle, string source_db, string dest_file [, int options [, bool verbose]])">Initiates a backup task in the service manager and returns immediately</phpsyntax>
-<phpsyntax function="ibase_db_info" usage="string ibase_db_info(resource service_handle, string db, int action [, int argument])">Request statistics about a database</phpsyntax>
-<phpsyntax function="ibase_delete_user" usage="bool ibase_delete_user(resource service_handle, string user_name, string password [, string first_name [, string middle_name [, string last_name]]])">Delete a user from security database</phpsyntax>
-<phpsyntax function="ibase_maintain_db" usage="bool ibase_maintain_db(resource service_handle, string db, int action [, int argument])">Execute a maintenance command on the database server</phpsyntax>
-<phpsyntax function="ibase_modify_user" usage="bool ibase_modify_user(resource service_handle, string user_name, string password [, string first_name [, string middle_name [, string last_name]]])">Modify a user in security database</phpsyntax>
-<phpsyntax function="ibase_restore" usage="mixed ibase_restore(resource service_handle, string source_file, string dest_db [, int options [, bool verbose]])">Initiates a restore task in the service manager and returns immediately</phpsyntax>
-<phpsyntax function="ibase_server_info" usage="string ibase_server_info(resource service_handle, int action)">Request information about a database server</phpsyntax>
-<phpsyntax function="ibase_service_attach" usage="resource ibase_service_attach(string host, string dba_username, string dba_password)">Connect to the service manager</phpsyntax>
-<phpsyntax function="ibase_service_detach" usage="bool ibase_service_detach(resource service_handle)">Disconnect from the service manager</phpsyntax>
-<phpsyntax function="ibase_close" usage="bool ibase_close([resource link_identifier])">Close an InterBase connection</phpsyntax>
-<phpsyntax function="ibase_commit" usage="bool ibase_commit( resource link_identifier )">Commit transaction</phpsyntax>
-<phpsyntax function="ibase_commit_ret" usage="bool ibase_commit_ret( resource link_identifier )">Commit transaction and retain the transaction context</phpsyntax>
-<phpsyntax function="ibase_connect" usage="resource ibase_connect(string database [, string username [, string password [, string charset [, int buffers [, int dialect [, string role]]]]]])">Open a connection to an InterBase database</phpsyntax>
-<phpsyntax function="ibase_drop_db" usage="bool ibase_drop_db([resource link_identifier])">Drop an InterBase database</phpsyntax>
-<phpsyntax function="ibase_errcode" usage="int ibase_errcode(void)">Return error code</phpsyntax>
-<phpsyntax function="ibase_errmsg" usage="string ibase_errmsg(void)">Return error message</phpsyntax>
-<phpsyntax function="ibase_gen_id" usage="int ibase_gen_id(string generator [, int increment [, resource link_identifier ]])">Increments the named generator and returns its new value</phpsyntax>
-<phpsyntax function="ibase_pconnect" usage="resource ibase_pconnect(string database [, string username [, string password [, string charset [, int buffers [, int dialect [, string role]]]]]])">Open a persistent connection to an InterBase database</phpsyntax>
-<phpsyntax function="ibase_rollback" usage="bool ibase_rollback( resource link_identifier )">Rollback transaction</phpsyntax>
-<phpsyntax function="ibase_rollback_ret" usage="bool ibase_rollback_ret( resource link_identifier )">Rollback transaction and retain the transaction context</phpsyntax>
-<phpsyntax function="ibase_timefmt" usage="bool ibase_timefmt(string format [, int type ])">Sets the format of timestamp, date and time columns returned from queries</phpsyntax>
-<phpsyntax function="ibase_trans" usage="resource ibase_trans([int trans_args [, resource link_identifier [, ... ], int trans_args [, resource link_identifier [, ... ]] [, ...]]])">Start a transaction over one or several databases</phpsyntax>
-<phpsyntax function="ircg_channel_mode" usage="bool ircg_channel_mode(int connection, string channel, string mode_spec, string nick)">Sets channel mode flags for user</phpsyntax>
-<phpsyntax function="ircg_disconnect" usage="bool ircg_disconnect(int connection, string reason)">Terminate IRC connection</phpsyntax>
-<phpsyntax function="ircg_eval_ecmascript_params" usage="array ircg_eval_ecmascript_params(string params)">Decodes a list of JS-encoded parameters into a native array</phpsyntax>
-<phpsyntax function="ircg_fetch_error_msg" usage="array ircg_fetch_error_msg(int connection)">Returns the error from previous ircg operation</phpsyntax>
-<phpsyntax function="ircg_get_username" usage="string ircg_get_username(int connection)">Gets username for connection</phpsyntax>
-<phpsyntax function="ircg_html_encode" usage="string ircg_html_encode(string html_text)">Encodes HTML preserving output</phpsyntax>
-<phpsyntax function="ircg_ignore_add" usage="bool ircg_ignore_add(resource connection, string nick)">Adds a user to your ignore list on a server</phpsyntax>
-<phpsyntax function="ircg_ignore_del" usage="bool ircg_ignore_del(int connection, string nick)">Removes a user from your ignore list</phpsyntax>
-<phpsyntax function="ircg_invite" usage="bool ircg_invite(int connection, string channel, string nickname)">INVITEs nickname to channel</phpsyntax>
-<phpsyntax function="ircg_is_conn_alive" usage="bool ircg_is_conn_alive(int connection)">Checks connection status</phpsyntax>
-<phpsyntax function="ircg_join" usage="bool ircg_join(int connection, string channel [, string chan-key])">Joins a channel on a connected server</phpsyntax>
-<phpsyntax function="ircg_kick" usage="bool ircg_kick(int connection, string channel, string nick, string reason)">Kicks user from channel</phpsyntax>
-<phpsyntax function="ircg_list" usage="bool ircg_list(int connection, string channel)">List topic/user count of channel(s)</phpsyntax>
-<phpsyntax function="ircg_lookup_format_messages" usage="bool ircg_lookup_format_messages(string name)">Selects a set of format strings for display of IRC messages</phpsyntax>
-<phpsyntax function="ircg_lusers" usage="bool ircg_lusers(int connection)">IRC network statistics</phpsyntax>
-<phpsyntax function="ircg_msg" usage="bool ircg_msg(int connection, string recipient, string message [,bool loop-suppress])">Delivers a message to the IRC network</phpsyntax>
-<phpsyntax function="ircg_names" usage="bool ircg_names( int connection, string channel [, string target])">Queries visible usernames</phpsyntax>
-<phpsyntax function="ircg_nick" usage="bool ircg_nick(int connection, string newnick)">Changes the nickname</phpsyntax>
-<phpsyntax function="ircg_nickname_escape" usage="string ircg_nickname_escape(string nick)">Escapes special characters in nickname to be IRC-compliant</phpsyntax>
-<phpsyntax function="ircg_nickname_unescape" usage="string ircg_nickname_unescape(string nick)">Decodes encoded nickname</phpsyntax>
-<phpsyntax function="ircg_notice" usage="bool ircg_notice(int connection, string recipient, string message)">Sends a one-way communication NOTICE to a target</phpsyntax>
-<phpsyntax function="ircg_oper" usage="bool ircg_oper(int connection, string name, string password)">Elevates privileges to IRC OPER</phpsyntax>
-<phpsyntax function="ircg_part" usage="bool ircg_part(int connection, string channel)">Leaves a channel</phpsyntax>
-<phpsyntax function="ircg_pconnect" usage="int ircg_pconnect(string username [, string server [, int port [, string format-msg-set-name [, array ctcp-set [, array user-details [, bool bailout-on-trivial]]]]]])">Create a persistent IRC connection</phpsyntax>
-<phpsyntax function="ircg_register_format_messages" usage="bool ircg_register_format_messages(string name, array messages)">Registers a set of format strings for display of IRC messages</phpsyntax>
-<phpsyntax function="ircg_set_current" usage="bool ircg_set_current(int connection)">Sets current connection for output</phpsyntax>
-<phpsyntax function="ircg_set_file" usage="bool ircg_set_file(int connection, string path)">Sets logfile for connection</phpsyntax>
-<phpsyntax function="ircg_set_on_die" usage="bool ircg_set_on_die(int connection, string host, int port, string data)">Sets hostaction to be executed when connection dies</phpsyntax>
-<phpsyntax function="ircg_set_on_read_data" usage="bool ircg_set_on_read_data(int connection, string host, int port, string data)">Set action to be executed when data is received from a HTTP client</phpsyntax>
-<phpsyntax function="ircg_topic" usage="bool ircg_topic(int connection, string channel, string topic)">Sets topic for channel</phpsyntax>
-<phpsyntax function="ircg_who" usage="bool ircg_who(int connection, string mask [, bool ops_only])">Queries server for WHO information</phpsyntax>
-<phpsyntax function="ircg_whois" usage="bool ircg_whois( int connection, string nick)">Queries user information for nick on server</phpsyntax>
-<phpsyntax function="ldap_add" usage="bool ldap_add(resource link, string dn, array entry)">Add entries to LDAP directory</phpsyntax>
-<phpsyntax function="ldap_bind" usage="bool ldap_bind(resource link [, string dn, string password])">Bind to LDAP directory</phpsyntax>
-<phpsyntax function="ldap_compare" usage="bool ldap_compare(resource link, string dn, string attr, string value)">Determine if an entry has a specific value for one of its attributes</phpsyntax>
-<phpsyntax function="ldap_connect" usage="resource ldap_connect([string host [, int port]])">Connect to an LDAP server</phpsyntax>
-<phpsyntax function="ldap_count_entries" usage="int ldap_count_entries(resource link, resource result)">Count the number of entries in a search result</phpsyntax>
-<phpsyntax function="ldap_delete" usage="bool ldap_delete(resource link, string dn)">Delete an entry from a directory</phpsyntax>
-<phpsyntax function="ldap_errno" usage="int ldap_errno(resource link)">Get the current ldap error number</phpsyntax>
-<phpsyntax function="ldap_error" usage="string ldap_error(resource link)">Get the current ldap error string</phpsyntax>
-<phpsyntax function="ldap_explode_dn" usage="array ldap_explode_dn(string dn, int with_attrib)">Splits DN into its component parts</phpsyntax>
-<phpsyntax function="ldap_first_attribute" usage="string ldap_first_attribute(resource link, resource result_entry, int ber)">Return first attribute</phpsyntax>
-<phpsyntax function="ldap_first_entry" usage="resource ldap_first_entry(resource link, resource result)">Return first result id</phpsyntax>
-<phpsyntax function="ldap_first_reference" usage="resource ldap_first_reference(resource link, resource result)">Return first reference</phpsyntax>
-<phpsyntax function="ldap_free_result" usage="bool ldap_free_result(resource result)">Free result memory</phpsyntax>
-<phpsyntax function="ldap_get_attributes" usage="array ldap_get_attributes(resource link, resource result_entry)">Get attributes from a search result entry</phpsyntax>
-<phpsyntax function="ldap_get_dn" usage="string ldap_get_dn(resource link, resource result_entry)">Get the DN of a result entry</phpsyntax>
-<phpsyntax function="ldap_get_entries" usage="array ldap_get_entries(resource link, resource result)">Get all result entries</phpsyntax>
-<phpsyntax function="ldap_get_option" usage="bool ldap_get_option(resource link, int option, mixed retval)">Get the current value of various session-wide parameters</phpsyntax>
-<phpsyntax function="ldap_get_values" usage="array ldap_get_values(resource link, resource result_entry, string attribute)">Get all values from a result entry</phpsyntax>
-<phpsyntax function="ldap_get_values_len" usage="array ldap_get_values_len(resource link, resource result_entry, string attribute)">Get all values with lengths from a result entry</phpsyntax>
-<phpsyntax function="ldap_list" usage="resource ldap_list(resource link, string base_dn, string filter [, array attrs [, int attrsonly [, int sizelimit [, int timelimit [, int deref]]]]])">Single-level search</phpsyntax>
-<phpsyntax function="ldap_mod_add" usage="bool ldap_mod_add(resource link, string dn, array entry)">Add attribute values to current</phpsyntax>
-<phpsyntax function="ldap_mod_del" usage="bool ldap_mod_del(resource link, string dn, array entry)">Delete attribute values</phpsyntax>
-<phpsyntax function="ldap_mod_replace" usage="bool ldap_mod_replace(resource link, string dn, array entry)">Replace attribute values with new ones</phpsyntax>
-<phpsyntax function="ldap_next_attribute" usage="string ldap_next_attribute(resource link, resource result_entry, resource ber)">Get the next attribute in result</phpsyntax>
-<phpsyntax function="ldap_next_entry" usage="resource ldap_next_entry(resource link, resource result_entry)">Get next result entry</phpsyntax>
-<phpsyntax function="ldap_next_reference" usage="resource ldap_next_reference(resource link, resource reference_entry)">Get next reference</phpsyntax>
-<phpsyntax function="ldap_parse_reference" usage="bool ldap_parse_reference(resource link, resource reference_entry, array referrals)">Extract information from reference entry</phpsyntax>
-<phpsyntax function="ldap_parse_result" usage="bool ldap_parse_result(resource link, resource result, int errcode, string matcheddn, string errmsg, array referrals)">Extract information from result</phpsyntax>
-<phpsyntax function="ldap_read" usage="resource ldap_read(resource link, string base_dn, string filter [, array attrs [, int attrsonly [, int sizelimit [, int timelimit [, int deref]]]]])">Read an entry</phpsyntax>
-<phpsyntax function="ldap_sasl_bind" usage="bool ldap_sasl_bind(resource link)">Bind to LDAP directory using SASL</phpsyntax>
-<phpsyntax function="ldap_search" usage="resource ldap_search(resource link, string base_dn, string filter [, array attrs [, int attrsonly [, int sizelimit [, int timelimit [, int deref]]]]])">Search LDAP tree under base_dn</phpsyntax>
-<phpsyntax function="ldap_set_option" usage="bool ldap_set_option(resource link, int option, mixed newval)">Set the value of various session-wide parameters</phpsyntax>
-<phpsyntax function="ldap_set_rebind_proc" usage="bool ldap_set_rebind_proc(resource link, string callback)">Set a callback function to do re-binds on referral chasing.</phpsyntax>
-<phpsyntax function="ldap_sort" usage="bool ldap_sort(resource link, resource result, string sortfilter)">Sort LDAP result entries</phpsyntax>
-<phpsyntax function="ldap_start_tls" usage="bool ldap_start_tls(resource link)">Start TLS</phpsyntax>
-<phpsyntax function="ldap_unbind" usage="bool ldap_unbind(resource link)">Unbind from LDAP directory</phpsyntax>
-<phpsyntax function="libxml_set_streams_context" usage="void libxml_set_streams_context(resource streams_context)">Set the streams context for the next libxml document load or write</phpsyntax>
-<phpsyntax function="mb_convert_case" usage="string mb_convert_case(string sourcestring, int mode [, string encoding])">Returns a case-folded version of sourcestring</phpsyntax>
-<phpsyntax function="mb_convert_encoding" usage="string mb_convert_encoding(string str, string to-encoding [, mixed from-encoding])">Returns converted string in desired encoding</phpsyntax>
-<phpsyntax function="mb_convert_kana" usage="string mb_convert_kana(string str [, string option] [, string encoding])">Conversion between full-width character and half-width character (Japanese)</phpsyntax>
-<phpsyntax function="mb_convert_variables" usage="string mb_convert_variables(string to-encoding, mixed from-encoding [, mixed ...])">Converts the string resource in variables to desired encoding</phpsyntax>
-<phpsyntax function="mb_decode_mimeheader" usage="string mb_decode_mimeheader(string string)">Decodes the MIME "encoded-word" in the string</phpsyntax>
-<phpsyntax function="mb_decode_numericentity" usage="string mb_decode_numericentity(string string, array convmap [, string encoding])">Converts HTML numeric entities to character code</phpsyntax>
-<phpsyntax function="mb_detect_encoding" usage="string mb_detect_encoding(string str [, mixed encoding_list [, bool strict]])">Encodings of the given string is returned (as a string)</phpsyntax>
-<phpsyntax function="mb_encode_mimeheader" usage="string mb_encode_mimeheader(string str [, string charset [, string transfer-encoding [, string linefeed]]])">Converts the string to MIME "encoded-word" in the format of =?charset?(B|Q)?encoded_string?=</phpsyntax>
-<phpsyntax function="mb_encode_numericentity" usage="string mb_encode_numericentity(string string, array convmap [, string encoding])">Converts specified characters to HTML numeric entities</phpsyntax>
-<phpsyntax function="mb_get_info" usage="string mb_get_info([string type])">Returns the current settings of mbstring</phpsyntax>
-<phpsyntax function="mb_http_input" usage="mixed mb_http_input([string type])">Returns the input encoding</phpsyntax>
-<phpsyntax function="mb_http_output" usage="string mb_http_output([string encoding])">Sets the current output_encoding or returns the current output_encoding as a string</phpsyntax>
-<phpsyntax function="mb_internal_encoding" usage="string mb_internal_encoding([string encoding])">Sets the current internal encoding or Returns the current internal encoding as a string</phpsyntax>
-<phpsyntax function="mb_language" usage="string mb_language([string language])">Sets the current language or Returns the current language as a string</phpsyntax>
-<phpsyntax function="mb_list_encodings" usage="array mb_list_encodings()">Returns an array of all supported encodings</phpsyntax>
-<phpsyntax function="mb_output_handler" usage="string mb_output_handler(string contents, int status)">Returns string in output buffer converted to the http_output encoding</phpsyntax>
-<phpsyntax function="mb_parse_str" usage="bool mb_parse_str(string encoded_string [, array result])">Parses GET/POST/COOKIE data and sets global variables</phpsyntax>
-<phpsyntax function="mb_preferred_mime_name" usage="string mb_preferred_mime_name(string encoding)">Return the preferred MIME name (charset) as a string</phpsyntax>
-<phpsyntax function="mb_send_mail" usage="int mb_send_mail(string to, string subject, string message [, string additional_headers [, string additional_parameters]])">*  Sends an email message with MIME scheme</phpsyntax>
-<phpsyntax function="mb_strcut" usage="string mb_strcut(string str, int start [, int length [, string encoding]])">Returns part of a string</phpsyntax>
-<phpsyntax function="mb_strimwidth" usage="string mb_strimwidth(string str, int start, int width [, string trimmarker [, string encoding]])">Trim the string in terminal width</phpsyntax>
-<phpsyntax function="mb_strlen" usage="int mb_strlen(string str [, string encoding])">Get character numbers of a string</phpsyntax>
-<phpsyntax function="mb_strpos" usage="int mb_strpos(string haystack, string needle [, int offset [, string encoding]])">Find position of first occurrence of a string within another</phpsyntax>
-<phpsyntax function="mb_strrpos" usage="int mb_strrpos(string haystack, string needle [, string encoding])">Find the last occurrence of a character in a string within another</phpsyntax>
-<phpsyntax function="mb_strtolower" usage="string mb_strtolower(string sourcestring [, string encoding])">*  Returns a lowercased version of sourcestring</phpsyntax>
-<phpsyntax function="mb_strtoupper" usage="string mb_strtoupper(string sourcestring [, string encoding])">*  Returns a uppercased version of sourcestring</phpsyntax>
-<phpsyntax function="mb_strwidth" usage="int mb_strwidth(string str [, string encoding])">Gets terminal width of a string</phpsyntax>
-<phpsyntax function="mb_substitute_character" usage="mixed mb_substitute_character([mixed substchar])">Sets the current substitute_character or returns the current substitute_character</phpsyntax>
-<phpsyntax function="mb_substr" usage="string mb_substr(string str, int start [, int length [, string encoding]])">Returns part of a string</phpsyntax>
-<phpsyntax function="mb_substr_count" usage="int mb_substr_count(string haystack, string needle [, string encoding])">Count the number of substring occurrences</phpsyntax>
-<phpsyntax function="mb_ereg" usage="int mb_ereg(string pattern, string string [, array registers])">Regular expression match for multibyte string</phpsyntax>
-<phpsyntax function="mb_ereg_match" usage="bool mb_ereg_match(string pattern, string string [,string option])">Regular expression match for multibyte string</phpsyntax>
-<phpsyntax function="mb_ereg_replace" usage="string mb_ereg_replace(string pattern, string replacement, string string [, string option])">Replace regular expression for multibyte string</phpsyntax>
-<phpsyntax function="mb_ereg_search" usage="bool mb_ereg_search([string pattern[, string option]])">Regular expression search for multibyte string</phpsyntax>
-<phpsyntax function="mb_ereg_search_getpos" usage="int mb_ereg_search_getpos(void)">Get search start position</phpsyntax>
-<phpsyntax function="mb_ereg_search_getregs" usage="array mb_ereg_search_getregs(void)">Get matched substring of the last time</phpsyntax>
-<phpsyntax function="mb_ereg_search_init" usage="bool mb_ereg_search_init(string string [, string pattern[, string option]])">Initialize string and regular expression for search.</phpsyntax>
-<phpsyntax function="mb_ereg_search_pos" usage="array mb_ereg_search_pos([string pattern[, string option]])">Regular expression search for multibyte string</phpsyntax>
-<phpsyntax function="mb_ereg_search_regs" usage="array mb_ereg_search_regs([string pattern[, string option]])">Regular expression search for multibyte string</phpsyntax>
-<phpsyntax function="mb_ereg_search_setpos" usage="bool mb_ereg_search_setpos(int position)">Set search start position</phpsyntax>
-<phpsyntax function="mb_eregi" usage="int mb_eregi(string pattern, string string [, array registers])">Case-insensitive regular expression match for multibyte string</phpsyntax>
-<phpsyntax function="mb_eregi_replace" usage="string mb_eregi_replace(string pattern, string replacement, string string)">Case insensitive replace regular expression for multibyte string</phpsyntax>
-<phpsyntax function="mb_regex_encoding" usage="string mb_regex_encoding([string encoding])">Returns the current encoding for regex as a string.</phpsyntax>
-<phpsyntax function="mb_regex_set_options" usage="string mb_regex_set_options([string options])">Set or get the default options for mbregex functions</phpsyntax>
-<phpsyntax function="mb_split" usage="array mb_split(string pattern, string string [, int limit])">split multibyte string into array by regular expression</phpsyntax>
-<phpsyntax function="mcrypt_cbc" usage="string mcrypt_cbc(int cipher, string key, string data, int mode, string iv)">CBC crypt/decrypt data using key key with cipher cipher starting with iv</phpsyntax>
-<phpsyntax function="mcrypt_cfb" usage="string mcrypt_cfb(int cipher, string key, string data, int mode, string iv)">CFB crypt/decrypt data using key key with cipher cipher starting with iv</phpsyntax>
-<phpsyntax function="mcrypt_create_iv" usage="string mcrypt_create_iv(int size, int source)">Create an initialization vector (IV)</phpsyntax>
-<phpsyntax function="mcrypt_decrypt" usage="string mcrypt_decrypt(string cipher, string key, string data, string mode, string iv)">OFB crypt/decrypt data using key key with cipher cipher starting with iv</phpsyntax>
-<phpsyntax function="mcrypt_ecb" usage="string mcrypt_ecb(int cipher, string key, string data, int mode, string iv)">ECB crypt/decrypt data using key key with cipher cipher starting with iv</phpsyntax>
-<phpsyntax function="mcrypt_enc_get_algorithms_name" usage="string mcrypt_enc_get_algorithms_name(resource td)">Returns the name of the algorithm specified by the descriptor td</phpsyntax>
-<phpsyntax function="mcrypt_enc_get_block_size" usage="int mcrypt_enc_get_block_size(resource td)">Returns the block size of the cipher specified by the descriptor td</phpsyntax>
-<phpsyntax function="mcrypt_enc_get_iv_size" usage="int mcrypt_enc_get_iv_size(resource td)">Returns the size of the IV in bytes of the algorithm specified by the descriptor td</phpsyntax>
-<phpsyntax function="mcrypt_enc_get_key_size" usage="int mcrypt_enc_get_key_size(resource td)">Returns the maximum supported key size in bytes of the algorithm specified by the descriptor td</phpsyntax>
-<phpsyntax function="mcrypt_enc_get_modes_name" usage="string mcrypt_enc_get_modes_name(resource td)">Returns the name of the mode specified by the descriptor td</phpsyntax>
-<phpsyntax function="mcrypt_enc_get_supported_key_sizes" usage="array mcrypt_enc_get_supported_key_sizes(resource td)">This function decrypts the crypttext</phpsyntax>
-<phpsyntax function="mcrypt_enc_is_block_algorithm" usage="bool mcrypt_enc_is_block_algorithm(resource td)">Returns TRUE if the alrogithm is a block algorithms</phpsyntax>
-<phpsyntax function="mcrypt_enc_is_block_algorithm_mode" usage="bool mcrypt_enc_is_block_algorithm_mode(resource td)">Returns TRUE if the mode is for use with block algorithms</phpsyntax>
-<phpsyntax function="mcrypt_enc_is_block_mode" usage="bool mcrypt_enc_is_block_mode(resource td)">Returns TRUE if the mode outputs blocks</phpsyntax>
-<phpsyntax function="mcrypt_enc_self_test" usage="int mcrypt_enc_self_test(resource td)">This function runs the self test on the algorithm specified by the descriptor td</phpsyntax>
-<phpsyntax function="mcrypt_encrypt" usage="string mcrypt_encrypt(string cipher, string key, string data, string mode, string iv)">OFB crypt/decrypt data using key key with cipher cipher starting with iv</phpsyntax>
-<phpsyntax function="mcrypt_generic" usage="string mcrypt_generic(resource td, string data)">This function encrypts the plaintext</phpsyntax>
-<phpsyntax function="mcrypt_generic_deinit" usage="bool mcrypt_generic_deinit(resource td)">This function terminates encrypt specified by the descriptor td</phpsyntax>
-<phpsyntax function="mcrypt_generic_end" usage="bool mcrypt_generic_end(resource td)">This function terminates encrypt specified by the descriptor td</phpsyntax>
-<phpsyntax function="mcrypt_generic_init" usage="int mcrypt_generic_init(resource td, string key, string iv)">This function initializes all buffers for the specific module</phpsyntax>
-<phpsyntax function="mcrypt_get_block_size" usage="int mcrypt_get_block_size(string cipher, string module)">Get the key size of cipher</phpsyntax>
-<phpsyntax function="mcrypt_get_cipher_name" usage="string mcrypt_get_cipher_name(string cipher)">Get the key size of cipher</phpsyntax>
-<phpsyntax function="mcrypt_get_iv_size" usage="int mcrypt_get_iv_size(string cipher, string module)">Get the IV size of cipher (Usually the same as the blocksize)</phpsyntax>
-<phpsyntax function="mcrypt_get_key_size" usage="int mcrypt_get_key_size(string cipher, string module)">Get the key size of cipher</phpsyntax>
-<phpsyntax function="mcrypt_list_algorithms" usage="array mcrypt_list_algorithms([string lib_dir])">List all algorithms in "module_dir"</phpsyntax>
-<phpsyntax function="mcrypt_list_modes" usage="array mcrypt_list_modes([string lib_dir])">List all modes "module_dir"</phpsyntax>
-<phpsyntax function="mcrypt_module_close" usage="bool mcrypt_module_close(resource td)">Free the descriptor td</phpsyntax>
-<phpsyntax function="mcrypt_module_get_algo_block_size" usage="int mcrypt_module_get_algo_block_size(string algorithm [, string lib_dir])">Returns the block size of the algorithm</phpsyntax>
-<phpsyntax function="mcrypt_module_get_algo_key_size" usage="int mcrypt_module_get_algo_key_size(string algorithm [, string lib_dir])">Returns the maximum supported key size of the algorithm</phpsyntax>
-<phpsyntax function="mcrypt_module_get_supported_key_sizes" usage="array mcrypt_module_get_supported_key_sizes(string algorithm [, string lib_dir])">This function decrypts the crypttext</phpsyntax>
-<phpsyntax function="mcrypt_module_is_block_algorithm" usage="bool mcrypt_module_is_block_algorithm(string algorithm [, string lib_dir])">Returns TRUE if the algorithm is a block algorithm</phpsyntax>
-<phpsyntax function="mcrypt_module_is_block_algorithm_mode" usage="bool mcrypt_module_is_block_algorithm_mode(string mode [, string lib_dir])">Returns TRUE if the mode is for use with block algorithms</phpsyntax>
-<phpsyntax function="mcrypt_module_is_block_mode" usage="bool mcrypt_module_is_block_mode(string mode [, string lib_dir])">Returns TRUE if the mode outputs blocks of bytes</phpsyntax>
-<phpsyntax function="mcrypt_module_open" usage="resource mcrypt_module_open(string cipher, string cipher_directory, string mode, string mode_directory)">Opens the module of the algorithm and the mode to be used</phpsyntax>
-<phpsyntax function="mcrypt_module_self_test" usage="bool mcrypt_module_self_test(string algorithm [, string lib_dir])">Does a self test of the module "module"</phpsyntax>
-<phpsyntax function="mcrypt_ofb" usage="string mcrypt_ofb(int cipher, string key, string data, int mode, string iv)">OFB crypt/decrypt data using key key with cipher cipher starting with iv</phpsyntax>
-<phpsyntax function="mdecrypt_generic" usage="string mdecrypt_generic(resource td, string data)">This function decrypts the plaintext</phpsyntax>
-<phpsyntax function="mcve_adduser" usage="int mcve_adduser(resource conn, string admin_password, int usersetup)">Add an MCVE user using usersetup structure</phpsyntax>
-<phpsyntax function="mcve_adduserarg" usage="int mcve_adduserarg(resource usersetup, int argtype, string argval)">Add a value to user configuration structure</phpsyntax>
-<phpsyntax function="mcve_bt" usage="int mcve_bt(resource conn, string username, string password)">Get unsettled batch totals</phpsyntax>
-<phpsyntax function="mcve_checkstatus" usage="int mcve_checkstatus(resource conn, int identifier)">Check to see if a transaction has completed</phpsyntax>
-<phpsyntax function="mcve_chkpwd" usage="int mcve_chkpwd(resource conn, string username, string password)">Verify Password</phpsyntax>
-<phpsyntax function="mcve_chngpwd" usage="int mcve_chngpwd(resource conn, string admin_password, string new_password)">Change the system administrator's password</phpsyntax>
-<phpsyntax function="mcve_completeauthorizations" usage="int mcve_completeauthorizations(resource conn, int &amp;array)">Number of complete authorizations in queue, returning an array of their identifiers</phpsyntax>
-<phpsyntax function="mcve_connect" usage="int mcve_connect(resource conn)">Establish the connection to MCVE</phpsyntax>
-<phpsyntax function="mcve_connectionerror" usage="string mcve_connectionerror(resource conn)">Get a textual representation of why a connection failed</phpsyntax>
-<phpsyntax function="mcve_deleteresponse" usage="bool mcve_deleteresponse(resource conn, int identifier)">Delete specified transaction from MCVE_CONN structure</phpsyntax>
-<phpsyntax function="mcve_deletetrans" usage="bool mcve_deletetrans(resource conn, int identifier)">Delete specified transaction from MCVE_CONN structure</phpsyntax>
-<phpsyntax function="mcve_deleteusersetup" usage="void mcve_deleteusersetup(resource usersetup)">Deallocate data associated with usersetup structure</phpsyntax>
-<phpsyntax function="mcve_deluser" usage="int mcve_deluser(resource conn, string admin_password, string username)">Delete an MCVE user account</phpsyntax>
-<phpsyntax function="mcve_destroyconn" usage="void mcve_destroyconn(resource conn)">Destroy the connection and MCVE_CONN structure</phpsyntax>
-<phpsyntax function="mcve_destroyengine" usage="void mcve_destroyengine(void)">Free memory associated with IP/SSL connectivity</phpsyntax>
-<phpsyntax function="mcve_disableuser" usage="int mcve_disableuser(resource conn, string admin_password, string username)">Disable an active MCVE user account</phpsyntax>
-<phpsyntax function="mcve_edituser" usage="int mcve_edituser(resource conn, string admin_password, int usersetup)">Edit MCVE user using usersetup structure</phpsyntax>
-<phpsyntax function="mcve_enableuser" usage="int mcve_enableuser(resource conn, string admin_password, string username)">Enable an inactive MCVE user account</phpsyntax>
-<phpsyntax function="mcve_force" usage="int mcve_force(resiurce conn, string username, string password, string trackdata, string account, string expdate, float amount, string authcode, string comments, string clerkid, string stationid, int ptrannum)">Send a FORCE to MCVE.  (typically, a phone-authorization)</phpsyntax>
-<phpsyntax function="mcve_getcell" usage="string mcve_getcell(resource conn, int identifier, string column, int row)">Get a specific cell from a comma delimited response by column name</phpsyntax>
-<phpsyntax function="mcve_getcellbynum" usage="string mcve_getcellbynum(resource conn, int identifier, int column, int row)">Get a specific cell from a comma delimited response by column number</phpsyntax>
-<phpsyntax function="mcve_getcommadelimited" usage="string mcve_getcommadelimited(resource conn, int identifier)">Get the RAW comma delimited data returned from MCVE</phpsyntax>
-<phpsyntax function="mcve_getheader" usage="string mcve_getheader(resource conn, int identifier, int column_num)">Get the name of the column in a comma-delimited response</phpsyntax>
-<phpsyntax function="mcve_getuserarg" usage="string mcve_getuserarg(resource usersetup, int argtype)">Grab a value from usersetup structure</phpsyntax>
-<phpsyntax function="mcve_getuserparam" usage="string mcve_getuserparam(resource conn, long identifier, int key)">Get a user response parameter</phpsyntax>
-<phpsyntax function="mcve_gft" usage="int mcve_gft(resource conn, string username, string password, int type, string account, string clerkid, string stationid, string comments, int ptrannum, string startdate, string enddate)">Audit MCVE for Failed transactions</phpsyntax>
-<phpsyntax function="mcve_gl" usage="int mcve_gl(int conn, string username, string password, int type, string account, string batch, string clerkid, string stationid, string comments, int ptrannum, string startdate, string enddate)">Audit MCVE for settled transactions</phpsyntax>
-<phpsyntax function="mcve_gut" usage="int mcve_gut(resource conn, string username, string password, int type, string account, string clerkid, string stationid, string comments, int ptrannum, string startdate, string enddate)">Audit MCVE for Unsettled Transactions</phpsyntax>
-<phpsyntax function="mcve_initconn" usage="resource mcve_initconn(void)">Create and initialize an MCVE_CONN structure</phpsyntax>
-<phpsyntax function="mcve_initengine" usage="int mcve_initengine(string location)">Ready the client for IP/SSL Communication</phpsyntax>
-<phpsyntax function="mcve_initusersetup" usage="resource mcve_initusersetup(void)">Initialize structure to store user data</phpsyntax>
-<phpsyntax function="mcve_iscommadelimited" usage="int mcve_iscommadelimited(resource conn, int identifier)">Checks to see if response is comma delimited</phpsyntax>
-<phpsyntax function="mcve_liststats" usage="int mcve_liststats(resource conn, string admin_password)">List statistics for all users on MCVE system</phpsyntax>
-<phpsyntax function="mcve_listusers" usage="int mcve_listusers(resource conn, string admin_password)">List all users on MCVE system</phpsyntax>
-<phpsyntax function="mcve_maxconntimeout" usage="bool mcve_maxconntimeout(resource conn, int secs)">The maximum amount of time the API will attempt a connection to MCVE</phpsyntax>
-<phpsyntax function="mcve_monitor" usage="int mcve_monitor(resource conn)">Perform communication with MCVE (send/receive data)   Non-blocking</phpsyntax>
-<phpsyntax function="mcve_numcolumns" usage="int mcve_numcolumns(resource conn, int identifier)">Number of columns returned in a comma delimited response</phpsyntax>
-<phpsyntax function="mcve_numrows" usage="int mcve_numrows(resource conn, int identifier)">Number of rows returned in a comma delimited response</phpsyntax>
-<phpsyntax function="mcve_override" usage="int mcve_override(resource conn, string username, string password, string trackdata, string account, string expdate, float amount, string street, string zip, string cv, string comments, string clerkid, string stationid, int ptrannum)">Send an OVERRIDE to MCVE</phpsyntax>
-<phpsyntax function="mcve_parsecommadelimited" usage="int mcve_parsecommadelimited(resource conn, int identifier)">Parse the comma delimited response so mcve_getcell, etc will work</phpsyntax>
-<phpsyntax function="mcve_ping" usage="int mcve_ping(resource conn)">Send a ping request to MCVE</phpsyntax>
-<phpsyntax function="mcve_preauth" usage="int mcve_preauth(resource conn, string username, string password, string trackdata, string account, string expdate, float amount, string street, string zip, string cv, string comments,     string clerkid, string stationid, int ptrannum)">Send a PREAUTHORIZATION to MCVE</phpsyntax>
-<phpsyntax function="mcve_preauthcompletion" usage="int mcve_preauthcompletion(resource conn, string username, string password, float finalamount, int sid, int ptrannum)">Complete a PREAUTHORIZATION... Ready it for settlement</phpsyntax>
-<phpsyntax function="mcve_qc" usage="int mcve_qc(resource conn, string username, string password, string clerkid, string stationid, string comments, int ptrannum)">Audit MCVE for a list of transactions in the outgoing queue</phpsyntax>
-<phpsyntax function="mcve_responseparam" usage="string mcve_responseparam(resource conn, long identifier, string key)">Get a custom response parameter</phpsyntax>
-<phpsyntax function="mcve_return" usage="int mcve_return(int conn, string username, string password, string trackdata, string account, string expdate, float amount, string comments, string clerkid, string stationid, int ptrannum)">Issue a RETURN or CREDIT to MCVE</phpsyntax>
-<phpsyntax function="mcve_returncode" usage="int mcve_returncode(resource conn, int identifier)">Grab the exact return code from the transaction</phpsyntax>
-<phpsyntax function="mcve_returnstatus" usage="int mcve_returnstatus(resource conn, int identifier)">Check to see if the transaction was successful</phpsyntax>
-<phpsyntax function="mcve_sale" usage="int mcve_sale(resource conn, string username, string password, string trackdata, string account, string expdate, float amount, string street, string zip, string cv, string comments, string clerkid, string stationid, int ptrannum)">Send a SALE to MCVE</phpsyntax>
-<phpsyntax function="mcve_setblocking" usage="int mcve_setblocking(resource conn, int tf)">Set blocking/non-blocking mode for connection</phpsyntax>
-<phpsyntax function="mcve_setdropfile" usage="int mcve_setdropfile(resource conn, string directory)">Set the connection method to Drop-File</phpsyntax>
-<phpsyntax function="mcve_setip" usage="int mcve_setip(resource conn, string host, int port)">Set the connection method to IP</phpsyntax>
-<phpsyntax function="mcve_setssl" usage="int mcve_setssl(resource conn, string host, int port)">Set the connection method to SSL</phpsyntax>
-<phpsyntax function="mcve_setssl_files" usage="int mcve_setssl_files(string sslkeyfile, string sslcertfile)">Set certificate key files and certificates if server requires client certificate     verification</phpsyntax>
-<phpsyntax function="mcve_settimeout" usage="int mcve_settimeout(resource conn, int seconds)">Set maximum transaction time (per trans)</phpsyntax>
-<phpsyntax function="mcve_settle" usage="int mcve_settle(resource conn, string username, string password, string batch)">Issue a settlement command to do a batch deposit</phpsyntax>
-<phpsyntax function="mcve_text_avs" usage="string mcve_text_avs(string code)">Get a textual representation of the return_avs</phpsyntax>
-<phpsyntax function="mcve_text_code" usage="string mcve_text_code(string code)">Get a textual representation of the return_code</phpsyntax>
-<phpsyntax function="mcve_text_cv" usage="string mcve_text_cv(int code)">Get a textual representation of the return_cv</phpsyntax>
-<phpsyntax function="mcve_transactionauth" usage="string mcve_transactionauth(resource conn, int identifier)">Get the authorization number returned for the transaction (alpha-numeric)</phpsyntax>
-<phpsyntax function="mcve_transactionavs" usage="int mcve_transactionavs(resource conn, int identifier)">Get the Address Verification return status</phpsyntax>
-<phpsyntax function="mcve_transactionbatch" usage="int mcve_transactionbatch(resource conn, int identifier)">Get the batch number associated with the transaction</phpsyntax>
-<phpsyntax function="mcve_transactioncv" usage="int mcve_transactioncv(resource conn, int identifier)">Get the CVC2/CVV2/CID return status</phpsyntax>
-<phpsyntax function="mcve_transactionid" usage="int mcve_transactionid(resource conn, int identifier)">Get the unique system id for the transaction</phpsyntax>
-<phpsyntax function="mcve_transactionitem" usage="int mcve_transactionitem(resource conn, int identifier)">Get the ITEM number in the associated batch for this transaction</phpsyntax>
-<phpsyntax function="mcve_transactionssent" usage="int mcve_transactionssent(resource conn)">Check to see if outgoing buffer is clear</phpsyntax>
-<phpsyntax function="mcve_transactiontext" usage="string mcve_transactiontext(resource conn, int identifier)">Get verbiage (text) return from MCVE or processing institution</phpsyntax>
-<phpsyntax function="mcve_transinqueue" usage="int mcve_transinqueue(resource conn)">Number of transactions in client-queue</phpsyntax>
-<phpsyntax function="mcve_transnew" usage="int mcve_transnew(resource conn)">Start a new transaction</phpsyntax>
-<phpsyntax function="mcve_transparam" usage="int mcve_transparam(resource conn, long identifier, int key, ...)">Add a parameter to a transaction</phpsyntax>
-<phpsyntax function="mcve_transsend" usage="int mcve_transsend(resource conn, long identifier)">Finalize and send the transaction</phpsyntax>
-<phpsyntax function="mcve_ub" usage="int mcve_ub(resource conn, string username, string password)">Get a list of all Unsettled batches</phpsyntax>
-<phpsyntax function="mcve_uwait" usage="int mcve_uwait(long microsecs)">Wait x microsecs</phpsyntax>
-<phpsyntax function="mcve_verifyconnection" usage="bool mcve_verifyconnection(resource conn, int tf)">Set whether or not to PING upon connect to verify connection</phpsyntax>
-<phpsyntax function="mcve_verifysslcert" usage="bool mcve_verifysslcert(resource conn, int tf)">Set whether or not to verify the server ssl certificate</phpsyntax>
-<phpsyntax function="mcve_void" usage="int mcve_void(resource conn, string username, string password, int sid, int ptrannum)">VOID a transaction in the settlement queue</phpsyntax>
-<phpsyntax function="mhash" usage="string mhash(int hash, string data [, string key])">Hash data with hash</phpsyntax>
-<phpsyntax function="mhash_count" usage="int mhash_count(void)">Gets the number of available hashes</phpsyntax>
-<phpsyntax function="mhash_get_block_size" usage="int mhash_get_block_size(int hash)">Gets the block size of hash</phpsyntax>
-<phpsyntax function="mhash_get_hash_name" usage="string mhash_get_hash_name(int hash)">Gets the name of hash</phpsyntax>
-<phpsyntax function="mime_content_type" usage="string mime_content_type(string filename|resource stream)">Return content-type for file</phpsyntax>
-<phpsyntax function="ming_keypress" usage="int ming_keypress(string str)">Returns the action flag for keyPress(char)</phpsyntax>
-<phpsyntax function="ming_setscale" usage="void ming_setscale(int scale)">Set scale (?)</phpsyntax>
-<phpsyntax function="ming_useconstants" usage="void ming_useconstants(int use)">Use constant pool (?)</phpsyntax>
-<phpsyntax function="ming_useswfversion" usage="void ming_useswfversion(int version)">Use SWF version (?)</phpsyntax>
-<phpsyntax function="swfaction_init" usage="object swfaction_init(string)">Returns a new SWFAction object, compiling the given script</phpsyntax>
-<phpsyntax function="swfbitmap_init" usage="class swfbitmap_init(mixed file [, mixed maskfile])">Returns a new SWFBitmap object from jpg (with optional mask) or dbl file</phpsyntax>
-<phpsyntax function="swfbutton_init" usage="object swfbutton_init(void)">Returns a new SWFButton object</phpsyntax>
-<phpsyntax function="swfdisplayitem_move" usage="void swfdisplayitem_move(float dx, float dy)">Displaces this SWFDisplayItem by (dx, dy) in movie coordinates</phpsyntax>
-<phpsyntax function="swfdisplayitem_rotate" usage="void swfdisplayitem_rotate(float degrees)">Rotates this SWFDisplayItem the given (clockwise) degrees from its current orientation</phpsyntax>
-<phpsyntax function="swfdisplayitem_scale" usage="void swfdisplayitem_scale(float xScale, float yScale)">Multiplies this SWFDisplayItem's current x scale by xScale, its y scale by yScale</phpsyntax>
-<phpsyntax function="swffill_init" usage="class swffill_init(void)">Returns a new SWFFill object</phpsyntax>
-<phpsyntax function="swffont_init" usage="object swffont_init(string filename)">Returns a new SWFFont object from given file</phpsyntax>
-<phpsyntax function="swfgradient_init" usage="class swfgradient_init(void)">Returns a new SWFGradient object</phpsyntax>
-<phpsyntax function="swfmorph_init" usage="object swfmorph_init(void)">Returns a new SWFMorph object</phpsyntax>
-<phpsyntax function="swfmovie_add" usage="object swfmovie_add(object SWFBlock)"></phpsyntax>
-<phpsyntax function="swfmovie_init" usage="object swfmovie_init(int version)">Creates swfmovie object according to the passed version</phpsyntax>
-<phpsyntax function="swfmovie_labelframe" usage="void swfmovie_labelframe(object SWFBlock)"></phpsyntax>
-<phpsyntax function="swfmovie_labelframe" usage="void swfmovie_labelframe(string label)">Labels frame</phpsyntax>
-<phpsyntax function="swfmovie_nextframe" usage="void swfmovie_nextframe(void)"></phpsyntax>
-<phpsyntax function="swfmovie_output" usage="int swfmovie_output([int compression])"></phpsyntax>
-<phpsyntax function="swfmovie_save" usage="int swfmovie_save(mixed where [, int compression])">Saves the movie. 'where' can be stream and the movie will be saved there otherwise it is treated as string and written in file with that name</phpsyntax>
-<phpsyntax function="swfshape_addfill" usage="object swfshape_addfill(mixed arg1, int arg2, [int b [, int a]])">Returns a fill object, for use with swfshape_setleftfill and swfshape_setrightfill. If 1 or 2 parameter(s) is (are) passed first should be object (from gradient class) and the second int (flags). Gradient fill is performed. If 3 or 4 parameters are passed : r, g, b [, a]. Solid fill is performed.</phpsyntax>
-<phpsyntax function="swfshape_drawarc" usage="void swfshape_drawarc(float r, float startAngle, float endAngle)">Draws an arc of radius r centered at the current location, from angle startAngle to angle endAngle measured counterclockwise from 12 o'clock</phpsyntax>
-<phpsyntax function="swfshape_drawcircle" usage="void swfshape_drawcircle(float r)">Draws a circle of radius r centered at the current location, in a counter-clockwise fashion</phpsyntax>
-<phpsyntax function="swfshape_drawcubic" usage="void swfshape_drawcubic(float bx, float by, float cx, float cy, float dx, float dy)">Draws a cubic bezier curve using the current position and the three given points as control points</phpsyntax>
-<phpsyntax function="swfshape_drawcubic" usage="void swfshape_drawcubic(float bx, float by, float cx, float cy, float dx, float dy)">Draws a cubic bezier curve using the current position and the three given points as control points</phpsyntax>
-<phpsyntax function="swfshape_drawcurve" usage="void swfshape_drawcurve(float adx, float ady, float bdx, float bdy [, float cdx, float cdy])">Draws a curve from the current pen position (x, y) to the point (x+bdx, y+bdy) in the current line style, using point (x+adx, y+ady) as a control point or draws a cubic bezier to point (x+cdx, x+cdy) with control points (x+adx, y+ady) and (x+bdx, y+bdy)</phpsyntax>
-<phpsyntax function="swfshape_drawcurveto" usage="void swfshape_drawcurveto(float ax, float ay, float bx, float by [, float dx, float dy])">Draws a curve from the current pen position (x,y) to the point (bx, by) in the current line style, using point (ax, ay) as a control point. Or draws a cubic bezier to point (dx, dy) with control points (ax, ay) and (bx, by)</phpsyntax>
-<phpsyntax function="swfshape_drawglyph" usage="void swfshape_drawglyph(SWFFont font, string character [, int size])">Draws the first character in the given string into the shape using the glyph definition from the given font</phpsyntax>
-<phpsyntax function="swfshape_drawline" usage="void swfshape_drawline(float dx, float dy)">Draws a line from the current pen position (x, y) to the point (x+dx, y+dy) in the current line style</phpsyntax>
-<phpsyntax function="swfshape_drawlineto" usage="void swfshape_drawlineto(float x, float y)">Draws a line from the current pen position to shape coordinates (x, y) in the current line style</phpsyntax>
-<phpsyntax function="swfshape_init" usage="object swfshape_init(void)">Returns a new SWFShape object</phpsyntax>
-<phpsyntax function="swfshape_movepen" usage="void swfshape_movepen(float x, float y)">Moves the pen from its current location by vector (x, y)</phpsyntax>
-<phpsyntax function="swfshape_movepento" usage="void swfshape_movepento(float x, float y)">Moves the pen to shape coordinates (x, y)</phpsyntax>
-<phpsyntax function="swfshape_setleftfill" usage="void swfshape_setleftfill(int arg1 [, int g ,int b [,int a]])">Sets the left side fill style to fill in case only one parameter is passed. When 3 or 4 parameters are passed they are treated as : int r, int g, int b, int a . Solid fill is performed in this case before setting left side fill type.</phpsyntax>
-<phpsyntax function="swfshape_setleftfill" usage="void swfshape_setleftfill(int arg1 [, int g ,int b [,int a]])">Sets the right side fill style to fill in case only one parameter is passed. When 3 or 4 parameters are passed they are treated as : int r, int g, int b, int a . Solid fill is performed in this case before setting right side fill type.</phpsyntax>
-<phpsyntax function="swfshape_setline" usage="void swfshape_setline(int width, int r, int g, int b [, int a])">Sets the current line style for this SWFShape</phpsyntax>
-<phpsyntax function="swfsound_init" usage="class swfsound_init(string filename, int flags)">Returns a new SWFSound object from given file</phpsyntax>
-<phpsyntax function="swfsprite_add" usage="object swfsprite_add(object SWFCharacter)">Adds the character to the sprite, returns a displayitem object</phpsyntax>
-<phpsyntax function="swfsprite_init" usage="class swfsprite_init(void)">Returns a new SWFSprite object</phpsyntax>
-<phpsyntax function="swfsprite_remove" usage="void swfsprite_remove(object SWFDisplayItem)">Remove the named character from the sprite's display list</phpsyntax>
-<phpsyntax function="swftext_init" usage="class swftext_init(void)">Returns new SWFText object</phpsyntax>
-<phpsyntax function="swftextfield_align" usage="void swftextfield_align(int alignment)">Sets the alignment of this textfield</phpsyntax>
-<phpsyntax function="swftextfield_init" usage="object swftextfield_init([int flags])">Returns a new SWFTextField object</phpsyntax>
-<phpsyntax function="udm_add_search_limit" usage="int udm_add_search_limit(int agent, int var, string val)">Add mnoGoSearch search restrictions</phpsyntax>
-<phpsyntax function="udm_alloc_agent" usage="int udm_alloc_agent(string dbaddr [, string dbmode])">Allocate mnoGoSearch session</phpsyntax>
-<phpsyntax function="udm_alloc_agent_array" usage="int udm_alloc_agent_array(array dbaddr)">Allocate mnoGoSearch session</phpsyntax>
-<phpsyntax function="udm_api_version" usage="int udm_api_version()">Get mnoGoSearch API version</phpsyntax>
-<phpsyntax function="udm_cat_list" usage="array udm_cat_list(int agent, string category)">Get mnoGoSearch categories list with the same root</phpsyntax>
-<phpsyntax function="udm_cat_path" usage="array udm_cat_path(int agent, string category)">Get mnoGoSearch categories path from the root to the given catgory</phpsyntax>
-<phpsyntax function="udm_check_charset" usage="int udm_check_charset(int agent, string charset)">Check if the given charset is known to mnogosearch</phpsyntax>
-<phpsyntax function="udm_check_stored" usage="int udm_check_stored(int agent, int link, string doc_id)">Open connection to stored</phpsyntax>
-<phpsyntax function="udm_clear_search_limits" usage="int udm_clear_search_limits(int agent)">Clear all mnoGoSearch search restrictions</phpsyntax>
-<phpsyntax function="udm_close_stored" usage="int udm_close_stored(int agent, int link)">Open connection to stored</phpsyntax>
-<phpsyntax function="udm_errno" usage="int udm_errno(int agent)">Get mnoGoSearch error number</phpsyntax>
-<phpsyntax function="udm_error" usage="string udm_error(int agent)">Get mnoGoSearch error message</phpsyntax>
-<phpsyntax function="udm_find" usage="int udm_find(int agent, string query)">Perform search</phpsyntax>
-<phpsyntax function="udm_free_agent" usage="int udm_free_agent(int agent)">Free mnoGoSearch session</phpsyntax>
-<phpsyntax function="udm_free_ispell_data" usage="int udm_free_ispell_data(int agent)">Free memory allocated for ispell data</phpsyntax>
-<phpsyntax function="udm_free_res" usage="int udm_free_res(int res)">mnoGoSearch free result</phpsyntax>
-<phpsyntax function="udm_get_doc_count" usage="int udm_get_doc_count(int agent)">Get total number of documents in database</phpsyntax>
-<phpsyntax function="udm_get_res_field" usage="string udm_get_res_field(int res, int row, int field)">Fetch mnoGoSearch result field</phpsyntax>
-<phpsyntax function="udm_get_res_field_ex" usage="string udm_get_res_field_ex(int res, int row, string field)">Fetch mnoGoSearch result field</phpsyntax>
-<phpsyntax function="udm_get_res_param" usage="string udm_get_res_param(int res, int param)">Get mnoGoSearch result parameters</phpsyntax>
-<phpsyntax function="udm_load_ispell_data" usage="int udm_load_ispell_data(int agent, int var, string val1, [string charset], string val2, int flag)">Load ispell data</phpsyntax>
-<phpsyntax function="udm_make_excerpt" usage="int udm_make_excerpt(int agent, int res, int row)">Perform search</phpsyntax>
-<phpsyntax function="udm_open_stored" usage="int udm_open_stored(int agent, string storedaddr)">Open connection to stored</phpsyntax>
-<phpsyntax function="udm_parse_query_string" usage="int udm_parse_query_string(int agent, string str)">Parses query string, initialises variables and search limits taken from it</phpsyntax>
-<phpsyntax function="udm_set_agent_param" usage="int udm_set_agent_param(int agent, int var, string val)">Set mnoGoSearch agent session parameters</phpsyntax>
-<phpsyntax function="udm_set_agent_param_ex" usage="int udm_set_agent_param_ex(int agent, string var, string val)">Set mnoGoSearch agent session parameters extended</phpsyntax>
-<phpsyntax function="msession_call" usage="string msession_call(string fn_name, [, string param1 ], ... [,string param4])">Call the plugin function named fn_name</phpsyntax>
-<phpsyntax function="msession_connect" usage="bool msession_connect(string host, string port)">Connect to msession sever</phpsyntax>
-<phpsyntax function="msession_count" usage="int msession_count(void)">Get session count</phpsyntax>
-<phpsyntax function="msession_create" usage="bool msession_create(string session)">Create a session</phpsyntax>
-<phpsyntax function="msession_ctl" usage="int msession_ctl(string name)">Lock a session</phpsyntax>
-<phpsyntax function="msession_destroy" usage="bool msession_destroy(string name)">Destroy a session</phpsyntax>
-<phpsyntax function="msession_disconnect" usage="void msession_disconnect(void)">Disconnect from msession server</phpsyntax>
-<phpsyntax function="msession_exec" usage="string msession_exec(string cmdline)">executes a program on msession system</phpsyntax>
-<phpsyntax function="msession_find" usage="array msession_find(string name, string value)">Find all sessions with name and value</phpsyntax>
-<phpsyntax function="msession_get" usage="string msession_get(string session, string name, string default_value)">Get value from session</phpsyntax>
-<phpsyntax function="msession_get_array" usage="array msession_get_array(string session)">Get array of msession variables</phpsyntax>
-<phpsyntax function="msession_get_data" usage="string msession_get_data(string session)">Get data session unstructured data. (PHP sessions use this)</phpsyntax>
-<phpsyntax function="msession_inc" usage="string msession_inc(string session, string name)">Increment value in session</phpsyntax>
-<phpsyntax function="msession_list" usage="array msession_list(void)">List all sessions</phpsyntax>
-<phpsyntax function="msession_listvar" usage="array msession_listvar(string name)">return associative array of value:session for all sessions with a variable named 'name'</phpsyntax>
-<phpsyntax function="msession_lock" usage="int msession_lock(string name)">Lock a session</phpsyntax>
-<phpsyntax function="msession_ping" usage="bool msession_ping(void)">returns non-zero if msession is alive</phpsyntax>
-<phpsyntax function="msession_plugin" usage="string msession_plugin(string session, string val [, string param ])">Call the personality plugin escape function</phpsyntax>
-<phpsyntax function="msession_randstr" usage="string msession_randstr(int num_chars)">Get random string</phpsyntax>
-<phpsyntax function="msession_set" usage="bool msession_set(string session, string name, string value)">Set value in session</phpsyntax>
-<phpsyntax function="msession_set_array" usage="bool msession_set_array(string session, array tuples)">Set msession variables from an array</phpsyntax>
-<phpsyntax function="msession_set_data" usage="bool msession_set_data(string session, string value)">Set data session unstructured data. (PHP sessions use this)</phpsyntax>
-<phpsyntax function="msession_timeout" usage="int msession_timeout(string session [, int param ])">Set/get session timeout</phpsyntax>
-<phpsyntax function="msession_uniq" usage="string msession_uniq(int num_chars)">Get uniq id</phpsyntax>
-<phpsyntax function="msession_unlock" usage="int msession_unlock(string session, int key)">Unlock a session</phpsyntax>
-<phpsyntax function="msql_affected_rows" usage="int msql_affected_rows(resource query)">Return number of affected rows</phpsyntax>
-<phpsyntax function="msql_close" usage="bool msql_close([resource link_identifier])">Close an mSQL connection</phpsyntax>
-<phpsyntax function="msql_connect" usage="int msql_connect([string hostname[:port]] [, string username] [, string password])">Open a connection to an mSQL Server</phpsyntax>
-<phpsyntax function="msql_create_db" usage="bool msql_create_db(string database_name [, resource link_identifier])">Create an mSQL database</phpsyntax>
-<phpsyntax function="msql_data_seek" usage="bool msql_data_seek(resource query, int row_number)">Move internal result pointer</phpsyntax>
-<phpsyntax function="msql_db_query" usage="resource msql_db_query(string database_name, string query [, resource link_identifier])">Send an SQL query to mSQL</phpsyntax>
-<phpsyntax function="msql_drop_db" usage="bool msql_drop_db(string database_name [, resource link_identifier])">Drop (delete) an mSQL database</phpsyntax>
-<phpsyntax function="msql_error" usage="string msql_error(void)">Returns the text of the error message from previous mSQL operation</phpsyntax>
-<phpsyntax function="msql_fetch_array" usage="array msql_fetch_array(resource query [, int result_type])">Fetch a result row as an associative array</phpsyntax>
-<phpsyntax function="msql_fetch_field" usage="object msql_fetch_field(resource query [, int field_offset])">Get column information from a result and return as an object</phpsyntax>
-<phpsyntax function="msql_fetch_object" usage="object msql_fetch_object(resource query [, resource result_type])">Fetch a result row as an object</phpsyntax>
-<phpsyntax function="msql_fetch_row" usage="array msql_fetch_row(resource query)">Get a result row as an enumerated array</phpsyntax>
-<phpsyntax function="msql_field_flags" usage="string msql_field_flags(resource query, int field_offset)">Get the flags associated with the specified field in a result</phpsyntax>
-<phpsyntax function="msql_field_len" usage="int msql_field_len(int query, int field_offet)">Returns the length of the specified field</phpsyntax>
-<phpsyntax function="msql_field_name" usage="string msql_field_name(resource query, int field_index)">Get the name of the specified field in a result</phpsyntax>
-<phpsyntax function="msql_field_seek" usage="bool msql_field_seek(resource query, int field_offset)">Set result pointer to a specific field offset</phpsyntax>
-<phpsyntax function="msql_field_table" usage="string msql_field_table(resource query, int field_offset)">Get name of the table the specified field is in</phpsyntax>
-<phpsyntax function="msql_field_type" usage="string msql_field_type(resource query, int field_offset)">Get the type of the specified field in a result</phpsyntax>
-<phpsyntax function="msql_free_result" usage="bool msql_free_result(resource query)">Free result memory</phpsyntax>
-<phpsyntax function="msql_list_dbs" usage="resource msql_list_dbs([resource link_identifier])">List databases available on an mSQL server</phpsyntax>
-<phpsyntax function="msql_list_fields" usage="resource msql_list_fields(string database_name, string table_name [, resource link_identifier])">List mSQL result fields</phpsyntax>
-<phpsyntax function="msql_list_tables" usage="resource msql_list_tables(string database_name [, resource link_identifier])">List tables in an mSQL database</phpsyntax>
-<phpsyntax function="msql_num_fields" usage="int msql_num_fields(resource query)">Get number of fields in a result</phpsyntax>
-<phpsyntax function="msql_num_rows" usage="int msql_num_rows(resource query)">Get number of rows in a result</phpsyntax>
-<phpsyntax function="msql_pconnect" usage="int msql_pconnect([string hostname[:port]] [, string username] [, string password])">Open a persistent connection to an mSQL Server</phpsyntax>
-<phpsyntax function="msql_query" usage="resource msql_query(string query [, resource link_identifier])">Send an SQL query to mSQL</phpsyntax>
-<phpsyntax function="msql_result" usage="string msql_result(int query, int row [, mixed field])">Get result data</phpsyntax>
-<phpsyntax function="msql_select_db" usage="bool msql_select_db(string database_name [, resource link_identifier])">Select an mSQL database</phpsyntax>
-<phpsyntax function="mssql_bind" usage="bool mssql_bind(resource stmt, string param_name, mixed var, int type [, int is_output [, int is_null [, int maxlen]]])">Adds a parameter to a stored procedure or a remote stored procedure</phpsyntax>
-<phpsyntax function="mssql_close" usage="bool mssql_close([resource conn_id])">Closes a connection to a MS-SQL server</phpsyntax>
-<phpsyntax function="mssql_connect" usage="int mssql_connect([string servername [, string username [, string password]]])">Establishes a connection to a MS-SQL server</phpsyntax>
-<phpsyntax function="mssql_data_seek" usage="bool mssql_data_seek(resource result_id, int offset)">Moves the internal row pointer of the MS-SQL result associated with the specified result identifier to pointer to the specified row number</phpsyntax>
-<phpsyntax function="mssql_execute" usage="mixed mssql_execute(resource stmt [, bool skip_results = false])">Executes a stored procedure on a MS-SQL server database</phpsyntax>
-<phpsyntax function="mssql_fetch_array" usage="array mssql_fetch_array(resource result_id [, int result_type])">Returns an associative array of the current row in the result set specified by result_id</phpsyntax>
-<phpsyntax function="mssql_fetch_assoc" usage="array mssql_fetch_assoc(resource result_id)">Returns an associative array of the current row in the result set specified by result_id</phpsyntax>
-<phpsyntax function="mssql_fetch_batch" usage="int mssql_fetch_batch(resource result_index)">Returns the next batch of records</phpsyntax>
-<phpsyntax function="mssql_fetch_field" usage="object mssql_fetch_field(resource result_id [, int offset])">Gets information about certain fields in a query result</phpsyntax>
-<phpsyntax function="mssql_fetch_object" usage="object mssql_fetch_object(resource result_id [, int result_type])">Returns a psuedo-object of the current row in the result set specified by result_id</phpsyntax>
-<phpsyntax function="mssql_fetch_row" usage="array mssql_fetch_row(resource result_id)">Returns an array of the current row in the result set specified by result_id</phpsyntax>
-<phpsyntax function="mssql_field_length" usage="int mssql_field_length(resource result_id [, int offset])">Get the length of a MS-SQL field</phpsyntax>
-<phpsyntax function="mssql_field_name" usage="string mssql_field_name(resource result_id [, int offset])">Returns the name of the field given by offset in the result set given by result_id</phpsyntax>
-<phpsyntax function="mssql_field_seek" usage="bool mssql_field_seek(int result_id, int offset)">Seeks to the specified field offset</phpsyntax>
-<phpsyntax function="mssql_field_type" usage="string mssql_field_type(resource result_id [, int offset])">Returns the type of a field</phpsyntax>
-<phpsyntax function="mssql_free_result" usage="bool mssql_free_result(resource result_index)">Free a MS-SQL result index</phpsyntax>
-<phpsyntax function="mssql_free_statement" usage="bool mssql_free_statement(resource result_index)">Free a MS-SQL statement index</phpsyntax>
-<phpsyntax function="mssql_get_last_message" usage="string mssql_get_last_message(void)">Gets the last message from the MS-SQL server</phpsyntax>
-<phpsyntax function="mssql_guid_string" usage="string mssql_guid_string(string binary [,int short_format])">Converts a 16 byte binary GUID to a string</phpsyntax>
-<phpsyntax function="mssql_init" usage="int mssql_init(string sp_name [, resource conn_id])">Initializes a stored procedure or a remote stored procedure</phpsyntax>
-<phpsyntax function="mssql_min_error_severity" usage="void mssql_min_error_severity(int severity)">Sets the lower error severity</phpsyntax>
-<phpsyntax function="mssql_min_message_severity" usage="void mssql_min_message_severity(int severity)">Sets the lower message severity</phpsyntax>
-<phpsyntax function="mssql_next_result" usage="bool mssql_next_result(resource result_id)">Move the internal result pointer to the next result</phpsyntax>
-<phpsyntax function="mssql_num_fields" usage="int mssql_num_fields(resource mssql_result_index)">Returns the number of fields fetched in from the result id specified</phpsyntax>
-<phpsyntax function="mssql_num_rows" usage="int mssql_num_rows(resource mssql_result_index)">Returns the number of rows fetched in from the result id specified</phpsyntax>
-<phpsyntax function="mssql_pconnect" usage="int mssql_pconnect([string servername [, string username [, string password]]])">Establishes a persistent connection to a MS-SQL server</phpsyntax>
-<phpsyntax function="mssql_query" usage="resource mssql_query(string query [, resource conn_id [, int batch_size]])">Perform an SQL query on a MS-SQL server database</phpsyntax>
-<phpsyntax function="mssql_result" usage="string mssql_result(resource result_id, int row, mixed field)">Returns the contents of one cell from a MS-SQL result set</phpsyntax>
-<phpsyntax function="mssql_rows_affected" usage="int mssql_rows_affected(resource conn_id)">Returns the number of records affected by the query</phpsyntax>
-<phpsyntax function="mssql_select_db" usage="bool mssql_select_db(string database_name [, resource conn_id])">Select a MS-SQL database</phpsyntax>
-<phpsyntax function="mysql_affected_rows" usage="int mysql_affected_rows([int link_identifier])">Gets number of affected rows in previous MySQL operation</phpsyntax>
-<phpsyntax function="mysql_client_encoding" usage="string mysql_client_encoding([int link_identifier])">Returns the default character set for the current connection</phpsyntax>
-<phpsyntax function="mysql_close" usage="bool mysql_close([int link_identifier])">Close a MySQL connection</phpsyntax>
-<phpsyntax function="mysql_connect" usage="resource mysql_connect([string hostname[:port][:/path/to/socket] [, string username [, string password [, bool new [, int flags]]]]])">Opens a connection to a MySQL Server</phpsyntax>
-<phpsyntax function="mysql_create_db" usage="bool mysql_create_db(string database_name [, int link_identifier])">Create a MySQL database</phpsyntax>
-<phpsyntax function="mysql_data_seek" usage="bool mysql_data_seek(resource result, int row_number)">Move internal result pointer</phpsyntax>
-<phpsyntax function="mysql_db_query" usage="resource mysql_db_query(string database_name, string query [, int link_identifier])">Sends an SQL query to MySQL</phpsyntax>
-<phpsyntax function="mysql_drop_db" usage="bool mysql_drop_db(string database_name [, int link_identifier])">Drops (delete) a MySQL database</phpsyntax>
-<phpsyntax function="mysql_errno" usage="int mysql_errno([int link_identifier])">Returns the number of the error message from previous MySQL operation</phpsyntax>
-<phpsyntax function="mysql_error" usage="string mysql_error([int link_identifier])">Returns the text of the error message from previous MySQL operation</phpsyntax>
-<phpsyntax function="mysql_escape_string" usage="string mysql_escape_string(string to_be_escaped)">Escape string for mysql query</phpsyntax>
-<phpsyntax function="mysql_fetch_array" usage="array mysql_fetch_array(resource result [, int result_type])">Fetch a result row as an array (associative, numeric or both)</phpsyntax>
-<phpsyntax function="mysql_fetch_assoc" usage="array mysql_fetch_assoc(resource result)">Fetch a result row as an associative array</phpsyntax>
-<phpsyntax function="mysql_fetch_field" usage="object mysql_fetch_field(resource result [, int field_offset])">Gets column information from a result and return as an object</phpsyntax>
-<phpsyntax function="mysql_fetch_lengths" usage="array mysql_fetch_lengths(resource result)">Gets max data size of each column in a result</phpsyntax>
-<phpsyntax function="mysql_fetch_object" usage="object mysql_fetch_object(resource result [, string class_name [, NULL|array ctor_params]])">Fetch a result row as an object</phpsyntax>
-<phpsyntax function="mysql_fetch_row" usage="array mysql_fetch_row(resource result)">Gets a result row as an enumerated array</phpsyntax>
-<phpsyntax function="mysql_field_flags" usage="string mysql_field_flags(resource result, int field_offset)">Gets the flags associated with the specified field in a result</phpsyntax>
-<phpsyntax function="mysql_field_len" usage="int mysql_field_len(resource result, int field_offset)">Returns the length of the specified field</phpsyntax>
-<phpsyntax function="mysql_field_name" usage="string mysql_field_name(resource result, int field_index)">Gets the name of the specified field in a result</phpsyntax>
-<phpsyntax function="mysql_field_seek" usage="bool mysql_field_seek(resource result, int field_offset)">Sets result pointer to a specific field offset</phpsyntax>
-<phpsyntax function="mysql_field_table" usage="string mysql_field_table(resource result, int field_offset)">Gets name of the table the specified field is in</phpsyntax>
-<phpsyntax function="mysql_field_type" usage="string mysql_field_type(resource result, int field_offset)">Gets the type of the specified field in a result</phpsyntax>
-<phpsyntax function="mysql_free_result" usage="bool mysql_free_result(resource result)">Free result memory</phpsyntax>
-<phpsyntax function="mysql_get_client_info" usage="string mysql_get_client_info(void)">Returns a string that represents the client library version</phpsyntax>
-<phpsyntax function="mysql_get_host_info" usage="string mysql_get_host_info([int link_identifier])">Returns a string describing the type of connection in use, including the server host name</phpsyntax>
-<phpsyntax function="mysql_get_proto_info" usage="int mysql_get_proto_info([int link_identifier])">Returns the protocol version used by current connection</phpsyntax>
-<phpsyntax function="mysql_get_server_info" usage="string mysql_get_server_info([int link_identifier])">Returns a string that represents the server version number</phpsyntax>
-<phpsyntax function="mysql_info" usage="string mysql_info([int link_identifier])">Returns a string containing information about the most recent query</phpsyntax>
-<phpsyntax function="mysql_insert_id" usage="int mysql_insert_id([int link_identifier])">Gets the ID generated from the previous INSERT operation</phpsyntax>
-<phpsyntax function="mysql_list_dbs" usage="resource mysql_list_dbs([int link_identifier])">List databases available on a MySQL server</phpsyntax>
-<phpsyntax function="mysql_list_fields" usage="resource mysql_list_fields(string database_name, string table_name [, int link_identifier])">List MySQL result fields</phpsyntax>
-<phpsyntax function="mysql_list_processes" usage="resource mysql_list_processes([int link_identifier])">Returns a result set describing the current server threads</phpsyntax>
-<phpsyntax function="mysql_list_tables" usage="resource mysql_list_tables(string database_name [, int link_identifier])">List tables in a MySQL database</phpsyntax>
-<phpsyntax function="mysql_num_fields" usage="int mysql_num_fields(resource result)">Gets number of fields in a result</phpsyntax>
-<phpsyntax function="mysql_num_rows" usage="int mysql_num_rows(resource result)">Gets number of rows in a result</phpsyntax>
-<phpsyntax function="mysql_pconnect" usage="resource mysql_pconnect([string hostname[:port][:/path/to/socket] [, string username [, string password [, int flags]]]])">Opens a persistent connection to a MySQL Server</phpsyntax>
-<phpsyntax function="mysql_ping" usage="bool mysql_ping([int link_identifier])">Ping a server connection. If no connection then reconnect.</phpsyntax>
-<phpsyntax function="mysql_query" usage="resource mysql_query(string query [, int link_identifier])">Sends an SQL query to MySQL</phpsyntax>
-<phpsyntax function="mysql_real_escape_string" usage="string mysql_real_escape_string(string to_be_escaped [, int link_identifier])">Escape special characters in a string for use in a SQL statement, taking into account the current charset of the connection</phpsyntax>
-<phpsyntax function="mysql_result" usage="mixed mysql_result(resource result, int row [, mixed field])">Gets result data</phpsyntax>
-<phpsyntax function="mysql_select_db" usage="bool mysql_select_db(string database_name [, int link_identifier])">Selects a MySQL database</phpsyntax>
-<phpsyntax function="mysql_stat" usage="string mysql_stat([int link_identifier])">Returns a string containing status information</phpsyntax>
-<phpsyntax function="mysql_thread_id" usage="int mysql_thread_id([int link_identifier])">Returns the thread id of current connection</phpsyntax>
-<phpsyntax function="mysql_unbuffered_query" usage="resource mysql_unbuffered_query(string query [, int link_identifier])">Sends an SQL query to MySQL, without fetching and buffering the result rows</phpsyntax>
-<phpsyntax function="mysqli_affected_rows" usage="mixed mysqli_affected_rows(object link)">Get number of affected rows in previous MySQL operation</phpsyntax>
-<phpsyntax function="mysqli_autocommit" usage="bool mysqli_autocommit(object link, bool mode)">Turn auto commit on or of</phpsyntax>
-<phpsyntax function="mysqli_change_user" usage="bool mysqli_change_user(object link, string user, string password, string database)">Change logged-in user of the active connection</phpsyntax>
-<phpsyntax function="mysqli_character_set_name" usage="string mysqli_character_set_name(object link)">Returns the name of the character set used for this connection</phpsyntax>
-<phpsyntax function="mysqli_close" usage="bool mysqli_close(object link)">Close connection</phpsyntax>
-<phpsyntax function="mysqli_commit" usage="bool mysqli_commit(object link)">Commit outstanding actions and close transaction</phpsyntax>
-<phpsyntax function="mysqli_data_seek" usage="bool mysqli_data_seek(object result, int offset)">Move internal result pointer</phpsyntax>
-<phpsyntax function="mysqli_debug" usage="void mysqli_debug(string debug)"></phpsyntax>
-<phpsyntax function="mysqli_dump_debug_info" usage="bool mysqli_dump_debug_info(object link)"></phpsyntax>
-<phpsyntax function="mysqli_errno" usage="int mysqli_errno(object link)">Returns the numerical value of the error message from previous MySQL operation</phpsyntax>
-<phpsyntax function="mysqli_error" usage="string mysqli_error(object link)">Returns the text of the error message from previous MySQL operation</phpsyntax>
-<phpsyntax function="mysqli_field_count" usage="int mysqli_field_count(object link)">Fetch the number of fields returned by the last query for the given link</phpsyntax>
-<phpsyntax function="mysqli_field_seek" usage="int mysqli_field_seek(object result, int fieldnr)">Set result pointer to a specified field offset</phpsyntax>
-<phpsyntax function="mysqli_field_tell" usage="int mysqli_field_tell(object result)">Get current field offset of result pointer</phpsyntax>
-<phpsyntax function="mysqli_free_result" usage="void mysqli_free_result(object result)">Free query result memory for the given result handle</phpsyntax>
-<phpsyntax function="mysqli_get_client_info" usage="string mysqli_get_client_info(void)">Get MySQL client info</phpsyntax>
-<phpsyntax function="mysqli_get_client_version" usage="int mysqli_get_client_version(void)">Get MySQL client info</phpsyntax>
-<phpsyntax function="mysqli_get_proto_info" usage="int mysqli_get_proto_info(object link)">Get MySQL protocol information</phpsyntax>
-<phpsyntax function="mysqli_get_server_info" usage="string mysqli_get_server_info(object link)">Get MySQL server info</phpsyntax>
-<phpsyntax function="mysqli_get_server_version" usage="int mysqli_get_server_version(object link)">Return the MySQL version for the server referenced by the given link</phpsyntax>
-<phpsyntax function="mysqli_info" usage="string mysqli_info(object link)">Get information about the most recent query</phpsyntax>
-<phpsyntax function="mysqli_init" usage="resource mysqli_init(void)">Initialize mysqli and return a resource for use with mysql_real_connect</phpsyntax>
-<phpsyntax function="mysqli_insert_id" usage="mixed mysqli_insert_id(object link)">Get the ID generated from the previous INSERT operation</phpsyntax>
-<phpsyntax function="mysqli_kill" usage="bool mysqli_kill(object link, int processid)">Kill a mysql process on the server</phpsyntax>
-<phpsyntax function="mysqli_more_results" usage="bool mysqli_more_results(object link)">check if there any more query results from a multi query</phpsyntax>
-<phpsyntax function="mysqli_next_result" usage="bool mysqli_next_result(object link)">read next result from multi_query</phpsyntax>
-<phpsyntax function="mysqli_num_fields" usage="int mysqli_num_fields(object result)">Get number of fields in result</phpsyntax>
-<phpsyntax function="mysqli_num_rows" usage="mixed mysqli_num_rows(object result)">Get number of rows in result</phpsyntax>
-<phpsyntax function="mysqli_options" usage="bool mysqli_options(object link, int flags, mixed values)">Set options</phpsyntax>
-<phpsyntax function="mysqli_ping" usage="bool mysqli_ping(object link)">Ping a server connection or reconnect if there is no connection</phpsyntax>
-<phpsyntax function="mysqli_prepare" usage="mixed mysqli_prepare(object link, string query)">Prepare a SQL statement for execution</phpsyntax>
-<phpsyntax function="mysqli_real_connect" usage="bool mysqli_real_connect(object link [,string hostname [,string username [,string passwd [,string dbname [,int port [,string socket [,int flags]]]]]]])">Open a connection to a mysql server</phpsyntax>
-<phpsyntax function="mysqli_real_escape_string" usage="string mysqli_real_escape_string(object link, string escapestr)">Escapes special characters in a string for use in a SQL statement, taking into account the current charset of the connection</phpsyntax>
-<phpsyntax function="mysqli_real_query" usage="bool mysqli_real_query(object link, string query)">Binary-safe version of mysql_query()</phpsyntax>
-<phpsyntax function="mysqli_rollback" usage="bool mysqli_rollback(object link)">Undo actions from current transaction</phpsyntax>
-<phpsyntax function="mysqli_select_db" usage="string mysqli_select_db(object link, string dbname)">Select a MySQL database</phpsyntax>
-<phpsyntax function="mysqli_send_long_data" usage="bool mysqli_send_long_data(object stmt, int param_nr, string data)"></phpsyntax>
-<phpsyntax function="mysqli_server_end" usage="void mysqli_server_end(void)"></phpsyntax>
-<phpsyntax function="mysqli_server_init" usage="bool mysqli_server_init(void)">initialize embedded server</phpsyntax>
-<phpsyntax function="mysqli_sqlstate" usage="string mysqli_sqlstate(object link)">Returns the SQLSTATE error from previous MySQL operation</phpsyntax>
-<phpsyntax function="mysqli_ssl_set" usage="bool mysqli_ssl_set(object link ,string key ,string cert ,string ca ,string capath ,string cipher])"></phpsyntax>
-<phpsyntax function="mysqli_stat" usage="mixed mysqli_stat(object link)">Get current system status</phpsyntax>
-<phpsyntax function="mysqli_stmt_affected_rows" usage="mixed mysqli_stmt_affected_rows(object stmt)">Return the number of rows affected in the last query for the given link</phpsyntax>
-<phpsyntax function="mysqli_stmt_bind_param" usage="bool mysqli_stmt_bind_param(object stmt, string types, mixed variable [,mixed,....])">Bind variables to a prepared statement as parameters</phpsyntax>
-<phpsyntax function="mysqli_stmt_bind_result" usage="bool mysqli_stmt_bind_result(object stmt, mixed var, [,mixed, ...])">Bind variables to a prepared statement for result storage</phpsyntax>
-<phpsyntax function="mysqli_stmt_close" usage="bool mysqli_stmt_close(object stmt)">Close statement</phpsyntax>
-<phpsyntax function="mysqli_stmt_data_seek" usage="void mysqli_stmt_data_seek(object stmt, int offset)">Move internal result pointer</phpsyntax>
-<phpsyntax function="mysqli_stmt_errno" usage="int mysqli_stmt_errno(object stmt)"></phpsyntax>
-<phpsyntax function="mysqli_stmt_error" usage="string mysqli_stmt_error(object stmt)"></phpsyntax>
-<phpsyntax function="mysqli_stmt_execute" usage="bool mysqli_stmt_execute(object stmt)">Execute a prepared statement</phpsyntax>
-<phpsyntax function="mysqli_stmt_fetch" usage="mixed mysqli_stmt_fetch(object stmt)">Fetch results from a prepared statement into the bound variables</phpsyntax>
-<phpsyntax function="mysqli_stmt_free_result" usage="void mysqli_stmt_free_result(object stmt)">Free stored result memory for the given statement handle</phpsyntax>
-<phpsyntax function="mysqli_stmt_init" usage="object mysqli_stmt_init(object link)">Initialize statement object</phpsyntax>
-<phpsyntax function="mysqli_stmt_num_rows" usage="mixed mysqli_stmt_num_rows(object stmt)">Return the number of rows in statements result set</phpsyntax>
-<phpsyntax function="mysqli_stmt_prepare" usage="bool mysqli_stmt_prepare(object link, string query)">prepare server side statement with query</phpsyntax>
-<phpsyntax function="mysqli_stmt_reset" usage="void mysqli_stmt_reset(object stmt)">reset a prepared statement</phpsyntax>
-<phpsyntax function="mysqli_stmt_result_metadata" usage="mixed mysqli_stmt_result_metadata(object stmt)">return result set from statement</phpsyntax>
-<phpsyntax function="mysqli_stmt_sqlstate" usage="string mysqli_stmt_sqlstate(object stmt)"></phpsyntax>
-<phpsyntax function="mysqli_stmt_store_result" usage="bool mysqli_stmt_store_result(stmt)"></phpsyntax>
-<phpsyntax function="mysqli_store_result" usage="object mysqli_store_result(object link)">Buffer result set on client</phpsyntax>
-<phpsyntax function="mysqli_thread_id" usage="int mysqli_thread_id(object link)">Return the current thread ID</phpsyntax>
-<phpsyntax function="mysqli_thread_safe" usage="bool mysqli_thread_safe(void)">Return whether thread safety is given or not</phpsyntax>
-<phpsyntax function="mysqli_use_result" usage="mixed mysqli_use_result(object link)">Directly retrieve query results - do not buffer results on client side</phpsyntax>
-<phpsyntax function="mysqli_connect" usage="object mysqli_connect([string hostname [,string username [,string passwd [,string dbname [,int port [,string socket]]]]]])">Open a connection to a mysql server</phpsyntax>
-<phpsyntax function="mysqli_connect_errno" usage="int mysqli_connect_errno(void)">Returns the numerical value of the error message from last connect command</phpsyntax>
-<phpsyntax function="mysqli_connect_error" usage="string mysqli_connect_error(void)">Returns the text of the error message from previous MySQL operation</phpsyntax>
-<phpsyntax function="mysqli_embedded_connect" usage="object mysqli_embedded_connect(void)">Open a connection to a embedded mysql server</phpsyntax>
-<phpsyntax function="mysqli_multi_query" usage="bool mysqli_multi_query(object link, string query)">Binary-safe version of mysql_query()</phpsyntax>
-<phpsyntax function="mysqli_query" usage="mixed mysqli_query(object link, string query [,int resultmode])"></phpsyntax>
-<phpsyntax function="mysqli_disable_reads_from_master" usage="void mysqli_disable_reads_from_master(object link)"></phpsyntax>
-<phpsyntax function="mysqli_disable_rpl_parse" usage="void mysqli_disable_rpl_parse(object link)"></phpsyntax>
-<phpsyntax function="mysqli_enable_reads_from_master" usage="void mysqli_enable_reads_from_master(object link)"></phpsyntax>
-<phpsyntax function="mysqli_enable_rpl_parse" usage="void mysqli_enable_rpl_parse(object link)"></phpsyntax>
-<phpsyntax function="mysqli_master_query" usage="bool mysqli_master_query(object link, string query)">Enforce execution of a query on the master in a master/slave setup</phpsyntax>
-<phpsyntax function="mysqli_rpl_parse_enabled" usage="int mysqli_rpl_parse_enabled(object link)"></phpsyntax>
-<phpsyntax function="mysqli_rpl_probe" usage="bool mysqli_rpl_probe(object link)"></phpsyntax>
-<phpsyntax function="mysqli_rpl_query_type" usage="int mysqli_rpl_query_type(string query)"></phpsyntax>
-<phpsyntax function="mysqli_send_query" usage="bool mysqli_send_query(object link, string query)"></phpsyntax>
-<phpsyntax function="mysqli_slave_query" usage="bool mysqli_slave_query(object link, string query)">Enforce execution of a query on a slave in a master/slave setup</phpsyntax>
-<phpsyntax function="ncurses_addch" usage="int ncurses_addch(int ch)">Adds character at current position and advance cursor</phpsyntax>
-<phpsyntax function="ncurses_addchnstr" usage="int ncurses_addchnstr(string s, int n)">Adds attributed string with specified length at current position</phpsyntax>
-<phpsyntax function="ncurses_addchstr" usage="int ncurses_addchstr(string s)">Adds attributed string at current position</phpsyntax>
-<phpsyntax function="ncurses_addnstr" usage="int ncurses_addnstr(string s, int n)">Adds string with specified length at current position</phpsyntax>
-<phpsyntax function="ncurses_addstr" usage="int ncurses_addstr(string text)">Outputs text at current position</phpsyntax>
-<phpsyntax function="ncurses_assume_default_colors" usage="int ncurses_assume_default_colors(int fg, int bg)">Defines default colors for color 0</phpsyntax>
-<phpsyntax function="ncurses_attroff" usage="int ncurses_attroff(int attributes)">Turns off the given attributes</phpsyntax>
-<phpsyntax function="ncurses_attron" usage="int ncurses_attron(int attributes)">Turns on the given attributes</phpsyntax>
-<phpsyntax function="ncurses_attrset" usage="int ncurses_attrset(int attributes)">Sets given attributes</phpsyntax>
-<phpsyntax function="ncurses_baudrate" usage="int ncurses_baudrate(void)">Returns baudrate of terminal</phpsyntax>
-<phpsyntax function="ncurses_beep" usage="int ncurses_beep(void)">Let the terminal beep</phpsyntax>
-<phpsyntax function="ncurses_bkgd" usage="int ncurses_bkgd(int attrchar)">Sets background property for terminal screen</phpsyntax>
-<phpsyntax function="ncurses_bkgdset" usage="void ncurses_bkgdset(int attrchar)">Controls screen background</phpsyntax>
-<phpsyntax function="ncurses_border" usage="int ncurses_border(int left, int right, int top, int bottom, int tl_corner, int tr_corner, int bl_corner, int br_corner)">Draws a border around the screen using attributed characters</phpsyntax>
-<phpsyntax function="ncurses_bottom_panel" usage="int ncurses_bottom_panel(resource panel)">Moves a visible panel to the bottom of the stack</phpsyntax>
-<phpsyntax function="ncurses_can_change_color" usage="bool ncurses_can_change_color(void)">Checks if we can change terminals colors</phpsyntax>
-<phpsyntax function="ncurses_cbreak" usage="bool ncurses_cbreak(void)">Switches of input buffering</phpsyntax>
-<phpsyntax function="ncurses_clear" usage="bool ncurses_clear(void)">Clears screen</phpsyntax>
-<phpsyntax function="ncurses_clrtobot" usage="bool ncurses_clrtobot(void)">Clears screen from current position to bottom</phpsyntax>
-<phpsyntax function="ncurses_clrtoeol" usage="bool ncurses_clrtoeol(void)">Clears screen from current position to end of line</phpsyntax>
-<phpsyntax function="ncurses_color_content" usage="int ncurses_color_content(int color, int &amp;r, int &amp;g, int &amp;b)">Gets the RGB value for color</phpsyntax>
-<phpsyntax function="ncurses_color_set" usage="int ncurses_color_set(int pair)">Sets fore- and background color</phpsyntax>
-<phpsyntax function="ncurses_curs_set" usage="int ncurses_curs_set(int visibility)">Sets cursor state</phpsyntax>
-<phpsyntax function="ncurses_def_prog_mode" usage="int ncurses_def_prog_mode(void)">Saves terminals (program) mode</phpsyntax>
-<phpsyntax function="ncurses_def_shell_mode" usage="int ncurses_def_shell_mode(void)">Saves terminal (shell) mode</phpsyntax>
-<phpsyntax function="ncurses_define_key" usage="int ncurses_define_key(string definition, int keycode)">Defines a keycode</phpsyntax>
-<phpsyntax function="ncurses_del_panel" usage="bool ncurses_del_panel(resource panel)">Remove panel from the stack and delete it (but not the associated window)</phpsyntax>
-<phpsyntax function="ncurses_delay_output" usage="int ncurses_delay_output(int milliseconds)">Delays output on terminal using padding characters</phpsyntax>
-<phpsyntax function="ncurses_delch" usage="int ncurses_delch(void)">Deletes character at current position, move rest of line left</phpsyntax>
-<phpsyntax function="ncurses_deleteln" usage="int ncurses_deleteln(void)">Deletes line at current position, move rest of screen up</phpsyntax>
-<phpsyntax function="ncurses_delwin" usage="int ncurses_delwin(resource window)">Deletes a ncurses window</phpsyntax>
-<phpsyntax function="ncurses_doupdate" usage="int ncurses_doupdate(void)">Writes all prepared refreshes to terminal</phpsyntax>
-<phpsyntax function="ncurses_echo" usage="int ncurses_echo(void)">Activates keyboard input echo</phpsyntax>
-<phpsyntax function="ncurses_echochar" usage="int ncurses_echochar(int character)">Single character output including refresh</phpsyntax>
-<phpsyntax function="ncurses_end" usage="int ncurses_end(void)">Stops using ncurses, clean up the screen</phpsyntax>
-<phpsyntax function="ncurses_erase" usage="int ncurses_erase(void)">Erases terminal screen</phpsyntax>
-<phpsyntax function="ncurses_erasechar" usage="string ncurses_erasechar(void)">Returns current erase character</phpsyntax>
-<phpsyntax function="ncurses_filter" usage="void ncurses_filter(void)"></phpsyntax>
-<phpsyntax function="ncurses_flash" usage="int ncurses_flash(void)">Flashes terminal screen (visual bell)</phpsyntax>
-<phpsyntax function="ncurses_flushinp" usage="int ncurses_flushinp(void)">Flushes keyboard input buffer</phpsyntax>
-<phpsyntax function="ncurses_getch" usage="int ncurses_getch(void)">Reads a character from keyboard</phpsyntax>
-<phpsyntax function="ncurses_getmaxyx" usage="void ncurses_getmaxyx(resource window, int &amp;y, int &amp;x)">Returns the size of a window</phpsyntax>
-<phpsyntax function="ncurses_getmouse" usage="bool ncurses_getmouse(array &amp;mevent)">Reads mouse event from queue. The content of mevent is cleared before new data is added.</phpsyntax>
-<phpsyntax function="ncurses_getyx" usage="void ncurses_getyx(resource window, int &amp;y, int &amp;x)">Returns the current cursor position for a window</phpsyntax>
-<phpsyntax function="ncurses_halfdelay" usage="int ncurses_halfdelay(int tenth)">Puts terminal into halfdelay mode</phpsyntax>
-<phpsyntax function="ncurses_has_colors" usage="bool ncurses_has_colors(void)">Checks if terminal has colors</phpsyntax>
-<phpsyntax function="ncurses_has_ic" usage="int ncurses_has_ic(void)">Checks for insert- and delete-capabilities</phpsyntax>
-<phpsyntax function="ncurses_has_il" usage="int ncurses_has_il(void)">Checks for line insert- and delete-capabilities</phpsyntax>
-<phpsyntax function="ncurses_has_key" usage="int ncurses_has_key(int keycode)">Checks for presence of a function key on terminal keyboard</phpsyntax>
-<phpsyntax function="ncurses_hide_panel" usage="int ncurses_hide_panel(resource panel)">Remove panel from the stack, making it invisible</phpsyntax>
-<phpsyntax function="ncurses_hline" usage="int ncurses_hline(int charattr, int n)">Draws a horizontal line at current position using an attributed character and max. n characters long</phpsyntax>
-<phpsyntax function="ncurses_inch" usage="string ncurses_inch(void)">Gets character and attribute at current position</phpsyntax>
-<phpsyntax function="ncurses_init" usage="int ncurses_init(void)">Initializes ncurses</phpsyntax>
-<phpsyntax function="ncurses_init_color" usage="int ncurses_init_color(int color, int r, int g, int b)">Sets new RGB value for color</phpsyntax>
-<phpsyntax function="ncurses_init_pair" usage="int ncurses_init_pair(int pair, int fg, int bg)">Allocates a color pair</phpsyntax>
-<phpsyntax function="ncurses_insch" usage="int ncurses_insch(int character)">Inserts character moving rest of line including character at current position</phpsyntax>
-<phpsyntax function="ncurses_insdelln" usage="int ncurses_insdelln(int count)">Inserts lines before current line scrolling down (negative numbers delete and scroll up)</phpsyntax>
-<phpsyntax function="ncurses_insertln" usage="int ncurses_insertln(void)">Inserts a line, move rest of screen down</phpsyntax>
-<phpsyntax function="ncurses_insstr" usage="int ncurses_insstr(string text)">Inserts string at current position, moving rest of line right</phpsyntax>
-<phpsyntax function="ncurses_instr" usage="int ncurses_instr(string &amp;buffer)">Reads string from terminal screen</phpsyntax>
-<phpsyntax function="ncurses_isendwin" usage="int ncurses_isendwin(void)">Ncurses is in endwin mode, normal screen output may be performed</phpsyntax>
-<phpsyntax function="ncurses_keyok" usage="int ncurses_keyok(int keycode, int enable)">Enables or disable a keycode</phpsyntax>
-<phpsyntax function="ncurses_keypad" usage="int ncurses_keypad(resource window, bool bf)">Turns keypad on or off</phpsyntax>
-<phpsyntax function="ncurses_killchar" usage="string ncurses_killchar(void)">Returns current line kill character</phpsyntax>
-<phpsyntax function="ncurses_longname" usage="string ncurses_longname(void)">Returns terminal description</phpsyntax>
-<phpsyntax function="ncurses_meta" usage="int ncurses_meta(resource window, bool 8bit)">Enables/Disable 8-bit meta key information</phpsyntax>
-<phpsyntax function="ncurses_mouse_trafo" usage="bool ncurses_mouse_trafo(int &amp;y, int &amp;x, bool toscreen)">Transforms coordinates</phpsyntax>
-<phpsyntax function="ncurses_mouseinterval" usage="int ncurses_mouseinterval(int milliseconds)">Sets timeout for mouse button clicks</phpsyntax>
-<phpsyntax function="ncurses_mousemask" usage="int ncurses_mousemask(int newmask, int &amp;oldmask)">Returns and sets mouse options</phpsyntax>
-<phpsyntax function="ncurses_move" usage="int ncurses_move(int y, int x)">Moves output position</phpsyntax>
-<phpsyntax function="ncurses_move_panel" usage="int ncurses_move_panel(resource panel, int startx, int starty)">Moves a panel so that it's upper-left corner is at [startx, starty]</phpsyntax>
-<phpsyntax function="ncurses_mvaddch" usage="int ncurses_mvaddch(int y, int x, int c)">Moves current position and add character</phpsyntax>
-<phpsyntax function="ncurses_mvaddchnstr" usage="int ncurses_mvaddchnstr(int y, int x, string s, int n)">Moves position and add attrributed string with specified length</phpsyntax>
-<phpsyntax function="ncurses_mvaddchstr" usage="int ncurses_mvaddchstr(int y, int x, string s)">Moves position and add attributed string</phpsyntax>
-<phpsyntax function="ncurses_mvaddnstr" usage="int ncurses_mvaddnstr(int y, int x, string s, int n)">Moves position and add string with specified length</phpsyntax>
-<phpsyntax function="ncurses_mvaddstr" usage="int ncurses_mvaddstr(int y, int x, string s)">Moves position and add string</phpsyntax>
-<phpsyntax function="ncurses_mvcur" usage="int ncurses_mvcur(int old_y,int old_x, int new_y, int new_x)">Moves cursor immediately</phpsyntax>
-<phpsyntax function="ncurses_mvdelch" usage="int ncurses_mvdelch(int y, int x)">Moves position and delete character, shift rest of line left</phpsyntax>
-<phpsyntax function="ncurses_mvgetch" usage="int ncurses_mvgetch(int y, int x)">Moves position and get character at new position</phpsyntax>
-<phpsyntax function="ncurses_mvhline" usage="int ncurses_mvhline(int y, int x, int attrchar, int n)">Sets new position and draw a horizontal line using an attributed character and max. n characters long</phpsyntax>
-<phpsyntax function="ncurses_mvinch" usage="int ncurses_mvinch(int y, int x)">Moves position and get attributed character at new position</phpsyntax>
-<phpsyntax function="ncurses_mvvline" usage="int ncurses_mvvline(int y, int x, int attrchar, int n)">Sets new position and draw a vertical line using an attributed character and max. n characters long</phpsyntax>
-<phpsyntax function="ncurses_mvwaddstr" usage="int ncurses_mvwaddstr(resource window, int y, int x, string text)">Adds string at new position in window</phpsyntax>
-<phpsyntax function="ncurses_napms" usage="int ncurses_napms(int milliseconds)">Sleep</phpsyntax>
-<phpsyntax function="ncurses_new_panel" usage="resource ncurses_new_panel(resource window)">Create a new panel and associate it with window</phpsyntax>
-<phpsyntax function="ncurses_newpad" usage="resource ncurses_newpad(int rows, int cols)">Creates a new pad (window)</phpsyntax>
-<phpsyntax function="ncurses_newwin" usage="int ncurses_newwin(int rows, int cols, int y, int x)">Creates a new window</phpsyntax>
-<phpsyntax function="ncurses_nl" usage="int ncurses_nl(void)">Translates newline and carriage return / line feed</phpsyntax>
-<phpsyntax function="ncurses_nocbreak" usage="int ncurses_nocbreak(void)">Switches terminal to cooked mode</phpsyntax>
-<phpsyntax function="ncurses_noecho" usage="int ncurses_noecho(void)">Switches off keyboard input echo</phpsyntax>
-<phpsyntax function="ncurses_nonl" usage="int ncurses_nonl(void)">Do not ranslate newline and carriage return / line feed</phpsyntax>
-<phpsyntax function="ncurses_noqiflush" usage="int ncurses_noqiflush(void)">Do not flush on signal characters</phpsyntax>
-<phpsyntax function="ncurses_noraw" usage="bool ncurses_noraw(void)">Switches terminal out of raw mode</phpsyntax>
-<phpsyntax function="ncurses_pair_content" usage="int ncurses_pair_content(int pair, int &amp;f, int &amp;b)">Gets the RGB value for color</phpsyntax>
-<phpsyntax function="ncurses_panel_above" usage="resource ncurses_panel_above(resource panel)">Returns the panel above panel. If panel is null, returns the bottom panel in the stack</phpsyntax>
-<phpsyntax function="ncurses_panel_below" usage="resource ncurses_panel_below(resource panel)">Returns the panel below panel. If panel is null, returns the top panel in the stack</phpsyntax>
-<phpsyntax function="ncurses_panel_window" usage="resource ncurses_panel_window(resource panel)">Returns the window associated with panel</phpsyntax>
-<phpsyntax function="ncurses_pnoutrefresh" usage="int ncurses_pnoutrefresh(resource pad, int pminrow, int pmincol, int sminrow, int smincol, int smaxrow, int smaxcol)">Copys a region from a pad into the virtual screen</phpsyntax>
-<phpsyntax function="ncurses_prefresh" usage="int ncurses_prefresh(resource pad, int pminrow, int pmincol, int sminrow, int smincol, int smaxrow, int smaxcol)">Copys a region from a pad into the virtual screen</phpsyntax>
-<phpsyntax function="ncurses_putp" usage="int ncurses_putp(string text)">???</phpsyntax>
-<phpsyntax function="ncurses_qiflush" usage="void ncurses_qiflush(void)">Flushes on signal characters</phpsyntax>
-<phpsyntax function="ncurses_raw" usage="int ncurses_raw(void)">Switches terminal into raw mode</phpsyntax>
-<phpsyntax function="ncurses_refresh" usage="int ncurses_refresh(int ch)">Refresh screen</phpsyntax>
-<phpsyntax function="ncurses_replace_panel" usage="int ncurses_replace_panel(resource panel, resource window)">Replaces the window associated with panel</phpsyntax>
-<phpsyntax function="ncurses_reset_prog_mode" usage="int ncurses_reset_prog_mode(void)">Resets the prog mode saved by def_prog_mode</phpsyntax>
-<phpsyntax function="ncurses_reset_shell_mode" usage="int ncurses_reset_shell_mode(void)">Resets the shell mode saved by def_shell_mode</phpsyntax>
-<phpsyntax function="ncurses_resetty" usage="int ncurses_resetty(void)">Restores saved terminal state</phpsyntax>
-<phpsyntax function="ncurses_savetty" usage="int ncurses_savetty(void)">Saves terminal state</phpsyntax>
-<phpsyntax function="ncurses_scr_dump" usage="int ncurses_scr_dump(string filename)">Dumps screen content to file</phpsyntax>
-<phpsyntax function="ncurses_scr_init" usage="int ncurses_scr_init(string filename)">Initializes screen from file dump</phpsyntax>
-<phpsyntax function="ncurses_scr_restore" usage="int ncurses_scr_restore(string filename)">Restores screen from file dump</phpsyntax>
-<phpsyntax function="ncurses_scr_set" usage="int ncurses_scr_set(string filename)">Inherits screen from file dump</phpsyntax>
-<phpsyntax function="ncurses_scrl" usage="int ncurses_scrl(int count)">Scrolls window content up or down without changing current position</phpsyntax>
-<phpsyntax function="ncurses_show_panel" usage="int ncurses_show_panel(resource panel)">Places an invisible panel on top of the stack, making it visible</phpsyntax>
-<phpsyntax function="ncurses_slk_attr" usage="int ncurses_slk_attr(void)">Returns current soft label keys attribute</phpsyntax>
-<phpsyntax function="ncurses_slk_attroff" usage="int ncurses_slk_attroff(int intarg)">???</phpsyntax>
-<phpsyntax function="ncurses_slk_attron" usage="int ncurses_slk_attron(int intarg)">???</phpsyntax>
-<phpsyntax function="ncurses_slk_attrset" usage="int ncurses_slk_attrset(int intarg)">???</phpsyntax>
-<phpsyntax function="ncurses_slk_clear" usage="int ncurses_slk_clear(void)">Clears soft label keys from screen</phpsyntax>
-<phpsyntax function="ncurses_slk_color" usage="int ncurses_slk_color(int intarg)">Sets color for soft label keys</phpsyntax>
-<phpsyntax function="ncurses_slk_init" usage="int ncurses_slk_init(int intarg)">Inits soft label keys</phpsyntax>
-<phpsyntax function="ncurses_slk_noutrefresh" usage="int ncurses_slk_noutrefresh(void)">Copies soft label keys to virtual screen</phpsyntax>
-<phpsyntax function="ncurses_slk_refresh" usage="int ncurses_slk_refresh(void)">Copies soft label keys to screen</phpsyntax>
-<phpsyntax function="ncurses_slk_restore" usage="int ncurses_slk_restore(void)">Restores soft label keys</phpsyntax>
-<phpsyntax function="ncurses_slk_set" usage="bool ncurses_slk_set(int labelnr, string label, int format)">Sets function key labels</phpsyntax>
-<phpsyntax function="ncurses_slk_touch" usage="int ncurses_slk_touch(void)">Forces output when ncurses_slk_noutrefresh is performed</phpsyntax>
-<phpsyntax function="ncurses_standend" usage="int ncurses_standend(void)">Stops using 'standout' attribute</phpsyntax>
-<phpsyntax function="ncurses_standout" usage="int ncurses_standout(void)">Starts using 'standout' attribute</phpsyntax>
-<phpsyntax function="ncurses_start_color" usage="int ncurses_start_color(void)">Starts using colors</phpsyntax>
-<phpsyntax function="ncurses_termattrs" usage="int ncurses_termattrs(void)">Returns a logical OR of all attribute flags supported by terminal</phpsyntax>
-<phpsyntax function="ncurses_termname" usage="string ncurses_termname(void)">Returns terminal name</phpsyntax>
-<phpsyntax function="ncurses_timeout" usage="void ncurses_timeout(int millisec)">Sets timeout for special key sequences</phpsyntax>
-<phpsyntax function="ncurses_top_panel" usage="int ncurses_top_panel(resource panel)">Moves a visible panel to the top of the stack</phpsyntax>
-<phpsyntax function="ncurses_typeahead" usage="int ncurses_typeahead(int fd)">Specifys different filedescriptor for typeahead checking</phpsyntax>
-<phpsyntax function="ncurses_ungetch" usage="int ncurses_ungetch(int keycode)">Puts a character back into the input stream</phpsyntax>
-<phpsyntax function="ncurses_ungetmouse" usage="int ncurses_ungetmouse(array mevent)">Pushes mouse event to queue</phpsyntax>
-<phpsyntax function="ncurses_update_panels" usage="void ncurses_update_panels(void)">Refreshes the virtual screen to reflect the relations between panels in the stack.</phpsyntax>
-<phpsyntax function="ncurses_use_default_colors" usage="int ncurses_use_default_colors(void)">Assigns terminal default colors to color id -1</phpsyntax>
-<phpsyntax function="ncurses_use_env" usage="void ncurses_use_env(int flag)">Controls use of environment information about terminal size</phpsyntax>
-<phpsyntax function="ncurses_use_extended_names" usage="int ncurses_use_extended_names(bool flag)">Controls use of extended names in terminfo descriptions</phpsyntax>
-<phpsyntax function="ncurses_vidattr" usage="int ncurses_vidattr(int intarg)">???</phpsyntax>
-<phpsyntax function="ncurses_vline" usage="int ncurses_vline(int charattr, int n)">Draws a vertical line at current position using an attributed character and max. n characters long</phpsyntax>
-<phpsyntax function="ncurses_waddch" usage="int ncurses_waddch(resource window, int ch)">Adds character at current position in a window and advance cursor</phpsyntax>
-<phpsyntax function="ncurses_waddstr" usage="int ncurses_waddstr(resource window, string str [, int n])">Outputs text at current postion in window</phpsyntax>
-<phpsyntax function="ncurses_wattroff" usage="int ncurses_wattroff(resource window, int attrs)">Turns off attributes for a window</phpsyntax>
-<phpsyntax function="ncurses_wattron" usage="int ncurses_wattron(resource window, int attrs)">Turns on attributes for a window</phpsyntax>
-<phpsyntax function="ncurses_wattrset" usage="int ncurses_wattrset(resource window, int attrs)">Set the attributes for a window</phpsyntax>
-<phpsyntax function="ncurses_wborder" usage="int ncurses_wborder(resource window, int left, int right, int top, int bottom, int tl_corner, int tr_corner, int bl_corner, int br_corner)">Draws a border around the window using attributed characters</phpsyntax>
-<phpsyntax function="ncurses_wclear" usage="int ncurses_wclear(resource window)">Clears window</phpsyntax>
-<phpsyntax function="ncurses_wcolor_set" usage="int ncurses_wcolor_set(resource window, int color_pair)">Sets windows color pairings</phpsyntax>
-<phpsyntax function="ncurses_werase" usage="int ncurses_werase(resource window)">Erase window contents</phpsyntax>
-<phpsyntax function="ncurses_wgetch" usage="int ncurses_wgetch(resource window)">Reads a character from keyboard (window)</phpsyntax>
-<phpsyntax function="ncurses_whline" usage="int ncurses_whline(resource window, int charattr, int n)">Draws a horizontal line in a window at current position using an attributed character and max. n characters long</phpsyntax>
-<phpsyntax function="ncurses_wmouse_trafo" usage="bool ncurses_wmouse_trafo(resource window, int &amp;y, int &amp;x, bool toscreen)">Transforms window/stdscr coordinates</phpsyntax>
-<phpsyntax function="ncurses_wmove" usage="int ncurses_wmove(resource window, int y, int x)">Moves windows output position</phpsyntax>
-<phpsyntax function="ncurses_wnoutrefresh" usage="int ncurses_wnoutrefresh(resource window)">Copies window to virtual screen</phpsyntax>
-<phpsyntax function="ncurses_wrefresh" usage="int ncurses_wrefresh(resource window)">Refreshes window on terminal screen</phpsyntax>
-<phpsyntax function="ncurses_wstandend" usage="int ncurses_wstandend(resource window)">End standout mode for a window</phpsyntax>
-<phpsyntax function="ncurses_wstandout" usage="int ncurses_wstandout(resource window)">Enter standout mode for a window</phpsyntax>
-<phpsyntax function="ncurses_wvline" usage="int ncurses_wvline(resource window, int charattr, int n)">Draws a vertical line in a window at current position using an attributed character and max. n characters long</phpsyntax>
-<phpsyntax function="oci_bind_by_name" usage="bool oci_bind_by_name(resource stmt, string name, mixed &amp;var, [, int maxlength [, int type]])">Bind a PHP variable to an Oracle placeholder by name</phpsyntax>
-<phpsyntax function="oci_cancel" usage="bool oci_cancel(resource stmt)">Cancel reading from a cursor</phpsyntax>
-<phpsyntax function="oci_close" usage="bool oci_close(resource conn)">Disconnect from database</phpsyntax>
-<phpsyntax function="oci_collection_append" usage="bool oci_collection_append(string value)">Append an object to the collection</phpsyntax>
-<phpsyntax function="oci_collection_assign" usage="bool oci_collection_assign(object from)">Assign a collection from another existing collection</phpsyntax>
-<phpsyntax function="oci_collection_element_assign" usage="bool oci_collection_element_assign(int index, string val)">Assign element val to collection at index ndx</phpsyntax>
-<phpsyntax function="oci_collection_element_get" usage="string oci_collection_element_get(int ndx)">Retrieve the value at collection index ndx</phpsyntax>
-<phpsyntax function="oci_collection_max" usage="int oci_collection_max()">Return the max value of a collection. For a varray this is the maximum length of the array</phpsyntax>
-<phpsyntax function="oci_collection_size" usage="int oci_collection_size()">Return the size of a collection</phpsyntax>
-<phpsyntax function="oci_collection_trim" usage="bool oci_collection_trim(int num)">Trim num elements from the end of a collection</phpsyntax>
-<phpsyntax function="oci_commit" usage="bool oci_commit(resource conn)">Commit the current context</phpsyntax>
-<phpsyntax function="oci_connect" usage="resource oci_connect(string user, string pass [, string db])">Connect to an Oracle database and log on. Returns a new session.</phpsyntax>
-<phpsyntax function="oci_define_by_name" usage="bool oci_define_by_name(resource stmt, string name, mixed &amp;var [, int type])">Define a PHP variable to an Oracle column by name</phpsyntax>
-<phpsyntax function="oci_error" usage="array oci_error([resource stmt|conn|global])">Return the last error of stmt|conn|global. If no error happened returns false.</phpsyntax>
-<phpsyntax function="oci_execute" usage="bool oci_execute(resource stmt [, int mode])">Execute a parsed statement</phpsyntax>
-<phpsyntax function="oci_fetch" usage="bool oci_fetch(resource stmt)">Prepare a new row of data for reading</phpsyntax>
-<phpsyntax function="oci_fetch_all" usage="int oci_fetch_all(resource stmt, array &amp;output[, int skip[, int maxrows[, int flags]]])">Fetch all rows of result data into an array</phpsyntax>
-<phpsyntax function="oci_fetch_array" usage="array oci_fetch_array( resource stmt [, int mode ])">Fetch a result row as an array</phpsyntax>
-<phpsyntax function="oci_fetch_assoc" usage="array oci_fetch_assoc( resource stmt )">Fetch a result row as an associative array</phpsyntax>
-<phpsyntax function="oci_fetch_object" usage="object oci_fetch_object( resource stmt )">Fetch a result row as an object</phpsyntax>
-<phpsyntax function="oci_fetch_row" usage="array oci_fetch_row( resource stmt )">Fetch a result row as an enumerated array</phpsyntax>
-<phpsyntax function="oci_field_is_null" usage="bool oci_field_is_null(resource stmt, int col)">Tell whether a column is NULL</phpsyntax>
-<phpsyntax function="oci_field_name" usage="string oci_field_name(resource stmt, int col)">Tell the name of a column</phpsyntax>
-<phpsyntax function="oci_field_precision" usage="int oci_field_precision(resource stmt, int col)">Tell the precision of a column</phpsyntax>
-<phpsyntax function="oci_field_scale" usage="int oci_field_scale(resource stmt, int col)">Tell the scale of a column</phpsyntax>
-<phpsyntax function="oci_field_size" usage="int oci_field_size(resource stmt, int col)">Tell the maximum data size of a column</phpsyntax>
-<phpsyntax function="oci_field_type" usage="mixed oci_field_type(resource stmt, int col)">Tell the data type of a column</phpsyntax>
-<phpsyntax function="oci_field_type_raw" usage="int oci_field_type_raw(resource stmt, int col)">Tell the raw oracle data type of a column</phpsyntax>
-<phpsyntax function="oci_free_collection" usage="bool oci_free_collection()">Deletes collection object</phpsyntax>
-<phpsyntax function="oci_free_descriptor" usage="bool oci_free_descriptor()">Deletes large object description</phpsyntax>
-<phpsyntax function="oci_free_statement" usage="bool oci_free_statement(resource stmt)">Free all resources associated with a statement</phpsyntax>
-<phpsyntax function="oci_internal_debug" usage="void oci_internal_debug(int onoff)">Toggle internal debugging output for the OCI extension</phpsyntax>
-<phpsyntax function="oci_lob_append" usage="bool oci_lob_append( object lob )">Appends data from a LOB to another LOB</phpsyntax>
-<phpsyntax function="oci_lob_close" usage="bool oci_lob_close()">Closes lob descriptor</phpsyntax>
-<phpsyntax function="oci_lob_copy" usage="bool oci_lob_copy( object lob_to, object lob_from [, int length ] )">Copies data from a LOB to another LOB</phpsyntax>
-<phpsyntax function="oci_lob_eof" usage="bool oci_lob_eof()">Checks if EOF is reached</phpsyntax>
-<phpsyntax function="oci_lob_erase" usage="int oci_lob_erase( [ int offset [, int length ] ] )">Erases a specified portion of the internal LOB, starting at a specified offset</phpsyntax>
-<phpsyntax function="oci_lob_export" usage="bool oci_lob_export([string filename [, int start [, int length]]])">Writes a large object into a file</phpsyntax>
-<phpsyntax function="oci_lob_flush" usage="bool oci_lob_flush( [ int flag ] )">Flushes the LOB buffer</phpsyntax>
-<phpsyntax function="oci_lob_import" usage="bool oci_lob_import( string filename )">Saves a large object to file</phpsyntax>
-<phpsyntax function="oci_lob_is_equal" usage="bool oci_lob_is_equal( object lob1, object lob2 )">Tests to see if two LOB/FILE locators are equal</phpsyntax>
-<phpsyntax function="oci_lob_load" usage="string oci_lob_load()">Loads a large object</phpsyntax>
-<phpsyntax function="oci_lob_read" usage="string oci_lob_read( int length )">Reads particular part of a large object</phpsyntax>
-<phpsyntax function="oci_lob_rewind" usage="bool oci_lob_rewind()">Rewind pointer of a LOB</phpsyntax>
-<phpsyntax function="oci_lob_save" usage="bool oci_lob_save( string data [, int offset ])">Saves a large object</phpsyntax>
-<phpsyntax function="oci_lob_seek" usage="bool oci_lob_seek( int offset [, int whence ])">Moves the pointer of a LOB</phpsyntax>
-<phpsyntax function="oci_lob_size" usage="int oci_lob_size()">Returns size of a large object</phpsyntax>
-<phpsyntax function="oci_lob_tell" usage="int oci_lob_tell()">Tells LOB pointer position</phpsyntax>
-<phpsyntax function="oci_lob_truncate" usage="bool oci_lob_truncate( [ int length ])">Truncates a LOB</phpsyntax>
-<phpsyntax function="oci_lob_write" usage="int oci_lob_write( string string [, int length ])">Writes data to current position of a LOB</phpsyntax>
-<phpsyntax function="oci_lob_write_temporary" usage="bool oci_lob_write_temporary(string var [, int lob_type])">Writes temporary blob</phpsyntax>
-<phpsyntax function="oci_new_collection" usage="object oci_new_collection(resource connection, string tdo [, string schema])">Initialize a new collection</phpsyntax>
-<phpsyntax function="oci_new_connect" usage="resource oci_new_connect(string user, string pass [, string db])">Connect to an Oracle database and log on. Returns a new session.</phpsyntax>
-<phpsyntax function="oci_new_cursor" usage="resource oci_new_cursor(resource conn)">Return a new cursor (Statement-Handle) - use this to bind ref-cursors!</phpsyntax>
-<phpsyntax function="oci_new_descriptor" usage="object oci_new_descriptor(resource connection [, int type])">Initialize a new empty descriptor LOB/FILE (LOB is default)</phpsyntax>
-<phpsyntax function="oci_num_fields" usage="int oci_num_fields(resource stmt)">Return the number of result columns in a statement</phpsyntax>
-<phpsyntax function="oci_num_rows" usage="int oci_num_rows(resource stmt)">Return the row count of an OCI statement</phpsyntax>
-<phpsyntax function="oci_parse" usage="resource oci_parse(resource conn, string query)">Parse a query and return a statement</phpsyntax>
-<phpsyntax function="oci_password_change" usage="bool oci_password_change(resource conn, string username, string old_password, string new_password)">Changes the password of an account</phpsyntax>
-<phpsyntax function="oci_pconnect" usage="resource oci_pconnect(string user, string pass [, string db])">Connect to an Oracle database using a persistent connection and log on. Returns a new session.</phpsyntax>
-<phpsyntax function="oci_result" usage="string oci_result(resource stmt, mixed column)">Return a single column of result data</phpsyntax>
-<phpsyntax function="oci_rollback" usage="bool oci_rollback(resource conn)">Rollback the current context</phpsyntax>
-<phpsyntax function="oci_server_version" usage="string oci_server_version(resource conn)">Return a string containing server version information</phpsyntax>
-<phpsyntax function="oci_set_prefetch" usage="bool oci_set_prefetch(resource stmt, int prefetch_rows)">Sets the number of rows to be prefetched on execute to prefetch_rows for stmt</phpsyntax>
-<phpsyntax function="oci_statement_type" usage="string oci_statement_type(resource stmt)">Return the query type of an OCI statement</phpsyntax>
-<phpsyntax function="ocifetchinto" usage="int ocifetchinto(resource stmt, array &amp;output [, int mode])">Fetch a row of result data into an array</phpsyntax>
-<phpsyntax function="ocigetbufferinglob" usage="bool ocigetbufferinglob()">Returns current state of buffering for a LOB</phpsyntax>
-<phpsyntax function="ocisetbufferinglob" usage="bool ocisetbufferinglob( boolean flag )">Enables/disables buffering for a LOB</phpsyntax>
-<phpsyntax function="birdstep_autocommit" usage="bool birdstep_autocommit(int index)"></phpsyntax>
-<phpsyntax function="birdstep_close" usage="bool birdstep_close(int id)"></phpsyntax>
-<phpsyntax function="birdstep_commit" usage="bool birdstep_commit(int index)"></phpsyntax>
-<phpsyntax function="birdstep_connect" usage="int birdstep_connect(string server, string user, string pass)"></phpsyntax>
-<phpsyntax function="birdstep_exec" usage="int birdstep_exec(int index, string exec_str)"></phpsyntax>
-<phpsyntax function="birdstep_fetch" usage="bool birdstep_fetch(int index)"></phpsyntax>
-<phpsyntax function="birdstep_fieldname" usage="string birdstep_fieldname(int index, int col)"></phpsyntax>
-<phpsyntax function="birdstep_fieldnum" usage="int birdstep_fieldnum(int index)"></phpsyntax>
-<phpsyntax function="birdstep_freeresult" usage="bool birdstep_freeresult(int index)"></phpsyntax>
-<phpsyntax function="birdstep_off_autocommit" usage="bool birdstep_off_autocommit(int index)"></phpsyntax>
-<phpsyntax function="birdstep_result" usage="mixed birdstep_result(int index, int col)"></phpsyntax>
-<phpsyntax function="birdstep_rollback" usage="bool birdstep_rollback(int index)"></phpsyntax>
-<phpsyntax function="odbc_autocommit" usage="mixed odbc_autocommit(resource connection_id [, int OnOff])">Toggle autocommit mode or get status</phpsyntax>
-<phpsyntax function="odbc_binmode" usage="bool odbc_binmode(int result_id, int mode)">Handle binary column data</phpsyntax>
-<phpsyntax function="odbc_close" usage="void odbc_close(resource connection_id)">Close an ODBC connection</phpsyntax>
-<phpsyntax function="odbc_close_all" usage="void odbc_close_all(void)">Close all ODBC connections</phpsyntax>
-<phpsyntax function="odbc_columnprivileges" usage="resource odbc_columnprivileges(resource connection_id, string catalog, string schema, string table, string column)">Returns a result identifier that can be used to fetch a list of columns and associated privileges for the specified table</phpsyntax>
-<phpsyntax function="odbc_columns" usage="resource odbc_columns(resource connection_id, string qualifier, string owner, string table_name, string column_name)">Returns a result identifier that can be used to fetch a list of column names in specified tables</phpsyntax>
-<phpsyntax function="odbc_commit" usage="bool odbc_commit(resource connection_id)">Commit an ODBC transaction</phpsyntax>
-<phpsyntax function="odbc_connect" usage="resource odbc_connect(string DSN, string user, string password [, int cursor_option])">Connect to a datasource</phpsyntax>
-<phpsyntax function="odbc_cursor" usage="string odbc_cursor(resource result_id)">Get cursor name</phpsyntax>
-<phpsyntax function="odbc_data_source" usage="array odbc_data_source(resource connection_id, int fetch_type)">Return information about the currently connected data source</phpsyntax>
-<phpsyntax function="odbc_error" usage="string odbc_error([resource connection_id])">Get the last error code</phpsyntax>
-<phpsyntax function="odbc_errormsg" usage="string odbc_errormsg([resource connection_id])">Get the last error message</phpsyntax>
-<phpsyntax function="odbc_exec" usage="resource odbc_exec(resource connection_id, string query [, int flags])">Prepare and execute an SQL statement</phpsyntax>
-<phpsyntax function="odbc_execute" usage="bool odbc_execute(resource result_id [, array parameters_array])">Execute a prepared statement</phpsyntax>
-<phpsyntax function="odbc_fetch_array" usage="array odbc_fetch_array(int result [, int rownumber])">Fetch a result row as an associative array</phpsyntax>
-<phpsyntax function="odbc_fetch_into" usage="int odbc_fetch_into(resource result_id, array result_array, [, int rownumber])">Fetch one result row into an array</phpsyntax>
-<phpsyntax function="odbc_fetch_object" usage="object odbc_fetch_object(int result [, int rownumber])">Fetch a result row as an object</phpsyntax>
-<phpsyntax function="odbc_fetch_row" usage="bool odbc_fetch_row(resource result_id [, int row_number])">Fetch a row</phpsyntax>
-<phpsyntax function="odbc_field_len" usage="int odbc_field_len(resource result_id, int field_number)">Get the length (precision) of a column</phpsyntax>
-<phpsyntax function="odbc_field_name" usage="string odbc_field_name(resource result_id, int field_number)">Get a column name</phpsyntax>
-<phpsyntax function="odbc_field_num" usage="int odbc_field_num(resource result_id, string field_name)">Return column number</phpsyntax>
-<phpsyntax function="odbc_field_scale" usage="int odbc_field_scale(resource result_id, int field_number)">Get the scale of a column</phpsyntax>
-<phpsyntax function="odbc_field_type" usage="string odbc_field_type(resource result_id, int field_number)">Get the datatype of a column</phpsyntax>
-<phpsyntax function="odbc_foreignkeys" usage="resource odbc_foreignkeys(resource connection_id, string pk_qualifier, string pk_owner, string pk_table, string fk_qualifier, string fk_owner, string fk_table)">Returns a result identifier to either a list of foreign keys in the specified table or a list of foreign keys in other tables that refer to the primary key in the specified table</phpsyntax>
-<phpsyntax function="odbc_free_result" usage="bool odbc_free_result(resource result_id)">Free resources associated with a result</phpsyntax>
-<phpsyntax function="odbc_gettypeinfo" usage="resource odbc_gettypeinfo(resource connection_id [, int data_type])">Returns a result identifier containing information about data types supported by the data source</phpsyntax>
-<phpsyntax function="odbc_longreadlen" usage="bool odbc_longreadlen(int result_id, int length)">Handle LONG columns</phpsyntax>
-<phpsyntax function="odbc_next_result" usage="bool odbc_next_result(resource result_id)">Checks if multiple results are avaiable</phpsyntax>
-<phpsyntax function="odbc_num_fields" usage="int odbc_num_fields(resource result_id)">Get number of columns in a result</phpsyntax>
-<phpsyntax function="odbc_num_rows" usage="int odbc_num_rows(resource result_id)">Get number of rows in a result</phpsyntax>
-<phpsyntax function="odbc_pconnect" usage="resource odbc_pconnect(string DSN, string user, string password [, int cursor_option])">Establish a persistent connection to a datasource</phpsyntax>
-<phpsyntax function="odbc_prepare" usage="resource odbc_prepare(resource connection_id, string query)">Prepares a statement for execution</phpsyntax>
-<phpsyntax function="odbc_primarykeys" usage="resource odbc_primarykeys(resource connection_id, string qualifier, string owner, string table)">Returns a result identifier listing the column names that comprise the primary key for a table</phpsyntax>
-<phpsyntax function="odbc_procedurecolumns" usage="resource odbc_procedurecolumns(resource connection_id [, string qualifier, string owner, string proc, string column])">Returns a result identifier containing the list of input and output parameters, as well as the columns that make up the result set for the specified procedures</phpsyntax>
-<phpsyntax function="odbc_procedures" usage="resource odbc_procedures(resource connection_id [, string qualifier, string owner, string name])">Returns a result identifier containg the list of procedure names in a datasource</phpsyntax>
-<phpsyntax function="odbc_result" usage="mixed odbc_result(resource result_id, mixed field)">Get result data</phpsyntax>
-<phpsyntax function="odbc_result_all" usage="int odbc_result_all(resource result_id [, string format])">Print result as HTML table</phpsyntax>
-<phpsyntax function="odbc_rollback" usage="bool odbc_rollback(resource connection_id)">Rollback a transaction</phpsyntax>
-<phpsyntax function="odbc_setoption" usage="bool odbc_setoption(resource conn_id|result_id, int which, int option, int value)">Sets connection or statement options</phpsyntax>
-<phpsyntax function="odbc_specialcolumns" usage="resource odbc_specialcolumns(resource connection_id, int type, string qualifier, string owner, string table, int scope, int nullable)">Returns a result identifier containing either the optimal set of columns that uniquely identifies a row in the table or columns that are automatically updated when any value in the row is updated by a transaction</phpsyntax>
-<phpsyntax function="odbc_statistics" usage="resource odbc_statistics(resource connection_id, string qualifier, string owner, string name, int unique, int accuracy)">Returns a result identifier that contains statistics about a single table and the indexes associated with the table</phpsyntax>
-<phpsyntax function="odbc_tableprivileges" usage="resource odbc_tableprivileges(resource connection_id, string qualifier, string owner, string name)">Returns a result identifier containing a list of tables and the privileges associated with each table</phpsyntax>
-<phpsyntax function="odbc_tables" usage="resource odbc_tables(resource connection_id [, string qualifier, string owner, string name, string table_types])">Call the SQLTables function</phpsyntax>
-<phpsyntax function="solid_fetch_prev" usage="bool solid_fetch_prev(resource result_id)"></phpsyntax>
-<phpsyntax function="openssl_csr_export" usage="bool openssl_csr_export(resource csr, string &amp;out [, bool notext=true])">Exports a CSR to file or a var</phpsyntax>
-<phpsyntax function="openssl_csr_export_to_file" usage="bool openssl_csr_export_to_file(resource csr, string outfilename [, bool notext=true])">Exports a CSR to file</phpsyntax>
-<phpsyntax function="openssl_csr_new" usage="bool openssl_csr_new(array dn, resource &amp;privkey [, array configargs, array extraattribs])">Generates a privkey and CSR</phpsyntax>
-<phpsyntax function="openssl_csr_sign" usage="resource openssl_csr_sign(mixed csr, mixed x509, mixed priv_key, long days [, array config_args [, long serial]])">Signs a cert with another CERT</phpsyntax>
-<phpsyntax function="openssl_error_string" usage="mixed openssl_error_string(void)">Returns a description of the last error, and alters the index of the error messages. Returns false when the are no more messages</phpsyntax>
-<phpsyntax function="openssl_open" usage="bool openssl_open(string data, &amp;string opendata, string ekey, mixed privkey)">Opens data</phpsyntax>
-<phpsyntax function="openssl_pkey_export" usage="bool openssl_pkey_export(mixed key, &amp;mixed out [, string passphrase [, array config_args]])">Gets an exportable representation of a key into a string or file</phpsyntax>
-<phpsyntax function="openssl_pkey_export_to_file" usage="bool openssl_pkey_export_to_file(mixed key, string outfilename [, string passphrase, array config_args)">Gets an exportable representation of a key into a file</phpsyntax>
-<phpsyntax function="openssl_pkey_free" usage="void openssl_pkey_free(int key)">Frees a key</phpsyntax>
-<phpsyntax function="openssl_pkey_get_private" usage="int openssl_pkey_get_private(string key [, string passphrase])">Gets private keys</phpsyntax>
-<phpsyntax function="openssl_pkey_get_public" usage="int openssl_pkey_get_public(mixed cert)">Gets public key from X.509 certificate</phpsyntax>
-<phpsyntax function="openssl_pkey_new" usage="resource openssl_pkey_new([array configargs])">Generates a new private key</phpsyntax>
-<phpsyntax function="openssl_private_decrypt" usage="bool openssl_private_decrypt(string data, string decrypted, mixed key [, int padding])">Decrypts data with private key</phpsyntax>
-<phpsyntax function="openssl_private_encrypt" usage="bool openssl_private_encrypt(string data, string crypted, mixed key [, int padding])">Encrypts data with private key</phpsyntax>
-<phpsyntax function="openssl_public_decrypt" usage="bool openssl_public_decrypt(string data, string crypted, resource key [, int padding])">Decrypts data with public key</phpsyntax>
-<phpsyntax function="openssl_public_encrypt" usage="bool openssl_public_encrypt(string data, string crypted, mixed key [, int padding])">Encrypts data with public key</phpsyntax>
-<phpsyntax function="openssl_seal" usage="int openssl_seal(string data, &amp;string sealdata, &amp;array ekeys, array pubkeys)">Seals data</phpsyntax>
-<phpsyntax function="openssl_sign" usage="bool openssl_sign(string data, &amp;string signature, mixed key)">Signs data</phpsyntax>
-<phpsyntax function="openssl_verify" usage="int openssl_verify(string data, string signature, mixed key)">Verifys data</phpsyntax>
-<phpsyntax function="ora_bind" usage="bool ora_bind(resource cursor, string php_variable_name, string sql_parameter_name, int length [, int type])">Bind a PHP variable to an Oracle parameter</phpsyntax>
-<phpsyntax function="ora_close" usage="bool ora_close(resource cursor)">Close an Oracle cursor</phpsyntax>
-<phpsyntax function="ora_columnname" usage="string ora_columnname(resource cursor, int column)">Get the name of an Oracle result column</phpsyntax>
-<phpsyntax function="ora_columnsize" usage="int ora_columnsize(int cursor, int column)">Return the size of the column</phpsyntax>
-<phpsyntax function="ora_columntype" usage="string ora_columntype(resource cursor, int column)">Get the type of an Oracle result column</phpsyntax>
-<phpsyntax function="ora_commit" usage="bool ora_commit(resource connection)">Commit an Oracle transaction</phpsyntax>
-<phpsyntax function="ora_commitoff" usage="bool ora_commitoff(resource connection)">Disable automatic commit</phpsyntax>
-<phpsyntax function="ora_commiton" usage="bool ora_commiton(resource connection)">Enable automatic commit</phpsyntax>
-<phpsyntax function="ora_do" usage="resource ora_do(resource connection, resource cursor)">Parse and execute a statement and fetch first result row</phpsyntax>
-<phpsyntax function="ora_error" usage="string ora_error(resource cursor_or_connection)">Get an Oracle error message</phpsyntax>
-<phpsyntax function="ora_errorcode" usage="int ora_errorcode(resource cursor_or_connection)">Get an Oracle error code</phpsyntax>
-<phpsyntax function="ora_exec" usage="bool ora_exec(resource cursor)">Execute a parsed statement</phpsyntax>
-<phpsyntax function="ora_fetch" usage="bool ora_fetch(resource cursor)">Fetch a row of result data from a cursor</phpsyntax>
-<phpsyntax function="ora_fetch_into" usage="int ora_fetch_into(resource cursor, array result [, int flags])">Fetch a row into the specified result array</phpsyntax>
-<phpsyntax function="ora_getcolumn" usage="mixed ora_getcolumn(resource cursor, int column)">Get data from a fetched row</phpsyntax>
-<phpsyntax function="ora_logoff" usage="bool ora_logoff(resource connection)">Close an Oracle connection</phpsyntax>
-<phpsyntax function="ora_logon" usage="resource ora_logon(string user, string password)">Open an Oracle connection</phpsyntax>
-<phpsyntax function="ora_numcols" usage="int ora_numcols(resource cursor)">Returns the numbers of columns in a result</phpsyntax>
-<phpsyntax function="ora_numrows" usage="int ora_numrows(resource cursor)">Returns the number of rows in a result</phpsyntax>
-<phpsyntax function="ora_open" usage="resource ora_open(resource connection)">Open an Oracle cursor</phpsyntax>
-<phpsyntax function="ora_parse" usage="bool ora_parse(resource cursor, string sql_statement [, int defer])">Parse an Oracle SQL statement</phpsyntax>
-<phpsyntax function="ora_plogon" usage="resource ora_plogon(string user, string password)">Open a persistent Oracle connection</phpsyntax>
-<phpsyntax function="ora_rollback" usage="bool ora_rollback(resource connection)">Roll back an Oracle transaction</phpsyntax>
-<phpsyntax function="ovrimos_autocommit" usage="int ovrimos_autocommit(int connection_id, int OnOff)">Toggle autocommit mode     There can be problems with pconnections!</phpsyntax>
-<phpsyntax function="ovrimos_close" usage="void ovrimos_close(int connection)">Close a connection</phpsyntax>
-<phpsyntax function="ovrimos_commit" usage="bool ovrimos_commit(int connection_id)">Commit an ovrimos transaction</phpsyntax>
-<phpsyntax function="ovrimos_connect" usage="int ovrimos_connect(string host, string db, string user, string password)">Connect to an Ovrimos database</phpsyntax>
-<phpsyntax function="ovrimos_cursor" usage="string ovrimos_cursor(int result_id)">Get cursor name</phpsyntax>
-<phpsyntax function="ovrimos_exec" usage="int ovrimos_exec(int connection_id, string query)">Prepare and execute an SQL statement</phpsyntax>
-<phpsyntax function="ovrimos_execute" usage="bool ovrimos_execute(int result_id [, array parameters_array])">Execute a prepared statement</phpsyntax>
-<phpsyntax function="ovrimos_fetch_into" usage="bool ovrimos_fetch_into(int result_id, array result_array [, string how [, int rownumber]])">Fetch one result row into an array     how: 'Next' (default), 'Prev', 'First', 'Last', 'Absolute'</phpsyntax>
-<phpsyntax function="ovrimos_fetch_row" usage="bool ovrimos_fetch_row(int result_id [, int how [, int row_number]])">how: 'Next' (default), 'Prev', 'First', 'Last', 'Absolute'     Fetch a row</phpsyntax>
-<phpsyntax function="ovrimos_field_len" usage="int ovrimos_field_len(int result_id, int field_number)">Get the length of a column</phpsyntax>
-<phpsyntax function="ovrimos_field_name" usage="string ovrimos_field_name(int result_id, int field_number)">Get a column name</phpsyntax>
-<phpsyntax function="ovrimos_field_num" usage="int ovrimos_field_num(int result_id, string field_name)">Return column number</phpsyntax>
-<phpsyntax function="ovrimos_field_type" usage="int ovrimos_field_type(int result_id, int field_number)">Get the datatype of a column</phpsyntax>
-<phpsyntax function="ovrimos_free_result" usage="bool ovrimos_free_result(int result_id)">Free resources associated with a result</phpsyntax>
-<phpsyntax function="ovrimos_longreadlen" usage="bool ovrimos_longreadlen(int result_id, int length)">Handle LONG columns</phpsyntax>
-<phpsyntax function="ovrimos_num_fields" usage="int ovrimos_num_fields(int result_id)">Get number of columns in a result</phpsyntax>
-<phpsyntax function="ovrimos_num_rows" usage="int ovrimos_num_rows(int result_id)">Get number of rows in a result</phpsyntax>
-<phpsyntax function="ovrimos_prepare" usage="int ovrimos_prepare(int connection_id, string query)">Prepares a statement for execution</phpsyntax>
-<phpsyntax function="ovrimos_result" usage="string ovrimos_result(int result_id, mixed field)">Get result data</phpsyntax>
-<phpsyntax function="ovrimos_result_all" usage="int ovrimos_result_all(int result_id [, string format])">Print result as HTML table</phpsyntax>
-<phpsyntax function="ovrimos_rollback" usage="bool ovrimos_rollback(int connection_id)">Rollback a transaction</phpsyntax>
-<phpsyntax function="ovrimos_setoption" usage="int ovrimos_setoption(int conn_id|result_id, int which, int option, int value)">Sets connection or statement options</phpsyntax>
-<phpsyntax function="pcntl_alarm" usage="int pcntl_alarm(int seconds)">Set an alarm clock for delivery of a signal</phpsyntax>
-<phpsyntax function="pcntl_exec" usage="bool pcntl_exec(string path [, array args [, array envs]])">Executes specified program in current process space as defined by exec(2)</phpsyntax>
-<phpsyntax function="pcntl_fork" usage="int pcntl_fork(void)">Forks the currently running process following the same behavior as the UNIX fork() system call</phpsyntax>
-<phpsyntax function="pcntl_getpriority" usage="int pcntl_getpriority([int pid [, int process_identifier]])">Get the priority of any process</phpsyntax>
-<phpsyntax function="pcntl_setpriority" usage="bool pcntl_setpriority(int priority [, int pid [, int process_identifier]])">Change the priority of any process</phpsyntax>
-<phpsyntax function="pcntl_signal" usage="bool pcntl_signal(int signo, callback handle [, bool restart_syscalls])">Assigns a system signal handler to a PHP function</phpsyntax>
-<phpsyntax function="pcntl_wait" usage="int pcntl_wait(int &amp;status)">Waits on or returns the status of a forked child as defined by the waitpid() system call</phpsyntax>
-<phpsyntax function="pcntl_waitpid" usage="int pcntl_waitpid(int pid, int &amp;status, int options)">Waits on or returns the status of a forked child as defined by the waitpid() system call</phpsyntax>
-<phpsyntax function="pcntl_wexitstatus" usage="int pcntl_wexitstatus(int status)">Returns the status code of a child's exit</phpsyntax>
-<phpsyntax function="pcntl_wifexited" usage="bool pcntl_wifexited(int status)">Returns true if the child status code represents a successful exit</phpsyntax>
-<phpsyntax function="pcntl_wifsignaled" usage="bool pcntl_wifsignaled(int status)">Returns true if the child status code represents a process that was terminated due to a signal</phpsyntax>
-<phpsyntax function="pcntl_wifstopped" usage="bool pcntl_wifstopped(int status)">Returns true if the child status code represents a stopped process (WUNTRACED must have been used with waitpid)</phpsyntax>
-<phpsyntax function="pcntl_wstopsig" usage="int pcntl_wstopsig(int status)">Returns the number of the signal that caused the process to stop who's status code is passed</phpsyntax>
-<phpsyntax function="pcntl_wtermsig" usage="int pcntl_wtermsig(int status)">Returns the number of the signal that terminated the process who's status code is passed</phpsyntax>
-<phpsyntax function="preg_grep" usage="array preg_grep(string regex, array input)">Searches array and returns entries which match regex</phpsyntax>
-<phpsyntax function="preg_match" usage="int preg_match(string pattern, string subject [, array subpatterns [, int flags [, int offset]]])">Perform a Perl-style regular expression match</phpsyntax>
-<phpsyntax function="preg_match_all" usage="int preg_match_all(string pattern, string subject, array subpatterns [, int flags [, int offset]])">Perform a Perl-style global regular expression match</phpsyntax>
-<phpsyntax function="preg_quote" usage="string preg_quote(string str, string delim_char)">Quote regular expression characters plus an optional character</phpsyntax>
-<phpsyntax function="preg_replace" usage="string preg_replace(mixed regex, mixed replace, mixed subject [, int limit])">Perform Perl-style regular expression replacement.</phpsyntax>
-<phpsyntax function="preg_replace_callback" usage="string preg_replace_callback(mixed regex, mixed callback, mixed subject [, int limit])">Perform Perl-style regular expression replacement using replacement callback.</phpsyntax>
-<phpsyntax function="preg_split" usage="array preg_split(string pattern, string subject [, int limit [, int flags]])">Split string into an array using a perl-style regular expression as a delimiter</phpsyntax>
-<phpsyntax function="pdf_add_annotation" usage="bool pdf_add_annotation(resource pdfdoc, float xll, float yll, float xur, float xur, string title, string text)">Sets annotation (depreciated use pdf_add_note instead)</phpsyntax>
-<phpsyntax function="pdf_add_bookmark" usage="int pdf_add_bookmark(resource pdfdoc, string text [, int parent [, int open]])">Adds bookmark for current page</phpsyntax>
-<phpsyntax function="pdf_add_launchlink" usage="bool pdf_add_launchlink(resource pdfdoc, float llx, float lly, float urx, float ury, string filename)">Adds link to web resource</phpsyntax>
-<phpsyntax function="pdf_add_locallink" usage="bool pdf_add_locallink(resource pdfdoc, float llx, float lly, float urx, float ury, int page, string dest)">Adds link to local resource</phpsyntax>
-<phpsyntax function="pdf_add_note" usage="bool pdf_add_note(resource pdfdoc, float llx, float lly, float urx, float ury, string contents, string title, string icon, int open)">Sets annotation</phpsyntax>
-<phpsyntax function="pdf_add_pdflink" usage="bool pdf_add_pdflink(resource pdfdoc, float llx, float lly, float urx, float ury, string filename, int page, string dest)">Adds link to PDF document</phpsyntax>
-<phpsyntax function="pdf_add_weblink" usage="bool pdf_add_weblink(resource pdfdoc, float llx, float lly, float urx, float ury, string url)">Adds link to web resource</phpsyntax>
-<phpsyntax function="pdf_arc" usage="bool pdf_arc(resource pdfdoc, float x, float y, float radius, float start, float end)">Draws an arc</phpsyntax>
-<phpsyntax function="pdf_attach_file" usage="bool pdf_attach_file(resource pdf, float lly, float lly, float urx, float ury, string filename, string description, string author, string mimetype, string icon)">Adds a file attachment annotation at the rectangle specified by his lower left and upper right corners</phpsyntax>
-<phpsyntax function="pdf_begin_page" usage="bool pdf_begin_page(resource pdfdoc, float width, float height)">Starts page</phpsyntax>
-<phpsyntax function="pdf_circle" usage="bool pdf_circle(resource pdfdoc, float x, float y, float radius)">Draws a circle</phpsyntax>
-<phpsyntax function="pdf_clip" usage="bool pdf_clip(resource pdfdoc)">Clips to current path</phpsyntax>
-<phpsyntax function="pdf_close" usage="bool pdf_close(resource pdfdoc)">Closes the pdf document</phpsyntax>
-<phpsyntax function="pdf_close_image" usage="void pdf_close_image(resource pdf, int pdfimage)">Closes the PDF image</phpsyntax>
-<phpsyntax function="pdf_closepath" usage="bool pdf_closepath(resource pdfdoc)">Close path</phpsyntax>
-<phpsyntax function="pdf_closepath_fill_stroke" usage="bool pdf_closepath_fill_stroke(resource pdfdoc)">Close, fill and stroke current path</phpsyntax>
-<phpsyntax function="pdf_closepath_stroke" usage="bool pdf_closepath_stroke(resource pdfdoc)">Close path and draw line along path</phpsyntax>
-<phpsyntax function="pdf_concat" usage="bool pdf_concat(resource pdf, float a, float b, float c, float d, float e, float f)">Concatenates a matrix to the current transformation matrix for text and graphics</phpsyntax>
-<phpsyntax function="pdf_continue_text" usage="bool pdf_continue_text(resource pdfdoc, string text)">Output text in next line</phpsyntax>
-<phpsyntax function="pdf_curveto" usage="bool pdf_curveto(resource pdfdoc, float x1, float y1, float x2, float y2, float x3, float y3)">Draws a curve</phpsyntax>
-<phpsyntax function="pdf_delete" usage="bool pdf_delete(resource pdfdoc)">Deletes the PDF object</phpsyntax>
-<phpsyntax function="pdf_end_page" usage="bool pdf_end_page(resource pdfdoc)">Ends page</phpsyntax>
-<phpsyntax function="pdf_endpath" usage="bool pdf_endpath(resource pdfdoc)">Ends current path</phpsyntax>
-<phpsyntax function="pdf_fill" usage="bool pdf_fill(resource pdfdoc)">Fill current path</phpsyntax>
-<phpsyntax function="pdf_fill_stroke" usage="bool pdf_fill_stroke(resource pdfdoc)">Fill and stroke current path</phpsyntax>
-<phpsyntax function="pdf_findfont" usage="int pdf_findfont(resource pdfdoc, string fontname, string encoding [, int embed])">Prepares the font fontname for later use with pdf_setfont()</phpsyntax>
-<phpsyntax function="pdf_get_buffer" usage="string pdf_get_buffer(resource pdfdoc)">Fetches the full buffer containig the generated PDF data</phpsyntax>
-<phpsyntax function="pdf_get_font" usage="int pdf_get_font(resource pdfdoc)">Gets the current font</phpsyntax>
-<phpsyntax function="pdf_get_fontname" usage="string pdf_get_fontname(resource pdfdoc)">Gets the current font name</phpsyntax>
-<phpsyntax function="pdf_get_fontsize" usage="float pdf_get_fontsize(resource pdfdoc)">Gets the current font size</phpsyntax>
-<phpsyntax function="pdf_get_image_height" usage="int pdf_get_image_height(resource pdf, int pdfimage)">Returns the height of an image</phpsyntax>
-<phpsyntax function="pdf_get_image_width" usage="int pdf_get_image_width(resource pdf, int pdfimage)">Returns the width of an image</phpsyntax>
-<phpsyntax function="pdf_get_majorversion" usage="int pdf_get_majorversion()">Returns the major version number of the PDFlib</phpsyntax>
-<phpsyntax function="pdf_get_minorversion" usage="int pdf_get_minorversion()">Returns the minor version number of the PDFlib</phpsyntax>
-<phpsyntax function="pdf_get_parameter" usage="string pdf_get_parameter(resource pdfdoc, string key, mixed modifier)">Gets arbitrary parameters</phpsyntax>
-<phpsyntax function="pdf_get_value" usage="float pdf_get_value(resource pdfdoc, string key, float modifier)">Gets arbitrary value</phpsyntax>
-<phpsyntax function="pdf_lineto" usage="bool pdf_lineto(resource pdfdoc, float x, float y)">Draws a line</phpsyntax>
-<phpsyntax function="pdf_moveto" usage="bool pdf_moveto(resource pdfdoc, float x, float y)">Sets current point</phpsyntax>
-<phpsyntax function="pdf_new" usage="resource pdf_new()">Creates a new PDF object</phpsyntax>
-<phpsyntax function="pdf_open" usage="resource pdf_open([resource filedesc])">Opens a new pdf document. If filedesc is NULL, document is created in memory. This is the old interface, only for compatibility use pdf_new      pdf_open_file instead</phpsyntax>
-<phpsyntax function="pdf_open_ccitt" usage="int pdf_open_ccitt(resource pdf, string filename, int width, int height, int bitreverse, int k, int blackls1)">Opens an image file with raw CCITT G3 or G4 compresed bitmap data</phpsyntax>
-<phpsyntax function="pdf_open_file" usage="bool pdf_open_file(resource pdfdoc [, string filename])">Opens a new PDF document. If filename is NULL, document is created in memory. This is not yet fully supported</phpsyntax>
-<phpsyntax function="pdf_open_gif" usage="int pdf_open_gif(resource pdf, string giffile)">Opens a GIF file and returns an image for placement in a pdf object</phpsyntax>
-<phpsyntax function="pdf_open_image" usage="int pdf_open_image(resource pdf, string type, string source, string data, long length, int width, int height, int components, int bpc, string params)">Opens an image of the given type and returns an image for placement in a PDF document</phpsyntax>
-<phpsyntax function="pdf_open_image_file" usage="int pdf_open_image_file(resource pdf, string type, string file [, string stringparam, int intparam])">Opens an image file of the given type and returns an image for placement in a PDF document</phpsyntax>
-<phpsyntax function="pdf_open_jpeg" usage="int pdf_open_jpeg(resource pdf, string jpegfile)">Opens a JPEG file and returns an image for placement in a PDF document</phpsyntax>
-<phpsyntax function="pdf_open_memory_image" usage="int pdf_open_memory_image(resource pdf, resource image)">Takes an GD image and returns an image for placement in a PDF document</phpsyntax>
-<phpsyntax function="pdf_open_png" usage="int pdf_open_png(resource pdf, string pngfile)">Opens a PNG file and returns an image for placement in a PDF document</phpsyntax>
-<phpsyntax function="pdf_open_tiff" usage="int pdf_open_tiff(resource pdf, string tifffile)">Opens a TIFF file and returns an image for placement in a PDF document</phpsyntax>
-<phpsyntax function="pdf_place_image" usage="bool pdf_place_image(resource pdf, int pdfimage, float x, float y, float scale)">Places image in the PDF document</phpsyntax>
-<phpsyntax function="pdf_place_pdi_page" usage="bool pdf_place_pdi_page(resource pdf, int page, float x, float y, float sx, float sy)">* Place a PDF page with the lower left corner at (x, y), and scale it.</phpsyntax>
-<phpsyntax function="pdf_rect" usage="bool pdf_rect(resource pdfdoc, float x, float y, float width, float height)">Draws a rectangle</phpsyntax>
-<phpsyntax function="pdf_restore" usage="bool pdf_restore(resource pdfdoc)">Restores formerly saved enviroment</phpsyntax>
-<phpsyntax function="pdf_rotate" usage="bool pdf_rotate(resource pdfdoc, float angle)">Sets rotation</phpsyntax>
-<phpsyntax function="pdf_save" usage="bool pdf_save(resource pdfdoc)">Saves current enviroment</phpsyntax>
-<phpsyntax function="pdf_scale" usage="bool pdf_scale(resource pdfdoc, float x_scale, float y_scale)">Sets scaling</phpsyntax>
-<phpsyntax function="pdf_set_border_color" usage="bool pdf_set_border_color(resource pdfdoc, float red, float green, float blue)">Sets color of box surounded all kinds of annotations and links</phpsyntax>
-<phpsyntax function="pdf_set_border_dash" usage="bool pdf_set_border_dash(resource pdfdoc, float black, float white)">Sets the border dash style of all kinds of annotations and links</phpsyntax>
-<phpsyntax function="pdf_set_border_style" usage="bool pdf_set_border_style(resource pdfdoc, string style, float width)">Sets style of box surounding all kinds of annotations and link</phpsyntax>
-<phpsyntax function="pdf_set_char_spacing" usage="bool pdf_set_char_spacing(resource pdfdoc, float space)">Sets character spacing</phpsyntax>
-<phpsyntax function="pdf_set_duration" usage="bool pdf_set_duration(resource pdfdoc, float duration)">Sets duration between pages</phpsyntax>
-<phpsyntax function="pdf_set_font" usage="bool pdf_set_font(resource pdfdoc, string font, float size, string encoding [, int embed])">Select the current font face, size and encoding</phpsyntax>
-<phpsyntax function="pdf_set_horiz_scaling" usage="bool pdf_set_horiz_scaling(resource pdfdoc, float scale)">Sets horizontal scaling of text</phpsyntax>
-<phpsyntax function="pdf_set_info" usage="bool pdf_set_info(resource pdfdoc, string fieldname, string value)">Fills an info field of the document</phpsyntax>
-<phpsyntax function="pdf_set_info_author" usage="bool pdf_set_info_author(resource pdfdoc, string author)">Fills the author field of the document</phpsyntax>
-<phpsyntax function="pdf_set_info_creator" usage="bool pdf_set_info_creator(resource pdfdoc, string creator)">Fills the creator field of the document</phpsyntax>
-<phpsyntax function="pdf_set_info_keywords" usage="bool pdf_set_info_keywords(resource pdfdoc, string keywords)">Fills the keywords field of the document</phpsyntax>
-<phpsyntax function="pdf_set_info_subject" usage="bool pdf_set_info_subject(resource pdfdoc, string subject)">Fills the subject field of the document</phpsyntax>
-<phpsyntax function="pdf_set_info_title" usage="bool pdf_set_info_title(resource pdfdoc, string title)">Fills the title field of the document</phpsyntax>
-<phpsyntax function="pdf_set_leading" usage="bool pdf_set_leading(resource pdfdoc, float distance)">Sets distance between text lines</phpsyntax>
-<phpsyntax function="pdf_set_parameter" usage="bool pdf_set_parameter(resource pdfdoc, string key, string value)">Sets arbitrary parameters</phpsyntax>
-<phpsyntax function="pdf_set_text_pos" usage="bool pdf_set_text_pos(resource pdfdoc, float x, float y)">Sets the position of text for the next pdf_show call</phpsyntax>
-<phpsyntax function="pdf_set_text_rendering" usage="bool pdf_set_text_rendering(resource pdfdoc, int mode)">Determines how text is rendered</phpsyntax>
-<phpsyntax function="pdf_set_text_rise" usage="bool pdf_set_text_rise(resource pdfdoc, float value)">Sets the text rise</phpsyntax>
-<phpsyntax function="pdf_set_transition" usage="bool pdf_set_transition(resource pdfdoc, int transition)">Sets transition between pages</phpsyntax>
-<phpsyntax function="pdf_set_value" usage="bool pdf_set_value(resource pdfdoc, string key, float value)">Sets arbitrary value</phpsyntax>
-<phpsyntax function="pdf_set_word_spacing" usage="bool pdf_set_word_spacing(resource pdfdoc, float space)">Sets spacing between words</phpsyntax>
-<phpsyntax function="pdf_setdash" usage="bool pdf_setdash(resource pdfdoc, float black, float white)">Sets dash pattern</phpsyntax>
-<phpsyntax function="pdf_setflat" usage="bool pdf_setflat(resource pdfdoc, float value)">Sets flatness</phpsyntax>
-<phpsyntax function="pdf_setfont" usage="bool pdf_setfont(resource pdfdoc, int font, float fontsize)">Sets the current font in the fiven fontsize</phpsyntax>
-<phpsyntax function="pdf_setgray" usage="bool pdf_setgray(resource pdfdoc, float value)">Sets drawing and filling color to gray value</phpsyntax>
-<phpsyntax function="pdf_setgray_fill" usage="bool pdf_setgray_fill(resource pdfdoc, float value)">Sets filling color to gray value</phpsyntax>
-<phpsyntax function="pdf_setgray_stroke" usage="bool pdf_setgray_stroke(resource pdfdoc, float value)">Sets drawing color to gray value</phpsyntax>
-<phpsyntax function="pdf_setlinecap" usage="bool pdf_setlinecap(resource pdfdoc, int value)">Sets linecap parameter</phpsyntax>
-<phpsyntax function="pdf_setlinejoin" usage="bool pdf_setlinejoin(resource pdfdoc, int value)">Sets linejoin parameter</phpsyntax>
-<phpsyntax function="pdf_setlinewidth" usage="bool pdf_setlinewidth(resource pdfdoc, float width)">Sets line width</phpsyntax>
-<phpsyntax function="pdf_setmatrix" usage="bool pdf_setmatrix(resource pdf, float a, float b, float c, float d, float e, float f)">Explicitly set the current transformation matrix.</phpsyntax>
-<phpsyntax function="pdf_setmiterlimit" usage="bool pdf_setmiterlimit(resource pdfdoc, float value)">Sets miter limit</phpsyntax>
-<phpsyntax function="pdf_setpolydash" usage="bool pdf_setpolydash(resource pdfdoc, float darray)">Sets more complicated dash pattern</phpsyntax>
-<phpsyntax function="pdf_setrgbcolor" usage="bool pdf_setrgbcolor(resource pdfdoc, float red, float green, float blue)">Sets drawing and filling color to RGB color value</phpsyntax>
-<phpsyntax function="pdf_setrgbcolor_fill" usage="bool pdf_setrgbcolor_fill(resource pdfdoc, float red, float green, float blue)">Sets filling color to RGB color value</phpsyntax>
-<phpsyntax function="pdf_setrgbcolor_stroke" usage="bool pdf_setrgbcolor_stroke(resource pdfdoc, float red, float green, float blue)">Sets drawing color to RGB color value</phpsyntax>
-<phpsyntax function="pdf_show" usage="bool pdf_show(resource pdfdoc, string text)">Output text at current position</phpsyntax>
-<phpsyntax function="pdf_show_boxed" usage="int pdf_show_boxed(resource pdfdoc, string text, float x_koor, float y_koor, float width, float height, string mode [, string feature])">Output text formated in a boxed</phpsyntax>
-<phpsyntax function="pdf_show_xy" usage="bool pdf_show_xy(resource pdfdoc, string text, float x_koor, float y_koor)">Output text at position</phpsyntax>
-<phpsyntax function="pdf_skew" usage="bool pdf_skew(resource pdfdoc, float xangle, float yangle)">Skew the coordinate system</phpsyntax>
-<phpsyntax function="pdf_stringwidth" usage="float pdf_stringwidth(resource pdfdoc, string text [, int font, float size])">Returns width of text in current font</phpsyntax>
-<phpsyntax function="pdf_stroke" usage="bool pdf_stroke(resource pdfdoc)">Draw line along path path</phpsyntax>
-<phpsyntax function="pdf_translate" usage="bool pdf_translate(resource pdfdoc, float x, float y)">Sets origin of coordinate system</phpsyntax>
-<phpsyntax function="pfpro_cleanup" usage="bool pfpro_cleanup()">Shuts down the Payflow Pro library</phpsyntax>
-<phpsyntax function="pfpro_init" usage="bool pfpro_init()">Initializes the Payflow Pro library</phpsyntax>
-<phpsyntax function="pfpro_process" usage="array pfpro_process(array parmlist [, string hostaddress [, int port, [, int timeout [, string proxyAddress [, int proxyPort [, string proxyLogon [, string proxyPassword]]]]]]])">Payflow Pro transaction processing using arrays</phpsyntax>
-<phpsyntax function="pfpro_process_raw" usage="string pfpro_process_raw(string parmlist [, string hostaddress [, int port, [, int timeout [, string proxyAddress [, int proxyPort [, string proxyLogon [, string proxyPassword]]]]]]])">Raw Payflow Pro transaction processing</phpsyntax>
-<phpsyntax function="pfpro_version" usage="string pfpro_version()">Returns the version of the Payflow Pro library</phpsyntax>
-<phpsyntax function="pg_affected_rows" usage="int pg_affected_rows(resource result)">Returns the number of affected tuples</phpsyntax>
-<phpsyntax function="pg_cancel_query" usage="bool pg_cancel_query(resource connection)">Cancel request</phpsyntax>
-<phpsyntax function="pg_client_encoding" usage="string pg_client_encoding([resource connection])">Get the current client encoding</phpsyntax>
-<phpsyntax function="pg_close" usage="bool pg_close([resource connection])">Close a PostgreSQL connection</phpsyntax>
-<phpsyntax function="pg_connect" usage="resource pg_connect(string connection_string[, int connect_type] | [string host, string port [, string options [, string tty,]]] string database)">Open a PostgreSQL connection</phpsyntax>
-<phpsyntax function="pg_connection_busy" usage="bool pg_connection_busy(resource connection)">Get connection is busy or not</phpsyntax>
-<phpsyntax function="pg_connection_reset" usage="bool pg_connection_reset(resource connection)">Reset connection (reconnect)</phpsyntax>
-<phpsyntax function="pg_connection_status" usage="int pg_connection_status(resource connnection)">Get connection status</phpsyntax>
-<phpsyntax function="pg_convert" usage="array pg_convert(resource db, string table, array values[, int options])">Check and convert values for PostgreSQL SQL statement</phpsyntax>
-<phpsyntax function="pg_copy_from" usage="bool pg_copy_from(resource connection, string table_name , array rows [, string delimiter [, string null_as]])">Copy table from array</phpsyntax>
-<phpsyntax function="pg_copy_to" usage="array pg_copy_to(resource connection, string table_name [, string delimiter [, string null_as]])">Copy table to array</phpsyntax>
-<phpsyntax function="pg_dbname" usage="string pg_dbname([resource connection])">Get the database name</phpsyntax>
-<phpsyntax function="pg_delete" usage="mixed pg_delete(resource db, string table, array ids[, int options])">Delete records has ids (id=>value)</phpsyntax>
-<phpsyntax function="pg_end_copy" usage="bool pg_end_copy([resource connection])">Sync with backend. Completes the Copy command</phpsyntax>
-<phpsyntax function="pg_escape_bytea" usage="string pg_escape_bytea(string data)">Escape binary for bytea type</phpsyntax>
-<phpsyntax function="pg_escape_string" usage="string pg_escape_string(string data)">Escape string for text/char type</phpsyntax>
-<phpsyntax function="pg_fetch_all" usage="array pg_fetch_all(resource result)">Fetch all rows into array</phpsyntax>
-<phpsyntax function="pg_fetch_array" usage="array pg_fetch_array(resource result [, int row [, int result_type]])">Fetch a row as an array</phpsyntax>
-<phpsyntax function="pg_fetch_assoc" usage="array pg_fetch_assoc(resource result [, int row])">Fetch a row as an assoc array</phpsyntax>
-<phpsyntax function="pg_fetch_object" usage="object pg_fetch_object(resource result [, int row [, string class_name [, NULL|array ctor_params]]])">Fetch a row as an object</phpsyntax>
-<phpsyntax function="pg_fetch_result" usage="mixed pg_fetch_result(resource result, [int row_number,] mixed field_name)">Returns values from a result identifier</phpsyntax>
-<phpsyntax function="pg_fetch_row" usage="array pg_fetch_row(resource result [, int row [, int result_type]])">Get a row as an enumerated array</phpsyntax>
-<phpsyntax function="pg_field_is_null" usage="int pg_field_is_null(resource result, [int row,] mixed field_name_or_number)">Test if a field is NULL</phpsyntax>
-<phpsyntax function="pg_field_name" usage="string pg_field_name(resource result, int field_number)">Returns the name of the field</phpsyntax>
-<phpsyntax function="pg_field_num" usage="int pg_field_num(resource result, string field_name)">Returns the field number of the named field</phpsyntax>
-<phpsyntax function="pg_field_prtlen" usage="int pg_field_prtlen(resource result, [int row,] mixed field_name_or_number)">Returns the printed length</phpsyntax>
-<phpsyntax function="pg_field_size" usage="int pg_field_size(resource result, int field_number)">Returns the internal size of the field</phpsyntax>
-<phpsyntax function="pg_field_type" usage="string pg_field_type(resource result, int field_number)">Returns the type name for the given field</phpsyntax>
-<phpsyntax function="pg_free_result" usage="bool pg_free_result(resource result)">Free result memory</phpsyntax>
-<phpsyntax function="pg_get_notify" usage="array pg_get_notify([resource connection[, result_type]])">Get asynchronous notification</phpsyntax>
-<phpsyntax function="pg_get_pid" usage="int pg_get_pid([resource connection)">Get backend(server) pid</phpsyntax>
-<phpsyntax function="pg_get_result" usage="resource pg_get_result(resource connection)">Get asynchronous query result</phpsyntax>
-<phpsyntax function="pg_host" usage="string pg_host([resource connection])">Returns the host name associated with the connection</phpsyntax>
-<phpsyntax function="pg_insert" usage="mixed pg_insert(resource db, string table, array values[, int options])">Insert values (filed=>value) to table</phpsyntax>
-<phpsyntax function="pg_last_error" usage="string pg_last_error([resource connection])">Get the error message string</phpsyntax>
-<phpsyntax function="pg_last_notice" usage="string pg_last_notice(resource connection)">Returns the last notice set by the backend</phpsyntax>
-<phpsyntax function="pg_last_oid" usage="string pg_last_oid(resource result)">Returns the last object identifier</phpsyntax>
-<phpsyntax function="pg_lo_close" usage="bool pg_lo_close(resource large_object)">Close a large object</phpsyntax>
-<phpsyntax function="pg_lo_create" usage="int pg_lo_create([resource connection])">Create a large object</phpsyntax>
-<phpsyntax function="pg_lo_export" usage="bool pg_lo_export([resource connection, ] int objoid, string filename)">Export large object direct to filesystem</phpsyntax>
-<phpsyntax function="pg_lo_import" usage="int pg_lo_import([resource connection, ] string filename)">Import large object direct from filesystem</phpsyntax>
-<phpsyntax function="pg_lo_open" usage="resource pg_lo_open([resource connection,] int large_object_oid, string mode)">Open a large object and return fd</phpsyntax>
-<phpsyntax function="pg_lo_read" usage="string pg_lo_read(resource large_object [, int len])">Read a large object</phpsyntax>
-<phpsyntax function="pg_lo_read_all" usage="int pg_lo_read_all(resource large_object)">Read a large object and send straight to browser</phpsyntax>
-<phpsyntax function="pg_lo_seek" usage="bool pg_lo_seek(resource large_object, int offset [, int whence])">Seeks position of large object</phpsyntax>
-<phpsyntax function="pg_lo_tell" usage="int pg_lo_tell(resource large_object)">Returns current position of large object</phpsyntax>
-<phpsyntax function="pg_lo_unlink" usage="bool pg_lo_unlink([resource connection,] string large_object_oid)">Delete a large object</phpsyntax>
-<phpsyntax function="pg_lo_write" usage="int pg_lo_write(resource large_object, string buf [, int len])">Write a large object</phpsyntax>
-<phpsyntax function="pg_meta_data" usage="array pg_meta_data(resource db, string table)">Get meta_data</phpsyntax>
-<phpsyntax function="pg_num_fields" usage="int pg_num_fields(resource result)">Return the number of fields in the result</phpsyntax>
-<phpsyntax function="pg_num_rows" usage="int pg_num_rows(resource result)">Return the number of rows in the result</phpsyntax>
-<phpsyntax function="pg_options" usage="string pg_options([resource connection])">Get the options associated with the connection</phpsyntax>
-<phpsyntax function="pg_pconnect" usage="resource pg_pconnect(string connection_string | [string host, string port [, string options [, string tty,]]] string database)">Open a persistent PostgreSQL connection</phpsyntax>
-<phpsyntax function="pg_ping" usage="bool pg_ping([resource connection])">Ping database. If connection is bad, try to reconnect.</phpsyntax>
-<phpsyntax function="pg_port" usage="int pg_port([resource connection])">Return the port number associated with the connection</phpsyntax>
-<phpsyntax function="pg_put_line" usage="bool pg_put_line([resource connection,] string query)">Send null-terminated string to backend server</phpsyntax>
-<phpsyntax function="pg_query" usage="resource pg_query([resource connection,] string query)">Execute a query</phpsyntax>
-<phpsyntax function="pg_result_error" usage="string pg_result_error(resource result)">Get error message associated with result</phpsyntax>
-<phpsyntax function="pg_result_seek" usage="bool pg_result_seek(resource result, int offset)">Set internal row offset</phpsyntax>
-<phpsyntax function="pg_result_status" usage="mixed pg_result_status(resource result[, long result_type])">Get status of query result</phpsyntax>
-<phpsyntax function="pg_select" usage="mixed pg_select(resource db, string table, array ids[, int options])">Select records that has ids (id=>value)</phpsyntax>
-<phpsyntax function="pg_send_query" usage="bool pg_send_query(resource connection, string qeury)">Send asynchronous query</phpsyntax>
-<phpsyntax function="pg_set_client_encoding" usage="int pg_set_client_encoding([resource connection,] string encoding)">Set client encoding</phpsyntax>
-<phpsyntax function="pg_trace" usage="bool pg_trace(string filename [, string mode [, resource connection]])">Enable tracing a PostgreSQL connection</phpsyntax>
-<phpsyntax function="pg_tty" usage="string pg_tty([resource connection])">Return the tty name associated with the connection</phpsyntax>
-<phpsyntax function="pg_unescape_bytea" usage="string pg_unescape_bytea(string data)">Unescape binary for bytea type</phpsyntax>
-<phpsyntax function="pg_untrace" usage="bool pg_untrace([resource connection])">Disable tracing of a PostgreSQL connection</phpsyntax>
-<phpsyntax function="pg_update" usage="mixed pg_update(resource db, string table, array fields, array ids[, int options])">Update table using values (field=>value) and ids (id=>value)</phpsyntax>
-<phpsyntax function="pg_version" usage="array pg_version([resource connection])">Returns an array with client, protocol and server version (when available)</phpsyntax>
-<phpsyntax function="posix_ctermid" usage="string posix_ctermid(void)">Generate terminal path name (POSIX.1, 4.7.1)</phpsyntax>
-<phpsyntax function="posix_get_last_error" usage="int posix_get_last_error(void)">Retrieve the error number set by the last posix function which failed.</phpsyntax>
-<phpsyntax function="posix_getcwd" usage="string posix_getcwd(void)">Get working directory pathname (POSIX.1, 5.2.2)</phpsyntax>
-<phpsyntax function="posix_getegid" usage="int posix_getegid(void)">Get the current effective group id (POSIX.1, 4.2.1)</phpsyntax>
-<phpsyntax function="posix_geteuid" usage="int posix_geteuid(void)">Get the current effective user id (POSIX.1, 4.2.1)</phpsyntax>
-<phpsyntax function="posix_getgid" usage="int posix_getgid(void)">Get the current group id (POSIX.1, 4.2.1)</phpsyntax>
-<phpsyntax function="posix_getgrgid" usage="array posix_getgrgid(long gid)">Group database access (POSIX.1, 9.2.1)</phpsyntax>
-<phpsyntax function="posix_getgrnam" usage="array posix_getgrnam(string groupname)">Group database access (POSIX.1, 9.2.1)</phpsyntax>
-<phpsyntax function="posix_getgroups" usage="array posix_getgroups(void)">Get supplementary group id's (POSIX.1, 4.2.3)</phpsyntax>
-<phpsyntax function="posix_getlogin" usage="string posix_getlogin(void)">Get user name (POSIX.1, 4.2.4)</phpsyntax>
-<phpsyntax function="posix_getpgid" usage="int posix_getpgid(void)">Get the process group id of the specified process (This is not a POSIX function, but a SVR4ism, so we compile conditionally)</phpsyntax>
-<phpsyntax function="posix_getpgrp" usage="int posix_getpgrp(void)">Get current process group id (POSIX.1, 4.3.1)</phpsyntax>
-<phpsyntax function="posix_getpid" usage="int posix_getpid(void)">Get the current process id (POSIX.1, 4.1.1)</phpsyntax>
-<phpsyntax function="posix_getppid" usage="int posix_getppid(void)">Get the parent process id (POSIX.1, 4.1.1)</phpsyntax>
-<phpsyntax function="posix_getpwnam" usage="array posix_getpwnam(string groupname)">User database access (POSIX.1, 9.2.2)</phpsyntax>
-<phpsyntax function="posix_getpwuid" usage="array posix_getpwuid(long uid)">User database access (POSIX.1, 9.2.2)</phpsyntax>
-<phpsyntax function="posix_getrlimit" usage="array posix_getrlimit(void)">Get system resource consumption limits (This is not a POSIX function, but a BSDism and a SVR4ism. We compile conditionally)</phpsyntax>
-<phpsyntax function="posix_getsid" usage="int posix_getsid(void)">Get process group id of session leader (This is not a POSIX function, but a SVR4ism, so be compile conditionally)</phpsyntax>
-<phpsyntax function="posix_getuid" usage="int posix_getuid(void)">Get the current user id (POSIX.1, 4.2.1)</phpsyntax>
-<phpsyntax function="posix_isatty" usage="bool posix_isatty(int fd)">Determine if filedesc is a tty (POSIX.1, 4.7.1)</phpsyntax>
-<phpsyntax function="posix_kill" usage="bool posix_kill(int pid, int sig)">Send a signal to a process (POSIX.1, 3.3.2)</phpsyntax>
-<phpsyntax function="posix_mkfifo" usage="bool posix_mkfifo(string pathname, int mode)">Make a FIFO special file (POSIX.1, 5.4.2)</phpsyntax>
-<phpsyntax function="posix_setegid" usage="bool posix_setegid(long uid)">Set effective group id</phpsyntax>
-<phpsyntax function="posix_seteuid" usage="bool posix_seteuid(long uid)">Set effective user id</phpsyntax>
-<phpsyntax function="posix_setgid" usage="bool posix_setgid(int uid)">Set group id (POSIX.1, 4.2.2)</phpsyntax>
-<phpsyntax function="posix_setpgid" usage="bool posix_setpgid(int pid, int pgid)">Set process group id for job control (POSIX.1, 4.3.3)</phpsyntax>
-<phpsyntax function="posix_setsid" usage="int posix_setsid(void)">Create session and set process group id (POSIX.1, 4.3.2)</phpsyntax>
-<phpsyntax function="posix_setuid" usage="bool posix_setuid(long uid)">Set user id (POSIX.1, 4.2.2)</phpsyntax>
-<phpsyntax function="posix_strerror" usage="string posix_strerror(int errno)">Retrieve the system error message associated with the given errno.</phpsyntax>
-<phpsyntax function="posix_times" usage="array posix_times(void)">Get process times (POSIX.1, 4.5.2)</phpsyntax>
-<phpsyntax function="posix_ttyname" usage="string posix_ttyname(int fd)">Determine terminal device name (POSIX.1, 4.7.2)</phpsyntax>
-<phpsyntax function="posix_uname" usage="array posix_uname(void)">Get system name (POSIX.1, 4.4.1)</phpsyntax>
-<phpsyntax function="pspell_add_to_personal" usage="bool pspell_add_to_personal(int pspell, string word)">Adds a word to a personal list</phpsyntax>
-<phpsyntax function="pspell_add_to_session" usage="bool pspell_add_to_session(int pspell, string word)">Adds a word to the current session</phpsyntax>
-<phpsyntax function="pspell_check" usage="bool pspell_check(int pspell, string word)">Returns true if word is valid</phpsyntax>
-<phpsyntax function="pspell_clear_session" usage="bool pspell_clear_session(int pspell)">Clears the current session</phpsyntax>
-<phpsyntax function="pspell_config_create" usage="int pspell_config_create(string language [, string spelling [, string jargon [, string encoding]]])">Create a new config to be used later to create a manager</phpsyntax>
-<phpsyntax function="pspell_config_data_dir" usage="bool pspell_config_data_dir(int conf, string directory)">location of language data files</phpsyntax>
-<phpsyntax function="pspell_config_dict_dir" usage="bool pspell_config_dict_dir(int conf, string directory)">location of the main word list</phpsyntax>
-<phpsyntax function="pspell_config_ignore" usage="bool pspell_config_ignore(int conf, int ignore)">Ignore words &lt;= n chars</phpsyntax>
-<phpsyntax function="pspell_config_mode" usage="bool pspell_config_mode(int conf, long mode)">Select mode for config (PSPELL_FAST, PSPELL_NORMAL or PSPELL_BAD_SPELLERS)</phpsyntax>
-<phpsyntax function="pspell_config_personal" usage="bool pspell_config_personal(int conf, string personal)">Use a personal dictionary for this config</phpsyntax>
-<phpsyntax function="pspell_config_repl" usage="bool pspell_config_repl(int conf, string repl)">Use a personal dictionary with replacement pairs for this config</phpsyntax>
-<phpsyntax function="pspell_config_runtogether" usage="bool pspell_config_runtogether(int conf, bool runtogether)">Consider run-together words as valid components</phpsyntax>
-<phpsyntax function="pspell_config_save_repl" usage="bool pspell_config_save_repl(int conf, bool save)">Save replacement pairs when personal list is saved for this config</phpsyntax>
-<phpsyntax function="pspell_new" usage="int pspell_new(string language [, string spelling [, string jargon [, string encoding [, int mode]]]])">Load a dictionary</phpsyntax>
-<phpsyntax function="pspell_new_config" usage="int pspell_new_config(int config)">Load a dictionary based on the given config</phpsyntax>
-<phpsyntax function="pspell_new_personal" usage="int pspell_new_personal(string personal, string language [, string spelling [, string jargon [, string encoding [, int mode]]]])">Load a dictionary with a personal wordlist</phpsyntax>
-<phpsyntax function="pspell_save_wordlist" usage="bool pspell_save_wordlist(int pspell)">Saves the current (personal) wordlist</phpsyntax>
-<phpsyntax function="pspell_store_replacement" usage="bool pspell_store_replacement(int pspell, string misspell, string correct)">Notify the dictionary of a user-selected replacement</phpsyntax>
-<phpsyntax function="pspell_suggest" usage="array pspell_suggest(int pspell, string word)">Returns array of suggestions</phpsyntax>
-<phpsyntax function="readline" usage="string readline([string prompt])">Reads a line</phpsyntax>
-<phpsyntax function="readline_add_history" usage="bool readline_add_history([string prompt])">Adds a line to the history</phpsyntax>
-<phpsyntax function="readline_clear_history" usage="bool readline_clear_history(void)">Clears the history</phpsyntax>
-<phpsyntax function="readline_completion_function" usage="bool readline_completion_function(string funcname)">Readline completion function?</phpsyntax>
-<phpsyntax function="readline_info" usage="mixed readline_info([string varname] [, string newvalue])">Gets/sets various internal readline variables.</phpsyntax>
-<phpsyntax function="readline_list_history" usage="array readline_list_history(void)">Lists the history</phpsyntax>
-<phpsyntax function="readline_read_history" usage="bool readline_read_history([string filename] [, int from] [,int to])">Reads the history</phpsyntax>
-<phpsyntax function="readline_write_history" usage="bool readline_write_history([string filename])">Writes the history</phpsyntax>
-<phpsyntax function="recode_file" usage="bool recode_file(string request, resource input, resource output)">Recode file input into file output according to request</phpsyntax>
-<phpsyntax function="recode_string" usage="string recode_string(string request, string str)">Recode string str according to request string</phpsyntax>
-<phpsyntax function="session_cache_expire" usage="int session_cache_expire([int new_cache_expire])">Return the current cache expire. If new_cache_expire is given, the current cache_expire is replaced with new_cache_expire</phpsyntax>
-<phpsyntax function="session_cache_limiter" usage="string session_cache_limiter([string new_cache_limiter])">Return the current cache limiter. If new_cache_limited is given, the current cache_limiter is replaced with new_cache_limiter</phpsyntax>
-<phpsyntax function="session_decode" usage="bool session_decode(string data)">Deserializes data and reinitializes the variables</phpsyntax>
-<phpsyntax function="session_destroy" usage="bool session_destroy(void)">Destroy the current session and all data associated with it</phpsyntax>
-<phpsyntax function="session_encode" usage="string session_encode(void)">Serializes the current setup and returns the serialized representation</phpsyntax>
-<phpsyntax function="session_get_cookie_params" usage="array session_get_cookie_params(void)">Return the session cookie parameters</phpsyntax>
-<phpsyntax function="session_id" usage="string session_id([string newid])">Return the current session id. If newid is given, the session id is replaced with newid</phpsyntax>
-<phpsyntax function="session_is_registered" usage="bool session_is_registered(string varname)">Checks if a variable is registered in session</phpsyntax>
-<phpsyntax function="session_module_name" usage="string session_module_name([string newname])">Return the current module name used for accessing session data. If newname is given, the module name is replaced with newname</phpsyntax>
-<phpsyntax function="session_name" usage="string session_name([string newname])">Return the current session name. If newname is given, the session name is replaced with newname</phpsyntax>
-<phpsyntax function="session_regenerate_id" usage="bool session_regenerate_id()">Update the current session id with a newly generated one.</phpsyntax>
-<phpsyntax function="session_register" usage="bool session_register(mixed var_names [, mixed ...])">Adds varname(s) to the list of variables which are freezed at the session end</phpsyntax>
-<phpsyntax function="session_save_path" usage="string session_save_path([string newname])">Return the current save path passed to module_name. If newname is given, the save path is replaced with newname</phpsyntax>
-<phpsyntax function="session_set_cookie_params" usage="void session_set_cookie_params(int lifetime [, string path [, string domain [, bool secure]]])">Set session cookie parameters</phpsyntax>
-<phpsyntax function="session_set_save_handler" usage="void session_set_save_handler(string open, string close, string read, string write, string destroy, string gc)">Sets user-level functions</phpsyntax>
-<phpsyntax function="session_start" usage="bool session_start(void)">Begin session - reinitializes freezed variables, registers browsers etc</phpsyntax>
-<phpsyntax function="session_unregister" usage="bool session_unregister(string varname)">Removes varname from the list of variables which are freezed at the session end</phpsyntax>
-<phpsyntax function="session_unset" usage="void session_unset(void)">Unset all registered variables</phpsyntax>
-<phpsyntax function="session_write_close" usage="void session_write_close(void)">Write session data and end session</phpsyntax>
-<phpsyntax function="simplexml_import_dom" usage="simplemxml_element simplexml_import_dom(domNode node [, string class_name])">Get a simplexml_element object from dom to allow for processing</phpsyntax>
-<phpsyntax function="simplexml_load_file" usage="simplemxml_element simplexml_load_file(string filename [, string class_name])">Load a filename and return a simplexml_element object to allow for processing</phpsyntax>
-<phpsyntax function="simplexml_load_string" usage="simplemxml_element simplexml_load_string(string data [, string class_name])">Load a string and return a simplexml_element object to allow for processing</phpsyntax>
-<phpsyntax function="confirm_extname_compiled" usage="string confirm_extname_compiled(string arg)">Return a string to confirm that the module is compiled in</phpsyntax>
-<phpsyntax function="snmp_get_quick_print" usage="bool snmp_get_quick_print(void)">Return the current status of quick_print</phpsyntax>
-<phpsyntax function="snmp_get_valueretrieval" usage="int snmp_get_valueretrieval()">Return the method how the SNMP values will be returned</phpsyntax>
-<phpsyntax function="snmp_read_mib" usage="int snmp_read_mib(string filename)">Reads and parses a MIB file into the active MIB tree.</phpsyntax>
-<phpsyntax function="snmp_set_enum_print" usage="void snmp_set_enum_print(int enum_print)">Return all values that are enums with their enum value instead of the raw integer</phpsyntax>
-<phpsyntax function="snmp_set_oid_numeric_print" usage="void snmp_set_oid_numeric_print(int oid_numeric_print)">Return all objects including their respective object id withing the specified one</phpsyntax>
-<phpsyntax function="snmp_set_quick_print" usage="void snmp_set_quick_print(int quick_print)">Return all objects including their respective object id withing the specified one</phpsyntax>
-<phpsyntax function="snmp_set_valueretrieval" usage="int snmp_set_valueretrieval(int method)">Specify the method how the SNMP values will be returned</phpsyntax>
-<phpsyntax function="snmpget" usage="string snmpget(string host, string community, string object_id [, int timeout [, int retries]])">Fetch a SNMP object</phpsyntax>
-<phpsyntax function="snmpgetnext" usage="string snmpgetnext(string host, string community, string object_id [, int timeout [, int retries]])">Fetch a SNMP object</phpsyntax>
-<phpsyntax function="snmprealwalk" usage="array snmprealwalk(string host, string community, string object_id [, int timeout [, int retries]])">Return all objects including their respective object id withing the specified one</phpsyntax>
-<phpsyntax function="snmpset" usage="int snmpset(string host, string community, string object_id, string type, mixed value [, int timeout [, int retries]])">Set the value of a SNMP object</phpsyntax>
-<phpsyntax function="snmpwalk" usage="array snmpwalk(string host, string community, string object_id [, int timeout [, int retries]])">Return all objects under the specified object id</phpsyntax>
-<phpsyntax function="socket_accept" usage="resource socket_accept(resource socket)">Accepts a connection on the listening socket fd</phpsyntax>
-<phpsyntax function="socket_bind" usage="bool socket_bind(resource socket, string addr [, int port])">Binds an open socket to a listening port, port is only specified in AF_INET family.</phpsyntax>
-<phpsyntax function="socket_clear_error" usage="void socket_clear_error([resource socket])">Clears the error on the socket or the last error code.</phpsyntax>
-<phpsyntax function="socket_close" usage="void socket_close(resource socket)">Closes a file descriptor</phpsyntax>
-<phpsyntax function="socket_connect" usage="bool socket_connect(resource socket, string addr [, int port])">Opens a connection to addr:port on the socket specified by socket</phpsyntax>
-<phpsyntax function="socket_create" usage="resource socket_create(int domain, int type, int protocol)">Creates an endpoint for communication in the domain specified by domain, of type specified by type</phpsyntax>
-<phpsyntax function="socket_create_listen" usage="resource socket_create_listen(int port[, int backlog])">Opens a socket on port to accept connections</phpsyntax>
-<phpsyntax function="socket_create_pair" usage="bool socket_create_pair(int domain, int type, int protocol, array &amp;fd)">Creates a pair of indistinguishable sockets and stores them in fds.</phpsyntax>
-<phpsyntax function="socket_get_option" usage="mixed socket_get_option(resource socket, int level, int optname)">Gets socket options for the socket</phpsyntax>
-<phpsyntax function="socket_getpeername" usage="bool socket_getpeername(resource socket, string &amp;addr[, int &amp;port])">Queries the remote side of the given socket which may either result in host/port or in a UNIX filesystem path, dependent on its type.</phpsyntax>
-<phpsyntax function="socket_getsockname" usage="bool socket_getsockname(resource socket, string &amp;addr[, int &amp;port])">Queries the remote side of the given socket which may either result in host/port or in a UNIX filesystem path, dependent on its type.</phpsyntax>
-<phpsyntax function="socket_last_error" usage="int socket_last_error([resource socket])">Returns the last socket error (either the last used or the provided socket resource)</phpsyntax>
-<phpsyntax function="socket_listen" usage="bool socket_listen(resource socket[, int backlog])">Sets the maximum number of connections allowed to be waited for on the socket specified by fd</phpsyntax>
-<phpsyntax function="socket_read" usage="string socket_read(resource socket, int length [, int type])">Reads a maximum of length bytes from socket</phpsyntax>
-<phpsyntax function="socket_recv" usage="int socket_recv(resource socket, string &amp;buf, int len, int flags)">Receives data from a connected socket</phpsyntax>
-<phpsyntax function="socket_recvfrom" usage="int socket_recvfrom(resource socket, string &amp;buf, int len, int flags, string &amp;name [, int &amp;port])">Receives data from a socket, connected or not</phpsyntax>
-<phpsyntax function="socket_select" usage="int socket_select(array &amp;read_fds, array &amp;write_fds, &amp;array except_fds, int tv_sec[, int tv_usec])">Runs the select() system call on the sets mentioned with a timeout specified by tv_sec and tv_usec</phpsyntax>
-<phpsyntax function="socket_send" usage="int socket_send(resource socket, string buf, int len, int flags)">Sends data to a connected socket</phpsyntax>
-<phpsyntax function="socket_sendto" usage="int socket_sendto(resource socket, string buf, int len, int flags, string addr [, int port])">Sends a message to a socket, whether it is connected or not</phpsyntax>
-<phpsyntax function="socket_set_block" usage="bool socket_set_block(resource socket)">Sets blocking mode on a socket resource</phpsyntax>
-<phpsyntax function="socket_set_nonblock" usage="bool socket_set_nonblock(resource socket)">Sets nonblocking mode on a socket resource</phpsyntax>
-<phpsyntax function="socket_set_option" usage="bool socket_set_option(resource socket, int level, int optname, int|array optval)">Sets socket options for the socket</phpsyntax>
-<phpsyntax function="socket_shutdown" usage="bool socket_shutdown(resource socket[, int how])">Shuts down a socket for receiving, sending, or both.</phpsyntax>
-<phpsyntax function="socket_strerror" usage="string socket_strerror(int errno)">Returns a string describing an error</phpsyntax>
-<phpsyntax function="socket_write" usage="int socket_write(resource socket, string buf[, int length])">Writes the buffer to the socket resource, length is optional</phpsyntax>
-<phpsyntax function="sqlite_array_query" usage="array sqlite_array_query(resource db, string query [ , int result_type [, bool decode_binary]])">Executes a query against a given database and returns an array of arrays.</phpsyntax>
-<phpsyntax function="sqlite_busy_timeout" usage="void sqlite_busy_timeout(resource db, int ms)">Set busy timeout duration. If ms &lt;= 0, all busy handlers are disabled.</phpsyntax>
-<phpsyntax function="sqlite_changes" usage="int sqlite_changes(resource db)">Returns the number of rows that were changed by the most recent SQL statement.</phpsyntax>
-<phpsyntax function="sqlite_close" usage="void sqlite_close(resource db)">Closes an open sqlite database.</phpsyntax>
-<phpsyntax function="sqlite_column" usage="mixed sqlite_column(resource result, mixed index_or_name [, bool decode_binary])">Fetches a column from the current row of a result set.</phpsyntax>
-<phpsyntax function="sqlite_create_aggregate" usage="bool sqlite_create_aggregate(resource db, string funcname, mixed step_func, mixed finalize_func[, long num_args])">Registers an aggregate function for queries.</phpsyntax>
-<phpsyntax function="sqlite_create_function" usage="bool sqlite_create_function(resource db, string funcname, mixed callback[, long num_args])">Registers a "regular" function for queries.</phpsyntax>
-<phpsyntax function="sqlite_current" usage="array sqlite_current(resource result [, int result_type [, bool decode_binary]])">Fetches the current row from a result set as an array.</phpsyntax>
-<phpsyntax function="sqlite_error_string" usage="string sqlite_error_string(int error_code)">Returns the textual description of an error code.</phpsyntax>
-<phpsyntax function="sqlite_escape_string" usage="string sqlite_escape_string(string item)">Escapes a string for use as a query parameter.</phpsyntax>
-<phpsyntax function="sqlite_factory" usage="object sqlite_factory(string filename [, int mode [, string &amp;error_message]])">Opens a SQLite database and creates an object for it. Will create the database if it does not exist.</phpsyntax>
-<phpsyntax function="sqlite_fetch_all" usage="array sqlite_fetch_all(resource result [, int result_type [, bool decode_binary]])">Fetches all rows from a result set as an array of arrays.</phpsyntax>
-<phpsyntax function="sqlite_fetch_array" usage="array sqlite_fetch_array(resource result [, int result_type [, bool decode_binary]])">Fetches the next row from a result set as an array.</phpsyntax>
-<phpsyntax function="sqlite_fetch_column_types" usage="resource sqlite_fetch_column_types(string table_name, resource db)">Return an array of column types from a particular table.</phpsyntax>
-<phpsyntax function="sqlite_fetch_object" usage="object sqlite_fetch_object(resource result [, string class_name [, NULL|array ctor_params [, bool decode_binary]]])">Fetches the next row from a result set as an object.</phpsyntax>
-<phpsyntax function="sqlite_fetch_single" usage="string sqlite_fetch_single(resource result [, bool decode_binary])">Fetches the first column of a result set as a string.</phpsyntax>
-<phpsyntax function="sqlite_field_name" usage="string sqlite_field_name(resource result, int field_index)">Returns the name of a particular field of a result set.</phpsyntax>
-<phpsyntax function="sqlite_has_prev" usage="bool sqlite_has_prev(resource result)">* Returns whether a previous row is available.</phpsyntax>
-<phpsyntax function="sqlite_last_error" usage="int sqlite_last_error(resource db)">Returns the error code of the last error for a database.</phpsyntax>
-<phpsyntax function="sqlite_last_insert_rowid" usage="int sqlite_last_insert_rowid(resource db)">Returns the rowid of the most recently inserted row.</phpsyntax>
-<phpsyntax function="sqlite_libencoding" usage="string sqlite_libencoding()">Returns the encoding (iso8859 or UTF-8) of the linked SQLite library.</phpsyntax>
-<phpsyntax function="sqlite_libversion" usage="string sqlite_libversion()">Returns the version of the linked SQLite library.</phpsyntax>
-<phpsyntax function="sqlite_next" usage="bool sqlite_next(resource result)">Seek to the next row number of a result set.</phpsyntax>
-<phpsyntax function="sqlite_num_fields" usage="int sqlite_num_fields(resource result)">Returns the number of fields in a result set.</phpsyntax>
-<phpsyntax function="sqlite_num_rows" usage="int sqlite_num_rows(resource result)">Returns the number of rows in a buffered result set.</phpsyntax>
-<phpsyntax function="sqlite_open" usage="resource sqlite_open(string filename [, int mode [, string &amp;error_message]])">Opens a SQLite database. Will create the database if it does not exist.</phpsyntax>
-<phpsyntax function="sqlite_popen" usage="resource sqlite_popen(string filename [, int mode [, string &amp;error_message]])">Opens a persistent handle to a SQLite database. Will create the database if it does not exist.</phpsyntax>
-<phpsyntax function="sqlite_prev" usage="bool sqlite_prev(resource result)">* Seek to the previous row number of a result set.</phpsyntax>
-<phpsyntax function="sqlite_query" usage="resource sqlite_query(string query, resource db [, int result_type ])">Executes a query against a given database and returns a result handle.</phpsyntax>
-<phpsyntax function="sqlite_rewind" usage="bool sqlite_rewind(resource result)">Seek to the first row number of a buffered result set.</phpsyntax>
-<phpsyntax function="sqlite_seek" usage="bool sqlite_seek(resource result, int row)">Seek to a particular row number of a buffered result set.</phpsyntax>
-<phpsyntax function="sqlite_single_query" usage="array sqlite_single_query(resource db, string query [, bool first_row_only [, bool decode_binary]])">Executes a query and returns either an array for one single column or the value of the first row.</phpsyntax>
-<phpsyntax function="sqlite_udf_decode_binary" usage="string sqlite_udf_decode_binary(string data)">Decode binary encoding on a string parameter passed to an UDF.</phpsyntax>
-<phpsyntax function="sqlite_udf_encode_binary" usage="string sqlite_udf_encode_binary(string data)">Apply binary encoding (if required) to a string to return from an UDF.</phpsyntax>
-<phpsyntax function="sqlite_unbuffered_query" usage="resource sqlite_unbuffered_query(string query, resource db [ , int result_type ])">Executes a query that does not prefetch and buffer all data.</phpsyntax>
-<phpsyntax function="sqlite_valid" usage="bool sqlite_valid(resource result)">Returns whether more rows are available.</phpsyntax>
-<phpsyntax function="array_change_key_case" usage="array array_change_key_case(array input [, int case=CASE_LOWER])">Retuns an array with all string keys lowercased [or uppercased]</phpsyntax>
-<phpsyntax function="array_chunk" usage="array array_chunk(array input, int size [, bool preserve_keys])">Split array into chunks</phpsyntax>
-<phpsyntax function="array_combine" usage="array array_combine(array keys, array values)">Creates an array by using the elements of the first parameter as keys and the elements of the second as correspoding keys</phpsyntax>
-<phpsyntax function="array_count_values" usage="array array_count_values(array input)">Return the value as key and the frequency of that value in input as value</phpsyntax>
-<phpsyntax function="array_diff" usage="array array_diff(array arr1, array arr2 [, array ...])">Returns the entries of arr1 that have values which are not present in any of the others arguments.</phpsyntax>
-<phpsyntax function="array_diff_assoc" usage="array array_diff_assoc(array arr1, array arr2 [, array ...])">Returns the entries of arr1 that have values which are not present in any of the others arguments but do additional checks whether the keys are equal</phpsyntax>
-<phpsyntax function="array_diff_uassoc" usage="array array_diff_uassoc(array arr1, array arr2 [, array ...], callback data_comp_func)">Returns the entries of arr1 that have values which are not present in any of the others arguments but do additional checks whether the keys are equal. Elements are compared by user supplied function.</phpsyntax>
-<phpsyntax function="array_fill" usage="array array_fill(int start_key, int num, mixed val)">Create an array containing num elements starting with index start_key each initialized to val</phpsyntax>
-<phpsyntax function="array_filter" usage="array array_filter(array input [, mixed callback])">Filters elements from the array via the callback.</phpsyntax>
-<phpsyntax function="array_flip" usage="array array_flip(array input)">Return array with key &lt;-&gt; value flipped</phpsyntax>
-<phpsyntax function="array_intersect" usage="array array_intersect(array arr1, array arr2 [, array ...])">Returns the entries of arr1 that have values which are present in all the other arguments</phpsyntax>
-<phpsyntax function="array_intersect_assoc" usage="array array_intersect_assoc(array arr1, array arr2 [, array ...])">Returns the entries of arr1 that have values which are present in all the other arguments. Keys are used to do more restrictive check</phpsyntax>
-<phpsyntax function="array_intersect_uassoc" usage="array array_intersect_uassoc(array arr1, array arr2 [, array ...], callback key_compare_func)">Returns the entries of arr1 that have values which are present in all the other arguments. Keys are used to do more restrictive check and they are compared by using an user-supplied callback.</phpsyntax>
-<phpsyntax function="array_key_exists" usage="bool array_key_exists(mixed key, array search)">Checks if the given key or index exists in the array</phpsyntax>
-<phpsyntax function="array_keys" usage="array array_keys(array input [, mixed search_value[, bool strict]])">Return just the keys from the input array, optionally only for the specified search_value</phpsyntax>
-<phpsyntax function="array_map" usage="array array_map(mixed callback, array input1 [, array input2 ,...])">Applies the callback to the elements in given arrays.</phpsyntax>
-<phpsyntax function="array_merge" usage="array array_merge(array arr1, array arr2 [, array ...])">Merges elements from passed arrays into one array</phpsyntax>
-<phpsyntax function="array_merge_recursive" usage="array array_merge_recursive(array arr1, array arr2 [, array ...])">Recursively merges elements from passed arrays into one array</phpsyntax>
-<phpsyntax function="array_multisort" usage="bool array_multisort(array ar1 [, SORT_ASC|SORT_DESC [, SORT_REGULAR|SORT_NUMERIC|SORT_STRING]] [, array ar2 [, SORT_ASC|SORT_DESC [, SORT_REGULAR|SORT_NUMERIC|SORT_STRING]], ...])">Sort multiple arrays at once similar to how ORDER BY clause works in SQL</phpsyntax>
-<phpsyntax function="array_pad" usage="array array_pad(array input, int pad_size, mixed pad_value)">Returns a copy of input array padded with pad_value to size pad_size</phpsyntax>
-<phpsyntax function="array_pop" usage="mixed array_pop(array stack)">Pops an element off the end of the array</phpsyntax>
-<phpsyntax function="array_push" usage="int array_push(array stack, mixed var [, mixed ...])">Pushes elements onto the end of the array</phpsyntax>
-<phpsyntax function="array_rand" usage="mixed array_rand(array input [, int num_req])">Return key/keys for random entry/entries in the array</phpsyntax>
-<phpsyntax function="array_reduce" usage="mixed array_reduce(array input, mixed callback [, int initial])">Iteratively reduce the array to a single value via the callback.</phpsyntax>
-<phpsyntax function="array_reverse" usage="array array_reverse(array input [, bool preserve keys])">Return input as a new array with the order of the entries reversed</phpsyntax>
-<phpsyntax function="array_search" usage="mixed array_search(mixed needle, array haystack [, bool strict])">Searches the array for a given value and returns the corresponding key if successful</phpsyntax>
-<phpsyntax function="array_shift" usage="mixed array_shift(array stack)">Pops an element off the beginning of the array</phpsyntax>
-<phpsyntax function="array_slice" usage="array array_slice(array input, int offset [, int length])">Returns elements specified by offset and length</phpsyntax>
-<phpsyntax function="array_splice" usage="array array_splice(array input, int offset [, int length [, array replacement]])">Removes the elements designated by offset and length and replace them with supplied array</phpsyntax>
-<phpsyntax function="array_sum" usage="mixed array_sum(array input)">Returns the sum of the array entries</phpsyntax>
-<phpsyntax function="array_udiff" usage="array array_udiff(array arr1, array arr2 [, array ...], callback data_comp_func)">Returns the entries of arr1 that have values which are not present in any of the others arguments. Elements are compared by user supplied function.</phpsyntax>
-<phpsyntax function="array_udiff_assoc" usage="array array_udiff_assoc(array arr1, array arr2 [, array ...], callback key_comp_func)">Returns the entries of arr1 that have values which are not present in any of the others arguments but do additional checks whether the keys are equal. Keys are compared by user supplied function.</phpsyntax>
-<phpsyntax function="array_udiff_uassoc" usage="array array_udiff_uassoc(array arr1, array arr2 [, array ...], callback data_comp_func, callback key_comp_func)">Returns the entries of arr1 that have values which are not present in any of the others arguments but do additional checks whether the keys are equal. Keys and elements are compared by user supplied functions.</phpsyntax>
-<phpsyntax function="array_uintersect" usage="array array_uintersect(array arr1, array arr2 [, array ...], callback data_compare_func)">Returns the entries of arr1 that have values which are present in all the other arguments. Data is compared by using an user-supplied callback.</phpsyntax>
-<phpsyntax function="array_uintersect_assoc" usage="array array_uintersect_assoc(array arr1, array arr2 [, array ...], callback data_compare_func)">Returns the entries of arr1 that have values which are present in all the other arguments. Keys are used to do more restrictive check. Data is compared by using an user-supplied callback.</phpsyntax>
-<phpsyntax function="array_uintersect_uassoc" usage="array array_uintersect_uassoc(array arr1, array arr2 [, array ...], callback data_compare_func, callback key_compare_func)">Returns the entries of arr1 that have values which are present in all the other arguments. Keys are used to do more restrictive check. Both data and keys are compared by using user-supplied callbacks.</phpsyntax>
-<phpsyntax function="array_unique" usage="array array_unique(array input)">Removes duplicate values from array</phpsyntax>
-<phpsyntax function="array_unshift" usage="int array_unshift(array stack, mixed var [, mixed ...])">Pushes elements onto the beginning of the array</phpsyntax>
-<phpsyntax function="array_values" usage="array array_values(array input)">Return just the values from the input array</phpsyntax>
-<phpsyntax function="array_walk" usage="bool array_walk(array input, string funcname [, mixed userdata])">Apply a user function to every member of an array</phpsyntax>
-<phpsyntax function="array_walk_recursive" usage="bool array_walk_recursive(array input, string funcname [, mixed userdata])">Apply a user function recursively to every member of an array</phpsyntax>
-<phpsyntax function="arsort" usage="bool arsort(array array_arg [, int sort_flags])">Sort an array in reverse order and maintain index association</phpsyntax>
-<phpsyntax function="asort" usage="bool asort(array array_arg [, int sort_flags])">Sort an array and maintain index association</phpsyntax>
-<phpsyntax function="compact" usage="array compact(mixed var_names [, mixed ...])">Creates a hash containing variables and their values</phpsyntax>
-<phpsyntax function="count" usage="int count(mixed var [, int mode])">Count the number of elements in a variable (usually an array)</phpsyntax>
-<phpsyntax function="current" usage="mixed current(array array_arg)">Return the element currently pointed to by the internal array pointer</phpsyntax>
-<phpsyntax function="end" usage="mixed end(array array_arg)">Advances array argument's internal pointer to the last element and return it</phpsyntax>
-<phpsyntax function="extract" usage="int extract(array var_array [, int extract_type [, string prefix]])">Imports variables into symbol table from an array</phpsyntax>
-<phpsyntax function="in_array" usage="bool in_array(mixed needle, array haystack [, bool strict])">Checks if the given value exists in the array</phpsyntax>
-<phpsyntax function="key" usage="mixed key(array array_arg)">Return the key of the element currently pointed to by the internal array pointer</phpsyntax>
-<phpsyntax function="krsort" usage="bool krsort(array array_arg [, int sort_flags])">Sort an array by key value in reverse order</phpsyntax>
-<phpsyntax function="ksort" usage="bool ksort(array array_arg [, int sort_flags])">Sort an array by key</phpsyntax>
-<phpsyntax function="max" usage="mixed max(mixed arg1 [, mixed arg2 [, mixed ...]])">Return the highest value in an array or a series of arguments</phpsyntax>
-<phpsyntax function="min" usage="mixed min(mixed arg1 [, mixed arg2 [, mixed ...]])">Return the lowest value in an array or a series of arguments</phpsyntax>
-<phpsyntax function="natcasesort" usage="void natcasesort(array array_arg)">Sort an array using case-insensitive natural sort</phpsyntax>
-<phpsyntax function="natsort" usage="void natsort(array array_arg)">Sort an array using natural sort</phpsyntax>
-<phpsyntax function="next" usage="mixed next(array array_arg)">Move array argument's internal pointer to the next element and return it</phpsyntax>
-<phpsyntax function="prev" usage="mixed prev(array array_arg)">Move array argument's internal pointer to the previous element and return it</phpsyntax>
-<phpsyntax function="range" usage="array range(mixed low, mixed high[, int step])">Create an array containing the range of integers or characters from low to high (inclusive)</phpsyntax>
-<phpsyntax function="reset" usage="mixed reset(array array_arg)">Set array argument's internal pointer to the first element and return it</phpsyntax>
-<phpsyntax function="rsort" usage="bool rsort(array array_arg [, int sort_flags])">Sort an array in reverse order</phpsyntax>
-<phpsyntax function="shuffle" usage="bool shuffle(array array_arg)">Randomly shuffle the contents of an array</phpsyntax>
-<phpsyntax function="sort" usage="bool sort(array array_arg [, int sort_flags])">Sort an array</phpsyntax>
-<phpsyntax function="uasort" usage="bool uasort(array array_arg, string cmp_function)">Sort an array with a user-defined comparison function and maintain index association</phpsyntax>
-<phpsyntax function="uksort" usage="bool uksort(array array_arg, string cmp_function)">Sort an array by keys using a user-defined comparison function</phpsyntax>
-<phpsyntax function="usort" usage="bool usort(array array_arg, string cmp_function)">Sort an array by values using a user-defined comparison function</phpsyntax>
-<phpsyntax function="assert" usage="int assert(string|bool assertion)">Checks if assertion is false</phpsyntax>
-<phpsyntax function="assert_options" usage="mixed assert_options(int what [, mixed value])">Set/get the various assert flags</phpsyntax>
-<phpsyntax function="call_user_func" usage="mixed call_user_func(string function_name [, mixed parmeter] [, mixed ...])">Call a user function which is the first parameter</phpsyntax>
-<phpsyntax function="call_user_func_array" usage="mixed call_user_func_array(string function_name, array parameters)">Call a user function which is the first parameter with the arguments contained in array</phpsyntax>
-<phpsyntax function="call_user_method" usage="mixed call_user_method(string method_name, mixed object [, mixed parameter] [, mixed ...])">Call a user method on a specific object or class</phpsyntax>
-<phpsyntax function="call_user_method_array" usage="mixed call_user_method_array(string method_name, mixed object, array params)">Call a user method on a specific object or class using a parameter array</phpsyntax>
-<phpsyntax function="connection_aborted" usage="int connection_aborted(void)">Returns true if client disconnected</phpsyntax>
-<phpsyntax function="connection_status" usage="int connection_status(void)">Returns the connection status bitfield</phpsyntax>
-<phpsyntax function="constant" usage="mixed constant(string const_name)">Given the name of a constant this function will return the constants associated value</phpsyntax>
-<phpsyntax function="error_log" usage="bool error_log(string message [, int message_type [, string destination [, string extra_headers]]])">Send an error message somewhere</phpsyntax>
-<phpsyntax function="flush" usage="void flush(void)">Flush the output buffer</phpsyntax>
-<phpsyntax function="get_cfg_var" usage="string get_cfg_var(string option_name)">Get the value of a PHP configuration option</phpsyntax>
-<phpsyntax function="get_current_user" usage="string get_current_user(void)">Get the name of the owner of the current PHP script</phpsyntax>
-<phpsyntax function="get_include_path" usage="string get_include_path()">Get the current include_path configuration option</phpsyntax>
-<phpsyntax function="get_magic_quotes_gpc" usage="int get_magic_quotes_gpc(void)">Get the current active configuration setting of magic_quotes_gpc</phpsyntax>
-<phpsyntax function="get_magic_quotes_runtime" usage="int get_magic_quotes_runtime(void)">Get the current active configuration setting of magic_quotes_runtime</phpsyntax>
-<phpsyntax function="getenv" usage="string getenv(string varname)">Get the value of an environment variable</phpsyntax>
-<phpsyntax function="getopt" usage="array getopt(string options [, array longopts])">Get options from the command line argument list</phpsyntax>
-<phpsyntax function="getprotobyname" usage="int getprotobyname(string name)">Returns protocol number associated with name as per /etc/protocols</phpsyntax>
-<phpsyntax function="getprotobynumber" usage="string getprotobynumber(int proto)">Returns protocol name associated with protocol number proto</phpsyntax>
-<phpsyntax function="getservbyname" usage="int getservbyname(string service, string protocol)">Returns port associated with service. Protocol must be "tcp" or "udp"</phpsyntax>
-<phpsyntax function="getservbyport" usage="string getservbyport(int port, string protocol)">Returns service name associated with port. Protocol must be "tcp" or "udp"</phpsyntax>
-<phpsyntax function="highlight_file" usage="bool highlight_file(string file_name [, bool return] )">Syntax highlight a source file</phpsyntax>
-<phpsyntax function="highlight_string" usage="bool highlight_string(string string [, bool return] )">Syntax highlight a string or optionally return it</phpsyntax>
-<phpsyntax function="ignore_user_abort" usage="int ignore_user_abort(bool value)">Set whether we want to ignore a user abort event or not</phpsyntax>
-<phpsyntax function="import_request_variables" usage="bool import_request_variables(string types [, string prefix])">Import GET/POST/Cookie variables into the global scope</phpsyntax>
-<phpsyntax function="ini_get" usage="string ini_get(string varname)">Get a configuration option</phpsyntax>
-<phpsyntax function="ini_get_all" usage="array ini_get_all([string extension])">Get all configuration options</phpsyntax>
-<phpsyntax function="ini_restore" usage="void ini_restore(string varname)">Restore the value of a configuration option specified by varname</phpsyntax>
-<phpsyntax function="ini_set" usage="string ini_set(string varname, string newvalue)">Set a configuration option, returns false on error and the old value of the configuration option on success</phpsyntax>
-<phpsyntax function="is_uploaded_file" usage="bool is_uploaded_file(string path)">Check if file was created by rfc1867 upload</phpsyntax>
-<phpsyntax function="move_uploaded_file" usage="bool move_uploaded_file(string path, string new_path)">Move a file if and only if it was created by an upload</phpsyntax>
-<phpsyntax function="parse_ini_file" usage="array parse_ini_file(string filename [, bool process_sections])">Parse configuration file</phpsyntax>
-<phpsyntax function="php_check_syntax" usage="bool php_check_syntax(string file_name [, &amp;$error_message])">Check the syntax of the specified file.</phpsyntax>
-<phpsyntax function="php_strip_whitespace" usage="string php_strip_whitespace(string file_name)">Return source with stripped comments and whitespace</phpsyntax>
-<phpsyntax function="print_r" usage="mixed print_r(mixed var [, bool return])">Prints out or returns information about the specified variable</phpsyntax>
-<phpsyntax function="putenv" usage="bool putenv(string setting)">Set the value of an environment variable</phpsyntax>
-<phpsyntax function="register_shutdown_function" usage="void register_shutdown_function(string function_name)">Register a user-level function to be called on request termination</phpsyntax>
-<phpsyntax function="register_tick_function" usage="bool register_tick_function(string function_name [, mixed arg [, mixed ... ]])">Registers a tick callback function</phpsyntax>
-<phpsyntax function="restore_include_path" usage="void restore_include_path()">Restore the value of the include_path configuration option</phpsyntax>
-<phpsyntax function="set_include_path" usage="string set_include_path(string varname, string newvalue)">Sets the include_path configuration option</phpsyntax>
-<phpsyntax function="set_magic_quotes_runtime" usage="bool set_magic_quotes_runtime(int new_setting)">Set the current active configuration setting of magic_quotes_runtime and return previous</phpsyntax>
-<phpsyntax function="sleep" usage="void sleep(int seconds)">Delay for a given number of seconds</phpsyntax>
-<phpsyntax function="time_nanosleep" usage="mixed time_nanosleep(long seconds, long nanoseconds)">Delay for a number of seconds and nano seconds</phpsyntax>
-<phpsyntax function="unregister_tick_function" usage="void unregister_tick_function(string function_name)">Unregisters a tick callback function</phpsyntax>
-<phpsyntax function="usleep" usage="void usleep(int micro_seconds)">Delay for a given number of micro seconds</phpsyntax>
-<phpsyntax function="get_browser" usage="mixed get_browser([string browser_name [, bool return_array]])">Get information about the capabilities of a browser. If browser_name is omitted     or null, HTTP_USER_AGENT is used. Returns an object by default; if return_array     is true, returns an array.</phpsyntax>
-<phpsyntax function="crypt" usage="string crypt(string str [, string salt])">Encrypt a string</phpsyntax>
-<phpsyntax function="convert_cyr_string" usage="string convert_cyr_string(string str, string from, string to)">Convert from one Cyrillic character set to another</phpsyntax>
-<phpsyntax function="checkdate" usage="bool checkdate(int month, int day, int year)">Returns true(1) if it is a valid date in gregorian calendar</phpsyntax>
-<phpsyntax function="date" usage="string date(string format [, int timestamp])">Format a local time/date</phpsyntax>
-<phpsyntax function="getdate" usage="array getdate([int timestamp])">Get date/time information</phpsyntax>
-<phpsyntax function="gmdate" usage="string gmdate(string format [, int timestamp])">Format a GMT/UTC date/time</phpsyntax>
-<phpsyntax function="gmmktime" usage="int gmmktime(int hour, int min, int sec, int mon, int day, int year)">Get UNIX timestamp for a GMT date</phpsyntax>
-<phpsyntax function="gmstrftime" usage="string gmstrftime(string format [, int timestamp])">Format a GMT/UCT time/date according to locale settings</phpsyntax>
-<phpsyntax function="idate" usage="int idate(string format [, int timestamp])">Format a local time/date as integer</phpsyntax>
-<phpsyntax function="localtime" usage="array localtime([int timestamp [, bool associative_array]])">Returns the results of the C system call localtime as an associative array if the associative_array argument is set to 1 other wise it is a regular array</phpsyntax>
-<phpsyntax function="mktime" usage="int mktime(int hour, int min, int sec, int mon, int day, int year)">Get UNIX timestamp for a date</phpsyntax>
-<phpsyntax function="strftime" usage="string strftime(string format [, int timestamp])">Format a local time/date according to locale settings</phpsyntax>
-<phpsyntax function="strtotime" usage="int strtotime(string time, int now)">Convert string representation of date and time to a timestamp</phpsyntax>
-<phpsyntax function="time" usage="int time(void)">Return current UNIX timestamp</phpsyntax>
-<phpsyntax function="chdir" usage="bool chdir(string directory)">Change the current directory</phpsyntax>
-<phpsyntax function="chroot" usage="bool chroot(string directory)">Change root directory</phpsyntax>
-<phpsyntax function="closedir" usage="void closedir([resource dir_handle])">Close directory connection identified by the dir_handle</phpsyntax>
-<phpsyntax function="dir" usage="object dir(string directory[, resource context])">Directory class with properties, handle and class and methods read, rewind and close</phpsyntax>
-<phpsyntax function="getcwd" usage="mixed getcwd(void)">Gets the current directory</phpsyntax>
-<phpsyntax function="glob" usage="array glob(string pattern [, int flags])">Find pathnames matching a pattern</phpsyntax>
-<phpsyntax function="opendir" usage="mixed opendir(string path[, resource context])">Open a directory and return a dir_handle</phpsyntax>
-<phpsyntax function="readdir" usage="string readdir([resource dir_handle])">Read directory entry from dir_handle</phpsyntax>
-<phpsyntax function="rewinddir" usage="void rewinddir([resource dir_handle])">Rewind dir_handle back to the start</phpsyntax>
-<phpsyntax function="scandir" usage="array scandir(string dir [, int sorting_order [, resource context]])">List files &amp; directories inside the specified path</phpsyntax>
-<phpsyntax function="dl" usage="int dl(string extension_filename)">Load a PHP extension at runtime</phpsyntax>
-<phpsyntax function="dns_check_record" usage="int dns_check_record(string host [, string type])">Check DNS records corresponding to a given Internet host name or IP address</phpsyntax>
-<phpsyntax function="dns_get_mx" usage="bool dns_get_mx(string hostname, array mxhosts [, array weight])">Get MX records corresponding to a given Internet host name</phpsyntax>
-<phpsyntax function="gethostbyaddr" usage="string gethostbyaddr(string ip_address)">Get the Internet host name corresponding to a given IP address</phpsyntax>
-<phpsyntax function="gethostbyname" usage="string gethostbyname(string hostname)">Get the IP address corresponding to a given Internet host name</phpsyntax>
-<phpsyntax function="gethostbynamel" usage="array gethostbynamel(string hostname)">Return a list of IP addresses that a given hostname resolves to.</phpsyntax>
-<phpsyntax function="escapeshellarg" usage="string escapeshellarg(string arg)">Quote and escape an argument for use in a shell command</phpsyntax>
-<phpsyntax function="escapeshellcmd" usage="string escapeshellcmd(string command)">Escape shell metacharacters</phpsyntax>
-<phpsyntax function="exec" usage="string exec(string command [, array &amp;output [, int &amp;return_value]])">Execute an external program</phpsyntax>
-<phpsyntax function="passthru" usage="void passthru(string command [, int &amp;return_value])">Execute an external program and display raw output</phpsyntax>
-<phpsyntax function="proc_nice" usage="bool proc_nice(int priority)">Change the priority of the current process</phpsyntax>
-<phpsyntax function="shell_exec" usage="string shell_exec(string cmd)">Execute command via shell and return complete output as string</phpsyntax>
-<phpsyntax function="system" usage="int system(string command [, int &amp;return_value])">Execute an external program and display output</phpsyntax>
-<phpsyntax function="copy" usage="bool copy(string source_file, string destination_file)">Copy a file</phpsyntax>
-<phpsyntax function="fclose" usage="bool fclose(resource fp)">Close an open file pointer</phpsyntax>
-<phpsyntax function="feof" usage="bool feof(resource fp)">Test for end-of-file on a file pointer</phpsyntax>
-<phpsyntax function="fflush" usage="bool fflush(resource fp)">Flushes output</phpsyntax>
-<phpsyntax function="fgetc" usage="string fgetc(resource fp)">Get a character from file pointer</phpsyntax>
-<phpsyntax function="fgetcsv" usage="array fgetcsv(resource fp [,int length [, string delimiter [, string enclosure]]])">Get line from file pointer and parse for CSV fields</phpsyntax>
-<phpsyntax function="fgets" usage="string fgets(resource fp[, int length])">Get a line from file pointer</phpsyntax>
-<phpsyntax function="fgetss" usage="string fgetss(resource fp [, int length, string allowable_tags])">Get a line from file pointer and strip HTML tags</phpsyntax>
-<phpsyntax function="file" usage="array file(string filename [, int flags[, resource context]])">Read entire file into an array</phpsyntax>
-<phpsyntax function="file_get_contents" usage="string file_get_contents(string filename [, bool use_include_path [, resource context]])">Read the entire file into a string</phpsyntax>
-<phpsyntax function="file_put_contents" usage="int file_put_contents(string file, mixed data [, int flags [, resource context]])">Write/Create a file with contents data and return the number of bytes written</phpsyntax>
-<phpsyntax function="flock" usage="bool flock(resource fp, int operation [, int &amp;wouldblock])">Portable file locking</phpsyntax>
-<phpsyntax function="fnmatch" usage="bool fnmatch(string pattern, string filename [, int flags])">Match filename against pattern</phpsyntax>
-<phpsyntax function="fopen" usage="resource fopen(string filename, string mode [, bool use_include_path [, resource context]])">Open a file or a URL and return a file pointer</phpsyntax>
-<phpsyntax function="fpassthru" usage="int fpassthru(resource fp)">Output all remaining data from a file pointer</phpsyntax>
-<phpsyntax function="fread" usage="string fread(resource fp, int length)">Binary-safe file read</phpsyntax>
-<phpsyntax function="fscanf" usage="mixed fscanf(resource stream, string format [, string ...])">Implements a mostly ANSI compatible fscanf()</phpsyntax>
-<phpsyntax function="fseek" usage="int fseek(resource fp, int offset [, int whence])">Seek on a file pointer</phpsyntax>
-<phpsyntax function="fstat" usage="int fstat(resource fp)">Stat() on a filehandle</phpsyntax>
-<phpsyntax function="ftell" usage="int ftell(resource fp)">Get file pointer's read/write position</phpsyntax>
-<phpsyntax function="ftruncate" usage="bool ftruncate(resource fp, int size)">Truncate file to 'size' length</phpsyntax>
-<phpsyntax function="fwrite" usage="int fwrite(resource fp, string str [, int length])">Binary-safe file write</phpsyntax>
-<phpsyntax function="get_meta_tags" usage="array get_meta_tags(string filename [, bool use_include_path])">Extracts all meta tag content attributes from a file and returns an array</phpsyntax>
-<phpsyntax function="mkdir" usage="int mkdir(char *dir int mode)"></phpsyntax>
-<phpsyntax function="mkdir" usage="bool mkdir(string pathname [, int mode [, bool recursive [, resource context]]])">Create a directory</phpsyntax>
-<phpsyntax function="pclose" usage="int pclose(resource fp)">Close a file pointer opened by popen()</phpsyntax>
-<phpsyntax function="popen" usage="resource popen(string command, string mode)">Execute a command and open either a read or a write pipe to it</phpsyntax>
-<phpsyntax function="readfile" usage="int readfile(string filename [, bool use_include_path[, resource context]])">Output a file or a URL</phpsyntax>
-<phpsyntax function="realpath" usage="string realpath(string path)">Return the resolved path</phpsyntax>
-<phpsyntax function="rename" usage="bool rename(string old_name, string new_name[, resource context])">Rename a file</phpsyntax>
-<phpsyntax function="rewind" usage="bool rewind(resource fp)">Rewind the position of a file pointer</phpsyntax>
-<phpsyntax function="rmdir" usage="bool rmdir(string dirname[, resource context])">Remove a directory</phpsyntax>
-<phpsyntax function="tempnam" usage="string tempnam(string dir, string prefix)">Create a unique filename in a directory</phpsyntax>
-<phpsyntax function="tmpfile" usage="resource tmpfile(void)">Create a temporary file that will be deleted automatically after use</phpsyntax>
-<phpsyntax function="umask" usage="int umask([int mask])">Return or change the umask</phpsyntax>
-<phpsyntax function="unlink" usage="bool unlink(string filename[, context context])">Delete a file</phpsyntax>
-<phpsyntax function="chgrp" usage="bool chgrp(string filename, mixed group)">Change file group</phpsyntax>
-<phpsyntax function="chmod" usage="bool chmod(string filename, int mode)">Change file mode</phpsyntax>
-<phpsyntax function="clearstatcache" usage="void clearstatcache(void)">Clear file stat cache</phpsyntax>
-<phpsyntax function="disk_free_space" usage="float disk_free_space(string path)">Get free disk space for filesystem that path is on</phpsyntax>
-<phpsyntax function="disk_total_space" usage="float disk_total_space(string path)">Get total disk space for filesystem that path is on</phpsyntax>
-<phpsyntax function="file_exists" usage="bool file_exists(string filename)">Returns true if filename exists</phpsyntax>
-<phpsyntax function="fileatime" usage="int fileatime(string filename)">Get last access time of file</phpsyntax>
-<phpsyntax function="filectime" usage="int filectime(string filename)">Get inode modification time of file</phpsyntax>
-<phpsyntax function="filegroup" usage="int filegroup(string filename)">Get file group</phpsyntax>
-<phpsyntax function="fileinode" usage="int fileinode(string filename)">Get file inode</phpsyntax>
-<phpsyntax function="filemtime" usage="int filemtime(string filename)">Get last modification time of file</phpsyntax>
-<phpsyntax function="fileowner" usage="int fileowner(string filename)">Get file owner</phpsyntax>
-<phpsyntax function="fileperms" usage="int fileperms(string filename)">Get file permissions</phpsyntax>
-<phpsyntax function="filesize" usage="int filesize(string filename)">Get file size</phpsyntax>
-<phpsyntax function="filetype" usage="string filetype(string filename)">Get file type</phpsyntax>
-<phpsyntax function="is_dir" usage="bool is_dir(string filename)">Returns true if file is directory</phpsyntax>
-<phpsyntax function="is_executable" usage="bool is_executable(string filename)">Returns true if file is executable</phpsyntax>
-<phpsyntax function="is_file" usage="bool is_file(string filename)">Returns true if file is a regular file</phpsyntax>
-<phpsyntax function="is_link" usage="bool is_link(string filename)">Returns true if file is symbolic link</phpsyntax>
-<phpsyntax function="is_readable" usage="bool is_readable(string filename)">Returns true if file can be read</phpsyntax>
-<phpsyntax function="is_writable" usage="bool is_writable(string filename)">Returns true if file can be written</phpsyntax>
-<phpsyntax function="lstat" usage="array lstat(string filename)">Give information about a file or symbolic link</phpsyntax>
-<phpsyntax function="stat" usage="array stat(string filename)">Give information about a file</phpsyntax>
-<phpsyntax function="touch" usage="bool touch(string filename [, int time [, int atime]])">Set modification time of file</phpsyntax>
-<phpsyntax function="fprintf" usage="int fprintf(resource stream, string format [, mixed arg1 [, mixed ...]])">Output a formatted string into a stream</phpsyntax>
-<phpsyntax function="printf" usage="int printf(string format [, mixed arg1 [, mixed ...]])">Output a formatted string</phpsyntax>
-<phpsyntax function="sprintf" usage="string sprintf(string format [, mixed arg1 [, mixed ...]])">Return a formatted string</phpsyntax>
-<phpsyntax function="vfprintf" usage="int vfprintf(resource stream, string format, array args)">Output a formatted string into a stream</phpsyntax>
-<phpsyntax function="vprintf" usage="int vprintf(string format, array args)">Output a formatted string</phpsyntax>
-<phpsyntax function="vsprintf" usage="string vsprintf(string format, array args)">Return a formatted string</phpsyntax>
-<phpsyntax function="fsockopen" usage="resource fsockopen(string hostname, int port [, int errno [, string errstr [, float timeout]]])">Open Internet or Unix domain socket connection</phpsyntax>
-<phpsyntax function="pfsockopen" usage="resource pfsockopen(string hostname, int port [, int errno [, string errstr [, float timeout]]])">Open persistent Internet or Unix domain socket connection</phpsyntax>
-<phpsyntax function="ftok" usage="int ftok(string pathname, string proj)">Convert a pathname and a project identifier to a System V IPC key</phpsyntax>
-<phpsyntax function="header" usage="void header(string header [, bool replace, [int http_response_code]])">Sends a raw HTTP header</phpsyntax>
-<phpsyntax function="headers_list" usage="string headers_list(void)">Return list of headers to be sent / already sent</phpsyntax>
-<phpsyntax function="headers_sent" usage="bool headers_sent([string &amp;$file [, int &amp;$line]])">Returns true if headers have already been sent, false otherwise</phpsyntax>
-<phpsyntax function="setcookie" usage="bool setcookie(string name [, string value [, int expires [, string path [, string domain [, bool secure]]]]])">Send a cookie</phpsyntax>
-<phpsyntax function="setrawcookie" usage="bool setrawcookie(string name [, string value [, int expires [, string path [, string domain [, bool secure]]]]])">Send a cookie with no url encoding of the value</phpsyntax>
-<phpsyntax function="get_html_translation_table" usage="array get_html_translation_table([int table [, int quote_style]])">Returns the internal translation table used by htmlspecialchars and htmlentities</phpsyntax>
-<phpsyntax function="html_entity_decode" usage="string html_entity_decode(string string [, int quote_style][, string charset])">Convert all HTML entities to their applicable characters</phpsyntax>
-<phpsyntax function="htmlentities" usage="string htmlentities(string string [, int quote_style][, string charset])">Convert all applicable characters to HTML entities</phpsyntax>
-<phpsyntax function="htmlspecialchars" usage="string htmlspecialchars(string string [, int quote_style][, string charset])">Convert special characters to HTML entities</phpsyntax>
-<phpsyntax function="http_build_query" usage="string http_build_query(mixed formdata [, string prefix])">Generates a form-encoded query string from an associative array or object.</phpsyntax>
-<phpsyntax function="getimagesize" usage="array getimagesize(string imagefile [, array info])">Get the size of an image as 4-element array</phpsyntax>
-<phpsyntax function="image_type_to_extension" usage="string image_type_to_extension(int imagetype [, bool include_dot])">Get file extension for image-type returned by getimagesize, exif_read_data, exif_thumbnail, exif_imagetype</phpsyntax>
-<phpsyntax function="image_type_to_mime_type" usage="string image_type_to_mime_type(int imagetype)">Get Mime-Type for image-type returned by getimagesize, exif_read_data, exif_thumbnail, exif_imagetype</phpsyntax>
-<phpsyntax function="php_egg_logo_guid" usage="string php_egg_logo_guid(void)">Return the special ID used to request the PHP logo in phpinfo screens</phpsyntax>
-<phpsyntax function="php_ini_scanned_files" usage="string php_ini_scanned_files(void)">Return comma-separated string of .ini files parsed from the additional ini dir</phpsyntax>
-<phpsyntax function="php_logo_guid" usage="string php_logo_guid(void)">Return the special ID used to request the PHP logo in phpinfo screens</phpsyntax>
-<phpsyntax function="php_real_logo_guid" usage="string php_real_logo_guid(void)">Return the special ID used to request the PHP logo in phpinfo screens</phpsyntax>
-<phpsyntax function="php_sapi_name" usage="string php_sapi_name(void)">Return the current SAPI module name</phpsyntax>
-<phpsyntax function="php_uname" usage="string php_uname(void)">Return information about the system PHP was built on</phpsyntax>
-<phpsyntax function="phpcredits" usage="void phpcredits([int flag])">Prints the list of people who've contributed to the PHP project</phpsyntax>
-<phpsyntax function="phpinfo" usage="void phpinfo([int what])">Output a page of useful information about PHP and the current request</phpsyntax>
-<phpsyntax function="phpversion" usage="string phpversion([string extension])">Return the current PHP version</phpsyntax>
-<phpsyntax function="zend_logo_guid" usage="string zend_logo_guid(void)">Return the special ID used to request the Zend logo in phpinfo screens</phpsyntax>
-<phpsyntax function="iptcembed" usage="array iptcembed(string iptcdata, string jpeg_file_name [, int spool])">Embed binary IPTC data into a JPEG image.</phpsyntax>
-<phpsyntax function="iptcparse" usage="array iptcparse(string iptcdata)">Parse binary IPTC-data into associative array</phpsyntax>
-<phpsyntax function="lcg_value" usage="float lcg_value()">Returns a value from the combined linear congruential generator</phpsyntax>
-<phpsyntax function="levenshtein" usage="int levenshtein(string str1, string str2)">Calculate Levenshtein distance between two strings</phpsyntax>
-<phpsyntax function="link" usage="int link(string target, string link)">Create a hard link</phpsyntax>
-<phpsyntax function="linkinfo" usage="int linkinfo(string filename)">Returns the st_dev field of the UNIX C stat structure describing the link</phpsyntax>
-<phpsyntax function="readlink" usage="string readlink(string filename)">Return the target of a symbolic link</phpsyntax>
-<phpsyntax function="symlink" usage="int symlink(string target, string link)">Create a symbolic link</phpsyntax>
-<phpsyntax function="ezmlm_hash" usage="int ezmlm_hash(string addr)">Calculate EZMLM list hash value.</phpsyntax>
-<phpsyntax function="mail" usage="int mail(string to, string subject, string message [, string additional_headers [, string additional_parameters]])">Send an email message</phpsyntax>
-<phpsyntax function="abs" usage="int abs(int number)">Return the absolute value of the number</phpsyntax>
-<phpsyntax function="acos" usage="float acos(float number)">Return the arc cosine of the number in radians</phpsyntax>
-<phpsyntax function="acosh" usage="float acosh(float number)">Returns the inverse hyperbolic cosine of the number, i.e. the value whose hyperbolic cosine is number</phpsyntax>
-<phpsyntax function="asin" usage="float asin(float number)">Returns the arc sine of the number in radians</phpsyntax>
-<phpsyntax function="asinh" usage="float asinh(float number)">Returns the inverse hyperbolic sine of the number, i.e. the value whose hyperbolic sine is number</phpsyntax>
-<phpsyntax function="atan" usage="float atan(float number)">Returns the arc tangent of the number in radians</phpsyntax>
-<phpsyntax function="atanh" usage="float atanh(float number)">Returns the inverse hyperbolic tangent of the number, i.e. the value whose hyperbolic tangent is number</phpsyntax>
-<phpsyntax function="base_convert" usage="string base_convert(string number, int frombase, int tobase)">Converts a number in a string from any base &lt;= 36 to any base &lt;= 36</phpsyntax>
-<phpsyntax function="bindec" usage="int bindec(string binary_number)">Returns the decimal equivalent of the binary number</phpsyntax>
-<phpsyntax function="ceil" usage="float ceil(float number)">Returns the next highest integer value of the number</phpsyntax> 
-<phpsyntax function="cos" usage="float cos(float number)">Returns the cosine of the number in radians</phpsyntax>
-<phpsyntax function="cosh" usage="float cosh(float number)">Returns the hyperbolic cosine of the number, defined as (exp(number)      exp(-number))/2</phpsyntax>
-<phpsyntax function="decbin" usage="string decbin(int decimal_number)">Returns a string containing a binary representation of the number</phpsyntax>
-<phpsyntax function="dechex" usage="string dechex(int decimal_number)">Returns a string containing a hexadecimal representation of the given number</phpsyntax>
-<phpsyntax function="decoct" usage="string decoct(int decimal_number)">Returns a string containing an octal representation of the given number</phpsyntax>
-<phpsyntax function="exp" usage="float exp(float number)">Returns e raised to the power of the number</phpsyntax>
-<phpsyntax function="floor" usage="float floor(float number)">Returns the next lowest integer value from the number</phpsyntax>
-<phpsyntax function="fmod" usage="float fmod(float x, float y)">Returns the remainder of dividing x by y as a float</phpsyntax>
-<phpsyntax function="hexdec" usage="int hexdec(string hexadecimal_number)">Returns the decimal equivalent of the hexadecimal number</phpsyntax>
-<phpsyntax function="hypot" usage="float hypot(float num1, float num2)">Returns sqrt(num1*num1      num2*num2)</phpsyntax>
-<phpsyntax function="is_finite" usage="bool is_finite(float val)">Returns whether argument is finite</phpsyntax>
-<phpsyntax function="is_infinite" usage="bool is_infinite(float val)">Returns whether argument is infinite</phpsyntax>
-<phpsyntax function="is_nan" usage="bool is_nan(float val)">Returns whether argument is not a number</phpsyntax>
-<phpsyntax function="log" usage="float log(float number, [float base])">Returns the natural logarithm of the number, or the base log if base is specified</phpsyntax>
-<phpsyntax function="number_format" usage="string number_format(float number [, int num_decimal_places [, string dec_seperator, string thousands_seperator]])">Formats a number with grouped thousands</phpsyntax>
-<phpsyntax function="octdec" usage="int octdec(string octal_number)">Returns the decimal equivalent of an octal string</phpsyntax>
-<phpsyntax function="pi" usage="float pi(void)">Returns an approximation of pi</phpsyntax>
-<phpsyntax function="pow" usage="number pow(number base, number exponent)">Returns base raised to the power of exponent. Returns integer result when possible</phpsyntax>
-<phpsyntax function="round" usage="float round(float number [, int precision])">Returns the number rounded to specified precision</phpsyntax>
-<phpsyntax function="sin" usage="float sin(float number)">Returns the sine of the number in radians</phpsyntax>
-<phpsyntax function="sinh" usage="float sinh(float number)">Returns the hyperbolic sine of the number, defined as (exp(number) - exp(-number))/2</phpsyntax>
-<phpsyntax function="sqrt" usage="float sqrt(float number)">Returns the square root of the number</phpsyntax>
-<phpsyntax function="tan" usage="float tan(float number)">Returns the tangent of the number in radians</phpsyntax>
-<phpsyntax function="tanh" usage="float tanh(float number)">Returns the hyperbolic tangent of the number, defined as sinh(number)/cosh(number)</phpsyntax>
-<phpsyntax function="metaphone" usage="string metaphone(string text, int phones)">Break english phrases down into their phonemes</phpsyntax>
-<phpsyntax function="getrusage" usage="array getrusage([int who])">Returns an array of usage statistics</phpsyntax>
-<phpsyntax function="gettimeofday" usage="array gettimeofday(void)">Returns the current time as array</phpsyntax>
-<phpsyntax function="microtime" usage="mixed microtime([bool get_as_float])">Returns either a string or a float containing the current time in seconds and microseconds</phpsyntax>
-<phpsyntax function="pack" usage="string pack(string format, mixed arg1 [, mixed arg2 [, mixed ...]])">Takes one or more arguments and packs them into a binary string according to the format argument</phpsyntax>
-<phpsyntax function="unpack" usage="array unpack(string format, string input)">Unpack binary string into named array elements according to format argument</phpsyntax>
-<phpsyntax function="getlastmod" usage="int getlastmod(void)">Get time of last page modification</phpsyntax>
-<phpsyntax function="getmygid" usage="int getmygid(void)">Get PHP script owner's GID</phpsyntax>
-<phpsyntax function="getmyinode" usage="int getmyinode(void)">Get the inode of the current script being parsed</phpsyntax>
-<phpsyntax function="getmypid" usage="int getmypid(void)">Get current process ID</phpsyntax>
-<phpsyntax function="getmyuid" usage="int getmyuid(void)">Get PHP script owner's UID</phpsyntax>
-<phpsyntax function="proc_close" usage="int proc_close(resource process)">close a process opened by proc_open</phpsyntax>
-<phpsyntax function="proc_get_status" usage="array proc_get_status(resource process)">get information about a process opened by proc_open</phpsyntax>
-<phpsyntax function="proc_open" usage="resource proc_open(string command, array descriptorspec, array &amp;pipes [, string cwd [, array env [, array other_options]]])">Run a process with more control over it's file descriptors</phpsyntax>
-<phpsyntax function="proc_terminate" usage="int proc_terminate(resource process [, long signal])">kill a process opened by proc_open</phpsyntax>
-<phpsyntax function="quoted_printable_decode" usage="string quoted_printable_decode(string str)">Convert a quoted-printable string to an 8 bit string</phpsyntax>
-<phpsyntax function="getrandmax" usage="int getrandmax(void)">Returns the maximum value a random number can have</phpsyntax>
-<phpsyntax function="mt_getrandmax" usage="int mt_getrandmax(void)">Returns the maximum value a random number from Mersenne Twister can have</phpsyntax>
-<phpsyntax function="mt_rand" usage="int mt_rand([int min, int max])">Returns a random number from Mersenne Twister</phpsyntax>
-<phpsyntax function="mt_srand" usage="void mt_srand([int seed])">Seeds Mersenne Twister random number generator</phpsyntax>
-<phpsyntax function="rand" usage="int rand([int min, int max])">Returns a random number</phpsyntax>
-<phpsyntax function="srand" usage="void srand([int seed])">Seeds random number generator</phpsyntax>
-<phpsyntax function="ereg" usage="int ereg(string pattern, string string [, array registers])">Regular expression match</phpsyntax>
-<phpsyntax function="ereg_replace" usage="string ereg_replace(string pattern, string replacement, string string)">Replace regular expression</phpsyntax>
-<phpsyntax function="eregi" usage="int eregi(string pattern, string string [, array registers])">Case-insensitive regular expression match</phpsyntax>
-<phpsyntax function="eregi_replace" usage="string eregi_replace(string pattern, string replacement, string string)">Case insensitive replace regular expression</phpsyntax>
-<phpsyntax function="split" usage="array split(string pattern, string string [, int limit])">Split string into array by regular expression</phpsyntax>
-<phpsyntax function="spliti" usage="array spliti(string pattern, string string [, int limit])">Split string into array by regular expression case-insensitive</phpsyntax>
-<phpsyntax function="sql_regcase" usage="string sql_regcase(string string)">Make regular expression for case insensitive match</phpsyntax>
-<phpsyntax function="soundex" usage="string soundex(string str)">Calculate the soundex key of a string</phpsyntax>
-<phpsyntax function="set_socket_blocking" usage="bool set_socket_blocking(resource socket, int mode)">Set blocking/non-blocking mode on a socket</phpsyntax>
-<phpsyntax function="stream_context_create" usage="resource stream_context_create([array options])">Create a file context and optionally set parameters</phpsyntax>
-<phpsyntax function="stream_context_get_options" usage="array stream_context_get_options(resource context|resource stream)">Retrieve options for a stream/wrapper/context</phpsyntax>
-<phpsyntax function="stream_context_set_option" usage="bool stream_context_set_option(resource context|resource stream, string wrappername, string optionname, mixed value)">Set an option for a wrapper</phpsyntax>
-<phpsyntax function="stream_context_set_params" usage="bool stream_context_set_params(resource context|resource stream, array options)">Set parameters for a file context</phpsyntax>
-<phpsyntax function="stream_copy_to_stream" usage="long stream_copy_to_stream(resource source, resource dest [, long maxlen ])">Reads up to maxlen bytes from source stream and writes them to dest stream.</phpsyntax>
-<phpsyntax function="stream_filter_append" usage="bool stream_filter_append(resource stream, string filtername[, int read_write[, string filterparams]])">Append a filter to a stream</phpsyntax>
-<phpsyntax function="stream_filter_prepend" usage="bool stream_filter_prepend(resource stream, string filtername[, int read_write[, string filterparams]])">Prepend a filter to a stream</phpsyntax>
-<phpsyntax function="stream_get_contents" usage="long stream_get_contents(resource source [, long maxlen ])">Reads all remaining bytes (or up to maxlen bytes) from a stream and returns them as a string.</phpsyntax>
-<phpsyntax function="stream_get_line" usage="string stream_get_line(resource stream, int maxlen, string ending)">Read up to maxlen bytes from a stream or until the ending string is found</phpsyntax>
-<phpsyntax function="stream_get_meta_data" usage="resource stream_get_meta_data(resource fp)">Retrieves header/meta data from streams/file pointers</phpsyntax>
-<phpsyntax function="stream_get_transports" usage="array stream_get_transports()">Retrieves list of registered socket transports</phpsyntax>
-<phpsyntax function="stream_get_wrappers" usage="array stream_get_wrappers()">Retrieves list of registered stream wrappers</phpsyntax>
-<phpsyntax function="stream_select" usage="int stream_select(array &amp;read_streams, array &amp;write_streams, array &amp;except_streams, int tv_sec[, int tv_usec])">Runs the select() system call on the sets of streams with a timeout specified by tv_sec and tv_usec</phpsyntax>
-<phpsyntax function="stream_set_blocking" usage="bool stream_set_blocking(resource socket, int mode)">Set blocking/non-blocking mode on a socket or stream</phpsyntax>
-<phpsyntax function="stream_set_timeout" usage="bool stream_set_timeout(resource stream, int seconds, int microseconds)">Set timeout on stream read to seconds      microseonds</phpsyntax>
-<phpsyntax function="stream_set_write_buffer" usage="int stream_set_write_buffer(resource fp, int buffer)">Set file write buffer</phpsyntax>
-<phpsyntax function="stream_socket_accept" usage="resource stream_socket_accept(resource serverstream, [ double timeout, string &amp;peername ])">Accept a client connection from a server socket</phpsyntax>
-<phpsyntax function="stream_socket_client" usage="resource stream_socket_client(string remoteaddress [, long &amp;errcode, string &amp;errstring, double timeout, long flags, resource context])">Open a client connection to a remote address</phpsyntax>
-<phpsyntax function="stream_socket_get_name" usage="string stream_socket_get_name(resource stream, bool want_peer)">Returns either the locally bound or remote name for a socket stream</phpsyntax>
-<phpsyntax function="stream_socket_recvfrom" usage="string stream_socket_recvfrom(resource stream, long amount [, long flags [, string &amp;remote_addr]])">Receives data from a socket stream</phpsyntax>
-<phpsyntax function="stream_socket_sendto" usage="long stream_socket_sendto(resouce stream, string data [, long flags [, string target_addr]])">Send data to a socket stream.  If target_addr is specified it must be in dotted quad (or [ipv6]) format</phpsyntax>
-<phpsyntax function="stream_socket_server" usage="resource stream_socket_server(string localaddress [, long &amp;errcode, string &amp;errstring, long flags, resource context])">Create a server socket bound to localaddress</phpsyntax>
-<phpsyntax function="addcslashes" usage="string addcslashes(string str, string charlist)">Escapes all chars mentioned in charlist with backslash. It creates octal representations if asked to backslash characters with 8th bit set or with ASCII&lt;32 (except '\n', '\r', '\t' etc...)</phpsyntax>
-<phpsyntax function="addslashes" usage="string addslashes(string str)">Escapes single quote, double quotes and backslash characters in a string with backslashes</phpsyntax>
-<phpsyntax function="basename" usage="string basename(string path [, string suffix])">Returns the filename component of the path</phpsyntax>
-<phpsyntax function="chr" usage="string chr(int ascii)">Converts ASCII code to a character</phpsyntax>
-<phpsyntax function="chunk_split" usage="string chunk_split(string str [, int chunklen [, string ending]])">Returns split line</phpsyntax>
-<phpsyntax function="count_chars" usage="mixed count_chars(string input [, int mode])">Returns info about what characters are used in input</phpsyntax>
-<phpsyntax function="dirname" usage="string dirname(string path)">Returns the directory name component of the path</phpsyntax>
-<phpsyntax function="explode" usage="array explode(string separator, string str [, int limit])">Splits a string on string separator and return array of components</phpsyntax>
-<phpsyntax function="hebrev" usage="string hebrev(string str [, int max_chars_per_line])">Converts logical Hebrew text to visual text</phpsyntax>
-<phpsyntax function="hebrevc" usage="string hebrevc(string str [, int max_chars_per_line])">Converts logical Hebrew text to visual text with newline conversion</phpsyntax>
-<phpsyntax function="implode" usage="string implode([string glue,] array pieces)">Joins array elements placing glue string between items and return one string</phpsyntax>
-<phpsyntax function="join" usage="string join(array src, string glue)">An alias for implode</phpsyntax>
-<phpsyntax function="localeconv" usage="array localeconv(void)">Returns numeric formatting information based on the current locale</phpsyntax>
-<phpsyntax function="ltrim" usage="string ltrim(string str [, string character_mask])">Strips whitespace from the beginning of a string</phpsyntax>
-<phpsyntax function="money_format" usage="string money_format(string format , float value)">Convert monetary value(s) to string</phpsyntax>
-<phpsyntax function="nl_langinfo" usage="string nl_langinfo(int item)">Query language and locale information</phpsyntax>
-<phpsyntax function="ord" usage="int ord(string character)">Returns ASCII value of character</phpsyntax>
-<phpsyntax function="parse_str" usage="void parse_str(string encoded_string [, array result])">Parses GET/POST/COOKIE data and sets global variables</phpsyntax>
-<phpsyntax function="pathinfo" usage="array pathinfo(string path)">Returns information about a certain string</phpsyntax>
-<phpsyntax function="quotemeta" usage="string quotemeta(string str)">Quotes meta characters</phpsyntax>
-<phpsyntax function="rtrim" usage="string rtrim(string str [, string character_mask])">Removes trailing whitespace</phpsyntax>
-<phpsyntax function="setlocale" usage="string setlocale(mixed category, string locale [, string ...])">Set locale information</phpsyntax>
-<phpsyntax function="similar_text" usage="int similar_text(string str1, string str2 [, float percent])">Calculates the similarity between two strings</phpsyntax>
-<phpsyntax function="sscanf" usage="mixed sscanf(string str, string format [, string ...])">Implements an ANSI C compatible sscanf</phpsyntax>
-<phpsyntax function="str_ireplace" usage="mixed str_ireplace(mixed search, mixed replace, mixed subject [, int &amp;replace_count])">Replaces all occurrences of search in haystack with replace / case-insensitive</phpsyntax>
-<phpsyntax function="str_pad" usage="string str_pad(string input, int pad_length [, string pad_string [, int pad_type]])">Returns input string padded on the left or right to specified length with pad_string</phpsyntax>
-<phpsyntax function="str_repeat" usage="string str_repeat(string input, int mult)">Returns the input string repeat mult times</phpsyntax>
-<phpsyntax function="str_replace" usage="mixed str_replace(mixed search, mixed replace, mixed subject [, int &amp;replace_count])">Replaces all occurrences of search in haystack with replace</phpsyntax>
-<phpsyntax function="str_shuffle" usage="void str_shuffle(string str)">Shuffles string. One permutation of all possible is created</phpsyntax>
-<phpsyntax function="str_split" usage="array str_split(string str [, int split_length])">Convert a string to an array. If split_length is specified, break the string down into chunks each split_length characters long.</phpsyntax>
-<phpsyntax function="str_word_count" usage="mixed str_word_count(string str, [int format])">Counts the number of words inside a string. If format of 1 is specified,           then the function will return an array containing all the words         found inside the string. If format of 2 is specified, then the function         will return an associated array where the position of the word is the key       and the word itself is the value.               For the purpose of this function, 'word' is defined as a locale dependent       string containing alphabetic characters, which also may contain, but not start          with "'" and "-" characters.</phpsyntax>
-<phpsyntax function="strchr" usage="string strchr(string haystack, string needle)">An alias for strstr</phpsyntax>
-<phpsyntax function="strcoll" usage="int strcoll(string str1, string str2)">Compares two strings using the current locale</phpsyntax>
-<phpsyntax function="strcspn" usage="int strcspn(string str, string mask [, start [, len]])">Finds length of initial segment consisting entirely of characters not found in mask. If start or/and length is provide works like strcspn(substr($s,$start,$len),$bad_chars)</phpsyntax>
-<phpsyntax function="strip_tags" usage="string strip_tags(string str [, string allowable_tags])">Strips HTML and PHP tags from a string</phpsyntax>
-<phpsyntax function="stripcslashes" usage="string stripcslashes(string str)">Strips backslashes from a string. Uses C-style conventions</phpsyntax>
-<phpsyntax function="stripos" usage="int stripos(string haystack, string needle [, int offset])">Finds position of first occurrence of a string within another, case insensitive</phpsyntax>
-<phpsyntax function="stripslashes" usage="string stripslashes(string str)">Strips backslashes from a string</phpsyntax>
-<phpsyntax function="stristr" usage="string stristr(string haystack, string needle)">Finds first occurrence of a string within another, case insensitive</phpsyntax>
-<phpsyntax function="strnatcasecmp" usage="int strnatcasecmp(string s1, string s2)">Returns the result of case-insensitive string comparison using 'natural' algorithm</phpsyntax>
-<phpsyntax function="strnatcmp" usage="int strnatcmp(string s1, string s2)">Returns the result of string comparison using 'natural' algorithm</phpsyntax>
-<phpsyntax function="strpbrk" usage="array strpbrk(string haystack, string char_list)">Search a string for any of a set of characters</phpsyntax>
-<phpsyntax function="strpos" usage="int strpos(string haystack, string needle [, int offset])">Finds position of first occurrence of a string within another</phpsyntax>
-<phpsyntax function="strrchr" usage="string strrchr(string haystack, string needle)">Finds the last occurrence of a character in a string within another</phpsyntax>
-<phpsyntax function="strrev" usage="string strrev(string str)">Reverse a string</phpsyntax>
-<phpsyntax function="strripos" usage="int strripos(string haystack, string needle [, int offset])">Finds position of last occurrence of a string within another string</phpsyntax>
-<phpsyntax function="strrpos" usage="int strrpos(string haystack, string needle [, int offset])">Finds position of last occurrence of a string within another string</phpsyntax>
-<phpsyntax function="strspn" usage="int strspn(string str, string mask [, start [, len]])">Finds length of initial segment consisting entirely of characters found in mask. If start or/and length is provided works like strspn(substr($s,$start,$len),$good_chars)</phpsyntax>
-<phpsyntax function="strstr" usage="string strstr(string haystack, string needle)">Finds first occurrence of a string within another</phpsyntax>
-<phpsyntax function="strtok" usage="string strtok([string str,] string token)">Tokenize a string</phpsyntax>
-<phpsyntax function="strtolower" usage="string strtolower(string str)">Makes a string lowercase</phpsyntax>
-<phpsyntax function="strtoupper" usage="string strtoupper(string str)">Makes a string uppercase</phpsyntax>
-<phpsyntax function="strtr" usage="string strtr(string str, string from, string to)">Translates characters in str using given translation tables</phpsyntax>
-<phpsyntax function="substr" usage="string substr(string str, int start [, int length])">Returns part of a string</phpsyntax>
-<phpsyntax function="substr_compare" usage="int substr_compare(string main_str, string str, int offset [, int length [, bool case_sensitivity]])">Binary safe optionally case insensitive comparison of 2 strings from an offset, up to length characters</phpsyntax>
-<phpsyntax function="substr_count" usage="int substr_count(string haystack, string needle)">Returns the number of times a substring occurs in the string</phpsyntax>
-<phpsyntax function="substr_replace" usage="mixed substr_replace(mixed str, mixed repl, mixed start [, mixed length])">Replaces part of a string with another string</phpsyntax>
-<phpsyntax function="trim" usage="string trim(string str [, string character_mask])">Strips whitespace from the beginning and end of a string</phpsyntax>
-<phpsyntax function="ucfirst" usage="string ucfirst(string str)">Makes a string's first character uppercase</phpsyntax>
-<phpsyntax function="ucwords" usage="string ucwords(string str)">Uppercase the first character of every word in a string</phpsyntax>
-<phpsyntax function="wordwrap" usage="string wordwrap(string str [, int width [, string break [, boolean cut]]])">Wraps buffer to selected number of characters using string break char</phpsyntax>
-<phpsyntax function="date_sunrise" usage="mixed date_sunrise(mixed time [, int format [, float latitude [, float longitude [, float zenith [, float gmt_offset]]]]])">Returns time of sunrise for a given day &amp; location</phpsyntax>
-<phpsyntax function="date_sunset" usage="mixed date_sunset(mixed time [, int format [, float latitude [, float longitude [, float zenith [, float gmt_offset]]]]])">Returns time of sunset for a given day &amp; location</phpsyntax>
-<phpsyntax function="closelog" usage="bool closelog(void)">Close connection to system logger</phpsyntax>
-<phpsyntax function="define_syslog_variables" usage="void define_syslog_variables(void)">Initializes all syslog-related variables</phpsyntax>
-<phpsyntax function="openlog" usage="bool openlog(string ident, int option, int facility)">Open connection to system logger</phpsyntax>
-<phpsyntax function="syslog" usage="bool syslog(int priority, string message)">Generate a system log message</phpsyntax>
-<phpsyntax function="floatval" usage="float floatval(mixed var)">Get the float value of a variable</phpsyntax> 
-<phpsyntax function="gettype" usage="string gettype(mixed var)">Returns the type of the variable</phpsyntax>
-<phpsyntax function="intval" usage="int intval(mixed var [, int base])">Get the integer value of a variable using the optional base for the conversion</phpsyntax>
-<phpsyntax function="is_array" usage="bool is_array(mixed var)">Returns true if variable is an array</phpsyntax>
-<phpsyntax function="is_bool" usage="bool is_bool(mixed var)">Returns true if variable is a boolean</phpsyntax>
-<phpsyntax function="is_callable" usage="bool is_callable(mixed var [, bool syntax_only [, string callable_name]])">Returns true if var is callable.</phpsyntax>
-<phpsyntax function="is_float" usage="bool is_float(mixed var)">Returns true if variable is float point</phpsyntax>
-<phpsyntax function="is_long" usage="bool is_long(mixed var)">Returns true if variable is a long (integer)</phpsyntax>
-<phpsyntax function="is_null" usage="bool is_null(mixed var)">Returns true if variable is null</phpsyntax>
-<phpsyntax function="is_numeric" usage="bool is_numeric(mixed value)">Returns true if value is a number or a numeric string</phpsyntax>
-<phpsyntax function="is_object" usage="bool is_object(mixed var)">Returns true if variable is an object</phpsyntax>
-<phpsyntax function="is_resource" usage="bool is_resource(mixed var)">Returns true if variable is a resource</phpsyntax>
-<phpsyntax function="is_scalar" usage="bool is_scalar(mixed value)">Returns true if value is a scalar</phpsyntax>
-<phpsyntax function="is_string" usage="bool is_string(mixed var)">Returns true if variable is a string</phpsyntax>
-<phpsyntax function="settype" usage="bool settype(mixed var, string type)">Set the type of the variable</phpsyntax>
-<phpsyntax function="strval" usage="string strval(mixed var)">Get the string value of a variable</phpsyntax>
-<phpsyntax function="uniqid" usage="string uniqid([string prefix , bool more_entropy])">Generates a unique ID</phpsyntax>
-<phpsyntax function="get_headers" usage="array get_headers(string url)">fetches all the headers sent by the server in response to a HTTP request</phpsyntax>
-<phpsyntax function="parse_url" usage="array parse_url(string url)">Parse a URL and return its components</phpsyntax>
-<phpsyntax function="rawurldecode" usage="string rawurldecode(string str)">Decodes URL-encodes string</phpsyntax>
-<phpsyntax function="rawurlencode" usage="string rawurlencode(string str)">URL-encodes string</phpsyntax>
-<phpsyntax function="urldecode" usage="string urldecode(string str)">Decodes URL-encoded string</phpsyntax>
-<phpsyntax function="urlencode" usage="string urlencode(string str)">URL-encodes string</phpsyntax>
-<phpsyntax function="stream_bucket_append" usage="void stream_bucket_append(resource brigade, resource bucket)">Append bucket to brigade</phpsyntax>
-<phpsyntax function="stream_bucket_make_writeable" usage="object stream_bucket_make_writeable(resource brigade)">Return a bucket object from the brigade for operating on</phpsyntax>
-<phpsyntax function="stream_bucket_new" usage="resource stream_bucket_new(resource stream, string buffer)">Create a new bucket for use on the current stream</phpsyntax>
-<phpsyntax function="stream_bucket_prepend" usage="void stream_bucket_prepend(resource brigade, resource bucket)">Prepend bucket to brigade</phpsyntax>
-<phpsyntax function="stream_filter_register" usage="bool stream_filter_register(string filtername, string classname)">Registers a custom filter handler class</phpsyntax>
-<phpsyntax function="stream_get_filters" usage="array stream_get_filters(void)">Returns a list of registered filters</phpsyntax>
-<phpsyntax function="uudecode" usage="string uudecode(string data)">decode a uuencoded string</phpsyntax>
-<phpsyntax function="uuencode" usage="string uuencode(string data)">uuencode a string</phpsyntax>
-<phpsyntax function="debug_zval_dump" usage="void debug_zval_dump(mixed var)">Dumps a string representation of an internal zend value to output.</phpsyntax>
-<phpsyntax function="memory_get_usage" usage="int memory_get_usage()">Returns the allocated by PHP memory</phpsyntax>
-<phpsyntax function="serialize" usage="string serialize(mixed variable)">Returns a string representation of variable (which can later be unserialized)</phpsyntax>
-<phpsyntax function="unserialize" usage="mixed unserialize(string variable_representation)">Takes a string representation of variable and recreates it</phpsyntax>
-<phpsyntax function="var_dump" usage="void var_dump(mixed var)">Dumps a string representation of variable to output</phpsyntax>
-<phpsyntax function="var_export" usage="mixed var_export(mixed var [, bool return])">Outputs or returns a string representation of a variable</phpsyntax>
-<phpsyntax function="version_compare" usage="int version_compare(string ver1, string ver2 [, string oper])">Compares two "PHP-standardized" version number strings</phpsyntax>
-<phpsyntax function="sybase_affected_rows" usage="int sybase_affected_rows([int link_id])">Get number of affected rows in last query</phpsyntax>
-<phpsyntax function="sybase_close" usage="bool sybase_close([int link_id])">Close Sybase connection</phpsyntax>
-<phpsyntax function="sybase_connect" usage="int sybase_connect([string host [, string user [, string password [, string charset [, string appname]]]]])">Open Sybase server connection</phpsyntax>
-<phpsyntax function="sybase_data_seek" usage="bool sybase_data_seek(int result, int offset)">Move internal row pointer</phpsyntax>
-<phpsyntax function="sybase_fetch_array" usage="array sybase_fetch_array(int result)">Fetch row as array</phpsyntax>
-<phpsyntax function="sybase_fetch_field" usage="object sybase_fetch_field(int result [, int offset])">Get field information</phpsyntax>
-<phpsyntax function="sybase_fetch_object" usage="object sybase_fetch_object(int result)">Fetch row as object</phpsyntax>
-<phpsyntax function="sybase_fetch_row" usage="array sybase_fetch_row(int result)">Get row as enumerated array</phpsyntax>
-<phpsyntax function="sybase_field_seek" usage="bool sybase_field_seek(int result, int offset)">Set field offset</phpsyntax>
-<phpsyntax function="sybase_free_result" usage="bool sybase_free_result(int result)">Free result memory</phpsyntax>
-<phpsyntax function="sybase_get_last_message" usage="string sybase_get_last_message(void)">Returns the last message from server (over min_message_severity)</phpsyntax>
-<phpsyntax function="sybase_min_error_severity" usage="void sybase_min_error_severity(int severity)">Sets the minimum error severity</phpsyntax>
-<phpsyntax function="sybase_min_message_severity" usage="void sybase_min_message_severity(int severity)">Sets the minimum message severity</phpsyntax>
-<phpsyntax function="sybase_num_fields" usage="int sybase_num_fields(int result)">Get number of fields in result</phpsyntax>
-<phpsyntax function="sybase_num_rows" usage="int sybase_num_rows(int result)">Get number of rows in result</phpsyntax>
-<phpsyntax function="sybase_pconnect" usage="int sybase_pconnect([string host [, string user [, string password [, string charset [, string appname]]]]])">Open persistent Sybase connection</phpsyntax>
-<phpsyntax function="sybase_query" usage="int sybase_query(string query [, int link_id])">Send Sybase query</phpsyntax>
-<phpsyntax function="sybase_result" usage="string sybase_result(int result, int row, mixed field)">Get result data</phpsyntax>
-<phpsyntax function="sybase_select_db" usage="bool sybase_select_db(string database [, int link_id])">Select Sybase database</phpsyntax>
-<phpsyntax function="sybase_affected_rows" usage="int sybase_affected_rows([int link_id])">Get number of affected rows in last query</phpsyntax>
-<phpsyntax function="sybase_close" usage="bool sybase_close([int link_id])">Close Sybase connection</phpsyntax>
-<phpsyntax function="sybase_connect" usage="int sybase_connect([string host [, string user [, string password [, string charset [, string appname]]]]])">Open Sybase server connection</phpsyntax>
-<phpsyntax function="sybase_data_seek" usage="bool sybase_data_seek(int result, int offset)">Move internal row pointer</phpsyntax>
-<phpsyntax function="sybase_deadlock_retry_count" usage="void sybase_deadlock_retry_count(int retry_count)">Sets deadlock retry count</phpsyntax>
-<phpsyntax function="sybase_fetch_array" usage="array sybase_fetch_array(int result)">Fetch row as array</phpsyntax>
-<phpsyntax function="sybase_fetch_assoc" usage="array sybase_fetch_assoc(int result)">Fetch row as array without numberic indices</phpsyntax>
-<phpsyntax function="sybase_fetch_field" usage="object sybase_fetch_field(int result [, int offset])">Get field information</phpsyntax>
-<phpsyntax function="sybase_fetch_object" usage="object sybase_fetch_object(int result [, mixed object])">Fetch row as object</phpsyntax>
-<phpsyntax function="sybase_fetch_row" usage="array sybase_fetch_row(int result)">Get row as enumerated array</phpsyntax>
-<phpsyntax function="sybase_field_seek" usage="bool sybase_field_seek(int result, int offset)">Set field offset</phpsyntax>
-<phpsyntax function="sybase_free_result" usage="bool sybase_free_result(int result)">Free result memory</phpsyntax>
-<phpsyntax function="sybase_get_last_message" usage="string sybase_get_last_message(void)">Returns the last message from server (over min_message_severity)</phpsyntax>
-<phpsyntax function="sybase_min_client_severity" usage="void sybase_min_client_severity(int severity)">Sets minimum client severity</phpsyntax>
-<phpsyntax function="sybase_min_server_severity" usage="void sybase_min_server_severity(int severity)">Sets minimum server severity</phpsyntax>
-<phpsyntax function="sybase_num_fields" usage="int sybase_num_fields(int result)">Get number of fields in result</phpsyntax>
-<phpsyntax function="sybase_num_rows" usage="int sybase_num_rows(int result)">Get number of rows in result</phpsyntax>
-<phpsyntax function="sybase_pconnect" usage="int sybase_pconnect([string host [, string user [, string password [, string charset [, string appname]]]]])">Open persistent Sybase connection</phpsyntax>
-<phpsyntax function="sybase_query" usage="int sybase_query(string query [, int link_id])">Send Sybase query</phpsyntax>
-<phpsyntax function="sybase_result" usage="string sybase_result(int result, int row, mixed field)">Get result data</phpsyntax>
-<phpsyntax function="sybase_select_db" usage="bool sybase_select_db(string database [, int link_id])">Select Sybase database</phpsyntax>
-<phpsyntax function="sybase_set_message_handler" usage="bool sybase_set_message_handler(mixed error_func [, resource connection])">Set the error handler, to be called when a server message is raised.      If error_func is NULL the handler will be deleted</phpsyntax>
-<phpsyntax function="sybase_unbuffered_query" usage="int sybase_unbuffered_query(string query [, int link_id])">Send Sybase query</phpsyntax>
-<phpsyntax function="msg_get_queue" usage="resource msg_get_queue(int key [, int perms])">Attach to a message queue</phpsyntax>
-<phpsyntax function="msg_receive" usage="mixed msg_receive(resource queue, int desiredmsgtype, int &amp;msgtype, int maxsize, mixed message [, bool unserialize=true [, int flags=0 [, int errorcode]]])">Send a message of type msgtype (must be &gt; 0) to a message queue</phpsyntax>
-<phpsyntax function="msg_remove_queue" usage="bool msg_remove_queue(resource queue)">Destroy the queue</phpsyntax>
-<phpsyntax function="msg_send" usage="bool msg_send(resource queue, int msgtype, mixed message [, bool serialize=true [, bool blocking=true [, int errorcode]]])">Send a message of type msgtype (must be &gt; 0) to a message queue</phpsyntax>
-<phpsyntax function="msg_set_queue" usage="bool msg_set_queue(resource queue, array data)">Set information for a message queue</phpsyntax>
-<phpsyntax function="msg_stat_queue" usage="array msg_stat_queue(resource queue)">Returns information about a message queue</phpsyntax>
-<phpsyntax function="sem_acquire" usage="bool sem_acquire(resource id)">Acquires the semaphore with the given id, blocking if necessary</phpsyntax>
-<phpsyntax function="sem_get" usage="resource sem_get(int key [, int max_acquire [, int perm [, int auto_release]])">Return an id for the semaphore with the given key, and allow max_acquire (default 1) processes to acquire it simultaneously</phpsyntax>
-<phpsyntax function="sem_release" usage="bool sem_release(resource id)">Releases the semaphore with the given id</phpsyntax>
-<phpsyntax function="sem_remove" usage="bool sem_remove(resource id)">Removes semaphore from Unix systems</phpsyntax>
-<phpsyntax function="shm_attach" usage="int shm_attach(int key [, int memsize [, int perm]])">Creates or open a shared memory segment</phpsyntax>
-<phpsyntax function="shm_detach" usage="bool shm_detach(int shm_identifier)">Disconnects from shared memory segment</phpsyntax>
-<phpsyntax function="shm_get_var" usage="mixed shm_get_var(int id, int variable_key)">Returns a variable from shared memory</phpsyntax>
-<phpsyntax function="shm_put_var" usage="bool shm_put_var(int shm_identifier, int variable_key, mixed variable)">Inserts or updates a variable in shared memory</phpsyntax>
-<phpsyntax function="shm_remove" usage="bool shm_remove(int shm_identifier)">Removes shared memory from Unix systems</phpsyntax>
-<phpsyntax function="shm_remove_var" usage="bool shm_remove_var(int id, int variable_key)">Removes variable from shared memory</phpsyntax>
-<phpsyntax function="tidy_access_count" usage="int tidy_access_count()">Returns the Number of Tidy accessibility warnings encountered for specified document.</phpsyntax>
-<phpsyntax function="tidy_clean_repair" usage="boolean tidy_clean_repair()">Execute configured cleanup and repair operations on parsed markup</phpsyntax>
-<phpsyntax function="tidy_config_count" usage="int tidy_config_count()">Returns the Number of Tidy configuration errors encountered for specified document.</phpsyntax>
-<phpsyntax function="tidy_diagnose" usage="boolean tidy_diagnose()">Run configured diagnostics on parsed and repaired markup.</phpsyntax>
-<phpsyntax function="tidy_error_count" usage="int tidy_error_count()">Returns the Number of Tidy errors encountered for specified document.</phpsyntax>
-<phpsyntax function="tidy_get_body" usage="TidyNode tidy_get_body(resource tidy)">Returns a TidyNode Object starting from the &lt;BODY&gt; tag of the tidy parse tree</phpsyntax>
-<phpsyntax function="tidy_get_config" usage="array tidy_get_config()">Get current Tidy configuarion</phpsyntax>
-<phpsyntax function="tidy_get_error_buffer" usage="string tidy_get_error_buffer([boolean detailed])">Return warnings and errors which occured parsing the specified document</phpsyntax>
-<phpsyntax function="tidy_get_head" usage="TidyNode tidy_get_head()">Returns a TidyNode Object starting from the &lt;HEAD&gt; tag of the tidy parse tree</phpsyntax>
-<phpsyntax function="tidy_get_html" usage="TidyNode tidy_get_html()">Returns a TidyNode Object starting from the &lt;HTML&gt; tag of the tidy parse tree</phpsyntax>
-<phpsyntax function="tidy_get_html_ver" usage="int tidy_get_html_ver()">Get the Detected HTML version for the specified document.</phpsyntax>
-<phpsyntax function="tidy_get_output" usage="string tidy_get_output()">Return a string representing the parsed tidy markup</phpsyntax>
-<phpsyntax function="tidy_get_release" usage="string tidy_get_release()">Get release date (version) for Tidy library</phpsyntax>
-<phpsyntax function="tidy_get_root" usage="TidyNode tidy_get_root()">Returns a TidyNode Object representing the root of the tidy parse tree</phpsyntax>
-<phpsyntax function="tidy_get_status" usage="int tidy_get_status()">Get status of specfied document.</phpsyntax>
-<phpsyntax function="tidy_getopt" usage="mixed tidy_getopt(string option)">Returns the value of the specified configuration option for the tidy document.</phpsyntax>
-<phpsyntax function="tidy_is_xhtml" usage="boolean tidy_is_xhtml()">Indicates if the document is a XHTML document.</phpsyntax>
-<phpsyntax function="tidy_is_xhtml" usage="boolean tidy_is_xhtml()">Indicates if the document is a generic (non HTML/XHTML) XML document.</phpsyntax>
-<phpsyntax function="tidy_parse_file" usage="boolean tidy_parse_file(string file [, mixed config_options [, string encoding [, bool use_include_path]]])">Parse markup in file or URI</phpsyntax>
-<phpsyntax function="tidy_parse_string" usage="bool tidy_parse_string(string input [, mixed config_options [, string encoding]])">Parse a document stored in a string</phpsyntax>
-<phpsyntax function="tidy_repair_file" usage="boolean tidy_repair_file(string filename [, mixed config_file [, string encoding [, bool use_include_path]]])">Repair a file using an optionally provided configuration file</phpsyntax>
-<phpsyntax function="tidy_repair_string" usage="boolean tidy_repair_string(string data [, mixed config_file [, string encoding]])">Repair a string using an optionally provided configuration file</phpsyntax>
-<phpsyntax function="tidy_warning_count" usage="int tidy_warning_count()">Returns the Number of Tidy warnings encountered for specified document.</phpsyntax>
-<phpsyntax function="token_get_all" usage="array token_get_all(string source)"></phpsyntax>
-<phpsyntax function="token_name" usage="string token_name(int type)"></phpsyntax>
-<phpsyntax function="wddx_add_vars" usage="int wddx_add_vars(int packet_id,  mixed var_names [, mixed ...])">Serializes given variables and adds them to packet given by packet_id</phpsyntax>
-<phpsyntax function="wddx_deserialize" usage="mixed wddx_deserialize(mixed packet)">Deserializes given packet and returns a PHP value</phpsyntax>
-<phpsyntax function="wddx_packet_end" usage="string wddx_packet_end(int packet_id)">Ends specified WDDX packet and returns the string containing the packet</phpsyntax>
-<phpsyntax function="wddx_packet_start" usage="int wddx_packet_start([string comment])">Starts a WDDX packet with optional comment and returns the packet id</phpsyntax>
-<phpsyntax function="wddx_serialize_value" usage="string wddx_serialize_value(mixed var [, string comment])">Creates a new packet and serializes the given value</phpsyntax>
-<phpsyntax function="wddx_serialize_vars" usage="string wddx_serialize_vars(mixed var_name [, mixed ...])">Creates a new packet and serializes given variables into a struct</phpsyntax>
-<phpsyntax function="xml_error_string" usage="string xml_error_string(int code)">Get XML parser error string</phpsyntax>
-<phpsyntax function="xml_get_current_byte_index" usage="int xml_get_current_byte_index(resource parser)">Get current byte index for an XML parser</phpsyntax>
-<phpsyntax function="xml_get_current_column_number" usage="int xml_get_current_column_number(resource parser)">Get current column number for an XML parser</phpsyntax>
-<phpsyntax function="xml_get_current_line_number" usage="int xml_get_current_line_number(resource parser)">Get current line number for an XML parser</phpsyntax>
-<phpsyntax function="xml_get_error_code" usage="int xml_get_error_code(resource parser)">Get XML parser error code</phpsyntax>
-<phpsyntax function="xml_parse" usage="int xml_parse(resource parser, string data [, int isFinal])">Start parsing an XML document</phpsyntax>
-<phpsyntax function="xml_parse_into_struct" usage="int xml_parse_into_struct(resource parser, string data, array &amp;struct, array &amp;index)">Parsing a XML document</phpsyntax>
-<phpsyntax function="xml_parser_create" usage="resource xml_parser_create([string encoding])">Create an XML parser</phpsyntax>
-<phpsyntax function="xml_parser_create_ns" usage="resource xml_parser_create_ns([string encoding [, string sep]])">Create an XML parser</phpsyntax>
-<phpsyntax function="xml_parser_free" usage="int xml_parser_free(resource parser)">Free an XML parser</phpsyntax>
-<phpsyntax function="xml_parser_get_option" usage="int xml_parser_get_option(resource parser, int option)">Get options from an XML parser</phpsyntax>
-<phpsyntax function="xml_parser_set_option" usage="int xml_parser_set_option(resource parser, int option, mixed value)">Set options in an XML parser</phpsyntax>
-<phpsyntax function="xml_set_character_data_handler" usage="int xml_set_character_data_handler(resource parser, string hdl)">Set up character data handler</phpsyntax>
-<phpsyntax function="xml_set_default_handler" usage="int xml_set_default_handler(resource parser, string hdl)">Set up default handler</phpsyntax>
-<phpsyntax function="xml_set_element_handler" usage="int xml_set_element_handler(resource parser, string shdl, string ehdl)">Set up start and end element handlers</phpsyntax>
-<phpsyntax function="xml_set_end_namespace_decl_handler" usage="int xml_set_end_namespace_decl_handler(resource parser, string hdl)">Set up character data handler</phpsyntax>
-<phpsyntax function="xml_set_external_entity_ref_handler" usage="int xml_set_external_entity_ref_handler(resource parser, string hdl)">Set up external entity reference handler</phpsyntax>
-<phpsyntax function="xml_set_notation_decl_handler" usage="int xml_set_notation_decl_handler(resource parser, string hdl)">Set up notation declaration handler</phpsyntax>
-<phpsyntax function="xml_set_object" usage="int xml_set_object(resource parser, object &amp;obj)">Set up object which should be used for callbacks</phpsyntax>
-<phpsyntax function="xml_set_processing_instruction_handler" usage="int xml_set_processing_instruction_handler(resource parser, string hdl)">Set up processing instruction (PI) handler</phpsyntax>
-<phpsyntax function="xml_set_start_namespace_decl_handler" usage="int xml_set_start_namespace_decl_handler(resource parser, string hdl)">Set up character data handler</phpsyntax>
-<phpsyntax function="xml_set_unparsed_entity_decl_handler" usage="int xml_set_unparsed_entity_decl_handler(resource parser, string hdl)">Set up unparsed entity declaration handler</phpsyntax>
-<phpsyntax function="xmlrpc_decode" usage="array xmlrpc_decode(string xml [, string encoding])">Decodes XML into native PHP types</phpsyntax>
-<phpsyntax function="xmlrpc_decode_request" usage="array xmlrpc_decode_request(string xml, string&amp; method [, string encoding])">Decodes XML into native PHP types</phpsyntax>
-<phpsyntax function="xmlrpc_encode" usage="string xmlrpc_encode(mixed value)">Generates XML for a PHP value</phpsyntax>
-<phpsyntax function="xmlrpc_encode_request" usage="string xmlrpc_encode_request(string method, mixed params)">Generates XML for a method request</phpsyntax>
-<phpsyntax function="xmlrpc_get_type" usage="string xmlrpc_get_type(mixed value)">Gets xmlrpc type for a PHP value. Especially useful for base64 and datetime strings</phpsyntax>
-<phpsyntax function="xmlrpc_is_fault" usage="bool xmlrpc_is_fault(array)">Determines if an array value represents an XMLRPC fault.</phpsyntax>
-<phpsyntax function="xmlrpc_parse_method_descriptions" usage="array xmlrpc_parse_method_descriptions(string xml)">Decodes XML into a list of method descriptions</phpsyntax>
-<phpsyntax function="xmlrpc_server_add_introspection_data" usage="int xmlrpc_server_add_introspection_data(resource server, array desc)">Adds introspection documentation</phpsyntax>
-<phpsyntax function="xmlrpc_server_call_method" usage="mixed xmlrpc_server_call_method(resource server, string xml, mixed user_data [, array output_options])">Parses XML requests and call methods</phpsyntax>
-<phpsyntax function="xmlrpc_server_create" usage="resource xmlrpc_server_create(void)">Creates an xmlrpc server</phpsyntax>
-<phpsyntax function="xmlrpc_server_destroy" usage="int xmlrpc_server_destroy(resource server)">Destroys server resources</phpsyntax>
-<phpsyntax function="xmlrpc_server_register_introspection_callback" usage="bool xmlrpc_server_register_introspection_callback(resource server, string function)">Register a PHP function to generate documentation</phpsyntax>
-<phpsyntax function="xmlrpc_server_register_method" usage="bool xmlrpc_server_register_method(resource server, string method_name, string function)">Register a PHP function to handle method matching method_name</phpsyntax>
-<phpsyntax function="xmlrpc_set_type" usage="bool xmlrpc_set_type(string value, string type)">Sets xmlrpc type, base64 or datetime, for a PHP string value</phpsyntax>
-<phpsyntax function="yp_all" usage="bool yp_all(string domain, string map, string callback)">Traverse the map and call a function on each entry</phpsyntax>
-<phpsyntax function="yp_cat" usage="array yp_cat(string domain, string map)">Return an array containing the entire map</phpsyntax>
-<phpsyntax function="yp_err_string" usage="string yp_err_string(int errorcode)">Returns the corresponding error string for the given error code</phpsyntax>
-<phpsyntax function="yp_errno" usage="int yp_errno()">Returns the error code from the last call or 0 if no error occured</phpsyntax>
-<phpsyntax function="yp_first" usage="array yp_first(string domain, string map)">Returns the first key as array with $var[$key] and the the line as the value</phpsyntax>
-<phpsyntax function="yp_get_default_domain" usage="string yp_get_default_domain(void)">Returns the domain or false</phpsyntax>
-<phpsyntax function="yp_master" usage="string yp_master(string domain, string map)">Returns the machine name of the master</phpsyntax>
-<phpsyntax function="yp_match" usage="string yp_match(string domain, string map, string key)">Returns the matched line or false</phpsyntax>
-<phpsyntax function="yp_next" usage="array yp_next(string domain, string map, string key)">Returns an array with $var[$key] and the the line as the value</phpsyntax>
-<phpsyntax function="yp_order" usage="int yp_order(string domain, string map)">Returns the order number or false</phpsyntax>
-<phpsyntax function="gzcompress" usage="string gzcompress(string data [, int level])">Gzip-compress a string</phpsyntax>
-<phpsyntax function="gzdeflate" usage="string gzdeflate(string data [, int level])">Gzip-compress a string</phpsyntax>
-<phpsyntax function="gzencode" usage="string gzencode(string data [, int level [, int encoding_mode]])">GZ encode a string</phpsyntax>
-<phpsyntax function="gzfile" usage="array gzfile(string filename [, int use_include_path])">Read und uncompress entire .gz-file into an array</phpsyntax>
-<phpsyntax function="gzinflate" usage="string gzinflate(string data [, int length])">Unzip a gzip-compressed string</phpsyntax>
-<phpsyntax function="gzopen" usage="resource gzopen(string filename, string mode [, int use_include_path])">Open a .gz-file and return a .gz-file pointer</phpsyntax>
-<phpsyntax function="gzuncompress" usage="string gzuncompress(string data [, int length])">Unzip a gzip-compressed string</phpsyntax>
-<phpsyntax function="ob_gzhandler" usage="string ob_gzhandler(string str, int mode)">Encode str based on accept-encoding setting - designed to be called from ob_start()</phpsyntax>
-<phpsyntax function="readgzfile" usage="int readgzfile(string filename [, int use_include_path])">Output a .gz-file</phpsyntax>
-<phpsyntax function="zlib_get_coding_type" usage="string zlib_get_coding_type(void)">Returns the coding type used for output compression</phpsyntax>
-<phpsyntax function="set_time_limit" usage="bool set_time_limit(int seconds)">Sets the maximum time a script can run</phpsyntax>
-<phpsyntax function="ob_clean" usage="bool ob_clean(void)">Clean (delete) the current output buffer</phpsyntax>
-<phpsyntax function="ob_end_clean" usage="bool ob_end_clean(void)">Clean the output buffer, and delete current output buffer</phpsyntax>
-<phpsyntax function="ob_end_flush" usage="bool ob_end_flush(void)">Flush (send) the output buffer, and delete current output buffer</phpsyntax>
-<phpsyntax function="ob_flush" usage="bool ob_flush(void)">Flush (send) contents of the output buffer. The last buffer content is sent to next buffer</phpsyntax>
-<phpsyntax function="ob_get_clean" usage="bool ob_get_clean(void)">Get current buffer contents and delete current output buffer</phpsyntax>
-<phpsyntax function="ob_get_contents" usage="string ob_get_contents(void)">Return the contents of the output buffer</phpsyntax>
-<phpsyntax function="ob_get_flush" usage="bool ob_get_flush(void)">Get current buffer contents, flush (send) the output buffer, and delete current output buffer</phpsyntax>
-<phpsyntax function="ob_get_length" usage="int ob_get_length(void)">Return the length of the output buffer</phpsyntax>
-<phpsyntax function="ob_get_level" usage="int ob_get_level(void)">Return the nesting level of the output buffer</phpsyntax>
-<phpsyntax function="ob_implicit_flush" usage="void ob_implicit_flush([int flag])">Turn implicit flush on/off and is equivalent to calling flush() after every output call</phpsyntax>
-<phpsyntax function="ob_start" usage="bool ob_start([ string|array user_function [, int chunk_size [, bool erase]]])">Turn on Output Buffering (specifying an optional output handler).</phpsyntax>
-<phpsyntax function="output_add_rewrite_var" usage="bool output_add_rewrite_var(string name, string value)">Add URL rewriter values</phpsyntax>
-<phpsyntax function="output_reset_rewrite_vars" usage="bool output_reset_rewrite_vars(void)">Reset(clear) URL rewriter values</phpsyntax>
-<phpsyntax function="stream_wrapper_register" usage="bool stream_wrapper_register(string protocol, string classname)">Registers a custom URL protocol handler class</phpsyntax>
-<phpsyntax function="apache_child_terminate" usage="bool apache_child_terminate(void)">Terminate apache process after this request</phpsyntax>
-<phpsyntax function="apache_get_modules" usage="array apache_get_modules(void)">Get a list of loaded Apache modules</phpsyntax>
-<phpsyntax function="apache_get_version" usage="string apache_get_version(void)">Fetch Apache version</phpsyntax>
-<phpsyntax function="apache_lookup_uri" usage="object apache_lookup_uri(string URI)">Perform a partial request of the given URI to obtain information about it</phpsyntax>
-<phpsyntax function="apache_note" usage="string apache_note(string note_name [, string note_value])">Get and set Apache request notes</phpsyntax>
-<phpsyntax function="apache_request_headers" usage="array apache_request_headers(void)">Fetch all HTTP request headers</phpsyntax>
-<phpsyntax function="apache_response_headers" usage="array apache_response_headers(void)">Fetch all HTTP response headers</phpsyntax>
-<phpsyntax function="apache_setenv" usage="bool apache_setenv(string variable, string value [, bool walk_to_top])">Set an Apache subprocess_env variable</phpsyntax>
-<phpsyntax function="getallheaders" usage="array getallheaders(void)">Alias for apache_request_headers()</phpsyntax>
-<phpsyntax function="virtual" usage="bool virtual(string filename)">Perform an Apache sub-request</phpsyntax>
-<phpsyntax function="apache_get_modules" usage="array apache_get_modules(void)">Get a list of loaded Apache modules</phpsyntax>
-<phpsyntax function="apache_get_version" usage="string apache_get_version(void)">Fetch Apache version</phpsyntax>
-<phpsyntax function="apache_getenv" usage="bool apache_getenv(string variable [, bool walk_to_top])">Get an Apache subprocess_env variable</phpsyntax>
-<phpsyntax function="apache_note" usage="string apache_note(string note_name [, string note_value])">Get and set Apache request notes</phpsyntax>
-<phpsyntax function="apache_response_headers" usage="array apache_response_headers(void)">Fetch all HTTP response headers</phpsyntax>
-<phpsyntax function="apache_setenv" usage="bool apache_setenv(string variable, string value [, bool walk_to_top])">Set an Apache subprocess_env variable</phpsyntax>
-<phpsyntax function="getallheaders" usage="array getallheaders(void)">Fetch all HTTP request headers</phpsyntax>
-<phpsyntax function="virtual" usage="bool virtual(string uri)">Perform an apache sub-request</phpsyntax>
-<phpsyntax function="apache_get_modules" usage="array apache_get_modules(void)">Get a list of loaded Apache modules</phpsyntax>
-<phpsyntax function="apache_get_version" usage="string apache_get_version(void)">Fetch Apache version</phpsyntax>
-<phpsyntax function="apache_getenv" usage="bool apache_getenv(string variable [, bool walk_to_top])">Get an Apache subprocess_env variable</phpsyntax>
-<phpsyntax function="apache_note" usage="string apache_note(string note_name [, string note_value])">Get and set Apache request notes</phpsyntax>
-<phpsyntax function="apache_response_headers" usage="array apache_response_headers(void)">Fetch all HTTP response headers</phpsyntax>
-<phpsyntax function="apache_setenv" usage="bool apache_setenv(string variable, string value [, bool walk_to_top])">Set an Apache subprocess_env variable</phpsyntax>
-<phpsyntax function="getallheaders" usage="array getallheaders(void)">Fetch all HTTP request headers</phpsyntax>
-<phpsyntax function="virtual" usage="bool virtual(string uri)">Perform an apache sub-request</phpsyntax>
-<phpsyntax function="apache_child_terminate" usage="bool apache_child_terminate(void)">Terminate apache process after this request</phpsyntax>
-<phpsyntax function="apache_get_modules" usage="array apache_get_modules(void)">Get a list of loaded Apache modules</phpsyntax>
-<phpsyntax function="apache_get_version" usage="string apache_get_version(void)">Fetch Apache version</phpsyntax>
-<phpsyntax function="apache_lookup_uri" usage="object apache_lookup_uri(string URI)">Perform a partial request of the given URI to obtain information about it</phpsyntax>
-<phpsyntax function="apache_note" usage="string apache_note(string note_name [, string note_value])">Get and set Apache request notes</phpsyntax>
-<phpsyntax function="apache_request_auth_name" usage="string apache_request_auth_name()"></phpsyntax>
-<phpsyntax function="apache_request_auth_type" usage="string apache_request_auth_type()"></phpsyntax>
-<phpsyntax function="apache_request_discard_request_body" usage="long apache_request_discard_request_body()"></phpsyntax>
-<phpsyntax function="apache_request_err_headers_out" usage="array apache_request_err_headers_out([{string name|array list} [, string value [, bool replace = false]]])">* fetch all headers that go out in case of an error or a subrequest</phpsyntax>
-<phpsyntax function="apache_request_headers" usage="array apache_request_headers(void)">Fetch all HTTP request headers</phpsyntax>
-<phpsyntax function="apache_request_headers_in" usage="array apache_request_headers_in()">* fetch all incoming request headers</phpsyntax>
-<phpsyntax function="apache_request_headers_out" usage="array apache_request_headers_out([{string name|array list} [, string value [, bool replace = false]]])">* fetch all outgoing request headers</phpsyntax>
-<phpsyntax function="apache_request_is_initial_req" usage="bool apache_request_is_initial_req()"></phpsyntax>
-<phpsyntax function="apache_request_log_error" usage="boolean apache_request_log_error(string message, [long facility])"></phpsyntax>
-<phpsyntax function="apache_request_meets_conditions" usage="long apache_request_meets_conditions()"></phpsyntax>
-<phpsyntax function="apache_request_remote_host" usage="int apache_request_remote_host([int type])"></phpsyntax>
-<phpsyntax function="apache_request_run" usage="long apache_request_run()">This is a wrapper for ap_sub_run_req and ap_destory_sub_req.  It takes       sub_request, runs it, destroys it, and returns it's status.</phpsyntax>
-<phpsyntax function="apache_request_satisfies" usage="long apache_request_satisfies()"></phpsyntax>
-<phpsyntax function="apache_request_server_port" usage="int apache_request_server_port()"></phpsyntax>
-<phpsyntax function="apache_request_set_etag" usage="void apache_request_set_etag()"></phpsyntax>
-<phpsyntax function="apache_request_set_last_modified" usage="void apache_request_set_last_modified()"></phpsyntax>
-<phpsyntax function="apache_request_some_auth_required" usage="bool apache_request_some_auth_required()"></phpsyntax>
-<phpsyntax function="apache_request_sub_req_lookup_file" usage="object apache_request_sub_req_lookup_file(string file)">Returns sub-request for the specified file.  You would      need to run it yourself with run().</phpsyntax>
-<phpsyntax function="apache_request_sub_req_lookup_uri" usage="object apache_request_sub_req_lookup_uri(string uri)">Returns sub-request for the specified uri.  You would      need to run it yourself with run()</phpsyntax>
-<phpsyntax function="apache_request_sub_req_method_uri" usage="object apache_request_sub_req_method_uri(string method, string uri)">Returns sub-request for the specified file.  You would      need to run it yourself with run().</phpsyntax>
-<phpsyntax function="apache_request_update_mtime" usage="long apache_request_update_mtime([int dependency_mtime])"></phpsyntax>
-<phpsyntax function="apache_response_headers" usage="array apache_response_headers(void)">Fetch all HTTP response headers</phpsyntax>
-<phpsyntax function="apache_setenv" usage="bool apache_setenv(string variable, string value [, bool walk_to_top])">Set an Apache subprocess_env variable</phpsyntax>
-<phpsyntax function="getallheaders" usage="array getallheaders(void)"></phpsyntax>
-<phpsyntax function="virtual" usage="bool virtual(string filename)">Perform an Apache sub-request</phpsyntax>
-<phpsyntax function="smfi_addheader" usage="string smfi_addheader(string headerf, string headerv)">Adds a header to the current message.</phpsyntax>
-<phpsyntax function="smfi_addrcpt" usage="string smfi_addrcpt(string rcpt)">Add a recipient to the message envelope.</phpsyntax>
-<phpsyntax function="smfi_chgheader" usage="string smfi_chgheader(string headerf, string headerv)">Changes a header's value for the current message.</phpsyntax>
-<phpsyntax function="smfi_delrcpt" usage="string smfi_delrcpt(string rcpt)">Removes the named recipient from the current message's envelope.</phpsyntax>
-<phpsyntax function="smfi_getsymval" usage="string smfi_getsymval(string macro)">Returns the value of the given macro or NULL if the macro is not defined.</phpsyntax>
-<phpsyntax function="smfi_replacebody" usage="string smfi_replacebody(string body)">Replaces the body of the current message. If called more than once,     subsequent calls result in data being appended to the new body.</phpsyntax>
-<phpsyntax function="smfi_setflags" usage="string smfi_setflags(long flags)">Sets the flags describing the actions the filter may take.</phpsyntax>
-<phpsyntax function="smfi_setreply" usage="string smfi_setreply(string rcode, string xcode, string message)">Directly set the SMTP error reply code for this connection.     This code will be used on subsequent error replies resulting from actions taken by this filter.</phpsyntax>
-<phpsyntax function="smfi_settimeout" usage="string smfi_settimeout(long timeout)">Sets the number of seconds libmilter will wait for an MTA connection before timing out a socket.</phpsyntax>
-<phpsyntax function="nsapi_request_headers" usage="array nsapi_request_headers(void)">Get all headers from the request</phpsyntax>
-<phpsyntax function="nsapi_response_headers" usage="array nsapi_response_headers(void)">Get all headers from the response</phpsyntax>
-<phpsyntax function="nsapi_virtual" usage="bool nsapi_virtual(string uri)">Perform an NSAPI sub-request</phpsyntax>
-==================================================        
-*Below this are the various PHP-specific keywords *
-==================================================     
-        <phpsyntax keyword="if" tokenval="1001"></phpsyntax>
-        <phpsyntax keyword="elseif" tokenval="1002"></phpsyntax>
-        <phpsyntax keyword="else" tokenval="1003"></phpsyntax>
-        <phpsyntax keyword="endif" tokenval="1004"></phpsyntax>
-        <phpsyntax keyword="for" tokenval="1005"></phpsyntax>
-        <phpsyntax keyword="endfor" tokenval="1005"></phpsyntax>
-        <phpsyntax keyword="while" tokenval="1007"></phpsyntax>
-        <phpsyntax keyword="endwhile" tokenval="1008"></phpsyntax>
-        <phpsyntax keyword="switch" tokenval="1009"></phpsyntax>
-        <phpsyntax keyword="case" tokenval="1010"></phpsyntax>
-        <phpsyntax keyword="endswitch" tokenval="1011"></phpsyntax>
-        <phpsyntax keyword="break" tokenval="1012"></phpsyntax>
-        <phpsyntax keyword="continue" tokenval="1013"></phpsyntax>
-        <phpsyntax keyword="return" tokenval="1014"></phpsyntax>
-       
-        <phpsyntax keyword="include" tokenval="1016"></phpsyntax>
-        <phpsyntax keyword="include_once" tokenval="1017"></phpsyntax>
-        <phpsyntax keyword="require" tokenval="1018"></phpsyntax>
-        <phpsyntax keyword="require_once" tokenval="1019"></phpsyntax>
-        <phpsyntax keyword="function" tokenval="1020"></phpsyntax>
-        <phpsyntax keyword="class" tokenval="1021"></phpsyntax>
-        <phpsyntax keyword="new" tokenval="1022"></phpsyntax>
-        <phpsyntax keyword="do" tokenval="1023"></phpsyntax>
-        <phpsyntax keyword="old_function" tokenval="1024"></phpsyntax>
-        <phpsyntax keyword="default" tokenval="1025"></phpsyntax>
-        <phpsyntax keyword="global" tokenval="1026"></phpsyntax>
-        <phpsyntax keyword="static" tokenval="1027"></phpsyntax>
-        <phpsyntax keyword="foreach" tokenval="1028"></phpsyntax>
-        <phpsyntax keyword="endforeach" tokenval="1029"></phpsyntax>
-        <phpsyntax keyword="extends" tokenval="1030"></phpsyntax>
-        <phpsyntax keyword="empty" tokenval="1031"></phpsyntax>
-        <phpsyntax keyword="array" tokenval="1032"></phpsyntax>
-        <phpsyntax keyword="echo" tokenval="1033"></phpsyntax>
-        <phpsyntax keyword="var" tokenval="1034"></phpsyntax>
-        <phpsyntax keyword="as" tokenval="1035"></phpsyntax> 
-        <phpsyntax keyword="print" tokenval="1036"></phpsyntax> 
-        <phpsyntax keyword="unset" tokenval="1037"></phpsyntax>
-        <phpsyntax keyword="exit" tokenval="1038"></phpsyntax>
-
-        <phpsyntax keyword="and" tokenval="1040"></phpsyntax>
-        <phpsyntax keyword="or" tokenval="1041"></phpsyntax>
-        <phpsyntax keyword="xor" tokenval="1042"></phpsyntax>
-        <phpsyntax keyword="list" tokenval="1043"></phpsyntax> 
-        <phpsyntax keyword="null" tokenval="1044"></phpsyntax>
-        <phpsyntax keyword="false" tokenval="1045"></phpsyntax>
-        <phpsyntax keyword="true" tokenval="1046"></phpsyntax>
-        <phpsyntax keyword="AND" tokenval="1040"></phpsyntax>
-        <phpsyntax keyword="OR" tokenval="1041"></phpsyntax>
-        <phpsyntax keyword="NULL" tokenval="1044"></phpsyntax>
-        <phpsyntax keyword="FALSE" tokenval="1045"></phpsyntax>
-        <phpsyntax keyword="TRUE" tokenval="1046"></phpsyntax>
-        <phpsyntax keyword="abstract" tokenval="1050"></phpsyntax>
-           <phpsyntax keyword="catch" tokenval="1051"></phpsyntax>
-           <phpsyntax keyword="finally" tokenval="1052"></phpsyntax>
-           <phpsyntax keyword="try" tokenval="1053"></phpsyntax>
-           <phpsyntax keyword="private" tokenval="1054"></phpsyntax>
-           <phpsyntax keyword="protected" tokenval="1055"></phpsyntax>
-       <phpsyntax keyword="public" tokenval="1056"></phpsyntax>
-       <phpsyntax keyword="interface" tokenval="1057"></phpsyntax>
-       <phpsyntax keyword="implements" tokenval="1058"></phpsyntax>
-       <phpsyntax keyword="instanceof" tokenval="1059"></phpsyntax>
-       <phpsyntax keyword="super" tokenval="1060"></phpsyntax>
-       <phpsyntax keyword="throw" tokenval="1061"></phpsyntax>
-    <phpsyntax keyword="clone" tokenval="1063"></phpsyntax>
-       <phpsyntax keyword="const" tokenval="1063"></phpsyntax>
-       <phpsyntax keyword="declare" tokenval="1064"></phpsyntax>
-       <phpsyntax keyword="enddeclare" tokenval="1065"></phpsyntax>
-       <phpsyntax keyword="eval" tokenval="1065"></phpsyntax>
-       <phpsyntax keyword="use" tokenval="1066"></phpsyntax>
-       <phpsyntax keyword="isset" tokenval="1066"></phpsyntax>
-       <phpsyntax keyword="final" tokenval="1067"></phpsyntax>
-       <phpsyntax keyword="__FUNCTION__" tokenval="1090"></phpsyntax>
-       <phpsyntax keyword="__CLASS__" tokenval="1091"></phpsyntax>
-       <phpsyntax keyword="__METHOD__" tokenval="1092"></phpsyntax>
-       <phpsyntax keyword="__FILE__" tokenval="1093"></phpsyntax>
-       <phpsyntax keyword="__LINE__" tokenval="1094"></phpsyntax>
-       <phpsyntax keyword="__FUNCTION__" tokenval="1095"></phpsyntax>
-       <phpsyntax keyword="php_user_filter" tokenval="1096"></phpsyntax>
-       <phpsyntax keyword="cfunction" tokenval="1097"></phpsyntax>
-       <phpsyntax keyword="old_function" tokenval="1098"></phpsyntax>
-       <phpsyntax keyword="exception" tokenval="1099"></phpsyntax>
-       <phpsyntax keyword="die" tokenval="1100"></phpsyntax>
-=========================================================        
-*Below this are the various PHP-specific variable types *
-=========================================================
-        <phpsyntax type="string"></phpsyntax>         
-        <phpsyntax type="unset"></phpsyntax> 
-        <phpsyntax type="object"></phpsyntax>         
-        <phpsyntax type="bool"></phpsyntax>         
-        <phpsyntax type="boolean"></phpsyntax>         
-        <phpsyntax type="real"></phpsyntax>         
-        <phpsyntax type="double"></phpsyntax>         
-        <phpsyntax type="float"></phpsyntax>         
-        <phpsyntax type="int"></phpsyntax>         
-        <phpsyntax type="integer"></phpsyntax>        
-===================================================        
-*Below this are the various PHP-specific constants *
-===================================================
-<phpsyntax constant="CASE_LOWER"></phpsyntax>
-<phpsyntax constant="CASE_UPPER"></phpsyntax>
-<phpsyntax constant="SORT_ASC"></phpsyntax>
-<phpsyntax constant="SORT_DESC"></phpsyntax>
-<phpsyntax constant="SORT_REGULAR"></phpsyntax>
-<phpsyntax constant="SORT_NUMERIC"></phpsyntax>
-<phpsyntax constant="SORT_STRING"></phpsyntax>
-<phpsyntax constant="COUNT_NORMAL"></phpsyntax>
-<phpsyntax constant="COUNT_RECURSIVE"></phpsyntax>
-<phpsyntax constant="EXTR_OVERWRITE"></phpsyntax>
-<phpsyntax constant="EXTR_SKIP"></phpsyntax>
-<phpsyntax constant="EXTR_PREFIX_SAME"></phpsyntax>
-<phpsyntax constant="EXTR_PREFIX_ALL"></phpsyntax>
-<phpsyntax constant="EXTR_PREFIX_INVALID"></phpsyntax>
-<phpsyntax constant="EXTR_PREFIX_IF_EXISTS"></phpsyntax>
-<phpsyntax constant="EXTR_IF_EXISTS"></phpsyntax>
-<phpsyntax constant="EXTR_REFS"></phpsyntax>
-<phpsyntax constant="CAL_GREGORIAN"></phpsyntax>
-<phpsyntax constant="CAL_JULIAN"></phpsyntax>
-<phpsyntax constant="CAL_JEWISH"></phpsyntax>
-<phpsyntax constant="CAL_FRENCH"></phpsyntax>
-<phpsyntax constant="CAL_NUM_CALS"></phpsyntax>
-<phpsyntax constant="CAL_DOW_DAYNO"></phpsyntax>
-<phpsyntax constant="CAL_DOW_SHORT"></phpsyntax>
-<phpsyntax constant="CAL_DOW_LONG"></phpsyntax>
-<phpsyntax constant="CAL_MONTH_GREGORIAN_SHORT"></phpsyntax>
-<phpsyntax constant="CAL_MONTH_GREGORIAN_LONG"></phpsyntax>
-<phpsyntax constant="CAL_MONTH_JULIAN_SHORT"></phpsyntax>
-<phpsyntax constant="CAL_MONTH_JULIAN_LONG"></phpsyntax>
-<phpsyntax constant="CAL_MONTH_JEWISH"></phpsyntax>
-<phpsyntax constant="CAL_MONTH_FRENCH"></phpsyntax>
-<phpsyntax constant="CAL_EASTER_DEFAULT"></phpsyntax>
-<phpsyntax constant="CAL_EASTER_ROMAN"></phpsyntax>
-<phpsyntax constant="CAL_EASTER_ALWAYS_GREGORIAN"></phpsyntax>
-<phpsyntax constant="CAL_EASTER_ALWAYS_JULIAN"></phpsyntax>
-<phpsyntax constant="CAL_JEWISH_ADD_ALAFIM_GERESH"></phpsyntax>
-<phpsyntax constant="CAL_JEWISH_ADD_ALAFIM"></phpsyntax>
-<phpsyntax constant="CAL_JEWISH_ADD_GERESHAYIM"></phpsyntax>
-<phpsyntax constant="CLSCTX_INPROC_SERVER"></phpsyntax>
-<phpsyntax constant="CLSCTX_INPROC_HANDLER"></phpsyntax>
-<phpsyntax constant="CLSCTX_LOCAL_SERVER"></phpsyntax>
-<phpsyntax constant="CLSCTX_REMOTE_SERVER"></phpsyntax>
-<phpsyntax constant="CLSCTX_SERVER"></phpsyntax>
-<phpsyntax constant="CLSCTX_ALL"></phpsyntax>
-<phpsyntax constant="VT_NULL"></phpsyntax>
-<phpsyntax constant="VT_EMPTY"></phpsyntax>
-<phpsyntax constant="VT_UI1"></phpsyntax>
-<phpsyntax constant="VT_I2"></phpsyntax>
-<phpsyntax constant="VT_I4"></phpsyntax>
-<phpsyntax constant="VT_R4"></phpsyntax>
-<phpsyntax constant="VT_R8"></phpsyntax>
-<phpsyntax constant="VT_BOOL"></phpsyntax>
-<phpsyntax constant="VT_ERROR"></phpsyntax>
-<phpsyntax constant="VT_CY"></phpsyntax>
-<phpsyntax constant="VT_DATE"></phpsyntax>
-<phpsyntax constant="VT_BSTR"></phpsyntax>
-<phpsyntax constant="VT_DECIMAL"></phpsyntax>
-<phpsyntax constant="VT_UNKNOWN"></phpsyntax>
-<phpsyntax constant="VT_DISPATCH"></phpsyntax>
-<phpsyntax constant="VT_VARIANT"></phpsyntax>
-<phpsyntax constant="VT_I1"></phpsyntax>
-<phpsyntax constant="VT_UI2"></phpsyntax>
-<phpsyntax constant="VT_UI4"></phpsyntax>
-<phpsyntax constant="VT_INT"></phpsyntax>
-<phpsyntax constant="VT_UINT"></phpsyntax>
-<phpsyntax constant="VT_ARRAY"></phpsyntax>
-<phpsyntax constant="VT_BYREF"></phpsyntax>
-<phpsyntax constant="CP_ACP"></phpsyntax>
-<phpsyntax constant="CP_MACCP"></phpsyntax>
-<phpsyntax constant="CP_OEMCP"></phpsyntax>
-<phpsyntax constant="CP_UTF7"></phpsyntax>
-<phpsyntax constant="CP_UTF8"></phpsyntax>
-<phpsyntax constant="CP_SYMBOL"></phpsyntax>
-<phpsyntax constant="CP_THREAD_ACP"></phpsyntax>
-<phpsyntax constant="VARCMP_LT"></phpsyntax>
-<phpsyntax constant="VARCMP_EQ"></phpsyntax>
-<phpsyntax constant="VARCMP_GT"></phpsyntax>
-<phpsyntax constant="VARCMP_NULL"></phpsyntax>
-<phpsyntax constant="NORM_IGNORECASE"></phpsyntax>
-<phpsyntax constant="NORM_IGNORENONSPACE"></phpsyntax>
-<phpsyntax constant="NORM_IGNORESYMBOLS"></phpsyntax>
-<phpsyntax constant="NORM_IGNOREWIDTH"></phpsyntax>
-<phpsyntax constant="NORM_IGNOREKANATYPE"></phpsyntax>
-<phpsyntax constant="NORM_IGNOREKASHIDA"></phpsyntax>
-<phpsyntax constant="DISP_E_DIVBYZERO"></phpsyntax>
-<phpsyntax constant="DISP_E_OVERFLOW"></phpsyntax>
-<phpsyntax constant="MK_E_UNAVAILABLE"></phpsyntax>
-<phpsyntax constant="CPDF_PM_NONE"></phpsyntax>
-<phpsyntax constant="CPDF_PM_OUTLINES"></phpsyntax>
-<phpsyntax constant="CPDF_PM_THUMBS"></phpsyntax>
-<phpsyntax constant="CPDF_PM_FULLSCREEN"></phpsyntax>
-<phpsyntax constant="CPDF_PL_SINGLE"></phpsyntax>
-<phpsyntax constant="CPDF_PL_1COLUMN"></phpsyntax>
-<phpsyntax constant="CPDF_PL_2LCOLUMN"></phpsyntax>
-<phpsyntax constant="CPDF_PL_2RCOLUMN"></phpsyntax>
-<phpsyntax constant="CURLOPT_PORT"></phpsyntax>
-<phpsyntax constant="CURLOPT_FILE"></phpsyntax>
-<phpsyntax constant="CURLOPT_INFILE"></phpsyntax>
-<phpsyntax constant="CURLOPT_INFILESIZE"></phpsyntax>
-<phpsyntax constant="CURLOPT_URL"></phpsyntax>
-<phpsyntax constant="CURLOPT_PROXY"></phpsyntax>
-<phpsyntax constant="CURLOPT_VERBOSE"></phpsyntax>
-<phpsyntax constant="CURLOPT_HEADER"></phpsyntax>
-<phpsyntax constant="CURLOPT_HTTPHEADER"></phpsyntax>
-<phpsyntax constant="CURLOPT_NOPROGRESS"></phpsyntax>
-<phpsyntax constant="CURLOPT_NOBODY"></phpsyntax>
-<phpsyntax constant="CURLOPT_FAILONERROR"></phpsyntax>
-<phpsyntax constant="CURLOPT_UPLOAD"></phpsyntax>
-<phpsyntax constant="CURLOPT_POST"></phpsyntax>
-<phpsyntax constant="CURLOPT_FTPLISTONLY"></phpsyntax>
-<phpsyntax constant="CURLOPT_FTPAPPEND"></phpsyntax>
-<phpsyntax constant="CURLOPT_NETRC"></phpsyntax>
-<phpsyntax constant="CURLOPT_FOLLOWLOCATION"></phpsyntax>
-<phpsyntax constant="CURLOPT_FTPASCII"></phpsyntax>
-<phpsyntax constant="CURLOPT_PUT"></phpsyntax>
-<phpsyntax constant="CURLOPT_MUTE"></phpsyntax>
-<phpsyntax constant="CURLOPT_USERPWD"></phpsyntax>
-<phpsyntax constant="CURLOPT_PROXYUSERPWD"></phpsyntax>
-<phpsyntax constant="CURLOPT_RANGE"></phpsyntax>
-<phpsyntax constant="CURLOPT_TIMEOUT"></phpsyntax>
-<phpsyntax constant="CURLOPT_POSTFIELDS"></phpsyntax>
-<phpsyntax constant="CURLOPT_REFERER"></phpsyntax>
-<phpsyntax constant="CURLOPT_USERAGENT"></phpsyntax>
-<phpsyntax constant="CURLOPT_FTPPORT"></phpsyntax>
-<phpsyntax constant="CURLOPT_LOW_SPEED_LIMIT"></phpsyntax>
-<phpsyntax constant="CURLOPT_LOW_SPEED_TIME"></phpsyntax>
-<phpsyntax constant="CURLOPT_RESUME_FROM"></phpsyntax>
-<phpsyntax constant="CURLOPT_COOKIE"></phpsyntax>
-<phpsyntax constant="CURLOPT_SSLCERT"></phpsyntax>
-<phpsyntax constant="CURLOPT_SSLCERTPASSWD"></phpsyntax>
-<phpsyntax constant="CURLOPT_WRITEHEADER"></phpsyntax>
-<phpsyntax constant="CURLOPT_SSL_VERIFYHOST"></phpsyntax>
-<phpsyntax constant="CURLOPT_COOKIEFILE"></phpsyntax>
-<phpsyntax constant="CURLOPT_SSLVERSION"></phpsyntax>
-<phpsyntax constant="CURLOPT_TIMECONDITION"></phpsyntax>
-<phpsyntax constant="CURLOPT_TIMEVALUE"></phpsyntax>
-<phpsyntax constant="CURLOPT_CUSTOMREQUEST"></phpsyntax>
-<phpsyntax constant="CURLOPT_STDERR"></phpsyntax>
-<phpsyntax constant="CURLOPT_TRANSFERTEXT"></phpsyntax>
-<phpsyntax constant="CURLOPT_RETURNTRANSFER"></phpsyntax>
-<phpsyntax constant="CURLOPT_QUOTE"></phpsyntax>
-<phpsyntax constant="CURLOPT_POSTQUOTE"></phpsyntax>
-<phpsyntax constant="CURLOPT_INTERFACE"></phpsyntax>
-<phpsyntax constant="CURLOPT_KRB4LEVEL"></phpsyntax>
-<phpsyntax constant="CURLOPT_HTTPPROXYTUNNEL"></phpsyntax>
-<phpsyntax constant="CURLOPT_FILETIME"></phpsyntax>
-<phpsyntax constant="CURLOPT_WRITEFUNCTION"></phpsyntax>
-<phpsyntax constant="CURLOPT_READFUNCTION"></phpsyntax>
-<phpsyntax constant="CURLOPT_PASSWDFUNCTION"></phpsyntax>
-<phpsyntax constant="CURLOPT_HEADERFUNCTION"></phpsyntax>
-<phpsyntax constant="CURLOPT_MAXREDIRS"></phpsyntax>
-<phpsyntax constant="CURLOPT_MAXCONNECTS"></phpsyntax>
-<phpsyntax constant="CURLOPT_CLOSEPOLICY"></phpsyntax>
-<phpsyntax constant="CURLOPT_FRESH_CONNECT"></phpsyntax>
-<phpsyntax constant="CURLOPT_FORBID_REUSE"></phpsyntax>
-<phpsyntax constant="CURLOPT_RANDOM_FILE"></phpsyntax>
-<phpsyntax constant="CURLOPT_EGDSOCKET"></phpsyntax>
-<phpsyntax constant="CURLOPT_CONNECTTIMEOUT"></phpsyntax>
-<phpsyntax constant="CURLOPT_SSL_VERIFYPEER"></phpsyntax>
-<phpsyntax constant="CURLOPT_CAINFO"></phpsyntax>
-<phpsyntax constant="CURLOPT_COOKIEJAR"></phpsyntax>
-<phpsyntax constant="CURLOPT_SSL_CIPHER_LIST"></phpsyntax>
-<phpsyntax constant="CURLOPT_BINARYTRANSFER"></phpsyntax>
-<phpsyntax constant="CURLCLOSEPOLICY_LEAST_RECENTLY_USED"></phpsyntax>
-<phpsyntax constant="CURLCLOSEPOLICY_LEAST_TRAFFIC"></phpsyntax>
-<phpsyntax constant="CURLCLOSEPOLICY_SLOWEST"></phpsyntax>
-<phpsyntax constant="CURLCLOSEPOLICY_CALLBACK"></phpsyntax>
-<phpsyntax constant="CURLCLOSEPOLICY_OLDEST"></phpsyntax>
-<phpsyntax constant="CURLINFO_EFFECTIVE_URL"></phpsyntax>
-<phpsyntax constant="CURLINFO_HTTP_CODE"></phpsyntax>
-<phpsyntax constant="CURLINFO_HEADER_SIZE"></phpsyntax>
-<phpsyntax constant="CURLINFO_REQUEST_SIZE"></phpsyntax>
-<phpsyntax constant="CURLINFO_TOTAL_TIME"></phpsyntax>
-<phpsyntax constant="CURLINFO_NAMELOOKUP_TIME"></phpsyntax>
-<phpsyntax constant="CURLINFO_CONNECT_TIME"></phpsyntax>
-<phpsyntax constant="CURLINFO_PRETRANSFER_TIME"></phpsyntax>
-<phpsyntax constant="CURLINFO_SIZE_UPLOAD"></phpsyntax>
-<phpsyntax constant="CURLINFO_SIZE_DOWNLOAD"></phpsyntax>
-<phpsyntax constant="CURLINFO_SPEED_DOWNLOAD"></phpsyntax>
-<phpsyntax constant="CURLINFO_SPEED_UPLOAD"></phpsyntax>
-<phpsyntax constant="CURLINFO_FILETIME"></phpsyntax>
-<phpsyntax constant="CURLINFO_SSL_VERIFYRESULT"></phpsyntax>
-<phpsyntax constant="CURLINFO_CONTENT_LENGTH_DOWNLOAD"></phpsyntax>
-<phpsyntax constant="CURLINFO_CONTENT_LENGTH_UPLOAD"></phpsyntax>
-<phpsyntax constant="CURLE_OK"></phpsyntax>
-<phpsyntax constant="CURLE_UNSUPPORTED_PROTOCOL"></phpsyntax>
-<phpsyntax constant="CURLE_FAILED_INIT"></phpsyntax>
-<phpsyntax constant="CURLE_URL_MALFORMAT"></phpsyntax>
-<phpsyntax constant="CURLE_URL_MALFORMAT_USER"></phpsyntax>
-<phpsyntax constant="CURLE_COULDNT_RESOLVE_PROXY"></phpsyntax>
-<phpsyntax constant="CURLE_COULDNT_RESOLVE_HOST"></phpsyntax>
-<phpsyntax constant="CURLE_COULDNT_CONNECT"></phpsyntax>
-<phpsyntax constant="CURLE_FTP_WEIRD_SERVER_REPLY"></phpsyntax>
-<phpsyntax constant="CURLE_FTP_ACCESS_DENIED"></phpsyntax>
-<phpsyntax constant="CURLE_FTP_USER_PASSWORD_INCORRECT"></phpsyntax>
-<phpsyntax constant="CURLE_FTP_WEIRD_PASS_REPLY"></phpsyntax>
-<phpsyntax constant="CURLE_FTP_WEIRD_USER_REPLY"></phpsyntax>
-<phpsyntax constant="CURLE_FTP_WEIRD_PASV_REPLY"></phpsyntax>
-<phpsyntax constant="CURLE_FTP_WEIRD_227_FORMAT"></phpsyntax>
-<phpsyntax constant="CURLE_FTP_CANT_GET_HOST"></phpsyntax>
-<phpsyntax constant="CURLE_FTP_CANT_RECONNECT"></phpsyntax>
-<phpsyntax constant="CURLE_FTP_COULDNT_SET_BINARY"></phpsyntax>
-<phpsyntax constant="CURLE_PARTIAL_FILE"></phpsyntax>
-<phpsyntax constant="CURLE_FTP_COULDNT_RETR_FILE"></phpsyntax>
-<phpsyntax constant="CURLE_FTP_WRITE_ERROR"></phpsyntax>
-<phpsyntax constant="CURLE_FTP_QUOTE_ERROR"></phpsyntax>
-<phpsyntax constant="CURLE_HTTP_NOT_FOUND"></phpsyntax>
-<phpsyntax constant="CURLE_WRITE_ERROR"></phpsyntax>
-<phpsyntax constant="CURLE_MALFORMAT_USER"></phpsyntax>
-<phpsyntax constant="CURLE_FTP_COULDNT_STOR_FILE"></phpsyntax>
-<phpsyntax constant="CURLE_READ_ERROR"></phpsyntax>
-<phpsyntax constant="CURLE_OUT_OF_MEMORY"></phpsyntax>
-<phpsyntax constant="CURLE_OPERATION_TIMEOUTED"></phpsyntax>
-<phpsyntax constant="CURLE_FTP_COULDNT_SET_ASCII"></phpsyntax>
-<phpsyntax constant="CURLE_FTP_PORT_FAILED"></phpsyntax>
-<phpsyntax constant="CURLE_FTP_COULDNT_USE_REST"></phpsyntax>
-<phpsyntax constant="CURLE_FTP_COULDNT_GET_SIZE"></phpsyntax>
-<phpsyntax constant="CURLE_HTTP_RANGE_ERROR"></phpsyntax>
-<phpsyntax constant="CURLE_HTTP_POST_ERROR"></phpsyntax>
-<phpsyntax constant="CURLE_SSL_CONNECT_ERROR"></phpsyntax>
-<phpsyntax constant="CURLE_FTP_BAD_DOWNLOAD_RESUME"></phpsyntax>
-<phpsyntax constant="CURLE_FILE_COULDNT_READ_FILE"></phpsyntax>
-<phpsyntax constant="CURLE_LDAP_CANNOT_BIND"></phpsyntax>
-<phpsyntax constant="CURLE_LDAP_SEARCH_FAILED"></phpsyntax>
-<phpsyntax constant="CURLE_LIBRARY_NOT_FOUND"></phpsyntax>
-<phpsyntax constant="CURLE_FUNCTION_NOT_FOUND"></phpsyntax>
-<phpsyntax constant="CURLE_ABORTED_BY_CALLBACK"></phpsyntax>
-<phpsyntax constant="CURLE_BAD_FUNCTION_ARGUMENT"></phpsyntax>
-<phpsyntax constant="CURLE_BAD_CALLING_ORDER"></phpsyntax>
-<phpsyntax constant="CURLE_HTTP_PORT_FAILED"></phpsyntax>
-<phpsyntax constant="CURLE_BAD_PASSWORD_ENTERED"></phpsyntax>
-<phpsyntax constant="CURLE_TOO_MANY_REDIRECTS"></phpsyntax>
-<phpsyntax constant="CURLE_UNKNOWN_TELNET_OPTION"></phpsyntax>
-<phpsyntax constant="CURLE_TELNET_OPTION_SYNTAX"></phpsyntax>
-<phpsyntax constant="CURLE_OBSOLETE"></phpsyntax>
-<phpsyntax constant="CURLE_SSL_PEER_CERTIFICATE"></phpsyntax>
-<phpsyntax constant="CYRUS_CONN_NONSYNCLITERAL"></phpsyntax>
-<phpsyntax constant="CYRUS_CONN_INITIALRESPONSE"></phpsyntax>
-<phpsyntax constant="CYRUS_CALLBACK_NUMBERED"></phpsyntax>
-<phpsyntax constant="CYRUS_CALLBACK_NOLITERAL"></phpsyntax>
-<phpsyntax constant="DBPLUS_ERR_NOERR">ERR_NOERR</phpsyntax>
-<phpsyntax constant="DBPLUS_ERR_DUPLICATE">ERR_DUPLICATE</phpsyntax>
-<phpsyntax constant="DBPLUS_ERR_EOSCAN">ERR_EOSCAN</phpsyntax>
-<phpsyntax constant="DBPLUS_ERR_EMPTY">ERR_EMPTY</phpsyntax>
-<phpsyntax constant="DBPLUS_ERR_CLOSE">ERR_CLOSE</phpsyntax>
-<phpsyntax constant="DBPLUS_ERR_WLOCKED">ERR_WLOCKED</phpsyntax>
-<phpsyntax constant="DBPLUS_ERR_LOCKED">ERR_LOCKED</phpsyntax>
-<phpsyntax constant="DBPLUS_ERR_NOLOCK">ERR_NOLOCK</phpsyntax>
-<phpsyntax constant="DBPLUS_ERR_READ">ERR_READ</phpsyntax>
-<phpsyntax constant="DBPLUS_ERR_WRITE">ERR_WRITE</phpsyntax>
-<phpsyntax constant="DBPLUS_ERR_CREATE">ERR_CREATE</phpsyntax>
-<phpsyntax constant="DBPLUS_ERR_LSEEK">ERR_LSEEK</phpsyntax>
-<phpsyntax constant="DBPLUS_ERR_LENGTH">ERR_LENGTH</phpsyntax>
-<phpsyntax constant="DBPLUS_ERR_OPEN">ERR_OPEN</phpsyntax>
-<phpsyntax constant="DBPLUS_ERR_WOPEN">ERR_WOPEN</phpsyntax>
-<phpsyntax constant="DBPLUS_ERR_MAGIC">ERR_MAGIC</phpsyntax>
-<phpsyntax constant="DBPLUS_ERR_VERSION">ERR_VERSION</phpsyntax>
-<phpsyntax constant="DBPLUS_ERR_PGSIZE">ERR_PGSIZE</phpsyntax>
-<phpsyntax constant="DBPLUS_ERR_CRC">ERR_CRC</phpsyntax>
-<phpsyntax constant="DBPLUS_ERR_PIPE">ERR_PIPE</phpsyntax>
-<phpsyntax constant="DBPLUS_ERR_NIDX">ERR_NIDX</phpsyntax>
-<phpsyntax constant="DBPLUS_ERR_MALLOC">ERR_MALLOC</phpsyntax>
-<phpsyntax constant="DBPLUS_ERR_NUSERS">ERR_NUSERS</phpsyntax>
-<phpsyntax constant="DBPLUS_ERR_PREEXIT">ERR_PREEXIT</phpsyntax>
-<phpsyntax constant="DBPLUS_ERR_ONTRAP">ERR_ONTRAP</phpsyntax>
-<phpsyntax constant="DBPLUS_ERR_PREPROC">ERR_PREPROC</phpsyntax>
-<phpsyntax constant="DBPLUS_ERR_DBPARSE">ERR_DBPARSE</phpsyntax>
-<phpsyntax constant="DBPLUS_ERR_DBRUNERR">ERR_DBRUNERR</phpsyntax>
-<phpsyntax constant="DBPLUS_ERR_DBPREEXIT">ERR_DBPREEXIT</phpsyntax>
-<phpsyntax constant="DBPLUS_ERR_WAIT">ERR_WAIT</phpsyntax>
-<phpsyntax constant="DBPLUS_ERR_CORRUPT_TUPLE">ERR_CORRUPT_TUPLE</phpsyntax>
-<phpsyntax constant="DBPLUS_ERR_WARNING0">ERR_WARNING0</phpsyntax>
-<phpsyntax constant="DBPLUS_ERR_PANIC">ERR_PANIC</phpsyntax>
-<phpsyntax constant="DBPLUS_ERR_FIFO">ERR_FIFO</phpsyntax>
-<phpsyntax constant="DBPLUS_ERR_PERM">ERR_PERM</phpsyntax>
-<phpsyntax constant="DBPLUS_ERR_TCL">ERR_TCL</phpsyntax>
-<phpsyntax constant="DBPLUS_ERR_RESTRICTED">ERR_RESTRICTED</phpsyntax>
-<phpsyntax constant="DBPLUS_ERR_USER">ERR_USER</phpsyntax>
-<phpsyntax constant="DBPLUS_ERR_UNKNOWN">ERR_UNKNOWN</phpsyntax>
-<phpsyntax constant="DBX_MYSQL"></phpsyntax>
-<phpsyntax constant="DBX_ODBC"></phpsyntax>
-<phpsyntax constant="DBX_PGSQL"></phpsyntax>
-<phpsyntax constant="DBX_MSSQL"></phpsyntax>
-<phpsyntax constant="DBX_FBSQL"></phpsyntax>
-<phpsyntax constant="DBX_OCI8"></phpsyntax>
-<phpsyntax constant="DBX_SYBASECT"></phpsyntax>
-<phpsyntax constant="DBX_SQLITE"></phpsyntax>
-<phpsyntax constant="DBX_PERSISTENT"></phpsyntax>
-<phpsyntax constant="DBX_RESULT_INFO"></phpsyntax>
-<phpsyntax constant="DBX_RESULT_INDEX"></phpsyntax>
-<phpsyntax constant="DBX_RESULT_ASSOC"></phpsyntax>
-<phpsyntax constant="DBX_RESULT_UNBUFFERED"></phpsyntax>
-<phpsyntax constant="DBX_COLNAMES_UNCHANGED"></phpsyntax>
-<phpsyntax constant="DBX_COLNAMES_UPPERCASE"></phpsyntax>
-<phpsyntax constant="DBX_COLNAMES_LOWERCASE"></phpsyntax>
-<phpsyntax constant="DBX_CMP_NATIVE"></phpsyntax>
-<phpsyntax constant="DBX_CMP_TEXT"></phpsyntax>
-<phpsyntax constant="DBX_CMP_NUMBER"></phpsyntax>
-<phpsyntax constant="DBX_CMP_ASC"></phpsyntax>
-<phpsyntax constant="DBX_CMP_DESC"></phpsyntax>
-<phpsyntax constant="DIRECTORY_SEPARATOR"></phpsyntax>
-<phpsyntax constant="PATH_SEPARATOR"></phpsyntax>
-<phpsyntax constant="XML_ELEMENT_NODE">1</phpsyntax>
-<phpsyntax constant="XML_ATTRIBUTE_NODE">2</phpsyntax>
-<phpsyntax constant="XML_TEXT_NODE">3</phpsyntax>
-<phpsyntax constant="XML_CDATA_SECTION_NODE">4</phpsyntax>
-<phpsyntax constant="XML_ENTITY_REF_NODE">5</phpsyntax>
-<phpsyntax constant="XML_ENTITY_NODE">6</phpsyntax>
-<phpsyntax constant="XML_PI_NODE">7</phpsyntax>
-<phpsyntax constant="XML_COMMENT_NODE">8</phpsyntax>
-<phpsyntax constant="XML_DOCUMENT_NODE">9</phpsyntax>
-<phpsyntax constant="XML_DOCUMENT_TYPE_NODE">10</phpsyntax>
-<phpsyntax constant="XML_DOCUMENT_FRAG_NODE">11</phpsyntax>
-<phpsyntax constant="XML_NOTATION_NODE">12</phpsyntax>
-<phpsyntax constant="XML_HTML_DOCUMENT_NODE">13</phpsyntax>
-<phpsyntax constant="XML_DTD_NODE">14</phpsyntax>
-<phpsyntax constant="XML_ELEMENT_DECL_NODE">15</phpsyntax>
-<phpsyntax constant="XML_ATTRIBUTE_DECL_NODE">16</phpsyntax>
-<phpsyntax constant="XML_ENTITY_DECL_NODE">17</phpsyntax>
-<phpsyntax constant="XML_NAMESPACE_DECL_NODE">18</phpsyntax>
-<phpsyntax constant="XML_ATTRIBUTE_CDATA">1</phpsyntax>
-<phpsyntax constant="XML_ATTRIBUTE_ID">2</phpsyntax>
-<phpsyntax constant="XML_ATTRIBUTE_IDREF">3</phpsyntax>
-<phpsyntax constant="XML_ATTRIBUTE_IDREFS">4</phpsyntax>
-<phpsyntax constant="XML_ATTRIBUTE_ENTITY">5</phpsyntax>
-<phpsyntax constant="XML_ATTRIBUTE_NMTOKEN">7</phpsyntax>
-<phpsyntax constant="XML_ATTRIBUTE_NMTOKENS">8</phpsyntax>
-<phpsyntax constant="XML_ATTRIBUTE_ENUMERATION">9</phpsyntax>
-<phpsyntax constant="XML_ATTRIBUTE_NOTATION">10</phpsyntax>
-<phpsyntax constant="DOM_INDEX_SIZE_ERR">1</phpsyntax>
-<phpsyntax constant="DOMSTRING_SIZE_ERR">2</phpsyntax>
-<phpsyntax constant="DOM_HIERARCHY_REQUEST_ERR">3</phpsyntax>
-<phpsyntax constant="DOM_WRONG_DOCUMENT_ERR">4</phpsyntax>
-<phpsyntax constant="DOM_INVALID_CHARACTER_ERR">5</phpsyntax>
-<phpsyntax constant="DOM_NO_DATA_ALLOWED_ERR">6</phpsyntax>
-<phpsyntax constant="DOM_NO_MODIFICATION_ALLOWED_ERR">7</phpsyntax>
-<phpsyntax constant="DOM_NOT_FOUND_ERR">8</phpsyntax>
-<phpsyntax constant="DOM_NOT_SUPPORTED_ERR">9</phpsyntax>
-<phpsyntax constant="DOM_INUSE_ATTRIBUTE_ERR">10</phpsyntax>
-<phpsyntax constant="DOM_INVALID_STATE_ERR">11</phpsyntax>
-<phpsyntax constant="DOM_SYNTAX_ERR">12</phpsyntax>
-<phpsyntax constant="DOM_INVALID_MODIFICATION_ERR">13</phpsyntax>
-<phpsyntax constant="DOM_NAMESPACE_ERR">14</phpsyntax>
-<phpsyntax constant="DOM_INVALID_ACCESS_ERR">15</phpsyntax>
-<phpsyntax constant="DOM_VALIDATION_ERR">16</phpsyntax>
-<phpsyntax constant="XML_ELEMENT_NODE">1</phpsyntax>
-<phpsyntax constant="XML_ATTRIBUTE_NODE">2</phpsyntax>
-<phpsyntax constant="XML_TEXT_NODE">3</phpsyntax>
-<phpsyntax constant="XML_CDATA_SECTION_NODE">4</phpsyntax>
-<phpsyntax constant="XML_ENTITY_REF_NODE">5</phpsyntax>
-<phpsyntax constant="XML_ENTITY_NODE">6</phpsyntax>
-<phpsyntax constant="XML_PI_NODE">7</phpsyntax>
-<phpsyntax constant="XML_COMMENT_NODE">8</phpsyntax>
-<phpsyntax constant="XML_DOCUMENT_NODE">9</phpsyntax>
-<phpsyntax constant="XML_DOCUMENT_TYPE_NODE">10</phpsyntax>
-<phpsyntax constant="XML_DOCUMENT_FRAG_NODE">11</phpsyntax>
-<phpsyntax constant="XML_NOTATION_NODE">12</phpsyntax>
-<phpsyntax constant="XML_GLOBAL_NAMESPACE">1</phpsyntax>
-<phpsyntax constant="XML_LOCAL_NAMESPACE">2</phpsyntax>
-<phpsyntax constant="XML_HTML_DOCUMENT_NODE"></phpsyntax>
-<phpsyntax constant="XML_DTD_NODE"></phpsyntax>
-<phpsyntax constant="XML_ELEMENT_DECL_NODE"></phpsyntax>
-<phpsyntax constant="XML_ATTRIBUTE_DECL_NODE"></phpsyntax>
-<phpsyntax constant="XML_ENTITY_DECL_NODE"></phpsyntax>
-<phpsyntax constant="XML_NAMESPACE_DECL_NODE"></phpsyntax>
-<phpsyntax constant="XML_ATTRIBUTE_CDATA"></phpsyntax>
-<phpsyntax constant="XML_ATTRIBUTE_ID"></phpsyntax>
-<phpsyntax constant="XML_ATTRIBUTE_IDREF"></phpsyntax>
-<phpsyntax constant="XML_ATTRIBUTE_IDREFS"></phpsyntax>
-<phpsyntax constant="XML_ATTRIBUTE_ENTITY"></phpsyntax>
-<phpsyntax constant="XML_ATTRIBUTE_NMTOKEN"></phpsyntax>
-<phpsyntax constant="XML_ATTRIBUTE_NMTOKENS"></phpsyntax>
-<phpsyntax constant="XML_ATTRIBUTE_ENUMERATION"></phpsyntax>
-<phpsyntax constant="XML_ATTRIBUTE_NOTATION"></phpsyntax>
-<phpsyntax constant="XPATH_UNDEFINED"></phpsyntax>
-<phpsyntax constant="XPATH_NODESET"></phpsyntax>
-<phpsyntax constant="XPATH_BOOLEAN"></phpsyntax>
-<phpsyntax constant="XPATH_NUMBER"></phpsyntax>
-<phpsyntax constant="XPATH_STRING"></phpsyntax>
-<phpsyntax constant="XPATH_POINT"></phpsyntax>
-<phpsyntax constant="XPATH_RANGE"></phpsyntax>
-<phpsyntax constant="XPATH_LOCATIONSET"></phpsyntax>
-<phpsyntax constant="XPATH_USERS"></phpsyntax>
-<phpsyntax constant="XPATH_NUMBER"></phpsyntax>
-<phpsyntax constant="E_ERROR">Fatal run-time errors. These indicate errors that can not be
-      recovered from, such as a memory allocation problem.
-      Execution of the script is halted.</phpsyntax>
-<phpsyntax constant="FAMC">Some value which can be obtained with fstat(1) changed for a
-       file or directory.</phpsyntax>
-<phpsyntax constant="FAMD">A file or directory was deleted or renamed.</phpsyntax>
-<phpsyntax constant="FAMC">A file was created in a directory.</phpsyntax>
-<phpsyntax constant="FAMM">This event never occurs.</phpsyntax>
-<phpsyntax constant="FAMA">An event in response to fam_cancel_monitor.</phpsyntax>
-<phpsyntax constant="FAME">An event upon request to monitor a file or directory. When a
-       directory is monitored, an event for that directory and every file
-       contained in that directory is issued.</phpsyntax>
-<phpsyntax constant="FBSQL_ASSOC"></phpsyntax>
-<phpsyntax constant="FBSQL_NUM"></phpsyntax>
-<phpsyntax constant="FBSQL_BOTH"></phpsyntax>
-<phpsyntax constant="FBSQL_LOCK_DEFERRED"></phpsyntax>
-<phpsyntax constant="FBSQL_LOCK_OPTIMISTIC"></phpsyntax>
-<phpsyntax constant="FBSQL_LOCK_PESSIMISTIC"></phpsyntax>
-<phpsyntax constant="FBSQL_ISO_READ_UNCOMMITTED"></phpsyntax>
-<phpsyntax constant="FBSQL_ISO_READ_COMMITTED"></phpsyntax>
-<phpsyntax constant="FBSQL_ISO_REPEATABLE_READ"></phpsyntax>
-<phpsyntax constant="FBSQL_ISO_SERIALIZABLE"></phpsyntax>
-<phpsyntax constant="FBSQL_ISO_VERSIONED"></phpsyntax>
-<phpsyntax constant="FBSQL_UNKNOWN"></phpsyntax>
-<phpsyntax constant="FBSQL_STOPPED"></phpsyntax>
-<phpsyntax constant="FBSQL_STARTING"></phpsyntax>
-<phpsyntax constant="FBSQL_RUNNING"></phpsyntax>
-<phpsyntax constant="FBSQL_STOPPING"></phpsyntax>
-<phpsyntax constant="FBSQL_NOEXEC"></phpsyntax>
-<phpsyntax constant="FBSQL_LOB_DIRECT"></phpsyntax>
-<phpsyntax constant="FBSQL_LOB_HANDLE"></phpsyntax>
-<phpsyntax constant="FDFValue"></phpsyntax>
-<phpsyntax constant="FDFStatus"></phpsyntax>
-<phpsyntax constant="FDFFile"></phpsyntax>
-<phpsyntax constant="FDFID"></phpsyntax>
-<phpsyntax constant="FDFFf"></phpsyntax>
-<phpsyntax constant="FDFSetFf"></phpsyntax>
-<phpsyntax constant="FDFClearFf"></phpsyntax>
-<phpsyntax constant="FDFFlags"></phpsyntax>
-<phpsyntax constant="FDFSetF"></phpsyntax>
-<phpsyntax constant="FDFClrF"></phpsyntax>
-<phpsyntax constant="FDFAP"></phpsyntax>
-<phpsyntax constant="FDFAS"></phpsyntax>
-<phpsyntax constant="FDFAction"></phpsyntax>
-<phpsyntax constant="FDFAA"></phpsyntax>
-<phpsyntax constant="FDFAPRef"></phpsyntax>
-<phpsyntax constant="FDFIF"></phpsyntax>
-<phpsyntax constant="FDFEnter"></phpsyntax>
-<phpsyntax constant="FDFExit"></phpsyntax>
-<phpsyntax constant="FDFDown"></phpsyntax>
-<phpsyntax constant="FDFUp"></phpsyntax>
-<phpsyntax constant="FDFFormat"></phpsyntax>
-<phpsyntax constant="FDFValidate"></phpsyntax>
-<phpsyntax constant="FDFKeystroke"></phpsyntax>
-<phpsyntax constant="FDFCalculate"></phpsyntax>
-<phpsyntax constant="FDFNormalAP"></phpsyntax>
-<phpsyntax constant="FDFRolloverAP"></phpsyntax>
-<phpsyntax constant="FDFDownAP"></phpsyntax>
-<phpsyntax constant="GLOB_BRACE"></phpsyntax>
-<phpsyntax constant="GLOB_ONLYDIR"></phpsyntax>
-<phpsyntax constant="GLOB_MARK"></phpsyntax>
-<phpsyntax constant="GLOB_NOSORT"></phpsyntax>
-<phpsyntax constant="GLOB_NOCHECK"></phpsyntax>
-<phpsyntax constant="GLOB_NOESCAPE"></phpsyntax>
-<phpsyntax constant="PATHINFO_DIRNAME"></phpsyntax>
-<phpsyntax constant="PATHINFO_BASENAME"></phpsyntax>
-<phpsyntax constant="PATHINFO_EXTENSION"></phpsyntax>
-<phpsyntax constant="FILE_USE_INCLUDE_PATH"></phpsyntax>
-<phpsyntax constant="FILE_APPEND"></phpsyntax>
-<phpsyntax constant="FILE_IGNORE_NEW_LINES"></phpsyntax>
-<phpsyntax constant="FILE_SKIP_EMPTY_LINES"></phpsyntax>
-<phpsyntax constant="FRIBIDI_CHARSET_UTF8"></phpsyntax>
-<phpsyntax constant="FRIBIDI_CHARSET_8859_6"></phpsyntax>
-<phpsyntax constant="FRIBIDI_CHARSET_8859_8"></phpsyntax>
-<phpsyntax constant="FRIBIDI_CHARSET_CP1255"></phpsyntax>
-<phpsyntax constant="FRIBIDI_CHARSET_CP1256"></phpsyntax>
-<phpsyntax constant="FRIBIDI_CHARSET_ISIRI_3342"></phpsyntax>
-<phpsyntax constant="FTP_ASCII"></phpsyntax>
-<phpsyntax constant="FTP_TEXT"></phpsyntax>
-<phpsyntax constant="FTP_BINARY"></phpsyntax>
-<phpsyntax constant="FTP_IMAGE"></phpsyntax>
-<phpsyntax constant="FTP_TIMEOUT_SEC"></phpsyntax>
-<phpsyntax constant="FTP_AUTOSEEK"></phpsyntax>
-<phpsyntax constant="FTP_AUTORESUME"></phpsyntax>
-<phpsyntax constant="FTP_FAILED"></phpsyntax>
-<phpsyntax constant="FTP_FINISHED"></phpsyntax>
-<phpsyntax constant="FTP_MOREDATA"></phpsyntax>
-<phpsyntax constant="GMP_ROUND_ZERO"></phpsyntax>
-<phpsyntax constant="GMP_ROUND_PLUSINF"></phpsyntax>
-<phpsyntax constant="GMP_ROUND_MINUSINF"></phpsyntax>
-<phpsyntax constant="HW_ATTR_LANG"></phpsyntax>
-<phpsyntax constant="HW_ATTR_NR"></phpsyntax>
-<phpsyntax constant="HW_ATTR_NONE"></phpsyntax>
-<phpsyntax constant="IBASE_DEFAULT">The default transaction settings are to be used. This default is
-       determined by the client library, which defines it as
-       IBASE_WRITE|IBASE_CONCURRENCY|IBASE_WAIT in most cases.</phpsyntax>
-<phpsyntax constant="IBASE_READ">Starts a read-only transaction.</phpsyntax>
-<phpsyntax constant="IBASE_WRITE">Starts a read-write transaction.</phpsyntax>
-<phpsyntax constant="IBASE_CONSISTENCY">Starts a transaction with the isolation level set to
-       'consistency', which means the transaction cannot read from tables
-       that are being modified by other concurrent transactions.</phpsyntax>
-<phpsyntax constant="IBASE_CONCURRENCY">Starts a transaction with the isolation level set to
-       'concurrency' (or 'snapshot'), which means the transaction 
-       has access to all tables, but cannot see changes that were committed
-       by other transactions after the transaction was started.</phpsyntax>
-<phpsyntax constant="IBASE_COMMITTED">Starts a transaction with the isolation level set to
-       'read committed'. This flag should be combined with either
-       IBASE_REC_VERSION or 
-       IBASE_REC_NO_VERSION. This isolation level
-       allows access to changes that were committed after the transaction
-       was started. If IBASE_REC_NO_VERSION was
-       specified, only the latest version of a row can be read. If 
-       IBASE_REC_VERSION was specified, a row can
-       even be read when a modification to it is pending in a concurrent
-       transaction.</phpsyntax>
-<phpsyntax constant="IBASE_WAIT">Indicated that a transaction should wait and retry when a
-       conflict occurs.</phpsyntax>
-<phpsyntax constant="IBASE_NOWAIT">Indicated that a transaction should fail immediately when a
-       conflict occurs.</phpsyntax>
-<phpsyntax constant="IBASE_FETCH_BLOBS">Also available as IBASE_TEXTfor backward
-       compatibility. Causes BLOB contents to be fetched inline, instead of 
-       being fetched as BLOB identifiers.</phpsyntax>
-<phpsyntax constant="IBASE_FETCH_ARRAYS">Causes arrays to be fetched inline. Otherwise, array
-       identifiers are returned. Array identifiers can only be used as
-       arguments to INSERT operations, as no functions to handle array
-       identifiers are currently available.</phpsyntax>
-<phpsyntax constant="IBASE_UNIXTIME">Causes date and time fields not to be returned as strings,
-       but as UNIX timestamps (the number of seconds since the epoch, which
-       is 1-Jan-1970 0:00 UTC). Might be problematic if used with dates
-       before 1970 on some systems.</phpsyntax>
-<phpsyntax constant="ICONV_IMPL">string</phpsyntax>
-<phpsyntax constant="ICONV_VERSION">string</phpsyntax>
-<phpsyntax constant="ICONV_MIME_DECODE_STRICT">integer</phpsyntax>
-<phpsyntax constant="ICONV_MIME_DECODE_CONTINUE_ON_ERROR">integer</phpsyntax>
-<phpsyntax constant="IMG_GIF"></phpsyntax>
-<phpsyntax constant="IMG_JPG"></phpsyntax>
-<phpsyntax constant="IMG_JPEG"></phpsyntax>
-<phpsyntax constant="IMG_PNG"></phpsyntax>
-<phpsyntax constant="IMG_WBMP"></phpsyntax>
-<phpsyntax constant="IMG_XPM"></phpsyntax>
-<phpsyntax constant="IMG_COLOR_TILED"></phpsyntax>
-<phpsyntax constant="IMG_COLOR_STYLED"></phpsyntax>
-<phpsyntax constant="IMG_COLOR_BRUSHED"></phpsyntax>
-<phpsyntax constant="IMG_COLOR_STYLEDBRUSHED"></phpsyntax>
-<phpsyntax constant="IMG_COLOR_TRANSPARENT"></phpsyntax>
-<phpsyntax constant="IMG_ARC_ROUNDED"></phpsyntax>
-<phpsyntax constant="IMG_ARC_PIE"></phpsyntax>
-<phpsyntax constant="IMG_ARC_CHORD"></phpsyntax>
-<phpsyntax constant="IMG_ARC_NOFILL"></phpsyntax>
-<phpsyntax constant="IMG_ARC_EDGED"></phpsyntax>
-<phpsyntax constant="IMAGETYPE_GIF"></phpsyntax>
-<phpsyntax constant="IMAGETYPE_JPEG"></phpsyntax>
-<phpsyntax constant="IMAGETYPE_PNG"></phpsyntax>
-<phpsyntax constant="IMAGETYPE_SWF"></phpsyntax>
-<phpsyntax constant="IMAGETYPE_PSD"></phpsyntax>
-<phpsyntax constant="IMAGETYPE_BMP"></phpsyntax>
-<phpsyntax constant="IMAGETYPE_WBMP"></phpsyntax>
-<phpsyntax constant="IMAGETYPE_XBM"></phpsyntax>
-<phpsyntax constant="IMAGETYPE_TIFF_II"></phpsyntax>
-<phpsyntax constant="IMAGETYPE_TIFF_MM"></phpsyntax>
-<phpsyntax constant="IMAGETYPE_IFF"></phpsyntax>
-<phpsyntax constant="IMAGETYPE_JB2"></phpsyntax>
-<phpsyntax constant="IMAGETYPE_JPC"></phpsyntax>
-<phpsyntax constant="IMAGETYPE_JP2"></phpsyntax>
-<phpsyntax constant="IMAGETYPE_JPX"></phpsyntax>
-<phpsyntax constant="IMAGETYPE_SWC"></phpsyntax>
-<phpsyntax constant="NIL"></phpsyntax>
-<phpsyntax constant="OP_DEBUG"></phpsyntax>
-<phpsyntax constant="OP_READONLY"></phpsyntax>
-<phpsyntax constant="OP_ANONYMOUS"></phpsyntax>
-<phpsyntax constant="OP_SHORTCACHE"></phpsyntax>
-<phpsyntax constant="OP_SILENT"></phpsyntax>
-<phpsyntax constant="OP_PROTOTYPE"></phpsyntax>
-<phpsyntax constant="OP_HALFOPEN"></phpsyntax>
-<phpsyntax constant="OP_EXPUNGE"></phpsyntax>
-<phpsyntax constant="OP_SECURE"></phpsyntax>
-<phpsyntax constant="CL_EXPUNGE"></phpsyntax>
-<phpsyntax constant="FT_UID"></phpsyntax>
-<phpsyntax constant="FT_PEEK"></phpsyntax>
-<phpsyntax constant="FT_NOT"></phpsyntax>
-<phpsyntax constant="FT_INTERNAL"></phpsyntax>
-<phpsyntax constant="FT_PREFETCHTEXT"></phpsyntax>
-<phpsyntax constant="ST_UID"></phpsyntax>
-<phpsyntax constant="ST_SILENT"></phpsyntax>
-<phpsyntax constant="ST_SET"></phpsyntax>
-<phpsyntax constant="CP_UID"></phpsyntax>
-<phpsyntax constant="CP_MOVE"></phpsyntax>
-<phpsyntax constant="SE_UID"></phpsyntax>
-<phpsyntax constant="SE_FREE"></phpsyntax>
-<phpsyntax constant="SE_NOPREFETCH"></phpsyntax>
-<phpsyntax constant="SO_FREE"></phpsyntax>
-<phpsyntax constant="SO_NOSERVER"></phpsyntax>
-<phpsyntax constant="SA_MESSAGES"></phpsyntax>
-<phpsyntax constant="SA_RECENT"></phpsyntax>
-<phpsyntax constant="SA_UNSEEN"></phpsyntax>
-<phpsyntax constant="SA_UIDNEXT"></phpsyntax>
-<phpsyntax constant="SA_UIDVALIDITY"></phpsyntax>
-<phpsyntax constant="SA_ALL"></phpsyntax>
-<phpsyntax constant="LATT_NOINFERIORS"></phpsyntax>
-<phpsyntax constant="LATT_NOSELECT"></phpsyntax>
-<phpsyntax constant="LATT_MARKED"></phpsyntax>
-<phpsyntax constant="LATT_UNMARKED"></phpsyntax>
-<phpsyntax constant="SORTDATE"></phpsyntax>
-<phpsyntax constant="SORTARRIVAL"></phpsyntax>
-<phpsyntax constant="SORTFROM"></phpsyntax>
-<phpsyntax constant="SORTSUBJECT"></phpsyntax>
-<phpsyntax constant="SORTTO"></phpsyntax>
-<phpsyntax constant="SORTCC"></phpsyntax>
-<phpsyntax constant="SORTSIZE"></phpsyntax>
-<phpsyntax constant="TYPETEXT"></phpsyntax>
-<phpsyntax constant="TYPEMULTIPART"></phpsyntax>
-<phpsyntax constant="TYPEMESSAGE"></phpsyntax>
-<phpsyntax constant="TYPEAPPLICATION"></phpsyntax>
-<phpsyntax constant="TYPEAUDIO"></phpsyntax>
-<phpsyntax constant="TYPEIMAGE"></phpsyntax>
-<phpsyntax constant="TYPEVIDEO"></phpsyntax>
-<phpsyntax constant="TYPEOTHER"></phpsyntax>
-<phpsyntax constant="ENC7BIT"></phpsyntax>
-<phpsyntax constant="ENC8BIT"></phpsyntax>
-<phpsyntax constant="ENCBINARY"></phpsyntax>
-<phpsyntax constant="ENCBASE64"></phpsyntax>
-<phpsyntax constant="ENCQUOTEDPRINTABLE"></phpsyntax>
-<phpsyntax constant="ENCOTHER"></phpsyntax>
-<phpsyntax constant="CREDITS_GROUP">1</phpsyntax>
-<phpsyntax constant="CREDITS_GENERAL">2</phpsyntax>
-<phpsyntax constant="CREDITS_SAPI">4</phpsyntax>
-<phpsyntax constant="CREDITS_MODULES">8</phpsyntax>
-<phpsyntax constant="CREDITS_DOCS">16</phpsyntax>
-<phpsyntax constant="CREDITS_FULLPAGE">32</phpsyntax>
-<phpsyntax constant="CREDITS_QA">64</phpsyntax>
-<phpsyntax constant="CREDITS_ALL">-1</phpsyntax>
-<phpsyntax constant="INFO_GENERAL">1</phpsyntax>
-<phpsyntax constant="INFO_CREDITS">2</phpsyntax>
-<phpsyntax constant="INFO_CONFIGURATION">4</phpsyntax>
-<phpsyntax constant="INFO_MODULES">8</phpsyntax>
-<phpsyntax constant="INFO_ENVIRONMENT">16</phpsyntax>
-<phpsyntax constant="INFO_VARIABLES">32</phpsyntax>
-<phpsyntax constant="INFO_LICENSE">64</phpsyntax>
-<phpsyntax constant="INFO_ALL">-1</phpsyntax>
-<phpsyntax constant="INGRES_ASSOC"></phpsyntax>
-<phpsyntax constant="INGRES_NUM"></phpsyntax>
-<phpsyntax constant="INGRES_BOTH"></phpsyntax>
-<phpsyntax constant="LDAP_DEREF_NEVER"></phpsyntax>
-<phpsyntax constant="LDAP_DEREF_SEARCHING"></phpsyntax>
-<phpsyntax constant="LDAP_DEREF_FINDING"></phpsyntax>
-<phpsyntax constant="LDAP_DEREF_ALWAYS"></phpsyntax>
-<phpsyntax constant="LDAP_OPT_DEREF"></phpsyntax>
-<phpsyntax constant="LDAP_OPT_SIZELIMIT"></phpsyntax>
-<phpsyntax constant="LDAP_OPT_TIMELIMIT"></phpsyntax>
-<phpsyntax constant="LDAP_OPT_PROTOCOL_VERSION"></phpsyntax>
-<phpsyntax constant="LDAP_OPT_ERROR_NUMBER"></phpsyntax>
-<phpsyntax constant="LDAP_OPT_REFERRALS"></phpsyntax>
-<phpsyntax constant="LDAP_OPT_RESTART"></phpsyntax>
-<phpsyntax constant="LDAP_OPT_HOST_NAME"></phpsyntax>
-<phpsyntax constant="LDAP_OPT_ERROR_STRING"></phpsyntax>
-<phpsyntax constant="LDAP_OPT_MATCHED_DN"></phpsyntax>
-<phpsyntax constant="LDAP_OPT_SERVER_CONTROLS"></phpsyntax>
-<phpsyntax constant="LDAP_OPT_CLIENT_CONTROLS"></phpsyntax>
-<phpsyntax constant="LDAP_OPT_DEBUG_LEVEL"></phpsyntax>
-<phpsyntax constant="GSLC_SSL_NO_AUTH"></phpsyntax>
-<phpsyntax constant="GSLC_SSL_ONEWAY_AUTH"></phpsyntax>
-<phpsyntax constant="GSLC_SSL_TWOWAY_AUTH"></phpsyntax>
-<phpsyntax constant="M_PI">3.14159265358979323846</phpsyntax>
-<phpsyntax constant="M_E">2.7182818284590452354</phpsyntax>
-<phpsyntax constant="M_LOG2E">1.4426950408889634074</phpsyntax>
-<phpsyntax constant="M_LOG10E">0.43429448190325182765</phpsyntax>
-<phpsyntax constant="M_LN2">0.69314718055994530942</phpsyntax>
-<phpsyntax constant="M_LN10">2.30258509299404568402</phpsyntax>
-<phpsyntax constant="M_PI_2">1.57079632679489661923</phpsyntax>
-<phpsyntax constant="M_PI_4">0.78539816339744830962</phpsyntax>
-<phpsyntax constant="M_1_PI">0.31830988618379067154</phpsyntax>
-<phpsyntax constant="M_2_PI">0.63661977236758134308</phpsyntax>
-<phpsyntax constant="M_SQRTPI">1.77245385090551602729</phpsyntax>
-<phpsyntax constant="M_2_SQRTPI">1.12837916709551257390</phpsyntax>
-<phpsyntax constant="M_SQRT2">1.41421356237309504880</phpsyntax>
-<phpsyntax constant="M_SQRT3">1.73205080756887729352</phpsyntax>
-<phpsyntax constant="M_SQRT1_2">0.70710678118654752440</phpsyntax>
-<phpsyntax constant="M_LNPI">1.14472988584940017414</phpsyntax>
-<phpsyntax constant="M_EULER">0.57721566490153286061</phpsyntax>
-<phpsyntax constant="MB_OVERLOAD_MAIL"></phpsyntax>
-<phpsyntax constant="MB_OVERLOAD_STRING"></phpsyntax>
-<phpsyntax constant="MB_OVERLOAD_REGEX"></phpsyntax>
-<phpsyntax constant="MCAL_SUNDAY"></phpsyntax>
-<phpsyntax constant="MCAL_MONDAY"></phpsyntax>
-<phpsyntax constant="MCAL_TUESDAY"></phpsyntax>
-<phpsyntax constant="MCAL_WEDNESDAY"></phpsyntax>
-<phpsyntax constant="MCAL_THURSDAY"></phpsyntax>
-<phpsyntax constant="MCAL_FRIDAY"></phpsyntax>
-<phpsyntax constant="MCAL_SATURDAY"></phpsyntax>
-<phpsyntax constant="MCAL_JANUARY"></phpsyntax>
-<phpsyntax constant="MCAL_FEBRUARY"></phpsyntax>
-<phpsyntax constant="MCAL_MARCH"></phpsyntax>
-<phpsyntax constant="MCAL_APRIL"></phpsyntax>
-<phpsyntax constant="MCAL_MAY"></phpsyntax>
-<phpsyntax constant="MCAL_JUNE"></phpsyntax>
-<phpsyntax constant="MCAL_JULY"></phpsyntax>
-<phpsyntax constant="MCAL_AUGUST"></phpsyntax>
-<phpsyntax constant="MCAL_SEPTEMBER"></phpsyntax>
-<phpsyntax constant="MCAL_OCTOBER"></phpsyntax>
-<phpsyntax constant="MCAL_NOVEMBER"></phpsyntax>
-<phpsyntax constant="MCAL_DECEMBER"></phpsyntax>
-<phpsyntax constant="MCAL_RECUR_NONE"></phpsyntax>
-<phpsyntax constant="MCAL_RECUR_DAILY"></phpsyntax>
-<phpsyntax constant="MCAL_RECUR_WEEKLY"></phpsyntax>
-<phpsyntax constant="MCAL_RECUR_MONTHLY_MDAY"></phpsyntax>
-<phpsyntax constant="MCAL_RECUR_MONTHLY_WDAY"></phpsyntax>
-<phpsyntax constant="MCAL_RECUR_YEARLY"></phpsyntax>
-<phpsyntax constant="MCAL_M_SUNDAY"></phpsyntax>
-<phpsyntax constant="MCAL_M_MONDAY"></phpsyntax>
-<phpsyntax constant="MCAL_M_TUESDAY"></phpsyntax>
-<phpsyntax constant="MCAL_M_WEDNESDAY"></phpsyntax>
-<phpsyntax constant="MCAL_M_THURSDAY"></phpsyntax>
-<phpsyntax constant="MCAL_M_FRIDAY"></phpsyntax>
-<phpsyntax constant="MCAL_M_SATURDAY"></phpsyntax>
-<phpsyntax constant="MCAL_M_WEEKDAYS"></phpsyntax>
-<phpsyntax constant="MCAL_M_WEEKEND"></phpsyntax>
-<phpsyntax constant="MCAL_M_ALLDAYS"></phpsyntax>
-<phpsyntax constant="MCRYPT_ENCRYPT"></phpsyntax>
-<phpsyntax constant="MCRYPT_DECRYPT"></phpsyntax>
-<phpsyntax constant="MCRYPT_DEV_RANDOM"></phpsyntax>
-<phpsyntax constant="MCRYPT_DEV_URANDOM"></phpsyntax>
-<phpsyntax constant="MCRYPT_RAND"></phpsyntax>
-<phpsyntax constant="MC_TRANTYPE"></phpsyntax>
-<phpsyntax constant="MC_USERNAME"></phpsyntax>
-<phpsyntax constant="MC_PASSWORD"></phpsyntax>
-<phpsyntax constant="MC_ACCOUNT"></phpsyntax>
-<phpsyntax constant="MC_TRACKDATA"></phpsyntax>
-<phpsyntax constant="MC_EXPDATE"></phpsyntax>
-<phpsyntax constant="MC_STREET"></phpsyntax>
-<phpsyntax constant="MC_ZIP"></phpsyntax>
-<phpsyntax constant="MC_CV"></phpsyntax>
-<phpsyntax constant="MC_COMMENTS"></phpsyntax>
-<phpsyntax constant="MC_CLERKID"></phpsyntax>
-<phpsyntax constant="MC_STATIONID"></phpsyntax>
-<phpsyntax constant="MC_APPRCODE"></phpsyntax>
-<phpsyntax constant="MC_AMOUNT"></phpsyntax>
-<phpsyntax constant="MC_PTRANNUM"></phpsyntax>
-<phpsyntax constant="MC_TTID"></phpsyntax>
-<phpsyntax constant="MC_USER"></phpsyntax>
-<phpsyntax constant="MC_PWD"></phpsyntax>
-<phpsyntax constant="MC_ACCT"></phpsyntax>
-<phpsyntax constant="MC_BDATE"></phpsyntax>
-<phpsyntax constant="MC_EDATE"></phpsyntax>
-<phpsyntax constant="MC_BATCH"></phpsyntax>
-<phpsyntax constant="MC_FILE"></phpsyntax>
-<phpsyntax constant="MC_ADMIN"></phpsyntax>
-<phpsyntax constant="MC_AUDITTYPE"></phpsyntax>
-<phpsyntax constant="MC_CUSTOM"></phpsyntax>
-<phpsyntax constant="MC_EXAMOUNT"></phpsyntax>
-<phpsyntax constant="MC_EXCHARGES"></phpsyntax>
-<phpsyntax constant="MC_RATE"></phpsyntax>
-<phpsyntax constant="MC_RENTERNAME"></phpsyntax>
-<phpsyntax constant="MC_RETURNCITY"></phpsyntax>
-<phpsyntax constant="MC_RETURNSTATE"></phpsyntax>
-<phpsyntax constant="MC_RETURNLOCATION"></phpsyntax>
-<phpsyntax constant="MC_PRIORITY"></phpsyntax>
-<phpsyntax constant="MC_INQUIRY"></phpsyntax>
-<phpsyntax constant="MC_CARDTYPES"></phpsyntax>
-<phpsyntax constant="MC_SUB"></phpsyntax>
-<phpsyntax constant="MC_MARKER"></phpsyntax>
-<phpsyntax constant="MC_DEVICETYPE"></phpsyntax>
-<phpsyntax constant="MC_ERRORCODE"></phpsyntax>
-<phpsyntax constant="MC_NEWBATCH"></phpsyntax>
-<phpsyntax constant="MC_CURR"></phpsyntax>
-<phpsyntax constant="MC_DESCMERCH"></phpsyntax>
-<phpsyntax constant="MC_DESCLOC"></phpsyntax>
-<phpsyntax constant="MC_ORIGTYPE"></phpsyntax>
-<phpsyntax constant="MC_PIN"></phpsyntax>
-<phpsyntax constant="MC_VOIDORIGTYPE"></phpsyntax>
-<phpsyntax constant="MC_TIMESTAMP"></phpsyntax>
-<phpsyntax constant="MC_PRIO_HIGH"></phpsyntax>
-<phpsyntax constant="MC_PRIO_NORMAL"></phpsyntax>
-<phpsyntax constant="MC_PRIO_LOW"></phpsyntax>
-<phpsyntax constant="MC_USER_PROC"></phpsyntax>
-<phpsyntax constant="MC_USER_USER"></phpsyntax>
-<phpsyntax constant="MC_USER_PWD"></phpsyntax>
-<phpsyntax constant="MC_USER_INDCODE"></phpsyntax>
-<phpsyntax constant="MC_USER_MERCHID"></phpsyntax>
-<phpsyntax constant="MC_USER_BANKID"></phpsyntax>
-<phpsyntax constant="MC_USER_TERMID"></phpsyntax>
-<phpsyntax constant="MC_USER_CLIENTNUM"></phpsyntax>
-<phpsyntax constant="MC_USER_STOREID"></phpsyntax>
-<phpsyntax constant="MC_USER_AGENTID"></phpsyntax>
-<phpsyntax constant="MC_USER_CHAINID"></phpsyntax>
-<phpsyntax constant="MC_USER_ZIPCODE"></phpsyntax>
-<phpsyntax constant="MC_USER_TIMEZONE"></phpsyntax>
-<phpsyntax constant="MC_USER_MERCHCAT"></phpsyntax>
-<phpsyntax constant="MC_USER_MERNAME"></phpsyntax>
-<phpsyntax constant="MC_USER_MERCHLOC"></phpsyntax>
-<phpsyntax constant="MC_USER_STATECODE"></phpsyntax>
-<phpsyntax constant="MC_USER_PHONE"></phpsyntax>
-<phpsyntax constant="MC_USER_SUB"></phpsyntax>
-<phpsyntax constant="MC_USER_CARDTYPES"></phpsyntax>
-<phpsyntax constant="MC_USER_MODE"></phpsyntax>
-<phpsyntax constant="MC_USER_VNUMBER"></phpsyntax>
-<phpsyntax constant="MC_USER_ROUTINGID"></phpsyntax>
-<phpsyntax constant="MC_USER_PPROPERTY"></phpsyntax>
-<phpsyntax constant="MC_USER_PID"></phpsyntax>
-<phpsyntax constant="MC_USER_PIDPWD"></phpsyntax>
-<phpsyntax constant="MC_USER_SMID"></phpsyntax>
-<phpsyntax constant="MC_USER_SMIDPWD"></phpsyntax>
-<phpsyntax constant="MC_USER_USDDIV"></phpsyntax>
-<phpsyntax constant="MC_USER_AUDDIV"></phpsyntax>
-<phpsyntax constant="MC_USER_DKKDIV"></phpsyntax>
-<phpsyntax constant="MC_USER_GBPDIV"></phpsyntax>
-<phpsyntax constant="MC_USER_HKDDIV"></phpsyntax>
-<phpsyntax constant="MC_USER_JPYDIV"></phpsyntax>
-<phpsyntax constant="MC_USER_NZDDIV"></phpsyntax>
-<phpsyntax constant="MC_USER_NOKDIV"></phpsyntax>
-<phpsyntax constant="MC_USER_SGDDIV"></phpsyntax>
-<phpsyntax constant="MC_USER_ZARDIV"></phpsyntax>
-<phpsyntax constant="MC_USER_SEKDIV"></phpsyntax>
-<phpsyntax constant="MC_USER_CHFDIV"></phpsyntax>
-<phpsyntax constant="MC_USER_CADDIV"></phpsyntax>
-<phpsyntax constant="MC_USER_DIVNUM"></phpsyntax>
-<phpsyntax constant="MC_CARD_VISA"></phpsyntax>
-<phpsyntax constant="MC_CARD_MC"></phpsyntax>
-<phpsyntax constant="MC_CARD_AMEX"></phpsyntax>
-<phpsyntax constant="MC_CARD_DISC"></phpsyntax>
-<phpsyntax constant="MC_CARD_JCB"></phpsyntax>
-<phpsyntax constant="MC_CARD_CB"></phpsyntax>
-<phpsyntax constant="MC_CARD_DC"></phpsyntax>
-<phpsyntax constant="MC_CARD_GIFT"></phpsyntax>
-<phpsyntax constant="MC_CARD_OTHER"></phpsyntax>
-<phpsyntax constant="MC_CARD_ALL"></phpsyntax>
-<phpsyntax constant="MC_MODE_AUTH"></phpsyntax>
-<phpsyntax constant="MC_MODE_SETTLE"></phpsyntax>
-<phpsyntax constant="MC_MODE_BOTH"></phpsyntax>
-<phpsyntax constant="MC_MODE_ALL"></phpsyntax>
-<phpsyntax constant="MC_EXCHARGES_REST"></phpsyntax>
-<phpsyntax constant="MC_EXCHARGES_GIFT"></phpsyntax>
-<phpsyntax constant="MC_EXCHARGES_MINI"></phpsyntax>
-<phpsyntax constant="MC_EXCHARGES_TELE"></phpsyntax>
-<phpsyntax constant="MC_EXCHARGES_OTHER"></phpsyntax>
-<phpsyntax constant="MC_EXCHARGES_LAUND"></phpsyntax>
-<phpsyntax constant="MC_EXCHARGES_NONE"></phpsyntax>
-<phpsyntax constant="MC_EXCHARGES_GAS"></phpsyntax>
-<phpsyntax constant="MC_EXCHARGES_MILE"></phpsyntax>
-<phpsyntax constant="MC_EXCHARGES_LATE"></phpsyntax>
-<phpsyntax constant="MC_EXCHARGES_1WAY"></phpsyntax>
-<phpsyntax constant="MC_EXCHARGES_VIOL"></phpsyntax>
-<phpsyntax constant="MC_TRAN_SALE"></phpsyntax>
-<phpsyntax constant="MC_TRAN_REDEMPTION"></phpsyntax>
-<phpsyntax constant="MC_TRAN_PREAUTH"></phpsyntax>
-<phpsyntax constant="MC_TRAN_VOID"></phpsyntax>
-<phpsyntax constant="MC_TRAN_PREAUTHCOMPLETE"></phpsyntax>
-<phpsyntax constant="MC_TRAN_FORCE"></phpsyntax>
-<phpsyntax constant="MC_TRAN_OVERRIDE"></phpsyntax>
-<phpsyntax constant="MC_TRAN_RETURN"></phpsyntax>
-<phpsyntax constant="MC_TRAN_RELOAD"></phpsyntax>
-<phpsyntax constant="MC_TRAN_CREDIT"></phpsyntax>
-<phpsyntax constant="MC_TRAN_SETTLE"></phpsyntax>
-<phpsyntax constant="MC_TRAN_INCREMENTAL"></phpsyntax>
-<phpsyntax constant="MC_TRAN_REVERSAL"></phpsyntax>
-<phpsyntax constant="MC_TRAN_ACTIVATE"></phpsyntax>
-<phpsyntax constant="MC_TRAN_BALANCEINQ"></phpsyntax>
-<phpsyntax constant="MC_TRAN_CASHOUT"></phpsyntax>
-<phpsyntax constant="MC_TRAN_TOREVERSAL"></phpsyntax>
-<phpsyntax constant="MC_TRAN_SETTLERFR"></phpsyntax>
-<phpsyntax constant="MC_TRAN_ISSUE"></phpsyntax>
-<phpsyntax constant="MC_TRAN_TIP"></phpsyntax>
-<phpsyntax constant="MC_TRAN_MERCHRETURN"></phpsyntax>
-<phpsyntax constant="MC_TRAN_IVRREQ"></phpsyntax>
-<phpsyntax constant="MC_TRAN_IVRRESP"></phpsyntax>
-<phpsyntax constant="MC_TRAN_ADMIN"></phpsyntax>
-<phpsyntax constant="MC_TRAN_PING"></phpsyntax>
-<phpsyntax constant="MC_TRAN_CHKPWD"></phpsyntax>
-<phpsyntax constant="MC_TRAN_CHNGPWD"></phpsyntax>
-<phpsyntax constant="MC_TRAN_LISTSTATS"></phpsyntax>
-<phpsyntax constant="MC_TRAN_LISTUSERS"></phpsyntax>
-<phpsyntax constant="MC_TRAN_GETUSERINFO"></phpsyntax>
-<phpsyntax constant="MC_TRAN_ADDUSER"></phpsyntax>
-<phpsyntax constant="MC_TRAN_EDITUSER"></phpsyntax>
-<phpsyntax constant="MC_TRAN_DELUSER"></phpsyntax>
-<phpsyntax constant="MC_TRAN_ENABLEUSER"></phpsyntax>
-<phpsyntax constant="MC_TRAN_DISABLEUSER"></phpsyntax>
-<phpsyntax constant="MC_TRAN_IMPORT"></phpsyntax>
-<phpsyntax constant="MC_TRAN_EXPORT"></phpsyntax>
-<phpsyntax constant="MC_TRAN_ERRORLOG"></phpsyntax>
-<phpsyntax constant="MC_TRAN_CLEARERRORLOG"></phpsyntax>
-<phpsyntax constant="MC_TRAN_GETSUBACCTS"></phpsyntax>
-<phpsyntax constant="MC_ADMIN_GUT"></phpsyntax>
-<phpsyntax constant="MC_ADMIN_GL"></phpsyntax>
-<phpsyntax constant="MC_ADMIN_GFT"></phpsyntax>
-<phpsyntax constant="MC_ADMIN_BT"></phpsyntax>
-<phpsyntax constant="MC_ADMIN_UB"></phpsyntax>
-<phpsyntax constant="MC_ADMIN_QC"></phpsyntax>
-<phpsyntax constant="MC_ADMIN_RS"></phpsyntax>
-<phpsyntax constant="MC_ADMIN_CTH"></phpsyntax>
-<phpsyntax constant="MC_ADMIN_CFH"></phpsyntax>
-<phpsyntax constant="MC_ADMIN_FORCESETTLE"></phpsyntax>
-<phpsyntax constant="MC_ADMIN_SETBATCHNUM"></phpsyntax>
-<phpsyntax constant="MC_ADMIN_RENUMBERBATCH"></phpsyntax>
-<phpsyntax constant="MC_ADMIN_FIELDEDIT"></phpsyntax>
-<phpsyntax constant="MC_ADMIN_CLOSEBATCH"></phpsyntax>
-<phpsyntax constant="MCVE_UNUSED"></phpsyntax>
-<phpsyntax constant="MCVE_NEW"></phpsyntax>
-<phpsyntax constant="MCVE_PENDING"></phpsyntax>
-<phpsyntax constant="MCVE_DONE"></phpsyntax>
-<phpsyntax constant="MCVE_GOOD"></phpsyntax>
-<phpsyntax constant="MCVE_BAD"></phpsyntax>
-<phpsyntax constant="MCVE_STREET"></phpsyntax>
-<phpsyntax constant="MCVE_ZIP"></phpsyntax>
-<phpsyntax constant="MCVE_UNKNOWN"></phpsyntax>
-<phpsyntax constant="MCVE_ERROR"></phpsyntax>
-<phpsyntax constant="MCVE_FAIL"></phpsyntax>
-<phpsyntax constant="MCVE_SUCCESS"></phpsyntax>
-<phpsyntax constant="MCVE_AUTH"></phpsyntax>
-<phpsyntax constant="MCVE_DENY"></phpsyntax>
-<phpsyntax constant="MCVE_CALL"></phpsyntax>
-<phpsyntax constant="MCVE_DUPL"></phpsyntax>
-<phpsyntax constant="MCVE_PKUP"></phpsyntax>
-<phpsyntax constant="MCVE_RETRY"></phpsyntax>
-<phpsyntax constant="MCVE_SETUP"></phpsyntax>
-<phpsyntax constant="MCVE_TIMEOUT"></phpsyntax>
-<phpsyntax constant="MCVE_SALE"></phpsyntax>
-<phpsyntax constant="MCVE_PREAUTH"></phpsyntax>
-<phpsyntax constant="MCVE_FORCE"></phpsyntax>
-<phpsyntax constant="MCVE_OVERRIDE"></phpsyntax>
-<phpsyntax constant="MCVE_RETURN"></phpsyntax>
-<phpsyntax constant="MCVE_SETTLE"></phpsyntax>
-<phpsyntax constant="MCVE_PROC"></phpsyntax>
-<phpsyntax constant="MCVE_USER"></phpsyntax>
-<phpsyntax constant="MCVE_PWD"></phpsyntax>
-<phpsyntax constant="MCVE_INDCODE"></phpsyntax>
-<phpsyntax constant="MCVE_MERCHID"></phpsyntax>
-<phpsyntax constant="MCVE_BANKID"></phpsyntax>
-<phpsyntax constant="MCVE_TERMID"></phpsyntax>
-<phpsyntax constant="MCVE_CLIENTNUM"></phpsyntax>
-<phpsyntax constant="MCVE_STOREID"></phpsyntax>
-<phpsyntax constant="MCVE_AGENTID"></phpsyntax>
-<phpsyntax constant="MCVE_CHAINID"></phpsyntax>
-<phpsyntax constant="MCVE_ZIPCODE"></phpsyntax>
-<phpsyntax constant="MCVE_TIMEZONE"></phpsyntax>
-<phpsyntax constant="MCVE_MERCHCAT"></phpsyntax>
-<phpsyntax constant="MCVE_MERNAME"></phpsyntax>
-<phpsyntax constant="MCVE_MERCHLOC"></phpsyntax>
-<phpsyntax constant="MCVE_STATECODE"></phpsyntax>
-<phpsyntax constant="MCVE_SERVICEPHONE"></phpsyntax>
-<phpsyntax constant="MHASH_MD5"></phpsyntax>
-<phpsyntax constant="MHASH_SHA1"></phpsyntax>
-<phpsyntax constant="MHASH_HAVAL256"></phpsyntax>
-<phpsyntax constant="MHASH_HAVAL192"></phpsyntax>
-<phpsyntax constant="MHASH_HAVAL160"></phpsyntax>
-<phpsyntax constant="MHASH_HAVAL128"></phpsyntax>
-<phpsyntax constant="MHASH_RIPEMD160"></phpsyntax>
-<phpsyntax constant="MHASH_GOST"></phpsyntax>
-<phpsyntax constant="MHASH_TIGER"></phpsyntax>
-<phpsyntax constant="MHASH_CRC32"></phpsyntax>
-<phpsyntax constant="MHASH_CRC32B"></phpsyntax>
-<phpsyntax constant="SWFBUTTON_HIT"></phpsyntax>
-<phpsyntax constant="SWFBUTTON_DOWN"></phpsyntax>
-<phpsyntax constant="SWFBUTTON_OVER"></phpsyntax>
-<phpsyntax constant="SWFBUTTON_UP"></phpsyntax>
-<phpsyntax constant="SWFBUTTON_MOUSEUPOUTSIDE"></phpsyntax>
-<phpsyntax constant="SWFBUTTON_DRAGOVER"></phpsyntax>
-<phpsyntax constant="SWFBUTTON_DRAGOUT"></phpsyntax>
-<phpsyntax constant="SWFBUTTON_MOUSEUP"></phpsyntax>
-<phpsyntax constant="SWFBUTTON_MOUSEDOWN"></phpsyntax>
-<phpsyntax constant="SWFBUTTON_MOUSEOUT"></phpsyntax>
-<phpsyntax constant="SWFBUTTON_MOUSEOVER"></phpsyntax>
-<phpsyntax constant="SWFFILL_RADIAL_GRADIENT"></phpsyntax>
-<phpsyntax constant="SWFFILL_LINEAR_GRADIENT"></phpsyntax>
-<phpsyntax constant="SWFFILL_TILED_BITMAP"></phpsyntax>
-<phpsyntax constant="SWFFILL_CLIPPED_BITMAP"></phpsyntax>
-<phpsyntax constant="SWFTEXTFIELD_HASLENGTH"></phpsyntax>
-<phpsyntax constant="SWFTEXTFIELD_NOEDIT"></phpsyntax>
-<phpsyntax constant="SWFTEXTFIELD_PASSWORD"></phpsyntax>
-<phpsyntax constant="SWFTEXTFIELD_MULTILINE"></phpsyntax>
-<phpsyntax constant="SWFTEXTFIELD_WORDWRAP"></phpsyntax>
-<phpsyntax constant="SWFTEXTFIELD_DRAWBOX"></phpsyntax>
-<phpsyntax constant="SWFTEXTFIELD_NOSELECT"></phpsyntax>
-<phpsyntax constant="SWFTEXTFIELD_HTML"></phpsyntax>
-<phpsyntax constant="SWFTEXTFIELD_ALIGN_LEFT"></phpsyntax>
-<phpsyntax constant="SWFTEXTFIELD_ALIGN_RIGHT"></phpsyntax>
-<phpsyntax constant="SWFTEXTFIELD_ALIGN_CENTER"></phpsyntax>
-<phpsyntax constant="SWFTEXTFIELD_ALIGN_JUSTIFY"></phpsyntax>
-<phpsyntax constant="SWFACTION_ONLOAD"></phpsyntax>
-<phpsyntax constant="SWFACTION_ENTERFRAME"></phpsyntax>
-<phpsyntax constant="SWFACTION_UNLOAD"></phpsyntax>
-<phpsyntax constant="SWFACTION_MOUSEMOVE"></phpsyntax>
-<phpsyntax constant="SWFACTION_MOUSEDOWN"></phpsyntax>
-<phpsyntax constant="SWFACTION_MOUSEUP"></phpsyntax>
-<phpsyntax constant="SWFACTION_KEYDOWN"></phpsyntax>
-<phpsyntax constant="SWFACTION_KEYUP"></phpsyntax>
-<phpsyntax constant="SWFACTION_DATA"></phpsyntax>
-<phpsyntax constant="CONNECTION_ABORTED"></phpsyntax>
-<phpsyntax constant="CONNECTION_NORMAL"></phpsyntax>
-<phpsyntax constant="CONNECTION_TIMEOUT"></phpsyntax>
-<phpsyntax constant="UDM_FIELD_URLID"></phpsyntax>
-<phpsyntax constant="UDM_FIELD_URL"></phpsyntax>
-<phpsyntax constant="UDM_FIELD_CONTENT"></phpsyntax>
-<phpsyntax constant="UDM_FIELD_TITLE"></phpsyntax>
-<phpsyntax constant="UDM_FIELD_KEYWORDS"></phpsyntax>
-<phpsyntax constant="UDM_FIELD_DESC"></phpsyntax>
-<phpsyntax constant="UDM_FIELD_DESCRIPTION"></phpsyntax>
-<phpsyntax constant="UDM_FIELD_TEXT"></phpsyntax>
-<phpsyntax constant="UDM_FIELD_SIZE"></phpsyntax>
-<phpsyntax constant="UDM_FIELD_RATING"></phpsyntax>
-<phpsyntax constant="UDM_FIELD_SCORE"></phpsyntax>
-<phpsyntax constant="UDM_FIELD_MODIFIED"></phpsyntax>
-<phpsyntax constant="UDM_FIELD_ORDER"></phpsyntax>
-<phpsyntax constant="UDM_FIELD_CRC"></phpsyntax>
-<phpsyntax constant="UDM_FIELD_CATEGORY"></phpsyntax>
-<phpsyntax constant="UDM_FIELD_LANG"></phpsyntax>
-<phpsyntax constant="UDM_FIELD_CHARSET"></phpsyntax>
-<phpsyntax constant="UDM_PARAM_PAGE_SIZE"></phpsyntax>
-<phpsyntax constant="UDM_PARAM_PAGE_NUM"></phpsyntax>
-<phpsyntax constant="UDM_PARAM_SEARCH_MODE"></phpsyntax>
-<phpsyntax constant="UDM_PARAM_CACHE_MODE"></phpsyntax>
-<phpsyntax constant="UDM_PARAM_TRACK_MODE"></phpsyntax>
-<phpsyntax constant="UDM_PARAM_PHRASE_MODE"></phpsyntax>
-<phpsyntax constant="UDM_PARAM_CHARSET"></phpsyntax>
-<phpsyntax constant="UDM_PARAM_LOCAL_CHARSET"></phpsyntax>
-<phpsyntax constant="UDM_PARAM_BROWSER_CHARSET"></phpsyntax>
-<phpsyntax constant="UDM_PARAM_STOPTABLE"></phpsyntax>
-<phpsyntax constant="UDM_PARAM_STOP_TABLE"></phpsyntax>
-<phpsyntax constant="UDM_PARAM_STOPFILE"></phpsyntax>
-<phpsyntax constant="UDM_PARAM_STOP_FILE"></phpsyntax>
-<phpsyntax constant="UDM_PARAM_WEIGHT_FACTOR"></phpsyntax>
-<phpsyntax constant="UDM_PARAM_WORD_MATCH"></phpsyntax>
-<phpsyntax constant="UDM_PARAM_MAX_WORD_LEN"></phpsyntax>
-<phpsyntax constant="UDM_PARAM_MAX_WORDLEN"></phpsyntax>
-<phpsyntax constant="UDM_PARAM_MIN_WORD_LEN"></phpsyntax>
-<phpsyntax constant="UDM_PARAM_MIN_WORDLEN"></phpsyntax>
-<phpsyntax constant="UDM_PARAM_ISPELL_PREFIXES"></phpsyntax>
-<phpsyntax constant="UDM_PARAM_ISPELL_PREFIX"></phpsyntax>
-<phpsyntax constant="UDM_PARAM_PREFIXES"></phpsyntax>
-<phpsyntax constant="UDM_PARAM_PREFIX"></phpsyntax>
-<phpsyntax constant="UDM_PARAM_CROSS_WORDS"></phpsyntax>
-<phpsyntax constant="UDM_PARAM_CROSSWORDS"></phpsyntax>
-<phpsyntax constant="UDM_PARAM_VARDIR"></phpsyntax>
-<phpsyntax constant="UDM_PARAM_DATADIR"></phpsyntax>
-<phpsyntax constant="UDM_PARAM_HLBEG"></phpsyntax>
-<phpsyntax constant="UDM_PARAM_HLEND"></phpsyntax>
-<phpsyntax constant="UDM_PARAM_SYNONYM"></phpsyntax>
-<phpsyntax constant="UDM_PARAM_SEARCHD"></phpsyntax>
-<phpsyntax constant="UDM_PARAM_QSTRING"></phpsyntax>
-<phpsyntax constant="UDM_PARAM_REMOTE_ADDR"></phpsyntax>
-<phpsyntax constant="UDM_LIMIT_CAT"></phpsyntax>
-<phpsyntax constant="UDM_LIMIT_URL"></phpsyntax>
-<phpsyntax constant="UDM_LIMIT_TAG"></phpsyntax>
-<phpsyntax constant="UDM_LIMIT_LANG"></phpsyntax>
-<phpsyntax constant="UDM_LIMIT_DATE"></phpsyntax>
-<phpsyntax constant="UDM_PARAM_FOUND"></phpsyntax>
-<phpsyntax constant="UDM_PARAM_NUM_ROWS"></phpsyntax>
-<phpsyntax constant="UDM_PARAM_WORDINFO"></phpsyntax>
-<phpsyntax constant="UDM_PARAM_WORD_INFO"></phpsyntax>
-<phpsyntax constant="UDM_PARAM_SEARCHTIME"></phpsyntax>
-<phpsyntax constant="UDM_PARAM_SEARCH_TIME"></phpsyntax>
-<phpsyntax constant="UDM_PARAM_FIRST_DOC"></phpsyntax>
-<phpsyntax constant="UDM_PARAM_LAST_DOC"></phpsyntax>
-<phpsyntax constant="UDM_MODE_ALL"></phpsyntax>
-<phpsyntax constant="UDM_MODE_ANY"></phpsyntax>
-<phpsyntax constant="UDM_MODE_BOOL"></phpsyntax>
-<phpsyntax constant="UDM_MODE_PHRASE"></phpsyntax>
-<phpsyntax constant="UDM_CACHE_ENABLED"></phpsyntax>
-<phpsyntax constant="UDM_CACHE_DISABLED"></phpsyntax>
-<phpsyntax constant="UDM_TRACK_ENABLED"></phpsyntax>
-<phpsyntax constant="UDM_TRACK_DISABLED"></phpsyntax>
-<phpsyntax constant="UDM_PHRASE_ENABLED"></phpsyntax>
-<phpsyntax constant="UDM_PHRASE_DISABLED"></phpsyntax>
-<phpsyntax constant="UDM_CROSS_WORDS_ENABLED"></phpsyntax>
-<phpsyntax constant="UDM_CROSSWORDS_ENABLED"></phpsyntax>
-<phpsyntax constant="UDM_CROSS_WORDS_DISABLED"></phpsyntax>
-<phpsyntax constant="UDM_CROSSWORDS_DISABLED"></phpsyntax>
-<phpsyntax constant="UDM_PREFIXES_ENABLED"></phpsyntax>
-<phpsyntax constant="UDM_PREFIX_ENABLED"></phpsyntax>
-<phpsyntax constant="UDM_ISPELL_PREFIXES_ENABLED"></phpsyntax>
-<phpsyntax constant="UDM_ISPELL_PREFIX_ENABLED"></phpsyntax>
-<phpsyntax constant="UDM_PREFIXES_DISABLED"></phpsyntax>
-<phpsyntax constant="UDM_PREFIX_DISABLED"></phpsyntax>
-<phpsyntax constant="UDM_ISPELL_PREFIXES_DISABLED"></phpsyntax>
-<phpsyntax constant="UDM_ISPELL_PREFIX_DISABLED"></phpsyntax>
-<phpsyntax constant="UDM_ISPELL_TYPE_AFFIX"></phpsyntax>
-<phpsyntax constant="UDM_ISPELL_TYPE_SPELL"></phpsyntax>
-<phpsyntax constant="UDM_ISPELL_TYPE_DB"></phpsyntax>
-<phpsyntax constant="UDM_ISPELL_TYPE_SERVER"></phpsyntax>
-<phpsyntax constant="UDM_MATCH_WORD"></phpsyntax>
-<phpsyntax constant="UDM_MATCH_BEGIN"></phpsyntax>
-<phpsyntax constant="UDM_MATCH_SUBSTR"></phpsyntax>
-<phpsyntax constant="UDM_MATCH_END"></phpsyntax>
-<phpsyntax constant="MSQL_ASSOC"></phpsyntax>
-<phpsyntax constant="MSQL_NUM"></phpsyntax>
-<phpsyntax constant="MSQL_BOTH"></phpsyntax>
-<phpsyntax constant="MSSQL_ASSOC"></phpsyntax>
-<phpsyntax constant="MSSQL_NUM"></phpsyntax>
-<phpsyntax constant="MSSQL_BOTH"></phpsyntax>
-<phpsyntax constant="SQLTEXT"></phpsyntax>
-<phpsyntax constant="SQLVARCHAR"></phpsyntax>
-<phpsyntax constant="SQLCHAR"></phpsyntax>
-<phpsyntax constant="SQLINT1"></phpsyntax>
-<phpsyntax constant="SQLINT2"></phpsyntax>
-<phpsyntax constant="SQLINT4"></phpsyntax>
-<phpsyntax constant="SQLBIT"></phpsyntax>
-<phpsyntax constant="SQLFLT8"></phpsyntax>
-<phpsyntax constant="MYSQL_CLIENT_COMPRESS">Use compression protocol</phpsyntax>
-<phpsyntax constant="MYSQL_CLIENT_IGNORE_SPACE">Allow space after function names</phpsyntax>
-<phpsyntax constant="MYSQL_CLIENT_INTERACTIVE">Allow interactive_timeout seconds (instead of wait_timeout) of
-        inactivity before closing the connection.</phpsyntax>
-<phpsyntax constant="MYSQL_ASSOC">Columns are returned into the array having the fieldname as the array
-       index.</phpsyntax>
-<phpsyntax constant="MYSQL_BOTH">Columns are returned into the array having both a numerical index
-       and the fieldname as the array index.</phpsyntax>
-<phpsyntax constant="MYSQL_NUM">Columns are returned into the array having a numerical index to the
-       fields. This index starts with 0, the first field in the result.</phpsyntax>
-<phpsyntax constant="MYSQLI_READ_DEFAULT_GROUP">Read options from the named group from `my.cnf' or the file specified with MYSQLI_READ_DEFAULT_FILE</phpsyntax>
-<phpsyntax constant="MYSQLI_READ_DEFAULT_FILE">Read options from the named option file instead of from my.cnf</phpsyntax>
-<phpsyntax constant="MYSQLI_OPT_CONNECT_TIMEOUT">Connect timeout in seconds</phpsyntax>
-<phpsyntax constant="MYSQLI_OPT_LOCAL_INFILE">Enables command LOAD LOCAL INFILE</phpsyntax>
-<phpsyntax constant="MYSQLI_INIT_COMMAND">Command to execute when connecting to MySQL server. Will automatically be re-executed when reconnecting.</phpsyntax>
-<phpsyntax constant="MYSQLI_CLIENT_SSL">Use SSL (encrypted protocol). This option should not be set by application programs; 
-       it is set internally in the MySQL client library</phpsyntax>
-<phpsyntax constant="MYSQLI_CLIENT_COMPRESS">Use compression protocol</phpsyntax>
-<phpsyntax constant="MYSQLI_CLIENT_INTERACTIVE">Allow interactive_timeout seconds (instead of wait_timeout seconds) of inactivity before closing the connection. The client's session wait_timeout variable will be set to the value of the session interactive_timeout variable.</phpsyntax>
-<phpsyntax constant="MYSQLI_CLIENT_IGNORE_SPACE">Allow spaces after function names. Makes all functions names reserved words.</phpsyntax>
-<phpsyntax constant="MYSQLI_CLIENT_NO_SCHEMA">Don't allow the db_name.tbl_name.col_name syntax.</phpsyntax>
-<phpsyntax constant="MYSQLI_CLIENT_MULTI_QUERIES"></phpsyntax>
-<phpsyntax constant="MYSQLI_STORE_RESULT">For using buffered resultsets</phpsyntax>
-<phpsyntax constant="MYSQLI_USE_RESULT">For using unbuffered resultsets</phpsyntax>
-<phpsyntax constant="MYSQLI_ASSOC">Columns are returned into the array having the fieldname as the array index.</phpsyntax>
-<phpsyntax constant="MYSQLI_NUM">Columns are returned into the array having an enumerated index.</phpsyntax>
-<phpsyntax constant="MYSQLI_BOTH">Columns are returned into the array having both a numerical index and the fieldname as the associative index.</phpsyntax>
-<phpsyntax constant="MYSQLI_NOT_NULL_FLAG">Indicates that a field is defined as NOT NULL</phpsyntax>
-<phpsyntax constant="MYSQLI_PRI_KEY_FLAG">Field is part of a primary index</phpsyntax>
-<phpsyntax constant="MYSQLI_UNIQUE_KEY_FLAG">Field is part of an unique index.</phpsyntax>
-<phpsyntax constant="MYSQLI_MULTIPLE_KEY_FLAG">Field is part of an index.</phpsyntax>
-<phpsyntax constant="MYSQLI_BLOB_FLAG">Field is defined as BLOB</phpsyntax>
-<phpsyntax constant="MYSQLI_UNSIGNED_FLAG">Field is defined as UNSIGNED</phpsyntax>
-<phpsyntax constant="MYSQLI_ZEROFILL_FLAG">Field is defined as ZEROFILL</phpsyntax>
-<phpsyntax constant="MYSQLI_AUTO_INCREMENT_FLAG">Field is defined as AUTO_INCREMENT</phpsyntax>
-<phpsyntax constant="MYSQLI_TIMESTAMP_FLAG">Field is defined as TIMESTAMP</phpsyntax>
-<phpsyntax constant="MYSQLI_SET_FLAG">Field is defined as SET</phpsyntax>
-<phpsyntax constant="MYSQLI_NUM_FLAG">Field is defined as NUMERIC</phpsyntax>
-<phpsyntax constant="MYSQLI_PART_KEY_FLAG">Field is part of an multi-index</phpsyntax>
-<phpsyntax constant="MYSQLI_GROUP_FLAG">Field is part of GROUP BY</phpsyntax>
-<phpsyntax constant="MYSQLI_TYPE_DECIMAL">Field is defined as DECIMAL</phpsyntax>
-<phpsyntax constant="MYSQLI_TYPE_TINY">Field is defined as TINYINT</phpsyntax>
-<phpsyntax constant="MYSQLI_TYPE_SHORT">Field is defined as INT</phpsyntax>
-<phpsyntax constant="MYSQLI_TYPE_LONG">Field is defined as INT</phpsyntax>
-<phpsyntax constant="MYSQLI_TYPE_FLOAT">Field is defined as FLOAT</phpsyntax>
-<phpsyntax constant="MYSQLI_TYPE_DOUBLE">Field is defined as DOUBLE</phpsyntax>
-<phpsyntax constant="MYSQLI_TYPE_NULL">Field is defined as DEFAULT NULL</phpsyntax>
-<phpsyntax constant="MYSQLI_TYPE_TIMESTAMP">Field is defined as TIMESTAMP</phpsyntax>
-<phpsyntax constant="MYSQLI_TYPE_LONGLONG">Field is defined as BIGINT</phpsyntax>
-<phpsyntax constant="MYSQLI_TYPE_INT24">Field is defined as MEDIUMINT</phpsyntax>
-<phpsyntax constant="MYSQLI_TYPE_DATE">Field is defined as DATE</phpsyntax>
-<phpsyntax constant="MYSQLI_TYPE_TIME">Field is defined as TIME</phpsyntax>
-<phpsyntax constant="MYSQLI_TYPE_DATETIME">Field is defined as DATETIME</phpsyntax>
-<phpsyntax constant="MYSQLI_TYPE_YEAR">Field is defined as YEAR</phpsyntax>
-<phpsyntax constant="MYSQLI_TYPE_NEWDATE">Field is defined as DATE</phpsyntax>
-<phpsyntax constant="MYSQLI_TYPE_ENUM">Field is defined as ENUM</phpsyntax>
-<phpsyntax constant="MYSQLI_TYPE_SET">Field is defined as SET</phpsyntax>
-<phpsyntax constant="MYSQLI_TYPE_TINY_BLOB">Field is defined as TINYBLOB</phpsyntax>
-<phpsyntax constant="MYSQLI_TYPE_MEDIUM_BLOB">Field is defined as MEDIUMBLOB</phpsyntax>
-<phpsyntax constant="MYSQLI_TYPE_LONG_BLOB">Field is defined as LONGBLOB</phpsyntax>
-<phpsyntax constant="MYSQLI_TYPE_BLOB">Field is defined as BLOB</phpsyntax>
-<phpsyntax constant="MYSQLI_TYPE_STRING">Field is defined as VARCHAR</phpsyntax>
-<phpsyntax constant="MYSQLI_TYPE_CHAR">Field is defined as CHAR</phpsyntax>
-<phpsyntax constant="MYSQLI_TYPE_GEOMETRY">Field is defined as GEOMETRY</phpsyntax>
-<phpsyntax constant="MYSQLI_NEED_DATA">More data available for bind variable</phpsyntax>
-<phpsyntax constant="MYSQLI_NO_DATA">No more data available for bind variable</phpsyntax>
-<phpsyntax constant="NCURSES_COLOR_BLACK">no color (black)</phpsyntax>
-<phpsyntax constant="NCURSES_COLOR_WHITE">white</phpsyntax>
-<phpsyntax constant="NCURSES_COLOR_RED">red - supported when terminal is in color mode</phpsyntax>
-<phpsyntax constant="NCURSES_COLOR_GREEN">green - supported when terminal is in color mod</phpsyntax>
-<phpsyntax constant="NCURSES_COLOR_YELLOW">yellow - supported when terminal is in color mod</phpsyntax>
-<phpsyntax constant="NCURSES_COLOR_BLUE">blue - supported when terminal is in color mod</phpsyntax>
-<phpsyntax constant="NCURSES_COLOR_CYAN">cyan - supported when terminal is in color mod</phpsyntax>
-<phpsyntax constant="NCURSES_COLOR_MAGENTA">magenta - supported when terminal is in color mod</phpsyntax>
-<phpsyntax constant="NCURSES_KEY_DOWN">down arrow</phpsyntax>
-<phpsyntax constant="NCURSES_KEY_UP">up arrow</phpsyntax>
-<phpsyntax constant="NCURSES_KEY_LEFT">left arrow</phpsyntax>
-<phpsyntax constant="NCURSES_KEY_RIGHT">right arrow</phpsyntax>
-<phpsyntax constant="NCURSES_KEY_HOME">home key (upward+left arrow)</phpsyntax>
-<phpsyntax constant="NCURSES_KEY_BACKSPACE">backspace</phpsyntax>
-<phpsyntax constant="NCURSES_KEY_DL">delete line</phpsyntax>
-<phpsyntax constant="NCURSES_KEY_IL">insert line</phpsyntax>
-<phpsyntax constant="NCURSES_KEY_DC">delete character</phpsyntax>
-<phpsyntax constant="NCURSES_KEY_IC">insert char or enter insert mode</phpsyntax>
-<phpsyntax constant="NCURSES_KEY_EIC">exit insert char mode</phpsyntax>
-<phpsyntax constant="NCURSES_KEY_CLEAR">clear screen</phpsyntax>
-<phpsyntax constant="NCURSES_KEY_EOS">clear to end of screen</phpsyntax>
-<phpsyntax constant="NCURSES_KEY_EOL">clear to end of line</phpsyntax>
-<phpsyntax constant="NCURSES_KEY_SF">scroll one line forward</phpsyntax>
-<phpsyntax constant="NCURSES_KEY_SR">scroll one line backward</phpsyntax>
-<phpsyntax constant="NCURSES_KEY_NPAGE">next page</phpsyntax>
-<phpsyntax constant="NCURSES_KEY_PPAGE">previous page</phpsyntax>
-<phpsyntax constant="NCURSES_KEY_STAB">set tab</phpsyntax>
-<phpsyntax constant="NCURSES_KEY_CTAB">clear tab</phpsyntax>
-<phpsyntax constant="NCURSES_KEY_CATAB">clear all tabs</phpsyntax>
-<phpsyntax constant="NCURSES_KEY_SRESET">soft (partial) reset</phpsyntax>
-<phpsyntax constant="NCURSES_KEY_RESET">reset or hard reset</phpsyntax>
-<phpsyntax constant="NCURSES_KEY_PRINT">print</phpsyntax>
-<phpsyntax constant="NCURSES_KEY_LL">lower left</phpsyntax>
-<phpsyntax constant="NCURSES_KEY_A1">upper left of keypad</phpsyntax>
-<phpsyntax constant="NCURSES_KEY_A3">upper right of keypad</phpsyntax>
-<phpsyntax constant="NCURSES_KEY_B2">center of keypad</phpsyntax>
-<phpsyntax constant="NCURSES_KEY_C1">lower left of keypad</phpsyntax>
-<phpsyntax constant="NCURSES_KEY_C3">lower right of keypad</phpsyntax>
-<phpsyntax constant="NCURSES_KEY_BTAB">back tab</phpsyntax>
-<phpsyntax constant="NCURSES_KEY_BEG">beginning</phpsyntax>
-<phpsyntax constant="NCURSES_KEY_CANCEL">cancel</phpsyntax>
-<phpsyntax constant="NCURSES_KEY_CLOSE">close</phpsyntax>
-<phpsyntax constant="NCURSES_KEY_COMMAND">cmd (command)</phpsyntax>
-<phpsyntax constant="NCURSES_KEY_COPY">copy</phpsyntax>
-<phpsyntax constant="NCURSES_KEY_CREATE">create</phpsyntax>
-<phpsyntax constant="NCURSES_KEY_END">end</phpsyntax>
-<phpsyntax constant="NCURSES_KEY_EXIT">exit</phpsyntax>
-<phpsyntax constant="NCURSES_KEY_FIND">find</phpsyntax>
-<phpsyntax constant="NCURSES_KEY_HELP">help</phpsyntax>
-<phpsyntax constant="NCURSES_KEY_MARK">mark</phpsyntax>
-<phpsyntax constant="NCURSES_KEY_MESSAGE">message</phpsyntax>
-<phpsyntax constant="NCURSES_KEY_MOVE">move</phpsyntax>
-<phpsyntax constant="NCURSES_KEY_NEXT">next</phpsyntax>
-<phpsyntax constant="NCURSES_KEY_OPEN">open</phpsyntax>
-<phpsyntax constant="NCURSES_KEY_OPTIONS">options</phpsyntax>
-<phpsyntax constant="NCURSES_KEY_PREVIOUS">previous</phpsyntax>
-<phpsyntax constant="NCURSES_KEY_REDO">redo</phpsyntax>
-<phpsyntax constant="NCURSES_KEY_REFERENCE">ref (reference)</phpsyntax>
-<phpsyntax constant="NCURSES_KEY_REFRESH">refresh</phpsyntax>
-<phpsyntax constant="NCURSES_KEY_REPLACE">replace</phpsyntax>
-<phpsyntax constant="NCURSES_KEY_RESTART">restart</phpsyntax>
-<phpsyntax constant="NCURSES_KEY_RESUME">resume</phpsyntax>
-<phpsyntax constant="NCURSES_KEY_SAVE">save</phpsyntax>
-<phpsyntax constant="NCURSES_KEY_SBEG">shiftet beg (beginning)</phpsyntax>
-<phpsyntax constant="NCURSES_KEY_SCANCEL">shifted cancel</phpsyntax>
-<phpsyntax constant="NCURSES_KEY_SCOMMAND">shifted command</phpsyntax>
-<phpsyntax constant="NCURSES_KEY_SCOPY">shifted copy</phpsyntax>
-<phpsyntax constant="NCURSES_KEY_SCREATE">shifted create</phpsyntax>
-<phpsyntax constant="NCURSES_KEY_SDC">shifted delete char</phpsyntax>
-<phpsyntax constant="NCURSES_KEY_SDL">shifted delete line</phpsyntax>
-<phpsyntax constant="NCURSES_KEY_SELECT">select</phpsyntax>
-<phpsyntax constant="NCURSES_KEY_SEND">shifted end</phpsyntax>
-<phpsyntax constant="NCURSES_KEY_SEOL">shifted end of line</phpsyntax>
-<phpsyntax constant="NCURSES_KEY_SEXIT">shifted exit</phpsyntax>
-<phpsyntax constant="NCURSES_KEY_SFIND">shifted find</phpsyntax>
-<phpsyntax constant="NCURSES_KEY_SHELP">shifted help</phpsyntax>
-<phpsyntax constant="NCURSES_KEY_SHOME">shifted home</phpsyntax>
-<phpsyntax constant="NCURSES_KEY_SIC">shifted input</phpsyntax>
-<phpsyntax constant="NCURSES_KEY_SLEFT">shifted left arrow</phpsyntax>
-<phpsyntax constant="NCURSES_KEY_SMESSAGE">shifted message</phpsyntax>
-<phpsyntax constant="NCURSES_KEY_SMOVE">shifted move</phpsyntax>
-<phpsyntax constant="NCURSES_KEY_SNEXT">shifted next</phpsyntax>
-<phpsyntax constant="NCURSES_KEY_SOPTIONS">shifted options</phpsyntax>
-<phpsyntax constant="NCURSES_KEY_SPREVIOUS">shifted previous</phpsyntax>
-<phpsyntax constant="NCURSES_KEY_SPRINT">shifted print</phpsyntax>
-<phpsyntax constant="NCURSES_KEY_SREDO">shifted redo</phpsyntax>
-<phpsyntax constant="NCURSES_KEY_SREPLACE">shifted replace</phpsyntax>
-<phpsyntax constant="NCURSES_KEY_SRIGHT">shifted right arrow</phpsyntax>
-<phpsyntax constant="NCURSES_KEY_SRSUME">shifted resume</phpsyntax>
-<phpsyntax constant="NCURSES_KEY_SSAVE">shifted save</phpsyntax>
-<phpsyntax constant="NCURSES_KEY_SSUSPEND">shifted suspend</phpsyntax>
-<phpsyntax constant="NCURSES_KEY_UNDO">undo</phpsyntax>
-<phpsyntax constant="NCURSES_KEY_MOUSE">mouse event has occurred</phpsyntax>
-<phpsyntax constant="NCURSES_KEY_MAX">maximum key value</phpsyntax>
-<phpsyntax constant="NCURSES_BUTTON_CTRL">ctrl pressed during click</phpsyntax>
-<phpsyntax constant="NCURSES_BUTTON_SHIFT">shift pressed during click</phpsyntax>
-<phpsyntax constant="NCURSES_BUTTON_ALT">alt pressed during click</phpsyntax>
-<phpsyntax constant="NCURSES_ALL_MOUSE_EVENTS">report all mouse events</phpsyntax>
-<phpsyntax constant="NCURSES_REPORT_MOUSE_POSITION">report mouse position</phpsyntax>
-<phpsyntax constant="LOG_CONS">if there is an error while sending data to the system logger,
-       write directly to the system console</phpsyntax>
-<phpsyntax constant="LOG_NDELAY">open the connection to the logger immediately</phpsyntax>
-<phpsyntax constant="LOG_ODELAY">(default) delay opening the connection until the first
-       message is logged</phpsyntax>
-<phpsyntax constant="LOG_NOWAIT"></phpsyntax>
-<phpsyntax constant="LOG_PERROR">print log message also to standard error</phpsyntax>
-<phpsyntax constant="LOG_PID">include PID with each message</phpsyntax>
-<phpsyntax constant="LOG_AUTH">security/authorization messages (use LOG_AUTHPRIV instead
-       in systems where that constant is defined)</phpsyntax>
-<phpsyntax constant="LOG_AUTHPRIV">security/authorization messages (private)</phpsyntax>
-<phpsyntax constant="LOG_CRON">clock daemon (cron and at)</phpsyntax>
-<phpsyntax constant="LOG_DAEMON">other system daemons</phpsyntax>
-<phpsyntax constant="LOG_KERN">kernel messages</phpsyntax>
-<phpsyntax constant="LOG_LPR">line printer subsystem</phpsyntax>
-<phpsyntax constant="LOG_MAIL">mail subsystem</phpsyntax>
-<phpsyntax constant="LOG_NEWS">USENET news subsystem</phpsyntax>
-<phpsyntax constant="LOG_SYSLOG">messages generated internally by syslogd</phpsyntax>
-<phpsyntax constant="LOG_USER">generic user-level messages</phpsyntax>
-<phpsyntax constant="LOG_UUCP">UUCP subsystem</phpsyntax>
-<phpsyntax constant="LOG_EMERG">system is unusable</phpsyntax>
-<phpsyntax constant="LOG_ALERT">action must be taken immediately</phpsyntax>
-<phpsyntax constant="LOG_CRIT">critical conditions</phpsyntax>
-<phpsyntax constant="LOG_ERR">error conditions</phpsyntax>
-<phpsyntax constant="LOG_WARNING">warning conditions</phpsyntax>
-<phpsyntax constant="LOG_NOTICE">normal, but significant, condition</phpsyntax>
-<phpsyntax constant="LOG_INFO">informational message</phpsyntax>
-<phpsyntax constant="LOG_DEBUG">debug-level message</phpsyntax>
-<phpsyntax constant="DNS_A">IPv4 Address Resource</phpsyntax>
-<phpsyntax constant="DNS_MX">Mail Exchanger Resource</phpsyntax>
-<phpsyntax constant="DNS_CNAME">Alias (Canonical Name) Resource</phpsyntax>
-<phpsyntax constant="DNS_NS">Authoritative Name Server Resource</phpsyntax>
-<phpsyntax constant="DNS_PTR">Pointer Resource</phpsyntax>
-<phpsyntax constant="DNS_HINFO">Host Info Resource (See IANA's
-        Operating System Names
-        for the meaning of these values)</phpsyntax>
-<phpsyntax constant="DNS_SOA">Start of Authority Resource</phpsyntax>
-<phpsyntax constant="DNS_TXT">Text Resource</phpsyntax>
-<phpsyntax constant="DNS_ANY">Any Resource Record.  On most systems
-        this returns all resource records, however
-        it should not be counted upon for critical
-       uses.  Try DNS_ALL instead.</phpsyntax>
-<phpsyntax constant="DNS_AAAA">IPv6 Address Resource</phpsyntax>
-<phpsyntax constant="DNS_ALL">Iteratively query the name server for
-        each available record type.</phpsyntax>
-<phpsyntax constant="YPERR_BADARGS"></phpsyntax>
-<phpsyntax constant="YPERR_BADDB"></phpsyntax>
-<phpsyntax constant="YPERR_BUSY"></phpsyntax>
-<phpsyntax constant="YPERR_DOMAIN"></phpsyntax>
-<phpsyntax constant="YPERR_KEY"></phpsyntax>
-<phpsyntax constant="YPERR_MAP"></phpsyntax>
-<phpsyntax constant="YPERR_NODOM"></phpsyntax>
-<phpsyntax constant="YPERR_NOMORE"></phpsyntax>
-<phpsyntax constant="YPERR_PMAP"></phpsyntax>
-<phpsyntax constant="YPERR_RESRC"></phpsyntax>
-<phpsyntax constant="YPERR_RPC"></phpsyntax>
-<phpsyntax constant="YPERR_YPBIND"></phpsyntax>
-<phpsyntax constant="YPERR_YPERR"></phpsyntax>
-<phpsyntax constant="YPERR_YPSERV"></phpsyntax>
-<phpsyntax constant="YPERR_VERS"></phpsyntax>
-<phpsyntax constant="OCI_DEFAULT"></phpsyntax>
-<phpsyntax constant="OCI_DESCRIBE_ONLY"></phpsyntax>
-<phpsyntax constant="OCI_COMMIT_ON_SUCCESS"></phpsyntax>
-<phpsyntax constant="OCI_EXACT_FETCH"></phpsyntax>
-<phpsyntax constant="OCI_SYSDATE"></phpsyntax>
-<phpsyntax constant="OCI_B_BFILE"></phpsyntax>
-<phpsyntax constant="OCI_B_CFILEE"></phpsyntax>
-<phpsyntax constant="OCI_B_CLOB"></phpsyntax>
-<phpsyntax constant="OCI_B_BLOB"></phpsyntax>
-<phpsyntax constant="OCI_B_ROWID"></phpsyntax>
-<phpsyntax constant="OCI_B_CURSOR"></phpsyntax>
-<phpsyntax constant="OCI_B_NTY"></phpsyntax>
-<phpsyntax constant="OCI_B_BIN"></phpsyntax>
-<phpsyntax constant="SQLT_BFILEE"></phpsyntax>
-<phpsyntax constant="SQLT_CFILEE"></phpsyntax>
-<phpsyntax constant="SQLT_CLOB"></phpsyntax>
-<phpsyntax constant="SQLT_BLOB"></phpsyntax>
-<phpsyntax constant="SQLT_RDD"></phpsyntax>
-<phpsyntax constant="SQLT_NTY"></phpsyntax>
-<phpsyntax constant="OCI_FETCHSTATEMENT_BY_COLUMN"></phpsyntax>
-<phpsyntax constant="OCI_FETCHSTATEMENT_BY_ROW"></phpsyntax>
-<phpsyntax constant="OCI_ASSOC"></phpsyntax>
-<phpsyntax constant="OCI_NUM"></phpsyntax>
-<phpsyntax constant="OCI_BOTH"></phpsyntax>
-<phpsyntax constant="OCI_RETURN_NULLS"></phpsyntax>
-<phpsyntax constant="OCI_RETURN_LOBS"></phpsyntax>
-<phpsyntax constant="OCI_DTYPE_FILE"></phpsyntax>
-<phpsyntax constant="OCI_DTYPE_LOB"></phpsyntax>
-<phpsyntax constant="OCI_DTYPE_ROWID"></phpsyntax>
-<phpsyntax constant="OCI_D_FILE"></phpsyntax>
-<phpsyntax constant="OCI_D_LOB"></phpsyntax>
-<phpsyntax constant="OCI_D_ROWID"></phpsyntax>
-<phpsyntax constant="PKCS7_TEXT">Adds text/plain content type headers to encrypted/signed
-         message. If decrypting or verifying, it strips those headers from
-         the output - if the decrypted or verified message is not of MIME type
-         text/plain then an error will occur.</phpsyntax>
-<phpsyntax constant="PKCS7_BINARY">Normally the input message is converted to &quot;canonical&quot; format
-         which is effectively using CR and LF as end of line: as required by
-         the S/MIME specification.  When this options is present, no
-         translation occurs.  This is useful when handling binary data which
-         may not be in MIME format.</phpsyntax>
-<phpsyntax constant="PKCS7_NOINTERN">When verifying a message, certificates (if
-           any) included in the message are normally searched for the
-           signing certificate. With this option only the
-           certificates specified in the extracerts
-           parameter of openssl_pkcs7_verify are
-           used.  The supplied certificates can still be used as
-           untrusted CAs however.</phpsyntax>
-<phpsyntax constant="PKCS7_NOVERIFY">Do not verify the signers certificate of a signed
-         message.</phpsyntax>
-<phpsyntax constant="PKCS7_NOCHAIN">Do not chain verification of signers certificates: that is
-         don't use the certificates in the signed message as untrusted CAs.</phpsyntax>
-<phpsyntax constant="PKCS7_NOCERTS">When signing a message the signer's certificate is normally
-         included - with this option it is excluded.  This will reduce the
-         size of the signed message but the verifier must have a copy of the
-         signers certificate available locally (passed using the
-         extracerts to
-         openssl_pkcs7_verify for example).</phpsyntax>
-<phpsyntax constant="PKCS7_NOATTR">Normally when a message is signed, a set of attributes are
-         included which include the signing time and the supported symmetric
-         algorithms.  With this option they are not included.</phpsyntax>
-<phpsyntax constant="PKCS7_DETACHED">When signing a message, use cleartext signing with the MIME
-         type multipart/signed.  This is the default
-         if you do not specify any flags to
-         openssl_pkcs7_sign.
-         If you turn this option off, the message will be signed using
-         opaque signing, which is more resistant to translation by mail relays
-         but cannot be read by mail agents that do not support S/MIME.</phpsyntax>
-<phpsyntax constant="PKCS7_NOSIGS">Don't try and verify the signatures on a message</phpsyntax>
-<phpsyntax constant="ORA_BIND_INOUT"></phpsyntax>
-<phpsyntax constant="ORA_BIND_IN"></phpsyntax>
-<phpsyntax constant="ORA_BIND_OUT"></phpsyntax>
-<phpsyntax constant="ORA_FETCHINTO_ASSOC"></phpsyntax>
-<phpsyntax constant="ORA_FETCHINTO_NULLS"></phpsyntax>
-<phpsyntax constant="WNOHANG"></phpsyntax>
-<phpsyntax constant="WUNTRACED"></phpsyntax>
-<phpsyntax constant="SIG_IGN"></phpsyntax>
-<phpsyntax constant="SIG_DFL"></phpsyntax>
-<phpsyntax constant="SIG_ERR"></phpsyntax>
-<phpsyntax constant="SIGHUP"></phpsyntax>
-<phpsyntax constant="SIGINT"></phpsyntax>
-<phpsyntax constant="SIGQUIT"></phpsyntax>
-<phpsyntax constant="SIGILL"></phpsyntax>
-<phpsyntax constant="SIGTRAP"></phpsyntax>
-<phpsyntax constant="SIGABRT"></phpsyntax>
-<phpsyntax constant="SIGIOT"></phpsyntax>
-<phpsyntax constant="SIGBUS"></phpsyntax>
-<phpsyntax constant="SIGFPE"></phpsyntax>
-<phpsyntax constant="SIGKILL"></phpsyntax>
-<phpsyntax constant="SIGUSR1"></phpsyntax>
-<phpsyntax constant="SIGSEGV"></phpsyntax>
-<phpsyntax constant="SIGUSR2"></phpsyntax>
-<phpsyntax constant="SIGPIPE"></phpsyntax>
-<phpsyntax constant="SIGALRM"></phpsyntax>
-<phpsyntax constant="SIGTERM"></phpsyntax>
-<phpsyntax constant="SIGSTKFLT"></phpsyntax>
-<phpsyntax constant="SIGCLD"></phpsyntax>
-<phpsyntax constant="SIGCHLD"></phpsyntax>
-<phpsyntax constant="SIGCONT"></phpsyntax>
-<phpsyntax constant="SIGSTOP"></phpsyntax>
-<phpsyntax constant="SIGTSTP"></phpsyntax>
-<phpsyntax constant="SIGTTIN"></phpsyntax>
-<phpsyntax constant="SIGTTOU"></phpsyntax>
-<phpsyntax constant="SIGURG"></phpsyntax>
-<phpsyntax constant="SIGXCPU"></phpsyntax>
-<phpsyntax constant="SIGXFSZ"></phpsyntax>
-<phpsyntax constant="SIGVTALRM"></phpsyntax>
-<phpsyntax constant="SIGPROF"></phpsyntax>
-<phpsyntax constant="SIGWINCH"></phpsyntax>
-<phpsyntax constant="SIGPOLL"></phpsyntax>
-<phpsyntax constant="SIGIO"></phpsyntax>
-<phpsyntax constant="SIGPWR"></phpsyntax>
-<phpsyntax constant="SIGSYS"></phpsyntax>
-<phpsyntax constant="SIGBABY"></phpsyntax>
-<phpsyntax constant="PREG_PATTERN_ORDER">Orders results so that $matches[0] is an array of full pattern
-      matches, $matches[1] is an array of strings matched by the first
-      parenthesized subpattern, and so on. This flag is only used with
-      preg_match_all.</phpsyntax>
-<phpsyntax constant="PREG_SET_ORDER">Orders results so that $matches[0] is an array of first set of
-      matches, $matches[1] is an array of second set of matches, and so
-      on. This flag is only used with preg_match_all.</phpsyntax>
-<phpsyntax constant="PREG_OFFSET_CAPTURE">See the description of
-      PREG_SPLIT_OFFSET_CAPTURE.  This flag is
-      available since PHP 4.3.0.</phpsyntax>
-<phpsyntax constant="PREG_SPLIT_NO_EMPTY">This flag tells preg_split to return only non-empty
-      pieces.</phpsyntax>
-<phpsyntax constant="PREG_SPLIT_DELIM_CAPTURE">This flag tells preg_split to capture
-      parenthesized expression in the delimiter pattern as well. This flag
-      is available since PHP 4.0.5.</phpsyntax>
-<phpsyntax constant="PREG_SPLIT_OFFSET_CAPTURE">If this flag is set, for every occurring match the appendant string
-      offset will also be returned. Note that this changes the return
-      values in an array where every element is an array consisting of the
-      matched string at offset 0 and its string offset within subject at
-      offset 1. This flag is available since PHP 4.3.0
-      and is only used for preg_split.</phpsyntax>
-<phpsyntax constant="PGSQL_ASSOC"></phpsyntax>
-<phpsyntax constant="PGSQL_NUM"></phpsyntax>
-<phpsyntax constant="PGSQL_BOTH"></phpsyntax>
-<phpsyntax constant="PGSQL_CONNECTION_BAD"></phpsyntax>
-<phpsyntax constant="PGSQL_CONNECTION_OK"></phpsyntax>
-<phpsyntax constant="PGSQL_SEEK_SET"></phpsyntax>
-<phpsyntax constant="PGSQL_SEEK_CUR"></phpsyntax>
-<phpsyntax constant="PGSQL_SEEK_END"></phpsyntax>
-<phpsyntax constant="PGSQL_ESCAPE_STRING"></phpsyntax>
-<phpsyntax constant="PGSQL_ESCAPE_BYTEA"></phpsyntax>
-<phpsyntax constant="PGSQL_EMPTY_QUERY"></phpsyntax>
-<phpsyntax constant="PGSQL_COMMAND_OK"></phpsyntax>
-<phpsyntax constant="PGSQL_TUPLES_OK"></phpsyntax>
-<phpsyntax constant="PGSQL_COPY_OUT"></phpsyntax>
-<phpsyntax constant="PGSQL_COPY_IN"></phpsyntax>
-<phpsyntax constant="PGSQL_BAD_RESPONSE"></phpsyntax>
-<phpsyntax constant="PGSQL_NONFATAL_ERROR"></phpsyntax>
-<phpsyntax constant="PGSQL_FATAL_ERROR"></phpsyntax>
-<phpsyntax constant="PSPELL_FAST"></phpsyntax>
-<phpsyntax constant="PSPELL_NORMAL"></phpsyntax>
-<phpsyntax constant="PSPELL_BAD_SPELLERS"></phpsyntax>
-<phpsyntax constant="PSPELL_RUN_TOGETHER"></phpsyntax>
-<phpsyntax constant="MSG_IPC_NOWAIT">integer</phpsyntax>
-<phpsyntax constant="MSG_NOERROR">integer</phpsyntax>
-<phpsyntax constant="MSG_EXCEPT">integer</phpsyntax>
-<phpsyntax constant="SID"></phpsyntax>
-<phpsyntax constant="SNMP_VALUE_LIBRARY"></phpsyntax>
-<phpsyntax constant="SNMP_VALUE_PLAIN"></phpsyntax>
-<phpsyntax constant="SNMP_VALUE_OBJECT"></phpsyntax>
-<phpsyntax constant="SNMP_BIT_STR"></phpsyntax>
-<phpsyntax constant="SNMP_OCTET_STR"></phpsyntax>
-<phpsyntax constant="SNMP_OPAQUE"></phpsyntax>
-<phpsyntax constant="SNMP_NULL"></phpsyntax>
-<phpsyntax constant="SNMP_OBJECT_ID"></phpsyntax>
-<phpsyntax constant="SNMP_IPADDRESS"></phpsyntax>
-<phpsyntax constant="SNMP_COUNTER"></phpsyntax>
-<phpsyntax constant="SNMP_UNSIGNED"></phpsyntax>
-<phpsyntax constant="SNMP_TIMETICKS"></phpsyntax>
-<phpsyntax constant="SNMP_UINTEGER"></phpsyntax>
-<phpsyntax constant="SNMP_INTEGER"></phpsyntax>
-<phpsyntax constant="SNMP_COUNTER64"></phpsyntax>
-<phpsyntax constant="SOAP_1_1"></phpsyntax>
-<phpsyntax constant="SOAP_1_2"></phpsyntax>
-<phpsyntax constant="SOAP_PERSISTENCE_SESSION"></phpsyntax>
-<phpsyntax constant="SOAP_PERSISTENCE_REQUEST"></phpsyntax>
-<phpsyntax constant="SOAP_FUNCTIONS_ALL"></phpsyntax>
-<phpsyntax constant="SOAP_ENCODED"></phpsyntax>
-<phpsyntax constant="SOAP_LITERAL"></phpsyntax>
-<phpsyntax constant="SOAP_RPC"></phpsyntax>
-<phpsyntax constant="SOAP_DOCUMENT"></phpsyntax>
-<phpsyntax constant="SOAP_ACTOR_NEXT"></phpsyntax>
-<phpsyntax constant="SOAP_ACTOR_NONE"></phpsyntax>
-<phpsyntax constant="SOAP_ACTOR_UNLIMATERECEIVER"></phpsyntax>
-<phpsyntax constant="UNKNOWN_TYPE"></phpsyntax>
-<phpsyntax constant="XSD_STRING"></phpsyntax>
-<phpsyntax constant="XSD_BOOLEAN"></phpsyntax>
-<phpsyntax constant="XSD_DECIMAL"></phpsyntax>
-<phpsyntax constant="XSD_FLOAT"></phpsyntax>
-<phpsyntax constant="XSD_DOUBLE"></phpsyntax>
-<phpsyntax constant="XSD_DURATION"></phpsyntax>
-<phpsyntax constant="XSD_DATETIME"></phpsyntax>
-<phpsyntax constant="XSD_TIME"></phpsyntax>
-<phpsyntax constant="XSD_DATE"></phpsyntax>
-<phpsyntax constant="XSD_GYEARMONTH"></phpsyntax>
-<phpsyntax constant="XSD_GYEAR"></phpsyntax>
-<phpsyntax constant="XSD_GMONTHDAY"></phpsyntax>
-<phpsyntax constant="XSD_GDAY"></phpsyntax>
-<phpsyntax constant="XSD_GMONTH"></phpsyntax>
-<phpsyntax constant="XSD_HEXBINARY"></phpsyntax>
-<phpsyntax constant="XSD_BASE64BINARY"></phpsyntax>
-<phpsyntax constant="XSD_ANYURI"></phpsyntax>
-<phpsyntax constant="XSD_QNAME"></phpsyntax>
-<phpsyntax constant="XSD_NOTATION"></phpsyntax>
-<phpsyntax constant="XSD_NORMALIZEDSTRING"></phpsyntax>
-<phpsyntax constant="XSD_TOKEN"></phpsyntax>
-<phpsyntax constant="XSD_LANGUAGE"></phpsyntax>
-<phpsyntax constant="XSD_NMTOKEN"></phpsyntax>
-<phpsyntax constant="XSD_NAME"></phpsyntax>
-<phpsyntax constant="XSD_NCNAME"></phpsyntax>
-<phpsyntax constant="XSD_ID"></phpsyntax>
-<phpsyntax constant="XSD_IDREF"></phpsyntax>
-<phpsyntax constant="XSD_IDREFS"></phpsyntax>
-<phpsyntax constant="XSD_ENTITY"></phpsyntax>
-<phpsyntax constant="XSD_ENTITIES"></phpsyntax>
-<phpsyntax constant="XSD_INTEGER"></phpsyntax>
-<phpsyntax constant="XSD_NONPOSITIVEINTEGER"></phpsyntax>
-<phpsyntax constant="XSD_NEGATIVEINTEGER"></phpsyntax>
-<phpsyntax constant="XSD_LONG"></phpsyntax>
-<phpsyntax constant="XSD_INT"></phpsyntax>
-<phpsyntax constant="XSD_SHORT"></phpsyntax>
-<phpsyntax constant="XSD_BYTE"></phpsyntax>
-<phpsyntax constant="XSD_NONNEGATIVEINTEGER"></phpsyntax>
-<phpsyntax constant="XSD_UNSIGNEDLONG"></phpsyntax>
-<phpsyntax constant="XSD_UNSIGNEDINT"></phpsyntax>
-<phpsyntax constant="XSD_UNSIGNEDSHORT"></phpsyntax>
-<phpsyntax constant="XSD_UNSIGNEDBYTE"></phpsyntax>
-<phpsyntax constant="XSD_POSITIVEINTEGER"></phpsyntax>
-<phpsyntax constant="XSD_NMTOKENS"></phpsyntax>
-<phpsyntax constant="XSD_ANYTYPE"></phpsyntax>
-<phpsyntax constant="SOAP_ENC_OBJECT"></phpsyntax>
-<phpsyntax constant="SOAP_ENC_ARRAY"></phpsyntax>
-<phpsyntax constant="XSD_1999_TIMEINSTANT"></phpsyntax>
-<phpsyntax constant="XSD_NAMESPACE"></phpsyntax>
-<phpsyntax constant="XSD_1999_NAMESPACE"></phpsyntax>
-<phpsyntax constant="AF_UNIX"></phpsyntax>
-<phpsyntax constant="AF_INET"></phpsyntax>
-<phpsyntax constant="AF_INET6"></phpsyntax>
-<phpsyntax constant="SOCK_STREAM"></phpsyntax>
-<phpsyntax constant="SOCK_DGRAM"></phpsyntax>
-<phpsyntax constant="SOCK_RAW"></phpsyntax>
-<phpsyntax constant="SOCK_SEQPACKET"></phpsyntax>
-<phpsyntax constant="SOCK_RDM"></phpsyntax>
-<phpsyntax constant="MSG_OOB"></phpsyntax>
-<phpsyntax constant="MSG_WAITALL"></phpsyntax>
-<phpsyntax constant="MSG_PEEK"></phpsyntax>
-<phpsyntax constant="MSG_DONTROUTE"></phpsyntax>
-<phpsyntax constant="SO_DEBUG"></phpsyntax>
-<phpsyntax constant="SO_REUSEADDR"></phpsyntax>
-<phpsyntax constant="SO_KEEPALIVE"></phpsyntax>
-<phpsyntax constant="SO_DONTROUTE"></phpsyntax>
-<phpsyntax constant="SO_LINGER"></phpsyntax>
-<phpsyntax constant="SO_BROADCAST"></phpsyntax>
-<phpsyntax constant="SO_OOBINLINE"></phpsyntax>
-<phpsyntax constant="SO_SNDBUF"></phpsyntax>
-<phpsyntax constant="SO_RCVBUF"></phpsyntax>
-<phpsyntax constant="SO_SNDLOWAT"></phpsyntax>
-<phpsyntax constant="SO_RCVLOWAT"></phpsyntax>
-<phpsyntax constant="SO_SNDTIMEO"></phpsyntax>
-<phpsyntax constant="SO_RCVTIMEO"></phpsyntax>
-<phpsyntax constant="SO_TYPE"></phpsyntax>
-<phpsyntax constant="SO_ERROR"></phpsyntax>
-<phpsyntax constant="SOL_SOCKET"></phpsyntax>
-<phpsyntax constant="PHP_NORMAL_READ"></phpsyntax>
-<phpsyntax constant="PHP_BINARY_READ"></phpsyntax>
-<phpsyntax constant="SOL_TCP"></phpsyntax>
-<phpsyntax constant="SOL_UDP"></phpsyntax>
-<phpsyntax constant="RIT_LEAVES_ONLY"></phpsyntax>
-<phpsyntax constant="RIT_SELF_FIRST"></phpsyntax>
-<phpsyntax constant="RIT_CHILD_FIRST"></phpsyntax>
-<phpsyntax constant="CIT_CALL_TOSTRING"></phpsyntax>
-<phpsyntax constant="CIT_CATCH_GET_CHILD"></phpsyntax>
-<phpsyntax constant="SQLITE_ASSOC">Columns are returned into the array having the fieldname as the array
-      index.</phpsyntax>
-<phpsyntax constant="SQLITE_BOTH">Columns are returned into the array having both a numerical index
-       and the fieldname as the array index.</phpsyntax>
-<phpsyntax constant="SQLITE_NUM">Columns are returned into the array having a numerical index to the
-       fields. This index starts with 0, the first field in the result.</phpsyntax>
-<phpsyntax constant="STREAM_FILTER_READ">Used with stream_filter_append and
-       stream_filter_prepend to indicate
-       that the specified filter should only be applied when
-       reading</phpsyntax>
-<phpsyntax constant="STREAM_FILTER_WRITE">Used with stream_filter_append and
-       stream_filter_prepend to indicate
-       that the specified filter should only be applied when
-       writing</phpsyntax>
-<phpsyntax constant="STREAM_FILTER_ALL">This constant is equivalent to 
-       STREAM_FILTER_READ |
-       STREAM_FILTER_WRITE</phpsyntax>
-<phpsyntax constant="PSFS_PASS_ON">Return Code indicating that the
-       userspace filter returned buckets in $out.</phpsyntax>
-<phpsyntax constant="PSFS_FEED_ME">Return Code indicating that the
-       userspace filter did not return buckets in $out
-       (i.e. No data available).</phpsyntax>
-<phpsyntax constant="PSFS_ERR_FATAL">Return Code indicating that the
-       userspace filter encountered an unrecoverable error
-       (i.e. Invalid data received).</phpsyntax>
-<phpsyntax constant="STREAM_USE_PATH">Flag indicating if the stream
-       used the include path.</phpsyntax>
-<phpsyntax constant="STREAM_REPORT_ERRORS">Flag indicating if the wrapper
-       is responsible for raising errors using trigger_error 
-       during opening of the stream.  If this flag is not set, you
-       should not raise any errors.</phpsyntax>
-<phpsyntax constant="STREAM_CLIENT_ASYNC_CONNECT">Open client socket asynchronously.  Used with
-       stream_socket_client.</phpsyntax>
-<phpsyntax constant="STREAM_CLIENT_PERSISTENT">Client socket opened with stream_socket_client
-       should remain persistent between page loads.</phpsyntax>
-<phpsyntax constant="STREAM_SERVER_BIND">Tells a stream created with stream_socket_server
-       to bind to the specified target.  Server sockets should always include this flag.</phpsyntax>
-<phpsyntax constant="STREAM_SERVER_LISTEN">Tells a stream created with stream_socket_server
-       and bound using the STREAM_SERVER_BIND flag to start
-       listening on the socket.  Server sockets should always include this flag.</phpsyntax>
-<phpsyntax constant="STREAM_NOTIFY_RESOLVE">A remote address required for this stream has been resolved, or the resolution
-       failed.  See severity for an indication of which happened.</phpsyntax>
-<phpsyntax constant="STREAM_NOTIFY_CONNECT">A connection with an external resource has been established.</phpsyntax>
-<phpsyntax constant="STREAM_NOTIFY_AUTH_REQUIRED">Additional authorization is required to access the specified resource.
-       Typical issued with severity level of
-       STREAM_NOTIFY_SEVERITY_ERR.</phpsyntax>
-<phpsyntax constant="STREAM_NOTIFY_MIME_TYPE_IS">The mime-type of resource has been identified,
-       refer to message for a description of the
-       discovered type.</phpsyntax>
-<phpsyntax constant="STREAM_NOTIFY_FILE_SIZE_IS">The size of the resource has been discovered.</phpsyntax>
-<phpsyntax constant="STREAM_NOTIFY_REDIRECTED">The external resource has redirected the stream to an alternate
-       location.  Refer to message.</phpsyntax>
-<phpsyntax constant="STREAM_NOTIFY_PROGRESS">Indicates current progress of the stream transfer in
-       bytes_transferred and possibly
-       bytes_max as well.</phpsyntax>
-<phpsyntax constant="STREAM_NOTIFY_COMPLETED">There is no more data available on the stream.</phpsyntax>
-<phpsyntax constant="STREAM_NOTIFY_FAILURE">A generic error occurred on the stream, consult
-       message and message_code
-       for details.</phpsyntax>
-<phpsyntax constant="STREAM_NOTIFY_AUTH_RESULT">Authorization has been completed (with or without success).</phpsyntax>
-<phpsyntax constant="STREAM_NOTIFY_SEVERITY_INFO">Normal, non-error related, notification.</phpsyntax>
-<phpsyntax constant="STREAM_NOTIFY_SEVERITY_WARN">Non critical error condition.  Processing may continue.</phpsyntax>
-<phpsyntax constant="STREAM_NOTIFY_SEVERITY_ERR">A critical error occurred.  Processing cannot continue.</phpsyntax>
-<phpsyntax constant="CRYPT_SALT_LENGTH"></phpsyntax>
-<phpsyntax constant="CRYPT_STD_DES"></phpsyntax>
-<phpsyntax constant="CRYPT_EXT_DES"></phpsyntax>
-<phpsyntax constant="CRYPT_MD5"></phpsyntax>
-<phpsyntax constant="CRYPT_BLOWFISH"></phpsyntax>
-<phpsyntax constant="HTML_SPECIALCHARS"></phpsyntax>
-<phpsyntax constant="HTML_ENTITIES"></phpsyntax>
-<phpsyntax constant="ENT_COMPAT"></phpsyntax>
-<phpsyntax constant="ENT_QUOTES"></phpsyntax>
-<phpsyntax constant="ENT_NOQUOTES"></phpsyntax>
-<phpsyntax constant="CHAR_MAX"></phpsyntax>
-<phpsyntax constant="LC_CTYPE"></phpsyntax>
-<phpsyntax constant="LC_NUMERIC"></phpsyntax>
-<phpsyntax constant="LC_TIME"></phpsyntax>
-<phpsyntax constant="LC_COLLATE"></phpsyntax>
-<phpsyntax constant="LC_MONETARY"></phpsyntax>
-<phpsyntax constant="LC_ALL"></phpsyntax>
-<phpsyntax constant="LC_MESSAGES"></phpsyntax>
-<phpsyntax constant="STR_PAD_LEFT"></phpsyntax>
-<phpsyntax constant="STR_PAD_RIGHT"></phpsyntax>
-<phpsyntax constant="STR_PAD_BOTH"></phpsyntax>
-<phpsyntax constant="MOD_COLOR"></phpsyntax>
-<phpsyntax constant="MOD_MATRIX"></phpsyntax>
-<phpsyntax constant="TYPE_PUSHBUTTON"></phpsyntax>
-<phpsyntax constant="TYPE_MENUBUTTON"></phpsyntax>
-<phpsyntax constant="BSHitTest"></phpsyntax>
-<phpsyntax constant="BSDown"></phpsyntax>
-<phpsyntax constant="BSOver"></phpsyntax>
-<phpsyntax constant="BSUp"></phpsyntax>
-<phpsyntax constant="OverDowntoIdle"></phpsyntax>
-<phpsyntax constant="IdletoOverDown"></phpsyntax>
-<phpsyntax constant="OutDowntoIdle"></phpsyntax>
-<phpsyntax constant="OutDowntoOverDown"></phpsyntax>
-<phpsyntax constant="OverDowntoOutDown"></phpsyntax>
-<phpsyntax constant="OverUptoOverDown"></phpsyntax>
-<phpsyntax constant="OverUptoIdle"></phpsyntax>
-<phpsyntax constant="IdletoOverUp"></phpsyntax>
-<phpsyntax constant="ButtonEnter"></phpsyntax>
-<phpsyntax constant="ButtonExit"></phpsyntax>
-<phpsyntax constant="MenuEnter"></phpsyntax>
-<phpsyntax constant="MenuExit"></phpsyntax>
-<phpsyntax constant="TIDY_TAG_UNKNOWN"></phpsyntax>
-<phpsyntax constant="TIDY_TAG_A"></phpsyntax>
-<phpsyntax constant="TIDY_TAG_ABBR"></phpsyntax>
-<phpsyntax constant="TIDY_TAG_ACRONYM"></phpsyntax>
-<phpsyntax constant="TIDY_TAG_ALIGN"></phpsyntax>
-<phpsyntax constant="TIDY_TAG_APPLET"></phpsyntax>
-<phpsyntax constant="TIDY_TAG_AREA"></phpsyntax>
-<phpsyntax constant="TIDY_TAG_B"></phpsyntax>
-<phpsyntax constant="TIDY_TAG_BASE"></phpsyntax>
-<phpsyntax constant="TIDY_TAG_BASEFONT"></phpsyntax>
-<phpsyntax constant="TIDY_TAG_BDO"></phpsyntax>
-<phpsyntax constant="TIDY_TAG_BGSOUND"></phpsyntax>
-<phpsyntax constant="TIDY_TAG_BIG"></phpsyntax>
-<phpsyntax constant="TIDY_TAG_BLINK"></phpsyntax>
-<phpsyntax constant="TIDY_TAG_BLOCKQUOTE"></phpsyntax>
-<phpsyntax constant="TIDY_TAG_BODY"></phpsyntax>
-<phpsyntax constant="TIDY_TAG_BR"></phpsyntax>
-<phpsyntax constant="TIDY_TAG_BUTTON"></phpsyntax>
-<phpsyntax constant="TIDY_TAG_CAPTION"></phpsyntax>
-<phpsyntax constant="TIDY_TAG_CENTER"></phpsyntax>
-<phpsyntax constant="TIDY_TAG_CITE"></phpsyntax>
-<phpsyntax constant="TIDY_TAG_CODE"></phpsyntax>
-<phpsyntax constant="TIDY_TAG_COL"></phpsyntax>
-<phpsyntax constant="TIDY_TAG_COLGROUP"></phpsyntax>
-<phpsyntax constant="TIDY_TAG_COMMENT"></phpsyntax>
-<phpsyntax constant="TIDY_TAG_DD"></phpsyntax>
-<phpsyntax constant="TIDY_TAG_DEL"></phpsyntax>
-<phpsyntax constant="TIDY_TAG_DFN"></phpsyntax>
-<phpsyntax constant="TIDY_TAG_DIR"></phpsyntax>
-<phpsyntax constant="TIDY_TAG_DIV"></phpsyntax>
-<phpsyntax constant="TIDY_TAG_DL"></phpsyntax>
-<phpsyntax constant="TIDY_TAG_DT"></phpsyntax>
-<phpsyntax constant="TIDY_TAG_EM"></phpsyntax>
-<phpsyntax constant="TIDY_TAG_EMBED"></phpsyntax>
-<phpsyntax constant="TIDY_TAG_FIELDSET"></phpsyntax>
-<phpsyntax constant="TIDY_TAG_FONT"></phpsyntax>
-<phpsyntax constant="TIDY_TAG_FORM"></phpsyntax>
-<phpsyntax constant="TIDY_TAG_FRAME"></phpsyntax>
-<phpsyntax constant="TIDY_TAG_FRAMESET"></phpsyntax>
-<phpsyntax constant="TIDY_TAG_H1"></phpsyntax>
-<phpsyntax constant="TIDY_TAG_H2"></phpsyntax>
-<phpsyntax constant="TIDY_TAG_H3"></phpsyntax>
-<phpsyntax constant="TIDY_TAG_H4"></phpsyntax>
-<phpsyntax constant="TIDY_TAG_H5"></phpsyntax>
-<phpsyntax constant="TIDY_TAG_6"></phpsyntax>
-<phpsyntax constant="TIDY_TAG_HEAD"></phpsyntax>
-<phpsyntax constant="TIDY_TAG_HR"></phpsyntax>
-<phpsyntax constant="TIDY_TAG_HTML"></phpsyntax>
-<phpsyntax constant="TIDY_TAG_I"></phpsyntax>
-<phpsyntax constant="TIDY_TAG_IFRAME"></phpsyntax>
-<phpsyntax constant="TIDY_TAG_ILAYER"></phpsyntax>
-<phpsyntax constant="TIDY_TAG_IMG"></phpsyntax>
-<phpsyntax constant="TIDY_TAG_INPUT"></phpsyntax>
-<phpsyntax constant="TIDY_TAG_INS"></phpsyntax>
-<phpsyntax constant="TIDY_TAG_ISINDEX"></phpsyntax>
-<phpsyntax constant="TIDY_TAG_KBD"></phpsyntax>
-<phpsyntax constant="TIDY_TAG_KEYGEN"></phpsyntax>
-<phpsyntax constant="TIDY_TAG_LABEL"></phpsyntax>
-<phpsyntax constant="TIDY_TAG_LAYER"></phpsyntax>
-<phpsyntax constant="TIDY_TAG_LEGEND"></phpsyntax>
-<phpsyntax constant="TIDY_TAG_LI"></phpsyntax>
-<phpsyntax constant="TIDY_TAG_LINK"></phpsyntax>
-<phpsyntax constant="TIDY_TAG_LISTING"></phpsyntax>
-<phpsyntax constant="TIDY_TAG_MAP"></phpsyntax>
-<phpsyntax constant="TIDY_TAG_MARQUEE"></phpsyntax>
-<phpsyntax constant="TIDY_TAG_MENU"></phpsyntax>
-<phpsyntax constant="TIDY_TAG_META"></phpsyntax>
-<phpsyntax constant="TIDY_TAG_MULTICOL"></phpsyntax>
-<phpsyntax constant="TIDY_TAG_NOBR"></phpsyntax>
-<phpsyntax constant="TIDY_TAG_NOEMBED"></phpsyntax>
-<phpsyntax constant="TIDY_TAG_NOFRAMES"></phpsyntax>
-<phpsyntax constant="TIDY_TAG_NOLAYER"></phpsyntax>
-<phpsyntax constant="TIDY_TAG_NOSAFE"></phpsyntax>
-<phpsyntax constant="TIDY_TAG_NOSCRIPT"></phpsyntax>
-<phpsyntax constant="TIDY_TAG_OBJECT"></phpsyntax>
-<phpsyntax constant="TIDY_TAG_OL"></phpsyntax>
-<phpsyntax constant="TIDY_TAG_OPTGROUP"></phpsyntax>
-<phpsyntax constant="TIDY_TAG_OPTION"></phpsyntax>
-<phpsyntax constant="TIDY_TAG_P"></phpsyntax>
-<phpsyntax constant="TIDY_TAG_PARAM"></phpsyntax>
-<phpsyntax constant="TIDY_TAG_PLAINTEXT"></phpsyntax>
-<phpsyntax constant="TIDY_TAG_PRE"></phpsyntax>
-<phpsyntax constant="TIDY_TAG_Q"></phpsyntax>
-<phpsyntax constant="TIDY_TAG_RP"></phpsyntax>
-<phpsyntax constant="TIDY_TAG_RT"></phpsyntax>
-<phpsyntax constant="TIDY_TAG_RTC"></phpsyntax>
-<phpsyntax constant="TIDY_TAG_RUBY"></phpsyntax>
-<phpsyntax constant="TIDY_TAG_S"></phpsyntax>
-<phpsyntax constant="TIDY_TAG_SAMP"></phpsyntax>
-<phpsyntax constant="TIDY_TAG_SCRIPT"></phpsyntax>
-<phpsyntax constant="TIDY_TAG_SELECT"></phpsyntax>
-<phpsyntax constant="TIDY_TAG_SERVER"></phpsyntax>
-<phpsyntax constant="TIDY_TAG_SERVLET"></phpsyntax>
-<phpsyntax constant="TIDY_TAG_SMALL"></phpsyntax>
-<phpsyntax constant="TIDY_TAG_SPACER"></phpsyntax>
-<phpsyntax constant="TIDY_TAG_SPAN"></phpsyntax>
-<phpsyntax constant="TIDY_TAG_STRIKE"></phpsyntax>
-<phpsyntax constant="TIDY_TAG_STRONG"></phpsyntax>
-<phpsyntax constant="TIDY_TAG_STYLE"></phpsyntax>
-<phpsyntax constant="TIDY_TAG_SUB"></phpsyntax>
-<phpsyntax constant="TIDY_TAG_TABLE"></phpsyntax>
-<phpsyntax constant="TIDY_TAG_TBODY"></phpsyntax>
-<phpsyntax constant="TIDY_TAG_TD"></phpsyntax>
-<phpsyntax constant="TIDY_TAG_TEXTAREA"></phpsyntax>
-<phpsyntax constant="TIDY_TAG_TFOOT"></phpsyntax>
-<phpsyntax constant="TIDY_TAG_TH"></phpsyntax>
-<phpsyntax constant="TIDY_TAG_THEAD"></phpsyntax>
-<phpsyntax constant="TIDY_TAG_TITLE"></phpsyntax>
-<phpsyntax constant="TIDY_TAG_TR"></phpsyntax>
-<phpsyntax constant="TIDY_TAG_TR"></phpsyntax>
-<phpsyntax constant="TIDY_TAG_TT"></phpsyntax>
-<phpsyntax constant="TIDY_TAG_U"></phpsyntax>
-<phpsyntax constant="TIDY_TAG_UL"></phpsyntax>
-<phpsyntax constant="TIDY_TAG_VAR"></phpsyntax>
-<phpsyntax constant="TIDY_TAG_WBR"></phpsyntax>
-<phpsyntax constant="TIDY_TAG_XMP"></phpsyntax>
-<phpsyntax constant="TIDY_ATTR_UNKNOWN"></phpsyntax>
-<phpsyntax constant="TIDY_ATTR_ABBR"></phpsyntax>
-<phpsyntax constant="TIDY_ATTR_ACCEPT"></phpsyntax>
-<phpsyntax constant="TIDY_ATTR_ACCEPT_CHARSET"></phpsyntax>
-<phpsyntax constant="TIDY_ATTR_ACCESSKEY"></phpsyntax>
-<phpsyntax constant="TIDY_ATTR_ACTION"></phpsyntax>
-<phpsyntax constant="TIDY_ATTR_ADD_DATE"></phpsyntax>
-<phpsyntax constant="TIDY_ATTR_ALIGN"></phpsyntax>
-<phpsyntax constant="TIDY_ATTR_ALINK"></phpsyntax>
-<phpsyntax constant="TIDY_ATTR_ALT"></phpsyntax>
-<phpsyntax constant="TIDY_ATTR_ARCHIVE"></phpsyntax>
-<phpsyntax constant="TIDY_ATTR_AXIS"></phpsyntax>
-<phpsyntax constant="TIDY_ATTR_BACKGROUND"></phpsyntax>
-<phpsyntax constant="TIDY_ATTR_BGCOLOR"></phpsyntax>
-<phpsyntax constant="TIDY_ATTR_BGPROPERTIES"></phpsyntax>
-<phpsyntax constant="TIDY_ATTR_BORDER"></phpsyntax>
-<phpsyntax constant="TIDY_ATTR_BORDERCOLOR"></phpsyntax>
-<phpsyntax constant="TIDY_ATTR_BOTTOMMARGIN"></phpsyntax>
-<phpsyntax constant="TIDY_ATTR_CELLPADDING"></phpsyntax>
-<phpsyntax constant="TIDY_ATTR_CELLSPACING"></phpsyntax>
-<phpsyntax constant="TIDY_ATTR_CHAR"></phpsyntax>
-<phpsyntax constant="TIDY_ATTR_CHAROFF"></phpsyntax>
-<phpsyntax constant="TIDY_ATTR_CHARSET"></phpsyntax>
-<phpsyntax constant="TIDY_ATTR_CHECKED"></phpsyntax>
-<phpsyntax constant="TIDY_ATTR_CITE"></phpsyntax>
-<phpsyntax constant="TIDY_ATTR_CLASS"></phpsyntax>
-<phpsyntax constant="TIDY_ATTR_CLASSID"></phpsyntax>
-<phpsyntax constant="TIDY_ATTR_CLEAR"></phpsyntax>
-<phpsyntax constant="TIDY_ATTR_CODE"></phpsyntax>
-<phpsyntax constant="TIDY_ATTR_CODEBASE"></phpsyntax>
-<phpsyntax constant="TIDY_ATTR_CODETYPE"></phpsyntax>
-<phpsyntax constant="TIDY_ATTR_COLOR"></phpsyntax>
-<phpsyntax constant="TIDY_ATTR_COLS"></phpsyntax>
-<phpsyntax constant="TIDY_ATTR_COLSPAN"></phpsyntax>
-<phpsyntax constant="TIDY_ATTR_COMPACT"></phpsyntax>
-<phpsyntax constant="TIDY_ATTR_CONTENT"></phpsyntax>
-<phpsyntax constant="TIDY_ATTR_COORDS"></phpsyntax>
-<phpsyntax constant="TIDY_ATTR_DATA"></phpsyntax>
-<phpsyntax constant="TIDY_ATTR_DATAFLD"></phpsyntax>
-<phpsyntax constant="TIDY_ATTR_DATAPAGESIZE"></phpsyntax>
-<phpsyntax constant="TIDY_ATTR_DATASRC"></phpsyntax>
-<phpsyntax constant="TIDY_ATTR_DATETIME"></phpsyntax>
-<phpsyntax constant="TIDY_ATTR_DECLARE"></phpsyntax>
-<phpsyntax constant="TIDY_ATTR_DEFER"></phpsyntax>
-<phpsyntax constant="TIDY_ATTR_DIR"></phpsyntax>
-<phpsyntax constant="TIDY_ATTR_DISABLED"></phpsyntax>
-<phpsyntax constant="TIDY_ATTR_ENCODING"></phpsyntax>
-<phpsyntax constant="TIDY_ATTR_ENCTYPE"></phpsyntax>
-<phpsyntax constant="TIDY_ATTR_FACE"></phpsyntax>
-<phpsyntax constant="TIDY_ATTR_FOR"></phpsyntax>
-<phpsyntax constant="TIDY_ATTR_FRAME"></phpsyntax>
-<phpsyntax constant="TIDY_ATTR_FRAMEBORDER"></phpsyntax>
-<phpsyntax constant="TIDY_ATTR_FRAMESPACING"></phpsyntax>
-<phpsyntax constant="TIDY_ATTR_GRIDX"></phpsyntax>
-<phpsyntax constant="TIDY_ATTR_GRIDY"></phpsyntax>
-<phpsyntax constant="TIDY_ATTR_HEADERS"></phpsyntax>
-<phpsyntax constant="TIDY_ATTR_HEIGHT"></phpsyntax>
-<phpsyntax constant="TIDY_ATTR_HREF"></phpsyntax>
-<phpsyntax constant="TIDY_ATTR_HREFLANG"></phpsyntax>
-<phpsyntax constant="TIDY_ATTR_HSPACE"></phpsyntax>
-<phpsyntax constant="TIDY_ATTR_HTTP_EQUIV"></phpsyntax>
-<phpsyntax constant="TIDY_ATTR_ID"></phpsyntax>
-<phpsyntax constant="TIDY_ATTR_ISMAP"></phpsyntax>
-<phpsyntax constant="TIDY_ATTR_LABEL"></phpsyntax>
-<phpsyntax constant="TIDY_ATTR_LANG"></phpsyntax>
-<phpsyntax constant="TIDY_ATTR_LANGUAGE"></phpsyntax>
-<phpsyntax constant="TIDY_ATTR_LAST_MODIFIED"></phpsyntax>
-<phpsyntax constant="TIDY_ATTR_LAST_VISIT"></phpsyntax>
-<phpsyntax constant="TIDY_ATTR_LEFTMARGIN"></phpsyntax>
-<phpsyntax constant="TIDY_ATTR_LINK"></phpsyntax>
-<phpsyntax constant="TIDY_ATTR_LONGDESC"></phpsyntax>
-<phpsyntax constant="TIDY_ATTR_LOWSRC"></phpsyntax>
-<phpsyntax constant="TIDY_ATTR_MARGINHEIGHT"></phpsyntax>
-<phpsyntax constant="TIDY_ATTR_MARGINWIDTH"></phpsyntax>
-<phpsyntax constant="TIDY_ATTR_MAXLENGTH"></phpsyntax>
-<phpsyntax constant="TIDY_ATTR_MEDIA"></phpsyntax>
-<phpsyntax constant="TIDY_ATTR_METHOD"></phpsyntax>
-<phpsyntax constant="TIDY_ATTR_MULTIPLE"></phpsyntax>
-<phpsyntax constant="TIDY_ATTR_NAME"></phpsyntax>
-<phpsyntax constant="TIDY_ATTR_NOHREF"></phpsyntax>
-<phpsyntax constant="TIDY_ATTR_NORESIZE"></phpsyntax>
-<phpsyntax constant="TIDY_ATTR_NOSHADE"></phpsyntax>
-<phpsyntax constant="TIDY_ATTR_NOWRAP"></phpsyntax>
-<phpsyntax constant="TIDY_ATTR_OBJECT"></phpsyntax>
-<phpsyntax constant="TIDY_ATTR_PROFILE"></phpsyntax>
-<phpsyntax constant="TIDY_ATTR_PROMPT"></phpsyntax>
-<phpsyntax constant="TIDY_ATTR_RBSPAN"></phpsyntax>
-<phpsyntax constant="TIDY_ATTR_READONLY"></phpsyntax>
-<phpsyntax constant="TIDY_ATTR_REL"></phpsyntax>
-<phpsyntax constant="TIDY_ATTR_REV"></phpsyntax>
-<phpsyntax constant="TIDY_ATTR_RIGHTMARGIN"></phpsyntax>
-<phpsyntax constant="TIDY_ATTR_ROWS"></phpsyntax>
-<phpsyntax constant="TIDY_ATTR_ROWSPAN"></phpsyntax>
-<phpsyntax constant="TIDY_ATTR_RULES"></phpsyntax>
-<phpsyntax constant="TIDY_ATTR_SCHEME"></phpsyntax>
-<phpsyntax constant="TIDY_ATTR_SCOPE"></phpsyntax>
-<phpsyntax constant="TIDY_ATTR_SCROLLING"></phpsyntax>
-<phpsyntax constant="TIDY_ATTR_SELECTED"></phpsyntax>
-<phpsyntax constant="TIDY_ATTR_SHAPE"></phpsyntax>
-<phpsyntax constant="TIDY_ATTR_SHOWGRID"></phpsyntax>
-<phpsyntax constant="TIDY_ATTR_SHOWGRIDX"></phpsyntax>
-<phpsyntax constant="TIDY_ATTR_SHOWGRIDY"></phpsyntax>
-<phpsyntax constant="TIDY_ATTR_SIZE"></phpsyntax>
-<phpsyntax constant="TIDY_ATTR_SPAN"></phpsyntax>
-<phpsyntax constant="TIDY_ATTR_SRC"></phpsyntax>
-<phpsyntax constant="TIDY_ATTR_STANDBY"></phpsyntax>
-<phpsyntax constant="TIDY_ATTR_START"></phpsyntax>
-<phpsyntax constant="TIDY_ATTR_STYLE"></phpsyntax>
-<phpsyntax constant="TIDY_ATTR_SUMMARY"></phpsyntax>
-<phpsyntax constant="TIDY_ATTR_TABINDEX"></phpsyntax>
-<phpsyntax constant="TIDY_ATTR_TARGET"></phpsyntax>
-<phpsyntax constant="TIDY_ATTR_TEXT"></phpsyntax>
-<phpsyntax constant="TIDY_ATTR_TITLE"></phpsyntax>
-<phpsyntax constant="TIDY_ATTR_TOPMARGIN"></phpsyntax>
-<phpsyntax constant="TIDY_ATTR_TYPE"></phpsyntax>
-<phpsyntax constant="TIDY_ATTR_USEMAP"></phpsyntax>
-<phpsyntax constant="TIDY_ATTR_VALIGN"></phpsyntax>
-<phpsyntax constant="TIDY_ATTR_VALUE"></phpsyntax>
-<phpsyntax constant="TIDY_ATTR_VALUETYPE"></phpsyntax>
-<phpsyntax constant="TIDY_ATTR_VERSION"></phpsyntax>
-<phpsyntax constant="TIDY_ATTR_VLINK"></phpsyntax>
-<phpsyntax constant="TIDY_ATTR_VSPACE"></phpsyntax>
-<phpsyntax constant="TIDY_ATTR_WIDTH"></phpsyntax>
-<phpsyntax constant="TIDY_ATTR_WRAP"></phpsyntax>
-<phpsyntax constant="TIDY_ATTR_XML_LANG"></phpsyntax>
-<phpsyntax constant="TIDY_ATTR_XML_SPACE"></phpsyntax>
-<phpsyntax constant="TIDY_ATTR_XMLNS"></phpsyntax>
-<phpsyntax constant="TIDY_NODETYPE_ROOT"></phpsyntax>
-<phpsyntax constant="TIDY_NODETYPE_DOCTYPE"></phpsyntax>
-<phpsyntax constant="TIDY_NODETYPE_COMMENT"></phpsyntax>
-<phpsyntax constant="TIDY_NODETYPE_PROCINS"></phpsyntax>
-<phpsyntax constant="TIDY_NODETYPE_TEXT"></phpsyntax>
-<phpsyntax constant="TIDY_NODETYPE_START"></phpsyntax>
-<phpsyntax constant="TIDY_NODETYPE_END"></phpsyntax>
-<phpsyntax constant="TIDY_NODETYPE_STARTEND"></phpsyntax>
-<phpsyntax constant="TIDY_NODETYPE_CDATA"></phpsyntax>
-<phpsyntax constant="TIDY_NODETYPE_SECTION"></phpsyntax>
-<phpsyntax constant="TIDY_NODETYPE_ASP"></phpsyntax>
-<phpsyntax constant="TIDY_NODETYPE_JSTE"></phpsyntax>
-<phpsyntax constant="TIDY_NODETYPE_PHP"></phpsyntax>
-<phpsyntax constant="TIDY_NODETYPE_XMLDECL"></phpsyntax>
-<phpsyntax constant="T_INCLUDE"></phpsyntax>
-<phpsyntax constant="T_INCLUDE_ONCE"></phpsyntax>
-<phpsyntax constant="T_EVAL"></phpsyntax>
-<phpsyntax constant="T_REQUIRE"></phpsyntax>
-<phpsyntax constant="T_REQUIRE_ONCE"></phpsyntax>
-<phpsyntax constant="T_LOGICAL_OR"></phpsyntax>
-<phpsyntax constant="T_LOGICAL_XOR"></phpsyntax>
-<phpsyntax constant="T_LOGICAL_AND"></phpsyntax>
-<phpsyntax constant="T_PRINT"></phpsyntax>
-<phpsyntax constant="T_PLUS_EQUAL"></phpsyntax>
-<phpsyntax constant="T_MINUS_EQUAL"></phpsyntax>
-<phpsyntax constant="T_MUL_EQUAL"></phpsyntax>
-<phpsyntax constant="T_DIV_EQUAL"></phpsyntax>
-<phpsyntax constant="T_CONCAT_EQUAL"></phpsyntax>
-<phpsyntax constant="T_MOD_EQUAL"></phpsyntax>
-<phpsyntax constant="T_AND_EQUAL"></phpsyntax>
-<phpsyntax constant="T_OR_EQUAL"></phpsyntax>
-<phpsyntax constant="T_XOR_EQUAL"></phpsyntax>
-<phpsyntax constant="T_SL_EQUAL"></phpsyntax>
-<phpsyntax constant="T_SR_EQUAL"></phpsyntax>
-<phpsyntax constant="T_BOOLEAN_OR"></phpsyntax>
-<phpsyntax constant="T_BOOLEAN_AND"></phpsyntax>
-<phpsyntax constant="T_IS_EQUAL"></phpsyntax>
-<phpsyntax constant="T_IS_NOT_EQUAL"></phpsyntax>
-<phpsyntax constant="T_IS_IDENTICAL"></phpsyntax>
-<phpsyntax constant="T_IS_NOT_IDENTICAL"></phpsyntax>
-<phpsyntax constant="T_IS_SMALLER_OR_EQUAL"></phpsyntax>
-<phpsyntax constant="T_IS_GREATER_OR_EQUAL"></phpsyntax>
-<phpsyntax constant="T_SL"></phpsyntax>
-<phpsyntax constant="T_SR"></phpsyntax>
-<phpsyntax constant="T_INC"></phpsyntax>
-<phpsyntax constant="T_DEC"></phpsyntax>
-<phpsyntax constant="T_INT_CAST"></phpsyntax>
-<phpsyntax constant="T_DOUBLE_CAST"></phpsyntax>
-<phpsyntax constant="T_STRING_CAST"></phpsyntax>
-<phpsyntax constant="T_ARRAY_CAST"></phpsyntax>
-<phpsyntax constant="T_OBJECT_CAST"></phpsyntax>
-<phpsyntax constant="T_BOOL_CAST"></phpsyntax>
-<phpsyntax constant="T_UNSET_CAST"></phpsyntax>
-<phpsyntax constant="T_NEW"></phpsyntax>
-<phpsyntax constant="T_EXIT"></phpsyntax>
-<phpsyntax constant="T_IF"></phpsyntax>
-<phpsyntax constant="T_ELSEIF"></phpsyntax>
-<phpsyntax constant="T_ELSE"></phpsyntax>
-<phpsyntax constant="T_ENDIF"></phpsyntax>
-<phpsyntax constant="T_LNUMBER"></phpsyntax>
-<phpsyntax constant="T_DNUMBER"></phpsyntax>
-<phpsyntax constant="T_STRING"></phpsyntax>
-<phpsyntax constant="T_STRING_VARNAME"></phpsyntax>
-<phpsyntax constant="T_VARIABLE"></phpsyntax>
-<phpsyntax constant="T_NUM_STRING"></phpsyntax>
-<phpsyntax constant="T_INLINE_HTML"></phpsyntax>
-<phpsyntax constant="T_CHARACTER"></phpsyntax>
-<phpsyntax constant="T_BAD_CHARACTER"></phpsyntax>
-<phpsyntax constant="T_ENCAPSED_AND_WHITESPACE"></phpsyntax>
-<phpsyntax constant="T_CONSTANT_ENCAPSED_STRING"></phpsyntax>
-<phpsyntax constant="T_ECHO"></phpsyntax>
-<phpsyntax constant="T_DO"></phpsyntax>
-<phpsyntax constant="T_WHILE"></phpsyntax>
-<phpsyntax constant="T_ENDWHILE"></phpsyntax>
-<phpsyntax constant="T_FOR"></phpsyntax>
-<phpsyntax constant="T_ENDFOR"></phpsyntax>
-<phpsyntax constant="T_FOREACH"></phpsyntax>
-<phpsyntax constant="T_ENDFOREACH"></phpsyntax>
-<phpsyntax constant="T_DECLARE"></phpsyntax>
-<phpsyntax constant="T_ENDDECLARE"></phpsyntax>
-<phpsyntax constant="T_AS"></phpsyntax>
-<phpsyntax constant="T_SWITCH"></phpsyntax>
-<phpsyntax constant="T_ENDSWITCH"></phpsyntax>
-<phpsyntax constant="T_CASE"></phpsyntax>
-<phpsyntax constant="T_DEFAULT"></phpsyntax>
-<phpsyntax constant="T_BREAK"></phpsyntax>
-<phpsyntax constant="T_CONTINUE"></phpsyntax>
-<phpsyntax constant="T_OLD_FUNCTION"></phpsyntax>
-<phpsyntax constant="T_FUNCTION"></phpsyntax>
-<phpsyntax constant="T_CONST"></phpsyntax>
-<phpsyntax constant="T_RETURN"></phpsyntax>
-<phpsyntax constant="T_USE"></phpsyntax>
-<phpsyntax constant="T_GLOBAL"></phpsyntax>
-<phpsyntax constant="T_STATIC"></phpsyntax>
-<phpsyntax constant="T_VAR"></phpsyntax>
-<phpsyntax constant="T_UNSET"></phpsyntax>
-<phpsyntax constant="T_ISSET"></phpsyntax>
-<phpsyntax constant="T_EMPTY"></phpsyntax>
-<phpsyntax constant="T_CLASS"></phpsyntax>
-<phpsyntax constant="T_EXTENDS"></phpsyntax>
-<phpsyntax constant="T_OBJECT_OPERATOR"></phpsyntax>
-<phpsyntax constant="T_DOUBLE_ARROW"></phpsyntax>
-<phpsyntax constant="T_LIST"></phpsyntax>
-<phpsyntax constant="T_ARRAY"></phpsyntax>
-<phpsyntax constant="T_LINE"></phpsyntax>
-<phpsyntax constant="T_FILE"></phpsyntax>
-<phpsyntax constant="T_COMMENT"></phpsyntax>
-<phpsyntax constant="T_ML_COMMENT"></phpsyntax>
-<phpsyntax constant="T_DOC_COMMENT"></phpsyntax>
-<phpsyntax constant="T_OPEN_TAG"></phpsyntax>
-<phpsyntax constant="T_OPEN_TAG_WITH_ECHO"></phpsyntax>
-<phpsyntax constant="T_CLOSE_TAG"></phpsyntax>
-<phpsyntax constant="T_WHITESPACE"></phpsyntax>
-<phpsyntax constant="T_START_HEREDOC"></phpsyntax>
-<phpsyntax constant="T_END_HEREDOC"></phpsyntax>
-<phpsyntax constant="T_DOLLAR_OPEN_CURLY_BRACES"></phpsyntax>
-<phpsyntax constant="T_CURLY_OPEN"></phpsyntax>
-<phpsyntax constant="T_PAAMAYIM_NEKUDOTAYIM"></phpsyntax>
-<phpsyntax constant="T_DOUBLE_COLON"></phpsyntax>
-<phpsyntax constant="ODBC_TYPE"></phpsyntax>
-<phpsyntax constant="ODBC_BINMODE_PASSTHRU"></phpsyntax>
-<phpsyntax constant="ODBC_BINMODE_RETURN"></phpsyntax>
-<phpsyntax constant="ODBC_BINMODE_CONVERT"></phpsyntax>
-<phpsyntax constant="SQL_ODBC_CURSORS"></phpsyntax>
-<phpsyntax constant="SQL_CUR_USE_DRIVER"></phpsyntax>
-<phpsyntax constant="SQL_CUR_USE_IF_NEEDED"></phpsyntax>
-<phpsyntax constant="SQL_CUR_USE_ODBC"></phpsyntax>
-<phpsyntax constant="SQL_CONCURRENCY"></phpsyntax>
-<phpsyntax constant="SQL_CONCUR_READ_ONLY"></phpsyntax>
-<phpsyntax constant="SQL_CONCUR_LOCK"></phpsyntax>
-<phpsyntax constant="SQL_CONCUR_ROWVER"></phpsyntax>
-<phpsyntax constant="SQL_CONCUR_VALUES"></phpsyntax>
-<phpsyntax constant="SQL_CURSOR_TYPE"></phpsyntax>
-<phpsyntax constant="SQL_CURSOR_FORWARD_ONLY"></phpsyntax>
-<phpsyntax constant="SQL_CURSOR_KEYSET_DRIVEN"></phpsyntax>
-<phpsyntax constant="SQL_CURSOR_DYNAMIC"></phpsyntax>
-<phpsyntax constant="SQL_CURSOR_STATIC"></phpsyntax>
-<phpsyntax constant="SQL_KEYSET_SIZE"></phpsyntax>
-<phpsyntax constant="SQL_CHAR"></phpsyntax>
-<phpsyntax constant="SQL_VARCHAR"></phpsyntax>
-<phpsyntax constant="SQL_LONGVARCHAR"></phpsyntax>
-<phpsyntax constant="SQL_DECIMAL"></phpsyntax>
-<phpsyntax constant="SQL_NUMERIC"></phpsyntax>
-<phpsyntax constant="SQL_BIT"></phpsyntax>
-<phpsyntax constant="SQL_TINYINT"></phpsyntax>
-<phpsyntax constant="SQL_SMALLINT"></phpsyntax>
-<phpsyntax constant="SQL_INTEGER"></phpsyntax>
-<phpsyntax constant="SQL_BIGINT"></phpsyntax>
-<phpsyntax constant="SQL_REAL"></phpsyntax>
-<phpsyntax constant="SQL_FLOAT"></phpsyntax>
-<phpsyntax constant="SQL_DOUBLE"></phpsyntax>
-<phpsyntax constant="SQL_BINARY"></phpsyntax>
-<phpsyntax constant="SQL_VARBINARY"></phpsyntax>
-<phpsyntax constant="SQL_LONGVARBINARY"></phpsyntax>
-<phpsyntax constant="SQL_DATE"></phpsyntax>
-<phpsyntax constant="SQL_TIME"></phpsyntax>
-<phpsyntax constant="SQL_TIMESTAMP"></phpsyntax>
-<phpsyntax constant="SQL_TYPE_DATE"></phpsyntax>
-<phpsyntax constant="SQL_TYPE_TIME"></phpsyntax>
-<phpsyntax constant="SQL_TYPE_TIMESTAMP"></phpsyntax>
-<phpsyntax constant="SQL_BEST_ROWID"></phpsyntax>
-<phpsyntax constant="SQL_ROWVER"></phpsyntax>
-<phpsyntax constant="SQL_SCOPE_CURROW"></phpsyntax>
-<phpsyntax constant="SQL_SCOPE_TRANSACTION"></phpsyntax>
-<phpsyntax constant="SQL_SCOPE_SESSION"></phpsyntax>
-<phpsyntax constant="SQL_NO_NULLS"></phpsyntax>
-<phpsyntax constant="SQL_NULLABLE"></phpsyntax>
-<phpsyntax constant="SQL_INDEX_UNIQUE"></phpsyntax>
-<phpsyntax constant="SQL_INDEX_ALL"></phpsyntax>
-<phpsyntax constant="SQL_ENSURE"></phpsyntax>
-<phpsyntax constant="SQL_QUICK"></phpsyntax>
-<phpsyntax constant="DC_MICROSOFT"></phpsyntax>
-<phpsyntax constant="DC_BORLAND"></phpsyntax>
-<phpsyntax constant="DC_CALL_CDECL"></phpsyntax>
-<phpsyntax constant="DC_CALL_STD"></phpsyntax>
-<phpsyntax constant="DC_RETVAL_MATH4"></phpsyntax>
-<phpsyntax constant="DC_RETVAL_MATH8"></phpsyntax>
-<phpsyntax constant="DC_CALL_STD_BO"></phpsyntax>
-<phpsyntax constant="DC_CALL_STD_MS"></phpsyntax>
-<phpsyntax constant="DC_CALL_STD_M8"></phpsyntax>
-<phpsyntax constant="DC_FLAG_ARGPTR"></phpsyntax>
-<phpsyntax constant="XDIFF_PATCH_NORMAL"></phpsyntax>
-<phpsyntax constant="XDIFF_PATCH_REVERSE"></phpsyntax>
-<phpsyntax constant="XML_ERROR_NONE"></phpsyntax>
-<phpsyntax constant="XML_ERROR_NO_MEMORY"></phpsyntax>
-<phpsyntax constant="XML_ERROR_SYNTAX"></phpsyntax>
-<phpsyntax constant="XML_ERROR_NO_ELEMENTS"></phpsyntax>
-<phpsyntax constant="XML_ERROR_INVALID_TOKEN"></phpsyntax>
-<phpsyntax constant="XML_ERROR_UNCLOSED_TOKEN"></phpsyntax>
-<phpsyntax constant="XML_ERROR_PARTIAL_CHAR"></phpsyntax>
-<phpsyntax constant="XML_ERROR_TAG_MISMATCH"></phpsyntax>
-<phpsyntax constant="XML_ERROR_DUPLICATE_ATTRIBUTE"></phpsyntax>
-<phpsyntax constant="XML_ERROR_JUNK_AFTER_DOC_ELEMENT"></phpsyntax>
-<phpsyntax constant="XML_ERROR_PARAM_ENTITY_REF"></phpsyntax>
-<phpsyntax constant="XML_ERROR_UNDEFINED_ENTITY"></phpsyntax>
-<phpsyntax constant="XML_ERROR_RECURSIVE_ENTITY_REF"></phpsyntax>
-<phpsyntax constant="XML_ERROR_ASYNC_ENTITY"></phpsyntax>
-<phpsyntax constant="XML_ERROR_BAD_CHAR_REF"></phpsyntax>
-<phpsyntax constant="XML_ERROR_BINARY_ENTITY_REF"></phpsyntax>
-<phpsyntax constant="XML_ERROR_ATTRIBUTE_EXTERNAL_ENTITY_REF"></phpsyntax>
-<phpsyntax constant="XML_ERROR_MISPLACED_XML_PI"></phpsyntax>
-<phpsyntax constant="XML_ERROR_UNKNOWN_ENCODING"></phpsyntax>
-<phpsyntax constant="XML_ERROR_INCORRECT_ENCODING"></phpsyntax>
-<phpsyntax constant="XML_ERROR_UNCLOSED_CDATA_SECTION"></phpsyntax>
-<phpsyntax constant="XML_ERROR_EXTERNAL_ENTITY_HANDLING"></phpsyntax>
-<phpsyntax constant="XML_OPTION_CASE_FOLDING"></phpsyntax>
-<phpsyntax constant="XML_OPTION_TARGET_ENCODING"></phpsyntax>
-<phpsyntax constant="XML_OPTION_SKIP_TAGSTART"></phpsyntax>
-<phpsyntax constant="XML_OPTION_SKIP_WHITE"></phpsyntax>
-<phpsyntax constant="XSLT_OPT_SILENT"></phpsyntax>
-<phpsyntax constant="XSLT_SABOPT_PARSE_PUBLIC_ENTITIES"></phpsyntax>
-<phpsyntax constant="XSLT_SABOPT_DISABLE_ADDING_META"></phpsyntax>
-<phpsyntax constant="XSLT_SABOPT_DISABLE_STRIPPING"></phpsyntax>
-<phpsyntax constant="XSLT_SABOPT_IGNORE_DOC_NOT_FOUND"></phpsyntax>
-<phpsyntax constant="XSLT_ERR_UNSUPPORTED_SCHEME"></phpsyntax>
-<phpsyntax constant="FORCE_GZIP"></phpsyntax>
-<phpsyntax constant="FORCE_DEFLATE"></phpsyntax>
-
-
-</phpstandardsyntax>
diff --git a/net.sourceforge.phpeclipse/src/net/sourceforge/phpeclipse/phpeditor/syntax.xml b/net.sourceforge.phpeclipse/src/net/sourceforge/phpeclipse/phpeditor/syntax.xml
new file mode 100644 (file)
index 0000000..e55c62f
--- /dev/null
@@ -0,0 +1,4825 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<phpstandardsyntax>
+<s f="class_exists" u="bool class_exists(string classname [, bool autoload])">Checks if the class exists</s>
+<s f="create_function" u="string create_function(string args, string code)">Creates an anonymous function, and returns its name (funny, eh?)</s>
+<s f="debug_backtrace" u="array debug_backtrace(void)">Return backtrace as array</s>
+<s f="debug_print_backtrace" u="void debug_print_backtrace(void)"/>
+<s f="define" u="bool define(string constant_name, mixed value, case_sensitive=true)">Define a new constant</s>
+<s f="defined" u="bool defined(string constant_name)">Check whether a constant exists</s>
+<s f="each" u="array each(array arr)">Return the currently pointed key..value pair in the passed array, and advance the pointer to the next element</s>
+<s f="error_reporting" u="int error_reporting(int new_error_level=null)">Return the current error_reporting level, and if an argument was passed - change to the new level</s>
+<s f="extension_loaded" u="bool extension_loaded(string extension_name)">Returns true if the named extension is loaded</s>
+<s f="func_get_arg" u="mixed func_get_arg(int arg_num)">Get the $arg_num'th argument that was passed to the function</s>
+<s f="func_get_args" u="array func_get_args()">Get an array of the arguments that were passed to the function</s>
+<s f="func_num_args" u="int func_num_args(void)">Get the number of arguments that were passed to the function</s>
+<s f="function_exists" u="bool function_exists(string function_name)">Checks if the function exists</s>
+<s f="get_class" u="string get_class([object object])">Retrieves the class name</s>
+<s f="get_class_methods" u="array get_class_methods(mixed class)">Returns an array of method names for class or class instance.</s>
+<s f="get_class_vars" u="array get_class_vars(string class_name)">Returns an array of default properties of the class</s>
+<s f="get_declared_classes" u="array get_declared_classes()">Returns an array of all declared classes.</s>
+<s f="get_declared_interfaces" u="array get_declared_interfaces()">Returns an array of all declared interfaces.</s>
+<s f="get_defined_constants" u="array get_defined_constants(void)">Return an array containing the names and values of all defined constants</s>
+<s f="get_defined_functions" u="array get_defined_functions(void)">Returns an array of all defined functions</s>
+<s f="get_defined_vars" u="array get_defined_vars(void)">Returns an associative array of names and values of all currently defined variable names (variables in the current scope)</s>
+<s f="get_extension_funcs" u="array get_extension_funcs(string extension_name)">Returns an array with the names of functions belonging to the named extension</s>
+<s f="get_included_files" u="array get_included_files(void)">Returns an array with the file names that were include_once()'d</s>
+<s f="get_loaded_extensions" u="array get_loaded_extensions(void)">Return an array containing names of loaded extensions</s>
+<s f="get_object_vars" u="array get_object_vars(object obj)">Returns an array of object properties</s>
+<s f="get_parent_class" u="string get_parent_class(mixed object)">Retrieves the parent class name for object or class.</s>
+<s f="get_resource_type" u="string get_resource_type(resource res)">Get the resource type name for a given resource</s>
+<s f="is_a" u="bool is_a(object object, string class_name)">Returns true if the object is of this class or has this class as one of its parents</s>
+<s f="is_subclass_of" u="bool is_subclass_of(object object, string class_name)">Returns true if the object has this class as one of its parents</s>
+<s f="leak" u="void leak(int num_bytes=3)">Cause an intentional memory leak, for testing/debugging purposes</s>
+<s f="method_exists" u="bool method_exists(object object, string method)">Checks if the class method exists</s>
+<s f="restore_error_handler" u="void restore_error_handler(void)">Restores the previously defined error handler function</s>
+<s f="restore_exception_handler" u="void restore_exception_handler(void)">Restores the previously defined exception handler function</s>
+<s f="set_error_handler" u="string set_error_handler(string error_handler [, int error_types])">Sets a user-defined error handler function.  Returns the previously defined error handler, or false on error</s>
+<s f="set_exception_handler" u="string set_exception_handler(callable exception_handler)">Sets a user-defined exception handler function.  Returns the previously defined exception handler, or false on error</s>
+<s f="strcasecmp" u="int strcasecmp(string str1, string str2)">Binary safe case-insensitive string comparison</s>
+<s f="strcmp" u="int strcmp(string str1, string str2)">Binary safe string comparison</s>
+<s f="strlen" u="int strlen(string str)">Get string length</s>
+<s f="strncasecmp" u="int strncasecmp(string str1, string str2, int len)">Binary safe string comparison</s>
+<s f="strncmp" u="int strncmp(string str1, string str2, int len)">Binary safe string comparison</s>
+<s f="trigger_error" u="void trigger_error(string messsage [, int error_type])">Generates a user-level error/warning/notice message</s>
+<s f="zend_version" u="string zend_version(void)">Get the version of the Zend Engine</s>
+<s f="bcadd" u="string bcadd(string left_operand, string right_operand [, int scale])">Returns the sum of two arbitrary precision numbers</s>
+<s f="bccomp" u="int bccomp(string left_operand, string right_operand [, int scale])">Compares two arbitrary precision numbers</s>
+<s f="bcdiv" u="string bcdiv(string left_operand, string right_operand [, int scale])">Returns the quotient of two arbitrary precision numbers (division)</s>
+<s f="bcmod" u="string bcmod(string left_operand, string right_operand)">Returns the modulus of the two arbitrary precision operands</s>
+<s f="bcmul" u="string bcmul(string left_operand, string right_operand [, int scale])">Returns the multiplication of two arbitrary precision numbers</s>
+<s f="bcpow" u="string bcpow(string x, string y [, int scale])">Returns the value of an arbitrary precision number raised to the power of another</s>
+<s f="bcpowmod" u="string bcpowmod(string x, string y, string mod [, int scale])">Returns the value of an arbitrary precision number raised to the power of another reduced by a modulous</s>
+<s f="bcscale" u="bool bcscale(int scale)">Sets default scale parameter for all bc math functions</s>
+<s f="bcsqrt" u="string bcsqrt(string operand [, int scale])">Returns the square root of an arbitray precision number</s>
+<s f="bcsub" u="string bcsub(string left_operand, string right_operand [, int scale])">Returns the difference between two arbitrary precision numbers</s>
+<s f="bzcompress" u="string bzcompress(string source [, int blocksize100k [, int workfactor]])">Compresses a string into BZip2 encoded data</s>
+<s f="bzdecompress" u="string bzdecompress(string source [, int small])">Decompresses BZip2 compressed data</s>
+<s f="bzerrno" u="int bzerrno(resource bz)">Returns the error number</s>
+<s f="bzerror" u="array bzerror(resource bz)">Returns the error number and error string in an associative array</s>
+<s f="bzerrstr" u="string bzerrstr(resource bz)">Returns the error string</s>
+<s f="bzopen" u="resource bzopen(string|int file|fp, string mode)">Opens a new BZip2 stream</s>
+<s f="bzread" u="string bzread(int bz[, int length])">Reads up to length bytes from a BZip2 stream, or 1024 bytes if length is not specified</s>
+<s f="jdtounix" u="int jdtounix(int jday)">Convert Julian Day to UNIX timestamp</s>
+<s f="unixtojd" u="int unixtojd([int timestamp])">Convert UNIX timestamp to Julian Day</s>
+<s f="cal_days_in_month" u="int cal_days_in_month(int calendar, int month, int year)">Returns the number of days in a month for a given year and calendar</s>
+<s f="cal_from_jd" u="array cal_from_jd(int jd, int calendar)">Converts from Julian Day Count to a supported calendar and return extended information</s>
+<s f="cal_info" u="array cal_info(int calendar)">Returns information about a particular calendar</s>
+<s f="cal_to_jd" u="int cal_to_jd(int calendar, int month, int day, int year)">Converts from a supported calendar to Julian Day Count</s>
+<s f="frenchtojd" u="int frenchtojd(int month, int day, int year)">Converts a french republic calendar date to julian day count</s>
+<s f="gregoriantojd" u="int gregoriantojd(int month, int day, int year)">Converts a gregorian calendar date to julian day count</s>
+<s f="jddayofweek" u="mixed jddayofweek(int juliandaycount [, int mode])">Returns name or number of day of week from julian day count</s>
+<s f="jdmonthname" u="string jdmonthname(int juliandaycount, int mode)">Returns name of month for julian day count</s>
+<s f="jdtofrench" u="string jdtofrench(int juliandaycount)">Converts a julian day count to a french republic calendar date</s>
+<s f="jdtogregorian" u="string jdtogregorian(int juliandaycount)">Converts a julian day count to a gregorian calendar date</s>
+<s f="jdtojewish" u="string jdtojewish(int juliandaycount [, bool hebrew [, int fl]])">Converts a julian day count to a jewish calendar date</s>
+<s f="jdtojulian" u="string jdtojulian(int juliandaycount)">Convert a julian day count to a julian calendar date</s>
+<s f="jewishtojd" u="int jewishtojd(int month, int day, int year)">Converts a jewish calendar date to a julian day count</s>
+<s f="juliantojd" u="int juliantojd(int month, int day, int year)">Converts a julian calendar date to julian day count</s>
+<s f="easter_date" u="int easter_date([int year])">Return the timestamp of midnight on Easter of a given year (defaults to current year)</s>
+<s f="easter_days" u="int easter_days([int year, [int method]])">Return the number of days after March 21 that Easter falls on for a given year (defaults to current year)</s>
+<s f="com_create_guid" u="string com_create_guid()">Generate a globally unique identifier (GUID)</s>
+<s f="com_event_sink" u="bool com_event_sink(object comobject, object sinkobject [, mixed sinkinterface])">Connect events from a COM object to a PHP object</s>
+<s f="com_load_typelib" u="bool com_load_typelib(string typelib_name [, int case_insensitive])">Loads a Typelibrary and registers its constants</s>
+<s f="com_message_pump" u="bool com_message_pump([int timeoutms])">Process COM messages, sleeping for up to timeoutms milliseconds</s>
+<s f="com_print_typeinfo" u="bool com_print_typeinfo(object comobject | string typelib, string dispinterface, bool wantsink)">Print out a PHP class definition for a dispatchable interface</s>
+<s f="variant_abs" u="mixed variant_abs(mixed left)">Returns the absolute value of a variant</s>
+<s f="variant_add" u="mixed variant_add(mixed left, mixed right)">"Adds" two variant values together and returns the result</s>
+<s f="variant_and" u="mixed variant_and(mixed left, mixed right)">performs a bitwise AND operation between two variants and returns the result</s>
+<s f="variant_cast" u="object variant_cast(object variant, int type)">Convert a variant into a new variant object of another type</s>
+<s f="variant_cat" u="mixed variant_cat(mixed left, mixed right)">concatenates two variant values together and returns the result</s>
+<s f="variant_cmp" u="int variant_cmp(mixed left, mixed right [, int lcid [, int flags]])">Compares two variants</s>
+<s f="variant_date_from_timestamp" u="object variant_date_from_timestamp(int timestamp)">Returns a variant date representation of a unix timestamp</s>
+<s f="variant_date_to_timestamp" u="int variant_date_to_timestamp(object variant)">Converts a variant date/time value to unix timestamp</s>
+<s f="variant_div" u="mixed variant_div(mixed left, mixed right)">Returns the result from dividing two variants</s>
+<s f="variant_eqv" u="mixed variant_eqv(mixed left, mixed right)">Performs a bitwise equivalence on two variants</s>
+<s f="variant_fix" u="mixed variant_fix(mixed left)">Returns the ? of a variant</s>
+<s f="variant_get_type" u="int variant_get_type(object variant)">Returns the VT_XXX type code for a variant</s>
+<s f="variant_idiv" u="mixed variant_idiv(mixed left, mixed right)">Converts variants to operands and then returns the result from dividing them</s>
+<s f="variant_imp" u="mixed variant_imp(mixed left, mixed right)">Performs a bitwise implication on two variants</s>
+<s f="variant_index_get" u="mixed variant_index_get(object variant, mixed index1 [, mixed index2 [, ...]])">Get the value of a multi dimensional array property</s>
+<s f="variant_int" u="mixed variant_int(mixed left)">Returns the integer portion of a variant</s>
+<s f="variant_mod" u="mixed variant_mod(mixed left, mixed right)">Divides two variants and returns only the remainder</s>
+<s f="variant_mul" u="mixed variant_mul(mixed left, mixed right)">multiplies the values of the two variants and returns the result</s>
+<s f="variant_neg" u="mixed variant_neg(mixed left)">Performs logical negation on a variant</s>
+<s f="variant_not" u="mixed variant_not(mixed left)">Performs bitwise not negation on a variant</s>
+<s f="variant_or" u="mixed variant_or(mixed left, mixed right)">Performs a logical disjunction on two variants</s>
+<s f="variant_pow" u="mixed variant_pow(mixed left, mixed right)">Returns the result of performing the power function with two variants</s>
+<s f="variant_round" u="mixed variant_round(mixed left, int decimals)">Rounds a variant to the specified number of decimal places</s>
+<s f="variant_set" u="void variant_set(object variant, mixed value)">Assigns a new value for a variant object (like "set" in VB)</s>
+<s f="variant_set_type" u="void variant_set_type(object variant, int type)">Convert a variant into another type.  Variant is modified "in-place"</s>
+<s f="variant_sub" u="mixed variant_sub(mixed left, mixed right)">subjects the value of the right variant from the left variant value and returns the result</s>
+<s f="variant_xor" u="mixed variant_xor(mixed left, mixed right)">Performs a logical exclusion on two variants</s>
+<s f="cpdf_add_annotation" u="bool cpdf_add_annotation(int pdfdoc, float xll, float yll, float xur, float xur, string title, string text [, int mode])">Sets annotation</s>
+<s f="cpdf_add_outline" u="int cpdf_add_outline(int pdfdoc, int lastoutline, int sublevel, int open, int pagenr, string title)">Adds outline</s>
+<s f="cpdf_arc" u="bool cpdf_arc(int pdfdoc, float x, float y, float radius, float start, float end [, int mode])">Draws an arc</s>
+<s f="cpdf_begin_text" u="bool cpdf_begin_text(int pdfdoc)">Starts text section</s>
+<s f="cpdf_circle" u="bool cpdf_circle(int pdfdoc, float x, float y, float radius [, int mode])">Draws a circle</s>
+<s f="cpdf_clip" u="bool cpdf_clip(int pdfdoc)">Clips to current path</s>
+<s f="cpdf_close" u="bool cpdf_close(int pdfdoc)">Closes the pdf document</s>
+<s f="cpdf_closepath" u="bool cpdf_closepath(int pdfdoc)">Close path</s>
+<s f="cpdf_closepath_fill_stroke" u="bool cpdf_closepath_fill_stroke(int pdfdoc)">Close, fill and stroke current path</s>
+<s f="cpdf_closepath_stroke" u="bool cpdf_closepath_stroke(int pdfdoc)">Close path and draw line along path</s>
+<s f="cpdf_continue_text" u="bool cpdf_continue_text(int pdfdoc, string text)">Outputs text in next line</s>
+<s f="cpdf_curveto" u="bool cpdf_curveto(int pdfdoc, float x1, float y1, float x2, float y2, float x3, float y3 [, int mode])">Draws a curve</s>
+<s f="cpdf_end_text" u="bool cpdf_end_text(int pdfdoc)">Ends text section</s>
+<s f="cpdf_fill" u="bool cpdf_fill(int pdfdoc)">Fills current path</s>
+<s f="cpdf_fill_stroke" u="bool cpdf_fill_stroke(int pdfdoc)">Fills and stroke current path</s>
+<s f="cpdf_finalize" u="bool cpdf_finalize(int pdfdoc)">Creates PDF doc in memory</s>
+<s f="cpdf_finalize_page" u="bool cpdf_finalize_page(int pdfdoc, int pagenr)">Ends the page to save memory</s>
+<s f="cpdf_global_set_document_limits" u="bool cpdf_global_set_document_limits(int maxPages, int maxFonts, int maxImages, int maxAnnots, int maxObjects)">Sets document settings for all documents</s>
+<s f="cpdf_import_jpeg" u="bool cpdf_import_jpeg(int pdfdoc, string filename, float x, float y, float angle, float width, float height, float x_scale, float y_scale, int gsave [, int mode])">Includes JPEG image</s>
+<s f="cpdf_lineto" u="bool cpdf_lineto(int pdfdoc, float x, float y [, int mode])">Draws a line</s>
+<s f="cpdf_moveto" u="bool cpdf_moveto(int pdfdoc, float x, float y [, int mode])">Sets current point</s>
+<s f="cpdf_newpath" u="bool cpdf_newpath(int pdfdoc)">Starts new path</s>
+<s f="cpdf_open" u="int cpdf_open(int compression [, string filename [, array doc_limits]])">Opens a new pdf document</s>
+<s f="cpdf_output_buffer" u="bool cpdf_output_buffer(int pdfdoc)">Returns the internal memory stream as string</s>
+<s f="cpdf_page_init" u="bool cpdf_page_init(int pdfdoc, int pagenr, int orientation, int height, int width [, float unit])">Starts page</s>
+<s f="cpdf_place_inline_image" u="bool cpdf_place_inline_image(int pdfdoc, int gdimage, float x, float y, float angle, fload width, float height, int gsave [, int mode])">Includes image</s>
+<s f="cpdf_rect" u="bool cpdf_rect(int pdfdoc, float x, float y, float width, float height [, int mode])">Draws a rectangle</s>
+<s f="cpdf_restore" u="bool cpdf_restore(int pdfdoc)">Restores formerly saved enviroment</s>
+<s f="cpdf_rlineto" u="bool cpdf_rlineto(int pdfdoc, float x, float y [, int mode])">Draws a line relative to current point</s>
+<s f="cpdf_rmoveto" u="bool cpdf_rmoveto(int pdfdoc, float x, float y [, int mode])">Sets current point</s>
+<s f="cpdf_rotate" u="bool cpdf_rotate(int pdfdoc, float angle)">Sets rotation</s>
+<s f="cpdf_rotate_text" u="bool cpdf_rotate_text(int pdfdoc, float angle)">Sets text rotation angle</s>
+<s f="cpdf_save" u="bool cpdf_save(int pdfdoc)">Saves current enviroment</s>
+<s f="cpdf_save_to_file" u="bool cpdf_save_to_file(int pdfdoc, string filename)">Saves the internal memory stream to a file</s>
+<s f="cpdf_scale" u="bool cpdf_scale(int pdfdoc, float x_scale, float y_scale)">Sets scaling</s>
+<s f="cpdf_set_action_url" u="bool cpdf_set_action_url(int pdfdoc, float xll, float yll, float xur, float xur, string url [, int mode])">Sets hyperlink</s>
+<s f="cpdf_set_char_spacing" u="bool cpdf_set_char_spacing(int pdfdoc, float space)">Sets character spacing</s>
+<s f="cpdf_set_creator" u="bool cpdf_set_creator(int pdfdoc, string creator)">Sets the creator field</s>
+<s f="cpdf_set_current_page" u="bool cpdf_set_current_page(int pdfdoc, int pagenr)">Sets page for output</s>
+<s f="cpdf_set_font" u="bool cpdf_set_font(int pdfdoc, string font, float size, string encoding)">Selects the current font face, size and encoding</s>
+<s f="cpdf_set_font_directories" u="bool cpdf_set_font_directories(int pdfdoc, string pfmdir, string pfbdir)">Sets directories to search when using external fonts</s>
+<s f="cpdf_set_font_map_file" u="bool cpdf_set_font_map_file(int pdfdoc, string filename)">Sets fontname to filename translation map when using external fonts</s>
+<s f="cpdf_set_horiz_scaling" u="bool cpdf_set_horiz_scaling(int pdfdoc, float scale)">Sets horizontal scaling of text</s>
+<s f="cpdf_set_keywords" u="bool cpdf_set_keywords(int pdfptr, string keywords)">Fills the keywords field of the info structure</s>
+<s f="cpdf_set_leading" u="bool cpdf_set_leading(int pdfdoc, float distance)">Sets distance between text lines</s>
+<s f="cpdf_set_page_animation" u="bool cpdf_set_page_animation(int pdfdoc, int transition, float duration, float direction, int orientation, int inout)">Sets transition between pages</s>
+<s f="cpdf_set_subject" u="bool cpdf_set_subject(int pdfptr, string subject)">Fills the subject field of the info structure</s>
+<s f="cpdf_set_text_matrix" u="bool cpdf_set_text_matrix(int pdfdoc, arry matrix)">Sets the text matrix</s>
+<s f="cpdf_set_text_pos" u="bool cpdf_set_text_pos(int pdfdoc, float x, float y [, int mode])">Sets the position of text for the next cpdf_show call</s>
+<s f="cpdf_set_text_rendering" u="bool cpdf_set_text_rendering(int pdfdoc, int rendermode)">Determines how text is rendered</s>
+<s f="cpdf_set_text_rise" u="bool cpdf_set_text_rise(int pdfdoc, float value)">Sets the text rise</s>
+<s f="cpdf_set_title" u="bool cpdf_set_title(int pdfptr, string title)">Fills the title field of the info structure</s>
+<s f="cpdf_set_viewer_preferences" u="bool cpdf_set_viewer_preferences(int pdfdoc, array preferences)">How to show the document in the viewer</s>
+<s f="cpdf_set_word_spacing" u="bool cpdf_set_word_spacing(int pdfdoc, float space)">Sets spacing between words</s>
+<s f="cpdf_setdash" u="bool cpdf_setdash(int pdfdoc, long white, long black)">Sets dash pattern</s>
+<s f="cpdf_setflat" u="bool cpdf_setflat(int pdfdoc, float value)">Sets flatness</s>
+<s f="cpdf_setgray" u="bool cpdf_setgray(int pdfdoc, float value)">Sets drawing and filling color to gray value</s>
+<s f="cpdf_setgray_fill" u="bool cpdf_setgray_fill(int pdfdoc, float value)">Sets filling color to gray value</s>
+<s f="cpdf_setgray_stroke" u="bool cpdf_setgray_stroke(int pdfdoc, float value)">Sets drawing color to gray value</s>
+<s f="cpdf_setlinecap" u="bool cpdf_setlinecap(int pdfdoc, int value)">Sets linecap parameter</s>
+<s f="cpdf_setlinejoin" u="bool cpdf_setlinejoin(int pdfdoc, int value)">Sets linejoin parameter</s>
+<s f="cpdf_setlinewidth" u="bool cpdf_setlinewidth(int pdfdoc, float width)">Sets line width</s>
+<s f="cpdf_setmiterlimit" u="bool cpdf_setmiterlimit(int pdfdoc, float value)">Sets miter limit</s>
+<s f="cpdf_setrgbcolor" u="bool cpdf_setrgbcolor(int pdfdoc, float red, float green, float blue)">Sets drawing and filling color to RGB color value</s>
+<s f="cpdf_setrgbcolor_fill" u="bool cpdf_setrgbcolor_fill(int pdfdoc, float red, float green, float blue)">Sets filling color to rgb color value</s>
+<s f="cpdf_setrgbcolor_stroke" u="bool cpdf_setrgbcolor_stroke(int pdfdoc, float red, float green, float blue)">Sets drawing color to RGB color value</s>
+<s f="cpdf_show" u="bool cpdf_show(int pdfdoc, string text)">Output text at current position</s>
+<s f="cpdf_show_xy" u="bool cpdf_show_xy(int pdfdoc, string text, float x-koor, float y-koor [, int mode])">Output text at position</s>
+<s f="cpdf_stringwidth" u="float cpdf_stringwidth(int pdfdoc, string text)">Returns width of text in current font</s>
+<s f="cpdf_stroke" u="bool cpdf_stroke(int pdfdoc)">Draws line along path path</s>
+<s f="cpdf_text" u="bool cpdf_text(int pdfdoc, string text [, float x-koor, float y-koor [, int mode [, float orientation [, int alignmode]]]])">Outputs text</s>
+<s f="cpdf_translate" u="bool cpdf_translate(int pdfdoc, float x, float y)">Sets origin of coordinate system</s>
+<s f="ctype_alnum" u="bool ctype_alnum(mixed c)">Checks for alphanumeric character(s)</s>
+<s f="ctype_alpha" u="bool ctype_alpha(mixed c)">Checks for alphabetic character(s)</s>
+<s f="ctype_cntrl" u="bool ctype_cntrl(mixed c)">Checks for control character(s)</s>
+<s f="ctype_digit" u="bool ctype_digit(mixed c)">Checks for numeric character(s)</s>
+<s f="ctype_graph" u="bool ctype_graph(mixed c)">Checks for any printable character(s) except space</s>
+<s f="ctype_lower" u="bool ctype_lower(mixed c)">Checks for lowercase character(s)</s>
+<s f="ctype_print" u="bool ctype_print(mixed c)">Checks for printable character(s)</s>
+<s f="ctype_punct" u="bool ctype_punct(mixed c)">Checks for any printable character which is not whitespace or an alphanumeric character</s>
+<s f="ctype_space" u="bool ctype_space(mixed c)">Checks for whitespace character(s)</s>
+<s f="ctype_upper" u="bool ctype_upper(mixed c)">Checks for uppercase character(s)</s>
+<s f="ctype_xdigit" u="bool ctype_xdigit(mixed c)">Checks for character(s) representing a hexadecimal digit</s>
+<s f="curl_close" u="void curl_close(resource ch)">Close a CURL session</s>
+<s f="curl_copy_handle" u="resource curl_copy_handle(resource ch)">Copy a cURL handle along with all of it's preferences</s>
+<s f="curl_errno" u="int curl_errno(resource ch)">Return an integer containing the last error number</s>
+<s f="curl_error" u="string curl_error(resource ch)">Return a string contain the last error for the current session</s>
+<s f="curl_exec" u="bool curl_exec(resource ch)">Perform a CURL session</s>
+<s f="curl_getinfo" u="mixed curl_getinfo(resource ch, int opt)">Get information regarding a specific transfer</s>
+<s f="curl_init" u="resource curl_init([string url])">Initialize a CURL session</s>
+<s f="curl_setopt" u="bool curl_setopt(resource ch, string option, mixed value)">Set an option for a CURL transfer</s>
+<s f="curl_version" u="array curl_version([int version])">Return cURL version information.</s>
+<s f="curl_multi_add_handle" u="int curl_multi_add_handle(resource multi, resource ch)">Add a normal cURL handle to a cURL multi handle</s>
+<s f="curl_multi_close" u="void curl_multi_close(resource mh)">Close a set of cURL handles</s>
+<s f="curl_multi_exec" u="int curl_multi_exec(resource mh, int &amp;still_running)">Run the sub-connections of the current cURL handle</s>
+<s f="curl_multi_getcontent" u="string curl_multi_getcontent(resource ch)">Return the content of a cURL handle if CURLOPT_RETURNTRANSFER is set</s>
+<s f="curl_multi_info_read" u="array curl_multi_info_read(resource mh)">Get information about the current transfers</s>
+<s f="curl_multi_init" u="resource curl_multi_init(void)">Returns a new cURL multi handle</s>
+<s f="curl_multi_remove_handle" u="int curl_multi_remove_handle(resource mh, resource ch)">Remove a multi handle from a set of cURL handles</s>
+<s f="curl_multi_select" u="int curl_multi_select(resource mh[, double timeout])">Get all the sockets associated with the cURL extension, which can then be "selected"</s>
+<s f="dba_close" u="void dba_close(resource handle)">Closes database</s>
+<s f="dba_delete" u="bool dba_delete(string key, resource handle)">Deletes the entry associated with key     If inifile: remove all other key lines</s>
+<s f="dba_exists" u="bool dba_exists(string key, resource handle)">Checks, if the specified key exists</s>
+<s f="dba_fetch" u="string dba_fetch(string key, [int skip ,] resource handle)">Fetches the data associated with key</s>
+<s f="dba_firstkey" u="string dba_firstkey(resource handle)">Resets the internal key pointer and returns the first key</s>
+<s f="dba_handlers" u="array dba_handlers([bool full_info])">List configured database handlers</s>
+<s f="dba_insert" u="bool dba_insert(string key, string value, resource handle)">If not inifile: Insert value as key, return false, if key exists already      If inifile: Add vakue as key (next instance of key)</s>
+<s f="dba_list" u="array dba_list()">List opened databases</s>
+<s f="dba_nextkey" u="string dba_nextkey(resource handle)">Returns the next key</s>
+<s f="dba_open" u="resource dba_open(string path, string mode [, string handlername, string ...])">Opens path using the specified handler in mode</s>
+<s f="dba_optimize" u="bool dba_optimize(resource handle)">Optimizes (e.g. clean up, vacuum) database</s>
+<s f="dba_popen" u="resource dba_popen(string path, string mode [, string handlername, string ...])">Opens path using the specified handler in mode persistently</s>
+<s f="dba_replace" u="bool dba_replace(string key, string value, resource handle)">Inserts value as key, replaces key, if key exists already     If inifile: remove all other key lines</s>
+<s f="dba_sync" u="bool dba_sync(resource handle)">Synchronizes database</s>
+<s f="dbase_add_record" u="bool dbase_add_record(int identifier, array data)">Adds a record to the database</s>
+<s f="dbase_close" u="bool dbase_close(int identifier)">Closes an open dBase-format database file</s>
+<s f="dbase_create" u="bool dbase_create(string filename, array fields)">Creates a new dBase-format database file</s>
+<s f="dbase_delete_record" u="bool dbase_delete_record(int identifier, int record)">Marks a record to be deleted</s>
+<s f="dbase_get_header_info" u="array dbase_get_header_info(int database_handle)"/>
+<s f="dbase_get_record" u="array dbase_get_record(int identifier, int record)">Returns an array representing a record from the database</s>
+<s f="dbase_get_record_with_names" u="array dbase_get_record_with_names(int identifier, int record)">Returns an associative array representing a record from the database</s>
+<s f="dbase_numfields" u="int dbase_numfields(int identifier)">Returns the number of fields (columns) in the database</s>
+<s f="dbase_numrecords" u="int dbase_numrecords(int identifier)">Returns the number of records in the database</s>
+<s f="dbase_open" u="int dbase_open(string name, int mode)">Opens a dBase-format database file</s>
+<s f="dbase_pack" u="bool dbase_pack(int identifier)">Packs the database (deletes records marked for deletion)</s>
+<s f="dbase_replace_record" u="bool dbase_replace_record(int identifier, array data, int recnum)">Replaces a record to the database</s>
+<s f="dbx_close" u="int dbx_close(dbx_link_object dbx_link)">Returns success or failure</s>
+<s f="dbx_compare" u="int dbx_compare(array row_x, array row_y, string columnname [, int flags])">Returns row_y[columnname] - row_x[columnname], converted to -1, 0 or 1</s>
+<s f="dbx_connect" u="dbx_link_object dbx_connect(string module_name, string host, string db, string username, string password [, bool persistent])">Returns a dbx_link_object on success and returns 0 on failure</s>
+<s f="dbx_error" u="string dbx_error(dbx_link_object dbx_link)">Returns success or failure</s>
+<s f="dbx_escape_string" u="string dbx_escape_string(dbx_link_object dbx_link, string sz)">Returns escaped string or NULL on error</s>
+<s f="dbx_fetch_row" u="dbx_row dbx_fetch_row(dbx_query_object dbx_q)">Returns a row (index and assoc based on query) on success and returns 0 on failure or no more rows</s>
+<s f="dbx_query" u="dbx_result_object dbx_query(dbx_link_object dbx_link, string sql_statement [, int flags])">Returns a dbx_link_object on success and returns 0 on failure</s>
+<s f="dbx_sort" u="int dbx_sort(object dbx_result, string compare_function_name)">Returns 0 on failure, 1 on success</s>
+<s f="dio_close" u="void dio_close(resource fd)">Close the file descriptor given by fd</s>
+<s f="dio_fcntl" u="mixed dio_fcntl(resource fd, int cmd[, mixed arg])">Perform a c library fcntl on fd</s>
+<s f="dio_open" u="resource dio_open(string filename, int flags[, int mode])">Open a new filename with specified permissions of flags and creation permissions of mode</s>
+<s f="dio_read" u="string dio_read(resource fd[, int n])">Read n bytes from fd and return them, if n is not specified, read 1k</s>
+<s f="dio_seek" u="int dio_seek(resource fd, int pos, int whence)">Seek to pos on fd from whence</s>
+<s f="dio_stat" u="array dio_stat(resource fd)">Get stat information about the file descriptor fd</s>
+<s f="dio_tcsetattr" u="mixed dio_tcsetattr(resource fd,  array args )">Perform a c library tcsetattr on fd</s>
+<s f="dio_truncate" u="bool dio_truncate(resource fd, int offset)">Truncate file descriptor fd to offset bytes</s>
+<s f="dio_write" u="int dio_write(resource fd, string data[, int len])">Write data to fd with optional truncation at length</s>
+<s f="dom_document_xinclude" u="int dom_document_xinclude()">Substitutues xincludes in a DomDocument</s>
+<s f="dom_import_simplexml" u="somNode dom_import_simplexml(sxeobject node)">Get a simplexml_element object from dom to allow for processing</s>
+<s f="exif_imagetype" u="int exif_imagetype(string imagefile)">Get the type of an image</s>
+<s f="exif_read_data" u="array exif_read_data(string filename [, sections_needed [, sub_arrays[, read_thumbnail]]])">Reads header data from the JPEG/TIFF image filename and optionally reads the internal thumbnails</s>
+<s f="exif_tagname" u="string exif_tagname(index)">Get headername for index or false if not defined</s>
+<s f="exif_thumbnail" u="string exif_thumbnail(string filename [, &amp;width, &amp;height [, &amp;imagetype]])">Reads the embedded thumbnail</s>
+<s f="fam_cancel_monitor" u="bool fam_cancel_monitor(resource id, resource monitor_id)">Terminate monitoring</s>
+<s f="fam_close" u="void fam_close(resource id)">Close FAM connection</s>
+<s f="fam_monitor_collection" u="resource fam_monitor_collection(resource id, string dirname, int depth, string mask)">Monitor a collection of files in a directory for changes</s>
+<s f="fam_monitor_directory" u="resource fam_monitor_directory(resource id, string dirname)">Monitor a directory for changes</s>
+<s f="fam_monitor_file" u="resource fam_monitor_file(resource id, string filename)">Monitor a regular file for changes</s>
+<s f="fam_next_event" u="array fam_next_event(resource id)">Get next pending FAM event</s>
+<s f="fam_open" u="resource fam_open([string appname])">Open FAM connection</s>
+<s f="fam_pending" u="int fam_pending(resource id)">Check for pending FAM events</s>
+<s f="fam_resume_monitor" u="bool fam_resume_monitor(resource id, resource monitor_id)">Resume suspended monitoring</s>
+<s f="fam_suspend_monitor" u="bool fam_suspend_monitor(resource id, resource monitor_id)">Temporary suspend monitoring</s>
+<s f="fbsql_affected_rows" u="int fbsql_affected_rows([resource link_identifier])">Get the number of rows affected by the last statement</s>
+<s f="fbsql_autocommit" u="bool fbsql_autocommit(resource link_identifier [, bool OnOff])">Turns on auto-commit</s>
+<s f="fbsql_blob_size" u="int fbsql_blob_size(string blob_handle [, resource link_identifier])">Get the size of a BLOB identified by blob_handle</s>
+<s f="fbsql_change_user" u="int fbsql_change_user(string user, string password [, string database [, resource link_identifier]])">Change the user for a session</s>
+<s f="fbsql_clob_size" u="int fbsql_clob_size(string clob_handle [, resource link_identifier])">Get the size of a CLOB identified by clob_handle</s>
+<s f="fbsql_close" u="bool fbsql_close([resource link_identifier])">Close a connection to a database server</s>
+<s f="fbsql_commit" u="bool fbsql_commit([resource link_identifier])">Commit the transaction</s>
+<s f="fbsql_connect" u="resource fbsql_connect([string hostname [, string username [, string password]]])">Create a connection to a database server</s>
+<s f="fbsql_create_blob" u="string fbsql_create_blob(string blob_data [, resource link_identifier])">Create a BLOB in the database for use with an insert or update statement</s>
+<s f="fbsql_create_clob" u="string fbsql_create_clob(string clob_data [, resource link_identifier])">Create a CLOB in the database for use with an insert or update statement</s>
+<s f="fbsql_create_db" u="bool fbsql_create_db(string database_name [, resource link_identifier])">Create a new database on the server</s>
+<s f="fbsql_data_seek" u="bool fbsql_data_seek(int result, int row_number)">Move the internal row counter to the specified row_number</s>
+<s f="fbsql_database" u="string fbsql_database(resource link_identifier [, string database])">Get or set the database name used with a connection</s>
+<s f="fbsql_database_password" u="string fbsql_database_password(resource link_identifier [, string database_password])">Get or set the databsae password used with a connection</s>
+<s f="fbsql_db_query" u="resource fbsql_db_query(string database_name, string query [, resource link_identifier])">Send one or more SQL statements to a specified database on the server</s>
+<s f="fbsql_db_status" u="int fbsql_db_status(string database_name [, resource link_identifier])">Gets the status (Stopped, Starting, Running, Stopping) for a given database</s>
+<s f="fbsql_drop_db" u="int fbsql_drop_db(string database_name [, resource link_identifier])">Drop a database on the server</s>
+<s f="fbsql_errno" u="int fbsql_errno([resource link_identifier])">Returns the last error code</s>
+<s f="fbsql_error" u="string fbsql_error([resource link_identifier])">Returns the last error string</s>
+<s f="fbsql_fetch_array" u="array fbsql_fetch_array(resource result [, int result_type])">Fetches a result row as an array (associative, numeric or both)</s>
+<s f="fbsql_fetch_assoc" u="object fbsql_fetch_assoc(resource result)">Detch a row of data. Returns an assoc array</s>
+<s f="fbsql_fetch_field" u="object fbsql_fetch_field(int result [, int field_index])">Get the field properties for a specified field_index</s>
+<s f="fbsql_fetch_lengths" u="array fbsql_fetch_lengths(int result)">Returns an array of the lengths of each column in the result set</s>
+<s f="fbsql_fetch_object" u="object fbsql_fetch_object(resource result [, int result_type])">Fetch a row of data. Returns an object</s>
+<s f="fbsql_fetch_row" u="array fbsql_fetch_row(resource result)">Fetch a row of data. Returns an indexed array</s>
+<s f="fbsql_field_flags" u="string fbsql_field_flags(int result [, int field_index])">???</s>
+<s f="fbsql_field_len" u="mixed fbsql_field_len(int result [, int field_index])">Get the column length for a specified field_index</s>
+<s f="fbsql_field_name" u="string fbsql_field_name(int result [, int field_index])">Get the column name for a specified field_index</s>
+<s f="fbsql_field_seek" u="bool fbsql_field_seek(int result [, int field_index])">???</s>
+<s f="fbsql_field_table" u="string fbsql_field_table(int result [, int field_index])">Get the table name for a specified field_index</s>
+<s f="fbsql_field_type" u="string fbsql_field_type(int result [, int field_index])">Get the field type for a specified field_index</s>
+<s f="fbsql_free_result" u="bool fbsql_free_result(resource result)">free the memory used to store a result</s>
+<s f="fbsql_get_autostart_info" u="array fbsql_get_autostart_info([resource link_identifier])">???</s>
+<s f="fbsql_hostname" u="string fbsql_hostname(resource link_identifier [, string host_name])">Get or set the host name used with a connection</s>
+<s f="fbsql_insert_id" u="int fbsql_insert_id([resource link_identifier])">Get the internal index for the last insert statement</s>
+<s f="fbsql_list_dbs" u="resource fbsql_list_dbs([resource link_identifier])">Retreive a list of all databases on the server</s>
+<s f="fbsql_list_fields" u="resource fbsql_list_fields(string database_name, string table_name [, resource link_identifier])">Retrieve a list of all fields for the specified database.table</s>
+<s f="fbsql_list_tables" u="resource fbsql_list_tables(string database [, int link_identifier])">Retreive a list of all tables from the specifoied database</s>
+<s f="fbsql_next_result" u="bool fbsql_next_result(int result)">Switch to the next result if multiple results are available</s>
+<s f="fbsql_num_fields" u="int fbsql_num_fields(int result)">Get number of fields in the result set</s>
+<s f="fbsql_num_rows" u="int fbsql_num_rows(int result)">Get number of rows</s>
+<s f="fbsql_password" u="string fbsql_password(resource link_identifier [, string password])">Get or set the user password used with a connection</s>
+<s f="fbsql_pconnect" u="resource fbsql_pconnect([string hostname [, string username [, string password]]])">Create a persistant connection to a database server</s>
+<s f="fbsql_query" u="resource fbsql_query(string query [, resource link_identifier])">Send one or more SQL statements to the server and execute them</s>
+<s f="fbsql_read_blob" u="string fbsql_read_blob(string blob_handle [, resource link_identifier])">Read the BLOB data identified by blob_handle</s>
+<s f="fbsql_read_clob" u="string fbsql_read_clob(string clob_handle [, resource link_identifier])">Read the CLOB data identified by clob_handle</s>
+<s f="fbsql_result" u="mixed fbsql_result(int result [, int row [, mixed field]])">???</s>
+<s f="fbsql_rollback" u="bool fbsql_rollback([resource link_identifier])">Rollback all statments since last commit</s>
+<s f="fbsql_select_db" u="bool fbsql_select_db([string database_name [, resource link_identifier]])">Select the database to open</s>
+<s f="fbsql_set_lob_mode" u="bool fbsql_set_lob_mode(resource result, int lob_mode)">Sets the mode for how LOB data re retreived (actual data or a handle)</s>
+<s f="fbsql_set_password" u="bool fbsql_set_password(resource link_identifier, string user, string password, string old_password)">Change the password for a given user</s>
+<s f="fbsql_set_transaction" u="void fbsql_set_transaction(resource link_identifier, int locking, int isolation)">Sets the transaction locking and isolation</s>
+<s f="fbsql_start_db" u="bool fbsql_start_db(string database_name [, resource link_identifier])">Start a database on the server</s>
+<s f="fbsql_stop_db" u="bool fbsql_stop_db(string database_name [, resource link_identifier])">Stop a database on the server</s>
+<s f="fbsql_table_name" u="string fbsql_table_name(resource result, int index)">Retreive the table name for index after a call to fbsql_list_tables()</s>
+<s f="fbsql_username" u="string fbsql_username(resource link_identifier [, string username])">Get or set the host user used with a connection</s>
+<s f="fbsql_warnings" u="bool fbsql_warnings([int flag])">Enable or disable FrontBase warnings</s>
+<s f="fdf_add_doc_javascript" u="bool fdf_add_doc_javascript(resource fdfdoc, string scriptname, string script)">Add javascript code to the fdf file</s>
+<s f="fdf_add_template" u="bool fdf_add_template(resource fdfdoc, int newpage, string filename, string template, int rename)">Adds a template into the FDF document</s>
+<s f="fdf_close" u="void fdf_close(resource fdfdoc)">Closes the FDF document</s>
+<s f="fdf_create" u="resource fdf_create(void)">Creates a new FDF document</s>
+<s f="fdf_enum_values" u="bool fdf_enum_values(resource fdfdoc, callback function [, mixed userdata])">Call a user defined function for each document value</s>
+<s f="fdf_errno" u="int fdf_errno(void)">Gets error code for last operation</s>
+<s f="fdf_error" u="string fdf_error([int errno])">Gets error description for error code</s>
+<s f="fdf_get_ap" u="bool fdf_get_ap(resource fdfdoc, string fieldname, int face, string filename)">Gets the appearance of a field and creates a PDF document out of it.</s>
+<s f="fdf_get_attachment" u="array fdf_get_attachment(resource fdfdoc, string fieldname, string savepath)">Get attached uploaded file</s>
+<s f="fdf_get_encoding" u="string fdf_get_encoding(resource fdf)">Gets FDF file encoding scheme</s>
+<s f="fdf_get_file" u="string fdf_get_file(resource fdfdoc)">Gets the value of /F key</s>
+<s f="fdf_get_flags" u="int fdf_get_flags(resorce fdfdoc, string fieldname, int whichflags)">Gets the flags of a field</s>
+<s f="fdf_get_opt" u="mixed fdf_get_opt(resource fdfdof, string fieldname [, int element])">Gets a value from the opt array of a field</s>
+<s f="fdf_get_status" u="string fdf_get_status(resource fdfdoc)">Gets the value of /Status key</s>
+<s f="fdf_get_value" u="string fdf_get_value(resource fdfdoc, string fieldname [, int which])">Gets the value of a field as string</s>
+<s f="fdf_get_version" u="string fdf_get_version([resource fdfdoc])">Gets version number for FDF api or file</s>
+<s f="fdf_header" u="void fdf_header(void)">Set FDF specific HTTP headers</s>
+<s f="fdf_next_field_name" u="string fdf_next_field_name(resource fdfdoc [, string fieldname])">Gets the name of the next field name or the first field name</s>
+<s f="fdf_open" u="resource fdf_open(string filename)">Opens a new FDF document</s>
+<s f="fdf_open_string" u="resource fdf_open_string(string fdf_data)">Opens a new FDF document from string</s>
+<s f="fdf_remove_item" u="bool fdf_remove_item(resource fdfdoc, string fieldname, int item)">Sets target frame for form</s>
+<s f="fdf_save" u="bool fdf_save(resource fdfdoc [, string filename])">Writes out the FDF file</s>
+<s f="fdf_save_string" u="string fdf_save_string(resource fdfdoc)">Returns the FDF file as a string</s>
+<s f="fdf_set_ap" u="bool fdf_set_ap(resource fdfdoc, string fieldname, int face, string filename, int pagenr)">Sets the appearence of a field</s>
+<s f="fdf_set_encoding" u="bool fdf_set_encoding(resource fdf_document, string encoding)">Sets FDF encoding (either "Shift-JIS" or "Unicode")</s>
+<s f="fdf_set_file" u="bool fdf_set_file(resource fdfdoc, string filename [, string target_frame])">Sets the value of /F key</s>
+<s f="fdf_set_flags" u="bool fdf_set_flags(resource fdfdoc, string fieldname, int whichflags, int newflags)">Sets flags for a field in the FDF document</s>
+<s f="fdf_set_javascript_action" u="bool fdf_set_javascript_action(resource fdfdoc, string fieldname, int whichtrigger, string script)">Sets the javascript action for a field</s>
+<s f="fdf_set_on_import_javascript" u="bool fdf_set_on_import_javascript(resource fdfdoc, string script [, bool before_data_import])">Adds javascript code to be executed when Acrobat opens the FDF</s>
+<s f="fdf_set_opt" u="bool fdf_set_opt(resource fdfdoc, string fieldname, int element, string value, string name)">Sets a value in the opt array for a field</s>
+<s f="fdf_set_status" u="bool fdf_set_status(resource fdfdoc, string status)">Sets the value of /Status key</s>
+<s f="fdf_set_submit_form_action" u="bool fdf_set_submit_form_action(resource fdfdoc, string fieldname, int whichtrigger, string url, int flags)">Sets the submit form action for a field</s>
+<s f="fdf_set_target_frame" u="bool fdf_set_target_frame(resource fdfdoc, string target)">Sets target frame for form</s>
+<s f="fdf_set_value" u="bool fdf_set_value(resource fdfdoc, string fieldname, mixed value [, int isname])">Sets the value of a field</s>
+<s f="fdf_set_version" u="bool fdf_set_version(resourece fdfdoc, string version)">Sets FDF version for a file</s>
+<s f="filepro" u="bool filepro(string directory)">Read and verify the map file</s>
+<s f="filepro_fieldcount" u="int filepro_fieldcount(void)">Find out how many fields are in a filePro database</s>
+<s f="filepro_fieldname" u="string filepro_fieldname(int fieldnumber)">Gets the name of a field</s>
+<s f="filepro_fieldtype" u="string filepro_fieldtype(int field_number)">Gets the type of a field</s>
+<s f="filepro_fieldwidth" u="int filepro_fieldwidth(int field_number)">Gets the width of a field</s>
+<s f="filepro_retrieve" u="string filepro_retrieve(int row_number, int field_number)">Retrieves data from a filePro database</s>
+<s f="filepro_rowcount" u="int filepro_rowcount(void)">Find out how many rows are in a filePro database</s>
+<s f="ftp_alloc" u="bool ftp_alloc(resource stream, int size[, &amp;response])">Attempt to allocate space on the remote FTP server</s>
+<s f="ftp_cdup" u="bool ftp_cdup(resource stream)">Changes to the parent directory</s>
+<s f="ftp_chdir" u="bool ftp_chdir(resource stream, string directory)">Changes directories</s>
+<s f="ftp_chmod" u="int ftp_chmod(resource stream, int mode, string filename)">Sets permissions on a file</s>
+<s f="ftp_close" u="bool ftp_close(resource stream)">Closes the FTP stream</s>
+<s f="ftp_connect" u="resource ftp_connect(string host [, int port [, int timeout]])">Opens a FTP stream</s>
+<s f="ftp_delete" u="bool ftp_delete(resource stream, string file)">Deletes a file</s>
+<s f="ftp_exec" u="bool ftp_exec(resource stream, string command)">Requests execution of a program on the FTP server</s>
+<s f="ftp_fget" u="bool ftp_fget(resource stream, resource fp, string remote_file, int mode[, int resumepos])">Retrieves a file from the FTP server and writes it to an open file</s>
+<s f="ftp_fput" u="bool ftp_fput(resource stream, string remote_file, resource fp, int mode[, int startpos])">Stores a file from an open file to the FTP server</s>
+<s f="ftp_get" u="bool ftp_get(resource stream, string local_file, string remote_file, int mode[, int resume_pos])">Retrieves a file from the FTP server and writes it to a local file</s>
+<s f="ftp_get_option" u="mixed ftp_get_option(resource stream, int option)">Gets an FTP option</s>
+<s f="ftp_login" u="bool ftp_login(resource stream, string username, string password)">Logs into the FTP server</s>
+<s f="ftp_mdtm" u="int ftp_mdtm(resource stream, string filename)">Returns the last modification time of the file, or -1 on error</s>
+<s f="ftp_mkdir" u="string ftp_mkdir(resource stream, string directory)">Creates a directory and returns the absolute path for the new directory or false on error</s>
+<s f="ftp_nb_continue" u="int ftp_nb_continue(resource stream)">Continues retrieving/sending a file nbronously</s>
+<s f="ftp_nb_fget" u="int ftp_nb_fget(resource stream, resource fp, string remote_file, int mode[, int resumepos])">Retrieves a file from the FTP server asynchronly and writes it to an open file</s>
+<s f="ftp_nb_fput" u="int ftp_nb_fput(resource stream, string remote_file, resource fp, int mode[, int startpos])">Stores a file from an open file to the FTP server nbronly</s>
+<s f="ftp_nb_get" u="int ftp_nb_get(resource stream, string local_file, string remote_file, int mode[, int resume_pos])">Retrieves a file from the FTP server nbhronly and writes it to a local file</s>
+<s f="ftp_nb_put" u="int ftp_nb_put(resource stream, string remote_file, string local_file, int mode[, int startpos])">Stores a file on the FTP server</s>
+<s f="ftp_nlist" u="array ftp_nlist(resource stream, string directory)">Returns an array of filenames in the given directory</s>
+<s f="ftp_pasv" u="bool ftp_pasv(resource stream, bool pasv)">Turns passive mode on or off</s>
+<s f="ftp_put" u="bool ftp_put(resource stream, string remote_file, string local_file, int mode[, int startpos])">Stores a file on the FTP server</s>
+<s f="ftp_pwd" u="string ftp_pwd(resource stream)">Returns the present working directory</s>
+<s f="ftp_raw" u="array ftp_raw(resource stream, string command)">Sends a literal command to the FTP server</s>
+<s f="ftp_rawlist" u="array ftp_rawlist(resource stream, string directory [, bool recursive])">Returns a detailed listing of a directory as an array of output lines</s>
+<s f="ftp_rename" u="bool ftp_rename(resource stream, string src, string dest)">Renames the given file to a new path</s>
+<s f="ftp_rmdir" u="bool ftp_rmdir(resource stream, string directory)">Removes a directory</s>
+<s f="ftp_set_option" u="bool ftp_set_option(resource stream, int option, mixed value)">Sets an FTP option</s>
+<s f="ftp_site" u="bool ftp_site(resource stream, string cmd)">Sends a SITE command to the server</s>
+<s f="ftp_size" u="int ftp_size(resource stream, string filename)">Returns the size of the file, or -1 on error</s>
+<s f="ftp_ssl_connect" u="resource ftp_ssl_connect(string host [, int port [, int timeout]])">Opens a FTP-SSL stream</s>
+<s f="ftp_systype" u="string ftp_systype(resource stream)">Returns the system type identifier</s>
+<s f="gd_info" u="array gd_info()"/>
+<s f="imagealphablending" u="bool imagealphablending(resource im, bool on)">Turn alpha blending mode on or off for the given image</s>
+<s f="imageantialias" u="bool imageantialias(resource im, bool on)">Should antialiased functions used or not</s>
+<s f="imagearc" u="bool imagearc(resource im, int cx, int cy, int w, int h, int s, int e, int col)">Draw a partial ellipse</s>
+<s f="imagechar" u="bool imagechar(resource im, int font, int x, int y, string c, int col)">Draw a character</s>
+<s f="imagecharup" u="bool imagecharup(resource im, int font, int x, int y, string c, int col)">Draw a character rotated 90 degrees counter-clockwise</s>
+<s f="imagecolorallocate" u="int imagecolorallocate(resource im, int red, int green, int blue)">Allocate a color for an image</s>
+<s f="imagecolorallocatealpha" u="int imagecolorallocatealpha(resource im, int red, int green, int blue, int alpha)">Allocate a color with an alpha level.  Works for true color and palette based images</s>
+<s f="imagecolorat" u="int imagecolorat(resource im, int x, int y)">Get the index of the color of a pixel</s>
+<s f="imagecolorclosest" u="int imagecolorclosest(resource im, int red, int green, int blue)">Get the index of the closest color to the specified color</s>
+<s f="imagecolorclosestalpha" u="int imagecolorclosestalpha(resource im, int red, int green, int blue, int alpha)">Find the closest matching colour with alpha transparency</s>
+<s f="imagecolorclosesthwb" u="int imagecolorclosesthwb(resource im, int red, int green, int blue)">Get the index of the color which has the hue, white and blackness nearest to the given color</s>
+<s f="imagecolordeallocate" u="bool imagecolordeallocate(resource im, int index)">De-allocate a color for an image</s>
+<s f="imagecolorexact" u="int imagecolorexact(resource im, int red, int green, int blue)">Get the index of the specified color</s>
+<s f="imagecolorexactalpha" u="int imagecolorexactalpha(resource im, int red, int green, int blue, int alpha)">Find exact match for colour with transparency</s>
+<s f="imagecolormatch" u="bool imagecolormatch(resource im1, resource im2)">Makes the colors of the palette version of an image more closely match the true color version</s>
+<s f="imagecolorresolve" u="int imagecolorresolve(resource im, int red, int green, int blue)">Get the index of the specified color or its closest possible alternative</s>
+<s f="imagecolorresolvealpha" u="int imagecolorresolvealpha(resource im, int red, int green, int blue, int alpha)">Resolve/Allocate a colour with an alpha level.  Works for true colour and palette based images</s>
+<s f="imagecolorset" u="void imagecolorset(resource im, int col, int red, int green, int blue)">Set the color for the specified palette index</s>
+<s f="imagecolorsforindex" u="array imagecolorsforindex(resource im, int col)">Get the colors for an index</s>
+<s f="imagecolorstotal" u="int imagecolorstotal(resource im)">Find out the number of colors in an image's palette</s>
+<s f="imagecolortransparent" u="int imagecolortransparent(resource im [, int col])">Define a color as transparent</s>
+<s f="imagecopy" u="bool imagecopy(resource dst_im, resource src_im, int dst_x, int dst_y, int src_x, int src_y, int src_w, int src_h)">Copy part of an image</s>
+<s f="imagecopymerge" u="bool imagecopymerge(resource src_im, resource dst_im, int dst_x, int dst_y, int src_x, int src_y, int src_w, int src_h, int pct)">Merge one part of an image with another</s>
+<s f="imagecopymergegray" u="bool imagecopymergegray(resource src_im, resource dst_im, int dst_x, int dst_y, int src_x, int src_y, int src_w, int src_h, int pct)">Merge one part of an image with another</s>
+<s f="imagecopyresampled" u="bool imagecopyresampled(resource dst_im, resource src_im, int dst_x, int dst_y, int src_x, int src_y, int dst_w, int dst_h, int src_w, int src_h)">Copy and resize part of an image using resampling to help ensure clarity</s>
+<s f="imagecopyresized" u="bool imagecopyresized(resource dst_im, resource src_im, int dst_x, int dst_y, int src_x, int src_y, int dst_w, int dst_h, int src_w, int src_h)">Copy and resize part of an image</s>
+<s f="imagecreate" u="resource imagecreate(int x_size, int y_size)">Create a new image</s>
+<s f="imagecreatefromgd" u="resource imagecreatefromgd(string filename)">Create a new image from GD file or URL</s>
+<s f="imagecreatefromgif" u="resource imagecreatefromgif(string filename)">Create a new image from GIF file or URL</s>
+<s f="imagecreatefromjpeg" u="resource imagecreatefromjpeg(string filename)">Create a new image from JPEG file or URL</s>
+<s f="imagecreatefrompng" u="resource imagecreatefrompng(string filename)">Create a new image from PNG file or URL</s>
+<s f="imagecreatefromstring" u="resource imagecreatefromstring(string image)">Create a new image from the image stream in the string</s>
+<s f="imagecreatefromwbmp" u="resource imagecreatefromwbmp(string filename)">Create a new image from WBMP file or URL</s>
+<s f="imagecreatefromxbm" u="resource imagecreatefromxbm(string filename)">Create a new image from XBM file or URL</s>
+<s f="imagecreatefromxpm" u="resource imagecreatefromxpm(string filename)">Create a new image from XPM file or URL</s>
+<s f="imagecreatetruecolor" u="resource imagecreatetruecolor(int x_size, int y_size)">Create a new true color image</s>
+<s f="imagedashedline" u="bool imagedashedline(resource im, int x1, int y1, int x2, int y2, int col)">Draw a dashed line</s>
+<s f="imagedestroy" u="bool imagedestroy(resource im)">Destroy an image</s>
+<s f="imageellipse" u="bool imageellipse(resource im, int cx, int cy, int w, int h, int color)">Draw an ellipse</s>
+<s f="imagefill" u="bool imagefill(resource im, int x, int y, int col)">Flood fill</s>
+<s f="imagefilledarc" u="bool imagefilledarc(resource im, int cx, int cy, int w, int h, int s, int e, int col, int style)">Draw a filled partial ellipse</s>
+<s f="imagefilledellipse" u="bool imagefilledellipse(resource im, int cx, int cy, int w, int h, int color)">Draw an ellipse</s>
+<s f="imagefilledpolygon" u="bool imagefilledpolygon(resource im, array point, int num_points, int col)">Draw a filled polygon</s>
+<s f="imagefilledrectangle" u="bool imagefilledrectangle(resource im, int x1, int y1, int x2, int y2, int col)">Draw a filled rectangle</s>
+<s f="imagefilltoborder" u="bool imagefilltoborder(resource im, int x, int y, int border, int col)">Flood fill to specific color</s>
+<s f="imagefilter" u="bool imagefilter(resource src_im, int filtertype, [args] )">Applies Filter an image using a custom angle</s>
+<s f="imagefontheight" u="int imagefontheight(int font)">Get font height</s>
+<s f="imagefontwidth" u="int imagefontwidth(int font)">Get font width</s>
+<s f="imageftbbox" u="array imageftbbox(int size, int angle, string font_file, string text[, array extrainfo])">Give the bounding box of a text using fonts via freetype2</s>
+<s f="imagefttext" u="array imagefttext(resource im, int size, int angle, int x, int y, int col, string font_file, string text, [array extrainfo])">Write text to the image using fonts via freetype2</s>
+<s f="imagegammacorrect" u="bool imagegammacorrect(resource im, float inputgamma, float outputgamma)">Apply a gamma correction to a GD image</s>
+<s f="imagegd" u="bool imagegd(resource im [, string filename])">Output GD image to browser or file</s>
+<s f="imagegif" u="bool imagegif(resource im [, string filename])">Output GIF image to browser or file</s>
+<s f="imageinterlace" u="int imageinterlace(resource im [, int interlace])">Enable or disable interlace</s>
+<s f="imageistruecolor" u="bool imageistruecolor(resource im)">return true if the image uses truecolor</s>
+<s f="imagejpeg" u="bool imagejpeg(resource im [, string filename [, int quality]])">Output JPEG image to browser or file</s>
+<s f="imagelayereffect" u="bool imagelayereffect(resource im, int effect)">Set the alpha blending flag to use the bundled libgd layering effects</s>
+<s f="imageline" u="bool imageline(resource im, int x1, int y1, int x2, int y2, int col)">Draw a line</s>
+<s f="imageloadfont" u="int imageloadfont(string filename)">Load a new font</s>
+<s f="imagepalettecopy" u="void imagepalettecopy(resource dst, resource src)">Copy the palette from the src image onto the dst image</s>
+<s f="imagepng" u="bool imagepng(resource im [, string filename])">Output PNG image to browser or file</s>
+<s f="imagepolygon" u="bool imagepolygon(resource im, array point, int num_points, int col)">Draw a polygon</s>
+<s f="imagepsbbox" u="array imagepsbbox(string text, resource font, int size [, int space, int tightness, int angle])">Return the bounding box needed by a string if rasterized</s>
+<s f="imagepscopyfont" u="int imagepscopyfont(int font_index)">Make a copy of a font for purposes like extending or reenconding</s>
+<s f="imagepsencodefont" u="bool imagepsencodefont(resource font_index, string filename)">To change a fonts character encoding vector</s>
+<s f="imagepsextendfont" u="bool imagepsextendfont(resource font_index, float extend)">Extend or or condense (if extend &lt; 1) a font</s>
+<s f="imagepsfreefont" u="bool imagepsfreefont(resource font_index)">Free memory used by a font</s>
+<s f="imagepsloadfont" u="resource imagepsloadfont(string pathname)">Load a new font from specified file</s>
+<s f="imagepsslantfont" u="bool imagepsslantfont(resource font_index, float slant)">Slant a font</s>
+<s f="imagepstext" u="array imagepstext(resource image, string text, resource font, int size, int xcoord, int ycoord [, int space, int tightness, float angle, int antialias])">Rasterize a string over an image</s>
+<s f="imagerectangle" u="bool imagerectangle(resource im, int x1, int y1, int x2, int y2, int col)">Draw a rectangle</s>
+<s f="imagerotate" u="resource imagerotate(resource src_im, float angle, int bgdcolor)">Rotate an image using a custom angle</s>
+<s f="imagesavealpha" u="bool imagesavealpha(resource im, bool on)">Include alpha channel to a saved image</s>
+<s f="imagesetbrush" u="bool imagesetbrush(resource image, resource brush)">Set the brush image to $brush when filling $image with the "IMG_COLOR_BRUSHED" color</s>
+<s f="imagesetpixel" u="bool imagesetpixel(resource im, int x, int y, int col)">Set a single pixel</s>
+<s f="imagesetstyle" u="bool imagesetstyle(resource im, array styles)">Set the line drawing styles for use with imageline and IMG_COLOR_STYLED.</s>
+<s f="imagesetthickness" u="bool imagesetthickness(resource im, int thickness)">Set line thickness for drawing lines, ellipses, rectangles, polygons etc.</s>
+<s f="imagesettile" u="bool imagesettile(resource image, resource tile)">Set the tile image to $tile when filling $image with the "IMG_COLOR_TILED" color</s>
+<s f="imagestring" u="bool imagestring(resource im, int font, int x, int y, string str, int col)">Draw a string horizontally</s>
+<s f="imagestringup" u="bool imagestringup(resource im, int font, int x, int y, string str, int col)">Draw a string vertically - rotated 90 degrees counter-clockwise</s>
+<s f="imagesx" u="int imagesx(resource im)">Get image width</s>
+<s f="imagesy" u="int imagesy(resource im)">Get image height</s>
+<s f="imagetruecolortopalette" u="void imagetruecolortopalette(resource im, bool ditherFlag, int colorsWanted)">Convert a true colour image to a palette based image with a number of colours, optionally using dithering.</s>
+<s f="imagettfbbox" u="array imagettfbbox(int size, int angle, string font_file, string text)">Give the bounding box of a text using TrueType fonts</s>
+<s f="imagettftext" u="array imagettftext(resource im, int size, int angle, int x, int y, int col, string font_file, string text)">Write text to the image using a TrueType font</s>
+<s f="imagetypes" u="int imagetypes(void)">Return the types of images supported in a bitfield - 1=GIF, 2=JPEG, 4=PNG, 8=WBMP, 16=XPM</s>
+<s f="imagewbmp" u="bool imagewbmp(resource im [, string filename, [, int foreground]])">Output WBMP image to browser or file</s>
+<s f="imagexbm" u="int imagexbm(int im, string filename [, int foreground])">Output XBM image to browser or file</s>
+<s f="bindtextdomain" u="string bindtextdomain(string domain_name, string dir)">Bind to the text domain domain_name, looking for translations in dir. Returns the current domain</s>
+<s f="dcgettext" u="string dcgettext(string domain_name, string msgid, long category)">Return the translation of msgid for domain_name and category, or msgid unaltered if a translation does not exist</s>
+<s f="dgettext" u="string dgettext(string domain_name, string msgid)">Return the translation of msgid for domain_name, or msgid unaltered if a translation does not exist</s>
+<s f="gettext" u="string gettext(string msgid)">Return the translation of msgid for the current domain, or msgid unaltered if a translation does not exist</s>
+<s f="ngettext" u="string ngettext(string MSGID1, string MSGID2, int N)">Plural version of gettext()</s>
+<s f="textdomain" u="string textdomain(string domain)">Set the textdomain to "domain". Returns the current domain</s>
+<s f="gmp_abs" u="resource gmp_abs(resource a)">Calculates absolute value</s>
+<s f="gmp_add" u="resource gmp_add(resource a, resource b)">Add a and b</s>
+<s f="gmp_and" u="resource gmp_and(resource a, resource b)">Calculates logical AND of a and b</s>
+<s f="gmp_clrbit" u="void gmp_clrbit(resource &amp;a, int index)">Clears bit in a</s>
+<s f="gmp_cmp" u="int gmp_cmp(resource a, resource b)">Compares two numbers</s>
+<s f="gmp_com" u="resource gmp_com(resource a)">Calculates one's complement of a</s>
+<s f="gmp_div_q" u="resource gmp_div_q(resource a, resource b [, int round])">Divide a by b, returns quotient only</s>
+<s f="gmp_div_qr" u="array gmp_div_qr(resource a, resource b [, int round])">Divide a by b, returns quotient and reminder</s>
+<s f="gmp_div_r" u="resource gmp_div_r(resource a, resource b [, int round])">Divide a by b, returns reminder only</s>
+<s f="gmp_divexact" u="resource gmp_divexact(resource a, resource b)">Divide a by b using exact division algorithm</s>
+<s f="gmp_fact" u="resource gmp_fact(int a)">Calculates factorial function</s>
+<s f="gmp_gcd" u="resource gmp_gcd(resource a, resource b)">Computes greatest common denominator (gcd) of a and b</s>
+<s f="gmp_gcdext" u="array gmp_gcdext(resource a, resource b)">Computes G, S, and T, such that AS      BT = G = `gcd' (A, B)</s>
+<s f="gmp_hamdist" u="int gmp_hamdist(resource a, resource b)">Calculates hamming distance between a and b</s>
+<s f="gmp_init" u="resource gmp_init(mixed number [, int base])">Initializes GMP number</s>
+<s f="gmp_intval" u="int gmp_intval(resource gmpnumber)">Gets signed long value of GMP number</s>
+<s f="gmp_invert" u="resource gmp_invert(resource a, resource b)">Computes the inverse of a modulo b</s>
+<s f="gmp_jacobi" u="int gmp_jacobi(resource a, resource b)">Computes Jacobi symbol</s>
+<s f="gmp_legendre" u="int gmp_legendre(resource a, resource b)">Computes Legendre symbol</s>
+<s f="gmp_mod" u="resource gmp_mod(resource a, resource b)">Computes a modulo b</s>
+<s f="gmp_mul" u="resource gmp_mul(resource a, resource b)">Multiply a and b</s>
+<s f="gmp_neg" u="resource gmp_neg(resource a)">Negates a number</s>
+<s f="gmp_or" u="resource gmp_or(resource a, resource b)">Calculates logical OR of a and b</s>
+<s f="gmp_perfect_square" u="bool gmp_perfect_square(resource a)">Checks if a is an exact square</s>
+<s f="gmp_popcount" u="int gmp_popcount(resource a)">Calculates the population count of a</s>
+<s f="gmp_pow" u="resource gmp_pow(resource base, int exp)">Raise base to power exp</s>
+<s f="gmp_powm" u="resource gmp_powm(resource base, resource exp, resource mod)">Raise base to power exp and take result modulo mod</s>
+<s f="gmp_prob_prime" u="int gmp_prob_prime(resource a[, int reps])">Checks if a is "probably prime"</s>
+<s f="gmp_random" u="resource gmp_random([int limiter])">Gets random number</s>
+<s f="gmp_setbit" u="void gmp_setbit(resource &amp;a, int index[, bool set_clear])">Sets or clear bit in a</s>
+<s f="gmp_sign" u="int gmp_sign(resource a)">Gets the sign of the number</s>
+<s f="gmp_sqrt" u="resource gmp_sqrt(resource a)">Takes integer part of square root of a</s>
+<s f="gmp_sqrtrem" u="array gmp_sqrtrem(resource a)">Square root with remainder</s>
+<s f="gmp_strval" u="string gmp_strval(resource gmpnumber [, int base])">Gets string representation of GMP number</s>
+<s f="gmp_sub" u="resource gmp_sub(resource a, resource b)">Subtract b from a</s>
+<s f="gmp_xor" u="resource gmp_xor(resource a, resource b)">Calculates logical exclusive OR of a and b</s>
+<s f="iconv" u="string iconv(string in_charset, string out_charset, string str)">Returns str converted to the out_charset character set</s>
+<s f="iconv_get_encoding" u="mixed iconv_get_encoding([string type])">Get internal encoding and output encoding for ob_iconv_handler()</s>
+<s f="iconv_mime_decode" u="string iconv_mime_decode(string encoded_string [, int mode, string charset])">Decodes a mime header field</s>
+<s f="iconv_mime_decode_headers" u="array iconv_mime_decode_headers(string headers [, int mode, string charset])">Decodes multiple mime header fields</s>
+<s f="iconv_mime_encode" u="string iconv_mime_encode(string field_name, string field_value, [, array preference])">Composes a mime header field with field_name and field_value in a specified scheme</s>
+<s f="iconv_set_encoding" u="bool iconv_set_encoding(string type, string charset)">Sets internal encoding and output encoding for ob_iconv_handler()</s>
+<s f="iconv_strlen" u="int iconv_strlen(string str [, string charset])">Returns the character count of str</s>
+<s f="iconv_strpos" u="int iconv_strpos(string haystack, string needle, int offset [, string charset])">Finds position of first occurrence of needle within part of haystack beginning with offset</s>
+<s f="iconv_strrpos" u="int iconv_strrpos(string haystack, string needle [, string charset])">Finds position of last occurrence of needle within part of haystack beginning with offset</s>
+<s f="iconv_substr" u="string iconv_substr(string str, int offset, [int length, string charset])">Returns specified part of a string</s>
+<s f="ob_iconv_handler" u="string ob_iconv_handler(string contents, int status)">Returns str in output buffer converted to the iconv.output_encoding character set</s>
+<s f="imap_alerts" u="array imap_alerts(void)">Returns an array of all IMAP alerts that have been generated since the last page load or since the last imap_alerts() call, whichever came last. The alert stack is cleared after imap_alerts() is called.</s>
+<s f="imap_append" u="bool imap_append(resource stream_id, string folder, string message [, string options])">Append a new message to a specified mailbox</s>
+<s f="imap_binary" u="string imap_binary(string text)">Convert an 8bit string to a base64 string</s>
+<s f="imap_body" u="string imap_body(resource stream_id, int msg_no [, int options])">Read the message body</s>
+<s f="imap_bodystruct" u="object imap_bodystruct(resource stream_id, int msg_no, int section)">Read the structure of a specified body section of a specific message</s>
+<s f="imap_check" u="object imap_check(resource stream_id)">Get mailbox properties</s>
+<s f="imap_clearflag_full" u="bool imap_clearflag_full(resource stream_id, string sequence, string flag [, int options])">Clears flags on messages</s>
+<s f="imap_close" u="bool imap_close(resource stream_id [, int options])">Close an IMAP stream</s>
+<s f="imap_createmailbox" u="bool imap_createmailbox(resource stream_id, string mailbox)">Create a new mailbox</s>
+<s f="imap_delete" u="bool imap_delete(resource stream_id, int msg_no [, int options])">Mark a message for deletion</s>
+<s f="imap_deletemailbox" u="bool imap_deletemailbox(resource stream_id, string mailbox)">Delete a mailbox</s>
+<s f="imap_errors" u="array imap_errors(void)">Returns an array of all IMAP errors generated since the last page load, or since the last imap_errors() call, whichever came last. The error stack is cleared after imap_errors() is called.</s>
+<s f="imap_expunge" u="bool imap_expunge(resource stream_id)">Permanently delete all messages marked for deletion</s>
+<s f="imap_fetch_overview" u="array imap_fetch_overview(resource stream_id, int msg_no [, int options])">Read an overview of the information in the headers of the given message sequence</s>
+<s f="imap_fetchbody" u="string imap_fetchbody(resource stream_id, int msg_no, int section [, int options])">Get a specific body section</s>
+<s f="imap_fetchheader" u="string imap_fetchheader(resource stream_id, int msg_no [, int options])">Get the full unfiltered header for a message</s>
+<s f="imap_fetchstructure" u="object imap_fetchstructure(resource stream_id, int msg_no [, int options])">Read the full structure of a message</s>
+<s f="imap_get_quota" u="array imap_get_quota(resource stream_id, string qroot)">Returns the quota set to the mailbox account qroot</s>
+<s f="imap_get_quotaroot" u="array imap_get_quotaroot(resource stream_id, string mbox)">Returns the quota set to the mailbox account mbox</s>
+<s f="imap_getacl" u="array imap_getacl(resource stream_id, string mailbox)">Gets the ACL for a given mailbox</s>
+<s f="imap_getmailboxes" u="array imap_getmailboxes(resource stream_id, string ref, string pattern)">Reads the list of mailboxes and returns a full array of objects containing name, attributes, and delimiter</s>
+<s f="imap_getsubscribed" u="array imap_getsubscribed(resource stream_id, string ref, string pattern)">Return a list of subscribed mailboxes, in the same format as imap_getmailboxes()</s>
+<s f="imap_headerinfo" u="object imap_headerinfo(resource stream_id, int msg_no [, int from_length [, int subject_length [, string default_host]]])">Read the headers of the message</s>
+<s f="imap_headers" u="array imap_headers(resource stream_id)">Returns headers for all messages in a mailbox</s>
+<s f="imap_last_error" u="string imap_last_error(void)">Returns the last error that was generated by an IMAP function. The error stack is NOT cleared after this call.</s>
+<s f="imap_list" u="array imap_list(resource stream_id, string ref, string pattern)">Read the list of mailboxes</s>
+<s f="imap_lsub" u="array imap_lsub(resource stream_id, string ref, string pattern)">Return a list of subscribed mailboxes</s>
+<s f="imap_mail" u="bool imap_mail(string to, string subject, string message [, string additional_headers [, string cc [, string bcc [, string rpath]]]])">Send an email message</s>
+<s f="imap_mail_compose" u="string imap_mail_compose(array envelope, array body)">Create a MIME message based on given envelope and body sections</s>
+<s f="imap_mail_copy" u="bool imap_mail_copy(resource stream_id, int msg_no, string mailbox [, int options])">Copy specified message to a mailbox</s>
+<s f="imap_mail_move" u="bool imap_mail_move(resource stream_id, int msg_no, string mailbox [, int options])">Move specified message to a mailbox</s>
+<s f="imap_mailboxmsginfo" u="object imap_mailboxmsginfo(resource stream_id)">Returns info about the current mailbox</s>
+<s f="imap_mime_header_decode" u="array imap_mime_header_decode(string str)">Decode mime header element in accordance with RFC 2047 and return array of objects containing 'charset' encoding and decoded 'text'</s>
+<s f="imap_msgno" u="int imap_msgno(resource stream_id, int unique_msg_id)">Get the sequence number associated with a UID</s>
+<s f="imap_num_msg" u="int imap_num_msg(resource stream_id)">Gives the number of messages in the current mailbox</s>
+<s f="imap_num_recent" u="int imap_num_recent(resource stream_id)">Gives the number of recent messages in current mailbox</s>
+<s f="imap_open" u="resource imap_open(string mailbox, string user, string password [, int options])">Open an IMAP stream to a mailbox</s>
+<s f="imap_ping" u="bool imap_ping(resource stream_id)">Check if the IMAP stream is still active</s>
+<s f="imap_qprint" u="string imap_qprint(string text)">Convert a quoted-printable string to an 8-bit string</s>
+<s f="imap_renamemailbox" u="bool imap_renamemailbox(resource stream_id, string old_name, string new_name)">Rename a mailbox</s>
+<s f="imap_reopen" u="bool imap_reopen(resource stream_id, string mailbox [, int options])">Reopen an IMAP stream to a new mailbox</s>
+<s f="imap_scan" u="array imap_scan(resource stream_id, string ref, string pattern, string content)">Read list of mailboxes containing a certain string</s>
+<s f="imap_search" u="array imap_search(resource stream_id, string criteria [, int options [, string charset]])">Return a list of messages matching the given criteria</s>
+<s f="imap_set_quota" u="bool imap_set_quota(resource stream_id, string qroot, int mailbox_size)">Will set the quota for qroot mailbox</s>
+<s f="imap_setacl" u="bool imap_setacl(resource stream_id, string mailbox, string id, string rights)">Sets the ACL for a given mailbox</s>
+<s f="imap_setflag_full" u="bool imap_setflag_full(resource stream_id, string sequence, string flag [, int options])">Sets flags on messages</s>
+<s f="imap_sort" u="array imap_sort(resource stream_id, int criteria, int reverse [, int options [, string search_criteria [, string charset]]])">Sort an array of message headers, optionally including only messages that meet specified criteria.</s>
+<s f="imap_status" u="object imap_status(resource stream_id, string mailbox, int options)">Get status info from a mailbox</s>
+<s f="imap_subscribe" u="bool imap_subscribe(resource stream_id, string mailbox)">Subscribe to a mailbox</s>
+<s f="imap_thread" u="array imap_thread(resource stream_id [, int options])">Return threaded by REFERENCES tree</s>
+<s f="imap_timeout" u="mixed imap_timeout(int timeout_type [, int timeout])">Set or fetch imap timeout</s>
+<s f="imap_uid" u="int imap_uid(resource stream_id, int msg_no)">Get the unique message id associated with a standard sequential message number</s>
+<s f="imap_undelete" u="bool imap_undelete(resource stream_id, int msg_no)">Remove the delete flag from a message</s>
+<s f="imap_unsubscribe" u="bool imap_unsubscribe(resource stream_id, string mailbox)">Unsubscribe from a mailbox</s>
+<s f="ifx_affected_rows" u="int ifx_affected_rows(resource resultid)">Returns the number of rows affected by query identified by resultid</s>
+<s f="ifx_blobinfile_mode" u="bool ifx_blobinfile_mode(int mode)">Sets the default blob-mode for all select-queries</s>
+<s f="ifx_byteasvarchar" u="bool ifx_byteasvarchar(int mode)">Sets the default byte-mode for all select-queries</s>
+<s f="ifx_close" u="bool ifx_close([resource connid])">Close informix connection</s>
+<s f="ifx_connect" u="resource ifx_connect([string database [, string userid [, string password]]])">Connects to database using userid/password, returns connection id</s>
+<s f="ifx_copy_blob" u="int ifx_copy_blob(int bid)">Duplicates the given blob-object</s>
+<s f="ifx_create_blob" u="int ifx_create_blob(int type, int mode, string param)">Creates a blob-object</s>
+<s f="ifx_create_char" u="int ifx_create_char(string param)">Creates a char-object</s>
+<s f="ifx_do" u="bool ifx_do(resource resultid)">Executes a previously prepared query or opens a cursor for it</s> 
+<s f="ifx_error" u="string ifx_error([resource connection_id])">Returns the Informix error codes (SQLSTATE &amp; SQLCODE)</s>
+<s f="ifx_errormsg" u="string ifx_errormsg([int errorcode])">Returns the Informix errormessage associated with</s>
+<s f="ifx_fetch_row" u="array ifx_fetch_row(resource resultid [, mixed position])">Fetches the next row or &lt;position&gt; row if using a scroll cursor</s>
+<s f="ifx_fieldproperties" u="array ifx_fieldproperties(resource resultid)">Returns an associative for query &lt;resultid&gt; array with fieldnames as key</s>
+<s f="ifx_fieldtypes" u="array ifx_fieldtypes(resource resultid)">Returns an associative array with fieldnames as key for query &lt;resultid&gt;</s>
+<s f="ifx_free_blob" u="int ifx_free_blob(int bid)">Deletes the blob-object</s>
+<s f="ifx_free_char" u="bool ifx_free_char(int bid)">Deletes the char-object</s>
+<s f="ifx_free_result" u="bool ifx_free_result(resource resultid)">Releases resources for query associated with resultid</s>
+<s f="ifx_get_blob" u="string ifx_get_blob(int bid)">Returns the content of the blob-object</s>
+<s f="ifx_get_char" u="string ifx_get_char(int bid)">Returns the content of the char-object</s>
+<s f="ifx_getsqlca" u="array ifx_getsqlca(resource resultid)">Returns the sqlerrd[] fields of the sqlca struct for query resultid</s>
+<s f="ifx_htmltbl_result" u="int ifx_htmltbl_result(resource resultid [, string htmltableoptions])">Formats all rows of the resultid query into a html table</s>
+<s f="ifx_nullformat" u="bool ifx_nullformat(int mode)">Sets the default return value of a NULL-value on a fetch-row</s>
+<s f="ifx_num_fields" u="int ifx_num_fields(resource resultid)">Returns the number of columns in query resultid</s> 
+<s f="ifx_num_rows" u="int ifx_num_rows(resource resultid)">Returns the number of rows already fetched for query identified by resultid</s>
+<s f="ifx_pconnect" u="resource ifx_pconnect([string database [, string userid [, string password]]])">Connects to database using userid/password, returns connection id</s>
+<s f="ifx_prepare" u="resource ifx_prepare(string query, resource connid [, int cursortype] [, array idarray])">Prepare a query on a given connection</s>
+<s f="ifx_query" u="resource ifx_query(string query, resource connid [, int cursortype] [, array idarray])">Perform a query on a given connection</s>
+<s f="ifx_textasvarchar" u="bool ifx_textasvarchar(int mode)">Sets the default text-mode for all select-queries</s>
+<s f="ifx_update_blob" u="int ifx_update_blob(int bid, string content)">Updates the content of the blob-object</s>
+<s f="ifx_update_char" u="bool ifx_update_char(int bid, string content)">Updates the content of the char-object</s>
+<s f="ifxus_close_slob" u="bool ifxus_close_slob(int bid)">Deletes the slob-object</s>
+<s f="ifxus_create_slob" u="int ifxus_create_slob(int mode)">Creates a slob-object and opens it</s>
+<s f="ifxus_free_slob" u="bool ifxus_free_slob(int bid)">Deletes the slob-object</s>
+<s f="ifxus_open_slob" u="int ifxus_open_slob(int bid, int mode)">Opens an slob-object</s>
+<s f="ifxus_read_slob" u="string ifxus_read_slob(int bid, int nbytes)">Reads nbytes of the slob-object</s>
+<s f="ifxus_seek_slob" u="int ifxus_seek_slob(int bid, int mode, long offset)">Sets the current file or seek position of an open slob-object</s>
+<s f="ifxus_tell_slob" u="int ifxus_tell_slob(int bid)">Returns the current file or seek position of an open slob-object</s>
+<s f="ifxus_write_slob" u="int ifxus_write_slob(int bid, string content)">Writes a string into the slob-object</s>
+<s f="ingres_autocommit" u="bool ingres_autocommit([resource link])">Switch autocommit on or off</s> 
+<s f="ingres_close" u="bool ingres_close([resource link])">Close an Ingres II database connection</s>
+<s f="ingres_commit" u="bool ingres_commit([resource link])">Commit a transaction</s>
+<s f="ingres_connect" u="resource ingres_connect([string database [, string username [, string password]]])">Open a connection to an Ingres II database the syntax of database is [node_id::]dbname[/svr_class]</s>
+<s f="ingres_fetch_array" u="array ingres_fetch_array([int result_type [, resource link]])">Fetch a row of result into an array result_type can be II_NUM for enumerated array, II_ASSOC for associative array, or II_BOTH (default)</s>
+<s f="ingres_fetch_object" u="array ingres_fetch_object([int result_type [, resource link]])">Fetch a row of result into an object result_type can be II_NUM for enumerated object, II_ASSOC for associative object, or II_BOTH (default)</s>
+<s f="ingres_fetch_row" u="array ingres_fetch_row([resource link])">Fetch a row of result into an enumerated array</s>
+<s f="ingres_field_length" u="string ingres_field_length(int index [, resource link])">Return the length of a field in a query result index must be &gt;0 and &lt;= ingres_num_fields()</s>
+<s f="ingres_field_name" u="string ingres_field_name(int index [, resource link])">Return the name of a field in a query result index must be &gt;0 and &lt;= ingres_num_fields()</s>
+<s f="ingres_field_nullable" u="string ingres_field_nullable(int index [, resource link])">Return true if the field is nullable and false otherwise index must be &gt;0 and &lt;= ingres_num_fields()</s>
+<s f="ingres_field_precision" u="string ingres_field_precision(int index [, resource link])">Return the precision of a field in a query result index must be &gt;0 and &lt;= ingres_num_fields()</s>
+<s f="ingres_field_scale" u="string ingres_field_scale(int index [, resource link])">Return the scale of a field in a query result index must be &gt;0 and &lt;= ingres_num_fields()</s>
+<s f="ingres_field_type" u="string ingres_field_type(int index [, resource link])">Return the type of a field in a query result index must be &gt;0 and &lt;= ingres_num_fields()</s>
+<s f="ingres_num_fields" u="int ingres_num_fields([resource link])">Return the number of fields returned by the last query</s>
+<s f="ingres_num_rows" u="int ingres_num_rows([resource link])">Return the number of rows affected/returned by the last query</s>
+<s f="ingres_pconnect" u="resource ingres_pconnect([string database [, string username [, string password]]])">Open a persistent connection to an Ingres II database the syntax of database is [node_id::]dbname[/svr_class]</s>
+<s f="ingres_query" u="bool ingres_query(string query [, resource link])">Send a SQL query to Ingres II</s>
+<s f="ingres_rollback" u="bool ingres_rollback([resource link])">Roll back a transaction</s>
+<s f="ibase_blob_add" u="bool ibase_blob_add(resource blob_handle, string data)">Add data into created blob</s>
+<s f="ibase_blob_cancel" u="bool ibase_blob_cancel(resource blob_handle)">Cancel creating blob</s>
+<s f="ibase_blob_close" u="string ibase_blob_close(resource blob_handle)">Close blob</s>
+<s f="ibase_blob_create" u="resource ibase_blob_create([resource link_identifier])">Create blob for adding data</s>
+<s f="ibase_blob_echo" u="bool ibase_blob_echo([ resource link_identifier, ] string blob_id)">Output blob contents to browser</s>
+<s f="ibase_blob_get" u="string ibase_blob_get(resource blob_handle, int len)">Get len bytes data from open blob</s>
+<s f="ibase_blob_import" u="string ibase_blob_import([ resource link_identifier, ] resource file)">Create blob, copy file in it, and close it</s>
+<s f="ibase_blob_info" u="array ibase_blob_info([ resource link_identifier, ] string blob_id)">Return blob length and other useful info</s>
+<s f="ibase_blob_open" u="resource ibase_blob_open([ resource link_identifier, ] string blob_id)">Open blob for retrieving data parts</s>
+<s f="ibase_free_event_handler" u="bool ibase_free_event_handler(resource event)">Frees the event handler set by ibase_set_event_handler()</s>
+<s f="ibase_set_event_handler" u="resource ibase_set_event_handler([resource link_identifier,] callback handler, string event [, string event [, ...]])">Register the callback for handling each of the named events</s>
+<s f="ibase_wait_event" u="string ibase_wait_event([resource link_identifier,] string event [, string event [, ...]])">Waits for any one of the passed Interbase events to be posted by the database, and returns its name</s>
+<s f="ibase_affected_rows" u="int ibase_affected_rows( [ resource link_identifier ] )">Returns the number of rows affected by the previous INSERT, UPDATE or DELETE statement</s>
+<s f="ibase_execute" u="mixed ibase_execute(resource query [, mixed bind_arg [, mixed bind_arg [, ...]]])">Execute a previously prepared query</s>
+<s f="ibase_fetch_assoc" u="array ibase_fetch_assoc(resource result [, int fetch_flags])">Fetch a row  from the results of a query</s>
+<s f="ibase_fetch_object" u="object ibase_fetch_object(resource result [, int fetch_flags])">Fetch a object from the results of a query</s>
+<s f="ibase_fetch_row" u="array ibase_fetch_row(resource result [, int fetch_flags])">Fetch a row  from the results of a query</s>
+<s f="ibase_field_info" u="array ibase_field_info(resource query_result, int field_number)">Get information about a field</s>
+<s f="ibase_free_query" u="bool ibase_free_query(resource query)">Free memory used by a query</s>
+<s f="ibase_free_result" u="bool ibase_free_result(resource result)">Free the memory used by a result</s>
+<s f="ibase_name_result" u="bool ibase_name_result(resource result, string name)">Assign a name to a result for use with ... WHERE CURRENT OF &lt;name&gt; statements</s>
+<s f="ibase_num_fields" u="int ibase_num_fields(resource query_result)">Get the number of fields in result</s>
+<s f="ibase_num_params" u="int ibase_num_params(resource query)">Get the number of params in a prepared query</s>
+<s f="ibase_num_rows" u="int ibase_num_rows( resource result_identifier )">Return the number of rows that are available in a result</s>
+<s f="ibase_param_info" u="array ibase_param_info(resource query, int field_number)">Get information about a parameter</s>
+<s f="ibase_prepare" u="resource ibase_prepare([resource link_identifier, ] string query)">Prepare a query for later execution</s>
+<s f="ibase_query" u="mixed ibase_query([resource link_identifier, [ resource link_identifier, ]] string query [, mixed bind_arg [, mixed bind_arg [, ...]]])">Execute a query</s>
+<s f="ibase_add_user" u="bool ibase_add_user(resource service_handle, string user_name, string password [, string first_name [, string middle_name [, string last_name]]])">Add a user to security database</s>
+<s f="ibase_backup" u="mixed ibase_backup(resource service_handle, string source_db, string dest_file [, int options [, bool verbose]])">Initiates a backup task in the service manager and returns immediately</s>
+<s f="ibase_db_info" u="string ibase_db_info(resource service_handle, string db, int action [, int argument])">Request statistics about a database</s>
+<s f="ibase_delete_user" u="bool ibase_delete_user(resource service_handle, string user_name, string password [, string first_name [, string middle_name [, string last_name]]])">Delete a user from security database</s>
+<s f="ibase_maintain_db" u="bool ibase_maintain_db(resource service_handle, string db, int action [, int argument])">Execute a maintenance command on the database server</s>
+<s f="ibase_modify_user" u="bool ibase_modify_user(resource service_handle, string user_name, string password [, string first_name [, string middle_name [, string last_name]]])">Modify a user in security database</s>
+<s f="ibase_restore" u="mixed ibase_restore(resource service_handle, string source_file, string dest_db [, int options [, bool verbose]])">Initiates a restore task in the service manager and returns immediately</s>
+<s f="ibase_server_info" u="string ibase_server_info(resource service_handle, int action)">Request information about a database server</s>
+<s f="ibase_service_attach" u="resource ibase_service_attach(string host, string dba_username, string dba_password)">Connect to the service manager</s>
+<s f="ibase_service_detach" u="bool ibase_service_detach(resource service_handle)">Disconnect from the service manager</s>
+<s f="ibase_close" u="bool ibase_close([resource link_identifier])">Close an InterBase connection</s>
+<s f="ibase_commit" u="bool ibase_commit( resource link_identifier )">Commit transaction</s>
+<s f="ibase_commit_ret" u="bool ibase_commit_ret( resource link_identifier )">Commit transaction and retain the transaction context</s>
+<s f="ibase_connect" u="resource ibase_connect(string database [, string username [, string password [, string charset [, int buffers [, int dialect [, string role]]]]]])">Open a connection to an InterBase database</s>
+<s f="ibase_drop_db" u="bool ibase_drop_db([resource link_identifier])">Drop an InterBase database</s>
+<s f="ibase_errcode" u="int ibase_errcode(void)">Return error code</s>
+<s f="ibase_errmsg" u="string ibase_errmsg(void)">Return error message</s>
+<s f="ibase_gen_id" u="int ibase_gen_id(string generator [, int increment [, resource link_identifier ]])">Increments the named generator and returns its new value</s>
+<s f="ibase_pconnect" u="resource ibase_pconnect(string database [, string username [, string password [, string charset [, int buffers [, int dialect [, string role]]]]]])">Open a persistent connection to an InterBase database</s>
+<s f="ibase_rollback" u="bool ibase_rollback( resource link_identifier )">Rollback transaction</s>
+<s f="ibase_rollback_ret" u="bool ibase_rollback_ret( resource link_identifier )">Rollback transaction and retain the transaction context</s>
+<s f="ibase_timefmt" u="bool ibase_timefmt(string format [, int type ])">Sets the format of timestamp, date and time columns returned from queries</s>
+<s f="ibase_trans" u="resource ibase_trans([int trans_args [, resource link_identifier [, ... ], int trans_args [, resource link_identifier [, ... ]] [, ...]]])">Start a transaction over one or several databases</s>
+<s f="ircg_channel_mode" u="bool ircg_channel_mode(int connection, string channel, string mode_spec, string nick)">Sets channel mode flags for user</s>
+<s f="ircg_disconnect" u="bool ircg_disconnect(int connection, string reason)">Terminate IRC connection</s>
+<s f="ircg_eval_ecmascript_params" u="array ircg_eval_ecmascript_params(string params)">Decodes a list of JS-encoded parameters into a native array</s>
+<s f="ircg_fetch_error_msg" u="array ircg_fetch_error_msg(int connection)">Returns the error from previous ircg operation</s>
+<s f="ircg_get_username" u="string ircg_get_username(int connection)">Gets username for connection</s>
+<s f="ircg_html_encode" u="string ircg_html_encode(string html_text)">Encodes HTML preserving output</s>
+<s f="ircg_ignore_add" u="bool ircg_ignore_add(resource connection, string nick)">Adds a user to your ignore list on a server</s>
+<s f="ircg_ignore_del" u="bool ircg_ignore_del(int connection, string nick)">Removes a user from your ignore list</s>
+<s f="ircg_invite" u="bool ircg_invite(int connection, string channel, string nickname)">INVITEs nickname to channel</s>
+<s f="ircg_is_conn_alive" u="bool ircg_is_conn_alive(int connection)">Checks connection status</s>
+<s f="ircg_join" u="bool ircg_join(int connection, string channel [, string chan-key])">Joins a channel on a connected server</s>
+<s f="ircg_kick" u="bool ircg_kick(int connection, string channel, string nick, string reason)">Kicks user from channel</s>
+<s f="ircg_list" u="bool ircg_list(int connection, string channel)">List topic/user count of channel(s)</s>
+<s f="ircg_lookup_format_messages" u="bool ircg_lookup_format_messages(string name)">Selects a set of format strings for display of IRC messages</s>
+<s f="ircg_lusers" u="bool ircg_lusers(int connection)">IRC network statistics</s>
+<s f="ircg_msg" u="bool ircg_msg(int connection, string recipient, string message [,bool loop-suppress])">Delivers a message to the IRC network</s>
+<s f="ircg_names" u="bool ircg_names( int connection, string channel [, string target])">Queries visible usernames</s>
+<s f="ircg_nick" u="bool ircg_nick(int connection, string newnick)">Changes the nickname</s>
+<s f="ircg_nickname_escape" u="string ircg_nickname_escape(string nick)">Escapes special characters in nickname to be IRC-compliant</s>
+<s f="ircg_nickname_unescape" u="string ircg_nickname_unescape(string nick)">Decodes encoded nickname</s>
+<s f="ircg_notice" u="bool ircg_notice(int connection, string recipient, string message)">Sends a one-way communication NOTICE to a target</s>
+<s f="ircg_oper" u="bool ircg_oper(int connection, string name, string password)">Elevates privileges to IRC OPER</s>
+<s f="ircg_part" u="bool ircg_part(int connection, string channel)">Leaves a channel</s>
+<s f="ircg_pconnect" u="int ircg_pconnect(string username [, string server [, int port [, string format-msg-set-name [, array ctcp-set [, array user-details [, bool bailout-on-trivial]]]]]])">Create a persistent IRC connection</s>
+<s f="ircg_register_format_messages" u="bool ircg_register_format_messages(string name, array messages)">Registers a set of format strings for display of IRC messages</s>
+<s f="ircg_set_current" u="bool ircg_set_current(int connection)">Sets current connection for output</s>
+<s f="ircg_set_file" u="bool ircg_set_file(int connection, string path)">Sets logfile for connection</s>
+<s f="ircg_set_on_die" u="bool ircg_set_on_die(int connection, string host, int port, string data)">Sets hostaction to be executed when connection dies</s>
+<s f="ircg_set_on_read_data" u="bool ircg_set_on_read_data(int connection, string host, int port, string data)">Set action to be executed when data is received from a HTTP client</s>
+<s f="ircg_topic" u="bool ircg_topic(int connection, string channel, string topic)">Sets topic for channel</s>
+<s f="ircg_who" u="bool ircg_who(int connection, string mask [, bool ops_only])">Queries server for WHO information</s>
+<s f="ircg_whois" u="bool ircg_whois( int connection, string nick)">Queries user information for nick on server</s>
+<s f="ldap_add" u="bool ldap_add(resource link, string dn, array entry)">Add entries to LDAP directory</s>
+<s f="ldap_bind" u="bool ldap_bind(resource link [, string dn, string password])">Bind to LDAP directory</s>
+<s f="ldap_compare" u="bool ldap_compare(resource link, string dn, string attr, string value)">Determine if an entry has a specific value for one of its attributes</s>
+<s f="ldap_connect" u="resource ldap_connect([string host [, int port]])">Connect to an LDAP server</s>
+<s f="ldap_count_entries" u="int ldap_count_entries(resource link, resource result)">Count the number of entries in a search result</s>
+<s f="ldap_delete" u="bool ldap_delete(resource link, string dn)">Delete an entry from a directory</s>
+<s f="ldap_errno" u="int ldap_errno(resource link)">Get the current ldap error number</s>
+<s f="ldap_error" u="string ldap_error(resource link)">Get the current ldap error string</s>
+<s f="ldap_explode_dn" u="array ldap_explode_dn(string dn, int with_attrib)">Splits DN into its component parts</s>
+<s f="ldap_first_attribute" u="string ldap_first_attribute(resource link, resource result_entry, int ber)">Return first attribute</s>
+<s f="ldap_first_entry" u="resource ldap_first_entry(resource link, resource result)">Return first result id</s>
+<s f="ldap_first_reference" u="resource ldap_first_reference(resource link, resource result)">Return first reference</s>
+<s f="ldap_free_result" u="bool ldap_free_result(resource result)">Free result memory</s>
+<s f="ldap_get_attributes" u="array ldap_get_attributes(resource link, resource result_entry)">Get attributes from a search result entry</s>
+<s f="ldap_get_dn" u="string ldap_get_dn(resource link, resource result_entry)">Get the DN of a result entry</s>
+<s f="ldap_get_entries" u="array ldap_get_entries(resource link, resource result)">Get all result entries</s>
+<s f="ldap_get_option" u="bool ldap_get_option(resource link, int option, mixed retval)">Get the current value of various session-wide parameters</s>
+<s f="ldap_get_values" u="array ldap_get_values(resource link, resource result_entry, string attribute)">Get all values from a result entry</s>
+<s f="ldap_get_values_len" u="array ldap_get_values_len(resource link, resource result_entry, string attribute)">Get all values with lengths from a result entry</s>
+<s f="ldap_list" u="resource ldap_list(resource link, string base_dn, string filter [, array attrs [, int attrsonly [, int sizelimit [, int timelimit [, int deref]]]]])">Single-level search</s>
+<s f="ldap_mod_add" u="bool ldap_mod_add(resource link, string dn, array entry)">Add attribute values to current</s>
+<s f="ldap_mod_del" u="bool ldap_mod_del(resource link, string dn, array entry)">Delete attribute values</s>
+<s f="ldap_mod_replace" u="bool ldap_mod_replace(resource link, string dn, array entry)">Replace attribute values with new ones</s>
+<s f="ldap_next_attribute" u="string ldap_next_attribute(resource link, resource result_entry, resource ber)">Get the next attribute in result</s>
+<s f="ldap_next_entry" u="resource ldap_next_entry(resource link, resource result_entry)">Get next result entry</s>
+<s f="ldap_next_reference" u="resource ldap_next_reference(resource link, resource reference_entry)">Get next reference</s>
+<s f="ldap_parse_reference" u="bool ldap_parse_reference(resource link, resource reference_entry, array referrals)">Extract information from reference entry</s>
+<s f="ldap_parse_result" u="bool ldap_parse_result(resource link, resource result, int errcode, string matcheddn, string errmsg, array referrals)">Extract information from result</s>
+<s f="ldap_read" u="resource ldap_read(resource link, string base_dn, string filter [, array attrs [, int attrsonly [, int sizelimit [, int timelimit [, int deref]]]]])">Read an entry</s>
+<s f="ldap_sasl_bind" u="bool ldap_sasl_bind(resource link)">Bind to LDAP directory using SASL</s>
+<s f="ldap_search" u="resource ldap_search(resource link, string base_dn, string filter [, array attrs [, int attrsonly [, int sizelimit [, int timelimit [, int deref]]]]])">Search LDAP tree under base_dn</s>
+<s f="ldap_set_option" u="bool ldap_set_option(resource link, int option, mixed newval)">Set the value of various session-wide parameters</s>
+<s f="ldap_set_rebind_proc" u="bool ldap_set_rebind_proc(resource link, string callback)">Set a callback function to do re-binds on referral chasing.</s>
+<s f="ldap_sort" u="bool ldap_sort(resource link, resource result, string sortfilter)">Sort LDAP result entries</s>
+<s f="ldap_start_tls" u="bool ldap_start_tls(resource link)">Start TLS</s>
+<s f="ldap_unbind" u="bool ldap_unbind(resource link)">Unbind from LDAP directory</s>
+<s f="libxml_set_streams_context" u="void libxml_set_streams_context(resource streams_context)">Set the streams context for the next libxml document load or write</s>
+<s f="mb_convert_case" u="string mb_convert_case(string sourcestring, int mode [, string encoding])">Returns a case-folded version of sourcestring</s>
+<s f="mb_convert_encoding" u="string mb_convert_encoding(string str, string to-encoding [, mixed from-encoding])">Returns converted string in desired encoding</s>
+<s f="mb_convert_kana" u="string mb_convert_kana(string str [, string option] [, string encoding])">Conversion between full-width character and half-width character (Japanese)</s>
+<s f="mb_convert_variables" u="string mb_convert_variables(string to-encoding, mixed from-encoding [, mixed ...])">Converts the string resource in variables to desired encoding</s>
+<s f="mb_decode_mimeheader" u="string mb_decode_mimeheader(string string)">Decodes the MIME "encoded-word" in the string</s>
+<s f="mb_decode_numericentity" u="string mb_decode_numericentity(string string, array convmap [, string encoding])">Converts HTML numeric entities to character code</s>
+<s f="mb_detect_encoding" u="string mb_detect_encoding(string str [, mixed encoding_list [, bool strict]])">Encodings of the given string is returned (as a string)</s>
+<s f="mb_encode_mimeheader" u="string mb_encode_mimeheader(string str [, string charset [, string transfer-encoding [, string linefeed]]])">Converts the string to MIME "encoded-word" in the format of =?charset?(B|Q)?encoded_string?=</s>
+<s f="mb_encode_numericentity" u="string mb_encode_numericentity(string string, array convmap [, string encoding])">Converts specified characters to HTML numeric entities</s>
+<s f="mb_get_info" u="string mb_get_info([string type])">Returns the current settings of mbstring</s>
+<s f="mb_http_input" u="mixed mb_http_input([string type])">Returns the input encoding</s>
+<s f="mb_http_output" u="string mb_http_output([string encoding])">Sets the current output_encoding or returns the current output_encoding as a string</s>
+<s f="mb_internal_encoding" u="string mb_internal_encoding([string encoding])">Sets the current internal encoding or Returns the current internal encoding as a string</s>
+<s f="mb_language" u="string mb_language([string language])">Sets the current language or Returns the current language as a string</s>
+<s f="mb_list_encodings" u="array mb_list_encodings()">Returns an array of all supported encodings</s>
+<s f="mb_output_handler" u="string mb_output_handler(string contents, int status)">Returns string in output buffer converted to the http_output encoding</s>
+<s f="mb_parse_str" u="bool mb_parse_str(string encoded_string [, array result])">Parses GET/POST/COOKIE data and sets global variables</s>
+<s f="mb_preferred_mime_name" u="string mb_preferred_mime_name(string encoding)">Return the preferred MIME name (charset) as a string</s>
+<s f="mb_send_mail" u="int mb_send_mail(string to, string subject, string message [, string additional_headers [, string additional_parameters]])">*  Sends an email message with MIME scheme</s>
+<s f="mb_strcut" u="string mb_strcut(string str, int start [, int length [, string encoding]])">Returns part of a string</s>
+<s f="mb_strimwidth" u="string mb_strimwidth(string str, int start, int width [, string trimmarker [, string encoding]])">Trim the string in terminal width</s>
+<s f="mb_strlen" u="int mb_strlen(string str [, string encoding])">Get character numbers of a string</s>
+<s f="mb_strpos" u="int mb_strpos(string haystack, string needle [, int offset [, string encoding]])">Find position of first occurrence of a string within another</s>
+<s f="mb_strrpos" u="int mb_strrpos(string haystack, string needle [, string encoding])">Find the last occurrence of a character in a string within another</s>
+<s f="mb_strtolower" u="string mb_strtolower(string sourcestring [, string encoding])">*  Returns a lowercased version of sourcestring</s>
+<s f="mb_strtoupper" u="string mb_strtoupper(string sourcestring [, string encoding])">*  Returns a uppercased version of sourcestring</s>
+<s f="mb_strwidth" u="int mb_strwidth(string str [, string encoding])">Gets terminal width of a string</s>
+<s f="mb_substitute_character" u="mixed mb_substitute_character([mixed substchar])">Sets the current substitute_character or returns the current substitute_character</s>
+<s f="mb_substr" u="string mb_substr(string str, int start [, int length [, string encoding]])">Returns part of a string</s>
+<s f="mb_substr_count" u="int mb_substr_count(string haystack, string needle [, string encoding])">Count the number of substring occurrences</s>
+<s f="mb_ereg" u="int mb_ereg(string pattern, string string [, array registers])">Regular expression match for multibyte string</s>
+<s f="mb_ereg_match" u="bool mb_ereg_match(string pattern, string string [,string option])">Regular expression match for multibyte string</s>
+<s f="mb_ereg_replace" u="string mb_ereg_replace(string pattern, string replacement, string string [, string option])">Replace regular expression for multibyte string</s>
+<s f="mb_ereg_search" u="bool mb_ereg_search([string pattern[, string option]])">Regular expression search for multibyte string</s>
+<s f="mb_ereg_search_getpos" u="int mb_ereg_search_getpos(void)">Get search start position</s>
+<s f="mb_ereg_search_getregs" u="array mb_ereg_search_getregs(void)">Get matched substring of the last time</s>
+<s f="mb_ereg_search_init" u="bool mb_ereg_search_init(string string [, string pattern[, string option]])">Initialize string and regular expression for search.</s>
+<s f="mb_ereg_search_pos" u="array mb_ereg_search_pos([string pattern[, string option]])">Regular expression search for multibyte string</s>
+<s f="mb_ereg_search_regs" u="array mb_ereg_search_regs([string pattern[, string option]])">Regular expression search for multibyte string</s>
+<s f="mb_ereg_search_setpos" u="bool mb_ereg_search_setpos(int position)">Set search start position</s>
+<s f="mb_eregi" u="int mb_eregi(string pattern, string string [, array registers])">Case-insensitive regular expression match for multibyte string</s>
+<s f="mb_eregi_replace" u="string mb_eregi_replace(string pattern, string replacement, string string)">Case insensitive replace regular expression for multibyte string</s>
+<s f="mb_regex_encoding" u="string mb_regex_encoding([string encoding])">Returns the current encoding for regex as a string.</s>
+<s f="mb_regex_set_options" u="string mb_regex_set_options([string options])">Set or get the default options for mbregex functions</s>
+<s f="mb_split" u="array mb_split(string pattern, string string [, int limit])">split multibyte string into array by regular expression</s>
+<s f="mcrypt_cbc" u="string mcrypt_cbc(int cipher, string key, string data, int mode, string iv)">CBC crypt/decrypt data using key key with cipher cipher starting with iv</s>
+<s f="mcrypt_cfb" u="string mcrypt_cfb(int cipher, string key, string data, int mode, string iv)">CFB crypt/decrypt data using key key with cipher cipher starting with iv</s>
+<s f="mcrypt_create_iv" u="string mcrypt_create_iv(int size, int source)">Create an initialization vector (IV)</s>
+<s f="mcrypt_decrypt" u="string mcrypt_decrypt(string cipher, string key, string data, string mode, string iv)">OFB crypt/decrypt data using key key with cipher cipher starting with iv</s>
+<s f="mcrypt_ecb" u="string mcrypt_ecb(int cipher, string key, string data, int mode, string iv)">ECB crypt/decrypt data using key key with cipher cipher starting with iv</s>
+<s f="mcrypt_enc_get_algorithms_name" u="string mcrypt_enc_get_algorithms_name(resource td)">Returns the name of the algorithm specified by the descriptor td</s>
+<s f="mcrypt_enc_get_block_size" u="int mcrypt_enc_get_block_size(resource td)">Returns the block size of the cipher specified by the descriptor td</s>
+<s f="mcrypt_enc_get_iv_size" u="int mcrypt_enc_get_iv_size(resource td)">Returns the size of the IV in bytes of the algorithm specified by the descriptor td</s>
+<s f="mcrypt_enc_get_key_size" u="int mcrypt_enc_get_key_size(resource td)">Returns the maximum supported key size in bytes of the algorithm specified by the descriptor td</s>
+<s f="mcrypt_enc_get_modes_name" u="string mcrypt_enc_get_modes_name(resource td)">Returns the name of the mode specified by the descriptor td</s>
+<s f="mcrypt_enc_get_supported_key_sizes" u="array mcrypt_enc_get_supported_key_sizes(resource td)">This function decrypts the crypttext</s>
+<s f="mcrypt_enc_is_block_algorithm" u="bool mcrypt_enc_is_block_algorithm(resource td)">Returns TRUE if the alrogithm is a block algorithms</s>
+<s f="mcrypt_enc_is_block_algorithm_mode" u="bool mcrypt_enc_is_block_algorithm_mode(resource td)">Returns TRUE if the mode is for use with block algorithms</s>
+<s f="mcrypt_enc_is_block_mode" u="bool mcrypt_enc_is_block_mode(resource td)">Returns TRUE if the mode outputs blocks</s>
+<s f="mcrypt_enc_self_test" u="int mcrypt_enc_self_test(resource td)">This function runs the self test on the algorithm specified by the descriptor td</s>
+<s f="mcrypt_encrypt" u="string mcrypt_encrypt(string cipher, string key, string data, string mode, string iv)">OFB crypt/decrypt data using key key with cipher cipher starting with iv</s>
+<s f="mcrypt_generic" u="string mcrypt_generic(resource td, string data)">This function encrypts the plaintext</s>
+<s f="mcrypt_generic_deinit" u="bool mcrypt_generic_deinit(resource td)">This function terminates encrypt specified by the descriptor td</s>
+<s f="mcrypt_generic_end" u="bool mcrypt_generic_end(resource td)">This function terminates encrypt specified by the descriptor td</s>
+<s f="mcrypt_generic_init" u="int mcrypt_generic_init(resource td, string key, string iv)">This function initializes all buffers for the specific module</s>
+<s f="mcrypt_get_block_size" u="int mcrypt_get_block_size(string cipher, string module)">Get the key size of cipher</s>
+<s f="mcrypt_get_cipher_name" u="string mcrypt_get_cipher_name(string cipher)">Get the key size of cipher</s>
+<s f="mcrypt_get_iv_size" u="int mcrypt_get_iv_size(string cipher, string module)">Get the IV size of cipher (Usually the same as the blocksize)</s>
+<s f="mcrypt_get_key_size" u="int mcrypt_get_key_size(string cipher, string module)">Get the key size of cipher</s>
+<s f="mcrypt_list_algorithms" u="array mcrypt_list_algorithms([string lib_dir])">List all algorithms in "module_dir"</s>
+<s f="mcrypt_list_modes" u="array mcrypt_list_modes([string lib_dir])">List all modes "module_dir"</s>
+<s f="mcrypt_module_close" u="bool mcrypt_module_close(resource td)">Free the descriptor td</s>
+<s f="mcrypt_module_get_algo_block_size" u="int mcrypt_module_get_algo_block_size(string algorithm [, string lib_dir])">Returns the block size of the algorithm</s>
+<s f="mcrypt_module_get_algo_key_size" u="int mcrypt_module_get_algo_key_size(string algorithm [, string lib_dir])">Returns the maximum supported key size of the algorithm</s>
+<s f="mcrypt_module_get_supported_key_sizes" u="array mcrypt_module_get_supported_key_sizes(string algorithm [, string lib_dir])">This function decrypts the crypttext</s>
+<s f="mcrypt_module_is_block_algorithm" u="bool mcrypt_module_is_block_algorithm(string algorithm [, string lib_dir])">Returns TRUE if the algorithm is a block algorithm</s>
+<s f="mcrypt_module_is_block_algorithm_mode" u="bool mcrypt_module_is_block_algorithm_mode(string mode [, string lib_dir])">Returns TRUE if the mode is for use with block algorithms</s>
+<s f="mcrypt_module_is_block_mode" u="bool mcrypt_module_is_block_mode(string mode [, string lib_dir])">Returns TRUE if the mode outputs blocks of bytes</s>
+<s f="mcrypt_module_open" u="resource mcrypt_module_open(string cipher, string cipher_directory, string mode, string mode_directory)">Opens the module of the algorithm and the mode to be used</s>
+<s f="mcrypt_module_self_test" u="bool mcrypt_module_self_test(string algorithm [, string lib_dir])">Does a self test of the module "module"</s>
+<s f="mcrypt_ofb" u="string mcrypt_ofb(int cipher, string key, string data, int mode, string iv)">OFB crypt/decrypt data using key key with cipher cipher starting with iv</s>
+<s f="mdecrypt_generic" u="string mdecrypt_generic(resource td, string data)">This function decrypts the plaintext</s>
+<s f="mcve_adduser" u="int mcve_adduser(resource conn, string admin_password, int usersetup)">Add an MCVE user using usersetup structure</s>
+<s f="mcve_adduserarg" u="int mcve_adduserarg(resource usersetup, int argtype, string argval)">Add a value to user configuration structure</s>
+<s f="mcve_bt" u="int mcve_bt(resource conn, string username, string password)">Get unsettled batch totals</s>
+<s f="mcve_checkstatus" u="int mcve_checkstatus(resource conn, int identifier)">Check to see if a transaction has completed</s>
+<s f="mcve_chkpwd" u="int mcve_chkpwd(resource conn, string username, string password)">Verify Password</s>
+<s f="mcve_chngpwd" u="int mcve_chngpwd(resource conn, string admin_password, string new_password)">Change the system administrator's password</s>
+<s f="mcve_completeauthorizations" u="int mcve_completeauthorizations(resource conn, int &amp;array)">Number of complete authorizations in queue, returning an array of their identifiers</s>
+<s f="mcve_connect" u="int mcve_connect(resource conn)">Establish the connection to MCVE</s>
+<s f="mcve_connectionerror" u="string mcve_connectionerror(resource conn)">Get a textual representation of why a connection failed</s>
+<s f="mcve_deleteresponse" u="bool mcve_deleteresponse(resource conn, int identifier)">Delete specified transaction from MCVE_CONN structure</s>
+<s f="mcve_deletetrans" u="bool mcve_deletetrans(resource conn, int identifier)">Delete specified transaction from MCVE_CONN structure</s>
+<s f="mcve_deleteusersetup" u="void mcve_deleteusersetup(resource usersetup)">Deallocate data associated with usersetup structure</s>
+<s f="mcve_deluser" u="int mcve_deluser(resource conn, string admin_password, string username)">Delete an MCVE user account</s>
+<s f="mcve_destroyconn" u="void mcve_destroyconn(resource conn)">Destroy the connection and MCVE_CONN structure</s>
+<s f="mcve_destroyengine" u="void mcve_destroyengine(void)">Free memory associated with IP/SSL connectivity</s>
+<s f="mcve_disableuser" u="int mcve_disableuser(resource conn, string admin_password, string username)">Disable an active MCVE user account</s>
+<s f="mcve_edituser" u="int mcve_edituser(resource conn, string admin_password, int usersetup)">Edit MCVE user using usersetup structure</s>
+<s f="mcve_enableuser" u="int mcve_enableuser(resource conn, string admin_password, string username)">Enable an inactive MCVE user account</s>
+<s f="mcve_force" u="int mcve_force(resiurce conn, string username, string password, string trackdata, string account, string expdate, float amount, string authcode, string comments, string clerkid, string stationid, int ptrannum)">Send a FORCE to MCVE.  (typically, a phone-authorization)</s>
+<s f="mcve_getcell" u="string mcve_getcell(resource conn, int identifier, string column, int row)">Get a specific cell from a comma delimited response by column name</s>
+<s f="mcve_getcellbynum" u="string mcve_getcellbynum(resource conn, int identifier, int column, int row)">Get a specific cell from a comma delimited response by column number</s>
+<s f="mcve_getcommadelimited" u="string mcve_getcommadelimited(resource conn, int identifier)">Get the RAW comma delimited data returned from MCVE</s>
+<s f="mcve_getheader" u="string mcve_getheader(resource conn, int identifier, int column_num)">Get the name of the column in a comma-delimited response</s>
+<s f="mcve_getuserarg" u="string mcve_getuserarg(resource usersetup, int argtype)">Grab a value from usersetup structure</s>
+<s f="mcve_getuserparam" u="string mcve_getuserparam(resource conn, long identifier, int key)">Get a user response parameter</s>
+<s f="mcve_gft" u="int mcve_gft(resource conn, string username, string password, int type, string account, string clerkid, string stationid, string comments, int ptrannum, string startdate, string enddate)">Audit MCVE for Failed transactions</s>
+<s f="mcve_gl" u="int mcve_gl(int conn, string username, string password, int type, string account, string batch, string clerkid, string stationid, string comments, int ptrannum, string startdate, string enddate)">Audit MCVE for settled transactions</s>
+<s f="mcve_gut" u="int mcve_gut(resource conn, string username, string password, int type, string account, string clerkid, string stationid, string comments, int ptrannum, string startdate, string enddate)">Audit MCVE for Unsettled Transactions</s>
+<s f="mcve_initconn" u="resource mcve_initconn(void)">Create and initialize an MCVE_CONN structure</s>
+<s f="mcve_initengine" u="int mcve_initengine(string location)">Ready the client for IP/SSL Communication</s>
+<s f="mcve_initusersetup" u="resource mcve_initusersetup(void)">Initialize structure to store user data</s>
+<s f="mcve_iscommadelimited" u="int mcve_iscommadelimited(resource conn, int identifier)">Checks to see if response is comma delimited</s>
+<s f="mcve_liststats" u="int mcve_liststats(resource conn, string admin_password)">List statistics for all users on MCVE system</s>
+<s f="mcve_listusers" u="int mcve_listusers(resource conn, string admin_password)">List all users on MCVE system</s>
+<s f="mcve_maxconntimeout" u="bool mcve_maxconntimeout(resource conn, int secs)">The maximum amount of time the API will attempt a connection to MCVE</s>
+<s f="mcve_monitor" u="int mcve_monitor(resource conn)">Perform communication with MCVE (send/receive data)   Non-blocking</s>
+<s f="mcve_numcolumns" u="int mcve_numcolumns(resource conn, int identifier)">Number of columns returned in a comma delimited response</s>
+<s f="mcve_numrows" u="int mcve_numrows(resource conn, int identifier)">Number of rows returned in a comma delimited response</s>
+<s f="mcve_override" u="int mcve_override(resource conn, string username, string password, string trackdata, string account, string expdate, float amount, string street, string zip, string cv, string comments, string clerkid, string stationid, int ptrannum)">Send an OVERRIDE to MCVE</s>
+<s f="mcve_parsecommadelimited" u="int mcve_parsecommadelimited(resource conn, int identifier)">Parse the comma delimited response so mcve_getcell, etc will work</s>
+<s f="mcve_ping" u="int mcve_ping(resource conn)">Send a ping request to MCVE</s>
+<s f="mcve_preauth" u="int mcve_preauth(resource conn, string username, string password, string trackdata, string account, string expdate, float amount, string street, string zip, string cv, string comments,        string clerkid, string stationid, int ptrannum)">Send a PREAUTHORIZATION to MCVE</s>
+<s f="mcve_preauthcompletion" u="int mcve_preauthcompletion(resource conn, string username, string password, float finalamount, int sid, int ptrannum)">Complete a PREAUTHORIZATION... Ready it for settlement</s>
+<s f="mcve_qc" u="int mcve_qc(resource conn, string username, string password, string clerkid, string stationid, string comments, int ptrannum)">Audit MCVE for a list of transactions in the outgoing queue</s>
+<s f="mcve_responseparam" u="string mcve_responseparam(resource conn, long identifier, string key)">Get a custom response parameter</s>
+<s f="mcve_return" u="int mcve_return(int conn, string username, string password, string trackdata, string account, string expdate, float amount, string comments, string clerkid, string stationid, int ptrannum)">Issue a RETURN or CREDIT to MCVE</s>
+<s f="mcve_returncode" u="int mcve_returncode(resource conn, int identifier)">Grab the exact return code from the transaction</s>
+<s f="mcve_returnstatus" u="int mcve_returnstatus(resource conn, int identifier)">Check to see if the transaction was successful</s>
+<s f="mcve_sale" u="int mcve_sale(resource conn, string username, string password, string trackdata, string account, string expdate, float amount, string street, string zip, string cv, string comments, string clerkid, string stationid, int ptrannum)">Send a SALE to MCVE</s>
+<s f="mcve_setblocking" u="int mcve_setblocking(resource conn, int tf)">Set blocking/non-blocking mode for connection</s>
+<s f="mcve_setdropfile" u="int mcve_setdropfile(resource conn, string directory)">Set the connection method to Drop-File</s>
+<s f="mcve_setip" u="int mcve_setip(resource conn, string host, int port)">Set the connection method to IP</s>
+<s f="mcve_setssl" u="int mcve_setssl(resource conn, string host, int port)">Set the connection method to SSL</s>
+<s f="mcve_setssl_files" u="int mcve_setssl_files(string sslkeyfile, string sslcertfile)">Set certificate key files and certificates if server requires client certificate     verification</s>
+<s f="mcve_settimeout" u="int mcve_settimeout(resource conn, int seconds)">Set maximum transaction time (per trans)</s>
+<s f="mcve_settle" u="int mcve_settle(resource conn, string username, string password, string batch)">Issue a settlement command to do a batch deposit</s>
+<s f="mcve_text_avs" u="string mcve_text_avs(string code)">Get a textual representation of the return_avs</s>
+<s f="mcve_text_code" u="string mcve_text_code(string code)">Get a textual representation of the return_code</s>
+<s f="mcve_text_cv" u="string mcve_text_cv(int code)">Get a textual representation of the return_cv</s>
+<s f="mcve_transactionauth" u="string mcve_transactionauth(resource conn, int identifier)">Get the authorization number returned for the transaction (alpha-numeric)</s>
+<s f="mcve_transactionavs" u="int mcve_transactionavs(resource conn, int identifier)">Get the Address Verification return status</s>
+<s f="mcve_transactionbatch" u="int mcve_transactionbatch(resource conn, int identifier)">Get the batch number associated with the transaction</s>
+<s f="mcve_transactioncv" u="int mcve_transactioncv(resource conn, int identifier)">Get the CVC2/CVV2/CID return status</s>
+<s f="mcve_transactionid" u="int mcve_transactionid(resource conn, int identifier)">Get the unique system id for the transaction</s>
+<s f="mcve_transactionitem" u="int mcve_transactionitem(resource conn, int identifier)">Get the ITEM number in the associated batch for this transaction</s>
+<s f="mcve_transactionssent" u="int mcve_transactionssent(resource conn)">Check to see if outgoing buffer is clear</s>
+<s f="mcve_transactiontext" u="string mcve_transactiontext(resource conn, int identifier)">Get verbiage (text) return from MCVE or processing institution</s>
+<s f="mcve_transinqueue" u="int mcve_transinqueue(resource conn)">Number of transactions in client-queue</s>
+<s f="mcve_transnew" u="int mcve_transnew(resource conn)">Start a new transaction</s>
+<s f="mcve_transparam" u="int mcve_transparam(resource conn, long identifier, int key, ...)">Add a parameter to a transaction</s>
+<s f="mcve_transsend" u="int mcve_transsend(resource conn, long identifier)">Finalize and send the transaction</s>
+<s f="mcve_ub" u="int mcve_ub(resource conn, string username, string password)">Get a list of all Unsettled batches</s>
+<s f="mcve_uwait" u="int mcve_uwait(long microsecs)">Wait x microsecs</s>
+<s f="mcve_verifyconnection" u="bool mcve_verifyconnection(resource conn, int tf)">Set whether or not to PING upon connect to verify connection</s>
+<s f="mcve_verifysslcert" u="bool mcve_verifysslcert(resource conn, int tf)">Set whether or not to verify the server ssl certificate</s>
+<s f="mcve_void" u="int mcve_void(resource conn, string username, string password, int sid, int ptrannum)">VOID a transaction in the settlement queue</s>
+<s f="mhash" u="string mhash(int hash, string data [, string key])">Hash data with hash</s>
+<s f="mhash_count" u="int mhash_count(void)">Gets the number of available hashes</s>
+<s f="mhash_get_block_size" u="int mhash_get_block_size(int hash)">Gets the block size of hash</s>
+<s f="mhash_get_hash_name" u="string mhash_get_hash_name(int hash)">Gets the name of hash</s>
+<s f="mime_content_type" u="string mime_content_type(string filename|resource stream)">Return content-type for file</s>
+<s f="ming_keypress" u="int ming_keypress(string str)">Returns the action flag for keyPress(char)</s>
+<s f="ming_setscale" u="void ming_setscale(int scale)">Set scale (?)</s>
+<s f="ming_useconstants" u="void ming_useconstants(int use)">Use constant pool (?)</s>
+<s f="ming_useswfversion" u="void ming_useswfversion(int version)">Use SWF version (?)</s>
+<s f="swfaction_init" u="object swfaction_init(string)">Returns a new SWFAction object, compiling the given script</s>
+<s f="swfbitmap_init" u="class swfbitmap_init(mixed file [, mixed maskfile])">Returns a new SWFBitmap object from jpg (with optional mask) or dbl file</s>
+<s f="swfbutton_init" u="object swfbutton_init(void)">Returns a new SWFButton object</s>
+<s f="swfdisplayitem_move" u="void swfdisplayitem_move(float dx, float dy)">Displaces this SWFDisplayItem by (dx, dy) in movie coordinates</s>
+<s f="swfdisplayitem_rotate" u="void swfdisplayitem_rotate(float degrees)">Rotates this SWFDisplayItem the given (clockwise) degrees from its current orientation</s>
+<s f="swfdisplayitem_scale" u="void swfdisplayitem_scale(float xScale, float yScale)">Multiplies this SWFDisplayItem's current x scale by xScale, its y scale by yScale</s>
+<s f="swffill_init" u="class swffill_init(void)">Returns a new SWFFill object</s>
+<s f="swffont_init" u="object swffont_init(string filename)">Returns a new SWFFont object from given file</s>
+<s f="swfgradient_init" u="class swfgradient_init(void)">Returns a new SWFGradient object</s>
+<s f="swfmorph_init" u="object swfmorph_init(void)">Returns a new SWFMorph object</s>
+<s f="swfmovie_add" u="object swfmovie_add(object SWFBlock)"/>
+<s f="swfmovie_init" u="object swfmovie_init(int version)">Creates swfmovie object according to the passed version</s>
+<s f="swfmovie_labelframe" u="void swfmovie_labelframe(object SWFBlock)"/>
+<s f="swfmovie_labelframe" u="void swfmovie_labelframe(string label)">Labels frame</s>
+<s f="swfmovie_nextframe" u="void swfmovie_nextframe(void)"/>
+<s f="swfmovie_output" u="int swfmovie_output([int compression])"/>
+<s f="swfmovie_save" u="int swfmovie_save(mixed where [, int compression])">Saves the movie. 'where' can be stream and the movie will be saved there otherwise it is treated as string and written in file with that name</s>
+<s f="swfshape_addfill" u="object swfshape_addfill(mixed arg1, int arg2, [int b [, int a]])">Returns a fill object, for use with swfshape_setleftfill and swfshape_setrightfill. If 1 or 2 parameter(s) is (are) passed first should be object (from gradient class) and the second int (flags). Gradient fill is performed. If 3 or 4 parameters are passed : r, g, b [, a]. Solid fill is performed.</s>
+<s f="swfshape_drawarc" u="void swfshape_drawarc(float r, float startAngle, float endAngle)">Draws an arc of radius r centered at the current location, from angle startAngle to angle endAngle measured counterclockwise from 12 o'clock</s>
+<s f="swfshape_drawcircle" u="void swfshape_drawcircle(float r)">Draws a circle of radius r centered at the current location, in a counter-clockwise fashion</s>
+<s f="swfshape_drawcubic" u="void swfshape_drawcubic(float bx, float by, float cx, float cy, float dx, float dy)">Draws a cubic bezier curve using the current position and the three given points as control points</s>
+<s f="swfshape_drawcubic" u="void swfshape_drawcubic(float bx, float by, float cx, float cy, float dx, float dy)">Draws a cubic bezier curve using the current position and the three given points as control points</s>
+<s f="swfshape_drawcurve" u="void swfshape_drawcurve(float adx, float ady, float bdx, float bdy [, float cdx, float cdy])">Draws a curve from the current pen position (x, y) to the point (x+bdx, y+bdy) in the current line style, using point (x+adx, y+ady) as a control point or draws a cubic bezier to point (x+cdx, x+cdy) with control points (x+adx, y+ady) and (x+bdx, y+bdy)</s>
+<s f="swfshape_drawcurveto" u="void swfshape_drawcurveto(float ax, float ay, float bx, float by [, float dx, float dy])">Draws a curve from the current pen position (x,y) to the point (bx, by) in the current line style, using point (ax, ay) as a control point. Or draws a cubic bezier to point (dx, dy) with control points (ax, ay) and (bx, by)</s>
+<s f="swfshape_drawglyph" u="void swfshape_drawglyph(SWFFont font, string character [, int size])">Draws the first character in the given string into the shape using the glyph definition from the given font</s>
+<s f="swfshape_drawline" u="void swfshape_drawline(float dx, float dy)">Draws a line from the current pen position (x, y) to the point (x+dx, y+dy) in the current line style</s>
+<s f="swfshape_drawlineto" u="void swfshape_drawlineto(float x, float y)">Draws a line from the current pen position to shape coordinates (x, y) in the current line style</s>
+<s f="swfshape_init" u="object swfshape_init(void)">Returns a new SWFShape object</s>
+<s f="swfshape_movepen" u="void swfshape_movepen(float x, float y)">Moves the pen from its current location by vector (x, y)</s>
+<s f="swfshape_movepento" u="void swfshape_movepento(float x, float y)">Moves the pen to shape coordinates (x, y)</s>
+<s f="swfshape_setleftfill" u="void swfshape_setleftfill(int arg1 [, int g ,int b [,int a]])">Sets the left side fill style to fill in case only one parameter is passed. When 3 or 4 parameters are passed they are treated as : int r, int g, int b, int a . Solid fill is performed in this case before setting left side fill type.</s>
+<s f="swfshape_setleftfill" u="void swfshape_setleftfill(int arg1 [, int g ,int b [,int a]])">Sets the right side fill style to fill in case only one parameter is passed. When 3 or 4 parameters are passed they are treated as : int r, int g, int b, int a . Solid fill is performed in this case before setting right side fill type.</s>
+<s f="swfshape_setline" u="void swfshape_setline(int width, int r, int g, int b [, int a])">Sets the current line style for this SWFShape</s>
+<s f="swfsound_init" u="class swfsound_init(string filename, int flags)">Returns a new SWFSound object from given file</s>
+<s f="swfsprite_add" u="object swfsprite_add(object SWFCharacter)">Adds the character to the sprite, returns a displayitem object</s>
+<s f="swfsprite_init" u="class swfsprite_init(void)">Returns a new SWFSprite object</s>
+<s f="swfsprite_remove" u="void swfsprite_remove(object SWFDisplayItem)">Remove the named character from the sprite's display list</s>
+<s f="swftext_init" u="class swftext_init(void)">Returns new SWFText object</s>
+<s f="swftextfield_align" u="void swftextfield_align(int alignment)">Sets the alignment of this textfield</s>
+<s f="swftextfield_init" u="object swftextfield_init([int flags])">Returns a new SWFTextField object</s>
+<s f="udm_add_search_limit" u="int udm_add_search_limit(int agent, int var, string val)">Add mnoGoSearch search restrictions</s>
+<s f="udm_alloc_agent" u="int udm_alloc_agent(string dbaddr [, string dbmode])">Allocate mnoGoSearch session</s>
+<s f="udm_alloc_agent_array" u="int udm_alloc_agent_array(array dbaddr)">Allocate mnoGoSearch session</s>
+<s f="udm_api_version" u="int udm_api_version()">Get mnoGoSearch API version</s>
+<s f="udm_cat_list" u="array udm_cat_list(int agent, string category)">Get mnoGoSearch categories list with the same root</s>
+<s f="udm_cat_path" u="array udm_cat_path(int agent, string category)">Get mnoGoSearch categories path from the root to the given catgory</s>
+<s f="udm_check_charset" u="int udm_check_charset(int agent, string charset)">Check if the given charset is known to mnogosearch</s>
+<s f="udm_check_stored" u="int udm_check_stored(int agent, int link, string doc_id)">Open connection to stored</s>
+<s f="udm_clear_search_limits" u="int udm_clear_search_limits(int agent)">Clear all mnoGoSearch search restrictions</s>
+<s f="udm_close_stored" u="int udm_close_stored(int agent, int link)">Open connection to stored</s>
+<s f="udm_errno" u="int udm_errno(int agent)">Get mnoGoSearch error number</s>
+<s f="udm_error" u="string udm_error(int agent)">Get mnoGoSearch error message</s>
+<s f="udm_find" u="int udm_find(int agent, string query)">Perform search</s>
+<s f="udm_free_agent" u="int udm_free_agent(int agent)">Free mnoGoSearch session</s>
+<s f="udm_free_ispell_data" u="int udm_free_ispell_data(int agent)">Free memory allocated for ispell data</s>
+<s f="udm_free_res" u="int udm_free_res(int res)">mnoGoSearch free result</s>
+<s f="udm_get_doc_count" u="int udm_get_doc_count(int agent)">Get total number of documents in database</s>
+<s f="udm_get_res_field" u="string udm_get_res_field(int res, int row, int field)">Fetch mnoGoSearch result field</s>
+<s f="udm_get_res_field_ex" u="string udm_get_res_field_ex(int res, int row, string field)">Fetch mnoGoSearch result field</s>
+<s f="udm_get_res_param" u="string udm_get_res_param(int res, int param)">Get mnoGoSearch result parameters</s>
+<s f="udm_load_ispell_data" u="int udm_load_ispell_data(int agent, int var, string val1, [string charset], string val2, int flag)">Load ispell data</s>
+<s f="udm_make_excerpt" u="int udm_make_excerpt(int agent, int res, int row)">Perform search</s>
+<s f="udm_open_stored" u="int udm_open_stored(int agent, string storedaddr)">Open connection to stored</s>
+<s f="udm_parse_query_string" u="int udm_parse_query_string(int agent, string str)">Parses query string, initialises variables and search limits taken from it</s>
+<s f="udm_set_agent_param" u="int udm_set_agent_param(int agent, int var, string val)">Set mnoGoSearch agent session parameters</s>
+<s f="udm_set_agent_param_ex" u="int udm_set_agent_param_ex(int agent, string var, string val)">Set mnoGoSearch agent session parameters extended</s>
+<s f="msession_call" u="string msession_call(string fn_name, [, string param1 ], ... [,string param4])">Call the plugin function named fn_name</s>
+<s f="msession_connect" u="bool msession_connect(string host, string port)">Connect to msession sever</s>
+<s f="msession_count" u="int msession_count(void)">Get session count</s>
+<s f="msession_create" u="bool msession_create(string session)">Create a session</s>
+<s f="msession_ctl" u="int msession_ctl(string name)">Lock a session</s>
+<s f="msession_destroy" u="bool msession_destroy(string name)">Destroy a session</s>
+<s f="msession_disconnect" u="void msession_disconnect(void)">Disconnect from msession server</s>
+<s f="msession_exec" u="string msession_exec(string cmdline)">executes a program on msession system</s>
+<s f="msession_find" u="array msession_find(string name, string value)">Find all sessions with name and value</s>
+<s f="msession_get" u="string msession_get(string session, string name, string default_value)">Get value from session</s>
+<s f="msession_get_array" u="array msession_get_array(string session)">Get array of msession variables</s>
+<s f="msession_get_data" u="string msession_get_data(string session)">Get data session unstructured data. (PHP sessions use this)</s>
+<s f="msession_inc" u="string msession_inc(string session, string name)">Increment value in session</s>
+<s f="msession_list" u="array msession_list(void)">List all sessions</s>
+<s f="msession_listvar" u="array msession_listvar(string name)">return associative array of value:session for all sessions with a variable named 'name'</s>
+<s f="msession_lock" u="int msession_lock(string name)">Lock a session</s>
+<s f="msession_ping" u="bool msession_ping(void)">returns non-zero if msession is alive</s>
+<s f="msession_plugin" u="string msession_plugin(string session, string val [, string param ])">Call the personality plugin escape function</s>
+<s f="msession_randstr" u="string msession_randstr(int num_chars)">Get random string</s>
+<s f="msession_set" u="bool msession_set(string session, string name, string value)">Set value in session</s>
+<s f="msession_set_array" u="bool msession_set_array(string session, array tuples)">Set msession variables from an array</s>
+<s f="msession_set_data" u="bool msession_set_data(string session, string value)">Set data session unstructured data. (PHP sessions use this)</s>
+<s f="msession_timeout" u="int msession_timeout(string session [, int param ])">Set/get session timeout</s>
+<s f="msession_uniq" u="string msession_uniq(int num_chars)">Get uniq id</s>
+<s f="msession_unlock" u="int msession_unlock(string session, int key)">Unlock a session</s>
+<s f="msql_affected_rows" u="int msql_affected_rows(resource query)">Return number of affected rows</s>
+<s f="msql_close" u="bool msql_close([resource link_identifier])">Close an mSQL connection</s>
+<s f="msql_connect" u="int msql_connect([string hostname[:port]] [, string username] [, string password])">Open a connection to an mSQL Server</s>
+<s f="msql_create_db" u="bool msql_create_db(string database_name [, resource link_identifier])">Create an mSQL database</s>
+<s f="msql_data_seek" u="bool msql_data_seek(resource query, int row_number)">Move internal result pointer</s>
+<s f="msql_db_query" u="resource msql_db_query(string database_name, string query [, resource link_identifier])">Send an SQL query to mSQL</s>
+<s f="msql_drop_db" u="bool msql_drop_db(string database_name [, resource link_identifier])">Drop (delete) an mSQL database</s>
+<s f="msql_error" u="string msql_error(void)">Returns the text of the error message from previous mSQL operation</s>
+<s f="msql_fetch_array" u="array msql_fetch_array(resource query [, int result_type])">Fetch a result row as an associative array</s>
+<s f="msql_fetch_field" u="object msql_fetch_field(resource query [, int field_offset])">Get column information from a result and return as an object</s>
+<s f="msql_fetch_object" u="object msql_fetch_object(resource query [, resource result_type])">Fetch a result row as an object</s>
+<s f="msql_fetch_row" u="array msql_fetch_row(resource query)">Get a result row as an enumerated array</s>
+<s f="msql_field_flags" u="string msql_field_flags(resource query, int field_offset)">Get the flags associated with the specified field in a result</s>
+<s f="msql_field_len" u="int msql_field_len(int query, int field_offet)">Returns the length of the specified field</s>
+<s f="msql_field_name" u="string msql_field_name(resource query, int field_index)">Get the name of the specified field in a result</s>
+<s f="msql_field_seek" u="bool msql_field_seek(resource query, int field_offset)">Set result pointer to a specific field offset</s>
+<s f="msql_field_table" u="string msql_field_table(resource query, int field_offset)">Get name of the table the specified field is in</s>
+<s f="msql_field_type" u="string msql_field_type(resource query, int field_offset)">Get the type of the specified field in a result</s>
+<s f="msql_free_result" u="bool msql_free_result(resource query)">Free result memory</s>
+<s f="msql_list_dbs" u="resource msql_list_dbs([resource link_identifier])">List databases available on an mSQL server</s>
+<s f="msql_list_fields" u="resource msql_list_fields(string database_name, string table_name [, resource link_identifier])">List mSQL result fields</s>
+<s f="msql_list_tables" u="resource msql_list_tables(string database_name [, resource link_identifier])">List tables in an mSQL database</s>
+<s f="msql_num_fields" u="int msql_num_fields(resource query)">Get number of fields in a result</s>
+<s f="msql_num_rows" u="int msql_num_rows(resource query)">Get number of rows in a result</s>
+<s f="msql_pconnect" u="int msql_pconnect([string hostname[:port]] [, string username] [, string password])">Open a persistent connection to an mSQL Server</s>
+<s f="msql_query" u="resource msql_query(string query [, resource link_identifier])">Send an SQL query to mSQL</s>
+<s f="msql_result" u="string msql_result(int query, int row [, mixed field])">Get result data</s>
+<s f="msql_select_db" u="bool msql_select_db(string database_name [, resource link_identifier])">Select an mSQL database</s>
+<s f="mssql_bind" u="bool mssql_bind(resource stmt, string param_name, mixed var, int type [, int is_output [, int is_null [, int maxlen]]])">Adds a parameter to a stored procedure or a remote stored procedure</s>
+<s f="mssql_close" u="bool mssql_close([resource conn_id])">Closes a connection to a MS-SQL server</s>
+<s f="mssql_connect" u="int mssql_connect([string servername [, string username [, string password]]])">Establishes a connection to a MS-SQL server</s>
+<s f="mssql_data_seek" u="bool mssql_data_seek(resource result_id, int offset)">Moves the internal row pointer of the MS-SQL result associated with the specified result identifier to pointer to the specified row number</s>
+<s f="mssql_execute" u="mixed mssql_execute(resource stmt [, bool skip_results = false])">Executes a stored procedure on a MS-SQL server database</s>
+<s f="mssql_fetch_array" u="array mssql_fetch_array(resource result_id [, int result_type])">Returns an associative array of the current row in the result set specified by result_id</s>
+<s f="mssql_fetch_assoc" u="array mssql_fetch_assoc(resource result_id)">Returns an associative array of the current row in the result set specified by result_id</s>
+<s f="mssql_fetch_batch" u="int mssql_fetch_batch(resource result_index)">Returns the next batch of records</s>
+<s f="mssql_fetch_field" u="object mssql_fetch_field(resource result_id [, int offset])">Gets information about certain fields in a query result</s>
+<s f="mssql_fetch_object" u="object mssql_fetch_object(resource result_id [, int result_type])">Returns a psuedo-object of the current row in the result set specified by result_id</s>
+<s f="mssql_fetch_row" u="array mssql_fetch_row(resource result_id)">Returns an array of the current row in the result set specified by result_id</s>
+<s f="mssql_field_length" u="int mssql_field_length(resource result_id [, int offset])">Get the length of a MS-SQL field</s>
+<s f="mssql_field_name" u="string mssql_field_name(resource result_id [, int offset])">Returns the name of the field given by offset in the result set given by result_id</s>
+<s f="mssql_field_seek" u="bool mssql_field_seek(int result_id, int offset)">Seeks to the specified field offset</s>
+<s f="mssql_field_type" u="string mssql_field_type(resource result_id [, int offset])">Returns the type of a field</s>
+<s f="mssql_free_result" u="bool mssql_free_result(resource result_index)">Free a MS-SQL result index</s>
+<s f="mssql_free_statement" u="bool mssql_free_statement(resource result_index)">Free a MS-SQL statement index</s>
+<s f="mssql_get_last_message" u="string mssql_get_last_message(void)">Gets the last message from the MS-SQL server</s>
+<s f="mssql_guid_string" u="string mssql_guid_string(string binary [,int short_format])">Converts a 16 byte binary GUID to a string</s>
+<s f="mssql_init" u="int mssql_init(string sp_name [, resource conn_id])">Initializes a stored procedure or a remote stored procedure</s>
+<s f="mssql_min_error_severity" u="void mssql_min_error_severity(int severity)">Sets the lower error severity</s>
+<s f="mssql_min_message_severity" u="void mssql_min_message_severity(int severity)">Sets the lower message severity</s>
+<s f="mssql_next_result" u="bool mssql_next_result(resource result_id)">Move the internal result pointer to the next result</s>
+<s f="mssql_num_fields" u="int mssql_num_fields(resource mssql_result_index)">Returns the number of fields fetched in from the result id specified</s>
+<s f="mssql_num_rows" u="int mssql_num_rows(resource mssql_result_index)">Returns the number of rows fetched in from the result id specified</s>
+<s f="mssql_pconnect" u="int mssql_pconnect([string servername [, string username [, string password]]])">Establishes a persistent connection to a MS-SQL server</s>
+<s f="mssql_query" u="resource mssql_query(string query [, resource conn_id [, int batch_size]])">Perform an SQL query on a MS-SQL server database</s>
+<s f="mssql_result" u="string mssql_result(resource result_id, int row, mixed field)">Returns the contents of one cell from a MS-SQL result set</s>
+<s f="mssql_rows_affected" u="int mssql_rows_affected(resource conn_id)">Returns the number of records affected by the query</s>
+<s f="mssql_select_db" u="bool mssql_select_db(string database_name [, resource conn_id])">Select a MS-SQL database</s>
+<s f="mysql_affected_rows" u="int mysql_affected_rows([int link_identifier])">Gets number of affected rows in previous MySQL operation</s>
+<s f="mysql_client_encoding" u="string mysql_client_encoding([int link_identifier])">Returns the default character set for the current connection</s>
+<s f="mysql_close" u="bool mysql_close([int link_identifier])">Close a MySQL connection</s>
+<s f="mysql_connect" u="resource mysql_connect([string hostname[:port][:/path/to/socket] [, string username [, string password [, bool new [, int flags]]]]])">Opens a connection to a MySQL Server</s>
+<s f="mysql_create_db" u="bool mysql_create_db(string database_name [, int link_identifier])">Create a MySQL database</s>
+<s f="mysql_data_seek" u="bool mysql_data_seek(resource result, int row_number)">Move internal result pointer</s>
+<s f="mysql_db_query" u="resource mysql_db_query(string database_name, string query [, int link_identifier])">Sends an SQL query to MySQL</s>
+<s f="mysql_drop_db" u="bool mysql_drop_db(string database_name [, int link_identifier])">Drops (delete) a MySQL database</s>
+<s f="mysql_errno" u="int mysql_errno([int link_identifier])">Returns the number of the error message from previous MySQL operation</s>
+<s f="mysql_error" u="string mysql_error([int link_identifier])">Returns the text of the error message from previous MySQL operation</s>
+<s f="mysql_escape_string" u="string mysql_escape_string(string to_be_escaped)">Escape string for mysql query</s>
+<s f="mysql_fetch_array" u="array mysql_fetch_array(resource result [, int result_type])">Fetch a result row as an array (associative, numeric or both)</s>
+<s f="mysql_fetch_assoc" u="array mysql_fetch_assoc(resource result)">Fetch a result row as an associative array</s>
+<s f="mysql_fetch_field" u="object mysql_fetch_field(resource result [, int field_offset])">Gets column information from a result and return as an object</s>
+<s f="mysql_fetch_lengths" u="array mysql_fetch_lengths(resource result)">Gets max data size of each column in a result</s>
+<s f="mysql_fetch_object" u="object mysql_fetch_object(resource result [, string class_name [, NULL|array ctor_params]])">Fetch a result row as an object</s>
+<s f="mysql_fetch_row" u="array mysql_fetch_row(resource result)">Gets a result row as an enumerated array</s>
+<s f="mysql_field_flags" u="string mysql_field_flags(resource result, int field_offset)">Gets the flags associated with the specified field in a result</s>
+<s f="mysql_field_len" u="int mysql_field_len(resource result, int field_offset)">Returns the length of the specified field</s>
+<s f="mysql_field_name" u="string mysql_field_name(resource result, int field_index)">Gets the name of the specified field in a result</s>
+<s f="mysql_field_seek" u="bool mysql_field_seek(resource result, int field_offset)">Sets result pointer to a specific field offset</s>
+<s f="mysql_field_table" u="string mysql_field_table(resource result, int field_offset)">Gets name of the table the specified field is in</s>
+<s f="mysql_field_type" u="string mysql_field_type(resource result, int field_offset)">Gets the type of the specified field in a result</s>
+<s f="mysql_free_result" u="bool mysql_free_result(resource result)">Free result memory</s>
+<s f="mysql_get_client_info" u="string mysql_get_client_info(void)">Returns a string that represents the client library version</s>
+<s f="mysql_get_host_info" u="string mysql_get_host_info([int link_identifier])">Returns a string describing the type of connection in use, including the server host name</s>
+<s f="mysql_get_proto_info" u="int mysql_get_proto_info([int link_identifier])">Returns the protocol version used by current connection</s>
+<s f="mysql_get_server_info" u="string mysql_get_server_info([int link_identifier])">Returns a string that represents the server version number</s>
+<s f="mysql_info" u="string mysql_info([int link_identifier])">Returns a string containing information about the most recent query</s>
+<s f="mysql_insert_id" u="int mysql_insert_id([int link_identifier])">Gets the ID generated from the previous INSERT operation</s>
+<s f="mysql_list_dbs" u="resource mysql_list_dbs([int link_identifier])">List databases available on a MySQL server</s>
+<s f="mysql_list_fields" u="resource mysql_list_fields(string database_name, string table_name [, int link_identifier])">List MySQL result fields</s>
+<s f="mysql_list_processes" u="resource mysql_list_processes([int link_identifier])">Returns a result set describing the current server threads</s>
+<s f="mysql_list_tables" u="resource mysql_list_tables(string database_name [, int link_identifier])">List tables in a MySQL database</s>
+<s f="mysql_num_fields" u="int mysql_num_fields(resource result)">Gets number of fields in a result</s>
+<s f="mysql_num_rows" u="int mysql_num_rows(resource result)">Gets number of rows in a result</s>
+<s f="mysql_pconnect" u="resource mysql_pconnect([string hostname[:port][:/path/to/socket] [, string username [, string password [, int flags]]]])">Opens a persistent connection to a MySQL Server</s>
+<s f="mysql_ping" u="bool mysql_ping([int link_identifier])">Ping a server connection. If no connection then reconnect.</s>
+<s f="mysql_query" u="resource mysql_query(string query [, int link_identifier])">Sends an SQL query to MySQL</s>
+<s f="mysql_real_escape_string" u="string mysql_real_escape_string(string to_be_escaped [, int link_identifier])">Escape special characters in a string for use in a SQL statement, taking into account the current charset of the connection</s>
+<s f="mysql_result" u="mixed mysql_result(resource result, int row [, mixed field])">Gets result data</s>
+<s f="mysql_select_db" u="bool mysql_select_db(string database_name [, int link_identifier])">Selects a MySQL database</s>
+<s f="mysql_stat" u="string mysql_stat([int link_identifier])">Returns a string containing status information</s>
+<s f="mysql_thread_id" u="int mysql_thread_id([int link_identifier])">Returns the thread id of current connection</s>
+<s f="mysql_unbuffered_query" u="resource mysql_unbuffered_query(string query [, int link_identifier])">Sends an SQL query to MySQL, without fetching and buffering the result rows</s>
+<s f="mysqli_affected_rows" u="mixed mysqli_affected_rows(object link)">Get number of affected rows in previous MySQL operation</s>
+<s f="mysqli_autocommit" u="bool mysqli_autocommit(object link, bool mode)">Turn auto commit on or of</s>
+<s f="mysqli_change_user" u="bool mysqli_change_user(object link, string user, string password, string database)">Change logged-in user of the active connection</s>
+<s f="mysqli_character_set_name" u="string mysqli_character_set_name(object link)">Returns the name of the character set used for this connection</s>
+<s f="mysqli_close" u="bool mysqli_close(object link)">Close connection</s>
+<s f="mysqli_commit" u="bool mysqli_commit(object link)">Commit outstanding actions and close transaction</s>
+<s f="mysqli_data_seek" u="bool mysqli_data_seek(object result, int offset)">Move internal result pointer</s>
+<s f="mysqli_debug" u="void mysqli_debug(string debug)"/>
+<s f="mysqli_dump_debug_info" u="bool mysqli_dump_debug_info(object link)"/>
+<s f="mysqli_errno" u="int mysqli_errno(object link)">Returns the numerical value of the error message from previous MySQL operation</s>
+<s f="mysqli_error" u="string mysqli_error(object link)">Returns the text of the error message from previous MySQL operation</s>
+<s f="mysqli_field_count" u="int mysqli_field_count(object link)">Fetch the number of fields returned by the last query for the given link</s>
+<s f="mysqli_field_seek" u="int mysqli_field_seek(object result, int fieldnr)">Set result pointer to a specified field offset</s>
+<s f="mysqli_field_tell" u="int mysqli_field_tell(object result)">Get current field offset of result pointer</s>
+<s f="mysqli_free_result" u="void mysqli_free_result(object result)">Free query result memory for the given result handle</s>
+<s f="mysqli_get_client_info" u="string mysqli_get_client_info(void)">Get MySQL client info</s>
+<s f="mysqli_get_client_version" u="int mysqli_get_client_version(void)">Get MySQL client info</s>
+<s f="mysqli_get_proto_info" u="int mysqli_get_proto_info(object link)">Get MySQL protocol information</s>
+<s f="mysqli_get_server_info" u="string mysqli_get_server_info(object link)">Get MySQL server info</s>
+<s f="mysqli_get_server_version" u="int mysqli_get_server_version(object link)">Return the MySQL version for the server referenced by the given link</s>
+<s f="mysqli_info" u="string mysqli_info(object link)">Get information about the most recent query</s>
+<s f="mysqli_init" u="resource mysqli_init(void)">Initialize mysqli and return a resource for use with mysql_real_connect</s>
+<s f="mysqli_insert_id" u="mixed mysqli_insert_id(object link)">Get the ID generated from the previous INSERT operation</s>
+<s f="mysqli_kill" u="bool mysqli_kill(object link, int processid)">Kill a mysql process on the server</s>
+<s f="mysqli_more_results" u="bool mysqli_more_results(object link)">check if there any more query results from a multi query</s>
+<s f="mysqli_next_result" u="bool mysqli_next_result(object link)">read next result from multi_query</s>
+<s f="mysqli_num_fields" u="int mysqli_num_fields(object result)">Get number of fields in result</s>
+<s f="mysqli_num_rows" u="mixed mysqli_num_rows(object result)">Get number of rows in result</s>
+<s f="mysqli_options" u="bool mysqli_options(object link, int flags, mixed values)">Set options</s>
+<s f="mysqli_ping" u="bool mysqli_ping(object link)">Ping a server connection or reconnect if there is no connection</s>
+<s f="mysqli_prepare" u="mixed mysqli_prepare(object link, string query)">Prepare a SQL statement for execution</s>
+<s f="mysqli_real_connect" u="bool mysqli_real_connect(object link [,string hostname [,string username [,string passwd [,string dbname [,int port [,string socket [,int flags]]]]]]])">Open a connection to a mysql server</s>
+<s f="mysqli_real_escape_string" u="string mysqli_real_escape_string(object link, string escapestr)">Escapes special characters in a string for use in a SQL statement, taking into account the current charset of the connection</s>
+<s f="mysqli_real_query" u="bool mysqli_real_query(object link, string query)">Binary-safe version of mysql_query()</s>
+<s f="mysqli_rollback" u="bool mysqli_rollback(object link)">Undo actions from current transaction</s>
+<s f="mysqli_select_db" u="string mysqli_select_db(object link, string dbname)">Select a MySQL database</s>
+<s f="mysqli_send_long_data" u="bool mysqli_send_long_data(object stmt, int param_nr, string data)"/>
+<s f="mysqli_server_end" u="void mysqli_server_end(void)"/>
+<s f="mysqli_server_init" u="bool mysqli_server_init(void)">initialize embedded server</s>
+<s f="mysqli_sqlstate" u="string mysqli_sqlstate(object link)">Returns the SQLSTATE error from previous MySQL operation</s>
+<s f="mysqli_ssl_set" u="bool mysqli_ssl_set(object link ,string key ,string cert ,string ca ,string capath ,string cipher])"/>
+<s f="mysqli_stat" u="mixed mysqli_stat(object link)">Get current system status</s>
+<s f="mysqli_stmt_affected_rows" u="mixed mysqli_stmt_affected_rows(object stmt)">Return the number of rows affected in the last query for the given link</s>
+<s f="mysqli_stmt_bind_param" u="bool mysqli_stmt_bind_param(object stmt, string types, mixed variable [,mixed,....])">Bind variables to a prepared statement as parameters</s>
+<s f="mysqli_stmt_bind_result" u="bool mysqli_stmt_bind_result(object stmt, mixed var, [,mixed, ...])">Bind variables to a prepared statement for result storage</s>
+<s f="mysqli_stmt_close" u="bool mysqli_stmt_close(object stmt)">Close statement</s>
+<s f="mysqli_stmt_data_seek" u="void mysqli_stmt_data_seek(object stmt, int offset)">Move internal result pointer</s>
+<s f="mysqli_stmt_errno" u="int mysqli_stmt_errno(object stmt)"/>
+<s f="mysqli_stmt_error" u="string mysqli_stmt_error(object stmt)"/>
+<s f="mysqli_stmt_execute" u="bool mysqli_stmt_execute(object stmt)">Execute a prepared statement</s>
+<s f="mysqli_stmt_fetch" u="mixed mysqli_stmt_fetch(object stmt)">Fetch results from a prepared statement into the bound variables</s>
+<s f="mysqli_stmt_free_result" u="void mysqli_stmt_free_result(object stmt)">Free stored result memory for the given statement handle</s>
+<s f="mysqli_stmt_init" u="object mysqli_stmt_init(object link)">Initialize statement object</s>
+<s f="mysqli_stmt_num_rows" u="mixed mysqli_stmt_num_rows(object stmt)">Return the number of rows in statements result set</s>
+<s f="mysqli_stmt_prepare" u="bool mysqli_stmt_prepare(object link, string query)">prepare server side statement with query</s>
+<s f="mysqli_stmt_reset" u="void mysqli_stmt_reset(object stmt)">reset a prepared statement</s>
+<s f="mysqli_stmt_result_metadata" u="mixed mysqli_stmt_result_metadata(object stmt)">return result set from statement</s>
+<s f="mysqli_stmt_sqlstate" u="string mysqli_stmt_sqlstate(object stmt)"/>
+<s f="mysqli_stmt_store_result" u="bool mysqli_stmt_store_result(stmt)"/>
+<s f="mysqli_store_result" u="object mysqli_store_result(object link)">Buffer result set on client</s>
+<s f="mysqli_thread_id" u="int mysqli_thread_id(object link)">Return the current thread ID</s>
+<s f="mysqli_thread_safe" u="bool mysqli_thread_safe(void)">Return whether thread safety is given or not</s>
+<s f="mysqli_use_result" u="mixed mysqli_use_result(object link)">Directly retrieve query results - do not buffer results on client side</s>
+<s f="mysqli_connect" u="object mysqli_connect([string hostname [,string username [,string passwd [,string dbname [,int port [,string socket]]]]]])">Open a connection to a mysql server</s>
+<s f="mysqli_connect_errno" u="int mysqli_connect_errno(void)">Returns the numerical value of the error message from last connect command</s>
+<s f="mysqli_connect_error" u="string mysqli_connect_error(void)">Returns the text of the error message from previous MySQL operation</s>
+<s f="mysqli_embedded_connect" u="object mysqli_embedded_connect(void)">Open a connection to a embedded mysql server</s>
+<s f="mysqli_multi_query" u="bool mysqli_multi_query(object link, string query)">Binary-safe version of mysql_query()</s>
+<s f="mysqli_query" u="mixed mysqli_query(object link, string query [,int resultmode])"/>
+<s f="mysqli_disable_reads_from_master" u="void mysqli_disable_reads_from_master(object link)"/>
+<s f="mysqli_disable_rpl_parse" u="void mysqli_disable_rpl_parse(object link)"/>
+<s f="mysqli_enable_reads_from_master" u="void mysqli_enable_reads_from_master(object link)"/>
+<s f="mysqli_enable_rpl_parse" u="void mysqli_enable_rpl_parse(object link)"/>
+<s f="mysqli_master_query" u="bool mysqli_master_query(object link, string query)">Enforce execution of a query on the master in a master/slave setup</s>
+<s f="mysqli_rpl_parse_enabled" u="int mysqli_rpl_parse_enabled(object link)"/>
+<s f="mysqli_rpl_probe" u="bool mysqli_rpl_probe(object link)"/>
+<s f="mysqli_rpl_query_type" u="int mysqli_rpl_query_type(string query)"/>
+<s f="mysqli_send_query" u="bool mysqli_send_query(object link, string query)"/>
+<s f="mysqli_slave_query" u="bool mysqli_slave_query(object link, string query)">Enforce execution of a query on a slave in a master/slave setup</s>
+<s f="ncurses_addch" u="int ncurses_addch(int ch)">Adds character at current position and advance cursor</s>
+<s f="ncurses_addchnstr" u="int ncurses_addchnstr(string s, int n)">Adds attributed string with specified length at current position</s>
+<s f="ncurses_addchstr" u="int ncurses_addchstr(string s)">Adds attributed string at current position</s>
+<s f="ncurses_addnstr" u="int ncurses_addnstr(string s, int n)">Adds string with specified length at current position</s>
+<s f="ncurses_addstr" u="int ncurses_addstr(string text)">Outputs text at current position</s>
+<s f="ncurses_assume_default_colors" u="int ncurses_assume_default_colors(int fg, int bg)">Defines default colors for color 0</s>
+<s f="ncurses_attroff" u="int ncurses_attroff(int attributes)">Turns off the given attributes</s>
+<s f="ncurses_attron" u="int ncurses_attron(int attributes)">Turns on the given attributes</s>
+<s f="ncurses_attrset" u="int ncurses_attrset(int attributes)">Sets given attributes</s>
+<s f="ncurses_baudrate" u="int ncurses_baudrate(void)">Returns baudrate of terminal</s>
+<s f="ncurses_beep" u="int ncurses_beep(void)">Let the terminal beep</s>
+<s f="ncurses_bkgd" u="int ncurses_bkgd(int attrchar)">Sets background property for terminal screen</s>
+<s f="ncurses_bkgdset" u="void ncurses_bkgdset(int attrchar)">Controls screen background</s>
+<s f="ncurses_border" u="int ncurses_border(int left, int right, int top, int bottom, int tl_corner, int tr_corner, int bl_corner, int br_corner)">Draws a border around the screen using attributed characters</s>
+<s f="ncurses_bottom_panel" u="int ncurses_bottom_panel(resource panel)">Moves a visible panel to the bottom of the stack</s>
+<s f="ncurses_can_change_color" u="bool ncurses_can_change_color(void)">Checks if we can change terminals colors</s>
+<s f="ncurses_cbreak" u="bool ncurses_cbreak(void)">Switches of input buffering</s>
+<s f="ncurses_clear" u="bool ncurses_clear(void)">Clears screen</s>
+<s f="ncurses_clrtobot" u="bool ncurses_clrtobot(void)">Clears screen from current position to bottom</s>
+<s f="ncurses_clrtoeol" u="bool ncurses_clrtoeol(void)">Clears screen from current position to end of line</s>
+<s f="ncurses_color_content" u="int ncurses_color_content(int color, int &amp;r, int &amp;g, int &amp;b)">Gets the RGB value for color</s>
+<s f="ncurses_color_set" u="int ncurses_color_set(int pair)">Sets fore- and background color</s>
+<s f="ncurses_curs_set" u="int ncurses_curs_set(int visibility)">Sets cursor state</s>
+<s f="ncurses_def_prog_mode" u="int ncurses_def_prog_mode(void)">Saves terminals (program) mode</s>
+<s f="ncurses_def_shell_mode" u="int ncurses_def_shell_mode(void)">Saves terminal (shell) mode</s>
+<s f="ncurses_define_key" u="int ncurses_define_key(string definition, int keycode)">Defines a keycode</s>
+<s f="ncurses_del_panel" u="bool ncurses_del_panel(resource panel)">Remove panel from the stack and delete it (but not the associated window)</s>
+<s f="ncurses_delay_output" u="int ncurses_delay_output(int milliseconds)">Delays output on terminal using padding characters</s>
+<s f="ncurses_delch" u="int ncurses_delch(void)">Deletes character at current position, move rest of line left</s>
+<s f="ncurses_deleteln" u="int ncurses_deleteln(void)">Deletes line at current position, move rest of screen up</s>
+<s f="ncurses_delwin" u="int ncurses_delwin(resource window)">Deletes a ncurses window</s>
+<s f="ncurses_doupdate" u="int ncurses_doupdate(void)">Writes all prepared refreshes to terminal</s>
+<s f="ncurses_echo" u="int ncurses_echo(void)">Activates keyboard input echo</s>
+<s f="ncurses_echochar" u="int ncurses_echochar(int character)">Single character output including refresh</s>
+<s f="ncurses_end" u="int ncurses_end(void)">Stops using ncurses, clean up the screen</s>
+<s f="ncurses_erase" u="int ncurses_erase(void)">Erases terminal screen</s>
+<s f="ncurses_erasechar" u="string ncurses_erasechar(void)">Returns current erase character</s>
+<s f="ncurses_filter" u="void ncurses_filter(void)"/>
+<s f="ncurses_flash" u="int ncurses_flash(void)">Flashes terminal screen (visual bell)</s>
+<s f="ncurses_flushinp" u="int ncurses_flushinp(void)">Flushes keyboard input buffer</s>
+<s f="ncurses_getch" u="int ncurses_getch(void)">Reads a character from keyboard</s>
+<s f="ncurses_getmaxyx" u="void ncurses_getmaxyx(resource window, int &amp;y, int &amp;x)">Returns the size of a window</s>
+<s f="ncurses_getmouse" u="bool ncurses_getmouse(array &amp;mevent)">Reads mouse event from queue. The content of mevent is cleared before new data is added.</s>
+<s f="ncurses_getyx" u="void ncurses_getyx(resource window, int &amp;y, int &amp;x)">Returns the current cursor position for a window</s>
+<s f="ncurses_halfdelay" u="int ncurses_halfdelay(int tenth)">Puts terminal into halfdelay mode</s>
+<s f="ncurses_has_colors" u="bool ncurses_has_colors(void)">Checks if terminal has colors</s>
+<s f="ncurses_has_ic" u="int ncurses_has_ic(void)">Checks for insert- and delete-capabilities</s>
+<s f="ncurses_has_il" u="int ncurses_has_il(void)">Checks for line insert- and delete-capabilities</s>
+<s f="ncurses_has_key" u="int ncurses_has_key(int keycode)">Checks for presence of a function key on terminal keyboard</s>
+<s f="ncurses_hide_panel" u="int ncurses_hide_panel(resource panel)">Remove panel from the stack, making it invisible</s>
+<s f="ncurses_hline" u="int ncurses_hline(int charattr, int n)">Draws a horizontal line at current position using an attributed character and max. n characters long</s>
+<s f="ncurses_inch" u="string ncurses_inch(void)">Gets character and attribute at current position</s>
+<s f="ncurses_init" u="int ncurses_init(void)">Initializes ncurses</s>
+<s f="ncurses_init_color" u="int ncurses_init_color(int color, int r, int g, int b)">Sets new RGB value for color</s>
+<s f="ncurses_init_pair" u="int ncurses_init_pair(int pair, int fg, int bg)">Allocates a color pair</s>
+<s f="ncurses_insch" u="int ncurses_insch(int character)">Inserts character moving rest of line including character at current position</s>
+<s f="ncurses_insdelln" u="int ncurses_insdelln(int count)">Inserts lines before current line scrolling down (negative numbers delete and scroll up)</s>
+<s f="ncurses_insertln" u="int ncurses_insertln(void)">Inserts a line, move rest of screen down</s>
+<s f="ncurses_insstr" u="int ncurses_insstr(string text)">Inserts string at current position, moving rest of line right</s>
+<s f="ncurses_instr" u="int ncurses_instr(string &amp;buffer)">Reads string from terminal screen</s>
+<s f="ncurses_isendwin" u="int ncurses_isendwin(void)">Ncurses is in endwin mode, normal screen output may be performed</s>
+<s f="ncurses_keyok" u="int ncurses_keyok(int keycode, int enable)">Enables or disable a keycode</s>
+<s f="ncurses_keypad" u="int ncurses_keypad(resource window, bool bf)">Turns keypad on or off</s>
+<s f="ncurses_killchar" u="string ncurses_killchar(void)">Returns current line kill character</s>
+<s f="ncurses_longname" u="string ncurses_longname(void)">Returns terminal description</s>
+<s f="ncurses_meta" u="int ncurses_meta(resource window, bool 8bit)">Enables/Disable 8-bit meta key information</s>
+<s f="ncurses_mouse_trafo" u="bool ncurses_mouse_trafo(int &amp;y, int &amp;x, bool toscreen)">Transforms coordinates</s>
+<s f="ncurses_mouseinterval" u="int ncurses_mouseinterval(int milliseconds)">Sets timeout for mouse button clicks</s>
+<s f="ncurses_mousemask" u="int ncurses_mousemask(int newmask, int &amp;oldmask)">Returns and sets mouse options</s>
+<s f="ncurses_move" u="int ncurses_move(int y, int x)">Moves output position</s>
+<s f="ncurses_move_panel" u="int ncurses_move_panel(resource panel, int startx, int starty)">Moves a panel so that it's upper-left corner is at [startx, starty]</s>
+<s f="ncurses_mvaddch" u="int ncurses_mvaddch(int y, int x, int c)">Moves current position and add character</s>
+<s f="ncurses_mvaddchnstr" u="int ncurses_mvaddchnstr(int y, int x, string s, int n)">Moves position and add attrributed string with specified length</s>
+<s f="ncurses_mvaddchstr" u="int ncurses_mvaddchstr(int y, int x, string s)">Moves position and add attributed string</s>
+<s f="ncurses_mvaddnstr" u="int ncurses_mvaddnstr(int y, int x, string s, int n)">Moves position and add string with specified length</s>
+<s f="ncurses_mvaddstr" u="int ncurses_mvaddstr(int y, int x, string s)">Moves position and add string</s>
+<s f="ncurses_mvcur" u="int ncurses_mvcur(int old_y,int old_x, int new_y, int new_x)">Moves cursor immediately</s>
+<s f="ncurses_mvdelch" u="int ncurses_mvdelch(int y, int x)">Moves position and delete character, shift rest of line left</s>
+<s f="ncurses_mvgetch" u="int ncurses_mvgetch(int y, int x)">Moves position and get character at new position</s>
+<s f="ncurses_mvhline" u="int ncurses_mvhline(int y, int x, int attrchar, int n)">Sets new position and draw a horizontal line using an attributed character and max. n characters long</s>
+<s f="ncurses_mvinch" u="int ncurses_mvinch(int y, int x)">Moves position and get attributed character at new position</s>
+<s f="ncurses_mvvline" u="int ncurses_mvvline(int y, int x, int attrchar, int n)">Sets new position and draw a vertical line using an attributed character and max. n characters long</s>
+<s f="ncurses_mvwaddstr" u="int ncurses_mvwaddstr(resource window, int y, int x, string text)">Adds string at new position in window</s>
+<s f="ncurses_napms" u="int ncurses_napms(int milliseconds)">Sleep</s>
+<s f="ncurses_new_panel" u="resource ncurses_new_panel(resource window)">Create a new panel and associate it with window</s>
+<s f="ncurses_newpad" u="resource ncurses_newpad(int rows, int cols)">Creates a new pad (window)</s>
+<s f="ncurses_newwin" u="int ncurses_newwin(int rows, int cols, int y, int x)">Creates a new window</s>
+<s f="ncurses_nl" u="int ncurses_nl(void)">Translates newline and carriage return / line feed</s>
+<s f="ncurses_nocbreak" u="int ncurses_nocbreak(void)">Switches terminal to cooked mode</s>
+<s f="ncurses_noecho" u="int ncurses_noecho(void)">Switches off keyboard input echo</s>
+<s f="ncurses_nonl" u="int ncurses_nonl(void)">Do not ranslate newline and carriage return / line feed</s>
+<s f="ncurses_noqiflush" u="int ncurses_noqiflush(void)">Do not flush on signal characters</s>
+<s f="ncurses_noraw" u="bool ncurses_noraw(void)">Switches terminal out of raw mode</s>
+<s f="ncurses_pair_content" u="int ncurses_pair_content(int pair, int &amp;f, int &amp;b)">Gets the RGB value for color</s>
+<s f="ncurses_panel_above" u="resource ncurses_panel_above(resource panel)">Returns the panel above panel. If panel is null, returns the bottom panel in the stack</s>
+<s f="ncurses_panel_below" u="resource ncurses_panel_below(resource panel)">Returns the panel below panel. If panel is null, returns the top panel in the stack</s>
+<s f="ncurses_panel_window" u="resource ncurses_panel_window(resource panel)">Returns the window associated with panel</s>
+<s f="ncurses_pnoutrefresh" u="int ncurses_pnoutrefresh(resource pad, int pminrow, int pmincol, int sminrow, int smincol, int smaxrow, int smaxcol)">Copys a region from a pad into the virtual screen</s>
+<s f="ncurses_prefresh" u="int ncurses_prefresh(resource pad, int pminrow, int pmincol, int sminrow, int smincol, int smaxrow, int smaxcol)">Copys a region from a pad into the virtual screen</s>
+<s f="ncurses_putp" u="int ncurses_putp(string text)">???</s>
+<s f="ncurses_qiflush" u="void ncurses_qiflush(void)">Flushes on signal characters</s>
+<s f="ncurses_raw" u="int ncurses_raw(void)">Switches terminal into raw mode</s>
+<s f="ncurses_refresh" u="int ncurses_refresh(int ch)">Refresh screen</s>
+<s f="ncurses_replace_panel" u="int ncurses_replace_panel(resource panel, resource window)">Replaces the window associated with panel</s>
+<s f="ncurses_reset_prog_mode" u="int ncurses_reset_prog_mode(void)">Resets the prog mode saved by def_prog_mode</s>
+<s f="ncurses_reset_shell_mode" u="int ncurses_reset_shell_mode(void)">Resets the shell mode saved by def_shell_mode</s>
+<s f="ncurses_resetty" u="int ncurses_resetty(void)">Restores saved terminal state</s>
+<s f="ncurses_savetty" u="int ncurses_savetty(void)">Saves terminal state</s>
+<s f="ncurses_scr_dump" u="int ncurses_scr_dump(string filename)">Dumps screen content to file</s>
+<s f="ncurses_scr_init" u="int ncurses_scr_init(string filename)">Initializes screen from file dump</s>
+<s f="ncurses_scr_restore" u="int ncurses_scr_restore(string filename)">Restores screen from file dump</s>
+<s f="ncurses_scr_set" u="int ncurses_scr_set(string filename)">Inherits screen from file dump</s>
+<s f="ncurses_scrl" u="int ncurses_scrl(int count)">Scrolls window content up or down without changing current position</s>
+<s f="ncurses_show_panel" u="int ncurses_show_panel(resource panel)">Places an invisible panel on top of the stack, making it visible</s>
+<s f="ncurses_slk_attr" u="int ncurses_slk_attr(void)">Returns current soft label keys attribute</s>
+<s f="ncurses_slk_attroff" u="int ncurses_slk_attroff(int intarg)">???</s>
+<s f="ncurses_slk_attron" u="int ncurses_slk_attron(int intarg)">???</s>
+<s f="ncurses_slk_attrset" u="int ncurses_slk_attrset(int intarg)">???</s>
+<s f="ncurses_slk_clear" u="int ncurses_slk_clear(void)">Clears soft label keys from screen</s>
+<s f="ncurses_slk_color" u="int ncurses_slk_color(int intarg)">Sets color for soft label keys</s>
+<s f="ncurses_slk_init" u="int ncurses_slk_init(int intarg)">Inits soft label keys</s>
+<s f="ncurses_slk_noutrefresh" u="int ncurses_slk_noutrefresh(void)">Copies soft label keys to virtual screen</s>
+<s f="ncurses_slk_refresh" u="int ncurses_slk_refresh(void)">Copies soft label keys to screen</s>
+<s f="ncurses_slk_restore" u="int ncurses_slk_restore(void)">Restores soft label keys</s>
+<s f="ncurses_slk_set" u="bool ncurses_slk_set(int labelnr, string label, int format)">Sets function key labels</s>
+<s f="ncurses_slk_touch" u="int ncurses_slk_touch(void)">Forces output when ncurses_slk_noutrefresh is performed</s>
+<s f="ncurses_standend" u="int ncurses_standend(void)">Stops using 'standout' attribute</s>
+<s f="ncurses_standout" u="int ncurses_standout(void)">Starts using 'standout' attribute</s>
+<s f="ncurses_start_color" u="int ncurses_start_color(void)">Starts using colors</s>
+<s f="ncurses_termattrs" u="int ncurses_termattrs(void)">Returns a logical OR of all attribute flags supported by terminal</s>
+<s f="ncurses_termname" u="string ncurses_termname(void)">Returns terminal name</s>
+<s f="ncurses_timeout" u="void ncurses_timeout(int millisec)">Sets timeout for special key sequences</s>
+<s f="ncurses_top_panel" u="int ncurses_top_panel(resource panel)">Moves a visible panel to the top of the stack</s>
+<s f="ncurses_typeahead" u="int ncurses_typeahead(int fd)">Specifys different filedescriptor for typeahead checking</s>
+<s f="ncurses_ungetch" u="int ncurses_ungetch(int keycode)">Puts a character back into the input stream</s>
+<s f="ncurses_ungetmouse" u="int ncurses_ungetmouse(array mevent)">Pushes mouse event to queue</s>
+<s f="ncurses_update_panels" u="void ncurses_update_panels(void)">Refreshes the virtual screen to reflect the relations between panels in the stack.</s>
+<s f="ncurses_use_default_colors" u="int ncurses_use_default_colors(void)">Assigns terminal default colors to color id -1</s>
+<s f="ncurses_use_env" u="void ncurses_use_env(int flag)">Controls use of environment information about terminal size</s>
+<s f="ncurses_use_extended_names" u="int ncurses_use_extended_names(bool flag)">Controls use of extended names in terminfo descriptions</s>
+<s f="ncurses_vidattr" u="int ncurses_vidattr(int intarg)">???</s>
+<s f="ncurses_vline" u="int ncurses_vline(int charattr, int n)">Draws a vertical line at current position using an attributed character and max. n characters long</s>
+<s f="ncurses_waddch" u="int ncurses_waddch(resource window, int ch)">Adds character at current position in a window and advance cursor</s>
+<s f="ncurses_waddstr" u="int ncurses_waddstr(resource window, string str [, int n])">Outputs text at current postion in window</s>
+<s f="ncurses_wattroff" u="int ncurses_wattroff(resource window, int attrs)">Turns off attributes for a window</s>
+<s f="ncurses_wattron" u="int ncurses_wattron(resource window, int attrs)">Turns on attributes for a window</s>
+<s f="ncurses_wattrset" u="int ncurses_wattrset(resource window, int attrs)">Set the attributes for a window</s>
+<s f="ncurses_wborder" u="int ncurses_wborder(resource window, int left, int right, int top, int bottom, int tl_corner, int tr_corner, int bl_corner, int br_corner)">Draws a border around the window using attributed characters</s>
+<s f="ncurses_wclear" u="int ncurses_wclear(resource window)">Clears window</s>
+<s f="ncurses_wcolor_set" u="int ncurses_wcolor_set(resource window, int color_pair)">Sets windows color pairings</s>
+<s f="ncurses_werase" u="int ncurses_werase(resource window)">Erase window contents</s>
+<s f="ncurses_wgetch" u="int ncurses_wgetch(resource window)">Reads a character from keyboard (window)</s>
+<s f="ncurses_whline" u="int ncurses_whline(resource window, int charattr, int n)">Draws a horizontal line in a window at current position using an attributed character and max. n characters long</s>
+<s f="ncurses_wmouse_trafo" u="bool ncurses_wmouse_trafo(resource window, int &amp;y, int &amp;x, bool toscreen)">Transforms window/stdscr coordinates</s>
+<s f="ncurses_wmove" u="int ncurses_wmove(resource window, int y, int x)">Moves windows output position</s>
+<s f="ncurses_wnoutrefresh" u="int ncurses_wnoutrefresh(resource window)">Copies window to virtual screen</s>
+<s f="ncurses_wrefresh" u="int ncurses_wrefresh(resource window)">Refreshes window on terminal screen</s>
+<s f="ncurses_wstandend" u="int ncurses_wstandend(resource window)">End standout mode for a window</s>
+<s f="ncurses_wstandout" u="int ncurses_wstandout(resource window)">Enter standout mode for a window</s>
+<s f="ncurses_wvline" u="int ncurses_wvline(resource window, int charattr, int n)">Draws a vertical line in a window at current position using an attributed character and max. n characters long</s>
+<s f="oci_bind_by_name" u="bool oci_bind_by_name(resource stmt, string name, mixed &amp;var, [, int maxlength [, int type]])">Bind a PHP variable to an Oracle placeholder by name</s>
+<s f="oci_cancel" u="bool oci_cancel(resource stmt)">Cancel reading from a cursor</s>
+<s f="oci_close" u="bool oci_close(resource conn)">Disconnect from database</s>
+<s f="oci_collection_append" u="bool oci_collection_append(string value)">Append an object to the collection</s>
+<s f="oci_collection_assign" u="bool oci_collection_assign(object from)">Assign a collection from another existing collection</s>
+<s f="oci_collection_element_assign" u="bool oci_collection_element_assign(int index, string val)">Assign element val to collection at index ndx</s>
+<s f="oci_collection_element_get" u="string oci_collection_element_get(int ndx)">Retrieve the value at collection index ndx</s>
+<s f="oci_collection_max" u="int oci_collection_max()">Return the max value of a collection. For a varray this is the maximum length of the array</s>
+<s f="oci_collection_size" u="int oci_collection_size()">Return the size of a collection</s>
+<s f="oci_collection_trim" u="bool oci_collection_trim(int num)">Trim num elements from the end of a collection</s>
+<s f="oci_commit" u="bool oci_commit(resource conn)">Commit the current context</s>
+<s f="oci_connect" u="resource oci_connect(string user, string pass [, string db])">Connect to an Oracle database and log on. Returns a new session.</s>
+<s f="oci_define_by_name" u="bool oci_define_by_name(resource stmt, string name, mixed &amp;var [, int type])">Define a PHP variable to an Oracle column by name</s>
+<s f="oci_error" u="array oci_error([resource stmt|conn|global])">Return the last error of stmt|conn|global. If no error happened returns false.</s>
+<s f="oci_execute" u="bool oci_execute(resource stmt [, int mode])">Execute a parsed statement</s>
+<s f="oci_fetch" u="bool oci_fetch(resource stmt)">Prepare a new row of data for reading</s>
+<s f="oci_fetch_all" u="int oci_fetch_all(resource stmt, array &amp;output[, int skip[, int maxrows[, int flags]]])">Fetch all rows of result data into an array</s>
+<s f="oci_fetch_array" u="array oci_fetch_array( resource stmt [, int mode ])">Fetch a result row as an array</s>
+<s f="oci_fetch_assoc" u="array oci_fetch_assoc( resource stmt )">Fetch a result row as an associative array</s>
+<s f="oci_fetch_object" u="object oci_fetch_object( resource stmt )">Fetch a result row as an object</s>
+<s f="oci_fetch_row" u="array oci_fetch_row( resource stmt )">Fetch a result row as an enumerated array</s>
+<s f="oci_field_is_null" u="bool oci_field_is_null(resource stmt, int col)">Tell whether a column is NULL</s>
+<s f="oci_field_name" u="string oci_field_name(resource stmt, int col)">Tell the name of a column</s>
+<s f="oci_field_precision" u="int oci_field_precision(resource stmt, int col)">Tell the precision of a column</s>
+<s f="oci_field_scale" u="int oci_field_scale(resource stmt, int col)">Tell the scale of a column</s>
+<s f="oci_field_size" u="int oci_field_size(resource stmt, int col)">Tell the maximum data size of a column</s>
+<s f="oci_field_type" u="mixed oci_field_type(resource stmt, int col)">Tell the data type of a column</s>
+<s f="oci_field_type_raw" u="int oci_field_type_raw(resource stmt, int col)">Tell the raw oracle data type of a column</s>
+<s f="oci_free_collection" u="bool oci_free_collection()">Deletes collection object</s>
+<s f="oci_free_descriptor" u="bool oci_free_descriptor()">Deletes large object description</s>
+<s f="oci_free_statement" u="bool oci_free_statement(resource stmt)">Free all resources associated with a statement</s>
+<s f="oci_internal_debug" u="void oci_internal_debug(int onoff)">Toggle internal debugging output for the OCI extension</s>
+<s f="oci_lob_append" u="bool oci_lob_append( object lob )">Appends data from a LOB to another LOB</s>
+<s f="oci_lob_close" u="bool oci_lob_close()">Closes lob descriptor</s>
+<s f="oci_lob_copy" u="bool oci_lob_copy( object lob_to, object lob_from [, int length ] )">Copies data from a LOB to another LOB</s>
+<s f="oci_lob_eof" u="bool oci_lob_eof()">Checks if EOF is reached</s>
+<s f="oci_lob_erase" u="int oci_lob_erase( [ int offset [, int length ] ] )">Erases a specified portion of the internal LOB, starting at a specified offset</s>
+<s f="oci_lob_export" u="bool oci_lob_export([string filename [, int start [, int length]]])">Writes a large object into a file</s>
+<s f="oci_lob_flush" u="bool oci_lob_flush( [ int flag ] )">Flushes the LOB buffer</s>
+<s f="oci_lob_import" u="bool oci_lob_import( string filename )">Saves a large object to file</s>
+<s f="oci_lob_is_equal" u="bool oci_lob_is_equal( object lob1, object lob2 )">Tests to see if two LOB/FILE locators are equal</s>
+<s f="oci_lob_load" u="string oci_lob_load()">Loads a large object</s>
+<s f="oci_lob_read" u="string oci_lob_read( int length )">Reads particular part of a large object</s>
+<s f="oci_lob_rewind" u="bool oci_lob_rewind()">Rewind pointer of a LOB</s>
+<s f="oci_lob_save" u="bool oci_lob_save( string data [, int offset ])">Saves a large object</s>
+<s f="oci_lob_seek" u="bool oci_lob_seek( int offset [, int whence ])">Moves the pointer of a LOB</s>
+<s f="oci_lob_size" u="int oci_lob_size()">Returns size of a large object</s>
+<s f="oci_lob_tell" u="int oci_lob_tell()">Tells LOB pointer position</s>
+<s f="oci_lob_truncate" u="bool oci_lob_truncate( [ int length ])">Truncates a LOB</s>
+<s f="oci_lob_write" u="int oci_lob_write( string string [, int length ])">Writes data to current position of a LOB</s>
+<s f="oci_lob_write_temporary" u="bool oci_lob_write_temporary(string var [, int lob_type])">Writes temporary blob</s>
+<s f="oci_new_collection" u="object oci_new_collection(resource connection, string tdo [, string schema])">Initialize a new collection</s>
+<s f="oci_new_connect" u="resource oci_new_connect(string user, string pass [, string db])">Connect to an Oracle database and log on. Returns a new session.</s>
+<s f="oci_new_cursor" u="resource oci_new_cursor(resource conn)">Return a new cursor (Statement-Handle) - use this to bind ref-cursors!</s>
+<s f="oci_new_descriptor" u="object oci_new_descriptor(resource connection [, int type])">Initialize a new empty descriptor LOB/FILE (LOB is default)</s>
+<s f="oci_num_fields" u="int oci_num_fields(resource stmt)">Return the number of result columns in a statement</s>
+<s f="oci_num_rows" u="int oci_num_rows(resource stmt)">Return the row count of an OCI statement</s>
+<s f="oci_parse" u="resource oci_parse(resource conn, string query)">Parse a query and return a statement</s>
+<s f="oci_password_change" u="bool oci_password_change(resource conn, string username, string old_password, string new_password)">Changes the password of an account</s>
+<s f="oci_pconnect" u="resource oci_pconnect(string user, string pass [, string db])">Connect to an Oracle database using a persistent connection and log on. Returns a new session.</s>
+<s f="oci_result" u="string oci_result(resource stmt, mixed column)">Return a single column of result data</s>
+<s f="oci_rollback" u="bool oci_rollback(resource conn)">Rollback the current context</s>
+<s f="oci_server_version" u="string oci_server_version(resource conn)">Return a string containing server version information</s>
+<s f="oci_set_prefetch" u="bool oci_set_prefetch(resource stmt, int prefetch_rows)">Sets the number of rows to be prefetched on execute to prefetch_rows for stmt</s>
+<s f="oci_statement_type" u="string oci_statement_type(resource stmt)">Return the query type of an OCI statement</s>
+<s f="ocifetchinto" u="int ocifetchinto(resource stmt, array &amp;output [, int mode])">Fetch a row of result data into an array</s>
+<s f="ocigetbufferinglob" u="bool ocigetbufferinglob()">Returns current state of buffering for a LOB</s>
+<s f="ocisetbufferinglob" u="bool ocisetbufferinglob( boolean flag )">Enables/disables buffering for a LOB</s>
+<s f="birdstep_autocommit" u="bool birdstep_autocommit(int index)"/>
+<s f="birdstep_close" u="bool birdstep_close(int id)"/>
+<s f="birdstep_commit" u="bool birdstep_commit(int index)"/>
+<s f="birdstep_connect" u="int birdstep_connect(string server, string user, string pass)"/>
+<s f="birdstep_exec" u="int birdstep_exec(int index, string exec_str)"/>
+<s f="birdstep_fetch" u="bool birdstep_fetch(int index)"/>
+<s f="birdstep_fieldname" u="string birdstep_fieldname(int index, int col)"/>
+<s f="birdstep_fieldnum" u="int birdstep_fieldnum(int index)"/>
+<s f="birdstep_freeresult" u="bool birdstep_freeresult(int index)"/>
+<s f="birdstep_off_autocommit" u="bool birdstep_off_autocommit(int index)"/>
+<s f="birdstep_result" u="mixed birdstep_result(int index, int col)"/>
+<s f="birdstep_rollback" u="bool birdstep_rollback(int index)"/>
+<s f="odbc_autocommit" u="mixed odbc_autocommit(resource connection_id [, int OnOff])">Toggle autocommit mode or get status</s>
+<s f="odbc_binmode" u="bool odbc_binmode(int result_id, int mode)">Handle binary column data</s>
+<s f="odbc_close" u="void odbc_close(resource connection_id)">Close an ODBC connection</s>
+<s f="odbc_close_all" u="void odbc_close_all(void)">Close all ODBC connections</s>
+<s f="odbc_columnprivileges" u="resource odbc_columnprivileges(resource connection_id, string catalog, string schema, string table, string column)">Returns a result identifier that can be used to fetch a list of columns and associated privileges for the specified table</s>
+<s f="odbc_columns" u="resource odbc_columns(resource connection_id, string qualifier, string owner, string table_name, string column_name)">Returns a result identifier that can be used to fetch a list of column names in specified tables</s>
+<s f="odbc_commit" u="bool odbc_commit(resource connection_id)">Commit an ODBC transaction</s>
+<s f="odbc_connect" u="resource odbc_connect(string DSN, string user, string password [, int cursor_option])">Connect to a datasource</s>
+<s f="odbc_cursor" u="string odbc_cursor(resource result_id)">Get cursor name</s>
+<s f="odbc_data_source" u="array odbc_data_source(resource connection_id, int fetch_type)">Return information about the currently connected data source</s>
+<s f="odbc_error" u="string odbc_error([resource connection_id])">Get the last error code</s>
+<s f="odbc_errormsg" u="string odbc_errormsg([resource connection_id])">Get the last error message</s>
+<s f="odbc_exec" u="resource odbc_exec(resource connection_id, string query [, int flags])">Prepare and execute an SQL statement</s>
+<s f="odbc_execute" u="bool odbc_execute(resource result_id [, array parameters_array])">Execute a prepared statement</s>
+<s f="odbc_fetch_array" u="array odbc_fetch_array(int result [, int rownumber])">Fetch a result row as an associative array</s>
+<s f="odbc_fetch_into" u="int odbc_fetch_into(resource result_id, array result_array, [, int rownumber])">Fetch one result row into an array</s>
+<s f="odbc_fetch_object" u="object odbc_fetch_object(int result [, int rownumber])">Fetch a result row as an object</s>
+<s f="odbc_fetch_row" u="bool odbc_fetch_row(resource result_id [, int row_number])">Fetch a row</s>
+<s f="odbc_field_len" u="int odbc_field_len(resource result_id, int field_number)">Get the length (precision) of a column</s>
+<s f="odbc_field_name" u="string odbc_field_name(resource result_id, int field_number)">Get a column name</s>
+<s f="odbc_field_num" u="int odbc_field_num(resource result_id, string field_name)">Return column number</s>
+<s f="odbc_field_scale" u="int odbc_field_scale(resource result_id, int field_number)">Get the scale of a column</s>
+<s f="odbc_field_type" u="string odbc_field_type(resource result_id, int field_number)">Get the datatype of a column</s>
+<s f="odbc_foreignkeys" u="resource odbc_foreignkeys(resource connection_id, string pk_qualifier, string pk_owner, string pk_table, string fk_qualifier, string fk_owner, string fk_table)">Returns a result identifier to either a list of foreign keys in the specified table or a list of foreign keys in other tables that refer to the primary key in the specified table</s>
+<s f="odbc_free_result" u="bool odbc_free_result(resource result_id)">Free resources associated with a result</s>
+<s f="odbc_gettypeinfo" u="resource odbc_gettypeinfo(resource connection_id [, int data_type])">Returns a result identifier containing information about data types supported by the data source</s>
+<s f="odbc_longreadlen" u="bool odbc_longreadlen(int result_id, int length)">Handle LONG columns</s>
+<s f="odbc_next_result" u="bool odbc_next_result(resource result_id)">Checks if multiple results are avaiable</s>
+<s f="odbc_num_fields" u="int odbc_num_fields(resource result_id)">Get number of columns in a result</s>
+<s f="odbc_num_rows" u="int odbc_num_rows(resource result_id)">Get number of rows in a result</s>
+<s f="odbc_pconnect" u="resource odbc_pconnect(string DSN, string user, string password [, int cursor_option])">Establish a persistent connection to a datasource</s>
+<s f="odbc_prepare" u="resource odbc_prepare(resource connection_id, string query)">Prepares a statement for execution</s>
+<s f="odbc_primarykeys" u="resource odbc_primarykeys(resource connection_id, string qualifier, string owner, string table)">Returns a result identifier listing the column names that comprise the primary key for a table</s>
+<s f="odbc_procedurecolumns" u="resource odbc_procedurecolumns(resource connection_id [, string qualifier, string owner, string proc, string column])">Returns a result identifier containing the list of input and output parameters, as well as the columns that make up the result set for the specified procedures</s>
+<s f="odbc_procedures" u="resource odbc_procedures(resource connection_id [, string qualifier, string owner, string name])">Returns a result identifier containg the list of procedure names in a datasource</s>
+<s f="odbc_result" u="mixed odbc_result(resource result_id, mixed field)">Get result data</s>
+<s f="odbc_result_all" u="int odbc_result_all(resource result_id [, string format])">Print result as HTML table</s>
+<s f="odbc_rollback" u="bool odbc_rollback(resource connection_id)">Rollback a transaction</s>
+<s f="odbc_setoption" u="bool odbc_setoption(resource conn_id|result_id, int which, int option, int value)">Sets connection or statement options</s>
+<s f="odbc_specialcolumns" u="resource odbc_specialcolumns(resource connection_id, int type, string qualifier, string owner, string table, int scope, int nullable)">Returns a result identifier containing either the optimal set of columns that uniquely identifies a row in the table or columns that are automatically updated when any value in the row is updated by a transaction</s>
+<s f="odbc_statistics" u="resource odbc_statistics(resource connection_id, string qualifier, string owner, string name, int unique, int accuracy)">Returns a result identifier that contains statistics about a single table and the indexes associated with the table</s>
+<s f="odbc_tableprivileges" u="resource odbc_tableprivileges(resource connection_id, string qualifier, string owner, string name)">Returns a result identifier containing a list of tables and the privileges associated with each table</s>
+<s f="odbc_tables" u="resource odbc_tables(resource connection_id [, string qualifier, string owner, string name, string table_types])">Call the SQLTables function</s>
+<s f="solid_fetch_prev" u="bool solid_fetch_prev(resource result_id)"/>
+<s f="openssl_csr_export" u="bool openssl_csr_export(resource csr, string &amp;out [, bool notext=true])">Exports a CSR to file or a var</s>
+<s f="openssl_csr_export_to_file" u="bool openssl_csr_export_to_file(resource csr, string outfilename [, bool notext=true])">Exports a CSR to file</s>
+<s f="openssl_csr_new" u="bool openssl_csr_new(array dn, resource &amp;privkey [, array configargs, array extraattribs])">Generates a privkey and CSR</s>
+<s f="openssl_csr_sign" u="resource openssl_csr_sign(mixed csr, mixed x509, mixed priv_key, long days [, array config_args [, long serial]])">Signs a cert with another CERT</s>
+<s f="openssl_error_string" u="mixed openssl_error_string(void)">Returns a description of the last error, and alters the index of the error messages. Returns false when the are no more messages</s>
+<s f="openssl_open" u="bool openssl_open(string data, &amp;string opendata, string ekey, mixed privkey)">Opens data</s>
+<s f="openssl_pkey_export" u="bool openssl_pkey_export(mixed key, &amp;mixed out [, string passphrase [, array config_args]])">Gets an exportable representation of a key into a string or file</s>
+<s f="openssl_pkey_export_to_file" u="bool openssl_pkey_export_to_file(mixed key, string outfilename [, string passphrase, array config_args)">Gets an exportable representation of a key into a file</s>
+<s f="openssl_pkey_free" u="void openssl_pkey_free(int key)">Frees a key</s>
+<s f="openssl_pkey_get_private" u="int openssl_pkey_get_private(string key [, string passphrase])">Gets private keys</s>
+<s f="openssl_pkey_get_public" u="int openssl_pkey_get_public(mixed cert)">Gets public key from X.509 certificate</s>
+<s f="openssl_pkey_new" u="resource openssl_pkey_new([array configargs])">Generates a new private key</s>
+<s f="openssl_private_decrypt" u="bool openssl_private_decrypt(string data, string decrypted, mixed key [, int padding])">Decrypts data with private key</s>
+<s f="openssl_private_encrypt" u="bool openssl_private_encrypt(string data, string crypted, mixed key [, int padding])">Encrypts data with private key</s>
+<s f="openssl_public_decrypt" u="bool openssl_public_decrypt(string data, string crypted, resource key [, int padding])">Decrypts data with public key</s>
+<s f="openssl_public_encrypt" u="bool openssl_public_encrypt(string data, string crypted, mixed key [, int padding])">Encrypts data with public key</s>
+<s f="openssl_seal" u="int openssl_seal(string data, &amp;string sealdata, &amp;array ekeys, array pubkeys)">Seals data</s>
+<s f="openssl_sign" u="bool openssl_sign(string data, &amp;string signature, mixed key)">Signs data</s>
+<s f="openssl_verify" u="int openssl_verify(string data, string signature, mixed key)">Verifys data</s>
+<s f="ora_bind" u="bool ora_bind(resource cursor, string php_variable_name, string sql_parameter_name, int length [, int type])">Bind a PHP variable to an Oracle parameter</s>
+<s f="ora_close" u="bool ora_close(resource cursor)">Close an Oracle cursor</s>
+<s f="ora_columnname" u="string ora_columnname(resource cursor, int column)">Get the name of an Oracle result column</s>
+<s f="ora_columnsize" u="int ora_columnsize(int cursor, int column)">Return the size of the column</s>
+<s f="ora_columntype" u="string ora_columntype(resource cursor, int column)">Get the type of an Oracle result column</s>
+<s f="ora_commit" u="bool ora_commit(resource connection)">Commit an Oracle transaction</s>
+<s f="ora_commitoff" u="bool ora_commitoff(resource connection)">Disable automatic commit</s>
+<s f="ora_commiton" u="bool ora_commiton(resource connection)">Enable automatic commit</s>
+<s f="ora_do" u="resource ora_do(resource connection, resource cursor)">Parse and execute a statement and fetch first result row</s>
+<s f="ora_error" u="string ora_error(resource cursor_or_connection)">Get an Oracle error message</s>
+<s f="ora_errorcode" u="int ora_errorcode(resource cursor_or_connection)">Get an Oracle error code</s>
+<s f="ora_exec" u="bool ora_exec(resource cursor)">Execute a parsed statement</s>
+<s f="ora_fetch" u="bool ora_fetch(resource cursor)">Fetch a row of result data from a cursor</s>
+<s f="ora_fetch_into" u="int ora_fetch_into(resource cursor, array result [, int flags])">Fetch a row into the specified result array</s>
+<s f="ora_getcolumn" u="mixed ora_getcolumn(resource cursor, int column)">Get data from a fetched row</s>
+<s f="ora_logoff" u="bool ora_logoff(resource connection)">Close an Oracle connection</s>
+<s f="ora_logon" u="resource ora_logon(string user, string password)">Open an Oracle connection</s>
+<s f="ora_numcols" u="int ora_numcols(resource cursor)">Returns the numbers of columns in a result</s>
+<s f="ora_numrows" u="int ora_numrows(resource cursor)">Returns the number of rows in a result</s>
+<s f="ora_open" u="resource ora_open(resource connection)">Open an Oracle cursor</s>
+<s f="ora_parse" u="bool ora_parse(resource cursor, string sql_statement [, int defer])">Parse an Oracle SQL statement</s>
+<s f="ora_plogon" u="resource ora_plogon(string user, string password)">Open a persistent Oracle connection</s>
+<s f="ora_rollback" u="bool ora_rollback(resource connection)">Roll back an Oracle transaction</s>
+<s f="ovrimos_autocommit" u="int ovrimos_autocommit(int connection_id, int OnOff)">Toggle autocommit mode     There can be problems with pconnections!</s>
+<s f="ovrimos_close" u="void ovrimos_close(int connection)">Close a connection</s>
+<s f="ovrimos_commit" u="bool ovrimos_commit(int connection_id)">Commit an ovrimos transaction</s>
+<s f="ovrimos_connect" u="int ovrimos_connect(string host, string db, string user, string password)">Connect to an Ovrimos database</s>
+<s f="ovrimos_cursor" u="string ovrimos_cursor(int result_id)">Get cursor name</s>
+<s f="ovrimos_exec" u="int ovrimos_exec(int connection_id, string query)">Prepare and execute an SQL statement</s>
+<s f="ovrimos_execute" u="bool ovrimos_execute(int result_id [, array parameters_array])">Execute a prepared statement</s>
+<s f="ovrimos_fetch_into" u="bool ovrimos_fetch_into(int result_id, array result_array [, string how [, int rownumber]])">Fetch one result row into an array     how: 'Next' (default), 'Prev', 'First', 'Last', 'Absolute'</s>
+<s f="ovrimos_fetch_row" u="bool ovrimos_fetch_row(int result_id [, int how [, int row_number]])">how: 'Next' (default), 'Prev', 'First', 'Last', 'Absolute'     Fetch a row</s>
+<s f="ovrimos_field_len" u="int ovrimos_field_len(int result_id, int field_number)">Get the length of a column</s>
+<s f="ovrimos_field_name" u="string ovrimos_field_name(int result_id, int field_number)">Get a column name</s>
+<s f="ovrimos_field_num" u="int ovrimos_field_num(int result_id, string field_name)">Return column number</s>
+<s f="ovrimos_field_type" u="int ovrimos_field_type(int result_id, int field_number)">Get the datatype of a column</s>
+<s f="ovrimos_free_result" u="bool ovrimos_free_result(int result_id)">Free resources associated with a result</s>
+<s f="ovrimos_longreadlen" u="bool ovrimos_longreadlen(int result_id, int length)">Handle LONG columns</s>
+<s f="ovrimos_num_fields" u="int ovrimos_num_fields(int result_id)">Get number of columns in a result</s>
+<s f="ovrimos_num_rows" u="int ovrimos_num_rows(int result_id)">Get number of rows in a result</s>
+<s f="ovrimos_prepare" u="int ovrimos_prepare(int connection_id, string query)">Prepares a statement for execution</s>
+<s f="ovrimos_result" u="string ovrimos_result(int result_id, mixed field)">Get result data</s>
+<s f="ovrimos_result_all" u="int ovrimos_result_all(int result_id [, string format])">Print result as HTML table</s>
+<s f="ovrimos_rollback" u="bool ovrimos_rollback(int connection_id)">Rollback a transaction</s>
+<s f="ovrimos_setoption" u="int ovrimos_setoption(int conn_id|result_id, int which, int option, int value)">Sets connection or statement options</s>
+<s f="pcntl_alarm" u="int pcntl_alarm(int seconds)">Set an alarm clock for delivery of a signal</s>
+<s f="pcntl_exec" u="bool pcntl_exec(string path [, array args [, array envs]])">Executes specified program in current process space as defined by exec(2)</s>
+<s f="pcntl_fork" u="int pcntl_fork(void)">Forks the currently running process following the same behavior as the UNIX fork() system call</s>
+<s f="pcntl_getpriority" u="int pcntl_getpriority([int pid [, int process_identifier]])">Get the priority of any process</s>
+<s f="pcntl_setpriority" u="bool pcntl_setpriority(int priority [, int pid [, int process_identifier]])">Change the priority of any process</s>
+<s f="pcntl_signal" u="bool pcntl_signal(int signo, callback handle [, bool restart_syscalls])">Assigns a system signal handler to a PHP function</s>
+<s f="pcntl_wait" u="int pcntl_wait(int &amp;status)">Waits on or returns the status of a forked child as defined by the waitpid() system call</s>
+<s f="pcntl_waitpid" u="int pcntl_waitpid(int pid, int &amp;status, int options)">Waits on or returns the status of a forked child as defined by the waitpid() system call</s>
+<s f="pcntl_wexitstatus" u="int pcntl_wexitstatus(int status)">Returns the status code of a child's exit</s>
+<s f="pcntl_wifexited" u="bool pcntl_wifexited(int status)">Returns true if the child status code represents a successful exit</s>
+<s f="pcntl_wifsignaled" u="bool pcntl_wifsignaled(int status)">Returns true if the child status code represents a process that was terminated due to a signal</s>
+<s f="pcntl_wifstopped" u="bool pcntl_wifstopped(int status)">Returns true if the child status code represents a stopped process (WUNTRACED must have been used with waitpid)</s>
+<s f="pcntl_wstopsig" u="int pcntl_wstopsig(int status)">Returns the number of the signal that caused the process to stop who's status code is passed</s>
+<s f="pcntl_wtermsig" u="int pcntl_wtermsig(int status)">Returns the number of the signal that terminated the process who's status code is passed</s>
+<s f="preg_grep" u="array preg_grep(string regex, array input)">Searches array and returns entries which match regex</s>
+<s f="preg_match" u="int preg_match(string pattern, string subject [, array subpatterns [, int flags [, int offset]]])">Perform a Perl-style regular expression match</s>
+<s f="preg_match_all" u="int preg_match_all(string pattern, string subject, array subpatterns [, int flags [, int offset]])">Perform a Perl-style global regular expression match</s>
+<s f="preg_quote" u="string preg_quote(string str, string delim_char)">Quote regular expression characters plus an optional character</s>
+<s f="preg_replace" u="string preg_replace(mixed regex, mixed replace, mixed subject [, int limit])">Perform Perl-style regular expression replacement.</s>
+<s f="preg_replace_callback" u="string preg_replace_callback(mixed regex, mixed callback, mixed subject [, int limit])">Perform Perl-style regular expression replacement using replacement callback.</s>
+<s f="preg_split" u="array preg_split(string pattern, string subject [, int limit [, int flags]])">Split string into an array using a perl-style regular expression as a delimiter</s>
+<s f="pdf_add_annotation" u="bool pdf_add_annotation(resource pdfdoc, float xll, float yll, float xur, float xur, string title, string text)">Sets annotation (depreciated use pdf_add_note instead)</s>
+<s f="pdf_add_bookmark" u="int pdf_add_bookmark(resource pdfdoc, string text [, int parent [, int open]])">Adds bookmark for current page</s>
+<s f="pdf_add_launchlink" u="bool pdf_add_launchlink(resource pdfdoc, float llx, float lly, float urx, float ury, string filename)">Adds link to web resource</s>
+<s f="pdf_add_locallink" u="bool pdf_add_locallink(resource pdfdoc, float llx, float lly, float urx, float ury, int page, string dest)">Adds link to local resource</s>
+<s f="pdf_add_note" u="bool pdf_add_note(resource pdfdoc, float llx, float lly, float urx, float ury, string contents, string title, string icon, int open)">Sets annotation</s>
+<s f="pdf_add_pdflink" u="bool pdf_add_pdflink(resource pdfdoc, float llx, float lly, float urx, float ury, string filename, int page, string dest)">Adds link to PDF document</s>
+<s f="pdf_add_weblink" u="bool pdf_add_weblink(resource pdfdoc, float llx, float lly, float urx, float ury, string url)">Adds link to web resource</s>
+<s f="pdf_arc" u="bool pdf_arc(resource pdfdoc, float x, float y, float radius, float start, float end)">Draws an arc</s>
+<s f="pdf_attach_file" u="bool pdf_attach_file(resource pdf, float lly, float lly, float urx, float ury, string filename, string description, string author, string mimetype, string icon)">Adds a file attachment annotation at the rectangle specified by his lower left and upper right corners</s>
+<s f="pdf_begin_page" u="bool pdf_begin_page(resource pdfdoc, float width, float height)">Starts page</s>
+<s f="pdf_circle" u="bool pdf_circle(resource pdfdoc, float x, float y, float radius)">Draws a circle</s>
+<s f="pdf_clip" u="bool pdf_clip(resource pdfdoc)">Clips to current path</s>
+<s f="pdf_close" u="bool pdf_close(resource pdfdoc)">Closes the pdf document</s>
+<s f="pdf_close_image" u="void pdf_close_image(resource pdf, int pdfimage)">Closes the PDF image</s>
+<s f="pdf_closepath" u="bool pdf_closepath(resource pdfdoc)">Close path</s>
+<s f="pdf_closepath_fill_stroke" u="bool pdf_closepath_fill_stroke(resource pdfdoc)">Close, fill and stroke current path</s>
+<s f="pdf_closepath_stroke" u="bool pdf_closepath_stroke(resource pdfdoc)">Close path and draw line along path</s>
+<s f="pdf_concat" u="bool pdf_concat(resource pdf, float a, float b, float c, float d, float e, float f)">Concatenates a matrix to the current transformation matrix for text and graphics</s>
+<s f="pdf_continue_text" u="bool pdf_continue_text(resource pdfdoc, string text)">Output text in next line</s>
+<s f="pdf_curveto" u="bool pdf_curveto(resource pdfdoc, float x1, float y1, float x2, float y2, float x3, float y3)">Draws a curve</s>
+<s f="pdf_delete" u="bool pdf_delete(resource pdfdoc)">Deletes the PDF object</s>
+<s f="pdf_end_page" u="bool pdf_end_page(resource pdfdoc)">Ends page</s>
+<s f="pdf_endpath" u="bool pdf_endpath(resource pdfdoc)">Ends current path</s>
+<s f="pdf_fill" u="bool pdf_fill(resource pdfdoc)">Fill current path</s>
+<s f="pdf_fill_stroke" u="bool pdf_fill_stroke(resource pdfdoc)">Fill and stroke current path</s>
+<s f="pdf_findfont" u="int pdf_findfont(resource pdfdoc, string fontname, string encoding [, int embed])">Prepares the font fontname for later use with pdf_setfont()</s>
+<s f="pdf_get_buffer" u="string pdf_get_buffer(resource pdfdoc)">Fetches the full buffer containig the generated PDF data</s>
+<s f="pdf_get_font" u="int pdf_get_font(resource pdfdoc)">Gets the current font</s>
+<s f="pdf_get_fontname" u="string pdf_get_fontname(resource pdfdoc)">Gets the current font name</s>
+<s f="pdf_get_fontsize" u="float pdf_get_fontsize(resource pdfdoc)">Gets the current font size</s>
+<s f="pdf_get_image_height" u="int pdf_get_image_height(resource pdf, int pdfimage)">Returns the height of an image</s>
+<s f="pdf_get_image_width" u="int pdf_get_image_width(resource pdf, int pdfimage)">Returns the width of an image</s>
+<s f="pdf_get_majorversion" u="int pdf_get_majorversion()">Returns the major version number of the PDFlib</s>
+<s f="pdf_get_minorversion" u="int pdf_get_minorversion()">Returns the minor version number of the PDFlib</s>
+<s f="pdf_get_parameter" u="string pdf_get_parameter(resource pdfdoc, string key, mixed modifier)">Gets arbitrary parameters</s>
+<s f="pdf_get_value" u="float pdf_get_value(resource pdfdoc, string key, float modifier)">Gets arbitrary value</s>
+<s f="pdf_lineto" u="bool pdf_lineto(resource pdfdoc, float x, float y)">Draws a line</s>
+<s f="pdf_moveto" u="bool pdf_moveto(resource pdfdoc, float x, float y)">Sets current point</s>
+<s f="pdf_new" u="resource pdf_new()">Creates a new PDF object</s>
+<s f="pdf_open" u="resource pdf_open([resource filedesc])">Opens a new pdf document. If filedesc is NULL, document is created in memory. This is the old interface, only for compatibility use pdf_new      pdf_open_file instead</s>
+<s f="pdf_open_ccitt" u="int pdf_open_ccitt(resource pdf, string filename, int width, int height, int bitreverse, int k, int blackls1)">Opens an image file with raw CCITT G3 or G4 compresed bitmap data</s>
+<s f="pdf_open_file" u="bool pdf_open_file(resource pdfdoc [, string filename])">Opens a new PDF document. If filename is NULL, document is created in memory. This is not yet fully supported</s>
+<s f="pdf_open_gif" u="int pdf_open_gif(resource pdf, string giffile)">Opens a GIF file and returns an image for placement in a pdf object</s>
+<s f="pdf_open_image" u="int pdf_open_image(resource pdf, string type, string source, string data, long length, int width, int height, int components, int bpc, string params)">Opens an image of the given type and returns an image for placement in a PDF document</s>
+<s f="pdf_open_image_file" u="int pdf_open_image_file(resource pdf, string type, string file [, string stringparam, int intparam])">Opens an image file of the given type and returns an image for placement in a PDF document</s>
+<s f="pdf_open_jpeg" u="int pdf_open_jpeg(resource pdf, string jpegfile)">Opens a JPEG file and returns an image for placement in a PDF document</s>
+<s f="pdf_open_memory_image" u="int pdf_open_memory_image(resource pdf, resource image)">Takes an GD image and returns an image for placement in a PDF document</s>
+<s f="pdf_open_png" u="int pdf_open_png(resource pdf, string pngfile)">Opens a PNG file and returns an image for placement in a PDF document</s>
+<s f="pdf_open_tiff" u="int pdf_open_tiff(resource pdf, string tifffile)">Opens a TIFF file and returns an image for placement in a PDF document</s>
+<s f="pdf_place_image" u="bool pdf_place_image(resource pdf, int pdfimage, float x, float y, float scale)">Places image in the PDF document</s>
+<s f="pdf_place_pdi_page" u="bool pdf_place_pdi_page(resource pdf, int page, float x, float y, float sx, float sy)">* Place a PDF page with the lower left corner at (x, y), and scale it.</s>
+<s f="pdf_rect" u="bool pdf_rect(resource pdfdoc, float x, float y, float width, float height)">Draws a rectangle</s>
+<s f="pdf_restore" u="bool pdf_restore(resource pdfdoc)">Restores formerly saved enviroment</s>
+<s f="pdf_rotate" u="bool pdf_rotate(resource pdfdoc, float angle)">Sets rotation</s>
+<s f="pdf_save" u="bool pdf_save(resource pdfdoc)">Saves current enviroment</s>
+<s f="pdf_scale" u="bool pdf_scale(resource pdfdoc, float x_scale, float y_scale)">Sets scaling</s>
+<s f="pdf_set_border_color" u="bool pdf_set_border_color(resource pdfdoc, float red, float green, float blue)">Sets color of box surounded all kinds of annotations and links</s>
+<s f="pdf_set_border_dash" u="bool pdf_set_border_dash(resource pdfdoc, float black, float white)">Sets the border dash style of all kinds of annotations and links</s>
+<s f="pdf_set_border_style" u="bool pdf_set_border_style(resource pdfdoc, string style, float width)">Sets style of box surounding all kinds of annotations and link</s>
+<s f="pdf_set_char_spacing" u="bool pdf_set_char_spacing(resource pdfdoc, float space)">Sets character spacing</s>
+<s f="pdf_set_duration" u="bool pdf_set_duration(resource pdfdoc, float duration)">Sets duration between pages</s>
+<s f="pdf_set_font" u="bool pdf_set_font(resource pdfdoc, string font, float size, string encoding [, int embed])">Select the current font face, size and encoding</s>
+<s f="pdf_set_horiz_scaling" u="bool pdf_set_horiz_scaling(resource pdfdoc, float scale)">Sets horizontal scaling of text</s>
+<s f="pdf_set_info" u="bool pdf_set_info(resource pdfdoc, string fieldname, string value)">Fills an info field of the document</s>
+<s f="pdf_set_info_author" u="bool pdf_set_info_author(resource pdfdoc, string author)">Fills the author field of the document</s>
+<s f="pdf_set_info_creator" u="bool pdf_set_info_creator(resource pdfdoc, string creator)">Fills the creator field of the document</s>
+<s f="pdf_set_info_keywords" u="bool pdf_set_info_keywords(resource pdfdoc, string keywords)">Fills the keywords field of the document</s>
+<s f="pdf_set_info_subject" u="bool pdf_set_info_subject(resource pdfdoc, string subject)">Fills the subject field of the document</s>
+<s f="pdf_set_info_title" u="bool pdf_set_info_title(resource pdfdoc, string title)">Fills the title field of the document</s>
+<s f="pdf_set_leading" u="bool pdf_set_leading(resource pdfdoc, float distance)">Sets distance between text lines</s>
+<s f="pdf_set_parameter" u="bool pdf_set_parameter(resource pdfdoc, string key, string value)">Sets arbitrary parameters</s>
+<s f="pdf_set_text_pos" u="bool pdf_set_text_pos(resource pdfdoc, float x, float y)">Sets the position of text for the next pdf_show call</s>
+<s f="pdf_set_text_rendering" u="bool pdf_set_text_rendering(resource pdfdoc, int mode)">Determines how text is rendered</s>
+<s f="pdf_set_text_rise" u="bool pdf_set_text_rise(resource pdfdoc, float value)">Sets the text rise</s>
+<s f="pdf_set_transition" u="bool pdf_set_transition(resource pdfdoc, int transition)">Sets transition between pages</s>
+<s f="pdf_set_value" u="bool pdf_set_value(resource pdfdoc, string key, float value)">Sets arbitrary value</s>
+<s f="pdf_set_word_spacing" u="bool pdf_set_word_spacing(resource pdfdoc, float space)">Sets spacing between words</s>
+<s f="pdf_setdash" u="bool pdf_setdash(resource pdfdoc, float black, float white)">Sets dash pattern</s>
+<s f="pdf_setflat" u="bool pdf_setflat(resource pdfdoc, float value)">Sets flatness</s>
+<s f="pdf_setfont" u="bool pdf_setfont(resource pdfdoc, int font, float fontsize)">Sets the current font in the fiven fontsize</s>
+<s f="pdf_setgray" u="bool pdf_setgray(resource pdfdoc, float value)">Sets drawing and filling color to gray value</s>
+<s f="pdf_setgray_fill" u="bool pdf_setgray_fill(resource pdfdoc, float value)">Sets filling color to gray value</s>
+<s f="pdf_setgray_stroke" u="bool pdf_setgray_stroke(resource pdfdoc, float value)">Sets drawing color to gray value</s>
+<s f="pdf_setlinecap" u="bool pdf_setlinecap(resource pdfdoc, int value)">Sets linecap parameter</s>
+<s f="pdf_setlinejoin" u="bool pdf_setlinejoin(resource pdfdoc, int value)">Sets linejoin parameter</s>
+<s f="pdf_setlinewidth" u="bool pdf_setlinewidth(resource pdfdoc, float width)">Sets line width</s>
+<s f="pdf_setmatrix" u="bool pdf_setmatrix(resource pdf, float a, float b, float c, float d, float e, float f)">Explicitly set the current transformation matrix.</s>
+<s f="pdf_setmiterlimit" u="bool pdf_setmiterlimit(resource pdfdoc, float value)">Sets miter limit</s>
+<s f="pdf_setpolydash" u="bool pdf_setpolydash(resource pdfdoc, float darray)">Sets more complicated dash pattern</s>
+<s f="pdf_setrgbcolor" u="bool pdf_setrgbcolor(resource pdfdoc, float red, float green, float blue)">Sets drawing and filling color to RGB color value</s>
+<s f="pdf_setrgbcolor_fill" u="bool pdf_setrgbcolor_fill(resource pdfdoc, float red, float green, float blue)">Sets filling color to RGB color value</s>
+<s f="pdf_setrgbcolor_stroke" u="bool pdf_setrgbcolor_stroke(resource pdfdoc, float red, float green, float blue)">Sets drawing color to RGB color value</s>
+<s f="pdf_show" u="bool pdf_show(resource pdfdoc, string text)">Output text at current position</s>
+<s f="pdf_show_boxed" u="int pdf_show_boxed(resource pdfdoc, string text, float x_koor, float y_koor, float width, float height, string mode [, string feature])">Output text formated in a boxed</s>
+<s f="pdf_show_xy" u="bool pdf_show_xy(resource pdfdoc, string text, float x_koor, float y_koor)">Output text at position</s>
+<s f="pdf_skew" u="bool pdf_skew(resource pdfdoc, float xangle, float yangle)">Skew the coordinate system</s>
+<s f="pdf_stringwidth" u="float pdf_stringwidth(resource pdfdoc, string text [, int font, float size])">Returns width of text in current font</s>
+<s f="pdf_stroke" u="bool pdf_stroke(resource pdfdoc)">Draw line along path path</s>
+<s f="pdf_translate" u="bool pdf_translate(resource pdfdoc, float x, float y)">Sets origin of coordinate system</s>
+<s f="pfpro_cleanup" u="bool pfpro_cleanup()">Shuts down the Payflow Pro library</s>
+<s f="pfpro_init" u="bool pfpro_init()">Initializes the Payflow Pro library</s>
+<s f="pfpro_process" u="array pfpro_process(array parmlist [, string hostaddress [, int port, [, int timeout [, string proxyAddress [, int proxyPort [, string proxyLogon [, string proxyPassword]]]]]]])">Payflow Pro transaction processing using arrays</s>
+<s f="pfpro_process_raw" u="string pfpro_process_raw(string parmlist [, string hostaddress [, int port, [, int timeout [, string proxyAddress [, int proxyPort [, string proxyLogon [, string proxyPassword]]]]]]])">Raw Payflow Pro transaction processing</s>
+<s f="pfpro_version" u="string pfpro_version()">Returns the version of the Payflow Pro library</s>
+<s f="pg_affected_rows" u="int pg_affected_rows(resource result)">Returns the number of affected tuples</s>
+<s f="pg_cancel_query" u="bool pg_cancel_query(resource connection)">Cancel request</s>
+<s f="pg_client_encoding" u="string pg_client_encoding([resource connection])">Get the current client encoding</s>
+<s f="pg_close" u="bool pg_close([resource connection])">Close a PostgreSQL connection</s>
+<s f="pg_connect" u="resource pg_connect(string connection_string[, int connect_type] | [string host, string port [, string options [, string tty,]]] string database)">Open a PostgreSQL connection</s>
+<s f="pg_connection_busy" u="bool pg_connection_busy(resource connection)">Get connection is busy or not</s>
+<s f="pg_connection_reset" u="bool pg_connection_reset(resource connection)">Reset connection (reconnect)</s>
+<s f="pg_connection_status" u="int pg_connection_status(resource connnection)">Get connection status</s>
+<s f="pg_convert" u="array pg_convert(resource db, string table, array values[, int options])">Check and convert values for PostgreSQL SQL statement</s>
+<s f="pg_copy_from" u="bool pg_copy_from(resource connection, string table_name , array rows [, string delimiter [, string null_as]])">Copy table from array</s>
+<s f="pg_copy_to" u="array pg_copy_to(resource connection, string table_name [, string delimiter [, string null_as]])">Copy table to array</s>
+<s f="pg_dbname" u="string pg_dbname([resource connection])">Get the database name</s>
+<s f="pg_delete" u="mixed pg_delete(resource db, string table, array ids[, int options])">Delete records has ids (id=>value)</s>
+<s f="pg_end_copy" u="bool pg_end_copy([resource connection])">Sync with backend. Completes the Copy command</s>
+<s f="pg_escape_bytea" u="string pg_escape_bytea(string data)">Escape binary for bytea type</s>
+<s f="pg_escape_string" u="string pg_escape_string(string data)">Escape string for text/char type</s>
+<s f="pg_fetch_all" u="array pg_fetch_all(resource result)">Fetch all rows into array</s>
+<s f="pg_fetch_array" u="array pg_fetch_array(resource result [, int row [, int result_type]])">Fetch a row as an array</s>
+<s f="pg_fetch_assoc" u="array pg_fetch_assoc(resource result [, int row])">Fetch a row as an assoc array</s>
+<s f="pg_fetch_object" u="object pg_fetch_object(resource result [, int row [, string class_name [, NULL|array ctor_params]]])">Fetch a row as an object</s>
+<s f="pg_fetch_result" u="mixed pg_fetch_result(resource result, [int row_number,] mixed field_name)">Returns values from a result identifier</s>
+<s f="pg_fetch_row" u="array pg_fetch_row(resource result [, int row [, int result_type]])">Get a row as an enumerated array</s>
+<s f="pg_field_is_null" u="int pg_field_is_null(resource result, [int row,] mixed field_name_or_number)">Test if a field is NULL</s>
+<s f="pg_field_name" u="string pg_field_name(resource result, int field_number)">Returns the name of the field</s>
+<s f="pg_field_num" u="int pg_field_num(resource result, string field_name)">Returns the field number of the named field</s>
+<s f="pg_field_prtlen" u="int pg_field_prtlen(resource result, [int row,] mixed field_name_or_number)">Returns the printed length</s>
+<s f="pg_field_size" u="int pg_field_size(resource result, int field_number)">Returns the internal size of the field</s>
+<s f="pg_field_type" u="string pg_field_type(resource result, int field_number)">Returns the type name for the given field</s>
+<s f="pg_free_result" u="bool pg_free_result(resource result)">Free result memory</s>
+<s f="pg_get_notify" u="array pg_get_notify([resource connection[, result_type]])">Get asynchronous notification</s>
+<s f="pg_get_pid" u="int pg_get_pid([resource connection)">Get backend(server) pid</s>
+<s f="pg_get_result" u="resource pg_get_result(resource connection)">Get asynchronous query result</s>
+<s f="pg_host" u="string pg_host([resource connection])">Returns the host name associated with the connection</s>
+<s f="pg_insert" u="mixed pg_insert(resource db, string table, array values[, int options])">Insert values (filed=>value) to table</s>
+<s f="pg_last_error" u="string pg_last_error([resource connection])">Get the error message string</s>
+<s f="pg_last_notice" u="string pg_last_notice(resource connection)">Returns the last notice set by the backend</s>
+<s f="pg_last_oid" u="string pg_last_oid(resource result)">Returns the last object identifier</s>
+<s f="pg_lo_close" u="bool pg_lo_close(resource large_object)">Close a large object</s>
+<s f="pg_lo_create" u="int pg_lo_create([resource connection])">Create a large object</s>
+<s f="pg_lo_export" u="bool pg_lo_export([resource connection, ] int objoid, string filename)">Export large object direct to filesystem</s>
+<s f="pg_lo_import" u="int pg_lo_import([resource connection, ] string filename)">Import large object direct from filesystem</s>
+<s f="pg_lo_open" u="resource pg_lo_open([resource connection,] int large_object_oid, string mode)">Open a large object and return fd</s>
+<s f="pg_lo_read" u="string pg_lo_read(resource large_object [, int len])">Read a large object</s>
+<s f="pg_lo_read_all" u="int pg_lo_read_all(resource large_object)">Read a large object and send straight to browser</s>
+<s f="pg_lo_seek" u="bool pg_lo_seek(resource large_object, int offset [, int whence])">Seeks position of large object</s>
+<s f="pg_lo_tell" u="int pg_lo_tell(resource large_object)">Returns current position of large object</s>
+<s f="pg_lo_unlink" u="bool pg_lo_unlink([resource connection,] string large_object_oid)">Delete a large object</s>
+<s f="pg_lo_write" u="int pg_lo_write(resource large_object, string buf [, int len])">Write a large object</s>
+<s f="pg_meta_data" u="array pg_meta_data(resource db, string table)">Get meta_data</s>
+<s f="pg_num_fields" u="int pg_num_fields(resource result)">Return the number of fields in the result</s>
+<s f="pg_num_rows" u="int pg_num_rows(resource result)">Return the number of rows in the result</s>
+<s f="pg_options" u="string pg_options([resource connection])">Get the options associated with the connection</s>
+<s f="pg_pconnect" u="resource pg_pconnect(string connection_string | [string host, string port [, string options [, string tty,]]] string database)">Open a persistent PostgreSQL connection</s>
+<s f="pg_ping" u="bool pg_ping([resource connection])">Ping database. If connection is bad, try to reconnect.</s>
+<s f="pg_port" u="int pg_port([resource connection])">Return the port number associated with the connection</s>
+<s f="pg_put_line" u="bool pg_put_line([resource connection,] string query)">Send null-terminated string to backend server</s>
+<s f="pg_query" u="resource pg_query([resource connection,] string query)">Execute a query</s>
+<s f="pg_result_error" u="string pg_result_error(resource result)">Get error message associated with result</s>
+<s f="pg_result_seek" u="bool pg_result_seek(resource result, int offset)">Set internal row offset</s>
+<s f="pg_result_status" u="mixed pg_result_status(resource result[, long result_type])">Get status of query result</s>
+<s f="pg_select" u="mixed pg_select(resource db, string table, array ids[, int options])">Select records that has ids (id=>value)</s>
+<s f="pg_send_query" u="bool pg_send_query(resource connection, string qeury)">Send asynchronous query</s>
+<s f="pg_set_client_encoding" u="int pg_set_client_encoding([resource connection,] string encoding)">Set client encoding</s>
+<s f="pg_trace" u="bool pg_trace(string filename [, string mode [, resource connection]])">Enable tracing a PostgreSQL connection</s>
+<s f="pg_tty" u="string pg_tty([resource connection])">Return the tty name associated with the connection</s>
+<s f="pg_unescape_bytea" u="string pg_unescape_bytea(string data)">Unescape binary for bytea type</s>
+<s f="pg_untrace" u="bool pg_untrace([resource connection])">Disable tracing of a PostgreSQL connection</s>
+<s f="pg_update" u="mixed pg_update(resource db, string table, array fields, array ids[, int options])">Update table using values (field=>value) and ids (id=>value)</s>
+<s f="pg_version" u="array pg_version([resource connection])">Returns an array with client, protocol and server version (when available)</s>
+<s f="posix_ctermid" u="string posix_ctermid(void)">Generate terminal path name (POSIX.1, 4.7.1)</s>
+<s f="posix_get_last_error" u="int posix_get_last_error(void)">Retrieve the error number set by the last posix function which failed.</s>
+<s f="posix_getcwd" u="string posix_getcwd(void)">Get working directory pathname (POSIX.1, 5.2.2)</s>
+<s f="posix_getegid" u="int posix_getegid(void)">Get the current effective group id (POSIX.1, 4.2.1)</s>
+<s f="posix_geteuid" u="int posix_geteuid(void)">Get the current effective user id (POSIX.1, 4.2.1)</s>
+<s f="posix_getgid" u="int posix_getgid(void)">Get the current group id (POSIX.1, 4.2.1)</s>
+<s f="posix_getgrgid" u="array posix_getgrgid(long gid)">Group database access (POSIX.1, 9.2.1)</s>
+<s f="posix_getgrnam" u="array posix_getgrnam(string groupname)">Group database access (POSIX.1, 9.2.1)</s>
+<s f="posix_getgroups" u="array posix_getgroups(void)">Get supplementary group id's (POSIX.1, 4.2.3)</s>
+<s f="posix_getlogin" u="string posix_getlogin(void)">Get user name (POSIX.1, 4.2.4)</s>
+<s f="posix_getpgid" u="int posix_getpgid(void)">Get the process group id of the specified process (This is not a POSIX function, but a SVR4ism, so we compile conditionally)</s>
+<s f="posix_getpgrp" u="int posix_getpgrp(void)">Get current process group id (POSIX.1, 4.3.1)</s>
+<s f="posix_getpid" u="int posix_getpid(void)">Get the current process id (POSIX.1, 4.1.1)</s>
+<s f="posix_getppid" u="int posix_getppid(void)">Get the parent process id (POSIX.1, 4.1.1)</s>
+<s f="posix_getpwnam" u="array posix_getpwnam(string groupname)">User database access (POSIX.1, 9.2.2)</s>
+<s f="posix_getpwuid" u="array posix_getpwuid(long uid)">User database access (POSIX.1, 9.2.2)</s>
+<s f="posix_getrlimit" u="array posix_getrlimit(void)">Get system resource consumption limits (This is not a POSIX function, but a BSDism and a SVR4ism. We compile conditionally)</s>
+<s f="posix_getsid" u="int posix_getsid(void)">Get process group id of session leader (This is not a POSIX function, but a SVR4ism, so be compile conditionally)</s>
+<s f="posix_getuid" u="int posix_getuid(void)">Get the current user id (POSIX.1, 4.2.1)</s>
+<s f="posix_isatty" u="bool posix_isatty(int fd)">Determine if filedesc is a tty (POSIX.1, 4.7.1)</s>
+<s f="posix_kill" u="bool posix_kill(int pid, int sig)">Send a signal to a process (POSIX.1, 3.3.2)</s>
+<s f="posix_mkfifo" u="bool posix_mkfifo(string pathname, int mode)">Make a FIFO special file (POSIX.1, 5.4.2)</s>
+<s f="posix_setegid" u="bool posix_setegid(long uid)">Set effective group id</s>
+<s f="posix_seteuid" u="bool posix_seteuid(long uid)">Set effective user id</s>
+<s f="posix_setgid" u="bool posix_setgid(int uid)">Set group id (POSIX.1, 4.2.2)</s>
+<s f="posix_setpgid" u="bool posix_setpgid(int pid, int pgid)">Set process group id for job control (POSIX.1, 4.3.3)</s>
+<s f="posix_setsid" u="int posix_setsid(void)">Create session and set process group id (POSIX.1, 4.3.2)</s>
+<s f="posix_setuid" u="bool posix_setuid(long uid)">Set user id (POSIX.1, 4.2.2)</s>
+<s f="posix_strerror" u="string posix_strerror(int errno)">Retrieve the system error message associated with the given errno.</s>
+<s f="posix_times" u="array posix_times(void)">Get process times (POSIX.1, 4.5.2)</s>
+<s f="posix_ttyname" u="string posix_ttyname(int fd)">Determine terminal device name (POSIX.1, 4.7.2)</s>
+<s f="posix_uname" u="array posix_uname(void)">Get system name (POSIX.1, 4.4.1)</s>
+<s f="pspell_add_to_personal" u="bool pspell_add_to_personal(int pspell, string word)">Adds a word to a personal list</s>
+<s f="pspell_add_to_session" u="bool pspell_add_to_session(int pspell, string word)">Adds a word to the current session</s>
+<s f="pspell_check" u="bool pspell_check(int pspell, string word)">Returns true if word is valid</s>
+<s f="pspell_clear_session" u="bool pspell_clear_session(int pspell)">Clears the current session</s>
+<s f="pspell_config_create" u="int pspell_config_create(string language [, string spelling [, string jargon [, string encoding]]])">Create a new config to be used later to create a manager</s>
+<s f="pspell_config_data_dir" u="bool pspell_config_data_dir(int conf, string directory)">location of language data files</s>
+<s f="pspell_config_dict_dir" u="bool pspell_config_dict_dir(int conf, string directory)">location of the main word list</s>
+<s f="pspell_config_ignore" u="bool pspell_config_ignore(int conf, int ignore)">Ignore words &lt;= n chars</s>
+<s f="pspell_config_mode" u="bool pspell_config_mode(int conf, long mode)">Select mode for config (PSPELL_FAST, PSPELL_NORMAL or PSPELL_BAD_SPELLERS)</s>
+<s f="pspell_config_personal" u="bool pspell_config_personal(int conf, string personal)">Use a personal dictionary for this config</s>
+<s f="pspell_config_repl" u="bool pspell_config_repl(int conf, string repl)">Use a personal dictionary with replacement pairs for this config</s>
+<s f="pspell_config_runtogether" u="bool pspell_config_runtogether(int conf, bool runtogether)">Consider run-together words as valid components</s>
+<s f="pspell_config_save_repl" u="bool pspell_config_save_repl(int conf, bool save)">Save replacement pairs when personal list is saved for this config</s>
+<s f="pspell_new" u="int pspell_new(string language [, string spelling [, string jargon [, string encoding [, int mode]]]])">Load a dictionary</s>
+<s f="pspell_new_config" u="int pspell_new_config(int config)">Load a dictionary based on the given config</s>
+<s f="pspell_new_personal" u="int pspell_new_personal(string personal, string language [, string spelling [, string jargon [, string encoding [, int mode]]]])">Load a dictionary with a personal wordlist</s>
+<s f="pspell_save_wordlist" u="bool pspell_save_wordlist(int pspell)">Saves the current (personal) wordlist</s>
+<s f="pspell_store_replacement" u="bool pspell_store_replacement(int pspell, string misspell, string correct)">Notify the dictionary of a user-selected replacement</s>
+<s f="pspell_suggest" u="array pspell_suggest(int pspell, string word)">Returns array of suggestions</s>
+<s f="readline" u="string readline([string prompt])">Reads a line</s>
+<s f="readline_add_history" u="bool readline_add_history([string prompt])">Adds a line to the history</s>
+<s f="readline_clear_history" u="bool readline_clear_history(void)">Clears the history</s>
+<s f="readline_completion_function" u="bool readline_completion_function(string funcname)">Readline completion function?</s>
+<s f="readline_info" u="mixed readline_info([string varname] [, string newvalue])">Gets/sets various internal readline variables.</s>
+<s f="readline_list_history" u="array readline_list_history(void)">Lists the history</s>
+<s f="readline_read_history" u="bool readline_read_history([string filename] [, int from] [,int to])">Reads the history</s>
+<s f="readline_write_history" u="bool readline_write_history([string filename])">Writes the history</s>
+<s f="recode_file" u="bool recode_file(string request, resource input, resource output)">Recode file input into file output according to request</s>
+<s f="recode_string" u="string recode_string(string request, string str)">Recode string str according to request string</s>
+<s f="session_cache_expire" u="int session_cache_expire([int new_cache_expire])">Return the current cache expire. If new_cache_expire is given, the current cache_expire is replaced with new_cache_expire</s>
+<s f="session_cache_limiter" u="string session_cache_limiter([string new_cache_limiter])">Return the current cache limiter. If new_cache_limited is given, the current cache_limiter is replaced with new_cache_limiter</s>
+<s f="session_decode" u="bool session_decode(string data)">Deserializes data and reinitializes the variables</s>
+<s f="session_destroy" u="bool session_destroy(void)">Destroy the current session and all data associated with it</s>
+<s f="session_encode" u="string session_encode(void)">Serializes the current setup and returns the serialized representation</s>
+<s f="session_get_cookie_params" u="array session_get_cookie_params(void)">Return the session cookie parameters</s>
+<s f="session_id" u="string session_id([string newid])">Return the current session id. If newid is given, the session id is replaced with newid</s>
+<s f="session_is_registered" u="bool session_is_registered(string varname)">Checks if a variable is registered in session</s>
+<s f="session_module_name" u="string session_module_name([string newname])">Return the current module name used for accessing session data. If newname is given, the module name is replaced with newname</s>
+<s f="session_name" u="string session_name([string newname])">Return the current session name. If newname is given, the session name is replaced with newname</s>
+<s f="session_regenerate_id" u="bool session_regenerate_id()">Update the current session id with a newly generated one.</s>
+<s f="session_register" u="bool session_register(mixed var_names [, mixed ...])">Adds varname(s) to the list of variables which are freezed at the session end</s>
+<s f="session_save_path" u="string session_save_path([string newname])">Return the current save path passed to module_name. If newname is given, the save path is replaced with newname</s>
+<s f="session_set_cookie_params" u="void session_set_cookie_params(int lifetime [, string path [, string domain [, bool secure]]])">Set session cookie parameters</s>
+<s f="session_set_save_handler" u="void session_set_save_handler(string open, string close, string read, string write, string destroy, string gc)">Sets user-level functions</s>
+<s f="session_start" u="bool session_start(void)">Begin session - reinitializes freezed variables, registers browsers etc</s>
+<s f="session_unregister" u="bool session_unregister(string varname)">Removes varname from the list of variables which are freezed at the session end</s>
+<s f="session_unset" u="void session_unset(void)">Unset all registered variables</s>
+<s f="session_write_close" u="void session_write_close(void)">Write session data and end session</s>
+<s f="simplexml_import_dom" u="simplemxml_element simplexml_import_dom(domNode node [, string class_name])">Get a simplexml_element object from dom to allow for processing</s>
+<s f="simplexml_load_file" u="simplemxml_element simplexml_load_file(string filename [, string class_name])">Load a filename and return a simplexml_element object to allow for processing</s>
+<s f="simplexml_load_string" u="simplemxml_element simplexml_load_string(string data [, string class_name])">Load a string and return a simplexml_element object to allow for processing</s>
+<s f="confirm_extname_compiled" u="string confirm_extname_compiled(string arg)">Return a string to confirm that the module is compiled in</s>
+<s f="snmp_get_quick_print" u="bool snmp_get_quick_print(void)">Return the current status of quick_print</s>
+<s f="snmp_get_valueretrieval" u="int snmp_get_valueretrieval()">Return the method how the SNMP values will be returned</s>
+<s f="snmp_read_mib" u="int snmp_read_mib(string filename)">Reads and parses a MIB file into the active MIB tree.</s>
+<s f="snmp_set_enum_print" u="void snmp_set_enum_print(int enum_print)">Return all values that are enums with their enum value instead of the raw integer</s>
+<s f="snmp_set_oid_numeric_print" u="void snmp_set_oid_numeric_print(int oid_numeric_print)">Return all objects including their respective object id withing the specified one</s>
+<s f="snmp_set_quick_print" u="void snmp_set_quick_print(int quick_print)">Return all objects including their respective object id withing the specified one</s>
+<s f="snmp_set_valueretrieval" u="int snmp_set_valueretrieval(int method)">Specify the method how the SNMP values will be returned</s>
+<s f="snmpget" u="string snmpget(string host, string community, string object_id [, int timeout [, int retries]])">Fetch a SNMP object</s>
+<s f="snmpgetnext" u="string snmpgetnext(string host, string community, string object_id [, int timeout [, int retries]])">Fetch a SNMP object</s>
+<s f="snmprealwalk" u="array snmprealwalk(string host, string community, string object_id [, int timeout [, int retries]])">Return all objects including their respective object id withing the specified one</s>
+<s f="snmpset" u="int snmpset(string host, string community, string object_id, string type, mixed value [, int timeout [, int retries]])">Set the value of a SNMP object</s>
+<s f="snmpwalk" u="array snmpwalk(string host, string community, string object_id [, int timeout [, int retries]])">Return all objects under the specified object id</s>
+<s f="socket_accept" u="resource socket_accept(resource socket)">Accepts a connection on the listening socket fd</s>
+<s f="socket_bind" u="bool socket_bind(resource socket, string addr [, int port])">Binds an open socket to a listening port, port is only specified in AF_INET family.</s>
+<s f="socket_clear_error" u="void socket_clear_error([resource socket])">Clears the error on the socket or the last error code.</s>
+<s f="socket_close" u="void socket_close(resource socket)">Closes a file descriptor</s>
+<s f="socket_connect" u="bool socket_connect(resource socket, string addr [, int port])">Opens a connection to addr:port on the socket specified by socket</s>
+<s f="socket_create" u="resource socket_create(int domain, int type, int protocol)">Creates an endpoint for communication in the domain specified by domain, of type specified by type</s>
+<s f="socket_create_listen" u="resource socket_create_listen(int port[, int backlog])">Opens a socket on port to accept connections</s>
+<s f="socket_create_pair" u="bool socket_create_pair(int domain, int type, int protocol, array &amp;fd)">Creates a pair of indistinguishable sockets and stores them in fds.</s>
+<s f="socket_get_option" u="mixed socket_get_option(resource socket, int level, int optname)">Gets socket options for the socket</s>
+<s f="socket_getpeername" u="bool socket_getpeername(resource socket, string &amp;addr[, int &amp;port])">Queries the remote side of the given socket which may either result in host/port or in a UNIX filesystem path, dependent on its type.</s>
+<s f="socket_getsockname" u="bool socket_getsockname(resource socket, string &amp;addr[, int &amp;port])">Queries the remote side of the given socket which may either result in host/port or in a UNIX filesystem path, dependent on its type.</s>
+<s f="socket_last_error" u="int socket_last_error([resource socket])">Returns the last socket error (either the last used or the provided socket resource)</s>
+<s f="socket_listen" u="bool socket_listen(resource socket[, int backlog])">Sets the maximum number of connections allowed to be waited for on the socket specified by fd</s>
+<s f="socket_read" u="string socket_read(resource socket, int length [, int type])">Reads a maximum of length bytes from socket</s>
+<s f="socket_recv" u="int socket_recv(resource socket, string &amp;buf, int len, int flags)">Receives data from a connected socket</s>
+<s f="socket_recvfrom" u="int socket_recvfrom(resource socket, string &amp;buf, int len, int flags, string &amp;name [, int &amp;port])">Receives data from a socket, connected or not</s>
+<s f="socket_select" u="int socket_select(array &amp;read_fds, array &amp;write_fds, &amp;array except_fds, int tv_sec[, int tv_usec])">Runs the select() system call on the sets mentioned with a timeout specified by tv_sec and tv_usec</s>
+<s f="socket_send" u="int socket_send(resource socket, string buf, int len, int flags)">Sends data to a connected socket</s>
+<s f="socket_sendto" u="int socket_sendto(resource socket, string buf, int len, int flags, string addr [, int port])">Sends a message to a socket, whether it is connected or not</s>
+<s f="socket_set_block" u="bool socket_set_block(resource socket)">Sets blocking mode on a socket resource</s>
+<s f="socket_set_nonblock" u="bool socket_set_nonblock(resource socket)">Sets nonblocking mode on a socket resource</s>
+<s f="socket_set_option" u="bool socket_set_option(resource socket, int level, int optname, int|array optval)">Sets socket options for the socket</s>
+<s f="socket_shutdown" u="bool socket_shutdown(resource socket[, int how])">Shuts down a socket for receiving, sending, or both.</s>
+<s f="socket_strerror" u="string socket_strerror(int errno)">Returns a string describing an error</s>
+<s f="socket_write" u="int socket_write(resource socket, string buf[, int length])">Writes the buffer to the socket resource, length is optional</s>
+<s f="sqlite_array_query" u="array sqlite_array_query(resource db, string query [ , int result_type [, bool decode_binary]])">Executes a query against a given database and returns an array of arrays.</s>
+<s f="sqlite_busy_timeout" u="void sqlite_busy_timeout(resource db, int ms)">Set busy timeout duration. If ms &lt;= 0, all busy handlers are disabled.</s>
+<s f="sqlite_changes" u="int sqlite_changes(resource db)">Returns the number of rows that were changed by the most recent SQL statement.</s>
+<s f="sqlite_close" u="void sqlite_close(resource db)">Closes an open sqlite database.</s>
+<s f="sqlite_column" u="mixed sqlite_column(resource result, mixed index_or_name [, bool decode_binary])">Fetches a column from the current row of a result set.</s>
+<s f="sqlite_create_aggregate" u="bool sqlite_create_aggregate(resource db, string funcname, mixed step_func, mixed finalize_func[, long num_args])">Registers an aggregate function for queries.</s>
+<s f="sqlite_create_function" u="bool sqlite_create_function(resource db, string funcname, mixed callback[, long num_args])">Registers a "regular" function for queries.</s>
+<s f="sqlite_current" u="array sqlite_current(resource result [, int result_type [, bool decode_binary]])">Fetches the current row from a result set as an array.</s>
+<s f="sqlite_error_string" u="string sqlite_error_string(int error_code)">Returns the textual description of an error code.</s>
+<s f="sqlite_escape_string" u="string sqlite_escape_string(string item)">Escapes a string for use as a query parameter.</s>
+<s f="sqlite_factory" u="object sqlite_factory(string filename [, int mode [, string &amp;error_message]])">Opens a SQLite database and creates an object for it. Will create the database if it does not exist.</s>
+<s f="sqlite_fetch_all" u="array sqlite_fetch_all(resource result [, int result_type [, bool decode_binary]])">Fetches all rows from a result set as an array of arrays.</s>
+<s f="sqlite_fetch_array" u="array sqlite_fetch_array(resource result [, int result_type [, bool decode_binary]])">Fetches the next row from a result set as an array.</s>
+<s f="sqlite_fetch_column_types" u="resource sqlite_fetch_column_types(string table_name, resource db)">Return an array of column types from a particular table.</s>
+<s f="sqlite_fetch_object" u="object sqlite_fetch_object(resource result [, string class_name [, NULL|array ctor_params [, bool decode_binary]]])">Fetches the next row from a result set as an object.</s>
+<s f="sqlite_fetch_single" u="string sqlite_fetch_single(resource result [, bool decode_binary])">Fetches the first column of a result set as a string.</s>
+<s f="sqlite_field_name" u="string sqlite_field_name(resource result, int field_index)">Returns the name of a particular field of a result set.</s>
+<s f="sqlite_has_prev" u="bool sqlite_has_prev(resource result)">* Returns whether a previous row is available.</s>
+<s f="sqlite_last_error" u="int sqlite_last_error(resource db)">Returns the error code of the last error for a database.</s>
+<s f="sqlite_last_insert_rowid" u="int sqlite_last_insert_rowid(resource db)">Returns the rowid of the most recently inserted row.</s>
+<s f="sqlite_libencoding" u="string sqlite_libencoding()">Returns the encoding (iso8859 or UTF-8) of the linked SQLite library.</s>
+<s f="sqlite_libversion" u="string sqlite_libversion()">Returns the version of the linked SQLite library.</s>
+<s f="sqlite_next" u="bool sqlite_next(resource result)">Seek to the next row number of a result set.</s>
+<s f="sqlite_num_fields" u="int sqlite_num_fields(resource result)">Returns the number of fields in a result set.</s>
+<s f="sqlite_num_rows" u="int sqlite_num_rows(resource result)">Returns the number of rows in a buffered result set.</s>
+<s f="sqlite_open" u="resource sqlite_open(string filename [, int mode [, string &amp;error_message]])">Opens a SQLite database. Will create the database if it does not exist.</s>
+<s f="sqlite_popen" u="resource sqlite_popen(string filename [, int mode [, string &amp;error_message]])">Opens a persistent handle to a SQLite database. Will create the database if it does not exist.</s>
+<s f="sqlite_prev" u="bool sqlite_prev(resource result)">* Seek to the previous row number of a result set.</s>
+<s f="sqlite_query" u="resource sqlite_query(string query, resource db [, int result_type ])">Executes a query against a given database and returns a result handle.</s>
+<s f="sqlite_rewind" u="bool sqlite_rewind(resource result)">Seek to the first row number of a buffered result set.</s>
+<s f="sqlite_seek" u="bool sqlite_seek(resource result, int row)">Seek to a particular row number of a buffered result set.</s>
+<s f="sqlite_single_query" u="array sqlite_single_query(resource db, string query [, bool first_row_only [, bool decode_binary]])">Executes a query and returns either an array for one single column or the value of the first row.</s>
+<s f="sqlite_udf_decode_binary" u="string sqlite_udf_decode_binary(string data)">Decode binary encoding on a string parameter passed to an UDF.</s>
+<s f="sqlite_udf_encode_binary" u="string sqlite_udf_encode_binary(string data)">Apply binary encoding (if required) to a string to return from an UDF.</s>
+<s f="sqlite_unbuffered_query" u="resource sqlite_unbuffered_query(string query, resource db [ , int result_type ])">Executes a query that does not prefetch and buffer all data.</s>
+<s f="sqlite_valid" u="bool sqlite_valid(resource result)">Returns whether more rows are available.</s>
+<s f="array_change_key_case" u="array array_change_key_case(array input [, int case=CASE_LOWER])">Retuns an array with all string keys lowercased [or uppercased]</s>
+<s f="array_chunk" u="array array_chunk(array input, int size [, bool preserve_keys])">Split array into chunks</s>
+<s f="array_combine" u="array array_combine(array keys, array values)">Creates an array by using the elements of the first parameter as keys and the elements of the second as correspoding keys</s>
+<s f="array_count_values" u="array array_count_values(array input)">Return the value as key and the frequency of that value in input as value</s>
+<s f="array_diff" u="array array_diff(array arr1, array arr2 [, array ...])">Returns the entries of arr1 that have values which are not present in any of the others arguments.</s>
+<s f="array_diff_assoc" u="array array_diff_assoc(array arr1, array arr2 [, array ...])">Returns the entries of arr1 that have values which are not present in any of the others arguments but do additional checks whether the keys are equal</s>
+<s f="array_diff_uassoc" u="array array_diff_uassoc(array arr1, array arr2 [, array ...], callback data_comp_func)">Returns the entries of arr1 that have values which are not present in any of the others arguments but do additional checks whether the keys are equal. Elements are compared by user supplied function.</s>
+<s f="array_fill" u="array array_fill(int start_key, int num, mixed val)">Create an array containing num elements starting with index start_key each initialized to val</s>
+<s f="array_filter" u="array array_filter(array input [, mixed callback])">Filters elements from the array via the callback.</s>
+<s f="array_flip" u="array array_flip(array input)">Return array with key &lt;-&gt; value flipped</s>
+<s f="array_intersect" u="array array_intersect(array arr1, array arr2 [, array ...])">Returns the entries of arr1 that have values which are present in all the other arguments</s>
+<s f="array_intersect_assoc" u="array array_intersect_assoc(array arr1, array arr2 [, array ...])">Returns the entries of arr1 that have values which are present in all the other arguments. Keys are used to do more restrictive check</s>
+<s f="array_intersect_uassoc" u="array array_intersect_uassoc(array arr1, array arr2 [, array ...], callback key_compare_func)">Returns the entries of arr1 that have values which are present in all the other arguments. Keys are used to do more restrictive check and they are compared by using an user-supplied callback.</s>
+<s f="array_key_exists" u="bool array_key_exists(mixed key, array search)">Checks if the given key or index exists in the array</s>
+<s f="array_keys" u="array array_keys(array input [, mixed search_value[, bool strict]])">Return just the keys from the input array, optionally only for the specified search_value</s>
+<s f="array_map" u="array array_map(mixed callback, array input1 [, array input2 ,...])">Applies the callback to the elements in given arrays.</s>
+<s f="array_merge" u="array array_merge(array arr1, array arr2 [, array ...])">Merges elements from passed arrays into one array</s>
+<s f="array_merge_recursive" u="array array_merge_recursive(array arr1, array arr2 [, array ...])">Recursively merges elements from passed arrays into one array</s>
+<s f="array_multisort" u="bool array_multisort(array ar1 [, SORT_ASC|SORT_DESC [, SORT_REGULAR|SORT_NUMERIC|SORT_STRING]] [, array ar2 [, SORT_ASC|SORT_DESC [, SORT_REGULAR|SORT_NUMERIC|SORT_STRING]], ...])">Sort multiple arrays at once similar to how ORDER BY clause works in SQL</s>
+<s f="array_pad" u="array array_pad(array input, int pad_size, mixed pad_value)">Returns a copy of input array padded with pad_value to size pad_size</s>
+<s f="array_pop" u="mixed array_pop(array stack)">Pops an element off the end of the array</s>
+<s f="array_push" u="int array_push(array stack, mixed var [, mixed ...])">Pushes elements onto the end of the array</s>
+<s f="array_rand" u="mixed array_rand(array input [, int num_req])">Return key/keys for random entry/entries in the array</s>
+<s f="array_reduce" u="mixed array_reduce(array input, mixed callback [, int initial])">Iteratively reduce the array to a single value via the callback.</s>
+<s f="array_reverse" u="array array_reverse(array input [, bool preserve keys])">Return input as a new array with the order of the entries reversed</s>
+<s f="array_search" u="mixed array_search(mixed needle, array haystack [, bool strict])">Searches the array for a given value and returns the corresponding key if successful</s>
+<s f="array_shift" u="mixed array_shift(array stack)">Pops an element off the beginning of the array</s>
+<s f="array_slice" u="array array_slice(array input, int offset [, int length])">Returns elements specified by offset and length</s>
+<s f="array_splice" u="array array_splice(array input, int offset [, int length [, array replacement]])">Removes the elements designated by offset and length and replace them with supplied array</s>
+<s f="array_sum" u="mixed array_sum(array input)">Returns the sum of the array entries</s>
+<s f="array_udiff" u="array array_udiff(array arr1, array arr2 [, array ...], callback data_comp_func)">Returns the entries of arr1 that have values which are not present in any of the others arguments. Elements are compared by user supplied function.</s>
+<s f="array_udiff_assoc" u="array array_udiff_assoc(array arr1, array arr2 [, array ...], callback key_comp_func)">Returns the entries of arr1 that have values which are not present in any of the others arguments but do additional checks whether the keys are equal. Keys are compared by user supplied function.</s>
+<s f="array_udiff_uassoc" u="array array_udiff_uassoc(array arr1, array arr2 [, array ...], callback data_comp_func, callback key_comp_func)">Returns the entries of arr1 that have values which are not present in any of the others arguments but do additional checks whether the keys are equal. Keys and elements are compared by user supplied functions.</s>
+<s f="array_uintersect" u="array array_uintersect(array arr1, array arr2 [, array ...], callback data_compare_func)">Returns the entries of arr1 that have values which are present in all the other arguments. Data is compared by using an user-supplied callback.</s>
+<s f="array_uintersect_assoc" u="array array_uintersect_assoc(array arr1, array arr2 [, array ...], callback data_compare_func)">Returns the entries of arr1 that have values which are present in all the other arguments. Keys are used to do more restrictive check. Data is compared by using an user-supplied callback.</s>
+<s f="array_uintersect_uassoc" u="array array_uintersect_uassoc(array arr1, array arr2 [, array ...], callback data_compare_func, callback key_compare_func)">Returns the entries of arr1 that have values which are present in all the other arguments. Keys are used to do more restrictive check. Both data and keys are compared by using user-supplied callbacks.</s>
+<s f="array_unique" u="array array_unique(array input)">Removes duplicate values from array</s>
+<s f="array_unshift" u="int array_unshift(array stack, mixed var [, mixed ...])">Pushes elements onto the beginning of the array</s>
+<s f="array_values" u="array array_values(array input)">Return just the values from the input array</s>
+<s f="array_walk" u="bool array_walk(array input, string funcname [, mixed userdata])">Apply a user function to every member of an array</s>
+<s f="array_walk_recursive" u="bool array_walk_recursive(array input, string funcname [, mixed userdata])">Apply a user function recursively to every member of an array</s>
+<s f="arsort" u="bool arsort(array array_arg [, int sort_flags])">Sort an array in reverse order and maintain index association</s>
+<s f="asort" u="bool asort(array array_arg [, int sort_flags])">Sort an array and maintain index association</s>
+<s f="compact" u="array compact(mixed var_names [, mixed ...])">Creates a hash containing variables and their values</s>
+<s f="count" u="int count(mixed var [, int mode])">Count the number of elements in a variable (usually an array)</s>
+<s f="current" u="mixed current(array array_arg)">Return the element currently pointed to by the internal array pointer</s>
+<s f="end" u="mixed end(array array_arg)">Advances array argument's internal pointer to the last element and return it</s>
+<s f="extract" u="int extract(array var_array [, int extract_type [, string prefix]])">Imports variables into symbol table from an array</s>
+<s f="in_array" u="bool in_array(mixed needle, array haystack [, bool strict])">Checks if the given value exists in the array</s>
+<s f="key" u="mixed key(array array_arg)">Return the key of the element currently pointed to by the internal array pointer</s>
+<s f="krsort" u="bool krsort(array array_arg [, int sort_flags])">Sort an array by key value in reverse order</s>
+<s f="ksort" u="bool ksort(array array_arg [, int sort_flags])">Sort an array by key</s>
+<s f="max" u="mixed max(mixed arg1 [, mixed arg2 [, mixed ...]])">Return the highest value in an array or a series of arguments</s>
+<s f="min" u="mixed min(mixed arg1 [, mixed arg2 [, mixed ...]])">Return the lowest value in an array or a series of arguments</s>
+<s f="natcasesort" u="void natcasesort(array array_arg)">Sort an array using case-insensitive natural sort</s>
+<s f="natsort" u="void natsort(array array_arg)">Sort an array using natural sort</s>
+<s f="next" u="mixed next(array array_arg)">Move array argument's internal pointer to the next element and return it</s>
+<s f="prev" u="mixed prev(array array_arg)">Move array argument's internal pointer to the previous element and return it</s>
+<s f="range" u="array range(mixed low, mixed high[, int step])">Create an array containing the range of integers or characters from low to high (inclusive)</s>
+<s f="reset" u="mixed reset(array array_arg)">Set array argument's internal pointer to the first element and return it</s>
+<s f="rsort" u="bool rsort(array array_arg [, int sort_flags])">Sort an array in reverse order</s>
+<s f="shuffle" u="bool shuffle(array array_arg)">Randomly shuffle the contents of an array</s>
+<s f="sort" u="bool sort(array array_arg [, int sort_flags])">Sort an array</s>
+<s f="uasort" u="bool uasort(array array_arg, string cmp_function)">Sort an array with a user-defined comparison function and maintain index association</s>
+<s f="uksort" u="bool uksort(array array_arg, string cmp_function)">Sort an array by keys using a user-defined comparison function</s>
+<s f="usort" u="bool usort(array array_arg, string cmp_function)">Sort an array by values using a user-defined comparison function</s>
+<s f="assert" u="int assert(string|bool assertion)">Checks if assertion is false</s>
+<s f="assert_options" u="mixed assert_options(int what [, mixed value])">Set/get the various assert flags</s>
+<s f="call_user_func" u="mixed call_user_func(string function_name [, mixed parmeter] [, mixed ...])">Call a user function which is the first parameter</s>
+<s f="call_user_func_array" u="mixed call_user_func_array(string function_name, array parameters)">Call a user function which is the first parameter with the arguments contained in array</s>
+<s f="call_user_method" u="mixed call_user_method(string method_name, mixed object [, mixed parameter] [, mixed ...])">Call a user method on a specific object or class</s>
+<s f="call_user_method_array" u="mixed call_user_method_array(string method_name, mixed object, array params)">Call a user method on a specific object or class using a parameter array</s>
+<s f="connection_aborted" u="int connection_aborted(void)">Returns true if client disconnected</s>
+<s f="connection_status" u="int connection_status(void)">Returns the connection status bitfield</s>
+<s f="constant" u="mixed constant(string const_name)">Given the name of a constant this function will return the constants associated value</s>
+<s f="error_log" u="bool error_log(string message [, int message_type [, string destination [, string extra_headers]]])">Send an error message somewhere</s>
+<s f="flush" u="void flush(void)">Flush the output buffer</s>
+<s f="get_cfg_var" u="string get_cfg_var(string option_name)">Get the value of a PHP configuration option</s>
+<s f="get_current_user" u="string get_current_user(void)">Get the name of the owner of the current PHP script</s>
+<s f="get_include_path" u="string get_include_path()">Get the current include_path configuration option</s>
+<s f="get_magic_quotes_gpc" u="int get_magic_quotes_gpc(void)">Get the current active configuration setting of magic_quotes_gpc</s>
+<s f="get_magic_quotes_runtime" u="int get_magic_quotes_runtime(void)">Get the current active configuration setting of magic_quotes_runtime</s>
+<s f="getenv" u="string getenv(string varname)">Get the value of an environment variable</s>
+<s f="getopt" u="array getopt(string options [, array longopts])">Get options from the command line argument list</s>
+<s f="getprotobyname" u="int getprotobyname(string name)">Returns protocol number associated with name as per /etc/protocols</s>
+<s f="getprotobynumber" u="string getprotobynumber(int proto)">Returns protocol name associated with protocol number proto</s>
+<s f="getservbyname" u="int getservbyname(string service, string protocol)">Returns port associated with service. Protocol must be "tcp" or "udp"</s>
+<s f="getservbyport" u="string getservbyport(int port, string protocol)">Returns service name associated with port. Protocol must be "tcp" or "udp"</s>
+<s f="highlight_file" u="bool highlight_file(string file_name [, bool return] )">Syntax highlight a source file</s>
+<s f="highlight_string" u="bool highlight_string(string string [, bool return] )">Syntax highlight a string or optionally return it</s>
+<s f="ignore_user_abort" u="int ignore_user_abort(bool value)">Set whether we want to ignore a user abort event or not</s>
+<s f="import_request_variables" u="bool import_request_variables(string types [, string prefix])">Import GET/POST/Cookie variables into the global scope</s>
+<s f="ini_get" u="string ini_get(string varname)">Get a configuration option</s>
+<s f="ini_get_all" u="array ini_get_all([string extension])">Get all configuration options</s>
+<s f="ini_restore" u="void ini_restore(string varname)">Restore the value of a configuration option specified by varname</s>
+<s f="ini_set" u="string ini_set(string varname, string newvalue)">Set a configuration option, returns false on error and the old value of the configuration option on success</s>
+<s f="is_uploaded_file" u="bool is_uploaded_file(string path)">Check if file was created by rfc1867 upload</s>
+<s f="move_uploaded_file" u="bool move_uploaded_file(string path, string new_path)">Move a file if and only if it was created by an upload</s>
+<s f="parse_ini_file" u="array parse_ini_file(string filename [, bool process_sections])">Parse configuration file</s>
+<s f="php_check_syntax" u="bool php_check_syntax(string file_name [, &amp;$error_message])">Check the syntax of the specified file.</s>
+<s f="php_strip_whitespace" u="string php_strip_whitespace(string file_name)">Return source with stripped comments and whitespace</s>
+<s f="print_r" u="mixed print_r(mixed var [, bool return])">Prints out or returns information about the specified variable</s>
+<s f="putenv" u="bool putenv(string setting)">Set the value of an environment variable</s>
+<s f="register_shutdown_function" u="void register_shutdown_function(string function_name)">Register a user-level function to be called on request termination</s>
+<s f="register_tick_function" u="bool register_tick_function(string function_name [, mixed arg [, mixed ... ]])">Registers a tick callback function</s>
+<s f="restore_include_path" u="void restore_include_path()">Restore the value of the include_path configuration option</s>
+<s f="set_include_path" u="string set_include_path(string varname, string newvalue)">Sets the include_path configuration option</s>
+<s f="set_magic_quotes_runtime" u="bool set_magic_quotes_runtime(int new_setting)">Set the current active configuration setting of magic_quotes_runtime and return previous</s>
+<s f="sleep" u="void sleep(int seconds)">Delay for a given number of seconds</s>
+<s f="time_nanosleep" u="mixed time_nanosleep(long seconds, long nanoseconds)">Delay for a number of seconds and nano seconds</s>
+<s f="unregister_tick_function" u="void unregister_tick_function(string function_name)">Unregisters a tick callback function</s>
+<s f="usleep" u="void usleep(int micro_seconds)">Delay for a given number of micro seconds</s>
+<s f="get_browser" u="mixed get_browser([string browser_name [, bool return_array]])">Get information about the capabilities of a browser. If browser_name is omitted     or null, HTTP_USER_AGENT is used. Returns an object by default; if return_array     is true, returns an array.</s>
+<s f="crypt" u="string crypt(string str [, string salt])">Encrypt a string</s>
+<s f="convert_cyr_string" u="string convert_cyr_string(string str, string from, string to)">Convert from one Cyrillic character set to another</s>
+<s f="checkdate" u="bool checkdate(int month, int day, int year)">Returns true(1) if it is a valid date in gregorian calendar</s>
+<s f="date" u="string date(string format [, int timestamp])">Format a local time/date</s>
+<s f="getdate" u="array getdate([int timestamp])">Get date/time information</s>
+<s f="gmdate" u="string gmdate(string format [, int timestamp])">Format a GMT/UTC date/time</s>
+<s f="gmmktime" u="int gmmktime(int hour, int min, int sec, int mon, int day, int year)">Get UNIX timestamp for a GMT date</s>
+<s f="gmstrftime" u="string gmstrftime(string format [, int timestamp])">Format a GMT/UCT time/date according to locale settings</s>
+<s f="idate" u="int idate(string format [, int timestamp])">Format a local time/date as integer</s>
+<s f="localtime" u="array localtime([int timestamp [, bool associative_array]])">Returns the results of the C system call localtime as an associative array if the associative_array argument is set to 1 other wise it is a regular array</s>
+<s f="mktime" u="int mktime(int hour, int min, int sec, int mon, int day, int year)">Get UNIX timestamp for a date</s>
+<s f="strftime" u="string strftime(string format [, int timestamp])">Format a local time/date according to locale settings</s>
+<s f="strtotime" u="int strtotime(string time, int now)">Convert string representation of date and time to a timestamp</s>
+<s f="time" u="int time(void)">Return current UNIX timestamp</s>
+<s f="chdir" u="bool chdir(string directory)">Change the current directory</s>
+<s f="chroot" u="bool chroot(string directory)">Change root directory</s>
+<s f="closedir" u="void closedir([resource dir_handle])">Close directory connection identified by the dir_handle</s>
+<s f="dir" u="object dir(string directory[, resource context])">Directory class with properties, handle and class and methods read, rewind and close</s>
+<s f="getcwd" u="mixed getcwd(void)">Gets the current directory</s>
+<s f="glob" u="array glob(string pattern [, int flags])">Find pathnames matching a pattern</s>
+<s f="opendir" u="mixed opendir(string path[, resource context])">Open a directory and return a dir_handle</s>
+<s f="readdir" u="string readdir([resource dir_handle])">Read directory entry from dir_handle</s>
+<s f="rewinddir" u="void rewinddir([resource dir_handle])">Rewind dir_handle back to the start</s>
+<s f="scandir" u="array scandir(string dir [, int sorting_order [, resource context]])">List files &amp; directories inside the specified path</s>
+<s f="dl" u="int dl(string extension_filename)">Load a PHP extension at runtime</s>
+<s f="dns_check_record" u="int dns_check_record(string host [, string type])">Check DNS records corresponding to a given Internet host name or IP address</s>
+<s f="dns_get_mx" u="bool dns_get_mx(string hostname, array mxhosts [, array weight])">Get MX records corresponding to a given Internet host name</s>
+<s f="gethostbyaddr" u="string gethostbyaddr(string ip_address)">Get the Internet host name corresponding to a given IP address</s>
+<s f="gethostbyname" u="string gethostbyname(string hostname)">Get the IP address corresponding to a given Internet host name</s>
+<s f="gethostbynamel" u="array gethostbynamel(string hostname)">Return a list of IP addresses that a given hostname resolves to.</s>
+<s f="escapeshellarg" u="string escapeshellarg(string arg)">Quote and escape an argument for use in a shell command</s>
+<s f="escapeshellcmd" u="string escapeshellcmd(string command)">Escape shell metacharacters</s>
+<s f="exec" u="string exec(string command [, array &amp;output [, int &amp;return_value]])">Execute an external program</s>
+<s f="passthru" u="void passthru(string command [, int &amp;return_value])">Execute an external program and display raw output</s>
+<s f="proc_nice" u="bool proc_nice(int priority)">Change the priority of the current process</s>
+<s f="shell_exec" u="string shell_exec(string cmd)">Execute command via shell and return complete output as string</s>
+<s f="system" u="int system(string command [, int &amp;return_value])">Execute an external program and display output</s>
+<s f="copy" u="bool copy(string source_file, string destination_file)">Copy a file</s>
+<s f="fclose" u="bool fclose(resource fp)">Close an open file pointer</s>
+<s f="feof" u="bool feof(resource fp)">Test for end-of-file on a file pointer</s>
+<s f="fflush" u="bool fflush(resource fp)">Flushes output</s>
+<s f="fgetc" u="string fgetc(resource fp)">Get a character from file pointer</s>
+<s f="fgetcsv" u="array fgetcsv(resource fp [,int length [, string delimiter [, string enclosure]]])">Get line from file pointer and parse for CSV fields</s>
+<s f="fgets" u="string fgets(resource fp[, int length])">Get a line from file pointer</s>
+<s f="fgetss" u="string fgetss(resource fp [, int length, string allowable_tags])">Get a line from file pointer and strip HTML tags</s>
+<s f="file" u="array file(string filename [, int flags[, resource context]])">Read entire file into an array</s>
+<s f="file_get_contents" u="string file_get_contents(string filename [, bool use_include_path [, resource context]])">Read the entire file into a string</s>
+<s f="file_put_contents" u="int file_put_contents(string file, mixed data [, int flags [, resource context]])">Write/Create a file with contents data and return the number of bytes written</s>
+<s f="flock" u="bool flock(resource fp, int operation [, int &amp;wouldblock])">Portable file locking</s>
+<s f="fnmatch" u="bool fnmatch(string pattern, string filename [, int flags])">Match filename against pattern</s>
+<s f="fopen" u="resource fopen(string filename, string mode [, bool use_include_path [, resource context]])">Open a file or a URL and return a file pointer</s>
+<s f="fpassthru" u="int fpassthru(resource fp)">Output all remaining data from a file pointer</s>
+<s f="fread" u="string fread(resource fp, int length)">Binary-safe file read</s>
+<s f="fscanf" u="mixed fscanf(resource stream, string format [, string ...])">Implements a mostly ANSI compatible fscanf()</s>
+<s f="fseek" u="int fseek(resource fp, int offset [, int whence])">Seek on a file pointer</s>
+<s f="fstat" u="int fstat(resource fp)">Stat() on a filehandle</s>
+<s f="ftell" u="int ftell(resource fp)">Get file pointer's read/write position</s>
+<s f="ftruncate" u="bool ftruncate(resource fp, int size)">Truncate file to 'size' length</s>
+<s f="fwrite" u="int fwrite(resource fp, string str [, int length])">Binary-safe file write</s>
+<s f="get_meta_tags" u="array get_meta_tags(string filename [, bool use_include_path])">Extracts all meta tag content attributes from a file and returns an array</s>
+<s f="mkdir" u="int mkdir(char *dir int mode)"/>
+<s f="mkdir" u="bool mkdir(string pathname [, int mode [, bool recursive [, resource context]]])">Create a directory</s>
+<s f="pclose" u="int pclose(resource fp)">Close a file pointer opened by popen()</s>
+<s f="popen" u="resource popen(string command, string mode)">Execute a command and open either a read or a write pipe to it</s>
+<s f="readfile" u="int readfile(string filename [, bool use_include_path[, resource context]])">Output a file or a URL</s>
+<s f="realpath" u="string realpath(string path)">Return the resolved path</s>
+<s f="rename" u="bool rename(string old_name, string new_name[, resource context])">Rename a file</s>
+<s f="rewind" u="bool rewind(resource fp)">Rewind the position of a file pointer</s>
+<s f="rmdir" u="bool rmdir(string dirname[, resource context])">Remove a directory</s>
+<s f="tempnam" u="string tempnam(string dir, string prefix)">Create a unique filename in a directory</s>
+<s f="tmpfile" u="resource tmpfile(void)">Create a temporary file that will be deleted automatically after use</s>
+<s f="umask" u="int umask([int mask])">Return or change the umask</s>
+<s f="unlink" u="bool unlink(string filename[, context context])">Delete a file</s>
+<s f="chgrp" u="bool chgrp(string filename, mixed group)">Change file group</s>
+<s f="chmod" u="bool chmod(string filename, int mode)">Change file mode</s>
+<s f="clearstatcache" u="void clearstatcache(void)">Clear file stat cache</s>
+<s f="disk_free_space" u="float disk_free_space(string path)">Get free disk space for filesystem that path is on</s>
+<s f="disk_total_space" u="float disk_total_space(string path)">Get total disk space for filesystem that path is on</s>
+<s f="file_exists" u="bool file_exists(string filename)">Returns true if filename exists</s>
+<s f="fileatime" u="int fileatime(string filename)">Get last access time of file</s>
+<s f="filectime" u="int filectime(string filename)">Get inode modification time of file</s>
+<s f="filegroup" u="int filegroup(string filename)">Get file group</s>
+<s f="fileinode" u="int fileinode(string filename)">Get file inode</s>
+<s f="filemtime" u="int filemtime(string filename)">Get last modification time of file</s>
+<s f="fileowner" u="int fileowner(string filename)">Get file owner</s>
+<s f="fileperms" u="int fileperms(string filename)">Get file permissions</s>
+<s f="filesize" u="int filesize(string filename)">Get file size</s>
+<s f="filetype" u="string filetype(string filename)">Get file type</s>
+<s f="is_dir" u="bool is_dir(string filename)">Returns true if file is directory</s>
+<s f="is_executable" u="bool is_executable(string filename)">Returns true if file is executable</s>
+<s f="is_file" u="bool is_file(string filename)">Returns true if file is a regular file</s>
+<s f="is_link" u="bool is_link(string filename)">Returns true if file is symbolic link</s>
+<s f="is_readable" u="bool is_readable(string filename)">Returns true if file can be read</s>
+<s f="is_writable" u="bool is_writable(string filename)">Returns true if file can be written</s>
+<s f="lstat" u="array lstat(string filename)">Give information about a file or symbolic link</s>
+<s f="stat" u="array stat(string filename)">Give information about a file</s>
+<s f="touch" u="bool touch(string filename [, int time [, int atime]])">Set modification time of file</s>
+<s f="fprintf" u="int fprintf(resource stream, string format [, mixed arg1 [, mixed ...]])">Output a formatted string into a stream</s>
+<s f="printf" u="int printf(string format [, mixed arg1 [, mixed ...]])">Output a formatted string</s>
+<s f="sprintf" u="string sprintf(string format [, mixed arg1 [, mixed ...]])">Return a formatted string</s>
+<s f="vfprintf" u="int vfprintf(resource stream, string format, array args)">Output a formatted string into a stream</s>
+<s f="vprintf" u="int vprintf(string format, array args)">Output a formatted string</s>
+<s f="vsprintf" u="string vsprintf(string format, array args)">Return a formatted string</s>
+<s f="fsockopen" u="resource fsockopen(string hostname, int port [, int errno [, string errstr [, float timeout]]])">Open Internet or Unix domain socket connection</s>
+<s f="pfsockopen" u="resource pfsockopen(string hostname, int port [, int errno [, string errstr [, float timeout]]])">Open persistent Internet or Unix domain socket connection</s>
+<s f="ftok" u="int ftok(string pathname, string proj)">Convert a pathname and a project identifier to a System V IPC key</s>
+<s f="header" u="void header(string header [, bool replace, [int http_response_code]])">Sends a raw HTTP header</s>
+<s f="headers_list" u="string headers_list(void)">Return list of headers to be sent / already sent</s>
+<s f="headers_sent" u="bool headers_sent([string &amp;$file [, int &amp;$line]])">Returns true if headers have already been sent, false otherwise</s>
+<s f="setcookie" u="bool setcookie(string name [, string value [, int expires [, string path [, string domain [, bool secure]]]]])">Send a cookie</s>
+<s f="setrawcookie" u="bool setrawcookie(string name [, string value [, int expires [, string path [, string domain [, bool secure]]]]])">Send a cookie with no url encoding of the value</s>
+<s f="get_html_translation_table" u="array get_html_translation_table([int table [, int quote_style]])">Returns the internal translation table used by htmlspecialchars and htmlentities</s>
+<s f="html_entity_decode" u="string html_entity_decode(string string [, int quote_style][, string charset])">Convert all HTML entities to their applicable characters</s>
+<s f="htmlentities" u="string htmlentities(string string [, int quote_style][, string charset])">Convert all applicable characters to HTML entities</s>
+<s f="htmlspecialchars" u="string htmlspecialchars(string string [, int quote_style][, string charset])">Convert special characters to HTML entities</s>
+<s f="http_build_query" u="string http_build_query(mixed formdata [, string prefix])">Generates a form-encoded query string from an associative array or object.</s>
+<s f="getimagesize" u="array getimagesize(string imagefile [, array info])">Get the size of an image as 4-element array</s>
+<s f="image_type_to_extension" u="string image_type_to_extension(int imagetype [, bool include_dot])">Get file extension for image-type returned by getimagesize, exif_read_data, exif_thumbnail, exif_imagetype</s>
+<s f="image_type_to_mime_type" u="string image_type_to_mime_type(int imagetype)">Get Mime-Type for image-type returned by getimagesize, exif_read_data, exif_thumbnail, exif_imagetype</s>
+<s f="php_egg_logo_guid" u="string php_egg_logo_guid(void)">Return the special ID used to request the PHP logo in phpinfo screens</s>
+<s f="php_ini_scanned_files" u="string php_ini_scanned_files(void)">Return comma-separated string of .ini files parsed from the additional ini dir</s>
+<s f="php_logo_guid" u="string php_logo_guid(void)">Return the special ID used to request the PHP logo in phpinfo screens</s>
+<s f="php_real_logo_guid" u="string php_real_logo_guid(void)">Return the special ID used to request the PHP logo in phpinfo screens</s>
+<s f="php_sapi_name" u="string php_sapi_name(void)">Return the current SAPI module name</s>
+<s f="php_uname" u="string php_uname(void)">Return information about the system PHP was built on</s>
+<s f="phpcredits" u="void phpcredits([int flag])">Prints the list of people who've contributed to the PHP project</s>
+<s f="phpinfo" u="void phpinfo([int what])">Output a page of useful information about PHP and the current request</s>
+<s f="phpversion" u="string phpversion([string extension])">Return the current PHP version</s>
+<s f="zend_logo_guid" u="string zend_logo_guid(void)">Return the special ID used to request the Zend logo in phpinfo screens</s>
+<s f="iptcembed" u="array iptcembed(string iptcdata, string jpeg_file_name [, int spool])">Embed binary IPTC data into a JPEG image.</s>
+<s f="iptcparse" u="array iptcparse(string iptcdata)">Parse binary IPTC-data into associative array</s>
+<s f="lcg_value" u="float lcg_value()">Returns a value from the combined linear congruential generator</s>
+<s f="levenshtein" u="int levenshtein(string str1, string str2)">Calculate Levenshtein distance between two strings</s>
+<s f="link" u="int link(string target, string link)">Create a hard link</s>
+<s f="linkinfo" u="int linkinfo(string filename)">Returns the st_dev field of the UNIX C stat structure describing the link</s>
+<s f="readlink" u="string readlink(string filename)">Return the target of a symbolic link</s>
+<s f="symlink" u="int symlink(string target, string link)">Create a symbolic link</s>
+<s f="ezmlm_hash" u="int ezmlm_hash(string addr)">Calculate EZMLM list hash value.</s>
+<s f="mail" u="int mail(string to, string subject, string message [, string additional_headers [, string additional_parameters]])">Send an email message</s>
+<s f="abs" u="int abs(int number)">Return the absolute value of the number</s>
+<s f="acos" u="float acos(float number)">Return the arc cosine of the number in radians</s>
+<s f="acosh" u="float acosh(float number)">Returns the inverse hyperbolic cosine of the number, i.e. the value whose hyperbolic cosine is number</s>
+<s f="asin" u="float asin(float number)">Returns the arc sine of the number in radians</s>
+<s f="asinh" u="float asinh(float number)">Returns the inverse hyperbolic sine of the number, i.e. the value whose hyperbolic sine is number</s>
+<s f="atan" u="float atan(float number)">Returns the arc tangent of the number in radians</s>
+<s f="atanh" u="float atanh(float number)">Returns the inverse hyperbolic tangent of the number, i.e. the value whose hyperbolic tangent is number</s>
+<s f="base_convert" u="string base_convert(string number, int frombase, int tobase)">Converts a number in a string from any base &lt;= 36 to any base &lt;= 36</s>
+<s f="bindec" u="int bindec(string binary_number)">Returns the decimal equivalent of the binary number</s>
+<s f="ceil" u="float ceil(float number)">Returns the next highest integer value of the number</s> 
+<s f="cos" u="float cos(float number)">Returns the cosine of the number in radians</s>
+<s f="cosh" u="float cosh(float number)">Returns the hyperbolic cosine of the number, defined as (exp(number)      exp(-number))/2</s>
+<s f="decbin" u="string decbin(int decimal_number)">Returns a string containing a binary representation of the number</s>
+<s f="dechex" u="string dechex(int decimal_number)">Returns a string containing a hexadecimal representation of the given number</s>
+<s f="decoct" u="string decoct(int decimal_number)">Returns a string containing an octal representation of the given number</s>
+<s f="exp" u="float exp(float number)">Returns e raised to the power of the number</s>
+<s f="floor" u="float floor(float number)">Returns the next lowest integer value from the number</s>
+<s f="fmod" u="float fmod(float x, float y)">Returns the remainder of dividing x by y as a float</s>
+<s f="hexdec" u="int hexdec(string hexadecimal_number)">Returns the decimal equivalent of the hexadecimal number</s>
+<s f="hypot" u="float hypot(float num1, float num2)">Returns sqrt(num1*num1      num2*num2)</s>
+<s f="is_finite" u="bool is_finite(float val)">Returns whether argument is finite</s>
+<s f="is_infinite" u="bool is_infinite(float val)">Returns whether argument is infinite</s>
+<s f="is_nan" u="bool is_nan(float val)">Returns whether argument is not a number</s>
+<s f="log" u="float log(float number, [float base])">Returns the natural logarithm of the number, or the base log if base is specified</s>
+<s f="number_format" u="string number_format(float number [, int num_decimal_places [, string dec_seperator, string thousands_seperator]])">Formats a number with grouped thousands</s>
+<s f="octdec" u="int octdec(string octal_number)">Returns the decimal equivalent of an octal string</s>
+<s f="pi" u="float pi(void)">Returns an approximation of pi</s>
+<s f="pow" u="number pow(number base, number exponent)">Returns base raised to the power of exponent. Returns integer result when possible</s>
+<s f="round" u="float round(float number [, int precision])">Returns the number rounded to specified precision</s>
+<s f="sin" u="float sin(float number)">Returns the sine of the number in radians</s>
+<s f="sinh" u="float sinh(float number)">Returns the hyperbolic sine of the number, defined as (exp(number) - exp(-number))/2</s>
+<s f="sqrt" u="float sqrt(float number)">Returns the square root of the number</s>
+<s f="tan" u="float tan(float number)">Returns the tangent of the number in radians</s>
+<s f="tanh" u="float tanh(float number)">Returns the hyperbolic tangent of the number, defined as sinh(number)/cosh(number)</s>
+<s f="metaphone" u="string metaphone(string text, int phones)">Break english phrases down into their phonemes</s>
+<s f="getrusage" u="array getrusage([int who])">Returns an array of usage statistics</s>
+<s f="gettimeofday" u="array gettimeofday(void)">Returns the current time as array</s>
+<s f="microtime" u="mixed microtime([bool get_as_float])">Returns either a string or a float containing the current time in seconds and microseconds</s>
+<s f="pack" u="string pack(string format, mixed arg1 [, mixed arg2 [, mixed ...]])">Takes one or more arguments and packs them into a binary string according to the format argument</s>
+<s f="unpack" u="array unpack(string format, string input)">Unpack binary string into named array elements according to format argument</s>
+<s f="getlastmod" u="int getlastmod(void)">Get time of last page modification</s>
+<s f="getmygid" u="int getmygid(void)">Get PHP script owner's GID</s>
+<s f="getmyinode" u="int getmyinode(void)">Get the inode of the current script being parsed</s>
+<s f="getmypid" u="int getmypid(void)">Get current process ID</s>
+<s f="getmyuid" u="int getmyuid(void)">Get PHP script owner's UID</s>
+<s f="proc_close" u="int proc_close(resource process)">close a process opened by proc_open</s>
+<s f="proc_get_status" u="array proc_get_status(resource process)">get information about a process opened by proc_open</s>
+<s f="proc_open" u="resource proc_open(string command, array descriptorspec, array &amp;pipes [, string cwd [, array env [, array other_options]]])">Run a process with more control over it's file descriptors</s>
+<s f="proc_terminate" u="int proc_terminate(resource process [, long signal])">kill a process opened by proc_open</s>
+<s f="quoted_printable_decode" u="string quoted_printable_decode(string str)">Convert a quoted-printable string to an 8 bit string</s>
+<s f="getrandmax" u="int getrandmax(void)">Returns the maximum value a random number can have</s>
+<s f="mt_getrandmax" u="int mt_getrandmax(void)">Returns the maximum value a random number from Mersenne Twister can have</s>
+<s f="mt_rand" u="int mt_rand([int min, int max])">Returns a random number from Mersenne Twister</s>
+<s f="mt_srand" u="void mt_srand([int seed])">Seeds Mersenne Twister random number generator</s>
+<s f="rand" u="int rand([int min, int max])">Returns a random number</s>
+<s f="srand" u="void srand([int seed])">Seeds random number generator</s>
+<s f="ereg" u="int ereg(string pattern, string string [, array registers])">Regular expression match</s>
+<s f="ereg_replace" u="string ereg_replace(string pattern, string replacement, string string)">Replace regular expression</s>
+<s f="eregi" u="int eregi(string pattern, string string [, array registers])">Case-insensitive regular expression match</s>
+<s f="eregi_replace" u="string eregi_replace(string pattern, string replacement, string string)">Case insensitive replace regular expression</s>
+<s f="split" u="array split(string pattern, string string [, int limit])">Split string into array by regular expression</s>
+<s f="spliti" u="array spliti(string pattern, string string [, int limit])">Split string into array by regular expression case-insensitive</s>
+<s f="sql_regcase" u="string sql_regcase(string string)">Make regular expression for case insensitive match</s>
+<s f="soundex" u="string soundex(string str)">Calculate the soundex key of a string</s>
+<s f="set_socket_blocking" u="bool set_socket_blocking(resource socket, int mode)">Set blocking/non-blocking mode on a socket</s>
+<s f="stream_context_create" u="resource stream_context_create([array options])">Create a file context and optionally set parameters</s>
+<s f="stream_context_get_options" u="array stream_context_get_options(resource context|resource stream)">Retrieve options for a stream/wrapper/context</s>
+<s f="stream_context_set_option" u="bool stream_context_set_option(resource context|resource stream, string wrappername, string optionname, mixed value)">Set an option for a wrapper</s>
+<s f="stream_context_set_params" u="bool stream_context_set_params(resource context|resource stream, array options)">Set parameters for a file context</s>
+<s f="stream_copy_to_stream" u="long stream_copy_to_stream(resource source, resource dest [, long maxlen ])">Reads up to maxlen bytes from source stream and writes them to dest stream.</s>
+<s f="stream_filter_append" u="bool stream_filter_append(resource stream, string filtername[, int read_write[, string filterparams]])">Append a filter to a stream</s>
+<s f="stream_filter_prepend" u="bool stream_filter_prepend(resource stream, string filtername[, int read_write[, string filterparams]])">Prepend a filter to a stream</s>
+<s f="stream_get_contents" u="long stream_get_contents(resource source [, long maxlen ])">Reads all remaining bytes (or up to maxlen bytes) from a stream and returns them as a string.</s>
+<s f="stream_get_line" u="string stream_get_line(resource stream, int maxlen, string ending)">Read up to maxlen bytes from a stream or until the ending string is found</s>
+<s f="stream_get_meta_data" u="resource stream_get_meta_data(resource fp)">Retrieves header/meta data from streams/file pointers</s>
+<s f="stream_get_transports" u="array stream_get_transports()">Retrieves list of registered socket transports</s>
+<s f="stream_get_wrappers" u="array stream_get_wrappers()">Retrieves list of registered stream wrappers</s>
+<s f="stream_select" u="int stream_select(array &amp;read_streams, array &amp;write_streams, array &amp;except_streams, int tv_sec[, int tv_usec])">Runs the select() system call on the sets of streams with a timeout specified by tv_sec and tv_usec</s>
+<s f="stream_set_blocking" u="bool stream_set_blocking(resource socket, int mode)">Set blocking/non-blocking mode on a socket or stream</s>
+<s f="stream_set_timeout" u="bool stream_set_timeout(resource stream, int seconds, int microseconds)">Set timeout on stream read to seconds      microseonds</s>
+<s f="stream_set_write_buffer" u="int stream_set_write_buffer(resource fp, int buffer)">Set file write buffer</s>
+<s f="stream_socket_accept" u="resource stream_socket_accept(resource serverstream, [ double timeout, string &amp;peername ])">Accept a client connection from a server socket</s>
+<s f="stream_socket_client" u="resource stream_socket_client(string remoteaddress [, long &amp;errcode, string &amp;errstring, double timeout, long flags, resource context])">Open a client connection to a remote address</s>
+<s f="stream_socket_get_name" u="string stream_socket_get_name(resource stream, bool want_peer)">Returns either the locally bound or remote name for a socket stream</s>
+<s f="stream_socket_recvfrom" u="string stream_socket_recvfrom(resource stream, long amount [, long flags [, string &amp;remote_addr]])">Receives data from a socket stream</s>
+<s f="stream_socket_sendto" u="long stream_socket_sendto(resouce stream, string data [, long flags [, string target_addr]])">Send data to a socket stream.  If target_addr is specified it must be in dotted quad (or [ipv6]) format</s>
+<s f="stream_socket_server" u="resource stream_socket_server(string localaddress [, long &amp;errcode, string &amp;errstring, long flags, resource context])">Create a server socket bound to localaddress</s>
+<s f="addcslashes" u="string addcslashes(string str, string charlist)">Escapes all chars mentioned in charlist with backslash. It creates octal representations if asked to backslash characters with 8th bit set or with ASCII&lt;32 (except '\n', '\r', '\t' etc...)</s>
+<s f="addslashes" u="string addslashes(string str)">Escapes single quote, double quotes and backslash characters in a string with backslashes</s>
+<s f="basename" u="string basename(string path [, string suffix])">Returns the filename component of the path</s>
+<s f="chr" u="string chr(int ascii)">Converts ASCII code to a character</s>
+<s f="chunk_split" u="string chunk_split(string str [, int chunklen [, string ending]])">Returns split line</s>
+<s f="count_chars" u="mixed count_chars(string input [, int mode])">Returns info about what characters are used in input</s>
+<s f="dirname" u="string dirname(string path)">Returns the directory name component of the path</s>
+<s f="explode" u="array explode(string separator, string str [, int limit])">Splits a string on string separator and return array of components</s>
+<s f="hebrev" u="string hebrev(string str [, int max_chars_per_line])">Converts logical Hebrew text to visual text</s>
+<s f="hebrevc" u="string hebrevc(string str [, int max_chars_per_line])">Converts logical Hebrew text to visual text with newline conversion</s>
+<s f="implode" u="string implode([string glue,] array pieces)">Joins array elements placing glue string between items and return one string</s>
+<s f="join" u="string join(array src, string glue)">An alias for implode</s>
+<s f="localeconv" u="array localeconv(void)">Returns numeric formatting information based on the current locale</s>
+<s f="ltrim" u="string ltrim(string str [, string character_mask])">Strips whitespace from the beginning of a string</s>
+<s f="money_format" u="string money_format(string format , float value)">Convert monetary value(s) to string</s>
+<s f="nl_langinfo" u="string nl_langinfo(int item)">Query language and locale information</s>
+<s f="ord" u="int ord(string character)">Returns ASCII value of character</s>
+<s f="parse_str" u="void parse_str(string encoded_string [, array result])">Parses GET/POST/COOKIE data and sets global variables</s>
+<s f="pathinfo" u="array pathinfo(string path)">Returns information about a certain string</s>
+<s f="quotemeta" u="string quotemeta(string str)">Quotes meta characters</s>
+<s f="rtrim" u="string rtrim(string str [, string character_mask])">Removes trailing whitespace</s>
+<s f="setlocale" u="string setlocale(mixed category, string locale [, string ...])">Set locale information</s>
+<s f="similar_text" u="int similar_text(string str1, string str2 [, float percent])">Calculates the similarity between two strings</s>
+<s f="sscanf" u="mixed sscanf(string str, string format [, string ...])">Implements an ANSI C compatible sscanf</s>
+<s f="str_ireplace" u="mixed str_ireplace(mixed search, mixed replace, mixed subject [, int &amp;replace_count])">Replaces all occurrences of search in haystack with replace / case-insensitive</s>
+<s f="str_pad" u="string str_pad(string input, int pad_length [, string pad_string [, int pad_type]])">Returns input string padded on the left or right to specified length with pad_string</s>
+<s f="str_repeat" u="string str_repeat(string input, int mult)">Returns the input string repeat mult times</s>
+<s f="str_replace" u="mixed str_replace(mixed search, mixed replace, mixed subject [, int &amp;replace_count])">Replaces all occurrences of search in haystack with replace</s>
+<s f="str_shuffle" u="void str_shuffle(string str)">Shuffles string. One permutation of all possible is created</s>
+<s f="str_split" u="array str_split(string str [, int split_length])">Convert a string to an array. If split_length is specified, break the string down into chunks each split_length characters long.</s>
+<s f="str_word_count" u="mixed str_word_count(string str, [int format])">Counts the number of words inside a string. If format of 1 is specified,      then the function will return an array containing all the words         found inside the string. If format of 2 is specified, then the function         will return an associated array where the position of the word is the key       and the word itself is the value.               For the purpose of this function, 'word' is defined as a locale dependent       string containing alphabetic characters, which also may contain, but not start          with "'" and "-" characters.</s>
+<s f="strchr" u="string strchr(string haystack, string needle)">An alias for strstr</s>
+<s f="strcoll" u="int strcoll(string str1, string str2)">Compares two strings using the current locale</s>
+<s f="strcspn" u="int strcspn(string str, string mask [, start [, len]])">Finds length of initial segment consisting entirely of characters not found in mask. If start or/and length is provide works like strcspn(substr($s,$start,$len),$bad_chars)</s>
+<s f="strip_tags" u="string strip_tags(string str [, string allowable_tags])">Strips HTML and PHP tags from a string</s>
+<s f="stripcslashes" u="string stripcslashes(string str)">Strips backslashes from a string. Uses C-style conventions</s>
+<s f="stripos" u="int stripos(string haystack, string needle [, int offset])">Finds position of first occurrence of a string within another, case insensitive</s>
+<s f="stripslashes" u="string stripslashes(string str)">Strips backslashes from a string</s>
+<s f="stristr" u="string stristr(string haystack, string needle)">Finds first occurrence of a string within another, case insensitive</s>
+<s f="strnatcasecmp" u="int strnatcasecmp(string s1, string s2)">Returns the result of case-insensitive string comparison using 'natural' algorithm</s>
+<s f="strnatcmp" u="int strnatcmp(string s1, string s2)">Returns the result of string comparison using 'natural' algorithm</s>
+<s f="strpbrk" u="array strpbrk(string haystack, string char_list)">Search a string for any of a set of characters</s>
+<s f="strpos" u="int strpos(string haystack, string needle [, int offset])">Finds position of first occurrence of a string within another</s>
+<s f="strrchr" u="string strrchr(string haystack, string needle)">Finds the last occurrence of a character in a string within another</s>
+<s f="strrev" u="string strrev(string str)">Reverse a string</s>
+<s f="strripos" u="int strripos(string haystack, string needle [, int offset])">Finds position of last occurrence of a string within another string</s>
+<s f="strrpos" u="int strrpos(string haystack, string needle [, int offset])">Finds position of last occurrence of a string within another string</s>
+<s f="strspn" u="int strspn(string str, string mask [, start [, len]])">Finds length of initial segment consisting entirely of characters found in mask. If start or/and length is provided works like strspn(substr($s,$start,$len),$good_chars)</s>
+<s f="strstr" u="string strstr(string haystack, string needle)">Finds first occurrence of a string within another</s>
+<s f="strtok" u="string strtok([string str,] string token)">Tokenize a string</s>
+<s f="strtolower" u="string strtolower(string str)">Makes a string lowercase</s>
+<s f="strtoupper" u="string strtoupper(string str)">Makes a string uppercase</s>
+<s f="strtr" u="string strtr(string str, string from, string to)">Translates characters in str using given translation tables</s>
+<s f="substr" u="string substr(string str, int start [, int length])">Returns part of a string</s>
+<s f="substr_compare" u="int substr_compare(string main_str, string str, int offset [, int length [, bool case_sensitivity]])">Binary safe optionally case insensitive comparison of 2 strings from an offset, up to length characters</s>
+<s f="substr_count" u="int substr_count(string haystack, string needle)">Returns the number of times a substring occurs in the string</s>
+<s f="substr_replace" u="mixed substr_replace(mixed str, mixed repl, mixed start [, mixed length])">Replaces part of a string with another string</s>
+<s f="trim" u="string trim(string str [, string character_mask])">Strips whitespace from the beginning and end of a string</s>
+<s f="ucfirst" u="string ucfirst(string str)">Makes a string's first character uppercase</s>
+<s f="ucwords" u="string ucwords(string str)">Uppercase the first character of every word in a string</s>
+<s f="wordwrap" u="string wordwrap(string str [, int width [, string break [, boolean cut]]])">Wraps buffer to selected number of characters using string break char</s>
+<s f="date_sunrise" u="mixed date_sunrise(mixed time [, int format [, float latitude [, float longitude [, float zenith [, float gmt_offset]]]]])">Returns time of sunrise for a given day &amp; location</s>
+<s f="date_sunset" u="mixed date_sunset(mixed time [, int format [, float latitude [, float longitude [, float zenith [, float gmt_offset]]]]])">Returns time of sunset for a given day &amp; location</s>
+<s f="closelog" u="bool closelog(void)">Close connection to system logger</s>
+<s f="define_syslog_variables" u="void define_syslog_variables(void)">Initializes all syslog-related variables</s>
+<s f="openlog" u="bool openlog(string ident, int option, int facility)">Open connection to system logger</s>
+<s f="syslog" u="bool syslog(int priority, string message)">Generate a system log message</s>
+<s f="floatval" u="float floatval(mixed var)">Get the float value of a variable</s> 
+<s f="gettype" u="string gettype(mixed var)">Returns the type of the variable</s>
+<s f="intval" u="int intval(mixed var [, int base])">Get the integer value of a variable using the optional base for the conversion</s>
+<s f="is_array" u="bool is_array(mixed var)">Returns true if variable is an array</s>
+<s f="is_bool" u="bool is_bool(mixed var)">Returns true if variable is a boolean</s>
+<s f="is_callable" u="bool is_callable(mixed var [, bool syntax_only [, string callable_name]])">Returns true if var is callable.</s>
+<s f="is_float" u="bool is_float(mixed var)">Returns true if variable is float point</s>
+<s f="is_long" u="bool is_long(mixed var)">Returns true if variable is a long (integer)</s>
+<s f="is_null" u="bool is_null(mixed var)">Returns true if variable is null</s>
+<s f="is_numeric" u="bool is_numeric(mixed value)">Returns true if value is a number or a numeric string</s>
+<s f="is_object" u="bool is_object(mixed var)">Returns true if variable is an object</s>
+<s f="is_resource" u="bool is_resource(mixed var)">Returns true if variable is a resource</s>
+<s f="is_scalar" u="bool is_scalar(mixed value)">Returns true if value is a scalar</s>
+<s f="is_string" u="bool is_string(mixed var)">Returns true if variable is a string</s>
+<s f="settype" u="bool settype(mixed var, string type)">Set the type of the variable</s>
+<s f="strval" u="string strval(mixed var)">Get the string value of a variable</s>
+<s f="uniqid" u="string uniqid([string prefix , bool more_entropy])">Generates a unique ID</s>
+<s f="get_headers" u="array get_headers(string url)">fetches all the headers sent by the server in response to a HTTP request</s>
+<s f="parse_url" u="array parse_url(string url)">Parse a URL and return its components</s>
+<s f="rawurldecode" u="string rawurldecode(string str)">Decodes URL-encodes string</s>
+<s f="rawurlencode" u="string rawurlencode(string str)">URL-encodes string</s>
+<s f="urldecode" u="string urldecode(string str)">Decodes URL-encoded string</s>
+<s f="urlencode" u="string urlencode(string str)">URL-encodes string</s>
+<s f="stream_bucket_append" u="void stream_bucket_append(resource brigade, resource bucket)">Append bucket to brigade</s>
+<s f="stream_bucket_make_writeable" u="object stream_bucket_make_writeable(resource brigade)">Return a bucket object from the brigade for operating on</s>
+<s f="stream_bucket_new" u="resource stream_bucket_new(resource stream, string buffer)">Create a new bucket for use on the current stream</s>
+<s f="stream_bucket_prepend" u="void stream_bucket_prepend(resource brigade, resource bucket)">Prepend bucket to brigade</s>
+<s f="stream_filter_register" u="bool stream_filter_register(string filtername, string classname)">Registers a custom filter handler class</s>
+<s f="stream_get_filters" u="array stream_get_filters(void)">Returns a list of registered filters</s>
+<s f="uudecode" u="string uudecode(string data)">decode a uuencoded string</s>
+<s f="uuencode" u="string uuencode(string data)">uuencode a string</s>
+<s f="debug_zval_dump" u="void debug_zval_dump(mixed var)">Dumps a string representation of an internal zend value to output.</s>
+<s f="memory_get_usage" u="int memory_get_usage()">Returns the allocated by PHP memory</s>
+<s f="serialize" u="string serialize(mixed variable)">Returns a string representation of variable (which can later be unserialized)</s>
+<s f="unserialize" u="mixed unserialize(string variable_representation)">Takes a string representation of variable and recreates it</s>
+<s f="var_dump" u="void var_dump(mixed var)">Dumps a string representation of variable to output</s>
+<s f="var_export" u="mixed var_export(mixed var [, bool return])">Outputs or returns a string representation of a variable</s>
+<s f="version_compare" u="int version_compare(string ver1, string ver2 [, string oper])">Compares two "PHP-standardized" version number strings</s>
+<s f="sybase_affected_rows" u="int sybase_affected_rows([int link_id])">Get number of affected rows in last query</s>
+<s f="sybase_close" u="bool sybase_close([int link_id])">Close Sybase connection</s>
+<s f="sybase_connect" u="int sybase_connect([string host [, string user [, string password [, string charset [, string appname]]]]])">Open Sybase server connection</s>
+<s f="sybase_data_seek" u="bool sybase_data_seek(int result, int offset)">Move internal row pointer</s>
+<s f="sybase_fetch_array" u="array sybase_fetch_array(int result)">Fetch row as array</s>
+<s f="sybase_fetch_field" u="object sybase_fetch_field(int result [, int offset])">Get field information</s>
+<s f="sybase_fetch_object" u="object sybase_fetch_object(int result)">Fetch row as object</s>
+<s f="sybase_fetch_row" u="array sybase_fetch_row(int result)">Get row as enumerated array</s>
+<s f="sybase_field_seek" u="bool sybase_field_seek(int result, int offset)">Set field offset</s>
+<s f="sybase_free_result" u="bool sybase_free_result(int result)">Free result memory</s>
+<s f="sybase_get_last_message" u="string sybase_get_last_message(void)">Returns the last message from server (over min_message_severity)</s>
+<s f="sybase_min_error_severity" u="void sybase_min_error_severity(int severity)">Sets the minimum error severity</s>
+<s f="sybase_min_message_severity" u="void sybase_min_message_severity(int severity)">Sets the minimum message severity</s>
+<s f="sybase_num_fields" u="int sybase_num_fields(int result)">Get number of fields in result</s>
+<s f="sybase_num_rows" u="int sybase_num_rows(int result)">Get number of rows in result</s>
+<s f="sybase_pconnect" u="int sybase_pconnect([string host [, string user [, string password [, string charset [, string appname]]]]])">Open persistent Sybase connection</s>
+<s f="sybase_query" u="int sybase_query(string query [, int link_id])">Send Sybase query</s>
+<s f="sybase_result" u="string sybase_result(int result, int row, mixed field)">Get result data</s>
+<s f="sybase_select_db" u="bool sybase_select_db(string database [, int link_id])">Select Sybase database</s>
+<s f="sybase_affected_rows" u="int sybase_affected_rows([int link_id])">Get number of affected rows in last query</s>
+<s f="sybase_close" u="bool sybase_close([int link_id])">Close Sybase connection</s>
+<s f="sybase_connect" u="int sybase_connect([string host [, string user [, string password [, string charset [, string appname]]]]])">Open Sybase server connection</s>
+<s f="sybase_data_seek" u="bool sybase_data_seek(int result, int offset)">Move internal row pointer</s>
+<s f="sybase_deadlock_retry_count" u="void sybase_deadlock_retry_count(int retry_count)">Sets deadlock retry count</s>
+<s f="sybase_fetch_array" u="array sybase_fetch_array(int result)">Fetch row as array</s>
+<s f="sybase_fetch_assoc" u="array sybase_fetch_assoc(int result)">Fetch row as array without numberic indices</s>
+<s f="sybase_fetch_field" u="object sybase_fetch_field(int result [, int offset])">Get field information</s>
+<s f="sybase_fetch_object" u="object sybase_fetch_object(int result [, mixed object])">Fetch row as object</s>
+<s f="sybase_fetch_row" u="array sybase_fetch_row(int result)">Get row as enumerated array</s>
+<s f="sybase_field_seek" u="bool sybase_field_seek(int result, int offset)">Set field offset</s>
+<s f="sybase_free_result" u="bool sybase_free_result(int result)">Free result memory</s>
+<s f="sybase_get_last_message" u="string sybase_get_last_message(void)">Returns the last message from server (over min_message_severity)</s>
+<s f="sybase_min_client_severity" u="void sybase_min_client_severity(int severity)">Sets minimum client severity</s>
+<s f="sybase_min_server_severity" u="void sybase_min_server_severity(int severity)">Sets minimum server severity</s>
+<s f="sybase_num_fields" u="int sybase_num_fields(int result)">Get number of fields in result</s>
+<s f="sybase_num_rows" u="int sybase_num_rows(int result)">Get number of rows in result</s>
+<s f="sybase_pconnect" u="int sybase_pconnect([string host [, string user [, string password [, string charset [, string appname]]]]])">Open persistent Sybase connection</s>
+<s f="sybase_query" u="int sybase_query(string query [, int link_id])">Send Sybase query</s>
+<s f="sybase_result" u="string sybase_result(int result, int row, mixed field)">Get result data</s>
+<s f="sybase_select_db" u="bool sybase_select_db(string database [, int link_id])">Select Sybase database</s>
+<s f="sybase_set_message_handler" u="bool sybase_set_message_handler(mixed error_func [, resource connection])">Set the error handler, to be called when a server message is raised.      If error_func is NULL the handler will be deleted</s>
+<s f="sybase_unbuffered_query" u="int sybase_unbuffered_query(string query [, int link_id])">Send Sybase query</s>
+<s f="msg_get_queue" u="resource msg_get_queue(int key [, int perms])">Attach to a message queue</s>
+<s f="msg_receive" u="mixed msg_receive(resource queue, int desiredmsgtype, int &amp;msgtype, int maxsize, mixed message [, bool unserialize=true [, int flags=0 [, int errorcode]]])">Send a message of type msgtype (must be &gt; 0) to a message queue</s>
+<s f="msg_remove_queue" u="bool msg_remove_queue(resource queue)">Destroy the queue</s>
+<s f="msg_send" u="bool msg_send(resource queue, int msgtype, mixed message [, bool serialize=true [, bool blocking=true [, int errorcode]]])">Send a message of type msgtype (must be &gt; 0) to a message queue</s>
+<s f="msg_set_queue" u="bool msg_set_queue(resource queue, array data)">Set information for a message queue</s>
+<s f="msg_stat_queue" u="array msg_stat_queue(resource queue)">Returns information about a message queue</s>
+<s f="sem_acquire" u="bool sem_acquire(resource id)">Acquires the semaphore with the given id, blocking if necessary</s>
+<s f="sem_get" u="resource sem_get(int key [, int max_acquire [, int perm [, int auto_release]])">Return an id for the semaphore with the given key, and allow max_acquire (default 1) processes to acquire it simultaneously</s>
+<s f="sem_release" u="bool sem_release(resource id)">Releases the semaphore with the given id</s>
+<s f="sem_remove" u="bool sem_remove(resource id)">Removes semaphore from Unix systems</s>
+<s f="shm_attach" u="int shm_attach(int key [, int memsize [, int perm]])">Creates or open a shared memory segment</s>
+<s f="shm_detach" u="bool shm_detach(int shm_identifier)">Disconnects from shared memory segment</s>
+<s f="shm_get_var" u="mixed shm_get_var(int id, int variable_key)">Returns a variable from shared memory</s>
+<s f="shm_put_var" u="bool shm_put_var(int shm_identifier, int variable_key, mixed variable)">Inserts or updates a variable in shared memory</s>
+<s f="shm_remove" u="bool shm_remove(int shm_identifier)">Removes shared memory from Unix systems</s>
+<s f="shm_remove_var" u="bool shm_remove_var(int id, int variable_key)">Removes variable from shared memory</s>
+<s f="tidy_access_count" u="int tidy_access_count()">Returns the Number of Tidy accessibility warnings encountered for specified document.</s>
+<s f="tidy_clean_repair" u="boolean tidy_clean_repair()">Execute configured cleanup and repair operations on parsed markup</s>
+<s f="tidy_config_count" u="int tidy_config_count()">Returns the Number of Tidy configuration errors encountered for specified document.</s>
+<s f="tidy_diagnose" u="boolean tidy_diagnose()">Run configured diagnostics on parsed and repaired markup.</s>
+<s f="tidy_error_count" u="int tidy_error_count()">Returns the Number of Tidy errors encountered for specified document.</s>
+<s f="tidy_get_body" u="TidyNode tidy_get_body(resource tidy)">Returns a TidyNode Object starting from the &lt;BODY&gt; tag of the tidy parse tree</s>
+<s f="tidy_get_config" u="array tidy_get_config()">Get current Tidy configuarion</s>
+<s f="tidy_get_error_buffer" u="string tidy_get_error_buffer([boolean detailed])">Return warnings and errors which occured parsing the specified document</s>
+<s f="tidy_get_head" u="TidyNode tidy_get_head()">Returns a TidyNode Object starting from the &lt;HEAD&gt; tag of the tidy parse tree</s>
+<s f="tidy_get_html" u="TidyNode tidy_get_html()">Returns a TidyNode Object starting from the &lt;HTML&gt; tag of the tidy parse tree</s>
+<s f="tidy_get_html_ver" u="int tidy_get_html_ver()">Get the Detected HTML version for the specified document.</s>
+<s f="tidy_get_output" u="string tidy_get_output()">Return a string representing the parsed tidy markup</s>
+<s f="tidy_get_release" u="string tidy_get_release()">Get release date (version) for Tidy library</s>
+<s f="tidy_get_root" u="TidyNode tidy_get_root()">Returns a TidyNode Object representing the root of the tidy parse tree</s>
+<s f="tidy_get_status" u="int tidy_get_status()">Get status of specfied document.</s>
+<s f="tidy_getopt" u="mixed tidy_getopt(string option)">Returns the value of the specified configuration option for the tidy document.</s>
+<s f="tidy_is_xhtml" u="boolean tidy_is_xhtml()">Indicates if the document is a XHTML document.</s>
+<s f="tidy_is_xhtml" u="boolean tidy_is_xhtml()">Indicates if the document is a generic (non HTML/XHTML) XML document.</s>
+<s f="tidy_parse_file" u="boolean tidy_parse_file(string file [, mixed config_options [, string encoding [, bool use_include_path]]])">Parse markup in file or URI</s>
+<s f="tidy_parse_string" u="bool tidy_parse_string(string input [, mixed config_options [, string encoding]])">Parse a document stored in a string</s>
+<s f="tidy_repair_file" u="boolean tidy_repair_file(string filename [, mixed config_file [, string encoding [, bool use_include_path]]])">Repair a file using an optionally provided configuration file</s>
+<s f="tidy_repair_string" u="boolean tidy_repair_string(string data [, mixed config_file [, string encoding]])">Repair a string using an optionally provided configuration file</s>
+<s f="tidy_warning_count" u="int tidy_warning_count()">Returns the Number of Tidy warnings encountered for specified document.</s>
+<s f="token_get_all" u="array token_get_all(string source)"/>
+<s f="token_name" u="string token_name(int type)"/>
+<s f="wddx_add_vars" u="int wddx_add_vars(int packet_id,  mixed var_names [, mixed ...])">Serializes given variables and adds them to packet given by packet_id</s>
+<s f="wddx_deserialize" u="mixed wddx_deserialize(mixed packet)">Deserializes given packet and returns a PHP value</s>
+<s f="wddx_packet_end" u="string wddx_packet_end(int packet_id)">Ends specified WDDX packet and returns the string containing the packet</s>
+<s f="wddx_packet_start" u="int wddx_packet_start([string comment])">Starts a WDDX packet with optional comment and returns the packet id</s>
+<s f="wddx_serialize_value" u="string wddx_serialize_value(mixed var [, string comment])">Creates a new packet and serializes the given value</s>
+<s f="wddx_serialize_vars" u="string wddx_serialize_vars(mixed var_name [, mixed ...])">Creates a new packet and serializes given variables into a struct</s>
+<s f="xml_error_string" u="string xml_error_string(int code)">Get XML parser error string</s>
+<s f="xml_get_current_byte_index" u="int xml_get_current_byte_index(resource parser)">Get current byte index for an XML parser</s>
+<s f="xml_get_current_column_number" u="int xml_get_current_column_number(resource parser)">Get current column number for an XML parser</s>
+<s f="xml_get_current_line_number" u="int xml_get_current_line_number(resource parser)">Get current line number for an XML parser</s>
+<s f="xml_get_error_code" u="int xml_get_error_code(resource parser)">Get XML parser error code</s>
+<s f="xml_parse" u="int xml_parse(resource parser, string data [, int isFinal])">Start parsing an XML document</s>
+<s f="xml_parse_into_struct" u="int xml_parse_into_struct(resource parser, string data, array &amp;struct, array &amp;index)">Parsing a XML document</s>
+<s f="xml_parser_create" u="resource xml_parser_create([string encoding])">Create an XML parser</s>
+<s f="xml_parser_create_ns" u="resource xml_parser_create_ns([string encoding [, string sep]])">Create an XML parser</s>
+<s f="xml_parser_free" u="int xml_parser_free(resource parser)">Free an XML parser</s>
+<s f="xml_parser_get_option" u="int xml_parser_get_option(resource parser, int option)">Get options from an XML parser</s>
+<s f="xml_parser_set_option" u="int xml_parser_set_option(resource parser, int option, mixed value)">Set options in an XML parser</s>
+<s f="xml_set_character_data_handler" u="int xml_set_character_data_handler(resource parser, string hdl)">Set up character data handler</s>
+<s f="xml_set_default_handler" u="int xml_set_default_handler(resource parser, string hdl)">Set up default handler</s>
+<s f="xml_set_element_handler" u="int xml_set_element_handler(resource parser, string shdl, string ehdl)">Set up start and end element handlers</s>
+<s f="xml_set_end_namespace_decl_handler" u="int xml_set_end_namespace_decl_handler(resource parser, string hdl)">Set up character data handler</s>
+<s f="xml_set_external_entity_ref_handler" u="int xml_set_external_entity_ref_handler(resource parser, string hdl)">Set up external entity reference handler</s>
+<s f="xml_set_notation_decl_handler" u="int xml_set_notation_decl_handler(resource parser, string hdl)">Set up notation declaration handler</s>
+<s f="xml_set_object" u="int xml_set_object(resource parser, object &amp;obj)">Set up object which should be used for callbacks</s>
+<s f="xml_set_processing_instruction_handler" u="int xml_set_processing_instruction_handler(resource parser, string hdl)">Set up processing instruction (PI) handler</s>
+<s f="xml_set_start_namespace_decl_handler" u="int xml_set_start_namespace_decl_handler(resource parser, string hdl)">Set up character data handler</s>
+<s f="xml_set_unparsed_entity_decl_handler" u="int xml_set_unparsed_entity_decl_handler(resource parser, string hdl)">Set up unparsed entity declaration handler</s>
+<s f="xmlrpc_decode" u="array xmlrpc_decode(string xml [, string encoding])">Decodes XML into native PHP types</s>
+<s f="xmlrpc_decode_request" u="array xmlrpc_decode_request(string xml, string&amp; method [, string encoding])">Decodes XML into native PHP types</s>
+<s f="xmlrpc_encode" u="string xmlrpc_encode(mixed value)">Generates XML for a PHP value</s>
+<s f="xmlrpc_encode_request" u="string xmlrpc_encode_request(string method, mixed params)">Generates XML for a method request</s>
+<s f="xmlrpc_get_type" u="string xmlrpc_get_type(mixed value)">Gets xmlrpc type for a PHP value. Especially useful for base64 and datetime strings</s>
+<s f="xmlrpc_is_fault" u="bool xmlrpc_is_fault(array)">Determines if an array value represents an XMLRPC fault.</s>
+<s f="xmlrpc_parse_method_descriptions" u="array xmlrpc_parse_method_descriptions(string xml)">Decodes XML into a list of method descriptions</s>
+<s f="xmlrpc_server_add_introspection_data" u="int xmlrpc_server_add_introspection_data(resource server, array desc)">Adds introspection documentation</s>
+<s f="xmlrpc_server_call_method" u="mixed xmlrpc_server_call_method(resource server, string xml, mixed user_data [, array output_options])">Parses XML requests and call methods</s>
+<s f="xmlrpc_server_create" u="resource xmlrpc_server_create(void)">Creates an xmlrpc server</s>
+<s f="xmlrpc_server_destroy" u="int xmlrpc_server_destroy(resource server)">Destroys server resources</s>
+<s f="xmlrpc_server_register_introspection_callback" u="bool xmlrpc_server_register_introspection_callback(resource server, string function)">Register a PHP function to generate documentation</s>
+<s f="xmlrpc_server_register_method" u="bool xmlrpc_server_register_method(resource server, string method_name, string function)">Register a PHP function to handle method matching method_name</s>
+<s f="xmlrpc_set_type" u="bool xmlrpc_set_type(string value, string type)">Sets xmlrpc type, base64 or datetime, for a PHP string value</s>
+<s f="yp_all" u="bool yp_all(string domain, string map, string callback)">Traverse the map and call a function on each entry</s>
+<s f="yp_cat" u="array yp_cat(string domain, string map)">Return an array containing the entire map</s>
+<s f="yp_err_string" u="string yp_err_string(int errorcode)">Returns the corresponding error string for the given error code</s>
+<s f="yp_errno" u="int yp_errno()">Returns the error code from the last call or 0 if no error occured</s>
+<s f="yp_first" u="array yp_first(string domain, string map)">Returns the first key as array with $var[$key] and the the line as the value</s>
+<s f="yp_get_default_domain" u="string yp_get_default_domain(void)">Returns the domain or false</s>
+<s f="yp_master" u="string yp_master(string domain, string map)">Returns the machine name of the master</s>
+<s f="yp_match" u="string yp_match(string domain, string map, string key)">Returns the matched line or false</s>
+<s f="yp_next" u="array yp_next(string domain, string map, string key)">Returns an array with $var[$key] and the the line as the value</s>
+<s f="yp_order" u="int yp_order(string domain, string map)">Returns the order number or false</s>
+<s f="gzcompress" u="string gzcompress(string data [, int level])">Gzip-compress a string</s>
+<s f="gzdeflate" u="string gzdeflate(string data [, int level])">Gzip-compress a string</s>
+<s f="gzencode" u="string gzencode(string data [, int level [, int encoding_mode]])">GZ encode a string</s>
+<s f="gzfile" u="array gzfile(string filename [, int use_include_path])">Read und uncompress entire .gz-file into an array</s>
+<s f="gzinflate" u="string gzinflate(string data [, int length])">Unzip a gzip-compressed string</s>
+<s f="gzopen" u="resource gzopen(string filename, string mode [, int use_include_path])">Open a .gz-file and return a .gz-file pointer</s>
+<s f="gzuncompress" u="string gzuncompress(string data [, int length])">Unzip a gzip-compressed string</s>
+<s f="ob_gzhandler" u="string ob_gzhandler(string str, int mode)">Encode str based on accept-encoding setting - designed to be called from ob_start()</s>
+<s f="readgzfile" u="int readgzfile(string filename [, int use_include_path])">Output a .gz-file</s>
+<s f="zlib_get_coding_type" u="string zlib_get_coding_type(void)">Returns the coding type used for output compression</s>
+<s f="set_time_limit" u="bool set_time_limit(int seconds)">Sets the maximum time a script can run</s>
+<s f="ob_clean" u="bool ob_clean(void)">Clean (delete) the current output buffer</s>
+<s f="ob_end_clean" u="bool ob_end_clean(void)">Clean the output buffer, and delete current output buffer</s>
+<s f="ob_end_flush" u="bool ob_end_flush(void)">Flush (send) the output buffer, and delete current output buffer</s>
+<s f="ob_flush" u="bool ob_flush(void)">Flush (send) contents of the output buffer. The last buffer content is sent to next buffer</s>
+<s f="ob_get_clean" u="bool ob_get_clean(void)">Get current buffer contents and delete current output buffer</s>
+<s f="ob_get_contents" u="string ob_get_contents(void)">Return the contents of the output buffer</s>
+<s f="ob_get_flush" u="bool ob_get_flush(void)">Get current buffer contents, flush (send) the output buffer, and delete current output buffer</s>
+<s f="ob_get_length" u="int ob_get_length(void)">Return the length of the output buffer</s>
+<s f="ob_get_level" u="int ob_get_level(void)">Return the nesting level of the output buffer</s>
+<s f="ob_implicit_flush" u="void ob_implicit_flush([int flag])">Turn implicit flush on/off and is equivalent to calling flush() after every output call</s>
+<s f="ob_start" u="bool ob_start([ string|array user_function [, int chunk_size [, bool erase]]])">Turn on Output Buffering (specifying an optional output handler).</s>
+<s f="output_add_rewrite_var" u="bool output_add_rewrite_var(string name, string value)">Add URL rewriter values</s>
+<s f="output_reset_rewrite_vars" u="bool output_reset_rewrite_vars(void)">Reset(clear) URL rewriter values</s>
+<s f="stream_wrapper_register" u="bool stream_wrapper_register(string protocol, string classname)">Registers a custom URL protocol handler class</s>
+<s f="apache_child_terminate" u="bool apache_child_terminate(void)">Terminate apache process after this request</s>
+<s f="apache_get_modules" u="array apache_get_modules(void)">Get a list of loaded Apache modules</s>
+<s f="apache_get_version" u="string apache_get_version(void)">Fetch Apache version</s>
+<s f="apache_lookup_uri" u="object apache_lookup_uri(string URI)">Perform a partial request of the given URI to obtain information about it</s>
+<s f="apache_note" u="string apache_note(string note_name [, string note_value])">Get and set Apache request notes</s>
+<s f="apache_request_headers" u="array apache_request_headers(void)">Fetch all HTTP request headers</s>
+<s f="apache_response_headers" u="array apache_response_headers(void)">Fetch all HTTP response headers</s>
+<s f="apache_setenv" u="bool apache_setenv(string variable, string value [, bool walk_to_top])">Set an Apache subprocess_env variable</s>
+<s f="getallheaders" u="array getallheaders(void)">Alias for apache_request_headers()</s>
+<s f="virtual" u="bool virtual(string filename)">Perform an Apache sub-request</s>
+<s f="apache_get_modules" u="array apache_get_modules(void)">Get a list of loaded Apache modules</s>
+<s f="apache_get_version" u="string apache_get_version(void)">Fetch Apache version</s>
+<s f="apache_getenv" u="bool apache_getenv(string variable [, bool walk_to_top])">Get an Apache subprocess_env variable</s>
+<s f="apache_note" u="string apache_note(string note_name [, string note_value])">Get and set Apache request notes</s>
+<s f="apache_response_headers" u="array apache_response_headers(void)">Fetch all HTTP response headers</s>
+<s f="apache_setenv" u="bool apache_setenv(string variable, string value [, bool walk_to_top])">Set an Apache subprocess_env variable</s>
+<s f="getallheaders" u="array getallheaders(void)">Fetch all HTTP request headers</s>
+<s f="virtual" u="bool virtual(string uri)">Perform an apache sub-request</s>
+<s f="apache_get_modules" u="array apache_get_modules(void)">Get a list of loaded Apache modules</s>
+<s f="apache_get_version" u="string apache_get_version(void)">Fetch Apache version</s>
+<s f="apache_getenv" u="bool apache_getenv(string variable [, bool walk_to_top])">Get an Apache subprocess_env variable</s>
+<s f="apache_note" u="string apache_note(string note_name [, string note_value])">Get and set Apache request notes</s>
+<s f="apache_response_headers" u="array apache_response_headers(void)">Fetch all HTTP response headers</s>
+<s f="apache_setenv" u="bool apache_setenv(string variable, string value [, bool walk_to_top])">Set an Apache subprocess_env variable</s>
+<s f="getallheaders" u="array getallheaders(void)">Fetch all HTTP request headers</s>
+<s f="virtual" u="bool virtual(string uri)">Perform an apache sub-request</s>
+<s f="apache_child_terminate" u="bool apache_child_terminate(void)">Terminate apache process after this request</s>
+<s f="apache_get_modules" u="array apache_get_modules(void)">Get a list of loaded Apache modules</s>
+<s f="apache_get_version" u="string apache_get_version(void)">Fetch Apache version</s>
+<s f="apache_lookup_uri" u="object apache_lookup_uri(string URI)">Perform a partial request of the given URI to obtain information about it</s>
+<s f="apache_note" u="string apache_note(string note_name [, string note_value])">Get and set Apache request notes</s>
+<s f="apache_request_auth_name" u="string apache_request_auth_name()"/>
+<s f="apache_request_auth_type" u="string apache_request_auth_type()"/>
+<s f="apache_request_discard_request_body" u="long apache_request_discard_request_body()"/>
+<s f="apache_request_err_headers_out" u="array apache_request_err_headers_out([{string name|array list} [, string value [, bool replace = false]]])">* fetch all headers that go out in case of an error or a subrequest</s>
+<s f="apache_request_headers" u="array apache_request_headers(void)">Fetch all HTTP request headers</s>
+<s f="apache_request_headers_in" u="array apache_request_headers_in()">* fetch all incoming request headers</s>
+<s f="apache_request_headers_out" u="array apache_request_headers_out([{string name|array list} [, string value [, bool replace = false]]])">* fetch all outgoing request headers</s>
+<s f="apache_request_is_initial_req" u="bool apache_request_is_initial_req()"/>
+<s f="apache_request_log_error" u="boolean apache_request_log_error(string message, [long facility])"/>
+<s f="apache_request_meets_conditions" u="long apache_request_meets_conditions()"/>
+<s f="apache_request_remote_host" u="int apache_request_remote_host([int type])"/>
+<s f="apache_request_run" u="long apache_request_run()">This is a wrapper for ap_sub_run_req and ap_destory_sub_req.  It takes       sub_request, runs it, destroys it, and returns it's status.</s>
+<s f="apache_request_satisfies" u="long apache_request_satisfies()"/>
+<s f="apache_request_server_port" u="int apache_request_server_port()"/>
+<s f="apache_request_set_etag" u="void apache_request_set_etag()"/>
+<s f="apache_request_set_last_modified" u="void apache_request_set_last_modified()"/>
+<s f="apache_request_some_auth_required" u="bool apache_request_some_auth_required()"/>
+<s f="apache_request_sub_req_lookup_file" u="object apache_request_sub_req_lookup_file(string file)">Returns sub-request for the specified file.  You would      need to run it yourself with run().</s>
+<s f="apache_request_sub_req_lookup_uri" u="object apache_request_sub_req_lookup_uri(string uri)">Returns sub-request for the specified uri.  You would      need to run it yourself with run()</s>
+<s f="apache_request_sub_req_method_uri" u="object apache_request_sub_req_method_uri(string method, string uri)">Returns sub-request for the specified file.  You would      need to run it yourself with run().</s>
+<s f="apache_request_update_mtime" u="long apache_request_update_mtime([int dependency_mtime])"/>
+<s f="apache_response_headers" u="array apache_response_headers(void)">Fetch all HTTP response headers</s>
+<s f="apache_setenv" u="bool apache_setenv(string variable, string value [, bool walk_to_top])">Set an Apache subprocess_env variable</s>
+<s f="getallheaders" u="array getallheaders(void)"/>
+<s f="virtual" u="bool virtual(string filename)">Perform an Apache sub-request</s>
+<s f="smfi_addheader" u="string smfi_addheader(string headerf, string headerv)">Adds a header to the current message.</s>
+<s f="smfi_addrcpt" u="string smfi_addrcpt(string rcpt)">Add a recipient to the message envelope.</s>
+<s f="smfi_chgheader" u="string smfi_chgheader(string headerf, string headerv)">Changes a header's value for the current message.</s>
+<s f="smfi_delrcpt" u="string smfi_delrcpt(string rcpt)">Removes the named recipient from the current message's envelope.</s>
+<s f="smfi_getsymval" u="string smfi_getsymval(string macro)">Returns the value of the given macro or NULL if the macro is not defined.</s>
+<s f="smfi_replacebody" u="string smfi_replacebody(string body)">Replaces the body of the current message. If called more than once,     subsequent calls result in data being appended to the new body.</s>
+<s f="smfi_setflags" u="string smfi_setflags(long flags)">Sets the flags describing the actions the filter may take.</s>
+<s f="smfi_setreply" u="string smfi_setreply(string rcode, string xcode, string message)">Directly set the SMTP error reply code for this connection.     This code will be used on subsequent error replies resulting from actions taken by this filter.</s>
+<s f="smfi_settimeout" u="string smfi_settimeout(long timeout)">Sets the number of seconds libmilter will wait for an MTA connection before timing out a socket.</s>
+<s f="nsapi_request_headers" u="array nsapi_request_headers(void)">Get all headers from the request</s>
+<s f="nsapi_response_headers" u="array nsapi_response_headers(void)">Get all headers from the response</s>
+<s f="nsapi_virtual" u="bool nsapi_virtual(string uri)">Perform an NSAPI sub-request</s>
+   
+<s k="if"/>
+<s k="elseif"/>
+<s k="else"/>
+<s k="endif"/>
+<s k="for"/>
+<s k="endfor"/>
+<s k="while"/>
+<s k="endwhile"/>
+<s k="switch"/>
+<s k="case"/>
+<s k="endswitch"/>
+<s k="break"/>
+<s k="continue"/>
+<s k="return"/>
+<s k="include"/>
+<s k="include_once"/>
+<s k="require"/>
+<s k="require_once"/>
+<s k="function"/>
+<s k="class"/>
+<s k="new"/>
+<s k="do"/>
+<s k="old_function"/>
+<s k="default"/>
+<s k="global"/>
+<s k="static"/>
+<s k="foreach"/>
+<s k="endforeach"/>
+<s k="extends"/>
+<s k="empty"/>
+<s k="array"/>
+<s k="echo"/>
+<s k="var"/>
+<s k="as"/> 
+<s k="print"/> 
+<s k="unset"/>
+<s k="exit"/>
+<s k="and"/>
+<s k="or"/>
+<s k="xor"/>
+<s k="list"/> 
+<s k="null"/>
+<s k="false"/>
+<s k="true"/>
+<s k="AND"/>
+<s k="OR"/>
+<s k="NULL"/>
+<s k="FALSE"/>
+<s k="TRUE"/>
+<s k="abstract"/>
+<s k="catch"/>
+<s k="finally"/>
+<s k="try"/>
+<s k="private"/>
+<s k="protected"/>
+<s k="public"/>
+<s k="interface"/>
+<s k="implements"/>
+<s k="instanceof"/>
+<s k="super"/>
+<s k="throw"/>
+<s k="clone"/>
+<s k="const"/>
+<s k="declare"/>
+<s k="enddeclare"/>
+<s k="eval"/>
+<s k="use"/>
+<s k="isset"/>
+<s k="final"/>
+<s k="__FUNCTION__"/>
+<s k="__CLASS__"/>
+<s k="__METHOD__"/>
+<s k="__FILE__"/>
+<s k="__LINE__"/>
+<s k="__FUNCTION__"/>
+<s k="php_user_filter"/>
+<s k="cfunction"/>
+<s k="old_function"/>
+<s k="exception"/>
+<s k="die"/>
+
+<s t="string"/>         
+<s t="unset"/> 
+<s t="object"/>         
+<s t="bool"/>         
+<s t="boolean"/>         
+<s t="real"/>         
+<s t="double"/>         
+<s t="float"/>         
+<s t="int"/>         
+<s t="integer"/>        
+
+<s c="CASE_LOWER"/>
+<s c="CASE_UPPER"/>
+<s c="SORT_ASC"/>
+<s c="SORT_DESC"/>
+<s c="SORT_REGULAR"/>
+<s c="SORT_NUMERIC"/>
+<s c="SORT_STRING"/>
+<s c="COUNT_NORMAL"/>
+<s c="COUNT_RECURSIVE"/>
+<s c="EXTR_OVERWRITE"/>
+<s c="EXTR_SKIP"/>
+<s c="EXTR_PREFIX_SAME"/>
+<s c="EXTR_PREFIX_ALL"/>
+<s c="EXTR_PREFIX_INVALID"/>
+<s c="EXTR_PREFIX_IF_EXISTS"/>
+<s c="EXTR_IF_EXISTS"/>
+<s c="EXTR_REFS"/>
+<s c="CAL_GREGORIAN"/>
+<s c="CAL_JULIAN"/>
+<s c="CAL_JEWISH"/>
+<s c="CAL_FRENCH"/>
+<s c="CAL_NUM_CALS"/>
+<s c="CAL_DOW_DAYNO"/>
+<s c="CAL_DOW_SHORT"/>
+<s c="CAL_DOW_LONG"/>
+<s c="CAL_MONTH_GREGORIAN_SHORT"/>
+<s c="CAL_MONTH_GREGORIAN_LONG"/>
+<s c="CAL_MONTH_JULIAN_SHORT"/>
+<s c="CAL_MONTH_JULIAN_LONG"/>
+<s c="CAL_MONTH_JEWISH"/>
+<s c="CAL_MONTH_FRENCH"/>
+<s c="CAL_EASTER_DEFAULT"/>
+<s c="CAL_EASTER_ROMAN"/>
+<s c="CAL_EASTER_ALWAYS_GREGORIAN"/>
+<s c="CAL_EASTER_ALWAYS_JULIAN"/>
+<s c="CAL_JEWISH_ADD_ALAFIM_GERESH"/>
+<s c="CAL_JEWISH_ADD_ALAFIM"/>
+<s c="CAL_JEWISH_ADD_GERESHAYIM"/>
+<s c="CLSCTX_INPROC_SERVER"/>
+<s c="CLSCTX_INPROC_HANDLER"/>
+<s c="CLSCTX_LOCAL_SERVER"/>
+<s c="CLSCTX_REMOTE_SERVER"/>
+<s c="CLSCTX_SERVER"/>
+<s c="CLSCTX_ALL"/>
+<s c="VT_NULL"/>
+<s c="VT_EMPTY"/>
+<s c="VT_UI1"/>
+<s c="VT_I2"/>
+<s c="VT_I4"/>
+<s c="VT_R4"/>
+<s c="VT_R8"/>
+<s c="VT_BOOL"/>
+<s c="VT_ERROR"/>
+<s c="VT_CY"/>
+<s c="VT_DATE"/>
+<s c="VT_BSTR"/>
+<s c="VT_DECIMAL"/>
+<s c="VT_UNKNOWN"/>
+<s c="VT_DISPATCH"/>
+<s c="VT_VARIANT"/>
+<s c="VT_I1"/>
+<s c="VT_UI2"/>
+<s c="VT_UI4"/>
+<s c="VT_INT"/>
+<s c="VT_UINT"/>
+<s c="VT_ARRAY"/>
+<s c="VT_BYREF"/>
+<s c="CP_ACP"/>
+<s c="CP_MACCP"/>
+<s c="CP_OEMCP"/>
+<s c="CP_UTF7"/>
+<s c="CP_UTF8"/>
+<s c="CP_SYMBOL"/>
+<s c="CP_THREAD_ACP"/>
+<s c="VARCMP_LT"/>
+<s c="VARCMP_EQ"/>
+<s c="VARCMP_GT"/>
+<s c="VARCMP_NULL"/>
+<s c="NORM_IGNORECASE"/>
+<s c="NORM_IGNORENONSPACE"/>
+<s c="NORM_IGNORESYMBOLS"/>
+<s c="NORM_IGNOREWIDTH"/>
+<s c="NORM_IGNOREKANATYPE"/>
+<s c="NORM_IGNOREKASHIDA"/>
+<s c="DISP_E_DIVBYZERO"/>
+<s c="DISP_E_OVERFLOW"/>
+<s c="MK_E_UNAVAILABLE"/>
+<s c="CPDF_PM_NONE"/>
+<s c="CPDF_PM_OUTLINES"/>
+<s c="CPDF_PM_THUMBS"/>
+<s c="CPDF_PM_FULLSCREEN"/>
+<s c="CPDF_PL_SINGLE"/>
+<s c="CPDF_PL_1COLUMN"/>
+<s c="CPDF_PL_2LCOLUMN"/>
+<s c="CPDF_PL_2RCOLUMN"/>
+<s c="CURLOPT_PORT"/>
+<s c="CURLOPT_FILE"/>
+<s c="CURLOPT_INFILE"/>
+<s c="CURLOPT_INFILESIZE"/>
+<s c="CURLOPT_URL"/>
+<s c="CURLOPT_PROXY"/>
+<s c="CURLOPT_VERBOSE"/>
+<s c="CURLOPT_HEADER"/>
+<s c="CURLOPT_HTTPHEADER"/>
+<s c="CURLOPT_NOPROGRESS"/>
+<s c="CURLOPT_NOBODY"/>
+<s c="CURLOPT_FAILONERROR"/>
+<s c="CURLOPT_UPLOAD"/>
+<s c="CURLOPT_POST"/>
+<s c="CURLOPT_FTPLISTONLY"/>
+<s c="CURLOPT_FTPAPPEND"/>
+<s c="CURLOPT_NETRC"/>
+<s c="CURLOPT_FOLLOWLOCATION"/>
+<s c="CURLOPT_FTPASCII"/>
+<s c="CURLOPT_PUT"/>
+<s c="CURLOPT_MUTE"/>
+<s c="CURLOPT_USERPWD"/>
+<s c="CURLOPT_PROXYUSERPWD"/>
+<s c="CURLOPT_RANGE"/>
+<s c="CURLOPT_TIMEOUT"/>
+<s c="CURLOPT_POSTFIELDS"/>
+<s c="CURLOPT_REFERER"/>
+<s c="CURLOPT_USERAGENT"/>
+<s c="CURLOPT_FTPPORT"/>
+<s c="CURLOPT_LOW_SPEED_LIMIT"/>
+<s c="CURLOPT_LOW_SPEED_TIME"/>
+<s c="CURLOPT_RESUME_FROM"/>
+<s c="CURLOPT_COOKIE"/>
+<s c="CURLOPT_SSLCERT"/>
+<s c="CURLOPT_SSLCERTPASSWD"/>
+<s c="CURLOPT_WRITEHEADER"/>
+<s c="CURLOPT_SSL_VERIFYHOST"/>
+<s c="CURLOPT_COOKIEFILE"/>
+<s c="CURLOPT_SSLVERSION"/>
+<s c="CURLOPT_TIMECONDITION"/>
+<s c="CURLOPT_TIMEVALUE"/>
+<s c="CURLOPT_CUSTOMREQUEST"/>
+<s c="CURLOPT_STDERR"/>
+<s c="CURLOPT_TRANSFERTEXT"/>
+<s c="CURLOPT_RETURNTRANSFER"/>
+<s c="CURLOPT_QUOTE"/>
+<s c="CURLOPT_POSTQUOTE"/>
+<s c="CURLOPT_INTERFACE"/>
+<s c="CURLOPT_KRB4LEVEL"/>
+<s c="CURLOPT_HTTPPROXYTUNNEL"/>
+<s c="CURLOPT_FILETIME"/>
+<s c="CURLOPT_WRITEFUNCTION"/>
+<s c="CURLOPT_READFUNCTION"/>
+<s c="CURLOPT_PASSWDFUNCTION"/>
+<s c="CURLOPT_HEADERFUNCTION"/>
+<s c="CURLOPT_MAXREDIRS"/>
+<s c="CURLOPT_MAXCONNECTS"/>
+<s c="CURLOPT_CLOSEPOLICY"/>
+<s c="CURLOPT_FRESH_CONNECT"/>
+<s c="CURLOPT_FORBID_REUSE"/>
+<s c="CURLOPT_RANDOM_FILE"/>
+<s c="CURLOPT_EGDSOCKET"/>
+<s c="CURLOPT_CONNECTTIMEOUT"/>
+<s c="CURLOPT_SSL_VERIFYPEER"/>
+<s c="CURLOPT_CAINFO"/>
+<s c="CURLOPT_COOKIEJAR"/>
+<s c="CURLOPT_SSL_CIPHER_LIST"/>
+<s c="CURLOPT_BINARYTRANSFER"/>
+<s c="CURLCLOSEPOLICY_LEAST_RECENTLY_USED"/>
+<s c="CURLCLOSEPOLICY_LEAST_TRAFFIC"/>
+<s c="CURLCLOSEPOLICY_SLOWEST"/>
+<s c="CURLCLOSEPOLICY_CALLBACK"/>
+<s c="CURLCLOSEPOLICY_OLDEST"/>
+<s c="CURLINFO_EFFECTIVE_URL"/>
+<s c="CURLINFO_HTTP_CODE"/>
+<s c="CURLINFO_HEADER_SIZE"/>
+<s c="CURLINFO_REQUEST_SIZE"/>
+<s c="CURLINFO_TOTAL_TIME"/>
+<s c="CURLINFO_NAMELOOKUP_TIME"/>
+<s c="CURLINFO_CONNECT_TIME"/>
+<s c="CURLINFO_PRETRANSFER_TIME"/>
+<s c="CURLINFO_SIZE_UPLOAD"/>
+<s c="CURLINFO_SIZE_DOWNLOAD"/>
+<s c="CURLINFO_SPEED_DOWNLOAD"/>
+<s c="CURLINFO_SPEED_UPLOAD"/>
+<s c="CURLINFO_FILETIME"/>
+<s c="CURLINFO_SSL_VERIFYRESULT"/>
+<s c="CURLINFO_CONTENT_LENGTH_DOWNLOAD"/>
+<s c="CURLINFO_CONTENT_LENGTH_UPLOAD"/>
+<s c="CURLE_OK"/>
+<s c="CURLE_UNSUPPORTED_PROTOCOL"/>
+<s c="CURLE_FAILED_INIT"/>
+<s c="CURLE_URL_MALFORMAT"/>
+<s c="CURLE_URL_MALFORMAT_USER"/>
+<s c="CURLE_COULDNT_RESOLVE_PROXY"/>
+<s c="CURLE_COULDNT_RESOLVE_HOST"/>
+<s c="CURLE_COULDNT_CONNECT"/>
+<s c="CURLE_FTP_WEIRD_SERVER_REPLY"/>
+<s c="CURLE_FTP_ACCESS_DENIED"/>
+<s c="CURLE_FTP_USER_PASSWORD_INCORRECT"/>
+<s c="CURLE_FTP_WEIRD_PASS_REPLY"/>
+<s c="CURLE_FTP_WEIRD_USER_REPLY"/>
+<s c="CURLE_FTP_WEIRD_PASV_REPLY"/>
+<s c="CURLE_FTP_WEIRD_227_FORMAT"/>
+<s c="CURLE_FTP_CANT_GET_HOST"/>
+<s c="CURLE_FTP_CANT_RECONNECT"/>
+<s c="CURLE_FTP_COULDNT_SET_BINARY"/>
+<s c="CURLE_PARTIAL_FILE"/>
+<s c="CURLE_FTP_COULDNT_RETR_FILE"/>
+<s c="CURLE_FTP_WRITE_ERROR"/>
+<s c="CURLE_FTP_QUOTE_ERROR"/>
+<s c="CURLE_HTTP_NOT_FOUND"/>
+<s c="CURLE_WRITE_ERROR"/>
+<s c="CURLE_MALFORMAT_USER"/>
+<s c="CURLE_FTP_COULDNT_STOR_FILE"/>
+<s c="CURLE_READ_ERROR"/>
+<s c="CURLE_OUT_OF_MEMORY"/>
+<s c="CURLE_OPERATION_TIMEOUTED"/>
+<s c="CURLE_FTP_COULDNT_SET_ASCII"/>
+<s c="CURLE_FTP_PORT_FAILED"/>
+<s c="CURLE_FTP_COULDNT_USE_REST"/>
+<s c="CURLE_FTP_COULDNT_GET_SIZE"/>
+<s c="CURLE_HTTP_RANGE_ERROR"/>
+<s c="CURLE_HTTP_POST_ERROR"/>
+<s c="CURLE_SSL_CONNECT_ERROR"/>
+<s c="CURLE_FTP_BAD_DOWNLOAD_RESUME"/>
+<s c="CURLE_FILE_COULDNT_READ_FILE"/>
+<s c="CURLE_LDAP_CANNOT_BIND"/>
+<s c="CURLE_LDAP_SEARCH_FAILED"/>
+<s c="CURLE_LIBRARY_NOT_FOUND"/>
+<s c="CURLE_FUNCTION_NOT_FOUND"/>
+<s c="CURLE_ABORTED_BY_CALLBACK"/>
+<s c="CURLE_BAD_FUNCTION_ARGUMENT"/>
+<s c="CURLE_BAD_CALLING_ORDER"/>
+<s c="CURLE_HTTP_PORT_FAILED"/>
+<s c="CURLE_BAD_PASSWORD_ENTERED"/>
+<s c="CURLE_TOO_MANY_REDIRECTS"/>
+<s c="CURLE_UNKNOWN_TELNET_OPTION"/>
+<s c="CURLE_TELNET_OPTION_SYNTAX"/>
+<s c="CURLE_OBSOLETE"/>
+<s c="CURLE_SSL_PEER_CERTIFICATE"/>
+<s c="CYRUS_CONN_NONSYNCLITERAL"/>
+<s c="CYRUS_CONN_INITIALRESPONSE"/>
+<s c="CYRUS_CALLBACK_NUMBERED"/>
+<s c="CYRUS_CALLBACK_NOLITERAL"/>
+<s c="DBPLUS_ERR_NOERR">ERR_NOERR</s>
+<s c="DBPLUS_ERR_DUPLICATE">ERR_DUPLICATE</s>
+<s c="DBPLUS_ERR_EOSCAN">ERR_EOSCAN</s>
+<s c="DBPLUS_ERR_EMPTY">ERR_EMPTY</s>
+<s c="DBPLUS_ERR_CLOSE">ERR_CLOSE</s>
+<s c="DBPLUS_ERR_WLOCKED">ERR_WLOCKED</s>
+<s c="DBPLUS_ERR_LOCKED">ERR_LOCKED</s>
+<s c="DBPLUS_ERR_NOLOCK">ERR_NOLOCK</s>
+<s c="DBPLUS_ERR_READ">ERR_READ</s>
+<s c="DBPLUS_ERR_WRITE">ERR_WRITE</s>
+<s c="DBPLUS_ERR_CREATE">ERR_CREATE</s>
+<s c="DBPLUS_ERR_LSEEK">ERR_LSEEK</s>
+<s c="DBPLUS_ERR_LENGTH">ERR_LENGTH</s>
+<s c="DBPLUS_ERR_OPEN">ERR_OPEN</s>
+<s c="DBPLUS_ERR_WOPEN">ERR_WOPEN</s>
+<s c="DBPLUS_ERR_MAGIC">ERR_MAGIC</s>
+<s c="DBPLUS_ERR_VERSION">ERR_VERSION</s>
+<s c="DBPLUS_ERR_PGSIZE">ERR_PGSIZE</s>
+<s c="DBPLUS_ERR_CRC">ERR_CRC</s>
+<s c="DBPLUS_ERR_PIPE">ERR_PIPE</s>
+<s c="DBPLUS_ERR_NIDX">ERR_NIDX</s>
+<s c="DBPLUS_ERR_MALLOC">ERR_MALLOC</s>
+<s c="DBPLUS_ERR_NUSERS">ERR_NUSERS</s>
+<s c="DBPLUS_ERR_PREEXIT">ERR_PREEXIT</s>
+<s c="DBPLUS_ERR_ONTRAP">ERR_ONTRAP</s>
+<s c="DBPLUS_ERR_PREPROC">ERR_PREPROC</s>
+<s c="DBPLUS_ERR_DBPARSE">ERR_DBPARSE</s>
+<s c="DBPLUS_ERR_DBRUNERR">ERR_DBRUNERR</s>
+<s c="DBPLUS_ERR_DBPREEXIT">ERR_DBPREEXIT</s>
+<s c="DBPLUS_ERR_WAIT">ERR_WAIT</s>
+<s c="DBPLUS_ERR_CORRUPT_TUPLE">ERR_CORRUPT_TUPLE</s>
+<s c="DBPLUS_ERR_WARNING0">ERR_WARNING0</s>
+<s c="DBPLUS_ERR_PANIC">ERR_PANIC</s>
+<s c="DBPLUS_ERR_FIFO">ERR_FIFO</s>
+<s c="DBPLUS_ERR_PERM">ERR_PERM</s>
+<s c="DBPLUS_ERR_TCL">ERR_TCL</s>
+<s c="DBPLUS_ERR_RESTRICTED">ERR_RESTRICTED</s>
+<s c="DBPLUS_ERR_USER">ERR_USER</s>
+<s c="DBPLUS_ERR_UNKNOWN">ERR_UNKNOWN</s>
+<s c="DBX_MYSQL"/>
+<s c="DBX_ODBC"/>
+<s c="DBX_PGSQL"/>
+<s c="DBX_MSSQL"/>
+<s c="DBX_FBSQL"/>
+<s c="DBX_OCI8"/>
+<s c="DBX_SYBASECT"/>
+<s c="DBX_SQLITE"/>
+<s c="DBX_PERSISTENT"/>
+<s c="DBX_RESULT_INFO"/>
+<s c="DBX_RESULT_INDEX"/>
+<s c="DBX_RESULT_ASSOC"/>
+<s c="DBX_RESULT_UNBUFFERED"/>
+<s c="DBX_COLNAMES_UNCHANGED"/>
+<s c="DBX_COLNAMES_UPPERCASE"/>
+<s c="DBX_COLNAMES_LOWERCASE"/>
+<s c="DBX_CMP_NATIVE"/>
+<s c="DBX_CMP_TEXT"/>
+<s c="DBX_CMP_NUMBER"/>
+<s c="DBX_CMP_ASC"/>
+<s c="DBX_CMP_DESC"/>
+<s c="DIRECTORY_SEPARATOR"/>
+<s c="PATH_SEPARATOR"/>
+<s c="XML_ELEMENT_NODE">1</s>
+<s c="XML_ATTRIBUTE_NODE">2</s>
+<s c="XML_TEXT_NODE">3</s>
+<s c="XML_CDATA_SECTION_NODE">4</s>
+<s c="XML_ENTITY_REF_NODE">5</s>
+<s c="XML_ENTITY_NODE">6</s>
+<s c="XML_PI_NODE">7</s>
+<s c="XML_COMMENT_NODE">8</s>
+<s c="XML_DOCUMENT_NODE">9</s>
+<s c="XML_DOCUMENT_TYPE_NODE">10</s>
+<s c="XML_DOCUMENT_FRAG_NODE">11</s>
+<s c="XML_NOTATION_NODE">12</s>
+<s c="XML_HTML_DOCUMENT_NODE">13</s>
+<s c="XML_DTD_NODE">14</s>
+<s c="XML_ELEMENT_DECL_NODE">15</s>
+<s c="XML_ATTRIBUTE_DECL_NODE">16</s>
+<s c="XML_ENTITY_DECL_NODE">17</s>
+<s c="XML_NAMESPACE_DECL_NODE">18</s>
+<s c="XML_ATTRIBUTE_CDATA">1</s>
+<s c="XML_ATTRIBUTE_ID">2</s>
+<s c="XML_ATTRIBUTE_IDREF">3</s>
+<s c="XML_ATTRIBUTE_IDREFS">4</s>
+<s c="XML_ATTRIBUTE_ENTITY">5</s>
+<s c="XML_ATTRIBUTE_NMTOKEN">7</s>
+<s c="XML_ATTRIBUTE_NMTOKENS">8</s>
+<s c="XML_ATTRIBUTE_ENUMERATION">9</s>
+<s c="XML_ATTRIBUTE_NOTATION">10</s>
+<s c="DOM_INDEX_SIZE_ERR">1</s>
+<s c="DOMSTRING_SIZE_ERR">2</s>
+<s c="DOM_HIERARCHY_REQUEST_ERR">3</s>
+<s c="DOM_WRONG_DOCUMENT_ERR">4</s>
+<s c="DOM_INVALID_CHARACTER_ERR">5</s>
+<s c="DOM_NO_DATA_ALLOWED_ERR">6</s>
+<s c="DOM_NO_MODIFICATION_ALLOWED_ERR">7</s>
+<s c="DOM_NOT_FOUND_ERR">8</s>
+<s c="DOM_NOT_SUPPORTED_ERR">9</s>
+<s c="DOM_INUSE_ATTRIBUTE_ERR">10</s>
+<s c="DOM_INVALID_STATE_ERR">11</s>
+<s c="DOM_SYNTAX_ERR">12</s>
+<s c="DOM_INVALID_MODIFICATION_ERR">13</s>
+<s c="DOM_NAMESPACE_ERR">14</s>
+<s c="DOM_INVALID_ACCESS_ERR">15</s>
+<s c="DOM_VALIDATION_ERR">16</s>
+<s c="XML_ELEMENT_NODE">1</s>
+<s c="XML_ATTRIBUTE_NODE">2</s>
+<s c="XML_TEXT_NODE">3</s>
+<s c="XML_CDATA_SECTION_NODE">4</s>
+<s c="XML_ENTITY_REF_NODE">5</s>
+<s c="XML_ENTITY_NODE">6</s>
+<s c="XML_PI_NODE">7</s>
+<s c="XML_COMMENT_NODE">8</s>
+<s c="XML_DOCUMENT_NODE">9</s>
+<s c="XML_DOCUMENT_TYPE_NODE">10</s>
+<s c="XML_DOCUMENT_FRAG_NODE">11</s>
+<s c="XML_NOTATION_NODE">12</s>
+<s c="XML_GLOBAL_NAMESPACE">1</s>
+<s c="XML_LOCAL_NAMESPACE">2</s>
+<s c="XML_HTML_DOCUMENT_NODE"/>
+<s c="XML_DTD_NODE"/>
+<s c="XML_ELEMENT_DECL_NODE"/>
+<s c="XML_ATTRIBUTE_DECL_NODE"/>
+<s c="XML_ENTITY_DECL_NODE"/>
+<s c="XML_NAMESPACE_DECL_NODE"/>
+<s c="XML_ATTRIBUTE_CDATA"/>
+<s c="XML_ATTRIBUTE_ID"/>
+<s c="XML_ATTRIBUTE_IDREF"/>
+<s c="XML_ATTRIBUTE_IDREFS"/>
+<s c="XML_ATTRIBUTE_ENTITY"/>
+<s c="XML_ATTRIBUTE_NMTOKEN"/>
+<s c="XML_ATTRIBUTE_NMTOKENS"/>
+<s c="XML_ATTRIBUTE_ENUMERATION"/>
+<s c="XML_ATTRIBUTE_NOTATION"/>
+<s c="XPATH_UNDEFINED"/>
+<s c="XPATH_NODESET"/>
+<s c="XPATH_BOOLEAN"/>
+<s c="XPATH_NUMBER"/>
+<s c="XPATH_STRING"/>
+<s c="XPATH_POINT"/>
+<s c="XPATH_RANGE"/>
+<s c="XPATH_LOCATIONSET"/>
+<s c="XPATH_USERS"/>
+<s c="XPATH_NUMBER"/>
+<s c="E_ERROR">Fatal run-time errors. These indicate errors that can not be
+      recovered from, such as a memory allocation problem.
+      Execution of the script is halted.</s>
+<s c="FAMC">Some value which can be obtained with fstat(1) changed for a
+       file or directory.</s>
+<s c="FAMD">A file or directory was deleted or renamed.</s>
+<s c="FAMC">A file was created in a directory.</s>
+<s c="FAMM">This event never occurs.</s>
+<s c="FAMA">An event in response to fam_cancel_monitor.</s>
+<s c="FAME">An event upon request to monitor a file or directory. When a
+       directory is monitored, an event for that directory and every file
+       contained in that directory is issued.</s>
+<s c="FBSQL_ASSOC"/>
+<s c="FBSQL_NUM"/>
+<s c="FBSQL_BOTH"/>
+<s c="FBSQL_LOCK_DEFERRED"/>
+<s c="FBSQL_LOCK_OPTIMISTIC"/>
+<s c="FBSQL_LOCK_PESSIMISTIC"/>
+<s c="FBSQL_ISO_READ_UNCOMMITTED"/>
+<s c="FBSQL_ISO_READ_COMMITTED"/>
+<s c="FBSQL_ISO_REPEATABLE_READ"/>
+<s c="FBSQL_ISO_SERIALIZABLE"/>
+<s c="FBSQL_ISO_VERSIONED"/>
+<s c="FBSQL_UNKNOWN"/>
+<s c="FBSQL_STOPPED"/>
+<s c="FBSQL_STARTING"/>
+<s c="FBSQL_RUNNING"/>
+<s c="FBSQL_STOPPING"/>
+<s c="FBSQL_NOEXEC"/>
+<s c="FBSQL_LOB_DIRECT"/>
+<s c="FBSQL_LOB_HANDLE"/>
+<s c="FDFValue"/>
+<s c="FDFStatus"/>
+<s c="FDFFile"/>
+<s c="FDFID"/>
+<s c="FDFFf"/>
+<s c="FDFSetFf"/>
+<s c="FDFClearFf"/>
+<s c="FDFFlags"/>
+<s c="FDFSetF"/>
+<s c="FDFClrF"/>
+<s c="FDFAP"/>
+<s c="FDFAS"/>
+<s c="FDFAction"/>
+<s c="FDFAA"/>
+<s c="FDFAPRef"/>
+<s c="FDFIF"/>
+<s c="FDFEnter"/>
+<s c="FDFExit"/>
+<s c="FDFDown"/>
+<s c="FDFUp"/>
+<s c="FDFFormat"/>
+<s c="FDFValidate"/>
+<s c="FDFKeystroke"/>
+<s c="FDFCalculate"/>
+<s c="FDFNormalAP"/>
+<s c="FDFRolloverAP"/>
+<s c="FDFDownAP"/>
+<s c="GLOB_BRACE"/>
+<s c="GLOB_ONLYDIR"/>
+<s c="GLOB_MARK"/>
+<s c="GLOB_NOSORT"/>
+<s c="GLOB_NOCHECK"/>
+<s c="GLOB_NOESCAPE"/>
+<s c="PATHINFO_DIRNAME"/>
+<s c="PATHINFO_BASENAME"/>
+<s c="PATHINFO_EXTENSION"/>
+<s c="FILE_USE_INCLUDE_PATH"/>
+<s c="FILE_APPEND"/>
+<s c="FILE_IGNORE_NEW_LINES"/>
+<s c="FILE_SKIP_EMPTY_LINES"/>
+<s c="FRIBIDI_CHARSET_UTF8"/>
+<s c="FRIBIDI_CHARSET_8859_6"/>
+<s c="FRIBIDI_CHARSET_8859_8"/>
+<s c="FRIBIDI_CHARSET_CP1255"/>
+<s c="FRIBIDI_CHARSET_CP1256"/>
+<s c="FRIBIDI_CHARSET_ISIRI_3342"/>
+<s c="FTP_ASCII"/>
+<s c="FTP_TEXT"/>
+<s c="FTP_BINARY"/>
+<s c="FTP_IMAGE"/>
+<s c="FTP_TIMEOUT_SEC"/>
+<s c="FTP_AUTOSEEK"/>
+<s c="FTP_AUTORESUME"/>
+<s c="FTP_FAILED"/>
+<s c="FTP_FINISHED"/>
+<s c="FTP_MOREDATA"/>
+<s c="GMP_ROUND_ZERO"/>
+<s c="GMP_ROUND_PLUSINF"/>
+<s c="GMP_ROUND_MINUSINF"/>
+<s c="HW_ATTR_LANG"/>
+<s c="HW_ATTR_NR"/>
+<s c="HW_ATTR_NONE"/>
+<s c="IBASE_DEFAULT">The default transaction settings are to be used. This default is
+       determined by the client library, which defines it as
+       IBASE_WRITE|IBASE_CONCURRENCY|IBASE_WAIT in most cases.</s>
+<s c="IBASE_READ">Starts a read-only transaction.</s>
+<s c="IBASE_WRITE">Starts a read-write transaction.</s>
+<s c="IBASE_CONSISTENCY">Starts a transaction with the isolation level set to
+       'consistency', which means the transaction cannot read from tables
+       that are being modified by other concurrent transactions.</s>
+<s c="IBASE_CONCURRENCY">Starts a transaction with the isolation level set to
+       'concurrency' (or 'snapshot'), which means the transaction 
+       has access to all tables, but cannot see changes that were committed
+       by other transactions after the transaction was started.</s>
+<s c="IBASE_COMMITTED">Starts a transaction with the isolation level set to
+       'read committed'. This flag should be combined with either
+       IBASE_REC_VERSION or 
+       IBASE_REC_NO_VERSION. This isolation level
+       allows access to changes that were committed after the transaction
+       was started. If IBASE_REC_NO_VERSION was
+       specified, only the latest version of a row can be read. If 
+       IBASE_REC_VERSION was specified, a row can
+       even be read when a modification to it is pending in a concurrent
+       transaction.</s>
+<s c="IBASE_WAIT">Indicated that a transaction should wait and retry when a
+       conflict occurs.</s>
+<s c="IBASE_NOWAIT">Indicated that a transaction should fail immediately when a
+       conflict occurs.</s>
+<s c="IBASE_FETCH_BLOBS">Also available as IBASE_TEXTfor backward
+       compatibility. Causes BLOB contents to be fetched inline, instead of 
+       being fetched as BLOB identifiers.</s>
+<s c="IBASE_FETCH_ARRAYS">Causes arrays to be fetched inline. Otherwise, array
+       identifiers are returned. Array identifiers can only be used as
+       arguments to INSERT operations, as no functions to handle array
+       identifiers are currently available.</s>
+<s c="IBASE_UNIXTIME">Causes date and time fields not to be returned as strings,
+       but as UNIX timestamps (the number of seconds since the epoch, which
+       is 1-Jan-1970 0:00 UTC). Might be problematic if used with dates
+       before 1970 on some systems.</s>
+<s c="ICONV_IMPL">string</s>
+<s c="ICONV_VERSION">string</s>
+<s c="ICONV_MIME_DECODE_STRICT">integer</s>
+<s c="ICONV_MIME_DECODE_CONTINUE_ON_ERROR">integer</s>
+<s c="IMG_GIF"/>
+<s c="IMG_JPG"/>
+<s c="IMG_JPEG"/>
+<s c="IMG_PNG"/>
+<s c="IMG_WBMP"/>
+<s c="IMG_XPM"/>
+<s c="IMG_COLOR_TILED"/>
+<s c="IMG_COLOR_STYLED"/>
+<s c="IMG_COLOR_BRUSHED"/>
+<s c="IMG_COLOR_STYLEDBRUSHED"/>
+<s c="IMG_COLOR_TRANSPARENT"/>
+<s c="IMG_ARC_ROUNDED"/>
+<s c="IMG_ARC_PIE"/>
+<s c="IMG_ARC_CHORD"/>
+<s c="IMG_ARC_NOFILL"/>
+<s c="IMG_ARC_EDGED"/>
+<s c="IMAGETYPE_GIF"/>
+<s c="IMAGETYPE_JPEG"/>
+<s c="IMAGETYPE_PNG"/>
+<s c="IMAGETYPE_SWF"/>
+<s c="IMAGETYPE_PSD"/>
+<s c="IMAGETYPE_BMP"/>
+<s c="IMAGETYPE_WBMP"/>
+<s c="IMAGETYPE_XBM"/>
+<s c="IMAGETYPE_TIFF_II"/>
+<s c="IMAGETYPE_TIFF_MM"/>
+<s c="IMAGETYPE_IFF"/>
+<s c="IMAGETYPE_JB2"/>
+<s c="IMAGETYPE_JPC"/>
+<s c="IMAGETYPE_JP2"/>
+<s c="IMAGETYPE_JPX"/>
+<s c="IMAGETYPE_SWC"/>
+<s c="NIL"/>
+<s c="OP_DEBUG"/>
+<s c="OP_READONLY"/>
+<s c="OP_ANONYMOUS"/>
+<s c="OP_SHORTCACHE"/>
+<s c="OP_SILENT"/>
+<s c="OP_PROTOTYPE"/>
+<s c="OP_HALFOPEN"/>
+<s c="OP_EXPUNGE"/>
+<s c="OP_SECURE"/>
+<s c="CL_EXPUNGE"/>
+<s c="FT_UID"/>
+<s c="FT_PEEK"/>
+<s c="FT_NOT"/>
+<s c="FT_INTERNAL"/>
+<s c="FT_PREFETCHTEXT"/>
+<s c="ST_UID"/>
+<s c="ST_SILENT"/>
+<s c="ST_SET"/>
+<s c="CP_UID"/>
+<s c="CP_MOVE"/>
+<s c="SE_UID"/>
+<s c="SE_FREE"/>
+<s c="SE_NOPREFETCH"/>
+<s c="SO_FREE"/>
+<s c="SO_NOSERVER"/>
+<s c="SA_MESSAGES"/>
+<s c="SA_RECENT"/>
+<s c="SA_UNSEEN"/>
+<s c="SA_UIDNEXT"/>
+<s c="SA_UIDVALIDITY"/>
+<s c="SA_ALL"/>
+<s c="LATT_NOINFERIORS"/>
+<s c="LATT_NOSELECT"/>
+<s c="LATT_MARKED"/>
+<s c="LATT_UNMARKED"/>
+<s c="SORTDATE"/>
+<s c="SORTARRIVAL"/>
+<s c="SORTFROM"/>
+<s c="SORTSUBJECT"/>
+<s c="SORTTO"/>
+<s c="SORTCC"/>
+<s c="SORTSIZE"/>
+<s c="TYPETEXT"/>
+<s c="TYPEMULTIPART"/>
+<s c="TYPEMESSAGE"/>
+<s c="TYPEAPPLICATION"/>
+<s c="TYPEAUDIO"/>
+<s c="TYPEIMAGE"/>
+<s c="TYPEVIDEO"/>
+<s c="TYPEOTHER"/>
+<s c="ENC7BIT"/>
+<s c="ENC8BIT"/>
+<s c="ENCBINARY"/>
+<s c="ENCBASE64"/>
+<s c="ENCQUOTEDPRINTABLE"/>
+<s c="ENCOTHER"/>
+<s c="CREDITS_GROUP">1</s>
+<s c="CREDITS_GENERAL">2</s>
+<s c="CREDITS_SAPI">4</s>
+<s c="CREDITS_MODULES">8</s>
+<s c="CREDITS_DOCS">16</s>
+<s c="CREDITS_FULLPAGE">32</s>
+<s c="CREDITS_QA">64</s>
+<s c="CREDITS_ALL">-1</s>
+<s c="INFO_GENERAL">1</s>
+<s c="INFO_CREDITS">2</s>
+<s c="INFO_CONFIGURATION">4</s>
+<s c="INFO_MODULES">8</s>
+<s c="INFO_ENVIRONMENT">16</s>
+<s c="INFO_VARIABLES">32</s>
+<s c="INFO_LICENSE">64</s>
+<s c="INFO_ALL">-1</s>
+<s c="INGRES_ASSOC"/>
+<s c="INGRES_NUM"/>
+<s c="INGRES_BOTH"/>
+<s c="LDAP_DEREF_NEVER"/>
+<s c="LDAP_DEREF_SEARCHING"/>
+<s c="LDAP_DEREF_FINDING"/>
+<s c="LDAP_DEREF_ALWAYS"/>
+<s c="LDAP_OPT_DEREF"/>
+<s c="LDAP_OPT_SIZELIMIT"/>
+<s c="LDAP_OPT_TIMELIMIT"/>
+<s c="LDAP_OPT_PROTOCOL_VERSION"/>
+<s c="LDAP_OPT_ERROR_NUMBER"/>
+<s c="LDAP_OPT_REFERRALS"/>
+<s c="LDAP_OPT_RESTART"/>
+<s c="LDAP_OPT_HOST_NAME"/>
+<s c="LDAP_OPT_ERROR_STRING"/>
+<s c="LDAP_OPT_MATCHED_DN"/>
+<s c="LDAP_OPT_SERVER_CONTROLS"/>
+<s c="LDAP_OPT_CLIENT_CONTROLS"/>
+<s c="LDAP_OPT_DEBUG_LEVEL"/>
+<s c="GSLC_SSL_NO_AUTH"/>
+<s c="GSLC_SSL_ONEWAY_AUTH"/>
+<s c="GSLC_SSL_TWOWAY_AUTH"/>
+<s c="M_PI">3.14159265358979323846</s>
+<s c="M_E">2.7182818284590452354</s>
+<s c="M_LOG2E">1.4426950408889634074</s>
+<s c="M_LOG10E">0.43429448190325182765</s>
+<s c="M_LN2">0.69314718055994530942</s>
+<s c="M_LN10">2.30258509299404568402</s>
+<s c="M_PI_2">1.57079632679489661923</s>
+<s c="M_PI_4">0.78539816339744830962</s>
+<s c="M_1_PI">0.31830988618379067154</s>
+<s c="M_2_PI">0.63661977236758134308</s>
+<s c="M_SQRTPI">1.77245385090551602729</s>
+<s c="M_2_SQRTPI">1.12837916709551257390</s>
+<s c="M_SQRT2">1.41421356237309504880</s>
+<s c="M_SQRT3">1.73205080756887729352</s>
+<s c="M_SQRT1_2">0.70710678118654752440</s>
+<s c="M_LNPI">1.14472988584940017414</s>
+<s c="M_EULER">0.57721566490153286061</s>
+<s c="MB_OVERLOAD_MAIL"/>
+<s c="MB_OVERLOAD_STRING"/>
+<s c="MB_OVERLOAD_REGEX"/>
+<s c="MCAL_SUNDAY"/>
+<s c="MCAL_MONDAY"/>
+<s c="MCAL_TUESDAY"/>
+<s c="MCAL_WEDNESDAY"/>
+<s c="MCAL_THURSDAY"/>
+<s c="MCAL_FRIDAY"/>
+<s c="MCAL_SATURDAY"/>
+<s c="MCAL_JANUARY"/>
+<s c="MCAL_FEBRUARY"/>
+<s c="MCAL_MARCH"/>
+<s c="MCAL_APRIL"/>
+<s c="MCAL_MAY"/>
+<s c="MCAL_JUNE"/>
+<s c="MCAL_JULY"/>
+<s c="MCAL_AUGUST"/>
+<s c="MCAL_SEPTEMBER"/>
+<s c="MCAL_OCTOBER"/>
+<s c="MCAL_NOVEMBER"/>
+<s c="MCAL_DECEMBER"/>
+<s c="MCAL_RECUR_NONE"/>
+<s c="MCAL_RECUR_DAILY"/>
+<s c="MCAL_RECUR_WEEKLY"/>
+<s c="MCAL_RECUR_MONTHLY_MDAY"/>
+<s c="MCAL_RECUR_MONTHLY_WDAY"/>
+<s c="MCAL_RECUR_YEARLY"/>
+<s c="MCAL_M_SUNDAY"/>
+<s c="MCAL_M_MONDAY"/>
+<s c="MCAL_M_TUESDAY"/>
+<s c="MCAL_M_WEDNESDAY"/>
+<s c="MCAL_M_THURSDAY"/>
+<s c="MCAL_M_FRIDAY"/>
+<s c="MCAL_M_SATURDAY"/>
+<s c="MCAL_M_WEEKDAYS"/>
+<s c="MCAL_M_WEEKEND"/>
+<s c="MCAL_M_ALLDAYS"/>
+<s c="MCRYPT_ENCRYPT"/>
+<s c="MCRYPT_DECRYPT"/>
+<s c="MCRYPT_DEV_RANDOM"/>
+<s c="MCRYPT_DEV_URANDOM"/>
+<s c="MCRYPT_RAND"/>
+<s c="MC_TRANTYPE"/>
+<s c="MC_USERNAME"/>
+<s c="MC_PASSWORD"/>
+<s c="MC_ACCOUNT"/>
+<s c="MC_TRACKDATA"/>
+<s c="MC_EXPDATE"/>
+<s c="MC_STREET"/>
+<s c="MC_ZIP"/>
+<s c="MC_CV"/>
+<s c="MC_COMMENTS"/>
+<s c="MC_CLERKID"/>
+<s c="MC_STATIONID"/>
+<s c="MC_APPRCODE"/>
+<s c="MC_AMOUNT"/>
+<s c="MC_PTRANNUM"/>
+<s c="MC_TTID"/>
+<s c="MC_USER"/>
+<s c="MC_PWD"/>
+<s c="MC_ACCT"/>
+<s c="MC_BDATE"/>
+<s c="MC_EDATE"/>
+<s c="MC_BATCH"/>
+<s c="MC_FILE"/>
+<s c="MC_ADMIN"/>
+<s c="MC_AUDITTYPE"/>
+<s c="MC_CUSTOM"/>
+<s c="MC_EXAMOUNT"/>
+<s c="MC_EXCHARGES"/>
+<s c="MC_RATE"/>
+<s c="MC_RENTERNAME"/>
+<s c="MC_RETURNCITY"/>
+<s c="MC_RETURNSTATE"/>
+<s c="MC_RETURNLOCATION"/>
+<s c="MC_PRIORITY"/>
+<s c="MC_INQUIRY"/>
+<s c="MC_CARDTYPES"/>
+<s c="MC_SUB"/>
+<s c="MC_MARKER"/>
+<s c="MC_DEVICETYPE"/>
+<s c="MC_ERRORCODE"/>
+<s c="MC_NEWBATCH"/>
+<s c="MC_CURR"/>
+<s c="MC_DESCMERCH"/>
+<s c="MC_DESCLOC"/>
+<s c="MC_ORIGTYPE"/>
+<s c="MC_PIN"/>
+<s c="MC_VOIDORIGTYPE"/>
+<s c="MC_TIMESTAMP"/>
+<s c="MC_PRIO_HIGH"/>
+<s c="MC_PRIO_NORMAL"/>
+<s c="MC_PRIO_LOW"/>
+<s c="MC_USER_PROC"/>
+<s c="MC_USER_USER"/>
+<s c="MC_USER_PWD"/>
+<s c="MC_USER_INDCODE"/>
+<s c="MC_USER_MERCHID"/>
+<s c="MC_USER_BANKID"/>
+<s c="MC_USER_TERMID"/>
+<s c="MC_USER_CLIENTNUM"/>
+<s c="MC_USER_STOREID"/>
+<s c="MC_USER_AGENTID"/>
+<s c="MC_USER_CHAINID"/>
+<s c="MC_USER_ZIPCODE"/>
+<s c="MC_USER_TIMEZONE"/>
+<s c="MC_USER_MERCHCAT"/>
+<s c="MC_USER_MERNAME"/>
+<s c="MC_USER_MERCHLOC"/>
+<s c="MC_USER_STATECODE"/>
+<s c="MC_USER_PHONE"/>
+<s c="MC_USER_SUB"/>
+<s c="MC_USER_CARDTYPES"/>
+<s c="MC_USER_MODE"/>
+<s c="MC_USER_VNUMBER"/>
+<s c="MC_USER_ROUTINGID"/>
+<s c="MC_USER_PPROPERTY"/>
+<s c="MC_USER_PID"/>
+<s c="MC_USER_PIDPWD"/>
+<s c="MC_USER_SMID"/>
+<s c="MC_USER_SMIDPWD"/>
+<s c="MC_USER_USDDIV"/>
+<s c="MC_USER_AUDDIV"/>
+<s c="MC_USER_DKKDIV"/>
+<s c="MC_USER_GBPDIV"/>
+<s c="MC_USER_HKDDIV"/>
+<s c="MC_USER_JPYDIV"/>
+<s c="MC_USER_NZDDIV"/>
+<s c="MC_USER_NOKDIV"/>
+<s c="MC_USER_SGDDIV"/>
+<s c="MC_USER_ZARDIV"/>
+<s c="MC_USER_SEKDIV"/>
+<s c="MC_USER_CHFDIV"/>
+<s c="MC_USER_CADDIV"/>
+<s c="MC_USER_DIVNUM"/>
+<s c="MC_CARD_VISA"/>
+<s c="MC_CARD_MC"/>
+<s c="MC_CARD_AMEX"/>
+<s c="MC_CARD_DISC"/>
+<s c="MC_CARD_JCB"/>
+<s c="MC_CARD_CB"/>
+<s c="MC_CARD_DC"/>
+<s c="MC_CARD_GIFT"/>
+<s c="MC_CARD_OTHER"/>
+<s c="MC_CARD_ALL"/>
+<s c="MC_MODE_AUTH"/>
+<s c="MC_MODE_SETTLE"/>
+<s c="MC_MODE_BOTH"/>
+<s c="MC_MODE_ALL"/>
+<s c="MC_EXCHARGES_REST"/>
+<s c="MC_EXCHARGES_GIFT"/>
+<s c="MC_EXCHARGES_MINI"/>
+<s c="MC_EXCHARGES_TELE"/>
+<s c="MC_EXCHARGES_OTHER"/>
+<s c="MC_EXCHARGES_LAUND"/>
+<s c="MC_EXCHARGES_NONE"/>
+<s c="MC_EXCHARGES_GAS"/>
+<s c="MC_EXCHARGES_MILE"/>
+<s c="MC_EXCHARGES_LATE"/>
+<s c="MC_EXCHARGES_1WAY"/>
+<s c="MC_EXCHARGES_VIOL"/>
+<s c="MC_TRAN_SALE"/>
+<s c="MC_TRAN_REDEMPTION"/>
+<s c="MC_TRAN_PREAUTH"/>
+<s c="MC_TRAN_VOID"/>
+<s c="MC_TRAN_PREAUTHCOMPLETE"/>
+<s c="MC_TRAN_FORCE"/>
+<s c="MC_TRAN_OVERRIDE"/>
+<s c="MC_TRAN_RETURN"/>
+<s c="MC_TRAN_RELOAD"/>
+<s c="MC_TRAN_CREDIT"/>
+<s c="MC_TRAN_SETTLE"/>
+<s c="MC_TRAN_INCREMENTAL"/>
+<s c="MC_TRAN_REVERSAL"/>
+<s c="MC_TRAN_ACTIVATE"/>
+<s c="MC_TRAN_BALANCEINQ"/>
+<s c="MC_TRAN_CASHOUT"/>
+<s c="MC_TRAN_TOREVERSAL"/>
+<s c="MC_TRAN_SETTLERFR"/>
+<s c="MC_TRAN_ISSUE"/>
+<s c="MC_TRAN_TIP"/>
+<s c="MC_TRAN_MERCHRETURN"/>
+<s c="MC_TRAN_IVRREQ"/>
+<s c="MC_TRAN_IVRRESP"/>
+<s c="MC_TRAN_ADMIN"/>
+<s c="MC_TRAN_PING"/>
+<s c="MC_TRAN_CHKPWD"/>
+<s c="MC_TRAN_CHNGPWD"/>
+<s c="MC_TRAN_LISTSTATS"/>
+<s c="MC_TRAN_LISTUSERS"/>
+<s c="MC_TRAN_GETUSERINFO"/>
+<s c="MC_TRAN_ADDUSER"/>
+<s c="MC_TRAN_EDITUSER"/>
+<s c="MC_TRAN_DELUSER"/>
+<s c="MC_TRAN_ENABLEUSER"/>
+<s c="MC_TRAN_DISABLEUSER"/>
+<s c="MC_TRAN_IMPORT"/>
+<s c="MC_TRAN_EXPORT"/>
+<s c="MC_TRAN_ERRORLOG"/>
+<s c="MC_TRAN_CLEARERRORLOG"/>
+<s c="MC_TRAN_GETSUBACCTS"/>
+<s c="MC_ADMIN_GUT"/>
+<s c="MC_ADMIN_GL"/>
+<s c="MC_ADMIN_GFT"/>
+<s c="MC_ADMIN_BT"/>
+<s c="MC_ADMIN_UB"/>
+<s c="MC_ADMIN_QC"/>
+<s c="MC_ADMIN_RS"/>
+<s c="MC_ADMIN_CTH"/>
+<s c="MC_ADMIN_CFH"/>
+<s c="MC_ADMIN_FORCESETTLE"/>
+<s c="MC_ADMIN_SETBATCHNUM"/>
+<s c="MC_ADMIN_RENUMBERBATCH"/>
+<s c="MC_ADMIN_FIELDEDIT"/>
+<s c="MC_ADMIN_CLOSEBATCH"/>
+<s c="MCVE_UNUSED"/>
+<s c="MCVE_NEW"/>
+<s c="MCVE_PENDING"/>
+<s c="MCVE_DONE"/>
+<s c="MCVE_GOOD"/>
+<s c="MCVE_BAD"/>
+<s c="MCVE_STREET"/>
+<s c="MCVE_ZIP"/>
+<s c="MCVE_UNKNOWN"/>
+<s c="MCVE_ERROR"/>
+<s c="MCVE_FAIL"/>
+<s c="MCVE_SUCCESS"/>
+<s c="MCVE_AUTH"/>
+<s c="MCVE_DENY"/>
+<s c="MCVE_CALL"/>
+<s c="MCVE_DUPL"/>
+<s c="MCVE_PKUP"/>
+<s c="MCVE_RETRY"/>
+<s c="MCVE_SETUP"/>
+<s c="MCVE_TIMEOUT"/>
+<s c="MCVE_SALE"/>
+<s c="MCVE_PREAUTH"/>
+<s c="MCVE_FORCE"/>
+<s c="MCVE_OVERRIDE"/>
+<s c="MCVE_RETURN"/>
+<s c="MCVE_SETTLE"/>
+<s c="MCVE_PROC"/>
+<s c="MCVE_USER"/>
+<s c="MCVE_PWD"/>
+<s c="MCVE_INDCODE"/>
+<s c="MCVE_MERCHID"/>
+<s c="MCVE_BANKID"/>
+<s c="MCVE_TERMID"/>
+<s c="MCVE_CLIENTNUM"/>
+<s c="MCVE_STOREID"/>
+<s c="MCVE_AGENTID"/>
+<s c="MCVE_CHAINID"/>
+<s c="MCVE_ZIPCODE"/>
+<s c="MCVE_TIMEZONE"/>
+<s c="MCVE_MERCHCAT"/>
+<s c="MCVE_MERNAME"/>
+<s c="MCVE_MERCHLOC"/>
+<s c="MCVE_STATECODE"/>
+<s c="MCVE_SERVICEPHONE"/>
+<s c="MHASH_MD5"/>
+<s c="MHASH_SHA1"/>
+<s c="MHASH_HAVAL256"/>
+<s c="MHASH_HAVAL192"/>
+<s c="MHASH_HAVAL160"/>
+<s c="MHASH_HAVAL128"/>
+<s c="MHASH_RIPEMD160"/>
+<s c="MHASH_GOST"/>
+<s c="MHASH_TIGER"/>
+<s c="MHASH_CRC32"/>
+<s c="MHASH_CRC32B"/>
+<s c="SWFBUTTON_HIT"/>
+<s c="SWFBUTTON_DOWN"/>
+<s c="SWFBUTTON_OVER"/>
+<s c="SWFBUTTON_UP"/>
+<s c="SWFBUTTON_MOUSEUPOUTSIDE"/>
+<s c="SWFBUTTON_DRAGOVER"/>
+<s c="SWFBUTTON_DRAGOUT"/>
+<s c="SWFBUTTON_MOUSEUP"/>
+<s c="SWFBUTTON_MOUSEDOWN"/>
+<s c="SWFBUTTON_MOUSEOUT"/>
+<s c="SWFBUTTON_MOUSEOVER"/>
+<s c="SWFFILL_RADIAL_GRADIENT"/>
+<s c="SWFFILL_LINEAR_GRADIENT"/>
+<s c="SWFFILL_TILED_BITMAP"/>
+<s c="SWFFILL_CLIPPED_BITMAP"/>
+<s c="SWFTEXTFIELD_HASLENGTH"/>
+<s c="SWFTEXTFIELD_NOEDIT"/>
+<s c="SWFTEXTFIELD_PASSWORD"/>
+<s c="SWFTEXTFIELD_MULTILINE"/>
+<s c="SWFTEXTFIELD_WORDWRAP"/>
+<s c="SWFTEXTFIELD_DRAWBOX"/>
+<s c="SWFTEXTFIELD_NOSELECT"/>
+<s c="SWFTEXTFIELD_HTML"/>
+<s c="SWFTEXTFIELD_ALIGN_LEFT"/>
+<s c="SWFTEXTFIELD_ALIGN_RIGHT"/>
+<s c="SWFTEXTFIELD_ALIGN_CENTER"/>
+<s c="SWFTEXTFIELD_ALIGN_JUSTIFY"/>
+<s c="SWFACTION_ONLOAD"/>
+<s c="SWFACTION_ENTERFRAME"/>
+<s c="SWFACTION_UNLOAD"/>
+<s c="SWFACTION_MOUSEMOVE"/>
+<s c="SWFACTION_MOUSEDOWN"/>
+<s c="SWFACTION_MOUSEUP"/>
+<s c="SWFACTION_KEYDOWN"/>
+<s c="SWFACTION_KEYUP"/>
+<s c="SWFACTION_DATA"/>
+<s c="CONNECTION_ABORTED"/>
+<s c="CONNECTION_NORMAL"/>
+<s c="CONNECTION_TIMEOUT"/>
+<s c="UDM_FIELD_URLID"/>
+<s c="UDM_FIELD_URL"/>
+<s c="UDM_FIELD_CONTENT"/>
+<s c="UDM_FIELD_TITLE"/>
+<s c="UDM_FIELD_KEYWORDS"/>
+<s c="UDM_FIELD_DESC"/>
+<s c="UDM_FIELD_DESCRIPTION"/>
+<s c="UDM_FIELD_TEXT"/>
+<s c="UDM_FIELD_SIZE"/>
+<s c="UDM_FIELD_RATING"/>
+<s c="UDM_FIELD_SCORE"/>
+<s c="UDM_FIELD_MODIFIED"/>
+<s c="UDM_FIELD_ORDER"/>
+<s c="UDM_FIELD_CRC"/>
+<s c="UDM_FIELD_CATEGORY"/>
+<s c="UDM_FIELD_LANG"/>
+<s c="UDM_FIELD_CHARSET"/>
+<s c="UDM_PARAM_PAGE_SIZE"/>
+<s c="UDM_PARAM_PAGE_NUM"/>
+<s c="UDM_PARAM_SEARCH_MODE"/>
+<s c="UDM_PARAM_CACHE_MODE"/>
+<s c="UDM_PARAM_TRACK_MODE"/>
+<s c="UDM_PARAM_PHRASE_MODE"/>
+<s c="UDM_PARAM_CHARSET"/>
+<s c="UDM_PARAM_LOCAL_CHARSET"/>
+<s c="UDM_PARAM_BROWSER_CHARSET"/>
+<s c="UDM_PARAM_STOPTABLE"/>
+<s c="UDM_PARAM_STOP_TABLE"/>
+<s c="UDM_PARAM_STOPFILE"/>
+<s c="UDM_PARAM_STOP_FILE"/>
+<s c="UDM_PARAM_WEIGHT_FACTOR"/>
+<s c="UDM_PARAM_WORD_MATCH"/>
+<s c="UDM_PARAM_MAX_WORD_LEN"/>
+<s c="UDM_PARAM_MAX_WORDLEN"/>
+<s c="UDM_PARAM_MIN_WORD_LEN"/>
+<s c="UDM_PARAM_MIN_WORDLEN"/>
+<s c="UDM_PARAM_ISPELL_PREFIXES"/>
+<s c="UDM_PARAM_ISPELL_PREFIX"/>
+<s c="UDM_PARAM_PREFIXES"/>
+<s c="UDM_PARAM_PREFIX"/>
+<s c="UDM_PARAM_CROSS_WORDS"/>
+<s c="UDM_PARAM_CROSSWORDS"/>
+<s c="UDM_PARAM_VARDIR"/>
+<s c="UDM_PARAM_DATADIR"/>
+<s c="UDM_PARAM_HLBEG"/>
+<s c="UDM_PARAM_HLEND"/>
+<s c="UDM_PARAM_SYNONYM"/>
+<s c="UDM_PARAM_SEARCHD"/>
+<s c="UDM_PARAM_QSTRING"/>
+<s c="UDM_PARAM_REMOTE_ADDR"/>
+<s c="UDM_LIMIT_CAT"/>
+<s c="UDM_LIMIT_URL"/>
+<s c="UDM_LIMIT_TAG"/>
+<s c="UDM_LIMIT_LANG"/>
+<s c="UDM_LIMIT_DATE"/>
+<s c="UDM_PARAM_FOUND"/>
+<s c="UDM_PARAM_NUM_ROWS"/>
+<s c="UDM_PARAM_WORDINFO"/>
+<s c="UDM_PARAM_WORD_INFO"/>
+<s c="UDM_PARAM_SEARCHTIME"/>
+<s c="UDM_PARAM_SEARCH_TIME"/>
+<s c="UDM_PARAM_FIRST_DOC"/>
+<s c="UDM_PARAM_LAST_DOC"/>
+<s c="UDM_MODE_ALL"/>
+<s c="UDM_MODE_ANY"/>
+<s c="UDM_MODE_BOOL"/>
+<s c="UDM_MODE_PHRASE"/>
+<s c="UDM_CACHE_ENABLED"/>
+<s c="UDM_CACHE_DISABLED"/>
+<s c="UDM_TRACK_ENABLED"/>
+<s c="UDM_TRACK_DISABLED"/>
+<s c="UDM_PHRASE_ENABLED"/>
+<s c="UDM_PHRASE_DISABLED"/>
+<s c="UDM_CROSS_WORDS_ENABLED"/>
+<s c="UDM_CROSSWORDS_ENABLED"/>
+<s c="UDM_CROSS_WORDS_DISABLED"/>
+<s c="UDM_CROSSWORDS_DISABLED"/>
+<s c="UDM_PREFIXES_ENABLED"/>
+<s c="UDM_PREFIX_ENABLED"/>
+<s c="UDM_ISPELL_PREFIXES_ENABLED"/>
+<s c="UDM_ISPELL_PREFIX_ENABLED"/>
+<s c="UDM_PREFIXES_DISABLED"/>
+<s c="UDM_PREFIX_DISABLED"/>
+<s c="UDM_ISPELL_PREFIXES_DISABLED"/>
+<s c="UDM_ISPELL_PREFIX_DISABLED"/>
+<s c="UDM_ISPELL_TYPE_AFFIX"/>
+<s c="UDM_ISPELL_TYPE_SPELL"/>
+<s c="UDM_ISPELL_TYPE_DB"/>
+<s c="UDM_ISPELL_TYPE_SERVER"/>
+<s c="UDM_MATCH_WORD"/>
+<s c="UDM_MATCH_BEGIN"/>
+<s c="UDM_MATCH_SUBSTR"/>
+<s c="UDM_MATCH_END"/>
+<s c="MSQL_ASSOC"/>
+<s c="MSQL_NUM"/>
+<s c="MSQL_BOTH"/>
+<s c="MSSQL_ASSOC"/>
+<s c="MSSQL_NUM"/>
+<s c="MSSQL_BOTH"/>
+<s c="SQLTEXT"/>
+<s c="SQLVARCHAR"/>
+<s c="SQLCHAR"/>
+<s c="SQLINT1"/>
+<s c="SQLINT2"/>
+<s c="SQLINT4"/>
+<s c="SQLBIT"/>
+<s c="SQLFLT8"/>
+<s c="MYSQL_CLIENT_COMPRESS">Use compression protocol</s>
+<s c="MYSQL_CLIENT_IGNORE_SPACE">Allow space after function names</s>
+<s c="MYSQL_CLIENT_INTERACTIVE">Allow interactive_timeout seconds (instead of wait_timeout) of
+        inactivity before closing the connection.</s>
+<s c="MYSQL_ASSOC">Columns are returned into the array having the fieldname as the array
+       index.</s>
+<s c="MYSQL_BOTH">Columns are returned into the array having both a numerical index
+       and the fieldname as the array index.</s>
+<s c="MYSQL_NUM">Columns are returned into the array having a numerical index to the
+       fields. This index starts with 0, the first field in the result.</s>
+<s c="MYSQLI_READ_DEFAULT_GROUP">Read options from the named group from `my.cnf' or the file specified with MYSQLI_READ_DEFAULT_FILE</s>
+<s c="MYSQLI_READ_DEFAULT_FILE">Read options from the named option file instead of from my.cnf</s>
+<s c="MYSQLI_OPT_CONNECT_TIMEOUT">Connect timeout in seconds</s>
+<s c="MYSQLI_OPT_LOCAL_INFILE">Enables command LOAD LOCAL INFILE</s>
+<s c="MYSQLI_INIT_COMMAND">Command to execute when connecting to MySQL server. Will automatically be re-executed when reconnecting.</s>
+<s c="MYSQLI_CLIENT_SSL">Use SSL (encrypted protocol). This option should not be set by application programs; 
+       it is set internally in the MySQL client library</s>
+<s c="MYSQLI_CLIENT_COMPRESS">Use compression protocol</s>
+<s c="MYSQLI_CLIENT_INTERACTIVE">Allow interactive_timeout seconds (instead of wait_timeout seconds) of inactivity before closing the connection. The client's session wait_timeout variable will be set to the value of the session interactive_timeout variable.</s>
+<s c="MYSQLI_CLIENT_IGNORE_SPACE">Allow spaces after function names. Makes all functions names reserved words.</s>
+<s c="MYSQLI_CLIENT_NO_SCHEMA">Don't allow the db_name.tbl_name.col_name syntax.</s>
+<s c="MYSQLI_CLIENT_MULTI_QUERIES"/>
+<s c="MYSQLI_STORE_RESULT">For using buffered resultsets</s>
+<s c="MYSQLI_USE_RESULT">For using unbuffered resultsets</s>
+<s c="MYSQLI_ASSOC">Columns are returned into the array having the fieldname as the array index.</s>
+<s c="MYSQLI_NUM">Columns are returned into the array having an enumerated index.</s>
+<s c="MYSQLI_BOTH">Columns are returned into the array having both a numerical index and the fieldname as the associative index.</s>
+<s c="MYSQLI_NOT_NULL_FLAG">Indicates that a field is defined as NOT NULL</s>
+<s c="MYSQLI_PRI_KEY_FLAG">Field is part of a primary index</s>
+<s c="MYSQLI_UNIQUE_KEY_FLAG">Field is part of an unique index.</s>
+<s c="MYSQLI_MULTIPLE_KEY_FLAG">Field is part of an index.</s>
+<s c="MYSQLI_BLOB_FLAG">Field is defined as BLOB</s>
+<s c="MYSQLI_UNSIGNED_FLAG">Field is defined as UNSIGNED</s>
+<s c="MYSQLI_ZEROFILL_FLAG">Field is defined as ZEROFILL</s>
+<s c="MYSQLI_AUTO_INCREMENT_FLAG">Field is defined as AUTO_INCREMENT</s>
+<s c="MYSQLI_TIMESTAMP_FLAG">Field is defined as TIMESTAMP</s>
+<s c="MYSQLI_SET_FLAG">Field is defined as SET</s>
+<s c="MYSQLI_NUM_FLAG">Field is defined as NUMERIC</s>
+<s c="MYSQLI_PART_KEY_FLAG">Field is part of an multi-index</s>
+<s c="MYSQLI_GROUP_FLAG">Field is part of GROUP BY</s>
+<s c="MYSQLI_TYPE_DECIMAL">Field is defined as DECIMAL</s>
+<s c="MYSQLI_TYPE_TINY">Field is defined as TINYINT</s>
+<s c="MYSQLI_TYPE_SHORT">Field is defined as INT</s>
+<s c="MYSQLI_TYPE_LONG">Field is defined as INT</s>
+<s c="MYSQLI_TYPE_FLOAT">Field is defined as FLOAT</s>
+<s c="MYSQLI_TYPE_DOUBLE">Field is defined as DOUBLE</s>
+<s c="MYSQLI_TYPE_NULL">Field is defined as DEFAULT NULL</s>
+<s c="MYSQLI_TYPE_TIMESTAMP">Field is defined as TIMESTAMP</s>
+<s c="MYSQLI_TYPE_LONGLONG">Field is defined as BIGINT</s>
+<s c="MYSQLI_TYPE_INT24">Field is defined as MEDIUMINT</s>
+<s c="MYSQLI_TYPE_DATE">Field is defined as DATE</s>
+<s c="MYSQLI_TYPE_TIME">Field is defined as TIME</s>
+<s c="MYSQLI_TYPE_DATETIME">Field is defined as DATETIME</s>
+<s c="MYSQLI_TYPE_YEAR">Field is defined as YEAR</s>
+<s c="MYSQLI_TYPE_NEWDATE">Field is defined as DATE</s>
+<s c="MYSQLI_TYPE_ENUM">Field is defined as ENUM</s>
+<s c="MYSQLI_TYPE_SET">Field is defined as SET</s>
+<s c="MYSQLI_TYPE_TINY_BLOB">Field is defined as TINYBLOB</s>
+<s c="MYSQLI_TYPE_MEDIUM_BLOB">Field is defined as MEDIUMBLOB</s>
+<s c="MYSQLI_TYPE_LONG_BLOB">Field is defined as LONGBLOB</s>
+<s c="MYSQLI_TYPE_BLOB">Field is defined as BLOB</s>
+<s c="MYSQLI_TYPE_STRING">Field is defined as VARCHAR</s>
+<s c="MYSQLI_TYPE_CHAR">Field is defined as CHAR</s>
+<s c="MYSQLI_TYPE_GEOMETRY">Field is defined as GEOMETRY</s>
+<s c="MYSQLI_NEED_DATA">More data available for bind variable</s>
+<s c="MYSQLI_NO_DATA">No more data available for bind variable</s>
+<s c="NCURSES_COLOR_BLACK">no color (black)</s>
+<s c="NCURSES_COLOR_WHITE">white</s>
+<s c="NCURSES_COLOR_RED">red - supported when terminal is in color mode</s>
+<s c="NCURSES_COLOR_GREEN">green - supported when terminal is in color mod</s>
+<s c="NCURSES_COLOR_YELLOW">yellow - supported when terminal is in color mod</s>
+<s c="NCURSES_COLOR_BLUE">blue - supported when terminal is in color mod</s>
+<s c="NCURSES_COLOR_CYAN">cyan - supported when terminal is in color mod</s>
+<s c="NCURSES_COLOR_MAGENTA">magenta - supported when terminal is in color mod</s>
+<s c="NCURSES_KEY_DOWN">down arrow</s>
+<s c="NCURSES_KEY_UP">up arrow</s>
+<s c="NCURSES_KEY_LEFT">left arrow</s>
+<s c="NCURSES_KEY_RIGHT">right arrow</s>
+<s c="NCURSES_KEY_HOME">home key (upward+left arrow)</s>
+<s c="NCURSES_KEY_BACKSPACE">backspace</s>
+<s c="NCURSES_KEY_DL">delete line</s>
+<s c="NCURSES_KEY_IL">insert line</s>
+<s c="NCURSES_KEY_DC">delete character</s>
+<s c="NCURSES_KEY_IC">insert char or enter insert mode</s>
+<s c="NCURSES_KEY_EIC">exit insert char mode</s>
+<s c="NCURSES_KEY_CLEAR">clear screen</s>
+<s c="NCURSES_KEY_EOS">clear to end of screen</s>
+<s c="NCURSES_KEY_EOL">clear to end of line</s>
+<s c="NCURSES_KEY_SF">scroll one line forward</s>
+<s c="NCURSES_KEY_SR">scroll one line backward</s>
+<s c="NCURSES_KEY_NPAGE">next page</s>
+<s c="NCURSES_KEY_PPAGE">previous page</s>
+<s c="NCURSES_KEY_STAB">set tab</s>
+<s c="NCURSES_KEY_CTAB">clear tab</s>
+<s c="NCURSES_KEY_CATAB">clear all tabs</s>
+<s c="NCURSES_KEY_SRESET">soft (partial) reset</s>
+<s c="NCURSES_KEY_RESET">reset or hard reset</s>
+<s c="NCURSES_KEY_PRINT">print</s>
+<s c="NCURSES_KEY_LL">lower left</s>
+<s c="NCURSES_KEY_A1">upper left of keypad</s>
+<s c="NCURSES_KEY_A3">upper right of keypad</s>
+<s c="NCURSES_KEY_B2">center of keypad</s>
+<s c="NCURSES_KEY_C1">lower left of keypad</s>
+<s c="NCURSES_KEY_C3">lower right of keypad</s>
+<s c="NCURSES_KEY_BTAB">back tab</s>
+<s c="NCURSES_KEY_BEG">beginning</s>
+<s c="NCURSES_KEY_CANCEL">cancel</s>
+<s c="NCURSES_KEY_CLOSE">close</s>
+<s c="NCURSES_KEY_COMMAND">cmd (command)</s>
+<s c="NCURSES_KEY_COPY">copy</s>
+<s c="NCURSES_KEY_CREATE">create</s>
+<s c="NCURSES_KEY_END">end</s>
+<s c="NCURSES_KEY_EXIT">exit</s>
+<s c="NCURSES_KEY_FIND">find</s>
+<s c="NCURSES_KEY_HELP">help</s>
+<s c="NCURSES_KEY_MARK">mark</s>
+<s c="NCURSES_KEY_MESSAGE">message</s>
+<s c="NCURSES_KEY_MOVE">move</s>
+<s c="NCURSES_KEY_NEXT">next</s>
+<s c="NCURSES_KEY_OPEN">open</s>
+<s c="NCURSES_KEY_OPTIONS">options</s>
+<s c="NCURSES_KEY_PREVIOUS">previous</s>
+<s c="NCURSES_KEY_REDO">redo</s>
+<s c="NCURSES_KEY_REFERENCE">ref (reference)</s>
+<s c="NCURSES_KEY_REFRESH">refresh</s>
+<s c="NCURSES_KEY_REPLACE">replace</s>
+<s c="NCURSES_KEY_RESTART">restart</s>
+<s c="NCURSES_KEY_RESUME">resume</s>
+<s c="NCURSES_KEY_SAVE">save</s>
+<s c="NCURSES_KEY_SBEG">shiftet beg (beginning)</s>
+<s c="NCURSES_KEY_SCANCEL">shifted cancel</s>
+<s c="NCURSES_KEY_SCOMMAND">shifted command</s>
+<s c="NCURSES_KEY_SCOPY">shifted copy</s>
+<s c="NCURSES_KEY_SCREATE">shifted create</s>
+<s c="NCURSES_KEY_SDC">shifted delete char</s>
+<s c="NCURSES_KEY_SDL">shifted delete line</s>
+<s c="NCURSES_KEY_SELECT">select</s>
+<s c="NCURSES_KEY_SEND">shifted end</s>
+<s c="NCURSES_KEY_SEOL">shifted end of line</s>
+<s c="NCURSES_KEY_SEXIT">shifted exit</s>
+<s c="NCURSES_KEY_SFIND">shifted find</s>
+<s c="NCURSES_KEY_SHELP">shifted help</s>
+<s c="NCURSES_KEY_SHOME">shifted home</s>
+<s c="NCURSES_KEY_SIC">shifted input</s>
+<s c="NCURSES_KEY_SLEFT">shifted left arrow</s>
+<s c="NCURSES_KEY_SMESSAGE">shifted message</s>
+<s c="NCURSES_KEY_SMOVE">shifted move</s>
+<s c="NCURSES_KEY_SNEXT">shifted next</s>
+<s c="NCURSES_KEY_SOPTIONS">shifted options</s>
+<s c="NCURSES_KEY_SPREVIOUS">shifted previous</s>
+<s c="NCURSES_KEY_SPRINT">shifted print</s>
+<s c="NCURSES_KEY_SREDO">shifted redo</s>
+<s c="NCURSES_KEY_SREPLACE">shifted replace</s>
+<s c="NCURSES_KEY_SRIGHT">shifted right arrow</s>
+<s c="NCURSES_KEY_SRSUME">shifted resume</s>
+<s c="NCURSES_KEY_SSAVE">shifted save</s>
+<s c="NCURSES_KEY_SSUSPEND">shifted suspend</s>
+<s c="NCURSES_KEY_UNDO">undo</s>
+<s c="NCURSES_KEY_MOUSE">mouse event has occurred</s>
+<s c="NCURSES_KEY_MAX">maximum key value</s>
+<s c="NCURSES_BUTTON_CTRL">ctrl pressed during click</s>
+<s c="NCURSES_BUTTON_SHIFT">shift pressed during click</s>
+<s c="NCURSES_BUTTON_ALT">alt pressed during click</s>
+<s c="NCURSES_ALL_MOUSE_EVENTS">report all mouse events</s>
+<s c="NCURSES_REPORT_MOUSE_POSITION">report mouse position</s>
+<s c="LOG_CONS">if there is an error while sending data to the system logger,
+       write directly to the system console</s>
+<s c="LOG_NDELAY">open the connection to the logger immediately</s>
+<s c="LOG_ODELAY">(default) delay opening the connection until the first
+       message is logged</s>
+<s c="LOG_NOWAIT"/>
+<s c="LOG_PERROR">print log message also to standard error</s>
+<s c="LOG_PID">include PID with each message</s>
+<s c="LOG_AUTH">security/authorization messages (use LOG_AUTHPRIV instead
+       in systems where that constant is defined)</s>
+<s c="LOG_AUTHPRIV">security/authorization messages (private)</s>
+<s c="LOG_CRON">clock daemon (cron and at)</s>
+<s c="LOG_DAEMON">other system daemons</s>
+<s c="LOG_KERN">kernel messages</s>
+<s c="LOG_LPR">line printer subsystem</s>
+<s c="LOG_MAIL">mail subsystem</s>
+<s c="LOG_NEWS">USENET news subsystem</s>
+<s c="LOG_SYSLOG">messages generated internally by syslogd</s>
+<s c="LOG_USER">generic user-level messages</s>
+<s c="LOG_UUCP">UUCP subsystem</s>
+<s c="LOG_EMERG">system is unusable</s>
+<s c="LOG_ALERT">action must be taken immediately</s>
+<s c="LOG_CRIT">critical conditions</s>
+<s c="LOG_ERR">error conditions</s>
+<s c="LOG_WARNING">warning conditions</s>
+<s c="LOG_NOTICE">normal, but significant, condition</s>
+<s c="LOG_INFO">informational message</s>
+<s c="LOG_DEBUG">debug-level message</s>
+<s c="DNS_A">IPv4 Address Resource</s>
+<s c="DNS_MX">Mail Exchanger Resource</s>
+<s c="DNS_CNAME">Alias (Canonical Name) Resource</s>
+<s c="DNS_NS">Authoritative Name Server Resource</s>
+<s c="DNS_PTR">Pointer Resource</s>
+<s c="DNS_HINFO">Host Info Resource (See IANA's
+        Operating System Names
+        for the meaning of these values)</s>
+<s c="DNS_SOA">Start of Authority Resource</s>
+<s c="DNS_TXT">Text Resource</s>
+<s c="DNS_ANY">Any Resource Record.  On most systems
+        this returns all resource records, however
+        it should not be counted upon for critical
+       uses.  Try DNS_ALL instead.</s>
+<s c="DNS_AAAA">IPv6 Address Resource</s>
+<s c="DNS_ALL">Iteratively query the name server for
+        each available record type.</s>
+<s c="YPERR_BADARGS"/>
+<s c="YPERR_BADDB"/>
+<s c="YPERR_BUSY"/>
+<s c="YPERR_DOMAIN"/>
+<s c="YPERR_KEY"/>
+<s c="YPERR_MAP"/>
+<s c="YPERR_NODOM"/>
+<s c="YPERR_NOMORE"/>
+<s c="YPERR_PMAP"/>
+<s c="YPERR_RESRC"/>
+<s c="YPERR_RPC"/>
+<s c="YPERR_YPBIND"/>
+<s c="YPERR_YPERR"/>
+<s c="YPERR_YPSERV"/>
+<s c="YPERR_VERS"/>
+<s c="OCI_DEFAULT"/>
+<s c="OCI_DESCRIBE_ONLY"/>
+<s c="OCI_COMMIT_ON_SUCCESS"/>
+<s c="OCI_EXACT_FETCH"/>
+<s c="OCI_SYSDATE"/>
+<s c="OCI_B_BFILE"/>
+<s c="OCI_B_CFILEE"/>
+<s c="OCI_B_CLOB"/>
+<s c="OCI_B_BLOB"/>
+<s c="OCI_B_ROWID"/>
+<s c="OCI_B_CURSOR"/>
+<s c="OCI_B_NTY"/>
+<s c="OCI_B_BIN"/>
+<s c="SQLT_BFILEE"/>
+<s c="SQLT_CFILEE"/>
+<s c="SQLT_CLOB"/>
+<s c="SQLT_BLOB"/>
+<s c="SQLT_RDD"/>
+<s c="SQLT_NTY"/>
+<s c="OCI_FETCHSTATEMENT_BY_COLUMN"/>
+<s c="OCI_FETCHSTATEMENT_BY_ROW"/>
+<s c="OCI_ASSOC"/>
+<s c="OCI_NUM"/>
+<s c="OCI_BOTH"/>
+<s c="OCI_RETURN_NULLS"/>
+<s c="OCI_RETURN_LOBS"/>
+<s c="OCI_DTYPE_FILE"/>
+<s c="OCI_DTYPE_LOB"/>
+<s c="OCI_DTYPE_ROWID"/>
+<s c="OCI_D_FILE"/>
+<s c="OCI_D_LOB"/>
+<s c="OCI_D_ROWID"/>
+<s c="PKCS7_TEXT">Adds text/plain content type headers to encrypted/signed
+         message. If decrypting or verifying, it strips those headers from
+         the output - if the decrypted or verified message is not of MIME type
+         text/plain then an error will occur.</s>
+<s c="PKCS7_BINARY">Normally the input message is converted to &quot;canonical&quot; format
+         which is effectively using CR and LF as end of line: as required by
+         the S/MIME specification.  When this options is present, no
+         translation occurs.  This is useful when handling binary data which
+         may not be in MIME format.</s>
+<s c="PKCS7_NOINTERN">When verifying a message, certificates (if
+           any) included in the message are normally searched for the
+           signing certificate. With this option only the
+           certificates specified in the extracerts
+           parameter of openssl_pkcs7_verify are
+           used.  The supplied certificates can still be used as
+           untrusted CAs however.</s>
+<s c="PKCS7_NOVERIFY">Do not verify the signers certificate of a signed
+         message.</s>
+<s c="PKCS7_NOCHAIN">Do not chain verification of signers certificates: that is
+         don't use the certificates in the signed message as untrusted CAs.</s>
+<s c="PKCS7_NOCERTS">When signing a message the signer's certificate is normally
+         included - with this option it is excluded.  This will reduce the
+         size of the signed message but the verifier must have a copy of the
+         signers certificate available locally (passed using the
+         extracerts to
+         openssl_pkcs7_verify for example).</s>
+<s c="PKCS7_NOATTR">Normally when a message is signed, a set of attributes are
+         included which include the signing time and the supported symmetric
+         algorithms.  With this option they are not included.</s>
+<s c="PKCS7_DETACHED">When signing a message, use cleartext signing with the MIME
+         type multipart/signed.  This is the default
+         if you do not specify any flags to
+         openssl_pkcs7_sign.
+         If you turn this option off, the message will be signed using
+         opaque signing, which is more resistant to translation by mail relays
+         but cannot be read by mail agents that do not support S/MIME.</s>
+<s c="PKCS7_NOSIGS">Don't try and verify the signatures on a message</s>
+<s c="ORA_BIND_INOUT"/>
+<s c="ORA_BIND_IN"/>
+<s c="ORA_BIND_OUT"/>
+<s c="ORA_FETCHINTO_ASSOC"/>
+<s c="ORA_FETCHINTO_NULLS"/>
+<s c="WNOHANG"/>
+<s c="WUNTRACED"/>
+<s c="SIG_IGN"/>
+<s c="SIG_DFL"/>
+<s c="SIG_ERR"/>
+<s c="SIGHUP"/>
+<s c="SIGINT"/>
+<s c="SIGQUIT"/>
+<s c="SIGILL"/>
+<s c="SIGTRAP"/>
+<s c="SIGABRT"/>
+<s c="SIGIOT"/>
+<s c="SIGBUS"/>
+<s c="SIGFPE"/>
+<s c="SIGKILL"/>
+<s c="SIGUSR1"/>
+<s c="SIGSEGV"/>
+<s c="SIGUSR2"/>
+<s c="SIGPIPE"/>
+<s c="SIGALRM"/>
+<s c="SIGTERM"/>
+<s c="SIGSTKFLT"/>
+<s c="SIGCLD"/>
+<s c="SIGCHLD"/>
+<s c="SIGCONT"/>
+<s c="SIGSTOP"/>
+<s c="SIGTSTP"/>
+<s c="SIGTTIN"/>
+<s c="SIGTTOU"/>
+<s c="SIGURG"/>
+<s c="SIGXCPU"/>
+<s c="SIGXFSZ"/>
+<s c="SIGVTALRM"/>
+<s c="SIGPROF"/>
+<s c="SIGWINCH"/>
+<s c="SIGPOLL"/>
+<s c="SIGIO"/>
+<s c="SIGPWR"/>
+<s c="SIGSYS"/>
+<s c="SIGBABY"/>
+<s c="PREG_PATTERN_ORDER">Orders results so that $matches[0] is an array of full pattern
+      matches, $matches[1] is an array of strings matched by the first
+      parenthesized subpattern, and so on. This flag is only used with
+      preg_match_all.</s>
+<s c="PREG_SET_ORDER">Orders results so that $matches[0] is an array of first set of
+      matches, $matches[1] is an array of second set of matches, and so
+      on. This flag is only used with preg_match_all.</s>
+<s c="PREG_OFFSET_CAPTURE">See the description of
+      PREG_SPLIT_OFFSET_CAPTURE.  This flag is
+      available since PHP 4.3.0.</s>
+<s c="PREG_SPLIT_NO_EMPTY">This flag tells preg_split to return only non-empty
+      pieces.</s>
+<s c="PREG_SPLIT_DELIM_CAPTURE">This flag tells preg_split to capture
+      parenthesized expression in the delimiter pattern as well. This flag
+      is available since PHP 4.0.5.</s>
+<s c="PREG_SPLIT_OFFSET_CAPTURE">If this flag is set, for every occurring match the appendant string
+      offset will also be returned. Note that this changes the return
+      values in an array where every element is an array consisting of the
+      matched string at offset 0 and its string offset within subject at
+      offset 1. This flag is available since PHP 4.3.0
+      and is only used for preg_split.</s>
+<s c="PGSQL_ASSOC"/>
+<s c="PGSQL_NUM"/>
+<s c="PGSQL_BOTH"/>
+<s c="PGSQL_CONNECTION_BAD"/>
+<s c="PGSQL_CONNECTION_OK"/>
+<s c="PGSQL_SEEK_SET"/>
+<s c="PGSQL_SEEK_CUR"/>
+<s c="PGSQL_SEEK_END"/>
+<s c="PGSQL_ESCAPE_STRING"/>
+<s c="PGSQL_ESCAPE_BYTEA"/>
+<s c="PGSQL_EMPTY_QUERY"/>
+<s c="PGSQL_COMMAND_OK"/>
+<s c="PGSQL_TUPLES_OK"/>
+<s c="PGSQL_COPY_OUT"/>
+<s c="PGSQL_COPY_IN"/>
+<s c="PGSQL_BAD_RESPONSE"/>
+<s c="PGSQL_NONFATAL_ERROR"/>
+<s c="PGSQL_FATAL_ERROR"/>
+<s c="PSPELL_FAST"/>
+<s c="PSPELL_NORMAL"/>
+<s c="PSPELL_BAD_SPELLERS"/>
+<s c="PSPELL_RUN_TOGETHER"/>
+<s c="MSG_IPC_NOWAIT">integer</s>
+<s c="MSG_NOERROR">integer</s>
+<s c="MSG_EXCEPT">integer</s>
+<s c="SID"/>
+<s c="SNMP_VALUE_LIBRARY"/>
+<s c="SNMP_VALUE_PLAIN"/>
+<s c="SNMP_VALUE_OBJECT"/>
+<s c="SNMP_BIT_STR"/>
+<s c="SNMP_OCTET_STR"/>
+<s c="SNMP_OPAQUE"/>
+<s c="SNMP_NULL"/>
+<s c="SNMP_OBJECT_ID"/>
+<s c="SNMP_IPADDRESS"/>
+<s c="SNMP_COUNTER"/>
+<s c="SNMP_UNSIGNED"/>
+<s c="SNMP_TIMETICKS"/>
+<s c="SNMP_UINTEGER"/>
+<s c="SNMP_INTEGER"/>
+<s c="SNMP_COUNTER64"/>
+<s c="SOAP_1_1"/>
+<s c="SOAP_1_2"/>
+<s c="SOAP_PERSISTENCE_SESSION"/>
+<s c="SOAP_PERSISTENCE_REQUEST"/>
+<s c="SOAP_FUNCTIONS_ALL"/>
+<s c="SOAP_ENCODED"/>
+<s c="SOAP_LITERAL"/>
+<s c="SOAP_RPC"/>
+<s c="SOAP_DOCUMENT"/>
+<s c="SOAP_ACTOR_NEXT"/>
+<s c="SOAP_ACTOR_NONE"/>
+<s c="SOAP_ACTOR_UNLIMATERECEIVER"/>
+<s c="UNKNOWN_TYPE"/>
+<s c="XSD_STRING"/>
+<s c="XSD_BOOLEAN"/>
+<s c="XSD_DECIMAL"/>
+<s c="XSD_FLOAT"/>
+<s c="XSD_DOUBLE"/>
+<s c="XSD_DURATION"/>
+<s c="XSD_DATETIME"/>
+<s c="XSD_TIME"/>
+<s c="XSD_DATE"/>
+<s c="XSD_GYEARMONTH"/>
+<s c="XSD_GYEAR"/>
+<s c="XSD_GMONTHDAY"/>
+<s c="XSD_GDAY"/>
+<s c="XSD_GMONTH"/>
+<s c="XSD_HEXBINARY"/>
+<s c="XSD_BASE64BINARY"/>
+<s c="XSD_ANYURI"/>
+<s c="XSD_QNAME"/>
+<s c="XSD_NOTATION"/>
+<s c="XSD_NORMALIZEDSTRING"/>
+<s c="XSD_TOKEN"/>
+<s c="XSD_LANGUAGE"/>
+<s c="XSD_NMTOKEN"/>
+<s c="XSD_NAME"/>
+<s c="XSD_NCNAME"/>
+<s c="XSD_ID"/>
+<s c="XSD_IDREF"/>
+<s c="XSD_IDREFS"/>
+<s c="XSD_ENTITY"/>
+<s c="XSD_ENTITIES"/>
+<s c="XSD_INTEGER"/>
+<s c="XSD_NONPOSITIVEINTEGER"/>
+<s c="XSD_NEGATIVEINTEGER"/>
+<s c="XSD_LONG"/>
+<s c="XSD_INT"/>
+<s c="XSD_SHORT"/>
+<s c="XSD_BYTE"/>
+<s c="XSD_NONNEGATIVEINTEGER"/>
+<s c="XSD_UNSIGNEDLONG"/>
+<s c="XSD_UNSIGNEDINT"/>
+<s c="XSD_UNSIGNEDSHORT"/>
+<s c="XSD_UNSIGNEDBYTE"/>
+<s c="XSD_POSITIVEINTEGER"/>
+<s c="XSD_NMTOKENS"/>
+<s c="XSD_ANYTYPE"/>
+<s c="SOAP_ENC_OBJECT"/>
+<s c="SOAP_ENC_ARRAY"/>
+<s c="XSD_1999_TIMEINSTANT"/>
+<s c="XSD_NAMESPACE"/>
+<s c="XSD_1999_NAMESPACE"/>
+<s c="AF_UNIX"/>
+<s c="AF_INET"/>
+<s c="AF_INET6"/>
+<s c="SOCK_STREAM"/>
+<s c="SOCK_DGRAM"/>
+<s c="SOCK_RAW"/>
+<s c="SOCK_SEQPACKET"/>
+<s c="SOCK_RDM"/>
+<s c="MSG_OOB"/>
+<s c="MSG_WAITALL"/>
+<s c="MSG_PEEK"/>
+<s c="MSG_DONTROUTE"/>
+<s c="SO_DEBUG"/>
+<s c="SO_REUSEADDR"/>
+<s c="SO_KEEPALIVE"/>
+<s c="SO_DONTROUTE"/>
+<s c="SO_LINGER"/>
+<s c="SO_BROADCAST"/>
+<s c="SO_OOBINLINE"/>
+<s c="SO_SNDBUF"/>
+<s c="SO_RCVBUF"/>
+<s c="SO_SNDLOWAT"/>
+<s c="SO_RCVLOWAT"/>
+<s c="SO_SNDTIMEO"/>
+<s c="SO_RCVTIMEO"/>
+<s c="SO_TYPE"/>
+<s c="SO_ERROR"/>
+<s c="SOL_SOCKET"/>
+<s c="PHP_NORMAL_READ"/>
+<s c="PHP_BINARY_READ"/>
+<s c="SOL_TCP"/>
+<s c="SOL_UDP"/>
+<s c="RIT_LEAVES_ONLY"/>
+<s c="RIT_SELF_FIRST"/>
+<s c="RIT_CHILD_FIRST"/>
+<s c="CIT_CALL_TOSTRING"/>
+<s c="CIT_CATCH_GET_CHILD"/>
+<s c="SQLITE_ASSOC">Columns are returned into the array having the fieldname as the array
+      index.</s>
+<s c="SQLITE_BOTH">Columns are returned into the array having both a numerical index
+       and the fieldname as the array index.</s>
+<s c="SQLITE_NUM">Columns are returned into the array having a numerical index to the
+       fields. This index starts with 0, the first field in the result.</s>
+<s c="STREAM_FILTER_READ">Used with stream_filter_append and
+       stream_filter_prepend to indicate
+       that the specified filter should only be applied when
+       reading</s>
+<s c="STREAM_FILTER_WRITE">Used with stream_filter_append and
+       stream_filter_prepend to indicate
+       that the specified filter should only be applied when
+       writing</s>
+<s c="STREAM_FILTER_ALL">This constant is equivalent to 
+       STREAM_FILTER_READ |
+       STREAM_FILTER_WRITE</s>
+<s c="PSFS_PASS_ON">Return Code indicating that the
+       userspace filter returned buckets in $out.</s>
+<s c="PSFS_FEED_ME">Return Code indicating that the
+       userspace filter did not return buckets in $out
+       (i.e. No data available).</s>
+<s c="PSFS_ERR_FATAL">Return Code indicating that the
+       userspace filter encountered an unrecoverable error
+       (i.e. Invalid data received).</s>
+<s c="STREAM_USE_PATH">Flag indicating if the stream
+       used the include path.</s>
+<s c="STREAM_REPORT_ERRORS">Flag indicating if the wrapper
+       is responsible for raising errors using trigger_error 
+       during opening of the stream.  If this flag is not set, you
+       should not raise any errors.</s>
+<s c="STREAM_CLIENT_ASYNC_CONNECT">Open client socket asynchronously.  Used with
+       stream_socket_client.</s>
+<s c="STREAM_CLIENT_PERSISTENT">Client socket opened with stream_socket_client
+       should remain persistent between page loads.</s>
+<s c="STREAM_SERVER_BIND">Tells a stream created with stream_socket_server
+       to bind to the specified target.  Server sockets should always include this flag.</s>
+<s c="STREAM_SERVER_LISTEN">Tells a stream created with stream_socket_server
+       and bound using the STREAM_SERVER_BIND flag to start
+       listening on the socket.  Server sockets should always include this flag.</s>
+<s c="STREAM_NOTIFY_RESOLVE">A remote address required for this stream has been resolved, or the resolution
+       failed.  See severity for an indication of which happened.</s>
+<s c="STREAM_NOTIFY_CONNECT">A connection with an external resource has been established.</s>
+<s c="STREAM_NOTIFY_AUTH_REQUIRED">Additional authorization is required to access the specified resource.
+       Typical issued with severity level of
+       STREAM_NOTIFY_SEVERITY_ERR.</s>
+<s c="STREAM_NOTIFY_MIME_TYPE_IS">The mime-type of resource has been identified,
+       refer to message for a description of the
+       discovered type.</s>
+<s c="STREAM_NOTIFY_FILE_SIZE_IS">The size of the resource has been discovered.</s>
+<s c="STREAM_NOTIFY_REDIRECTED">The external resource has redirected the stream to an alternate
+       location.  Refer to message.</s>
+<s c="STREAM_NOTIFY_PROGRESS">Indicates current progress of the stream transfer in
+       bytes_transferred and possibly
+       bytes_max as well.</s>
+<s c="STREAM_NOTIFY_COMPLETED">There is no more data available on the stream.</s>
+<s c="STREAM_NOTIFY_FAILURE">A generic error occurred on the stream, consult
+       message and message_code
+       for details.</s>
+<s c="STREAM_NOTIFY_AUTH_RESULT">Authorization has been completed (with or without success).</s>
+<s c="STREAM_NOTIFY_SEVERITY_INFO">Normal, non-error related, notification.</s>
+<s c="STREAM_NOTIFY_SEVERITY_WARN">Non critical error condition.  Processing may continue.</s>
+<s c="STREAM_NOTIFY_SEVERITY_ERR">A critical error occurred.  Processing cannot continue.</s>
+<s c="CRYPT_SALT_LENGTH"/>
+<s c="CRYPT_STD_DES"/>
+<s c="CRYPT_EXT_DES"/>
+<s c="CRYPT_MD5"/>
+<s c="CRYPT_BLOWFISH"/>
+<s c="HTML_SPECIALCHARS"/>
+<s c="HTML_ENTITIES"/>
+<s c="ENT_COMPAT"/>
+<s c="ENT_QUOTES"/>
+<s c="ENT_NOQUOTES"/>
+<s c="CHAR_MAX"/>
+<s c="LC_CTYPE"/>
+<s c="LC_NUMERIC"/>
+<s c="LC_TIME"/>
+<s c="LC_COLLATE"/>
+<s c="LC_MONETARY"/>
+<s c="LC_ALL"/>
+<s c="LC_MESSAGES"/>
+<s c="STR_PAD_LEFT"/>
+<s c="STR_PAD_RIGHT"/>
+<s c="STR_PAD_BOTH"/>
+<s c="MOD_COLOR"/>
+<s c="MOD_MATRIX"/>
+<s c="TYPE_PUSHBUTTON"/>
+<s c="TYPE_MENUBUTTON"/>
+<s c="BSHitTest"/>
+<s c="BSDown"/>
+<s c="BSOver"/>
+<s c="BSUp"/>
+<s c="OverDowntoIdle"/>
+<s c="IdletoOverDown"/>
+<s c="OutDowntoIdle"/>
+<s c="OutDowntoOverDown"/>
+<s c="OverDowntoOutDown"/>
+<s c="OverUptoOverDown"/>
+<s c="OverUptoIdle"/>
+<s c="IdletoOverUp"/>
+<s c="ButtonEnter"/>
+<s c="ButtonExit"/>
+<s c="MenuEnter"/>
+<s c="MenuExit"/>
+<s c="TIDY_TAG_UNKNOWN"/>
+<s c="TIDY_TAG_A"/>
+<s c="TIDY_TAG_ABBR"/>
+<s c="TIDY_TAG_ACRONYM"/>
+<s c="TIDY_TAG_ALIGN"/>
+<s c="TIDY_TAG_APPLET"/>
+<s c="TIDY_TAG_AREA"/>
+<s c="TIDY_TAG_B"/>
+<s c="TIDY_TAG_BASE"/>
+<s c="TIDY_TAG_BASEFONT"/>
+<s c="TIDY_TAG_BDO"/>
+<s c="TIDY_TAG_BGSOUND"/>
+<s c="TIDY_TAG_BIG"/>
+<s c="TIDY_TAG_BLINK"/>
+<s c="TIDY_TAG_BLOCKQUOTE"/>
+<s c="TIDY_TAG_BODY"/>
+<s c="TIDY_TAG_BR"/>
+<s c="TIDY_TAG_BUTTON"/>
+<s c="TIDY_TAG_CAPTION"/>
+<s c="TIDY_TAG_CENTER"/>
+<s c="TIDY_TAG_CITE"/>
+<s c="TIDY_TAG_CODE"/>
+<s c="TIDY_TAG_COL"/>
+<s c="TIDY_TAG_COLGROUP"/>
+<s c="TIDY_TAG_COMMENT"/>
+<s c="TIDY_TAG_DD"/>
+<s c="TIDY_TAG_DEL"/>
+<s c="TIDY_TAG_DFN"/>
+<s c="TIDY_TAG_DIR"/>
+<s c="TIDY_TAG_DIV"/>
+<s c="TIDY_TAG_DL"/>
+<s c="TIDY_TAG_DT"/>
+<s c="TIDY_TAG_EM"/>
+<s c="TIDY_TAG_EMBED"/>
+<s c="TIDY_TAG_FIELDSET"/>
+<s c="TIDY_TAG_FONT"/>
+<s c="TIDY_TAG_FORM"/>
+<s c="TIDY_TAG_FRAME"/>
+<s c="TIDY_TAG_FRAMESET"/>
+<s c="TIDY_TAG_H1"/>
+<s c="TIDY_TAG_H2"/>
+<s c="TIDY_TAG_H3"/>
+<s c="TIDY_TAG_H4"/>
+<s c="TIDY_TAG_H5"/>
+<s c="TIDY_TAG_6"/>
+<s c="TIDY_TAG_HEAD"/>
+<s c="TIDY_TAG_HR"/>
+<s c="TIDY_TAG_HTML"/>
+<s c="TIDY_TAG_I"/>
+<s c="TIDY_TAG_IFRAME"/>
+<s c="TIDY_TAG_ILAYER"/>
+<s c="TIDY_TAG_IMG"/>
+<s c="TIDY_TAG_INPUT"/>
+<s c="TIDY_TAG_INS"/>
+<s c="TIDY_TAG_ISINDEX"/>
+<s c="TIDY_TAG_KBD"/>
+<s c="TIDY_TAG_KEYGEN"/>
+<s c="TIDY_TAG_LABEL"/>
+<s c="TIDY_TAG_LAYER"/>
+<s c="TIDY_TAG_LEGEND"/>
+<s c="TIDY_TAG_LI"/>
+<s c="TIDY_TAG_LINK"/>
+<s c="TIDY_TAG_LISTING"/>
+<s c="TIDY_TAG_MAP"/>
+<s c="TIDY_TAG_MARQUEE"/>
+<s c="TIDY_TAG_MENU"/>
+<s c="TIDY_TAG_META"/>
+<s c="TIDY_TAG_MULTICOL"/>
+<s c="TIDY_TAG_NOBR"/>
+<s c="TIDY_TAG_NOEMBED"/>
+<s c="TIDY_TAG_NOFRAMES"/>
+<s c="TIDY_TAG_NOLAYER"/>
+<s c="TIDY_TAG_NOSAFE"/>
+<s c="TIDY_TAG_NOSCRIPT"/>
+<s c="TIDY_TAG_OBJECT"/>
+<s c="TIDY_TAG_OL"/>
+<s c="TIDY_TAG_OPTGROUP"/>
+<s c="TIDY_TAG_OPTION"/>
+<s c="TIDY_TAG_P"/>
+<s c="TIDY_TAG_PARAM"/>
+<s c="TIDY_TAG_PLAINTEXT"/>
+<s c="TIDY_TAG_PRE"/>
+<s c="TIDY_TAG_Q"/>
+<s c="TIDY_TAG_RP"/>
+<s c="TIDY_TAG_RT"/>
+<s c="TIDY_TAG_RTC"/>
+<s c="TIDY_TAG_RUBY"/>
+<s c="TIDY_TAG_S"/>
+<s c="TIDY_TAG_SAMP"/>
+<s c="TIDY_TAG_SCRIPT"/>
+<s c="TIDY_TAG_SELECT"/>
+<s c="TIDY_TAG_SERVER"/>
+<s c="TIDY_TAG_SERVLET"/>
+<s c="TIDY_TAG_SMALL"/>
+<s c="TIDY_TAG_SPACER"/>
+<s c="TIDY_TAG_SPAN"/>
+<s c="TIDY_TAG_STRIKE"/>
+<s c="TIDY_TAG_STRONG"/>
+<s c="TIDY_TAG_STYLE"/>
+<s c="TIDY_TAG_SUB"/>
+<s c="TIDY_TAG_TABLE"/>
+<s c="TIDY_TAG_TBODY"/>
+<s c="TIDY_TAG_TD"/>
+<s c="TIDY_TAG_TEXTAREA"/>
+<s c="TIDY_TAG_TFOOT"/>
+<s c="TIDY_TAG_TH"/>
+<s c="TIDY_TAG_THEAD"/>
+<s c="TIDY_TAG_TITLE"/>
+<s c="TIDY_TAG_TR"/>
+<s c="TIDY_TAG_TR"/>
+<s c="TIDY_TAG_TT"/>
+<s c="TIDY_TAG_U"/>
+<s c="TIDY_TAG_UL"/>
+<s c="TIDY_TAG_VAR"/>
+<s c="TIDY_TAG_WBR"/>
+<s c="TIDY_TAG_XMP"/>
+<s c="TIDY_ATTR_UNKNOWN"/>
+<s c="TIDY_ATTR_ABBR"/>
+<s c="TIDY_ATTR_ACCEPT"/>
+<s c="TIDY_ATTR_ACCEPT_CHARSET"/>
+<s c="TIDY_ATTR_ACCESSKEY"/>
+<s c="TIDY_ATTR_ACTION"/>
+<s c="TIDY_ATTR_ADD_DATE"/>
+<s c="TIDY_ATTR_ALIGN"/>
+<s c="TIDY_ATTR_ALINK"/>
+<s c="TIDY_ATTR_ALT"/>
+<s c="TIDY_ATTR_ARCHIVE"/>
+<s c="TIDY_ATTR_AXIS"/>
+<s c="TIDY_ATTR_BACKGROUND"/>
+<s c="TIDY_ATTR_BGCOLOR"/>
+<s c="TIDY_ATTR_BGPROPERTIES"/>
+<s c="TIDY_ATTR_BORDER"/>
+<s c="TIDY_ATTR_BORDERCOLOR"/>
+<s c="TIDY_ATTR_BOTTOMMARGIN"/>
+<s c="TIDY_ATTR_CELLPADDING"/>
+<s c="TIDY_ATTR_CELLSPACING"/>
+<s c="TIDY_ATTR_CHAR"/>
+<s c="TIDY_ATTR_CHAROFF"/>
+<s c="TIDY_ATTR_CHARSET"/>
+<s c="TIDY_ATTR_CHECKED"/>
+<s c="TIDY_ATTR_CITE"/>
+<s c="TIDY_ATTR_CLASS"/>
+<s c="TIDY_ATTR_CLASSID"/>
+<s c="TIDY_ATTR_CLEAR"/>
+<s c="TIDY_ATTR_CODE"/>
+<s c="TIDY_ATTR_CODEBASE"/>
+<s c="TIDY_ATTR_CODETYPE"/>
+<s c="TIDY_ATTR_COLOR"/>
+<s c="TIDY_ATTR_COLS"/>
+<s c="TIDY_ATTR_COLSPAN"/>
+<s c="TIDY_ATTR_COMPACT"/>
+<s c="TIDY_ATTR_CONTENT"/>
+<s c="TIDY_ATTR_COORDS"/>
+<s c="TIDY_ATTR_DATA"/>
+<s c="TIDY_ATTR_DATAFLD"/>
+<s c="TIDY_ATTR_DATAPAGESIZE"/>
+<s c="TIDY_ATTR_DATASRC"/>
+<s c="TIDY_ATTR_DATETIME"/>
+<s c="TIDY_ATTR_DECLARE"/>
+<s c="TIDY_ATTR_DEFER"/>
+<s c="TIDY_ATTR_DIR"/>
+<s c="TIDY_ATTR_DISABLED"/>
+<s c="TIDY_ATTR_ENCODING"/>
+<s c="TIDY_ATTR_ENCTYPE"/>
+<s c="TIDY_ATTR_FACE"/>
+<s c="TIDY_ATTR_FOR"/>
+<s c="TIDY_ATTR_FRAME"/>
+<s c="TIDY_ATTR_FRAMEBORDER"/>
+<s c="TIDY_ATTR_FRAMESPACING"/>
+<s c="TIDY_ATTR_GRIDX"/>
+<s c="TIDY_ATTR_GRIDY"/>
+<s c="TIDY_ATTR_HEADERS"/>
+<s c="TIDY_ATTR_HEIGHT"/>
+<s c="TIDY_ATTR_HREF"/>
+<s c="TIDY_ATTR_HREFLANG"/>
+<s c="TIDY_ATTR_HSPACE"/>
+<s c="TIDY_ATTR_HTTP_EQUIV"/>
+<s c="TIDY_ATTR_ID"/>
+<s c="TIDY_ATTR_ISMAP"/>
+<s c="TIDY_ATTR_LABEL"/>
+<s c="TIDY_ATTR_LANG"/>
+<s c="TIDY_ATTR_LANGUAGE"/>
+<s c="TIDY_ATTR_LAST_MODIFIED"/>
+<s c="TIDY_ATTR_LAST_VISIT"/>
+<s c="TIDY_ATTR_LEFTMARGIN"/>
+<s c="TIDY_ATTR_LINK"/>
+<s c="TIDY_ATTR_LONGDESC"/>
+<s c="TIDY_ATTR_LOWSRC"/>
+<s c="TIDY_ATTR_MARGINHEIGHT"/>
+<s c="TIDY_ATTR_MARGINWIDTH"/>
+<s c="TIDY_ATTR_MAXLENGTH"/>
+<s c="TIDY_ATTR_MEDIA"/>
+<s c="TIDY_ATTR_METHOD"/>
+<s c="TIDY_ATTR_MULTIPLE"/>
+<s c="TIDY_ATTR_NAME"/>
+<s c="TIDY_ATTR_NOHREF"/>
+<s c="TIDY_ATTR_NORESIZE"/>
+<s c="TIDY_ATTR_NOSHADE"/>
+<s c="TIDY_ATTR_NOWRAP"/>
+<s c="TIDY_ATTR_OBJECT"/>
+<s c="TIDY_ATTR_PROFILE"/>
+<s c="TIDY_ATTR_PROMPT"/>
+<s c="TIDY_ATTR_RBSPAN"/>
+<s c="TIDY_ATTR_READONLY"/>
+<s c="TIDY_ATTR_REL"/>
+<s c="TIDY_ATTR_REV"/>
+<s c="TIDY_ATTR_RIGHTMARGIN"/>
+<s c="TIDY_ATTR_ROWS"/>
+<s c="TIDY_ATTR_ROWSPAN"/>
+<s c="TIDY_ATTR_RULES"/>
+<s c="TIDY_ATTR_SCHEME"/>
+<s c="TIDY_ATTR_SCOPE"/>
+<s c="TIDY_ATTR_SCROLLING"/>
+<s c="TIDY_ATTR_SELECTED"/>
+<s c="TIDY_ATTR_SHAPE"/>
+<s c="TIDY_ATTR_SHOWGRID"/>
+<s c="TIDY_ATTR_SHOWGRIDX"/>
+<s c="TIDY_ATTR_SHOWGRIDY"/>
+<s c="TIDY_ATTR_SIZE"/>
+<s c="TIDY_ATTR_SPAN"/>
+<s c="TIDY_ATTR_SRC"/>
+<s c="TIDY_ATTR_STANDBY"/>
+<s c="TIDY_ATTR_START"/>
+<s c="TIDY_ATTR_STYLE"/>
+<s c="TIDY_ATTR_SUMMARY"/>
+<s c="TIDY_ATTR_TABINDEX"/>
+<s c="TIDY_ATTR_TARGET"/>
+<s c="TIDY_ATTR_TEXT"/>
+<s c="TIDY_ATTR_TITLE"/>
+<s c="TIDY_ATTR_TOPMARGIN"/>
+<s c="TIDY_ATTR_TYPE"/>
+<s c="TIDY_ATTR_USEMAP"/>
+<s c="TIDY_ATTR_VALIGN"/>
+<s c="TIDY_ATTR_VALUE"/>
+<s c="TIDY_ATTR_VALUETYPE"/>
+<s c="TIDY_ATTR_VERSION"/>
+<s c="TIDY_ATTR_VLINK"/>
+<s c="TIDY_ATTR_VSPACE"/>
+<s c="TIDY_ATTR_WIDTH"/>
+<s c="TIDY_ATTR_WRAP"/>
+<s c="TIDY_ATTR_XML_LANG"/>
+<s c="TIDY_ATTR_XML_SPACE"/>
+<s c="TIDY_ATTR_XMLNS"/>
+<s c="TIDY_NODETYPE_ROOT"/>
+<s c="TIDY_NODETYPE_DOCTYPE"/>
+<s c="TIDY_NODETYPE_COMMENT"/>
+<s c="TIDY_NODETYPE_PROCINS"/>
+<s c="TIDY_NODETYPE_TEXT"/>
+<s c="TIDY_NODETYPE_START"/>
+<s c="TIDY_NODETYPE_END"/>
+<s c="TIDY_NODETYPE_STARTEND"/>
+<s c="TIDY_NODETYPE_CDATA"/>
+<s c="TIDY_NODETYPE_SECTION"/>
+<s c="TIDY_NODETYPE_ASP"/>
+<s c="TIDY_NODETYPE_JSTE"/>
+<s c="TIDY_NODETYPE_PHP"/>
+<s c="TIDY_NODETYPE_XMLDECL"/>
+<s c="T_INCLUDE"/>
+<s c="T_INCLUDE_ONCE"/>
+<s c="T_EVAL"/>
+<s c="T_REQUIRE"/>
+<s c="T_REQUIRE_ONCE"/>
+<s c="T_LOGICAL_OR"/>
+<s c="T_LOGICAL_XOR"/>
+<s c="T_LOGICAL_AND"/>
+<s c="T_PRINT"/>
+<s c="T_PLUS_EQUAL"/>
+<s c="T_MINUS_EQUAL"/>
+<s c="T_MUL_EQUAL"/>
+<s c="T_DIV_EQUAL"/>
+<s c="T_CONCAT_EQUAL"/>
+<s c="T_MOD_EQUAL"/>
+<s c="T_AND_EQUAL"/>
+<s c="T_OR_EQUAL"/>
+<s c="T_XOR_EQUAL"/>
+<s c="T_SL_EQUAL"/>
+<s c="T_SR_EQUAL"/>
+<s c="T_BOOLEAN_OR"/>
+<s c="T_BOOLEAN_AND"/>
+<s c="T_IS_EQUAL"/>
+<s c="T_IS_NOT_EQUAL"/>
+<s c="T_IS_IDENTICAL"/>
+<s c="T_IS_NOT_IDENTICAL"/>
+<s c="T_IS_SMALLER_OR_EQUAL"/>
+<s c="T_IS_GREATER_OR_EQUAL"/>
+<s c="T_SL"/>
+<s c="T_SR"/>
+<s c="T_INC"/>
+<s c="T_DEC"/>
+<s c="T_INT_CAST"/>
+<s c="T_DOUBLE_CAST"/>
+<s c="T_STRING_CAST"/>
+<s c="T_ARRAY_CAST"/>
+<s c="T_OBJECT_CAST"/>
+<s c="T_BOOL_CAST"/>
+<s c="T_UNSET_CAST"/>
+<s c="T_NEW"/>
+<s c="T_EXIT"/>
+<s c="T_IF"/>
+<s c="T_ELSEIF"/>
+<s c="T_ELSE"/>
+<s c="T_ENDIF"/>
+<s c="T_LNUMBER"/>
+<s c="T_DNUMBER"/>
+<s c="T_STRING"/>
+<s c="T_STRING_VARNAME"/>
+<s c="T_VARIABLE"/>
+<s c="T_NUM_STRING"/>
+<s c="T_INLINE_HTML"/>
+<s c="T_CHARACTER"/>
+<s c="T_BAD_CHARACTER"/>
+<s c="T_ENCAPSED_AND_WHITESPACE"/>
+<s c="T_CONSTANT_ENCAPSED_STRING"/>
+<s c="T_ECHO"/>
+<s c="T_DO"/>
+<s c="T_WHILE"/>
+<s c="T_ENDWHILE"/>
+<s c="T_FOR"/>
+<s c="T_ENDFOR"/>
+<s c="T_FOREACH"/>
+<s c="T_ENDFOREACH"/>
+<s c="T_DECLARE"/>
+<s c="T_ENDDECLARE"/>
+<s c="T_AS"/>
+<s c="T_SWITCH"/>
+<s c="T_ENDSWITCH"/>
+<s c="T_CASE"/>
+<s c="T_DEFAULT"/>
+<s c="T_BREAK"/>
+<s c="T_CONTINUE"/>
+<s c="T_OLD_FUNCTION"/>
+<s c="T_FUNCTION"/>
+<s c="T_CONST"/>
+<s c="T_RETURN"/>
+<s c="T_USE"/>
+<s c="T_GLOBAL"/>
+<s c="T_STATIC"/>
+<s c="T_VAR"/>
+<s c="T_UNSET"/>
+<s c="T_ISSET"/>
+<s c="T_EMPTY"/>
+<s c="T_CLASS"/>
+<s c="T_EXTENDS"/>
+<s c="T_OBJECT_OPERATOR"/>
+<s c="T_DOUBLE_ARROW"/>
+<s c="T_LIST"/>
+<s c="T_ARRAY"/>
+<s c="T_LINE"/>
+<s c="T_FILE"/>
+<s c="T_COMMENT"/>
+<s c="T_ML_COMMENT"/>
+<s c="T_DOC_COMMENT"/>
+<s c="T_OPEN_TAG"/>
+<s c="T_OPEN_TAG_WITH_ECHO"/>
+<s c="T_CLOSE_TAG"/>
+<s c="T_WHITESPACE"/>
+<s c="T_START_HEREDOC"/>
+<s c="T_END_HEREDOC"/>
+<s c="T_DOLLAR_OPEN_CURLY_BRACES"/>
+<s c="T_CURLY_OPEN"/>
+<s c="T_PAAMAYIM_NEKUDOTAYIM"/>
+<s c="T_DOUBLE_COLON"/>
+<s c="ODBC_TYPE"/>
+<s c="ODBC_BINMODE_PASSTHRU"/>
+<s c="ODBC_BINMODE_RETURN"/>
+<s c="ODBC_BINMODE_CONVERT"/>
+<s c="SQL_ODBC_CURSORS"/>
+<s c="SQL_CUR_USE_DRIVER"/>
+<s c="SQL_CUR_USE_IF_NEEDED"/>
+<s c="SQL_CUR_USE_ODBC"/>
+<s c="SQL_CONCURRENCY"/>
+<s c="SQL_CONCUR_READ_ONLY"/>
+<s c="SQL_CONCUR_LOCK"/>
+<s c="SQL_CONCUR_ROWVER"/>
+<s c="SQL_CONCUR_VALUES"/>
+<s c="SQL_CURSOR_TYPE"/>
+<s c="SQL_CURSOR_FORWARD_ONLY"/>
+<s c="SQL_CURSOR_KEYSET_DRIVEN"/>
+<s c="SQL_CURSOR_DYNAMIC"/>
+<s c="SQL_CURSOR_STATIC"/>
+<s c="SQL_KEYSET_SIZE"/>
+<s c="SQL_CHAR"/>
+<s c="SQL_VARCHAR"/>
+<s c="SQL_LONGVARCHAR"/>
+<s c="SQL_DECIMAL"/>
+<s c="SQL_NUMERIC"/>
+<s c="SQL_BIT"/>
+<s c="SQL_TINYINT"/>
+<s c="SQL_SMALLINT"/>
+<s c="SQL_INTEGER"/>
+<s c="SQL_BIGINT"/>
+<s c="SQL_REAL"/>
+<s c="SQL_FLOAT"/>
+<s c="SQL_DOUBLE"/>
+<s c="SQL_BINARY"/>
+<s c="SQL_VARBINARY"/>
+<s c="SQL_LONGVARBINARY"/>
+<s c="SQL_DATE"/>
+<s c="SQL_TIME"/>
+<s c="SQL_TIMESTAMP"/>
+<s c="SQL_TYPE_DATE"/>
+<s c="SQL_TYPE_TIME"/>
+<s c="SQL_TYPE_TIMESTAMP"/>
+<s c="SQL_BEST_ROWID"/>
+<s c="SQL_ROWVER"/>
+<s c="SQL_SCOPE_CURROW"/>
+<s c="SQL_SCOPE_TRANSACTION"/>
+<s c="SQL_SCOPE_SESSION"/>
+<s c="SQL_NO_NULLS"/>
+<s c="SQL_NULLABLE"/>
+<s c="SQL_INDEX_UNIQUE"/>
+<s c="SQL_INDEX_ALL"/>
+<s c="SQL_ENSURE"/>
+<s c="SQL_QUICK"/>
+<s c="DC_MICROSOFT"/>
+<s c="DC_BORLAND"/>
+<s c="DC_CALL_CDECL"/>
+<s c="DC_CALL_STD"/>
+<s c="DC_RETVAL_MATH4"/>
+<s c="DC_RETVAL_MATH8"/>
+<s c="DC_CALL_STD_BO"/>
+<s c="DC_CALL_STD_MS"/>
+<s c="DC_CALL_STD_M8"/>
+<s c="DC_FLAG_ARGPTR"/>
+<s c="XDIFF_PATCH_NORMAL"/>
+<s c="XDIFF_PATCH_REVERSE"/>
+<s c="XML_ERROR_NONE"/>
+<s c="XML_ERROR_NO_MEMORY"/>
+<s c="XML_ERROR_SYNTAX"/>
+<s c="XML_ERROR_NO_ELEMENTS"/>
+<s c="XML_ERROR_INVALID_TOKEN"/>
+<s c="XML_ERROR_UNCLOSED_TOKEN"/>
+<s c="XML_ERROR_PARTIAL_CHAR"/>
+<s c="XML_ERROR_TAG_MISMATCH"/>
+<s c="XML_ERROR_DUPLICATE_ATTRIBUTE"/>
+<s c="XML_ERROR_JUNK_AFTER_DOC_ELEMENT"/>
+<s c="XML_ERROR_PARAM_ENTITY_REF"/>
+<s c="XML_ERROR_UNDEFINED_ENTITY"/>
+<s c="XML_ERROR_RECURSIVE_ENTITY_REF"/>
+<s c="XML_ERROR_ASYNC_ENTITY"/>
+<s c="XML_ERROR_BAD_CHAR_REF"/>
+<s c="XML_ERROR_BINARY_ENTITY_REF"/>
+<s c="XML_ERROR_ATTRIBUTE_EXTERNAL_ENTITY_REF"/>
+<s c="XML_ERROR_MISPLACED_XML_PI"/>
+<s c="XML_ERROR_UNKNOWN_ENCODING"/>
+<s c="XML_ERROR_INCORRECT_ENCODING"/>
+<s c="XML_ERROR_UNCLOSED_CDATA_SECTION"/>
+<s c="XML_ERROR_EXTERNAL_ENTITY_HANDLING"/>
+<s c="XML_OPTION_CASE_FOLDING"/>
+<s c="XML_OPTION_TARGET_ENCODING"/>
+<s c="XML_OPTION_SKIP_TAGSTART"/>
+<s c="XML_OPTION_SKIP_WHITE"/>
+<s c="XSLT_OPT_SILENT"/>
+<s c="XSLT_SABOPT_PARSE_PUBLIC_ENTITIES"/>
+<s c="XSLT_SABOPT_DISABLE_ADDING_META"/>
+<s c="XSLT_SABOPT_DISABLE_STRIPPING"/>
+<s c="XSLT_SABOPT_IGNORE_DOC_NOT_FOUND"/>
+<s c="XSLT_ERR_UNSUPPORTED_SCHEME"/>
+<s c="FORCE_GZIP"/>
+<s c="FORCE_DEFLATE"/>
+
+</phpstandardsyntax>