import HTMLGenerator
import Keywords
import Lexer
from DispatchHandler import DispatchHandler
from _SilverCity import find_lexer_module_by_id, PropertySet, WordList
from ScintillaConstants import SCLEX_CPP
import LanguageInfo

class CSharpLexer(Lexer.Lexer):
    def __init__(self, properties = PropertySet()):
        self._properties = properties
        self._lexer = find_lexer_module_by_id(SCLEX_CPP)
        self._keyword_lists = [
            WordList(Keywords.csharp_keywords),
            WordList(), # User defined (important functions, constants, etc.)
            WordList(Keywords.doxygen_keywords),
            WordList(), # "Fold header keywords" - whatever that is
            WordList(), # Global classes and typedefs
                               ]
            
class CSharpHandler(DispatchHandler):
    def __init__(self):
        DispatchHandler.__init__(self, 'SCE_C')

class CSharpHTMLGenerator(HTMLGenerator.SimpleHTMLGenerator, CSharpHandler):
    name = 'csharp'
    description = 'C#'

    def __init__(self):
        CSharpHandler.__init__(self)
        HTMLGenerator.SimpleHTMLGenerator.__init__(self, 'SCE_C')
            
    def generate_html(self, file, buffer, lexer = CSharpLexer()):
        self._file = file
        
        lexer.tokenize_by_style(buffer, self.event_handler)


csharp_language_info = LanguageInfo.LanguageInfo(
                'C#',
                 ['cs'],
                 [],
                 [CSharpHTMLGenerator]
            ) 

LanguageInfo.register_language(csharp_language_info)

