1 /* logjam - a GTK client for LiveJournal.
2 * Copyright (C) 2005 Evan Martin <evan@livejournal.com>
4 * vim: tabstop=4 shiftwidth=4 noexpandtab :
10 #include "html_markup.h"
14 html_mark_tag(JamDoc
*doc
, const char* tag
, ...) {
15 GtkTextBuffer
*buffer
;
16 GtkTextIter start
, end
;
18 char * startTag
, * endTag
;
22 if (!strcmp(tag
, "span")) {
24 startTag
= g_strdup_printf("<%s %s>", tag
, va_arg(ap
, const char *));
27 startTag
= g_strdup_printf("<%s>", tag
);
29 endTag
= g_strdup_printf("</%s>", tag
);
30 tagLen
= (int)strlen(endTag
);
32 buffer
= jam_doc_get_text_buffer(doc
);
34 gtk_text_buffer_begin_user_action(buffer
); /* start undo action */
36 if (!gtk_text_buffer_get_selection_bounds(buffer
, &start
, &end
)) {
37 gtk_text_buffer_insert_at_cursor(buffer
, startTag
, -1);
38 gtk_text_buffer_insert_at_cursor(buffer
, endTag
, -1);
40 ins
= gtk_text_buffer_get_mark(buffer
, "insert");
41 gtk_text_buffer_get_iter_at_mark(buffer
, &start
, ins
);
42 gtk_text_iter_backward_chars(&start
, tagLen
);
43 gtk_text_buffer_move_mark_by_name(buffer
, "insert", &start
);
44 gtk_text_buffer_move_mark_by_name(buffer
, "selection_bound", &start
);
46 gtk_text_buffer_insert(buffer
, &start
, startTag
, -1);
47 gtk_text_buffer_get_selection_bounds(buffer
, &start
, &end
);
48 gtk_text_buffer_insert(buffer
, &end
, endTag
, -1);
49 gtk_text_buffer_move_mark_by_name(buffer
, "insert", &end
);
50 gtk_text_buffer_move_mark_by_name(buffer
, "selection_bound", &end
);
55 gtk_text_buffer_end_user_action(buffer
);
60 html_mark_bold(JamDoc
*doc
) {
61 html_mark_tag(doc
, "b");
65 html_mark_italic(JamDoc
*doc
) {
66 html_mark_tag(doc
, "i");
70 html_mark_underline(JamDoc
*doc
) {
71 html_mark_tag(doc
, "u");
75 html_mark_strikeout(JamDoc
*doc
) {
76 html_mark_tag(doc
, "s");
80 html_mark_monospaced(JamDoc
*doc
) {
81 html_mark_tag(doc
, "tt");
85 html_mark_para(JamDoc
*doc
) {
86 html_mark_tag(doc
, "p");
90 html_mark_smallcaps(JamDoc
*doc
) {
91 html_mark_tag(doc
, "span", "style=\"font-variant: small-caps\"");
95 html_mark_blockquote(JamDoc
*doc
) {
96 html_mark_tag(doc
, "blockquote");
100 html_mark_small(JamDoc
*doc
) {
101 html_mark_tag(doc
, "small");
105 html_mark_big(JamDoc
*doc
) {
106 html_mark_tag(doc
, "big");
110 html_mark_superscript(JamDoc
*doc
) {
111 html_mark_tag(doc
, "small");
112 html_mark_tag(doc
, "sup");
116 html_mark_subscript(JamDoc
*doc
) {
117 html_mark_tag(doc
, "small");
118 html_mark_tag(doc
, "sub");
122 html_mark_ulist(JamDoc
*doc
) {
123 html_mark_tag(doc
, "ul");
127 html_mark_olist(JamDoc
*doc
) {
128 html_mark_tag(doc
, "ol");
132 html_mark_listitem(JamDoc
*doc
) {
133 html_mark_tag(doc
, "li");
137 html_mark_h2(JamDoc
*doc
) {
138 html_mark_tag(doc
, "h2");
142 html_mark_h3(JamDoc
*doc
) {
143 html_mark_tag(doc
, "h3");
147 html_mark_h4(JamDoc
*doc
) {
148 html_mark_tag(doc
, "h4");