[Groonga-commit] groonga/groonga at a192c5d [master] pretty print: indent body

Back to archive index

Kouhei Sutou null+****@clear*****
Tue Nov 24 12:38:23 JST 2015


Kouhei Sutou	2015-11-24 12:38:23 +0900 (Tue, 24 Nov 2015)

  New Revision: a192c5db16db86360d026eef2a4150a1261fab83
  https://github.com/groonga/groonga/commit/a192c5db16db86360d026eef2a4150a1261fab83

  Message:
    pretty print: indent body

  Modified files:
    lib/output.c

  Modified: lib/output.c (+188 -125)
===================================================================
--- lib/output.c    2015-11-23 23:03:17 +0900 (2c99067)
+++ lib/output.c    2015-11-24 12:38:23 +0900 (19dc1b7)
@@ -49,7 +49,7 @@ put_delimiter(grn_ctx *ctx, grn_obj *outbuf, grn_content_type output_type)
     if (level < 2) {
       if (DEPTH > 0 && ctx->impl->output.is_pretty) {
         GRN_TEXT_PUTC(ctx, outbuf, '\n');
-        indent(ctx, outbuf, DEPTH);
+        indent(ctx, outbuf, DEPTH + 1);
       }
       return;
     }
@@ -62,7 +62,7 @@ put_delimiter(grn_ctx *ctx, grn_obj *outbuf, grn_content_type output_type)
       GRN_TEXT_PUTC(ctx, outbuf, ',');
       if (ctx->impl->output.is_pretty) {
         GRN_TEXT_PUTC(ctx, outbuf, '\n');
-        indent(ctx, outbuf, DEPTH);
+        indent(ctx, outbuf, DEPTH + 1);
       }
     }
     // if (DEPTH == 1 && ((level & 3) != 3)) { GRN_TEXT_PUTC(ctx, outbuf, '\n'); }
