日記帳
本ページはプロモーションが含まれています
カテゴリー
Links
blog(ブログ)マスター
アンドロイドの巣
ゼロから始めるベランダ菜園
タイトル
2024年11月
1 2 3
4 5 6 7 8 9 10
11 12 13 14 15 16 17
18 19 20 21 22 23 24
25 26 27 28 29 30

fossil-scm 行番号に行番号リンクをつける方法

2015-12-16
artifactページにLine Numbersで表示しても
行番号へのリンクがありません。

行番号へ移動するリンクは内部的に存在します。

数行のスクリプトを挿入するだけなので
出力サイズはほとんど変わりません。

「コアをいじる方法」と「スキンで行う方法」の2種類を紹介します
お好きなほうでどうぞ。




skin footer に挿入する方法(お手軽) 公式バイナリを使用している人向け
<script>
var req_url = location.href.split('?')[0].split('#')[0];
function replacer(match, p1, p2, offset, string) {
  return p1 + '<a href="' + req_url + '?txt=1&ln=' + p2 + '">' + p2 + '</a>';
}
function make_link_linenumber() {
 var elm; elm = ((elm = document.getElementsByTagName("pre")) ? elm.item(0) : null);
 if ( elm ) {
  var newstr = new String(elm.innerHTML.replace(/^(\s+)(\d+)/mg, replacer));
  newstr = newstr.replace(/^(\s*<span id="\w+">\s*)(\d+)/mg, replacer);
  newstr = newstr.replace(/(<\/div>\s*)(\d+)/mg, replacer);
  elm.innerHTML = newstr;
  newstr = null;
 }
}
<th1>if {$current_page eq "artifact"} {
html " <script>if( /txt=1/i.test(location.href) ) { window.onload = make_link_linenumber; }</script>"
}</th1>


core hack : src/info.c 1770行付近から
void output_text_with_line_numbers(

-  @ <pre>
+  @ <pre id="src">

...
  @ <script>
  @ var req_url = location.href.split('?')[0].split('#')[0];
  @ function replacer(match, p1, p2, offset, string) {
  @   return p1 + '<a href="' + req_url + '?txt=1&ln=' + p2 + '">' + p2 + '</a>';
  @ }
  @ function make_link_linenumber() {
  @ // var elm; elm = ((elm = document.getElementsByTagName("pre")) ? elm.item(0) : null);
  @   var elm = document.getElementById("src");
  @  if ( elm ) {
  @   var newstr = new String(elm.innerHTML.replace(/^(\s+)(\d+)/mg, replacer));
  @   newstr = newstr.replace(/^(\s*<span id="\w+">\s*)(\d+)/mg, replacer);
  @   newstr = newstr.replace(/(<\/div>\s*)(\d+)/mg, replacer);
  @   elm.innerHTML = newstr;
  @   newstr = null;
  @  }
  @ }
  @ window.onload = make_link_linenumber;
  @ </script>
} // output_text_with_line_numbers


PR

[PR]