Author: cazfi
Date: Sat Jul 23 20:18:06 2016
New Revision: 33301

URL: http://svn.gna.org/viewcvs/freeciv?rev=33301&view=rev
Log:
Turned list of tech class names to tech class sections in the ruleset format

See patch #7428

Modified:
    trunk/common/tech.h
    trunk/data/alien/techs.ruleset
    trunk/data/civ1/techs.ruleset
    trunk/data/civ2/techs.ruleset
    trunk/data/civ2civ3/techs.ruleset
    trunk/data/classic/techs.ruleset
    trunk/data/experimental/techs.ruleset
    trunk/data/multiplayer/techs.ruleset
    trunk/data/ruledit/comments.txt
    trunk/data/sandbox/techs.ruleset
    trunk/data/stub/techs.ruleset
    trunk/server/ruleset.c
    trunk/tools/ruleutil/comments.c
    trunk/tools/ruleutil/comments.h
    trunk/tools/ruleutil/rulesave.c

Modified: trunk/common/tech.h
URL: 
http://svn.gna.org/viewcvs/freeciv/trunk/common/tech.h?rev=33301&r1=33300&r2=33301&view=diff
==============================================================================
--- trunk/common/tech.h (original)
+++ trunk/common/tech.h Sat Jul 23 20:18:06 2016
@@ -173,6 +173,7 @@
 
 void tech_classes_init(void);
 struct tech_class *tech_class_by_number(const int idx);
+#define tech_class_index(_ptclass_) (_ptclass_)->idx
 const char *tech_class_name_translation(const struct tech_class *ptclass);
 const char *tech_class_rule_name(const struct tech_class *ptclass);
 struct tech_class *tech_class_by_rule_name(const char *name);

Modified: trunk/data/alien/techs.ruleset
URL: 
http://svn.gna.org/viewcvs/freeciv/trunk/data/alien/techs.ruleset?rev=33301&r1=33300&r2=33301&view=diff
==============================================================================
--- trunk/data/alien/techs.ruleset      (original)
+++ trunk/data/alien/techs.ruleset      Sat Jul 23 20:18:06 2016
@@ -26,11 +26,21 @@
 ;  { "name", "helptxt"
 ;  }
 
