1 /* logjam - a GTK client for LiveJournal.
2 * Copyright (C) 2005 Evan Martin <evan@livejournal.com>
8 #include "html_markup.h"
11 void html_mark_tag (JamDoc
*doc
, const char *tag
, ...) {
12 GtkTextBuffer
*buffer
;
13 GtkTextIter start
, end
;
15 char *startTag
, *endTag
;
19 if (!strcmp(tag
, "span")) {
21 startTag
= g_strdup_printf("<%s %s>", tag
, va_arg(ap
, const char *));
24 startTag
= g_strdup_printf("<%s>", tag
);
26 endTag
= g_strdup_printf("</%s>", tag
);
27 tagLen
= strlen(endTag
);
29 buffer
= jam_doc_get_text_buffer(doc
);
31 gtk_text_buffer_begin_user_action(buffer
); /* start undo action */
33 if (!gtk_text_buffer_get_selection_bounds(buffer
, &start
, &end
)) {
34 gtk_text_buffer_insert_at_cursor(buffer
, startTag
, -1);
35 gtk_text_buffer_insert_at_cursor(buffer
, endTag
, -1);
36 ins
= gtk_text_buffer_get_mark(buffer
, "insert");
37 gtk_text_buffer_get_iter_at_mark(buffer
, &start
, ins
);
38 gtk_text_iter_backward_chars(&start
, tagLen
);
39 gtk_text_buffer_move_mark_by_name(buffer
, "insert", &start
);
40 gtk_text_buffer_move_mark_by_name(buffer
, "selection_bound", &start
);
42 gtk_text_buffer_insert(buffer
, &start
, startTag
, -1);
43 gtk_text_buffer_get_selection_bounds(buffer
, &start
, &end
);
44 gtk_text_buffer_insert(buffer
, &end
, endTag
, -1);
45 gtk_text_buffer_move_mark_by_name(buffer
, "insert", &end
);
46 gtk_text_buffer_move_mark_by_name(buffer
, "selection_bound", &end
);
51 gtk_text_buffer_end_user_action(buffer
);
55 #define MKTAG(name,...) void html_mark_##name (JamDoc *doc) { html_mark_tag(doc, __VA_ARGS__); }
56 #define MKTAG2(name,t1,t2) void html_mark_##name (JamDoc *doc) { html_mark_tag(doc, t1); html_mark_tag(doc, t2); }
58 MKTAG(smallcaps
, "span", "style=\"font-variant:small-caps\"")
64 MKTAG(monospaced
, "tt")
66 MKTAG(blockquote
, "blockquote")
76 MKTAG2(superscript
, "small", "sup")
77 MKTAG2(subscript
, "small", "sub")