/* * /// <summary> * /// Register a system plugin. * /// </summary> * /// <param name="plugin"></param> * /// <param name="sort">Whether or not to sort the plugin by precedence after adding it to the system.</param> * public void RegisterStmtPlugin(IStmtPlugin plugin, bool sort) * { * var map = plugin.IsSystemLevel ? _sysStmtPlugins : _stmtPlugins; * RegisterPlugin(map, plugin, plugin.StartTokens, sort); * } */ /// <summary> /// Register an expression plugin. /// </summary> /// <param name="plugin"></param> /// <param name="sort">Whether or not to sort the plugin by precedence after adding it to the system.</param> public void RegisterExprPlugin(IExprPlugin plugin, bool sort) { _totalExpPlugins++; var tokens = plugin.StartTokens; // Case 1: Postfix plugin - single start token if (tokens.Length == 1 && tokens[0] == "$Suffix") { AddPlugin(_postfixPlugins, plugin, "$Suffix", sort); _hasPostfixPlugins = true; } else { // Case 2: Expression plugin foreach (var token in tokens) { AddPlugin(_expPlugins, plugin, token, sort); if (plugin.IsSystemLevel) { AddPlugin(_sysStmtPlugins, plugin, token, sort); } else if (plugin.IsStatement) { AddPlugin(_expStmtPlugins, plugin, token, sort); } if (token == "$NumericLiteralToken") { _hasLiteralCombinators = true; } } } }
/// <summary> /// Whether or not there is a statement plugin that can handle the token supplied. /// </summary> /// <param name="token"></param> /// <returns></returns> public bool CanHandleStmt(Token token) { var plugin = GetStmt(token); if (plugin == null) { return(false); } _lastMatchedExtStmt = plugin; return(true); }
/// <summary> /// Whether or not there is a expression plugin that can handle the token supplied. /// </summary> /// <param name="token">The token to check against combinators.</param> /// <returns></returns> public bool CanHandleExp(Token token) { var plugin = GetExp(token); _lastMatchedExp = plugin; if (plugin == null) { return(false); } return(true); }
private string ExprMetaData(IExprPlugin plugin, int id) { var name = plugin.GetType().Name.Replace("Plugin", ""); var filepath = @"C:\Dev\Kishore\Apps\FluentScript\fluentscript_latest2\build\plugin_template.js"; var content = System.IO.File.ReadAllText(filepath); var replacements = new Dictionary <string, string>(); replacements["name"] = name; replacements["desc"] = ""; replacements["type"] = "expr"; replacements["precedence"] = plugin.Precedence.ToString(); replacements["isStatement"] = plugin.IsStatement.ToString().ToLower(); replacements["isEndOfStatementRequired"] = plugin.IsEndOfStatementRequired.ToString().ToLower(); replacements["isSystemLevel"] = plugin.IsSystemLevel.ToString().ToLower(); replacements["isAssignmentSupported"] = plugin.IsAssignmentSupported.ToString().ToLower(); var tokens = ""; for (var ndx = 0; ndx < plugin.StartTokens.Count(); ndx++) { if (ndx != 0) { tokens += ", "; } tokens += "'" + plugin.StartTokens[ndx] + "'"; } var examples = ""; if (plugin.Examples != null) { for (var ndx = 0; ndx < plugin.Examples.Count(); ndx++) { if (ndx != 0) { examples += ", "; } examples += "'" + plugin.Examples[ndx] + "'"; } } replacements["starttokens"] = tokens; replacements["examples"] = examples; foreach (var pair in replacements) { content = content.Replace("${" + pair.Key + "}", pair.Value); } return(content); }