コード例 #1
0
ファイル: Matcher.cs プロジェクト: olabini/nregex
 public bool Group(int n, TextBuffer tb)
 {
     MemReg mr=Bounds(n);
     if(mr==null) return false;
     int _in;
     tb.Append(data,_in=mr._in,mr._out-_in);
     return true;
 }
コード例 #2
0
ファイル: Replacer.cs プロジェクト: olabini/nregex
 public void AppendSubstitution(MatchResult match, TextBuffer res)
 {
     if(str!=null) res.Append(str);
 }
コード例 #3
0
ファイル: PerlSubstitution.cs プロジェクト: olabini/nregex
 internal override void Append(MatchResult match, TextBuffer dest)
 {
     if(prefix!=null) dest.Append(prefix);
     if(str!=null) dest.Append(str);
 }
コード例 #4
0
ファイル: PerlSubstitution.cs プロジェクト: olabini/nregex
 internal override void Append(MatchResult match, TextBuffer dest)
 {
     if(prefix!=null) dest.Append(prefix);
     if(index==null) return;
     int id=match.Pattern.GroupId(index);
     if(match.IsCaptured(id)) match.Group(id,dest);
 }
コード例 #5
0
ファイル: BplJsonFormatter.cs プロジェクト: borkaborka/gmit
 // injects the namespace mapping at the top
 private void _injectMapping(XmlNamespaceMap mapping) {
    if (!StronglyTyped) return;
    var buffer = new TextBuffer(this);
    buffer.Indent();
    buffer.BeginClause(BplJsonParser.NAMESPACE_ATTR);
    buffer.Indent("{");
    var pairs = mapping.ToArray();
    for (int i = 0, N = pairs.Length; i < N; i++) {
       buffer.BeginClause(pairs[i].Item1);
       buffer.Append(Quote(pairs[i].Item2.ToString()));
       buffer.EndClause(i == N - 1);
    }
    buffer.Outdent("}");
    buffer.EndClause(false);
    var k = 1;
    if (PrettyPrint) k += NewLineChars.Length;
    _output.Insert(k, buffer.ToString());
 }
コード例 #6
0
ファイル: ParagraphBuilder.cs プロジェクト: karak/Geovanni
 public void TextWithGroupRuby(UString baseText, UString rubyText)
 {
     var baseBuffer = new TextBuffer(_zwSize, _wordWrap, _advancing, _latinMetric, 64);
     var rubyBuffer = new TextBuffer(_rubyZwSize, _wordWrap, _advancing, _latinMetric, 128);
     _buffer.MoveLastLetterStateTo(baseBuffer);
     baseBuffer.Append(baseText);
     rubyBuffer.Append(rubyText);
     _buffer.AppendObject(new GroupRuby(baseBuffer.ToArray(), rubyBuffer.ToArray()));
     baseBuffer.MoveLastLetterStateTo(_buffer);
     baseBuffer.Clear();
     rubyBuffer.Clear();
 }
コード例 #7
0
        public override TextBuffer ToJava(int indent, BytecodeMappingTracer tracer)
        {
            TextBuffer buf = new TextBuffer();

            buf.Append(ExprProcessor.ListToJava(varDefinitions, indent, tracer));
            buf.Append(first.ToJava(indent, tracer));
            if (IsLabeled())
            {
                buf.AppendIndent(indent).Append("label").Append(this.id.ToString()).Append(":").AppendLineSeparator
                    ();
                tracer.IncrementCurrentSourceLine();
            }
            buf.AppendIndent(indent).Append(headexprent[0].ToJava(indent, tracer)).Append(" {"
                                                                                          ).AppendLineSeparator();
            tracer.IncrementCurrentSourceLine();
            if (ifstat == null)
            {
                bool semicolon = false;
                if (ifedge.@explicit)
                {
                    semicolon = true;
                    if (ifedge.GetType() == StatEdge.Type_Break)
                    {
                        // break
                        buf.AppendIndent(indent + 1).Append("break");
                    }
                    else
                    {
                        // continue
                        buf.AppendIndent(indent + 1).Append("continue");
                    }
                    if (ifedge.labeled)
                    {
                        buf.Append(" label").Append(ifedge.closure.id.ToString());
                    }
                }
                if (semicolon)
                {
                    buf.Append(";").AppendLineSeparator();
                    tracer.IncrementCurrentSourceLine();
                }
            }
            else
            {
                buf.Append(ExprProcessor.JmpWrapper(ifstat, indent + 1, true, tracer));
            }
            bool elseif = false;

            if (elsestat != null)
            {
                if (elsestat.type == Statement.Type_If && (elsestat.varDefinitions.Count == 0) &&
                    (elsestat.GetFirst().GetExprents().Count == 0) && !elsestat.IsLabeled() && ((elsestat
                                                                                                 .GetSuccessorEdges(Statedge_Direct_All).Count == 0) || !elsestat.GetSuccessorEdges
                                                                                                    (Statedge_Direct_All)[0].@explicit))
                {
                    // else if
                    buf.AppendIndent(indent).Append("} else ");
                    TextBuffer content = ExprProcessor.JmpWrapper(elsestat, indent, false, tracer);
                    content.SetStart(TextUtil.GetIndentString(indent).Length);
                    buf.Append(content);
                    elseif = true;
                }
                else
                {
                    BytecodeMappingTracer else_tracer = new BytecodeMappingTracer(tracer.GetCurrentSourceLine
                                                                                      () + 1);
                    TextBuffer content = ExprProcessor.JmpWrapper(elsestat, indent + 1, false, else_tracer
                                                                  );
                    if (content.Length() > 0)
                    {
                        buf.AppendIndent(indent).Append("} else {").AppendLineSeparator();
                        tracer.SetCurrentSourceLine(else_tracer.GetCurrentSourceLine());
                        tracer.AddTracer(else_tracer);
                        buf.Append(content);
                    }
                }
            }
            if (!elseif)
            {
                buf.AppendIndent(indent).Append("}").AppendLineSeparator();
                tracer.IncrementCurrentSourceLine();
            }
            return(buf);
        }
