I started using Sandcastle just a few days ago, and it was not very userfriendly, since it is a collection of command line utilities. Hence, I started looking for a GUI for Sandcastle, and found one at: http://www.inchl.nl/SandcastleGUI .
It's quite easy to use, and I was quite happy with it. I then started to create a web with documentation for one of my projects, and ran into some problems. It seems Sandcastle has problems with some long names, resulting in linebreaks in a file called "filetitles.js". This results in a javascript error saying something about unterminated string constants.
Thats why I created a small utility for fixing that file: FixFiletitlesJs.exe. Here's the code for my little utility (Console application):
using System;
using System.Collections.Generic;
using System.Text;
using System.Text.RegularExpressions;
using System.IO;
namespace FixFileTitlesJs
{
class Program
{
static void Main(string[] args)
{
if (args.Length == 0 || (args.Length > 0 && args[0] == "?"))
{
Console.WriteLine("USAGE: fixfiletitlesjs filename [Y | N]");
return;
}
string filename = args[0];
//creates a new filname by replacing ".js" at the end of the filename with ".bak"
string backupFilename = Regex.Replace(filename, @"\.js$", ".bak");
try
{
//create a backup file
FileInfo fi = new FileInfo(filename);
fi.MoveTo(backupFilename);
}
catch (FileNotFoundException)
{
Console.WriteLine("File not found.");
Console.ReadLine();
return;
}
catch (Exception ex)
{
Console.WriteLine(string.Format("An exception was thrown while accessing the file: {0}", ex.Message));
Console.ReadLine();
return;
}
StreamWriter sw = null;
try
{
sw = File.CreateText(filename);
}
catch (Exception ex)
{
Console.WriteLine(string.Format("An exception was thrown while accessing the file: {0}", ex.Message));
Console.ReadLine();
return;
}
StreamReader sr = null;
try
{
sr = File.OpenText(backupFilename);
}
catch (Exception ex)
{
Console.WriteLine(string.Format("An exception was thrown while accessing the file: {0}", ex.Message));
Console.ReadLine();
return;
}
int i = 0,j = 0, k = 0;
while (!sr.EndOfStream)
{
string line = sr.ReadLine();
j++;
Regex rx = new Regex("\",$");
while (!sr.EndOfStream && !rx.IsMatch(line) && i > 0)
{
line += sr.ReadLine();
j++;
k++;
}
sw.WriteLine(line);
i++;
}
sw.Close();
sr.Close();
//write result
Console.WriteLine(string.Format("Original file renamed to: {0}", backupFilename));
Console.WriteLine(string.Format("New file created with original name: {0}", filename));
Console.WriteLine(string.Format("Number of lines read from source: {0}", j));
Console.WriteLine(string.Format("Number of lines written to destination: {0}", i));
Console.WriteLine(string.Format("Number of concatenations of lines done: {0}", k));
Console.WriteLine();
string reply = string.Empty;
if (args.Length >= 2 && !string.IsNullOrEmpty(args[1]))
{
reply = args[1];
}
while (reply.ToLower() != "y" && reply.ToLower() != "n")
{
if (reply != string.Empty) Console.WriteLine("You must answer Y or N.");
Console.Write("Would you like to delete the backup of the original file (y/n)?");
reply = Console.ReadLine();
}
if (reply.ToLower() == "y") File.Delete(backupFilename);
}
}
}
No comments:
Post a Comment