gobject-introspection 2.2.0-x86-mingw32 → 2.2.1-x86-mingw32

Sign up to get free protection for your applications and to get access to all the features.
Files changed (176) hide show
  1. checksums.yaml +4 -4
  2. data/Rakefile +7 -7
  3. data/ext/gobject-introspection/rb-gi-argument.c +28 -3
  4. data/ext/gobject-introspection/rb-gi-constructor-info.c +6 -1
  5. data/ext/gobject-introspection/rb-gi-function-info.c +29 -4
  6. data/ext/gobject-introspection/rb-gi-loader.c +19 -3
  7. data/ext/gobject-introspection/rb-gi-struct-info.c +28 -16
  8. data/lib/2.0/gobject_introspection.so +0 -0
  9. data/lib/gobject-introspection/callable-info.rb +16 -7
  10. data/lib/gobject-introspection/loader.rb +47 -19
  11. data/test/test-object-info.rb +1 -1
  12. data/test/test-signal-info.rb +2 -2
  13. data/test/test-struct-info.rb +1 -1
  14. data/vendor/local/bin/g-ir-compiler.exe +0 -0
  15. data/vendor/local/bin/g-ir-generate.exe +0 -0
  16. data/vendor/local/bin/libgirepository-1.0-1.dll +0 -0
  17. data/vendor/local/include/gobject-introspection-1.0/giarginfo.h +30 -0
  18. data/vendor/local/include/gobject-introspection-1.0/gibaseinfo.h +31 -0
  19. data/vendor/local/include/gobject-introspection-1.0/gicallableinfo.h +36 -0
  20. data/vendor/local/include/gobject-introspection-1.0/giconstantinfo.h +12 -0
  21. data/vendor/local/include/gobject-introspection-1.0/gienuminfo.h +26 -0
  22. data/vendor/local/include/gobject-introspection-1.0/gifieldinfo.h +19 -0
  23. data/vendor/local/include/gobject-introspection-1.0/gifunctioninfo.h +23 -0
  24. data/vendor/local/include/gobject-introspection-1.0/giinterfaceinfo.h +38 -0
  25. data/vendor/local/include/gobject-introspection-1.0/giobjectinfo.h +72 -2
  26. data/vendor/local/include/gobject-introspection-1.0/gipropertyinfo.h +12 -0
  27. data/vendor/local/include/gobject-introspection-1.0/giregisteredtypeinfo.h +11 -0
  28. data/vendor/local/include/gobject-introspection-1.0/girepository.h +68 -8
  29. data/vendor/local/include/gobject-introspection-1.0/girffi.h +25 -1
  30. data/vendor/local/include/gobject-introspection-1.0/gisignalinfo.h +12 -0
  31. data/vendor/local/include/gobject-introspection-1.0/gistructinfo.h +24 -0
  32. data/vendor/local/include/gobject-introspection-1.0/gitypeinfo.h +31 -0
  33. data/vendor/local/include/gobject-introspection-1.0/gitypelib.h +25 -0
  34. data/vendor/local/include/gobject-introspection-1.0/gitypes.h +84 -13
  35. data/vendor/local/include/gobject-introspection-1.0/giunioninfo.h +27 -0
  36. data/vendor/local/include/gobject-introspection-1.0/giversionmacros.h +128 -0
  37. data/vendor/local/include/gobject-introspection-1.0/givfuncinfo.h +17 -0
  38. data/vendor/local/lib/girepository-1.0/GIRepository-2.0.typelib +0 -0
  39. data/vendor/local/lib/girepository-1.0/GLib-2.0.typelib +0 -0
  40. data/vendor/local/lib/girepository-1.0/GObject-2.0.typelib +0 -0
  41. data/vendor/local/lib/girepository-1.0/Gio-2.0.typelib +0 -0
  42. data/vendor/local/lib/girepository-1.0/libxml2-2.0.typelib +0 -0
  43. data/vendor/local/lib/girepository-1.0/win32-1.0.typelib +0 -0
  44. data/vendor/local/lib/gobject-introspection/giscanner/__init__.pyc +0 -0
  45. data/vendor/local/lib/gobject-introspection/giscanner/__init__.pyo +0 -0
  46. data/vendor/local/lib/gobject-introspection/giscanner/annotationmain.py +5 -4
  47. data/vendor/local/lib/gobject-introspection/giscanner/annotationmain.pyc +0 -0
  48. data/vendor/local/lib/gobject-introspection/giscanner/annotationmain.pyo +0 -0
  49. data/vendor/local/lib/gobject-introspection/giscanner/annotationparser.py +1865 -913
  50. data/vendor/local/lib/gobject-introspection/giscanner/annotationparser.pyc +0 -0
  51. data/vendor/local/lib/gobject-introspection/giscanner/annotationparser.pyo +0 -0
  52. data/vendor/local/lib/gobject-introspection/giscanner/ast.py +49 -16
  53. data/vendor/local/lib/gobject-introspection/giscanner/ast.pyc +0 -0
  54. data/vendor/local/lib/gobject-introspection/giscanner/ast.pyo +0 -0
  55. data/vendor/local/lib/gobject-introspection/giscanner/cachestore.py +10 -4
  56. data/vendor/local/lib/gobject-introspection/giscanner/cachestore.pyc +0 -0
  57. data/vendor/local/lib/gobject-introspection/giscanner/cachestore.pyo +0 -0
  58. data/vendor/local/lib/gobject-introspection/giscanner/ccompiler.py +202 -0
  59. data/vendor/local/lib/gobject-introspection/giscanner/ccompiler.pyc +0 -0
  60. data/vendor/local/lib/gobject-introspection/giscanner/ccompiler.pyo +0 -0
  61. data/vendor/local/lib/gobject-introspection/giscanner/codegen.py +32 -1
  62. data/vendor/local/lib/gobject-introspection/giscanner/codegen.pyc +0 -0
  63. data/vendor/local/lib/gobject-introspection/giscanner/codegen.pyo +0 -0
  64. data/vendor/local/lib/gobject-introspection/giscanner/collections/__init__.py +1 -0
  65. data/vendor/local/lib/gobject-introspection/giscanner/collections/__init__.pyc +0 -0
  66. data/vendor/local/lib/gobject-introspection/giscanner/collections/__init__.pyo +0 -0
  67. data/vendor/local/lib/gobject-introspection/giscanner/collections/counter.py +305 -0
  68. data/vendor/local/lib/gobject-introspection/giscanner/collections/counter.pyc +0 -0
  69. data/vendor/local/lib/gobject-introspection/giscanner/collections/counter.pyo +0 -0
  70. data/vendor/local/lib/gobject-introspection/giscanner/collections/ordereddict.pyc +0 -0
  71. data/vendor/local/lib/gobject-introspection/giscanner/collections/ordereddict.pyo +0 -0
  72. data/vendor/local/lib/gobject-introspection/giscanner/docmain.pyc +0 -0
  73. data/vendor/local/lib/gobject-introspection/giscanner/docmain.pyo +0 -0
  74. data/vendor/local/lib/gobject-introspection/giscanner/doctemplates/C/callback.tmpl +4 -0
  75. data/vendor/local/lib/gobject-introspection/giscanner/doctemplates/C/field.tmpl +1 -0
  76. data/vendor/local/lib/gobject-introspection/giscanner/doctemplates/C/function.tmpl +8 -9
  77. data/vendor/local/lib/gobject-introspection/giscanner/doctemplates/C/interface.tmpl +2 -0
  78. data/vendor/local/lib/gobject-introspection/giscanner/doctemplates/Gjs/callback.tmpl +27 -0
  79. data/vendor/local/lib/gobject-introspection/giscanner/doctemplates/Gjs/class.tmpl +17 -5
  80. data/vendor/local/lib/gobject-introspection/giscanner/doctemplates/Gjs/enum.tmpl +8 -0
  81. data/vendor/local/lib/gobject-introspection/giscanner/doctemplates/Gjs/field.tmpl +9 -0
  82. data/vendor/local/lib/gobject-introspection/giscanner/doctemplates/Gjs/function.tmpl +12 -13
  83. data/vendor/local/lib/gobject-introspection/giscanner/doctemplates/Gjs/interface.tmpl +17 -0
  84. data/vendor/local/lib/gobject-introspection/giscanner/doctemplates/Gjs/property.tmpl +3 -4
  85. data/vendor/local/lib/gobject-introspection/giscanner/doctemplates/Gjs/signal.tmpl +10 -9
  86. data/vendor/local/lib/gobject-introspection/giscanner/doctemplates/Gjs/vfunc.tmpl +7 -7
  87. data/vendor/local/lib/gobject-introspection/giscanner/doctemplates/Python/callback.tmpl +27 -0
  88. data/vendor/local/lib/gobject-introspection/giscanner/doctemplates/Python/class.tmpl +5 -4
  89. data/vendor/local/lib/gobject-introspection/giscanner/doctemplates/Python/field.tmpl +1 -0
  90. data/vendor/local/lib/gobject-introspection/giscanner/doctemplates/Python/function.tmpl +8 -14
  91. data/vendor/local/lib/gobject-introspection/giscanner/doctemplates/Python/interface.tmpl +16 -0
  92. data/vendor/local/lib/gobject-introspection/giscanner/doctemplates/Python/property.tmpl +2 -3
  93. data/vendor/local/lib/gobject-introspection/giscanner/doctemplates/Python/signal.tmpl +6 -7
  94. data/vendor/local/lib/gobject-introspection/giscanner/doctemplates/Python/vfunc.tmpl +7 -13
  95. data/vendor/local/lib/gobject-introspection/giscanner/doctemplates/base.tmpl +10 -19
  96. data/vendor/local/lib/gobject-introspection/giscanner/doctemplates/class.tmpl +24 -3
  97. data/vendor/local/lib/gobject-introspection/giscanner/doctemplates/namespace.tmpl +4 -7
  98. data/vendor/local/lib/gobject-introspection/giscanner/docwriter.py +375 -61
  99. data/vendor/local/lib/gobject-introspection/giscanner/docwriter.pyc +0 -0
  100. data/vendor/local/lib/gobject-introspection/giscanner/docwriter.pyo +0 -0
  101. data/vendor/local/lib/gobject-introspection/giscanner/dumper.py +43 -75
  102. data/vendor/local/lib/gobject-introspection/giscanner/dumper.pyc +0 -0
  103. data/vendor/local/lib/gobject-introspection/giscanner/dumper.pyo +0 -0
  104. data/vendor/local/lib/gobject-introspection/giscanner/gdumpparser.py +1 -20
  105. data/vendor/local/lib/gobject-introspection/giscanner/gdumpparser.pyc +0 -0
  106. data/vendor/local/lib/gobject-introspection/giscanner/gdumpparser.pyo +0 -0
  107. data/vendor/local/lib/gobject-introspection/giscanner/girparser.py +33 -15
  108. data/vendor/local/lib/gobject-introspection/giscanner/girparser.pyc +0 -0
  109. data/vendor/local/lib/gobject-introspection/giscanner/girparser.pyo +0 -0
  110. data/vendor/local/lib/gobject-introspection/giscanner/girwriter.py +51 -22
  111. data/vendor/local/lib/gobject-introspection/giscanner/girwriter.pyc +0 -0
  112. data/vendor/local/lib/gobject-introspection/giscanner/girwriter.pyo +0 -0
  113. data/vendor/local/lib/gobject-introspection/giscanner/introspectablepass.pyc +0 -0
  114. data/vendor/local/lib/gobject-introspection/giscanner/introspectablepass.pyo +0 -0
  115. data/vendor/local/lib/gobject-introspection/giscanner/libtoolimporter.pyc +0 -0
  116. data/vendor/local/lib/gobject-introspection/giscanner/libtoolimporter.pyo +0 -0
  117. data/vendor/local/lib/gobject-introspection/giscanner/maintransformer.py +285 -254
  118. data/vendor/local/lib/gobject-introspection/giscanner/maintransformer.pyc +0 -0
  119. data/vendor/local/lib/gobject-introspection/giscanner/maintransformer.pyo +0 -0
  120. data/vendor/local/lib/gobject-introspection/giscanner/message.py +41 -25
  121. data/vendor/local/lib/gobject-introspection/giscanner/message.pyc +0 -0
  122. data/vendor/local/lib/gobject-introspection/giscanner/message.pyo +0 -0
  123. data/vendor/local/lib/gobject-introspection/giscanner/scannermain.py +67 -15
  124. data/vendor/local/lib/gobject-introspection/giscanner/scannermain.pyc +0 -0
  125. data/vendor/local/lib/gobject-introspection/giscanner/scannermain.pyo +0 -0
  126. data/vendor/local/lib/gobject-introspection/giscanner/sectionparser.pyc +0 -0
  127. data/vendor/local/lib/gobject-introspection/giscanner/sectionparser.pyo +0 -0
  128. data/vendor/local/lib/gobject-introspection/giscanner/shlibs.py +10 -6
  129. data/vendor/local/lib/gobject-introspection/giscanner/shlibs.pyc +0 -0
  130. data/vendor/local/lib/gobject-introspection/giscanner/shlibs.pyo +0 -0
  131. data/vendor/local/lib/gobject-introspection/giscanner/sourcescanner.py +14 -8
  132. data/vendor/local/lib/gobject-introspection/giscanner/sourcescanner.pyc +0 -0
  133. data/vendor/local/lib/gobject-introspection/giscanner/sourcescanner.pyo +0 -0
  134. data/vendor/local/lib/gobject-introspection/giscanner/testcodegen.py +16 -2
  135. data/vendor/local/lib/gobject-introspection/giscanner/testcodegen.pyc +0 -0
  136. data/vendor/local/lib/gobject-introspection/giscanner/testcodegen.pyo +0 -0
  137. data/vendor/local/lib/gobject-introspection/giscanner/transformer.py +150 -169
  138. data/vendor/local/lib/gobject-introspection/giscanner/transformer.pyc +0 -0
  139. data/vendor/local/lib/gobject-introspection/giscanner/transformer.pyo +0 -0
  140. data/vendor/local/lib/gobject-introspection/giscanner/utils.py +64 -3
  141. data/vendor/local/lib/gobject-introspection/giscanner/utils.pyc +0 -0
  142. data/vendor/local/lib/gobject-introspection/giscanner/utils.pyo +0 -0
  143. data/vendor/local/lib/gobject-introspection/giscanner/xmlwriter.py +5 -44
  144. data/vendor/local/lib/gobject-introspection/giscanner/xmlwriter.pyc +0 -0
  145. data/vendor/local/lib/gobject-introspection/giscanner/xmlwriter.pyo +0 -0
  146. data/vendor/local/lib/libgirepository-1.0.a +0 -0
  147. data/vendor/local/lib/libgirepository-1.0.dll.a +0 -0
  148. data/vendor/local/lib/libgirepository-1.0.la +1 -1
  149. data/vendor/local/lib/pkgconfig/gobject-introspection-1.0.pc +4 -4
  150. data/vendor/local/lib/pkgconfig/gobject-introspection-no-export-1.0.pc +5 -5
  151. data/vendor/local/share/gir-1.0/GIRepository-2.0.gir +352 -143
  152. data/vendor/local/share/gir-1.0/GLib-2.0.gir +6402 -3872
  153. data/vendor/local/share/gir-1.0/GModule-2.0.gir +42 -24
  154. data/vendor/local/share/gir-1.0/GObject-2.0.gir +1543 -887
  155. data/vendor/local/share/gir-1.0/Gio-2.0.gir +10859 -3705
  156. data/vendor/local/share/gobject-introspection-1.0/tests/annotation.c +10 -14
  157. data/vendor/local/share/gobject-introspection-1.0/tests/annotation.h +112 -9
  158. data/vendor/local/share/gobject-introspection-1.0/tests/drawable.c +2 -0
  159. data/vendor/local/share/gobject-introspection-1.0/tests/drawable.h +11 -0
  160. data/vendor/local/share/gobject-introspection-1.0/tests/everything.c +106 -0
  161. data/vendor/local/share/gobject-introspection-1.0/tests/everything.h +107 -0
  162. data/vendor/local/share/gobject-introspection-1.0/tests/foo.c +3 -3
  163. data/vendor/local/share/gobject-introspection-1.0/tests/foo.h +145 -0
  164. data/vendor/local/share/gobject-introspection-1.0/tests/gimarshallingtests.c +166 -10
  165. data/vendor/local/share/gobject-introspection-1.0/tests/gimarshallingtests.h +790 -0
  166. data/vendor/local/share/gobject-introspection-1.0/tests/gitestmacros.h +10 -0
  167. data/vendor/local/share/gobject-introspection-1.0/tests/regress.c +79 -28
  168. data/vendor/local/share/gobject-introspection-1.0/tests/regress.h +462 -0
  169. data/vendor/local/share/gobject-introspection-1.0/tests/utility.c +2 -0
  170. data/vendor/local/share/gobject-introspection-1.0/tests/utility.h +7 -0
  171. data/vendor/local/share/gobject-introspection-1.0/tests/warnlib.c +14 -0
  172. data/vendor/local/share/gobject-introspection-1.0/tests/warnlib.h +10 -0
  173. data/vendor/local/share/man/man1/g-ir-compiler.1 +1 -10
  174. metadata +38 -23
  175. data/lib/1.9/gobject_introspection.so +0 -0
  176. data/lib/2.1/gobject_introspection.so +0 -0
