|
using System;
using System.Collections.Generic;
namespace SubSonic
{
public static class CodeLanguageFactory
{
#region Static properties
private static readonly List<ICodeLanguage> languages = new List<ICodeLanguage>();
#endregion
#region Static methods
static CodeLanguageFactory()
{
// TODO: Add dynamic discovery of all subclasses via reflection or config
languages.Add(new CSharpCodeLanguage());
languages.Add(new VBCodeLanguage());
}
public static ICodeLanguage GetByCodeProviderName(string providerName)
{
foreach (ICodeLanguage language in languages)
if (language.CodeProvider.Equals(providerName, StringComparison.InvariantCultureIgnoreCase))
return language;
throw new ArgumentException("Unknown language", "providerName");
}
public static ICodeLanguage GetByShortName(string name)
{
foreach (ICodeLanguage language in languages)
if (language.ShortName.Equals(name, StringComparison.InvariantCultureIgnoreCase))
return language;
throw new ArgumentException("Unknown language", "name");
}
#endregion
#region Static methods
// Ideally this would not be static and called against the correct language
// but callers do not have this information available at this time.
public static string AvoidKeyWord(string word, string table, string appendWith)
{
string newWord = word + appendWith;
// Can't have a property with same name as class.
if (word.ToLower() == table)
return newWord;
switch (word.ToLower()) {
// SubSonic keywords
case "schema":
return newWord;
default: {
foreach (ICodeLanguage language in languages)
if (language.IsKeyword(word))
return newWord;
return word;
}
}
}
#endregion
}
}
|
By viewing downloads associated with this article you agree to the Terms of Service and the article's licence.
If a file you wish to view isn't highlighted, and is a text file (not binary), please
let us know and we'll add colourisation support for it.
This member has not yet provided a Biography. Assume it's interesting and varied, and probably something to do with programming.