private ICompletionDataProvider GlobalComplete ()
		{
			CProject project = Document.Project as CProject;
			
			if (project == null)
				return null;
			
			ProjectInformation info = ProjectInformationManager.Instance.Get (project);
			
			CompletionDataProvider provider = new CompletionDataProvider ();
			
			foreach (LanguageItem li in info.Containers ())
				if (li.Parent == null)
					provider.AddCompletionData (new CompletionData (li));
			
			foreach (Function f in info.Functions)
				if (f.Parent == null)
					provider.AddCompletionData (new CompletionData (f));

			foreach (Enumerator e in info.Enumerators)
				provider.AddCompletionData (new CompletionData (e));
			
			foreach (Macro m in info.Macros)
				provider.AddCompletionData (new CompletionData (m));
			
			string currentFileName = Document.FileName;
			
			if (info.IncludedFiles.ContainsKey (currentFileName)) {
				foreach (FileInformation fi in info.IncludedFiles[currentFileName]) {
					foreach (LanguageItem li in fi.Containers ())
						if (li.Parent == null)
							provider.AddCompletionData (new CompletionData (li));
					
					foreach (Function f in fi.Functions)
						if (f.Parent == null)
							provider.AddCompletionData (new CompletionData (f));

					foreach (Enumerator e in fi.Enumerators)
						provider.AddCompletionData (new CompletionData (e));
					
					foreach (Macro m in fi.Macros)
						provider.AddCompletionData (new CompletionData (m));
				}
			}
			
			return provider;
		}
		private CompletionDataProvider GetMembersOfItem (string itemFullName)
		{
			CProject project = Document.Project as CProject;
			
			if (project == null)
				return null;
				
			ProjectInformation info = ProjectInformationManager.Instance.Get (project);
			CompletionDataProvider provider = new CompletionDataProvider ();
			
			LanguageItem container = null;
			
			string currentFileName = Document.FileName;
			bool in_project = false;
				
			foreach (LanguageItem li in info.Containers ()) {
				if (itemFullName == li.FullName) {
					container = li;
					in_project = true;
				}
			}
			
			if (!in_project && info.IncludedFiles.ContainsKey (currentFileName)) {
				foreach (FileInformation fi in info.IncludedFiles[currentFileName]) {
					foreach (LanguageItem li in fi.Containers ()) {
						if (itemFullName == li.FullName)
							container = li;
					}
				}
			}
			
			if (container == null)
				return null;
			
			if (in_project) {
				foreach (LanguageItem li in info.AllItems ()) {
					if (li.Parent != null && li.Parent.Equals (container))
						provider.AddCompletionData (new CompletionData (li));
				}
			} else {
				foreach (FileInformation fi in info.IncludedFiles[currentFileName]) {
					foreach (LanguageItem li in fi.AllItems ()) {
						if (li.Parent != null && li.Parent.Equals (container))
							provider.AddCompletionData (new CompletionData (li));
					}
				}
			}
			
			return provider;
		}