@@ -0,0 +1,305 @@
1
+ # -*- Mode: Python -*-
2
+ # GObject-Introspection - a framework for introspecting GObject libraries
3
+ # Copyright (C) 2013 Dieter Verfaillie <dieterv@optionexplicit.be>
4
+ #
5
+ # This program is free software; you can redistribute it and/or
6
+ # modify it under the terms of the GNU General Public License
7
+ # as published by the Free Software Foundation; either version 2
8
+ # of the License, or (at your option) any later version.
9
+ #
10
+ # This program is distributed in the hope that it will be useful,
11
+ # but WITHOUT ANY WARRANTY; without even the implied warranty of
12
+ # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13
+ # GNU General Public License for more details.
14
+ #
15
+ # You should have received a copy of the GNU General Public License
16
+ # along with this program; if not, write to the Free Software
17
+ # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
18
+ # 02110-1301, USA.
19
+ #
20
+
21
+
22
+ from __future__ import absolute_import
23
+
24
+
25
+ try:
26
+ from collections import Counter
27
+ except ImportError:
28
+ # collections.Counter for Python 2.6, backported from
29
+ # http://hg.python.org/cpython/file/d047928ae3f6/Lib/collections/__init__.py#l402
30
+
31
+ from operator import itemgetter
32
+ from heapq import nlargest
33
+ from itertools import repeat, ifilter
34
+
35
+ class Counter(dict):
36
+ '''Dict subclass for counting hashable items. Sometimes called a bag
37
+ or multiset. Elements are stored as dictionary keys and their counts
38
+ are stored as dictionary values.
39
+
40
+ >>> c = Counter('abcdeabcdabcaba') # count elements from a string
41
+
42
+ >>> c.most_common(3) # three most common elements
43
+ [('a', 5), ('b', 4), ('c', 3)]
44
+ >>> sorted(c) # list all unique elements
45
+ ['a', 'b', 'c', 'd', 'e']
46
+ >>> ''.join(sorted(c.elements())) # list elements with repetitions
47
+ 'aaaaabbbbcccdde'
48
+ >>> sum(c.values()) # total of all counts
49
+ 15
50
+
51
+ >>> c['a'] # count of letter 'a'
52
+ 5
53
+ >>> for elem in 'shazam': # update counts from an iterable
54
+ ... c[elem] += 1 # by adding 1 to each element's count
55
+ >>> c['a'] # now there are seven 'a'
56
+ 7
57
+ >>> del c['b'] # remove all 'b'
58
+ >>> c['b'] # now there are zero 'b'
59
+ 0
60
+
61
+ >>> d = Counter('simsalabim') # make another counter
62
+ >>> c.update(d) # add in the second counter
63
+ >>> c['a'] # now there are nine 'a'
64
+ 9
65
+
66
+ >>> c.clear() # empty the counter
67
+ >>> c
68
+ Counter()
69
+
70
+ Note: If a count is set to zero or reduced to zero, it will remain
71
+ in the counter until the entry is deleted or the counter is cleared:
72
+
73
+ >>> c = Counter('aaabbc')
74
+ >>> c['b'] -= 2 # reduce the count of 'b' by two
75
+ >>> c.most_common() # 'b' is still in, but its count is zero
76
+ [('a', 3), ('c', 1), ('b', 0)]
77
+
78
+ '''
79
+ # References:
80
+ # http://en.wikipedia.org/wiki/Multiset
81
+ # http://www.gnu.org/software/smalltalk/manual-base/html_node/Bag.html
82
+ # http://www.demo2s.com/Tutorial/Cpp/0380__set-multiset/Catalog0380__set-multiset.htm
83
+ # http://code.activestate.com/recipes/259174/
84
+ # Knuth, TAOCP Vol. II section 4.6.3
85
+
86
+ def __init__(self, iterable=None, **kwds):
87
+ '''Create a new, empty Counter object. And if given, count elements
88
+ from an input iterable. Or, initialize the count from another mapping
89
+ of elements to their counts.
90
+
91
+ >>> c = Counter() # a new, empty counter
92
+ >>> c = Counter('gallahad') # a new counter from an iterable
93
+ >>> c = Counter({'a': 4, 'b': 2}) # a new counter from a mapping
94
+ >>> c = Counter(a=4, b=2) # a new counter from keyword args
95
+
96
+ '''
97
+ self.update(iterable, **kwds)
98
+
99
+ def __missing__(self, key):
100
+ 'The count of elements not in the Counter is zero.'
101
+ # Needed so that self[missing_item] does not raise KeyError
102
+ return 0
103
+
104
+ def most_common(self, n=None):
105
+ '''List the n most common elements and their counts from the most
106
+ common to the least. If n is None, then list all element counts.
107
+
108
+ >>> Counter('abcdeabcdabcaba').most_common(3)
109
+ [('a', 5), ('b', 4), ('c', 3)]
110
+
111
+ '''
112
+ # Emulate Bag.sortedByCount from Smalltalk
113
+ if n is None:
114
+ return sorted(self.iteritems(), key=itemgetter(1), reverse=True)
115
+ return nlargest(n, self.iteritems(), key=itemgetter(1))
116
+
117
+ def elements(self):
118
+ '''Iterator over elements repeating each as many times as its count.
119
+
120
+ >>> c = Counter('ABCABC')
121
+ >>> sorted(c.elements())
122
+ ['A', 'A', 'B', 'B', 'C', 'C']
123
+
124
+ # Knuth's example for prime factors of 1836: 2**2 * 3**3 * 17**1
125
+ >>> prime_factors = Counter({2: 2, 3: 3, 17: 1})
126
+ >>> product = 1
127
+ >>> for factor in prime_factors.elements(): # loop over factors
128
+ ... product *= factor # and multiply them
129
+ >>> product
130
+ 1836
131
+
132
+ Note, if an element's count has been set to zero or is a negative
133
+ number, elements() will ignore it.
134
+
135
+ '''
136
+ # Emulate Bag.do from Smalltalk and Multiset.begin from C++.
137
+ for elem, count in self.iteritems():
138
+ for _ in repeat(None, count):
139
+ yield elem
140
+
141
+ # Override dict methods where necessary
142
+
143
+ @classmethod
144
+ def fromkeys(cls, iterable, v=None):
145
+ # There is no equivalent method for counters because setting v=1
146
+ # means that no element can have a count greater than one.
147
+ raise NotImplementedError(
148
+ 'Counter.fromkeys() is undefined. Use Counter(iterable) instead.')
149
+
150
+ def update(self, iterable=None, **kwds):
151
+ '''Like dict.update() but add counts instead of replacing them.
152
+
153
+ Source can be an iterable, a dictionary, or another Counter instance.
154
+
155
+ >>> c = Counter('which')
156
+ >>> c.update('witch') # add elements from another iterable
157
+ >>> d = Counter('watch')
158
+ >>> c.update(d) # add elements from another counter
159
+ >>> c['h'] # four 'h' in which, witch, and watch
160
+ 4
161
+
162
+ '''
163
+ # The regular dict.update() operation makes no sense here because the
164
+ # replace behavior results in the some of original untouched counts
165
+ # being mixed-in with all of the other counts for a mismash that
166
+ # doesn't have a straight-forward interpretation in most counting
167
+ # contexts. Instead, we implement straight-addition. Both the inputs
168
+ # and outputs are allowed to contain zero and negative counts.
169
+
170
+ if iterable is not None:
171
+ if hasattr(iterable, 'iteritems'):
172
+ if self:
173
+ self_get = self.get
174
+ for elem, count in iterable.iteritems():
175
+ self[elem] = self_get(elem, 0) + count
176
+ else:
177
+ dict.update(self, iterable) # fast path when counter is empty
178
+ else:
179
+ self_get = self.get
180
+ for elem in iterable:
181
+ self[elem] = self_get(elem, 0) + 1
182
+ if kwds:
183
+ self.update(kwds)
184
+
185
+ def subtract(self, iterable=None, **kwds):
186
+ '''Like dict.update() but subtracts counts instead of replacing them.
187
+ Counts can be reduced below zero. Both the inputs and outputs are
188
+ allowed to contain zero and negative counts.
189
+
190
+ Source can be an iterable, a dictionary, or another Counter instance.
191
+
192
+ >>> c = Counter('which')
193
+ >>> c.subtract('witch') # subtract elements from another iterable
194
+ >>> c.subtract(Counter('watch')) # subtract elements from another counter
195
+ >>> c['h'] # 2 in which, minus 1 in witch, minus 1 in watch
196
+ 0
197
+ >>> c['w'] # 1 in which, minus 1 in witch, minus 1 in watch
198
+ -1
199
+
200
+ '''
201
+ if hasattr(iterable, 'iteritems'):
202
+ for elem, count in iterable.iteritems():
203
+ self[elem] -= count
204
+ else:
205
+ for elem in iterable:
206
+ self[elem] -= 1
207
+
208
+ def copy(self):
209
+ 'Return a shallow copy.'
210
+ return self.__class__(self)
211
+
212
+ def __reduce__(self):
213
+ return self.__class__, (dict(self), )
214
+
215
+ def __delitem__(self, elem):
216
+ 'Like dict.__delitem__() but does not raise KeyError for missing values.'
217
+ if elem in self:
218
+ dict.__delitem__(self, elem)
219
+
220
+ def __repr__(self):
221
+ if not self:
222
+ return '%s()' % self.__class__.__name__
223
+ items = ', '.join(map('%r: %r'.__mod__, self.most_common()))
224
+ return '%s({%s})' % (self.__class__.__name__, items)
225
+
226
+ # Multiset-style mathematical operations discussed in:
227
+ # Knuth TAOCP Volume II section 4.6.3 exercise 19
228
+ # and at http://en.wikipedia.org/wiki/Multiset
229
+ #
230
+ # Outputs guaranteed to only include positive counts.
231
+ #
232
+ # To strip negative and zero counts, add-in an empty counter:
233
+ # c += Counter()
234
+
235
+ def __add__(self, other):
236
+ '''Add counts from two counters.
237
+
238
+ >>> Counter('abbb') + Counter('bcc')
239
+ Counter({'b': 4, 'c': 2, 'a': 1})
240
+
241
+ '''
242
+ if not isinstance(other, Counter):
243
+ return NotImplemented
244
+ result = Counter()
245
+ for elem in set(self) | set(other):
246
+ newcount = self[elem] + other[elem]
247
+ if newcount > 0:
248
+ result[elem] = newcount
249
+ return result
250
+
251
+ def __sub__(self, other):
252
+ ''' Subtract count, but keep only results with positive counts.
253
+
254
+ >>> Counter('abbbc') - Counter('bccd')
255
+ Counter({'b': 2, 'a': 1})
256
+
257
+ '''
258
+ if not isinstance(other, Counter):
259
+ return NotImplemented
260
+ result = Counter()
261
+ for elem in set(self) | set(other):
262
+ newcount = self[elem] - other[elem]
263
+ if newcount > 0:
264
+ result[elem] = newcount
265
+ return result
266
+
267
+ def __or__(self, other):
268
+ '''Union is the maximum of value in either of the input counters.
269
+
270
+ >>> Counter('abbb') | Counter('bcc')
271
+ Counter({'b': 3, 'c': 2, 'a': 1})
272
+
273
+ '''
274
+ if not isinstance(other, Counter):
275
+ return NotImplemented
276
+ _max = max
277
+ result = Counter()
278
+ for elem in set(self) | set(other):
279
+ newcount = _max(self[elem], other[elem])
280
+ if newcount > 0:
281
+ result[elem] = newcount
282
+ return result
283
+
284
+ def __and__(self, other):
285
+ ''' Intersection is the minimum of corresponding counts.
286
+
287
+ >>> Counter('abbb') & Counter('bcc')
288
+ Counter({'b': 1})
289
+
290
+ '''
291
+ if not isinstance(other, Counter):
292
+ return NotImplemented
293
+ _min = min
294
+ result = Counter()
295
+ if len(self) < len(other):
296
+ self, other = other, self
297
+ for elem in ifilter(self.__contains__, other):
298
+ newcount = _min(self[elem], other[elem])
299
+ if newcount > 0:
300
+ result[elem] = newcount
301
+ return result
302
+
303
+ if __name__ == '__main__':
304
+ import doctest
305
+ print(doctest.testmod())
@@ -0,0 +1,4 @@
1
+ <%inherit file="./function.tmpl"/>
2
+ <%block name="info">
3
+ ${formatter.format_xref(node.parent, type="guide", group=page_kind)}
4
+ </%block>
@@ -0,0 +1 @@
1
+ <%inherit file="/base.tmpl"/>
@@ -6,7 +6,7 @@
6
6
  <api:type>${formatter.format_type(node.retval.type) | x}</api:type>
