UserAgent: Mozilla/5.0 (Macintosh; U; PPC Mac OS X Mach-O; en-US; rv:1.7.8) Gecko/20050511 Firefox/1.0.4 IP: 198.54.202.218 URI: http://wesnoth.slack.it/?PreprocessorRef - - - - - Index: PreprocessorRef =================================================================== RCS file: /home/wesnoth/cvsroot/wikiroot/PreprocessorRef,v retrieving revision 1.18 diff -u -r1.18 PreprocessorRef --- PreprocessorRef 2 Jul 2005 17:24:29 -0000 1.18 +++ PreprocessorRef 3 Jul 2005 16:00:16 -0000 @@ -1,16 +1,17 @@ -||the WML preprocessor|| +||The WML preprocessor|| Wesnoth loads just one configuration file directly: ||data/game.cfg||. However the WML preprocessor allows game.cfg to load in more files. -Whenever a WML file is read by Wesnoth, it is passed through a preprocessor. +Whenever a WML file is read by Wesnoth, it is passed through the preprocessor. -The preprocessor is applied recursively, i.e included files will be parsed for macros, -and macro expansion will be reparsed for macros, etc. -As a result, you should not write a recursive macro, -because it will cause an infinite loop and crash Wesnoth. +The preprocessor is applied recursively, so included files will +be parsed for macros, and after macro expansion will be parsed for macros +again, and so on. As a result, you should not write a recursive macro, +because it will cause an infinite loop. <a href="http://www.wesnoth.org/forum/viewtopic.php?t=5838">Changes to the preprocessor in 0.9.2</a> -allow recursively nested #ifdefs, but recursively nested macro definitions ('#define') -will still cause errors (but not necessarily error messages). +allow recursively nested #ifdefs, but recursively nested +macro definitions ('#define') will still cause errors +(but not necessarily error messages). The following directives are used to create and use //macros//, i.e. shortcuts which reduce repetition of information. @@ -18,46 +19,58 @@ * ||#define //symbol// [//parameters//] //newline// //substitution// #enddef|| all subsequent occurences of ||{//symbol// [//arguments//]}|| (see below) will be replaced by //substitution// with all occurences of any parameter -{//parameter//} within //substitution// replaced by the parameter's corresponding value in //arguments//. +{//parameter//} within //substitution// replaced by the parameter's +corresponding value in //arguments//. For example, the UNIT macro used below would be defined: - #define UNIT TYPE X Y## the ordering is important here; since WML does not distinguish data into different types, - ## only the ordering is used to determine which arguments apply to which parameters. + #define UNIT TYPE X Y## the ordering is important here; since WML + ## does not distinguish data into different types, + ## only the ordering is used to determine which + ## arguments apply to which parameters. [unit] - type={TYPE}## the unit will be of type TYPE, so different instantiations of this macro can create different units. + type={TYPE}## the unit will be of type TYPE, so different instantiations + ## of this macro can create different units. x={X} y={Y} - side=2## the unit will be an enemy, regardless of the parameter values. This reduces "repetition of information", - ## since it is no longer necessary to specify each created unit as enemy. + side=2## the unit will be an enemy, regardless of the parameter values. + ## This reduces "repetition of information", since it is no longer + ## necessary to specify each created unit as an enemy. [/unit] #enddef - (See SingleUnitWML for information on creating units using WML.) -* ||{//symbol// [//arguments//]}|| if //symbol// is defined, -the preprocessor will replace this instruction by the expression //symbol// is defined as, -using //arguments// as parameters. -You can create multiple words arguments by using parentheses to restrain the argument. -For example, while ||{UNIT Wolf Rider 18 24}|| will attempt to create a "Wolf" at (Rider,18), causing Wesnoth to crash, -the macro ||{UNIT (Wolf Rider) 18 24}|| will create a "Wolf Rider" at (18,24) as it should. -(||UNIT|| is defined above). -See the //#define// preprocessor instruction above for information on defining symbols, -including symbols with arguments. -Several symbols are defined in the normal game code; for reference they are listed in UtilWML. - -Unlike the other preprocessor directives, #ifdef is not used for convenience. -It is necessary to distinguish between differen modes of play. +* ||{//symbol// [//arguments//]}|| +<br/>if //symbol// is defined, the preprocessor will replace this +instruction by the expression //symbol// is defined as, +using //arguments// as parameters. You can create multiple word +arguments by using parentheses to restrain the argument. +For example, while ||{UNIT Wolf Rider 18 24}|| will attempt to create +a "Wolf" at (Rider,18), causing Wesnoth to crash, +the macro ||{UNIT (Wolf Rider) 18 24}|| will create a "Wolf Rider" +at (18,24) as it should. (||UNIT|| is defined above). +See the //#define// preprocessor instruction above for information +on defining symbols, including symbols with arguments. +Several symbols are defined in the normal game code; +for reference they are listed in UtilWML. + +Unlike the other preprocessor directives, #ifdef is not +used for convenience. +It is necessary to distinguish between different modes of play. * ||#ifdef //symbol// //substitution-if-stored// [#else //substitution-if-not-stored//] #endif|| -if //symbol// has been stored, the whole block will be replaced by //substitution-if-stored//. -if not, it will be replaced by //substitution-if-not-stored// if it is available. -Each campaign stores both a difficulty level (usually ||EASY||, ||NORMAL||, or ||HARD||), -and a campaign ID. See CampaignWML for information on how and why to store symbols. +<br/>If //symbol// has been stored, the whole block will be replaced by +//substitution-if-stored//. +If not, it will be replaced by //substitution-if-not-stored// +if it is available. +Each campaign stores both a difficulty level +(usually ||EASY||, ||NORMAL||, or ||HARD||), and a campaign ID. +See CampaignWML for information on how and why to store symbols. These directives expand a file by including other files: * ||{//filename//}|| if //filename// isn't a predefined symbol (see above), -Wesnoth will assume it's a path to a file in the main data/ +Wesnoth will assume it's a path to a file in the main ||data/|| subdirectory of Wesnoth and include the file it points to here "as is". -Forward slashes('||/||') should be used to separate directories from their elements, -even if your platform uses a different symbol such as arrow('||>||') or backslash('||\||'). +Forward slashes('||/||') should be used to separate directories from +their elements, even if your platform uses a different symbol +such as colon ('||:||') or backslash ('||\||'). If //filename// points to a directory, the preprocessor will include all files in the directory //filename//, non-recursively and in alphabetical order. @@ -65,21 +78,21 @@ that the filename is relative to the user data directory. The //user data directory// varies depending on platform: - Platform| User Data Directory - ----------------------------- - UNIX | ~/.wesnoth/data/ - Mac OSX | user home folder>Library>Preferences>Wesnoth - Windows | main Wesnoth directory/userdata/ + Platform | User Data Directory + ------------------------------ + UNIX | ~/.wesnoth/data/ + Mac OS X | ~/Library/Preferences/Wesnoth or ~/.wesnoth/data + Windows | "main Wesnoth folder"\userdata\ * ||{@//filename//}|| is a convenient way -to make Wesnoth look for a file by that name in both the main and the user data directory. +to make Wesnoth look for a file by that name in both the main and +the user data directory. It is equivalent to writing ||{//filename//}{~//filename//}||. -* ||{./<i>filename</i>}|| similar to the ||{//filename//}|| directive, -but is assumed to be relative to the directory which contains the file which contains it. -For example, if used in game.cfg, it is equivalent to ||{//filename//}||. +* ||{./<i>filename</i>}|| is similar to the ||{//filename//}|| directive, +but is assumed to be relative to the directory which contains the file +in which this appears. For example, if used in game.cfg, it is equivalent to +||{//filename//}||. ||See Also|| - * SyntaxWML * ReferenceWML -
_______________________________________________ Wesnoth-wiki-changes mailing list [email protected] http://lists.nongnu.org/mailman/listinfo/wesnoth-wiki-changes
