[touch: 590]
Fixed link inside images switching from visual to wikimarkup.
This commit is contained in:
parent
6bc34e925e
commit
574489d476
1 changed files with 47 additions and 71 deletions
|
@ -15,13 +15,6 @@ namespace ScrewTurn.Wiki {
|
||||||
/// </summary>
|
/// </summary>
|
||||||
public static class ReverseFormatter {
|
public static class ReverseFormatter {
|
||||||
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// Processes order or unorder lists and sublists.
|
|
||||||
/// </summary>
|
|
||||||
/// <param name="nodes">The nodes.</param>
|
|
||||||
/// <param name="marker">The marker.</param>
|
|
||||||
/// <returns>Valid WikiMarkUp text for the lists</returns>
|
|
||||||
private static string processList(XmlNodeList nodes, string marker) {
|
private static string processList(XmlNodeList nodes, string marker) {
|
||||||
string result = "";
|
string result = "";
|
||||||
string ul = "*";
|
string ul = "*";
|
||||||
|
@ -39,10 +32,10 @@ namespace ScrewTurn.Wiki {
|
||||||
result += marker + " " + text;
|
result += marker + " " + text;
|
||||||
if(!result.EndsWith("\r\n")) result += "\r\n";
|
if(!result.EndsWith("\r\n")) result += "\r\n";
|
||||||
foreach(XmlNode child in node.ChildNodes) {
|
foreach(XmlNode child in node.ChildNodes) {
|
||||||
if(child.Name.ToString() == "ol"){
|
if(child.Name.ToString() == "ol") {
|
||||||
result += processList(child.ChildNodes, marker + ol);
|
result += processList(child.ChildNodes, marker + ol);
|
||||||
}
|
}
|
||||||
if (child.Name.ToString() == "ul") {
|
if(child.Name.ToString() == "ul") {
|
||||||
result += processList(child.ChildNodes, marker + ul);
|
result += processList(child.ChildNodes, marker + ul);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -51,11 +44,6 @@ namespace ScrewTurn.Wiki {
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// Processes the image.
|
|
||||||
/// </summary>
|
|
||||||
/// <param name="node">The node contenent fileName of the image.</param>
|
|
||||||
/// <returns>The correct path for wikimarup and image</returns>
|
|
||||||
private static string processImage(XmlNode node) {
|
private static string processImage(XmlNode node) {
|
||||||
string result = "";
|
string result = "";
|
||||||
if(node.Attributes.Count != 0) {
|
if(node.Attributes.Count != 0) {
|
||||||
|
@ -71,11 +59,19 @@ namespace ScrewTurn.Wiki {
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>
|
private static string processLink(string link) {
|
||||||
/// Processes the child Image.
|
string subLink = "";
|
||||||
/// </summary>
|
string[] links = link.Split('=');
|
||||||
/// <param name="nodes">Nodelist from an image.</param>
|
if(links[0] == "GetFile.aspx?File") {
|
||||||
/// <returns>The correct WikiMarkup for the images </returns>
|
subLink += "{UP}";
|
||||||
|
for(int i = 1; i < links.Length - 1; i++)
|
||||||
|
subLink += links[i] + "=";
|
||||||
|
subLink += links[links.Length - 1];
|
||||||
|
link = subLink;
|
||||||
|
}
|
||||||
|
return link;
|
||||||
|
}
|
||||||
|
|
||||||
private static string processChildImage(XmlNodeList nodes) {
|
private static string processChildImage(XmlNodeList nodes) {
|
||||||
string image = "";
|
string image = "";
|
||||||
string p = "";
|
string p = "";
|
||||||
|
@ -102,25 +98,21 @@ namespace ScrewTurn.Wiki {
|
||||||
link += attName.Value.ToString();
|
link += attName.Value.ToString();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
link = processLink(link);
|
||||||
|
|
||||||
image += processImage(node.LastChild);
|
image += processImage(node.LastChild);
|
||||||
url = "|" + target + link;
|
url = "|" + target + link;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (!hasDescription)
|
if(!hasDescription)
|
||||||
p = "||";
|
p = "||";
|
||||||
result = p + image + url;
|
result = p + image + url;
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private static string processTableImage(XmlNodeList nodes) {
|
||||||
/// <summary>
|
|
||||||
/// Processes the table image.
|
|
||||||
/// </summary>
|
|
||||||
/// <param name="nodes">The nodes.</param>
|
|
||||||
/// <returns>An auto-image type formmatter</returns>
|
|
||||||
private static string processTableImage(XmlNodeList nodes){
|
|
||||||
string result = "";
|
string result = "";
|
||||||
foreach(XmlNode node in nodes){
|
foreach(XmlNode node in nodes) {
|
||||||
switch(node.Name.ToLowerInvariant()) {
|
switch(node.Name.ToLowerInvariant()) {
|
||||||
case "tbody":
|
case "tbody":
|
||||||
result += processTableImage(node.ChildNodes);
|
result += processTableImage(node.ChildNodes);
|
||||||
|
@ -160,6 +152,7 @@ namespace ScrewTurn.Wiki {
|
||||||
if(attName.Name.ToString() == "title")
|
if(attName.Name.ToString() == "title")
|
||||||
title += attName.Value.ToString();
|
title += attName.Value.ToString();
|
||||||
}
|
}
|
||||||
|
link = processLink(link);
|
||||||
}
|
}
|
||||||
result += processTableImage(node.ChildNodes) + "|" + target + link;
|
result += processTableImage(node.ChildNodes) + "|" + target + link;
|
||||||
}
|
}
|
||||||
|
@ -168,27 +161,18 @@ namespace ScrewTurn.Wiki {
|
||||||
}
|
}
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
/// <summary>
|
|
||||||
/// Processes the code.
|
|
||||||
/// </summary>
|
|
||||||
/// <param name="text">The text.</param>
|
|
||||||
/// <returns></returns>
|
|
||||||
private static string processCode(string text) {
|
private static string processCode(string text) {
|
||||||
string result = "";
|
string result = "";
|
||||||
result = text;
|
result = text;
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// Processes the table.
|
|
||||||
/// </summary>
|
|
||||||
/// <param name="nodes">The nodes.</param>
|
|
||||||
/// <returns></returns>
|
|
||||||
private static string processTable(XmlNodeList nodes) {
|
private static string processTable(XmlNodeList nodes) {
|
||||||
string result = "";
|
string result = "";
|
||||||
|
|
||||||
foreach(XmlNode node in nodes) {
|
foreach(XmlNode node in nodes) {
|
||||||
switch (node.Name.ToLowerInvariant()){
|
switch(node.Name.ToLowerInvariant()) {
|
||||||
case "thead":
|
case "thead":
|
||||||
result += processTable(node.ChildNodes);
|
result += processTable(node.ChildNodes);
|
||||||
break;
|
break;
|
||||||
|
@ -196,7 +180,7 @@ namespace ScrewTurn.Wiki {
|
||||||
result += "! " + processChild(node.ChildNodes) + "\r\n";
|
result += "! " + processChild(node.ChildNodes) + "\r\n";
|
||||||
break;
|
break;
|
||||||
case "caption":
|
case "caption":
|
||||||
result += "|+ "+ processChild(node.ChildNodes) + "\r\n";
|
result += "|+ " + processChild(node.ChildNodes) + "\r\n";
|
||||||
break;
|
break;
|
||||||
case "tbody":
|
case "tbody":
|
||||||
result += processTable(node.ChildNodes) + "";
|
result += processTable(node.ChildNodes) + "";
|
||||||
|
@ -207,7 +191,6 @@ namespace ScrewTurn.Wiki {
|
||||||
if(attr.Name.ToLowerInvariant() == "style") style += "style=\"" + attr.Value.ToString() + "\" ";
|
if(attr.Name.ToLowerInvariant() == "style") style += "style=\"" + attr.Value.ToString() + "\" ";
|
||||||
|
|
||||||
result += "|- " + style + "\r\n" + processTable(node.ChildNodes);
|
result += "|- " + style + "\r\n" + processTable(node.ChildNodes);
|
||||||
//else result += processTable(node.ChildNodes);
|
|
||||||
break;
|
break;
|
||||||
case "td":
|
case "td":
|
||||||
string styleTd = "";
|
string styleTd = "";
|
||||||
|
@ -223,11 +206,7 @@ namespace ScrewTurn.Wiki {
|
||||||
}
|
}
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
/// <summary>
|
|
||||||
/// Processes the child.
|
|
||||||
/// </summary>
|
|
||||||
/// <param name="nodes">A XmlNodeList .</param>
|
|
||||||
/// <returns>The corrispondent WikiMarkup Text</returns>
|
|
||||||
private static string processChild(XmlNodeList nodes) {
|
private static string processChild(XmlNodeList nodes) {
|
||||||
string result = "";
|
string result = "";
|
||||||
foreach(XmlNode node in nodes) {
|
foreach(XmlNode node in nodes) {
|
||||||
|
@ -255,23 +234,19 @@ namespace ScrewTurn.Wiki {
|
||||||
case "u":
|
case "u":
|
||||||
result += ("__" + processChild(node.ChildNodes) + "__");
|
result += ("__" + processChild(node.ChildNodes) + "__");
|
||||||
break;
|
break;
|
||||||
//break;
|
|
||||||
case "h1":
|
case "h1":
|
||||||
if(node.HasChildNodes) {
|
if(node.HasChildNodes) {
|
||||||
if (node.FirstChild.NodeType == XmlNodeType.Whitespace) result += ("----\r\n" + processChild(node.ChildNodes));
|
if(node.FirstChild.NodeType == XmlNodeType.Whitespace) result += ("----\r\n" + processChild(node.ChildNodes));
|
||||||
else result += ("==" + processChild(node.ChildNodes) + "==\r\n");
|
else result += ("==" + processChild(node.ChildNodes) + "==\r\n");
|
||||||
}
|
}
|
||||||
else result += ("----\r\n");
|
else result += ("----\r\n");
|
||||||
break;
|
break;
|
||||||
//break;
|
|
||||||
case "h2":
|
case "h2":
|
||||||
result += ("===" + processChild(node.ChildNodes) + "===\r\n");
|
result += ("===" + processChild(node.ChildNodes) + "===\r\n");
|
||||||
break;
|
break;
|
||||||
//break;
|
|
||||||
case "h3":
|
case "h3":
|
||||||
result += ("====" + processChild(node.ChildNodes) + "====\r\n");
|
result += ("====" + processChild(node.ChildNodes) + "====\r\n");
|
||||||
break;
|
break;
|
||||||
//break;
|
|
||||||
case "h4":
|
case "h4":
|
||||||
result += ("=====" + processChild(node.ChildNodes) + "=====\r\n");
|
result += ("=====" + processChild(node.ChildNodes) + "=====\r\n");
|
||||||
break;
|
break;
|
||||||
|
@ -324,7 +299,7 @@ namespace ScrewTurn.Wiki {
|
||||||
else result += processList(node.ChildNodes, "#");
|
else result += processList(node.ChildNodes, "#");
|
||||||
break;
|
break;
|
||||||
case "ul":
|
case "ul":
|
||||||
if (node.ParentNode != null) {
|
if(node.ParentNode != null) {
|
||||||
if(node.ParentNode.Name.ToLowerInvariant() != "td") result += processList(node.ChildNodes, "*");
|
if(node.ParentNode.Name.ToLowerInvariant() != "td") result += processList(node.ChildNodes, "*");
|
||||||
else result += node.OuterXml.ToString();
|
else result += node.OuterXml.ToString();
|
||||||
}
|
}
|
||||||
|
@ -398,6 +373,7 @@ namespace ScrewTurn.Wiki {
|
||||||
string title = "";
|
string title = "";
|
||||||
bool isInternalLink = false;
|
bool isInternalLink = false;
|
||||||
bool childImg = false;
|
bool childImg = false;
|
||||||
|
bool isUnknowLink = false;
|
||||||
if(node.FirstChild != null) {
|
if(node.FirstChild != null) {
|
||||||
if(node.FirstChild.Name.ToLowerInvariant() == "img")
|
if(node.FirstChild.Name.ToLowerInvariant() == "img")
|
||||||
childImg = true;
|
childImg = true;
|
||||||
|
@ -416,19 +392,25 @@ namespace ScrewTurn.Wiki {
|
||||||
title += attName.Value.ToString();
|
title += attName.Value.ToString();
|
||||||
if(attName.Value.ToString() == "SystemLink".ToLowerInvariant())
|
if(attName.Value.ToString() == "SystemLink".ToLowerInvariant())
|
||||||
isInternalLink = true;
|
isInternalLink = true;
|
||||||
|
if(attName.Value.ToString().ToLowerInvariant() == "unknownlink")
|
||||||
|
isUnknowLink = true;
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
anchor = true;
|
anchor = true;
|
||||||
result += "[anchor|#" + attName.Value.ToString().ToLowerInvariant() + "]" + processChild(node.ChildNodes);
|
result += "[anchor|#" + attName.Value.ToString().ToLowerInvariant() + "]" + processChild(node.ChildNodes);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
if (isInternalLink){
|
if(isInternalLink) {
|
||||||
string[] splittedLink = link.Split('=');
|
string[] splittedLink = link.Split('=');
|
||||||
link = "c:" + splittedLink[1];
|
link = "c:" + splittedLink[1];
|
||||||
}
|
}
|
||||||
|
else
|
||||||
|
link = processLink(link);
|
||||||
|
|
||||||
if((!anchor) && (!isTable) && (!childImg))
|
if((!anchor) && (!isTable) && (!childImg) && (!isUnknowLink))
|
||||||
if(title != link)
|
if(title != link)
|
||||||
result += "[" + target + link + "|" + processChild(node.ChildNodes) + "]";
|
result += "[" + target + link + "|" + processChild(node.ChildNodes) + "]";
|
||||||
else
|
else
|
||||||
|
@ -450,13 +432,7 @@ namespace ScrewTurn.Wiki {
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// Froms the HTML.
|
|
||||||
/// </summary>
|
|
||||||
/// <param name="reader">The reader.</param>
|
|
||||||
/// <returns>valid XML Document</returns>
|
|
||||||
private static XmlDocument FromHTML(TextReader reader) {
|
private static XmlDocument FromHTML(TextReader reader) {
|
||||||
|
|
||||||
// setup SgmlReader
|
// setup SgmlReader
|
||||||
Sgml.SgmlReader sgmlReader = new Sgml.SgmlReader();
|
Sgml.SgmlReader sgmlReader = new Sgml.SgmlReader();
|
||||||
sgmlReader.DocType = "HTML";
|
sgmlReader.DocType = "HTML";
|
||||||
|
@ -479,10 +455,10 @@ namespace ScrewTurn.Wiki {
|
||||||
/// <param name="html">The input HTML.</param>
|
/// <param name="html">The input HTML.</param>
|
||||||
/// <returns>The corresponding WikiMarkup.</returns>
|
/// <returns>The corresponding WikiMarkup.</returns>
|
||||||
public static string ReverseFormat(string html) {
|
public static string ReverseFormat(string html) {
|
||||||
|
|
||||||
StringReader strReader = new StringReader(html);
|
StringReader strReader = new StringReader(html);
|
||||||
XmlDocument x = FromHTML((TextReader)strReader);
|
XmlDocument x = FromHTML((TextReader)strReader);
|
||||||
return processChild(x.FirstChild.ChildNodes);
|
if(x != null) return processChild(x.FirstChild.ChildNodes);
|
||||||
|
else return "";
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
Loading…
Add table
Add a link
Reference in a new issue