/// <summary> /// Registers an ICodeFormatter for the given language. The system /// is not case sensitive. /// </summary> /// <param name="formatter"> /// A non null formatter. /// </param> /// <param name="language"> /// A non null file language. /// The value must not be empty nor contain '.' and /// must not have been already registered. /// </param> public void Register(ICodeFormatter formatter, string extension) { UiExceptionHelper.CheckNotNull(formatter, "formatter"); UiExceptionHelper.CheckNotNull(extension, "language"); extension = extension.ToLower(); UiExceptionHelper.CheckTrue(extension.Length > 0, "language cannot be empty", "language"); UiExceptionHelper.CheckTrue(extension.LastIndexOf('.') == -1, "language cannot contain '.'", "language"); UiExceptionHelper.CheckFalse(_toFormatter.ContainsKey(extension), "language '" + extension + "' has already an handler. Remove handler first.", "language"); _toFormatter.Add(extension, formatter); return; }
/// <summary> /// Build a new token and add it to the list of tokens known by TokenDictionary. /// Tokens must be added from the longest text value to the shortest otherwise /// an exception will be raised. /// </summary> /// <param name="value"> /// The token's text value. It must not be null nor empty. It must not be already /// defined neither. If there are tokens already defined, value's length must not /// be longer than the previous added token. /// </param> /// <param name="tag">The token's tag value.</param> public void Add(string value, LexerTag tag) { InternalLexToken newToken; UiExceptionHelper.CheckNotNull(value, "value"); UiExceptionHelper.CheckFalse(value == "", "Token value must not be empty.", "value"); UiExceptionHelper.CheckFalse( Contains(value), String.Format("Token '{0}' is already defined.", value), "value"); if (Count > 0) { UiExceptionHelper.CheckTrue( _list[Count - 1].Text.Length >= value.Length, "Tokens must be inserted from the longest to the shortest value.", "value"); } newToken = new InternalLexToken(value, tag); // loop through each item to populate // newToken.StartingWith list. foreach (InternalLexToken item in _list) { if (item.Text.StartsWith(value)) { newToken.StartingWith.Add(item); } } _list.Add(newToken); return; }