static void debugger_log (IdeDebuggerEditorAddin *self, IdeDebuggerStream stream, GBytes *content, IdeDebugger *debugger) { g_assert (IDE_IS_DEBUGGER_EDITOR_ADDIN (self)); g_assert (IDE_IS_DEBUGGER_STREAM (stream)); g_assert (content != NULL); g_assert (IDE_IS_DEBUGGER (debugger)); if (stream == IDE_DEBUGGER_CONSOLE) { IdeLineReader reader; const gchar *str; gchar *line; gsize len; gsize line_len; str = g_bytes_get_data (content, &len); /* * Ingnore \n so we can add \r\n. Otherwise we get problematic * output in the terminal. */ ide_line_reader_init (&reader, (gchar *)str, len); while (NULL != (line = ide_line_reader_next (&reader, &line_len))) { vte_terminal_feed (VTE_TERMINAL (self->log_view), line, line_len); if ((line + line_len) < (str + len)) { if (line[line_len] == '\r' || line[line_len] == '\n') vte_terminal_feed (VTE_TERMINAL (self->log_view), "\r\n", 2); } } } }
int main (int argc, char *argv[]) { IdeLineReader reader; const gchar *param; Fuzzy *fuzzy; GArray *ar; gchar *contents; gchar *line; gsize len; gsize line_len; if (argc < 3) { g_printerr ("usage: %s FILENAME QUERY\n", argv[0]); return 1; } fuzzy = fuzzy_new (FALSE); g_print ("Loading contents\n"); g_file_get_contents (argv [1], &contents, &len, NULL); g_print ("Loaded\n"); ide_line_reader_init (&reader, contents, len); fuzzy_begin_bulk_insert (fuzzy); g_print ("Building index.\n"); while ((line = ide_line_reader_next (&reader, &line_len))) { line [line_len] = '\0'; fuzzy_insert (fuzzy, line, NULL); } fuzzy_end_bulk_insert (fuzzy); g_print ("Built.\n"); g_free (contents); if (!g_utf8_validate (argv[2], -1, NULL)) { g_critical ("Invalid UTF-8 discovered, aborting."); return EXIT_FAILURE; } if (strlen (argv[2]) > 256) { g_critical ("Only supports searching of up to 256 characters."); return EXIT_FAILURE; } param = (const gchar *)argv[2]; ar = fuzzy_match (fuzzy, param, 0); for (guint i = 0; i < ar->len; i++) { FuzzyMatch *m = &g_array_index (ar, FuzzyMatch, i); g_print ("%0.3lf: %s\n", m->score, m->key); } g_print ("%d matches\n", ar->len); g_array_unref (ar); fuzzy_unref (fuzzy); return 0; }
gchar * ide_language_format_header (GtkSourceLanguage *self, const gchar *header) { IdeLineReader reader; const gchar *first_prefix; const gchar *last_prefix; const gchar *line_prefix; const gchar *line; gboolean first = TRUE; GString *outstr; gsize len; guint prefix_len; g_return_val_if_fail (GTK_SOURCE_IS_LANGUAGE (self), NULL); g_return_val_if_fail (header != NULL, NULL); first_prefix = gtk_source_language_get_metadata (self, "block-comment-start"); last_prefix = gtk_source_language_get_metadata (self, "block-comment-end"); line_prefix = gtk_source_language_get_metadata (self, "line-comment-start"); if ((g_strcmp0 (first_prefix, "/*") == 0) && (g_strcmp0 (last_prefix, "*/") == 0)) line_prefix = " *"; if (first_prefix == NULL || last_prefix == NULL) { first_prefix = line_prefix; last_prefix = line_prefix; } prefix_len = strlen (first_prefix); outstr = g_string_new (NULL); ide_line_reader_init (&reader, (gchar *)header, -1); while (NULL != (line = ide_line_reader_next (&reader, &len))) { if (first) { g_string_append (outstr, first_prefix); first = FALSE; } else if (line_prefix == NULL) { guint i; for (i = 0; i < prefix_len; i++) g_string_append_c (outstr, ' '); } else { g_string_append (outstr, line_prefix); } if (len) { g_string_append_c (outstr, ' '); g_string_append_len (outstr, line, len); } g_string_append_c (outstr, '\n'); } if (last_prefix && g_strcmp0 (first_prefix, last_prefix) != 0) { if (line_prefix && *line_prefix == ' ') g_string_append_c (outstr, ' '); g_string_append (outstr, last_prefix); g_string_append_c (outstr, '\n'); } return g_string_free (outstr, FALSE); }