Scid  4.7.0
pinfo.tcl
Go to the documentation of this file.
1 
2 ####################
3 # Player Info window
4 
5 namespace eval pinfo {
6 set playerInfoName ""
7 set ::eloFromRating 0
8 
9 # the following icons are used as buttons with PND as input, this has
10 # to be handled specially and they involve some technicalities. All
11 # other icons and link resolvers come from the config file
12 image create photo wikiplnk -data {
13  R0lGODlhEAAQAIQQAAQCBBkYGSgoKDw6PEhHSFdYV2lqaXp7eoSDhJiYmKmoqbm6ucjHyNjZ2Ono
14  6fz9/P///////////////////////////////////////////////////////////////yH+EUNy
15  ZWF0ZWQgd2l0aCBHSU1QACH5BAEKABAALAAAAAAQABAAAAV24COOZGmeaDouBbE8CnE0z1E0jVE8
16  iPA+BEHDgUg8HAZjI2BwPBIBBcMgQo4KAcajEUQoRIsvOIAQJQC7I+InIhBojQFB1DiUEIBv3Pc0
17  lgQFDgoGA1QITncDBwp1AgllJgoCAl8Lk1onbjQPBgIpC5hbbConIQA7
18 }
19 image create photo dnblnk -data {
20  R0lGODlhFAAUALMAAAAAAGZmZld/u8zMzP8AAP///wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
21  AAAAACH5BAEAAAQALAAAAAAUABQAAARkkMg5BaA4SxHs1RknjB5YdSQJfCGapismvjRLzDTM4vkI
22  BB9e7ze4CHPEIsDT8wUGUAsHuKw9o8YAIUCFXQeWzbNQ4K4s37BkOSCTzWkb4dx2x0F0N9a0ZhfA
23  ciZnanwYMSARAAA7
24 }
25 image create photo seealsolnk -data {
26  R0lGODlhFQAVAMZ5AAAAAAEBAAICAQQGAhEXCSEtECMwESouJjw8PDJFGEJcH0xpJGFhYVRuMVV1
27  KF6CLH2IbmuVM4+Pj5SUlHysO4imYYGwQYK0PaKiooa6QIe7QKioqIi8Qoq9RIq9RYu9R4y+SI2+
28  SY2+SqysrI/ATZDAT62urK6urpHBUJLBUa+vr7GxsZXDVrKyspXEV5bEWJfEWrOzs7W1tZrGX7a2
29  tre3t57IZbm5ubq6uru7u6TLbry8vL29vajOdanOdsDAwMHBwavQecLCwqzQe63QfMPDw8TExLDS
30  gbDSgsXFxbHTg8bGxsfHx7LUhbTUh8jIyLXVicnJycrKyrfWjcvLy8zMzM3Nzc7OztDQ0L/bmdHR
31  0dLS0sbfpNbW1s/ks9bovdbovtrqxNrqxdvqxd3syN3syeLv0ePv0ubx1+jy2urz3fL46vP47Pf3
32  9/T57vb68Pn89vv7+/r8+Pz9+v3++/3+/P7+/f7+/v///v///////////////////////////yH+
33  EUNyZWF0ZWQgd2l0aCBHSU1QACwAAAAAFQAVAAAH/oAjKi00Nzs/QEJFi4tAPzw3NC0qJy01O0BJ
34  T1RWV55XVlVRS0A7NS0rNDt5rK15LxqxsrE7NDE3QHlsRCIcJTaws7JCODI8S3k+GmJzaEMvIXJ5
35  cB+ySzw1P1J5HhpsrS9NrUeyUkA3RVZ5KRooUF5sL2R5aXljsldFOUtYeWHssTq4qENnhh06JGJp
36  WbKDiRZWdc5wgaEBhD0NZfJMibWFScMtrvKs0eAhDxINSvKY4fjkYx4dYNyYOKAhCKs4NfLgYaFh
37  S0uHeXq8sDCAgJM3XzQ4CAAhT5aeTPb1Y9UFAAMqVCpEiGAAwAQ1GhaiU8fqDgIAaNOmvaDhipFs
38  TdtatcEgocGCuwUAJMigwZwxZCFfxXogYG+sa7dyBQ5GQQHfWMRSrVosTFatSqoyReH0CZQoUqZa
39  CCJkCJEiRkUcQZKkYoPr17Bjyw4EADs=
40 }
41 
42 proc setupDefaultResolvers { } {
43  set optionF ""
44  if {[catch {open [scidConfigFile resolvers] w} optionF]} {
45  tk_messageBox -title "Scid: Unable to write file" -type ok -icon warning \
46  -message "Unable to write options file: [scidConfigFile resolvers]\n$optionF"
47  } else {
48  puts $optionF "# Scid resolver configuration"
49  puts $optionF "# Version: $::scidVersion, $::scidVersionDate"
50  puts $optionF "# This file contains commands in the Tcl language format."
51  puts $optionF "# If you edit this file, you must preserve valid Tcl"
52  puts $optionF "# format or it will not set your Scid options properly."
53  puts $optionF "#"
54  puts $optionF "# Define how to interpret IDs stored in ssp files. Each ID has to"
55  puts $optionF "# have a unique page to link to. It is currently not possible to link"
56  puts $optionF "# to more than one page by means of a single ID, or to get more"
57  puts $optionF "# than one button by any ID. Therefore, PND is handled specially"
58  puts $optionF "# and within pinfo.tcl"
59  puts $optionF "#"
60  puts $optionF "# Syntax of the following array's list entries:"
61  puts $optionF "#"
62  puts $optionF "# IDName: the tag to search for e.g. VIAF searches for"
63  puts $optionF "# %Bio VIAF-lines and so on"
64  puts $optionF "# link target url: %ID% is replaced by the ID"
65  puts $optionF "# icon name: the icons are specified below as base64 encoded images"
66  puts $optionF "# They must not live in ::pinfo-namespace!"
67  puts $optionF "# Link text: what to display in pinfo window"
68  puts $optionF "set ::pinfo::idlink(0) {{VIAF} {http://viaf.org/%ID%} {viaflnk} {VIAF}}"
69  puts $optionF "set ::pinfo::idlink(1) {{FIDEID} {http://ratings.fide.com/card.phtml?event=%ID%} {fidelnk} {FIDE}}"
70  puts $optionF "set ::pinfo::idlink(2) {{ICCFID} {http://www.iccf-webchess.com/PlayerDetails.aspx?id=%ID%} {iccflnk} {ICCF}}"
71  puts $optionF "set ::pinfo::idlink(3) {{DSB} {http://www.schachbund.de/dwz/db/spieler.html?zps=%ID%} {dsblnk} {DSB}}"
72  puts $optionF "set ::pinfo::idlink(4) {{BCF} {http://grading.bcfservices.org.uk/getref.php?ref=%ID%} {bcflnk} {BCF}}"
73  puts $optionF "set ::pinfo::idlink(5) {{SchemingMind} {http://www.schemingmind.com/plyrprofile.aspx?profile_id=%ID%} {smlnk} {SchemingMind}}"
74  puts $optionF "#"
75  puts $optionF "# Icons for the icons defined here MUST NOT live in ::pinfo namespace"
76  puts $optionF "#"
77  puts $optionF "image create photo fidelnk -data {"
78  puts $optionF " R0lGODlhEAAQAOecACIxWSY0XSc2XSg2YCc3Xig3Xik3Xyk4Xyo4Xyo4YCo5Xyo5YCs5Xyo6Xys6"
79  puts $optionF " YCs6YSw6YCw6YSw7YSw7Yi07Yi48Yi48Yy88Yi89YzA+ZDE/ZDE/ZTI/ZTJAZTJBZjNBZTNBZjRB"
80  puts $optionF " ZjNCZTRCZjZEaDdEaThEaThGaTlGaTpIazxKbT1KbT9MbkBNb0NQc0VRc0ZScUZUdEhUdEdVdkhV"
81  puts $optionF " dElVdEpXdk1ZeE5ZeFRef1NgfVRgf1dgf1hhf11nhGFsh2JsiGFtiGJtiGNtiGZyi2lzjWt3kHB4"
82  puts $optionF " kHN+lnqEm36GnYCJnYmSo4qTpZWbrpWcq5eerZeer5qgrp6ltaGns6asuKesuqetvK60wrC1wLa6"
83  puts $optionF " xra8x7i9xLu/x7vAyb3CyMvO1MzP09DS2tDT2dHU2dHV2tLV2dPV29PX29fZ3tna3dna3tra3tzd"
84  puts $optionF " 4d3d4dze4Nze4d3e4d3e4tzf4d3f4d3f497f4d7f5N/g4d7h497h5t/h5ODi5OHi5eHj5eLj5eLk"
85  puts $optionF " 5uPl6OTm6efn6eXo6ejq6+rq6+rq7Orr7Ors6+vs7ezt7+3u7+/w8vDw8O/x8fDx8vHx8vHy9PHz"
86  puts $optionF " 9PX19fb29vf39/j4+fr6+/v6+/z9/f39/v//////////////////////////////////////////"
87  puts $optionF " ////////////////////////////////////////////////////////////////////////////"
88  puts $optionF " ////////////////////////////////////////////////////////////////////////////"
89  puts $optionF " ////////////////////////////////////////////////////////////////////////////"
90  puts $optionF " ////////////////////////////////////////////////////////////////////////////"
91  puts $optionF " /////////////////////////////////////////////////////yH+EUNyZWF0ZWQgd2l0aCBH"
92  puts $optionF " SU1QACH5BAEKAP8ALAAAAAAQABAAAAjbAEEIHEiwoMGDBz1IGGDhhIkKBhx0IBhiAgUjWMSYiXRH"
93  puts $optionF " C5IPC0YIfLBji51KV1wESWPpT5chCUBggDGH06UsACYE0DFIEqdGPSBsKIMojxwgRFg84MGmzh5B"
94  puts $optionF " elbccATp0SNGVjgIWBKpUCJFjH7gcPOGDh8yFzAISGLID6A+f4SQCMQIzhovJVqouDFGTZtDk15Q"
95  puts $optionF " 8EEI0yZKVGrIgCJJU6ZFRxiAQFAEDR4wVXLYkBImzhklCgY2ENEkChMuX55McYLiQMEOBSCkiEFj"
96  puts $optionF " RgQCGhCC6JCht+7fAwMCADs="
97  puts $optionF "}"
98  puts $optionF "image create photo iccflnk -data {"
99  puts $optionF " R0lGODlhEAAQAMZqAAAA/wEB/wMD/wQE/wUF/wYG/wcH/wgI/woK/wsL/wwM/xAQ/xER/xIS/xMT"
100  puts $optionF " /xQU/xYW/xcX/xgY/xkZ/xoa/xsb/x4e/yEh/yIi/yUl/yYm/ycn/ykp/zIy/zQ0/zY2/zc3/zo6"
101  puts $optionF " /zs7/zw8/z09/0ZG/0lJ/01N/1hY/1lZ/1pa/1tb/1xc/2Nj/2Vl/2lp/2pq/3R0/3V1/3Z2/3d3"
102  puts $optionF " /3h4/3t7/3x8/39//4SE/4WF/4uL/42N/4+P/5CQ/5KS/5OT/5SU/5WV/5aW/5eX/5iY/5ub/5+f"
103  puts $optionF " /6Cg/6Gh/6en/6mp/6qq/66u/6+v/7S0/7i4/7u7/729/7+//8DA/8LC/8PD/8rK/8zM/83N/87O"
104  puts $optionF " /9PT/9fX/9jY/+Pj/+Tk/+bm/+jo/+vr/+zs//Hx//Ly//T0//b2//j4//z8////////////////"
105  puts $optionF " /////////////////////////////////////////////////////////////////////////yH+"
106  puts $optionF " EUNyZWF0ZWQgd2l0aCBHSU1QACH5BAEKAH8ALAAAAAAQABAAAAfjgFJTaF86R2dpXjlIZ2JQUFIV"
107  puts $optionF " GGMnAAVFaCaWRlQKCRULE1cGBwIgWwQIASFSAAAMDBJKAC4XEEwALRcWTwAUKAwTQwA0GQs9ADIZ"
108  puts $optionF " Dk0ALGmhw8ULPAAzGgvNK2nBQtYjHNUxJBxOABw/3dZcW0YANl1bUa4eod40aWlHADf5rQAegkmT"
109  puts $optionF " 8QIIgBozXvQqoUWgNWM7kmVg0EwFtAlFiE30kWxDA23cJiwBAAODBFwvdvXaFsvKgAcGQGQJEGGA"
110  puts $optionF " iFYsJYT5ACBAEDMdAAggMi9FGiVMzmhhcYNMGiwrcJQBk6RKmkAAOw=="
111  puts $optionF "}"
112  puts $optionF "image create photo viaflnk -data {"
113  puts $optionF " R0lGODlhEAAQAIQaAP8AAP8ICP8QEP8YGP8hIf8pKf8xMf85Of9CQv9SUv9aWv9jY/9zc/97e/+E"
114  puts $optionF " hP+MjP+UlP+cnP+lpf+trf+1tf/Gxv/Ozv/W1v/e3v/v7////////////////////////yH+EUNy"
115  puts $optionF " ZWF0ZWQgd2l0aCBHSU1QACH5BAEKAB8ALAAAAAAQABAAAAWDoCZm1lVp1ZVhqSWOSnBpEJNlynC+"
116  puts $optionF " tCA2LwODJ4IENI+M6AKYESWACuXlIBBFFADwVdgSK9bRBCC5ajBOTYYiNWumIguFPSdmledA42JJ"
117  puts $optionF " 8DIHABhYghoqPAxZTgsEEQwTPBILDFEiAhBIeIYOhgBTd0QZCEpZEBcJA2lLFyolKayqGiEAOw=="
118  puts $optionF "}"
119  puts $optionF ""
120  puts $optionF "image create photo smlnk -data {"
121  puts $optionF " R0lGODlhEAAQAOMNAAAAABgYITE5OVJSUmNja3Nzc4SEjJycpbW1tcbOztbW3ufn5+/39///////"
122  puts $optionF " /////yH+EUNyZWF0ZWQgd2l0aCBHSU1QACwAAAAAEAAQAAAEl7AVZEprawCSmkJLQy2HwCiFJgzK"
123  puts $optionF " 1RyAUBBKMhjBEAgGchSFWOGAahACh8GNsEDkBhaPStA6SAA7gytRMHQ8GQFCYcWEMK4DsoNwoS+L"
124  puts $optionF " hIAwUnxA8Iv6N0gYBDkdDC5KCF0JCAQEgw0MIQxiBD0GTQRdUSETfQcHCAgCADEIjJwgY2N/VIw1"
125  puts $optionF " lJ0vnTEKISEGRAOeuAhfLhEAOw=="
126  puts $optionF "}"
127  puts $optionF ""
128  puts $optionF "image create photo bcflnk -data {"
129  puts $optionF " R0lGODlhEAAQAIQRAAAAAAAAIAAAQAAgYCAgIDAwMABAgEBAQGBgYDBvbwCAgD9/fzCQkH9/f2Cg"
130  puts $optionF " oDCvr4/Pz////////////////////////////////////////////////////////////yH+EUNy"
131  puts $optionF " ZWF0ZWQgd2l0aCBHSU1QACwAAAAAEAAQAAAFWmCBjGRZEgixFE3kqqwbHUjCGK1r4zJdGINc5Bfs"
132  puts $optionF " IRrIpFJJkzUAUCcU0HQ9o9ZpNXIFSKE0mFBs3AnNRqJQbVy6k9uuE/IIxKdOh0Jwx3IDAlQEB4SF"
133  puts $optionF " hoYEIQA7"
134  puts $optionF "}"
135  puts $optionF ""
136  puts $optionF "image create photo dsblnk -data {"
137  puts $optionF " R0lGODlhEAAQAMZMABIRERYVFDsQDUoTDyMiInUfGWclIDQzM3QmF4QiG0A3G0A3HU47OU49O0VE"
138  puts $optionF " RE9FI1BNTFFNTFFOTVFOTlJOTlJQT1JRUVJSUVNSUlRTU1VUVFZVVds5LMw+Mto7Kds7L80/NF1d"
139  puts $optionF " XNs9Mdo/K9s+Mts+M9pAK9xAM9xANNtBNW9iNtxDN9xDONpGLNxFOdlIK9lILH5tN9xQRXh3d458"
140  puts $optionF " P4iIiK2XTJmZmb2lU6qqqru7u9zAYszMzOzNZuzNZ+zOZ+zOaOzOae3Qbe3Qbu7Rce3Sc93d3e7u"
141  puts $optionF " 7vn39/v5+fz6+v37+///////////////////////////////////////////////////////////"
142  puts $optionF " ////////////////////////////////////////////////////////////////////////////"
143  puts $optionF " /////////////////////////////////////////////////////////////////////////yH+"
144  puts $optionF " EUNyZWF0ZWQgd2l0aCBHSU1QACwAAAAAEAAQAAAHs4BMghAUIi5CPT2Ci4sVEgwpJkGJjI0SDSgv"
145  puts $optionF " lJWLExUiIj49RZyCGBMyJCk9Q6WCS0sCBSM7Kg41gg66OUxIIScGNDG4NTdMDkxHB0xKFxwgCjYb"
146  puts $optionF " N0aCBDUzM0xJEyIfCz1GNw7GBzo6DkZIqAkID9VHyMhMMzqwAQMdOAsOBzxMAHRp0xBhAosTQBS5"
147  puts $optionF " YmIhQoYTHn4odBUhgowSLSQuzDABwooTMIAAIeKKYzcUMnokZBQIADs="
148  puts $optionF "}"
149  close $optionF
150  }
151 }
152 
153 # Resolve Wikipedias language sites by means of the Wikipedia API
154 proc WikipNLS { LinkList } {
155 
156  # set WikiPediaAPI "http://de.wikipedia.org/w/api.php?action=query"
157 
158  set WikiPLL "&prop=langlinks"
159  set WikiPTI "&titles="
160  set lang $::language
161  set langlink [lindex $LinkList 3]
162 
163  # translate Scid's internal single letter language representation by
164  # a more common two letter one; the same is used by WP
165  switch $lang {
166  B {set wplanguage pt}
167  C {set wplanguage cs}
168  D {set wplanguage de}
169  F {set wplanguage fr}
170  G {set wplanguage gr}
171  H {set wplanguage hu}
172  I {set wplanguage it}
173  K {set wplanguage ca}
174  N {set wplanguage nl}
175  O {set wplanguage no}
176  P {set wplanguage pl}
177  R {set wplanguage ru}
178  S {set wplanguage es}
179  W {set wplanguage sv}
180  Y {set wplanguage sr}
181  default {set wplanguage en}
182  }
183 
184  set Title [lindex $LinkList 3]
185  regsub -all {.*/} $Title "" Title
186 
187  # Spaces etc in URLs are bad, especially for TCL.
188  # Use poor mans urlencoding:
189  regsub -all { } $Title "%20" Title
190 
191  # collect all languages in $fullresult, each page contains a
192  # llcontinue item linking to the following languages
193  set fullresult ""
194  set llcontinue ""
195 
196  # start out here:
197  set WPfetchURL "$::pinfo::wikipAPI$WikiPLL$WikiPTI$Title"
198 
199  set token [::http::geturl $WPfetchURL]
200  set xmlresult [::http::data $token]
201  ::http::cleanup $token
202 
203  # avoid requirement of tDOM and use simple regexping here as the
204  # XML structure returned is simple enough
205 
206  # for more than 10 translations, a continue url is returned.
207  # Extract it
208  regsub -all {.*<langlinks llcontinue=} $xmlresult "" llcontinue
209  regsub -all {/>.*} $llcontinue "" llcontinue
210  regsub -all {\|} $llcontinue "%7C" llcontinue
211  regsub -all {\"} $llcontinue "" llcontinue
212 
213  # check if more langlinks exist, if so set the watermark, otherwise
214  # it has to be emptied.
215  if {[string match "*llcontinue*" $xmlresult]} {
216  # keep only the langlinks-section of the XML
217  regsub -all {.*<langlinks>} $xmlresult "" xmlresult
218  regsub -all {</langlinks>.*} $xmlresult "" xmlresult
219  regsub -all {</ll>} $xmlresult "</ll>\n" xmlresult
220  } else {
221  set llcontinue ""
222  }
223  set fullresult $xmlresult
224 
225  while { $llcontinue != "" } {
226 
227  set WPfetchURL "$::pinfo::wikipAPI$WikiPLL$WikiPTI$Title&llcontinue=$llcontinue"
228  regsub -all { } $WPfetchURL "" WPfetchURL
229 
230  set token [::http::geturl $WPfetchURL]
231  set xmlresult [::http::data $token]
232  ::http::cleanup $token
233 
234  if {[string match "*llcontinue*" $xmlresult]} {
235  regsub -all {.*<langlinks llcontinue=} $xmlresult "" llcontinue
236  regsub -all {/>.*} $llcontinue "" llcontinue
237  regsub -all {\|} $llcontinue "%7C" llcontinue
238  regsub -all {\"} $llcontinue "" llcontinue
239  } else {
240  set llcontinue ""
241  }
242 
243  regsub -all {.*<langlinks>} $xmlresult "" xmlresult
244  regsub -all {</langlinks>.*} $xmlresult "" xmlresult
245  regsub -all {</ll>} $xmlresult "</ll>\n" xmlresult
246  set fullresult "$fullresult$xmlresult"
247  }
248 
249  set langlist [split $fullresult "\n"]
250 
251  foreach ll $langlist {
252  # construct the NLS-enabled link to WP
253  if { [string match "*lang=\"$wplanguage\"*" $ll] } {
254  set baselink "http://$wplanguage.wikipedia.org/wiki/"
255  regsub -all {.*preserve">} $ll "" pagename
256  regsub -all {<.*} $pagename "" pagename
257  set langlink "$baselink$pagename"
258  }
259  }
260  openURL $langlink
261 }
262 
263 # Use the SeeAlso service hosted at Gemeinsamer Bibliotheks Verbund
264 # (Goettingen) to resolve the PND to german Wikipedia. SeeAlso might
265 # proove useful later for other services as they appear on SeeAlso
266 proc saPND2WP { pnd } {
267 
268  set SeeAlso "$::pinfo::SeeAlsoPND2WP$pnd"
269 
270  set token [::http::geturl $SeeAlso]
271 
272  set LinkList [::http::data $token]
273  regsub -all {\[} $LinkList "" LinkList
274  regsub -all {\]} $LinkList "" LinkList
275  regsub -all {\"} $LinkList "" LinkList
276  set LinkList [split $LinkList ,]
277 
278  WikipNLS $LinkList
279 }
280 
281 # Replace the ID-Tags by proper links
282 proc ReplaceIDTags { pinfo } {
283  # replace certain BIO lines by links to external media
284  regsub -all ".*PND " $pinfo "" pnd
285  regsub -all {<br>.*} $pnd "" pnd
286 
287  set pnd [string trim $pnd]
288 
289  switch $::language {
290  B {set wplanguage pt}
291  C {set wplanguage cs}
292  D {set wplanguage de}
293  F {set wplanguage fr}
294  H {set wplanguage hu}
295  I {set wplanguage it}
296  K {set wplanguage ca}
297  N {set wplanguage nl}
298  O {set wplanguage no}
299  P {set wplanguage pl}
300  R {set wplanguage ru}
301  S {set wplanguage es}
302  W {set wplanguage sv}
303  Y {set wplanguage sr}
304  default {set wplanguage en}
305  }
306 
307 
308  # the following three resolvers hook up with PND and need special
309  # treatment as additional functions need to be called
310  set wikiplink "<run openURL $::pinfo::wikipurl/$wplanguage/$pnd; ::windows::stats::Refresh><button wikiplnk -command openURL $::pinfo::wikipurl/$wplanguage/$pnd;><blue>WP</blue></run>"
311 
312  # As we have direct linkage to WikiPedia SeeAlso is currently
313  # obsolete. It might become of interest again if it offers other
314  # services to connect to.
315  ### set seealsolink "<run ::pinfo::saPND2WP $pnd; ::windows::stats::Refresh><button seealsolnk -command ::pinfo::saPND2WP $pnd><blue>SeeAlso</blue></run>"
316  set seealsolink ""
317 
318  set dnblink "<run openURL $::pinfo::dnburl/$pnd; ::windows::stats::Refresh><button dnblnk -command openURL $::pinfo::dnburl/$pnd><blue>DNB</blue></run>"
319 
320  # Handle all id definitions and link resolvers from the config file
321  foreach index [array names ::pinfo::idlink] {
322  set federation $::pinfo::idlink($index)
323  set searchterm [lindex $federation 0]
324  set link [lindex $federation 1]
325  set icon [lindex $federation 2]
326  set str [lindex $federation 3]
327 
328  # extract the ID
329  regsub -all ".*$searchterm " $pinfo "" id
330  regsub -all {<br>.*} $id "" id
331  set id [string trim $id]
332 
333  if {$id != ""} {
334  regsub -all "%ID%" $link $id link
335  set btn "<run openURL $link; ::windows::stats::Refresh><button $icon -command openURL $link><blue>$str</blue></run>"
336  regsub -all "$searchterm $id<br>" $pinfo $btn pinfo
337  }
338  }
339 
340  # Replace PND by all services linked to that ID
341  regsub -all "PND $pnd<br>" $pinfo "$seealsolink $wikiplink $dnblink" pinfo
342  regsub -all "</run> <run" $pinfo "</run> <run" pinfo
343 
344  return $pinfo
345 }
346 
347 proc playerInfo {{player ""}} {
348  global playerInfoName eloFromRating
349  if {$player == "" && [info exists playerInfoName]} { set player $playerInfoName}
350  if {[catch {sc_name info -htext $player} pinfo]} { return}
351  # append Elo History
352  append pinfo "<br><br><darkblue>$::tr(PInfoRating):</darkblue><br>"
353  if { $::eloFromRating } {
354  set eloList [sc_name elo $player]
355  } else {
356  set filter [sc_filter new $::curr_db]
357  set eloList [sc_base player_elo $::curr_db $filter $player]
358  sc_filter release $::curr_db $filter
359  }
360  set i 0
361  foreach { date elo } $eloList {
362  set d [string range $date 0 4]
363  scan [string range $date 5 6] %d m
364  set m [format "%02d" [expr {round( ($m+1) * 12 / 100 )+1 }]]
365  append pinfo "$d$m $elo "
366  incr i
367  if { $i == 3 } { append pinfo "<br>"; set i 0}
368  }
369 
370  set playerInfoName $player
371  set ::rgraph(player) $player
372  set w .playerInfoWin
373  if {! [winfo exists $w]} {
375  wm title $w "Scid: [tr ToolsPInfo]"
376  ::setTitle $w "Scid: [tr ToolsPInfo]"
377  wm minsize $w 40 5
378  pack [ttk::frame $w.b2] -side bottom -fill x
379  pack [ttk::frame $w.b] -side bottom -fill x
380  ttk::radiobutton $w.b.eloF -text $::tr(PInfoEloFile) -value 1 -variable ::eloFromRating -command {::pinfo::playerInfo $playerInfoName}
381  ttk::radiobutton $w.b.eloD -text $::tr(Database) -value 0 -variable ::eloFromRating -command {::pinfo::playerInfo $playerInfoName}
382  ttk::label $w.b.eloT -text "$::tr(Rating):"
383  ttk::button $w.b.graph -text [tr ToolsRating] \
384  -command {::tools::graphs::rating::Refresh player $playerInfoName}
385  ttk::button $w.b.edit -text $::tr(PInfoEditRatings) -command {
386  makeNameEditor
387  setNameEditorType rating
388  set editName $playerInfoName
389  set editNameSelect crosstable
390  }
391  ttk::button $w.b2.report -text [tr ToolsPlayerReport] \
392  -command {::preport::preportDlg $playerInfoName}
393  dialogbutton $w.b2.help -textvar ::tr(Help) -command {helpWindow PInfo}
394  dialogbutton $w.b2.update -textvar ::tr(Update) -command {::pinfo::playerInfo $playerInfoName}
395  dialogbutton $w.b2.close -textvar ::tr(Close) -command "focus .; destroy $w"
396  packbuttons right $w.b2.close $w.b2.update $w.b2.help
397  pack $w.b.eloT $w.b.eloF $w.b.eloD -side left -padx "5 0"
398  packbuttons left $w.b.graph $w.b.edit
399  packbuttons left $w.b2.report
400 
401  autoscrollframe $w.frame text $w.text -font font_Regular -background white \
402  -setgrid 1 -wrap none
403 
404  ttk::label $w.photo -background white
405  #pack $w.text -side top -fill both -expand yes
406  pack $w.frame -side top -fill both -expand yes
407  bind $w <Escape> "focus .; destroy $w"
408  ::htext::init $w.text
409  ::htext::updateRate $w.text 0
410  bind $w <Escape> "focus .; destroy $w"
411  bind $w <F1> {helpWindow PInfo}
413  }
414  set player [trimEngineName $player]
415  set imgdata [getphoto $player]
416  if {$imgdata != ""} {
417  image create photo photoPInfo -data $imgdata
418  $w.photo configure -image photoPInfo -anchor ne
419  place $w.photo -in $w.text -relx 1.0 -x -1 -rely 0.0 -y 1 -anchor ne
420  } else {
421  place forget $w.photo
422  }
423  $w.text configure -state normal
424  $w.text delete 1.0 end
425 
426  set pinfo [::pinfo::ReplaceIDTags $pinfo]
427 
428  # Display the player info
429  ::htext::display $w.text $pinfo
430 
431  $w.text configure -state disabled
432 }
433 
434 # Call in the idlink config file.
435  if {[catch {source [scidConfigFile resolvers]}]} {
436  ::splash::add "No configuration for link resolvers found. Creating default..."
438  if {[catch {source [scidConfigFile resolvers]}]} {
439  ::splash::add "Oops there is something wrong with the resolvers file..."
440  } else {
441  ::splash::add "Default resolvers created and loaded."
442  }
443  } else {
444  ::splash::add "ID resolvers found, extended player info available."
445  }
446 }