// Copyright (c) Ivan Bondarev, Stanislav Mikhalkovich (for details please see \doc\copyright.txt)
// This code is distributed under the GNU LGPL (for details please see \doc\license.txt)
using System;
using System.Collections;
using System.Collections.Generic;
using System.Text;
using System.Windows.Forms;
using ICSharpCode.TextEditor;
using ICSharpCode.TextEditor.Gui.CompletionWindow;
using ICSharpCode.TextEditor.Document;
namespace VisualPascalABC
{
///
/// Класс, предназначенный для хранения последних выбранных методов в Intellisense
///
public class CompletionDataDispatcher
{
private static Hashtable dict = new Hashtable(StringComparer.OrdinalIgnoreCase);
public static void AddLastUsedItem(ICompletionData item)
{
if (item != null && item.Text != null && item.Text.Length > 0)
dict[item.Text[0].ToString()] = item;
}
public static ICompletionData GetLastUsedItem(char ch)
{
return dict[ch.ToString()] as ICompletionData;
}
private static CodeCompletion.SymScope cur_sc;
private static Hashtable ht = new Hashtable();
public static void AddMemberBeforeDot(CodeCompletion.SymScope sc)
{
cur_sc = sc;
}
public static void BindMember(ICompletionData item)
{
if (cur_sc != null && item != null)
ht[cur_sc.GetFullName()] = item.Text;
cur_sc = null;
}
public static string GetRecentUsedMember(CodeCompletion.SymScope sc)
{
return ht[sc.GetFullName()] as string;
}
}
public class KeywordChecker
{
public static PascalABCCompiler.Parsers.KeywordKind TestForKeyword(string Text, int i)
{
if (CodeCompletion.CodeCompletionController.IntellisenseAvailable())
return CodeCompletion.CodeCompletionController.CurrentLanguage.LanguageIntellisenseSupport.TestForKeyword(Text, i);
return PascalABCCompiler.Parsers.KeywordKind.None;
}
}
///
/// Класс-диспетчер, прицепляющий документацию к методам и классам.
/// Документация прицепляется в отдельном потоке
///
public class DefaultDispatcher : CodeCompletion.AbstractDispatcher
{
private Dictionary dict = new Dictionary();
private Dictionary dict2 = new Dictionary();
public void Reset()
{
dict.Clear();
dict2.Clear();
}
public void Add(PascalABCCompiler.Parsers.SymInfo si, ICompletionData data)
{
if (!dict.ContainsKey(si))
dict[si] = data;
if (!string.IsNullOrEmpty(si.description) && !dict2.ContainsKey(si.description))
dict2[si.description] = data;
}
public override void Update(PascalABCCompiler.Parsers.SymInfo si)
{
ICompletionData val=null;
if (dict.TryGetValue(si,out val))
{
val.Description = si.description;
}
else if (si.description != null && dict2.TryGetValue(si.description.Split('\n')[0], out val))
{
val.Description = si.description;
}
}
}
}