Beispiel #1
0
        } = Constants.SYS_NUM;                                                     // "Number";

        public NumberExtractor(NumberMode mode = NumberMode.Default, NumberOptions options = NumberOptions.None)
        {
            var builder = ImmutableDictionary.CreateBuilder <Regex, string>();

            //Add Cardinal
            CardinalExtractor cardExtract = null;

            switch (mode)
            {
            case NumberMode.PureNumber:
                cardExtract = CardinalExtractor.GetInstance(NumbersDefinitions.PlaceHolderPureNumber);
                break;

            case NumberMode.Currency:
                builder.Add(new Regex(NumbersDefinitions.CurrencyRegex, RegexOptions.Singleline), RegexTagGenerator.GenerateRegexTag(Constants.FRACTION_PREFIX, Constants.NUMBER_SUFFIX));
                break;

            case NumberMode.Default:
                break;
            }

            if (cardExtract == null)
            {
                cardExtract = CardinalExtractor.GetInstance();
            }
            builder.AddRange(cardExtract.Regexes);

            //Add Fraction
            var fracExtract = new FractionExtractor();

            builder.AddRange(fracExtract.Regexes);

            this.Regexes = builder.ToImmutable();
        }
Beispiel #2
0
        } = Constants.SYS_NUM;                                                     // "Number";

        public NumberExtractor(NumberMode mode = NumberMode.Default)
        {
            var builder = ImmutableDictionary.CreateBuilder <Regex, string>();

            //Add Cardinal
            CardinalExtractor cardExtract = null;

            switch (mode)
            {
            case NumberMode.PureNumber:
                cardExtract = new CardinalExtractor(NumbersDefinitions.PlaceHolderPureNumber);
                break;

            case NumberMode.Currency:
                builder.Add(new Regex(NumbersDefinitions.CurrencyRegex, RegexOptions.Singleline), "IntegerNum");
                break;

            case NumberMode.Default:
                break;
            }

            if (cardExtract == null)
            {
                cardExtract = new CardinalExtractor();
            }
            builder.AddRange(cardExtract.Regexes);

            //Add Fraction
            var fracExtract = new FractionExtractor();

            builder.AddRange(fracExtract.Regexes);

            this.Regexes = builder.ToImmutable();
        }
Beispiel #3
0
        public NumberExtractor(NumberMode mode = NumberMode.Default)
        {
            var builder = ImmutableDictionary.CreateBuilder <Regex, TypeTag>();

            CardinalExtractor cardExtract = null;

            switch (mode)
            {
            case NumberMode.PureNumber:
                cardExtract = new CardinalExtractor(NumbersDefinitions.PlaceHolderPureNumber);
                break;

            case NumberMode.Currency:
                builder.Add(new Regex(NumbersDefinitions.CurrencyRegex, RegexOptions.Singleline),
                            RegexTagGenerator.GenerateRegexTag(Constants.INTEGER_PREFIX, Constants.NUMBER_SUFFIX));
                break;

            case NumberMode.Default:
                break;
            }

            if (cardExtract == null)
            {
                cardExtract = new CardinalExtractor();
            }

            builder.AddRange(cardExtract.Regexes);

            var fracExtract = new FractionExtractor();

            builder.AddRange(fracExtract.Regexes);

            Regexes = builder.ToImmutable();
        }
        } = Constants.SYS_NUM;                                                     // "Number";

        public NumberExtractor(NumberMode mode = NumberMode.Default)
        {
            var builder = ImmutableDictionary.CreateBuilder <Regex, string>();
            //Add Cardinal
            CardinalExtractor cardExtract = null;

            switch (mode)
            {
            case NumberMode.PureNumber:
                cardExtract = new CardinalExtractor(@"\b");
                break;

            case NumberMode.Currency:
                builder.Add(new Regex(@"(((?<=\W|^)-\s*)|(?<=\b))\d+\s*(B|b|m|t|g)(?=\b)", RegexOptions.Singleline),
                            "IntegerNum");
                break;

            case NumberMode.Default:
                break;
            }
            if (cardExtract == null)
            {
                cardExtract = new CardinalExtractor();
            }
            builder.AddRange(cardExtract.Regexes);
            //Add Fraction
            var fracExtract = new FractionExtractor();

            builder.AddRange(fracExtract.Regexes);

            Regexes = builder.ToImmutable();
        }
 public BaseNumberOptionsConfiguration(string culture, NumberOptions options = NumberOptions.None,
                                       NumberMode mode = NumberMode.Default, string placeholder = BaseNumbers.PlaceHolderDefault)
 {
     Culture     = culture;
     Options     = options;
     Mode        = mode;
     Placeholder = placeholder;
 }
