protected virtual string GetExpressionValue(IMapping mapping)
        {
            if (mapping == null)
            {
                throw new ArgumentNullException(nameof(mapping));
            }
            if (string.IsNullOrWhiteSpace(mapping.Translation))
            {
                return(string.Empty);
            }
            string translation           = this.GetPreProcessedTranslation(mapping.Translation, mapping);
            bool   flag                  = false;
            TranslationFilterEventArgs e = new TranslationFilterEventArgs()
            {
                Transalation = translation,
                Mapping      = mapping
            };

            if (this.ProcessExpression != null)
            {
                flag = this.ProcessExpression((object)this, e);
            }
            if (flag)
            {
                translation = e.FilteredTranslation;
            }
            if (this.ProcessExpressionFunc != null)
            {
                translation = this.ProcessExpressionFunc(translation, mapping);
            }
            return(this.Translator.GetTranslatioinValue(translation, mapping));
        }
        protected virtual string GetMacroValue(IMapping mapping)
        {
            if (mapping == null)
            {
                throw new ArgumentNullException(nameof(mapping));
            }
            if (string.IsNullOrWhiteSpace(mapping.Translation))
            {
                return(string.Empty);
            }
            string processedTranslation = this.GetPreProcessedTranslation(mapping.Translation, mapping);
            bool   flag = false;
            TranslationFilterEventArgs e = new TranslationFilterEventArgs()
            {
                Transalation = processedTranslation,
                Mapping      = mapping
            };

            if (this.ProcessMacro != null)
            {
                foreach (Delegate invocation in this.ProcessMacro.GetInvocationList())
                {
                    if (invocation is TranslationFilterHandler)
                    {
                        flag = (invocation as TranslationFilterHandler)((object)this, e);
                        if (flag)
                        {
                            break;
                        }
                    }
                }
            }
            if (flag)
            {
                return(e.FilteredTranslation);
            }
            if (this.ProcessMacroFunc != null)
            {
                return(this.ProcessMacroFunc(processedTranslation, mapping));
            }
            throw new Exception(string.Format("The macro:{0} can't be defined.", (object)mapping.Translation));
        }
        protected virtual string GetPreProcessedTranslation(string translation, IMapping mapping)
        {
            if (string.IsNullOrWhiteSpace(translation))
            {
                return(string.Empty);
            }
            bool flag = false;
            TranslationFilterEventArgs e = new TranslationFilterEventArgs()
            {
                Transalation = translation,
                Mapping      = mapping
            };

            if (this.PreProcessExpression != null)
            {
                foreach (Delegate invocation in this.PreProcessExpression.GetInvocationList())
                {
                    if (invocation is TranslationFilterHandler)
                    {
                        flag = (invocation as TranslationFilterHandler)((object)this, e);
                        if (flag)
                        {
                            break;
                        }
                    }
                }
            }
            if (flag)
            {
                translation = e.FilteredTranslation;
            }
            if (this.PreProcessExpressionFunc != null)
            {
                translation = this.PreProcessExpressionFunc(translation, mapping);
            }
            return(translation);
        }