gnome-commander r1612 - in branches/gcmd-1-3: . doc/C src



Author: epiotr
Date: Tue Mar  4 17:57:39 2008
New Revision: 1612
URL: http://svn.gnome.org/viewvc/gnome-commander?rev=1612&view=rev

Log:
Multi-Rename-Tool - new $x and $X placeholders for random hexadecimal numbers

Modified:
   branches/gcmd-1-3/ChangeLog
   branches/gcmd-1-3/doc/C/gnome-commander.xml
   branches/gcmd-1-3/src/gnome-cmd-advrename-dialog.cc
   branches/gcmd-1-3/src/gnome-cmd-advrename-lexer.ll

Modified: branches/gcmd-1-3/doc/C/gnome-commander.xml
==============================================================================
--- branches/gcmd-1-3/doc/C/gnome-commander.xml	(original)
+++ branches/gcmd-1-3/doc/C/gnome-commander.xml	Tue Mar  4 17:57:39 2008
@@ -828,6 +828,22 @@
                         <entry><para>File counter with specified digit number (precision)</para></entry>
                     </row>
                     <row valign="top">
+                        <entry><para>$x</para></entry>
+                        <entry><para>Hexadecimal random number (8 lowercase digits)</para></entry>
+                    </row>
+                    <row valign="top">
+                        <entry><para>$x(precision)</para></entry>
+                        <entry><para>Hexadecimal random number with specified lowercase digit number (precision)</para></entry>
+                    </row>
+                    <row valign="top">
+                        <entry><para>$x</para></entry>
+                        <entry><para>Hexadecimal random number (8 uppercase digits)</para></entry>
+                    </row>
+                    <row valign="top">
+                        <entry><para>$x(precision)</para></entry>
+                        <entry><para>Hexadecimal random number with specified uppercase digit number (precision)</para></entry>
+                    </row>
+                    <row valign="top">
                         <entry><para>$T(metatag)</para></entry>
                         <entry><para>Metadata tag</para></entry>
                     </row>

Modified: branches/gcmd-1-3/src/gnome-cmd-advrename-dialog.cc
==============================================================================
--- branches/gcmd-1-3/src/gnome-cmd-advrename-dialog.cc	(original)
+++ branches/gcmd-1-3/src/gnome-cmd-advrename-dialog.cc	Tue Mar  4 17:57:39 2008
@@ -100,6 +100,8 @@
                                          "$e",
                                          "$c",
                                          "$c(2)",
+                                         "$x(8)",
+                                         "$X(8)",
                                          "%x",
                                          "%Y-%m-%d",
                                          "%y-%m-%d",
