Mercurial > libervia-backend
annotate frontends/src/tools/strings.py @ 1422:be1fccf4854d
tmp (wokkel): licenses fixes:
the licenses headers were wrong, it was fixed: original work from Adrien Cossa is directly under AGPL v3 (with his agreement), work derivated from Wokkel is sublicensed to AGPL v3 as allowed by the original license, to stay consistent with the rest of the code base.
Theses files (and only these ones) can be relicensed again to fill Wokkel license if Ralph plan to merge them upstream...
author | Goffi <goffi@goffi.org> |
---|---|
date | Thu, 23 Apr 2015 10:57:40 +0200 |
parents | 069ad98b360d |
children | d17772b0fe22 |
rev | line source |
---|---|
690
d8e7a58eaa00
misc: added a file for frontend's string operations:
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
1 #!/usr/bin/python |
d8e7a58eaa00
misc: added a file for frontend's string operations:
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
2 # -*- coding: utf-8 -*- |
d8e7a58eaa00
misc: added a file for frontend's string operations:
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
3 |
d8e7a58eaa00
misc: added a file for frontend's string operations:
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
4 # SAT helpers methods for plugins |
1396 | 5 # Copyright (C) 2013, 2014, 2015 Adrien Cossa (souliane@mailoo.org) |
690
d8e7a58eaa00
misc: added a file for frontend's string operations:
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
6 |
d8e7a58eaa00
misc: added a file for frontend's string operations:
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
7 # This program is free software: you can redistribute it and/or modify |
d8e7a58eaa00
misc: added a file for frontend's string operations:
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
8 # it under the terms of the GNU Affero General Public License as published by |
d8e7a58eaa00
misc: added a file for frontend's string operations:
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
9 # the Free Software Foundation, either version 3 of the License, or |
d8e7a58eaa00
misc: added a file for frontend's string operations:
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
10 # (at your option) any later version. |
d8e7a58eaa00
misc: added a file for frontend's string operations:
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
11 |
d8e7a58eaa00
misc: added a file for frontend's string operations:
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
12 # This program is distributed in the hope that it will be useful, |
d8e7a58eaa00
misc: added a file for frontend's string operations:
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
13 # but WITHOUT ANY WARRANTY; without even the implied warranty of |
d8e7a58eaa00
misc: added a file for frontend's string operations:
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
14 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
d8e7a58eaa00
misc: added a file for frontend's string operations:
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
15 # GNU Affero General Public License for more details. |
d8e7a58eaa00
misc: added a file for frontend's string operations:
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
16 |
d8e7a58eaa00
misc: added a file for frontend's string operations:
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
17 # You should have received a copy of the GNU Affero General Public License |
d8e7a58eaa00
misc: added a file for frontend's string operations:
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
18 # along with this program. If not, see <http://www.gnu.org/licenses/>. |
d8e7a58eaa00
misc: added a file for frontend's string operations:
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
19 |
769
8b6137f7b4e1
tools: addURLToText moved from libervia to sat_frontends/tools/strings
souliane <souliane@mailoo.org>
parents:
719
diff
changeset
|
20 import re |
8b6137f7b4e1
tools: addURLToText moved from libervia to sat_frontends/tools/strings
souliane <souliane@mailoo.org>
parents:
719
diff
changeset
|
21 |
690
d8e7a58eaa00
misc: added a file for frontend's string operations:
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
22 |
d8e7a58eaa00
misc: added a file for frontend's string operations:
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
23 def getURLParams(url): |
d8e7a58eaa00
misc: added a file for frontend's string operations:
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
24 """This comes from pyjamas.Location.makeUrlDict with a small change |
d8e7a58eaa00
misc: added a file for frontend's string operations:
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
25 to also parse full URLs, and parameters with no value specified |
d8e7a58eaa00
misc: added a file for frontend's string operations:
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
26 (in that case the default value "" is used). |
d8e7a58eaa00
misc: added a file for frontend's string operations:
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
27 @param url: any URL with or without parameters |
d8e7a58eaa00
misc: added a file for frontend's string operations:
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
28 @return: a dictionary of the parameters, if any was given, or {} |
d8e7a58eaa00
misc: added a file for frontend's string operations:
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
29 """ |
d8e7a58eaa00
misc: added a file for frontend's string operations:
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
30 dict_ = {} |
d8e7a58eaa00
misc: added a file for frontend's string operations:
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
31 if "/" in url: |
d8e7a58eaa00
misc: added a file for frontend's string operations:
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
32 # keep the part after the last "/" |
d8e7a58eaa00
misc: added a file for frontend's string operations:
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
33 url = url[url.rindex("/") + 1:] |
d8e7a58eaa00
misc: added a file for frontend's string operations:
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
34 if url.startswith("?"): |
d8e7a58eaa00
misc: added a file for frontend's string operations:
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
35 # remove the first "?" |
d8e7a58eaa00
misc: added a file for frontend's string operations:
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
36 url = url[1:] |
d8e7a58eaa00
misc: added a file for frontend's string operations:
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
37 pairs = url.split("&") |
d8e7a58eaa00
misc: added a file for frontend's string operations:
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
38 for pair in pairs: |
d8e7a58eaa00
misc: added a file for frontend's string operations:
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
39 if len(pair) < 3: |
d8e7a58eaa00
misc: added a file for frontend's string operations:
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
40 continue |
d8e7a58eaa00
misc: added a file for frontend's string operations:
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
41 kv = pair.split("=", 1) |
d8e7a58eaa00
misc: added a file for frontend's string operations:
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
42 dict_[kv[0]] = kv[1] if len(kv) > 1 else "" |
d8e7a58eaa00
misc: added a file for frontend's string operations:
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
43 return dict_ |
d8e7a58eaa00
misc: added a file for frontend's string operations:
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
44 |
769
8b6137f7b4e1
tools: addURLToText moved from libervia to sat_frontends/tools/strings
souliane <souliane@mailoo.org>
parents:
719
diff
changeset
|
45 |
8b6137f7b4e1
tools: addURLToText moved from libervia to sat_frontends/tools/strings
souliane <souliane@mailoo.org>
parents:
719
diff
changeset
|
46 def addURLToText(string): |
8b6137f7b4e1
tools: addURLToText moved from libervia to sat_frontends/tools/strings
souliane <souliane@mailoo.org>
parents:
719
diff
changeset
|
47 """Check a text for what looks like an URL and make it clickable. Regexp |
8b6137f7b4e1
tools: addURLToText moved from libervia to sat_frontends/tools/strings
souliane <souliane@mailoo.org>
parents:
719
diff
changeset
|
48 from http://daringfireball.net/2010/07/improved_regex_for_matching_urls""" |
8b6137f7b4e1
tools: addURLToText moved from libervia to sat_frontends/tools/strings
souliane <souliane@mailoo.org>
parents:
719
diff
changeset
|
49 |
8b6137f7b4e1
tools: addURLToText moved from libervia to sat_frontends/tools/strings
souliane <souliane@mailoo.org>
parents:
719
diff
changeset
|
50 def repl(match): |
8b6137f7b4e1
tools: addURLToText moved from libervia to sat_frontends/tools/strings
souliane <souliane@mailoo.org>
parents:
719
diff
changeset
|
51 url = match.group(0) |
8b6137f7b4e1
tools: addURLToText moved from libervia to sat_frontends/tools/strings
souliane <souliane@mailoo.org>
parents:
719
diff
changeset
|
52 if not re.match(r"""[a-z]{3,}://|mailto:|xmpp:""", url): |
8b6137f7b4e1
tools: addURLToText moved from libervia to sat_frontends/tools/strings
souliane <souliane@mailoo.org>
parents:
719
diff
changeset
|
53 url = "http://" + url |
8b6137f7b4e1
tools: addURLToText moved from libervia to sat_frontends/tools/strings
souliane <souliane@mailoo.org>
parents:
719
diff
changeset
|
54 return '<a href="%s" target="_blank" class="url">%s</a>' % (url, match.group(0)) |
8b6137f7b4e1
tools: addURLToText moved from libervia to sat_frontends/tools/strings
souliane <souliane@mailoo.org>
parents:
719
diff
changeset
|
55 pattern = r"""(?i)\b((?:[a-z]{3,}://|(www|ftp)\d{0,3}[.]|[a-z0-9.\-]+[.][a-z]{2,4}/|mailto:|xmpp:)(?:[^\s()<>]+|\(([^\s()<>]+|(\([^\s()<>]+\)))*\))+(?:\(([^\s()<>]+|(\([^\s()<>]+\)))*\)|[^\s`!()\[\]{};:'".,<>?]))""" |
8b6137f7b4e1
tools: addURLToText moved from libervia to sat_frontends/tools/strings
souliane <souliane@mailoo.org>
parents:
719
diff
changeset
|
56 return re.sub(pattern, repl, string) |
842
429c6a0ef73d
frontends (tools): addURLToImage makes an image clickable
souliane <souliane@mailoo.org>
parents:
811
diff
changeset
|
57 |
429c6a0ef73d
frontends (tools): addURLToImage makes an image clickable
souliane <souliane@mailoo.org>
parents:
811
diff
changeset
|
58 |
429c6a0ef73d
frontends (tools): addURLToImage makes an image clickable
souliane <souliane@mailoo.org>
parents:
811
diff
changeset
|
59 def addURLToImage(string): |
429c6a0ef73d
frontends (tools): addURLToImage makes an image clickable
souliane <souliane@mailoo.org>
parents:
811
diff
changeset
|
60 """Check a XHTML text for what looks like an imageURL and make it clickable""" |
429c6a0ef73d
frontends (tools): addURLToImage makes an image clickable
souliane <souliane@mailoo.org>
parents:
811
diff
changeset
|
61 def repl(match): |
429c6a0ef73d
frontends (tools): addURLToImage makes an image clickable
souliane <souliane@mailoo.org>
parents:
811
diff
changeset
|
62 url = match.group(1) |
429c6a0ef73d
frontends (tools): addURLToImage makes an image clickable
souliane <souliane@mailoo.org>
parents:
811
diff
changeset
|
63 return '<a href="%s" target="_blank">%s</a>' % (url, match.group(0)) |
429c6a0ef73d
frontends (tools): addURLToImage makes an image clickable
souliane <souliane@mailoo.org>
parents:
811
diff
changeset
|
64 pattern = r"""<img[^>]* src="([^"]+)"[^>]*>""" |
429c6a0ef73d
frontends (tools): addURLToImage makes an image clickable
souliane <souliane@mailoo.org>
parents:
811
diff
changeset
|
65 return re.sub(pattern, repl, string) |