从markdown'ed文本中获取原始文本

时间:2009-01-27 20:26:46

标签: c# .net formatting markdown

在我的数据库中,我有一个降价文本。与SO在显示问题摘录时的方式相同,我想得到文本的N个第一个字符,即必须删除所有格式。当然MD - >必须避免使用HTML步骤,并且必须在MD文本上完成工作。性能是必需的。 THX。

4 个答案:

答案 0 :(得分:4)

  

在我的数据库中,我有一个降价文本。在显示问题摘录时,与SO相同,我希望获得文本的N个第一个字符,即必须删除所有格式。

我们将文本的两种表示形式存储在数据库中:

  1. 适合编辑的原始Markdown
  2. 适用于输出的HTML版本
  3. 当我们显示它时,我们使用HTML-ized输出版本并简单地应用我们的标准HTML剥离算法。

答案 1 :(得分:2)

如果我误解(或者只是理解不足)你需要在这里做什么,请原谅我,但是如果有更多的读取(页面浏览)而不是插入(添加新的降价),我会发生这种情况。记录)到这个数据库,从性能的角度来看,你 可能 能够通过保存文本版本来获得最大的收益,所有标记都被剥离在一个单独的字段中数据库。这样你的前端就不必在显示到浏览器之前反复解析它从数据库中读取的内容......只有在添加新记录时才会解析它。

从性能的角度来看这是否真的有意义取决于各种特定于您情况的变量...文本条目的大小,插入记录与读取的频率等等。

答案 2 :(得分:1)

我要处理的方法是为包含/表示标记的向下文本的类定义格式化程序接口。然后,您将拥有支持HTML格式和纯文本格式的具体实现。您需要做的就是注入正确的实现并调用格式化程序。

您的纯文本格式化程序可以简单地遍历字符串中的字符,复制字符直到它达到某些降价。然后它会跳过降价并在文本点击时再次开始输出。

public interface IFormatter
{
    string Format();
}

public class HtmlFormatter: IFormatter
{
    public Format()
    {
        return ...string translated to HTML...
    }
}

public class PlainTextFormatter : IFormatter
{
    public Format()
    {
        ...go through and remove all markdown and return rest
    }
}


public class Post : IFormattable
{
    public IFormatter Formatter { get; set; }

    public Post( IFormatter formatter )
    {
        this.Formatter = formatter ?? new HtmlFormatter();
    }

    public Format()
    {
        return this.Formatter.Format();
    }
}

答案 3 :(得分:0)

这是我正在采取的路径:我将修改降价代码,以便通过开关,我可以生成html或简单文本。生成摘录后,我一定会将其存储在数据库中。

我不会将任何答案标记为解决方案,因为有很多方法可以做到这一点。每个人都得到我的投票;)