-
-; Names of the tech classes. Leave empty to have no tech classes.
+; /* <-- avoid gettext warnings
+;
+; Tech classes:
+;
 ; First one is the default one.
-[classes]
-; names =
+; If there is none, tech classes feature is disabled
+;
+; name                    = translatable name as seen by user
+; rule_name               = (optional) name for rulesets etc; if not
+;                           present, 'name' is used.
+;
+; */ <-- avoid gettext warnings
+
+;[techclass_default]
+;name =
 
 ; /* <-- avoid gettext warnings
 ;

Modified: trunk/data/civ1/techs.ruleset
URL: 
http://svn.gna.org/viewcvs/freeciv/trunk/data/civ1/techs.ruleset?rev=33301&r1=33300&r2=33301&view=diff
==============================================================================
--- trunk/data/civ1/techs.ruleset       (original)
+++ trunk/data/civ1/techs.ruleset       Sat Jul 23 20:18:06 2016
@@ -22,11 +22,21 @@
 ;  { "name", "helptxt"
 ;  }
 
-
-; Names of the tech classes. Leave empty to have no tech classes.
+; /* <-- avoid gettext warnings
+;
+; Tech classes:
+;
 ; First one is the default one.
-[classes]
-; names =
+; If there is none, tech classes feature is disabled
+;
+; name                    = translatable name as seen by user
+; rule_name               = (optional) name for rulesets etc; if not
+;                           present, 'name' is used.
+;
+; */ <-- avoid gettext warnings
+
+;[techclass_default]
+;name =
 
 ; /* <-- avoid gettext warnings
 ;

Modified: trunk/data/civ2/techs.ruleset
URL: 
http://svn.gna.org/viewcvs/freeciv/trunk/data/civ2/techs.ruleset?rev=33301&r1=33300&r2=33301&view=diff
==============================================================================
--- trunk/data/civ2/techs.ruleset       (original)
+++ trunk/data/civ2/techs.ruleset       Sat Jul 23 20:18:06 2016
@@ -22,11 +22,21 @@
 ;  { "name", "helptxt"
 ;  }
 
-
-; Names of the tech classes. Leave empty to have no tech classes.
+; /* <-- avoid gettext warnings
+;
+; Tech classes:
+;
 ; First one is the default one.
-[classes]
-; names =
+; If there is none, tech classes feature is disabled
+;
+; name                    = translatable name as seen by user
+; rule_name               = (optional) name for rulesets etc; if not
+;                           present, 'name' is used.
+;
+; */ <-- avoid gettext warnings
+
+;[techclass_default]
+;name =
 
 ; /* <-- avoid gettext warnings
 ;

Modified: trunk/data/civ2civ3/techs.ruleset
URL: 
http://svn.gna.org/viewcvs/freeciv/trunk/data/civ2civ3/techs.ruleset?rev=33301&r1=33300&r2=33301&view=diff
==============================================================================
--- trunk/data/civ2civ3/techs.ruleset   (original)
+++ trunk/data/civ2civ3/techs.ruleset   Sat Jul 23 20:18:06 2016
@@ -22,11 +22,21 @@
 ;  { "name", "helptxt"
 ;  }
 
-
-; Names of the tech classes. Leave empty to have no tech classes.
+; /* <-- avoid gettext warnings
+;
+; Tech classes:
+;
 ; First one is the default one.
-[classes]
-; names =
+; If there is none, tech classes feature is disabled
+;
+; name                    = translatable name as seen by user
+; rule_name               = (optional) name for rulesets etc; if not
+;                           present, 'name' is used.
+;
+; */ <-- avoid gettext warnings
+
+;[techclass_default]
+;name =
 
 ; /* <-- avoid gettext warnings
 ;

Modified: trunk/data/classic/techs.ruleset
URL: 
http://svn.gna.org/viewcvs/freeciv/trunk/data/classic/techs.ruleset?rev=33301&r1=33300&r2=33301&view=diff
==============================================================================
--- trunk/data/classic/techs.ruleset    (original)
+++ trunk/data/classic/techs.ruleset    Sat Jul 23 20:18:06 2016
@@ -22,10 +22,21 @@
 ;  { "name", "helptxt"
 ;  }
 
-; Names of the tech classes. Leave empty to have no tech classes.
+; /* <-- avoid gettext warnings
+;
+; Tech classes:
+;
 ; First one is the default one.
-[classes]
-; names =
+; If there is none, tech classes feature is disabled
+;
+; name                    = translatable name as seen by user
+; rule_name               = (optional) name for rulesets etc; if not
+;                           present, 'name' is used.
+;
+; */ <-- avoid gettext warnings
+
+;[techclass_default]
+;name =
 
 ; /* <-- avoid gettext warnings
 ;

Modified: trunk/data/experimental/techs.ruleset
URL: 
http://svn.gna.org/viewcvs/freeciv/trunk/data/experimental/techs.ruleset?rev=33301&r1=33300&r2=33301&view=diff
==============================================================================
--- trunk/data/experimental/techs.ruleset       (original)
+++ trunk/data/experimental/techs.ruleset       Sat Jul 23 20:18:06 2016
@@ -24,10 +24,21 @@
 ;  { "name", "helptxt"
 ;  }
 
-; Names of the tech classes. Leave empty to have no tech classes.
+; /* <-- avoid gettext warnings
+;
+; Tech classes:
+;
 ; First one is the default one.
-[classes]
-; names =
+; If there is none, tech classes feature is disabled
+;
+; name                    = translatable name as seen by user
+; rule_name               = (optional) name for rulesets etc; if not
+;                           present, 'name' is used.
+;
+; */ <-- avoid gettext warnings
+
+;[techclass_default]
+;name =
 
 ; /* <-- avoid gettext warnings
 ;

Modified: trunk/data/multiplayer/techs.ruleset
URL: 
http://svn.gna.org/viewcvs/freeciv/trunk/data/multiplayer/techs.ruleset?rev=33301&r1=33300&r2=33301&view=diff
==============================================================================
--- trunk/data/multiplayer/techs.ruleset        (original)
+++ trunk/data/multiplayer/techs.ruleset        Sat Jul 23 20:18:06 2016
@@ -22,11 +22,21 @@
 ;  { "name", "helptxt"
 ;  }
 
-
-; Names of the tech classes. Leave empty to have no tech classes.
+; /* <-- avoid gettext warnings
+;
+; Tech classes:
+;
 ; First one is the default one.
-[classes]
-; names =
+; If there is none, tech classes feature is disabled
+;
+; name                    = translatable name as seen by user
+; rule_name               = (optional) name for rulesets etc; if not
+;                           present, 'name' is used.
+;
+; */ <-- avoid gettext warnings
+
+;[techclass_default]
+;name =
 
 ; /* <-- avoid gettext warnings
 ;

Modified: trunk/data/ruledit/comments.txt
URL: 
http://svn.gna.org/viewcvs/freeciv/trunk/data/ruledit/comments.txt?rev=33301&r1=33300&r2=33301&view=diff
==============================================================================
--- trunk/data/ruledit/comments.txt     (original)
+++ trunk/data/ruledit/comments.txt     Sat Jul 23 20:18:06 2016
@@ -62,6 +62,22 @@
 ; \"DisasterProof\"    = Disasters never destroy this building. Is 
meaningful\n\
 ;                      only for genus \"Improvement\" buildings as others 
are\n\
 ;                      automatically disaster proof.\n\
+;\n\
+; */ <-- avoid gettext warnings\n\
+"
+
+tech_classes = "\
+\n\
+; /* <-- avoid gettext warnings\n\
+;\n\
+; Tech classes:\n\
+;\n\
+; First one is the default one.\n\
+; If there is none, tech classes feature is disabled\n\
+;\n\
+; name                    = translatable name as seen by user\n\
+; rule_name               = (optional) name for rulesets etc; if not\n\
+;                           present, 'name' is used.\n\
 ;\n\
 ; */ <-- avoid gettext warnings\n\
 "

