char* __tabs(int count) {
growing_buffer* buf = buffer_init(24);
int i;
- for(i=0;i!=count;i++) buffer_add(buf, " ");
+ for(i=0;i!=count;i++) buffer_add(buf, " ");
char* final = buffer_data( buf );
buffer_free( buf );
return final;
char* json_string_format(char* string) {
+ if(!string) return strdup("");
+
growing_buffer* buf = buffer_init(64);
int i;
- int tab_var = 0;
- for(i=0; i!= strlen(string); i++) {
-
- if( string[i] == '{' ) {
-
- buffer_add( buf, " {");
- buffer_add(buf, "\n");
- char* tab = __tabs(tab_var);
- buffer_add(buf, tab);
- free(tab);
+ int depth = 0;
- tab_var++;
- buffer_add( buf, "\n" );
- tab = __tabs(tab_var);
- buffer_add( buf, tab );
- free(tab);
+ for(i=0; i!= strlen(string); i++) {
- } else if( string[i] == '[' ) {
+ if( string[i] == '{' || string[i] == '[' ) {
- buffer_add( buf, "[");
- buffer_add(buf, "\n");
- char* tab = __tabs(tab_var);
- buffer_add(buf, tab);
- free(tab);
- tab_var++;
- buffer_add( buf, "\n" );
- tab = __tabs(tab_var);
- buffer_add( buf, tab );
+ char* tab = __tabs(++depth);
+ buffer_fadd( buf, "%c\n%s", string[i], tab);
free(tab);
- } else if( string[i] == '}' ) {
+ } else if( string[i] == '}' || string[i] == ']' ) {
- tab_var--;
- buffer_add(buf, "\n");
- char* tab = __tabs(tab_var);
- buffer_add(buf, tab);
+ char* tab = __tabs(--depth);
+ buffer_fadd( buf, "\n%s%c", tab, string[i]);
free(tab);
- buffer_add( buf, "}");
- buffer_add( buf, "\n" );
- tab = __tabs(tab_var);
- buffer_add( buf, tab );
- free(tab);
-
- } else if( string[i] == ']' ) {
- tab_var--;
- buffer_add(buf, "\n");
- char* tab = __tabs(tab_var);
- buffer_add(buf, tab);
- free(tab);
- buffer_add( buf, "]");
- buffer_add( buf, "\n" );
- tab = __tabs(tab_var);
- buffer_add( buf, tab );
- free(tab);
+ if(string[i+1] != ',') {
+ tab = __tabs(depth);
+ buffer_fadd( buf, "\n%s", tab );
+ free(tab);
+ }
} else if( string[i] == ',' ) {
- buffer_add( buf, ",");
- buffer_add( buf, "\n" );
- char* tab = __tabs(tab_var);
- buffer_add(buf, tab);
+ char* tab = __tabs(depth);
+ buffer_fadd(buf, ",\n%s", tab);
free(tab);
- } else {
-
- char b[2];
- b[0] = string[i];
- b[1] = '\0';
- buffer_add( buf, b );
- }
+ } else { buffer_add_char(buf, string[i]); }
}
}
+object* object_clone(object* o) {
+ if(!o) return NULL;
+ char* json = o->to_json(o);
+ object* newo = json_parse_string(json);
+ free(json);
+ return newo;
+}
+
+
/* ---------------------------------------------------------------------- */
/* Iterator */
if( pretty_print && omsg->_result_content ) {
char* j = object_to_json(omsg->_result_content);
- content = json_printer(j);
+ //content = json_printer(j);
+ content = json_string_format(j);
free(j);
} else
content = object_get_string(omsg->_result_content);
if( pretty_print && omsg->_result_content ) {
char* j = object_to_json(omsg->_result_content);
- content = json_printer(j);
+ //content = json_printer(j);
+ content = json_string_format(j);
free(j);
} else
content = object_get_string(omsg->_result_content);
growing_buffer* buf = buffer_init(24);
int i;
for(i=0;i!=count;i++)
- buffer_add(buf, " ");
+ buffer_add(buf, " ");
char* final = buffer_data( buf );
buffer_free( buf );
return final;
}
-char* json_printer( char* string ) {
-
- growing_buffer* buf = buffer_init(64);
- int i;
- int tab_var = 0;
- for(i=0; i!= strlen(string); i++) {
-
- if( string[i] == '{' ) {
-
- buffer_add(buf, "\n");
- char* tab = tabs(tab_var);
- buffer_add(buf, tab);
- free(tab);
- buffer_add( buf, "{");
- tab_var++;
- buffer_add( buf, "\n" );
- tab = tabs(tab_var);
- buffer_add( buf, tab );
- free(tab);
-
- } else if( string[i] == '[' ) {
-
- buffer_add(buf, "\n");
- char* tab = tabs(tab_var);
- buffer_add(buf, tab);
- free(tab);
- buffer_add( buf, "[");
- tab_var++;
- buffer_add( buf, "\n" );
- tab = tabs(tab_var);
- buffer_add( buf, tab );
- free(tab);
-
- } else if( string[i] == '}' ) {
-
- tab_var--;
- buffer_add(buf, "\n");
- char* tab = tabs(tab_var);
- buffer_add(buf, tab);
- free(tab);
- buffer_add( buf, "}");
- buffer_add( buf, "\n" );
- tab = tabs(tab_var);
- buffer_add( buf, tab );
- free(tab);
-
- } else if( string[i] == ']' ) {
-
- tab_var--;
- buffer_add(buf, "\n");
- char* tab = tabs(tab_var);
- buffer_add(buf, tab);
- free(tab);
- buffer_add( buf, "]");
- buffer_add( buf, "\n" );
- tab = tabs(tab_var);
- buffer_add( buf, tab );
- free(tab);
-
- } else if( string[i] == ',' ) {
-
- buffer_add( buf, ",");
- buffer_add( buf, "\n" );
- char* tab = tabs(tab_var);
- buffer_add(buf, tab);
- free(tab);
-
- } else {
-
- char b[2];
- b[0] = string[i];
- b[1] = '\0';
- buffer_add( buf, b );
- }
-
- }
-
- char* result = buffer_data(buf);
- buffer_free(buf);
- return result;
-
-}
-
int handle_math( char* words[] ) {
if( words[1] && words[2] )
return do_math( atoi(words[1]), atoi(words[2]) );