Browse Source

introduce supportedfilenamepattern Attribute in ParserDescriptor to make it easier to implement specific parsers

newNRILSpyDebugger
Siegfried Pammer 13 years ago
parent
commit
cec942586c
  1. 2
      src/AddIns/BackendBindings/CSharpBinding/Project/CSharpBinding.addin
  2. 2
      src/AddIns/BackendBindings/CppBinding/CppBinding/CppBinding.addin
  3. 2
      src/AddIns/BackendBindings/XamlBinding/XamlBinding/XamlBinding.addin
  4. 22
      src/Main/SharpDevelop/Parser/ParserDescriptor.cs
  5. 4
      src/Main/SharpDevelop/Parser/ParserDoozer.cs

2
src/AddIns/BackendBindings/CSharpBinding/Project/CSharpBinding.addin

@ -54,7 +54,7 @@
<Path name = "/SharpDevelop/Parser"> <Path name = "/SharpDevelop/Parser">
<Parser id = "C#" <Parser id = "C#"
supportedextensions = ".cs" supportedfilenamepattern = "\.(cs)$"
projectfileextension = ".csproj" projectfileextension = ".csproj"
class = "CSharpBinding.Parser.TParser"/> class = "CSharpBinding.Parser.TParser"/>
</Path> </Path>

2
src/AddIns/BackendBindings/CppBinding/CppBinding/CppBinding.addin

@ -77,7 +77,7 @@
<!-- <!--
<Path name="/SharpDevelop/Parser"> <Path name="/SharpDevelop/Parser">
<Parser id="C++" <Parser id="C++"
supportedextensions=".cpp;.c;.hpp;.h" supportedfilenamepattern="\.(cpp|c|hpp|h)$"
projectfileextension="vcxproj" projectfileextension="vcxproj"
class="ICSharpCode.CppBinding.Parser.CppParser" /> class="ICSharpCode.CppBinding.Parser.CppParser" />
</Path> </Path>

2
src/AddIns/BackendBindings/XamlBinding/XamlBinding/XamlBinding.addin

@ -35,7 +35,7 @@
<Path name = "/SharpDevelop/Parser"> <Path name = "/SharpDevelop/Parser">
<Parser id = "XAML" <Parser id = "XAML"
supportedextensions = ".xaml" supportedfilenamepattern = "\.(xaml)$"
class = "ICSharpCode.XamlBinding.XamlParser"/> class = "ICSharpCode.XamlBinding.XamlParser"/>
</Path> </Path>

22
src/Main/SharpDevelop/Parser/ParserDescriptor.cs

@ -3,8 +3,8 @@
using System; using System;
using System.IO; using System.IO;
using System.Text.RegularExpressions;
using ICSharpCode.Core; using ICSharpCode.Core;
using ICSharpCode.SharpDevelop.Project;
namespace ICSharpCode.SharpDevelop.Parser namespace ICSharpCode.SharpDevelop.Parser
{ {
@ -23,17 +23,11 @@ namespace ICSharpCode.SharpDevelop.Parser
public string Language { get; private set; } public string Language { get; private set; }
public string[] Supportedextensions { get; private set; } public Regex SupportedFilenamePattern { get; private set; }
public bool CanParse(FileName fileName) public bool CanParse(FileName fileName)
{ {
string fileExtension = Path.GetExtension(fileName); return SupportedFilenamePattern.IsMatch(fileName);
foreach (string ext in Supportedextensions) {
if (string.Equals(fileExtension, ext, StringComparison.OrdinalIgnoreCase)) {
return true;
}
}
return false;
} }
public ParserDescriptor(Codon codon) public ParserDescriptor(Codon codon)
@ -42,20 +36,20 @@ namespace ICSharpCode.SharpDevelop.Parser
throw new ArgumentNullException("codon"); throw new ArgumentNullException("codon");
this.codon = codon; this.codon = codon;
this.Language = codon.Id; this.Language = codon.Id;
this.Supportedextensions = codon.Properties["supportedextensions"].Split(';'); this.SupportedFilenamePattern = new Regex(codon.Properties["supportedfilenamepattern"], RegexOptions.IgnoreCase);
} }
public ParserDescriptor(Type parserType, string language, string[] supportedExtensions) public ParserDescriptor(Type parserType, string language, Regex supportedFilenamePattern)
{ {
if (parserType == null) if (parserType == null)
throw new ArgumentNullException("parserType"); throw new ArgumentNullException("parserType");
if (language == null) if (language == null)
throw new ArgumentNullException("language"); throw new ArgumentNullException("language");
if (supportedExtensions == null) if (supportedFilenamePattern == null)
throw new ArgumentNullException("supportedExtensions"); throw new ArgumentNullException("supportedFilenamePattern");
this.parserType = parserType; this.parserType = parserType;
this.Language = language; this.Language = language;
this.Supportedextensions = supportedExtensions; this.SupportedFilenamePattern = supportedFilenamePattern;
} }
} }
} }

4
src/Main/SharpDevelop/Parser/ParserDoozer.cs

@ -10,8 +10,8 @@ namespace ICSharpCode.SharpDevelop.Parser
/// <summary> /// <summary>
/// Creates ParserDescriptor objects for the parsing service. /// Creates ParserDescriptor objects for the parsing service.
/// </summary> /// </summary>
/// <attribute name="supportedextensions"> /// <attribute name="supportedfilenamepattern">
/// Semicolon-separated list of file extensions for which the parser is used. (e.g. ".boo") /// filename pattern (regex) for which the parser is used. (e.g. "\.(c|cpp|h|hpp)$")
/// </attribute> /// </attribute>
/// <attribute name="class"> /// <attribute name="class">
/// Name of the IParser class. /// Name of the IParser class.

Loading…
Cancel
Save