@@ -135,7 +135,7 @@ grn_output_array_close(grn_ctx *ctx, grn_obj *outbuf, grn_content_type output_ty
   case GRN_CONTENT_JSON:
     if (ctx->impl->output.is_pretty) {
       GRN_TEXT_PUTC(ctx, outbuf, '\n');
-      indent(ctx, outbuf, DEPTH - 1);
+      indent(ctx, outbuf, DEPTH);
     }
     GRN_TEXT_PUTC(ctx, outbuf, ']');
     break;
@@ -215,7 +215,7 @@ grn_output_map_close(grn_ctx *ctx, grn_obj *outbuf, grn_content_type output_type
   case GRN_CONTENT_JSON:
     if (ctx->impl->output.is_pretty) {
       GRN_TEXT_PUTC(ctx, outbuf, '\n');
-      indent(ctx, outbuf, DEPTH - 1);
+      indent(ctx, outbuf, DEPTH);
     }
     GRN_TEXT_PUTS(ctx, outbuf, "}");
     break;
@@ -1850,6 +1850,186 @@ msgpack_buffer_writer(void* data, const char* buf, msgpack_size_t len)
 
 #define JSON_CALLBACK_PARAM "callback"
 
+static void
+grn_output_envelope_json(grn_ctx *ctx,
+                         grn_rc rc,
+                         grn_obj *head,
+                         grn_obj *body,
+                         grn_obj *foot,
+                         double started,
+                         double elapsed,
+                         const char *file,
+                         int line)
+{
+  int indent_level = 0;
+  grn_bool is_pretty = ctx->impl->output.is_pretty;
+  grn_obj *expr;
+  grn_obj *jsonp_func = NULL;
+
+  expr = ctx->impl->curr_expr;
+  if (expr) {
+    jsonp_func = grn_expr_get_var(ctx, expr, JSON_CALLBACK_PARAM,
+                                  strlen(JSON_CALLBACK_PARAM));
+  }
+  if (jsonp_func && GRN_TEXT_LEN(jsonp_func)) {
+    GRN_TEXT_PUT(ctx, head,
+                 GRN_TEXT_VALUE(jsonp_func), GRN_TEXT_LEN(jsonp_func));
+    GRN_TEXT_PUTC(ctx, head, '(');
+  }
+
+  GRN_TEXT_PUTC(ctx, head, '[');
+  if (is_pretty) {
+    GRN_TEXT_PUTC(ctx, head, '\n');
+    indent_level++;
+    indent(ctx, head, indent_level);
+  }
+
+  GRN_TEXT_PUTC(ctx, head, '[');
+  if (is_pretty) {
+    GRN_TEXT_PUTC(ctx, head, '\n');
+    indent_level++;
+    indent(ctx, head, indent_level);
+  }
+
+  grn_text_itoa(ctx, head, rc);
+  GRN_TEXT_PUTC(ctx, head, ',');
+  if (is_pretty) {
+    GRN_TEXT_PUTC(ctx, head, '\n');
+    indent(ctx, head, indent_level);
+  }
+
+  grn_text_ftoa(ctx, head, started);
+  GRN_TEXT_PUTC(ctx, head, ',');
+  if (is_pretty) {
+    GRN_TEXT_PUTC(ctx, head, '\n');
+    indent(ctx, head, indent_level);
+  }
+
+  grn_text_ftoa(ctx, head, elapsed);
+
+  if (rc != GRN_SUCCESS) {
+    GRN_TEXT_PUTC(ctx, head, ',');
+    if (is_pretty) {
+      GRN_TEXT_PUTC(ctx, head, '\n');
+      indent(ctx, head, indent_level);
+    }
+
+    grn_text_esc(ctx, head, ctx->errbuf, strlen(ctx->errbuf));
+    if (ctx->errfunc && ctx->errfile) {
+      grn_obj *command;
+
+      GRN_TEXT_PUTC(ctx, head, ',');
+      if (is_pretty) {
+        GRN_TEXT_PUTC(ctx, head, '\n');
+        indent(ctx, head, indent_level);
+      }
+
+      GRN_TEXT_PUTC(ctx, head, '[');
+      if (is_pretty) {
+        GRN_TEXT_PUTC(ctx, head, '\n');
+        indent_level++;
+        indent(ctx, head, indent_level);
+      }
+
+      GRN_TEXT_PUTC(ctx, head, '[');
+      if (is_pretty) {
+        GRN_TEXT_PUTC(ctx, head, '\n');
+        indent_level++;
+        indent(ctx, head, indent_level);
+      }
+
+      grn_text_esc(ctx, head, ctx->errfunc, strlen(ctx->errfunc));
+      GRN_TEXT_PUTC(ctx, head, ',');
+      if (is_pretty) {
+        GRN_TEXT_PUTC(ctx, head, '\n');
+        indent(ctx, head, indent_level);
+      }
+
+      grn_text_esc(ctx, head, ctx->errfile, strlen(ctx->errfile));
+      GRN_TEXT_PUTC(ctx, head, ',');
+      if (is_pretty) {
+        GRN_TEXT_PUTC(ctx, head, '\n');
+        indent(ctx, head, indent_level);
+      }
+
+      grn_text_itoa(ctx, head, ctx->errline);
+      if (is_pretty) {
+        GRN_TEXT_PUTC(ctx, head, '\n');
+        indent_level--;
+        indent(ctx, head, indent_level);
+      }
+      GRN_TEXT_PUTC(ctx, head, ']');
+      if (file && (command = GRN_CTX_USER_DATA(ctx)->ptr)) {
+        GRN_TEXT_PUTC(ctx, head, ',');
+        if (is_pretty) {
+          GRN_TEXT_PUTC(ctx, head, '\n');
+          indent(ctx, head, indent_level);
+        }
+
+        GRN_TEXT_PUTC(ctx, head, '[');
+        if (is_pretty) {
+          GRN_TEXT_PUTC(ctx, head, '\n');
+          indent_level++;
+          indent(ctx, head, indent_level);
+        }
+
+        grn_text_esc(ctx, head, file, strlen(file));
+        GRN_TEXT_PUTC(ctx, head, ',');
+        if (is_pretty) {
+          GRN_TEXT_PUTC(ctx, head, '\n');
+          indent(ctx, head, indent_level);
+        }
+
+        grn_text_itoa(ctx, head, line);
+        GRN_TEXT_PUTC(ctx, head, ',');
+        if (is_pretty) {
+          GRN_TEXT_PUTC(ctx, head, '\n');
+          indent(ctx, head, indent_level);
+        }
+
+        grn_text_esc(ctx, head, GRN_TEXT_VALUE(command), GRN_TEXT_LEN(command));
+        if (is_pretty) {
+          GRN_TEXT_PUTC(ctx, head, '\n');
+          indent_level--;
+          indent(ctx, head, indent_level);
+        }
+        GRN_TEXT_PUTC(ctx, head, ']');
+      }
+
+      if (is_pretty) {
+        GRN_TEXT_PUTC(ctx, head, '\n');
+        indent_level--;
+        indent(ctx, head, indent_level);
+      }
+      GRN_TEXT_PUTC(ctx, head, ']');
+    }
+  }
+  if (is_pretty) {
+    GRN_TEXT_PUTC(ctx, head, '\n');
+    indent_level--;
+    indent(ctx, head, indent_level);
+  }
+  GRN_TEXT_PUTC(ctx, head, ']');
+
+  if (GRN_TEXT_LEN(body)) {
+    GRN_TEXT_PUTC(ctx, head, ',');
+    if (is_pretty) {
+      GRN_TEXT_PUTC(ctx, head, '\n');
+      indent(ctx, head, indent_level);
+    }
+  }
+
+  if (is_pretty) {
+    GRN_TEXT_PUTC(ctx, foot, '\n');
+    indent_level--;
+    indent(ctx, head, indent_level);
+  }
+  GRN_TEXT_PUTC(ctx, foot, ']');
+  if (jsonp_func && GRN_TEXT_LEN(jsonp_func)) {
+    GRN_TEXT_PUTS(ctx, foot, ");");
+  }
+}
+
 void
 grn_output_envelope(grn_ctx *ctx,
                     grn_rc rc,
@@ -1860,8 +2040,6 @@ grn_output_envelope(grn_ctx *ctx,
                     int line)
 {
   double started, finished, elapsed;
-  grn_obj *expr = NULL;
-  grn_obj *jsonp_func = NULL;
 
   grn_timeval tv_now;
   grn_timeval_now(ctx, &tv_now);
@@ -1873,125 +2051,10 @@ grn_output_envelope(grn_ctx *ctx,
 
   switch (ctx->impl->output.type) {
   case GRN_CONTENT_JSON:
-    expr = ctx->impl->curr_expr;
-    if (expr) {
-      jsonp_func = grn_expr_get_var(ctx, expr, JSON_CALLBACK_PARAM,
-                                    strlen(JSON_CALLBACK_PARAM));
-    }
-    if (jsonp_func && GRN_TEXT_LEN(jsonp_func)) {
-      GRN_TEXT_PUT(ctx, head, GRN_TEXT_VALUE(jsonp_func), GRN_TEXT_LEN(jsonp_func));
-      GRN_TEXT_PUTC(ctx, head, '(');
-    }
-    if (ctx->impl->output.is_pretty) {
-      grn_text_printf(ctx, head,
-                      "[\n"
-                      "[\n"
-                      "  %d,\n"
-                      "  %f,\n"
-                      "  %f",
-                      rc, started, elapsed);
-    } else {
-      grn_text_printf(ctx, head,
-                      "[[%d,%f,%f",
-                      rc, started, elapsed);
-    }
-    if (rc != GRN_SUCCESS) {
-      GRN_TEXT_PUTC(ctx, head, ',');
-      if (ctx->impl->output.is_pretty) {
-        GRN_TEXT_PUTS(ctx, head,
-                      "\n"
-                      "  ");
-      }
-      grn_text_esc(ctx, head, ctx->errbuf, strlen(ctx->errbuf));
-      if (ctx->errfunc && ctx->errfile) {
-        grn_obj *command;
-        if (ctx->impl->output.is_pretty) {
-          GRN_TEXT_PUTS(ctx, head,
-                        ",\n"
-                        "  [\n"
-                        "    [\n"
-                        "      ");
-        } else {
-          GRN_TEXT_PUTS(ctx, head, ",[[");
-        }
-        grn_text_esc(ctx, head, ctx->errfunc, strlen(ctx->errfunc));
-        GRN_TEXT_PUTC(ctx, head, ',');
-        if (ctx->impl->output.is_pretty) {
-          GRN_TEXT_PUTS(ctx, head,
-                        "\n"
-                        "      ");
-        }
-        grn_text_esc(ctx, head, ctx->errfile, strlen(ctx->errfile));
-        GRN_TEXT_PUTC(ctx, head, ',');
-        if (ctx->impl->output.is_pretty) {
-          GRN_TEXT_PUTS(ctx, head,
-                        "\n"
-                        "      ");
-        }
-        grn_text_itoa(ctx, head, ctx->errline);
-        if (ctx->impl->output.is_pretty) {
-          GRN_TEXT_PUTS(ctx, head,
-                        "\n"
-                        "    ");
-        }
-        GRN_TEXT_PUTS(ctx, head, "]");
-        if (file && (command = GRN_CTX_USER_DATA(ctx)->ptr)) {
-          if (ctx->impl->output.is_pretty) {
-            GRN_TEXT_PUTS(ctx, head,
-                          ",\n"
-                          "    [\n"
-                          "      ");
-          } else {
-            GRN_TEXT_PUTS(ctx, head, ",[");
-          }
-          grn_text_esc(ctx, head, file, strlen(file));
-          GRN_TEXT_PUTC(ctx, head, ',');
-          if (ctx->impl->output.is_pretty) {
-            GRN_TEXT_PUTS(ctx, head,
-                          "\n"
-                          "      ");
-          }
-          grn_text_itoa(ctx, head, line);
-          GRN_TEXT_PUTC(ctx, head, ',');
-          if (ctx->impl->output.is_pretty) {
-            GRN_TEXT_PUTS(ctx, head,
-                          "\n"
-                          "      ");
-          }
-          grn_text_esc(ctx, head, GRN_TEXT_VALUE(command), GRN_TEXT_LEN(command));
-          if (ctx->impl->output.is_pretty) {
-            GRN_TEXT_PUTS(ctx, head,
-                          "\n"
-                          "    ");
-          }
-          GRN_TEXT_PUTS(ctx, head, "]");
-        }
-        if (ctx->impl->output.is_pretty) {
-          GRN_TEXT_PUTS(ctx, head,
-                        "\n"
-                        "  ");
-        }
-        GRN_TEXT_PUTS(ctx, head, "]");
-      }
-    }
-    if (ctx->impl->output.is_pretty) {
-      GRN_TEXT_PUTC(ctx, head, '\n');
-    }
-    GRN_TEXT_PUTC(ctx, head, ']');
-    if (GRN_TEXT_LEN(body)) {
-      GRN_TEXT_PUTC(ctx, head, ',');
-      if (ctx->impl->output.is_pretty) {
-        GRN_TEXT_PUTC(ctx, head, '\n');
-      }
-    }
-
-    if (ctx->impl->output.is_pretty) {
-      GRN_TEXT_PUTS(ctx, foot, "\n");
-    }
-    GRN_TEXT_PUTC(ctx, foot, ']');
-    if (jsonp_func && GRN_TEXT_LEN(jsonp_func)) {
-      GRN_TEXT_PUTS(ctx, foot, ");");
-    }
+    grn_output_envelope_json(ctx, rc,
+                             head, body, foot,
+                             started, elapsed,
+                             file, line);
     break;
   case GRN_CONTENT_TSV:
     grn_text_itoa(ctx, head, rc);
-------------- next part --------------
HTML����������������������������...
Download 



More information about the Groonga-commit mailing list
Back to archive index