Commits

Dmitri Nesteruk committed 45ddc1b

obfuscation

Comments (0)

Files changed (26)

DirectedGraphRenderer.cs

-#define SUBPIXEL
+//#define SUBPIXEL
+
+using System.Runtime.CompilerServices;
+
 namespace DmitriNesteruk.TypograFix
 {
   using System;
     /// <summary>Renders this graph and returns a <see cref="Bitmap"/> object.</summary>
     /// <remarks>Caller must dispose.</remarks>
     /// <returns>A bitmap with rendered contents</returns>
+    /// <remarks>Lots of fixes have been made for this function. Changes in the scale matrix, its order
+    /// and the way the background is rendered all affect the end result. It sucks anyway.</remarks>
     public static Bitmap RenderGraph(Graph graph)
     {
       var gr = new PrettyGraphRenderer(graph);
       gr.CalculateLayout();
-      var rc = new Rectangle(0, 0, // it's a 6 below b/c MSAGL doesn't measure correctly
-        (int)Math.Ceiling(graph.Width) * 6, (int)Math.Ceiling(graph.Height));
-      if (rc.Width % 2 == 1) ++rc.Width;
-      if (rc.Height % 2 == 1) ++rc.Height;
+      var rc = new Rectangle(0, 0, (int)Math.Ceiling(graph.Width), (int)Math.Ceiling(graph.Height));
+      //if (rc.Width % 2 == 1) ++rc.Width;
+      //if (rc.Height % 2 == 1) ++rc.Height;
 
-#if SUBPIXEL
-      using (var bmp = new Bitmap(rc.Width, rc.Height))
+      using (var bmp = new Bitmap(rc.Width*3, rc.Height))
       {
         using (var g = Graphics.FromImage(bmp))
         {
-          g.FillRectangle(Brushes.White, rc);
+          g.FillRectangle(Brushes.White, 0, 0, bmp.Width, bmp.Height);
           g.TextRenderingHint = TextRenderingHint.ClearTypeGridFit;
-          g.SmoothingMode = SmoothingMode.None;
+          g.SmoothingMode = SmoothingMode.AntiAlias;
           gr.Render(g, rc);
 
           using (var bmp1 = FlowBasedRenderer.ConvertToAlphaBased(bmp))
           }
         }
       }
-#else
-      using (var bmp = new Bitmap(rc.Width, rc.Height))
-      using (var g = Graphics.FromImage(bmp))
-      {
-        g.FillRectangle(Brushes.White, rc);
-        g.TextRenderingHint = TextRenderingHint.ClearTypeGridFit;
-        g.SmoothingMode = SmoothingMode.HighQuality;
-        gr.Render(g, rc);
-
-        return FlowBasedRenderer.Crop(bmp);
-      }
-#endif
     }
   }
 
         double s = Math.Min(rect.Width / graph.Width, rect.Height / graph.Height);
         double xoffset = (rect.Left + (0.5 * rect.Width)) - (s * (graph.Left + (0.5 * graph.Width)));
         double yoffset = (rect.Top + (0.5 * rect.Height)) + (s * (graph.Bottom + (0.5 * graph.Height)));
-        using (var sb = new SolidBrush(Draw.MsaglColorToDrawingColor(graph.Attr.BackgroundColor)))
-        {
-          graphics.FillRectangle(sb, rect);
-        }
+        //using (var sb = new SolidBrush(Draw.MsaglColorToDrawingColor(graph.Attr.BackgroundColor)))
+        //{
+        //  graphics.FillRectangle(sb, rect);
+        //}
+
         using (var m = new Matrix((float)s, 0f, 0f, (float)-s, (float)xoffset, (float)yoffset))
         {
-#if SUBPIXEL
-          m.Scale(3, 1);
-#endif
+          m.Scale(3f,1f,MatrixOrder.Append);
           graphics.Transform = m;
         }
+
         Draw.DrawPrecalculatedLayoutObject(graphics, layedOutGraph);
       }
     }

