Guest User

Untitled

a guest
May 27th, 2018
88
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.95 KB | None | 0 0
  1. $(function(){
  2. // ruler用のcanvas要素をbody要素内に追加
  3. $('body').append('<canvas id="ruler"></span>');
  4. // 各コードブロックで関数を実行
  5. $('pre code').each(function(){
  6. // コードブロック内のコードに対して改行コードを検知して各行を配列に格納
  7. var codeStrings = $(this).text().split(/\r\n|\r|\n/);
  8. // コードブロック内の行数を取得
  9. var lines = codeStrings.length - 1;
  10. // 行数を表示させるためのul要素を作成
  11. var $numbering = $('<ul/>').addClass('pre-numbering');
  12. // コードブロックの描画幅を取得
  13. var elWidth = $(this).width();
  14. // コード内のフォントを取得
  15. var textFont = $('pre code').css('font');
  16. // 行数表示用の要素を親要素の下に追加
  17. $(this)
  18. .parent()
  19. .append($numbering);
  20. var i,j,wraps;
  21. // コードの各行に関するループ
  22. for(i=0;i<lines;i++){
  23. // 文字列の描画幅を取得して画面を何度折り返すかを調べる
  24. wraps = Math.floor(strWidth(codeStrings[i])/elWidth);
  25. // 行数をli要素の中に入れる
  26. $numbering.append($('<li/>').text(i+1));
  27. // 折り返しがある場合は折り返しの数だけ空のli要素を追加
  28. if(wraps>0){
  29. for (j=0;j<wraps;j++){
  30. $numbering.append('<li> </li>');
  31. }
  32. }
  33. }
  34. // canvasを使った文字列の描画幅を取得する関数
  35. function strWidth(str) {
  36. var canvas = document.getElementById('ruler');
  37. if (canvas.getContext) {
  38. var context = canvas.getContext('2d');
  39. context.font = textFont;
  40. var metrics = context.measureText(str);
  41. return metrics.width;
  42. }
  43. return -1;
  44. }
  45. });
  46. });
Add Comment
Please, Sign In to add comment