servatrice/oracle/src/qt-json
ctrlaltca ed70099e36 Rework of the card database, xml format and oracle parser (#3511)
* CardDB: merge all card properties in a new structure

* Pre Json parser changes

 * Cockatrice: use qt's builtin json support
 * Move qt-json src dir from cockatrice to oracle
 * Add dummy cockatricexml4 parser (yet to be implemented)

* Implement a new parser and xml format

 * cockatricexml4: new xml parser following the "generic properties hash" pattern;
 * oracleimporter: refactor the parsing code to better adapt to cockatricexml4; rewrote split cards parsing
 * carddb: change "colors" from a stringlist to a string
 * carddb: move the getMainCardType() method to the cockatricexml3 parser
 *

* CardInfo: show all properties (stil missing: nice name + translation)

* Rework the "add related card" feature so that it doesn't change the card name in the carddb

Also, fix token count display

* Picture loader: Added support for transform cards

* Fix side information for flip cards

Mtgjson uses side a/b for flip cards, while scryfall doesn't

* Pictureloader: dynamic tag resolution from card properties

Examples old => new
* !cardid! => !set:muid!
* !uuid!   => !set:uuid!
* !collectornumber! => !set:num!
New examples:
 * !prop:type!
 * !prop:manacost!

* Start moving mtg-related property names to a specific file

* Clangify

* Fix tests

* Make gcc an happy puppy

* Revert "Make gcc an happy puppy"

This reverts commit 446ec5f27516c4d3b32dbfc79557f4827c5c5bdf.

* Some gcc fixes

* Share set list between different db parsers, so they won't overwrite one each other

* All glory to the hypnoclangifier!

* Fix test compilation

* Cleanup edited files in the prior PR. (#3519)

* Cleanup edited files in the prior PR.

Signed-off-by: Zach Halpern <ZaHalpern+github@gmail.com>

* Fix includes

Signed-off-by: Zach Halpern <ZaHalpern+github@gmail.com>

* Update carddatabase.h
2019-01-23 18:17:10 -05:00
..
AUTHORS Rework of the card database, xml format and oracle parser (#3511) 2019-01-23 18:17:10 -05:00
json.cpp Rework of the card database, xml format and oracle parser (#3511) 2019-01-23 18:17:10 -05:00
json.h Rework of the card database, xml format and oracle parser (#3511) 2019-01-23 18:17:10 -05:00
LICENSE Rework of the card database, xml format and oracle parser (#3511) 2019-01-23 18:17:10 -05:00
README Rework of the card database, xml format and oracle parser (#3511) 2019-01-23 18:17:10 -05:00

########################################################################
1. INTRODUCTION

The Json class is a simple class for parsing JSON data into a QVariant 
hierarchies. Now, we can also reverse the process and serialize
QVariant hierarchies into valid JSON data.


########################################################################
2. HOW TO USE

The parser is really easy to use. Let's say we have the following 
QString of JSON data:

------------------------------------------------------------------------
{
   "encoding" : "UTF-8",
   "plug-ins" : [
      "python",
      "c++",
      "ruby"
   ],
   "indent" : {
      "length" : 3,
      "use_space" : true
   }
}
------------------------------------------------------------------------

We would first call the parse-method:

------------------------------------------------------------------------
//Say that we're using the QtJson namespace
using namespace QtJson;
bool ok;
//json is a QString containing the JSON data
QVariantMap result = Json::parse(json, ok).toMap();

if(!ok) {
    qFatal("An error occurred during parsing");
    exit(1);
}
------------------------------------------------------------------------

Assuming the parsing process completed without errors, we would then
go through the hierarchy:

------------------------------------------------------------------------
qDebug() << "encoding:" << result["encoding"].toString();
qDebug() << "plugins:";

foreach(QVariant plugin, result["plug-ins"].toList()) {
    qDebug() << "\t-" << plugin.toString();
}

QVariantMap nestedMap = result["indent"].toMap();
qDebug() << "length:" << nestedMap["length"].toInt();
qDebug() << "use_space:" << nestedMap["use_space"].toBool();
------------------------------------------------------------------------

The previous code would print out the following:

------------------------------------------------------------------------
encoding: "UTF-8"
plugins:
  - "python"
  - "c++"
  - "ruby"
length: 3
use_space: true
------------------------------------------------------------------------

To write JSON data from Qt object is as simple as parsing:

------------------------------------------------------------------------
QVariantMap map;
map["name"] = "Name";
map["age"] = 22;

QByteArray data = Json::serialize(map);
------------------------------------------------------------------------

The byte array 'data' contains valid JSON data:

------------------------------------------------------------------------
{
        name: "Luis Gustavo",
        age: 22,
}
------------------------------------------------------------------------


########################################################################
4. CONTRIBUTING

The code is available to download at GitHub. Contribute if you dare!