今回もpygmentize関係のネタ。
コード引用で「Ctrl-ダブルクリック」で新規ウィンドウで目一杯、を実現させてみたの。横に長すぎてストレスが溜まる以下で実際にやってみて:
1 import math
2
3 # calculate Julius year (year from 2000/1/1, for variable "t")
4 def jy(yy, mm, dd, h, m, s, i): # yy/mm/dd h:m:s, i: time difference
5 #yy -= 2000
6 #if (mm <= 2):
7 # mm += 12
8 # yy -= 1
9 #
10 #k = 365 * yy + 30 * mm + dd - 33.5 - i / 24.0 + math.floor(3 * (mm + 1) / 5.0)
11 # + math.floor(yy / 4.0) - math.floor(yy / 100.0) + math.floor(yy / 400.0)
12 #k += ((s / 60.0 + m) / 60 + h) / 24.0 # plus time
13 #k += (65 + yy) / 86400.0 # plus delta T
14 #return k / 365.25
15 a_ = (14 - mm) / 12
16 y_ = yy + 4800 - a_
17 m_ = mm + 12 * a_ - 3
18 JDN_ = dd + (153 * m_ + 2) / 5 + 365 * y_ + y_ / 4 - y_ / 100 + y_ / 400 - 32045
19 JD_ = JDN_ + (h - 12 - i) / 24. + m / 1440. + s / 86400.
20 return JD_
21
22 jy_ = jy(2013, 4, 2, 0, 0, 0, 9)
23 lw_ = -139.7909446414986
24 le_ = -lw_
25 phi_ = 35.54131474808071
26 height_ = 0.
27
28 naster_ = jy_ - 2451545.0009 - lw_ / 360.
29 #naster_ = jy_ - 2451545.0009 + le_ / 360.
30 n_ = round(naster_) #
31 jaster_ = 2451545.0009 + lw_ / 360. + n_
32 #jaster_ = 2451545.0009 - le_ / 360. + n_
33 M_ = (357.5291 + 0.98560028 * (jaster_ - 2451545)) % 360 #
34 C_ = 1.9148 * math.sin(math.radians(M_)) + 0.0200 * math.sin(math.radians(2 * M_)) + 0.0003 * math.sin(math.radians(3 * M_))
35 lambda_ = (M_ + 102.9372 + C_ + 180.) % 360
36 jtransit_ = jaster_ + 0.0053 * math.sin(math.radians(M_)) - 0.0069 * math.sin(math.radians(2 * lambda_))
37 sin_delta_ = math.sin(math.radians(lambda_)) * math.sin(math.radians(23.45))
38 delta_ = math.degrees(math.asin(sin_delta_))
39
40 w0_ = math.degrees(
41 math.acos((math.sin(math.radians(-0.83 - 2.076 * math.sqrt(height_) / 60.)) - math.sin(math.radians(phi_)) * sin_delta_) /
42 (math.cos(math.radians(phi_)) * math.cos(math.radians(delta_))))
43 )
44
45 #jset_ = 2451545.0009 + (w0_ + lw_) / 360. + n_ + 0.0053 * math.sin(math.radians(M_)) - 0.0069 * math.sin(math.radians(2 * lambda_))
46 jset_ = 2451545.0009 + (w0_ - le_) / 360. + n_ + 0.0053 * math.sin(math.radians(M_)) - 0.0069 * math.sin(math.radians(2 * lambda_))
47 jrise_ = jtransit_ - (jset_ - jtransit_)
48 #print(jrise_, jset_)
49
50 jrise_h_ = int((jrise_ - jy_) * 24)
51 print(jrise_h_, ((jrise_ - jy_) * 1440) % 60)
52 jtransit_h_ = int((jtransit_ - jy_) * 24)
53 print(jtransit_h_, ((jtransit_ - jy_) * 1440) % 60)
54 jset_h_ = int((jset_ - jy_) * 24)
55 print(jset_h_, ((jset_ - jy_) * 1440) % 60)
56
57 #print(__timefromdecimalday(jrise_*(1e11)), __timefromdecimalday(jset_*(1e11)))
パーフェクトに満足いくものでないことは、多分わかってもらえると思う。せっかくの行番号表示非表示・プロンプトと結果の表示非表示は引き継げていない。
これね、難しいのなぁ…。
1 jQuery(function($) {
2 // ...snip...
3 $(document).ready(function() {
4 // ...snip...
5 var div = $('.pygments .highlight');
6 var pre = div.find('pre');
7
8 pre.each(function (i) {
9 /* double-click to select all, mainly for chrome...*/
10 $(this).on('dblclick', function(e) {
11 if (e.ctrlKey) {
12 var head = $('head').html();
13 var contents =
14 '<div class="pygments"><div class="highlight"><pre title="Ctrl-A to select all">' +
15 $(this).html() +
16 '</pre></div></div>';
17 var nw = window.open();
18 nw.document.head.innerHTML = head;
19 $(nw.document.body).html(contents);
20 } else {
21 // ...snip...
22 }
23 });
24 this.title = 'double-click to select all.\n\nctrl-double-click to new window.';
25 // ...snip...
元の head をそのまんま新しいウィンドウの head に引き継いでるのはわかると思う。のに、なんで pre の外の highlight div、pygments div を捨ててるのか。これは script が効かないから。新しいウィンドウの方のロードに割り込めればイケそうな気もするし、この情報をみるに、それでもイケなそうな気もするし、よくわからない。
パーフェクトとは言えなくてもこれ、実用十分とは言えると思う。そもそもなにゆえに新しいウィンドウで読みたいかといえば、「せせこましいウィンドウサイズで苦痛を感じながら読むのがイヤ、コードだけに集中させろや」というのと、あとはいわゆる印刷フレンドリ、なわけでしょ。新規ウィンドウ側ではあんまり細かい制御、出来なくても良い…と思う。