Move markup handling into markup.{c,h}
This is strictly a code-organization change, and should contain no functional changes.
This commit is contained in:
		
							parent
							
								
									1d4a26c1d0
								
							
						
					
					
						commit
						0c84e53afb
					
				
							
								
								
									
										89
									
								
								src/markup.c
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										89
									
								
								src/markup.c
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,89 @@ | |||||||
|  | /* copyright 2013 Sascha Kruse and contributors (see LICENSE for licensing information) */ | ||||||
|  | 
 | ||||||
|  | #define _GNU_SOURCE | ||||||
|  | #include "markup.h" | ||||||
|  | 
 | ||||||
|  | #include <assert.h> | ||||||
|  | #include <stdbool.h> | ||||||
|  | 
 | ||||||
|  | #include "settings.h" | ||||||
|  | #include "utils.h" | ||||||
|  | 
 | ||||||
|  | /*
 | ||||||
|  |  * Quote a text string for rendering with pango | ||||||
|  |  */ | ||||||
|  | static char *markup_quote(char *str) | ||||||
|  | { | ||||||
|  |         if (str == NULL) { | ||||||
|  |                 return NULL; | ||||||
|  |         } | ||||||
|  | 
 | ||||||
|  |         str = string_replace_all("&", "&", str); | ||||||
|  |         str = string_replace_all("\"", """, str); | ||||||
|  |         str = string_replace_all("'", "'", str); | ||||||
|  |         str = string_replace_all("<", "<", str); | ||||||
|  |         str = string_replace_all(">", ">", str); | ||||||
|  | 
 | ||||||
|  |         return str; | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | /*
 | ||||||
|  |  * Strip any markup from text | ||||||
|  |  */ | ||||||
|  | char *markup_strip(char *str) | ||||||
|  | { | ||||||
|  |         if (str == NULL) { | ||||||
|  |                 return NULL; | ||||||
|  |         } | ||||||
|  | 
 | ||||||
|  |         /* strip all tags */ | ||||||
|  |         string_strip_delimited(str, '<', '>'); | ||||||
|  | 
 | ||||||
|  |         /* unquote the remainder */ | ||||||
|  |         str = string_replace_all(""", "\"", str); | ||||||
|  |         str = string_replace_all("'", "'", str); | ||||||
|  |         str = string_replace_all("&", "&", str); | ||||||
|  |         str = string_replace_all("<", "<", str); | ||||||
|  |         str = string_replace_all(">", ">", str); | ||||||
|  | 
 | ||||||
|  |         return str; | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | /*
 | ||||||
|  |  * Transform the string in accordance with `markup_mode` and | ||||||
|  |  * `settings.ignore_newline` | ||||||
|  |  */ | ||||||
|  | char *markup_transform(char *str, enum markup_mode markup_mode) | ||||||
|  | { | ||||||
|  |         if (str == NULL) { | ||||||
|  |                 return NULL; | ||||||
|  |         } | ||||||
|  | 
 | ||||||
|  |         if (markup_mode == MARKUP_NO) { | ||||||
|  |                 str = markup_quote(str); | ||||||
|  |         } else { | ||||||
|  |                 if (settings.ignore_newline) { | ||||||
|  |                         str = string_replace_all("<br>", " ", str); | ||||||
|  |                         str = string_replace_all("<br/>", " ", str); | ||||||
|  |                         str = string_replace_all("<br />", " ", str); | ||||||
|  |                 } else { | ||||||
|  |                         str = string_replace_all("<br>", "\n", str); | ||||||
|  |                         str = string_replace_all("<br/>", "\n", str); | ||||||
|  |                         str = string_replace_all("<br />", "\n", str); | ||||||
|  |                 } | ||||||
|  | 
 | ||||||
|  |                 if (markup_mode != MARKUP_FULL ) { | ||||||
|  |                         str = markup_strip(str); | ||||||
|  |                         str = markup_quote(str); | ||||||
|  |                 } | ||||||
|  | 
 | ||||||
|  |         } | ||||||
|  | 
 | ||||||
|  |         if (settings.ignore_newline) { | ||||||
|  |                 str = string_replace_all("\n", " ", str); | ||||||
|  |         } | ||||||
|  | 
 | ||||||
|  |         return str; | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | /* vim: set tabstop=8 shiftwidth=8 expandtab textwidth=0: */ | ||||||
							
								
								
									
										11
									
								
								src/markup.h
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										11
									
								
								src/markup.h
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,11 @@ | |||||||
|  | /* copyright 2013 Sascha Kruse and contributors (see LICENSE for licensing information) */ | ||||||
|  | #ifndef DUNST_MARKUP_H | ||||||
|  | #define DUNST_MARKUP_H | ||||||
|  | 
 | ||||||
|  | #include "settings.h" | ||||||
|  | 
 | ||||||
|  | char *markup_strip(char *str); | ||||||
|  | char *markup_transform(char *str, enum markup_mode markup_mode); | ||||||
|  | 
 | ||||||
|  | #endif | ||||||
|  | /* vim: set tabstop=8 shiftwidth=8 expandtab textwidth=0: */ | ||||||
| @ -16,6 +16,7 @@ | |||||||
| 
 | 
 | ||||||
| #include "dbus.h" | #include "dbus.h" | ||||||
| #include "dunst.h" | #include "dunst.h" | ||||||
|  | #include "markup.h" | ||||||
| #include "menu.h" | #include "menu.h" | ||||||
| #include "rules.h" | #include "rules.h" | ||||||
| #include "settings.h" | #include "settings.h" | ||||||
| @ -196,46 +197,6 @@ void notification_free(notification * n) | |||||||
|         g_free(n); |         g_free(n); | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| /*
 |  | ||||||
|  * Strip any markup from text |  | ||||||
|  */ |  | ||||||
| char *notification_strip_markup(char *str) |  | ||||||
| { |  | ||||||
|         if (str == NULL) { |  | ||||||
|                 return NULL; |  | ||||||
|         } |  | ||||||
| 
 |  | ||||||
|         /* strip all tags */ |  | ||||||
|         string_strip_delimited(str, '<', '>'); |  | ||||||
| 
 |  | ||||||
|         /* unquote the remainder */ |  | ||||||
|         str = string_replace_all(""", "\"", str); |  | ||||||
|         str = string_replace_all("'", "'", str); |  | ||||||
|         str = string_replace_all("&", "&", str); |  | ||||||
|         str = string_replace_all("<", "<", str); |  | ||||||
|         str = string_replace_all(">", ">", str); |  | ||||||
| 
 |  | ||||||
|         return str; |  | ||||||
| } |  | ||||||
| 
 |  | ||||||
| /*
 |  | ||||||
|  * Quote a text string for rendering with pango |  | ||||||
|  */ |  | ||||||
| char *notification_quote_markup(char *str) |  | ||||||
| { |  | ||||||
|         if (str == NULL) { |  | ||||||
|                 return NULL; |  | ||||||
|         } |  | ||||||
| 
 |  | ||||||
|         str = string_replace_all("&", "&", str); |  | ||||||
|         str = string_replace_all("\"", """, str); |  | ||||||
|         str = string_replace_all("'", "'", str); |  | ||||||
|         str = string_replace_all("<", "<", str); |  | ||||||
|         str = string_replace_all(">", ">", str); |  | ||||||
| 
 |  | ||||||
|         return str; |  | ||||||
| } |  | ||||||
| 
 |  | ||||||
| /*
 | /*
 | ||||||
|  * Replace all occurrences of "needle" with a quoted "replacement", |  * Replace all occurrences of "needle" with a quoted "replacement", | ||||||
|  * according to the markup settings. |  * according to the markup settings. | ||||||
| @ -245,32 +206,7 @@ char *notification_replace_format(const char *needle, const char *replacement, | |||||||
|         char* tmp; |         char* tmp; | ||||||
|         char* ret; |         char* ret; | ||||||
| 
 | 
 | ||||||
|         if (markup_mode == MARKUP_NO) { |         tmp = markup_transform(g_strdup(replacement), markup_mode); | ||||||
|                 tmp = g_strdup(replacement); |  | ||||||
|                 tmp = notification_quote_markup(tmp); |  | ||||||
|         } else { |  | ||||||
|                 tmp = g_strdup(replacement); |  | ||||||
|                 if (settings.ignore_newline) { |  | ||||||
|                         tmp = string_replace_all("<br>", " ", tmp); |  | ||||||
|                         tmp = string_replace_all("<br/>", " ", tmp); |  | ||||||
|                         tmp = string_replace_all("<br />", " ", tmp); |  | ||||||
|                 } else { |  | ||||||
|                         tmp = string_replace_all("<br>", "\n", tmp); |  | ||||||
|                         tmp = string_replace_all("<br/>", "\n", tmp); |  | ||||||
|                         tmp = string_replace_all("<br />", "\n", tmp); |  | ||||||
|                 } |  | ||||||
| 
 |  | ||||||
|                 if (markup_mode != MARKUP_FULL ) { |  | ||||||
|                         tmp = notification_strip_markup(tmp); |  | ||||||
|                         tmp = notification_quote_markup(tmp); |  | ||||||
|                 } |  | ||||||
| 
 |  | ||||||
|         } |  | ||||||
| 
 |  | ||||||
|         if (settings.ignore_newline) { |  | ||||||
|                 tmp = string_replace_all("\n", " ", tmp); |  | ||||||
|         } |  | ||||||
| 
 |  | ||||||
|         ret = string_replace_all(needle, tmp, haystack); |         ret = string_replace_all(needle, tmp, haystack); | ||||||
|         g_free(tmp); |         g_free(tmp); | ||||||
| 
 | 
 | ||||||
|  | |||||||
| @ -69,8 +69,6 @@ int notification_is_duplicate(const notification *a, const notification *b); | |||||||
| void notification_run_script(notification * n); | void notification_run_script(notification * n); | ||||||
| int notification_close(notification * n, int reason); | int notification_close(notification * n, int reason); | ||||||
| void notification_print(notification * n); | void notification_print(notification * n); | ||||||
| char *notification_strip_markup(char *str); |  | ||||||
| char *notification_quote_markup(char *str); |  | ||||||
| char *notification_replace_format(const char *needle, const char *replacement, char *haystack, enum markup_mode markup); | char *notification_replace_format(const char *needle, const char *replacement, char *haystack, enum markup_mode markup); | ||||||
| void notification_update_text_to_render(notification *n); | void notification_update_text_to_render(notification *n); | ||||||
| int notification_get_ttl(notification *n); | int notification_get_ttl(notification *n); | ||||||
|  | |||||||
							
								
								
									
										3
									
								
								src/x.c
									
									
									
									
									
								
							
							
						
						
									
										3
									
								
								src/x.c
									
									
									
									
									
								
							| @ -22,6 +22,7 @@ | |||||||
| #include <unistd.h> | #include <unistd.h> | ||||||
| 
 | 
 | ||||||
| #include "dunst.h" | #include "dunst.h" | ||||||
|  | #include "markup.h" | ||||||
| #include "notification.h" | #include "notification.h" | ||||||
| #include "settings.h" | #include "settings.h" | ||||||
| #include "utils.h" | #include "utils.h" | ||||||
| @ -475,7 +476,7 @@ static colored_layout *r_create_layout_from_notification(cairo_t *c, notificatio | |||||||
|                 pango_layout_set_attributes(cl->l, cl->attr); |                 pango_layout_set_attributes(cl->l, cl->attr); | ||||||
|         } else { |         } else { | ||||||
|                 /* remove markup and display plain message instead */ |                 /* remove markup and display plain message instead */ | ||||||
|                 n->text_to_render = notification_strip_markup(n->text_to_render); |                 n->text_to_render = markup_strip(n->text_to_render); | ||||||
|                 cl->text = NULL; |                 cl->text = NULL; | ||||||
|                 cl->attr = NULL; |                 cl->attr = NULL; | ||||||
|                 pango_layout_set_text(cl->l, n->text_to_render, -1); |                 pango_layout_set_text(cl->l, n->text_to_render, -1); | ||||||
|  | |||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user
	 Luke Shumaker
						Luke Shumaker