Kaynağa Gözat

vslol: highlight Lol Engine types if the solution name is Lol.sln.

legacy
Sam Hocevar sam 11 yıl önce
ebeveyn
işleme
781c355b44
1 değiştirilmiş dosya ile 43 ekleme ve 7 silme
  1. +43
    -7
      tools/vslol/CppKeywordClassifier.cs

+ 43
- 7
tools/vslol/CppKeywordClassifier.cs Dosyayı Görüntüle

@@ -16,6 +16,7 @@ using System.Windows.Media;
using System.Text.RegularExpressions;
using System.Diagnostics; /* For debugging purposes */

using Microsoft.VisualStudio.Shell;
using Microsoft.VisualStudio.Text;
using Microsoft.VisualStudio.Text.Classification;
using Microsoft.VisualStudio.Text.Formatting;
@@ -37,6 +38,12 @@ internal class LolClassifierProvider : IClassifierProvider
internal IClassifierAggregatorService m_aggregator = null;
[Import]
internal IClassificationFormatMapService m_format_map = null;
#if FALSE
[Import]
internal ITextDocumentFactoryService m_textdoc_factory = null;
#endif
[Import]
internal SVsServiceProvider m_sp = null;

internal static bool m_inprogress = false;

@@ -46,12 +53,26 @@ internal class LolClassifierProvider : IClassifierProvider
if (m_inprogress)
return null;

/* Try to guess whether this is a Lol Engine project */
#if FALSE
if (m_textdoc_factory != null)
{
ITextDocument doc;
m_textdoc_factory.TryGetTextDocument(buffer, out doc);
/* print doc.FilePath */
}
#endif
EnvDTE.DTE dte = m_sp.GetService(typeof(EnvDTE.DTE)) as EnvDTE.DTE;
bool islolengine = false;
if (dte.Solution.FullName.Contains("Lol.sln"))
islolengine = true;

LolGenericFormat.SetRegistry(m_type_registry, m_format_map);

try
{
m_inprogress = true;
return buffer.Properties.GetOrCreateSingletonProperty<CppKeywordClassifier>(delegate { return new CppKeywordClassifier(m_type_registry, m_aggregator.GetClassifier(buffer), buffer.ContentType); });
return buffer.Properties.GetOrCreateSingletonProperty<CppKeywordClassifier>(delegate { return new CppKeywordClassifier(m_type_registry, m_aggregator.GetClassifier(buffer), buffer.ContentType, islolengine); });
}
finally { m_inprogress = false; }
}
@@ -60,7 +81,7 @@ internal class LolClassifierProvider : IClassifierProvider
class CppKeywordClassifier : IClassifier
{
private IClassifier m_classifier;
private bool m_inprogress;
private bool m_inprogress, m_islolengine;

private IClassificationType m_types_type, m_constant_type, m_normal_type;
private Regex m_types_regex, m_constant_regex, m_normal_regex;
@@ -83,9 +104,11 @@ class CppKeywordClassifier : IClassifier
"__(int(8|16|32|64)|ptr(32|64)|m(64|128|128d|128i))",
};

/* ldouble real half
"(f(16|128)||d|[ui](8|16||64)|r)(vec[234]|mat[234]|quat|cmplx)";
*/
private static string[] m_lol_types =
{
"ldouble|real|half",
"(f(16|128)||d|[ui](8|16||64)|r)(vec[234]|mat[234]|quat|cmplx)",
};

private static string[] m_csharp_types =
{
@@ -109,11 +132,16 @@ class CppKeywordClassifier : IClassifier
{
"NULL|nullptr",
"EXIT_SUCCESS|EXIT_FAILURE",
"M_(E|LOG(2|10)E|LN2|LN10|PI|PI_2|PI_4|1_PI|2_PI|2_SQRTPI|SQRT(2|1_2))",
"M_(E|LOG(2|10)E|LN2|LN10|PI|PI_[24]|[12]_PI|2_SQRTPI|SQRT(2|1_2))",
"SIG(HUP|INT|QUIT|ILL|TRAP|ABRT|FPE|KILL|USR1|SEGV|USR2|PIPE|ALRM)",
"SIG(TERM|CHLD|CONT|STOP|TSTP|TTIN|TTOU)"
};

private static string[] m_lol_constants =
{
"(F|D|LD)_(PI|PI_[234]|[12]_PI|SQRT(2|3|1_2))",
};

private static string[] m_csharp_constants =
{
"null",
@@ -136,10 +164,12 @@ class CppKeywordClassifier : IClassifier

internal CppKeywordClassifier(IClassificationTypeRegistryService registry,
IClassifier classifier,
IContentType type)
IContentType type,
bool islolengine)
{
m_classifier = classifier;
m_inprogress = false;
m_islolengine = islolengine;

m_types_type = registry.GetClassificationType("LolAnyType");
m_normal_type = registry.GetClassificationType("LolAnyIdentifier");
@@ -168,6 +198,12 @@ class CppKeywordClassifier : IClassifier
constants_list = constants_list.Concat(m_lolfx_constants).ToList();
}

if (m_islolengine)
{
types_list = types_list.Concat(m_lol_types).ToList();
constants_list = constants_list.Concat(m_lol_constants).ToList();
}

m_types_regex =
new Regex("^(" + String.Join("|", types_list.ToArray()) + ")$");
m_constant_regex =


Yükleniyor…
İptal
Kaydet