Beispiel #6
0
        public UndupNumericNumericAction(IPostProcessor processor, XmlNode node)
        {
            numberMode = node.ReadEnum("@number", NumberMode.Int);
            String from = node.ReadStr("field");

            fromField = new JPath(from);
            String to = node.ReadStr("tofield", null);

            toField = to == null ? fromField : new JPath(to);
        }
Beispiel #7
0
        public static NumberExtractor GetInstance(NumberMode mode = NumberMode.Default)
        {
            var placeholder = mode.ToString();

            if (!Instances.ContainsKey(placeholder))
            {
                var instance = new NumberExtractor(mode);
                Instances.TryAdd(placeholder, instance);
            }

            return(Instances[placeholder]);
        }
Beispiel #8
0
        private void SetValue(long position, NumberMode mode, long value)
        {
            switch (mode)
            {
            case NumberMode.Position:
                Memory[position] = value;
                break;

            case NumberMode.Relative:
                Memory[position + _relativeBase] = value;
                break;
            }
        }
Beispiel #9
0
        private long GetValue(long number, NumberMode mode)
        {
            switch (mode)
            {
            case NumberMode.Position:
                return(Memory[number]);

            case NumberMode.Value:
                return(number);

            case NumberMode.Relative:
                return(Memory[number + _relativeBase]);
            }

            return(0);
        }
Beispiel #10
0
        /// <summary>
        /// Initialize a new instance of this class with defaults set to Hex, 8 bits.
        /// </summary>
        /// <param name="hexData">Hex value.</param>
        public HexTextBox()
        {
            this.Multiline = false;
            previousMode   = NumberMode.Hex;
            currentMode    = NumberMode.Hex;
            //default to 8 bits
            numBits      = 8;
            numBytes     = 1;
            signedNumber = false;
            minValue     = 0;
            maxValue     = 256;

            //add handler to check key presses so user enters only valid data
            this.KeyPress  += new KeyPressEventHandler(HexTextBox_KeyPress);
            this.MouseMove += new MouseEventHandler(HexTextBox_MouseMove);
            this.tooltips   = new ToolTip();
        }
Beispiel #11
0
        /// <summary>
        /// Initialize a new instance of this class with defaults set to Hex, 8 bits.
        /// </summary>
        /// <param name="hexData">Hex value.</param>
        public HexTextBox()
        {
            this.Multiline = false;
            previousMode = NumberMode.Hex;
            currentMode = NumberMode.Hex;
            //default to 8 bits
            numBits = 8;
            numBytes = 1;
            signedNumber = false;
            minValue = 0;
            maxValue = 256;

            //add handler to check key presses so user enters only valid data
            this.KeyPress += new KeyPressEventHandler(HexTextBox_KeyPress);
            this.MouseMove += new MouseEventHandler(HexTextBox_MouseMove);
            this.tooltips = new ToolTip();
        }
 /// <summary>
 /// 创建工厂实例
 /// </summary>
 /// <param name="numberMode">编号模式</param>
 /// <returns>编号接口</returns>
 public static INumber Create(NumberMode numberMode)
 {
     INumber number;
     switch (numberMode)
     {
         case NumberMode.连续编号:
             number = new NumberManager();
             break;
         case NumberMode.按年连续编号:
             number = new YearNumberManager();
             break;
         case NumberMode.按月连续编号:
             number = new MonthNumberManager();
             break;
         case NumberMode.按日连续编号:
             number = new DayNumberManager();
             break;
         default:
             throw new NumberException("没有具体的编号模式!");
     }
     return number;
 }