コード例 #8
0
        // precedence of new
        public override TextBuffer ToJava(int indent, BytecodeMappingTracer tracer)
        {
            TextBuffer buf = new TextBuffer();

            if (anonymous)
            {
                ClassesProcessor.ClassNode child = DecompilerContext.GetClassProcessor().GetMapRootClasses
                                                       ().GetOrNull(newType.value);
                // IDEA-204310 - avoid backtracking later on for lambdas (causes spurious imports)
                if (!enumConst && (!lambda || DecompilerContext.GetOption(IFernflowerPreferences
                                                                          .Lambda_To_Anonymous_Class)))
                {
                    string enclosing = null;
                    if (!lambda && constructor != null)
                    {
                        enclosing = GetQualifiedNewInstance(child.anonymousClassType.value, constructor.GetLstParameters
                                                                (), indent, tracer);
                        if (enclosing != null)
                        {
                            buf.Append(enclosing).Append('.');
                        }
                    }
                    buf.Append("new ");
                    string typename = ExprProcessor.GetCastTypeName(child.anonymousClassType);
                    if (enclosing != null)
                    {
                        ClassesProcessor.ClassNode anonymousNode = DecompilerContext.GetClassProcessor().
                                                                   GetMapRootClasses().GetOrNull(child.anonymousClassType.value);
                        if (anonymousNode != null)
                        {
                            typename = anonymousNode.simpleName;
                        }
                        else
                        {
                            typename = Sharpen.Runtime.Substring(typename, typename.LastIndexOf('.') + 1);
                        }
                    }
                    GenericClassDescriptor descriptor = ClassWriter.GetGenericClassDescriptor(child.classStruct
                                                                                              );
                    if (descriptor != null)
                    {
                        if ((descriptor.superinterfaces.Count == 0))
                        {
                            buf.Append(GenericMain.GetGenericCastTypeName(descriptor.superclass));
                        }
                        else
                        {
                            if (descriptor.superinterfaces.Count > 1 && !lambda)
                            {
                                DecompilerContext.GetLogger().WriteMessage("Inconsistent anonymous class signature: "
                                                                           + child.classStruct.qualifiedName, IFernflowerLogger.Severity.Warn);
                            }
                            buf.Append(GenericMain.GetGenericCastTypeName(descriptor.superinterfaces[0]));
                        }
                    }
                    else
                    {
                        buf.Append(typename);
                    }
                }
                buf.Append('(');
                if (!lambda && constructor != null)
                {
                    List <Exprent>        parameters = constructor.GetLstParameters();
                    List <VarVersionPair> mask       = child.GetWrapper().GetMethodWrapper(ICodeConstants.Init_Name
                                                                                           , constructor.GetStringDescriptor()).synthParameters;
                    if (mask == null)
                    {
                        InvocationExprent superCall = child.superInvocation;
                        mask = ExprUtil.GetSyntheticParametersMask(superCall.GetClassname(), superCall.GetStringDescriptor
                                                                       (), parameters.Count);
                    }
                    int  start      = enumConst ? 2 : 0;
                    bool firstParam = true;
                    for (int i = start; i < parameters.Count; i++)
                    {
                        if (mask == null || mask[i] == null)
                        {
                            if (!firstParam)
                            {
                                buf.Append(", ");
                            }
                            ExprProcessor.GetCastedExprent(parameters[i], constructor.GetDescriptor().@params
                                                           [i], buf, indent, true, tracer);
                            firstParam = false;
                        }
                    }
                }
                buf.Append(')');
                if (enumConst && buf.Length() == 2)
                {
                    buf.SetLength(0);
                }
                if (lambda)
                {
                    if (!DecompilerContext.GetOption(IFernflowerPreferences.Lambda_To_Anonymous_Class
                                                     ))
                    {
                        buf.SetLength(0);
                    }
                    // remove the usual 'new <class>()', it will be replaced with lambda style '() ->'
                    Exprent    methodObject = constructor == null ? null : constructor.GetInstance();
                    TextBuffer clsBuf       = new TextBuffer();
                    new ClassWriter().ClassLambdaToJava(child, clsBuf, methodObject, indent, tracer);
                    buf.Append(clsBuf);
                    tracer.IncrementCurrentSourceLine(clsBuf.CountLines());
                }
                else
                {
                    TextBuffer clsBuf = new TextBuffer();
                    new ClassWriter().ClassToJava(child, clsBuf, indent, tracer);
                    buf.Append(clsBuf);
                    tracer.IncrementCurrentSourceLine(clsBuf.CountLines());
                }
            }
            else if (directArrayInit)
            {
                VarType leftType = newType.DecreaseArrayDim();
                buf.Append('{');
                for (int i = 0; i < lstArrayElements.Count; i++)
                {
                    if (i > 0)
                    {
                        buf.Append(", ");
                    }
                    ExprProcessor.GetCastedExprent(lstArrayElements[i], leftType, buf, indent, false,
                                                   tracer);
                }
                buf.Append('}');
            }
            else if (newType.arrayDim == 0)
            {
                if (!enumConst)
                {
                    string enclosing = null;
                    if (constructor != null)
                    {
                        enclosing = GetQualifiedNewInstance(newType.value, constructor.GetLstParameters()
                                                            , indent, tracer);
                        if (enclosing != null)
                        {
                            buf.Append(enclosing).Append('.');
                        }
                    }
                    buf.Append("new ");
                    string typename = ExprProcessor.GetTypeName(newType);
                    if (enclosing != null)
                    {
                        ClassesProcessor.ClassNode newNode = DecompilerContext.GetClassProcessor().GetMapRootClasses
                                                                 ().GetOrNull(newType.value);
                        if (newNode != null)
                        {
                            typename = newNode.simpleName;
                        }
                        else
                        {
                            typename = Sharpen.Runtime.Substring(typename, typename.LastIndexOf('.') + 1);
                        }
                    }
                    buf.Append(typename);
                }
                if (constructor != null)
                {
                    List <Exprent>        parameters = constructor.GetLstParameters();
                    List <VarVersionPair> mask       = ExprUtil.GetSyntheticParametersMask(constructor.GetClassname
                                                                                               (), constructor.GetStringDescriptor(), parameters.Count);
                    int start = enumConst ? 2 : 0;
                    if (!enumConst || start < parameters.Count)
                    {
                        buf.Append('(');
                        bool firstParam = true;
                        for (int i = start; i < parameters.Count; i++)
                        {
                            if (mask == null || mask[i] == null)
                            {
                                Exprent expr     = parameters[i];
                                VarType leftType = constructor.GetDescriptor().@params[i];
                                if (i == parameters.Count - 1 && expr.GetExprType() == VarType.Vartype_Null && ProbablySyntheticParameter
                                        (leftType.value))
                                {
                                    break;
                                }
                                // skip last parameter of synthetic constructor call
                                if (!firstParam)
                                {
                                    buf.Append(", ");
                                }
                                ExprProcessor.GetCastedExprent(expr, leftType, buf, indent, true, false, true, true
                                                               , tracer);
                                firstParam = false;
                            }
                        }
                        buf.Append(')');
                    }
                }
            }
            else if (isVarArgParam)
            {
                // just print the array elements
                VarType leftType = newType.DecreaseArrayDim();
                for (int i = 0; i < lstArrayElements.Count; i++)
                {
                    if (i > 0)
                    {
                        buf.Append(", ");
                    }
                    // new String[][]{{"abc"}, {"DEF"}} => new String[]{"abc"}, new String[]{"DEF"}
                    Exprent element = lstArrayElements[i];
                    if (element.type == Exprent_New)
                    {
                        ((NewExprent)element).SetDirectArrayInit(false);
                    }
                    ExprProcessor.GetCastedExprent(element, leftType, buf, indent, false, tracer);
                }
                // if there is just one element of Object[] type it needs to be casted to resolve ambiguity
                if (lstArrayElements.Count == 1)
                {
                    VarType elementType = lstArrayElements[0].GetExprType();
                    if (elementType.type == ICodeConstants.Type_Object && elementType.value.Equals("java/lang/Object"
                                                                                                   ) && elementType.arrayDim >= 1)
                    {
                        buf.Prepend("(Object)");
                    }
                }
            }
            else
            {
                buf.Append("new ").Append(ExprProcessor.GetTypeName(newType));
                if ((lstArrayElements.Count == 0))
                {
                    for (int i = 0; i < newType.arrayDim; i++)
                    {
                        buf.Append('[');
                        if (i < lstDims.Count)
                        {
                            buf.Append(lstDims[i].ToJava(indent, tracer));
                        }
                        buf.Append(']');
                    }
                }
                else
                {
                    for (int i = 0; i < newType.arrayDim; i++)
                    {
                        buf.Append("[]");
                    }
                    VarType leftType = newType.DecreaseArrayDim();
                    buf.Append('{');
                    for (int i = 0; i < lstArrayElements.Count; i++)
                    {
                        if (i > 0)
                        {
                            buf.Append(", ");
                        }
                        ExprProcessor.GetCastedExprent(lstArrayElements[i], leftType, buf, indent, false,
                                                       tracer);
                    }
                    buf.Append('}');
                }
            }
            return(buf);
        }
