<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<oembed><type>rich</type><version>1.0</version><provider_name>phorkie</provider_name><provider_url>https://p.cweiske.de/</provider_url><title>rhythmbox lyrics WIP</title><author_name>Anonymous</author_name><cache_age>86400</cache_age><width>900</width><height>900</height><html>&lt;!-- embedding all files of https://p.cweiske.de/456 --&gt;
&lt;link rel="stylesheet" href="https://p.cweiske.de/css/embed.css"/&gt;
&lt;div class="phork" id="456"&gt;
    &lt;div class="phork-file"&gt;
 &lt;div class="phork-content"&gt;
  &lt;style type="text/css"&gt;/**
 * GeSHi (C) 2004 - 2007 Nigel McNie, 2007 - 2014 Benny Baumann
 * (http://qbnz.com/highlighter/ and http://geshi.org/)
 */
.diff .de1, .diff .de2 {font: normal normal 1em/1.2em monospace; margin:0; padding:0; background:none; vertical-align:top;}
.diff  {font-family:monospace;}
.diff .imp {font-weight: bold; color: red;}
.diff li, .diff .li1 {color: #DDD;}
.diff .ln {width:1px;text-align:right;margin:0;padding:0 2px;vertical-align:top;}
.diff .kw1 {color: #aaaaaa; font-style: italic;}
.diff .re0 {color: #440088;}
.diff .re1 {color: #991111;}
.diff .re2 {color: #00b000;}
.diff .re3 {color: #888822;}
.diff .re4 {color: #888822;}
.diff .re5 {color: #0011dd;}
.diff .re6 {color: #440088;}
.diff .re7 {color: #991111;}
.diff .re8 {color: #00b000;}
.diff .re9 {color: #888822;}
.diff span.xtra { display:block; }
&lt;/style&gt;&lt;div class="code"&gt;&lt;table class="diff"&gt;&lt;tbody&gt;&lt;tr class="li1"&gt;&lt;td class="ln"&gt;&lt;pre class="de1"&gt;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
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
&lt;/pre&gt;&lt;/td&gt;&lt;td class="de1"&gt;&lt;pre class="de1"&gt;diff --git a/plugins/lyrics/lyrics.py b/plugins/lyrics/lyrics.py
index 13124b3..c0f8de1 &lt;span class="nu0"&gt;100644&lt;/span&gt;
&lt;span class="re3"&gt;--- a/plugins/lyrics/lyrics.py&lt;/span&gt;
&lt;span class="re4"&gt;+++ b/plugins/lyrics/lyrics.py&lt;/span&gt;
&lt;span class="re6"&gt;@@ -32,6 +32,7 @@ import urllib.request&lt;/span&gt;
&amp;#160;import rb
&amp;#160;from gi.repository import Gtk, Gio, GObject, Peas
&amp;#160;from gi.repository import RB
&lt;span class="re8"&gt;+from gi.repository import Gst, GstPbutils&lt;/span&gt;
&amp;#160;
&amp;#160;import LyricsParse
&amp;#160;from LyricsConfigureDialog import LyricsConfigureDialog
&lt;span class="re6"&gt;@@ -132,22 +133,33 @@ def build_cache_path&lt;span class="br0"&gt;&amp;#40;&lt;/span&gt;artist, title&lt;span class="br0"&gt;&amp;#41;&lt;/span&gt;:&lt;/span&gt;
&amp;#160; &amp;#160; &amp;#160; &amp;#160; return os.path.join&lt;span class="br0"&gt;&amp;#40;&lt;/span&gt;artist_folder, title&lt;span class="br0"&gt;&amp;#91;&lt;/span&gt;:&lt;span class="nu0"&gt;128&lt;/span&gt;&lt;span class="br0"&gt;&amp;#93;&lt;/span&gt; + '.lyric'&lt;span class="br0"&gt;&amp;#41;&lt;/span&gt;
&amp;#160;
&amp;#160;class LyricGrabber&lt;span class="br0"&gt;&amp;#40;&lt;/span&gt;object&lt;span class="br0"&gt;&amp;#41;&lt;/span&gt;:
&lt;span class="re8"&gt;+ &amp;#160; &amp;#160; &amp;#160; &amp;quot;&amp;quot;&amp;quot;&lt;/span&gt;
&lt;span class="re8"&gt;+ &amp;#160; &amp;#160; &amp;#160; Fetch lyrics from several sources.&lt;/span&gt;
&lt;span class="re8"&gt;+&lt;/span&gt;
&lt;span class="re8"&gt;+ &amp;#160; &amp;#160; &amp;#160; 1. Local cache file&lt;/span&gt;
&lt;span class="re8"&gt;+ &amp;#160; &amp;#160; &amp;#160; 2. Lyric tags in file meta data&lt;/span&gt;
&lt;span class="re8"&gt;+ &amp;#160; &amp;#160; &amp;#160; 3. Online services&lt;/span&gt;
&lt;span class="re8"&gt;+ &amp;#160; &amp;#160; &amp;#160; &amp;quot;&amp;quot;&amp;quot;&lt;/span&gt;
&amp;#160; &amp;#160; &amp;#160; &amp;#160; def __init__&lt;span class="br0"&gt;&amp;#40;&lt;/span&gt;self, db, entry&lt;span class="br0"&gt;&amp;#41;&lt;/span&gt;:
&amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; self.db = db
&amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; self.entry = entry
&lt;span class="re7"&gt;- &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &lt;/span&gt;
&lt;span class="re8"&gt;+&lt;/span&gt;
&amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &lt;span class="br0"&gt;&amp;#40;&lt;/span&gt;self.artist, self.title&lt;span class="br0"&gt;&amp;#41;&lt;/span&gt; = parse_song_data&lt;span class="br0"&gt;&amp;#40;&lt;/span&gt;self.db, self.entry&lt;span class="br0"&gt;&amp;#41;&lt;/span&gt;
&amp;#160;
&amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; self.cache_path = build_cache_path&lt;span class="br0"&gt;&amp;#40;&lt;/span&gt;self.artist, self.title&lt;span class="br0"&gt;&amp;#41;&lt;/span&gt;
&amp;#160;
&amp;#160; &amp;#160; &amp;#160; &amp;#160; def verify_lyric&lt;span class="br0"&gt;&amp;#40;&lt;/span&gt;self&lt;span class="br0"&gt;&amp;#41;&lt;/span&gt;:
&amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; return os.path.exists&lt;span class="br0"&gt;&amp;#40;&lt;/span&gt;self.cache_path&lt;span class="br0"&gt;&amp;#41;&lt;/span&gt;
&lt;span class="re7"&gt;- &amp;#160; &amp;#160; &amp;#160; &amp;#160; &lt;/span&gt;
&lt;span class="re8"&gt;+&lt;/span&gt;
&amp;#160; &amp;#160; &amp;#160; &amp;#160; def search_lyrics&lt;span class="br0"&gt;&amp;#40;&lt;/span&gt;self, callback, cache_only=False&lt;span class="br0"&gt;&amp;#41;&lt;/span&gt;:
&lt;span class="re8"&gt;+ &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;quot;&amp;quot;&amp;quot;&lt;/span&gt;
&lt;span class="re8"&gt;+ &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; Fetch lyrics from cache.&lt;/span&gt;
&lt;span class="re8"&gt;+&lt;/span&gt;
&lt;span class="re8"&gt;+ &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; If no cache file exist, tag extraction is tried next.&lt;/span&gt;
&lt;span class="re8"&gt;+ &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;quot;&amp;quot;&amp;quot;&lt;/span&gt;
&amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; self.callback = callback
&lt;span class="re7"&gt;- &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &lt;/span&gt;
&lt;span class="re8"&gt;+&lt;/span&gt;
&amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; status = self.verify_lyric&lt;span class="br0"&gt;&amp;#40;&lt;/span&gt;&lt;span class="br0"&gt;&amp;#41;&lt;/span&gt;
&lt;span class="re7"&gt;- &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &lt;/span&gt;
&amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; if status:
&amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; f = open&lt;span class="br0"&gt;&amp;#40;&lt;/span&gt;self.cache_path, 'rt'&lt;span class="br0"&gt;&amp;#41;&lt;/span&gt;
&amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; text = f.read&lt;span class="br0"&gt;&amp;#40;&lt;/span&gt;&lt;span class="br0"&gt;&amp;#41;&lt;/span&gt;
&lt;span class="re6"&gt;@@ -155,20 +167,73 @@ class LyricGrabber&lt;span class="br0"&gt;&amp;#40;&lt;/span&gt;object&lt;span class="br0"&gt;&amp;#41;&lt;/span&gt;:&lt;/span&gt;
&amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; self.callback&lt;span class="br0"&gt;&amp;#40;&lt;/span&gt;text&lt;span class="br0"&gt;&amp;#41;&lt;/span&gt;
&amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; elif cache_only:
&amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; self.callback&lt;span class="br0"&gt;&amp;#40;&lt;/span&gt;_&lt;span class="br0"&gt;&amp;#40;&lt;/span&gt;&amp;quot;No lyrics found&amp;quot;&lt;span class="br0"&gt;&amp;#41;&lt;/span&gt;&lt;span class="br0"&gt;&amp;#41;&lt;/span&gt;
&lt;span class="re7"&gt;- &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; elif self.artist == &amp;quot;&amp;quot; and self.title == &amp;quot;&amp;quot;:&lt;/span&gt;
&lt;span class="re7"&gt;- &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; self.callback&lt;span class="br0"&gt;&amp;#40;&lt;/span&gt;_&lt;span class="br0"&gt;&amp;#40;&lt;/span&gt;&amp;quot;No lyrics found&amp;quot;&lt;span class="br0"&gt;&amp;#41;&lt;/span&gt;&lt;span class="br0"&gt;&amp;#41;&lt;/span&gt;&lt;/span&gt;
&amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; else:
&lt;span class="re7"&gt;- &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; def lyric_callback &lt;span class="br0"&gt;&amp;#40;&lt;/span&gt;text&lt;span class="br0"&gt;&amp;#41;&lt;/span&gt;:&lt;/span&gt;
&lt;span class="re7"&gt;- &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; if text is not None:&lt;/span&gt;
&lt;span class="re7"&gt;- &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; f = open&lt;span class="br0"&gt;&amp;#40;&lt;/span&gt;self.cache_path, 'wt'&lt;span class="br0"&gt;&amp;#41;&lt;/span&gt;&lt;/span&gt;
&lt;span class="re7"&gt;- &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; f.write &lt;span class="br0"&gt;&amp;#40;&lt;/span&gt;text&lt;span class="br0"&gt;&amp;#41;&lt;/span&gt;&lt;/span&gt;
&lt;span class="re7"&gt;- &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; f.close &lt;span class="br0"&gt;&amp;#40;&lt;/span&gt;&lt;span class="br0"&gt;&amp;#41;&lt;/span&gt;&lt;/span&gt;
&lt;span class="re7"&gt;- &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; self.callback&lt;span class="br0"&gt;&amp;#40;&lt;/span&gt;text&lt;span class="br0"&gt;&amp;#41;&lt;/span&gt;&lt;/span&gt;
&lt;span class="re7"&gt;- &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; else:&lt;/span&gt;
&lt;span class="re7"&gt;- &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; self.callback&lt;span class="br0"&gt;&amp;#40;&lt;/span&gt;_&lt;span class="br0"&gt;&amp;#40;&lt;/span&gt;&amp;quot;No lyrics found&amp;quot;&lt;span class="br0"&gt;&amp;#41;&lt;/span&gt;&lt;span class="br0"&gt;&amp;#41;&lt;/span&gt;&lt;/span&gt;
&lt;span class="re8"&gt;+ &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; self.search_tags&lt;span class="br0"&gt;&amp;#40;&lt;/span&gt;&lt;span class="br0"&gt;&amp;#41;&lt;/span&gt;&lt;/span&gt;
&lt;span class="re8"&gt;+&lt;/span&gt;
&lt;span class="re8"&gt;+ &amp;#160; &amp;#160; &amp;#160; def search_tags&lt;span class="br0"&gt;&amp;#40;&lt;/span&gt;self&lt;span class="br0"&gt;&amp;#41;&lt;/span&gt;:&lt;/span&gt;
&lt;span class="re8"&gt;+ &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;quot;&amp;quot;&amp;quot;&lt;/span&gt;
&lt;span class="re8"&gt;+ &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; Initiate fetching meta tags.&lt;/span&gt;
&lt;span class="re8"&gt;+&lt;/span&gt;
&lt;span class="re8"&gt;+ &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; Result will be handled in search_tags_result&lt;/span&gt;
&lt;span class="re8"&gt;+ &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;quot;&amp;quot;&amp;quot;&lt;/span&gt;
&lt;span class="re8"&gt;+ &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; location = self.entry.get_playback_uri&lt;span class="br0"&gt;&amp;#40;&lt;/span&gt;&lt;span class="br0"&gt;&amp;#41;&lt;/span&gt;&lt;/span&gt;
&lt;span class="re8"&gt;+ &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; self.discoverer = GstPbutils.Discoverer&lt;span class="br0"&gt;&amp;#40;&lt;/span&gt;timeout=Gst.SECOND*3&lt;span class="br0"&gt;&amp;#41;&lt;/span&gt;&lt;/span&gt;
&lt;span class="re8"&gt;+ &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; self.discoverer.connect&lt;span class="br0"&gt;&amp;#40;&lt;/span&gt;'discovered', self.search_tags_result&lt;span class="br0"&gt;&amp;#41;&lt;/span&gt;&lt;/span&gt;
&lt;span class="re8"&gt;+ &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; self.discoverer.start&lt;span class="br0"&gt;&amp;#40;&lt;/span&gt;&lt;span class="br0"&gt;&amp;#41;&lt;/span&gt;&lt;/span&gt;
&lt;span class="re8"&gt;+ &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; self.discoverer.discover_uri_async&lt;span class="br0"&gt;&amp;#40;&lt;/span&gt;location&lt;span class="br0"&gt;&amp;#41;&lt;/span&gt;&lt;/span&gt;
&lt;span class="re8"&gt;+&lt;/span&gt;
&lt;span class="re8"&gt;+ &amp;#160; &amp;#160; &amp;#160; def search_tags_result&lt;span class="br0"&gt;&amp;#40;&lt;/span&gt;self, discoverer, info, error&lt;span class="br0"&gt;&amp;#41;&lt;/span&gt;:&lt;/span&gt;
&lt;span class="re8"&gt;+ &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;quot;&amp;quot;&amp;quot;&lt;/span&gt;
&lt;span class="re8"&gt;+ &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; Extract lyrics from the file meta data &lt;span class="br0"&gt;&amp;#40;&lt;/span&gt;tags&lt;span class="br0"&gt;&amp;#41;&lt;/span&gt;.&lt;/span&gt;
&lt;span class="re8"&gt;+&lt;/span&gt;
&lt;span class="re8"&gt;+ &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; If no lyrics tags are found, online services are tried next.&lt;/span&gt;
&lt;span class="re8"&gt;+&lt;/span&gt;
&lt;span class="re8"&gt;+ &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; Supported file formats and lyrics tags:&lt;/span&gt;
&lt;span class="re8"&gt;+ &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; - ogg/vorbis files with &amp;quot;LYRICS&amp;quot; and &amp;quot;SYNCLYRICS&amp;quot; tag&lt;/span&gt;
&lt;span class="re8"&gt;+ &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;quot;&amp;quot;&amp;quot;&lt;/span&gt;
&lt;span class="re8"&gt;+ &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; tags = info.get_tags&lt;span class="br0"&gt;&amp;#40;&lt;/span&gt;&lt;span class="br0"&gt;&amp;#41;&lt;/span&gt;&lt;/span&gt;
&lt;span class="re8"&gt;+ &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; if tags is None:&lt;/span&gt;
&lt;span class="re8"&gt;+ &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; self.search_online&lt;span class="br0"&gt;&amp;#40;&lt;/span&gt;&lt;span class="br0"&gt;&amp;#41;&lt;/span&gt;&lt;/span&gt;
&lt;span class="re8"&gt;+ &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; return&lt;/span&gt;
&amp;#160;
&lt;span class="re8"&gt;+ &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; for i in range&lt;span class="br0"&gt;&amp;#40;&lt;/span&gt;tags.get_tag_size&lt;span class="br0"&gt;&amp;#40;&lt;/span&gt;&amp;quot;extended-comment&amp;quot;&lt;span class="br0"&gt;&amp;#41;&lt;/span&gt;&lt;span class="br0"&gt;&amp;#41;&lt;/span&gt;:&lt;/span&gt;
&lt;span class="re8"&gt;+ &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &lt;span class="br0"&gt;&amp;#40;&lt;/span&gt;exists, value&lt;span class="br0"&gt;&amp;#41;&lt;/span&gt; = tags.get_string_index&lt;span class="br0"&gt;&amp;#40;&lt;/span&gt;&amp;quot;extended-comment&amp;quot;, i&lt;span class="br0"&gt;&amp;#41;&lt;/span&gt;&lt;/span&gt;
&lt;span class="re8"&gt;+ &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; #ogg/vorbis unsynchronized lyrics&lt;/span&gt;
&lt;span class="re8"&gt;+ &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; if exists and value.startswith&lt;span class="br0"&gt;&amp;#40;&lt;/span&gt;&amp;quot;LYRICS&amp;quot;&lt;span class="br0"&gt;&amp;#41;&lt;/span&gt;:&lt;/span&gt;
&lt;span class="re8"&gt;+ &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; text = value.replace&lt;span class="br0"&gt;&amp;#40;&lt;/span&gt;&amp;quot;LYRICS=&amp;quot;, &amp;quot;&amp;quot;&lt;span class="br0"&gt;&amp;#41;&lt;/span&gt;&lt;/span&gt;
&lt;span class="re8"&gt;+ &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; self.lyrics_found&lt;span class="br0"&gt;&amp;#40;&lt;/span&gt;text&lt;span class="br0"&gt;&amp;#41;&lt;/span&gt;&lt;/span&gt;
&lt;span class="re8"&gt;+ &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; return&lt;/span&gt;
&lt;span class="re8"&gt;+ &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; #ogg/vorbis synchronized lyrics&lt;/span&gt;
&lt;span class="re8"&gt;+ &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; elif exists and value.startswith&lt;span class="br0"&gt;&amp;#40;&lt;/span&gt;&amp;quot;SYNCLYRICS&amp;quot;&lt;span class="br0"&gt;&amp;#41;&lt;/span&gt;:&lt;/span&gt;
&lt;span class="re8"&gt;+ &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; text = value.replace&lt;span class="br0"&gt;&amp;#40;&lt;/span&gt;&amp;quot;SYNCLYRICS=&amp;quot;, &amp;quot;&amp;quot;&lt;span class="br0"&gt;&amp;#41;&lt;/span&gt;&lt;/span&gt;
&lt;span class="re8"&gt;+ &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; self.lyrics_found&lt;span class="br0"&gt;&amp;#40;&lt;/span&gt;text&lt;span class="br0"&gt;&amp;#41;&lt;/span&gt;&lt;/span&gt;
&lt;span class="re8"&gt;+ &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; return&lt;/span&gt;
&lt;span class="re8"&gt;+&lt;/span&gt;
&lt;span class="re8"&gt;+ &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; self.search_online&lt;span class="br0"&gt;&amp;#40;&lt;/span&gt;&lt;span class="br0"&gt;&amp;#41;&lt;/span&gt;&lt;/span&gt;
&lt;span class="re8"&gt;+&lt;/span&gt;
&lt;span class="re8"&gt;+ &amp;#160; &amp;#160; &amp;#160; def search_online&lt;span class="br0"&gt;&amp;#40;&lt;/span&gt;self&lt;span class="br0"&gt;&amp;#41;&lt;/span&gt;:&lt;/span&gt;
&lt;span class="re8"&gt;+ &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;quot;&amp;quot;&amp;quot;Initiate searching the online lyrics services&amp;quot;&amp;quot;&amp;quot;&lt;/span&gt;
&lt;span class="re8"&gt;+ &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; if self.artist == &amp;quot;&amp;quot; and self.title == &amp;quot;&amp;quot;:&lt;/span&gt;
&lt;span class="re8"&gt;+ &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; self.callback&lt;span class="br0"&gt;&amp;#40;&lt;/span&gt;_&lt;span class="br0"&gt;&amp;#40;&lt;/span&gt;&amp;quot;No lyrics found&amp;quot;&lt;span class="br0"&gt;&amp;#41;&lt;/span&gt;&lt;span class="br0"&gt;&amp;#41;&lt;/span&gt;&lt;/span&gt;
&lt;span class="re8"&gt;+ &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; else:&lt;/span&gt;
&amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; parser = LyricsParse.Parser&lt;span class="br0"&gt;&amp;#40;&lt;/span&gt;self.artist, self.title&lt;span class="br0"&gt;&amp;#41;&lt;/span&gt;
&lt;span class="re7"&gt;- &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; parser.get_lyrics&lt;span class="br0"&gt;&amp;#40;&lt;/span&gt;lyric_callback&lt;span class="br0"&gt;&amp;#41;&lt;/span&gt;&lt;/span&gt;
&lt;span class="re8"&gt;+ &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; parser.get_lyrics&lt;span class="br0"&gt;&amp;#40;&lt;/span&gt;self.search_online_result&lt;span class="br0"&gt;&amp;#41;&lt;/span&gt;&lt;/span&gt;
&lt;span class="re8"&gt;+&lt;/span&gt;
&lt;span class="re8"&gt;+ &amp;#160; &amp;#160; &amp;#160; def search_online_result&lt;span class="br0"&gt;&amp;#40;&lt;/span&gt;self, text&lt;span class="br0"&gt;&amp;#41;&lt;/span&gt;:&lt;/span&gt;
&lt;span class="re8"&gt;+ &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;quot;&amp;quot;&amp;quot;Handle the result of searching online lyrics services&amp;quot;&amp;quot;&amp;quot;&lt;/span&gt;
&lt;span class="re8"&gt;+ &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; if text is not None:&lt;/span&gt;
&lt;span class="re8"&gt;+ &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; self.lyrics_found&lt;span class="br0"&gt;&amp;#40;&lt;/span&gt;text&lt;span class="br0"&gt;&amp;#41;&lt;/span&gt;&lt;/span&gt;
&lt;span class="re8"&gt;+ &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; else:&lt;/span&gt;
&lt;span class="re8"&gt;+ &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; self.callback&lt;span class="br0"&gt;&amp;#40;&lt;/span&gt;_&lt;span class="br0"&gt;&amp;#40;&lt;/span&gt;&amp;quot;No lyrics found&amp;quot;&lt;span class="br0"&gt;&amp;#41;&lt;/span&gt;&lt;span class="br0"&gt;&amp;#41;&lt;/span&gt;&lt;/span&gt;
&lt;span class="re8"&gt;+&lt;/span&gt;
&lt;span class="re8"&gt;+&lt;/span&gt;
&lt;span class="re8"&gt;+ &amp;#160; &amp;#160; &amp;#160; def lyrics_found&lt;span class="br0"&gt;&amp;#40;&lt;/span&gt;self, text&lt;span class="br0"&gt;&amp;#41;&lt;/span&gt;:&lt;/span&gt;
&lt;span class="re8"&gt;+ &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; f = open&lt;span class="br0"&gt;&amp;#40;&lt;/span&gt;self.cache_path, 'wt'&lt;span class="br0"&gt;&amp;#41;&lt;/span&gt;&lt;/span&gt;
&lt;span class="re8"&gt;+ &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; f.write&lt;span class="br0"&gt;&amp;#40;&lt;/span&gt;text&lt;span class="br0"&gt;&amp;#41;&lt;/span&gt;&lt;/span&gt;
&lt;span class="re8"&gt;+ &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; f.close&lt;span class="br0"&gt;&amp;#40;&lt;/span&gt;&lt;span class="br0"&gt;&amp;#41;&lt;/span&gt;&lt;/span&gt;
&lt;span class="re8"&gt;+&lt;/span&gt;
&lt;span class="re8"&gt;+ &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; self.callback&lt;span class="br0"&gt;&amp;#40;&lt;/span&gt;text&lt;span class="br0"&gt;&amp;#41;&lt;/span&gt;&lt;/span&gt;
&lt;span class="re8"&gt;+&lt;/span&gt;
&amp;#160;
&amp;#160;class LyricPane&lt;span class="br0"&gt;&amp;#40;&lt;/span&gt;object&lt;span class="br0"&gt;&amp;#41;&lt;/span&gt;:
&amp;#160; &amp;#160; &amp;#160; &amp;#160; def __init__&lt;span class="br0"&gt;&amp;#40;&lt;/span&gt;self, db, song_info&lt;span class="br0"&gt;&amp;#41;&lt;/span&gt;:
&amp;#160;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/div&gt;
 &lt;/div&gt;
 &lt;div class="phork-meta"&gt;
  &lt;a href="https://p.cweiske.de/456/rev-raw/9e2bf8c2e22f3b70c888a0f519db6056d59c544a/0-patch.diff" style="float: right"&gt;view raw source&lt;/a&gt;
  &lt;a href="https://p.cweiske.de/456#0-patch.diff"&gt;0-patch.diff&lt;/a&gt;
 &lt;/div&gt;
&lt;/div&gt;
    &lt;div class="phork-file"&gt;
 &lt;div class="phork-content"&gt;
  &lt;style type="text/css"&gt;/**
 * GeSHi (C) 2004 - 2007 Nigel McNie, 2007 - 2014 Benny Baumann
 * (http://qbnz.com/highlighter/ and http://geshi.org/)
 */
.bash .de1, .bash .de2 {font: normal normal 1em/1.2em monospace; margin:0; padding:0; background:none; vertical-align:top;}
.bash  {font-family:monospace;}
.bash .imp {font-weight: bold; color: red;}
.bash li, .bash .li1 {color: #DDD;}
.bash .ln {width:1px;text-align:right;margin:0;padding:0 2px;vertical-align:top;}
.bash .kw1 {color: #000000; font-weight: bold;}
.bash .kw2 {color: #c20cb9; font-weight: bold;}
.bash .kw3 {color: #7a0874; font-weight: bold;}
.bash .co0 {color: #666666; font-style: italic;}
.bash .co1 {color: #800000;}
.bash .co2 {color: #cc0000; font-style: italic;}
.bash .co3 {color: #000000; font-weight: bold;}
.bash .co4 {color: #666666;}
.bash .es1 {color: #000099; font-weight: bold;}
.bash .es2 {color: #007800;}
.bash .es3 {color: #007800;}
.bash .es4 {color: #007800;}
.bash .es5 {color: #780078;}
.bash .es_h {color: #000099; font-weight: bold;}
.bash .br0 {color: #7a0874; font-weight: bold;}
.bash .sy0 {color: #000000; font-weight: bold;}
.bash .st0 {color: #ff0000;}
.bash .st_h {color: #ff0000;}
.bash .nu0 {color: #000000;}
.bash .re0 {color: #007800;}
.bash .re1 {color: #007800;}
.bash .re2 {color: #007800;}
.bash .re4 {color: #007800;}
.bash .re5 {color: #660033;}
.bash span.xtra { display:block; }
&lt;/style&gt;&lt;div class="code"&gt;&lt;table class="bash"&gt;&lt;tbody&gt;&lt;tr class="li1"&gt;&lt;td class="ln"&gt;&lt;pre class="de1"&gt;1
&lt;/pre&gt;&lt;/td&gt;&lt;td class="de1"&gt;&lt;pre class="de1"&gt;&amp;#160;.&lt;span class="sy0"&gt;/&lt;/span&gt;shell&lt;span class="sy0"&gt;/&lt;/span&gt;rhythmbox &lt;span class="re5"&gt;--debug-match&lt;/span&gt; lyrics filename.ogg&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/div&gt;
 &lt;/div&gt;
 &lt;div class="phork-meta"&gt;
  &lt;a href="https://p.cweiske.de/456/rev-raw/9e2bf8c2e22f3b70c888a0f519db6056d59c544a/1-command.sh" style="float: right"&gt;view raw source&lt;/a&gt;
  &lt;a href="https://p.cweiske.de/456#1-command.sh"&gt;1-command.sh&lt;/a&gt;
 &lt;/div&gt;
&lt;/div&gt;
    &lt;div class="phork-file"&gt;
 &lt;div class="phork-content"&gt;
  &lt;div class="code"&gt;&lt;pre class="txt"&gt;(14:13:55) [0x1c7bb20] [LyricGrabber.search_lyrics] /home/cweiske/php/rhythmbox/rhythmbox/data/../plugins/lyrics/lyrics.py:299: discovering file:///home/cweiske/Musik/neu/Britney%20Spears/Femme%20Fatale/Britney%20Spears%20-%20Femme%20Fatale%20-%2003%20-%20Inside%20Out.ogg&#13;
(14:13:55) [0x1c7bb20] [LyricGrabber.search_lyrics] /home/cweiske/php/rhythmbox/rhythmbox/data/../plugins/lyrics/lyrics.py:303: abc&#13;
(14:13:55) [0x1c7bb20] [fetags] /home/cweiske/php/rhythmbox/rhythmbox/data/../plugins/lyrics/lyrics.py:317: tag: title&#13;
(14:13:55) [0x1c7bb20] [fetags] /home/cweiske/php/rhythmbox/rhythmbox/data/../plugins/lyrics/lyrics.py:317: tag: artist&#13;
(14:13:55) [0x1c7bb20] [fetags] /home/cweiske/php/rhythmbox/rhythmbox/data/../plugins/lyrics/lyrics.py:317: tag: album&#13;
(14:13:55) [0x1c7bb20] [fetags] /home/cweiske/php/rhythmbox/rhythmbox/data/../plugins/lyrics/lyrics.py:317: tag: datetime&#13;
(14:13:55) [0x1c7bb20] [fetags] /home/cweiske/php/rhythmbox/rhythmbox/data/../plugins/lyrics/lyrics.py:317: tag: track-number&#13;
(14:13:55) [0x1c7bb20] [fetags] /home/cweiske/php/rhythmbox/rhythmbox/data/../plugins/lyrics/lyrics.py:317: tag: track-count&#13;
(14:13:55) [0x1c7bb20] [fetags] /home/cweiske/php/rhythmbox/rhythmbox/data/../plugins/lyrics/lyrics.py:317: tag: genre&#13;
(14:13:55) [0x1c7bb20] [fetags] /home/cweiske/php/rhythmbox/rhythmbox/data/../plugins/lyrics/lyrics.py:317: tag: image&#13;
(14:13:55) [0x1c7bb20] [fetags] /home/cweiske/php/rhythmbox/rhythmbox/data/../plugins/lyrics/lyrics.py:317: tag: extended-comment&#13;
(14:13:55) [0x1c7bb20] [fetags] /home/cweiske/php/rhythmbox/rhythmbox/data/../plugins/lyrics/lyrics.py:317: tag: encoder&#13;
(14:13:55) [0x1c7bb20] [fetags] /home/cweiske/php/rhythmbox/rhythmbox/data/../plugins/lyrics/lyrics.py:317: tag: encoder-version&#13;
(14:13:55) [0x1c7bb20] [fetags] /home/cweiske/php/rhythmbox/rhythmbox/data/../plugins/lyrics/lyrics.py:317: tag: audio-codec&#13;
(14:13:55) [0x1c7bb20] [fetags] /home/cweiske/php/rhythmbox/rhythmbox/data/../plugins/lyrics/lyrics.py:317: tag: nominal-bitrate&#13;
(14:13:55) [0x1c7bb20] [fetags] /home/cweiske/php/rhythmbox/rhythmbox/data/../plugins/lyrics/lyrics.py:317: tag: bitrate&#13;
(14:13:55) [0x1c7bb20] [fetags] /home/cweiske/php/rhythmbox/rhythmbox/data/../plugins/lyrics/lyrics.py:317: tag: container-format&#13;
(14:13:55) [0x1c7bb20] [LyricGrabber.search_lyrics] /home/cweiske/php/rhythmbox/rhythmbox/data/../plugins/lyrics/lyrics.py:311: found lyrics tag:&#13;
LYRICS=Said you're gonna be here in a minute&#13;
Sitting in the mirror getting pretty&#13;
Gotta look my best if we're gonna break up&#13;
Gotta look my best if we're gonna break up&#13;
&lt;/pre&gt;&lt;/div&gt;

 &lt;/div&gt;
 &lt;div class="phork-meta"&gt;
  &lt;a href="https://p.cweiske.de/456/rev-raw/9e2bf8c2e22f3b70c888a0f519db6056d59c544a/2-output.txt" style="float: right"&gt;view raw source&lt;/a&gt;
  &lt;a href="https://p.cweiske.de/456#2-output.txt"&gt;2-output.txt&lt;/a&gt;
 &lt;/div&gt;
&lt;/div&gt;
    &lt;div class="phork-file"&gt;
 &lt;div class="phork-content"&gt;
  
&lt;div class="document"&gt;


&lt;pre class="literal-block"&gt;
$ gst-discoverer-1.0 file.ogg
&lt;/pre&gt;
&lt;p&gt;&lt;a class="reference external" href="https://lazka.github.io/pgi-docs/GstPbutils-1.0/classes/DiscovererInfo.html#GstPbutils.DiscovererInfo"&gt;https://lazka.github.io/pgi-docs/GstPbutils-1.0/classes/DiscovererInfo.html#GstPbutils.DiscovererInfo&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a class="reference external" href="https://bugzilla.gnome.org/show_bug.cgi?id=463978"&gt;https://bugzilla.gnome.org/show_bug.cgi?id=463978&lt;/a&gt;&lt;/p&gt;
&lt;/div&gt;

 &lt;/div&gt;
 &lt;div class="phork-meta"&gt;
  &lt;a href="https://p.cweiske.de/456/rev-raw/9e2bf8c2e22f3b70c888a0f519db6056d59c544a/4-other.rst" style="float: right"&gt;view raw source&lt;/a&gt;
  &lt;a href="https://p.cweiske.de/456#4-other.rst"&gt;4-other.rst&lt;/a&gt;
 &lt;/div&gt;
&lt;/div&gt;
    &lt;div class="phork-file"&gt;
 &lt;div class="phork-content"&gt;
  &lt;style type="text/css"&gt;&lt;/style&gt;&lt;div class="code"&gt;&lt;table class="py"&gt;&lt;tbody&gt;&lt;tr class="li1"&gt;&lt;td class="ln"&gt;&lt;pre class="de1"&gt;1
2
3
4
5
6
7
&lt;/pre&gt;&lt;/td&gt;&lt;td class="de1"&gt;&lt;pre class="de1"&gt;&amp;#160; &amp;#160; &amp;#160; &amp;#160; for i in range(tags.get_tag_size(&amp;quot;extended-comment&amp;quot;)):&#13;
&amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; (exists, read) = tags.get_string_index(&amp;quot;extended-comment&amp;quot;, i)&#13;
&amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; if exists and read.startswith(&amp;quot;DISCSUBTITLE&amp;quot;):&#13;
&amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; discname = read.replace(&amp;quot;DISCSUBTITLE=&amp;quot;, &amp;quot;&amp;quot;)&#13;
&amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; break&#13;
&amp;#160; &amp;#160; &amp;#160; &amp;#160; return discname&#13;
&amp;#160;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/div&gt;
 &lt;/div&gt;
 &lt;div class="phork-meta"&gt;
  &lt;a href="https://p.cweiske.de/456/rev-raw/9e2bf8c2e22f3b70c888a0f519db6056d59c544a/5-copiedcode.py" style="float: right"&gt;view raw source&lt;/a&gt;
  &lt;a href="https://p.cweiske.de/456#5-copiedcode.py"&gt;5-copiedcode.py&lt;/a&gt;
 &lt;/div&gt;
&lt;/div&gt;
    &lt;div class="phork-file"&gt;
 &lt;div class="phork-content"&gt;
  &lt;style type="text/css"&gt;&lt;/style&gt;&lt;div class="code"&gt;&lt;table class="py"&gt;&lt;tbody&gt;&lt;tr class="li1"&gt;&lt;td class="ln"&gt;&lt;pre class="de1"&gt;1
2
3
&lt;/pre&gt;&lt;/td&gt;&lt;td class="de1"&gt;&lt;pre class="de1"&gt;&amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160;def fetags (list, tag):&#13;
&amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160;print(&amp;quot;tag: %s&amp;quot; % tag)&#13;
&amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160;tags.foreach(fetags)&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/div&gt;
 &lt;/div&gt;
 &lt;div class="phork-meta"&gt;
  &lt;a href="https://p.cweiske.de/456/rev-raw/9e2bf8c2e22f3b70c888a0f519db6056d59c544a/6-printalltags.py" style="float: right"&gt;view raw source&lt;/a&gt;
  &lt;a href="https://p.cweiske.de/456#6-printalltags.py"&gt;6-printalltags.py&lt;/a&gt;
 &lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
</html></oembed>
