論文情報から bibtex データを表示する ver.0.0.1

タグの class 名を使って論文の詳細情報を表示したものから bibtex 形式のデータを作成するための javascript.

現時点での、論文の詳細情報は次のような形式

<div class="paper"> <div class="title">論文名</div> <span class="author"><u>自分</u>, 共著者1, 共著者2,.... </span>, <span class="publication">会議 or 雑誌名</span>, <span class="year">西暦</span>, <span class="pages">ページ</span> <span class="authorinfo">著者情報</span> <div class="description">論文概要</div> <div class="comment">論文に対するコメントなど</div> <div class="keyword">KW: キーワード</div> </div>

div や span は基本的に処理では無視して class名のみで対応。ただし、雑誌、国際会議、博士論文、などの分類は、記述の提案者からの記述になかったため未対応、要検討。

また、bibtex のタグを表記するには上記の記述では不十分であるため、それへの対応も要検討。
なにか標準的な記述方法があるなら、それに対応する予定。


showbib = function(bibtex) {
    if(bibtex.parentNode.lastChild.className == 'bibtex') {
	bibtex.parentNode.removeChild(bibtex.parentNode.lastChild);
	return;
    }
    paper = bibtex.parentNode;                
    var bibdiv = document.createElement("div");
    bibdiv.setAttribute("class","bibtex");
    if(paper.hasChildNodes()) {
	var nodes = paper.childNodes;
	for(var i = 0; i < nodes.length; i++) {
	    texts = "";
	    switch (nodes[i].className) {
	    case 'title':
                texts = "\t title = \t{"+nodes[i].innerHTML+"},";
		break;
	    case 'author':
		authors = nodes[i].innerHTML;
	        authors = authors.replace(/<\/*u>/i,"").replace(/<\/*u>/i,"");
	        while(authors.search(/,/) != -1) {
	            authors = authors.replace(/\,/, " and");
                } 
                texts = "\t author = \t{"+authors+"},";
		break;
	    case'publication':
	        texts = "\t journal = \t{"+ nodes[i].innerHTML+"},";
		break;
	    case 'year':
	        texts = "\t year = \t"+ nodes[i].innerHTML +",";
		break;
	    case 'pages':
	        texts = "\t pages = \t{"+ nodes[i].innerHTML +"}";
		break;
	    default:
		continue;
	    }
	    bibdiv.appendChild(document.createTextNode(texts));
	    bibdiv.appendChild(document.createElement("br")); 
	}
    }
    paper.appendChild(bibdiv);
}
	     

document 内の paper というクラス名をもつ div 要素を見つけて、Bibtex を出力するタグを挿入する。

初めは、全ての paper に書き込んでいたけど、Javascrip を使っていないと意味がないタグなので、どうせならロード時に埋め込むのよいのではと思い作成したメソッド。


writebibtex = function() {
    var divs = document.getElementsByTagName("div");
    for(var i = 0; i < divs.length; i++) {
	if(divs[i].className == 'paper') {
	    var bibdiv = document.createElement("div");
	    bibdiv.setAttribute("class","bibtexIndex");
	    bibdiv.setAttribute("onclick","showbib(this)");
	    bibdiv.appendChild(document.createTextNode("Bibtex"));
	    divs[i].appendChild(bibdiv);
	}
    }
}
	     
ToDo
  • 標準的な論文詳細情報の記述方式があるのか調べないと
  • bibtex 形式の属性全てに対応する?
  • 論文タイプはどう分類するのか