public async Task <JObject> GetMarkdownIt(string text) { _jsengine = _jsengine ?? JsEngineSwitcher.Instance.CreateDefaultEngine(); var version = "8.4.0"; if (_mardownit == null) { _mardownit = await _httpClient.GetStringAsync($"https://raw.githubusercontent.com/markdown-it/markdown-it/{version}/dist/markdown-it.min.js"); _jsengine.Execute(_mardownit); _jsengine.Evaluate("var MarkdownIt = markdownit();"); } var inputval = "input_" + Guid.NewGuid().ToString().Replace("-", "_"); _jsengine.SetVariableValue(inputval, text); var script = $"MarkdownIt.render({inputval});"; var result = _jsengine.Evaluate(script)?.ToString(); _jsengine.RemoveVariable(inputval); var jsonResult = new JObject { ["name"] = "markdown-it", ["version"] = version, ["html"] = result }; return(jsonResult); }
public override IRow Operate(IRow row) { foreach (var field in _input) { _engine.SetVariableValue(field.Alias, row[field]); } try { var value = Context.Field.Convert(_engine.Evaluate(Context.Operation.Script)); if (value == null && !_errors.ContainsKey(0)) { Context.Error($"{_engine.Name} transform in {Context.Field.Alias} returns null!"); _errors[0] = $"{_engine.Name} transform in {Context.Field.Alias} returns null!"; } else { row[Context.Field] = value; } } catch (JsRuntimeException jse) { if (!_errors.ContainsKey(jse.LineNumber)) { Context.Error("Script: " + Context.Operation.Script.Replace("{", "{{").Replace("}", "}}")); Context.Error(jse, "Error Message: " + jse.Message); Context.Error("Variables:"); foreach (var field in _input) { Context.Error($"{field.Alias}:{row[field]}"); } _errors[jse.LineNumber] = jse.Message; } } return(row); }
public async Task <JObject> GetCommonMarkJs(string text) { _jsengine = _jsengine ?? JsEngineSwitcher.Instance.CreateDefaultEngine(); var version = "0.28.1"; if (_commonmarkjs == null) { _commonmarkjs = await _httpClient.GetStringAsync($"https://raw.githubusercontent.com/commonmark/commonmark.js/{version}/dist/commonmark.min.js"); _jsengine.Execute(_commonmarkjs); } var inputval = "input_" + Guid.NewGuid().ToString().Replace("-", "_"); _jsengine.SetVariableValue(inputval, text); var script = $"(new commonmark.HtmlRenderer()).render((new commonmark.Parser()).parse({inputval}));"; var result = _jsengine.Evaluate(script)?.ToString(); _jsengine.RemoveVariable(inputval); var jsonResult = new JObject { ["name"] = "commonmark.js", ["version"] = version, ["html"] = result }; return(jsonResult); }
public static string GetCondition(List <string> constants, List <int> useConstants, string condition, string className) { GetJsEngineSwitcher(); return(antiDupCache.GetOrAdd(condition, () => { var js = @"var antlr4={}; antlr4.Token={}; antlr4.Token.EOF=-1; var {3}={}; {3}.EOF = antlr4.Token.EOF; {0} var testNums=[{1}]; var result=[]; for(var i=0;i<testNums.length;i++){ var _la=testNums[i]; if({2}){ result.push(_la) } } outResult=result.join(','); "; js = js.Replace("{0}", string.Join("\r\n", constants)); js = js.Replace("{1}", string.Join(",", useConstants)); js = js.Replace("{2}", condition); js = js.Replace("{3}", className); IJsEngine engine = JsEngineSwitcher.Current.CreateEngine(JintJsEngine.EngineName); engine.SetVariableValue("outResult", ""); engine.Evaluate(js); var result = engine.GetVariableValue <string>("outResult"); engine.Dispose(); return result; })); }
public string Transform(string markdown) { string result; lock (_compilationSynchronizer) { Initialize(); _jsEngine.SetVariableValue("_markdownString", markdown); result = _jsEngine.Evaluate <string>("markedHelper.compile(_markdownString)"); } return(HtmlUtility.SanitizeHtml(result)); }
/// <summary> /// Initializes a Sass compiler /// </summary> private void InitializeCompiler() { if (_initialized) { return; } lock (_initializationSynchronizer) { if (_initialized) { return; } string serializedOptions = _jsonSerializer.SerializeObject(_options); try { _jsEngine = _createJsEngineInstance(); _jsEngine.EmbedHostObject(FILE_MANAGER_VARIABLE_NAME, _fileManager); _jsEngine.SetVariableValue(CURRENT_OS_PLATFORM_NAME, GetCurrentOSPlatformName()); Assembly assembly = this.GetType() #if !NET40 .GetTypeInfo() #endif .Assembly ; _jsEngine.ExecuteResource(ResourceHelpers.GetResourceName(ES6_POLYFILLS_FILE_NAME), assembly, true); _jsEngine.ExecuteResource(ResourceHelpers.GetResourceName(SASS_LIBRARY_FILE_NAME), assembly, true); _jsEngine.ExecuteResource(ResourceHelpers.GetResourceName(SASS_HELPER_FILE_NAME), assembly, true); _jsEngine.Execute($"var sassHelper = new SassHelper({serializedOptions});"); _version = _jsEngine.Evaluate <string>("SassHelper.getVersion();"); } catch (JsEngineLoadException e) { throw SassErrorHelpers.WrapCompilerLoadException(e); } catch (JsException e) { throw SassErrorHelpers.WrapCompilerLoadException(e, true); } _initialized = true; } }
public override object Evaluate(string script, params KeyValuePair <string, object>[] kvp) { object result = null; if (kvp != null) { foreach (var obj in kvp) { //判定是否为值类型 if (obj.Value.GetType().IsValueType || obj.Value is string) { js.SetVariableValue(obj.Key, obj.Value); } else { js.EmbedHostObject(obj.Key, obj.Value); } } } try { result = js.Evaluate(script); } catch (JavaScriptEngineSwitcher.Core.JsException jse) { if (jse.InnerException != null) { if (jse.InnerException is VroomJs.JsException) { var vjse = (VroomJs.JsException)jse.InnerException; throw new HostJsException(jse.Message, script, vjse.Line, vjse.Column); } } else { throw new HostJsException(jse.Message, script, 0, 0); } } return(result); }
public virtual void SettingAndGettingVariableWithUndefinedValueIsCorrect() { // Arrange const string variableName = "myVar1"; object input = Undefined.Value; // Act _jsEngine.SetVariableValue(variableName, input); bool variableExists = _jsEngine.HasVariable(variableName); var output = _jsEngine.GetVariableValue(variableName); // Assert Assert.IsFalse(variableExists); Assert.AreEqual(input, output); }
public void SetVariableValue(string variableName, object value) { CheckDisposed(); _engine.SetVariableValue(variableName, value); }
/// <inheritdoc /> public IEnumerable <IDocument> Execute(IReadOnlyList <IDocument> inputs, IExecutionContext context) { HtmlParser parser = new HtmlParser(); using (IJsEnginePool enginePool = context.GetJsEnginePool(x => { if (string.IsNullOrWhiteSpace(_highlightJsFile)) { x.ExecuteResource("highlight-all.js", typeof(Highlight)); } else { x.ExecuteFile(_highlightJsFile); } })) { return(inputs.AsParallel().Select(context, input => { // We materialize the list before exiting the using statement, so safe to access enginePool // ReSharper disable once AccessToDisposedClosure using (IJsEngine engine = enginePool.GetEngine()) { try { using (Stream stream = input.GetStream()) using (IHtmlDocument htmlDocument = parser.Parse(stream)) { foreach (AngleSharp.Dom.IElement element in htmlDocument.QuerySelectorAll(_codeQuerySelector)) { // Don't highlight anything that potentially is already highlighted if (element.ClassList.Contains("hljs")) { continue; } // Make sure to use TextContent, otherwise you'll get escaped html which highlight.js won't parse engine.SetVariableValue("input", element.TextContent); // Check if they specified a language in their code block string language = element.ClassList.FirstOrDefault(i => i.StartsWith("language")); try { if (language != null) { engine.SetVariableValue("language", language.Replace("language-", "")); engine.Execute("result = hljs.highlight(language, input)"); } else { language = "(auto)"; // set this to auto in case there is an exception below engine.Execute("result = hljs.highlightAuto(input)"); string detectedLanguage = engine.Evaluate <string>("result.language"); if (string.IsNullOrWhiteSpace(detectedLanguage) == false) { element.ClassList.Add("language-" + detectedLanguage); } } element.ClassList.Add("hljs"); string formatted = engine.Evaluate <string>("result.value"); element.InnerHtml = formatted; } catch (Exception innerEx) { if (innerEx.Message.Contains("Unknown language: ") && _warnOnMissingLanguage) { Trace.Warning("Exception while highlighting source code for {0} using language {1}: {2}", input.SourceString(), language, innerEx.Message); } else { Trace.Information("Exception while highlighting source code for {0} using language {1}: {2}", input.SourceString(), language, innerEx.Message); } } } string content = htmlDocument.ToHtml(); return context.GetDocument(input, content); } } catch (Exception ex) { Trace.Warning("Exception while highlighting source code for {0}: {1}", input.SourceString(), ex.Message); return input; } } }).ToList()); } }
public void SetVariableValue(string variableName, object value) { jsEngine.SetVariableValue(variableName, value); }