crashanalysercmd/PerfToolsSharedLibraries/Engine/SymbianParserLib/RegExTranslators/Types/RegExTranslatorHex.cs
changeset 0 818e61de6cd1
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/crashanalysercmd/PerfToolsSharedLibraries/Engine/SymbianParserLib/RegExTranslators/Types/RegExTranslatorHex.cs	Thu Feb 11 15:50:58 2010 +0200
@@ -0,0 +1,112 @@
+/*
+* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies). 
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+* 
+* Description:
+*
+*/
+using System;
+using System.Collections.Generic;
+using System.Text;
+using System.Text.RegularExpressions;
+using System.Reflection;
+using SymbianParserLib.Elements;
+using SymbianParserLib.Enums;
+
+namespace SymbianParserLib.RegExTranslators.Types
+{
+    internal class RegExTranslatorHex : RegExTranslatorBase
+    {
+        #region Constructors
+        public RegExTranslatorHex()
+        {
+        }
+        #endregion
+
+        #region API
+        public override ParserField Process( Capture aCapture, int aStartAt, ParserLine aLine )
+        {
+            ParserField ret = null;
+            //
+            RegExTranslatorExtractionInfo m = new RegExTranslatorExtractionInfo( aLine.OriginalValue, aStartAt );
+            //
+            if ( m.Success && m.ValueTypeChar == 'X' )
+            {
+                // Build the regular expression
+                StringBuilder regex = new StringBuilder( "[A-Fa-f0-9]" );
+                if ( m.Width != RegExTranslatorExtractionInfo.KNoWidthSpecified )
+                {
+                    // Add specific length suffix
+                    regex.Append( "{" );
+                    regex.Append( m.Width.ToString() );
+                    regex.Append( "}" );
+                }
+                else
+                {
+                    // Add "one or more" suffix
+                    regex.Append( "+" );
+                }
+
+                ret = CreateField( regex.ToString(), m.Name, m.ValueType, m.CapturePos, m.CaptureLength, true );
+                ret.FormatSpecifier.NumberBase = m.NumberBase;
+            }
+            //
+            return ret;
+        }
+        #endregion
+
+        #region Properties
+        #endregion
+
+        #region Internal methods
+        #endregion
+
+        #region Internal constants
+        #endregion
+
+        #region From System.Object
+        public override string ToString()
+        {
+            return base.ToString();
+        }
+        #endregion
+
+        #region Data members
+        /// <summary>
+        ///  Regular expression built for C# on: Thu, May 15, 2008, 11:33:33 AM
+        ///  Using Expresso Version: 3.0.2766, http://www.ultrapico.com
+        ///  
+        ///  A description of the regular expression:
+        ///  
+        ///  %
+        ///  [PadChar]: A named capture group. [(?:0| )?]
+        ///      Match expression but don't capture it. [0| ], zero or one repetitions
+        ///          Select from 2 alternatives
+        ///              0
+        ///              Space
+        ///  [Width]: A named capture group. [[0-9]?]
+        ///      Any character in this class: [0-9], zero or one repetitions
+        ///  Match expression but don't capture it. [x|X]
+        ///      Select from 2 alternatives
+        ///          xX
+        ///  
+        ///
+        /// </summary>
+        private static Regex KRegEx = new Regex(
+              "%(?<PadChar>(?:0| )?)(?<Width>[0-9]?)(?:x|X)",
+            RegexOptions.Singleline
+            | RegexOptions.CultureInvariant
+            | RegexOptions.Compiled
+            );
+        #endregion
+    }
+}