yavsc/Yavsc/Helpers/TeXHelpers.cs

110 lines
3.6 KiB
C#
Raw Normal View History

2016-11-09 14:03:57 +01:00
using System;
using System.IO;
2016-11-06 02:03:36 +01:00
using System.Linq;
2016-11-09 14:03:57 +01:00
using Microsoft.AspNet.Http;
using Microsoft.AspNet.Mvc;
using Microsoft.AspNet.Mvc.ModelBinding;
using Microsoft.AspNet.Mvc.Rendering;
using Microsoft.AspNet.Mvc.ViewEngines;
using Microsoft.AspNet.Mvc.ViewFeatures;
2016-11-06 02:03:36 +01:00
namespace Yavsc.Helpers
{
2016-11-10 01:03:49 +01:00
public class TeXString {
public class Replacement {
string target;
string replacement;
public Replacement(string target, string replacement){
this.target=target;
this.replacement=replacement;
}
public string Execute(string source)
{
return source.Replace(target,replacement);
}
}
2016-11-16 10:16:24 +01:00
public readonly static Replacement[] SpecialCharsRendering =
2016-11-10 01:03:49 +01:00
{
new Replacement("<","\\textless"),
new Replacement(">","\\textgreater"),
new Replacement("©","\\copyright"),
new Replacement("®","\\textregistered"),
new Replacement("\\","\\textbackslash"),
new Replacement("™","\\texttrademark"),
new Replacement("¶","\\P"),
new Replacement("|","\\textbar"),
new Replacement("%","\\%"),
new Replacement("{","\\{"),
new Replacement("}","\\}"),
new Replacement("_","\\_"),
new Replacement("#","\\#"),
new Replacement("$","\\$"),
new Replacement("_","\\_"),
new Replacement("¿","\\textquestiondown"),
new Replacement("§","\\S"),
new Replacement("£","\\pounds"),
new Replacement("&","\\&"),
new Replacement("¡","\\textexclamdown"),
new Replacement("†","\\dag"),
new Replacement("","\\textendash")
};
string data;
public TeXString(string str) {
data = str;
2016-11-16 10:16:24 +01:00
foreach (var r in SpecialCharsRendering) {
2016-11-10 01:03:49 +01:00
data = r.Execute(data);
}
}
override public string ToString()
{
return data;
}
}
2016-11-06 02:03:36 +01:00
public static class TeXHelpers
{
public static string NewLinesWith(this string target, string separator)
{
var items = target.Split(new char[] {'\n'}).Where(
s=> !string.IsNullOrWhiteSpace(s) ) ;
return string.Join(separator, items);
}
2016-11-10 01:03:49 +01:00
public static TeXString ToTeX(string target, string lineSeparator="\n\\\\")
{
if (target==null) return null;
return new TeXString(target.NewLinesWith(lineSeparator));
}
2016-11-09 14:03:57 +01:00
public static string RenderViewToString(
this Controller controller, IViewEngine engine,
IHttpContextAccessor httpContextAccessor,
string viewName, object model)
{
using (var sw = new StringWriter())
{
if (engine == null)
throw new InvalidOperationException("no engine");
// try to find the specified view
controller.TryValidateModel(model);
ViewEngineResult viewResult = engine.FindPartialView(controller.ActionContext, viewName);
// create the associated context
ViewContext viewContext = new ViewContext();
viewContext.ActionDescriptor = controller.ActionContext.ActionDescriptor;
viewContext.HttpContext = controller.ActionContext.HttpContext;
viewContext.TempData = controller.TempData;
viewContext.View = viewResult.View;
viewContext.Writer = sw;
// write the render view with the given context to the stringwriter
viewResult.View.RenderAsync(viewContext);
viewResult.EnsureSuccessful();
return sw.GetStringBuilder().ToString();
}
}
2016-11-06 02:03:36 +01:00
}
}