public override string GetPhpCode(PhpEmitStyle style) { var join = style == null || style.Compression == EmitStyleCompression.Beauty ? ", " : ","; var xstyle = PhpEmitStyle.xClone(style); var arguments = string.Join(join, Arguments.Select(i => i.GetPhpCode(xstyle))); if (IsConstructorCall) { var a = string.Format("new {0}({1})", _className.NameForEmit(style), arguments); return(a); } var name = _name; if (!_className.IsEmpty) { name = _className.NameForEmit(style) + "::" + name; } else if (TargetObject != null) { var to = TargetObject; if (TargetObject is PhpMethodCallExpression && (TargetObject as PhpMethodCallExpression).IsConstructorCall) { to = new PhpParenthesizedExpression(to); } name = to.GetPhpCode(style) + "->" + name; } var code = string.Format(name == "echo" ? "{0} {1}" : "{0}({1})", name, arguments); return(code); }
// Public Methods public override void Emit(PhpSourceCodeEmiter emiter, PhpSourceCodeWriter writer, PhpEmitStyle style) { style = PhpEmitStyle.xClone(style); if (!style.AsIncrementor) { if (_expression is PhpMethodCallExpression) { var methodCallExpression = _expression as PhpMethodCallExpression; if (methodCallExpression.CallType == MethodCallStyles.Procedural && methodCallExpression.Name == "echo") { if (EmitInlineHtml(writer, style)) { return; } } } } var code = _expression.GetPhpCode(style); if (style.AsIncrementor) { writer.Write(code); } else { writer.WriteLn(code + ";"); } }
// Protected Methods protected void EmitHeaderStatement(PhpSourceCodeEmiter emiter, PhpSourceCodeWriter writer, PhpEmitStyle style, string header, IPhpStatement statement) { style = style ?? new PhpEmitStyle(); var iStyle = PhpEmitStyle.xClone(style, ShowBracketsEnum.IfManyItems); if (style.UseBracketsEvenIfNotNecessary) { iStyle.Brackets = ShowBracketsEnum.Always; } var statementToEmit = PhpCodeBlock.Reduce(statement); var emptyStatement = !PhpCodeBlock.HasAny(statementToEmit); if (emptyStatement) { header += "{}"; } if (style.Compression == EmitStyleCompression.NearCrypto) { writer.Write(header); } else { writer.WriteLn(header); } if (emptyStatement) { return; } var myBracket = style.UseBracketsEvenIfNotNecessary; if (!myBracket) { var gf = statementToEmit.GetStatementEmitInfo(iStyle); if (gf != StatementEmitInfo.NormalSingleStatement) { myBracket = true; } } writer.IncIndent(); if (myBracket) { iStyle.Brackets = ShowBracketsEnum.Never; writer.OpenLn("{"); } statementToEmit.Emit(emiter, writer, iStyle); if (myBracket) { writer.CloseLn("}"); } writer.DecIndent(); }
private static string Collect(PhpSourceCodeEmiter emiter, PhpEmitStyle style, IPhpValue[] collection) { var list = new List <string>(); var xStyle = PhpEmitStyle.xClone(style); xStyle.AsIncrementor = true; foreach (var item in collection) { list.Add(item.GetPhpCode(xStyle)); } return(string.Join(", ", list)); }
// Private Methods private static string Collect(PhpSourceCodeEmiter emiter, PhpEmitStyle style, IPhpStatement[] collection) { var list = new List <string>(); var xStyle = PhpEmitStyle.xClone(style); xStyle.AsIncrementor = true; foreach (var item in collection) { var writer = new PhpSourceCodeWriter(); writer.Clear(); item.Emit(emiter, writer, xStyle); list.Add(writer.GetCode(true).Trim()); } return(string.Join(", ", list)); }
// Public Methods public void Emit(PhpSourceCodeEmiter emiter, PhpSourceCodeWriter writer, PhpEmitStyle style) { if (statements.Count == 0) { return; } var bracketStyle = style == null ? ShowBracketsEnum.IfManyItems : style.Brackets; var brack = bracketStyle == ShowBracketsEnum.Never ? false : bracketStyle == ShowBracketsEnum.Always ? true : statements == null || !(statements.Count == 1); if (statements != null && statements.Count == 1 && bracketStyle == ShowBracketsEnum.IfManyItems_OR_IfStatement) { if (statements[0] is PhpIfStatement) { brack = true; } } var iStyle = PhpEmitStyle.xClone(style, ShowBracketsEnum.Never); if (!brack && bracketStyle != ShowBracketsEnum.Never && statements.Count == 1) { var tmp = statements[0]; var gf = tmp.GetStatementEmitInfo(iStyle); if (gf != StatementEmitInfo.NormalSingleStatement) { brack = true; } } if (brack) { writer.OpenLn("{"); } foreach (var i in statements) { i.Emit(emiter, writer, iStyle); } if (brack) { writer.CloseLn("}"); } return; }
public string GetPhpCode(PhpEmitStyle style) { /* * echo preg_replace_callback('~-([a-z])~', function ($match) { * return strtoupper($match[1]); * }, 'hello-world'); * // outputs helloWorld */ var s = PhpEmitStyle.xClone(style); s.AsIncrementor = true; var e = new PhpSourceCodeEmiter(); var wde = new PhpSourceCodeWriter(); wde.Clear(); MethodDefinition.Emit(e, wde, s); var code = wde.GetCode(true).Trim(); return(code); }
// Public Methods public virtual void Emit(PhpSourceCodeEmiter emiter, PhpSourceCodeWriter code, PhpEmitStyle style) { // public function addFunction($function, $namespace = '') var accessModifiers = GetAccessModifiers(); var param = Arguments == null ? "" : string.Join(", ", Arguments.Select(u => u.GetPhpCode(style))); code.OpenLnF("{0} function {1}({2}) {{", accessModifiers, Name, param); { var g = GetGlobals(); if (!string.IsNullOrEmpty(g)) { code.WriteLnF("global {0};", g); } } foreach (var statement in Statements) { var g = PhpEmitStyle.xClone(style); g.Brackets = ShowBracketsEnum.Never; statement.Emit(emiter, code, g); } code.CloseLn("}"); }
// Public Methods public override void Emit(PhpSourceCodeEmiter emiter, PhpSourceCodeWriter writer, PhpEmitStyle style) { var isBeauty = style == null || style.Compression == EmitStyleCompression.Beauty; var ifTrueAny = PhpCodeBlock.HasAny(_ifTrue); var ifFalseAny = PhpCodeBlock.HasAny(_ifFalse); if (!ifTrueAny && !ifFalseAny) { return; } writer.OpenLnF("if{1}({0}){2}", Condition.GetPhpCode(style), isBeauty ? " " : "", ifTrueAny ? "" : "{}"); if (ifTrueAny) { var iStyle = PhpEmitStyle.xClone(style, ShowBracketsEnum.IfManyItems_OR_IfStatement); if (style != null && style.UseBracketsEvenIfNotNecessary) { iStyle.Brackets = ShowBracketsEnum.Always; } var bound = PhpCodeBlock.Bound(_ifTrue); bound.Emit(emiter, writer, iStyle); } writer.DecIndent(); if (!ifFalseAny) { return; } var oneLine = _ifFalse is PhpIfStatement; var oldIndent = writer.Intent; { if (oneLine) { writer.Write("else "); writer.SkipIndent = true; } else { writer.OpenLn("else"); } var myBracket = style != null && style.UseBracketsEvenIfNotNecessary; var iStyle = PhpEmitStyle.xClone(style, myBracket ? ShowBracketsEnum.Never : ShowBracketsEnum.IfManyItems_OR_IfStatement); if (!myBracket) { var gf = _ifFalse.GetStatementEmitInfo(iStyle); if (gf != StatementEmitInfo.NormalSingleStatement) { myBracket = true; } } if (myBracket) { iStyle.Brackets = ShowBracketsEnum.Never; writer.OpenLn("{"); } _ifFalse.Emit(emiter, writer, iStyle); if (myBracket) { writer.CloseLn("}"); } } writer.Intent = oldIndent; }