[#19079] reference of object — "Hideaki Takata" <hideakit@...3.dion.ne.jp>
高田です。
[#19082] TermIO for ioctl — Shugo Maeda <shugo@...>
前田です。
前田です。
原です。
[#19086] iconv wrapper — nobu.nakada@...
なかだです。
いがらしです。
なかだです。
いがらしです。
高橋征義です。思い出したのでこちらにもフォロー。
knuです。
高橋征義です。Rubyとは直接関係なくてすみません。
[#19115] eRuby を題材にしたページ — TAKEUCHi Kahori <take-k@...>
たけうちです。今日はちょっと宣伝させてくださいまし。
[#19139] 簡易プリプロセッサ epp 0.1 — SASAKI Shunsuke <ele@...17.odn.ne.jp>
どうも。佐々木です。
どうも。佐々木です。
なひです.
助田です.
なひです.
[#19140] ruby は何かの略語? — Noritsugu Nakamura <nnakamur@...>
[#19142] Win32OLE on NT — Masaki Suketa<CQN02273@...>
助田です.
[#19165] how to get extended modules list — Dai <MAP2303@...>
[#19193] Japanese Regular Expression — Hiroyuki KUROSAKI <noir@...>
はじめまして。黒崎と申します。最近 Ruby を使いはじめました。よろしく
In message "[ruby-list:19193] Japanese Regular Expression"
gotoken さん、お返事ありがとうございます。
まつもと ゆきひろです
安達@沖データと申します。
[#19197] GC and IO on SunOS-4.1.4-JLE — kjana@... (YANAGAWA Kazuhisa)
うちの FreeBSD 3.1 では問題無いようなのですが,出先の SunOS-4.1.4-JLE
[#19211] Clipbord を Ruby で使うには? — Itou-T15@...
初めまして。
どぉも、道村です。
[#19228] Ruby 1.4.3 — Yukihiro Matsumoto <matz@...>
Ruby 1.4.3 is out, check out:
[#19240] emacs の ruby モードについて — nakajima kengo<ringo@...>
[#19241] thread を使った socket について — yuuichi satoh <yuuichi.satoh@...>
こんばんわ、佐藤といいます。
[#19246] 破壊的イテレータ? — Hiroshi Saito <HiroshiSaito@...>
どうも、お世話になっております。サイトウです。
青山です。
青山です。
サイトウです。
In message "[ruby-list:19278] オブジェクトの代入について"
まつもと ゆきひろです
ごとけんです
まつもと ゆきひろです
ごとけんです
まつもと ゆきひろです
ごとけんです
荻野ともうします。
ごとけんです
ごとけんです
[#19249] ruby story ? — "Kikutani, Makoto" <kikutani@...>
Maya Stodteつー人からRuby storyについて話を聞きたいのだが、
In message "[ruby-list:19249] ruby story ?"
いがらしです。
あおきです。
まつもと ゆきひろです
[#19283] Ruby 1.4.3 repacked — Yukihiro Matsumoto <matz@...>
Ruby 1.4.3 is out, check out:
[#19304] about -T option on ruby 1.4.2 — nakajima kengo<ringo@...>
[#19399] 改行コード — Akihiro Yamauchi <aygoofy@...>
こんばんは。
[#19420] xtoolkit — Kazuhiro Yoshida <moriq.kazuhiro@...>
もりきゅうです。
[#19441] 自動翻訳プロジェクト — matz@... (Yukihiro Matsumoto)
まつもと ゆきひろです
青山です。
青山です。
まつもと ゆきひろです
まつもと ゆきひろです
青山です。
[Sub] [ruby-list:19515] Re: 自動翻訳プロジェクト
高橋征義です。
まつもと ゆきひろです
高橋征義です。
石橋"rubyholic"秀仁です。
まつもと ゆきひろです
高橋征義です。
青山です。
高橋征義です。
[#19442] ClipBoard I/O 対応 — Itou-T15@...
クリップボードI/O はたいていファイルI/Oの様に抽象化されていないが
ただただしです。
なひです.
まつもと ゆきひろです
なひです.
まつもと ゆきひろです
石橋秀仁です。
>でも、JavaのRunnableを考えると、interfaceは「お作法」だと思います。。。
[#19444] 「 (」を使う時の正規表現について — yuuichi satoh <yuuichi.satoh@...>
こんにちわ佐藤といいます。
[#19456] mod_ruby & eRuby — Wakou Aoyama <wakou@...>
青山です。
mod_ruby初心者の高橋征義です。
前田です。
高橋征義です。
青山です。
前田です。
青山です。
前田です。
青山です。
前田です。
青山です。
[#19484] Ruby Application Archive — matz@... (Yukihiro Matsumoto)
まつもと ゆきひろです
まつもと ゆきひろです
助田です.
[#19533] Windows環境 — "Shigeo Kobayashi" <shigeo@...>
小林です.
[#19544] String#shift? — Kazuhiko Izawa <izawa@...>
井澤です。rubyにはいつもお世話になってます。
こんばんは。鈴木教郎です。
[#19549] RubyRing — TAKEUCHi Kahori (竹内かほり) <take-k@...>
たけうちです。
[#19576] X application on gtk application — gotoken@... (GOTO Kentaro)
ごとけんです
やすしです。
石橋秀仁です。
[#19578] ruby-list の過去ログの作り方 — Momotaro Nishiumi <momotaro@...>
はじめまして。ももたろといいますm(_ _)m
原です。
こん○○は〜。ももたろです。
原です。
まつもと ゆきひろです
青山です。
有馬です。
青山です。
In message <199912172303.IAA02733@hoyogw.netlab.co.jp>
原です。
石橋秀仁です。
原です。
やまぐちです。
原です。
やまぐちです。
[#19593] SMF class 0.3 — Tadayoshi Funaba <tadf@...>
ふなばです。
[#19640] MSVC で GTK 拡張をコンパイルするには? — Saburo Ide <saburo@...4u.or.jp>
Windows2000でMSVCを使っています。
[#19652] Q: Kernel#gets — Tomoyuki Kosimizu <greentea@...2.so-net.ne.jp>
越水です。
[#19656] ftpmirror — Akihiro Yamauchi <aygoofy@...>
こんばんは。
もりきゅうです。
[#19667] RAA category field — Masaki Suketa<CQN02273@...>
助田です.
[#19677] Mutex#synchronize — Tomoyuki Kosimizu <greentea@...2.so-net.ne.jp>
越水です。
有馬です。
越水です。
[#19679] Q: 破壊的メソッドの定義のしかた — Yukihiko Eda <yuki-e@...>
えだです。
[#19690] Book : rb_obj_call_init() — "Shigeo Kobayashi" <shigeo@...>
小林です。
小林です。
小林です。
[#19742] media watch — Noritsugu Nakamura <nnakamur@...>
[#19776] [mswin32] TCPSocket::new() raises Errno::ENOENT — "NAKAMURA, Hiroshi" <nakahiro@...>
なひです.
小田@QNES です。
小松です。
小松です。
小田@QNES です。
まつもと ゆきひろです
小松です。
[#19821] Cygwin 版 ruby の File#read について — one@... (Hajime Tanno)
はじめまして、丹野@筑波大です。
[#19827] can not pass make test on cygwin — kusano@...
草野@構造計画です。
[#19846] ++ -- — "Shigeo Kobayashi" <shigeo@...>
小林です。
[#19871] 半開区間指定 — Itou-T15@...
文字列や配列の半開区間の指定例が Rubyの本やユーザーズガイド
[#19886] c-style for CC Mode — gotoken@... (GOTO Kentaro)
ごとけんです
[#19910] 演算子とスペース — Matsuo Hisanori <hisanori@...>
松尾です。
[#19927] array + empty string — MORITA Atsushi <moritaa@...>
森田です。
[#19933] [book] — Kazuhiro Nishiyama <nishiyama@...1.tiki.ne.jp>
こんばんは、ZnZです。
[#19934] RD with method index (again) — Koji Arai <JCA02266@...>
新井です。
新井です。
Toshです。
新井です。
Toshです。
あおきです。
Toshです。
あおきです。
Toshです。
Toshです。
新井です。
Toshです。
新井です。
Toshです。
Toshです。
新井です。
Toshです。
なかだです。
Toshです。
なかだです。
Toshです。
なかだです。
Toshです。
なかだです。
Toshです。
なかだです。
Toshです。
新井です。
Toshです。
新井です。
Toshです。
新井です。
Toshです。
新井です。
あおきです。
Toshです。
[#19953] メソッド名の制限? — "Hideaki Takata" <hideakit@...3.dion.ne.jp>
たかたです
[#19976] Tell me your favorite tools — Yasushi Shoji <yashi@...>
やすしです。
やすしです。
さくです。
ごとけんです
In article <200003161743.CAA01729@hanare00.math.sci.hokudai.ac.jp>,
Toshです。
[#19983] net/* 1.1.3 — Minero Aoki <aamine@...>
あおきです。
[#19993] about for-in — Tomoyuki Kosimizu <greentea@...2.so-net.ne.jp>
越水です。
[ruby-list:19181] Re: eRuby の patch
前田です。
At Mon, 6 Dec 1999 09:49:27 +0900,
Tadashige Morii <m_tada@sx.miracle.ne.jp> wrote:
> ちょっと eRuby を使ってみようかと思って下記 Web Page を参考にしてま
> すが、パッチをあてて make を取ると以下のようになります。
(snip)
> > eruby_main.c:604: `eruby_no_header' undeclared (first use this function)
手元にあるのと内容が違うので、パッチがおかしかったようです。
再添付しますので、ためしていただけます?
--
前田 修吾
Index: eruby.c
===================================================================
RCS file: /home/cvs/eruby/eruby.c,v
retrieving revision 1.2
diff -u -r1.2 eruby.c
--- eruby.c 1999/08/10 04:44:39 1.2
+++ eruby.c 1999/12/06 04:36:44
@@ -12,21 +12,22 @@
#include "eruby.h"
-char eruby_begin_delimiter1 = '<';
-char eruby_begin_delimiter2 = '%';
-char eruby_end_delimiter1 = '%';
-char eruby_end_delimiter2 = '>';
-char eruby_expr_char = '=';
-char eruby_comment_char = '#';
+static char eruby_begin_delimiter[] = "<%";
+static char eruby_end_delimiter[] = "%>";
+static char eruby_expr_char = '=';
+static char eruby_comment_char = '#';
+static char eruby_line_beg_char = '%';
-enum embedded_string_type {
+enum embedded_program_type {
EMBEDDED_STMT,
EMBEDDED_EXPR,
EMBEDDED_COMMENT,
};
-static int compile_embedded_string(FILE *in, FILE *out,
- enum embedded_string_type type)
+#define EOP (-2)
+
+static int parse_embedded_program(FILE *in, FILE *out,
+ enum embedded_program_type type)
{
int c, prevc = EOF;
@@ -35,11 +36,11 @@
for (;;) {
c = getc(in);
again:
- if (c == eruby_end_delimiter1) {
- if (prevc == eruby_end_delimiter1)
+ if (c == eruby_end_delimiter[0]) {
+ if (prevc == eruby_end_delimiter[0])
continue;
c = getc(in);
- if (c == eruby_end_delimiter2) {
+ if (c == eruby_end_delimiter[1]) {
if (type == EMBEDDED_EXPR)
fputs(")); ", out);
else if (type == EMBEDDED_STMT && prevc != '\n')
@@ -54,8 +55,8 @@
}
else {
if (type != EMBEDDED_COMMENT)
- putc(eruby_end_delimiter1, out);
- prevc = eruby_end_delimiter1;
+ putc(eruby_end_delimiter[0], out);
+ prevc = eruby_end_delimiter[0];
goto again;
}
}
@@ -81,6 +82,31 @@
return MISSING_END_DELIMITER;
}
+static int parse_embedded_line(FILE *in, FILE *out)
+{
+ int c;
+
+ for (;;) {
+ c = getc(in);
+ again:
+ switch (c) {
+ case EOF:
+ if (ferror(in))
+ return SYSTEM_ERROR;
+ else
+ return MISSING_END_DELIMITER;
+ case '\n':
+ putc(c, out);
+ return 0;
+ break;
+ default:
+ putc(c, out);
+ break;
+ }
+ }
+ return MISSING_END_DELIMITER;
+}
+
int eruby_compile(FILE *in, FILE *out)
{
int c, prevc = EOF;
@@ -103,66 +129,87 @@
for (;;) {
c = getc(in);
again:
- if (c == eruby_begin_delimiter1) {
+ if (c == eruby_begin_delimiter[0]) {
c = getc(in);
- if (c == eruby_begin_delimiter2) {
- if (prevc != EOF) {
+ if (c == eruby_begin_delimiter[1]) {
+ if (prevc >= 0) {
fputs("\"; ", out);
}
c = getc(in);
- if (c == eruby_begin_delimiter2) {
- if (prevc == EOF) fputs("print \"", out);
- putc(eruby_begin_delimiter1, out);
- putc(eruby_begin_delimiter2, out);
- prevc = eruby_begin_delimiter2;
+ if (c == EOF) {
+ return MISSING_END_DELIMITER;
+ }
+ else if (c == eruby_begin_delimiter[1]) { /* <%% => <% */
+ if (prevc < 0) fputs("print \"", out);
+ putc(eruby_begin_delimiter[0], out);
+ putc(eruby_begin_delimiter[1], out);
+ prevc = eruby_begin_delimiter[1];
continue;
}
else if (c == eruby_comment_char) {
- err = compile_embedded_string(in, out, EMBEDDED_COMMENT);
+ err = parse_embedded_program(in, out, EMBEDDED_COMMENT);
if (err) return err;
}
else if (c == eruby_expr_char) {
- err = compile_embedded_string(in, out, EMBEDDED_EXPR);
+ err = parse_embedded_program(in, out, EMBEDDED_EXPR);
if (err) return err;
}
else {
if (ungetc(c, in) == EOF)
return SYSTEM_ERROR;
- err = compile_embedded_string(in, out, EMBEDDED_STMT);
+ err = parse_embedded_program(in, out, EMBEDDED_STMT);
if (err) return err;
}
- prevc = EOF;
+ prevc = EOP;
} else {
- if (prevc == EOF) fputs("print \"", out);
- putc(eruby_begin_delimiter1, out);
- prevc = eruby_begin_delimiter1;
+ if (prevc < 0) fputs("print \"", out);
+ putc(eruby_begin_delimiter[0], out);
+ prevc = eruby_begin_delimiter[0];
goto again;
}
}
+ else if (c == eruby_line_beg_char && prevc == EOF) {
+ c = getc(in);
+ if (c == EOF) {
+ return MISSING_END_DELIMITER;
+ }
+ else if (c == eruby_line_beg_char) { /* %% => % */
+ if (prevc < 0) fputs("print \"", out);
+ fputc(c, out);
+ prevc = c;
+ }
+ else {
+ if (ungetc(c, in) == EOF)
+ return SYSTEM_ERROR;
+ err = parse_embedded_line(in, out);
+ if (err) return err;
+ prevc = EOF;
+ }
+ }
else {
switch (c) {
case EOF:
goto end;
case '\n':
- if (prevc == EOF) fputs("print \"", out);
+ if (prevc < 0) fputs("print \"", out);
fputs("\\n\"\n", out);
prevc = EOF;
break;
case '\t':
- if (prevc == EOF) fputs("print \"", out);
+ if (prevc < 0) fputs("print \"", out);
fputs("\\t", out);
prevc = c;
break;
case '\\':
case '"':
case '#':
- if (prevc == EOF) fputs("print \"", out);
+ if (prevc < 0) fputs("print \"", out);
putc('\\', out);
putc(c, out);
prevc = c;
break;
default:
- if (prevc == EOF) fputs("print \"", out);
+ if (prevc < 0) fputs("print \"", out);
putc(c, out);
prevc = c;
break;
Index: eruby.h
===================================================================
RCS file: /home/cvs/eruby/eruby.h,v
retrieving revision 1.5
diff -u -r1.5 eruby.h
--- eruby.h 1999/08/10 04:44:39 1.5
+++ eruby.h 1999/12/06 04:36:44
@@ -14,13 +14,6 @@
SYSTEM_ERROR
};
-extern char eruby_begin_delimiter1;
-extern char eruby_begin_delimiter2;
-extern char eruby_end_delimiter1;
-extern char eruby_end_delimiter2;
-extern char eruby_expr_char;
-extern char eruby_comment_char;
-
int eruby_compile(FILE *in, FILE *out);
VALUE eruby_compile_file(char *filename);
VALUE eruby_load(char *filename, int wrap, int *state);
Index: eruby_main.c
===================================================================
RCS file: /home/cvs/eruby/eruby_main.c,v
retrieving revision 1.4
diff -u -r1.4 eruby_main.c
--- eruby_main.c 1999/08/10 04:44:39 1.4
+++ eruby_main.c 1999/12/06 04:36:44
@@ -40,7 +40,7 @@
static char *eruby_filename = NULL;
static int eruby_mode = MODE_UNKNOWN;
-static int eruby_no_header = 0;
+static int eruby_noheader = 0;
static char *get_charset()
{
@@ -439,13 +439,31 @@
}
}
-static VALUE str_write(VALUE self, VALUE str)
+static VALUE defout_write(VALUE self, VALUE str)
{
str = rb_obj_as_string(str);
rb_str_cat(self, RSTRING(str)->ptr, RSTRING(str)->len);
return Qnil;
}
+static VALUE defout_cancel(VALUE self)
+{
+ if (RSTRING(self)->len == 0) return;
+ RSTRING(self)->len = 0;
+ RSTRING(self)->ptr[0] = '\0';
+ return Qnil;
+}
+
+static VALUE noheader_getter()
+{
+ return eruby_noheader ? Qtrue : Qfalse;
+}
+
+static void noheader_setter(VALUE val)
+{
+ eruby_noheader = RTEST(val);
+}
+
static int guess_mode()
{
if (getenv("GATEWAY_INTERFACE") == NULL) {
@@ -485,8 +503,6 @@
fprintf(stderr, "\
usage: %s [switches] [inputfile]\n\n\
-d, --debug set debugging flags (set $DEBUG to true)\n\
- -B[str] set begin block delimiter\n\
- -E[str] set end block delimiter\n\
-K[kcode] specifies KANJI (Japanese) code-set\n\
-M[mode] specifies runtime mode\n\
f: filter mode\n\
@@ -540,6 +556,7 @@
set_mode(++s);
s++;
goto again;
+#if 0
case 'B':
if (*++s == '\0') {
s = argv[++i];
@@ -570,6 +587,7 @@
eruby_end_delimiter1 = *s++;
eruby_end_delimiter2 = *s;
break;
+#endif
case 'K':
rb_set_kcode(++s);
s++;
@@ -583,7 +601,7 @@
s++;
goto again;
case 'n':
- eruby_no_header = 1;
+ eruby_noheader = 1;
s++;
goto again;
case '\0':
@@ -597,7 +615,7 @@
ruby_debug = Qtrue;
}
else if (strcmp("noheader", s) == 0) {
- eruby_no_header = 1;
+ eruby_noheader = 1;
}
else if (strcmp("version", s) == 0) {
show_version();
@@ -658,7 +676,9 @@
rb_set_safe_level(1);
rb_defout = rb_str_new("", 0);
- rb_define_singleton_method(rb_defout, "write", str_write, 1);
+ rb_define_singleton_method(rb_defout, "write", defout_write, 1);
+ rb_define_singleton_method(rb_defout, "cancel", defout_cancel, 0);
+ rb_define_virtual_variable("$NOHEADER", noheader_getter, noheader_setter);
script = eruby_load(eruby_filename, 0, &state);
if (state) {
error_print(state, eruby_mode, script);
@@ -672,7 +692,7 @@
unlink(RSTRING(script)->ptr);
out = RSTRING(rb_defout)->ptr;
nout = RSTRING(rb_defout)->len;
- if (!eruby_no_header &&
+ if (!eruby_noheader &&
(eruby_mode == MODE_CGI || eruby_mode == MODE_NPHCGI)) {
if (eruby_mode == MODE_NPHCGI)
print_http_headers();