diff options
Diffstat (limited to 'japanese/gnomelibs/files/patch-al')
-rw-r--r-- | japanese/gnomelibs/files/patch-al | 328 |
1 files changed, 0 insertions, 328 deletions
diff --git a/japanese/gnomelibs/files/patch-al b/japanese/gnomelibs/files/patch-al deleted file mode 100644 index 61fdf435ea67..000000000000 --- a/japanese/gnomelibs/files/patch-al +++ /dev/null @@ -1,328 +0,0 @@ ---- ./gtk-xmhtml/format.c.jp3 Fri Jul 30 02:59:48 1999 -+++ ./gtk-xmhtml/format.c Sun Oct 29 18:32:21 2000 -@@ -237,6 +237,14 @@ - #include <string.h> - #include <ctype.h> /* isspace, tolower */ - -+#include <gdk/gdki18n.h> -+#if !defined(G_HAVE_BROKEN_WCTYPE) && (defined(G_HAVE_WCTYPE_H) || defined(G_HAVE_WCHAR_H)) && !defined(X_LOCALE) -+#define is_ideograph(wc) \ -+ (!(iswspace(wc) || iswalnum(wc) || iswpunct(wc) || iswcntrl(wc))) -+#else -+#define is_ideograph(wc) FALSE -+#endif -+ - /* Local includes */ - #include "XmHTMLP.h" - #include "XmHTMLfuncs.h" -@@ -307,14 +315,14 @@ - - /* copy given text into an internal buffer */ - static String CopyText(XmHTMLWidget html, String text, Boolean formatted, -- Byte *text_data, Boolean expand_escapes); -+ int *text_data, Boolean expand_escapes); - - /* collapse all consecutive whitespace into a single space */ - static void CollapseWhiteSpace(String text); - - /* Split raw text into an array of words */ - static XmHTMLWord* TextToWords(String text, int *num_words, Dimension *height, -- XmHTMLfont *font, Byte line_data, Byte text_data, -+ XmHTMLfont *font, Byte line_data, int text_data, - XmHTMLObjectTableElement owner); - - /* Split an image into an array of words ;-) */ -@@ -804,14 +812,16 @@ - *****/ - static XmHTMLWord* - TextToWords(String text, int *num_words, Dimension *height, XmHTMLfont *font, -- Byte line_data, Byte text_data, XmHTMLObjectTableElement owner) -+ Byte line_data, int text_data, XmHTMLObjectTableElement owner) - { -- int n_words, len, i; -- char *start; -- static XmHTMLWord *words; -- static char *raw; -+ int n_words, n_words_alloc, raw_numwc, i; -+ GdkWChar *raw, *start; -+ XmHTMLWord *words; - register int j; -- register char *chPtr; -+ register GdkWChar *chPtr; -+ int leading_space; -+ char *wordsbuf; -+ int size_wordsbuf; - - /* sanity check */ - if(text == NULL) -@@ -822,57 +832,109 @@ - - _XmHTMLFullDebug(2, ("format.c: TextToWords, text in is:\n%s\n", text)); - -- /* compute how many words we have */ -- n_words = 0; -- for(chPtr = text; *chPtr != '\0'; chPtr++) -- if(*chPtr == ' ') -- n_words++; -- /* also pick up the last word */ -- n_words++; -- - /* copy text */ -- raw = strdup(text); -+ raw = (GdkWChar *)calloc(strlen(text) + 1, sizeof(GdkWChar)); -+ raw_numwc = gdk_mbstowcs(raw, text, strlen(text)); -+ if (raw_numwc < 1) -+ raw_numwc = 0; - - /* allocate memory for all words */ -- words = (XmHTMLWord*)calloc(n_words, sizeof(XmHTMLWord)); -+ n_words = 0; -+ n_words_alloc = 10; -+ words = (XmHTMLWord*)calloc(n_words_alloc, sizeof(XmHTMLWord)); - - /* Split the text in words and fill in the appropriate fields */ - *height = font->height; - chPtr = start = raw; - -- for(i = 0, j = 0, len = 0; ; chPtr++, len++, j++) -+ for(i = 0, j = 0, leading_space = 0; ; chPtr++, j++) - { -- /* also pick up the last word! */ -- if(*chPtr == ' ' || *chPtr == '\0') -+ /* expand words[] if needed */ -+ if (n_words_alloc < i + 1) - { -- if(*chPtr) -+ n_words_alloc += 10; -+ words = (XmHTMLWord *)realloc( -+ words, n_words_alloc * sizeof(XmHTMLWord)); -+ } -+ -+ /* also pick up the last word! */ -+ if(*chPtr == ' ' || *chPtr == '\0' || -+ (chPtr > start && -+ (is_ideograph(*chPtr) || is_ideograph(chPtr[-1])))) -+ { -+ GdkWChar saved_char; -+ int trailing_space = 0; -+ if(*chPtr == ' ') - { - chPtr++; /* nuke the space */ - raw[j++] = '\0'; -+ trailing_space = 1; - } -+ /* set the first char of the next word 0 temporally. -+ * gdk_wcstombs requires this. */ -+ saved_char = raw[j]; -+ raw[j] = '\0'; - /* fill in required fields */ -- words[i].self = &words[i]; -- words[i].word = start; -- words[i].len = len; -+ words[i].self = NULL; /* set later */ -+ words[i].word = gdk_wcstombs(start); -+ words[i].len = words[i].word ? strlen(words[i].word) : 0; - words[i].height = *height; -- words[i].width = Toolkit_Text_Width(font->xfont, words[i].word, len); -+ words[i].width = Toolkit_Text_Width( -+ font->xfont, words[i].word, strlen(words[i].word)); - words[i].owner = owner; - words[i].font = font; -- words[i].spacing = TEXT_SPACE_LEAD | TEXT_SPACE_TRAIL; -+ words[i].spacing = 0; /* set later */ - words[i].type = OBJ_TEXT; - words[i].line_data = line_data; - -+ if (leading_space) -+ words[i].spacing |= TEXT_SPACE_LEAD; -+ else -+ words[i].spacing |= TEXT_SPACE_LEAD_ZEROWIDTH; -+ -+ if (trailing_space) -+ words[i].spacing |= TEXT_SPACE_TRAIL; -+ else -+ words[i].spacing |= TEXT_SPACE_TRAIL_ZEROWIDTH; -+ -+ leading_space = trailing_space; /* for the next word */ -+ -+ raw[j] = saved_char; -+ - _XmHTMLFullDebug(2, ("format.c: TextToWords, word is %s, len is " - "%i, width is %i, height is %i\n", words[i].word, words[i].len, - words[i].width, words[i].height)); - - start = chPtr; - i++; -- len = 0; - } - if(*chPtr == '\0') - break; - } -+ free(raw); -+ n_words = i; -+ -+ /* because the pointer 'words' may be realloc()ed, we need to set the -+ * 'self' field here. -+ */ -+ for (i = 0; i < n_words; i++) -+ words[i].self = &words[i]; -+ -+ /* words[0].word must be a malloc()ed pointer, and word[i].word -+ * (for i > 0) a reference (i.e., it should not be freed). -+ */ -+ for (size_wordsbuf = 0, i = 0; i < n_words; i++) -+ size_wordsbuf += words[i].len + 1; -+ wordsbuf = (char *)malloc(size_wordsbuf); -+ for (i = j = 0; i < n_words; i++) -+ { -+ /* copies trailing nil also */ -+ memcpy(wordsbuf + j, words[i].word, words[i].len + 1); -+ free(words[i].word); -+ words[i].word = wordsbuf + j; -+ j += words[i].len + 1; -+ } -+ - /* - * when there is more than one word in this block, the first word - * _always_ has a trailing space. -@@ -880,10 +942,13 @@ - */ - if(n_words > 1) - { -- /* unset nospace bit */ -- Byte spacing = text_data & ~TEXT_SPACE_NONE; -- words[0].spacing = spacing | TEXT_SPACE_TRAIL; -- words[n_words-1].spacing = spacing | TEXT_SPACE_LEAD; -+ words[0].spacing &= ~TEXT_SPACE_LEAD_ZEROWIDTH; -+ words[n_words-1].spacing &= ~TEXT_SPACE_TRAIL_ZEROWIDTH; -+ -+ words[0].spacing |= text_data & -+ (TEXT_SPACE_LEAD | TEXT_SPACE_LEAD_ZEROWIDTH); -+ words[n_words-1].spacing |= text_data & -+ (TEXT_SPACE_TRAIL | TEXT_SPACE_TRAIL_ZEROWIDTH); - } - else - words[0].spacing = text_data; -@@ -1109,7 +1174,7 @@ - if(tmp->id == HT_OPTION && !tmp->is_end) - { - XmHTMLObject *sel_start = tmp; -- Byte foo; -+ int foo; - String text = NULL; - - /* -@@ -1185,7 +1250,7 @@ - static XmHTMLForm *form_entry; - XmHTMLWord *word; - String text = NULL; -- Byte foo; -+ int foo; - - *num_words = 0; - *height = *width = 0; -@@ -1633,13 +1698,14 @@ - * cleaned up text. Terminates if malloc fails. - *****/ - static String --CopyText(XmHTMLWidget html, String text, Boolean formatted, Byte *text_data, -+CopyText(XmHTMLWidget html, String text, Boolean formatted, int *text_data, - Boolean expand_escapes) - { - static String ret_val; -- char *start = text; -+ GdkWChar *wtext, *start; - int len; - static Boolean have_space = False; -+ static Boolean have_space_zerowidth = False; - - /* sanity check */ - if(*text == '\0' || !strlen(text)) -@@ -1653,23 +1719,30 @@ - /* expand all escape sequences in this text */ - if(expand_escapes) - _XmHTMLExpandEscapes(ret_val, html->html.bad_html_warnings); -- have_space = False; -+ have_space = have_space_zerowidth = False; - return(ret_val); - } - - _XmHTMLFullDebug(2, ("format.c: CopyText, text in is:\n%s\n", text)); - -- /* initial length of full text */ -- len = strlen(text); -+ /* convert to wide characters */ -+ wtext = (GdkWChar *)calloc(strlen(text) + 1, sizeof(GdkWChar)); -+ len = gdk_mbstowcs(wtext, text, strlen(text)); -+ if (len < 0) len = 0; -+ start = wtext; - - *text_data = 0; - - /* see if we have any leading/trailing spaces */ -- if(isspace(*text) || have_space) -+ if(gdk_iswspace(*wtext) || have_space) - *text_data = TEXT_SPACE_LEAD; -+ else if(is_ideograph(*wtext) || have_space_zerowidth) -+ *text_data = TEXT_SPACE_LEAD_ZEROWIDTH; - -- if(isspace(text[len-1])) -+ if(len > 0 && gdk_iswspace(wtext[len-1])) - *text_data |= TEXT_SPACE_TRAIL; -+ else if(len > 0 && is_ideograph(wtext[len-1])) -+ *text_data |= TEXT_SPACE_TRAIL_ZEROWIDTH; - - /***** - * Remove leading/trailing spaces -@@ -1677,11 +1750,13 @@ - * elements must be retained - *****/ - /* remove all leading space */ -- while(*start != '\0' && isspace(*start)) -+ while(*start != '\0' && gdk_iswspace(*start)) -+ { - start++; -+ len--; -+ } - /* remove all trailing space */ -- len = strlen(start); -- while(len > 0 && isspace(start[len-1])) -+ while(len > 0 && gdk_iswspace(start[len-1])) - len--; - - /***** -@@ -1705,16 +1780,14 @@ - have_space = True; - return(NULL); - } -- have_space = False; -- -- /* -- * We are a little bit to generous here: consecutive multiple whitespace -- * will be collapsed into a single space, so we may over-allocate. -- * Hey, better to overdo this than to have one byte to short ;-) -- */ -- ret_val = (String)malloc((len+1)*sizeof(char)); -- strncpy(ret_val, start, len); /* copy it */ -- ret_val[len] = '\0'; /* NULL terminate */ -+ have_space = have_space_zerowidth = False; -+ if(len > 0 && is_ideograph(wtext[len-1])) -+ have_space_zerowidth = True; -+ -+ /* convert to multibyte form */ -+ start[len] = '\0'; -+ ret_val = gdk_wcstombs(start); -+ free(wtext); - - /* expand all escape sequences in this text */ - if(expand_escapes) -@@ -3030,7 +3103,8 @@ - String text; - int linefeed, n_words, anchor_words, named_anchors; - int x_offset = 0, y_offset = 0; -- Byte text_data, line_data; /* text and line data bits */ -+ int text_data; /* text data bits */ -+ Byte line_data; /* line data bits */ - unsigned long element_data = 0; - XmHTMLWord *words; - XmHTMLAnchor *anchor_data, *form_anchor_data; |