diff options
| -rw-r--r-- | Makefile | 5 | ||||
| -rw-r--r-- | cgit.css | 11 | ||||
| -rw-r--r-- | cgit.h | 7 | ||||
| -rw-r--r-- | parsing.c | 25 | ||||
| -rw-r--r-- | shared.c | 2 | ||||
| -rw-r--r-- | ui-log.c | 21 | ||||
| -rw-r--r-- | ui-shared.c | 2 | 
7 files changed, 55 insertions, 18 deletions
| @@ -19,6 +19,11 @@ OBJECTS = shared.o cache.o parsing.o html.o ui-shared.o ui-repolist.o \  	ui-snapshot.o ui-blob.o ui-tag.o ui-refs.o +ifdef NEEDS_LIBICONV +	EXTLIBS += -liconv +endif + +  .PHONY: all git install clean distclean emptycache force-version get-git  all: cgit git @@ -109,7 +109,7 @@ div#sidebar div.infobox {  }  div#sidebar div.infobox h1 { -	font-size: 11pt; +	font-size: 10pt;  	font-weight: bold;  	margin: 0px;  } @@ -128,10 +128,7 @@ div#sidebar div.infobox a.menu:hover {  div#sidebar div.infobox select {  	width: 100%; -	border: solid 1px #aaa; -	background-color: #bbb;  	margin: 2px 0px 0px 0px; -	padding: 0px;  }  td#branch-dropdown-cell { @@ -140,18 +137,12 @@ td#branch-dropdown-cell {  input#switch-btn {  	width: 20px; -	border: solid 1px #aaa; -	background-color: #bbb;  	margin: 2px 0px 0px 0px; -	padding: 0px;  }  div#sidebar div.infobox input.txt {  	width: 100%; -	border: solid 1px #aaa; -	background-color: #bbb;  	margin: 2px 0px 0px 0px; -	padding: 0;  }  table#grid { @@ -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;  } @@ -267,6 +267,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;  } @@ -8,12 +8,18 @@  #include "cgit.h" -int files, lines; +int files, add_lines, rem_lines;  void count_lines(char *line, int size)  { -	if (size>0 && (line[0] == '+' || line[0] == '-')) -		lines++; +	if (size <= 0) +		return; + +	if (line[0] == '+') +		add_lines++; + +	else if (line[0] == '-') +		rem_lines++;  }  void inspect_files(struct diff_filepair *pair) @@ -35,13 +41,14 @@ void print_commit(struct commit *commit)  			 sha1_to_hex(commit->object.sha1));  	if (cgit_repo->enable_log_filecount) {  		files = 0; -		lines = 0; +		add_lines = 0; +		rem_lines = 0;  		cgit_diff_commit(commit, inspect_files);  		html("</td><td class='right'>");  		htmlf("%d", files);  		if (cgit_repo->enable_log_linecount) {  			html("</td><td class='right'>"); -			htmlf("%d", lines); +			htmlf("-%d/+%d", rem_lines, add_lines);  		}  	}  	html("</td><td>"); @@ -88,9 +95,9 @@ void cgit_print_log(const char *tip, int ofs, int cnt, char *grep, char *pattern  	     "<th class='left'>Message</th>");  	if (cgit_repo->enable_log_filecount) { -		html("<th class='left'>Files</th>"); +		html("<th class='right'>Files</th>");  		if (cgit_repo->enable_log_linecount) -			html("<th class='left'>Lines</th>"); +			html("<th class='right'>Lines</th>");  	}  	html("<th class='left'>Author</th></tr>\n"); 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))); | 
