*注釈の最後が)であるときに注釈の範囲を誤る
*注釈の最後が)であるときに注釈の範囲を誤る [#zacc6c98]

-ページ: BugTrack
-投稿者: [[reimy]]
-優先順位: 重要
-状態: 完了
-カテゴリー: 本体バグ
-投稿日: 2002-07-24 (水) 03:12:06
-バージョン: 1.3.2

**メッセージ
**メッセージ [#q57bda96]
PukiWiki 1.3のときには
 著書((赤松健『ラブひな』(講談社)))にあるとおり…
というような場合、きちんと
 赤松健『ラブひな』(講談社)
が注釈になったが、1.3.2では
 赤松健『ラブひな』(講談社
が注釈になり、本文に)が残ってしまう。

下のように書くことで回避してもらえますか?
 著書((赤松健『ラブひな』(講談社) ))にあるとおり…

[[注釈のバグ]](([[開発日記/2002-07-16]]))の修正によるエンバグ。
----
-うーーん、これは難しいぞ?これをきちんとマッチするようにするのは無理では? -- [[ゆう]] SIZE(10){2002-07-24 (水) 17:22:23}
-すみませんが、これは仕様ですね。 -- [[ゆう]] SIZE(10){2002-07-24 (水) 17:36:08}
-上に回避方法を書いたんで、これでお願いします。 -- [[ゆう]] SIZE(10){2002-07-24 (水) 17:39:52}
-この回避方法だと、場合によって改行が入ってしまい、次の注釈との間に空行が出力されてしまう場合があるのでまずいです。 -- [[reimy]] SIZE(10){2002-07-24 (水) 20:08:45}
-うーん、でも)))と出ている場合、)) ) なのか ) ))なのか区別をつける方法がないんですよ。()が注釈のなかで対になってる訳でないしなぁ。 -- [[ゆう]] SIZE(10){2002-07-24 (水) 20:12:29}
-あ!そっか! [ ] ( : などは\(などでエスケープってのはどうでしょう?これだと本文に[ [ほげほげ] ]とかも簡単にかけるし。 -- [[ゆう]] SIZE(10){2002-07-24 (水) 20:27:25}
-エスケープってプログラムしてる人には馴染みあるけど、非プログラマに馴染みがあるかどうかが微妙。ワタシはエスケープは採用反対です。ゆうさんの回避案のスペースを挟むって案でワタシはいいような気がします。 -- [[kawara]] SIZE(10){2002-07-24 (水) 20:31:14}
--次の注釈との間に空行が入らないように処理されるならそれでいいですが。COLOR(crimson){注釈末尾のスペースを削除して出力してくれるなら} -- [[reimy]]
-あるいは、convert_htmlのほうでもうちょっと書式の取り扱いをしっかり決めれば解決できる問題かもしれませんね。 -- [[kawara]] SIZE(10){2002-07-24 (水) 20:31:55}
--)))の判別は無理じゃないですか。文法的にはいまの解釈があってるわけだし。 -- [[ゆう]] SIZE(10){2002-07-24 (水) 20:49:51}
-正規表現の後続ルールで、 /....\)\)(?!\))/ ってので貪欲にマッチします。こうすれば直後に括弧を置く場合だけ空白入れればOKだと思います。(っていうか、Xikiではこうやってる) -- [[seagull]] SIZE(10){2002-07-24 (水) 21:07:21}
-↑?意味がちょっと分からないんですが・・・。現行の正規表現/\(\( ( (?:(?!\)\)).)*)\)\)/exとなっていて最短マッチになっています。 -- [[ゆう]] SIZE(10){2002-07-24 (水) 21:55:21}
-\)\)[^\)] -- SIZE(10){2002-07-24 (水) 23:56:13}
--でもそうすると、(ほげほげ( (注釈)))が今度かけないですよね? -- [[ゆう]] SIZE(10){2002-07-25 (木) 00:21:22}
---日本語では、注釈番号は括弧の外側に付けるので、括弧の内側に注釈を書くことはないです。(ほげほげ)((注釈))となるはず。日本語の標準的書式を無視した理系論文は知りませんが。
---逆に注釈の末尾が)になることは非常に多い。参考文献など、著者『文献名』(出版社及び発行年)の形で頻繁に現われる。参考文献の場合などは一般に末尾に句読点はつけないことになっているから、末尾は)になる。
---そもそも注釈の書式に一般的な文章に頻発する(や)を使うのが問題。どうしても使うなら、エスケープの利用もやむを得ないでしょう。 -- [[reimy]] SIZE(10){2002-07-25 (木) 00:29:48}
--日本語だけとは限らないしなぁ・・・。エスケープが最良解かな?ただふつうの人にエスケープはわかりずらいよなー。 -- [[ゆう]] SIZE(10){2002-07-25 (木) 00:53:26}
-Wikiは論文を書くためだけじゃないし、Wikiは厳密に日本語を書くよりは手軽に使える方を優先したいと考えています。厳密に書くならHTMLの方が向いてるし。 -- [[ゆう]] SIZE(10){2002-07-25 (木) 00:56:07}
--もう少し丁寧に読んでほしいです。どこにも論文を書くため…なんて話は出てこないですが。日本語の一般的な文章の話です。逆に一般的ではない、日本語の書式を無視した理系論文などは論外っていうことを書いてるんですが。
--日本語を厳密に書くのにHTMLが向いてるという話は聞いたことないですね。HTML(というより、それを解釈するブラウザのデフォルト値)は日本語の書式にまったく合致しておらず、欧文の書式になっているというのが一般的だと思ってましたが。日本語に適したHTML(の解釈をする)ブラウザってありましたっけ?
-最近のfixでWikiの文法がHTMLの文法に縛られてきているような気がします。僕としては正しいHTMLを吐かなくても、書きやすいWikiを優先したいと思っています。 -- [[ゆう]] SIZE(10){2002-07-25 (木) 00:58:16}
--この問題はHTMLの文法と何の関係もないはず。正確には、正規表現の文法に縛られているというべき。
-というわけでスペースを入れることでどうでしょう? -- [[ゆう]] SIZE(10){2002-07-25 (木) 01:09:49}
--ですから、COLOR(crimson){注釈末尾のスペースを削除して出力してくれるなら}という条件さえ充たされれば。
 (.*)\(\((.*)\)\)(?!\))[\s]*([^\s].*)?$ とすると、最短マッチは最短マッチなのですが、右括弧だけは貪欲に食べるという事です。(ほげほげ((注釈)))は、最後の右括弧の前に空白をいれる (ほげほげ ((注釈(あう))) )と書くと、$1=(ほげほげ $2=注釈(あう) $3=) となって、後続の空白が消去されませんか? -- [[seagull]] SIZE(10){2002-07-25 (木) 01:12:53}