7
7
  </api:returns>
8
8
  <api:name>${formatter.format_function_name(node)}</api:name>
9
- % for arg in formatter.get_parameters(node):
9
+ % for arg in formatter.get_in_parameters(node):
10
10
  % if arg.type.ctype == '<varargs>':
11
11
  <api:varargs/>
12
12
  % else:
@@ -19,12 +19,12 @@
19
19
  </api:function>
20
20
  </%block>
21
21
  <%block name="synopsis">
22
- <synopsis><code mime="text/x-csrc">
22
+ <synopsis><code mime="text/x-csrc">
23
23
  ${node.retval.type.ctype} ${formatter.format_function_name(node)} (\
24
- % if not formatter.get_parameters(node):
24
+ % if not formatter.get_in_parameters(node):
25
25
  void\
26
26
  % else:
27
- % for ix, arg in enumerate(formatter.get_parameters(node)):
27
+ % for ix, arg in enumerate(formatter.get_in_parameters(node)):
28
28
  % if ix != 0:
29
29
  ${' ' * (len(formatter.format_type(node.retval.type)) + len(formatter.format_function_name(node)) + 3)}\
30
30
  % endif
@@ -33,18 +33,17 @@ ${' ' * (len(formatter.format_type(node.retval.type)) + len(formatter.format_fun
33
33
  % else:
34
34
  ${formatter.format_type(arg.type) | x} ${arg.argname}\
35
35
  % endif
36
- % if ix != len(formatter.get_parameters(node)) - 1:
36
+ % if ix != len(formatter.get_in_parameters(node)) - 1:
37
37
  ,
38
38
  % endif
39
39
  % endfor
40
40
  % endif
41
41
  );
42
- </code></synopsis>
43
- </%block>
42
+ </code></synopsis></%block>
44
43
  <%block name="details">
45
- % if formatter.get_parameters(node) or node.retval:
44
+ % if formatter.get_in_parameters(node) or node.retval:
46
45
  <terms>
47
- % for arg in formatter.get_parameters(node):
46
+ % for arg in formatter.get_in_parameters(node):
48
47
  <item>
49
48
  <title><code>${arg.argname}</code></title>
50
49
  ${formatter.format(node, arg.doc)}
@@ -0,0 +1,2 @@
1
+ <%! page_type="guide" %>\
2
+ <%inherit file="/class.tmpl"/>
@@ -0,0 +1,27 @@
1
+ <%inherit file="/base.tmpl"/>
2
+ <%block name="synopsis">
3
+ <synopsis><code mime="text/x-gjs">
4
+ function on${node.name}(\
5
+ ${', '.join('%s: %s' % (arg.argname, formatter.format_type(arg.type, True)) for arg in formatter.get_in_parameters(node))}\
6
+ ): ${formatter.format_out_parameters(node)} {
7
+ }
8
+ </code></synopsis></%block>
9
+ <%block name="details">
10
+ % if formatter.has_any_parameters(node):
11
+ <terms>
12
+ % for arg in formatter.get_in_parameters(node):
13
+ <item>
14
+ <title><code>${arg.argname}</code></title>
15
+ ${formatter.format(node, arg.doc)}
16
+ </item>
17
+ % endfor
18
+ % for arg in formatter.get_out_parameters(node):
19
+ <item>
20
+ <title><code>${(arg.argname + ' (out)') if arg.direction == 'inout' else arg.argname}</code></title>
21
+ ${formatter.format(node, arg.doc)}
22
+ </item>
23
+ % endfor
24
+ </terms>
25
+ % endif
26
+ </%block>
27
+
@@ -1,18 +1,30 @@
1
1
  <%inherit file="/class.tmpl"/>
2
2
  <%block name="synopsis">
3
- <synopsis><code>
3
+ <synopsis>\
4
+ % if node.namespace is not None:
5
+ <code>
4
6
  const ${namespace.name} = imports.gi.${namespace.name};
5
7
 
6
- let ${formatter.to_underscores(node.name).lower()} = new ${namespace.name}.${node.name}(\
8
+ let ${formatter.to_lower_camel_case(node.name)} = new ${namespace.name}.${node.name}(\
9
+ % if isinstance(node, (ast.Class, ast.Interface)):
7
10
  % if len(node.properties) > 0:
8
11
  {
9
12
  % for ix, property_ in enumerate(node.properties):
10
- % if property_.construct or property_.construct_only or property_.writable:
13
+ % if (property_.construct or property_.construct_only) and property_.writable:
11
14
  <link xref='${namespace.name}.${node.name}-${property_.name}'>${property_.name.replace('-', '_')}</link>: value,
12
15
  % endif
13
16
  % endfor
14
17
  }\
15
18
  % endif
19
+ % else:
20
+ ${formatter.format_gboxed_constructor(node)}\
21
+ % endif
16
22
  );
17
- </code></synopsis>
18
- </%block>
23
+ </code>\
24
+ % else:
25
+ <p>
26
+ This structure is inside ${node.parent.namespace.name}.${node.parent.name}
27
+ and can only be used as a field of that.
28
+ </p>
29
+ % endif
30
+ </synopsis></%block>
@@ -1,3 +1,4 @@
1
+ <%! page_type="guide" %>
1
2
  <%inherit file="/base.tmpl"/>
2
3
  <%block name="details">
3
4
  % if node.members:
@@ -11,3 +12,10 @@ ${formatter.format(node, member.doc)}
11
12
  </terms>
12
13
  % endif
13
14
  </%block>
15
+ <%block name="links">\
16
+ <links type="topic" ui:expanded="true"
17
+ api:type="function" api:mime="${formatter.mime_type}"
18
+ groups="function" style="linklist">
19
+ <title>Functions</title>
20
+ </links>\
21
+ </%block>
@@ -0,0 +1,9 @@
1
+ <%inherit file="/base.tmpl"/>
2
+ <%block name="info">
3
+ ${formatter.format_xref(node.parent, type="guide", group=page_kind)}
4
+ <title type="link" role="topic">${node.name}</title>
5
+ </%block>
6
+ <%block name="synopsis">
7
+ <synopsis><code mime="text/x-gjs">
8
+ ${node.parent.name}.${formatter.to_underscores(node)}: ${formatter.format_type(node.type, True)} (${formatter.format_property_flags(node)})
9
+ </code></synopsis></%block>
@@ -6,7 +6,7 @@
6
6
  <api:type>${formatter.format_type(node.retval.type) | x}</api:type>
7
7
  </api:returns>
8
8
  <api:name>${node.symbol}</api:name>
9
- % for arg in formatter.get_parameters(node):
9
+ % for arg in formatter.get_in_parameters(node):
10
10
  % if arg.type.ctype == '<varargs>':
11
11
  <api:varargs/>
12
12
  % else:
@@ -19,30 +19,29 @@
19
19
  </api:function>
20
20
  </%block>
21
21
  <%block name="synopsis">
22
- <synopsis><code mime="text/x-gjs">
22
+ <synopsis><code mime="text/x-gjs">
23
23
  function \
24
- ${node.name}(\
25
- ${', '.join('%s:%s' % (arg.argname, formatter.format_type(arg.type)) for arg in formatter.get_parameters(node))}\
26
- ):${formatter.format_type(node.retval.type)} {
24
+ ${node.name if node.shadows is None else node.shadows}(\
25
+ ${', '.join('%s: %s' % (arg.argname, formatter.format_type(arg.type, True)) for arg in formatter.get_in_parameters(node))}\
26
+ ): ${formatter.format_out_parameters(node)} {
27
27
  // Gjs wrapper for ${node.symbol}()
28
28
  }
29
- </code></synopsis>
30
- </%block>
29
+ </code></synopsis></%block>
31
30
  <%block name="details">
32
- % if formatter.get_parameters(node) or node.retval:
31
+ % if formatter.has_any_parameters(node):
33
32
  <terms>
34
- % for arg in formatter.get_parameters(node):
33
+ % for arg in formatter.get_in_parameters(node):
35
34
  <item>
36
35
  <title><code>${arg.argname}</code></title>
37
36
  ${formatter.format(node, arg.doc)}
38
37
  </item>
39
38
  % endfor
40
- % if node.retval and node.retval.type.ctype != 'void':
39
+ % for arg in formatter.get_out_parameters(node):
41
40
  <item>
42
- <title><code>Returns</code></title>
43
- ${formatter.format(node, node.retval.doc)}
41
+ <title><code>${(arg.argname + ' (out)') if arg.direction == 'inout' else arg.argname}</code></title>
42
+ ${formatter.format(node, arg.doc)}
44
43
  </item>
45
- % endif
44
+ % endfor
46
45
  </terms>
47
46
  % endif
48
47
  </%block>
@@ -0,0 +1,17 @@
1
+ <%inherit file="/class.tmpl"/>
2
+ <%block name="synopsis">
3
+ <synopsis><code>
4
+ const ${namespace.name} = imports.gi.${namespace.name};
5
+
6
+ let ${formatter.to_underscores(node).lower()} = new ${namespace.name}.${node.name}(\
7
+ % if len(node.properties) > 0:
8
+ {
9
+ % for ix, property_ in enumerate(node.properties):
10
+ % if (property_.construct or property_.construct_only) and property_.writable:
11
+ <link xref='${namespace.name}.${node.name}-${property_.name}'>${property_.name.replace('-', '_')}</link>: value,
12
+ % endif
13
+ % endfor
14
+ }\
15
+ % endif
16
+ );
17
+ </code></synopsis></%block>
@@ -4,7 +4,6 @@
4
4
  <title type="link" role="topic">${node.name}</title>
5
5
  </%block>
6
6
  <%block name="synopsis">
7
- <synopsis><code mime="text/x-python">
8
- "${node.name}" ${formatter.format_type(node.type)} : ${formatter.format_property_flags(node)}
9
- </code></synopsis>
10
- </%block>
7
+ <synopsis><code mime="text/x-gjs">
8
+ ${node.parent.name}.${formatter.to_underscores(node)}: ${formatter.format_type(node.type, True)} (${formatter.format_property_flags(node)})
9
+ </code></synopsis></%block>
@@ -4,21 +4,22 @@
4
4
  <title type="link" role="topic">${node.name}</title>
5
5
  </%block>
6
6
  <%block name="synopsis">
7
- <synopsis><code mime="text/x-python">
8
- function callback(${formatter.to_underscores(node.parent.name).lower()}, \
9
- % for arg in formatter.get_parameters(node):
10
- ${arg.argname}:${formatter.format_type(arg.type)}, \
7
+ <synopsis><code mime="text/x-gjs">
8
+ connect('${node.name}', function (${formatter.to_lower_camel_case(node.parent.name)}, \
9
+ % for arg in formatter.get_in_parameters(node):
10
+ % if arg.type.target_fundamental != 'none':
11
+ ${arg.argname}: ${formatter.format_type(arg.type, True)}, \
12
+ % endif
11
13
  % endfor
12
- ):${formatter.format_type(node.retval.type)};
13
- </code></synopsis>
14
- </%block>
14
+ ): ${formatter.format_type(node.retval.type, True)});
15
+ </code></synopsis></%block>
15
16
  <%block name="details">
16
17
  <terms>
17
18
  <item>
18
- <title><code>${formatter.to_underscores(node.parent.name).lower()}</code></title>
19
+ <title><code>${formatter.to_lower_camel_case(node.parent.name)}</code></title>
19
20
  <p>instance of ${formatter.format_xref(node.parent)} that is emitting the signal</p>
20
21
  </item>
21
- % for arg in formatter.get_parameters(node):
22
+ % for arg in formatter.get_in_parameters(node):
22
23
  <item>
23
24
  <title><code>${arg.argname}</code></title>
24
25
  ${formatter.format(node, arg.doc)}
@@ -1,16 +1,15 @@
1
1
  <%inherit file="/base.tmpl"/>
2
2
  <%block name="synopsis">
3
- <synopsis><code mime="text/x-gjs">
3
+ <synopsis><code mime="text/x-gjs">
4
4
  function vfunc_${node.name}(\
5
- ${', '.join('%s:%s' % (arg.argname, formatter.format_type(arg.type)) for arg in formatter.get_parameters(node))}\
6
- ):${formatter.format_type(node.retval.type)} {
5
+ ${', '.join('%s: %s' % (arg.argname, formatter.format_type(arg.type, True)) for arg in formatter.get_in_parameters(node))}\
6
+ ): ${formatter.format_out_parameters(node)} {
7
7
  }
8
- </code></synopsis>
9
- </%block>
8
+ </code></synopsis></%block>
10
9
  <%block name="details">
11
- % if formatter.get_parameters(node) or node.retval:
10
+ % if formatter.get_in_parameters(node) or node.retval:
12
11
  <terms>
13
- % for arg in formatter.get_parameters(node):
12
+ % for arg in formatter.get_in_parameters(node):
14
13
  <item>
15
14
  <title><code>${arg.argname}</code></title>
16
15
  ${formatter.format(node, arg.doc)}
@@ -25,3 +24,4 @@ ${formatter.format(node, node.retval.doc)}
25
24
  </terms>
26
25
  % endif
27
26
  </%block>
27
+
@@ -0,0 +1,27 @@
1
+ <%inherit file="/base.tmpl"/>
2
+ <%block name="synopsis">
3
+ <synopsis><code mime="text/x-python">
4
+ % if formatter.get_in_parameters(node):
5
+ @accepts(${', '.join((formatter.format_type(arg.type) for arg in formatter.get_in_parameters(node)))})
6
+ % endif
7
+ @returns(${formatter.format_type(node.retval.type) | x})
8
+ def on_${node.name}(${', '.join((arg.argname for arg in formatter.get_in_parameters(node)))}):
9
+ </code></synopsis></%block>
10
+ <%block name="details">
11
+ % if formatter.get_in_parameters(node) or node.retval:
12
+ <terms>
13
+ % for arg in formatter.get_in_parameters(node):
14
+ <item>
15
+ <title><code>${arg.argname}</code></title>
16
+ ${formatter.format(node, arg.doc)}
17
+ </item>
18
+ % endfor
19
+ % if node.retval and node.retval.type.ctype != 'void':
20
+ <item>
21
+ <title><code>Returns</code></title>
22
+ ${formatter.format(node, node.retval.doc)}
23
+ </item>
24
+ % endif
25
+ </terms>
26
+ % endif
27
+ </%block>