The Labs \ Source Viewer \ SSCLI \ System.Xml.Xsl.XPath \ XPathCompileException

  1. //------------------------------------------------------------------------------
  2. // <copyright file="XPathCompileException.cs" company="Microsoft">
  3. //
  4. // Copyright (c) 2006 Microsoft Corporation. All rights reserved.
  5. //
  6. // The use and distribution terms for this software are contained in the file
  7. // named license.txt, which can be found in the root of this distribution.
  8. // By using this software in any fashion, you are agreeing to be bound by the
  9. // terms of this license.
  10. //
  11. // You must not remove this notice, or any other, from this software.
  12. //
  13. // </copyright>
  14. //------------------------------------------------------------------------------
  15. using System.Runtime.Serialization;
  16. using System.Security.Permissions;
  17. using System.Text;
  18. namespace System.Xml.Xsl.XPath
  19. {
  20.     [Serializable()]
  21.     internal class XPathCompileException : XslLoadException
  22.     {
  23.         public string queryString;
  24.         public int startChar;
  25.         public int endChar;
  26.        
  27.         protected XPathCompileException(SerializationInfo info, StreamingContext context) : base(info, context)
  28.         {
  29.             queryString = (string)info.GetValue("QueryString", typeof(string));
  30.             startChar = (int)info.GetValue("StartChar", typeof(int));
  31.             endChar = (int)info.GetValue("EndChar", typeof(int));
  32.         }
  33.        
  34.         [SecurityPermissionAttribute(SecurityAction.Demand, SerializationFormatter = true)]
  35.         public override void GetObjectData(SerializationInfo info, StreamingContext context)
  36.         {
  37.             base.GetObjectData(info, context);
  38.             info.AddValue("QueryString", queryString);
  39.             info.AddValue("StartChar", startChar);
  40.             info.AddValue("EndChar", endChar);
  41.         }
  42.        
  43.         internal XPathCompileException(string queryString, int startChar, int endChar, string resId, params string[] args) : base(resId, args)
  44.         {
  45.             this.queryString = queryString;
  46.             this.startChar = startChar;
  47.             this.endChar = endChar;
  48.         }
  49.        
  50.         internal XPathCompileException(string resId, params string[] args) : base(resId, args)
  51.         {
  52.         }
  53.         // queryString will be set later
  54.         private enum TrimType
  55.         {
  56.             Left,
  57.             Right,
  58.             Middle
  59.         }
  60.        
  61.         // This function is used to prevent long quotations in error messages, SQLBUDT 222626
  62.         private static void AppendTrimmed(StringBuilder sb, string value, int startIndex, int count, TrimType trimType)
  63.         {
  64.             const int TrimSize = 32;
  65.             const string TrimMarker = "...";
  66.            
  67.             if (count <= TrimSize) {
  68.                 sb.Append(value, startIndex, count);
  69.             }
  70.             else {
  71.                 switch (trimType) {
  72.                     case TrimType.Left:
  73.                         sb.Append(TrimMarker);
  74.                         sb.Append(value, startIndex + count - TrimSize, TrimSize);
  75.                         break;
  76.                     case TrimType.Right:
  77.                         sb.Append(value, startIndex, TrimSize);
  78.                         sb.Append(TrimMarker);
  79.                         break;
  80.                     case TrimType.Middle:
  81.                         sb.Append(value, startIndex, TrimSize / 2);
  82.                         sb.Append(TrimMarker);
  83.                         sb.Append(value, startIndex + count - TrimSize / 2, TrimSize / 2);
  84.                         break;
  85.                 }
  86.             }
  87.         }
  88.        
  89.         internal string MarkOutError()
  90.         {
  91.             if (queryString == null || queryString.Trim(' ').Length == 0) {
  92.                 return null;
  93.             }
  94.            
  95.             int len = endChar - startChar;
  96.             StringBuilder sb = new StringBuilder();
  97.            
  98.             AppendTrimmed(sb, queryString, 0, startChar, TrimType.Left);
  99.             if (len > 0) {
  100.                 sb.Append(" -->");
  101.                 AppendTrimmed(sb, queryString, startChar, len, TrimType.Middle);
  102.             }
  103.            
  104.             sb.Append("<-- ");
  105.             AppendTrimmed(sb, queryString, endChar, queryString.Length - endChar, TrimType.Right);
  106.            
  107.             return sb.ToString();
  108.         }
  109.        
  110.         internal override string FormatDetailedMessage()
  111.         {
  112.             string message = Message;
  113.             string error = MarkOutError();
  114.            
  115.             if (error != null && error.Length > 0) {
  116.                 if (message.Length > 0) {
  117.                     message += Environment.NewLine;
  118.                 }
  119.                 message += error;
  120.             }
  121.             return message;
  122.         }
  123.     }
  124. }

Developer Fusion