fixed some clang warnings
[k8lowj.git] / src / html_markup.c
blobc335165602f35080c41d7ec8b4aedcf904bff81a
1 /* logjam - a GTK client for LiveJournal.
2 * Copyright (C) 2005 Evan Martin <evan@livejournal.com>
3 */
5 #include "gtk-all.h"
7 #include <string.h>
8 #include "html_markup.h"
11 void html_mark_tag (JamDoc *doc, const char *tag, ...) {
12 GtkTextBuffer *buffer;
13 GtkTextIter start, end;
14 GtkTextMark *ins;
15 char *startTag, *endTag;
16 int tagLen;
17 va_list ap;
19 if (!strcmp(tag, "span")) {
20 va_start(ap, tag);
21 startTag = g_strdup_printf("<%s %s>", tag, va_arg(ap, const char *));
22 va_end(ap);
23 } else {
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);
41 } else {
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);
49 g_free(startTag);
50 g_free(endTag);
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\"")
60 MKTAG(bold, "b")
61 MKTAG(italic, "i")
62 MKTAG(underline, "u")
63 MKTAG(strikeout, "s")
64 MKTAG(monospaced, "tt")
65 MKTAG(para, "p")
66 MKTAG(blockquote, "blockquote")
67 MKTAG(small, "small")
68 MKTAG(big, "big")
69 MKTAG(ulist, "ul")
70 MKTAG(olist, "ol")
71 MKTAG(listitem, "li")
72 MKTAG(h2, "h2")
73 MKTAG(h3, "h3")
74 MKTAG(h4, "h4")
76 MKTAG2(superscript, "small", "sup")
77 MKTAG2(subscript, "small", "sub")