Modified: trunk/data/sandbox/techs.ruleset
URL: 
http://svn.gna.org/viewcvs/freeciv/trunk/data/sandbox/techs.ruleset?rev=33301&r1=33300&r2=33301&view=diff
==============================================================================
--- trunk/data/sandbox/techs.ruleset    (original)
+++ trunk/data/sandbox/techs.ruleset    Sat Jul 23 20:18:06 2016
@@ -22,11 +22,21 @@
 ;  { "name", "helptxt"
 ;  }
 
-
-; Names of the tech classes. Leave empty to have no tech classes.
+; /* <-- avoid gettext warnings
+;
+; Tech classes:
+;
 ; First one is the default one.
-[classes]
-; names =
+; If there is none, tech classes feature is disabled
+;
+; name                    = translatable name as seen by user
+; rule_name               = (optional) name for rulesets etc; if not
+;                           present, 'name' is used.
+;
+; */ <-- avoid gettext warnings
+
+;[techclass_default]
+;name =
 
 ; /* <-- avoid gettext warnings
 ;

Modified: trunk/data/stub/techs.ruleset
URL: 
http://svn.gna.org/viewcvs/freeciv/trunk/data/stub/techs.ruleset?rev=33301&r1=33300&r2=33301&view=diff
==============================================================================
--- trunk/data/stub/techs.ruleset       (original)
+++ trunk/data/stub/techs.ruleset       Sat Jul 23 20:18:06 2016
@@ -16,11 +16,21 @@
 ;  { "name", "helptxt"
 ;  }
 
+; /* <-- avoid gettext warnings
+;
+; Tech classes:
+;
+; First one is the default one.
+; If there is none, tech classes feature is disabled
+;
+; name                    = translatable name as seen by user
+; rule_name               = (optional) name for rulesets etc; if not
+;                           present, 'name' is used.
+;
+; */ <-- avoid gettext warnings
 
