Пример #1
0
        public RefConcatStringVariable(StringVariable variable, IEnumerable <char> stringDelimiters)
            : base(variable)
        {
            List <char>         delimiters = stringDelimiters.ToList();
            List <ConcatString> strings    = new List <ConcatString>();
            string text  = variable.Value;
            int    index = 0;

            while (index < text.Length)
            {
                string delimiter, word;

                // 区切り文字を数えて切り取る
                int delimiterBeginIndex = index;
                while (index < text.Length && delimiters.Contains(text[index]))
                {
                    index++;
                }
                delimiter = text.Substring(delimiterBeginIndex, index - delimiterBeginIndex);

                // 非区切り文字を数えて切り取る
                int wordBeginIndex = index;
                while (index < text.Length && !delimiters.Contains(text[index]))
                {
                    index++;
                }
                word = text.Substring(wordBeginIndex, index - wordBeginIndex);

                strings.Add(new ConcatString(delimiter, word));
            }
            _strings = strings;
        }
Пример #2
0
 public override bool GetIndexedValue(int index, out ScriptVariable value)
 {
     value = null;
     if (index < 0 || index > this.Value.Length)
     {
         return(false);
     }
     value = new StringVariable(this.Value.Substring(index, 1));
     return(true);
 }
Пример #3
0
 public void getOccuranceOfVariablesAux(IDictionary <ScriptVariable, int> map, IList <RefScriptVariable> variables, ScriptVariableType targetTypes, VariableNamedState ignoreState, ICollection <ScriptVariable> ignoreVariables)
 {
     foreach (var variable in variables)
     {
         if (variable.SatisfiesNamedState(ignoreState))
         {
             continue;
         }
         if (variable.Value == null)
         {
             continue;
         }
         if (!variable.Value.IsTypeOf(targetTypes))
         {
             continue;
         }
         if (!ignoreVariables.Contains(variable.Value))
         {
             if (!map.ContainsKey(variable.Value))
             {
                 map[variable.Value] = 0;
             }
             map[variable.Value]++;
         }
         RefListVariable         list   = variable as RefListVariable;
         RefConcatStringVariable concat = variable as RefConcatStringVariable;
         if (list != null)
         {
             getOccuranceOfVariablesAux(map, list.List, targetTypes, ignoreState, ignoreVariables);
         }
         else if (concat != null)
         {
             if (concat.Strings.Count == 1 && concat.Strings[0].Word == concat.Value.ToString())
             {
                 continue;
             }
             foreach (var c in concat.Strings)
             {
                 if (c.SatisfiesNamedState(ignoreState))
                 {
                     continue;
                 }
                 StringVariable strVar = new StringVariable(c.Word);
                 if (!ignoreVariables.Contains(strVar))
                 {
                     if (!map.ContainsKey(strVar))
                     {
                         map[strVar] = 0;
                     }
                     map[strVar]++;
                 }
             }
         }
     }
 }
Пример #4
0
        /// <summary>
        /// 変数の値の型に応じて名前付きスクリプト変数を作成します
        /// </summary>
        /// <param name="variable">変数の値</param>
        /// <param name="stringDelimiter">文字列を分割する区切り文字</param>
        /// <returns></returns>
        public static RefScriptVariable Create(ScriptVariable value, IEnumerable <char> stringDelimiter)
        {
            StringVariable str = value as StringVariable;

            if (str != null)
            {
                return(new RefConcatStringVariable(str, stringDelimiter));
            }
            ListVariable list = value as ListVariable;

            if (list != null)
            {
                return(new RefListVariable(list, stringDelimiter));
            }
            return(new RefScriptVariable(value));
        }