PukiWiki改造/日本語アンカー名
をテンプレートにして作成
[
凌宮
|
初基
|
一覧
|
検索
|
最新
] [
ソース
]
開始行:
/日本語アンカー名
#indent
#contents
/////////////////////////////////////////////////////////...
*方針 [#wbd776ad]
日本語のページ名を設定できることが PukiWiki 流派の売りの...
しかし、アンカー名は HTML の制約を受けて英字限定のままで...
Wiki は HTML ではない。
Wiki は HTML のできないことをして良い。
日本語のページが必要とされるように、日本語のアンカー名も...
また、日本語のページ名に対応するため、PukiWiki では「ブラ...
###
[[ページ名#アンカー名]]
###
これに対し、アンカーを下ろすには aname プラグインを使う必...
###
&aname(アンカー名);
###
この非対称を無くすため、そして、アンカーを目立たせるため、
aname に対応した Wiki 構文 = [[ネイティブエイリアス>../...
/////////////////////////////////////////////////////////...
* 仕様 [#q38acc3a]
/////////////////////////////////////////////////////////...
** アンカープラグイン aname とブラケット書式 ##[&[;〜&];]...
アンカーに日本語を許す。
ただし、半角記号「##[>#]##」は書式に使用するため、アンカ...
** アンカーのエンコード方式 [#hc15664a]
アンカーのエンコードは PukiWiki に使われる URL のエンコー...
ただし、HTML の id の仕様を満たすため、以下の変換とする。
#ceq(e)
変換規則
#ceq(q)
例:アンカー名
#ceq(a)
目的
#ceq(e)
1. rawurlencode で URL 文字列に変換
#ceq(q)
%A5%A2%A5%F3%A5%AB%A1%BC%CC%BE
#ceq(a)
PukiWiki の URL エンコード方式
#ceq(e)
2. 「##%##」を「##_##」に置換
#ceq(q)
_A5_A2_A5_F3_A5_AB_A1_BC_CC_BE
#ceq(a)
HTML の id では「%」を使用不能。
#ceq(e)
3. 「Anchor」を先頭に付加
#ceq(q)
Anchor_A5_A2_A5_F3_A5_AB_A1_BC_CC_BE
#ceq(a)
HTML の id は「_」を先頭に配置不能。Anchorであること...
#ceq(end)
** ネイティブエイリアス ##[&[;[〜]&];]## [#db881104]
リンクのネイティブ書式が ##&[;[〜]&];## に因み、アンカー...
これは、似た目的のインライン書式に同じ記号を割り当てる Wi...
| |l:lx: |lx: |lx: |l:lx: ...
|太字 |: ##'&';〜&';'##|## ⇔ ##|斜体 |: ##'&';'...
|削除 |: ##%&%;〜&%;%##|## ⇔ ##|更新 |: ##%&%;%...
|リンク|: ##[&[;〜&];]##|## ⇔ ##|アンカー |: ##[&[;[...
##[&[;〜&];]## 自体の拡張も検討したが、##[&[;〜&];]## が...
- 例: アンカー ##[&[;#&#;〜&];]## ## ⇔ ## リンク ##[&[...
ネイティブエイリアス##[&[;[〜]&];]##の書式を以下の3つの...
:アンカーのみ ##[&[;[&#;## '''Anchor''' ##]&];]##|
-'''Anchor''' をアンカーに設定する。
-アンカー位置には何も表示しない。
:エイリアス指定 ##[&[;[## '''Alias''' ##]&];]##|
-'''Alias'''をアンカーに設定する。
-アンカー位置に'''Alias'''を表示する。
:エイリアスとアンカーの同時指定 ##[&[;[## '''Alias''' ># ...
-'''Anchor''' をアンカーに設定する。
-アンカー位置に'''Alias'''を表示する。
/////////////////////////////////////////////////////////...
* 実装 [#g668057c]
/////////////////////////////////////////////////////////...
** プラグイン aname [#y4dab69e]
- ##plugin/aname.inc.php## の先頭、グローバル領域にて、
#code(diff){{{{
// Max length of ID
- define('PLUGIN_ANAME_ID_MAX', 40);
+ define('PLUGIN_ANAME_ID_MAX', 1024);
}}}}
日本語アンカーのエンコード結果が、半角40文字を容易に...
HTML としては id の最大長を指定してないようだが、実用...
- ##plugin/aname.inc.php## の ##function lugin_aname_tag#...
#code(diff){{{{
function plugin_aname_tag($args = array(), $conve...
{
...
$id = array_shift($args);
+ if (! preg_match(PLUGIN_ANAME_ID_REGEX, $id))
+ {
+ $id = rawurlencode($id);
+ $id = 'Anchor' . str_replace('%', '_', $i...
+ }
}}}}
/////////////////////////////////////////////////////////...
** ブラケット書式 ##[&[;〜&];]## [#xbc98cc4]
- ##lib/make_link.inc.php## の先頭、グローバル領域にて、#...
#code(diff){{{{
+ // Pattern of ID
+ define('PLUGIN_ANAME_ID_REGEX', '/^[A-Za-z][\w\-]...
}}}}
- ##lib/make_link.inc.php## の中ほど、##class Link_bracke...
#code(diff){{{{
function get_pattern()
{
global $WikiName, $BracketName;
$s2 = $this->start + 2;
return <<<EOD
\[\[ # Open bracket
(?:((?:(?!\]\]).)+)>)? # (1) Alias
(\[\[)? # (2) Open bracket
( # (3) PageName
(?:$WikiName)
|
(?:$BracketName)
)?
- (\#(?:[a-zA-Z][\w-]*)?)? # (4) Anchor
+ (?:\#([^\[\>\#\]]+)?)? # (4) Anchor
(?($s2)\]\]) # Close bracket if (2)
\]\] # Close bracket
EOD;
}
}}}}
- ##lib/make_link.inc.php## の中ほど、##class Link_bracke...
#code(diff){{{{
+ if (! preg_match(PLUGIN_ANAME_ID_REGEX,$t...
+ {
+ $this->anchor = rawurlencode($this->a...
+ $this->anchor = 'Anchor' . str_replac...
+ }
+ $this->anchor = '#'.$this->anchor;
+
return make_pagelink(
$this->name,
$this->alias,
$this->anchor,
$this->page
}}}}
/////////////////////////////////////////////////////////...
** ネイティブエイリアス ##[&[;[〜]&];]## [#z82f4475]
- ##lib/make_link.inc.php## の先頭、##class InlineConvert...
#code(diff){{{{
function InlineConverter($converters = NULL, ...
{
if ($converters === NULL) {
$converters = array(
...
+ 'bracketanchor', // BracketAnchor
'bracketname', // BracketName
...
);
}
}}}}
正規表現として ##[&[;[〜]&];]## は ##[&[;〜&];]## に...
- ##lib/make_link.inc.php## の中ほど、##class Link_bracke...
((継承している##Link_plugin_alias## は [[ネイティブエイ...
#code(php){{{{
// BracketAnchor
// Native-alias for &aname plugin
class Link_bracketanchor extends Link_plugin_alias
{
var $name = 'aname';
var $pattern = '\[\[\[(()(?:([^\[\>\#\]]+)>?)...
function set($arr, $page)
{
list(, $this->plain, , $body, $this->para...
if ($this->param == '') {$this->param = $...
return parent::setParam($page, $this->nam...
}
}
}}}}
%bodynote
/////////////////////////////////////////////////////////...
* 課題 [#l64ec37e]
- 見出しのアンカー ##[#〜]## をアンカーのネイティブエイリ...
-- 見出しのハッシュではなく、文字列自体をアンカーにすべし。
--- 今でも ##**[&[;[見出し1]&];]## のようにコーディングす...
--- アンカーの禁止文字「##[>#]##」を何とかすべし。
-- 見出しの階層構造に応じたアンカーの階層化を検討すべし。
--- 例: ##ページ階層1/ページ階層2/ページ名#見出し1/見出...
--- 例: ##ページ階層1/ページ階層2/ページ名#見出し1-1-1 #...
/////////////////////////////////////////////////////////...
終了行:
/日本語アンカー名
#indent
#contents
/////////////////////////////////////////////////////////...
*方針 [#wbd776ad]
日本語のページ名を設定できることが PukiWiki 流派の売りの...
しかし、アンカー名は HTML の制約を受けて英字限定のままで...
Wiki は HTML ではない。
Wiki は HTML のできないことをして良い。
日本語のページが必要とされるように、日本語のアンカー名も...
また、日本語のページ名に対応するため、PukiWiki では「ブラ...
###
[[ページ名#アンカー名]]
###
これに対し、アンカーを下ろすには aname プラグインを使う必...
###
&aname(アンカー名);
###
この非対称を無くすため、そして、アンカーを目立たせるため、
aname に対応した Wiki 構文 = [[ネイティブエイリアス>../...
/////////////////////////////////////////////////////////...
* 仕様 [#q38acc3a]
/////////////////////////////////////////////////////////...
** アンカープラグイン aname とブラケット書式 ##[&[;〜&];]...
アンカーに日本語を許す。
ただし、半角記号「##[>#]##」は書式に使用するため、アンカ...
** アンカーのエンコード方式 [#hc15664a]
アンカーのエンコードは PukiWiki に使われる URL のエンコー...
ただし、HTML の id の仕様を満たすため、以下の変換とする。
#ceq(e)
変換規則
#ceq(q)
例:アンカー名
#ceq(a)
目的
#ceq(e)
1. rawurlencode で URL 文字列に変換
#ceq(q)
%A5%A2%A5%F3%A5%AB%A1%BC%CC%BE
#ceq(a)
PukiWiki の URL エンコード方式
#ceq(e)
2. 「##%##」を「##_##」に置換
#ceq(q)
_A5_A2_A5_F3_A5_AB_A1_BC_CC_BE
#ceq(a)
HTML の id では「%」を使用不能。
#ceq(e)
3. 「Anchor」を先頭に付加
#ceq(q)
Anchor_A5_A2_A5_F3_A5_AB_A1_BC_CC_BE
#ceq(a)
HTML の id は「_」を先頭に配置不能。Anchorであること...
#ceq(end)
** ネイティブエイリアス ##[&[;[〜]&];]## [#db881104]
リンクのネイティブ書式が ##&[;[〜]&];## に因み、アンカー...
これは、似た目的のインライン書式に同じ記号を割り当てる Wi...
| |l:lx: |lx: |lx: |l:lx: ...
|太字 |: ##'&';〜&';'##|## ⇔ ##|斜体 |: ##'&';'...
|削除 |: ##%&%;〜&%;%##|## ⇔ ##|更新 |: ##%&%;%...
|リンク|: ##[&[;〜&];]##|## ⇔ ##|アンカー |: ##[&[;[...
##[&[;〜&];]## 自体の拡張も検討したが、##[&[;〜&];]## が...
- 例: アンカー ##[&[;#&#;〜&];]## ## ⇔ ## リンク ##[&[...
ネイティブエイリアス##[&[;[〜]&];]##の書式を以下の3つの...
:アンカーのみ ##[&[;[&#;## '''Anchor''' ##]&];]##|
-'''Anchor''' をアンカーに設定する。
-アンカー位置には何も表示しない。
:エイリアス指定 ##[&[;[## '''Alias''' ##]&];]##|
-'''Alias'''をアンカーに設定する。
-アンカー位置に'''Alias'''を表示する。
:エイリアスとアンカーの同時指定 ##[&[;[## '''Alias''' ># ...
-'''Anchor''' をアンカーに設定する。
-アンカー位置に'''Alias'''を表示する。
/////////////////////////////////////////////////////////...
* 実装 [#g668057c]
/////////////////////////////////////////////////////////...
** プラグイン aname [#y4dab69e]
- ##plugin/aname.inc.php## の先頭、グローバル領域にて、
#code(diff){{{{
// Max length of ID
- define('PLUGIN_ANAME_ID_MAX', 40);
+ define('PLUGIN_ANAME_ID_MAX', 1024);
}}}}
日本語アンカーのエンコード結果が、半角40文字を容易に...
HTML としては id の最大長を指定してないようだが、実用...
- ##plugin/aname.inc.php## の ##function lugin_aname_tag#...
#code(diff){{{{
function plugin_aname_tag($args = array(), $conve...
{
...
$id = array_shift($args);
+ if (! preg_match(PLUGIN_ANAME_ID_REGEX, $id))
+ {
+ $id = rawurlencode($id);
+ $id = 'Anchor' . str_replace('%', '_', $i...
+ }
}}}}
/////////////////////////////////////////////////////////...
** ブラケット書式 ##[&[;〜&];]## [#xbc98cc4]
- ##lib/make_link.inc.php## の先頭、グローバル領域にて、#...
#code(diff){{{{
+ // Pattern of ID
+ define('PLUGIN_ANAME_ID_REGEX', '/^[A-Za-z][\w\-]...
}}}}
- ##lib/make_link.inc.php## の中ほど、##class Link_bracke...
#code(diff){{{{
function get_pattern()
{
global $WikiName, $BracketName;
$s2 = $this->start + 2;
return <<<EOD
\[\[ # Open bracket
(?:((?:(?!\]\]).)+)>)? # (1) Alias
(\[\[)? # (2) Open bracket
( # (3) PageName
(?:$WikiName)
|
(?:$BracketName)
)?
- (\#(?:[a-zA-Z][\w-]*)?)? # (4) Anchor
+ (?:\#([^\[\>\#\]]+)?)? # (4) Anchor
(?($s2)\]\]) # Close bracket if (2)
\]\] # Close bracket
EOD;
}
}}}}
- ##lib/make_link.inc.php## の中ほど、##class Link_bracke...
#code(diff){{{{
+ if (! preg_match(PLUGIN_ANAME_ID_REGEX,$t...
+ {
+ $this->anchor = rawurlencode($this->a...
+ $this->anchor = 'Anchor' . str_replac...
+ }
+ $this->anchor = '#'.$this->anchor;
+
return make_pagelink(
$this->name,
$this->alias,
$this->anchor,
$this->page
}}}}
/////////////////////////////////////////////////////////...
** ネイティブエイリアス ##[&[;[〜]&];]## [#z82f4475]
- ##lib/make_link.inc.php## の先頭、##class InlineConvert...
#code(diff){{{{
function InlineConverter($converters = NULL, ...
{
if ($converters === NULL) {
$converters = array(
...
+ 'bracketanchor', // BracketAnchor
'bracketname', // BracketName
...
);
}
}}}}
正規表現として ##[&[;[〜]&];]## は ##[&[;〜&];]## に...
- ##lib/make_link.inc.php## の中ほど、##class Link_bracke...
((継承している##Link_plugin_alias## は [[ネイティブエイ...
#code(php){{{{
// BracketAnchor
// Native-alias for &aname plugin
class Link_bracketanchor extends Link_plugin_alias
{
var $name = 'aname';
var $pattern = '\[\[\[(()(?:([^\[\>\#\]]+)>?)...
function set($arr, $page)
{
list(, $this->plain, , $body, $this->para...
if ($this->param == '') {$this->param = $...
return parent::setParam($page, $this->nam...
}
}
}}}}
%bodynote
/////////////////////////////////////////////////////////...
* 課題 [#l64ec37e]
- 見出しのアンカー ##[#〜]## をアンカーのネイティブエイリ...
-- 見出しのハッシュではなく、文字列自体をアンカーにすべし。
--- 今でも ##**[&[;[見出し1]&];]## のようにコーディングす...
--- アンカーの禁止文字「##[>#]##」を何とかすべし。
-- 見出しの階層構造に応じたアンカーの階層化を検討すべし。
--- 例: ##ページ階層1/ページ階層2/ページ名#見出し1/見出...
--- 例: ##ページ階層1/ページ階層2/ページ名#見出し1-1-1 #...
/////////////////////////////////////////////////////////...
ページ名:
Anatomy_of_the_Human_Ear_ja.svg
365件
[
詳細
]
line.pukiwiki.php
460件
[
詳細
]
line.diff.php
449件
[
詳細
]
inline.tex
439件
[
詳細
]
convert_html.php
472件
[
詳細
]
eq.inc.php
507件
[
詳細
]
convert.tex
423件
[
詳細
]
codehighlight.php
438件
[
詳細
]
code.inc.php
475件
[
詳細
]
ToHeader.png
234件
[
詳細
]
ToFooter_0.png
202件
[
詳細
]
ToFooter.png
239件
[
詳細
]
ParaEdit.png
245件
[
詳細
]
TexEqMiddleAlign.png
485件
[
詳細
]
[
凌宮
|
初基
|
一覧
|
検索
|
最新
] [
ソース
]