Beispiel #13
0
        private NumberExtractor(NumberMode mode = NumberMode.Default)
        {
            NegativeNumberTermsRegex = new Regex(NumbersDefinitions.NegativeNumberTermsRegex + '$', RegexOptions.IgnoreCase | RegexOptions.Singleline);

            var builder = ImmutableDictionary.CreateBuilder <Regex, string>();

            //Add Cardinal
            CardinalExtractor cardExtract = null;

            switch (mode)
            {
            case NumberMode.PureNumber:
                cardExtract = CardinalExtractor.GetInstance(NumbersDefinitions.PlaceHolderPureNumber);
                break;

            case NumberMode.Currency:
                builder.Add(new Regex(NumbersDefinitions.CurrencyRegex, RegexOptions.Singleline), "IntegerNum");
                break;

            case NumberMode.Default:
                break;
            }

            if (cardExtract == null)
            {
                cardExtract = CardinalExtractor.GetInstance();
            }

            builder.AddRange(cardExtract.Regexes);

            //Add Fraction
            var fracExtract = FractionExtractor.GetInstance();

            builder.AddRange(fracExtract.Regexes);

            Regexes = builder.ToImmutable();
        }
Beispiel #14
0
 public NumberField(string label, string name, bool required, NumberMode mode)
     : base(label, name, required)
 {
     Mode = mode;
 }
Beispiel #15
0
 public NumberField(string label, string name, bool required, NumberMode mode)
     : base(label, name, required)
 {
     Mode = mode;
 }
Beispiel #16
0
 public NumberField(string label, string name, NumberMode mode)
     : this(label, name, false, mode)
 {
 }
 public BaseNumberOptionsConfiguration(string culture, NumberOptions options = NumberOptions.None, NumberMode mode = NumberMode.Default)
 {
     Culture = culture;
     Options = options;
     Mode    = mode;
 }
Beispiel #18
0
 public NumberField(string label, string name, NumberMode mode)
     : this(label, name, false, mode)
 {
 }
