岩室@富士通です。

  さいん本狙いで一本でっち上げてみました(^^; ほんとーに使いもんになる
かはわかりませんですけど……(^^;;;

# 使い方がみょーにややこしーのがちょっと今いちかも……。

  あと、正規表現の「(?: ...)」に関するバグらしきもの。1.1b7で、

    a = "abcdefghi"
    print /abc(?:.|\n)*ghi/ =~ a, "\n"
    print /abc(.|\n)*ghi/   =~ a, "\n"
    print /abc(?:\n|.)*ghi/ =~ a, "\n"
    print /abc(\n|.)*ghi/   =~ a, "\n"
    print /abc(?:.|\s)*ghi/ =~ a, "\n"
    print /abc(.|\s)*ghi/   =~ a, "\n"
    print /abc(?:\s|.)*ghi/ =~ a, "\n"
    print /abc(\s|.)*ghi/   =~ a, "\n"

を実行すると、

    false
    0
    false
    0
    false
    0
    0
    0

となりました。

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

◎簡易HTMLリンクメンテナンスツール mkhref

○使い方

  「<!--begin COMMAND PARAM1 PARAM2 ...-->」と「<!--end-->」の間にある
文字列を、COMMANDに従って書き換えるツールです。COMMANDには現在のところ
以下のようなものがあります。

・link:
  <!--begin link=FILE [supress=NUM]--><!--end-->

  - FILEがHTMLファイルの場合:
    指定のファイルからTITLEタグに対応する文字列を拾ってきて、
      TITLE
    というアンカーを生成します。

  - FILEがHTMLファイルでない場合:
      FILE
    というアンカーを生成します。supress=NUMが指定されている場合、NUMの
    数だけ拡張子を削除します。

  FILEはワイルドカードも指定することができます。この場合、ソートしたと
  きの最後の要素に対するアンカーを生成します。

・list:
  <!--begin list=FILE1:FILE2:... [supress=NUM] [prefix=...] [suffix=...]-->
  <!--end-->

  FILE1, FILE2, ...のそれぞれに対してlinkと同様の処理を行い、さらに
  prefixとsuffixに指定した文字列を個々の先頭と終端に付加してリスティン
  グします。prefixは省略時「<li>」、suffixは省略時空文字列となります。
  なお、FILEは`,'でも区切れますが、この場合はFILEの順序をソートしてア
  ンカーを生成します。また、ワイルドカードの指定もでき、ワイルドカード
  を展開した結果が全てリスティングされます。

・title:
  <!--begin title--><!--end-->

  同一ファイル中のTITLEタグと同じ文字列を埋め込みます。
  
・mailto:
  <!--begin mailto--><!--end-->

  設定ファイル(ホームディレクトリの`.mkhrefrc'もしくはカレントディレク
  トリの`mkhref.conf')中に「$address = "EMAIL_ADDRESS"」という記
  述があると、
    EMAIL_ADDRESS
  というアンカーを生成します。

・その他:
  <!--begin NAME--><!--end-->

  設定ファイル(ホームディレクトリの`.mkhrefrc'もしくはカレントディレク
  トリの`mkhref.conf')中に「$NAME = VALUE」という記述があると、VALUEを
  埋め込みます。例えば、mailtoが使える状態で、
    <!--begin address--><!--end-->
  と記述すると、
    <!--begin address-->EMAIL_ADDRESS<!--end-->
  となります。

○設定ファイル

  mkhrefは起動時にホームディレクトリの`.mkhrefrc'及びカレントディレク
トリの`mkhref.conf'を読み込みます。これは単にloadしているだけなので、
rubyで記述してください(^^;

○サンプルデータ

  テスト用のサンプルデータといっしょにアーカイブしてます。htmlの下にあ
るmk.shを実行してみてください。なお、mkhref.rb本体はhtml/comp/rubyの下
にあります。

BEGIN---BEGIN---BEGIN---BEGIN---BEGIN---BEGIN---BEGIN---BEGIN---BEGIN
begin 644 sample.tar.gz
M'XL(`$/8ZC0``^U;S7/;UA'WE?P7<EE!G!JT!)`@15)B*%IQ),?NV'+&EI/I
M6+(,DH\D8A!@`-"*1Y;_%Z?D*>WT*YTVT[C)H=/&;NLFA_:83GK*1WM)<NJT
M,]U]>/@@+5M);+*9%CMC$7S8W;=O/WYO\0AWO9Z9.S9=@J5\I52"8P!0+!?]
M3RW//P7E`<I+E4*IM)0O5_![I:(M'8/2E.WB-'`]W0$X9NSIC^4S+.;-PIX9
M4Y?B;U@M]II*EU.90\OGRTM+CXY_N:`%\2]JI3*`IE7*Q6.0GXHU$_1_'O_:
MW/J%Y[>^]^(&G-DZ?PY>O'SJW-GG05)RN;,;6Z=SN?6M=7XGE]O8E.KI&B5)
M'6I=IK?PFV=X)JN???FY\Y<O7H#SMF=;MF,<=Z%K]QCT]0ZKY7R>="WGRZ1K
M#;MUDS1I]=J<HC18Q["`,RD*'V%6BZYRR(!<3CV]:>]!T[9<SQDT/<.VY*M7
MGTW7!B;>#A68ANNM-NU>/\?PLK_(+YU!XR:J2D=:T0R2\_76]%;+8:X;LZ.G
M&Z9G3Q@2L'$]T.WV/!<H:SP@C>=TUX.>W3+:!FM5X676 / M.L`=HR%+1J<:6*
MF?[=2UN@K:PLQQ6@<O`-XOX`7"^Y-CWC^//ZY\Z:WAQ?'?\1_O-+6/^(%X4$
M_V=!4?QYW4PE"[[&_E_$#<#'?RV)_RQH,O[3:`6.V/^U?*4\$?^E?*F2[/^S
MH*>Q_V_T]*8+YS!]GL9N7^L6ZB_J7K/+7!PMU`_=Z4^HN-^V#]W;0R5GL&W8
MLF,Z`&JF4:]A'V%;G?H+UL!52NJ26BX_DSF5V5S;77_E&?D4R)/M!F"[D:W6
M<D*NUG!(%1')G<F\DI$R<J8Z)Z&TN%'K.ZR>DEWFO0H=FL=!;R@ZJKO!E+9A
M,O"RM1PQQ31=.'T[8V:N9BJ93N8[<_.D+;ZBZ3<K2_GJ4NG;W*PD]-1I$O_[
M5'F*MM9$7+1[BJ:NK)3SO-B^^1Q'/?]52AS_RZ5B7M,*V`MH^$28X/],Z-3&
M"V<W%45YHL\TY0<H@P)@VBAMO<E49JI:_%L:><?OIK:Z`[C0]``*H)6J102?
M/`%/);VPL!!G39UV#)^Q"%JQ6ERNY@L^X]H:*"N5Q1(L\+]K:P)-038LCSD^
MWH)TZ;Q^G0%IJX*4#7EL1_!9NHF@C/A)+&#I/99-*RGD,)D'LLQ'Y1[J4&ZP
MIH=BRV`99C:;32\\CHM&Q+5B,JOC=0,Q2'$#=-P?.!?VO\?I\Y`[FK!G8W,=
M/?B$?P_!ZT?5?R?:'9^P^H_N_\KE4JS^"SA2*E=*2?W/@IYR_?.TN6Z8I@\`
M\:\<`<;OIR[I'IPG]R]#OE(M:55L1$((B//&P8*.5?)5K1AA0'EYF4#`_R`4
M2(',I0<N4UJ.T6B8HNVB`HQN-WBR8SM$_1B5?,>Q!WVPV)[K-+'I\9R;5.*&
MU;8/NX5ZGGT6U@U71_UP@SD-VV70P^Y+[S"5;O-9+/N&@4B`MCC^@*D['::0
M*J[47\+*\F(%E\`_`B!#[<_U^^9-("^XX-G@]EF3]VX0BKMH'_:KO9Z.39J)
M:0JH?M!#$UW55^/WH<)TN=D29O@#BDX--8*2PEGWNN0FT;GR)<M-#)#<MX/%
M<]Q[+"\?X$X;%XN@EW-P)XI(=)C7U=VN4!,WCX:]1F`?GY59B)"X6+FV*L1I
M,L38&\ST30BF%/ZF&XH[:+A-S`76$O8?K8LN'ZD#4BDA2C/RQ?B#T>["7HW?
MI!R;%HQ_8XKPGPY+IW,(^'7.?RJ5"IW_).=_,Z*)^/>N=QW65IW&TYP#]__'
MQ;]<*98FXE\LE<K)_C\+FI_+#5PG9]I-W<PU#(NG03H]#Y=I$ZM"F!!P^NRY
M#0VNT$<!5%7=(:YW__J;3T=_'MT9#4>?#1^,_G'G[=$]^>U/WWMS^,.JDDVW
M6!M,6V_M-FVK;700_Z]L;+YT13ISX?R&M`,+(.54?P:G*2V")&8C;FE'97JS
M"_NW?-E;?/,PVB"?QEUGB[F>2COZ2=F_C5CO(9B+'8;F#&[P(6:U\/,@39]H
M]OU?_NJ?#[X8OC'\9/0.FO[>Z+-[7PX_)ZOOOC]\BYN-.](N/Z>26[JGDQ::
M.R>.O+;=$[*LWMJVL / LGL_BEMBU.OG*&#:NW@<M$%O%[L`H9C7]UF#=PQ#&8
MVL%-1<YMNPLY&SW@/Z`PTV5Q3FQ;TOXBQ`+H2"[F=[&(X>=O?_S;=^]\/_S^
M@S_\?#B\\_KP;\-?#'\T_-.8U.]0S?#^\"?#OP_?#P;_\.OAY\.[PP?##X<?
MWO]+S!,$$\(=Y/5%<`?]/ITS[;J#=MMXC8P.%DE^FKSMNX+OC22O\C7+V^KV
MWD)V/[\XOS\A<'"0X>Y`;Z2$.T)A/L+CR2.RS4^K3V;(\W.W.4?,\W%7IP,Y
M$D!#[3ZSQ'(DA_N=GZM%$2L@4Y0')*7205YV+*:"DVSQ+WD`+7?@^"'D8DW3
M=J/YQXP2$8V'8/3ZZ(O1&UA+[XQ^//S]_0_>?&OXUO`S'@PRMZ!;S:[M'!X)
MM,AO<L=KI64X_$GTYDDN%B\7[L4K5[=S.^AS2MX)%_I>AX55K%8I5DVQ\>A7
M`RD=#\Y$J4[.'+CPJV98Z#FII@,AQ>JV-+]/[`?;4GU^GXL?U')Z73JDB"2R
M!JX)@>-@V?B,;0^LEC1>6W<_>?-?/[U[]^,__IM[W+`,;]<'IA`*,%P1;CR@
MHL/!3'PY<>@((OS!Z)/11Q15+D"Z6ZR)#Q^[?=W1>Z[L>HYA<<#B`[O4F*,Z
M?UAU^Z;A":`@'M'R+_K,&C)&4JK;-=I>(+)*I50(];K(NB\)<0E6ZY$JR=?%
M!_W+@S%K`DCF(SXB7V<W%^&&;@Y88,'#TP837T'F'63C[!R/P^#X#,)5\^BL
MGXT^Q"*XQ\.`SL,'F^M5[C-A["Z-R+X8S<%S<16?QARU8]H-6=J7<'\1\P;K
MXEO.@9157=OQ5'PXB0QXN+`"64Q$RD-I)XPDN6+2&->+&8,"?BE2$80V\$%4
MPPL`)H=YOF)FFT9=$B445G1<C3_XD)I@6*B)5'#C@]CXRQ'KX8MW!R8EF;1M
M26&"1/X*8EG%G(N"[]&AF1_^F+_G]\6=@]##0H+\>4M@B9@144,X:>%P3",3
MLWA3^&`AL-#/FECF^`J#T/B_B8P'QQ^+A8?<B0S8TK5.RAGQBTGVX5TC!C-"
M[_Q^P.XC3O@M!)T(1T8?(41\<>]+;HL`$(Z`Y.>]EDA6O!K;>-H#TT0_=O$V
MX97*7NO3&F@HE`9`.`\8\)*.".5`,!O&I=G%>S+^\X>B.29V0"$8[H)\`D0N
M9`CW/#%\&!CRF#8'3+!<VEK?N'A1[2-H>;+TO&X=]_@\,>1MX\,Q*258PZAF
MP]0@KXL=)MP_)W;0:/>A^7GW-(>M!/U8A7T87R-"I*R>X'T9'ZQG_5;MQ,F`
M#55$-S&U85],%1:NZ-1B-9A9"G@"$!U'[TPA6$=P&!/57`"V.^/3+(B8I%+`
M$!/E@&]W?E]<'019ZS="006AMV$3@[[A.+9#XORT955HR43B));B^>Z?9?AM
M6(I'LFWSB7EO12-M3''_:AZDR]9UR]Z+#I:N477SQ6P'5FY+.P?'):X#(Q)8
M1S\5!E4;ENMX\O&T==A8UBY&B8^E?CO,B4<DZMX8@[KG&!Y[PH0D'4^2D#&.
MJ/BPNK-Q5(@_##UW\867)A%RW-;+?5P2V@3"4'SJXK9-@,FX4,NV&%_#P5<Y
M)YIX_I_*FZ!'_?Y7*D7G/X42?_ZOY)/S_YG0TWC_XR)FSDS?\SRA.HW'O/LQ
MDS<EM/^--R5X_<>.7:8QQU'U#W@S>/^S0%B@%9+WOV9$00.[*J$#UEJ,65B^
MV+DWS4%#M1WUE;[TK<W=A)Z<1/VK;G=Z<QQQ_H_E7HS]_Q_^_G>EF$_J?Q8T
M/\=/_=UN^I#?`4`][*<AN$8ORX`*"G7P()WP#_Y`X0WHM00N$DHHH8022BBA
AA!)***&$$DHHH8022BBAA!)***&$_IOT'QAB,7(`4```
`
end
END---END---END---END---END---END---END---END---END---END---END---END
-- 
岩室元典@インターネット技術開発部.MMC推進本部.富士通株式会社
E-Mail: iwa / mmp.fujitsu.co.jp / KFB03215 / niftyserve.or.jp
「ねらえ」(『AZEL - Panzer Dragoon RPG』for SEGA Saturn / SEGA)