-; Names of the tech classes. Leave empty to have no tech classes.
-; First one is the default one.
-[classes]
-; names =
+;[techclass_default]
+;name =
 
 ; /* <-- avoid gettext warnings
 ;

Modified: trunk/server/ruleset.c
URL: 
http://svn.gna.org/viewcvs/freeciv/trunk/server/ruleset.c?rev=33301&r1=33300&r2=33301&view=diff
==============================================================================
--- trunk/server/ruleset.c      (original)
+++ trunk/server/ruleset.c      Sat Jul 23 20:18:06 2016
@@ -83,6 +83,7 @@
 #define SCRIPT_SUFFIX "lua"
 
 #define ADVANCE_SECTION_PREFIX "advance_"
+#define TECH_CLASS_SECTION_PREFIX "techclass_"
 #define BUILDING_SECTION_PREFIX "building_"
 #define CITYSTYLE_SECTION_PREFIX "citystyle_"
 #define MUSICSTYLE_SECTION_PREFIX "musicstyle_"
@@ -1145,10 +1146,44 @@
   }
 
   if (ok) {
+    size_t nval;
+
     for (; i < MAX_NUM_USER_TECH_FLAGS; i++) {
       set_user_tech_flag_name(TECH_USER_1 + i, NULL, NULL);
     }
 
+    /* Tech classes */
+    sec = secfile_sections_by_name_prefix(file, TECH_CLASS_SECTION_PREFIX);
+
+    nval = (NULL != sec ? section_list_size(sec) : 0);
+    if (nval > MAX_NUM_TECH_CLASSES) {
+      int num = nval; /* No "size_t" to printf */
+
+      ruleset_error(LOG_ERROR,
+                    "\"%s\": Too many tech classes (%d, max %d)",
+                    filename, num, MAX_NUM_TECH_CLASSES);
+      section_list_destroy(sec);
+      ok = FALSE;
+    } else {
+      game.control.num_tech_classes = nval;
+    }
+
+    if (ok) {
+      tech_class_iterate(ptclass) {
+        const char *sec_name
+          = section_name(section_list_get(sec, tech_class_index(ptclass)));
+
+        if (!ruleset_load_names(&ptclass->name, NULL, file, sec_name)) {
+          ruleset_error(LOG_ERROR, "\"%s\": Cannot load tech class names",
+                        filename);
+          ok = FALSE;
+          break;
+        }
+      } tech_class_iterate_end;
+    }
+  }
+
+  if (ok) {
     /* The techs: */
     sec = secfile_sections_by_name_prefix(file, ADVANCE_SECTION_PREFIX);
     if (NULL == sec || 0 == (num_techs = section_list_size(sec))) {
@@ -1194,17 +1229,6 @@
   struct advance *a_none = advance_by_number(A_NONE);
   const char *filename = secfile_name(file);
   bool ok = TRUE;
-
-  slist = secfile_lookup_str_vec(file, &nval, "classes.names");
-  if (slist == NULL) {
-    game.control.num_tech_classes = 0;
-  } else {
-    game.control.num_tech_classes = nval;
-    for (i = 0; i < nval; i++) {
-      names_set(&(tech_class_by_number(i)->name), "freeciv", slist[i], 
slist[i]);
-    }
-    free(slist);
-  }
 
   sec = secfile_sections_by_name_prefix(file, ADVANCE_SECTION_PREFIX);
 

Modified: trunk/tools/ruleutil/comments.c
URL: 
http://svn.gna.org/viewcvs/freeciv/trunk/tools/ruleutil/comments.c?rev=33301&r1=33300&r2=33301&view=diff
==============================================================================
--- trunk/tools/ruleutil/comments.c     (original)
+++ trunk/tools/ruleutil/comments.c     Sat Jul 23 20:18:06 2016
@@ -25,6 +25,7 @@
 static struct {
   char *file_header;
   char *buildings;
+  char *tech_classes;
   char *techs;
   char *govs;
   char *policies;
@@ -70,6 +71,7 @@
 
   comments_storage.file_header = fc_strdup(secfile_lookup_str(comment_file, 
"common.header"));
   comments_storage.buildings = fc_strdup(secfile_lookup_str(comment_file, 
"typedoc.buildings"));
+  comments_storage.tech_classes = fc_strdup(secfile_lookup_str(comment_file, 
"typedoc.tech_classes"));
   comments_storage.techs = fc_strdup(secfile_lookup_str(comment_file, 
"typedoc.techs"));
   comments_storage.govs = fc_strdup(secfile_lookup_str(comment_file, 
"typedoc.governments"));
   comments_storage.policies = fc_strdup(secfile_lookup_str(comment_file, 
"typedoc.policies"));
@@ -140,6 +142,14 @@
 }
 
 /**************************************************************************
+  Write tech classess header.
+**************************************************************************/
+void comment_tech_classes(struct section_file *sfile)
+{
+  comment_write(sfile, comments_storage.tech_classes, "Tech Classes");
+}
+
+/**************************************************************************
   Write techs header.
 **************************************************************************/
 void comment_techs(struct section_file *sfile)

Modified: trunk/tools/ruleutil/comments.h
URL: 
http://svn.gna.org/viewcvs/freeciv/trunk/tools/ruleutil/comments.h?rev=33301&r1=33300&r2=33301&view=diff
==============================================================================
--- trunk/tools/ruleutil/comments.h     (original)
+++ trunk/tools/ruleutil/comments.h     Sat Jul 23 20:18:06 2016
@@ -25,6 +25,7 @@
 void comment_file_header(struct section_file *sfile);
 
 void comment_buildings(struct section_file *sfile);
+void comment_tech_classes(struct section_file *sfile);
 void comment_techs(struct section_file *sfile);
 void comment_govs(struct section_file *sfile);
 void comment_policies(struct section_file *sfile);

Modified: trunk/tools/ruleutil/rulesave.c
URL: 
http://svn.gna.org/viewcvs/freeciv/trunk/tools/ruleutil/rulesave.c?rev=33301&r1=33300&r2=33301&view=diff
==============================================================================
--- trunk/tools/ruleutil/rulesave.c     (original)
+++ trunk/tools/ruleutil/rulesave.c     Sat Jul 23 20:18:06 2016
@@ -1743,17 +1743,16 @@
     }
   }
 
-  if (game.control.num_tech_classes > 0) {
-    int ci;
-    const char *class_names[game.control.num_tech_classes];
-
-    for (ci = 0; ci < game.control.num_tech_classes; ci++) {
-      class_names[ci] = tech_class_rule_name(tech_class_by_number(ci));
-    }
-
-    secfile_insert_str_vec(sfile, class_names, ci,
-                           "classes.names");
-  }
+  comment_tech_classes(sfile);
+
+  sect_idx = 0;
+  tech_class_iterate(ptclass) {
+    char path[512];
+
+    fc_snprintf(path, sizeof(path), "techclass_%d", sect_idx++);
+
+    save_name_translation(sfile, &(ptclass->name), path);
+  } tech_class_iterate_end;
 
   comment_techs(sfile);
 


_______________________________________________
Freeciv-commits mailing list
Freeciv-commits@gna.org
https://mail.gna.org/listinfo/freeciv-commits

Reply via email to