@@ -157,27 +159,29 @@
                                            {_("/File extension"), NULL, (GtkItemFactoryCallback) insert_text_tag, 4}};
 
     GtkItemFactoryEntry counter_items[] = {{_("/Counter"), NULL, (GtkItemFactoryCallback) insert_text_tag, 5},
-                                           {_("/Counter (precision)"), NULL, (GtkItemFactoryCallback) insert_text_tag, 6}};
-
-    GtkItemFactoryEntry date_items[] =    {{_("/Date/<locale>"), NULL, (GtkItemFactoryCallback) insert_text_tag, 7},
-                                           {_("/Date/yyyy-mm-dd"), NULL, (GtkItemFactoryCallback) insert_text_tag, 8},
-                                           {_("/Date/yy-mm-dd"), NULL, (GtkItemFactoryCallback) insert_text_tag, 9},
-                                           {_("/Date/yy.mm.dd"), NULL, (GtkItemFactoryCallback) insert_text_tag, 10},
-                                           {_("/Date/yymmdd"), NULL, (GtkItemFactoryCallback) insert_text_tag, 11},
-                                           {_("/Date/dd.mm.yy"), NULL, (GtkItemFactoryCallback) insert_text_tag, 12},
-                                           {_("/Date/mm-dd-yy"), NULL, (GtkItemFactoryCallback) insert_text_tag, 13},
-                                           {_("/Date/yyyy"), NULL, (GtkItemFactoryCallback) insert_text_tag, 14},
-                                           {_("/Date/yy"), NULL, (GtkItemFactoryCallback) insert_text_tag, 15},
-                                           {_("/Date/mm"), NULL, (GtkItemFactoryCallback) insert_text_tag, 16},
-                                           {_("/Date/mmm"), NULL, (GtkItemFactoryCallback) insert_text_tag, 17},
-                                           {_("/Date/dd"), NULL, (GtkItemFactoryCallback) insert_text_tag, 18},
-                                           {_("/Time/<locale>"), NULL, (GtkItemFactoryCallback) insert_text_tag, 19},
-                                           {_("/Time/HH.MM.SS"), NULL, (GtkItemFactoryCallback) insert_text_tag, 20},
-                                           {_("/Time/HH-MM-SS"), NULL, (GtkItemFactoryCallback) insert_text_tag, 21},
-                                           {_("/Time/HHMMSS"), NULL, (GtkItemFactoryCallback) insert_text_tag, 22},
-                                           {_("/Time/HH"), NULL, (GtkItemFactoryCallback) insert_text_tag, 23},
-                                           {_("/Time/MM"), NULL, (GtkItemFactoryCallback) insert_text_tag, 24},
-                                           {_("/Time/SS"), NULL, (GtkItemFactoryCallback) insert_text_tag, 25}};
+                                           {_("/Counter (precision)"), NULL, (GtkItemFactoryCallback) insert_text_tag, 6},
+                                           {_("/Hexadecimal random number (precision)"), NULL, (GtkItemFactoryCallback) insert_text_tag, 7},
+                                           {_("/Hexadecimal random number (precision)"), NULL, (GtkItemFactoryCallback) insert_text_tag, 8}};
+
+    GtkItemFactoryEntry date_items[] =    {{_("/Date/<locale>"), NULL, (GtkItemFactoryCallback) insert_text_tag, 9},
+                                           {_("/Date/yyyy-mm-dd"), NULL, (GtkItemFactoryCallback) insert_text_tag, 10},
+                                           {_("/Date/yy-mm-dd"), NULL, (GtkItemFactoryCallback) insert_text_tag, 11},
+                                           {_("/Date/yy.mm.dd"), NULL, (GtkItemFactoryCallback) insert_text_tag, 12},
+                                           {_("/Date/yymmdd"), NULL, (GtkItemFactoryCallback) insert_text_tag, 13},
+                                           {_("/Date/dd.mm.yy"), NULL, (GtkItemFactoryCallback) insert_text_tag, 14},
+                                           {_("/Date/mm-dd-yy"), NULL, (GtkItemFactoryCallback) insert_text_tag, 15},
+                                           {_("/Date/yyyy"), NULL, (GtkItemFactoryCallback) insert_text_tag, 16},
+                                           {_("/Date/yy"), NULL, (GtkItemFactoryCallback) insert_text_tag, 17},
+                                           {_("/Date/mm"), NULL, (GtkItemFactoryCallback) insert_text_tag, 18},
+                                           {_("/Date/mmm"), NULL, (GtkItemFactoryCallback) insert_text_tag, 19},
+                                           {_("/Date/dd"), NULL, (GtkItemFactoryCallback) insert_text_tag, 20},
+                                           {_("/Time/<locale>"), NULL, (GtkItemFactoryCallback) insert_text_tag, 21},
+                                           {_("/Time/HH.MM.SS"), NULL, (GtkItemFactoryCallback) insert_text_tag, 22},
+                                           {_("/Time/HH-MM-SS"), NULL, (GtkItemFactoryCallback) insert_text_tag, 23},
+                                           {_("/Time/HHMMSS"), NULL, (GtkItemFactoryCallback) insert_text_tag, 24},
+                                           {_("/Time/HH"), NULL, (GtkItemFactoryCallback) insert_text_tag, 25},
+                                           {_("/Time/MM"), NULL, (GtkItemFactoryCallback) insert_text_tag, 26},
+                                           {_("/Time/SS"), NULL, (GtkItemFactoryCallback) insert_text_tag, 27}};
 
     static GnomeCmdTag metatags[] = {
                                      TAG_FILE_NAME, TAG_FILE_PATH,

Modified: branches/gcmd-1-3/src/gnome-cmd-advrename-lexer.ll
==============================================================================
--- branches/gcmd-1-3/src/gnome-cmd-advrename-lexer.ll	(original)
+++ branches/gcmd-1-3/src/gnome-cmd-advrename-lexer.ll	Tue Mar  4 17:57:39 2008
@@ -51,9 +51,10 @@
                 }
 
 