MainWindow.xaml.cs

     private void OnLoad(object sender, RoutedEventArgs e)
     {
       // adorn the title with version name
-      Version version = Assembly.GetExecutingAssembly().GetName().Version;
-      Title += string.Format(CultureInfo.CurrentCulture, " v{0}.{1}.{2} ({3}) by Dmitri Nesteruk",
+      var version = Assembly.GetExecutingAssembly().GetName().Version;
+      Title += string.Format(CultureInfo.CurrentCulture, " v{0}.{1}.{2} ({3})",
                              version.Major, version.Minor, version.Build,
                              Environment.Is64BitProcess ? "x64" : "x86");
       tbIn.Text = App.EntryText;
           using (var sr = new StreamReader(s))
             UnicodeMapBrowser.NavigateToString(sr.ReadToEnd());
 
-      //using (Stream s = a.GetManifestResourceStream("DmitriNesteruk.TypograFix.FeatureGuide.htm"))
-      //  if (s != null)
-      //    using (var sr = new StreamReader(s))
-      //      FeatureGuideBrowser.NavigateToString(sr.ReadToEnd());
-
       // the feature guide is now taken from a local folder
+      // the folder depends on where we actually are
       var loc = Assembly.GetExecutingAssembly().Location;
       var docFolder = new FileInfo(loc).Directory.Parent.FullName;
       var relPath = @"doc\build\default\webframe.html";
       var htmlPath = Path.Combine(docFolder, relPath);
       if (File.Exists(htmlPath))
         FeatureGuideBrowser.Navigate("file:///" + htmlPath);
+      else
+      {
+        // we must have installed the app
+        htmlPath = Path.Combine(docFolder, @"docs\webframe.html");
+        if (File.Exists(htmlPath))
+          FeatureGuideBrowser.Navigate("file:///" + htmlPath);
+      }
 
       // update save slots
       UpdateSlots();

Properties/AssemblyGlobalInfo.cs

 using System.Reflection;
 using System.Resources;
 using System.Runtime.InteropServices;
-using System.Security.Permissions;
 
 [assembly: AssemblyCompany("ActiveMesa")]
 [assembly: AssemblyProduct("TypograFix")]

Tests/ObfuscationTests.cs

+using DmitriNesteruk.TypograFixImpl.Obfuscation;
+using NUnit.Framework;
+
+namespace TypograFix.Tests
+{
+  [TestFixture]
+  public class ObfuscationTests
+  {
+    [Test]
+    [TestCase('a', 'а')]
+    [TestCase('а', 'a')]
+    public void BasicObfuscationTest(char input, char expectedOutput)
+    {
+      Assert.That((int)expectedOutput, Is.EqualTo((int)Obfuscator.ObfuscateCharacter(input)));
+    }
+
+    [Test]
+    [TestCase("Test", "Теst")]
+    public void CompoundObfuscationTest(string input, string expectedOutput)
+    {
+      var result = Obfuscator.ObfuscateString(input);
+      Assert.That(result, Is.EqualTo(expectedOutput));
+    }
+  }
+}

Tests/TypograFix.Tests.csproj

   <ItemGroup>
     <Compile Include="BitmapTests.cs" />
     <Compile Include="HeadingNumberingTests.cs" />
+    <Compile Include="ObfuscationTests.cs" />
     <Compile Include="ParallelTestFixture.cs" />
     <Compile Include="Properties\AssemblyInfo.cs" />
     <Compile Include="TransformTests.cs" />

TypograFix.Common/Annotations.cs

+/*
+ * Copyright 2007-2012 JetBrains s.r.o.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+using System;
+
+namespace JetBrains.Annotations
+{
+  /// <summary>
+  /// Indicates that marked element should be localized or not.
+  /// </summary>
+  [AttributeUsage(AttributeTargets.All, AllowMultiple = false, Inherited = true)]
+  public sealed class LocalizationRequiredAttribute : Attribute
+  {
+    /// <summary>
+    /// Initializes a new instance of the <see cref="LocalizationRequiredAttribute"/> class with
+    /// <see cref="Required"/> set to <see langword="true"/>.
+    /// </summary>
+    public LocalizationRequiredAttribute()
+      : this(true)
+    {
+    }
+
+    /// <summary>
+    /// Initializes a new instance of the <see cref="LocalizationRequiredAttribute"/> class.
+    /// </summary>
+    /// <param name="required"><c>true</c> if a element should be localized; otherwise, <c>false</c>.</param>
+    public LocalizationRequiredAttribute(bool required)
+    {
+      Required = required;
+    }
+
+    /// <summary>
+    /// Gets a value indicating whether a element should be localized.
+    /// <value><c>true</c> if a element should be localized; otherwise, <c>false</c>.</value>
+    /// </summary>
+    [UsedImplicitly]
+    public bool Required { get; private set; }
+
+    /// <summary>
+    /// Returns whether the value of the given object is equal to the current <see cref="LocalizationRequiredAttribute"/>.
+    /// </summary>
+    /// <param name="obj">The object to test the value equality of. </param>
+    /// <returns>
+    /// <c>true</c> if the value of the given object is equal to that of the current; otherwise, <c>false</c>.
+    /// </returns>
+    public override bool Equals(object obj)
+    {
+      var attribute = obj as LocalizationRequiredAttribute;
+      return attribute != null && attribute.Required == Required;
+    }
+
+    /// <summary>
+    /// Returns the hash code for this instance.
+    /// </summary>
+    /// <returns>A hash code for the current <see cref="LocalizationRequiredAttribute"/>.</returns>
+    public override int GetHashCode()
+    {
+      return base.GetHashCode();
+    }
+  }
+
+  /// <summary>
+  /// Indicates that marked method builds string by format pattern and (optional) arguments. 
+  /// Parameter, which contains format string, should be given in constructor.
+  /// The format string should be in <see cref="string.Format(IFormatProvider,string,object[])"/> -like form
+  /// </summary>
+  [AttributeUsage(AttributeTargets.Constructor | AttributeTargets.Method, AllowMultiple = false, Inherited = true)]
+  public sealed class StringFormatMethodAttribute : Attribute
+  {
+    /// <summary>
+    /// Initializes new instance of StringFormatMethodAttribute
+    /// </summary>
+    /// <param name="formatParameterName">Specifies which parameter of an annotated method should be treated as format-string</param>
+    public StringFormatMethodAttribute(string formatParameterName)
+    {
+      FormatParameterName = formatParameterName;
+    }
+
+    /// <summary>
+    /// Gets format parameter name
+    /// </summary>
+    [UsedImplicitly]
+    public string FormatParameterName { get; private set; }
+  }
+
+  /// <summary>
+  /// Indicates that the function argument should be string literal and match one of the parameters of the caller function.
+  /// For example, <see cref="ArgumentNullException"/> has such parameter.
+  /// </summary>
+  [AttributeUsage(AttributeTargets.Parameter, AllowMultiple = false, Inherited = true)]
+  public sealed class InvokerParameterNameAttribute : Attribute { }
+
+  /// <summary>
+  /// Indicates that the function is used to notify class type property value is changed.
+  /// </summary>
+  [AttributeUsage(AttributeTargets.Method, AllowMultiple = false, Inherited = true)]
+  public sealed class NotifyPropertyChangedInvocatorAttribute : Attribute
+  {
+    public NotifyPropertyChangedInvocatorAttribute() { }
+    public NotifyPropertyChangedInvocatorAttribute(string parameterName)
+    {
+      ParameterName = parameterName;
+    }
+
+    [UsedImplicitly]
+    public string ParameterName { get; private set; }
+  }
+
+  /// <summary>
+  /// Indicates that the value of marked element could be <c>null</c> sometimes, so the check for <c>null</c> is necessary before its usage
+  /// </summary>
+  [AttributeUsage(AttributeTargets.Method | AttributeTargets.Parameter | AttributeTargets.Property | AttributeTargets.Delegate | AttributeTargets.Field, AllowMultiple = false, Inherited = true)]
+  public sealed class CanBeNullAttribute : Attribute { }
+
+  /// <summary>
+  /// Indicates that the value of marked element could never be <c>null</c>
+  /// </summary>
+  [AttributeUsage(AttributeTargets.Method | AttributeTargets.Parameter | AttributeTargets.Property | AttributeTargets.Delegate | AttributeTargets.Field, AllowMultiple = false, Inherited = true)]
+  public sealed class NotNullAttribute : Attribute { }
+
+  /// <summary>
+  /// Describes dependency between method input and output
+  /// </summary>
+  /// <syntax>
+  /// <p>Function definition table syntax:</p>
+  /// <list>
+  /// <item>FDT      ::= FDTRow [;FDTRow]*</item>
+  /// <item>FDTRow   ::= Input =&gt; Output | Output &lt;= Input</item>
+  /// <item>Input    ::= ParameterName: Value [, Input]*</item>
+  /// <item>Output   ::= [ParameterName: Value]* {halt|stop|void|nothing|Value}</item>
+  /// <item>Value    ::= true | false | null | notnull | canbenull</item>
+  /// </list>
+  /// If method has single input parameter, it's name could be omitted. <br/>
+  /// Using "halt" (or "void"/"nothing", which is the same) for method output means that methos doesn't return normally. <br/>
+  /// "canbenull" annotation is only applicable for output parameters. <br/>
+  /// You can use multiple [ContractAnnotation] for each FDT row, or use single attribute with rows separated by semicolon. <br/>
+  /// </syntax>
+  /// <examples>
+  /// <list>
+  /// <item>[ContractAnnotation("=> halt")] public void TerminationMethod()</item>
+  /// <item>[ContractAnnotation("halt &lt;= condition: false")] public void Assert(bool condition, string text) // Regular Assertion method</item>
+  /// <item>[ContractAnnotation("s:null => true")] public bool IsNullOrEmpty(string s) // String.IsNullOrEmpty</item>
+  /// <item>[ContractAnnotation("null => null; notnull => notnull")] public object Transform(object data) // Method which returns null if parameter is null, and not null if parameter is not null</item>
+  /// <item>[ContractAnnotation("s:null=>false; =>true,result:notnull; =>false, result:null")] public bool TryParse(string s, out Person result)</item>
+  /// </list>
+  /// </examples>
+  [AttributeUsage(AttributeTargets.Method, AllowMultiple = true, Inherited = true)]
+  public sealed class ContractAnnotationAttribute : Attribute
+  {
+    public ContractAnnotationAttribute([NotNull] string fdt)
+      : this(fdt, false)
+    {
+    }
+
+    public ContractAnnotationAttribute([NotNull] string fdt, bool forceFullStates)
+    {
+      FDT = fdt;
+      ForceFullStates = forceFullStates;
+    }
+
+    public string FDT { get; private set; }
+    public bool ForceFullStates { get; private set; }
+  }
+
+  /// <summary>
+  /// Indicates that the value of marked type (or its derivatives) cannot be compared using '==' or '!=' operators.
+  /// There is only exception to compare with <c>null</c>, it is permitted
+  /// </summary>
+  [AttributeUsage(AttributeTargets.Interface | AttributeTargets.Class | AttributeTargets.Struct, AllowMultiple = false, Inherited = true)]
+  public sealed class CannotApplyEqualityOperatorAttribute : Attribute { }
+
+  /// <summary>
+  /// When applied to target attribute, specifies a requirement for any type which is marked with 
+  /// target attribute to implement or inherit specific type or types
+  /// </summary>
+  /// <example>
+  /// <code>
+  /// [BaseTypeRequired(typeof(IComponent)] // Specify requirement
+  /// public class ComponentAttribute : Attribute 
+  /// {}
+  /// 
+  /// [Component] // ComponentAttribute requires implementing IComponent interface
+  /// public class MyComponent : IComponent
+  /// {}
+  /// </code>
+  /// </example>
+  [AttributeUsage(AttributeTargets.Class, AllowMultiple = true, Inherited = true)]
+  [BaseTypeRequired(typeof(Attribute))]
+  public sealed class BaseTypeRequiredAttribute : Attribute
+  {
+    /// <summary>
+    /// Initializes new instance of BaseTypeRequiredAttribute
+    /// </summary>
+    /// <param name="baseType">Specifies which types are required</param>
+    public BaseTypeRequiredAttribute(Type baseType)
+    {
+      BaseTypes = new[] { baseType };
+    }
+
+    /// <summary>
+    /// Gets enumerations of specified base types
+    /// </summary>
+    public Type[] BaseTypes { get; private set; }
+  }
+
+  /// <summary>
+  /// Indicates that the marked symbol is used implicitly (e.g. via reflection, in external library),
+  /// so this symbol will not be marked as unused (as well as by other usage inspections)
+  /// </summary>
+  [AttributeUsage(AttributeTargets.All, AllowMultiple = false, Inherited = true)]
+  public sealed class UsedImplicitlyAttribute : Attribute
+  {
+    [UsedImplicitly]
+    public UsedImplicitlyAttribute()
+      : this(ImplicitUseKindFlags.Default, ImplicitUseTargetFlags.Default) { }
+
+    [UsedImplicitly]
+    public UsedImplicitlyAttribute(ImplicitUseKindFlags useKindFlags, ImplicitUseTargetFlags targetFlags)
+    {
+      UseKindFlags = useKindFlags;
+      TargetFlags = targetFlags;
+    }
+
+    [UsedImplicitly]
+    public UsedImplicitlyAttribute(ImplicitUseKindFlags useKindFlags)
+      : this(useKindFlags, ImplicitUseTargetFlags.Default) { }
+
+    [UsedImplicitly]
+    public UsedImplicitlyAttribute(ImplicitUseTargetFlags targetFlags)
+      : this(ImplicitUseKindFlags.Default, targetFlags) { }
+
+    [UsedImplicitly]
+    public ImplicitUseKindFlags UseKindFlags { get; private set; }
+
+    /// <summary>
+    /// Gets value indicating what is meant to be used
+    /// </summary>
+    [UsedImplicitly]
+    public ImplicitUseTargetFlags TargetFlags { get; private set; }
+  }
+
+  /// <summary>
+  /// Should be used on attributes and causes ReSharper to not mark symbols marked with such attributes as unused (as well as by other usage inspections)
+  /// </summary>
+  [AttributeUsage(AttributeTargets.Class, AllowMultiple = false, Inherited = true)]
+  public sealed class MeansImplicitUseAttribute : Attribute
+  {
+    [UsedImplicitly]
+    public MeansImplicitUseAttribute()
+      : this(ImplicitUseKindFlags.Default, ImplicitUseTargetFlags.Default) { }
+
+    [UsedImplicitly]
+    public MeansImplicitUseAttribute(ImplicitUseKindFlags useKindFlags, ImplicitUseTargetFlags targetFlags)
+    {
+      UseKindFlags = useKindFlags;
+      TargetFlags = targetFlags;
+    }
+
+    [UsedImplicitly]
+    public MeansImplicitUseAttribute(ImplicitUseKindFlags useKindFlags)
+      : this(useKindFlags, ImplicitUseTargetFlags.Default)
+    {
+    }
+
+    [UsedImplicitly]
+    public MeansImplicitUseAttribute(ImplicitUseTargetFlags targetFlags)
+      : this(ImplicitUseKindFlags.Default, targetFlags) { }
+
+    [UsedImplicitly]
+    public ImplicitUseKindFlags UseKindFlags { get; private set; }
+
+    /// <summary>
+    /// Gets value indicating what is meant to be used
+    /// </summary>
+    [UsedImplicitly]
+    public ImplicitUseTargetFlags TargetFlags { get; private set; }
+  }
+
+  [Flags]
+  public enum ImplicitUseKindFlags
+  {
+    Default = Access | Assign | InstantiatedWithFixedConstructorSignature,
+
+    /// <summary>
+    /// Only entity marked with attribute considered used
+    /// </summary>
+    Access = 1,
+
+    /// <summary>
+    /// Indicates implicit assignment to a member
+    /// </summary>
+    Assign = 2,
+
+    /// <summary>
+    /// Indicates implicit instantiation of a type with fixed constructor signature.
+    /// That means any unused constructor parameters won't be reported as such.
+    /// </summary>
+    InstantiatedWithFixedConstructorSignature = 4,
+
+    /// <summary>
+    /// Indicates implicit instantiation of a type
+    /// </summary>
+    InstantiatedNoFixedConstructorSignature = 8,
+  }
+
+  /// <summary>
+  /// Specify what is considered used implicitly when marked with <see cref="MeansImplicitUseAttribute"/> or <see cref="UsedImplicitlyAttribute"/>
+  /// </summary>
+  [Flags]
+  public enum ImplicitUseTargetFlags
+  {
+    Default = Itself,
+
+    Itself = 1,
+
+    /// <summary>
+    /// Members of entity marked with attribute are considered used
+    /// </summary>
+    Members = 2,
+
+    /// <summary>
+    /// Entity marked with attribute and all its members considered used
+    /// </summary>
+    WithMembers = Itself | Members
+  }
+
+  /// <summary>
+  /// This attribute is intended to mark publicly available API which should not be removed and so is treated as used.
+  /// </summary>
+  [MeansImplicitUse]
+  public sealed class PublicAPIAttribute : Attribute
+  {
+    public PublicAPIAttribute() { }
+    public PublicAPIAttribute(string comment) { }
+  }
+
+  /// <summary>
+  /// Tells code analysis engine if the parameter is completely handled when the invoked method is on stack. 
+  /// If the parameter is delegate, indicates that delegate is executed while the method is executed.
+  /// If the parameter is enumerable, indicates that it is enumerated while the method is executed.
+  /// </summary>
+  [AttributeUsage(AttributeTargets.Parameter, Inherited = true)]
+  public sealed class InstantHandleAttribute : Attribute { }
+
+  /// <summary>
+  /// Indicates that method doesn't contain observable side effects.
+  /// The same as <see cref="System.Diagnostics.Contracts.PureAttribute"/>
+  /// </summary>
+  [AttributeUsage(AttributeTargets.Method, Inherited = true)]
+  public sealed class PureAttribute : Attribute { }
+
+  [AttributeUsage(AttributeTargets.Parameter)]
+  public class PathReferenceAttribute : Attribute
+  {
+    public PathReferenceAttribute() { }
+
+    [UsedImplicitly]
+    public PathReferenceAttribute([PathReference] string basePath)
+    {
+      BasePath = basePath;
+    }
+
+    [UsedImplicitly]
+    public string BasePath { get; private set; }
+  }
+
+  // ASP.NET MVC attributes
+
+  [AttributeUsage(AttributeTargets.Parameter | AttributeTargets.Method)]
+  public sealed class AspMvcActionAttribute : Attribute
+  {
+    [UsedImplicitly]
+    public string AnonymousProperty { get; private set; }
+
+    public AspMvcActionAttribute() { }
+
+    public AspMvcActionAttribute(string anonymousProperty)
+    {
+      AnonymousProperty = anonymousProperty;
+    }
+  }
+
+  [AttributeUsage(AttributeTargets.Parameter)]
+  public sealed class AspMvcAreaAttribute : PathReferenceAttribute
+  {
+    [UsedImplicitly]
+    public string AnonymousProperty { get; private set; }
+
+    [UsedImplicitly]
+    public AspMvcAreaAttribute() { }
+
+    public AspMvcAreaAttribute(string anonymousProperty)
+    {
+      AnonymousProperty = anonymousProperty;
+    }
+  }
+
+  [AttributeUsage(AttributeTargets.Parameter | AttributeTargets.Method)]
+  public sealed class AspMvcControllerAttribute : Attribute
+  {
+    [UsedImplicitly]
+    public string AnonymousProperty { get; private set; }
+
+    public AspMvcControllerAttribute() { }
+
+    public AspMvcControllerAttribute(string anonymousProperty)
+    {
+      AnonymousProperty = anonymousProperty;
+    }
+  }
+
+  [AttributeUsage(AttributeTargets.Parameter)]
+  public sealed class AspMvcMasterAttribute : Attribute { }
+
+  [AttributeUsage(AttributeTargets.Parameter)]
+  public sealed class AspMvcModelTypeAttribute : Attribute { }
+
+  [AttributeUsage(AttributeTargets.Parameter | AttributeTargets.Method)]
+  public sealed class AspMvcPartialViewAttribute : PathReferenceAttribute { }
+
+  [AttributeUsage(AttributeTargets.Class | AttributeTargets.Method)]
+  public sealed class AspMvcSupressViewErrorAttribute : Attribute { }
+
+  [AttributeUsage(AttributeTargets.Parameter)]
+  public sealed class AspMvcDisplayTemplateAttribute : Attribute { }
+
+  [AttributeUsage(AttributeTargets.Parameter)]
+  public sealed class AspMvcEditorTemplateAttribute : Attribute { }
+
+  [AttributeUsage(AttributeTargets.Parameter | AttributeTargets.Method)]
+  public sealed class AspMvcViewAttribute : PathReferenceAttribute { }
+
+  [AttributeUsage(AttributeTargets.Parameter | AttributeTargets.Property)]
+  public sealed class AspMvcActionSelectorAttribute : Attribute { }
+
+  // Razor attributes
+
+  [AttributeUsage(AttributeTargets.Parameter | AttributeTargets.Method, Inherited = true)]
+  public sealed class RazorSectionAttribute : Attribute { }
+}

TypograFix.Common/ConversionOptions.cs

-namespace DmitriNesteruk.TypograFix.Common
+using JetBrains.Annotations;
+
+namespace DmitriNesteruk.TypograFix.Common
 {
   using System;
   using System.ComponentModel;
     private string f7keybinding;
     private string f8keybinding;
     private string f9keybinding;
+
     private string f10keybinding;
+
     private string f11keybinding;
+
     private string f12keybinding;
+
     private string externalimagebaseline;
+
     private string tocaftertoken;
+
     private float freeformlinespacing;
+
     private float freeformbaseline;
+
     private string freeformprefix;
+
     private string freeformfontfamily;
+
     private float freeformfontsize;
+
     private int freeformmaxwidth;
+
     private int freeformmaxheight;
+
     private bool freeformsmallcaps;
+
     private bool freeformitalic;
+
     private bool freeformcontextualligatures;
+
     private bool freeformstandardligatures;
+
     private bool freeformswash;
+
     private int freeformstylisticset;
+
     private bool useimagecomments;
+
     private string imagecommentsprefix;
+
     private string imagecommentfont;
+
     private float imagecommentfontsize;
+
     [NonSerialized]
     private Color imagecommentsbackgroundcolor;
+
     [NonSerialized]
     private Color imagecommentsforegroundcolor;
+
     [NonSerialized]
     private Thickness imagecommentsmargin;
+
     [NonSerialized]
     private Thickness imagecommentspadding;
+
     private TextRenderingHint imagecommentsrendering;
+
     private ImageSubstitutionOption imagesubstitutionoption;
+
     private string imageheadingprefix;
+
     private string imageheadingfontfamily;
+
     private double imageheadingfontsizeprimary;
+
     private double imageheadingfontsizesecondary;
+
     private double imageheadingfontsizetertiary;
+
     [NonSerialized]
     private Color imageheadingforegroundcolor;
+
     private bool imageheadingitalic;
+
     private bool blanklinebeforeheadings;
+
     private bool codetrim;
+
     private bool italicizecomments;
+
     private int fontsize;
+
     private ProgrammingLanguage syntaxhighlightingoptions;
+
     private bool prettyampersand;
+
     private bool alternate;
+
     private bool nobreaksaftercomments;
+
     [NonSerialized]
     private Color keywordcolor;
+
     private bool rasterizecode;
+
     [NonSerialized]
     private Color preproccolor;
+
     [NonSerialized]
     private Color stringcolor;
+
     [NonSerialized]
     private Color commentcolor;
+
     private bool linenumbers;
+
     private string backreferencetext;
+
     private ReferenceLocationOptions referencelocation;
+
     private BackReferenceLocationOptions backreferencelocation;
+
     private bool convertapprox;
+
     private SyntaxMarkupOptions doublecurlyoptions;
+
     private bool convertpm;
+
     private bool wikiheadings;
+
     private bool blanklineafterclosingparagraph;
+
     private bool doubleatincode;
+
     private bool convertsuper;
+
     private bool convertfiandfl;
+
     private bool escapelessgreaterincode;
+
     private bool obfuscateat;
+
     private BackquoteTransformationOptions backquotetocode;
+
     private bool generatetoc;
+
     private string toclabel;
+
     private string reflabel;
+
     private bool autoparagraphs;
+
     private bool forcepinsideli;
+
     private DiactricsOptions diactricsoptions;
+
     private bool angleddoublequotes;
+
     private bool verticalellipsis;
+
     private ListStyleOptions orderedliststyletype;
+
     private int preindent;
+
     private ListStyleOptions unorderedliststyletype;
+
     private ReferenceStyleOptions referencestyle;
+
     private int spacespertab;
+
     private QTableOptions qtableoptions;
+
     private string imageUploadApiKey;
+
     private bool autoTwitter;
+
     private bool forceUtf8;
+
     private string rasterizationFont;
+
     private string emphasisFontOverride;
+
     private PostprocessingOptions postprocessingOptions;
 
+    private bool obfuscateText;
+
     /// <summary>
     /// Initializes a new instance of the <see cref="ConversionOptions"/> class.
     /// </summary>
       }
     }
 
+    [Category("Substitution")]
+    [DisplayName("Obfuscate text")]
+    public bool ObfuscateText
+    {
+      get { return obfuscateText; }
+      set
+      {
+        if (value.Equals(obfuscateText)) return;
+        obfuscateText = value;
+        OnPropertyChanged("ObfuscateText");
+      }
+    }
+
     [Category("Auto-numbering")]
     [DisplayName("Headings")]
     [Description("Determines whether headings get automatic numbering.")]
     [Category("Styling")]
     [DisplayName("<pre> indentation")]
     [Description("Number of non-breakable spaces by which <pre> blocks should be indented.")]
-    private int PreIndent
+    public int PreIndent
     {
       get {
         return preindent;
     }
 
     /// <summary>Fired when a property is changed.</summary>
+    [NotifyPropertyChangedInvocator]
     public void OnPropertyChanged(string propertyName)
     {
       var p = PropertyChanged;

TypograFix.Common/TypograFix.Common.csproj

     </Reference>
   </ItemGroup>
   <ItemGroup>
+    <Compile Include="Annotations.cs" />
     <Compile Include="DisposableCollection.cs" />
     <Compile Include="NotReadyYetException.cs" />
     <Compile Include="Options\BackReferenceLocationOptions.cs" />

TypograFixImpl/BitmapLambdaRenderer.cs

   /// </summary>
   public class BitmapLambdaRenderer : IDisposable
   {
-    public Dictionary<string, string> sourceCodeAndGeneratedPaths = new Dictionary<string, string>();
+    public readonly Dictionary<string, string> sourceCodeAndGeneratedPaths = new Dictionary<string, string>();
     private readonly string codeTemplate;
 
     public BitmapLambdaRenderer()

TypograFixImpl/Generator.cs

   using System.Net;
   using TypograFix;
   using Generators;
+  using DmitriNesteruk.TypograFixImpl.Obfuscation;
 
   /// <summary>
   /// Beautifies HTML, adding all sorts of typographic embellishments.
                   goto default;
                 break;
               default:
+                #region auto-paragraphs, which are a bad idea
                 if (options.AutoParagraphs && !CannotReplace)
                 {
                   // if we're 0th or last char in line break
                   }
                   Debug.WriteLine(hb.ToString());
                 }
+                #endregion
                 // check greek letters
                 if (Util.IsGreekLetter(text[i]))
                   hb.Append("&" + Util.GreekLetterName(text[i]) + ";");
-                else hb.Append(text[i]);
+                else
+                {
+                  if (options.ObfuscateText)
+                    hb.Append(Obfuscator.ObfuscateCharacter(text[i]));
+                  else
+                    hb.Append(text[i]);
+                }
                 break;
             }
             break;

TypograFixImpl/Obfuscation/Obfuscator.cs

+using System;
+using System.Collections.Generic;
+using System.Linq;
+
+namespace DmitriNesteruk.TypograFixImpl.Obfuscation
+{
+  public static class Obfuscator
+  {
+    private static readonly Dictionary<char, char> latinToCyrillic = new Dictionary<char, char>();
+    private static readonly Dictionary<char, char> cyrillicToLatin;
+    private static Random rand = new Random();
+
+    static Obfuscator()
+    {
+      latinToCyrillic.Add('a', 'а');
+      latinToCyrillic.Add('c', 'с');
+      latinToCyrillic.Add('e', 'е');
+      latinToCyrillic.Add('o', 'о');
+      latinToCyrillic.Add('p', 'р');
+      latinToCyrillic.Add('x', 'х');
+      latinToCyrillic.Add('A', 'А');
+      latinToCyrillic.Add('B', 'В');
+      latinToCyrillic.Add('C', 'С');
+      latinToCyrillic.Add('E', 'Е');
+      latinToCyrillic.Add('H', 'Н');
+      latinToCyrillic.Add('K', 'К');
+      latinToCyrillic.Add('M', 'М');
+      latinToCyrillic.Add('O', 'О');
+      latinToCyrillic.Add('P', 'Р');
+      latinToCyrillic.Add('T', 'Т');
+      latinToCyrillic.Add('X', 'Х');
+
+      // guess what
+      cyrillicToLatin = latinToCyrillic.ToDictionary(key => key.Value, value => value.Key);
+    }
+
+    public static char ObfuscateLatinCharacter(char c)
+    {
+      char u;
+      return latinToCyrillic.TryGetValue(c, out u) ? u : c;
+    }
+
+    public static char ObfuscateCyrillicCharacter(char c)
+    {
+      char u;
+      return cyrillicToLatin.TryGetValue(c, out u) ? u : c;
+    }
+
+    public static char ObfuscateCharacter(char c)
+    {
+      char cyr = ObfuscateLatinCharacter(c);
+      if (c != cyr) return cyr;
+      char lat = ObfuscateCyrillicCharacter(c);
+      return lat;
+    }
+
+    public static string ObfuscateString(string s)
+    {
+      return new string(s.ToCharArray().Select(c => ObfuscateCharacter(c)).ToArray());
+    }
+  }
+}

TypograFixImpl/TypograFix.Impl.csproj

     <None Include="MarkupRasterizer\MarkupParser.cs" />
     <None Include="MarkupRasterizer\MarkupRenderer.cs" />
     <Compile Include="NativeMethods.cs" />
+    <Compile Include="Obfuscation\Obfuscator.cs" />
     <Compile Include="Properties\AssemblyInfo.cs" />
     <Compile Include="RECT.cs" />
     <Compile Include="ShorthandManaBuilder.cs" />

doc/Default.chm

Binary file modified.

doc/TypograFix.dxp

           <TargetItemId>a7f29fa5-1f65-49bf-8812-77731e8fe6a6</TargetItemId>
           <TargetItemBookmark></TargetItemBookmark>
         </TocNode>
+        <TocNode Name="" Id="005f2b53-dcb8-4fdf-8c2f-d70249abc3f6" IconIndex="-1" IsNew="false" Target="" DependsOnItemTypeName="" DependsOnItemTypeFilter="" DependsOnMinimumCount="0" DependsOnStillProcessChildNodes="false" BuildFlags="" NodeType="PROJECTITEM">
+          <CaptionTemplate />
+          <ChildNodes />
+          <TargetItemId>aa32d59a-6df7-44f9-afb0-1e1b3a00f1fd</TargetItemId>
+          <TargetItemBookmark></TargetItemBookmark>
+        </TocNode>
         <TocNode Name="" Id="aec1608b-8625-4477-ab44-b334d46b2af3" IconIndex="-1" IsNew="false" Target="" DependsOnItemTypeName="" DependsOnItemTypeFilter="" DependsOnMinimumCount="0" DependsOnStillProcessChildNodes="false" BuildFlags="" NodeType="NOLINK">
           <CaptionTemplate m="2011-12-19T21:31:10.5103268Z">Rasterization</CaptionTemplate>
           <ChildNodes>
             <TopicKeywords />
             <PropertyDefinitionValues />
           </Topic>
+          <Topic Id="aa32d59a-6df7-44f9-afb0-1e1b3a00f1fd" Status="New Topic" CreatedOn="2012-08-30T03:35:52.022948Z" ModifiedOn="2012-08-30T03:49:22.3972987Z" PageTypeName="" AutoIndex="true" HelpContextIds="" Name="Features" BuildFlags="">
+            <Title />
+            <ContentsTitle />
+            <Notes></Notes>
+            <TopicSections>
+              <TopicSection Name="BodyText">
+                <Content m="2012-08-30T03:49:22.3972987Z">&lt;P&gt;The following is an outline of some of the features that TypograFix supports:&lt;/P&gt;
+&lt;UL&gt;
+&lt;LI&gt;
+&lt;P&gt;&lt;CODE&gt;*Italic*&lt;/CODE&gt; &lt;EM&gt;like this&lt;/EM&gt; and &lt;CODE&gt;**bold**&lt;/CODE&gt; &lt;STRONG&gt;like this&lt;/STRONG&gt;.&lt;/P&gt;
+&lt;LI&gt;
+&lt;P&gt;Inline code &lt;CODE&gt;like this&lt;/CODE&gt;&amp;nbsp;– use backquotes&lt;/P&gt;
+&lt;LI&gt;
+&lt;P&gt;MTG symbols like this &lt;IMG alt="" src="http://forums.mtgsalvation.com/images/smilies/mana3.gif"&gt;&lt;IMG alt="" src="http://forums.mtgsalvation.com/images/smilies/manar.gif"&gt;&lt;IMG alt="" src="http://forums.mtgsalvation.com/images/smilies/manag.gif"&gt;&lt;IMG alt="" src="http://forums.mtgsalvation.com/images/smilies/manab.gif"&gt;&amp;nbsp;– use double backquotes&lt;/P&gt;
+&lt;LI&gt;
+&lt;P&gt;Code listings&amp;nbsp;– surround with &lt;CODE&gt;{{&lt;/CODE&gt; and &lt;CODE&gt;}}&lt;/CODE&gt; 
+&lt;BLOCKQUOTE&gt;&lt;CODE&gt;&lt;FONT color=black size=2 face="Consolas, Andale Mono, Courier New, Courier"&gt;&lt;FONT color=#0000ff&gt;static&lt;/FONT&gt;&amp;nbsp;&lt;FONT color=#0000ff&gt;void&lt;/FONT&gt;&amp;nbsp;Main(&lt;FONT color=#0000ff&gt;string&lt;/FONT&gt;&amp;nbsp;[]&amp;nbsp;args)&lt;BR&gt;{&lt;BR&gt;&amp;nbsp;&amp;nbsp;&lt;FONT color=#006400&gt;//&amp;nbsp;foo&lt;BR&gt;&lt;/FONT&gt;}&lt;BR&gt;&lt;/FONT&gt;&lt;/CODE&gt;&lt;/BLOCKQUOTE&gt;
+&lt;P&gt;&lt;/P&gt;
+&lt;LI&gt;
+&lt;P&gt;References&amp;nbsp;– to get something like [&lt;A title="This is reference text." href="#Reference1" name=BackReference1&gt;1&lt;/A&gt;], just type &lt;CODE&gt;[This is reference text.]&lt;/CODE&gt;&lt;/P&gt;
+&lt;LI&gt;
+&lt;P&gt;Automatic twitter support&amp;nbsp;– just type &lt;A title="activemesa's posts on twitter" href="http://twitter.com/activemesa"&gt;@activemesa&lt;/A&gt;&lt;/P&gt;
+&lt;LI&gt;
+&lt;P&gt;Support for «angled quotes» if you need them&lt;/P&gt;
+&lt;LI&gt;
+&lt;P&gt;Support for &lt;EM&gt;freeform text&lt;/EM&gt; using a special mark-up lanuage that supports OpenType features. To see it, use &lt;CODE&gt;[{&lt;/CODE&gt; and &lt;CODE&gt;}]&lt;/CODE&gt; braces around text. Markup may include font names (e.g., &lt;CODE&gt;[Octava]&lt;/CODE&gt;), font size (e.g., &lt;CODE&gt;[12]&lt;/CODE&gt;) or OpenType features (e.g., &lt;CODE&gt;[sw]&lt;/CODE&gt;, &lt;CODE&gt;[i]&lt;/CODE&gt;, etc.)&lt;/P&gt;
+&lt;LI&gt;
+&lt;P&gt;Support for code rasterization, which might come in handy on those lame blogging platforms that do not have a decent way of rendering code.&lt;/P&gt;
+&lt;LI&gt;
+&lt;P&gt;Lots of micromanagement options to deal with various insane blogging platforms.&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;
+&lt;P&gt;References&lt;/P&gt;
+&lt;OL&gt;
+&lt;LI&gt;&lt;A name=Reference1&gt;&lt;/A&gt;&lt;A title="Back to text" href="#BackReference1"&gt;↑&lt;/A&gt; This is reference text. &lt;/LI&gt;&lt;/OL&gt;</Content>
+              </TopicSection>
+            </TopicSections>
+            <TopicLinks />
+            <TopicKeywords />
+            <PropertyDefinitionValues />
+          </Topic>
         </Topics>
       </TopicCategory>
       <TopicCategory Id="ddd70971-e183-41d6-ba05-33992005f51d" AutoIndex="false">

doc/TypograFix.dxw

 <?xml version="1.0" encoding="utf-8"?>
 <ApplicationWorkspace>
   <RecentItems>
-    <RecentItem Key="c9080ecd-6d12-4bb0-966d-c9d5556cd274.-" IsPinned="false" Type="Innovasys.ContentAuthoring.Topics.RecentTopic" Assembly="Innovasys.ContentAuthoring.Topics">
+    <RecentItem Key="aa32d59a-6df7-44f9-afb0-1e1b3a00f1fd.-" IsPinned="false" Type="Innovasys.ContentAuthoring.Topics.RecentTopic" Assembly="Innovasys.ContentAuthoring.Topics">
       <HandlerName>TOPICS</HandlerName>
       <Category>Topics</Category>
     </RecentItem>
       <HandlerName>TOPICS</HandlerName>
       <Category>Topics</Category>
     </RecentItem>
+    <RecentItem Key="c9080ecd-6d12-4bb0-966d-c9d5556cd274.-" IsPinned="false" Type="Innovasys.ContentAuthoring.Topics.RecentTopic" Assembly="Innovasys.ContentAuthoring.Topics">
+      <HandlerName>TOPICS</HandlerName>
+      <Category>Topics</Category>
+    </RecentItem>
     <RecentItem Key="2ccfec40-a666-42b9-91ca-36f6c0876d90.-" IsPinned="false" Type="Innovasys.ContentAuthoring.Topics.RecentTopic" Assembly="Innovasys.ContentAuthoring.Topics">
       <HandlerName>TOPICS</HandlerName>
       <Category>Topics</Category>

doc/build/Default/Default.hhc

         <param name="Local" value="Building from Source.html">
      </OBJECT>
 <LI> <OBJECT type="text/sitemap">
+        <param name="Name" value="Features">
+        <param name="Local" value="Features.html">
+     </OBJECT>
+<LI> <OBJECT type="text/sitemap">
         <param name="Name" value="Rasterization">
      </OBJECT>
 <UL>

doc/build/Default/Default.hhk

 </OBJECT> 
 
 <LI><OBJECT type="text/sitemap">
+<param name="Name" value="Features" >
+<param name="Local" value="Features.html" >
+
+</OBJECT> 
+
+<LI><OBJECT type="text/sitemap">
 <param name="Name" value="Introduction" >
 <param name="Local" value="Introduction.html" >
 

doc/build/Default/Default.hhp

 Display compile progress=Yes
 Full-text search=Yes
 Index file=Default.hhk
-Language=0x409 English (United States)
+Language=0x809 English (United Kingdom)
 Title=ActiveMesa TypograFix
 
 [WINDOWS]
 Building from Source.html
 WhatIsRasterization.html
 Markup Rendering.html
+Features.html
 Default.hhc
 Default.hhk
 

doc/build/Default/Features.html

+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
+<html xmlns:innovasys xmlns:MSHelp="http://msdn.microsoft.com/mshelp">
+<head>
+    <META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=UTF-8">
+    <meta content="history" name="save" />
+    <meta name="GENERATOR" content="Innovasys HelpStudio (http://www.innovasys.com)" />
+    <title>Features</title>
+    <link rel="stylesheet" type="text/css" href="stylesheets/helpstudio.css" />
+    
+    
+    <link rel="styleSheet" type="text/css" href="stylesheets/customstyles.css"></link>
+    <link rel="styleSheet" type="text/css" href="stylesheets/hs-boxes.css"></link>
+    <link rel="styleSheet" type="text/css" href="stylesheets/hs-expandcollapse.css"></link>
+    <link rel="styleSheet" type="text/css" href="stylesheets/hs-simpletab.css"></link>
+    <link rel="styleSheet" type="text/css" href="stylesheets/hs-heading-expandcollapse.css"></link>
+    <script src="script/helpstudio.js" type="text/javascript"></script>
+    
+    <script src="script/hs-expandcollapse.js" type="text/javascript"></script>
+    <script src="script/hs-enlargeimage.js" type="text/javascript"></script>
+    <script src="script/swfobject.js" type="text/javascript"></script>
+    <script src="script/hs-common.js" type="text/javascript"></script>
+    <script src="script/hs-heading-expandcollapse.js" type="text/javascript"></script>
+    
+    
+	
+    
+</head>
+<body id="hsbody">
+	
+    <div style="display: none">
+        <input type="hidden" id="userDataCache" class="userDataStyle" name="userDataCache" />
+        <input type="hidden" id="hiddenScrollOffset" name="hiddenScrollOffset" />
+    </div>
+    <img id="collapseImage" style="display:none; height:0; width:0;" src="images/collapse.gif">
+    <img id="expandImage" style="display:none; height:0; width:0;" src="images/expand.gif"/>
+    <img id="copyImage" style="display:none; height:0; width:0;" src="images/copycode.gif"/>
+    <img id="copyHoverImage" style="display:none; height:0; width:0;" src="images/copycodeHighlight.gif">
+    <img id="dropDownImage" style="display:none; height:0; width:0;" src="images/drpdown.gif"/>
+    <img id="dropDownHoverImage" style="display:none; height:0; width:0;" src="images/drpdown_orange.gif"/>
+    <div id="pagetop">
+        
+        <table width="100%" id="pagetoptable2" cellspacing="0" cellpadding="0">
+        	<tr>
+        		<td></td>
+        	</tr>
+        </table>
+        <table width="100%" id="pagetoptable1">
+            <tr id="pagetoptable1row1">
+                <td align="left">
+                    <span id="projecttitle">
+                        ActiveMesa TypograFix
+                    </span>
+                </td>
+                <td align="right" rowspan="2">
+                    
+                </td>
+            </tr>
+            <tr id="pagetoptable1row2">
+                <td align="left">
+                    <span id="pagetitle">
+                        Features
+                    </span>
+                </td>
+            </tr>
+            <tr id="pagetoptable1row3">
+            	<td colspan="2">
+            		
+            		<span id="feedbacklink"><a href="mailto:dmitrinesteruk@gmail.com?subject=Documentation Feedback: Features.html">Send Feedback</a></span>
+            	</td>
+            </tr>
+        </table>
+        
+        
+    </div>
+    <div class="hspopupbubble" id="hsglossaryitembox">
+        <p>Glossary Item Box</p>
+    </div>
+    <div id="pagebody">
+        <div id="mainbody">
+<p>The following is an outline of some of the features that TypograFix supports:</p>
+
+<ul>
+    <li>
+        <p><code>*Italic*</code> <em>like this</em> and <code>**bold**</code> <strong>like this</strong>.</p>
+    </li>
+
+    <li>
+        <p>Inline code <code>like this</code>&nbsp;– use backquotes</p>
+    </li>
+
+    <li>
+        <p>MTG symbols like this <img alt="" src="http://forums.mtgsalvation.com/images/smilies/mana3.gif" /><img alt="" src="http://forums.mtgsalvation.com/images/smilies/manar.gif" /><img alt="" src="http://forums.mtgsalvation.com/images/smilies/manag.gif" /><img alt="" src="http://forums.mtgsalvation.com/images/smilies/manab.gif" />&nbsp;– use double backquotes</p>
+    </li>
+
+    <li>
+        <p>Code listings&nbsp;– surround with <code>{{</code> and <code>}}</code></p>
+
+        <blockquote>
+            <code><font color="black" size="2" face="Consolas, Andale Mono, Courier New, Courier"><font color="blue">static</font>&nbsp;<font color="blue">void</font>&nbsp;Main(<font color="blue">string</font>&nbsp;[]&nbsp;args)<br />
+            {<br />
+            &nbsp;&nbsp;<font color="#006400">//&nbsp;foo<br /></font>}<br /></font></code>
+        </blockquote>
+
+        <p></p>
+    </li>
+
+    <li>
+        <p>References&nbsp;– to get something like [<a title="This is reference text." href="#Reference1" name="BackReference1" id="BackReference1">1</a>], just type <code>[This is reference text.]</code></p>
+    </li>
+
+    <li>
+        <p>Automatic twitter support&nbsp;– just type <a title="activemesa's posts on twitter" href="http://twitter.com/activemesa">@activemesa</a></p>
+    </li>
+
+    <li>
+        <p>Support for «angled quotes» if you need them</p>
+    </li>
+
+    <li>
+        <p>Support for <em>freeform text</em> using a special mark-up lanuage that supports OpenType features. To see it, use <code>[{</code> and <code>}]</code> braces around text. Markup may include font names (e.g., <code>[Octava]</code>), font size (e.g., <code>[12]</code>) or OpenType features (e.g., <code>[sw]</code>, <code>[i]</code>, etc.)</p>
+    </li>
+
+    <li>
+        <p>Support for code rasterization, which might come in handy on those lame blogging platforms that do not have a decent way of rendering code.</p>
+    </li>
+
+    <li>
+        <p>Lots of micromanagement options to deal with various insane blogging platforms.</p>
+    </li>
+</ul>
+
+<p>References</p>
+
+<ol>
+    <li><a name="Reference1" id="Reference1"></a><a title="Back to text" href="#BackReference1">↑</a> This is reference text.</li>
+</ol>
+            <a name="seealsobookmark"></a>
+            
+        </div>
+        
+        <div id="pagefooter">
+            
+        </div>
+        
+    </div>
+    <div id=nonscrollingpagefooter>&copy;ActiveMesa, 2012. All Rights Reserved.</div>
+</body>
+</html>

doc/build/Default/ftsindex.js

     aFileTitles["3"] = "What Is Rasterization?"
     aFiles["4"] = "Markup Rendering.html"
     aFileTitles["4"] = "Markup Rendering"
-    aFiles["5"] = "Default.hhc"
-    aFileTitles["5"] = "(empty title)"
-    aFiles["6"] = "Default.hhk"
+    aFiles["5"] = "Features.html"
+    aFileTitles["5"] = "Features"
+    aFiles["6"] = "Default.hhc"
     aFileTitles["6"] = "(empty title)"
-    aFiles["7"] = "Default.hhp"
+    aFiles["7"] = "Default.hhk"
     aFileTitles["7"] = "(empty title)"
-    aFiles["8"] = "webframe.html"
+    aFiles["8"] = "Default.hhp"
     aFileTitles["8"] = "(empty title)"
-    aFiles["9"] = "webindex.html"
+    aFiles["9"] = "webframe.html"
     aFileTitles["9"] = "(empty title)"
-    aFiles["10"] = "webnav.html"
+    aFiles["10"] = "webindex.html"
     aFileTitles["10"] = "(empty title)"
-    aFiles["11"] = "webtoc.html"
+    aFiles["11"] = "webnav.html"
     aFileTitles["11"] = "(empty title)"
-    aFiles["12"] = "websearch.html"
+    aFiles["12"] = "webtoc.html"
     aFileTitles["12"] = "(empty title)"
-    aFiles["13"] = "webblank.html"
+    aFiles["13"] = "websearch.html"
     aFileTitles["13"] = "(empty title)"
-    aFiles["14"] = "webfavorites.html"
+    aFiles["14"] = "webblank.html"
     aFileTitles["14"] = "(empty title)"
-    aFiles["15"] = "webtoolbar.html"
+    aFiles["15"] = "webfavorites.html"
     aFileTitles["15"] = "(empty title)"
+    aFiles["16"] = "webtoolbar.html"
+    aFileTitles["16"] = "(empty title)"
 
     // stopwords
     aStopWords["_introduction"] = "1"
     aStopWords["_welcome"] = "1"
-    aStopWords["_typografix"] = "1,2,3"
+    aStopWords["_typografix"] = "1,2,3,5"
     aStopWords["_you’re"] = "1,2"
     aStopWords["_reading"] = "1"
     aStopWords["_probably"] = "1,2,3,4"
     aStopWords["_“"] = "1"
     aStopWords["_wth"] = "1"
     aStopWords["_did"] = "1"
-    aStopWords["_just"] = "1,2,4"
+    aStopWords["_just"] = "1,2,4,5"
     aStopWords["_download"] = "1"
     aStopWords["_”"] = "1"
     aStopWords["_can’t"] = "1,2,4"
     aStopWords["_impression"] = "1"
     aStopWords["_however"] = "1,2,4"
     aStopWords["_bear"] = "1"
-    aStopWords["_with"] = "1,2,4"
+    aStopWords["_with"] = "1,2,4,5"
     aStopWords["_me"] = "1,4"
     aStopWords["_i’ll"] = "1"
     aStopWords["_explain"] = "1"
     aStopWords["_problem"] = "1"
     aStopWords["_write"] = "1"
     aStopWords["_articles"] = "1"
-    aStopWords["_lots"] = "1"
-    aStopWords["_them"] = "1"
+    aStopWords["_lots"] = "1,5"
+    aStopWords["_them"] = "1,5"
     aStopWords["_blog"] = "1"
     aStopWords["_posts"] = "1"
     aStopWords["_official"] = "1"
     aStopWords["_isn’t"] = "1,2"
     aStopWords["_single"] = "1"
     aStopWords["_app"] = "1"
-    aStopWords["_use"] = "1,2,4"
+    aStopWords["_use"] = "1,2,4,5"
     aStopWords["_situations"] = "1"
-    aStopWords["_get"] = "1,4"
+    aStopWords["_get"] = "1,4,5"
     aStopWords["_my"] = "1,2,3,4"
     aStopWords["_typography"] = "1"
-    aStopWords["_mark-up"] = "1,4"
+    aStopWords["_mark-up"] = "1,4,5"
     aStopWords["_right"] = "1,4"
     aStopWords["_started"] = "1"
     aStopWords["_very"] = "1,3"
     aStopWords["_simple"] = "1"
     aStopWords["_things"] = "1,2"
     aStopWords["_course"] = "1"
-    aStopWords["_like"] = "1,3"
+    aStopWords["_like"] = "1,3,5"
     aStopWords["_being"] = "1"
     aStopWords["_able"] = "1"
     aStopWords["_put"] = "1"
     aStopWords["_‘"] = "1"
     aStopWords["_quotes’"] = "1"
-    aStopWords["_double"] = "1"
-    aStopWords["_quotes"] = "1"
+    aStopWords["_double"] = "1,5"
+    aStopWords["_quotes"] = "1,5"
     aStopWords["_correctly"] = "1"
     aStopWords["_kind"] = "1"
     aStopWords["_grew"] = "1"
     aStopWords["_low-hanging"] = "1"
     aStopWords["_fruit"] = "1"
     aStopWords["_getting"] = "1"
-    aStopWords["_text"] = "1,2,4"
+    aStopWords["_text"] = "1,2,4,5"
     aStopWords["_mind"] = "1,2"
     aStopWords["_say"] = "1"
     aStopWords["_right’"] = "1"
     aStopWords["_mean"] = "1"
     aStopWords["_me’"] = "1"
     aStopWords["_because"] = "1,2,3"
-    aStopWords["_might"] = "1"
+    aStopWords["_might"] = "1,5"
     aStopWords["_disagree"] = "1"
     aStopWords["_exact"] = "1"
-    aStopWords["_way"] = "1,2"
-    aStopWords["_which"] = "1,2,3"
+    aStopWords["_way"] = "1,2,5"
+    aStopWords["_which"] = "1,2,3,5"
     aStopWords["_quotes-within"] = "1"
     aStopWords["_should"] = "1,2"
     aStopWords["_handled"] = "1"
     aStopWords["_specific"] = "1"
     aStopWords["_operations"] = "1"
     aStopWords["_i’ve"] = "1"
-    aStopWords["_may"] = "1"
+    aStopWords["_may"] = "1,5"
     aStopWords["_help"] = "1"
     aStopWords["_sure"] = "1"
     aStopWords["_interesting"] = "1"
     aStopWords["_inclined"] = "1"
     aStopWords["_separate"] = "1,4"
     aStopWords["_into"] = "1,3"
-    aStopWords["_following"] = "1,2,4"
+    aStopWords["_following"] = "1,2,4,5"
     aStopWords["_processing"] = "1,2"
     aStopWords["_such"] = "1,2,3,4"
     aStopWords["_structural"] = "1"
     aStopWords["_numbered"] = "1"
     aStopWords["_headings"] = "1,4"
     aStopWords["_source"] = "1,2"
-    aStopWords["_code"] = "1"
-    aStopWords["_rendering"] = "1,4"
+    aStopWords["_code"] = "1,5"
+    aStopWords["_rendering"] = "1,4,5"
     aStopWords["_gets"] = "1"
-    aStopWords["_special"] = "1"
+    aStopWords["_special"] = "1,5"
     aStopWords["_sites"] = "1"
     aStopWords["_accept"] = "1"
     aStopWords["_nothing"] = "1"
-    aStopWords["_font"] = "1,4"
+    aStopWords["_font"] = "1,4,5"
     aStopWords["_tag"] = "1"
     aStopWords["_whereas"] = "1"
     aStopWords["_others"] = "1"
     aStopWords["_require"] = "1,2"
     aStopWords["_images"] = "1"
     aStopWords["_several"] = "1"
-    aStopWords["_options"] = "1,3"
+    aStopWords["_options"] = "1,3,5"
     aStopWords["_here"] = "1,3,4"
     aStopWords["_variety"] = "1"
     aStopWords["_ways"] = "1,4"
     aStopWords["_note"] = "1"
     aStopWords["_subject"] = "1"
-    aStopWords["_e"] = "1,4"
-    aStopWords["_g"] = "1,4"
+    aStopWords["_e"] = "1,4,5"
+    aStopWords["_g"] = "1,4,5"
     aStopWords["_line"] = "1"
     aStopWords["_becomes"] = "1"
     aStopWords["_vertical"] = "1"
     aStopWords["_ellipsis"] = "1"
-    aStopWords["_rasterization"] = "1,3,4"
+    aStopWords["_rasterization"] = "1,3,4,5"
     aStopWords["_concerns"] = "1"
     aStopWords["_rendered"] = "1,4"
     aStopWords["_bitmaps"] = "1"
     aStopWords["_could"] = "1"
     aStopWords["_only"] = "1,2,4"
     aStopWords["_remember"] = "1"
-    aStopWords["_features"] = "1"
+    aStopWords["_features"] = "1,5"
     aStopWords["_document"] = "1,2"
     aStopWords["_contains"] = "1,2"
     aStopWords["_instructions"] = "1"
     aStopWords["_building"] = "2"
     aStopWords["_from"] = "2"
     aStopWords["_order"] = "2,3"
-    aStopWords["_need"] = "2"
+    aStopWords["_need"] = "2,5"
     aStopWords["_windows"] = "2"
     aStopWords["_vista"] = "2"
     aStopWords["_later"] = "2"
     aStopWords["_studio"] = "2"
     aStopWords["_c"] = "2,3"
     aStopWords["_#"] = "2"
-    aStopWords["_support"] = "2,3,4"
+    aStopWords["_support"] = "2,3,4,5"
     aStopWords["_intel"] = "2"
     aStopWords["_parallel"] = "2"
     aStopWords["_directx"] = "2"
     aStopWords["_free"] = "2"
     aStopWords["_project"] = "2"
     aStopWords["_configurations"] = "2"
-    aStopWords["_do"] = "2,3,4"
+    aStopWords["_do"] = "2,3,4,5"
     aStopWords["_portion"] = "2"
     aStopWords["_rebuilt"] = "2"
     aStopWords["_focus"] = "2"
     aStopWords["_doesn’t"] = "2,3"
     aStopWords["_open"] = "2"
     aStopWords["_ignore"] = "2"
-    aStopWords["_–"] = "2,4"
+    aStopWords["_–"] = "2,4,5"
     aStopWords["_pick"] = "2"
     aStopWords["_configuration"] = "2"
     aStopWords["_compile"] = "2"
     aStopWords["_algorithms"] = "2"
     aStopWords["_back"] = "2"
     aStopWords["_was"] = "2"
-    aStopWords["_using"] = "2"
+    aStopWords["_using"] = "2,5"
     aStopWords["_unity"] = "2"
     aStopWords["_somewhat"] = "2"
     aStopWords["_misguidedly"] = "2"
     aStopWords["_tests"] = "2"
     aStopWords["_unit"] = "2"
     aStopWords["_primarily"] = "2"
-    aStopWords["_those"] = "2"
+    aStopWords["_those"] = "2,5"
     aStopWords["_related"] = "2"
     aStopWords["_verification"] = "2"
     aStopWords["_successful"] = "2"
     aStopWords["_is"] = "3"
     aStopWords["_process"] = "3"
     aStopWords["_turning"] = "3"
-    aStopWords["_something"] = "3"
+    aStopWords["_something"] = "3,5"
     aStopWords["_semantically"] = "3"
     aStopWords["_parseable"] = "3"
     aStopWords["_many"] = "3"
     aStopWords["_reasons"] = "3"
-    aStopWords["_include"] = "3"
+    aStopWords["_include"] = "3,5"
     aStopWords["_obfuscation"] = "3"
     aStopWords["_protection"] = "3"
     aStopWords["_content"] = "3"
     aStopWords["_quickly"] = "3"
     aStopWords["_possible"] = "3"
     aStopWords["_ymmv"] = "3"
-    aStopWords["_come"] = "3"
+    aStopWords["_come"] = "3,5"
     aStopWords["_would"] = "3,4"
     aStopWords["_output"] = "3"
     aStopWords["_format"] = "3,4"
     aStopWords["_trashy"] = "3"
     aStopWords["_ones"] = "3"
     aStopWords["_jpg"] = "3"
-    aStopWords["_markup"] = "4"
+    aStopWords["_markup"] = "4,5"
     aStopWords["_poorly"] = "4"
     aStopWords["_kept"] = "4"
     aStopWords["_secret"] = "4"
     aStopWords["_sucks"] = "4"
     aStopWords["_kerning"] = "4"
     aStopWords["_ligatures"] = "4"
-    aStopWords["_opentype"] = "4"
+    aStopWords["_opentype"] = "4,5"
     aStopWords["_feature"] = "4"
     aStopWords["_renderes"] = "4"
     aStopWords["_modern"] = "4"
     aStopWords["_let"] = "4"
     aStopWords["_rasterized"] = "4"
     aStopWords["_opposed"] = "4"
-    aStopWords["_automatic"] = "4"
+    aStopWords["_automatic"] = "4,5"
     aStopWords["_two"] = "4"
     aStopWords["_accomplish"] = "4"
     aStopWords["_rasterizer"] = "4"
     aStopWords["_tab"] = "4"
-    aStopWords["_inline"] = "4"
+    aStopWords["_inline"] = "4,5"
     aStopWords["_simply"] = "4"
     aStopWords["_typing"] = "4"
     aStopWords["_delimeters"] = "4"
     aStopWords["_appear"] = "4"
     aStopWords["_specification"] = "4"
-    aStopWords["_type"] = "4"
+    aStopWords["_type"] = "4,5"
     aStopWords["_itself"] = "4"
     aStopWords["_passed"] = "4"
     aStopWords["_square"] = "4"
     aStopWords["_will"] = "4"
     aStopWords["_word"] = "4"
     aStopWords["_30-pt"] = "4"
-    aStopWords["_italic"] = "4"
+    aStopWords["_italic"] = "4,5"
     aStopWords["_closing"] = "4"
     aStopWords["_statements"] = "4"
     aStopWords["_without"] = "4"
     aStopWords["_non-exhaustive"] = "4"
     aStopWords["_list"] = "4"
     aStopWords["_specifiers"] = "4"
-    aStopWords["_size"] = "4"
+    aStopWords["_size"] = "4,5"
     aStopWords["_specified"] = "4"
     aStopWords["_points"] = "4"
     aStopWords["_integer"] = "4"
     aStopWords["_family"] = "4"
     aStopWords["_writing"] = "4"
     aStopWords["_examplee"] = "4"
-    aStopWords["_octava"] = "4"
+    aStopWords["_octava"] = "4,5"
     aStopWords["_right-alignment"] = "4"
     aStopWords["_sentences"] = "4"
     aStopWords["_keyword"] = "4"
     aStopWords["_basic"] = "4"
     aStopWords["_b"] = "4"
-    aStopWords["_bold"] = "4"
+    aStopWords["_bold"] = "4,5"
     aStopWords["_em"] = "4"
     aStopWords["_emphasis"] = "4"
-    aStopWords["_sw"] = "4"
+    aStopWords["_sw"] = "4,5"
     aStopWords["_swash"] = "4"
     aStopWords["_work"] = "4"
+    aStopWords["_outline"] = "5"
+    aStopWords["_supports"] = "5"
+    aStopWords["_backquotes"] = "5"
+    aStopWords["_mtg"] = "5"
+    aStopWords["_symbols"] = "5"
+    aStopWords["_listings"] = "5"
+    aStopWords["_surround"] = "5"
+    aStopWords["_static"] = "5"
+    aStopWords["_void"] = "5"
+    aStopWords["_main"] = "5"
+    aStopWords["_string"] = "5"
+    aStopWords["_args"] = "5"
+    aStopWords["_foo"] = "5"
+    aStopWords["_references"] = "5"
+    aStopWords["_reference"] = "5"
+    aStopWords["_twitter"] = "5"
+    aStopWords["_activemesa"] = "5"
+    aStopWords["_angled"] = "5"
+    aStopWords["_freeform"] = "5"
+    aStopWords["_lanuage"] = "5"
+    aStopWords["_braces"] = "5"
+    aStopWords["_around"] = "5"
+    aStopWords["_names"] = "5"
+    aStopWords["_etc"] = "5"
+    aStopWords["_handy"] = "5"
+    aStopWords["_lame"] = "5"
+    aStopWords["_blogging"] = "5"
+    aStopWords["_platforms"] = "5"
+    aStopWords["_decent"] = "5"
+    aStopWords["_micromanagement"] = "5"
+    aStopWords["_deal"] = "5"
+    aStopWords["_various"] = "5"
+    aStopWords["_insane"] = "5"
+    aStopWords["_↑"] = "5"
 }

doc/build/Default/helpcompilerlog.txt

--- Compile started at Tuesday, 29 May 2012 11:25:34
+-- Compile started at Thursday, 30 August 2012 07:49:52
 Microsoft HTML Help Compiler 4.74.8702
 
 Compiling c:\Dropbox\Projects\Open-Source\TypograFix\doc\Default.chm
 Building from Source.html
 WhatIsRasterization.html
 Markup Rendering.html
+Features.html
 Default.hhc
 Default.hhk
 
 Compile time: 0 minutes, 0 seconds
-6	Topics
-16	Local links
-1	Internet link
+7	Topics
+20	Local links
+6	Internet links
 0	Graphics
 
 
-Created c:\Dropbox\Projects\Open-Source\TypograFix\doc\Default.chm, 66,277 bytes
-Compression decreased file by 124,859 bytes.
+Created c:\Dropbox\Projects\Open-Source\TypograFix\doc\Default.chm, 67,917 bytes
+Compression decreased file by 130,204 bytes.
 
--- Compile completed on 05/29/2012 11:25:35
+-- Compile completed on 08/30/2012 07:49:52

doc/build/Default/webindex.html

     <a target="webcontent" href="Building from Source.html">Building from Source</a>
 <br />
 
+<a target="webcontent" href="Features.html">Features</a>
+<br />
+
 <a target="webcontent" href="Introduction.html">Introduction</a>
 <br />
 

doc/build/Default/webtoc.html

                     <ul id="tocroot" class="toc">
                         <li class="tbc" icon="-1" isnew="False"><a href="Introduction.html"><img class="icon"/><span class="nodetext">Introduction</span></a>
 <li class="tbc" icon="-1" isnew="False"><a href="Building from Source.html"><img class="icon"/><span class="nodetext">Building from Source</span></a>
+<li class="tbc" icon="-1" isnew="False"><a href="Features.html"><img class="icon"/><span class="nodetext">Features</span></a>
 <li class="tbc" icon="-1"><a href="#" target="lbottom"><img class="icon"/><span class="nodetext">Rasterization</span></a>
 <ul class='tbc'>
 <li class="tbc" icon="-1" isnew="False"><a href="WhatIsRasterization.html"><img class="icon"/><span class="nodetext">What Is Rasterization?</span></a>

installer/TypograFix-cache/part1/disk1.cab

Binary file modified.

installer/TypograFix-cache/part1/output-info.ini

Binary file modified.

installer/TypograFix.aip

 <?xml version="1.0" encoding="UTF-8" standalone="yes"?>
 <DOCUMENT Type="Advanced Installer" CreateVersion="9.4" version="9.4" Modules="architect" RootPath="." Language="en" Id="{76FA2768-E6F6-461E-AFF8-4082EBE1DDD9}">
+  <COMPONENT cid="caphyon.advinst.msicomp.MsiValidationComponent">
+    <ROW Table="File" Column="Sequence" MinValue="1" MaxValue="32767" Description="Sequence with respect to the media images; order must track cabinet order." Options="0" ColumnType="2" ColumnIndex="7" ColumnSize="2" MsiKey="File#Sequence"/>
+    <ROW Table="Media" Column="LastSequence" MinValue="0" MaxValue="32767" Description="File sequence number for the last file for this media." Options="0" ColumnType="2" ColumnIndex="1" ColumnSize="2" MsiKey="Media#LastSequence"/>
+  </COMPONENT>
   <COMPONENT cid="caphyon.advinst.msicomp.MsiPropsComponent">
     <ROW Property="AI_FINDEXE_TITLE" Value="Select the installation package for [|ProductName]" ValueLocId="AI.Property.FindExeTitle"/>
     <ROW Property="ALLUSERS" Value="1"/>
   </COMPONENT>
   <COMPONENT cid="caphyon.advinst.msicomp.MsiDirsComponent">
     <ROW Directory="APPDIR" Directory_Parent="TARGETDIR" DefaultDir="APPDIR:." IsPseudoRoot="1"/>
+    <ROW Directory="Default_Dir" Directory_Parent="APPDIR" DefaultDir="docs"/>
+    <ROW Directory="SHORTCUTDIR" Directory_Parent="TARGETDIR" DefaultDir="SHORTC~1|SHORTCUTDIR" IsPseudoRoot="1"/>
     <ROW Directory="TARGETDIR" DefaultDir="SourceDir"/>
+    <ROW Directory="flash_Dir" Directory_Parent="Default_Dir" DefaultDir="flash"/>
+    <ROW Directory="images_Dir" Directory_Parent="Default_Dir" DefaultDir="images"/>
+    <ROW Directory="script_Dir" Directory_Parent="Default_Dir" DefaultDir="script"/>
+    <ROW Directory="stylesheets_Dir" Directory_Parent="Default_Dir" DefaultDir="styles~1|stylesheets"/>
+    <ROW Directory="toolbar_Dir" Directory_Parent="images_Dir" DefaultDir="toolbar"/>
+    <ROW Directory="webimages_Dir" Directory_Parent="Default_Dir" DefaultDir="webima~1|webimages"/>
   </COMPONENT>
   <COMPONENT cid="caphyon.advinst.msicomp.MsiCompsComponent">
     <ROW Component="AI_ExePath" ComponentId="{9E82347D-7712-4E90-B1AD-E6DDF128BEEC}" Directory_="APPDIR" Attributes="4" KeyPath="AI_ExePath"/>
+    <ROW Component="BuildingfromSource.html" ComponentId="{7DA26D83-1CD4-4DE5-9D94-410839F10893}" Directory_="Default_Dir" Attributes="0" KeyPath="BuildingfromSource.html" Type="0"/>
     <ROW Component="Microsoft.Msagl.Drawing.dll" ComponentId="{5A376D57-7D74-4D7F-8087-8DBDC97AD300}" Directory_="APPDIR" Attributes="0" KeyPath="Microsoft.Msagl.Drawing.dll"/>
     <ROW Component="Microsoft.Msagl.GraphViewerGdi.dll" ComponentId="{D1465746-86BD-4CC5-8536-A00F50B75819}" Directory_="APPDIR" Attributes="0" KeyPath="Microsoft.Msagl.GraphViewerGdi.dll"/>
     <ROW Component="Microsoft.Msagl.dll" ComponentId="{B51FD8A3-AD4A-4268-938C-682E99765A2A}" Directory_="APPDIR" Attributes="0" KeyPath="Microsoft.Msagl.dll"/>
     <ROW Component="Microsoft.Practices.ServiceLocation.dll" ComponentId="{0ED259F4-980F-4843-9E12-5752037DA411}" Directory_="APPDIR" Attributes="0" KeyPath="Microsoft.Practices.ServiceLocation.dll"/>
     <ROW Component="Microsoft.Practices.Unity.Configuration." ComponentId="{928678B8-E391-47DB-8914-56043FEFA3ED}" Directory_="APPDIR" Attributes="0" KeyPath="Microsoft.Practices.Unity.Configuration.dll"/>
     <ROW Component="Microsoft.Practices.Unity.dll" ComponentId="{7C529984-88F9-4C6D-B5EA-CFFC0C82EAE0}" Directory_="APPDIR" Attributes="0" KeyPath="Microsoft.Practices.Unity.dll"/>
-    <ROW Component="Microsoft.WindowsAPICodePack.DirectX.dll" ComponentId="{60075135-5434-400F-97E5-0739B51B6892}" Directory_="APPDIR" Attributes="256" KeyPath="Microsoft.WindowsAPICodePack.DirectX.dll"/>
     <ROW Component="ProductInformation" ComponentId="{B5BE2DE2-54D3-4807-8E7B-97F2F6E4F13F}" Directory_="APPDIR" Attributes="4" KeyPath="Version"/>
+    <ROW Component="SHORTCUTDIR" ComponentId="{6E057BA7-FE06-4CA0-9CDB-809C293D9E54}" Directory_="SHORTCUTDIR" Attributes="0"/>
     <ROW Component="ServiceStack.Text.dll" ComponentId="{21AD665E-C8CC-4739-91C4-2F612480E29B}" Directory_="APPDIR" Attributes="0" KeyPath="ServiceStack.Text.dll"/>
     <ROW Component="SgmlReaderDll.dll" ComponentId="{0975B6AF-23E9-4F46-BE9F-D4DCF472FBCF}" Directory_="APPDIR" Attributes="0" KeyPath="SgmlReaderDll.dll"/>
     <ROW Component="System.Windows.Controls.WpfPropertyGri_1" ComponentId="{2BA2D0CC-5B0E-4486-A3D2-EF8DE9B92D98}" Directory_="APPDIR" Attributes="0" KeyPath="System.Windows.Controls.WpfPropertyGrid.Themes.dll"/>
     <ROW Component="TypograFix.exe" ComponentId="{434868AF-7782-4E28-880D-FC1BD261C2AC}" Directory_="APPDIR" Attributes="256" KeyPath="TypograFix.exe"/>
     <ROW Component="TypograFix.exe.manifest" ComponentId="{299AC506-6B72-462A-B42D-B9A3BF7187F7}" Directory_="APPDIR" Attributes="0" KeyPath="TypograFix.exe.manifest" Type="0"/>
     <ROW Component="Typografix.Bitmap.dll" ComponentId="{CE958D81-0794-4DBB-8C06-F19D0A166ED9}" Directory_="APPDIR" Attributes="256" KeyPath="Typografix.Bitmap.dll"/>
+    <ROW Component="addtofavorites.gif" ComponentId="{FCA59EF2-167C-4420-B472-0675BD8D449E}" Directory_="toolbar_Dir" Attributes="0" KeyPath="addtofavorites.gif" Type="0"/>
+    <ROW Component="collapse.gif" ComponentId="{B52D72CE-3FFE-42AE-96F8-80684F2B5947}" Directory_="images_Dir" Attributes="0" KeyPath="collapse.gif" Type="0"/>
+    <ROW Component="customstyles.css" ComponentId="{BE631040-B3E7-4A50-9AA7-8802218531C6}" Directory_="stylesheets_Dir" Attributes="0" KeyPath="customstyles.css" Type="0"/>
+    <ROW Component="expressinstall.swf" ComponentId="{B8FF9968-FE56-4D52-996C-9B0CBFB076FE}" Directory_="flash_Dir" Attributes="0" KeyPath="expressinstall.swf" Type="0"/>
+    <ROW Component="fts.js" ComponentId="{D9CB34EF-A20C-4BB0-80EC-63CC4F869648}" Directory_="script_Dir" Attributes="0" KeyPath="fts.js" Type="0"/>
+    <ROW Component="gif" ComponentId="{D0164460-5D53-4BDE-A5D8-3C8AB4B65D68}" Directory_="webimages_Dir" Attributes="0" KeyPath="gif" Type="0"/>
   </COMPONENT>
   <COMPONENT cid="caphyon.advinst.msicomp.MsiFeatsComponent">
-    <ROW Feature="MainFeature" Title="MainFeature" Description="Description" Display="1" Level="1" Directory_="APPDIR" Attributes="0" Components="AI_ExePath Microsoft.Msagl.Drawing.dll Microsoft.Msagl.GraphViewerGdi.dll Microsoft.Msagl.dll Microsoft.Practices.ServiceLocation.dll Microsoft.Practices.Unity.Configuration. Microsoft.Practices.Unity.dll Microsoft.WindowsAPICodePack.DirectX.dll ProductInformation ServiceStack.Text.dll SgmlReaderDll.dll System.Windows.Controls.WpfPropertyGri_1 System.Windows.Controls.WpfPropertyGrid. TypograFix.Common.dll TypograFix.Impl.dll TypograFix.exe TypograFix.exe.manifest Typografix.Bitmap.dll"/>
+    <ROW Feature="MainFeature" Title="MainFeature" Description="Description" Display="1" Level="1" Directory_="APPDIR" Attributes="0" Components="AI_ExePath BuildingfromSource.html Microsoft.Msagl.Drawing.dll Microsoft.Msagl.GraphViewerGdi.dll Microsoft.Msagl.dll Microsoft.Practices.ServiceLocation.dll Microsoft.Practices.Unity.Configuration. Microsoft.Practices.Unity.dll ProductInformation SHORTCUTDIR ServiceStack.Text.dll SgmlReaderDll.dll System.Windows.Controls.WpfPropertyGri_1 System.Windows.Controls.WpfPropertyGrid. TypograFix.Common.dll TypograFix.Impl.dll TypograFix.exe TypograFix.exe.manifest Typografix.Bitmap.dll addtofavorites.gif collapse.gif customstyles.css expressinstall.swf fts.js gif"/>
     <ATTRIBUTE name="CurrentFeature" value="MainFeature"/>
   </COMPONENT>
   <COMPONENT cid="caphyon.advinst.msicomp.MsiFilesComponent">
+    <ROW File="BuildingfromSource.html" Component_="BuildingfromSource.html" FileName="Buildi~1.htm|Building from Source.html" Attributes="0" SourcePath="..\doc\build\Default\Building from Source.html" SelfReg="false" NextFile="Default.hhc"/>
+    <ROW File="Default.hhc" Component_="BuildingfromSource.html" FileName="Default.hhc" Attributes="0" SourcePath="..\doc\build\Default\Default.hhc" SelfReg="false" NextFile="Default.hhk"/>
+    <ROW File="Default.hhk" Component_="BuildingfromSource.html" FileName="Default.hhk" Attributes="0" SourcePath="..\doc\build\Default\Default.hhk" SelfReg="false" NextFile="Default.hhp"/>
+    <ROW File="Default.hhp" Component_="BuildingfromSource.html" FileName="Default.hhp" Attributes="0" SourcePath="..\doc\build\Default\Default.hhp" SelfReg="false" NextFile="Features.html"/>
+    <ROW File="Features.html" Component_="BuildingfromSource.html" FileName="Featur~1.htm|Features.html" Attributes="0" SourcePath="..\doc\build\Default\Features.html" SelfReg="false" NextFile="expressinstall.swf"/>
+    <ROW File="Introduction.html" Component_="BuildingfromSource.html" FileName="Introd~1.htm|Introduction.html" Attributes="0" SourcePath="..\doc\build\Default\Introduction.html" SelfReg="false" NextFile="MarkupRendering.html"/>
+    <ROW File="MarkupRendering.html" Component_="BuildingfromSource.html" FileName="Markup~1.htm|Markup Rendering.html" Attributes="0" SourcePath="..\doc\build\Default\Markup Rendering.html" SelfReg="false" NextFile="fts.js"/>
     <ROW File="Microsoft.Msagl.Drawing.dll" Component_="Microsoft.Msagl.Drawing.dll" FileName="Micros~2.dll|Microsoft.Msagl.Drawing.dll" Attributes="0" SourcePath="..\bin\Microsoft.Msagl.Drawing.dll" SelfReg="false" NextFile="Microsoft.Msagl.GraphViewerGdi.dll"/>
     <ROW File="Microsoft.Msagl.GraphViewerGdi.dll" Component_="Microsoft.Msagl.GraphViewerGdi.dll" FileName="Micros~3.dll|Microsoft.Msagl.GraphViewerGdi.dll" Attributes="0" SourcePath="..\bin\Microsoft.Msagl.GraphViewerGdi.dll" SelfReg="false" NextFile="Microsoft.Practices.ServiceLocation.dll"/>
     <ROW File="Microsoft.Msagl.dll" Component_="Microsoft.Msagl.dll" FileName="Micros~1.dll|Microsoft.Msagl.dll" Attributes="0" SourcePath="..\bin\Microsoft.Msagl.dll" SelfReg="false" NextFile="Microsoft.Msagl.Drawing.dll"/>
     <ROW File="Microsoft.Practices.ServiceLocation.dll" Component_="Microsoft.Practices.ServiceLocation.dll" FileName="Micros~4.dll|Microsoft.Practices.ServiceLocation.dll" Attributes="0" SourcePath="..\bin\Microsoft.Practices.ServiceLocation.dll" SelfReg="false" NextFile="Microsoft.Practices.Unity.Configuration.dll"/>
     <ROW File="Microsoft.Practices.Unity.Configuration.dll" Component_="Microsoft.Practices.Unity.Configuration." FileName="Micros~5.dll|Microsoft.Practices.Unity.Configuration.dll" Attributes="0" SourcePath="..\bin\Microsoft.Practices.Unity.Configuration.dll" SelfReg="false" NextFile="Microsoft.Practices.Unity.dll"/>
-    <ROW File="Microsoft.Practices.Unity.dll" Component_="Microsoft.Practices.Unity.dll" FileName="Micros~6.dll|Microsoft.Practices.Unity.dll" Attributes="0" SourcePath="..\bin\Microsoft.Practices.Unity.dll" SelfReg="false" NextFile="Microsoft.WindowsAPICodePack.DirectX.dll"/>
-    <ROW File="Microsoft.WindowsAPICodePack.DirectX.dll" Component_="Microsoft.WindowsAPICodePack.DirectX.dll" FileName="Micros~7.dll|Microsoft.WindowsAPICodePack.DirectX.dll" Attributes="0" SourcePath="..\bin\Microsoft.WindowsAPICodePack.DirectX.dll" SelfReg="false" NextFile="ServiceStack.Text.dll"/>
+    <ROW File="Microsoft.Practices.Unity.dll" Component_="Microsoft.Practices.Unity.dll" FileName="Micros~6.dll|Microsoft.Practices.Unity.dll" Attributes="0" SourcePath="..\bin\Microsoft.Practices.Unity.dll" SelfReg="false" NextFile="ServiceStack.Text.dll"/>
     <ROW File="ServiceStack.Text.dll" Component_="ServiceStack.Text.dll" FileName="Servic~1.dll|ServiceStack.Text.dll" Attributes="0" SourcePath="..\bin\ServiceStack.Text.dll" SelfReg="false" NextFile="SgmlReaderDll.dll"/>
     <ROW File="SgmlReaderDll.dll" Component_="SgmlReaderDll.dll" FileName="SgmlRe~1.dll|SgmlReaderDll.dll" Attributes="0" SourcePath="..\bin\SgmlReaderDll.dll" SelfReg="false" NextFile="System.Windows.Controls.WpfPropertyGrid.dll"/>
     <ROW File="System.Windows.Controls.WpfPropertyGrid.Themes.dll" Component_="System.Windows.Controls.WpfPropertyGri_1" FileName="System~2.dll|System.Windows.Controls.WpfPropertyGrid.Themes.dll" Attributes="0" SourcePath="..\bin\System.Windows.Controls.WpfPropertyGrid.Themes.dll" SelfReg="false" NextFile="Typografix.Bitmap.dll"/>
     <ROW File="TypograFix.Common.dll" Component_="TypograFix.Common.dll" FileName="Typogr~2.dll|TypograFix.Common.dll" Attributes="0" SourcePath="..\bin\TypograFix.Common.dll" SelfReg="false" NextFile="TypograFix.exe"/>
     <ROW File="TypograFix.Impl.dll" Component_="TypograFix.Impl.dll" FileName="Typogr~3.dll|TypograFix.Impl.dll" Attributes="0" SourcePath="..\bin\TypograFix.Impl.dll" SelfReg="false" NextFile="TypograFix.exe.config"/>
     <ROW File="TypograFix.exe" Component_="TypograFix.exe" FileName="Typogr~1.exe|TypograFix.exe" Attributes="0" SourcePath="..\bin\TypograFix.exe" SelfReg="false" NextFile="TypograFix.exe.manifest"/>
-    <ROW File="TypograFix.exe.config" Component_="TypograFix.exe.manifest" FileName="Typogr~1.con|TypograFix.exe.config" Attributes="0" SourcePath="..\bin\TypograFix.exe.config" SelfReg="false"/>
+    <ROW File="TypograFix.exe.config" Component_="TypograFix.exe.manifest" FileName="Typogr~1.con|TypograFix.exe.config" Attributes="0" SourcePath="..\bin\TypograFix.exe.config" SelfReg="false" NextFile="BuildingfromSource.html"/>
     <ROW File="TypograFix.exe.manifest" Component_="TypograFix.exe.manifest" FileName="Typogr~1.man|TypograFix.exe.manifest" Attributes="0" SourcePath="..\bin\TypograFix.exe.manifest" SelfReg="false" NextFile="TypograFix.Impl.dll"/>
     <ROW File="Typografix.Bitmap.dll" Component_="Typografix.Bitmap.dll" FileName="Typogr~1.dll|Typografix.Bitmap.dll" Attributes="0" SourcePath="..\bin\Typografix.Bitmap.dll" SelfReg="false" NextFile="TypograFix.Common.dll"/>
+    <ROW File="WhatIsRasterization.html" Component_="BuildingfromSource.html" FileName="WhatIs~1.htm|WhatIsRasterization.html" Attributes="0" SourcePath="..\doc\build\Default\WhatIsRasterization.html" SelfReg="false"/>
+    <ROW File="addtofavorites.gif" Component_="addtofavorites.gif" FileName="addtof~1.gif|addtofavorites.gif" Attributes="0" SourcePath="..\doc\build\Default\images\toolbar\addtofavorites.gif" SelfReg="false" NextFile="addtofavoriteshot.gif"/>
+    <ROW File="addtofavoriteshot.gif" Component_="addtofavorites.gif" FileName="addtof~2.gif|addtofavoriteshot.gif" Attributes="0" SourcePath="..\doc\build\Default\images\toolbar\addtofavoriteshot.gif" SelfReg="false" NextFile="deletesm.gif"/>
+    <ROW File="bullet.gif" Component_="gif" FileName="bullet.gif" Attributes="0" SourcePath="..\doc\build\Default\webimages\bullet.gif" SelfReg="false" NextFile="minus.gif"/>
+    <ROW File="collapse.gif" Component_="collapse.gif" FileName="collapse.gif" Attributes="0" SourcePath="..\doc\build\Default\images\collapse.gif" SelfReg="false" NextFile="copycode.gif"/>
+    <ROW File="copycode.gif" Component_="collapse.gif" FileName="copycode.gif" Attributes="0" SourcePath="..\doc\build\Default\images\copycode.gif" SelfReg="false" NextFile="copycodeHighlight.gif"/>
+    <ROW File="copycodeHighlight.gif" Component_="collapse.gif" FileName="copyco~1.gif|copycodeHighlight.gif" Attributes="0" SourcePath="..\doc\build\Default\images\copycodeHighlight.gif" SelfReg="false" NextFile="drpdown.gif"/>
+    <ROW File="customstyles.css" Component_="customstyles.css" FileName="custom~1.css|customstyles.css" Attributes="0" SourcePath="..\doc\build\Default\stylesheets\customstyles.css" SelfReg="false" NextFile="helpstudio.css"/>
+    <ROW File="deletesm.gif" Component_="addtofavorites.gif" FileName="deletesm.gif" Attributes="0" SourcePath="..\doc\build\Default\images\toolbar\deletesm.gif" SelfReg="false" NextFile="favorites.gif"/>
+    <ROW File="drpdown.gif" Component_="collapse.gif" FileName="drpdown.gif" Attributes="0" SourcePath="..\doc\build\Default\images\drpdown.gif" SelfReg="false" NextFile="drpdown_orange.gif"/>
+    <ROW File="drpdown_orange.gif" Component_="collapse.gif" FileName="drpdow~1.gif|drpdown_orange.gif" Attributes="0" SourcePath="..\doc\build\Default\images\drpdown_orange.gif" SelfReg="false" NextFile="expand.gif"/>
+    <ROW File="expand.gif" Component_="collapse.gif" FileName="expand.gif" Attributes="0" SourcePath="..\doc\build\Default\images\expand.gif" SelfReg="false" NextFile="gradient.png"/>
+    <ROW File="expressinstall.swf" Component_="expressinstall.swf" FileName="expres~1.swf|expressinstall.swf" Attributes="0" SourcePath="..\doc\build\Default\flash\expressinstall.swf" SelfReg="false" NextFile="ftsindex.js"/>
+    <ROW File="favorites.gif" Component_="addtofavorites.gif" FileName="favori~1.gif|favorites.gif" Attributes="0" SourcePath="..\doc\build\Default\images\toolbar\favorites.gif" SelfReg="false" NextFile="favoriteshot.gif"/>
+    <ROW File="favoriteshot.gif" Component_="addtofavorites.gif" FileName="favori~2.gif|favoriteshot.gif" Attributes="0" SourcePath="..\doc\build\Default\images\toolbar\favoriteshot.gif" SelfReg="false" NextFile="index.gif"/>
+    <ROW File="fts.js" Component_="fts.js" FileName="fts.js" Attributes="0" SourcePath="..\doc\build\Default\script\fts.js" SelfReg="false" NextFile="helpstudio.js"/>
+    <ROW File="ftsindex.js" Component_="BuildingfromSource.html" FileName="ftsindex.js" Attributes="0" SourcePath="..\doc\build\Default\ftsindex.js" SelfReg="false" NextFile="helpcompilerlog.txt"/>
+    <ROW File="gif" Component_="gif" FileName="-1.gif" Attributes="0" SourcePath="..\doc\build\Default\webimages\-1.gif" SelfReg="false" NextFile="gif_48"/>
+    <ROW File="gif_48" Component_="gif" FileName="0.gif" Attributes="0" SourcePath="..\doc\build\Default\webimages\0.gif" SelfReg="false" NextFile="gif_49"/>
+    <ROW File="gif_49" Component_="gif" FileName="1.gif" Attributes="0" SourcePath="..\doc\build\Default\webimages\1.gif" SelfReg="false" NextFile="gif_50"/>
+    <ROW File="gif_50" Component_="gif" FileName="10.gif" Attributes="0" SourcePath="..\doc\build\Default\webimages\10.gif" SelfReg="false" NextFile="gif_51"/>
+    <ROW File="gif_51" Component_="gif" FileName="11.gif" Attributes="0" SourcePath="..\doc\build\Default\webimages\11.gif" SelfReg="false" NextFile="gif_52"/>
+    <ROW File="gif_52" Component_="gif" FileName="12.gif" Attributes="0" SourcePath="..\doc\build\Default\webimages\12.gif" SelfReg="false" NextFile="gif_53"/>
+    <ROW File="gif_53" Component_="gif" FileName="13.gif" Attributes="0" SourcePath="..\doc\build\Default\webimages\13.gif" SelfReg="false" NextFile="gif_54"/>
+    <ROW File="gif_54" Component_="gif" FileName="14.gif" Attributes="0" SourcePath="..\doc\build\Default\webimages\14.gif" SelfReg="false" NextFile="gif_55"/>
+    <ROW File="gif_55" Component_="gif" FileName="15.gif" Attributes="0" SourcePath="..\doc\build\Default\webimages\15.gif" SelfReg="false" NextFile="gif_56"/>
+    <ROW File="gif_56" Component_="gif" FileName="16.gif" Attributes="0" SourcePath="..\doc\build\Default\webimages\16.gif" SelfReg="false" NextFile="gif_57"/>
+    <ROW File="gif_57" Component_="gif" FileName="17.gif" Attributes="0" SourcePath="..\doc\build\Default\webimages\17.gif" SelfReg="false" NextFile="gif_58"/>
+    <ROW File="gif_58" Component_="gif" FileName="18.gif" Attributes="0" SourcePath="..\doc\build\Default\webimages\18.gif" SelfReg="false" NextFile="gif_59"/>
+    <ROW File="gif_59" Component_="gif" FileName="19.gif" Attributes="0" SourcePath="..\doc\build\Default\webimages\19.gif" SelfReg="false" NextFile="gif_60"/>
+    <ROW File="gif_60" Component_="gif" FileName="2.gif" Attributes="0" SourcePath="..\doc\build\Default\webimages\2.gif" SelfReg="false" NextFile="gif_61"/>
+    <ROW File="gif_61" Component_="gif" FileName="20.gif" Attributes="0" SourcePath="..\doc\build\Default\webimages\20.gif" SelfReg="false" NextFile="gif_62"/>
+    <ROW File="gif_62" Component_="gif" FileName="21.gif" Attributes="0" SourcePath="..\doc\build\Default\webimages\21.gif" SelfReg="false" NextFile="gif_63"/>
+    <ROW File="gif_63" Component_="gif" FileName="22.gif" Attributes="0" SourcePath="..\doc\build\Default\webimages\22.gif" SelfReg="false" NextFile="gif_64"/>
+    <ROW File="gif_64" Component_="gif" FileName="23.gif" Attributes="0" SourcePath="..\doc\build\Default\webimages\23.gif" SelfReg="false" NextFile="gif_65"/>
+    <ROW File="gif_65" Component_="gif" FileName="24.gif" Attributes="0" SourcePath="..\doc\build\Default\webimages\24.gif" SelfReg="false" NextFile="gif_66"/>
+    <ROW File="gif_66" Component_="gif" FileName="25.gif" Attributes="0" SourcePath="..\doc\build\Default\webimages\25.gif" SelfReg="false" NextFile="gif_67"/>
+    <ROW File="gif_67" Component_="gif" FileName="26.gif" Attributes="0" SourcePath="..\doc\build\Default\webimages\26.gif" SelfReg="false" NextFile="gif_68"/>
+    <ROW File="gif_68" Component_="gif" FileName="27.gif" Attributes="0" SourcePath="..\doc\build\Default\webimages\27.gif" SelfReg="false" NextFile="gif_69"/>
+    <ROW File="gif_69" Component_="gif" FileName="28.gif" Attributes="0" SourcePath="..\doc\build\Default\webimages\28.gif" SelfReg="false" NextFile="gif_70"/>
+    <ROW File="gif_70" Component_="gif" FileName="29.gif" Attributes="0" SourcePath="..\doc\build\Default\webimages\29.gif" SelfReg="false" NextFile="gif_71"/>
+    <ROW File="gif_71" Component_="gif" FileName="3.gif" Attributes="0" SourcePath="..\doc\build\Default\webimages\3.gif" SelfReg="false" NextFile="gif_72"/>
+    <ROW File="gif_72" Component_="gif" FileName="30.gif" Attributes="0" SourcePath="..\doc\build\Default\webimages\30.gif" SelfReg="false" NextFile="gif_73"/>
+    <ROW File="gif_73" Component_="gif" FileName="31.gif" Attributes="0" SourcePath="..\doc\build\Default\webimages\31.gif" SelfReg="false" NextFile="gif_74"/>
+    <ROW File="gif_74" Component_="gif" FileName="32.gif" Attributes="0" SourcePath="..\doc\build\Default\webimages\32.gif" SelfReg="false" NextFile="gif_75"/>
+    <ROW File="gif_75" Component_="gif" FileName="33.gif" Attributes="0" SourcePath="..\doc\build\Default\webimages\33.gif" SelfReg="false" NextFile="gif_76"/>
+    <ROW File="gif_76" Component_="gif" FileName="34.gif" Attributes="0" SourcePath="..\doc\build\Default\webimages\34.gif" SelfReg="false" NextFile="gif_77"/>
+    <ROW File="gif_77" Component_="gif" FileName="35.gif" Attributes="0" SourcePath="..\doc\build\Default\webimages\35.gif" SelfReg="false" NextFile="gif_78"/>
+    <ROW File="gif_78" Component_="gif" FileName="36.gif" Attributes="0" SourcePath="..\doc\build\Default\webimages\36.gif" SelfReg="false" NextFile="gif_79"/>
+    <ROW File="gif_79" Component_="gif" FileName="37.gif" Attributes="0" SourcePath="..\doc\build\Default\webimages\37.gif" SelfReg="false" NextFile="gif_80"/>
+    <ROW File="gif_80" Component_="gif" FileName="38.gif" Attributes="0" SourcePath="..\doc\build\Default\webimages\38.gif" SelfReg="false" NextFile="gif_81"/>
+    <ROW File="gif_81" Component_="gif" FileName="39.gif" Attributes="0" SourcePath="..\doc\build\Default\webimages\39.gif" SelfReg="false" NextFile="gif_82"/>
+    <ROW File="gif_82" Component_="gif" FileName="4.gif" Attributes="0" SourcePath="..\doc\build\Default\webimages\4.gif" SelfReg="false" NextFile="gif_83"/>
+    <ROW File="gif_83" Component_="gif" FileName="40.gif" Attributes="0" SourcePath="..\doc\build\Default\webimages\40.gif" SelfReg="false" NextFile="gif_84"/>
+    <ROW File="gif_84" Component_="gif" FileName="41.gif" Attributes="0" SourcePath="..\doc\build\Default\webimages\41.gif" SelfReg="false" NextFile="gif_85"/>
+    <ROW File="gif_85" Component_="gif" FileName="42.gif" Attributes="0" SourcePath="..\doc\build\Default\webimages\42.gif" SelfReg="false" NextFile="gif_86"/>
+    <ROW File="gif_86" Component_="gif" FileName="43.gif" Attributes="0" SourcePath="..\doc\build\Default\webimages\43.gif" SelfReg="false" NextFile="gif_87"/>
+    <ROW File="gif_87" Component_="gif" FileName="44.gif" Attributes="0" SourcePath="..\doc\build\Default\webimages\44.gif" SelfReg="false" NextFile="gif_88"/>
+    <ROW File="gif_88" Component_="gif" FileName="45.gif" Attributes="0" SourcePath="..\doc\build\Default\webimages\45.gif" SelfReg="false" NextFile="gif_89"/>
+    <ROW File="gif_89" Component_="gif" FileName="46.gif" Attributes="0" SourcePath="..\doc\build\Default\webimages\46.gif" SelfReg="false" NextFile="gif_90"/>
+    <ROW File="gif_90" Component_="gif" FileName="5.gif" Attributes="0" SourcePath="..\doc\build\Default\webimages\5.gif" SelfReg="false" NextFile="gif_91"/>
+    <ROW File="gif_91" Component_="gif" FileName="6.gif" Attributes="0" SourcePath="..\doc\build\Default\webimages\6.gif" SelfReg="false" NextFile="gif_92"/>
+    <ROW File="gif_92" Component_="gif" FileName="7.gif" Attributes="0" SourcePath="..\doc\build\Default\webimages\7.gif" SelfReg="false" NextFile="gif_93"/>
+    <ROW File="gif_93" Component_="gif" FileName="8.gif" Attributes="0" SourcePath="..\doc\build\Default\webimages\8.gif" SelfReg="false" NextFile="gif_94"/>
+    <ROW File="gif_94" Component_="gif" FileName="9.gif" Attributes="0" SourcePath="..\doc\build\Default\webimages\9.gif" SelfReg="false" NextFile="bullet.gif"/>
+    <ROW File="gradient.png" Component_="collapse.gif" FileName="gradient.png" Attributes="0" SourcePath="..\doc\build\Default\images\gradient.png" SelfReg="false" NextFile="hscaution.gif"/>
+    <ROW File="helpcompilerlog.txt" Component_="BuildingfromSource.html" FileName="helpco~1.txt|helpcompilerlog.txt" Attributes="0" SourcePath="..\doc\build\Default\helpcompilerlog.txt" SelfReg="false" NextFile="collapse.gif"/>
+    <ROW File="helpstudio.css" Component_="customstyles.css" FileName="helpst~1.css|helpstudio.css" Attributes="0" SourcePath="..\doc\build\Default\stylesheets\helpstudio.css" SelfReg="false" NextFile="hsboxes.css"/>
+    <ROW File="helpstudio.js" Component_="fts.js" FileName="helpst~1.js|helpstudio.js" Attributes="0" SourcePath="..\doc\build\Default\script\helpstudio.js" SelfReg="false" NextFile="hscommon.js"/>
+    <ROW File="hsboxes.css" Component_="customstyles.css" FileName="hs-boxes.css" Attributes="0" SourcePath="..\doc\build\Default\stylesheets\hs-boxes.css" SelfReg="false" NextFile="hsexpandcollapse.css"/>
+    <ROW File="hscaution.gif" Component_="collapse.gif" FileName="hs-cau~1.gif|hs-caution.gif" Attributes="0" SourcePath="..\doc\build\Default\images\hs-caution.gif" SelfReg="false" NextFile="hscollapsed.gif"/>
+    <ROW File="hscollapsed.gif" Component_="collapse.gif" FileName="hs-col~1.gif|hs-collapsed.gif" Attributes="0" SourcePath="..\doc\build\Default\images\hs-collapsed.gif" SelfReg="false" NextFile="hsenlarge.gif"/>
+    <ROW File="hscommon.js" Component_="fts.js" FileName="hs-com~1.js|hs-common.js" Attributes="0" SourcePath="..\doc\build\Default\script\hs-common.js" SelfReg="false" NextFile="hsenlargeimage.js"/>
+    <ROW File="hsenlarge.gif" Component_="collapse.gif" FileName="hs-enl~1.gif|hs-enlarge.gif" Attributes="0" SourcePath="..\doc\build\Default\images\hs-enlarge.gif" SelfReg="false" NextFile="hsexpanded.gif"/>
+    <ROW File="hsenlargeimage.js" Component_="fts.js" FileName="hs-enl~1.js|hs-enlargeimage.js" Attributes="0" SourcePath="..\doc\build\Default\script\hs-enlargeimage.js" SelfReg="false" NextFile="hsexpandcollapse.js"/>
+    <ROW File="hsexpandcollapse.css" Component_="customstyles.css" FileName="hs-exp~1.css|hs-expandcollapse.css" Attributes="0" SourcePath="..\doc\build\Default\stylesheets\hs-expandcollapse.css" SelfReg="false" NextFile="hsheadingexpandcollapse.css"/>
+    <ROW File="hsexpandcollapse.js" Component_="fts.js" FileName="hs-exp~1.js|hs-expandcollapse.js" Attributes="0" SourcePath="..\doc\build\Default\script\hs-expandcollapse.js" SelfReg="false" NextFile="hsheadingexpandcollapse.js"/>
+    <ROW File="hsexpanded.gif" Component_="collapse.gif" FileName="hs-exp~1.gif|hs-expanded.gif" Attributes="0" SourcePath="..\doc\build\Default\images\hs-expanded.gif" SelfReg="false" NextFile="hsheadingcollapsed.gif"/>
+    <ROW File="hsheadingcollapsed.gif" Component_="collapse.gif" FileName="hs-hea~1.gif|hs-heading-collapsed.gif" Attributes="0" SourcePath="..\doc\build\Default\images\hs-heading-collapsed.gif" SelfReg="false" NextFile="hsheadingexpanded.gif"/>
+    <ROW File="hsheadingexpandcollapse.css" Component_="customstyles.css" FileName="hs-hea~1.css|hs-heading-expandcollapse.css" Attributes="0" SourcePath="..\doc\build\Default\stylesheets\hs-heading-expandcollapse.css" SelfReg="false" NextFile="hssimpletab.css"/>
+    <ROW File="hsheadingexpandcollapse.js" Component_="fts.js" FileName="hs-hea~1.js|hs-heading-expandcollapse.js" Attributes="0" SourcePath="..\doc\build\Default\script\hs-heading-expandcollapse.js" SelfReg="false" NextFile="languagefilter.js"/>
+    <ROW File="hsheadingexpanded.gif" Component_="collapse.gif" FileName="hs-hea~2.gif|hs-heading-expanded.gif" Attributes="0" SourcePath="..\doc\build\Default\images\hs-heading-expanded.gif" SelfReg="false" NextFile="hsnote.gif"/>
+    <ROW File="hsnote.gif" Component_="collapse.gif" FileName="hs-note.gif"