Example #1
0
        private void RecursivelyExtractSemanticValue(IntPtr phraseBuffer, int semanticsOffset, SemanticValue semanticValue, IList <RecognizedWordUnit> words, bool isSapi53Header, GrammarOptions semanticTag)
        {
            IntPtr ptr = new IntPtr((long)phraseBuffer + semanticsOffset);
            SPSERIALIZEDPHRASEPROPERTY sPSERIALIZEDPHRASEPROPERTY = (SPSERIALIZEDPHRASEPROPERTY)Marshal.PtrToStructure(ptr, typeof(SPSERIALIZEDPHRASEPROPERTY));
            string        propertyName;
            SemanticValue semanticValue2 = ExtractSemanticValueInformation(semanticsOffset, sPSERIALIZEDPHRASEPROPERTY, phraseBuffer, isSapi53Header, out propertyName);

            if (propertyName == "_value" && semanticValue != null)
            {
                semanticValue.Value = semanticValue2.Value;
                if (sPSERIALIZEDPHRASEPROPERTY.pFirstChildOffset != 0)
                {
                    semanticValue2 = semanticValue;
                }
            }
            else
            {
                InsertSemanticValueToDictionary(semanticValue, propertyName, semanticValue2, semanticTag, ref _dupItems);
            }
            if (sPSERIALIZEDPHRASEPROPERTY.pFirstChildOffset != 0)
            {
                RecursivelyExtractSemanticValue(phraseBuffer, (int)sPSERIALIZEDPHRASEPROPERTY.pFirstChildOffset, semanticValue2, words, isSapi53Header, semanticTag);
            }
            if (sPSERIALIZEDPHRASEPROPERTY.pNextSiblingOffset != 0)
            {
                RecursivelyExtractSemanticValue(phraseBuffer, (int)sPSERIALIZEDPHRASEPROPERTY.pNextSiblingOffset, semanticValue, words, isSapi53Header, semanticTag);
            }
        }
Example #2
0
        private static void RecursivelyExtractSemanticProperties(List <ResultPropertiesRef> propertyList, int semanticsOffset, IntPtr phraseBuffer, RuleNode ruleTree, IList <RecognizedWordUnit> words, bool isSapi53Header)
        {
            IntPtr ptr = new IntPtr((long)phraseBuffer + semanticsOffset);
            SPSERIALIZEDPHRASEPROPERTY sPSERIALIZEDPHRASEPROPERTY = (SPSERIALIZEDPHRASEPROPERTY)Marshal.PtrToStructure(ptr, typeof(SPSERIALIZEDPHRASEPROPERTY));
            string        propertyName;
            SemanticValue semanticValue = ExtractSemanticValueInformation(semanticsOffset, sPSERIALIZEDPHRASEPROPERTY, phraseBuffer, isSapi53Header, out propertyName);
            RuleNode      ruleNode      = ruleTree.Find(sPSERIALIZEDPHRASEPROPERTY.ulFirstElement, sPSERIALIZEDPHRASEPROPERTY.ulCountOfElements);

            if (propertyName == "SemanticKey")
            {
                ruleNode._name    = (string)semanticValue.Value;
                ruleNode._hasName = true;
            }
            else
            {
                propertyList.Add(new ResultPropertiesRef(propertyName, semanticValue, ruleNode));
            }
            if (sPSERIALIZEDPHRASEPROPERTY.pFirstChildOffset != 0)
            {
                RecursivelyExtractSemanticProperties(propertyList, (int)sPSERIALIZEDPHRASEPROPERTY.pFirstChildOffset, phraseBuffer, ruleTree, words, isSapi53Header);
            }
            if (sPSERIALIZEDPHRASEPROPERTY.pNextSiblingOffset != 0)
            {
                RecursivelyExtractSemanticProperties(propertyList, (int)sPSERIALIZEDPHRASEPROPERTY.pNextSiblingOffset, phraseBuffer, ruleTree, words, isSapi53Header);
            }
        }
Example #3
0
        private static SemanticValue ExtractSemanticValueInformation(int semanticsOffset, SPSERIALIZEDPHRASEPROPERTY property, IntPtr phraseBuffer, bool isSapi53Header, out string propertyName)
        {
            bool flag = false;

            if (property.pszNameOffset != 0)
            {
                IntPtr ptr = new IntPtr((long)phraseBuffer + (int)property.pszNameOffset);
                propertyName = Marshal.PtrToStringUni(ptr);
            }
            else
            {
                propertyName = property.ulId.ToString(CultureInfo.InvariantCulture);
                flag         = true;
            }
            object obj;

            if (property.pszValueOffset != 0)
            {
                IntPtr ptr2 = new IntPtr((long)phraseBuffer + (int)property.pszValueOffset);
                obj = Marshal.PtrToStringUni(ptr2);
                if (!isSapi53Header && flag && ((string)obj).Contains("$"))
                {
                    throw new NotSupportedException(SR.Get(SRID.NotSupportedWithThisVersionOfSAPI));
                }
            }
            else if (property.SpVariantSubset >= 0)
            {
                IntPtr ptr3 = new IntPtr((long)phraseBuffer + semanticsOffset + 16);
                switch (property.vValue)
                {
                case 3:
                    obj = Marshal.ReadInt32(ptr3);
                    break;

                case 19:
                    obj = Marshal.PtrToStructure(ptr3, typeof(uint));
                    break;

                case 20:
                    obj = Marshal.ReadInt64(ptr3);
                    break;

                case 21:
                    obj = Marshal.PtrToStructure(ptr3, typeof(ulong));
                    break;

                case 4:
                    obj = Marshal.PtrToStructure(ptr3, typeof(float));
                    break;

                case 5:
                    obj = Marshal.PtrToStructure(ptr3, typeof(double));
                    break;

                case 11:
                    obj = (Marshal.ReadByte(ptr3) != 0);
                    break;

                case 0:
                    obj = null;
                    break;

                default:
                    throw new NotSupportedException(SR.Get(SRID.UnhandledVariant));
                }
            }
            else
            {
                obj = string.Empty;
            }
            return(new SemanticValue(propertyName, obj, property.SREngineConfidence));
        }