コード例 #9
0
ファイル: DoStatement.cs プロジェクト: NickAcPT/NFernflower
        public override TextBuffer ToJava(int indent, BytecodeMappingTracer tracer)
        {
            TextBuffer buf = new TextBuffer();

            buf.Append(ExprProcessor.ListToJava(varDefinitions, indent, tracer));
            if (IsLabeled())
            {
                buf.AppendIndent(indent).Append("label").Append(this.id.ToString()).Append(":").AppendLineSeparator
                    ();
                tracer.IncrementCurrentSourceLine();
            }
            switch (looptype)
            {
            case Loop_Do:
            {
                buf.AppendIndent(indent).Append("while(true) {").AppendLineSeparator();
                tracer.IncrementCurrentSourceLine();
                buf.Append(ExprProcessor.JmpWrapper(first, indent + 1, false, tracer));
                buf.AppendIndent(indent).Append("}").AppendLineSeparator();
                tracer.IncrementCurrentSourceLine();
                break;
            }

            case Loop_Dowhile:
            {
                buf.AppendIndent(indent).Append("do {").AppendLineSeparator();
                tracer.IncrementCurrentSourceLine();
                buf.Append(ExprProcessor.JmpWrapper(first, indent + 1, false, tracer));
                buf.AppendIndent(indent).Append("} while(").Append(conditionExprent[0].ToJava(indent
                                                                                              , tracer)).Append(");").AppendLineSeparator();
                tracer.IncrementCurrentSourceLine();
                break;
            }

            case Loop_While:
            {
                buf.AppendIndent(indent).Append("while(").Append(conditionExprent[0].ToJava(indent
                                                                                            , tracer)).Append(") {").AppendLineSeparator();
                tracer.IncrementCurrentSourceLine();
                buf.Append(ExprProcessor.JmpWrapper(first, indent + 1, false, tracer));
                buf.AppendIndent(indent).Append("}").AppendLineSeparator();
                tracer.IncrementCurrentSourceLine();
                break;
            }

            case Loop_For:
            {
                buf.AppendIndent(indent).Append("for(");
                if (initExprent[0] != null)
                {
                    buf.Append(initExprent[0].ToJava(indent, tracer));
                }
                buf.Append("; ").Append(conditionExprent[0].ToJava(indent, tracer)).Append("; ").
                Append(incExprent[0].ToJava(indent, tracer)).Append(") {").AppendLineSeparator();
                tracer.IncrementCurrentSourceLine();
                buf.Append(ExprProcessor.JmpWrapper(first, indent + 1, false, tracer));
                buf.AppendIndent(indent).Append("}").AppendLineSeparator();
                tracer.IncrementCurrentSourceLine();
                break;
            }
            }
            return(buf);
        }