-#define   MAX_PRECISION   16
+#define   MAX_PRECISION           16
+#define   MAX_XRANDOM_PRECISION    8u
 
-enum {TEXT=1,NAME,EXTENSION,FULL_NAME,COUNTER,PARENT_DIR,GRANDPARENT_DIR,METATAG};
+enum {TEXT=1,NAME,EXTENSION,FULL_NAME,COUNTER,XRANDOM,XXRANDOM,PARENT_DIR,GRANDPARENT_DIR,METATAG};
 
 typedef struct
 {
@@ -76,6 +77,10 @@
       int step;         // default: default_counter_step  (1)
       int prec;         // default: default_counter_prec (-1)
     } counter;
+    struct
+    {
+      guint x_prec;     // default: MAX_XRANDOM_PRECISION  (8)
+    } random;
   };
 } CHUNK;
 
@@ -173,6 +178,23 @@
                                   fname_template.push_back(p);
                                 }
 
+\$[xX]\({uint}\)                {
+                                  CHUNK *p = g_new0 (CHUNK,1);
+
+                                  guint precision = MAX_XRANDOM_PRECISION;
+
+                                  sscanf(yytext+3,"%u",&precision);
+
+                                  switch (yytext[1])
+                                  {
+                                    case 'x' : p->type = XRANDOM;       break;
+                                    case 'X' : p->type = XXRANDOM;      break;
+                                  }
+                                  p->random.x_prec = min (precision, MAX_XRANDOM_PRECISION);
+
+                                  fname_template.push_back(p);
+                                }
+
 \$T\({tag_name}(\.[a-zA-Z][a-zA-Z0-9]+)+(,[^,)]+)*\)   {
 
                                   gchar **a = g_strsplit_set(yytext+3,",()",0);
@@ -195,7 +217,7 @@
                                   fname_template.push_back(p);
                                 }
 
-\$[cegnNp]\([^\)]*\)?           ECHO;                                      // don't substitute broken $x tokens like $x(-1), $x(abc) or $x(abc
+\$[cxXegnNp]\([^\)]*\)?         ECHO;                                      // don't substitute broken $x tokens like $x(-1), $x(abc) or $x(abc
 
 \$[egnNp]                       {
                                   CHUNK *p = g_new0 (CHUNK,1);
@@ -228,6 +250,19 @@
                                   fname_template.push_back(p);
                                 }
 
+\$[xX]                          {
+                                  CHUNK *p = g_new0 (CHUNK,1);
+
+                                  switch (yytext[1])
+                                  {
+                                    case 'x' : p->type = XRANDOM;       break;
+                                    case 'X' : p->type = XXRANDOM;      break;
+                                  }
+                                  p->random.x_prec = MAX_XRANDOM_PRECISION;
+
+                                  fname_template.push_back(p);
+                                }
+
 \$\$                            {
                                   CHUNK *p = g_new0 (CHUNK,1);
 
@@ -434,6 +469,19 @@
                     }
                     break;
 
+      case XRANDOM:
+      case XXRANDOM:
+                    {
+                      static char custom_counter_fmt[8];
+                      static char random_value[MAX_XRANDOM_PRECISION+1];
+
+                      sprintf (custom_counter_fmt, "%%0%u%c", (*i)->random.x_prec, (*i)->type==XRANDOM ? 'x' : 'X');
+                      snprintf (random_value, MAX_XRANDOM_PRECISION+1, custom_counter_fmt, (*i)->random.x_prec<MAX_XRANDOM_PRECISION ? g_random_int_range (0,1 << 4*(*i)->random.x_prec)
+                                                                                                                                     : g_random_int ());
+                      fmt += random_value;
+                    }
+                    break;
+
       case METATAG: // currently ranges are NOT supported for $T() tokens !!!
 
                     // const gchar *tag_value = gcmd_tags_get_value (finfo,(*i)->tag.tag);



[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]