[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[mgp-users-jp 00681] [patch] %suffix command
- To: mgp-users-jp@mew.org
- Subject: [mgp-users-jp 00681] [patch] %suffix command
- From: Tamito KAJIYAMA <kajiyama@grad.sccs.chukyo-u.ac.jp>
- Date: Wed, 22 Dec 1999 16:42:53 +0900
- Posted: Wed, 22 Dec 1999 16:42:12 +0900
- Reply-to: mgp-users-jp@mew.org
梶山です。
MagicPoint 1.06a を使っています。
行頭に空白を空けるには %prefix コマンドを使いますが、行末に空白
を空けるコマンドが欲しいと思いましたので、%suffix というコマンド
を追加してみました。以下にパッチを添付しますので、興味のある方は
どうぞ。
%leftfill で本文を書くと画面の右側に空白が多くなり、すかすかして
さみしい気がします。そこで画面の右側に模様の入った画像を %bimage
で表示してみたのですが、長い行は画面の右端で折り返しされるので、
文字と模様とが重なってしまいます。これを回避するうまい方法が思い
付かなかったので、%suffix コマンドを追加したというわけです。
%prefix と同様に、引数には空白文字から成る文字列を与えます。また、
%tab の引数として与えると、その行だけで有効になる点も %prefix と
同じです。
また、オリジナルの MagicPoint 1.06a では %tab で箇条書きにすると
行末に行頭の字下げ量の半分のスペースが空くようになっていますが、
これを %suffix コマンドで指定されたスペースを空けるように変更し
ました (したがってパッチの適用前と適用後とでは表示結果が異なるこ
とがあります)。
%suffix コマンドは %prefix の実装をそのまま模倣しただけの安易な
ものです。スペースの幅を計算する方法が分からなかったので、その
部分は特に ad hoc です。何か副作用があるかも知れませんので、いい
方法がありましたら教えて下さい (^^;
#こういうパッチの送り先はこちらでよろしいのでしょうか?
--
KAJIYAMA, Tamito <kajiyama@grad.sccs.chukyo-u.ac.jp>
mgp106a-suffix.patch
====================
KAJIYAMA, Tamito <kajiyama@grad.sccs.chukyo-u.ac.jp>
December 19, 1999
MagicPoint 1.06a に行末を空けるための %suffix コマンドを追加する。
引数には %prefix と同様に空白から成る文字列を指定する。
diff -ru magicpoint-1.06a.orig/draw.c magicpoint-1.06a/draw.c
--- magicpoint-1.06a.orig/draw.c Wed Jul 28 18:55:07 1999
+++ magicpoint-1.06a/draw.c Sun Dec 19 20:25:42 1999
@@ -598,10 +598,18 @@
state->curprefix = cp->ctc_value;
break;
+ case CTL_SUFFIX:
+ state->cursuffix = cp->ctc_value;
+ break;
+
case CTL_TABPREFIX:
state->tabprefix = cp->ctc_value;
break;
+ case CTL_TABSUFFIX:
+ state->tabsuffix = cp->ctc_value;
+ break;
+
case CTL_PREFIXPOS:
{
char *p;
@@ -613,6 +621,23 @@
break;
}
+ case CTL_SUFFIXPOS:
+ {
+ char *p;
+ int linewidth;
+
+ p = (state->tabsuffix) ? state->tabsuffix : state->cursuffix;
+ if (!p) {
+ state->rightfillpos = 0;
+ break;
+ }
+ linewidth = state->linewidth; /* save */
+ draw_line_output(state, p);
+ state->rightfillpos = state->linewidth - linewidth;
+ state->linewidth = linewidth; /* restore */
+ break;
+ }
+
case CTL_TEXT:
if (!cp->ctc_value)
break;
@@ -676,6 +701,7 @@
draw_line_end(state);
/* reset single-line oriented state */
state->tabprefix = NULL;
+ state->tabsuffix = NULL;
state->special = 0;
if (state->align == AL_LEFTFILL1) {
state->align = AL_LEFTFILL0;
@@ -1220,7 +1246,7 @@
state->linewidth += HORIZ_STEP(char_size[caching], char_len);
}
- if (state->width - state->leftfillpos / 2 < state->linewidth
+ if (state->width - state->rightfillpos < state->linewidth
#if 0
&& state->align == AL_LEFTFILL1
#endif
diff -ru magicpoint-1.06a.orig/globals.c magicpoint-1.06a/globals.c
--- magicpoint-1.06a.orig/globals.c Sun Jul 4 00:52:43 1999
+++ magicpoint-1.06a/globals.c Sun Dec 19 19:36:40 1999
@@ -116,8 +116,11 @@
/*CTL*/ { CTL_GAP, T_INT, "gap", 3 },
/*CTL*/ { CTL_PAUSE, T_SP, "pause", 5 },
/*CTL*/ { CTL_PREFIX, T_STR, "prefix", 6 },
+/*CTL*/ { CTL_SUFFIX, T_STR, "suffix", 6 },
/*CTL*/ { CTL_TABPREFIX, T_STR, "*tabprefix*", 11 },
+/*CTL*/ { CTL_TABSUFFIX, T_STR, "*tabsuffix*", 11 },
/*CTL*/ { CTL_PREFIXPOS, T_VOID, "*prefixpos*", 11 },
+/*CTL*/ { CTL_SUFFIXPOS, T_VOID, "*suffixpos*", 11 },
/*CTL*/ { CTL_AGAIN, T_VOID, "again", 5 },
/*CTL*/ { CTL_CCOLOR, T_LONG, "ccolor", 6 },
/*CTL*/ { CTL_BAR, T_SP, "bar", 3 },
diff -ru magicpoint-1.06a.orig/grammar.y magicpoint-1.06a/grammar.y
--- magicpoint-1.06a.orig/grammar.y Tue Jun 8 16:08:40 1999
+++ magicpoint-1.06a/grammar.y Sun Dec 19 18:55:51 1999
@@ -660,7 +660,7 @@
%token KW_NOOP KW_DEFAULT KW_TAB KW_SIZE KW_FORE KW_BACK KW_LEFT KW_CENTER
%token KW_RIGHT KW_SHRINK KW_LCUTIN KW_RCUTIN KW_CONT KW_NODEF KW_XFONT
%token KW_VFONT KW_IMAGE KW_BIMAGE KW_PAGE KW_HGAP KW_VGAP KW_GAP KW_PAUSE
-%token KW_PREFIX KW_AGAIN KW_CCOLOR KW_BAR KW_INCLUDE KW_BGRAD KW_TEXT
+%token KW_PREFIX KW_SUFFIX KW_AGAIN KW_CCOLOR KW_BAR KW_INCLUDE KW_BGRAD KW_TEXT
%token KW_LINESTART KW_LINEEND KW_MARK KW_SYSTEM KW_FILTER KW_ENDFILTER
%token KW_QUALITY KW_ICON KW_LEFTFILL KW_XSYSTEM KW_VFCAP KW_TFONT KW_TFDIR
%token KW_DEFFONT KW_FONT KW_TFONT0 KW_EMBED KW_ENDEMBED KW_NEWIMAGE
@@ -834,6 +834,13 @@
}
}
| KW_PREFIX STR { $$ = gen_str(CTL_PREFIX, $2); }
+ | KW_SUFFIX ID { char *p;
+ $$ = gen_str(CTL_SUFFIX, $2);
+ for (p = $$->ctc_value; *p; p++) {
+ if (*p == '_') *p = ' ';
+ }
+ }
+ | KW_SUFFIX STR { $$ = gen_str(CTL_SUFFIX, $2); }
| KW_NEWIMAGE args
{ $$ = gen_newimage($2); }
| KW_IMAGE STRorID WINSIZ
diff -ru magicpoint-1.06a.orig/mgp.h magicpoint-1.06a/mgp.h
--- magicpoint-1.06a.orig/mgp.h Sun Jul 4 00:52:44 1999
+++ magicpoint-1.06a/mgp.h Sun Dec 19 19:35:59 1999
@@ -364,10 +364,13 @@
* PAGE - doing page_control
*/
char *curprefix;
+ char *cursuffix;
char *tabprefix;
+ char *tabsuffix;
u_int align;
u_int special;
u_int leftfillpos;
+ u_int rightfillpos;
/*
* state of the renderer
diff -ru magicpoint-1.06a.orig/parse.c magicpoint-1.06a/parse.c
--- magicpoint-1.06a.orig/parse.c Sat Jun 26 22:05:07 1999
+++ magicpoint-1.06a/parse.c Sun Dec 19 19:47:40 1999
@@ -721,10 +721,13 @@
}
/* CTL_PREFIX in tab_control should be CTL_TABPREFIX. */
+ /* CTL_SUFFIX in tab_control should be CTL_TABSUFFIX. */
for (l = 0; l < MAXTAB + MAXSTYLE; l++) {
for (cp = tab_control[l]; cp; cp = cp->ct_next) {
if (cp->ct_op == CTL_PREFIX)
cp->ct_op = CTL_TABPREFIX;
+ if (cp->ct_op == CTL_SUFFIX)
+ cp->ct_op = CTL_TABSUFFIX;
}
}
}
@@ -779,6 +782,8 @@
tmpstr[2]->ctc2_value2 = strdup("iso8859-1");
tmpstr[3] = ctlalloc1(CTL_NOOP); /* CTL_TFONT */
tmpstr[3]->ctc_value = strdup("");
+ tmpstr[4] = ctlalloc1(CTL_SUFFIX);
+ tmpstr[4]->ctc_value = strdup("");
tmplong[0] = ctlalloc1(CTL_FORE);
get_color(DEFAULT_FORE, &tmplong[0]->ctl_value);
tmplong[1] = ctlalloc1(CTL_BACK);
@@ -853,6 +858,7 @@
cp = cp->ct_next) {
switch (cp->ct_op) {
case CTL_PREFIX: tmpstr[0] = cp; break;
+ case CTL_SUFFIX: tmpstr[4] = cp; break;
case CTL_VFONT: tmpstr[1] = cp; break;
case CTL_TFONT: tmpstr[3] = cp; break;
case CTL_XFONT2:
@@ -1152,7 +1158,7 @@
}
}
- /* find where to put PREFIX. */
+ /* find where to put PREFIX and SUFFIX. */
for (page = 1; page <= maxpage; page++) {
line = page_attribute[page].pg_linenum;
for (l = 0; l <= line; l++) {
@@ -1175,6 +1181,13 @@
continue;
cp2 = ctlalloc1(CTL_PREFIXPOS);
+ if (!cp2)
+ continue;
+
+ cp2->ct_next = cp->ct_next;
+ cp->ct_next = cp2;
+
+ cp2 = ctlalloc1(CTL_SUFFIXPOS);
if (!cp2)
continue;
diff -ru magicpoint-1.06a.orig/scanner.l magicpoint-1.06a/scanner.l
--- magicpoint-1.06a.orig/scanner.l Mon Jun 7 02:55:19 1999
+++ magicpoint-1.06a/scanner.l Sun Dec 19 18:55:57 1999
@@ -137,6 +137,7 @@
(GAP|gap) return KW_GAP;
(PAUSE|pause) return KW_PAUSE;
(PREFIX|prefix) return KW_PREFIX;
+(SUFFIX|suffix) return KW_SUFFIX;
(AGAIN|again) return KW_AGAIN;
(CCOLOR|ccolor) return KW_CCOLOR;
(BAR|bar) return KW_BAR;