Ejemplo n.º 1
0
        /// <summary>
        /// Writes the given text encoded using the specified Restricted Alphabet Encoding.
        /// </summary>
        /// <param name="text">Text to write.</param>
        /// <param name="alphabetTableIndex">Index of restricted alphabet</param>
        /// <exception cref="ArgumentException">A Restricted Alphabet cannot be found for the specified index.</exception>
        /// <exception cref="InvalidOperationException">The <see cref="WriteState"/> is invalid for this operation.</exception>
        /// <exception cref="IndexOutOfRangeException">Index must be between 1 and 256</exception>
        public void WriteRestrictedAlphabetString(string text, int alphabetTableIndex)
        {
            try
            {
                if (string.IsNullOrEmpty(text))
                {
                    return;
                }

                if (alphabetTableIndex < FIConsts.ENCODING_TABLE_MIN || alphabetTableIndex > FIConsts.ENCODING_TABLE_MAX)
                {
                    throw new IndexOutOfRangeException("alphabetTableIndex");
                }

                ValidateState(FIItemType.Content);

                FIRestrictedAlphabet alphabet = _internalWriter.Vocabulary.RestrictedAlphabet(alphabetTableIndex);

                if (alphabet == null)
                {
                    throw new ArgumentException("Index out of range.");
                }

                _internalWriter.WriteEncodedData(alphabet, text);

                UpdateState(FIItemType.Content);
            }
            catch (Exception ex)
            {
                _state = FIState.Error;
                throw ex;
            }
        }
        internal FIRestrictedAlphabet Alphabet(int fiTableIndex)
        {
            FIRestrictedAlphabet alphabet = null;

            if (fiTableIndex > 0)
            {
                if (fiTableIndex < EXTENDED_RESTRICTED_ALPHABET_START)
                {
                    if (fiTableIndex <= BUILT_IN_RESTRICTED_ALPHABET_COUNT)
                    {
                        // index - 1 to move from FI table index to list index
                        alphabet = _restrictedAlphabets[fiTableIndex - 1];
                    }
                }
                else if (fiTableIndex < EXTENDED_RESTRICTED_ALPHABET_MAX)
                {
                    // to move from FI table index to list index
                    int realIndex = fiTableIndex - (EXTENDED_RESTRICTED_ALPHABET_START - BUILT_IN_RESTRICTED_ALPHABET_COUNT);
                    if (realIndex < _restrictedAlphabets.Length)
                    {
                        alphabet = _restrictedAlphabets[realIndex];
                    }
                }
            }

            return(alphabet);
        }
        internal FIRestrictedAlphabetManager()
        {
            // initialize array
            _restrictedAlphabets   = new FIRestrictedAlphabet[GROW_ARRAY_SIZE];
            _restrictedAlphabetTop = 0;

            // Add built in restricted alphabets
            FIRestrictedAlphabet alphabet = new FIRestrictedAlphabet(RESTRICTED_ALPHABET_VALUES_NUMERIC);

            alphabet.TableIndex = RESTRICTED_ALPHABET_NUMERIC;
            _restrictedAlphabets[_restrictedAlphabetTop] = alphabet;

            alphabet            = new FIRestrictedAlphabet(RESTRICTED_ALPHABET_VALUES_DATE_TIME);
            alphabet.TableIndex = RESTRICTED_ALPHABET_DATE_TIME;
            _restrictedAlphabets[++_restrictedAlphabetTop] = alphabet;
        }
        internal int Add(FIRestrictedAlphabet alphabet)
        {
            // set table index
            alphabet.TableIndex = _restrictedAlphabets.Length + (EXTENDED_RESTRICTED_ALPHABET_START - BUILT_IN_RESTRICTED_ALPHABET_COUNT);

            if (_restrictedAlphabetTop == (_restrictedAlphabets.Length - 1))
            {
                // grow array
                FIRestrictedAlphabet[] destinationArray = new FIRestrictedAlphabet[_restrictedAlphabets.Length + GROW_ARRAY_SIZE];
                if (_restrictedAlphabetTop > 0)
                {
                    Array.Copy(_restrictedAlphabets, destinationArray, (int)(_restrictedAlphabetTop + 1));
                }

                _restrictedAlphabets = destinationArray;
            }

            // add new restricted alphabet
            _restrictedAlphabetTop++;
            _restrictedAlphabets[_restrictedAlphabetTop] = alphabet;

            return(alphabet.TableIndex);
        }