From 1cb5700a001690f390d82fbc39dfccaeed84a485 Mon Sep 17 00:00:00 2001 From: twanvl Date: Fri, 21 Dec 2007 18:14:51 +0000 Subject: [PATCH] Added compact syntax for package dependencies: "depends on: package version" git-svn-id: svn://svn.code.sf.net/p/magicseteditor/code/trunk@777 0fc631ac-6414-0410-93d0-97cfa31319b6 --- doc/type/dependency.txt | 6 +++++- src/mse.vcproj | 6 ++++++ src/util/io/package.cpp | 22 +++++++++++++++++++--- 3 files changed, 30 insertions(+), 4 deletions(-) diff --git a/doc/type/dependency.txt b/doc/type/dependency.txt index b65a7615..774570aa 100644 --- a/doc/type/dependency.txt +++ b/doc/type/dependency.txt @@ -5,13 +5,17 @@ Data type: dependency [[type:Package]]s can depend on other packages. For example a [[type:stylesheet]] needs a particular version of the corresponding [[type:game]] package, and maybe some additional [[type:include]]s. ---Proeprties-- +--Properties-- ! Property Type Description | @package@ [[type:string]] Filename of the package this package depends on. | @version@ [[type:version]] Minimal version of that package that is required. +The two properties can also be written on a single line, separated by a space (see the examples). + --Example-- The magic-new stylesheet depends on a particular version of the game file: >depends on: > package: magic.mse-game > version: 2007-06-06 +This can be written more compactly as +>depends on: magic.mse-game 2007-06-06 diff --git a/src/mse.vcproj b/src/mse.vcproj index 8c2f38be..c147da98 100644 --- a/src/mse.vcproj +++ b/src/mse.vcproj @@ -615,6 +615,12 @@ + + + + diff --git a/src/util/io/package.cpp b/src/util/io/package.cpp index 13ee9c5a..a5d5d56a 100644 --- a/src/util/io/package.cpp +++ b/src/util/io/package.cpp @@ -436,9 +436,25 @@ String Package::toStandardName(const String& name) { // ----------------------------------------------------------------------------- : Packaged -IMPLEMENT_REFLECTION(PackageDependency) { - REFLECT(package); - REFLECT(version); +template <> void Reader::handle(PackageDependency& dep) { + if (!isComplex()) { + handle(dep.package); + size_t pos = dep.package.find_first_of(_(' ')); + if (pos != String::npos) { + dep.version = Version::fromString(dep.package.substr(pos+1)); + dep.package = dep.package.substr(0,pos); + } + } else { + handle(_("package"), dep.package); + handle(_("version"), dep.version); + } +} +template <> void Writer::handle(const PackageDependency& dep) { + if (dep.version != Version()) { + handle(dep.package + _(" ") + dep.version.toString()); + } else { + handle(dep.package); + } } // note: reflection must be declared before it is used