Beispiel #19
0
        /// <summary>
        /// Interpret a single instruction.
        /// </summary>
        /// <returns>
        /// <c>false</c> if the interpretation failed, <c>true</c> otherwise.
        /// </returns>
        public bool InterpretOne()
        {
            if (!jumptablebuilt) {
                Error ("You need to build the jump table!");
                Error ("Call BuildJumpTable before calling Interpret or InterpretOne.");
                return false;
            }

            if (pos < source.Length) {
                switch (source [pos]) {
                case '>':
                    memptr++;
                    if (wrap && memptr >= mem.Length)
                        memptr = 0;
                    break;
                case '<':
                    memptr--;
                    if (wrap && memptr < 0)
                        memptr = mem.Length - 1;
                    break;
                case '+':
                    mem [memptr]++;
                    break;
                case '-':
                    mem [memptr]--;
                    break;
                case '*':
                    mem [memptr] <<= 1;
                    break;
                case '/':
                    mem [memptr] >>= 1;
                    break;
                case '.':
                    var val = mem [memptr];
                    switch (numbermode) {
                    case NumberMode.Char:
                        WriteOutput (Convert.ToChar (val).ToString ());
                        break;
                    case NumberMode.Bin:
                        WriteOutput (Convert.ToString (val, 2));
                        break;
                    case NumberMode.Dec:
                        WriteOutput (Convert.ToString (val, 10));
                        break;
                    case NumberMode.Hex:
                        WriteOutput (Convert.ToString (val, 16));
                        break;
                    }
                    break;
                case ',':
                    char inchr = '\x00';
                    if (hosted) {
                        if (!string.IsNullOrEmpty (input)
                            && inputpos < input.Length) {
                            inchr = input [inputpos++];
                            WriteOutput (inchr.ToString ());
                        } else {
                            Error ("No input available");
                            return false;
                        }
                    }
                    else
                        inchr = Console.ReadKey ().KeyChar;
                    if (numbermode != NumberMode.Char && !char.IsDigit (inchr)) {
                        Error ("Unexpected char in input sequence: {0}", inchr);
                        return false;
                    }
                    switch (numbermode) {
                    case NumberMode.Char:
                        mem [memptr] = inchr;
                        break;
                    default:
                        mem [memptr] = int.Parse (inchr.ToString ());
                        break;
                    }
                    break;
                case ':':
                    stack.Push (mem [memptr]);
                    break;
                case '&':
                    stack.Push (stack.Peek ());
                    break;
                case '#':
                    mem [memptr] = stack.Count;
                    break;
                case ';':
                    mem [memptr] = stack.Pop ();
                    break;
                case '\\':
                    {
                        int elem1 = stack.Pop ();
                        int elem2 = stack.Pop ();
                        stack.Push (elem1);
                        stack.Push (elem2);
                        break;
                    }
                case '=':
                    {
                        int elem1 = stack.Pop ();
                        int elem2 = stack.Pop ();
                        mem [memptr] = elem1 == elem2 ? 1 : 0;
                        break;
                    }
                case '@':
                    var collection = stack.ToList ();
                    stack.Clear ();
                    collection.ForEach (stack.Push);
                    break;
                case '$':
                    pos++;
                    EatWhitespace ();
                    var funcname = new StringBuilder ();
                    if (pos >= source.Length) {
                        Error ("Unexpected end of file");
                        return false;
                    }
                    while (pos < source.Length
                           && (char.IsLetter (source [pos])
                           || "_".Contains (source [pos]))) {
                        funcname.Append (source [pos++]);
                    }
                    EatWhitespace ();
                    if (pos < source.Length && source [pos] == '{') {
                        pos++;
                        var funcsrc = new StringBuilder ();
                        while (source [pos] != '}')
                            funcsrc.Append (source [pos++]);
                        var function = new QoFunction (funcname, funcsrc);
                        if (functions.All (func => function.Name != func.Name))
                            functions.Add (function);
                        else {
                            Error ("Function already defined: {0}", funcname);
                            return false;
                        }
                    } else {
                        var function = functions
                            .FirstOrDefault (func =>
                                func.Name == funcname.ToString ());
                        if (function == default (QoFunction)) {
                            Error ("Call to undefined function: {0}", funcname);
                            return false;
                        }
                        function.Call (this);
                        return true;
                    }
                    break;
                case '\'':
                    while (source [pos] != '\n'
                        && pos < source.Length - 1)
                        pos++;
                    break;
                case '[':
                    if (mem [memptr] == 0)
                        pos = jumptable [pos];
                    break;
                case ']':
                    if (mem [memptr] != 0)
                        pos = jumptable [pos];
                    break;
                case '(':
                    if (stack.Peek () == 0)
                        pos = jumptable [pos];
                    break;
                case ')':
                    if (stack.Peek () != 0)
                        pos = jumptable [pos];
                    break;
                case '"':
                    var chars = new List<int> ();
                    pos++;
                    while (source [pos] != '"') {
                        var chr = Convert.ToChar (source [pos++]);
                        switch (chr) {
                        case '\\':
                            var next = Convert.ToChar (source [pos++]);
                            switch (next) {
                            case 'a':
                                chars.Add ('\a');
                                break;
                            case 't':
                                chars.Add ('\t');
                                break;
                            case 'n':
                                chars.Add ('\n');
                                break;
                            case 'r':
                                chars.Add ('\r');
                                break;
                            case '0':
                                chars.Add (0);
                                break;
                            default:
                                Error ("Invalid escape sequence: \\{0}", next);
                                return false;
                            }
                            break;
                        default:
                            chars.Add (chr);
                            break;
                        }
                    }
                    foreach (var chr in chars.Reverse<int> ())
                        stack.Push (chr);
                    break;
                case 'c':
                    numbermode = NumberMode.Char;
                    break;
                case 'b':
                    numbermode = NumberMode.Bin;
                    break;
                case 'i':
                    numbermode = NumberMode.Dec;
                    break;
                case 'x':
                    numbermode = NumberMode.Hex;
                    break;
                case 'q':
                    pos = source.Length;
                    return false;
                default:
                    if (char.IsWhiteSpace (source [pos]))
                        break;
                    Error ("Invalid instruction at {0}: {1}", pos, source [pos]);
                    return false;
                }

                pos++;
                return true;
            }
            return false;
        }