1 |
commit: e0dc774175b38f254b348ec4cf25b8aaaa34adc3 |
2 |
Author: Slava Bacherikov <slava <AT> bacher09 <DOT> org> |
3 |
AuthorDate: Thu Aug 2 22:38:16 2012 +0000 |
4 |
Commit: Slava Bacherikov <slava <AT> bacherikov <DOT> org <DOT> ua> |
5 |
CommitDate: Thu Aug 2 22:38:16 2012 +0000 |
6 |
URL: http://git.overlays.gentoo.org/gitweb/?p=proj/gentoo-packages.git;a=commit;h=e0dc7741 |
7 |
|
8 |
More right latest changelog message detection |
9 |
|
10 |
--- |
11 |
.../generic_metadata/changelog_highlight.py | 63 ++++++++++++++++++++ |
12 |
1 files changed, 63 insertions(+), 0 deletions(-) |
13 |
|
14 |
diff --git a/gpackages/libs/package_info/generic_metadata/changelog_highlight.py b/gpackages/libs/package_info/generic_metadata/changelog_highlight.py |
15 |
index d0b683e..5ccbd5c 100644 |
16 |
--- a/gpackages/libs/package_info/generic_metadata/changelog_highlight.py |
17 |
+++ b/gpackages/libs/package_info/generic_metadata/changelog_highlight.py |
18 |
@@ -5,6 +5,7 @@ from pygments.style import Style |
19 |
from pygments.token import * |
20 |
from pygments import highlight |
21 |
import re |
22 |
+from collections import deque |
23 |
|
24 |
DATE_RE = r'\d\d? [A-Z][a-z]{2} \d{4}' |
25 |
EMAIL_RE = r'[\w\.\-\+]+@(?:[\w\-]+\.)+\w+' |
26 |
@@ -140,6 +141,7 @@ class ChangelogHtmlFormater(HtmlFormatter): |
27 |
last = self.token_decorate(ttype, parts[-1]) |
28 |
if line and last: |
29 |
if lspan != cspan: |
30 |
+ |
31 |
line += (lspan and '</span>') + cspan + last |
32 |
lspan = cspan |
33 |
else: |
34 |
@@ -190,3 +192,64 @@ def changelog_termial_highlight(text): |
35 |
def changelog_style_css(): |
36 |
f = ChangelogHtmlFormater(style = ChangelogStyle) |
37 |
return f.get_style_defs() |
38 |
+ |
39 |
+def group_tokens(text): |
40 |
+ c = ChangelogLexer() |
41 |
+ queue = deque() |
42 |
+ group_type = None |
43 |
+ group = [] |
44 |
+ for token, value in c.get_tokens(text): |
45 |
+ queue.append((token, value)) |
46 |
+ |
47 |
+ if len(queue)>6: |
48 |
+ token_q, value_q = queue[0] |
49 |
+ if token_q == Operator and value_q == '*': |
50 |
+ yield (group_type, group) |
51 |
+ group_type = 'version' |
52 |
+ group = [] |
53 |
+ elif token_q == Whitespace: |
54 |
+ token2_q, value2_q = queue[1] |
55 |
+ if token2_q == Date: |
56 |
+ token3_q, value3_q = queue[2] |
57 |
+ if token3_q == Punctuation: |
58 |
+ yield (group_type, group) |
59 |
+ group_type = 'message' |
60 |
+ group = [] |
61 |
+ |
62 |
+ group.append(queue.popleft()) |
63 |
+ |
64 |
+ yield (group_type, group + list(queue)) |
65 |
+ |
66 |
+def latest_message_group(text): |
67 |
+ for group_type, group in group_tokens(text): |
68 |
+ if group_type == 'message': |
69 |
+ return group |
70 |
+ |
71 |
+def latest_group_messages_group(text): |
72 |
+ groups = [] |
73 |
+ for group_type, group in group_tokens(text): |
74 |
+ if group_type == 'version': |
75 |
+ groups.append((group_type, group)) |
76 |
+ if group_type == 'message': |
77 |
+ groups.append((group_type, group)) |
78 |
+ return groups |
79 |
+ |
80 |
+def tokensgroup_to_toknes(groups): |
81 |
+ tk = [] |
82 |
+ for group_type, group in groups: |
83 |
+ tk += group |
84 |
+ return tk |
85 |
+ |
86 |
+def tokens_to_text(lex): |
87 |
+ mystr = '' |
88 |
+ for token, value in lex: |
89 |
+ mystr += value |
90 |
+ return mystr |
91 |
+ |
92 |
+def latest_message(text): |
93 |
+ return tokens_to_text(latest_message_group(text)) |
94 |
+ |
95 |
+def latest_group_messages(text): |
96 |
+ groups = latest_group_messages_group(text) |
97 |
+ return tokens_to_text(tokensgroup_to_toknes(groups)) |
98 |
+ |