diff options
| author | Lars Hjemli <hjemli@gmail.com> | 2007-11-06 00:38:18 +0100 | 
|---|---|---|
| committer | Lars Hjemli <hjemli@gmail.com> | 2007-11-06 00:38:18 +0100 | 
| commit | 55ac326ecb01161bf62865ae3350acf85db97d63 (patch) | |
| tree | e37bcd8fef5523aa627ec9fdcd3401105f8e579d | |
| parent | d04c4734bcf40b1d17c55b18fba2aa8344678e8f (diff) | |
| parent | a2ebbd6948da96172108db5e9c02c141923ad05c (diff) | |
| download | cgit-55ac326ecb01161bf62865ae3350acf85db97d63.tar.gz cgit-55ac326ecb01161bf62865ae3350acf85db97d63.tar.bz2 | |
Merge branch 'iconv-rebased' of http://x2a.org/pub/git/cgit
* 'iconv-rebased' of http://x2a.org/pub/git/cgit:
  Use utf8::reencode_string from git
  Convert subject and message with iconv_msg.
  Add iconv_msg function.
  Set msg_encoding according to the header.
  Add commit->msg_encoding, allocate msg dynamicly.
| -rw-r--r-- | cgit.h | 7 | ||||
| -rw-r--r-- | parsing.c | 25 | ||||
| -rw-r--r-- | shared.c | 2 | ||||
| -rw-r--r-- | ui-shared.c | 2 | 
4 files changed, 35 insertions, 1 deletions
| @@ -16,6 +16,7 @@  #include <log-tree.h>  #include <archive.h>  #include <xdiff/xdiff.h> +#include <utf8.h>  /* @@ -48,6 +49,11 @@  #define TM_MONTH (TM_YEAR / 12.0) +/* + * Default encoding + */ +#define PAGE_ENCODING "UTF-8" +  typedef void (*configfn)(const char *name, const char *value);  typedef void (*filepair_fn)(struct diff_filepair *pair);  typedef void (*linediff_fn)(char *line, int len); @@ -90,6 +96,7 @@ struct commitinfo {  	unsigned long committer_date;  	char *subject;  	char *msg; +	char *msg_encoding;  };  struct taginfo { @@ -199,6 +199,7 @@ struct commitinfo *cgit_parse_commit(struct commit *commit)  	ret->committer_email = NULL;  	ret->subject = NULL;  	ret->msg = NULL; +	ret->msg_encoding = NULL;  	if (p == NULL)  		return ret; @@ -233,6 +234,14 @@ struct commitinfo *cgit_parse_commit(struct commit *commit)  		p = strchr(t, '\n') + 1;  	} +	if (!strncmp(p, "encoding ", 9)) { +		p += 9; +		t = strchr(p, '\n') + 1; +		ret->msg_encoding = substr(p, t); +		p = t; +	} else +		ret->msg_encoding = xstrdup(PAGE_ENCODING); +  	while (*p && (*p != '\n'))  		p = strchr(p, '\n') + 1; // skip unknown header fields @@ -253,6 +262,22 @@ struct commitinfo *cgit_parse_commit(struct commit *commit)  	} else  		ret->subject = substr(p, p+strlen(p)); +	if(strcmp(ret->msg_encoding, PAGE_ENCODING)) { +		t = reencode_string(ret->subject, PAGE_ENCODING, +				    ret->msg_encoding); +		if(t) { +			free(ret->subject); +			ret->subject = t; +		} + +		t = reencode_string(ret->msg, PAGE_ENCODING, +				    ret->msg_encoding); +		if(t) { +			free(ret->msg); +			ret->msg = t; +		} +	} +  	return ret;  } @@ -265,6 +265,8 @@ void *cgit_free_commitinfo(struct commitinfo *info)  	free(info->committer);  	free(info->committer_email);  	free(info->subject); +	free(info->msg); +	free(info->msg_encoding);  	free(info);  	return NULL;  } diff --git a/ui-shared.c b/ui-shared.c index 72a7b44..7c69f60 100644 --- a/ui-shared.c +++ b/ui-shared.c @@ -352,7 +352,7 @@ void cgit_print_age(time_t t, time_t max_relative, char *format)  void cgit_print_docstart(char *title, struct cacheitem *item)  { -	html("Content-Type: text/html; charset=utf-8\n"); +	html("Content-Type: text/html; charset=" PAGE_ENCODING "\n");  	htmlf("Last-Modified: %s\n", http_date(item->st.st_mtime));  	htmlf("Expires: %s\n", http_date(item->st.st_mtime +  					 ttl_seconds(item->ttl))); | 
