From 6fb88b406b44a5d8958b1e0c2f3db2d840982e7c Mon Sep 17 00:00:00 2001 From: Kathy Date: Thu, 22 Jul 2010 14:19:45 +0000 Subject: [PATCH] --- .../Config/DocumentConfig.cs | 27 ++ .../Config/ROFSTLookup.cs | 26 ++ .../Extension/DocumentExt.cs | 330 ++++++++++++++++++ .../VEPROMS.CSLA.Library/Extension/ItemExt.cs | 3 +- PROMS/Volian.Controls.Library/DisplayRO.cs | 180 +--------- 5 files changed, 388 insertions(+), 178 deletions(-) diff --git a/PROMS/VEPROMS.CSLA.Library/Config/DocumentConfig.cs b/PROMS/VEPROMS.CSLA.Library/Config/DocumentConfig.cs index 5c9a371a..5413a10f 100644 --- a/PROMS/VEPROMS.CSLA.Library/Config/DocumentConfig.cs +++ b/PROMS/VEPROMS.CSLA.Library/Config/DocumentConfig.cs @@ -2,6 +2,7 @@ using System; using System.Collections.Generic; using System.Text; using System.ComponentModel; +using System.Drawing; namespace VEPROMS.CSLA.Library { @@ -82,6 +83,32 @@ namespace VEPROMS.CSLA.Library OnPropertyChanged("Printing_Length"); } } + [Category("Printing")] + [DisplayName("Color")] + [Description("Color of Document Text")] + public Color Printing_Color + { + get + { + string sColor = _Xp["Printing", "Color"]; + if (sColor == string.Empty) sColor = "Transparent"; + if (sColor[0] == '[') + { + string[] parts = sColor.Substring(1, sColor.Length - 2).Split(",".ToCharArray()); + return Color.FromArgb(Int32.Parse(parts[0]), Int32.Parse(parts[1]), Int32.Parse(parts[2])); + } + else return Color.FromName(sColor); + } + set + { + if (value.IsNamedColor) _Xp["Printing", "Color"] = value.Name; + else + { + _Xp["Printing", "Color"] = string.Format("[{0},{1},{2}]", value.R, value.G, value.B); + } + OnPropertyChanged("Printing_Color"); + } + } #endregion #region ToString public override string ToString() diff --git a/PROMS/VEPROMS.CSLA.Library/Config/ROFSTLookup.cs b/PROMS/VEPROMS.CSLA.Library/Config/ROFSTLookup.cs index 0540dbf1..746dae77 100644 --- a/PROMS/VEPROMS.CSLA.Library/Config/ROFSTLookup.cs +++ b/PROMS/VEPROMS.CSLA.Library/Config/ROFSTLookup.cs @@ -3,6 +3,7 @@ using System.Collections.Generic; using System.Collections.Specialized; using System.Text; using System.ComponentModel; +using System.Text.RegularExpressions; namespace VEPROMS.CSLA.Library { @@ -774,5 +775,30 @@ namespace VEPROMS.CSLA.Library } } #endregion + #region FortranFormat + public static string ConvertFortranFormatToScienctificNotation(string str) + { + // Convert E style numbers to RTF with \super and \nosupersub + string retval = Regex.Replace(str, "([+-]?)([0-9]+)[.]([0-9]*?)0*E([+-]?[0-9]+)", new MatchEvaluator(FixFortranNumber)); + //retval = Regex.Replace(retval, "[#](.*?)[#]", "\\super $1\\nosupersub ");// DOS Superscript + //retval = Regex.Replace(retval, "[~](.*?)[~]", "\\sub $1\\nosupersub ");// DOS Subscript + retval = Regex.Replace(retval, "[#](.*?)[#]", "\\up3 $1\\up0 ");// DOS Superscript + retval = Regex.Replace(retval, "[~](.*?)[~]", "\\dn3 $1\\dn0 ");// DOS Subscript + return retval; + } + private static string FixFortranNumber(Match match) + { + StringBuilder sb = new StringBuilder(match.Groups[1].Value); + if (match.Groups[3].Length == 0) // Nothing to the right of the decimal + if (match.Groups[2].Value != "1") // Other than "1", multiply it times 10 raised to a power + sb.Append(match.Groups[2].Value + "x10"); + else // The number is simply 1 so it can be ignored and 10 can be raised to a power + sb.Append("10"); + else // A number with a decimal point + sb.Append(match.Groups[2].Value + "." + match.Groups[3].Value + "x10"); + // Add the exponent as superscript + return sb.ToString() + "\\up3 " + match.Groups[4].Value + "\\up0 "; + } + #endregion } } diff --git a/PROMS/VEPROMS.CSLA.Library/Extension/DocumentExt.cs b/PROMS/VEPROMS.CSLA.Library/Extension/DocumentExt.cs index 4d542e19..c09847ba 100644 --- a/PROMS/VEPROMS.CSLA.Library/Extension/DocumentExt.cs +++ b/PROMS/VEPROMS.CSLA.Library/Extension/DocumentExt.cs @@ -6,6 +6,12 @@ using Csla; using Csla.Data; using System.Data; using System.Data.SqlClient; +//----------------- +using System.Drawing; +using System.Text.RegularExpressions; +using LBWordLibrary; +using System.Drawing.Imaging; + namespace VEPROMS.CSLA.Library { @@ -98,6 +104,10 @@ namespace VEPROMS.CSLA.Library private DocumentConfig _DocumentConfig; public DocumentConfig DocumentConfig { get { return (_DocumentConfig != null ? _DocumentConfig : _DocumentConfig = new DocumentConfig(this)); } } + public void RefreshConfig() + { + _DocumentConfig = null; + } #endregion } @@ -296,9 +306,17 @@ namespace VEPROMS.CSLA.Library //doc.UpdateDocAscii(_MyFile.FullName); DocumentConfig cfg = new DocumentConfig(doc); cfg.Printing_Length = length; + cfg.Printing_Color = MSWordToPDF.OverrideColor; doc.Config = cfg.ToString(); doc.UserID = Environment.UserName; doc.DTS = _MyFile.LastWriteTime; + string pdfTmp = MSWordToPDF.ToPDFReplaceROs(_MyDocument); + FileInfo pdfFile = new FileInfo(pdfTmp); + fs = pdfFile.Open(FileMode.Open, FileAccess.Read, FileShare.ReadWrite); + buf = new byte[pdfFile.Length]; + fs.Read(buf, 0, buf.Length); + fs.Close(); + doc.DocPdf = buf; doc.Save(); } #endregion @@ -329,4 +347,316 @@ namespace VEPROMS.CSLA.Library } #endregion } + public static class MSWordToPDF + { + private static LBApplicationClass _MyApp = null; + public static LBApplicationClass MyApp + { + get + { + if (_MyApp == null) + _MyApp = new LBApplicationClass(); + return _MyApp; + } + } + private static System.Drawing.Color _OverrideColor = System.Drawing.Color.Transparent; + public static System.Drawing.Color OverrideColor + { + get { return MSWordToPDF._OverrideColor; } + set { MSWordToPDF._OverrideColor = value; } + } + private static System.Windows.Forms.Form _FormForPlotGraphics=null; + public static System.Windows.Forms.Form FormForPlotGraphics + { + get { return MSWordToPDF._FormForPlotGraphics; } + set { MSWordToPDF._FormForPlotGraphics = value; } + } + public static string GetDocPdf(SectionInfo sect, Color overrideColor) + { + DocumentInfo mydoc = sect.MyContent.MyEntry.MyDocument; + UpdateDocPdf(mydoc, overrideColor); + string fileName = GetFileName(sect); + FileInfo fi = new FileInfo(fileName); + FileStream fs = fi.Create(); + fs.Write(mydoc.DocPdf, 0, mydoc.DocPdf.Length); + fs.Close(); + return fileName; + } + + public static void UpdateDocPdf(DocumentInfo mydoc, Color overrideColor) + { + if (mydoc.DocPdf == null || overrideColor != mydoc.DocumentConfig.Printing_Color) + { + MSWordToPDF.OverrideColor = overrideColor; + SetDocPdf(mydoc); + } + } + public static void SetDocPdf(DocumentInfo docInfo) + { + string pdfTmp = MSWordToPDF.ToPDFReplaceROs(docInfo); + FileInfo pdfFile = new FileInfo(pdfTmp); + FileStream fs = pdfFile.Open(FileMode.Open, FileAccess.Read, FileShare.ReadWrite); + Byte[] buf = new byte[pdfFile.Length]; + fs.Read(buf, 0, buf.Length); + fs.Close(); + using (Document doc = docInfo.Get()) + { + DocumentConfig dc = new DocumentConfig(doc); + dc.Printing_Color = MSWordToPDF.OverrideColor; + doc.Config = dc.ToString(); + doc.DocPdf = buf; + doc.Save(); + } + docInfo.RefreshConfig(); + } + public static string ToPDFReplaceROs(DocumentInfo doc) + { + ItemInfo sect = doc.DocumentEntries[0].MyContent.ContentItems[0]; + return ToPDFReplaceROs(sect, false); + } + public static string ToPDFReplaceROs(ItemInfo sect, bool openPdf) //, System.Drawing.Color overrideColor, System.Windows.Forms.Form myForm) + { + string fileName = GetFileName(sect); + // TODO: do we want to cache the word pdfs + //if (System.IO.File.Exists(@"C:\Temp\" + fileName + ".pdf")) + // return @"C:\Temp\" + fileName + ".pdf"; + //int docStyleIndex = ((int)sect.MyContent.Type) % 10000; + //DocStyle myDocStyle = sect.ActiveFormat.PlantFormat.DocStyles.DocStyleList[docStyleIndex]; + DocStyle myDocStyle = sect.MyDocStyle; + //PageStyle myPageStyle = myDocStyle.pagestyle; + ProcedureInfo proc = sect.MyProcedure; + DocVersionInfo dvi = proc.ActiveParent as DocVersionInfo; + ROFstInfo rofst = dvi.DocVersionAssociations[0].MyROFst; + ROFSTLookup lookup = rofst.ROFSTLookup; + string igPrefix = dvi.DocVersionConfig.RODefaults_graphicsprefix; + string spPrefix = dvi.DocVersionConfig.RODefaults_setpointprefix; + // string AccPageID = string.Format("<{0}-{1}>", accPrefix, roch.appid); + using (DSOFile myFile = new DSOFile(sect.MyContent.MyEntry.MyDocument)) + { + LBDocumentClass myDoc = MyApp.Documents.Open(myFile.FullName, false); + float newTop = (float)myDocStyle.Layout.TopRow; + float newLeft = (float)myDocStyle.Layout.LeftMargin; + float newLength = (float)myDocStyle.Layout.PageLength; + float newWidth = (float)myDocStyle.Layout.PageWidth; + float oldTop = myDoc.PageSetup.TopMargin; + float oldLeft = myDoc.PageSetup.LeftMargin; + float oldBottom = myDoc.PageSetup.BottomMargin; + float oldRight = myDoc.PageSetup.RightMargin; + float oldHeight = myDoc.PageSetup.PageHeight; + float oldWidth = myDoc.PageSetup.PageWidth; + float newRight = oldWidth - (newWidth + newLeft); + if (newRight < 0) newRight = 0; + float newBottom = oldBottom - newTop; + //Console.WriteLine("{0},{1},{2},{3},{4},{5},{6},{7},{8},{9}", newTop, newLeft, newLength, newWidth, oldTop, oldLeft, oldBottom, oldRight,oldHeight,oldWidth); + myDoc.PageSetup.BottomMargin = 0;// 11 * 72 - (newTop + newLength); + myDoc.PageSetup.RightMargin = newRight; + myDoc.PageSetup.LeftMargin = newLeft; + myDoc.PageSetup.TopMargin = newTop; + LBSelection sel = FindRO(); + while (sel != null) + { + string val = lookup.GetROValueByAccPagID(sel.Text, spPrefix, igPrefix); + int? type = lookup.GetROTypeByAccPagID(sel.Text, spPrefix, igPrefix); + if ((int)type == 8) // Image + { + //Console.WriteLine("Image: {0} - {1}", sect.MyContent.Number, sect.MyContent.Text); + bool imageROTokenReplaced = false; + string[] vals = val.Split("\n".ToCharArray()); + ROImageInfo roImage = ROImageInfo.GetByROFstID_FileName(rofst.ROFstID, vals[0]); + if (roImage != null) + { + ROImageFile roImageFile = new ROImageFile(roImage); + float width = 72 * Int32.Parse(vals[3], System.Globalization.NumberStyles.AllowHexSpecifier) / 12.0F; + int lines = Int32.Parse(vals[2], System.Globalization.NumberStyles.AllowHexSpecifier); + float height = 72 * lines / 6.0F; + //sel.MoveEnd(LBWdUnits.wdLine, lines);// The number of lines depends on the third parameter + //sel.EndKey(LBWdUnits.wdLine, true); + //sel.MoveEnd(LBWdUnits.wdCharacter, -1); + //Console.WriteLine("Lines = {0}", lines); + sel.Text = ""; + // TODO: Need to create a temporary file for printing. + // TODO: Need a way to eliminate the temporary file when done printing. + // LBInlineShape shape = sel.InlineShapes.AddPicture(@"C:\Plant\HLP\VEHLP\ro\No1Seal.bmp"); + float x = (float)sel.get_Information(LBWdInformation.wdHorizontalPositionRelativeToPage); + float y = (float)sel.get_Information(LBWdInformation.wdVerticalPositionRelativeToPage); + //LBInlineShape shape = sel.InlineShapes.AddPicture(pngFile); + LBRange myRange = sel.Paragraphs.First.Range; + float yTop = (float)myRange.get_Information(LBWdInformation.wdVerticalPositionRelativeToPage); + LBShape shape = myDoc.Shapes.AddPicture(roImageFile.MyFile.FullName, x, y - yTop, sel.Range); + // LBInlineShape shape = sel.InlineShapes.AddPicture(roImageFile.MyFile.FullName); + //Console.WriteLine("{0} Shape Width {1} Height {2}", val.Replace("\n", "','"), shape.Width, shape.Height); + shape.Width = width; + shape.Height = height; + //Console.WriteLine("{0} Shape Width {1} Height {2}", val.Replace("\n", "','"), shape.Width, shape.Height); + imageROTokenReplaced = true; + } + if (!imageROTokenReplaced) + sel.Text = string.Format("Bad Image Link (Missing Image File:{0})", vals[0]); + } + else if ((int)type == 4) // X-Y Plot + { + val = val.Replace("`", "\xB0"); + //AddInfo("\tRO Found {0} = '{1}'", sel.Text, val); + sel.Text = ""; + //float width = 72 * Int32.Parse(vals[3], System.Globalization.NumberStyles.AllowHexSpecifier) / 12.0F; + //float height = 72 * lines / 6.0F; + string pngFile = @"C:\Temp\XYPlot1.png"; + RectangleF plotRect = CreatePlot(pngFile, val, 600F, FormForPlotGraphics); + //LBShape shape = myDoc.Shapes.AddPicture(@"C:\Temp\XYPlot.png", 0, 0, sel.Range); + float x = (float)sel.get_Information(LBWdInformation.wdHorizontalPositionRelativeToPage); + float y = (float)sel.get_Information(LBWdInformation.wdVerticalPositionRelativeToPage); + //LBInlineShape shape = sel.InlineShapes.AddPicture(pngFile); + LBRange myRange = sel.Paragraphs.First.Range; + float yTop = (float)myRange.get_Information(LBWdInformation.wdVerticalPositionRelativeToPage); + float xAdjust = -29.3F; // TODO: Check this value + float yAdjust = 9.1F; // TODO: Check this value + LBShape shape = myDoc.Shapes.AddPicture(pngFile, x + xAdjust + plotRect.X, yAdjust + y - yTop + plotRect.Y, sel.Range); + //Console.WriteLine(",{0},{1},{2},{3}", x, y - yTop, xAdjust,yAdjust); + shape.LockAspectRatio = LBMsoTriState.msoTrue; + //shape.Width = .89F * shape.Width; + //shape.Width = float.Parse(tbAdjust.Text) * shape.Width; + shape.Width = plotRect.Width; + //shape.Height = .89F * shape.Height; + sel.WholeStory(); + // TODO: Do we want to color code ROs + //sel.Range.Font.Color = LBWdColor.wdColorRed; + //Console.WriteLine("{0} Shape Width {1} Height {2}", val.Replace("\n", "','"), shape.Width, shape.Height); + //shape.Width = width; + //shape.Height = height; + //Console.WriteLine("{0} Shape Width {1} Height {2}", val.Replace("\n", "','"), shape.Width, shape.Height); + //imageROTokenReplaced = true; + } + else + { + val = val.Replace("`", "\xB0"); + //AddInfo("\tRO Found {0} = '{1}'", sel.Text, val); + InsertROValue(sel, val, sect.ActiveFormat.PlantFormat.FormatData.ROData.UpRoIfPrevUpper); + } + sel = FindRO(); + } + sel = MyApp.Selection; + sel.WholeStory(); + //sel.Range.Font.Color = (LBWdColor)WordColor(PrintOverride.OverrideTextColor(System.Drawing.Color.Black)); + sel.Range.Font.Color = (LBWdColor)WordColor(OverrideColor == System.Drawing.Color.Transparent ? System.Drawing.Color.Black : OverrideColor); + sel.ParagraphFormat.LineSpacingRule = LBWdLineSpacing.wdLineSpaceExactly; + sel.ParagraphFormat.LineSpacing = 12; + fileName = CreatePDF(fileName, openPdf); + MyApp.ActiveDocument.Close(); + MyApp.Quit(); + _MyApp = null; + return fileName; + } + } + private static int WordColor(System.Drawing.Color color) + { + System.Drawing.Color c1 = System.Drawing.Color.FromArgb(0, color.B, color.G, color.R); + return c1.ToArgb(); + } + private static string GetFileName(ItemInfo sect) + { + string fileName = "Doc " + sect.MyContent.MyEntry.DocID.ToString(); // +" " + (sect.DisplayNumber == "" ? sect.DisplayText : sect.DisplayNumber); + return fileName; + } + private static RectangleF CreatePlot(string pngFile, string xyPlot, float resolution, System.Windows.Forms.Form myForm) + { + RectangleF retval = new RectangleF(0, 0, 0, 0); + //Form frm = Application.OpenForms[0]; + System.Windows.Forms.Form frm = myForm; + Graphics grfx = frm.CreateGraphics(); + string emfFile = pngFile.Replace(".png", ".emf"); + Metafile mf = new Metafile(emfFile, grfx.GetHdc()); + grfx.Dispose(); + grfx = Graphics.FromImage(mf); + float dpi = grfx.DpiX; + //grfx.ScaleTransform(resolution / grfx.DpiX, (resolution +1F) / grfx.DpiY); + grfx.ScaleTransform(resolution / grfx.DpiX, resolution / grfx.DpiY); + grfx.InterpolationMode = System.Drawing.Drawing2D.InterpolationMode.NearestNeighbor; + grfx.SmoothingMode = System.Drawing.Drawing2D.SmoothingMode.HighQuality; + grfx.TextRenderingHint = System.Drawing.Text.TextRenderingHint.AntiAlias; + grfx.Clear(System.Drawing.Color.Transparent); + XYPlots.XYPlot.BlackColor = System.Drawing.Color.Red; + XYPlots.XYPlot myPlot = new XYPlots.XYPlot(xyPlot); + myPlot.SetMargins(0, 0, 0, 0); + myPlot.Process(new VG.VGOut_Graphics(grfx)); + grfx.Dispose(); + GraphicsUnit gu = new GraphicsUnit(); + retval = mf.GetBounds(ref gu); + retval.Width *= dpi / resolution; + retval.Height *= dpi / resolution; + retval.X *= dpi / resolution; + retval.Y *= dpi / resolution; + //retval.X = myPlot.Width-retval.Width; + //AddInfo("{0},{1},{2},{3},{4},{5}", myPlot.Width, myPlot.Height, retval.Width, retval.Height,retval.X,retval.Y); + //Console.Write("{0},{1},{2},{3}", myPlot.Width, myPlot.Height, retval.Width, retval.Height); + mf.Save(pngFile, ImageFormat.Png); + //Console.WriteLine("'pngfile','{0}'", pngFile); + mf.Dispose(); + FileInfo myFile = new System.IO.FileInfo(emfFile); + myFile.Delete(); + return retval; + } + private static void InsertROValue(LBSelection sel, string roValue, bool upRoIfPrevUpper) + { + if (roValue == null) + { + sel.Text = "RO Not Found"; + sel.Font.Color = LBWdColor.wdColorRed; + } + else + { + if (upRoIfPrevUpper && sel.LastWasUpper) roValue = roValue.ToUpper(); + // Convert fortran formatted numbers to scientific notation. + + //string tmp = DisplayRO.ConvertFortranFormatToScienctificNotation(roValue); + string tmp = ROFSTLookup.ConvertFortranFormatToScienctificNotation(roValue); + // Look for superscript or subscript and insert the appropriate commands + //Match roMatch = Regex.Match(tmp, @"(.*?)\\(super|sub) (.*?)\\nosupersub "); + Match roMatch = Regex.Match(tmp, @"(.*?)\\(up3|dn3) (.*?)\\(up0|dn0) "); + if (roMatch.Groups.Count == 4)// Superscript or subscript found + { + sel.Font.Color = LBWdColor.wdColorRed; + while (roMatch.Groups.Count == 4) + { + sel.TypeText(roMatch.Groups[1].Value); // output the text preceeding the super or sub command + sel.Font.Position = roMatch.Groups[2].Value == "up3" ? 2 : -2; // Shift the vertical position for super or sub + //sel.Font.Position = roMatch.Groups[2].Value == "super" ? 2 : -2; // Shift the vertical position for super or sub + sel.TypeText(roMatch.Groups[3].Value); // output the superscript or subscript + sel.Font.Position = 0; // restore the vertical position + tmp = tmp.Substring(roMatch.Length); // remove the processed text + //roMatch = Regex.Match(tmp, @"(.*?)\\(super|sub) (.*?)\\nosupersub "); // check to see if the text contain another super or sub + roMatch = Regex.Match(tmp, @"(.*?)\\(up3|dn3) (.*?)\\(up0|dn0) "); // check to see if the text contain another super or sub + } + if (tmp != "")// Add any remaining text + sel.TypeText(tmp); + sel.Font.Color = LBWdColor.wdColorAutomatic; + } + else // if no superscripts or subscripts just output the text + { + sel.Text = roValue; + sel.Font.Color = LBWdColor.wdColorRed; + } + } + } + private static LBSelection FindRO() + { + LBSelection sel = MyApp.Selection; + LBFind find = sel.Find; + find.ClearFormatting(); + find.Text = "[<](?@)-(?@)[>]"; + //find.Wrap = LBWdFindWrap.wdFindStop; + find.Wrap = LBWdFindWrap.wdFindContinue; + find.MatchCase = false; + find.MatchWholeWord = false; + find.MatchWildcards = true; + find.MatchSoundsLike = false; + find.MatchAllWordForms = false; + if (find.Execute()) return sel; + return null; + } + private static string CreatePDF(string fileName, bool openPdf) + { + return MyApp.CreatePDF(@"C:\Temp\" + fileName + ".pdf", openPdf); + } + + } } diff --git a/PROMS/VEPROMS.CSLA.Library/Extension/ItemExt.cs b/PROMS/VEPROMS.CSLA.Library/Extension/ItemExt.cs index e050d7b2..595ce126 100644 --- a/PROMS/VEPROMS.CSLA.Library/Extension/ItemExt.cs +++ b/PROMS/VEPROMS.CSLA.Library/Extension/ItemExt.cs @@ -811,7 +811,8 @@ namespace VEPROMS.CSLA.Library { get { - if (MyContent.Type == 10000) return true; + //if (MyContent.Type == 10000) return true; + if (IsSection && MyDocStyle.IsStepSection) return true; return false; } } diff --git a/PROMS/Volian.Controls.Library/DisplayRO.cs b/PROMS/Volian.Controls.Library/DisplayRO.cs index ec16db6a..46c961ea 100644 --- a/PROMS/Volian.Controls.Library/DisplayRO.cs +++ b/PROMS/Volian.Controls.Library/DisplayRO.cs @@ -624,6 +624,7 @@ namespace Volian.Controls.Library string outstr = instr; outstr = outstr.Replace("`", @"\'b0"); // convert backquote to degree - left over from DOS days. + //outstr = outstr.Replace(" ", @"\u160?"); // KBR TRY THIS outstr = outstr.Replace("\xa0", @"\u160?"); // hardspace outstr = outstr.Replace("\xb0", @"\'b0"); // degree outstr = outstr.Replace("\x7f", @"\u916?"); // delta @@ -666,186 +667,11 @@ namespace Volian.Controls.Library // OLD: This function is now handled in the ConvertFortranFormatToScienctificNotation //outstr = ConvertDOSSuperAndSubScripts(outstr); - outstr = ConvertFortranFormatToScienctificNotation(outstr); + outstr = ROFSTLookup.ConvertFortranFormatToScienctificNotation(outstr); return outstr; } - //public static string ConvertFortranFormatToScienctificNotation(string str) - //{ - // string outstr = ""; - // int orglen = str.Length; - // int cnt = 0; - // int ptr; - - // int nbytes; - // int tstr, tstr2, rptr, start = 0; - - // while (cnt < orglen) - // { - // // position up to the the next number, sign, or period - // ptr = str.IndexOfAny("+-0123456789.".ToCharArray(), cnt); - // if (ptr == -1) - // { - // outstr += str.Substring(cnt); - // break; // jump out of while loop - nothing else to process - // } - // if ((ptr - cnt) > 0) - // { - // outstr += str.Substring(cnt, ptr - cnt); - // cnt = ptr; - // } - - // if (cnt > start && str[cnt - 1] == '\'') - // { - // //B2003-053: only remove the single quote character - // // if str ptr is not at the end of the string or - // // the next char (after the str ptr) is not a space - // // or newline... (as per Paul Linn on 7/17/03) - // int len = orglen - cnt; - // if (len <= 1 || str[cnt + 1] == ' ' || str[cnt + 1] == '\n') - // start = cnt; - // else - // start = cnt - 1; - // } - // else start = cnt; - // tstr = cnt; - - // //Skip preceeding signs - // if (str[cnt] == '+' || str[cnt] == '-') - // cnt++; - - // cnt = NextNonNumber(str, cnt); - // if (str[cnt] == '.') - // { - // cnt = NextNonNumber(str, cnt + 1); - // if (cnt >= str.Length) //jsj bug fix - // { - // outstr += str.Substring(tstr); - // break; // jump out of while loop - nothing else to process - // } - // if (str[start] == '\'') - // { - // start++; - // } - // else if (str[cnt] == 'E' && cnt > tstr) - // { - // nbytes = (cnt - tstr); // don't include the 'E' - // outstr += str.Substring(tstr, nbytes); - // cnt++; - - // rptr = outstr.Length - 1; - // while (outstr[rptr] == '0') rptr--; - // if (outstr[rptr] != '.') rptr++; - // if (rptr < (outstr.Length - 1)) - // outstr = outstr.Substring(0, rptr + 1); // trim trailing 0's - // //outstr = outstr.TrimEnd(".".ToCharArray()); - // int poutstr = 0; - // if (outstr[poutstr] == '+' || outstr[poutstr] == '-') poutstr++; - // if (!outstr.Substring(poutstr).Equals("1")) - // { - // outstr += "x1"; - // } - // outstr += "0\\super "; - - // tstr2 = cnt; - // if (str[cnt] == '+' || str[cnt] == '-') cnt++; - // cnt = NextNonNumber(str, cnt); - - // if (str[cnt] == '.' && char.IsDigit(str, cnt + 1)) - // cnt = NextNonNumber(str, cnt + 1); - - // nbytes = cnt - tstr2; // +1; - // outstr += str.Substring(tstr2, nbytes); - // outstr += "\\nosupersub "; - - // if (!char.IsLetterOrDigit(str, cnt) && !char.IsWhiteSpace(str, cnt)) - // return (str.Substring(tstr)); - // } - // } - // else - // { - // outstr += str.Substring(start, cnt - start + 1); - // cnt++; - // } - // } - // return (outstr); - //} - - //private static int NextNonNumber(string str, int cnt) - //{ - // int rtn = 0; - // string tstr = str.Substring(cnt); - // int len = tstr.Length; - // while (rtn < len && char.IsDigit(tstr, rtn)) rtn++; - // return rtn + cnt; - //} - public static string ConvertFortranFormatToScienctificNotation(string str) - { - // Convert E style numbers to RTF with \super and \nosupersub - string retval = Regex.Replace(str, "([+-]?)([0-9]+)[.]([0-9]*?)0*E([+-]?[0-9]+)", new MatchEvaluator(FixFortranNumber)); - //retval = Regex.Replace(retval, "[#](.*?)[#]", "\\super $1\\nosupersub ");// DOS Superscript - //retval = Regex.Replace(retval, "[~](.*?)[~]", "\\sub $1\\nosupersub ");// DOS Subscript - retval = Regex.Replace(retval, "[#](.*?)[#]", "\\up3 $1\\up0 ");// DOS Superscript - retval = Regex.Replace(retval, "[~](.*?)[~]", "\\dn3 $1\\dn0 ");// DOS Subscript - return retval; - } - private static string FixFortranNumber(Match match) - { - StringBuilder sb = new StringBuilder(match.Groups[1].Value); - if (match.Groups[3].Length == 0) // Nothing to the right of the decimal - if (match.Groups[2].Value != "1") // Other than "1", multiply it times 10 raised to a power - sb.Append(match.Groups[2].Value + "x10"); - else // The number is simply 1 so it can be ignored and 10 can be raised to a power - sb.Append("10"); - else // A number with a decimal point - sb.Append(match.Groups[2].Value + "." + match.Groups[3].Value + "x10"); - // Add the exponent as superscript - return sb.ToString() + "\\up3 " + match.Groups[4].Value + "\\up0 "; - } - - //private string ConvertDOSSuperAndSubScripts(string instr) - //{ - // string outstr = ""; - // string tstr = instr; - // int cnt = 0; - // int ptr = 0; - // bool issupper=false, issub = false; - - // while (tstr != null && (ptr = tstr.IndexOfAny("#~".ToCharArray(), cnt)) >= 0) - // { - // if (ptr > cnt) - // outstr += tstr.Substring(cnt, ptr - cnt); - // switch (tstr[ptr]) - // { - // case '#': - // if (issub || issupper) - // outstr += "\\nosupersub "; - // else - // outstr += "\\super "; - // issupper = !issupper; - // issub = false; - // break; - // case '~': - // if (issupper || issub) - // outstr += "\\nosupersub "; - // else - // outstr += "\\sub "; - // issub = !issub; - // issupper = false; - // break; - // } - // cnt = ptr + 1; - // if (cnt >= tstr.Length) - // tstr = null; - // else - // tstr = instr.Substring(cnt); - // cnt = 0; - // } - // if (tstr != null) - // outstr += tstr; - // return outstr; - //} - + private static string _TemporaryFolder = null; public static string TemporaryFolder {