glimmer 0.10.1 → 1.0.1

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 4e5e05e1e5ce6544e9c0286a46f5436c82ff92e8659044b31794d3f4d9db40f2
4
- data.tar.gz: 3ad9c659f81fed05328533f1af05713939d44297693af78d78799006009cad71
3
+ metadata.gz: e658a13d552f17f352fa3a932ded6dbcaaef5e423fda5f02d7fa0a6b93d1152a
4
+ data.tar.gz: bd5291701f81271b2f3c005c4e1a0216cc90d7bcdb3a386afc751430e57f425e
5
5
  SHA512:
6
- metadata.gz: 674f6f7ea6cf2908261b83ce3580b770bb39ac47c1069c2b26651c897d109863516349d7b09d94199c928b2efceb19719d41123453caa7fde187127bb0c3b16a
7
- data.tar.gz: c5d22e44fa047b35f5aadb232f446cc074873dbb4b8638b2f83038208ae0e32535e0668cd19419994d76d1aac95e7a917b711cc8853d589ac3757e9ca90e350c
6
+ metadata.gz: ac46e59a6f2e75ad89df1725bb7ebd5b740512544969e016cef62670d214a14d1dc6d1873c7e9a268f726ad0b21214c4760a8001111afae9c2a8d3db088f12ec
7
+ data.tar.gz: 3cc604177fd6101d53a9aa6a26c36f9eda889d81c5fc16f432289c50961e99bd7bf4401563b3fd27317796c3baaffd91f2b00f801a8002b555b26e5c4dbddb45
@@ -0,0 +1,365 @@
1
+ # Change Log
2
+
3
+ Related Change Logs:
4
+ - [glimmer-dsl-swt/CHANGELOG.md](https://github.com/AndyObtiva/glimmer-dsl-swt/blob/master/CHANGELOG.md)
5
+
6
+ ## 1.0.1
7
+
8
+ - Fixed issue with excluded keywords getting caught up by the infinite-loop-detection check
9
+
10
+ ## 1.0.0
11
+
12
+ - Code/Documentation preparation for version 1.0.0
13
+
14
+ ## 0.10.4
15
+
16
+ - Support Glimmer::Config.log_excluded_keywords option for whether or not to log keywords that are excluded by Glimmer::Config.excluded_keyword_checkers
17
+
18
+ ## 0.10.3
19
+
20
+ - Made Glimmer::Config module more resilient to invalid logger level values set via GLIMMER_LOGGER_LEVEL env var
21
+
22
+ ## 0.10.2
23
+
24
+ - Added observer notification support for all Array mutation methods in ObservableArray (e.g. `delete_if`, `select!`, `uniq!`, `collect!`, etc...)
25
+
26
+ ## 0.10.1
27
+
28
+ - excluded_keyword_checkers option for filtering certain keywords from Glimmer DSL processing
29
+ - Updates to logging levels to be more appropriate
30
+ - Fixed an issue to avoid crashing when calling observer.unregister/unobserve on a non-observable
31
+
32
+ ## 0.10.0
33
+
34
+ - Remove Glimmer::Config.enable_logging method
35
+ - Refactor Glimmer config logger and reset level to error
36
+ - Update all logger calls to lazy blocks
37
+
38
+ ## 0.9.5
39
+
40
+ - Removed resetting of DSL Engine upon encountering an exception as it is not needed and sometimes causes the wrong behavior
41
+
42
+ ## 0.9.4
43
+
44
+ - Fix issue with observing attributes on classes directly instead of their objects
45
+
46
+ ## 0.9.3
47
+
48
+ - Add infinite loop detection support to avoid infinite loops (breaks after 100 repetitions)
49
+ - Add Glimmer::Config option to specify loop max limit or disable completely
50
+ - ExcludedKeywordError with no logging for excluded keywords such as `to_a` and `to_h`
51
+
52
+ ## 0.9.2
53
+
54
+ - Extracted common model data-binding classes from glimmer-dsl-swt
55
+
56
+ ## 0.9.1
57
+
58
+ - Display error message if Glimmer DSL was invoked without any configured DSLs
59
+
60
+ ## 0.9.0
61
+
62
+ - Extracted Glimmer DSL for SWT into glimmer-dsl-swt gem
63
+ - Extracted Glimmer DSL for XML into glimmer-dsl-xml gem
64
+ - Extracted Glimmer DSL for CSS into glimmer-dsl-css gem
65
+ - Introduced Glimmer DSL for Opal in glimmer-dsl-swt gem
66
+
67
+ ## 0.8.2
68
+
69
+ - `message_box` DSL keyword
70
+ - Table single/multi selection databinding
71
+ - Table cell editing databinding
72
+ - Enhance table listener events with table_item and column_index methods
73
+ - Fix `Glimmer::SWT::ShellProxy#pack_same_size` for Linux
74
+
75
+ ## 0.8.1
76
+
77
+ - Fix Glimmer::SWT::ShellProxy#pack_same_size for Windows
78
+
79
+ ## 0.8.0
80
+
81
+ - Delegate listeners for menu items (:cascade) encapsulated by menus (dropdown menus)
82
+ - Make custom widget option method receive "default: hash key" instead of 2nd argument (adjusting scaffolding accordingly)
83
+ - Move about/preferences menu listeners from ShellProxy to DisplayProxy where they truly belong (adjusting scaffolding accordingly)
84
+
85
+ ## 0.7.8
86
+
87
+ - Fix verbiage for summary/description in scaffolding custom shell gems (change custom widget reference to custom shell)
88
+ - Scaffolding builds a proper binary for custom shell gems and includes it in executables in Rakefile
89
+ - Scaffolding adds about/preferences menu actions to apps/custom-shell-gems
90
+ - Make custom widget/shell options writable
91
+ - Support "dialog" Glimmer DSL keyword
92
+
93
+ ## 0.7.7
94
+
95
+ - Fix issue with scaffolding apps with dash in their name
96
+ - Make scaffolded custom shells launchable as standalone apps (native executables) too
97
+
98
+ ## 0.7.6
99
+
100
+ - Support text widget selection data-binding explicitly
101
+ - Make specs pass on Linux
102
+ - Maintain tree item expansion on data-binding related changes
103
+ - Make scaffolded apps launch from bin file not app file
104
+
105
+ ## 0.7.5
106
+
107
+ - Make :virtual a default tree SWT style
108
+ - Support Tree selection databinding (just like List)
109
+ - Support built-in Tree editing (i.e. editing tree item text)
110
+ - Support unregistering widget listeners
111
+ - Added tab item proxy dispose method that automatically unsets/disposes tab item inner control before disposing tab item itself
112
+
113
+ ## 0.7.4
114
+
115
+ - Have tree data-binding auto-embed models as tree item data
116
+ - TreeProxy#depth_first_search implementation
117
+ - Support read-only data-binding
118
+
119
+ ## 0.7.3
120
+
121
+ - Fix issue with rake tasks getting included twice
122
+ - Fix pack_same_size for shell_proxy
123
+ - Add pack_same_size to widget_proxy similar to that of shell_proxy
124
+
125
+ ## 0.7.2
126
+
127
+ - Fix issue with data binding a nested value with an on_read converter block not getting triggered if model value was nil
128
+ - Fix issue with glimmer command triggered rake tasks not honoring glimmer application local Rakefile settings
129
+
130
+ ## 0.7.1
131
+
132
+ - Fix crash issue with data-binding widget properties that are not supported in both directions
133
+ - Fix issue with scaffolding gems not having the right name
134
+ - Fix display of rdoc gem message on every glimmer app run
135
+ - Fix issues in closing a shell in girb
136
+ - Fix issue with Glimmer not clearing DSL Engine parent stacks when DSL interpretation raises exception
137
+ - Fix freezing issue upon logging observables and raising observable errors by overriding inspect on Observable to avoid printing nested tree of observers
138
+ - Added validation for shell widget parentage (accepting a shell or nil) in shell expression
139
+ - Support bidirectional data-binding of menu item selection (e.g. radio menu item)
140
+ - Make shell auto-activate on show with 0.25 delay
141
+
142
+ ## 0.7.0
143
+
144
+ - Expose `rake glimmer:package` rake task via `glimmer package` command
145
+ - Scaffold a Glimmer app: provide a standard structure for building a Glimmer app (models, views, and assets [images, videos, sounds])
146
+ - Scaffold a Glimmer custom shell
147
+ - Scaffold a Glimmer custom widget
148
+ - Scaffold a Glimmer custom widget gem
149
+ - Scaffold a Glimmer custom shell gem
150
+ - Extract Video widget into its own custom widget glimmer-video gem
151
+ - Extract Gladiator into its own custom shell glimmer-gladiator gem
152
+ - Support disable_dsl/enable_dsl/enabled_dsls=
153
+ - Minify CSS produced by CSS DSL
154
+ - Avoid using p in CSS DSL as it clashes with HTML p. Use pv instead (property value).
155
+ - Configure scaffold rspec_helper with glimmer-appropriate after block
156
+ - Move logger/import_swt_packages methods on Glimmer to Glimmer::Config
157
+ - Reorganize samples as hello and elaborate inside samples directory
158
+
159
+ ## 0.6.0
160
+
161
+ - Added multi-DSL support back to Glimmer
162
+ - Glimmer XML (HTML) DSL
163
+ - Glimmer CSS DSL
164
+ - Support mixing DSLs (e.g. SWT browser widget that has an XML text)
165
+ - Fixed Gladiator issue with not saving on quit
166
+ - Made color, rgb, and rgba SWT DSL static expressions instead of dynamic
167
+
168
+ ## 0.5.11
169
+
170
+ - Added file and url attribute writers to `video` widget
171
+ - Fix Gladiator issue with empty replace text field
172
+ - Fix Gladiator issue with opening empty file
173
+ - Support picking up VERSION and LICENSE.txt files in glimmer:package rake task
174
+ - Update packaging to build app DMG file with humanized name (having spaces for multiple words) and to autoset a default mac bundle ID
175
+
176
+ ## 0.5.10
177
+
178
+ - Fix video widget scrolling bar appearing issue
179
+ - Ensure on_about/on_preferences menu items are ignored on Windows
180
+ - Support SWT negative symbols postfixed by exclamation mark (e.g. :max! for no :max)
181
+ - Fix a bug in girb that made it not start anymore
182
+ - Fix a bug in Gladiator when jumping to line before a caret has been set
183
+
184
+ ## 0.5.9
185
+
186
+ - Allow discovery of custom widgets without namespace if there are no existing classes with same name
187
+ - Add filters (global listeners) to SWT Display
188
+ - ShellProxy #pack and #pack_same_size methods
189
+ - Added Gladiator (Glimmer Editor) sample and command
190
+
191
+ ## 0.5.8
192
+
193
+ - Support hooking into About and Preferences application menu items
194
+ - Support passing multiple SWT styles to a shell
195
+
196
+ ## 0.5.7
197
+
198
+ - Make mixing Glimmer into a class enable Glimmer DSL in both class instance scope and singleton class scope
199
+ - Remove app_name and app_version since they show up from plist file upon Mac packaging
200
+ - Change default packaged app name (shows up in top menu bar on Mac) to humanized form (e.g. MathBowling becomes Math Bowling)
201
+ - Provide README instructions and easy packaging options for signing apps (Glimmer::Package.javapackager_extra_args)
202
+
203
+ ## 0.5.6
204
+
205
+ - Add `rake glimmer:package:config` command to generate JAR config file
206
+ - Enabling passing extra args to javapackager via `JAVAPACKAGER_EXTRA_ARGS="..." rake glimmer:package`
207
+
208
+ ## 0.5.5
209
+
210
+ - shell widget args for SWT Display app name and app version
211
+ - Glimmer DSL colors lazy initialize and don't have an SWT Display object dependency anymore
212
+ - Glimmer DSL Menu/MenuItem support
213
+
214
+ ## 0.5.4
215
+
216
+ - Support custom data-binding property converters for nested/index data-binding
217
+ - Add glimmer command --log-level option
218
+ - Add glimmer command env var support
219
+ - Improvements to video widget (new methods and events to listen to)
220
+
221
+ ## 0.5.3
222
+
223
+ - Upgraded rake dependency to 10.1.0 to avoid conflicting dependencies
224
+ - Stopped disposing display upon closing a shell to allow reuse
225
+ - Support custom data-binding property converters
226
+ - Automatic re-packing of shell when layout or layout data is updated with data-binding
227
+
228
+ ## 0.5.2
229
+
230
+ - Support publishing a Glimmer app for the Mac (package as dmg file)
231
+ - Fix background_image widget property support to accept files in a JAR file
232
+ - Fix video widget support to accept files in a JAR file
233
+
234
+ ## 0.5.0
235
+
236
+ - Upgraded SWT to version 4.15
237
+ - Upgraded to JRuby 9.2.11.1
238
+ - Refurbished/refactored Glimmer code design and APIs getting a performance boost
239
+ - Scraped XML and multi-DSL support
240
+ - Renamed `#add_contents` to `#content`
241
+ - made it configurable to include SWT Packages or not
242
+ - Supported color keyword for standard colors
243
+ - Supported swt keyword for style
244
+ - Supported async_exec/sync_exec keywords in Glimmer DSL directly
245
+ - Changed "def body" to body { } in custom widget/shell
246
+ - Renamed commands to keywords in Glimmer
247
+ - Made Glimmer::Launcher automatically figure out dev mode when run as bin/glimmer locally
248
+ - Added LOAD_PATH explicitly
249
+
250
+ ## 0.4.9
251
+ - Added `org.eclipse.swt.custom` to default list of Glimmer SWT packages
252
+ - Added Custom Shell
253
+ - Made shell `#open` method remember if it was already opened before yet hidden, and just show the shell
254
+ - Implement shell `#hide` method
255
+ - Alias shell `#open` as `#show`
256
+ - Support CustomWidget/CustomShell Custom Property Observers
257
+ - Support on_*** observers on WidgetProxy's directly
258
+ - Support on_event_*** observers for SWT.constant event listeners (like show and hide)
259
+ - Added widget focus listener and data-binding support
260
+ - Support Glimmer DSL observe keyword and make it return observer registration object to unregister later on (unobserve)
261
+ - Support CustomWidget before_body and after_body hooks
262
+ - Make Glimmer DSL block provide parent Glimmer object (not SWT widget) as block argument
263
+ - Give widgets/custom-widgets ability to add content (properties/nested widgets) after construction via `#content` method
264
+ - Update setBackgroundImage to take an image path string for convenience (instead of an SWT image)
265
+
266
+ ## 0.4.8
267
+ - Video widget
268
+ - Girb fix to auto-include Glimmer
269
+
270
+ ## 0.4.7
271
+ - Fixed issues with custom widget support working for custom table, custom combo, custom list, parent of layout/layout-data, and on_*** observers
272
+ - Support for custom attributes/observers on a custom widget
273
+ - Display error message when using tab item widget NOT under a tab folder
274
+
275
+ ## 0.4.6
276
+ - Added SWT 4.14 library jars directly in project
277
+
278
+ ## 0.4.5
279
+ - SWT Browser widget support
280
+
281
+ ## 0.4.4
282
+ - Glimmer Custom Widget support
283
+ - Support --debug flag
284
+
285
+ ## 0.4.3
286
+ - Provide an easy way to make windows non-resizable
287
+ - Shorten needed :color_xyz symbols for known widget color properties like background and foreground to :xyz
288
+ - Friendly error message for passing a bad widget property font style (not normal, bold, italic)
289
+ - Friendly error message for passing a bad SWT style in general
290
+ - Support a single computed data binding as a string (not array)
291
+
292
+ ## 0.4.2
293
+ - Center window upon opening
294
+ - Set window minimum width (130) upon opening
295
+ - Accept SWT Shell constructor arguments
296
+
297
+ ## 0.4.1
298
+ - SWT Layout DSL support
299
+ - SWT Layout Data DSL support
300
+
301
+ ## 0.4.0
302
+ - Changed `BlockObserver` into `Observer.proc`
303
+ - Added `Observer#proc` to create simple block-based observers.
304
+ - Updated Observer API renaming `#update` to `#call`
305
+ - Renamed `R` prefixed classes (i.e. Ruby) to `G` prefixed classes (i.e. Glimmer) (e.g. `RWidget` becomes `WidgetProxy`)
306
+ - Namespaced all of Glimmer's classes and modules under `Glimmer`
307
+ - Added `display` Glimmer DSL keyword to instantiate an SWT Display
308
+ - Removed `String` and `Symbol` monkey-patching
309
+ - Accept standard color value passed to widget color properties as `String` or `Symbol`
310
+
311
+ ## 0.3.5
312
+ - Added font support to Glimmer DSL via name/height/style hash
313
+ - Added SWTProxy to easily build SWT constants (e.g. SWTProxy[:border] is SWT::BORDER )
314
+
315
+ ## 0.3.4
316
+ - Fixed color support/property converter support to work both in data-binding and in static property setting
317
+
318
+ ## 0.3.3
319
+ - Added color support to Glimmer DSL (rgb, rgba, and :color_*)
320
+
321
+ ## 0.3.2
322
+ - Automatically import SWT packages when including/extending Glimmer
323
+ - Automatically enhance objects as ObservableArray or ObservableModel when observing them
324
+
325
+ ## 0.3.1
326
+ - Fixed issue related to unnecessary tracking of parents in Observer
327
+
328
+ ## 0.3.0
329
+ - Automatic cleanup of observers upon updating values in data-binding (nested/indexed) or disposing a widget
330
+ - Change of APIs whereby Observer class is responsible for registering observers with observables on properties
331
+
332
+ ## 0.2.5
333
+ - Register a property type converter for `visible` property in widget binding, to ensure converting to boolean before setting in SWT widget.
334
+
335
+ ## 0.2.4
336
+ - Added nested indexed computed property data binding support (e.g. bind(person, 'addresses[0].street_count', computed_by: ['addresses[0].streets']))
337
+
338
+ ## 0.2.3
339
+ - Fixed nested indexed property data binding support for indexed leaf property (e.g. bind(person, 'names[1]'))
340
+
341
+ ## 0.2.2
342
+ - Added nested indexed property data binding support (e.g. bind(person, 'addresses[1].street'))
343
+
344
+ ## 0.2.0
345
+ - Upgraded to JRuby 9.2.10.0
346
+ - Fixed support for Windows & Linux
347
+ - Removed need to download SWT by including directly in gem for all platforms
348
+ - Simplified usage of glimmer command by preloading glimmer and not requiring setup
349
+
350
+ ## 0.1.11.SWT4.14
351
+ - Upgraded SWT to version 4.14
352
+
353
+ ## 0.1.11.470
354
+ - Nested property data binding support
355
+
356
+ ## 0.1.10.470
357
+ - Support Tree data-binding (one-way from model to tree)
358
+
359
+ ## 0.1.8.470
360
+ - girb support
361
+
362
+ ## 0.1.5.470
363
+ - Glimmer now uses a Ruby Logger in debug mode to provide helpful debugging information
364
+ - Glimmer has a smart new Ruby shell script for executing applications
365
+ - Glimmer now downloads swt.jar automatically when missing (e.g. 1st run) on Mac, Windows, and Linux, and for x86 and x86-64 CPU architectures.
@@ -0,0 +1,62 @@
1
+ # Contributing
2
+
3
+ Please follow [glimmer-dsl-swt/CONTRIBUTING.md](https://github.com/AndyObtiva/glimmer-dsl-swt/blob/master/CONTRIBUTING.md) too.
4
+
5
+ ## Pre-requisites
6
+
7
+ - MacOS
8
+ - Other pre-requisites mentioned in [README.md](https://github.com/AndyObtiva/glimmer/tree/master#pre-requisites)
9
+
10
+ ## Machine Setup
11
+
12
+ Follow these steps, running mentioned commands in the terminal:
13
+ - Fork project repo
14
+ - Ensure pre-requisites installed (installing JRuby via RVM on the Mac)
15
+ - cd into project again to activate RVM glimmer gemset
16
+ - gem install bundler
17
+ - bundle
18
+ - rake # runs specs (ensure they finish successfully)
19
+ - Once done, open a pull request with master branch.
20
+
21
+ ### rspec
22
+
23
+ `rake` or `rake spec` runs all specs.
24
+
25
+ To run a specific spec file, run:
26
+ ```
27
+ rake SPEC=spec_file_path
28
+ ```
29
+
30
+ To run a specific spec, run:
31
+ ```
32
+ rake SPEC=spec_file_path:line_number
33
+ ```
34
+
35
+ To display Glimmer debug information, add `GLIMMER_DEBUG=true`:
36
+ ```
37
+ rake SPEC=spec_file_path:line_number GLIMMER_DEBUG=true
38
+ ```
39
+
40
+ Note: make sure not to use the keyboard or mouse while tests are running since they bring up UI elements behind the scenes (invisible). This avoids fudging them and causing false test failures. If you get obscure failures related to focus of widgets, they are most likely false negatives. Just rerun the specs without touching the keyboard or mouse and they would pass if they are not really broken.
41
+
42
+ ### build
43
+
44
+ `rake build` builds the Glimmer gem under the `pkg` directory.
45
+
46
+ ### glimmer command
47
+
48
+ To run a glimmer sample, run local `bin/glimmer` command:
49
+ ```
50
+ bin/glimmer samples/hello_world.rb
51
+ ```
52
+
53
+ It will notify you that you are in development mode.
54
+
55
+ ### girb command
56
+
57
+ To experiment with glimmer syntax using `girb`, run local `bin/girb`:
58
+ ```
59
+ bin/girb
60
+ ```
61
+
62
+ It will notify you that you are in development mode.
@@ -1,4 +1,4 @@
1
- Copyright (c) 2011-2020 Andy Maleh
1
+ Copyright (c) 2007-2020 Andy Maleh
2
2
 
3
3
  Permission is hereby granted, free of charge, to any person obtaining
4
4
  a copy of this software and associated documentation files (the
@@ -0,0 +1,35 @@
1
+ # Glimmer Process (Beyond Agile)
2
+
3
+ **Glimmer Process** is the lightweight software development process used for building [Glimmer](https://github.com/AndyObtiva/glimmer) libraries and [Glimmer](https://github.com/AndyObtiva/glimmer) apps, which goes beyond Agile, rendering all Agile processes obsolete. **Glimmer Process** is simply made up of 7 guidelines to pick and choose as necessary until software development needs are satisfied. Not all guidelines need to be incorporated into every project, but it is still important to think through every one of them before ruling any out. Guidelines can be followed in any order.
4
+
5
+ ## GPG (Glimmer Process Guidelines):
6
+ - **Requirements Gathering**: Spend no more than a few hours writing the initial requirements you know from the business owner, gathering missing requirements, and planning to elicit more requirements from users, customers, and stakeholders. Requirements are not set in stone, but serve as a good starting point in understanding what a project is about. After initial release, only document small tasks going forward.
7
+ - **Software Architecture and Design Diagrams**: Perform software architecture and design activities as necessary by analyzing requirements and creating diagrams.
8
+ - **Initial Release Plan**: This guideline's motto is "Plans are Nothing. Planning is Everything" (said by Dwight D. Eisenhower) because the initial release plan is not set in stone and might change completely, but is still invaluable in launching a new project forward. Consider including alpha releases (for internal testing) and beta releases (for customer testing).
9
+ - **Small Releases**: Develop and release in small increments. Do not release more than 3-weeks worth of work, preferring releases that are shorter than a week worth of work whenever possible. Break releases down. If you need to support multiple platforms, release for a platform at a time. If a feature includes a number of other features, then release them one by one instead of all at once. If a feature involves multiple options, release the default version first, and then release extra options later.
10
+ - **Usability Testing**: Make sure to observe a user using your software the first few releases or when releasing critical brand new unproven features. Ask them to complete a list of goals using the software, but do not help them to complete them unless they get very stuck. Write down notes silently while observing them use your software. Once done with usability testing, you may then ask further questions about any of the notes you wrote down, and afterwards add the notes as feature enhancements and bug fixes. Implement them and then do another usability test with the improvements in place. Repeat as necessary only.
11
+ - **Automated Tests**: Cover sensitive parts of the code with automated tests at the appropriate level of testing needed. Run tests in a continuous integration server.
12
+ - **Refactoring**: Simplify code, eliminate code duplication, improve code organization, extract reusable components, and extract reusable libraries at every opportunity possible.
13
+
14
+ --
15
+
16
+ Copyright (c) 2020 Andy Maleh
17
+
18
+ Permission is hereby granted, free of charge, to any person obtaining
19
+ a copy of this software and associated documentation files (the
20
+ "Software"), to deal in the Software without restriction, including
21
+ without limitation the rights to use, copy, modify, merge, publish,
22
+ distribute, sublicense, and/or sell copies of the Software, and to
23
+ permit persons to whom the Software is furnished to do so, subject to
24
+ the following conditions:
25
+
26
+ The above copyright notice and this permission notice shall be
27
+ included in all copies or substantial portions of the Software.
28
+
29
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
30
+ EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
31
+ MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
32
+ NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
33
+ LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
34
+ OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
35
+ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.