-がび~ん、、注釈恐るべし。。 -- [[seagull]] SIZE(10){2002-07-25 (木) 01:13:38}
-適当に空白を入れるとか、全角使うか、preしてください(苦笑 -- [[ゆう]] SIZE(10){2002-07-25 (木) 01:15:15}
-あ、これはいいですね。でもちょっとわかりづらいですねー(苦笑<空白を空けない注釈の書き方。 -- [[ゆう]] SIZE(10){2002-07-25 (木) 01:25:24}
-Wikiの文法はここまで厳密にする必要があるか疑問です。この書き方をサポートするとしてもこれをマニュアルに書くとどうしても複雑になってしまう気がします。マニュアルには書かないって方法もありますね。 -- [[ゆう]] SIZE(10){2002-07-25 (木) 01:30:29}
-でも、ユーザが書いた空白を勝手に消すのもどうかと思います。Wikiにはこの程度の制約は良しだと僕はおもいます。 -- [[ゆう]] SIZE(10){2002-07-25 (木) 01:41:15}
-空白だけならともかく、実際には空行になってしまう可能性があるのは問題です。ユーザーが書きたくて書いた空白でないものは削除してしかるべきです。 -- [[reimy]] SIZE(10){2002-07-25 (木) 01:46:07}
-注釈の中にカッコ書くために仕方がないとしてもユーザの意志としてそこに空白が入っていてそれが空行になるのなら仕方がないと思います。 -- [[ゆう]] SIZE(10){2002-07-25 (木) 01:50:49}
-あ、PHPのマニュアルみてたら、括弧の対応を見てマッチさせる方法があるんですね。。改行跨いだらおしまいなので、括弧内が長くなるときついですけど。 -- [[seagull]] SIZE(10){2002-07-25 (木) 01:58:51}
-それに、常にカッコは対とは限らないですしね。 :-) -- [[ゆう]] SIZE(10){2002-07-25 (木) 02:00:36}
-ん~。。注釈末の空白って、考え方としては段落末と似たようなものなんだから、空白除去しても問題ないのでは?というより、私の場合はどっちかといえば文中の空白は、PREなどで明示しない限り、除去してくれたほうがありがたかったりする。 -- [[seagull]] SIZE(10){2002-07-25 (木) 02:05:06}
-特にマニュアルには明記しないで採用します?僕個人的にはエスケープが好きなんですがこれ以上書式が複雑になるのを避けたいんです。 -- [[ゆう]] SIZE(10){2002-07-25 (木) 02:16:13}
-エスケープは注釈だけでなく他の書式でも…って話になるから、[[seagull]]さんの案のほうが簡便でいい。 -- [[reimy]] SIZE(10){2002-07-25 (木) 02:44:14}
-それじゃもうちょっと試してから、seagull案でいきまーす -- [[ゆう]] SIZE(10){2002-07-25 (木) 02:53:03}
-すんません、これほったらかしでした。しばらく置いたら忘れてしまったんですがseagullさんの案で行くと1行に1注釈しか置けなくないですか? -- [[ゆう]] SIZE(10){2002-08-05 (月) 22:13:45}
-(( hoge(HOGE)[space]((半角スペースだとおもってください))))って書いて空白空くのは、下のnoteの部分ですよね?本文じゃなくて。だったらmake_noteで$strの空白とればいいだけ? -- [[ゆう]] SIZE(10){2002-08-05 (月) 22:17:50}
-別に、複数回マッチさせるだけだから、そんな事ないと思いますけど。。http://xiki.mitsuki.no-ip.com/index.php?SandBox -- [[seagull ]] SIZE(10){2002-08-05 (月) 22:20:20}
-↑このメッセージ、URLオートリンクの後ろのBracketName に反応してないな。。。(HN部注目) -- [[seagull]] SIZE(10){2002-08-05 (月) 22:22:25}
--あれ?お名前に半角スペース入ってませんか?:) -- [[ゆう]] SIZE(10){2002-08-05 (月) 22:24:50}
-あ、複数回マッチか。了解です。でも実はmake_noteでもOK? -- [[ゆう]] SIZE(10){2002-08-05 (月) 22:26:48}
-あ、ほんとだ。末尾についてますね。(^^; <半角空白 -- [[seagull]] SIZE(10){2002-08-05 (月) 22:29:40}
-PHPのpreg_matchで単純に複数回マッチさせると、最後の1つしか出て来ないので、マッチしなくなるまでループさせる必要がありますけどね(^^; -- [[seagull]] SIZE(10){2002-08-05 (月) 22:30:49}
-make_note 良くみてないので、判らんですが。 -- [[seagull]] SIZE(10){2002-08-05 (月) 22:32:06}

html.phpの671行目を下記のように変えてもOKかなと。
 $str = preg_replace("/\s*\)\)$/","",$str);

要するに切り出しの正規表現で空白を排除するんじゃなくて、noteの中の注釈末の空白をあとで除去ってかんじなんですが - [[ゆう]]
-アップしました。これでどうでしょう?>reimy -- [[ゆう]] SIZE(10){2002-08-22 (木) 02:39:29}
--いい感じです。 -- [[reimy]] SIZE(10){2002-08-23 (金) 16:32:57}
#comment
//#comment

トップ   編集 差分 履歴 添付 複製 名前変更 リロード   新規 一覧 検索 最終更新   ヘルプ   最終更新のRSS
Site admin: PukiWiki Development Team

PukiWiki 1.5.4+ © 2001-2022 PukiWiki Development Team. Powered by PHP 8.2.12. HTML convert time: 0.096 sec.

SourceForge