{"id":13658148,"url":"https://github.com/dmccuskey/DMC-Corona-Library","last_synced_at":"2025-04-24T08:31:32.124Z","repository":{"id":1593089,"uuid":"2116111","full_name":"dmccuskey/DMC-Corona-Library","owner":"dmccuskey","description":"Development library for Corona SDK","archived":false,"fork":false,"pushed_at":"2015-05-20T03:07:38.000Z","size":5705,"stargazers_count":82,"open_issues_count":7,"forks_count":27,"subscribers_count":21,"default_branch":"master","last_synced_at":"2024-11-10T11:39:25.958Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":"docs.davidmccuskey.com/","language":"Lua","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/dmccuskey.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null}},"created_at":"2011-07-28T00:46:21.000Z","updated_at":"2021-08-14T13:31:39.000Z","dependencies_parsed_at":"2022-07-11T03:47:29.802Z","dependency_job_id":null,"html_url":"https://github.com/dmccuskey/DMC-Corona-Library","commit_stats":null,"previous_names":[],"tags_count":42,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/dmccuskey%2FDMC-Corona-Library","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/dmccuskey%2FDMC-Corona-Library/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/dmccuskey%2FDMC-Corona-Library/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/dmccuskey%2FDMC-Corona-Library/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/dmccuskey","download_url":"https://codeload.github.com/dmccuskey/DMC-Corona-Library/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":250592008,"owners_count":21455482,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":[],"created_at":"2024-08-02T05:00:56.796Z","updated_at":"2025-04-24T08:31:28.335Z","avatar_url":"https://github.com/dmccuskey.png","language":"Lua","funding_links":[],"categories":["Lua"],"sub_categories":[],"readme":"**Note: _Version 2.0 of DMC Corona Lib is close to being released so I would think about using that version instead. Right now those changes are in branch `dmc_corona-2.x`_**\n\n**All of the individual dmc modules have been moved to their own repos. Current examples can be found there too.** \n\n# Overview #\n\n\nThe DMC Corona Library is collection of advanced modules and utilities for use with the Corona SDK. It has grown from the needs of several medium- to large-sized projects focused primarily on business-type apps, though it can be used for any size or type of application.\n\nThe module architecture is heavily object-oriented, but each module can be used with any style of coding. The OO-nature ensures that the modules can be easily re-used or modified as necessary.\n\nAs the library has grown, so has their dependency on each other, so it is intended to be used as a whole. That said, the architecture allows it to be split into different folders to be organized as you wish.\n\n\n**Documentation \u0026 Examples**\n\nThere are examples and documentation available for the modules. Look in the `examples` folder for available examples which can be run directly in the Corona SDK. Documentation is online at: [docs.davidmccuskey.com](http://docs.davidmccuskey.com/display/docs/DMC+Corona+Library)\n\n\n**Questions or Comments**\n\nIf you have questions or comments you can either (preferred order):\n* send me an email: corona-lib at davidmccuskey com\n* send a PM @ coronalabs.com: @dmccuskey\n* post an issue here on github\n* post to the Corona forums: http://forums.coronalabs.com\n\n\n**Issues**\n\nIf you discover any bugs, please post them here on github: [dmc-corona-library issues](https://github.com/dmccuskey/DMC-Corona-Library/issues)\n\n\n\n## Note ##\n\nA huge re-org is now complete and I have touched every module in the library and then some. Be careful. =)\n\nFor those who are upgrading from an older version, the library folder has been renamed from `dmc_library` to `dmc_corona`, since there is now another library \u0026ndash; `dmc_lua`.\n\n\n\n## Installation \u0026 Use ##\n\nFor easy installation, copy the following items at the root-level of your Corona project:\n\n* The entire `dmc_corona` folder\n* `dmc_corona_boot.lua`\n* `dmc_corona.cfg`\n\nWith this setup, modules should be imported like so:\n\n```lua\nlocal module = require 'dmc_corona.\u003cmodule_name\u003e'\n```\n\n\nThe library has been designed to give a lot of flexibility where it is stored in your project. For more information regarding installation, visit how to [install the library](http://docs.davidmccuskey.com/display/docs/Install+the+DMC+Corona+Library).\n\n\n\n## Current Modules ##\n\n* [dmc_autostore](#dmc_autostore)\n\n  Automatic JSON storage for your app. [Read more...](#dmc_autostore)\n\n* [dmc_buttons](#dmc_buttons)\n\n  *This module has been deprecated.* Please use the buttons from [dmc-corona-widgets](https://github.com/dmccuskey/dmc-corona-widgets).  [Read more...](#dmc_buttons)\n\n* [dmc_dragdrop](#dmc_dragdrop)\n\n  Quick and powerful drag and drop functionality. [Read more...](#dmc_dragdrop)\n\n* [dmc_facebook](#dmc_facebook)\n\n  A better behaved Facebook connector. [Read more...](#dmc_facebook)\n\n* [dmc_files](#dmc_files)\n\n  Read, parse, or save differenct file data. [Read more...](#dmc_files)\n\n* [dmc_kolor](#dmc_kolor)\n\n  Make Corona SDK G1 code run in G2. [Read more...](#dmc_kolor)\n\n* [dmc_kompatible](#dmc_kompatible)\n\n  Make Corona SDK G1 code run in G2. [Read more...](#dmc_kompatible)\n\n* [dmc_kozy](#dmc_kozy) - *Comfortable Coding in Corona SDK*\n\n  Brings back old Corona G1 functionality and gives new capabilities for G2. [Read more...](#dmc_kozy)\n\n* [dmc_language](#dmc_language) - *i18n \u0026 i10n like a pro !*\n\n  Coming soon ... !\n\n* [dmc_metadb](#dmc_metadb) - *A SQL DB for those who hate SQL*\n\n  Coming soon ... !\n\n* [dmc_megaphone](#dmc_megaphone) - *Global inter-app communication*\n\n  Coming soon ... !\n\n* [dmc_mockserver](#dmc_mockserver) - *\"Save-your-bacon\" server integration*\n\n  Emulate a data server (eg REST) in your app - great for testing, API integration, etc. [Read more...](#dmc_mockserver)\n\n* [dmc_navigator](#dmc_navigator) - *Screen transitions for the modern-day*\n\n  Coming soon ... !\n\n* [dmc_nicenet](#dmc_nicenet) - *Your server's best friend*\n\n  Makes client apps behave when sending data requests to the server. [Read more...](#dmc_nicenet)\n\n* [dmc_objects](#dmc_objects)\n\n  Advanced OOP for Lua or the Corona SDK. [Read more...](#dmc_objects)\n\n* [dmc_patch](#dmc_patch) - *Supercharge Lua with more awesome !*\n\n  Mixin beneficial functionality into the Lua language. [Read more...](#dmc_patch)\n\n* [dmc_performance](#dmc_performance)\n\n  Timed performance testing for your app. [Read more...](#dmc_performance)\n\n* [dmc_sockets](#dmc_sockets) -  *Enable your asynchronous event-driven networking fun !*\n\n  Buffered, non-blocking, callback- or event-based socket library for clients. [Read more...](#dmc_sockets)\n\n* [dmc_states](#dmc_states) - *Shiny State Machines for your apps*\n\n  Implement the State Machine design pattern with your objects. [Read more...](#dmc_states)\n\n* [dmc_touchmanager](#dmc_touchmanager)\n\n  True multi-touch capabilities for the Corona SDK. [Read more...](#dmc_touchmanager)\n\n* [dmc_trajectory](#dmc_trajectory)\n\n  Ballistic (parabolic) trajectory for objects. [Read more...](#dmc_trajectory)\n\n* [dmc_utils](#dmc_utils)\n\n  Miscellaneous utility functions for tables, web, etc. [Read more...](#dmc_utils)\n\n* [dmc_wamp](#dmc_wamp)\n\n  WAMP (http://wamp.ws) module for the Corona SDK. [Read more...](#dmc_wamp)\n\n* [dmc_websockets](#dmc_websockets)\n\n  WebSocket module for the Corona SDK. [Read more...](#dmc_websockets)\n\n\n\u003ca name=\"dmc_autostore\"\u003e\u003c/a\u003e\n### Module: dmc_autostore ###\n\nThis module contains a data-storage manager which makes saving application data painlessly easy, simply because it doesn't have an API! Instead, any modifications which you make to your data structure will trigger the save mechanism. Super simple!!\n\n`dmc_autostore` has these features:\n\n* **allows saving of structured data (ie, JSON), not just key/value pairs**\n\n  Saving application or game data can get ugly with key/value storage. `dmc_autostore` saves data with a flexible JSON structure which can be modified on-the-fly.\n\n* **simplicity in data storage -- there is NO API !!**\n\n  `dmc_autostore` saves modifications to data *automatically*. There is no API to learn in order to load or save data. Any change to your data structure will trigger the save mechanism.\n\n* **a best-friend for object-oriented code**\n\n  Every object can be given a reference to a small part of the \"magic\" data-structure which can be that object's data area. The object can only write to that part of the structure, yet any changes to that small part trigger the save mechanism for the entire thing.\n\n* **AutoStore is configurable**\n\n\tThere are several parameters available to configure, the most important are the two timers which regulate how quickly data modifications will be written to storage.\n\n\n**Documentation**\n\nhttp://docs.davidmccuskey.com/display/docs/dmc_autostore.lua\n\n\n**Examples**\n\nThere is a detailed example in the folder `examples/dmc_autostore/` which shows how to use the `dmc_autostore` library.\n\n\n\n\u003ca name=\"dmc_buttons\"\u003e\u003c/a\u003e\n### Module: dmc_buttons ###\n\nThis module has been re-written and added to the new widget library. Please use the buttons there [dmc-corona-widgets](https://github.com/dmccuskey/dmc-corona-widgets)  [Read more...](#dmc_buttons)\n\n\n\n\u003ca name=\"dmc_dragdrop\"\u003e\u003c/a\u003e\n### Module: dmc_dragdrop ###\n\nEasily incorporate powerful drag and drop functionality into your app.\n\n\n**Documentation**\n\nhttp://docs.davidmccuskey.com/display/docs/dmc_dragdrop.lua\n\n\n**Examples**\n\nThere is a detailed example in the folder `examples/dmc_dragdrop/` which shows how to use the `dmc_dragdrop` library.\n\n\n\n\u003ca name=\"dmc_facebook\"\u003e\u003c/a\u003e\n### Module: dmc_facebook ###\n\nA better behaved, easier to setup Facebook connector.\n\n* Can be used for kiosk-mode apps (many people using it on one device)\n\n* Easier to setup\n\n* Login flow *doesn't leave application* !\n\n\n**Documentation**\n\nhttp://docs.davidmccuskey.com/display/docs/dmc_facebook.lua\n\n\n**Examples**\n\nThere is a detailed example in the folder `examples/dmc_facebook/` which shows how to use the `dmc_facebook` library.\n\n\n\n\u003ca name=\"dmc_files\"\u003e\u003c/a\u003e\n### Module: dmc_files ###\n\nRead and save different files, including JSON, etc.\n\n* Can read in config files, including a customizable format\n\n\n**Documentation**\n\nhttp://docs.davidmccuskey.com/display/docs/dmc_files.lua\n\n\n**Examples**\n\nThere is a detailed example in the folder `examples/dmc_files/` which shows how to use the `dmc_files` library.\n\n\n\n### Module: dmc_kolor ###\n\n`dmc_kolor` is a Lua module which brings back the traditional ways of describing colors using RGBA values ( eg, 255, 180, 34 ) instead of the new way using percentage values (eg, 1, .5, .25 ) brought about by the change to Graphics 2.0.\n\nIt also gives additional functionality like the ability to use names when setting object colors like \"Aqua\" or \"Red\". The module even includes color tables for all of the X11 color definitions.\n\n\n**Documentation**\n\nhttp://docs.davidmccuskey.com/display/docs/dmc_kolor.lua\n\n\n\n\u003ca name=\"dmc_kompatible\"\u003e\u003c/a\u003e\n### Module: dmc_kompatible ###\n\nA module which allows your legacy Corona Graphics 1.0 code to run in Corona Graphics 2.0.\n\n\n**Documentation**\n\nQuick Guide: http://docs.davidmccuskey.com/display/docs/dmc_kompatible.lua\n\n**Examples**\n\nThere are examples in the folder `examples/dmc_kompatible/` which show how to use the `dmc_kompatible` library.\n\n\n\n\u003ca name=\"dmc_kozy\"\u003e\u003c/a\u003e\n### Module: dmc_kozy ###\n\nBrings back old Corona G1 functionality and gives new capabilities for G2.\n\n\n**Documentation**\n\nhttp://docs.davidmccuskey.com/display/docs/dmc_kozy.lua\n\n\n**Examples**\n\nThere is a detailed example in the folder `examples/dmc_kozy/` which shows how to use the `dmc_kozy` library.\n\n\n\n\u003ca name=\"dmc_mockserver\"\u003e\u003c/a\u003e\n### Module: dmc_mockserver ###\n\nEmulate a data server (eg REST) in your app - great for testing, API integration, etc. If you make network requests to servers (and the API isn't ready) then you want this app. You want it anyway !\n\n* Extremely valuable module when building an app while API is being built too.\n\n  Create full network requests ! (images, data, etc) Your app doesn't know the difference. Plus, as the API is completed, you can allow those requests through for integration, while the other requests are still being answered by Mock Server\n\n* Also can emulate slow network connections, which is crucial for testing asyncronous code.\n\n\n**Documentation**\n\nhttp://docs.davidmccuskey.com/display/docs/dmc_mockserver.lua\n\n\n**Examples**\n\nThere is a detailed example in the folder `examples/dmc_mockserver/` which shows how to use the `dmc_mockserver` library.\n\n\n\n### Module: dmc_nicenet ###\n\n`dmc_nicenet` is a Lua module used for communication with a network server. It gets its name because it is meant to help an application be better behaved with its network requests.\n\nIt is intended to be a drop-in replacement for the standard Corona Network library, so you automatically get some great benefits without changing any code.\n\nThe module will help with:\n\n* **Request Queue**\n\n\tA queue ensures that your app won't overrun your server with data requests. You get this for free !\n\n* **Mock Server Hook**\n\n\tYou can add a mock server for developent and testing. You can get this by barely modifying your code.\n\n* **Priority**\n\n  You can dynamically set priority for any request still in the queue. All requests can automatically be assigned a default priority value. This is more advanced, so data requests must be written with this in mind.\n\n\n**Documentation**\n\nhttp://docs.davidmccuskey.com/display/docs/dmc_nicenet.lua\n\n\n\n\u003ca name=\"dmc_objects\"\u003e\u003c/a\u003e\n### Module: dmc_objects ###\n\nThis file contains several methods and object classes which together form an object-oriented framework to use when programming in Lua with Corona SDK.  _**Though it's not just for Corona - the top-level object classes can be used when developing software in plain Lua.**_\n\nWhen doing OOP, these classes provide:\n\n* **a classical model of object oriented programming**\n\n\t`dmc_objects` is structured after the classical inheritance model, thus is easy to learn and use by people with varying levels of experience. This also helps give a solid organizational structure when using a language that is relatively unstructured.\n\n* **a simple structure for doing OOP in Lua and Corona SDK**\n\n\tThe framework also abstracts the details of doing inheritance in Lua so that both experienced and inexperienced users of the language can focus on the code being written, and not the gory details of the language - ie, there is no need to learn about Lua `metatables` until you want to know. All of that is taken care of so you can get things done.\n\n* **fast execution through structure and optimizations**\n\n\tBecause of the way Lua performs lookups for properties and methods, there can be a small performance penalty when using objects with many levels of inheritance. The solution for this is to get an object's properties and methods as close to the object as possible (ie, ON the object). `dmc_objects` does this for you so you can get the execution speed without having to sacrifice the benefit of code organization provided by object-oriented programming.\n\n* **a mechanism for getters and setters**\n\n\tThe object model in `dmc_objects` was built to provide getters and setters in your object classes ! Go ahead, you can say it, \"Yay, getters and setters !!!\"\n\n* **superClass() and superCall()**\n\n\tAmong other object-related methods, `dmc_objects` has `superClass()` to access an object's parent, and `superCall()` which allows you to call an overridden method on a super class !\n\n* **an API similar to Corona display objects**\n\n\tThe core Corona Object API and Corona Physics Body API have been added to the pertinent base classes in `dmc_objects`. This allows you to treat your custom objects as if they were native Corona Display Objects \u0026dagger;.\n\n* **object printing support**\n\n\tThere is flexible, built-in support to print objects during debugging.\n\n\n\u0026dagger; You can treat them like Corona objects 99.5% of the time. Don't worry, the other 0.5% is easy to understand. :)\n\n\n**Documentation**\n\nhttp://docs.davidmccuskey.com/display/docs/dmc_objects.lua\n\n\n**Examples**\n\nThere are several examples in the folder `examples/dmc_objects/` which show how to setup OOP structures in Lua. Among these are some original Corona examples which have been modified to use `dmc_objects` and fit into an OOP style of programming. These will make it easier to see how to move your projects to be object-oriented as well.\n\n\n\n\u003ca name=\"dmc_performance\"\u003e\u003c/a\u003e\n### Module: dmc_performance ###\n\nTimed performance testing for your app.\n\n* Profile methods, functions, library loading, etc. See where your app is slow.\n\n* Prints out memory status, etc.\n\n\n**Documentation**\n\nQuick Guide: http://docs.davidmccuskey.com/display/docs/dmc_performance.lua\n\n\n**Examples**\n\nThere are examples in the folder `examples/dmc_performance/` which show how to use the `dmc_performance` library.\n\n\n\n\u003ca name=\"dmc_sockets\"\u003e\u003c/a\u003e\n### Module: dmc_sockets ###\n\n`dmc_sockets` is a buffered, callback- or event-based socket library for clients which has two-flavors of sockets - asyncronous with callbacks or syncronous with events (non-blocking). In reality it's just a thin layer over the built-in socket library *LuaSockets*, but gives several additional benefits for your networking pleasure:\n\n* **Callback- or event-based sockets**\n\n\tThe event-based socket is more syncronous and the callback-based is asyncronous in nature, but they're both non-blocking. Create that event-based app like you've always wanted to !\n\n* **Dynamic buffer**\n\n\tAny data coming in is automatically put into a buffer. At any point you can find out how many bytes are available for reading. Plus, the socket has a method `unreceive()`, which can be used to *put back* data even after it's been read.\n\n* **Re-connectable**\n\n\t`dmc_sockets` sockets have additional functionality to easily re-build or re-connect closed or dropped connections. This is unlike ordinary sockets which can't be re-used once they are closed !\n\n* **Socket-Check Throttling**\n\n  How often the module checks for new data is totally configurable. If you want more cycles for your app, then turn up the throttling !\n\n\n**Documentation**\n\nhttp://docs.davidmccuskey.com/display/docs/dmc_sockets.lua\n\n\n**Examples**\n\nExamples which show how to use the `dmc_sockets` library can be found in the folder `examples/dmc_sockets/`.\n\n\n\n\u003ca name=\"dmc_states\"\u003e\u003c/a\u003e\n### Module: dmc_states ###\n\n`dmc_states` is a Lua module which helps to implement the State Machine design pattern. It can be used in Lua projects outside of Corona.\n\n\n**Documentation**\n\nhttp://docs.davidmccuskey.com/display/docs/dmc_states.lua\n\n\n\n\u003ca name=\"dmc_touchmanager\"\u003e\u003c/a\u003e\n### Module: dmc_touchmanager ###\n\nThis module controls how touch events are processed within an application made with the Corona SDK. Unlike the default (broken?) multi-touch behavior in the Corona SDK, it will allow you to track any number of events (up to device limit) and un/set focus any one of them to or from an object.\n\n\n**Documentation**\n\nhttp://docs.davidmccuskey.com/display/docs/dmc_touchmanager.lua\n\n\n**Examples**\n\nThere are examples in the folder `examples/dmc_touchmanager/` which show how to use the `dmc_touchmanager` library.\n\n\n\n\u003ca name=\"dmc_trajectory\"\u003e\u003c/a\u003e\n### Module: dmc_trajectory ###\n\nThe main intent of this module is to provide an easy way to have objects follow ballistic trajectories. The library module has a single, simple method to do this, but it also has other methods which can be used to obtain raw trajectory calculations if desired.\n\n\n**Documentation**\n\nQuick Guide: http://docs.davidmccuskey.com/display/docs/dmc_trajectory.lua\n\n\n**Examples**\n\nThere are examples in the folder `examples/dmc_trajectory/` which show how to use the `dmc_trajectory` library.\n\n\n\n\u003ca name=\"dmc_utils\"\u003e\u003c/a\u003e\n### Module: dmc_utils ###\n\nThis module is an ever-changing list of helpful utility functions. Ever-changing because, over time, some functions have been removed and put into their own modules, eg `dmc_performance`. Here are some of the groupings at the moment:\n\n* Audio Functions - getAudioChannel()\n* Callback Functions - createObjectCallback(), getTransitionCompleteFunc()\n* Date Functions - calcTimeBreakdown()\n* Image Functions - imageScale()\n* String Functions - split(), stringFormatting()\n* Table Functions - destroy(), extend(), hasOwnProperty(), print(), propertyIn(), removeFromTable(), shuffle(), tableSize(), tableSlice(), tableLength()\ncopy one table into another ( similar to jQuery extend() )\n* Web Functions - parseQuery(), createQuery()\n\n\n**Documentation**\n\nAPI: http://docs.davidmccuskey.com/display/docs/dmc_utils.lua\n\n\n**Examples**\n\nAs of yet there are no specific examples for `dmc_utils`, however many of the other `dmc_library` modules make use of it. You can check them for examples.\n\n\n\n\u003ca name=\"dmc_wamp\"\u003e\u003c/a\u003e\n### Module: dmc_wamp ###\n\nThis module implements WAMP ([Web Application Messaging Protocol](http://wamp.ws))for the Corona SDK.\n\n* Lua module for WAMP _clients_ in Corona SDK\n* Supports [WAMP v2](https://github.com/tavendo/WAMP/blob/master/spec/README.md])\n* Supports roles `Caller` and `Subscriber`\n* Supports TLS (secure WebSocket) (coming soon)\n* Supports JSON serializer\n\n**Documentation**\n\nQuick Guide: http://docs.davidmccuskey.com/display/docs/dmc_wamp.lua\n\n**Examples**\n\nThere are examples in the folder `examples/dmc_wamp/` which show how to use the `dmc_wamp` module.\n\n\n\n\u003ca name=\"dmc_websockets\"\u003e\u003c/a\u003e\n### Module: dmc_websockets ###\n\nThis module implements WebSockets (RFC6455) for the Corona SDK. The core modules are written in pure-Lua, so could be used with any other enviroment with some work.\n\n* **Follows the web browser API implemenation**\n\n\tThis makes it very easy to use.\n\n**Documentation**\n\nQuick Guide: http://docs.davidmccuskey.com/display/docs/dmc_websockets.lua\n\n**Examples**\n\nThere are examples in the folder `examples/dmc_websockets/` which show how to use the `dmc_websockets` module.\n\n\n\n\n\n## License ##\n\n(The MIT License)\n\nCopyright (C) 2011-2014 David McCuskey. All Rights Reserved.\n\nPermission is hereby granted, free of charge, to any person obtaining a copy of\nthis software and associated documentation files (the \"Software\"), to deal in the\nSoftware without restriction, including without limitation the rights to use, copy,\nmodify, merge, publish, distribute, sublicense, and/or sell copies of the Software,\nand to permit persons to whom the Software is furnished to do so, subject to the\nfollowing conditions:\n\nThe above copyright notice and this permission notice shall be included in all copies\nor substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED,\nINCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR\nPURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE\nFOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR\nOTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER\nDEALINGS IN THE SOFTWARE.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fdmccuskey%2FDMC-Corona-Library","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fdmccuskey%2FDMC-Corona-Library","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fdmccuskey%2FDMC-Corona-Library/lists"}