【问题标题】:A wiki for asp.net mvc wiki-engine [closed]asp.net mvc wiki-engine 的 wiki [关闭]
【发布时间】:2010-11-10 20:29:32
【问题描述】:

是否有任何 wiki 模块适用于 asp.net mvc 或 soemthign 可以相对轻松地进行调整 :)

或者,是否有任何 wiki 标记的格式化程序可能实现最常​​见的 wiki 标记格式等。

【问题讨论】:

标签: asp.net-mvc wiki-engine


【解决方案1】:

试试

MiniWiki

很容易定制。

【讨论】:

  • 扫描过了,找不到关于标记的信息,有什么帮助吗?
  • 标记在代码中。它使用一种奇怪的符号来创建指向新页面的链接,但它工作正常。我修改了我的代码以接受更好的符号,并且只花了大约一个小时来理解和定制。查看 MiniWiki.DomainModel 中的文件 WikiToHtmlFormatter.cs 了解详细信息。
  • 我从 8 开始向后追踪该值,并在代码中一直到 7,但在此过程中丢失了它,也许如果您知道生成 标记所需的标记,我可以一步以这种方式通过它
  • 奇怪的是,这正是我修改的标签,因为它对我来说毫无意义。我不再拥有原始代码,但据我所知,如果同一个单词中有两个大写字母,它就会成为指向新页面的链接。所以请检查我的下一个答案,因为我对其进行了更改,因此 [] 中包含的任何内容都是指向新页面或现有页面的锚链接。
【解决方案2】:

基于 mvc4 的新 wiki 引擎已在 http://lynxwiki.codeplex.com 发布,该引擎的运行版本在 http://www.sapientier.com:88/LynxWiki/WikiTopic/Page/WikiRoot/WikiDir/HomePage

这是一个功能齐全的 wiki,具有 MediaWiki 的许多功能,此外它还可以使用嵌入式 IronPython 脚本来处理动态内容

【讨论】:

  • 欢迎来到 Stack Overflow!感谢您发布您的答案!请务必仔细阅读FAQ on Self-Promotion。另请注意,每次链接到自己的网站/产品时,都要求发布免责声明。
【解决方案3】:
    private void ProcessLine(string line, TextWriter writer)
    {
        int state = 0;
        int i = 0;
        int wordStart = 0;
        Action encode = () => HttpUtility.HtmlEncode(line[i].ToString(), writer);
        Func<bool> isws = () => Char.IsWhiteSpace(line[i]);

        for (i = 0; i < line.Length; ++i)
        {
            switch (state)
            {
                case 0:
                    if (line[i] == '*')
                    {
                        state = 1;
                    }
                    else if (line[i] == '/')
                    {
                        state = 4;
                    }
                    else if (line[i] == '[')
                    {
                        wordStart = i + 1;
                        state = 7;
                    }
                    else
                    {
                        encode();
                    }
                    break;

                case 1: //Start bold
                    if (isws())
                    {
                        encode();
                        state = 0;
                    }
                    else
                    {
                        writer.Write("<b>");
                        encode();
                        state = 2;
                    }
                    break;

                case 2: //End bold
                    if (isws())
                    {
                        encode();
                        state = 3;
                    }
                    else if (line[i] == '*')
                    {
                        writer.Write("</b>");
                        state = 0;
                    }
                    else
                    {
                        encode();
                    }
                    break;

                case 3:
                    if (isws())
                    {
                        encode();
                    }
                    else
                    {
                        encode();
                        state = 2;
                    }
                    break;

                case 4: //Start italics
                    if (isws())
                    {
                        HttpUtility.HtmlEncode("/ ", writer);
                        state = 0;
                    }
                    else
                    {
                        writer.Write("<i>");
                        encode();
                        state = 5;
                    }
                    break;

                case 5: //End italics
                    if (isws())
                    {
                        encode();
                        state = 6;
                    }
                    else if (line[i] == '/')
                    {
                        writer.Write("</i>");
                        state = 0;
                    }
                    else
                    {
                        encode();
                    }
                    break;

                case 6:
                    if (isws())
                    {
                        encode();
                    }
                    else
                    {
                        encode();
                        state = 5;
                    }
                    break;

                case 7: //Start link
                    state = 8;
                    break;
                case 8: //End link
                    if (line[i] == ']')
                    {
                        WriteLink(line.Substring(wordStart, i - wordStart), writer);
                        state = 0;
                    }
                    break;
            }
        }

        // Clean up italics, bold etc. based on the state we were in at the end of the line.
        switch (state)
        {
            case 0:
                break;
            case 1:
                HttpUtility.HtmlEncode("*", writer);
                break;
            case 2:
            case 3:
                writer.Write("</b>");
                break;
            case 4:
                HttpUtility.HtmlEncode("/", writer);
                break;
            case 5:
            case 6:
                writer.Write("</i>");
                break;
            case 7:
                HttpUtility.HtmlEncode(line.Substring(wordStart), writer);
                break;
            case 8:
                WriteLink(line.Substring(wordStart), writer);
                break;
        }

    }

【讨论】:

  • 上面的代码改变了行为,使得 [] 中包含的任何内容都成为指向新页面或现有页面的链接。希望这就是你在库马尔之后的样子。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-03-01
  • 1970-01-01
  • 2010-12-01
  • 1970-01-01
相关资源
最近更新 更多