Fixed <sub> and <sup> in formatter.cs, now don't see tag in visual editor

This commit is contained in:
Cristian Trapattoni 2011-03-01 15:55:43 +01:00
parent a15e48cff8
commit c950307494
3 changed files with 56 additions and 19 deletions

View file

@ -16,15 +16,15 @@ namespace ScrewTurn.Wiki.Tests {
[TestCase("<em>text</em>", "''text''")] [TestCase("<em>text</em>", "''text''")]
[TestCase("<u>text</u>", "__text__")] [TestCase("<u>text</u>", "__text__")]
[TestCase("<s>text</s>", "--text--")] [TestCase("<s>text</s>", "--text--")]
[TestCase("<h1>text</h1>", "==text==")] [TestCase("<h1>text</h1>", "\r\n==text==\r\n")]
[TestCase("<h2>text</h2>", "===text===")] [TestCase("<h2>text</h2>", "\r\n===text===\r\n")]
[TestCase("<h3>text</h3>", "====text====")] [TestCase("<h3>text</h3>", "\r\n====text====\r\n")]
[TestCase("<h4>text</s>", "=====text=====")] [TestCase("<h4>text</s>", "\r\n=====text=====\r\n")]
[TestCase("<sup>text</sup>", "<sup>text</sup>")] [TestCase("<sup>text</sup>", "<sup>text</sup>")]
[TestCase("<sub>text</sub>", "<sub>text</sub>")] [TestCase("<sub>text</sub>", "<sub>text</sub>")]
[TestCase("<pre><b>text</b></pre>", "@@text@@")] [TestCase("<pre><b>text</b></pre>", "@@text@@")]
[TestCase("<code><b>text</b></code>", "{{'''text'''}}")] [TestCase("<code><b>text</b></code>", "{{'''text'''}}")]
[TestCase("<div class=\"box\">text</div>", "(((text)))\r\n")] [TestCase("<div class=\"box\">text</div>", "\r\n(((text)))\r\n")]
[TestCase("<div>text</div>", "\r\ntext\r\n")] [TestCase("<div>text</div>", "\r\ntext\r\n")]
[TestCase("<html>riga1\r\n<b>riga2</b>\r\nriga3</html>","riga1\r\n'''riga2'''\r\nriga3")] [TestCase("<html>riga1\r\n<b>riga2</b>\r\nriga3</html>","riga1\r\n'''riga2'''\r\nriga3")]
[TestCase("<html><ol><li>1</li><li>2</li><li>3<ol><li>3.1</li><li>3.2<ol><li>3.2.1</li></ol></li><li>3.3</li></ol></li><li>4<br /></li></ol><br /></html>", "# 1\r\n# 2\r\n# 3\r\n## 3.1\r\n## 3.2\r\n### 3.2.1\r\n## 3.3\r\n# 4\r\n\r\n\r\n")] [TestCase("<html><ol><li>1</li><li>2</li><li>3<ol><li>3.1</li><li>3.2<ol><li>3.2.1</li></ol></li><li>3.3</li></ol></li><li>4<br /></li></ol><br /></html>", "# 1\r\n# 2\r\n# 3\r\n## 3.1\r\n## 3.2\r\n### 3.2.1\r\n## 3.3\r\n# 4\r\n\r\n\r\n")]
@ -38,7 +38,7 @@ namespace ScrewTurn.Wiki.Tests {
[TestCase("<html><a class=\"internallink\" href=\"#init\" title=\"This recall an anchor\">This recall an anchor</a></html>", "[#init|This recall an anchor]")] [TestCase("<html><a class=\"internallink\" href=\"#init\" title=\"This recall an anchor\">This recall an anchor</a></html>", "[#init|This recall an anchor]")]
[TestCase("<html><a class=\"externallink\" href=\"google.com\" title=\"BIG TITLE\" target=\"_blank\">BIG TITLE</a></html>", "[^google.com|BIG TITLE]")] [TestCase("<html><a class=\"externallink\" href=\"google.com\" title=\"BIG TITLE\" target=\"_blank\">BIG TITLE</a></html>", "[^google.com|BIG TITLE]")]
[TestCase("<esc>try to esc tag</esc>", "<esc>try to esc tag</esc>")] [TestCase("<esc>try to esc tag</esc>", "<esc>try to esc tag</esc>")]
[TestCase("<div class=\"imageleft\"><a target=\"_blank\" href=\"www.link.com\" title=\"left Align\"><img class=\"image\" src=\"GetFile.aspx?Page=MainPage&File=image.png\" alt=\"left Align\" /></a><p class=\"imagedescription\">leftalign</p></div>", "[imageleft|leftalign|{UP(MainPage)}image.png|^www.link.com]\r\n")] [TestCase("<div class=\"imageleft\"><a target=\"_blank\" href=\"www.link.com\" title=\"left Align\"><img class=\"image\" src=\"GetFile.aspx?Page=MainPage&File=image.png\" alt=\"left Align\" /></a><p class=\"imagedescription\">leftalign</p></div>", "\r\n[imageleft|leftalign|{UP(MainPage)}image.png|^www.link.com]\r\n")]
[TestCase("<img src=\"GetFile.aspx?Page=MainPage&File=image.png\" alt=\"inlineimage\" />", "[image||{UP(MainPage)}image.png]\r\n")] [TestCase("<img src=\"GetFile.aspx?Page=MainPage&File=image.png\" alt=\"inlineimage\" />", "[image||{UP(MainPage)}image.png]\r\n")]
[TestCase("<a target=\"_blank\" href=\"www.google.it\" title=\"description\"><img src=\"GetFile.aspx?Page=MainPage&File=image.png\" alt=\"description\" /></a>", "[image||{UP(MainPage)}image.png|^www.google.it]\r\n")] [TestCase("<a target=\"_blank\" href=\"www.google.it\" title=\"description\"><img src=\"GetFile.aspx?Page=MainPage&File=image.png\" alt=\"description\" /></a>", "[image||{UP(MainPage)}image.png|^www.google.it]\r\n")]
[TestCase("<table class=\"imageauto\" cellpadding=\"0\" cellspacing=\"0\"><tbody><tr><td><img class=\"image\" src=\"GetFile.aspx?Page=MainPage&File=image.png\" alt=\"autoalign\" /><p class=\"imagedescription\">autoalign</p></td></tr></tbody></table>", "[imageauto|autoalign|{UP(MainPage)}image.png]\r\n")] [TestCase("<table class=\"imageauto\" cellpadding=\"0\" cellspacing=\"0\"><tbody><tr><td><img class=\"image\" src=\"GetFile.aspx?Page=MainPage&File=image.png\" alt=\"autoalign\" /><p class=\"imagedescription\">autoalign</p></td></tr></tbody></table>", "[imageauto|autoalign|{UP(MainPage)}image.png]\r\n")]

View file

@ -30,6 +30,8 @@ namespace ScrewTurn.Wiki {
private static readonly Regex BoldRegex = new Regex(@"'''.+?'''", RegexOptions.Compiled | RegexOptions.Singleline); private static readonly Regex BoldRegex = new Regex(@"'''.+?'''", RegexOptions.Compiled | RegexOptions.Singleline);
private static readonly Regex ItalicRegex = new Regex(@"''.+?''", RegexOptions.Compiled | RegexOptions.Singleline); private static readonly Regex ItalicRegex = new Regex(@"''.+?''", RegexOptions.Compiled | RegexOptions.Singleline);
private static readonly Regex BoldItalicRegex = new Regex(@"'''''.+?'''''", RegexOptions.Compiled | RegexOptions.Singleline); private static readonly Regex BoldItalicRegex = new Regex(@"'''''.+?'''''", RegexOptions.Compiled | RegexOptions.Singleline);
private static readonly Regex ApexRegex = new Regex(@"\&lt;sup\&gt(.+?)\&lt;/sup\&gt;", RegexOptions.Compiled | RegexOptions.Singleline);
private static readonly Regex SubscribeRegex = new Regex(@"\&lt;sub\&gt(.+?)\&lt;/sub\&gt;",RegexOptions.Compiled | RegexOptions.Singleline);
private static readonly Regex UnderlinedRegex = new Regex(@"__.+?__", RegexOptions.Compiled | RegexOptions.Singleline); private static readonly Regex UnderlinedRegex = new Regex(@"__.+?__", RegexOptions.Compiled | RegexOptions.Singleline);
private static readonly Regex StrikedRegex = new Regex(@"(?<!(\<\!|\&lt;))(\-\-(?!\>).+?\-\-)(?!(\>|\&gt;))", RegexOptions.Compiled | RegexOptions.Singleline); private static readonly Regex StrikedRegex = new Regex(@"(?<!(\<\!|\&lt;))(\-\-(?!\>).+?\-\-)(?!(\>|\&gt;))", RegexOptions.Compiled | RegexOptions.Singleline);
private static readonly Regex CodeRegex = new Regex(@"\{\{.+?\}\}", RegexOptions.Compiled | RegexOptions.Singleline); private static readonly Regex CodeRegex = new Regex(@"\{\{.+?\}\}", RegexOptions.Compiled | RegexOptions.Singleline);
@ -604,6 +606,32 @@ namespace ScrewTurn.Wiki {
match = UnderlinedRegex.Match(sb.ToString(), end); match = UnderlinedRegex.Match(sb.ToString(), end);
} }
match = ApexRegex.Match(sb.ToString());
while(match.Success) {
if(!IsNoWikied(match.Index, noWikiBegin, noWikiBegin, out end)) {
sb.Remove(match.Index, match.Length);
dummy = new StringBuilder("<sup>");
dummy.Append(match.Value.Substring(11, match.Value.Length - 23));
dummy.Append("</sup>");
sb.Insert(match.Index, dummy.ToString());
}
ComputeNoWiki(sb.ToString(), ref noWikiBegin, ref noWikiEnd);
match = ApexRegex.Match(sb.ToString(), end);
}
match = SubscribeRegex.Match(sb.ToString());
while(match.Success) {
if(!IsNoWikied(match.Index, noWikiBegin, noWikiBegin, out end)) {
sb.Remove(match.Index, match.Length);
dummy = new StringBuilder("<sub>");
dummy.Append(match.Value.Substring(11, match.Value.Length - 23));
dummy.Append("</sub>");
sb.Insert(match.Index, dummy.ToString());
}
ComputeNoWiki(sb.ToString(), ref noWikiBegin, ref noWikiEnd);
match = SubscribeRegex.Match(sb.ToString(), end);
}
match = StrikedRegex.Match(sb.ToString()); match = StrikedRegex.Match(sb.ToString());
while(match.Success) { while(match.Success) {
if(!IsNoWikied(match.Index, noWikiBegin, noWikiEnd, out end)) { if(!IsNoWikied(match.Index, noWikiBegin, noWikiEnd, out end)) {

View file

@ -30,7 +30,6 @@ namespace ScrewTurn.Wiki {
description += processChild(n.ChildNodes); description += processChild(n.ChildNodes);
} }
} }
} }
return description; return description;
} }
@ -137,6 +136,11 @@ namespace ScrewTurn.Wiki {
return result; return result;
} }
private static string processCode(string text) {
string result = "";
result = text;
return result;
}
/// <summary> /// <summary>
/// Processes the child. /// Processes the child.
/// </summary> /// </summary>
@ -149,7 +153,7 @@ namespace ScrewTurn.Wiki {
if(node.NodeType == XmlNodeType.Text) { if(node.NodeType == XmlNodeType.Text) {
result += node.Value; result += node.Value;
} }
else if (node.NodeType != XmlNodeType.Whitespace){ else if(node.NodeType != XmlNodeType.Whitespace) {
switch(node.Name.ToLowerInvariant()) { switch(node.Name.ToLowerInvariant()) {
case "html": case "html":
result += processChild(node.ChildNodes); result += processChild(node.ChildNodes);
@ -158,6 +162,7 @@ namespace ScrewTurn.Wiki {
case "strong": case "strong":
result += ("'''" + processChild(node.ChildNodes) + "'''"); result += ("'''" + processChild(node.ChildNodes) + "'''");
break; break;
case "strike":
case "s": case "s":
result += ("--" + processChild(node.ChildNodes) + "--"); result += ("--" + processChild(node.ChildNodes) + "--");
break; break;
@ -170,29 +175,32 @@ namespace ScrewTurn.Wiki {
break; break;
//break; //break;
case "h1": case "h1":
result += ("==" + processChild(node.ChildNodes) + "=="); if(node.HasChildNodes)
result += ("\r\n==" + processChild(node.ChildNodes) + "==\r\n");
else
result += ("\r\n== ==\r\n");
break; break;
//break; //break;
case "h2": case "h2":
result += ("===" + processChild(node.ChildNodes) + "==="); result += ("\r\n===" + processChild(node.ChildNodes) + "===\r\n");
break; break;
//break; //break;
case "h3": case "h3":
result += ("====" + processChild(node.ChildNodes) + "===="); result += ("\r\n====" + processChild(node.ChildNodes) + "====\r\n");
break; break;
//break; //break;
case "h4": case "h4":
result += ("=====" + processChild(node.ChildNodes) + "====="); result += ("\r\n=====" + processChild(node.ChildNodes) + "=====\r\n");
break; break;
case "pre": case "pre":
result += ("@@" + node.InnerText.ToString() + "@@"); result += ("@@" + processCode(node.InnerText.ToString()) + "@@");
break; break;
case "code": case "code":
result += ("{{" + processChild(node.ChildNodes) + "}}"); result += ("{{" + processChild(node.ChildNodes) + "}}");
break; break;
case "hr": case "hr":
case "hr /": case "hr /":
result += ("----" + processChild(node.ChildNodes)); result += ("\r\n== ==\r\n" + processChild(node.ChildNodes));
break; break;
case "\t": case "\t":
result += (":" + processChild(node.ChildNodes)); result += (":" + processChild(node.ChildNodes));
@ -266,15 +274,15 @@ namespace ScrewTurn.Wiki {
XmlAttributeCollection attribute = node.Attributes; XmlAttributeCollection attribute = node.Attributes;
foreach(XmlAttribute attName in attribute) { foreach(XmlAttribute attName in attribute) {
if(attName.Value.ToString() == "box") { if(attName.Value.ToString() == "box") {
result += "(((" + processChild(node.ChildNodes) + ")))\r\n"; result += "\r\n" + "(((" + processChild(node.ChildNodes) + ")))\r\n";
} }
if(attName.Value.ToString() == "imageleft") { if(attName.Value.ToString() == "imageleft") {
result += "[imageleft" + processChildImage(node.ChildNodes) + "]\r\n"; result += "\r\n" + "[imageleft" + processChildImage(node.ChildNodes) + "]\r\n";
} }
if(attName.Value.ToString() == "imageright") if(attName.Value.ToString() == "imageright")
result += "[imageright" + processChildImage(node.ChildNodes) + "]\r\n"; result += "\r\n" + "[imageright" + processChildImage(node.ChildNodes) + "]\r\n";
if(attName.Value.ToString() == "imageauto") if(attName.Value.ToString() == "imageauto")
result += "[imageauto" + processChildImage(node.ChildNodes) + "]\r\n"; result += "\r\n" + "[imageauto" + processChildImage(node.ChildNodes) + "]\r\n";
} }
} }
else else
@ -292,7 +300,7 @@ namespace ScrewTurn.Wiki {
foreach(XmlAttribute attName in node.Attributes) { foreach(XmlAttribute attName in node.Attributes) {
if(attName.Name.ToString() == "alt") if(attName.Name.ToString() == "alt")
description = searchDescription(node.ParentNode.ChildNodes); description = searchDescription(node.ParentNode.ChildNodes);
//description = attName.Value.ToString(); //description = attName.Value.ToString();
if(attName.Name.ToString() == "class") if(attName.Name.ToString() == "class")
hasClass = true; hasClass = true;
} }
@ -352,6 +360,7 @@ namespace ScrewTurn.Wiki {
break; break;
} }
} }
else result += "";
} }
return result; return result;
} }