Handle embedded text in xyplot for CPLS
This commit is contained in:
parent
732fadab95
commit
85d0e02a4f
@ -656,9 +656,21 @@ namespace VEPROMS.CSLA.Library
|
|||||||
LBRange myRange = selxy.Paragraphs.First.Range;
|
LBRange myRange = selxy.Paragraphs.First.Range;
|
||||||
float yTop = (float)myRange.get_Information(LBWdInformation.wdVerticalPositionRelativeToPage);
|
float yTop = (float)myRange.get_Information(LBWdInformation.wdVerticalPositionRelativeToPage);
|
||||||
float yTop1 = (float)myRange.get_Information(LBWdInformation.wdVerticalPositionRelativeToTextBoundary);
|
float yTop1 = (float)myRange.get_Information(LBWdInformation.wdVerticalPositionRelativeToTextBoundary);
|
||||||
|
|
||||||
selxy.Text = "";
|
// some data had regular text embedded in the xyplot definition. If so, the plain text must
|
||||||
if (cnt>0)for (int icnt = 0; icnt < cnt; icnt++) selxy.Text = selxy.Text + "\r";
|
// be left in the file. Otherwise, we can replace with empty text.
|
||||||
|
string resXyPlot = xyplot;
|
||||||
|
string txt = FindEmbeddedText(selxy.Text, ref resXyPlot);
|
||||||
|
if (txt != null)
|
||||||
|
{
|
||||||
|
selxy.Text = txt;
|
||||||
|
xyplot = resXyPlot.Replace(">\r>", ">>\r");
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
selxy.Text = "";
|
||||||
|
if (cnt > 0) for (int icnt = 0; icnt < cnt; icnt++) selxy.Text = selxy.Text + "\r";
|
||||||
|
}
|
||||||
|
|
||||||
pngFile = VlnSettings.TemporaryFolder + @"\XYPlot" + filecount.ToString() + @".png"; //@"C:\Temp\XYPlot1.png";
|
pngFile = VlnSettings.TemporaryFolder + @"\XYPlot" + filecount.ToString() + @".png"; //@"C:\Temp\XYPlot1.png";
|
||||||
filecount++;
|
filecount++;
|
||||||
@ -811,6 +823,79 @@ namespace VEPROMS.CSLA.Library
|
|||||||
return fileName;
|
return fileName;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
private static string FindEmbeddedText(string p, ref string resXyPlot)
|
||||||
|
{
|
||||||
|
StringBuilder sb = new StringBuilder(); // contains embedded text
|
||||||
|
StringBuilder xy = new StringBuilder(); // contains xyplot without embedded text.
|
||||||
|
string origXy = p;
|
||||||
|
bool findEmbeddedText = false;
|
||||||
|
// get past opening command:
|
||||||
|
int indxCmd = p.IndexOf("<");
|
||||||
|
indxCmd = p.IndexOf("<", indxCmd + 1);
|
||||||
|
xy.Append(p.Substring(0, indxCmd));
|
||||||
|
// While there are xyplot commands, check for beginning/ending.
|
||||||
|
// Any text not in a command, save.
|
||||||
|
while (indxCmd > 0)
|
||||||
|
{
|
||||||
|
// find end of command. Look for another beginning of command, newline,
|
||||||
|
// regular text, or end of graph and handle each of these cases.
|
||||||
|
int indxClose = GetNonStringCmdClose(p, indxCmd + 1); // p.IndexOf(">", indxCmd + 1);
|
||||||
|
int nxtIndxCmd = p.IndexOf("<", indxCmd + 1);
|
||||||
|
xy.Append(p.Substring(indxCmd, indxClose - indxCmd+1));
|
||||||
|
xy.Append("\r"); // the xyplot code assumes a return exists.
|
||||||
|
// get substrings between end index & start of next and if any
|
||||||
|
// non white space text, add it to return string and flag that we have
|
||||||
|
// embedded text. If there's a newline and just other white space put a
|
||||||
|
// newline in return string.
|
||||||
|
if (nxtIndxCmd > 0)
|
||||||
|
{
|
||||||
|
string mydebug = p.Substring(indxClose + 1);
|
||||||
|
for (int i = indxClose + 1; i < nxtIndxCmd; i++)
|
||||||
|
{
|
||||||
|
if (!System.Char.IsWhiteSpace(p[i]))
|
||||||
|
{
|
||||||
|
sb.Append(p[i]);
|
||||||
|
findEmbeddedText = true;
|
||||||
|
}
|
||||||
|
if (p[i] == '\r' || p[i] == ' ') sb.Append(p[i]);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
indxCmd = nxtIndxCmd;
|
||||||
|
}
|
||||||
|
xy.Append(">");
|
||||||
|
if (findEmbeddedText)
|
||||||
|
{
|
||||||
|
resXyPlot = xy.ToString();
|
||||||
|
return sb.ToString();
|
||||||
|
}
|
||||||
|
resXyPlot = origXy;
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
private static int GetNonStringCmdClose(string p, int indxCmd)
|
||||||
|
{
|
||||||
|
int indxClose = p.IndexOf(">", indxCmd);
|
||||||
|
if (indxClose >= 0)
|
||||||
|
{
|
||||||
|
// if there are any quotes between the open of command and close,
|
||||||
|
// need to see if the close command is quoted.
|
||||||
|
if (p.IndexOf('"', indxCmd, indxClose - indxCmd) > -1)
|
||||||
|
{
|
||||||
|
// see how many quotes between open/close command, if
|
||||||
|
// an odd number, the close command char '>' is in quotes.
|
||||||
|
int countQuotes = 0;
|
||||||
|
for (int i = indxCmd; i < indxClose; i++) if (p[i] == '"') countQuotes++;
|
||||||
|
if ((countQuotes % 2) != 0)
|
||||||
|
{
|
||||||
|
// find quote after close, and then get next close.
|
||||||
|
int closeQuote = p.IndexOf('"', indxClose);
|
||||||
|
if (closeQuote < 0) return -1; // this is error, so return end not found.
|
||||||
|
return p.IndexOf(">", closeQuote + 1);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return indxClose;
|
||||||
|
}
|
||||||
public static void AddPrecedingText(LBSelection sel, string val)
|
public static void AddPrecedingText(LBSelection sel, string val)
|
||||||
{
|
{
|
||||||
if (val.IndexOf("_") == -1) // Is some of the text underlined?
|
if (val.IndexOf("_") == -1) // Is some of the text underlined?
|
||||||
|
Loading…
x
Reference in New Issue
Block a user