diff -bruP gthumb-2.6.8-old/AUTHORS gthumb-2.6.8/AUTHORS
--- gthumb-2.6.8-old/AUTHORS	2005-09-21 01:56:09.000000000 -0600
+++ gthumb-2.6.8/AUTHORS	2005-10-20 23:28:36.000000000 -0600
@@ -6,3 +6,4 @@
   Chauk-Mean Proum <chaukmean@free.fr>
   Jason Tackaberry <tack@auc.ca>
   Martin Ebourne <martin@zepler.org>
+  Rennie deGraaf <degraaf@cpsc.ucalgary.ca>
diff -bruP gthumb-2.6.8-old/data/albumthemes/BlueStripes/image.gthtml gthumb-2.6.8/data/albumthemes/BlueStripes/image.gthtml
--- gthumb-2.6.8-old/data/albumthemes/BlueStripes/image.gthtml	2005-09-21 01:56:09.000000000 -0600
+++ gthumb-2.6.8/data/albumthemes/BlueStripes/image.gthtml	2005-10-07 19:32:50.000000000 -0600
@@ -72,11 +72,19 @@
 
 <!-- Comment and Exif data -->
 <div class="properties">
-<gthumb:if comment_visibility_image/>
 <div class="preview_comment">
-  <span class="comment"><gthumb:comment/></span><br />
+  <span class="comment">
+    <gthumb:if comment_visibility_image/>
+      <gthumb:comment/> <br />
+    <gthumb:end/>
+    <gthumb:if place_visibility_image/>
+      <gthumb:place/> <br />
+    <gthumb:end/>
+    <gthumb:if date_time_visibility_image/>
+      <gthumb:date_time/>
+    <gthumb:end/>
+  </span><br />
 </div>
-<gthumb:end/>
 <table summary="image properties">
 <gthumb:if file_name_visibility_image/>
 <tr>
diff -bruP gthumb-2.6.8-old/data/albumthemes/BlueStripes/thumbnail.gthtml gthumb-2.6.8/data/albumthemes/BlueStripes/thumbnail.gthtml
--- gthumb-2.6.8-old/data/albumthemes/BlueStripes/thumbnail.gthtml	2005-09-21 01:56:09.000000000 -0600
+++ gthumb-2.6.8/data/albumthemes/BlueStripes/thumbnail.gthtml	2005-10-07 19:32:34.000000000 -0600
@@ -14,9 +14,17 @@
       </tr>
       </table>
 
-<gthumb:if comment_visibility_index/>
-      <span class="comment"><gthumb:comment/></span><br />
-<gthumb:end/>
+<span class="comment">
+  <gthumb:if comment_visibility_image/>
+    <gthumb:comment/> <br />
+  <gthumb:end/>
+  <gthumb:if place_visibility_image/>
+    <gthumb:place/> <br />
+  <gthumb:end/>
+  <gthumb:if date_time_visibility_image/>
+    <gthumb:date_time/>
+  <gthumb:end/>
+</span><br />
 
 <gthumb:if image_dim_visibility_index/>
       <span class="property_value image_dim"><gthumb:image_dim/></span>
diff -bruP gthumb-2.6.8-old/data/albumthemes/Classic/image.gthtml gthumb-2.6.8/data/albumthemes/Classic/image.gthtml
--- gthumb-2.6.8-old/data/albumthemes/Classic/image.gthtml	2005-09-21 01:56:09.000000000 -0600
+++ gthumb-2.6.8/data/albumthemes/Classic/image.gthtml	2005-10-07 19:33:23.000000000 -0600
@@ -97,11 +97,19 @@
 
 <!-- Comment and Exif data -->
 <div class="properties">
-<gthumb:if comment_visibility_image/>
 <div class="preview_comment">
-  <span class="comment"><gthumb:comment/></span><br />
+  <span class="comment">
+    <gthumb:if comment_visibility_image/>
+      <gthumb:comment/> <br />
+    <gthumb:end/>
+    <gthumb:if place_visibility_image/>
+      <gthumb:place/> <br />
+    <gthumb:end/>
+    <gthumb:if date_time_visibility_image/>
+      <gthumb:date_time/>
+    <gthumb:end/>
+  </span><br />
 </div>
-<gthumb:end/>
 <table summary="image properties">
 <gthumb:if file_name_visibility_image/>
 <tr>
diff -bruP gthumb-2.6.8-old/data/albumthemes/Classic/thumbnail.gthtml gthumb-2.6.8/data/albumthemes/Classic/thumbnail.gthtml
--- gthumb-2.6.8-old/data/albumthemes/Classic/thumbnail.gthtml	2005-09-21 01:56:09.000000000 -0600
+++ gthumb-2.6.8/data/albumthemes/Classic/thumbnail.gthtml	2005-10-07 19:33:12.000000000 -0600
@@ -14,9 +14,17 @@
       </tr>
       </table>
 
-<gthumb:if comment_visibility_index/>
-      <span class="comment"><gthumb:comment/></span><br />
-<gthumb:end/>
+<span class="comment">
+  <gthumb:if comment_visibility_image/>
+    <gthumb:comment/> <br />
+  <gthumb:end/>
+  <gthumb:if place_visibility_image/>
+    <gthumb:place/> <br />
+  <gthumb:end/>
+  <gthumb:if date_time_visibility_image/>
+    <gthumb:date_time/>
+  <gthumb:end/>
+</span><br />
 
 <gthumb:if image_dim_visibility_index/>
       <span class="property_value image_dim"><gthumb:image_dim/></span>
diff -bruP gthumb-2.6.8-old/data/albumthemes/ClassicClips/image.gthtml gthumb-2.6.8/data/albumthemes/ClassicClips/image.gthtml
--- gthumb-2.6.8-old/data/albumthemes/ClassicClips/image.gthtml	2005-09-21 01:56:09.000000000 -0600
+++ gthumb-2.6.8/data/albumthemes/ClassicClips/image.gthtml	2005-10-07 19:32:09.000000000 -0600
@@ -97,11 +97,19 @@
 
 <!-- Comment and Exif data -->
 <div class="properties">
-<gthumb:if comment_visibility_image/>
 <div class="preview_comment">
-  <span class="comment"><gthumb:comment/></span><br />
+  <span class="comment">
+    <gthumb:if comment_visibility_image/>
+      <gthumb:comment/> <br />
+    <gthumb:end/>
+    <gthumb:if place_visibility_image/>
+      <gthumb:place/> <br />
+    <gthumb:end/>
+    <gthumb:if date_time_visibility_image/>
+      <gthumb:date_time/>
+    <gthumb:end/>
+  </span><br />
 </div>
-<gthumb:end/>
 <table summary="image properties">
 <gthumb:if file_name_visibility_image/>
 <tr>
diff -bruP gthumb-2.6.8-old/data/albumthemes/ClassicClips/thumbnail.gthtml gthumb-2.6.8/data/albumthemes/ClassicClips/thumbnail.gthtml
--- gthumb-2.6.8-old/data/albumthemes/ClassicClips/thumbnail.gthtml	2005-09-21 01:56:09.000000000 -0600
+++ gthumb-2.6.8/data/albumthemes/ClassicClips/thumbnail.gthtml	2005-10-07 19:32:05.000000000 -0600
@@ -14,9 +14,17 @@
       </tr>
       </table>
 
-<gthumb:if comment_visibility_index/>
-      <span class="comment"><gthumb:comment/></span><br />
-<gthumb:end/>
+<span class="comment">
+  <gthumb:if comment_visibility_image/>
+    <gthumb:comment/> <br />
+  <gthumb:end/>
+  <gthumb:if place_visibility_image/>
+    <gthumb:place/> <br />
+  <gthumb:end/>
+  <gthumb:if date_time_visibility_image/>
+    <gthumb:date_time/>
+  <gthumb:end/>
+</span><br />
 
 <gthumb:if image_dim_visibility_index/>
       <span class="property_value image_dim"><gthumb:image_dim/></span>
diff -bruP gthumb-2.6.8-old/data/albumthemes/Clean/image.gthtml gthumb-2.6.8/data/albumthemes/Clean/image.gthtml
--- gthumb-2.6.8-old/data/albumthemes/Clean/image.gthtml	2005-09-21 01:56:09.000000000 -0600
+++ gthumb-2.6.8/data/albumthemes/Clean/image.gthtml	2005-10-07 19:35:15.000000000 -0600
@@ -83,11 +83,19 @@
 
 <!-- Comment and Exif data -->
 <div class="properties">
-<gthumb:if comment_visibility_image/>
 <div class="preview_comment">
-  <span class="comment"><gthumb:comment/></span><br />
+  <span class="comment">
+    <gthumb:if comment_visibility_image/>
+      <gthumb:comment/> <br />
+    <gthumb:end/>
+    <gthumb:if place_visibility_image/>
+      <gthumb:place/> <br />
+    <gthumb:end/>
+    <gthumb:if date_time_visibility_image/>
+      <gthumb:date_time/>
+    <gthumb:end/>
+  </span><br />
 </div>
-<gthumb:end/>
 <table summary="image properties">
 <gthumb:if file_name_visibility_image/>
 <tr>
diff -bruP gthumb-2.6.8-old/data/albumthemes/Clean/thumbnail.gthtml gthumb-2.6.8/data/albumthemes/Clean/thumbnail.gthtml
--- gthumb-2.6.8-old/data/albumthemes/Clean/thumbnail.gthtml	2005-09-21 01:56:09.000000000 -0600
+++ gthumb-2.6.8/data/albumthemes/Clean/thumbnail.gthtml	2005-10-07 19:35:03.000000000 -0600
@@ -14,9 +14,17 @@
       </tr>
       </table>
 
-<gthumb:if comment_visibility_index/>
-      <span class="comment"><gthumb:comment/></span><br /> 
-<gthumb:end/>
+<span class="comment">
+  <gthumb:if comment_visibility_image/>
+    <gthumb:comment/> <br />
+  <gthumb:end/>
+  <gthumb:if place_visibility_image/>
+    <gthumb:place/> <br />
+  <gthumb:end/>
+  <gthumb:if date_time_visibility_image/>
+    <gthumb:date_time/>
+  <gthumb:end/>
+</span><br />
 
 <gthumb:if image_dim_visibility_index/>
       <span class="property_value image_dim"><gthumb:image_dim/></span>
diff -bruP gthumb-2.6.8-old/data/albumthemes/NeatRound/image.gthtml gthumb-2.6.8/data/albumthemes/NeatRound/image.gthtml
--- gthumb-2.6.8-old/data/albumthemes/NeatRound/image.gthtml	2005-09-21 01:56:09.000000000 -0600
+++ gthumb-2.6.8/data/albumthemes/NeatRound/image.gthtml	2005-10-07 19:35:54.000000000 -0600
@@ -97,11 +97,19 @@
 
 <!-- Comment and Exif data -->
 <div class="properties">
-<gthumb:if comment_visibility_image/>
 <div class="preview_comment">
-  <span class="comment"><gthumb:comment/></span><br />
+  <span class="comment">
+    <gthumb:if comment_visibility_image/>
+      <gthumb:comment/> <br />
+    <gthumb:end/>
+    <gthumb:if place_visibility_image/>
+      <gthumb:place/> <br />
+    <gthumb:end/>
+    <gthumb:if date_time_visibility_image/>
+      <gthumb:date_time/>
+    <gthumb:end/>
+  </span><br />
 </div>
-<gthumb:end/>
 <table summary="image properties">
 <gthumb:if file_name_visibility_image/>
 <tr>
diff -bruP gthumb-2.6.8-old/data/albumthemes/NeatRound/thumbnail.gthtml gthumb-2.6.8/data/albumthemes/NeatRound/thumbnail.gthtml
--- gthumb-2.6.8-old/data/albumthemes/NeatRound/thumbnail.gthtml	2005-09-21 01:56:09.000000000 -0600
+++ gthumb-2.6.8/data/albumthemes/NeatRound/thumbnail.gthtml	2005-10-07 19:35:40.000000000 -0600
@@ -14,9 +14,17 @@
       </tr>
       </table>
 
-<gthumb:if comment_visibility_index/>
-      <span class="comment"><gthumb:comment/></span><br />
-<gthumb:end/>
+<span class="comment">
+  <gthumb:if comment_visibility_image/>
+    <gthumb:comment/> <br />
+  <gthumb:end/>
+  <gthumb:if place_visibility_image/>
+    <gthumb:place/> <br />
+  <gthumb:end/>
+  <gthumb:if date_time_visibility_image/>
+    <gthumb:date_time/>
+  <gthumb:end/>
+</span><br />
 
 <gthumb:if image_dim_visibility_index/>
       <span class="property_value image_dim"><gthumb:image_dim/></span>
diff -bruP gthumb-2.6.8-old/data/albumthemes/NeatSquare/image.gthtml gthumb-2.6.8/data/albumthemes/NeatSquare/image.gthtml
--- gthumb-2.6.8-old/data/albumthemes/NeatSquare/image.gthtml	2005-09-21 01:56:09.000000000 -0600
+++ gthumb-2.6.8/data/albumthemes/NeatSquare/image.gthtml	2005-10-07 19:36:25.000000000 -0600
@@ -97,11 +97,19 @@
 
 <!-- Comment and Exif data -->
 <div class="properties">
-<gthumb:if comment_visibility_image/>
 <div class="preview_comment">
-  <span class="comment"><gthumb:comment/></span><br />
+  <span class="comment">
+    <gthumb:if comment_visibility_image/>
+      <gthumb:comment/> <br />
+    <gthumb:end/>
+    <gthumb:if place_visibility_image/>
+      <gthumb:place/> <br />
+    <gthumb:end/>
+    <gthumb:if date_time_visibility_image/>
+      <gthumb:date_time/>
+    <gthumb:end/>
+  </span><br />
 </div>
-<gthumb:end/>
 <table summary="image properties">
 <gthumb:if file_name_visibility_image/>
 <tr>
diff -bruP gthumb-2.6.8-old/data/albumthemes/NeatSquare/thumbnail.gthtml gthumb-2.6.8/data/albumthemes/NeatSquare/thumbnail.gthtml
--- gthumb-2.6.8-old/data/albumthemes/NeatSquare/thumbnail.gthtml	2005-09-21 01:56:09.000000000 -0600
+++ gthumb-2.6.8/data/albumthemes/NeatSquare/thumbnail.gthtml	2005-10-07 19:36:15.000000000 -0600
@@ -14,9 +14,17 @@
       </tr>
       </table>
 
-<gthumb:if comment_visibility_index/>
-      <span class="comment"><gthumb:comment/></span><br />
-<gthumb:end/>
+<span class="comment">
+  <gthumb:if comment_visibility_image/>
+    <gthumb:comment/> <br />
+  <gthumb:end/>
+  <gthumb:if place_visibility_image/>
+    <gthumb:place/> <br />
+  <gthumb:end/>
+  <gthumb:if date_time_visibility_image/>
+    <gthumb:date_time/>
+  <gthumb:end/>
+</span><br />
 
 <gthumb:if image_dim_visibility_index/>
       <span class="property_value image_dim"><gthumb:image_dim/></span>
diff -bruP gthumb-2.6.8-old/data/glade/gthumb_web_exporter.glade gthumb-2.6.8/data/glade/gthumb_web_exporter.glade
--- gthumb-2.6.8-old/data/glade/gthumb_web_exporter.glade	2005-09-21 01:56:09.000000000 -0600
+++ gthumb-2.6.8/data/glade/gthumb_web_exporter.glade	2005-10-19 17:20:51.000000000 -0600
@@ -83,7 +83,7 @@
 	<widget class="GtkTable" id="table8">
 	  <property name="border_width">6</property>
 	  <property name="visible">True</property>
-	  <property name="n_rows">14</property>
+	  <property name="n_rows">15</property>
 	  <property name="n_columns">3</property>
 	  <property name="homogeneous">False</property>
 	  <property name="row_spacing">6</property>
@@ -107,8 +107,8 @@
 	    <packing>
 	      <property name="left_attach">1</property>
 	      <property name="right_attach">2</property>
-	      <property name="top_attach">8</property>
-	      <property name="bottom_attach">9</property>
+	      <property name="top_attach">9</property>
+	      <property name="bottom_attach">10</property>
 	      <property name="x_options">fill</property>
 	      <property name="y_options"></property>
 	    </packing>
@@ -273,8 +273,8 @@
 	    <packing>
 	      <property name="left_attach">0</property>
 	      <property name="right_attach">3</property>
-	      <property name="top_attach">9</property>
-	      <property name="bottom_attach">10</property>
+	      <property name="top_attach">10</property>
+	      <property name="bottom_attach">11</property>
 	      <property name="x_options">fill</property>
 	      <property name="y_options"></property>
 	    </packing>
@@ -297,8 +297,8 @@
 	    <packing>
 	      <property name="left_attach">1</property>
 	      <property name="right_attach">2</property>
-	      <property name="top_attach">10</property>
-	      <property name="bottom_attach">11</property>
+	      <property name="top_attach">11</property>
+	      <property name="bottom_attach">12</property>
 	      <property name="x_options">fill</property>
 	      <property name="y_options"></property>
 	    </packing>
@@ -386,8 +386,8 @@
 	    <packing>
 	      <property name="left_attach">2</property>
 	      <property name="right_attach">3</property>
-	      <property name="top_attach">8</property>
-	      <property name="bottom_attach">9</property>
+	      <property name="top_attach">9</property>
+	      <property name="bottom_attach">10</property>
 	      <property name="x_options">fill</property>
 	      <property name="y_options">fill</property>
 	    </packing>
@@ -410,8 +410,8 @@
 	    <packing>
 	      <property name="left_attach">1</property>
 	      <property name="right_attach">2</property>
-	      <property name="top_attach">11</property>
-	      <property name="bottom_attach">12</property>
+	      <property name="top_attach">12</property>
+	      <property name="bottom_attach">13</property>
 	      <property name="x_options">fill</property>
 	      <property name="y_options"></property>
 	    </packing>
@@ -445,8 +445,8 @@
 	    <packing>
 	      <property name="left_attach">2</property>
 	      <property name="right_attach">3</property>
-	      <property name="top_attach">10</property>
-	      <property name="bottom_attach">11</property>
+	      <property name="top_attach">11</property>
+	      <property name="bottom_attach">12</property>
 	      <property name="x_options">fill</property>
 	      <property name="y_options">fill</property>
 	    </packing>
@@ -480,8 +480,8 @@
 	    <packing>
 	      <property name="left_attach">2</property>
 	      <property name="right_attach">3</property>
-	      <property name="top_attach">11</property>
-	      <property name="bottom_attach">12</property>
+	      <property name="top_attach">12</property>
+	      <property name="bottom_attach">13</property>
 	      <property name="x_options">fill</property>
 	      <property name="y_options">fill</property>
 	    </packing>
@@ -529,30 +529,6 @@
 	    <packing>
 	      <property name="left_attach">2</property>
 	      <property name="right_attach">3</property>
-	      <property name="top_attach">12</property>
-	      <property name="bottom_attach">13</property>
-	      <property name="x_options">fill</property>
-	      <property name="y_options"></property>
-	    </packing>
-	  </child>
-
-	  <child>
-	    <widget class="GtkLabel" id="label85">
-	      <property name="visible">True</property>
-	      <property name="label" translatable="yes">Th_eme:</property>
-	      <property name="use_underline">True</property>
-	      <property name="use_markup">False</property>
-	      <property name="justify">GTK_JUSTIFY_LEFT</property>
-	      <property name="wrap">False</property>
-	      <property name="selectable">False</property>
-	      <property name="xalign">0</property>
-	      <property name="yalign">0.5</property>
-	      <property name="xpad">0</property>
-	      <property name="ypad">0</property>
-	    </widget>
-	    <packing>
-	      <property name="left_attach">1</property>
-	      <property name="right_attach">2</property>
 	      <property name="top_attach">13</property>
 	      <property name="bottom_attach">14</property>
 	      <property name="x_options">fill</property>
@@ -604,15 +580,15 @@
 	    <packing>
 	      <property name="left_attach">2</property>
 	      <property name="right_attach">3</property>
-	      <property name="top_attach">13</property>
-	      <property name="bottom_attach">14</property>
+	      <property name="top_attach">14</property>
+	      <property name="bottom_attach">15</property>
 	      <property name="x_options">fill</property>
 	      <property name="y_options">fill</property>
 	    </packing>
 	  </child>
 
 	  <child>
-	    <widget class="GtkHBox" id="hbox83">
+	    <widget class="GtkHBox" id="wa_rows_hbox">
 	      <property name="visible">True</property>
 	      <property name="homogeneous">False</property>
 	      <property name="spacing">6</property>
@@ -826,7 +802,7 @@
 	  </child>
 
 	  <child>
-	    <widget class="GtkHBox" id="hbox86">
+	    <widget class="GtkHBox" id="wa_cols_hbox">
 	      <property name="visible">True</property>
 	      <property name="homogeneous">False</property>
 	      <property name="spacing">6</property>
@@ -940,6 +916,52 @@
 	      <property name="y_options">fill</property>
 	    </packing>
 	  </child>
+
+	  <child>
+	    <widget class="GtkLabel" id="label85">
+	      <property name="visible">True</property>
+	      <property name="label" translatable="yes">Th_eme:</property>
+	      <property name="use_underline">True</property>
+	      <property name="use_markup">False</property>
+	      <property name="justify">GTK_JUSTIFY_LEFT</property>
+	      <property name="wrap">False</property>
+	      <property name="selectable">False</property>
+	      <property name="xalign">0</property>
+	      <property name="yalign">0.5</property>
+	      <property name="xpad">0</property>
+	      <property name="ypad">0</property>
+	    </widget>
+	    <packing>
+	      <property name="left_attach">1</property>
+	      <property name="right_attach">2</property>
+	      <property name="top_attach">14</property>
+	      <property name="bottom_attach">15</property>
+	      <property name="x_options">fill</property>
+	      <property name="y_options"></property>
+	    </packing>
+	  </child>
+
+	  <child>
+	    <widget class="GtkCheckButton" id="wa_single_index_checkbutton">
+	      <property name="visible">True</property>
+	      <property name="can_focus">True</property>
+	      <property name="label" translatable="yes">Use a _single index page</property>
+	      <property name="use_underline">True</property>
+	      <property name="relief">GTK_RELIEF_NORMAL</property>
+	      <property name="focus_on_click">True</property>
+	      <property name="active">False</property>
+	      <property name="inconsistent">False</property>
+	      <property name="draw_indicator">True</property>
+	    </widget>
+	    <packing>
+	      <property name="left_attach">2</property>
+	      <property name="right_attach">3</property>
+	      <property name="top_attach">8</property>
+	      <property name="bottom_attach">9</property>
+	      <property name="x_options">fill</property>
+	      <property name="y_options"></property>
+	    </packing>
+	  </child>
 	</widget>
 	<packing>
 	  <property name="padding">0</property>
@@ -1713,6 +1735,73 @@
 		  <property name="fill">False</property>
 		</packing>
 	      </child>
+	    </widget>
+	    <packing>
+	      <property name="padding">0</property>
+	      <property name="expand">True</property>
+	      <property name="fill">True</property>
+	    </packing>
+	  </child>
+
+	  <child>
+	    <widget class="GtkVBox" id="c_caption_data_vbox">
+	      <property name="visible">True</property>
+	      <property name="homogeneous">False</property>
+	      <property name="spacing">6</property>
+
+	      <child>
+		<widget class="GtkLabel" id="label137">
+		  <property name="visible">True</property>
+		  <property name="label" translatable="yes">&lt;b&gt;Caption&lt;/b&gt;</property>
+		  <property name="use_underline">False</property>
+		  <property name="use_markup">True</property>
+		  <property name="justify">GTK_JUSTIFY_LEFT</property>
+		  <property name="wrap">False</property>
+		  <property name="selectable">False</property>
+		  <property name="xalign">0</property>
+		  <property name="yalign">0.5</property>
+		  <property name="xpad">0</property>
+		  <property name="ypad">0</property>
+		</widget>
+		<packing>
+		  <property name="padding">0</property>
+		  <property name="expand">False</property>
+		  <property name="fill">False</property>
+		</packing>
+	      </child>
+
+	      <child>
+		<widget class="GtkHBox" id="hbox92">
+		  <property name="visible">True</property>
+		  <property name="homogeneous">False</property>
+		  <property name="spacing">0</property>
+
+		  <child>
+		    <widget class="GtkLabel" id="label138">
+		      <property name="visible">True</property>
+		      <property name="label" translatable="yes"></property>
+		      <property name="use_underline">False</property>
+		      <property name="use_markup">False</property>
+		      <property name="justify">GTK_JUSTIFY_LEFT</property>
+		      <property name="wrap">False</property>
+		      <property name="selectable">False</property>
+		      <property name="xalign">0.5</property>
+		      <property name="yalign">0.5</property>
+		      <property name="xpad">6</property>
+		      <property name="ypad">0</property>
+		    </widget>
+		    <packing>
+		      <property name="padding">0</property>
+		      <property name="expand">False</property>
+		      <property name="fill">False</property>
+		    </packing>
+		  </child>
+
+		  <child>
+		    <widget class="GtkVBox" id="caption_vbox">
+		      <property name="visible">True</property>
+		      <property name="homogeneous">True</property>
+		      <property name="spacing">6</property>
 
 	      <child>
 		<widget class="GtkCheckButton" id="c_comment_checkbutton">
@@ -1732,6 +1821,58 @@
 		  <property name="fill">False</property>
 		</packing>
 	      </child>
+
+		      <child>
+			<widget class="GtkCheckButton" id="c_place_checkbutton">
+			  <property name="visible">True</property>
+			  <property name="can_focus">True</property>
+			  <property name="label" translatable="yes">_Place</property>
+			  <property name="use_underline">True</property>
+			  <property name="relief">GTK_RELIEF_NORMAL</property>
+			  <property name="focus_on_click">True</property>
+			  <property name="active">False</property>
+			  <property name="inconsistent">False</property>
+			  <property name="draw_indicator">True</property>
+			</widget>
+			<packing>
+			  <property name="padding">0</property>
+			  <property name="expand">False</property>
+			  <property name="fill">False</property>
+			</packing>
+		      </child>
+
+		      <child>
+			<widget class="GtkCheckButton" id="c_date_time_checkbutton">
+			  <property name="visible">True</property>
+			  <property name="can_focus">True</property>
+			  <property name="label" translatable="yes">_Date and Time</property>
+			  <property name="use_underline">True</property>
+			  <property name="relief">GTK_RELIEF_NORMAL</property>
+			  <property name="focus_on_click">True</property>
+			  <property name="active">False</property>
+			  <property name="inconsistent">False</property>
+			  <property name="draw_indicator">True</property>
+			</widget>
+			<packing>
+			  <property name="padding">0</property>
+			  <property name="expand">False</property>
+			  <property name="fill">False</property>
+			</packing>
+		      </child>
+		    </widget>
+		    <packing>
+		      <property name="padding">0</property>
+		      <property name="expand">True</property>
+		      <property name="fill">True</property>
+		    </packing>
+		  </child>
+		</widget>
+		<packing>
+		  <property name="padding">0</property>
+		  <property name="expand">False</property>
+		  <property name="fill">False</property>
+		</packing>
+	      </child>
 	    </widget>
 	    <packing>
 	      <property name="padding">0</property>
@@ -1776,7 +1917,7 @@
 		  <child>
 		    <widget class="GtkLabel" id="label120">
 		      <property name="visible">True</property>
-		      <property name="label" translatable="yes">    </property>
+		      <property name="label" translatable="yes"></property>
 		      <property name="use_underline">False</property>
 		      <property name="use_markup">False</property>
 		      <property name="justify">GTK_JUSTIFY_LEFT</property>
@@ -1784,7 +1925,7 @@
 		      <property name="selectable">False</property>
 		      <property name="xalign">0.5</property>
 		      <property name="yalign">0.5</property>
-		      <property name="xpad">0</property>
+		      <property name="xpad">6</property>
 		      <property name="ypad">0</property>
 		    </widget>
 		    <packing>
@@ -1804,7 +1945,7 @@
 			<widget class="GtkCheckButton" id="c_exif_date_time_checkbutton">
 			  <property name="visible">True</property>
 			  <property name="can_focus">True</property>
-			  <property name="label" translatable="yes">_Date and Time</property>
+			  <property name="label" translatable="yes">Da_te and Time</property>
 			  <property name="use_underline">True</property>
 			  <property name="relief">GTK_RELIEF_NORMAL</property>
 			  <property name="focus_on_click">True</property>
diff -bruP gthumb-2.6.8-old/doc/theme-xml.txt gthumb-2.6.8/doc/theme-xml.txt
--- gthumb-2.6.8-old/doc/theme-xml.txt	2005-09-21 01:56:09.000000000 -0600
+++ gthumb-2.6.8/doc/theme-xml.txt	2005-10-20 23:13:03.000000000 -0600
@@ -22,10 +22,10 @@
   unsigned integer number
 
 RVAR (Readable Variables):	
-  images
-  image_idx
-  pages
-  page_idx
+  images (integer)                  Total number of images being exported
+  image_idx (integer)               Index of current image
+  pages (integer)                   Total number of index pages being generated
+  page_idx (integer)                Index number of current index page
   display_file_name_thumbnail
   display_file_name_image
   image_width
@@ -34,48 +34,82 @@
   preview_height
   thumb_width
   thumb_height
+  copy_originals (boolean)          Original images are being copied to the web 
+                                    album output directory
+  comment_visibility_image (bool)   Show comments on preview pages
+  comment_visibility_index (bool)   Show comments on index pages
+  place_visibility_image (bool)     Show place on preview pages
+  place_visibility_index (bool)     Show place on index pages
+  date_time_visibility_image (bool) Show date and time on preview pages
+  date_time_visibility_index (bool) Show date and time on index pages
+  file_name_visibility_image (bool) Show file name on image pages
+  file_name_visibility_index (bool) Show file name on index pages
+  image_dim_visibility_image (bool) Show image dimensions on image pages
+  image_dim_visibility_index (bool) Show image dimensions on index pages
+  file_size_visibility_image (bool) Show file size on image pages
+  file_size_visibility_index (bool) Show file size on index pages
+  exif_date_time_visibility_image (bool)      Show date and time (from exif 
+                                              data) on image pages
+  exif_date_time_visibility_index (bool)      Show date and time (from exif 
+                                              data) on index pages
+  exif_exposure_time_visibility_image (bool)  Show exposure time on image pages
+  exif_exposure_time_visibility_index (bool)  Show exposure time on index pages
+  exif_exposure_mode_visibility_image (bool)  Show exposure mode on image pages
+  exif_exposure_mode_visibility_index (bool)  Show exposure mode on index pages
+  exif_flash_visibility_image (bool)          Show flash mode on image pages
+  exif_flash_visibility_index (bool)          Show flash mode on index pages
+  exif_shutter_speed_visibility_image (bool)  Show shutter speed on image pages
+  exif_shutter_speed_visibility_index (bool)  Show shutter speed on index pages
+  exif_aperture_value_visibility_image (bool) Show aperture value on image pages
+  exif_aperture_value_visibility_index (bool) Show aperture value on index pages
+  exif_focal_length_visibility_image (bool)   Show focal length on image pages
+  exif_focal_length_visibility_index (bool)   Show focal length on index pages
+  exif_camera_model_visibility_image (bool)   Show camera model on image pages
+  exif_camera_model_visibility_index (bool)   Show camera model on index pages
 
 WVAR (Writable Variables):
-  thumbnail_width
-  thumbnail_height
-  preview_width
-  preview_height
+  thumbnail_width (integer)         Output thumbnails of this width
+  thumbnail_height (integer)        Output thumbnails of this height
+  preview_width (integer)           Output preview images of this width
+  preview_height (integer)          Output preview images of this height
 
 ---
 
 <gthumb:title/>                     Display the album title.
 
 <gthumb:image/>                     Display the image.
-  idx=EXPR
-  idx_relative=EXPR
+  idx="EXPR"
+  idx_relative="EXPR"
   thumbnail="0/1"                   Display the image thumbnail (the
                                     image used in the index.html file).
   preview="0/1"                     Display the image preview (the
                                     image in the image.html file).
-  max_size=EXPR
+  max_size="EXPR"
   class="NAME"                      Assign CSS class NAME to image element
+  id="NAME"                         Assign CSS id NAME to image element
+  alt="TEXT"                        Assign alt text TEXT to image element
 
 <gthumb:image_link/>                Display the image link
-  idx=EXPR
-  idx_relative=EXPR
+  idx="EXPR"
+  idx_relative="EXPR"
   thumbnail="0/1"                   Display the image thumbnail link
   preview="0/1"                     Display the image preview link
 
 <gthumb:image_idx/>
-  idx_relative=EXPR
+  idx_relative="EXPR"
 
 <gthumb:image_dim/>
-  idx=EXPR
-  idx_relative=EXPR
+  idx="EXPR"
+  idx_relative="EXPR"
 
 <gthumb:images/>                    This tag gets substituted by the total
 				    number of images.
 
 <gthumb:file_name/>
-  idx=EXPR                          Display the filename of the image with 
+  idx="EXPR"                        Display the filename of the image with 
 				    index 'idx'.
 
-  idx_relative=EXPR                 Display the filename of the image with 
+  idx_relative="EXPR"               Display the filename of the image with 
 				    index 'current_index + idx_relative'.
 				    For example if idx_relative is -1 the 
 				    filename of the previous image will be 
@@ -108,78 +142,94 @@
   utf8="0/1"                        Write in utf-8 format
 
 <gthumb:file_path/>
-  idx=EXPR
-  idx_relative=EXPR
+  idx="EXPR"
+  idx_relative="EXPR"
   relative_path="0/1"
   visibility="index/image/always"
   utf8="0/1"
 
 <gthumb:file_size/>
-  idx=EXPR
-  idx_relative=EXPR
+  idx="EXPR"
+  idx_relative="EXPR"
   visibility="index/image/always"
 
-<gthumb:comment/>
-  idx=EXPR
-  idx_relative=EXPR
-  max_size=EXPR
+<gthumb:comment/>                   Display the comment for an image
+  idx="EXPR"
+  idx_relative="EXPR"
+  max_size="EXPR"
+  visibility="index/image/always"
+
+<gthumb:place/>                     Display the place where an image was taken
+  idx="EXPR"
+  idx_relative="EXPR"
+  max_size="EXPR"
+  visibility="index/image/always"
+
+<gthumb:date_time/>                 Display the time when an image was taken
+  idx="EXPR"
+  idx_relative="EXPR"
+  max_size="EXPR"
   visibility="index/image/always"
 
 <gthumb:exif:exposure_time/>
-  idx=EXPR
-  idx_relative=EXPR
+  idx="EXPR"
+  idx_relative="EXPR"
   visibility="index/image/always"
 
 <gthumb:exif:exposure_mode/>
-  idx=EXPR
-  idx_relative=EXPR
+  idx="EXPR"
+  idx_relative="EXPR"
   visibility="index/image/always"
 
 <gthumb:exif:flash/>
-  idx=EXPR
-  idx_relative=EXPR
+  idx="EXPR"
+  idx_relative="EXPR"
   visibility="index/image/always"
 
 <gthumb:exif:shutter_speed/>
-  idx=EXPR
-  idx_relative=EXPR
+  idx="EXPR"
+  idx_relative="EXPR"
   visibility="index/image/always"
 
 <gthumb:exif:aperture_value/>
-  idx=EXPR
-  idx_relative=EXPR
+  idx="EXPR"
+  idx_relative="EXPR"
   visibility="index/image/always"
 
 <gthumb:exif:focal_length/>
-  idx=EXPR
-  idx_relative=EXPR
+  idx="EXPR"
+  idx_relative="EXPR"
   visibility="index/image/always"
 
 <gthumb:exif:date_time/>
-  idx=EXPR
-  idx_relative=EXPR
+  idx="EXPR"
+  idx_relative="EXPR"
   visibility="index/image/always"
 
 <gthumb:exif:camera_model/>
-  idx=EXPR
-  idx_relative=EXPR
+  idx="EXPR"
+  idx_relative="EXPR"
   visibility="index/image/always"
 
 <gthumb:page_link/>
-  idx=EXPR
-  idx_relative=EXPR
+  idx="EXPR"
+  idx_relative="EXPR"
   image_idx="0/1"
 
 <gthumb:page_idx/>
-  idx_relative=EXPR
+  idx_relative="EXPR"
 
 <gthumb:pages/>
 
-<gthumb:table/>
+<gthumb:table/>                     Output thumbnail blocks (thumbnail.gthtml) 
+                                    inside an HTML table
+
+<gthumb:thumbs/>                    Output thumbnail blocks (thumbnail.gthtml)
+                                    without a surrounding table structure
 
 <gthumb:date/>
 
-<gthumb:set_var WVAR=EXPR WVAR=EXPR [..] />
+<gthumb:set_var WVAR="EXPR" WVAR="EXPR" [..] />
 
 
 ---
Binary files gthumb-2.6.8-old/doc/.theme-xml.txt.swp and gthumb-2.6.8/doc/.theme-xml.txt.swp differ
diff -bruP gthumb-2.6.8-old/libgthumb/comments.c gthumb-2.6.8/libgthumb/comments.c
--- gthumb-2.6.8-old/libgthumb/comments.c	2005-09-21 01:56:09.000000000 -0600
+++ gthumb-2.6.8/libgthumb/comments.c	2005-10-07 20:51:54.000000000 -0600
@@ -846,7 +846,7 @@
 }
 
 
-/* From: glib/glib/gmarkup.c (Copyright 2000, 2003 Red Hat, Inc.)  
+/* based on glib/glib/gmarkup.c (Copyright 2000, 2003 Red Hat, Inc.)  
  * This version does not escape ' and ''. Needed  because IE does not recognize
  * &apos; and &quot; */
 static void
@@ -856,6 +856,7 @@
 {
 	const gchar *p;
 	const gchar *end;
+	int state = 0;
 
 	p = text;
 	end = text + length;
@@ -864,7 +865,18 @@
 		const gchar *next;
 		next = g_utf8_next_char (p);
 		
+		switch (state)
+		{
+			case 1: /* escaped */
+				g_string_append_len(str, p, next - p);
+				state=0;
+				break;
+			default:
 		switch (*p) {
+				case '\\':
+					state = 1; /* next character is escaped */
+					break;
+					
 		case '&':
 			g_string_append (str, "&amp;");
 			break;
@@ -885,6 +897,8 @@
 			g_string_append_len (str, p, next - p);
 			break;
 		}
+				break;
+		}
 		
 		p = next;
 	}
diff -bruP gthumb-2.6.8-old/libgthumb/preferences.h gthumb-2.6.8/libgthumb/preferences.h
--- gthumb-2.6.8-old/libgthumb/preferences.h	2005-09-21 01:56:10.000000000 -0600
+++ gthumb-2.6.8/libgthumb/preferences.h	2005-10-19 17:28:02.000000000 -0600
@@ -157,6 +157,7 @@
 #define  PREF_WEB_ALBUM_RESIZE_HEIGHT "/apps/gthumb/dialogs/web_album/resize_height"
 #define  PREF_WEB_ALBUM_ROWS          "/apps/gthumb/dialogs/web_album/rows"
 #define  PREF_WEB_ALBUM_COLUMNS       "/apps/gthumb/dialogs/web_album/columns"
+#define  PREF_WEB_ALBUM_SINGLE_INDEX  "/apps/gthumb/dialogs/web_album/single_index"
 #define  PREF_WEB_ALBUM_SORT          "/apps/gthumb/dialogs/web_album/sort_by"
 #define  PREF_WEB_ALBUM_REVERSE       "/apps/gthumb/dialogs/web_album/reverse_order"
 #define  PREF_WEB_ALBUM_HEADER        "/apps/gthumb/dialogs/web_album/header"
diff -bruP gthumb-2.6.8-old/libgthumb/typedefs.h gthumb-2.6.8/libgthumb/typedefs.h
--- gthumb-2.6.8-old/libgthumb/typedefs.h	2005-09-21 01:56:10.000000000 -0600
+++ gthumb-2.6.8/libgthumb/typedefs.h	2005-10-01 00:50:26.000000000 -0600
@@ -157,7 +157,9 @@
 	GTH_CAPTION_EXIF_APERTURE_VALUE = 1 << 9,
 	GTH_CAPTION_EXIF_FOCAL_LENGTH   = 1 << 10,
 	GTH_CAPTION_EXIF_DATE_TIME      = 1 << 11,
-	GTH_CAPTION_EXIF_CAMERA_MODEL   = 1 << 12
+	GTH_CAPTION_EXIF_CAMERA_MODEL   = 1 << 12,
+	GTH_CAPTION_PLACE               = 1 << 13,
+	GTH_CAPTION_DATE_TIME           = 1 << 14
 } GthCaptionFields;
 
  
diff -bruP gthumb-2.6.8-old/src/albumtheme.c gthumb-2.6.8/src/albumtheme.c
--- gthumb-2.6.8-old/src/albumtheme.c	2005-09-21 01:56:16.000000000 -0600
+++ gthumb-2.6.8/src/albumtheme.c	2005-10-20 22:38:54.000000000 -0600
@@ -1,7 +1,7 @@
-/* A Bison parser, made by GNU Bison 1.875.  */
+/* A Bison parser, made by GNU Bison 1.875c.  */
 
 /* Skeleton parser for Yacc-like parsing with Bison,
-   Copyright (C) 1984, 1989, 1990, 2000, 2001, 2002 Free Software Foundation, Inc.
+   Copyright (C) 1984, 1989, 1990, 2000, 2001, 2002, 2003 Free Software Foundation, Inc.
 
    This program is free software; you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by
@@ -52,8 +52,7 @@
 # define YYTOKENTYPE
    /* Put the tokens into the symbol table, so that GDB and other debuggers
       know about them.  */
-enum yytokentype
-{
+   enum yytokentype {
   END = 258,
   ELSE_IF = 259,
   ELSE = 260,
@@ -74,28 +73,31 @@
   FILEPATH = 275,
   FILESIZE = 276,
   COMMENT = 277,
-  PAGE_LINK = 278,
-  PAGE_IDX = 279,
-  PAGES = 280,
-  TABLE = 281,
-  DATE = 282,
-  TEXT = 283,
-  TEXT_END = 284,
-  EXIF_EXPOSURE_TIME = 285,
-  EXIF_EXPOSURE_MODE = 286,
-  EXIF_FLASH = 287,
-  EXIF_SHUTTER_SPEED = 288,
-  EXIF_APERTURE_VALUE = 289,
-  EXIF_FOCAL_LENGTH = 290,
-  EXIF_DATE_TIME = 291,
-  EXIF_CAMERA_MODEL = 292,
-  SET_VAR = 293,
-  EVAL = 294,
-  HTML = 295,
-  BOOL_OP = 296,
-  COMPARE = 297,
-  UNARY_OP = 298
-};
+     PLACE = 278,
+     DATE_TIME = 279,
+     PAGE_LINK = 280,
+     PAGE_IDX = 281,
+     PAGES = 282,
+     TABLE = 283,
+     THUMBS = 284,
+     DATE = 285,
+     TEXT = 286,
+     TEXT_END = 287,
+     EXIF_EXPOSURE_TIME = 288,
+     EXIF_EXPOSURE_MODE = 289,
+     EXIF_FLASH = 290,
+     EXIF_SHUTTER_SPEED = 291,
+     EXIF_APERTURE_VALUE = 292,
+     EXIF_FOCAL_LENGTH = 293,
+     EXIF_DATE_TIME = 294,
+     EXIF_CAMERA_MODEL = 295,
+     SET_VAR = 296,
+     EVAL = 297,
+     HTML = 298,
+     BOOL_OP = 299,
+     COMPARE = 300,
+     UNARY_OP = 301
+   };
 #endif
 #define END 258
 #define ELSE_IF 259
@@ -117,27 +119,30 @@
 #define FILEPATH 275
 #define FILESIZE 276
 #define COMMENT 277
-#define PAGE_LINK 278
-#define PAGE_IDX 279
-#define PAGES 280
-#define TABLE 281
-#define DATE 282
-#define TEXT 283
-#define TEXT_END 284
-#define EXIF_EXPOSURE_TIME 285
-#define EXIF_EXPOSURE_MODE 286
-#define EXIF_FLASH 287
-#define EXIF_SHUTTER_SPEED 288
-#define EXIF_APERTURE_VALUE 289
-#define EXIF_FOCAL_LENGTH 290
-#define EXIF_DATE_TIME 291
-#define EXIF_CAMERA_MODEL 292
-#define SET_VAR 293
-#define EVAL 294
-#define HTML 295
-#define BOOL_OP 296
-#define COMPARE 297
-#define UNARY_OP 298
+#define PLACE 278
+#define DATE_TIME 279
+#define PAGE_LINK 280
+#define PAGE_IDX 281
+#define PAGES 282
+#define TABLE 283
+#define THUMBS 284
+#define DATE 285
+#define TEXT 286
+#define TEXT_END 287
+#define EXIF_EXPOSURE_TIME 288
+#define EXIF_EXPOSURE_MODE 289
+#define EXIF_FLASH 290
+#define EXIF_SHUTTER_SPEED 291
+#define EXIF_APERTURE_VALUE 292
+#define EXIF_FOCAL_LENGTH 293
+#define EXIF_DATE_TIME 294
+#define EXIF_CAMERA_MODEL 295
+#define SET_VAR 296
+#define EVAL 297
+#define HTML 298
+#define BOOL_OP 299
+#define COMPARE 300
+#define UNARY_OP 301
 
 
 
@@ -193,10 +198,10 @@
 
 #if ! defined (YYSTYPE) && ! defined (YYSTYPE_IS_DECLARED)
 #line 35 "albumtheme.y"
-typedef union YYSTYPE
-{
+typedef union YYSTYPE {
   char *text;
   int ivalue;
+        GString      *string;
   GthVar *var;
   GthTag *tag;
   GthExpr *expr;
@@ -204,7 +209,7 @@
   GthCondition *cond;
 } YYSTYPE;
 /* Line 191 of yacc.c.  */
-#line 205 "albumtheme.c"
+#line 213 "albumtheme.tab.c"
 # define yystype YYSTYPE	/* obsolescent; will be withdrawn */
 # define YYSTYPE_IS_DECLARED 1
 # define YYSTYPE_IS_TRIVIAL 1
@@ -216,16 +221,24 @@
 
 
 /* Line 214 of yacc.c.  */
-#line 217 "albumtheme.c"
+#line 225 "albumtheme.tab.c"
 
 #if ! defined (yyoverflow) || YYERROR_VERBOSE
 
+# ifndef YYFREE
+#  define YYFREE free
+# endif
+# ifndef YYMALLOC
+#  define YYMALLOC malloc
+# endif
+
 /* The parser invokes alloca or malloc; define the necessary symbols.  */
 
+# ifdef YYSTACK_USE_ALLOCA
 # if YYSTACK_USE_ALLOCA
 #  define YYSTACK_ALLOC alloca
+#  endif
 # else
-#  ifndef YYSTACK_USE_ALLOCA
 #   if defined (alloca) || defined (_ALLOCA_H)
 #    define YYSTACK_ALLOC alloca
 #   else
@@ -234,7 +247,6 @@
 #    endif
 #   endif
 #  endif
-# endif
 
 # ifdef YYSTACK_ALLOC
    /* Pacify GCC's `empty if-body' warning. */
@@ -244,22 +256,22 @@
 #   include <stdlib.h>		/* INFRINGES ON USER NAME SPACE */
 #   define YYSIZE_T size_t
 #  endif
-#  define YYSTACK_ALLOC malloc
-#  define YYSTACK_FREE free
+#  define YYSTACK_ALLOC YYMALLOC
+#  define YYSTACK_FREE YYFREE
 # endif
 #endif /* ! defined (yyoverflow) || YYERROR_VERBOSE */
 
 
 #if (! defined (yyoverflow) \
      && (! defined (__cplusplus) \
-	 || (YYSTYPE_IS_TRIVIAL)))
+	 || (defined (YYSTYPE_IS_TRIVIAL) && YYSTYPE_IS_TRIVIAL)))
 
 /* A type that is properly aligned for any stack member.  */
 union yyalloc
 {
   short yyss;
   YYSTYPE yyvs;
-};
+  };
 
 /* The size of the maximum gap between one aligned stack and the next.  */
 # define YYSTACK_GAP_MAXIMUM (sizeof (union yyalloc) - 1)
@@ -273,7 +285,7 @@
 /* Copy COUNT objects from FROM to TO.  The source and destination do
    not overlap.  */
 # ifndef YYCOPY
-#  if 1 < __GNUC__
+#  if defined (__GNUC__) && 1 < __GNUC__
 #   define YYCOPY(To, From, Count) \
       __builtin_memcpy (To, From, (Count) * sizeof (*(From)))
 #  else
@@ -307,41 +319,42 @@
 #endif
 
 #if defined (__STDC__) || defined (__cplusplus)
-typedef signed char yysigned_char;
+   typedef signed char yysigned_char;
 #else
-typedef short yysigned_char;
+   typedef short yysigned_char;
 #endif
 
 /* YYFINAL -- State number of the termination state. */
-#define YYFINAL  50
+#define YYFINAL  54
 /* YYLAST -- Last index in YYTABLE.  */
-#define YYLAST   261
+#define YYLAST   296
 
 /* YYNTOKENS -- Number of terminals. */
-#define YYNTOKENS  53
+#define YYNTOKENS  56
 /* YYNNTS -- Number of nonterminals. */
-#define YYNNTS  15
+#define YYNNTS  19
 /* YYNRULES -- Number of rules. */
-#define YYNRULES  62
+#define YYNRULES  74
 /* YYNRULES -- Number of states. */
-#define YYNSTATES  99
+#define YYNSTATES  119
 
 /* YYTRANSLATE(YYLEX) -- Bison symbol number corresponding to YYLEX.  */
 #define YYUNDEFTOK  2
-#define YYMAXUTOK   298
+#define YYMAXUTOK   301
 
 #define YYTRANSLATE(YYX) 						\
   ((unsigned int) (YYX) <= YYMAXUTOK ? yytranslate[YYX] : YYUNDEFTOK)
 
 /* YYTRANSLATE[YYLEX] -- Bison symbol number corresponding to YYLEX.  */
-static const unsigned char yytranslate[] = {
+static const unsigned char yytranslate[] =
+{
   0, 2, 2, 2, 2, 2, 2, 2, 2, 2,
   2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
   2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
-  2, 2, 2, 47, 52, 2, 2, 2, 2, 2,
-  49, 50, 45, 43, 2, 44, 2, 46, 2, 2,
+       2,     2,     2,    50,    52,     2,     2,     2,     2,     2,
+      53,    54,    48,    46,     2,    47,     2,    49,     2,     2,
   2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
-  2, 51, 2, 2, 2, 2, 2, 2, 2, 2,
+       2,    55,     2,     2,     2,     2,     2,     2,     2,     2,
   2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
   2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
   2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
@@ -364,70 +377,82 @@
   5, 6, 7, 8, 9, 10, 11, 12, 13, 14,
   15, 16, 17, 18, 19, 20, 21, 22, 23, 24,
   25, 26, 27, 28, 29, 30, 31, 32, 33, 34,
-  35, 36, 37, 38, 39, 40, 41, 42, 48
+      35,    36,    37,    38,    39,    40,    41,    42,    43,    44,
+      45,    51
 };
 
 #if YYDEBUG
 /* YYPRHS[YYN] -- Index of the first RHS symbol of rule number YYN in
    YYRHS.  */
-static const unsigned char yyprhs[] = {
+static const unsigned char yyprhs[] =
+{
   0, 0, 3, 5, 8, 11, 18, 23, 24, 27,
-  31, 35, 36, 40, 43, 44, 47, 50, 54, 58,
-  62, 66, 70, 74, 78, 81, 84, 87, 89, 91,
-  95, 99, 101, 103, 105, 107, 109, 111, 113, 115,
-  117, 119, 121, 123, 125, 127, 129, 131, 133, 135,
-  137, 139, 141, 143, 145, 147, 149, 151, 153, 156,
-  157, 161, 167
+      31,    37,    41,    42,    46,    52,    55,    56,    59,    62,
+      66,    70,    74,    78,    82,    86,    90,    93,    96,    99,
+     101,   103,   105,   109,   111,   113,   115,   118,   119,   123,
+     127,   129,   131,   133,   135,   137,   139,   141,   143,   145,
+     147,   149,   151,   153,   155,   157,   159,   161,   163,   165,
+     167,   169,   171,   173,   175,   177,   179,   181,   183,   185,
+     187,   190,   191,   195,   201
 };
 
 /* YYRHS -- A `-1'-separated list of the rules' RHS. */
-static const yysigned_char yyrhs[] = {
-  54, 0, -1, 55, -1, 40, 55, -1, 64, 55,
-  -1, 56, 55, 57, 59, 61, 55, -1, 63, 40,
-  29, 55, -1, -1, 1, 55, -1, 6, 62, 7,
-  -1, 58, 55, 57, -1, -1, 4, 62, 7, -1,
-  60, 55, -1, -1, 5, 7, -1, 3, 7, -1,
-  49, 62, 50, -1, 62, 42, 62, -1, 62, 43,
-  62, -1, 62, 44, 62, -1, 62, 45, 62, -1,
-  62, 46, 62, -1, 62, 41, 62, -1, 43, 62,
-  -1, 44, 62, -1, 47, 62, -1, 8, -1, 10,
-  -1, 28, 66, 7, -1, 65, 66, 7, -1, 11,
-  -1, 12, -1, 13, -1, 14, -1, 15, -1, 16,
-  -1, 17, -1, 18, -1, 19, -1, 20, -1, 21,
-  -1, 22, -1, 23, -1, 24, -1, 25, -1, 26,
-  -1, 27, -1, 30, -1, 31, -1, 32, -1, 33,
-  -1, 34, -1, 35, -1, 36, -1, 37, -1, 38,
-  -1, 39, -1, 67, 66, -1, -1, 8, 51, 62,
-  -1, 8, 51, 52, 62, 52, -1, 8, -1
+static const yysigned_char yyrhs[] =
+{
+      57,     0,    -1,    58,    -1,    43,    58,    -1,    71,    58,
+      -1,    59,    58,    60,    62,    64,    58,    -1,    70,    43,
+      32,    58,    -1,    -1,     1,    58,    -1,     6,    65,     7,
+      -1,     6,    52,    66,    52,     7,    -1,    61,    58,    60,
+      -1,    -1,     4,    65,     7,    -1,     4,    52,    66,    52,
+       7,    -1,    63,    58,    -1,    -1,     5,     7,    -1,     3,
+       7,    -1,    53,    65,    54,    -1,    65,    45,    65,    -1,
+      65,    46,    65,    -1,    65,    47,    65,    -1,    65,    48,
+      65,    -1,    65,    49,    65,    -1,    65,    44,    65,    -1,
+      46,    65,    -1,    47,    65,    -1,    50,    65,    -1,     8,
+      -1,    10,    -1,    65,    -1,    67,    68,    69,    -1,     8,
+      -1,     8,    -1,    10,    -1,    68,    69,    -1,    -1,    31,
+      73,     7,    -1,    72,    73,     7,    -1,    11,    -1,    12,
+      -1,    13,    -1,    14,    -1,    15,    -1,    16,    -1,    17,
+      -1,    18,    -1,    19,    -1,    20,    -1,    21,    -1,    22,
+      -1,    23,    -1,    24,    -1,    25,    -1,    26,    -1,    27,
+      -1,    28,    -1,    29,    -1,    30,    -1,    33,    -1,    34,
+      -1,    35,    -1,    36,    -1,    37,    -1,    38,    -1,    39,
+      -1,    40,    -1,    41,    -1,    42,    -1,    74,    73,    -1,
+      -1,     8,    55,    65,    -1,     8,    55,    52,    66,    52,
+      -1,     8,    -1
 };
 
 /* YYRLINE[YYN] -- source line where rule number YYN was defined.  */
-static const unsigned short yyrline[] = {
-  0, 99, 99, 109, 114, 118, 131, 139, 143, 150,
-  155, 160, 165, 170, 182, 187, 190, 193, 197, 210,
-  223, 236, 249, 262, 275, 279, 284, 289, 296, 303,
-  308, 313, 314, 315, 316, 317, 318, 319, 320, 321,
-  322, 323, 324, 325, 326, 327, 328, 329, 330, 331,
-  332, 333, 334, 335, 336, 337, 338, 339, 342, 346,
-  351, 356, 361
+static const unsigned short yyrline[] =
+{
+       0,   107,   107,   117,   122,   126,   139,   147,   151,   158,
+     161,   166,   171,   176,   179,   184,   196,   201,   204,   207,
+     211,   224,   237,   250,   263,   276,   289,   293,   298,   303,
+     310,   316,   319,   333,   339,   345,   351,   359,   363,   368,
+     373,   374,   375,   376,   377,   378,   379,   380,   381,   382,
+     383,   384,   385,   386,   387,   388,   389,   390,   391,   392,
+     393,   394,   395,   396,   397,   398,   399,   400,   401,   402,
+     405,   409,   414,   419,   424
 };
 #endif
 
 #if YYDEBUG || YYERROR_VERBOSE
 /* YYTNME[SYMBOL-NUM] -- String name of the symbol SYMBOL-NUM.
    First, the terminals, then, starting at YYNTOKENS, nonterminals. */
-static const char *const yytname[] = {
-  "$end", "error", "$undefined", "END", "ELSE_IF", "ELSE", "IF", "END_TAG",
-  "NAME", "STRING", "NUMBER", "HEADER", "FOOTER", "LANGUAGE", "IMAGE",
-  "IMAGE_LINK", "IMAGE_IDX", "IMAGE_DIM", "IMAGES", "FILENAME",
-  "FILEPATH", "FILESIZE", "COMMENT", "PAGE_LINK", "PAGE_IDX", "PAGES",
-  "TABLE", "DATE", "TEXT", "TEXT_END", "EXIF_EXPOSURE_TIME",
-  "EXIF_EXPOSURE_MODE", "EXIF_FLASH", "EXIF_SHUTTER_SPEED",
-  "EXIF_APERTURE_VALUE", "EXIF_FOCAL_LENGTH", "EXIF_DATE_TIME",
-  "EXIF_CAMERA_MODEL", "SET_VAR", "EVAL", "HTML", "BOOL_OP", "COMPARE",
-  "'+'", "'-'", "'*'", "'/'", "'!'", "UNARY_OP", "'('", "')'", "'='",
-  "'\"'", "$accept", "all", "document", "gthumb_if", "opt_if_list",
-  "gthumb_else_if", "opt_else", "gthumb_else", "gthumb_end", "expr",
+static const char *const yytname[] =
+{
+  "$end", "error", "$undefined", "END", "ELSE_IF", "ELSE", "IF",
+  "END_TAG", "NAME", "STRING", "NUMBER", "HEADER", "FOOTER", "LANGUAGE",
+  "IMAGE", "IMAGE_LINK", "IMAGE_IDX", "IMAGE_DIM", "IMAGES", "FILENAME",
+  "FILEPATH", "FILESIZE", "COMMENT", "PLACE", "DATE_TIME", "PAGE_LINK",
+  "PAGE_IDX", "PAGES", "TABLE", "THUMBS", "DATE", "TEXT", "TEXT_END",
+  "EXIF_EXPOSURE_TIME", "EXIF_EXPOSURE_MODE", "EXIF_FLASH",
+  "EXIF_SHUTTER_SPEED", "EXIF_APERTURE_VALUE", "EXIF_FOCAL_LENGTH",
+  "EXIF_DATE_TIME", "EXIF_CAMERA_MODEL", "SET_VAR", "EVAL", "HTML",
+  "BOOL_OP", "COMPARE", "'+'", "'-'", "'*'", "'/'", "'!'", "UNARY_OP",
+  "'\"'", "'('", "')'", "'='", "$accept", "all", "document", "gthumb_if",
+  "opt_if_list", "gthumb_else_if", "opt_else", "gthumb_else", "gthumb_end",
+  "expr", "quoted_expr", "constant1", "constant", "constant_list",
   "gthumb_text_tag", "gthumb_tag", "tag_name", "arg_list", "arg", 0
 };
 #endif
@@ -435,160 +460,184 @@
 # ifdef YYPRINT
 /* YYTOKNUM[YYLEX-NUM] -- Internal token number corresponding to
    token YYLEX-NUM.  */
-static const unsigned short yytoknum[] = {
+static const unsigned short yytoknum[] =
+{
   0, 256, 257, 258, 259, 260, 261, 262, 263, 264,
   265, 266, 267, 268, 269, 270, 271, 272, 273, 274,
   275, 276, 277, 278, 279, 280, 281, 282, 283, 284,
   285, 286, 287, 288, 289, 290, 291, 292, 293, 294,
-  295, 296, 297, 43, 45, 42, 47, 33, 298, 40,
-  41, 61, 34
+     295,   296,   297,   298,   299,   300,    43,    45,    42,    47,
+      33,   301,    34,    40,    41,    61
 };
 # endif
 
 /* YYR1[YYN] -- Symbol number of symbol that rule YYN derives.  */
-static const unsigned char yyr1[] = {
-  0, 53, 54, 55, 55, 55, 55, 55, 55, 56,
-  57, 57, 58, 59, 59, 60, 61, 62, 62, 62,
-  62, 62, 62, 62, 62, 62, 62, 62, 62, 63,
-  64, 65, 65, 65, 65, 65, 65, 65, 65, 65,
+static const unsigned char yyr1[] =
+{
+       0,    56,    57,    58,    58,    58,    58,    58,    58,    59,
+      59,    60,    60,    61,    61,    62,    62,    63,    64,    65,
   65, 65, 65, 65, 65, 65, 65, 65, 65, 65,
-  65, 65, 65, 65, 65, 65, 65, 65, 66, 66,
-  67, 67, 67
+      65,    66,    66,    67,    68,    68,    69,    69,    70,    71,
+      72,    72,    72,    72,    72,    72,    72,    72,    72,    72,
+      72,    72,    72,    72,    72,    72,    72,    72,    72,    72,
+      72,    72,    72,    72,    72,    72,    72,    72,    72,    72,
+      73,    73,    74,    74,    74
 };
 
 /* YYR2[YYN] -- Number of symbols composing right hand side of rule YYN.  */
-static const unsigned char yyr2[] = {
+static const unsigned char yyr2[] =
+{
   0, 2, 1, 2, 2, 6, 4, 0, 2, 3,
-  3, 0, 3, 2, 0, 2, 2, 3, 3, 3,
-  3, 3, 3, 3, 2, 2, 2, 1, 1, 3,
-  3, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+       5,     3,     0,     3,     5,     2,     0,     2,     2,     3,
+       3,     3,     3,     3,     3,     3,     2,     2,     2,     1,
+       1,     1,     3,     1,     1,     1,     2,     0,     3,     3,
+       1,     1,     1,     1,     1,     1,     1,     1,     1,     1,
+       1,     1,     1,     1,     1,     1,     1,     1,     1,     1,
   1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
-  1, 1, 1, 1, 1, 1, 1, 1, 2, 0,
-  3, 5, 1
+       2,     0,     3,     5,     1
 };
 
 /* YYDEFACT[STATE-NAME] -- Default rule to reduce with in state
    STATE-NUM when YYTABLE doesn't specify something else to do.  Zero
    means the default is an error.  */
-static const unsigned char yydefact[] = {
-  0, 0, 0, 31, 32, 33, 34, 35, 36, 37,
-  38, 39, 40, 41, 42, 43, 44, 45, 46, 47,
-  59, 48, 49, 50, 51, 52, 53, 54, 55, 56,
-  57, 0, 0, 2, 0, 0, 0, 59, 8, 27,
-  28, 0, 0, 0, 0, 0, 62, 0, 59, 3,
-  1, 11, 0, 4, 0, 24, 25, 26, 0, 9,
-  0, 0, 0, 0, 0, 0, 0, 29, 58, 0,
-  14, 0, 0, 30, 17, 23, 18, 19, 20, 21,
-  22, 0, 60, 0, 0, 0, 0, 11, 6, 0,
-  12, 15, 0, 0, 13, 10, 61, 16, 5
+static const unsigned char yydefact[] =
+{
+       0,     0,     0,    40,    41,    42,    43,    44,    45,    46,
+      47,    48,    49,    50,    51,    52,    53,    54,    55,    56,
+      57,    58,    59,    71,    60,    61,    62,    63,    64,    65,
+      66,    67,    68,    69,     0,     0,     2,     0,     0,     0,
+      71,     8,    29,    30,     0,     0,     0,     0,     0,     0,
+      74,     0,    71,     3,     1,    12,     0,     4,     0,    26,
+      27,    28,    29,    31,     0,     0,     0,     9,     0,     0,
+       0,     0,     0,     0,     0,    38,    70,     0,    16,     0,
+       0,    39,     0,    34,    35,    37,    19,    25,    20,    21,
+      22,    23,    24,     0,    72,     0,     0,     0,     0,     0,
+      12,     6,    10,    37,    32,     0,     0,    13,    17,     0,
+       0,    15,    11,    36,    73,     0,    18,     5,    14
 };
 
 /* YYDEFGOTO[NTERM-NUM]. */
-static const yysigned_char yydefgoto[] = {
-  -1, 32, 33, 34, 70, 71, 85, 86, 93, 45,
-  35, 36, 37, 47, 48
+static const yysigned_char yydefgoto[] =
+{
+      -1,    35,    36,    37,    78,    79,    98,    99,   110,    63,
+      64,    65,   103,   104,    38,    39,    40,    51,    52
 };
 
 /* YYPACT[STATE-NUM] -- Index in YYTABLE of the portion describing
    STATE-NUM.  */
-#define YYPACT_NINF -45
-static const short yypact[] = {
-  124, 83, 0, -45, -45, -45, -45, -45, -45, -45,
-  -45, -45, -45, -45, -45, -45, -45, -45, -45, -45,
-  -6, -45, -45, -45, -45, -45, -45, -45, -45, -45,
-  -45, 83, 4, -45, 164, -35, 83, -6, -45, -45,
-  -45, 0, 0, 0, 0, 16, -44, 2, -6, -45,
-  -45, 27, 3, -45, 31, -45, -45, -45, 205, -45,
-  0, 0, 0, 0, 0, 0, -7, -45, -45, 0,
-  29, 164, 83, -45, -45, -18, -25, -45, -45, -45,
-  -45, 0, 215, 22, 32, 38, 204, 27, -45, -30,
-  -45, -45, 39, 83, -45, -45, -45, -45, -45
+#define YYPACT_NINF -59
+static const short yypact[] =
+{
+     167,   123,     3,   -59,   -59,   -59,   -59,   -59,   -59,   -59,
+     -59,   -59,   -59,   -59,   -59,   -59,   -59,   -59,   -59,   -59,
+     -59,   -59,   -59,     9,   -59,   -59,   -59,   -59,   -59,   -59,
+     -59,   -59,   -59,   -59,   123,     1,   -59,   210,   -23,   123,
+       9,   -59,   -59,   -59,    57,    57,    57,    72,    57,    40,
+     -21,    36,     9,   -59,   -59,    47,    27,   -59,    53,   -59,
+     -59,   -59,     2,   -22,    10,     8,   -40,   -59,    57,    57,
+      57,    57,    57,    57,    11,   -59,   -59,    44,    61,   210,
+     123,   -59,    69,   -59,   -59,     8,   -59,   -17,    -7,   -59,
+     -59,   -59,   -59,    72,   -22,    72,    68,    74,    80,   253,
+      47,   -59,   -59,     8,   -59,    41,    43,   -59,   -59,    85,
+     123,   -59,   -59,   -59,   -59,    92,   -59,   -59,   -59
 };
 
 /* YYPGOTO[NTERM-NUM].  */
-static const yysigned_char yypgoto[] = {
-  -45, -45, -1, -45, -39, -45, -45, -45, -45, 12,
-  -45, -45, -45, -31, -45
+static const yysigned_char yypgoto[] =
+{
+     -59,   -59,    -1,   -59,     5,   -59,   -59,   -59,   -59,     0,
+     -58,   -59,    35,    -2,   -59,   -59,   -59,   -37,   -59
 };
 
 /* YYTABLE[YYPACT[STATE-NUM]].  What to do in state STATE-NUM.  If
    positive, shift that token.  If negative, reduce the rule which
    number is the opposite.  If zero, do what YYDEFACT says.
    If YYTABLE_NINF, syntax error.  */
-#define YYTABLE_NINF -8
-static const yysigned_char yytable[] = {
-  38, 39, 46, 40, 50, 52, 54, 66, 39, 67,
-  40, 60, 61, 62, 63, 64, 65, 68, 62, 63,
-  64, 65, 96, 59, 61, 62, 63, 64, 65, 90,
-  49, 69, 72, 51, 84, 53, 41, 42, 73, 91,
-  43, 92, 44, 41, 42, 81, 97, 43, 95, 44,
-  0, 0, 0, 55, 56, 57, 58, 60, 61, 62,
-  63, 64, 65, 60, 61, 62, 63, 64, 65, 0,
-  87, 88, 75, 76, 77, 78, 79, 80, 82, 0,
-  0, 83, 0, -7, 1, 94, -7, -7, -7, 2,
-  0, 0, 98, 89, 3, 4, 5, 6, 7, 8,
+#define YYTABLE_NINF -34
+static const yysigned_char yytable[] =
+{
+      41,    54,    49,    58,    68,    69,    70,    71,    72,    73,
+     -33,    42,   -33,    43,    86,    76,    83,    50,    84,    42,
+      56,    43,    68,    69,    70,    71,    72,    73,    69,    70,
+      71,    72,    73,    53,    74,   105,    55,   106,    57,    70,
+      71,    72,    73,    75,    59,    60,    61,    67,    66,    44,
+      45,    77,    42,    46,    43,    47,    48,    44,    45,    80,
+      81,    46,    82,    93,    48,    42,    97,    43,    87,    88,
+      89,    90,    91,    92,    94,   107,   102,    96,   100,   101,
+      62,   108,    43,   109,    68,    69,    70,    71,    72,    73,
+      44,    45,   116,   114,    46,   115,    95,    48,   111,   118,
+      85,   113,     0,    44,    45,   112,     0,    46,     0,   117,
+      48,     0,    68,    69,    70,    71,    72,    73,    44,    45,
+       0,     0,    46,    -7,     1,    48,    -7,    -7,    -7,     2,
+       0,     0,     0,     0,     3,     4,     5,     6,     7,     8,
+       9,    10,    11,    12,    13,    14,    15,    16,    17,    18,
+      19,    20,    21,    22,    23,     0,    24,    25,    26,    27,
+      28,    29,    30,    31,    32,    33,    34,    -7,     1,     0,
+       0,     0,     0,     2,     0,     0,     0,     0,     3,     4,
+       5,     6,     7,     8,     9,    10,    11,    12,    13,    14,
+      15,    16,    17,    18,    19,    20,    21,    22,    23,     0,
+      24,    25,    26,    27,    28,    29,    30,    31,    32,    33,
+      34,     1,     0,    -7,    -7,    -7,     2,     0,     0,     0,
+       0,     3,     4,     5,     6,     7,     8,     9,    10,    11,
+      12,    13,    14,    15,    16,    17,    18,    19,    20,    21,
+      22,    23,     0,    24,    25,    26,    27,    28,    29,    30,
+      31,    32,    33,    34,     1,     0,    -7,     0,     0,     2,
+       0,     0,     0,     0,     3,     4,     5,     6,     7,     8,
   9, 10, 11, 12, 13, 14, 15, 16, 17, 18,
-  19, 20, 0, 21, 22, 23, 24, 25, 26, 27,
-  28, 29, 30, 31, -7, 1, 0, 0, 0, 0,
-  2, 0, 0, 0, 0, 3, 4, 5, 6, 7,
-  8, 9, 10, 11, 12, 13, 14, 15, 16, 17,
-  18, 19, 20, 0, 21, 22, 23, 24, 25, 26,
-  27, 28, 29, 30, 31, 1, 0, -7, -7, -7,
-  2, 0, 0, 0, 0, 3, 4, 5, 6, 7,
-  8, 9, 10, 11, 12, 13, 14, 15, 16, 17,
-  18, 19, 20, 0, 21, 22, 23, 24, 25, 26,
-  27, 28, 29, 30, 31, 1, 0, -7, 0, 0,
-  2, 0, 0, 0, 0, 3, 4, 5, 6, 7,
-  8, 9, 10, 11, 12, 13, 14, 15, 16, 17,
-  18, 19, 20, 0, 21, 22, 23, 24, 25, 26,
-  27, 28, 29, 30, 31, 0, 60, 61, 62, 63,
-  64, 65, 0, 0, 0, 74, 60, 61, 62, 63,
-  64, 65
+      19,    20,    21,    22,    23,     0,    24,    25,    26,    27,
+      28,    29,    30,    31,    32,    33,    34
 };
 
-static const yysigned_char yycheck[] = {
-  1, 8, 8, 10, 0, 40, 37, 51, 8, 7,
-  10, 41, 42, 43, 44, 45, 46, 48, 43, 44,
-  45, 46, 52, 7, 42, 43, 44, 45, 46, 7,
-  31, 4, 29, 34, 5, 36, 43, 44, 7, 7,
-  47, 3, 49, 43, 44, 52, 7, 47, 87, 49,
-  -1, -1, -1, 41, 42, 43, 44, 41, 42, 43,
-  44, 45, 46, 41, 42, 43, 44, 45, 46, -1,
-  71, 72, 60, 61, 62, 63, 64, 65, 66, -1,
-  -1, 69, -1, 0, 1, 86, 3, 4, 5, 6,
-  -1, -1, 93, 81, 11, 12, 13, 14, 15, 16,
+static const yysigned_char yycheck[] =
+{
+       1,     0,     2,    40,    44,    45,    46,    47,    48,    49,
+       8,     8,    10,    10,    54,    52,     8,     8,    10,     8,
+      43,    10,    44,    45,    46,    47,    48,    49,    45,    46,
+      47,    48,    49,    34,    55,    93,    37,    95,    39,    46,
+      47,    48,    49,     7,    44,    45,    46,     7,    48,    46,
+      47,     4,     8,    50,    10,    52,    53,    46,    47,    32,
+       7,    50,    52,    52,    53,     8,     5,    10,    68,    69,
+      70,    71,    72,    73,    74,     7,     7,    77,    79,    80,
+       8,     7,    10,     3,    44,    45,    46,    47,    48,    49,
+      46,    47,     7,    52,    50,    52,    52,    53,    99,     7,
+      65,   103,    -1,    46,    47,   100,    -1,    50,    -1,   110,
+      53,    -1,    44,    45,    46,    47,    48,    49,    46,    47,
+      -1,    -1,    50,     0,     1,    53,     3,     4,     5,     6,
+      -1,    -1,    -1,    -1,    11,    12,    13,    14,    15,    16,
   17, 18, 19, 20, 21, 22, 23, 24, 25, 26,
-  27, 28, -1, 30, 31, 32, 33, 34, 35, 36,
-  37, 38, 39, 40, 0, 1, -1, -1, -1, -1,
-  6, -1, -1, -1, -1, 11, 12, 13, 14, 15,
-  16, 17, 18, 19, 20, 21, 22, 23, 24, 25,
-  26, 27, 28, -1, 30, 31, 32, 33, 34, 35,
-  36, 37, 38, 39, 40, 1, -1, 3, 4, 5,
-  6, -1, -1, -1, -1, 11, 12, 13, 14, 15,
-  16, 17, 18, 19, 20, 21, 22, 23, 24, 25,
-  26, 27, 28, -1, 30, 31, 32, 33, 34, 35,
-  36, 37, 38, 39, 40, 1, -1, 3, -1, -1,
-  6, -1, -1, -1, -1, 11, 12, 13, 14, 15,
-  16, 17, 18, 19, 20, 21, 22, 23, 24, 25,
-  26, 27, 28, -1, 30, 31, 32, 33, 34, 35,
-  36, 37, 38, 39, 40, -1, 41, 42, 43, 44,
-  45, 46, -1, -1, -1, 50, 41, 42, 43, 44,
-  45, 46
+      27,    28,    29,    30,    31,    -1,    33,    34,    35,    36,
+      37,    38,    39,    40,    41,    42,    43,     0,     1,    -1,
+      -1,    -1,    -1,     6,    -1,    -1,    -1,    -1,    11,    12,
+      13,    14,    15,    16,    17,    18,    19,    20,    21,    22,
+      23,    24,    25,    26,    27,    28,    29,    30,    31,    -1,
+      33,    34,    35,    36,    37,    38,    39,    40,    41,    42,
+      43,     1,    -1,     3,     4,     5,     6,    -1,    -1,    -1,
+      -1,    11,    12,    13,    14,    15,    16,    17,    18,    19,
+      20,    21,    22,    23,    24,    25,    26,    27,    28,    29,
+      30,    31,    -1,    33,    34,    35,    36,    37,    38,    39,
+      40,    41,    42,    43,     1,    -1,     3,    -1,    -1,     6,
+      -1,    -1,    -1,    -1,    11,    12,    13,    14,    15,    16,
+      17,    18,    19,    20,    21,    22,    23,    24,    25,    26,
+      27,    28,    29,    30,    31,    -1,    33,    34,    35,    36,
+      37,    38,    39,    40,    41,    42,    43
 };
 
 /* YYSTOS[STATE-NUM] -- The (internal number of the) accessing
    symbol of state STATE-NUM.  */
-static const unsigned char yystos[] = {
+static const unsigned char yystos[] =
+{
   0, 1, 6, 11, 12, 13, 14, 15, 16, 17,
   18, 19, 20, 21, 22, 23, 24, 25, 26, 27,
-  28, 30, 31, 32, 33, 34, 35, 36, 37, 38,
-  39, 40, 54, 55, 56, 63, 64, 65, 55, 8,
-  10, 43, 44, 47, 49, 62, 8, 66, 67, 55,
-  0, 55, 40, 55, 66, 62, 62, 62, 62, 7,
-  41, 42, 43, 44, 45, 46, 51, 7, 66, 4,
-  57, 58, 29, 7, 50, 62, 62, 62, 62, 62,
-  62, 52, 62, 62, 5, 59, 60, 55, 55, 62,
-  7, 7, 3, 61, 55, 57, 52, 7, 55
+      28,    29,    30,    31,    33,    34,    35,    36,    37,    38,
+      39,    40,    41,    42,    43,    57,    58,    59,    70,    71,
+      72,    58,     8,    10,    46,    47,    50,    52,    53,    65,
+       8,    73,    74,    58,     0,    58,    43,    58,    73,    65,
+      65,    65,     8,    65,    66,    67,    65,     7,    44,    45,
+      46,    47,    48,    49,    55,     7,    73,     4,    60,    61,
+      32,     7,    52,     8,    10,    68,    54,    65,    65,    65,
+      65,    65,    65,    52,    65,    52,    65,     5,    62,    63,
+      58,    58,     7,    68,    69,    66,    66,     7,     7,     3,
+      64,    58,    60,    69,    52,    52,     7,    58,     7
 };
 
 #if ! defined (YYSIZE_T) && defined (__SIZE_TYPE__)
@@ -614,7 +663,7 @@
 
 #define YYACCEPT	goto yyacceptlab
 #define YYABORT		goto yyabortlab
-#define YYERROR		goto yyerrlab1
+#define YYERROR		goto yyerrorlab
 
 
 /* Like YYERROR except do call yyerror.  This remains here temporarily
@@ -650,10 +699,10 @@
 
 #ifndef YYLLOC_DEFAULT
 # define YYLLOC_DEFAULT(Current, Rhs, N)         \
-  Current.first_line   = Rhs[1].first_line;      \
-  Current.first_column = Rhs[1].first_column;    \
-  Current.last_line    = Rhs[N].last_line;       \
-  Current.last_column  = Rhs[N].last_column;
+   ((Current).first_line   = (Rhs)[1].first_line,	\
+    (Current).first_column = (Rhs)[1].first_column,	\
+    (Current).last_line    = (Rhs)[N].last_line,	\
+    (Current).last_column  = (Rhs)[N].last_column)
 #endif
 
 /* YYLEX -- calling `yylex' with the right arguments.  */
@@ -697,7 +746,7 @@
 
 /*------------------------------------------------------------------.
 | yy_stack_print -- Print the state stack from its BOTTOM up to its |
-| TOP (cinluded).                                                   |
+| TOP (included).                                                   |
 `------------------------------------------------------------------*/
 
 #if defined (__STDC__) || defined (__cplusplus)
@@ -711,7 +760,7 @@
 #endif
 {
   YYFPRINTF (stderr, "Stack now");
-  for ( /* Nothing. */ ; bottom <= top; ++bottom)
+  for (/* Nothing. */; bottom <= top; ++bottom)
     YYFPRINTF (stderr, " %d", *bottom);
   YYFPRINTF (stderr, "\n");
 }
@@ -737,13 +786,13 @@
 #endif
 {
   int yyi;
-  unsigned int yylineno = yyrline[yyrule];
+  unsigned int yylno = yyrline[yyrule];
   YYFPRINTF (stderr, "Reducing stack by rule %d (line %u), ",
-	     yyrule - 1, yylineno);
+             yyrule - 1, yylno);
   /* Print the symbols being reduced, and their result.  */
   for (yyi = yyprhs[yyrule]; 0 <= yyrhs[yyi]; yyi++)
-    YYFPRINTF (stderr, "%s ", yytname[yyrhs[yyi]]);
-  YYFPRINTF (stderr, "-> %s\n", yytname[yyr1[yyrule]]);
+    YYFPRINTF (stderr, "%s ", yytname [yyrhs[yyi]]);
+  YYFPRINTF (stderr, "-> %s\n", yytname [yyr1[yyrule]]);
 }
 
 # define YY_REDUCE_PRINT(Rule)		\
@@ -776,7 +825,7 @@
    SIZE_MAX < YYSTACK_BYTES (YYMAXDEPTH)
    evaluated with infinite-precision integer arithmetic.  */
 
-#if YYMAXDEPTH == 0
+#if defined (YYMAXDEPTH) && YYMAXDEPTH == 0
 # undef YYMAXDEPTH
 #endif
 
@@ -848,7 +897,7 @@
 
 #if defined (__STDC__) || defined (__cplusplus)
 static void
-yysymprint (FILE * yyoutput, int yytype, YYSTYPE * yyvaluep)
+yysymprint (FILE *yyoutput, int yytype, YYSTYPE *yyvaluep)
 #else
 static void
 yysymprint (yyoutput, yytype, yyvaluep)
@@ -885,7 +934,7 @@
 
 #if defined (__STDC__) || defined (__cplusplus)
 static void
-yydestruct (int yytype, YYSTYPE * yyvaluep)
+yydestruct (int yytype, YYSTYPE *yyvaluep)
 #else
 static void
 yydestruct (yytype, yyvaluep)
@@ -940,11 +989,9 @@
 
 #ifdef YYPARSE_PARAM
 # if defined (__STDC__) || defined (__cplusplus)
-int
-yyparse (void *YYPARSE_PARAM)
+int yyparse (void *YYPARSE_PARAM)
 # else
-int
-yyparse (YYPARSE_PARAM)
+int yyparse (YYPARSE_PARAM)
      void *YYPARSE_PARAM;
 # endif
 #else /* ! YYPARSE_PARAM */
@@ -954,6 +1001,7 @@
 #else
 int
 yyparse ()
+
 #endif
 #endif
 {
@@ -1019,13 +1067,13 @@
 /*------------------------------------------------------------.
 | yynewstate -- Push a new state, which is found in yystate.  |
 `------------------------------------------------------------*/
-yynewstate:
+ yynewstate:
   /* In all cases, when you get here, the value and location stacks
      have just been pushed. so pushing a state here evens the stacks.
    */
   yyssp++;
 
-yysetstate:
+ yysetstate:
   *yyssp = yystate;
 
   if (yyss + yystacksize - 1 <= yyssp)
@@ -1048,7 +1096,9 @@
 	   be undefined if yyoverflow is a macro.  */
 	yyoverflow ("parser stack overflow",
 		    &yyss1, yysize * sizeof (*yyssp),
-		    &yyvs1, yysize * sizeof (*yyvsp), &yystacksize);
+		    &yyvs1, yysize * sizeof (*yyvsp),
+
+		    &yystacksize);
 
 	yyss = yyss1;
 	yyvs = yyvs1;
@@ -1068,7 +1118,7 @@
 	short *yyss1 = yyss;
 	union yyalloc *yyptr =
 	  (union yyalloc *) YYSTACK_ALLOC (YYSTACK_BYTES (yystacksize));
-	if (!yyptr)
+	if (! yyptr)
 	  goto yyoverflowlab;
 	YYSTACK_RELOCATE (yyss);
 	YYSTACK_RELOCATE (yyvs);
@@ -1191,14 +1241,14 @@
      users should not rely upon it.  Assigning to YYVAL
      unconditionally makes the parser a bit smaller, and it avoids a
      GCC warning that YYVAL may be used uninitialized.  */
-  yyval = yyvsp[1 - yylen];
+  yyval = yyvsp[1-yylen];
 
 
   YY_REDUCE_PRINT (yyn);
   switch (yyn)
     {
     case 2:
-#line 99 "albumtheme.y"
+#line 107 "albumtheme.y"
       {
 	yy_parsed_doc = yyvsp[0].list;
 
@@ -1206,30 +1256,26 @@
 	  YYABORT;
 	else
 	  YYACCEPT;
-	;
-      }
+		;}
       break;
 
     case 3:
-#line 109 "albumtheme.y"
+#line 117 "albumtheme.y"
       {
-	yyval.list =
-	  g_list_prepend (yyvsp[0].list, gth_tag_new_html (yyvsp[-1].text));
+			yyval.list = g_list_prepend (yyvsp[0].list, gth_tag_new_html (yyvsp[-1].text));
 	g_free (yyvsp[-1].text);
-	;
-      }
+		;}
       break;
 
     case 4:
-#line 114 "albumtheme.y"
+#line 122 "albumtheme.y"
       {
 	yyval.list = g_list_prepend (yyvsp[0].list, yyvsp[-1].tag);
-	;
-      }
+		;}
       break;
 
     case 5:
-#line 118 "albumtheme.y"
+#line 126 "albumtheme.y"
       {
 	GList *cond_list;
 	GthTag *tag;
@@ -1241,75 +1287,81 @@
 
 	tag = gth_tag_new_condition (cond_list);
 	yyval.list = g_list_prepend (yyvsp[0].list, tag);
-	;
-      }
+		;}
       break;
 
     case 6:
-#line 131 "albumtheme.y"
+#line 139 "albumtheme.y"
       {
 	GthTag *tag = gth_tag_new_html (yyvsp[-2].text);
 	GList *child_doc = g_list_append (NULL, tag);
 	gth_tag_add_document (yyvsp[-3].tag, child_doc);
 	yyval.list = g_list_prepend (yyvsp[0].list, yyvsp[-3].tag);
 	g_free (yyvsp[-2].text);
-	;
-      }
+		;}
       break;
 
     case 7:
-#line 139 "albumtheme.y"
+#line 147 "albumtheme.y"
       {
 	yyval.list = NULL;
-	;
-      }
+		;}
       break;
 
     case 8:
-#line 143 "albumtheme.y"
+#line 151 "albumtheme.y"
       {
 	if (yyvsp[0].list != NULL)
 	  gth_parsed_doc_free (yyvsp[0].list);
 	yyval.list = NULL;
-	;
-      }
+		;}
       break;
 
     case 9:
-#line 150 "albumtheme.y"
+#line 158 "albumtheme.y"
       {
 	yyval.cond = gth_condition_new (yyvsp[-1].expr);
-	;
-      }
+		;}
       break;
 
     case 10:
-#line 155 "albumtheme.y"
+#line 161 "albumtheme.y"
+    {
+			yyval.cond = gth_condition_new (yyvsp[-2].expr);
+		;}
+    break;
+
+  case 11:
+#line 166 "albumtheme.y"
       {
 	gth_condition_add_document (yyvsp[-2].cond, yyvsp[-1].list);
 	yyval.list = g_list_prepend (yyvsp[0].list, yyvsp[-2].cond);
-	;
-      }
+		;}
       break;
 
-    case 11:
-#line 160 "albumtheme.y"
+  case 12:
+#line 171 "albumtheme.y"
       {
 	yyval.list = NULL;
-	;
-      }
+		;}
       break;
 
-    case 12:
-#line 165 "albumtheme.y"
+  case 13:
+#line 176 "albumtheme.y"
       {
 	yyval.cond = gth_condition_new (yyvsp[-1].expr);
-	;
-      }
+		;}
       break;
 
-    case 13:
-#line 170 "albumtheme.y"
+  case 14:
+#line 179 "albumtheme.y"
+    {
+			yyval.cond = gth_condition_new (yyvsp[-2].expr);
+		;}
+    break;
+
+  case 15:
+#line 184 "albumtheme.y"
       {
 	GthExpr *else_expr;
 	GthCondition *cond;
@@ -1320,28 +1372,25 @@
 	gth_condition_add_document (cond, yyvsp[0].list);
 
 	yyval.cond = cond;
-	;
-      }
+		;}
       break;
 
-    case 14:
-#line 182 "albumtheme.y"
+  case 16:
+#line 196 "albumtheme.y"
       {
 	yyval.cond = NULL;
-	;
-      }
+		;}
       break;
 
-    case 17:
-#line 193 "albumtheme.y"
+  case 19:
+#line 207 "albumtheme.y"
       {
 	yyval.expr = yyvsp[-1].expr;
-	;
-      }
+		;}
       break;
 
-    case 18:
-#line 197 "albumtheme.y"
+  case 20:
+#line 211 "albumtheme.y"
       {
 	GthExpr *e = gth_expr_new ();
 
@@ -1353,12 +1402,11 @@
 	gth_expr_unref (yyvsp[0].expr);
 
 	yyval.expr = e;
-	;
-      }
+		;}
       break;
 
-    case 19:
-#line 210 "albumtheme.y"
+  case 21:
+#line 224 "albumtheme.y"
       {
 	GthExpr *e = gth_expr_new ();
 
@@ -1370,12 +1418,11 @@
 	gth_expr_unref (yyvsp[0].expr);
 
 	yyval.expr = e;
-	;
-      }
+		;}
       break;
 
-    case 20:
-#line 223 "albumtheme.y"
+  case 22:
+#line 237 "albumtheme.y"
       {
 	GthExpr *e = gth_expr_new ();
 
@@ -1387,12 +1434,11 @@
 	gth_expr_unref (yyvsp[0].expr);
 
 	yyval.expr = e;
-	;
-      }
+		;}
       break;
 
-    case 21:
-#line 236 "albumtheme.y"
+  case 23:
+#line 250 "albumtheme.y"
       {
 	GthExpr *e = gth_expr_new ();
 
@@ -1404,12 +1450,11 @@
 	gth_expr_unref (yyvsp[0].expr);
 
 	yyval.expr = e;
-	;
-      }
+		;}
       break;
 
-    case 22:
-#line 249 "albumtheme.y"
+  case 24:
+#line 263 "albumtheme.y"
       {
 	GthExpr *e = gth_expr_new ();
 
@@ -1421,12 +1466,11 @@
 	gth_expr_unref (yyvsp[0].expr);
 
 	yyval.expr = e;
-	;
-      }
+		;}
       break;
 
-    case 23:
-#line 262 "albumtheme.y"
+  case 25:
+#line 276 "albumtheme.y"
       {
 	GthExpr *e = gth_expr_new ();
 
@@ -1438,312 +1482,331 @@
 	gth_expr_unref (yyvsp[0].expr);
 
 	yyval.expr = e;
-	;
-      }
+		;}
       break;
 
-    case 24:
-#line 275 "albumtheme.y"
+  case 26:
+#line 289 "albumtheme.y"
       {
 	yyval.expr = yyvsp[0].expr;
-	;
-      }
+		;}
       break;
 
-    case 25:
-#line 279 "albumtheme.y"
+  case 27:
+#line 293 "albumtheme.y"
       {
 	gth_expr_push_op (yyvsp[0].expr, GTH_OP_NEG);
 	yyval.expr = yyvsp[0].expr;
-	;
-      }
+		;}
       break;
 
-    case 26:
-#line 284 "albumtheme.y"
+  case 28:
+#line 298 "albumtheme.y"
       {
 	gth_expr_push_op (yyvsp[0].expr, GTH_OP_NOT);
 	yyval.expr = yyvsp[0].expr;
-	;
-      }
+		;}
       break;
 
-    case 27:
-#line 289 "albumtheme.y"
+  case 29:
+#line 303 "albumtheme.y"
       {
 	GthExpr *e = gth_expr_new ();
 	gth_expr_push_var (e, yyvsp[0].text);
 	g_free (yyvsp[0].text);
 	yyval.expr = e;
-	;
-      }
+		;}
       break;
 
-    case 28:
-#line 296 "albumtheme.y"
+  case 30:
+#line 310 "albumtheme.y"
       {
 	GthExpr *e = gth_expr_new ();
 	gth_expr_push_constant (e, yyvsp[0].ivalue);
 	yyval.expr = e;
-	;
-      }
-      break;
-
-    case 29:
-#line 303 "albumtheme.y"
-      {
-	yyval.tag = gth_tag_new (yyvsp[-2].ivalue, yyvsp[-1].list);
-	;
-      }
-      break;
-
-    case 30:
-#line 308 "albumtheme.y"
-      {
-	yyval.tag = gth_tag_new (yyvsp[-2].ivalue, yyvsp[-1].list);
-	;
-      }
+		;}
       break;
 
     case 31:
-#line 313 "albumtheme.y"
+#line 316 "albumtheme.y"
       {
-	yyval.ivalue = yyvsp[0].ivalue;;
-      }
+			yyval.expr = yyvsp[0].expr;
+		;}
       break;
 
     case 32:
-#line 314 "albumtheme.y"
+#line 319 "albumtheme.y"
       {
-	yyval.ivalue = yyvsp[0].ivalue;;
+			GthExpr *e = gth_expr_new ();
+			g_string_append(yyvsp[-2].string, yyvsp[-1].string->str);
+			g_string_free(yyvsp[-1].string, TRUE);
+			if (yyvsp[0].string != NULL)
+			{
+				g_string_append(yyvsp[-2].string, yyvsp[0].string->str);
+				g_string_free(yyvsp[0].string, TRUE);
       }
+			gth_expr_push_var(e, yyvsp[-2].string->str);
+			g_string_free(yyvsp[-2].string, TRUE);
+			yyval.expr = e;
+		;}
       break;
 
     case 33:
-#line 315 "albumtheme.y"
+#line 333 "albumtheme.y"
       {
-	yyval.ivalue = yyvsp[0].ivalue;;
-      }
+			GString* s = g_string_new(yyvsp[0].text);
+			g_free(yyvsp[0].text);
+			yyval.string = s;
+		;}
       break;
 
     case 34:
-#line 316 "albumtheme.y"
+#line 339 "albumtheme.y"
       {
-	yyval.ivalue = yyvsp[0].ivalue;;
-      }
+			GString* s = g_string_new(yyvsp[0].text);
+			g_string_prepend_c(s, ' ');
+			g_free(yyvsp[0].text);
+			yyval.string = s;
+		;}
       break;
 
     case 35:
-#line 317 "albumtheme.y"
+#line 345 "albumtheme.y"
       {
-	yyval.ivalue = yyvsp[0].ivalue;;
-      }
+			GString* s = g_string_new("");
+			g_string_sprintf(s, " %i", yyvsp[0].ivalue);
+			yyval.string = s;
+		;}
       break;
 
     case 36:
-#line 318 "albumtheme.y"
+#line 351 "albumtheme.y"
       {
-	yyval.ivalue = yyvsp[0].ivalue;;
+			if (yyvsp[0].string != NULL)
+			{
+				g_string_append(yyvsp[-1].string, yyvsp[0].string->str);
+				g_string_free(yyvsp[0].string, TRUE);
       }
+			yyval.string = yyvsp[-1].string;
+		;}
       break;
 
     case 37:
-#line 319 "albumtheme.y"
+#line 359 "albumtheme.y"
       {
-	yyval.ivalue = yyvsp[0].ivalue;;
-      }
+			yyval.string = NULL;
+		;}
       break;
 
     case 38:
-#line 320 "albumtheme.y"
+#line 363 "albumtheme.y"
       {
-	yyval.ivalue = yyvsp[0].ivalue;;
-      }
+			yyval.tag = gth_tag_new (yyvsp[-2].ivalue, yyvsp[-1].list);
+		;}
       break;
 
     case 39:
-#line 321 "albumtheme.y"
+#line 368 "albumtheme.y"
       {
-	yyval.ivalue = yyvsp[0].ivalue;;
-      }
+			yyval.tag = gth_tag_new (yyvsp[-2].ivalue, yyvsp[-1].list);
+		;}
       break;
 
     case 40:
-#line 322 "albumtheme.y"
-      {
-	yyval.ivalue = yyvsp[0].ivalue;;
-      }
+#line 373 "albumtheme.y"
+    { yyval.ivalue = yyvsp[0].ivalue; ;}
       break;
 
     case 41:
-#line 323 "albumtheme.y"
-      {
-	yyval.ivalue = yyvsp[0].ivalue;;
-      }
+#line 374 "albumtheme.y"
+    { yyval.ivalue = yyvsp[0].ivalue; ;}
       break;
 
     case 42:
-#line 324 "albumtheme.y"
-      {
-	yyval.ivalue = yyvsp[0].ivalue;;
-      }
+#line 375 "albumtheme.y"
+    { yyval.ivalue = yyvsp[0].ivalue; ;}
       break;
 
     case 43:
-#line 325 "albumtheme.y"
-      {
-	yyval.ivalue = yyvsp[0].ivalue;;
-      }
+#line 376 "albumtheme.y"
+    { yyval.ivalue = yyvsp[0].ivalue; ;}
       break;
 
     case 44:
-#line 326 "albumtheme.y"
-      {
-	yyval.ivalue = yyvsp[0].ivalue;;
-      }
+#line 377 "albumtheme.y"
+    { yyval.ivalue = yyvsp[0].ivalue; ;}
       break;
 
     case 45:
-#line 327 "albumtheme.y"
-      {
-	yyval.ivalue = yyvsp[0].ivalue;;
-      }
+#line 378 "albumtheme.y"
+    { yyval.ivalue = yyvsp[0].ivalue; ;}
       break;
 
     case 46:
-#line 328 "albumtheme.y"
-      {
-	yyval.ivalue = yyvsp[0].ivalue;;
-      }
+#line 379 "albumtheme.y"
+    { yyval.ivalue = yyvsp[0].ivalue; ;}
       break;
 
     case 47:
-#line 329 "albumtheme.y"
-      {
-	yyval.ivalue = yyvsp[0].ivalue;;
-      }
+#line 380 "albumtheme.y"
+    { yyval.ivalue = yyvsp[0].ivalue; ;}
       break;
 
     case 48:
-#line 330 "albumtheme.y"
-      {
-	yyval.ivalue = yyvsp[0].ivalue;;
-      }
+#line 381 "albumtheme.y"
+    { yyval.ivalue = yyvsp[0].ivalue; ;}
       break;
 
     case 49:
-#line 331 "albumtheme.y"
-      {
-	yyval.ivalue = yyvsp[0].ivalue;;
-      }
+#line 382 "albumtheme.y"
+    { yyval.ivalue = yyvsp[0].ivalue; ;}
       break;
 
     case 50:
-#line 332 "albumtheme.y"
-      {
-	yyval.ivalue = yyvsp[0].ivalue;;
-      }
+#line 383 "albumtheme.y"
+    { yyval.ivalue = yyvsp[0].ivalue; ;}
       break;
 
     case 51:
-#line 333 "albumtheme.y"
-      {
-	yyval.ivalue = yyvsp[0].ivalue;;
-      }
+#line 384 "albumtheme.y"
+    { yyval.ivalue = yyvsp[0].ivalue; ;}
       break;
 
     case 52:
-#line 334 "albumtheme.y"
-      {
-	yyval.ivalue = yyvsp[0].ivalue;;
-      }
+#line 385 "albumtheme.y"
+    { yyval.ivalue = yyvsp[0].ivalue; ;}
       break;
 
     case 53:
-#line 335 "albumtheme.y"
-      {
-	yyval.ivalue = yyvsp[0].ivalue;;
-      }
+#line 386 "albumtheme.y"
+    { yyval.ivalue = yyvsp[0].ivalue; ;}
       break;
 
     case 54:
-#line 336 "albumtheme.y"
-      {
-	yyval.ivalue = yyvsp[0].ivalue;;
-      }
+#line 387 "albumtheme.y"
+    { yyval.ivalue = yyvsp[0].ivalue; ;}
       break;
 
     case 55:
-#line 337 "albumtheme.y"
-      {
-	yyval.ivalue = yyvsp[0].ivalue;;
-      }
+#line 388 "albumtheme.y"
+    { yyval.ivalue = yyvsp[0].ivalue; ;}
       break;
 
     case 56:
-#line 338 "albumtheme.y"
-      {
-	yyval.ivalue = yyvsp[0].ivalue;;
-      }
+#line 389 "albumtheme.y"
+    { yyval.ivalue = yyvsp[0].ivalue; ;}
       break;
 
     case 57:
-#line 339 "albumtheme.y"
-      {
-	yyval.ivalue = yyvsp[0].ivalue;;
-      }
+#line 390 "albumtheme.y"
+    { yyval.ivalue = yyvsp[0].ivalue; ;}
       break;
 
     case 58:
-#line 342 "albumtheme.y"
+#line 391 "albumtheme.y"
+    { yyval.ivalue = yyvsp[0].ivalue; ;}
+    break;
+
+  case 59:
+#line 392 "albumtheme.y"
+    { yyval.ivalue = yyvsp[0].ivalue; ;}
+    break;
+
+  case 60:
+#line 393 "albumtheme.y"
+    { yyval.ivalue = yyvsp[0].ivalue; ;}
+    break;
+
+  case 61:
+#line 394 "albumtheme.y"
+    { yyval.ivalue = yyvsp[0].ivalue; ;}
+    break;
+
+  case 62:
+#line 395 "albumtheme.y"
+    { yyval.ivalue = yyvsp[0].ivalue; ;}
+    break;
+
+  case 63:
+#line 396 "albumtheme.y"
+    { yyval.ivalue = yyvsp[0].ivalue; ;}
+    break;
+
+  case 64:
+#line 397 "albumtheme.y"
+    { yyval.ivalue = yyvsp[0].ivalue; ;}
+    break;
+
+  case 65:
+#line 398 "albumtheme.y"
+    { yyval.ivalue = yyvsp[0].ivalue; ;}
+    break;
+
+  case 66:
+#line 399 "albumtheme.y"
+    { yyval.ivalue = yyvsp[0].ivalue; ;}
+    break;
+
+  case 67:
+#line 400 "albumtheme.y"
+    { yyval.ivalue = yyvsp[0].ivalue; ;}
+    break;
+
+  case 68:
+#line 401 "albumtheme.y"
+    { yyval.ivalue = yyvsp[0].ivalue; ;}
+    break;
+
+  case 69:
+#line 402 "albumtheme.y"
+    { yyval.ivalue = yyvsp[0].ivalue; ;}
+    break;
+
+  case 70:
+#line 405 "albumtheme.y"
       {
 	yyval.list = g_list_prepend (yyvsp[0].list, yyvsp[-1].var);
-	;
-      }
+		;}
       break;
 
-    case 59:
-#line 346 "albumtheme.y"
+  case 71:
+#line 409 "albumtheme.y"
       {
 	yyval.list = NULL;
-	;
-      }
+		;}
       break;
 
-    case 60:
-#line 351 "albumtheme.y"
+  case 72:
+#line 414 "albumtheme.y"
       {
 	yyval.var = gth_var_new_expression (yyvsp[-2].text, yyvsp[0].expr);
 	g_free (yyvsp[-2].text);
-	;
-      }
+		;}
       break;
 
-    case 61:
-#line 356 "albumtheme.y"
+  case 73:
+#line 419 "albumtheme.y"
       {
 	yyval.var = gth_var_new_expression (yyvsp[-4].text, yyvsp[-1].expr);
-	g_free (yyvsp[-4].text);
-	;
-      }
+			g_free(yyvsp[-4].text);
+		;}
       break;
 
-    case 62:
-#line 361 "albumtheme.y"
+  case 74:
+#line 424 "albumtheme.y"
       {
 	GthExpr *e = gth_expr_new ();
 	gth_expr_push_constant (e, 1);
 	yyval.var = gth_var_new_expression (yyvsp[0].text, e);
 	g_free (yyvsp[0].text);
-	;
-      }
+		;}
       break;
 
 
     }
 
-/* Line 999 of yacc.c.  */
-#line 1673 "albumtheme.c"
+/* Line 1000 of yacc.c.  */
+#line 1810 "albumtheme.tab.c"
 
   yyvsp -= yylen;
   yyssp -= yylen;
@@ -1784,18 +1847,33 @@
 	{
 	  YYSIZE_T yysize = 0;
 	  int yytype = YYTRANSLATE (yychar);
+	  const char* yyprefix;
 	  char *yymsg;
-	  int yyx, yycount;
+	  int yyx;
 
-	  yycount = 0;
 	  /* Start YYX at -YYN if negative to avoid negative indexes in
 	     YYCHECK.  */
-	  for (yyx = yyn < 0 ? -yyn : 0;
-	       yyx < (int) (sizeof (yytname) / sizeof (char *)); yyx++)
+	  int yyxbegin = yyn < 0 ? -yyn : 0;
+
+	  /* Stay within bounds of both yycheck and yytname.  */
+	  int yychecklim = YYLAST - yyn;
+	  int yyxend = yychecklim < YYNTOKENS ? yychecklim : YYNTOKENS;
+	  int yycount = 0;
+
+	  yyprefix = ", expecting ";
+	  for (yyx = yyxbegin; yyx < yyxend; ++yyx)
 	    if (yycheck[yyx + yyn] == yyx && yyx != YYTERROR)
-	      yysize += yystrlen (yytname[yyx]) + 15, yycount++;
-	  yysize += yystrlen ("syntax error, unexpected ") + 1;
-	  yysize += yystrlen (yytname[yytype]);
+	      {
+		yysize += yystrlen (yyprefix) + yystrlen (yytname [yyx]);
+		yycount += 1;
+		if (yycount == 5)
+		  {
+		    yysize = 0;
+		    break;
+		  }
+	      }
+	  yysize += (sizeof ("syntax error, unexpected ")
+		     + yystrlen (yytname[yytype]));
 	  yymsg = (char *) YYSTACK_ALLOC (yysize);
 	  if (yymsg != 0)
 	    {
@@ -1804,16 +1882,13 @@
 
 	      if (yycount < 5)
 		{
-		  yycount = 0;
-		  for (yyx = yyn < 0 ? -yyn : 0;
-		       yyx < (int) (sizeof (yytname) / sizeof (char *));
-		       yyx++)
+		  yyprefix = ", expecting ";
+		  for (yyx = yyxbegin; yyx < yyxend; ++yyx)
 		    if (yycheck[yyx + yyn] == yyx && yyx != YYTERROR)
 		      {
-			const char *yyq = !yycount ? ", expecting " : " or ";
-			yyp = yystpcpy (yyp, yyq);
+			yyp = yystpcpy (yyp, yyprefix);
 			yyp = yystpcpy (yyp, yytname[yyx]);
-			yycount++;
+			yyprefix = " or ";
 		      }
 		}
 	      yyerror (yymsg);
@@ -1834,35 +1909,55 @@
       /* If just tried and failed to reuse lookahead token after an
          error, discard it.  */
 
-      /* Return failure if at end of input.  */
+      if (yychar <= YYEOF)
+        {
+          /* If at end of input, pop the error token,
+	     then the rest of the stack, then return failure.  */
       if (yychar == YYEOF)
+	     for (;;)
 	{
-	  /* Pop the error token.  */
 	  YYPOPSTACK;
-	  /* Pop the rest of the stack.  */
-	  while (yyss < yyssp)
-	    {
+		 if (yyssp == yyss)
+		   YYABORT;
 	      YYDSYMPRINTF ("Error: popping", yystos[*yyssp], yyvsp, yylsp);
 	      yydestruct (yystos[*yyssp], yyvsp);
-	      YYPOPSTACK;
 	    }
-	  YYABORT;
 	}
-
+      else
+	{
       YYDSYMPRINTF ("Error: discarding", yytoken, &yylval, &yylloc);
       yydestruct (yytoken, &yylval);
       yychar = YYEMPTY;
 
     }
+    }
 
   /* Else will try to reuse lookahead token after shifting the error
      token.  */
   goto yyerrlab1;
 
 
-/*----------------------------------------------------.
-| yyerrlab1 -- error raised explicitly by an action.  |
-`----------------------------------------------------*/
+/*---------------------------------------------------.
+| yyerrorlab -- error raised explicitly by YYERROR.  |
+`---------------------------------------------------*/
+yyerrorlab:
+
+#ifdef __GNUC__
+  /* Pacify GCC when the user code never invokes YYERROR and the label
+     yyerrorlab therefore never appears in user code.  */
+  if (0)
+     goto yyerrorlab;
+#endif
+
+  yyvsp -= yylen;
+  yyssp -= yylen;
+  yystate = *yyssp;
+  goto yyerrlab1;
+
+
+/*-------------------------------------------------------------.
+| yyerrlab1 -- common code for both syntax error and YYERROR.  |
+`-------------------------------------------------------------*/
 yyerrlab1:
   yyerrstatus = 3;		/* Each real token shifted decrements this.  */
 
@@ -1886,9 +1981,8 @@
 
       YYDSYMPRINTF ("Error: popping", yystos[*yyssp], yyvsp, yylsp);
       yydestruct (yystos[yystate], yyvsp);
-      yyvsp--;
-      yystate = *--yyssp;
-
+      YYPOPSTACK;
+      yystate = *yyssp;
       YY_STACK_PRINT (yyss, yyssp);
     }
 
@@ -1937,7 +2031,7 @@
 }
 
 
-#line 369 "albumtheme.y"
+#line 434 "albumtheme.y"
 
 
 int
@@ -1947,8 +2041,7 @@
 }
 
 
-void
-yyerror (char *fmt, ...)
+void yyerror (char *fmt, ...)
 {
   va_list ap;
 
@@ -1960,3 +2053,5 @@
 
 
 #include "lex.albumtheme.c"
+
+
diff -bruP gthumb-2.6.8-old/src/albumtheme.l gthumb-2.6.8/src/albumtheme.l
--- gthumb-2.6.8-old/src/albumtheme.l	2005-09-21 01:56:16.000000000 -0600
+++ gthumb-2.6.8/src/albumtheme.l	2005-10-07 18:36:45.000000000 -0600
@@ -90,6 +90,16 @@
 					yylval.ivalue = GTH_TAG_COMMENT;
 					return COMMENT;
 				}
+"<gthumb:place"			{
+					BEGIN (TAG);
+					yylval.ivalue = GTH_TAG_PLACE;
+					return PLACE;
+				}
+"<gthumb:date_time"			{
+					BEGIN (TAG);
+					yylval.ivalue = GTH_TAG_DATE_TIME;
+					return DATE_TIME;
+				}
 "<gthumb:page_link"		{ 
 					BEGIN (TAG);
 					yylval.ivalue = GTH_TAG_PAGE_LINK;
@@ -110,6 +120,11 @@
 					yylval.ivalue = GTH_TAG_TABLE;
 					return TABLE;
 				}
+"<gthumb:thumbs"			{ 
+					BEGIN (TAG);
+					yylval.ivalue = GTH_TAG_THUMBS;
+					return THUMBS;
+				}
 "<gthumb:date"			{ 
 					BEGIN (TAG);
 					yylval.ivalue = GTH_TAG_DATE;
diff -bruP gthumb-2.6.8-old/src/albumtheme-private.h gthumb-2.6.8/src/albumtheme-private.h
--- gthumb-2.6.8-old/src/albumtheme-private.h	2005-09-21 01:56:16.000000000 -0600
+++ gthumb-2.6.8/src/albumtheme-private.h	2005-10-07 18:54:33.000000000 -0600
@@ -192,10 +192,13 @@
 	GTH_TAG_FILEPATH,
 	GTH_TAG_FILESIZE,
 	GTH_TAG_COMMENT,
+	GTH_TAG_PLACE,
+	GTH_TAG_DATE_TIME,
 	GTH_TAG_PAGE_LINK,
 	GTH_TAG_PAGE_IDX,
 	GTH_TAG_PAGES,
 	GTH_TAG_TABLE,
+	GTH_TAG_THUMBS,
 	GTH_TAG_DATE,
 	GTH_TAG_TEXT,
 	GTH_TAG_HTML,
diff -bruP gthumb-2.6.8-old/src/albumtheme.y gthumb-2.6.8/src/albumtheme.y
--- gthumb-2.6.8-old/src/albumtheme.y	2005-09-21 01:56:16.000000000 -0600
+++ gthumb-2.6.8/src/albumtheme.y	2005-10-20 22:38:43.000000000 -0600
@@ -35,6 +35,7 @@
 %union {
 	char         *text;
 	int           ivalue;
+        GString      *string;
 	GthVar       *var;
 	GthTag       *tag;
 	GthExpr      *expr;
@@ -57,10 +58,13 @@
 %token <ivalue> FILEPATH
 %token <ivalue> FILESIZE
 %token <ivalue> COMMENT 
+%token <ivalue> PLACE
+%token <ivalue> DATE_TIME 
 %token <ivalue> PAGE_LINK 
 %token <ivalue> PAGE_IDX 
 %token <ivalue> PAGES 
 %token <ivalue> TABLE 
+%token <ivalue> THUMBS
 %token <ivalue> DATE 
 %token <ivalue> TEXT TEXT_END
 %token <ivalue> EXIF_EXPOSURE_TIME
@@ -88,6 +92,10 @@
 %type <list>   arg_list
 %type <var>    arg
 %type <expr>   expr
+%type <expr>   quoted_expr
+%type <string> constant_list
+%type <string> constant
+%type <string> constant1
 
 %left  <ivalue> BOOL_OP
 %left  <ivalue> COMPARE
@@ -150,6 +158,9 @@
 gthumb_if	: IF expr END_TAG {
 			$$ = gth_condition_new ($2);
 		}
+		| IF '"' quoted_expr '"' END_TAG {
+			$$ = gth_condition_new ($3);
+		}
 		;
 
 opt_if_list     : gthumb_else_if document opt_if_list {
@@ -165,6 +176,9 @@
 gthumb_else_if  : ELSE_IF expr END_TAG {
 			$$ = gth_condition_new ($2);
 		}
+		| ELSE_IF '"' quoted_expr '"' END_TAG {
+			$$ = gth_condition_new ($3);
+		}
 		;
 
 opt_else        : gthumb_else document {
@@ -299,7 +313,53 @@
 			$$ = e;
 		}
 		;
-
+quoted_expr     : expr {
+			$$ = $1;
+		}
+		| constant1 constant constant_list {
+			GthExpr *e = gth_expr_new ();
+			g_string_append($1, $2->str);
+			g_string_free($2, TRUE);
+			if ($3 != NULL)
+			{
+				g_string_append($1, $3->str);
+				g_string_free($3, TRUE);
+			}
+			gth_expr_push_var(e, $1->str);
+			g_string_free($1, TRUE);
+			$$ = e;
+		}
+		;
+constant1       : NAME {
+			GString* s = g_string_new($1);
+			g_free($1);
+			$$ = s;
+		}
+		;
+constant        : NAME {
+			GString* s = g_string_new($1);
+			g_string_prepend_c(s, ' ');
+			g_free($1);
+			$$ = s;
+		}
+		| NUMBER {
+			GString* s = g_string_new("");
+			g_string_sprintf(s, " %i", $1);
+			$$ = s;
+		}
+		;
+constant_list   : constant constant_list {
+			if ($2 != NULL)
+			{
+				g_string_append($1, $2->str);
+				g_string_free($2, TRUE);
+			}
+			$$ = $1;
+		}
+		| /* empty */ {
+			$$ = NULL;
+		}
+		;
 gthumb_text_tag	: TEXT arg_list END_TAG {
 			$$ = gth_tag_new ($1, $2);
 		}
@@ -322,10 +382,13 @@
 		| FILEPATH            { $$ = $1; }
 		| FILESIZE            { $$ = $1; }
 		| COMMENT             { $$ = $1; }
+		| PLACE               { $$ = $1; }
+		| DATE_TIME           { $$ = $1; }
 		| PAGE_LINK           { $$ = $1; }
 		| PAGE_IDX            { $$ = $1; }
 		| PAGES               { $$ = $1; }
 		| TABLE               { $$ = $1; }
+		| THUMBS              { $$ = $1; }
 		| DATE                { $$ = $1; }
 		| EXIF_EXPOSURE_TIME  { $$ = $1; }
 		| EXIF_EXPOSURE_MODE  { $$ = $1; }
@@ -353,9 +416,9 @@
 			g_free ($1);
 		}
 
-		| NAME '=' '"' expr '"' { 
+		| NAME '=' '"' quoted_expr '"' { 
 			$$ = gth_var_new_expression ($1, $4);
-			g_free ($1);
+			g_free($1);
 		}
 
 		| NAME {
@@ -366,6 +429,8 @@
 		}
 		;
 
+                
+
 %%
 
 int
diff -bruP gthumb-2.6.8-old/src/catalog-web-exporter.c gthumb-2.6.8/src/catalog-web-exporter.c
--- gthumb-2.6.8-old/src/catalog-web-exporter.c	2005-09-21 01:56:16.000000000 -0600
+++ gthumb-2.6.8/src/catalog-web-exporter.c	2005-10-19 18:09:04.000000000 -0600
@@ -77,6 +77,8 @@
 
 struct _ImageData {
 	char             *comment;
+	char             *place;
+	char             *date_time;
 	char             *src_filename;
 	char             *dest_filename;
 	GnomeVFSFileSize  file_size;
@@ -121,9 +123,30 @@
 	idata = g_new (ImageData, 1);
 
 	cdata = comments_load_comment (filename);
-	idata->comment = comments_get_comment_as_xml_string (cdata, "&nbsp;<br />", "&nbsp;<br />");
 	if (cdata != NULL)
+	{
+		/*idata->comment = comments_get_comment_as_xml_string (cdata, "&nbsp;<br />", "&nbsp;<br />");*/
+		idata->comment = g_strdup(cdata->comment);
+		idata->place = g_strdup(cdata->place);
+		if (cdata->time != 0)
+		{
+			struct tm* tm;
+			char time_txt[50];
+			tm = localtime(&(cdata->time));
+			if (tm->tm_hour + tm->tm_min + tm->tm_sec == 0)
+				strftime(time_txt, 50, _("%d %B %Y"), tm);
+			else
+				strftime(time_txt, 50, _("%d %B %Y, %H:%M"), tm);
+			idata->date_time = g_locale_to_utf8(time_txt, -1, 0, 0, 0);
+		}
 		comment_data_free (cdata);
+	}
+        else
+        {
+            idata->comment = NULL;
+            idata->place = NULL;
+            idata->date_time = NULL;
+        }
 
 	idata->src_filename = g_strdup (filename);
 	idata->dest_filename = g_strconcat ("img", 
@@ -155,6 +178,8 @@
 image_data_free (ImageData *idata)
 {
 	g_free (idata->comment);
+	g_free (idata->place);
+	g_free (idata->date_time);
 	g_free (idata->src_filename);
 	g_free (idata->dest_filename);
 
@@ -315,11 +340,12 @@
 	ce->resize_max_width = 0;
 	ce->resize_max_height = 0;
 
+	ce->single_index = FALSE;
 	ce->preview_max_width = 0;
 	ce->preview_max_height = 0;
 
 	ce->index_caption_mask = GTH_CAPTION_IMAGE_DIM | GTH_CAPTION_FILE_SIZE;
-	ce->image_caption_mask = GTH_CAPTION_COMMENT | GTH_CAPTION_EXIF_DATE_TIME;
+	ce->image_caption_mask = GTH_CAPTION_COMMENT | GTH_CAPTION_PLACE | GTH_CAPTION_EXIF_DATE_TIME;
 }
 
 
@@ -476,6 +502,16 @@
 
 
 void
+catalog_web_exporter_set_single_index (CatalogWebExporter *ce,
+				      gboolean            single)
+{
+	g_return_if_fail (IS_CATALOG_WEB_EXPORTER (ce));
+	ce->single_index = single;
+	ce->page_rows = INT_MAX/128; /* shouldn't overflow when multiplied by rows */
+}
+
+
+void
 catalog_web_exporter_set_thumb_size (CatalogWebExporter *ce,
 				     int                 width,
 				     int                 height)
@@ -680,6 +716,10 @@
 		return ce->index_caption_mask & GTH_CAPTION_FILE_SIZE;
 	else if (strcmp (var_name, "comment_visibility_index") == 0)
 		return ce->index_caption_mask & GTH_CAPTION_COMMENT;
+	else if (strcmp (var_name, "place_visibility_index") == 0)
+		return ce->index_caption_mask & GTH_CAPTION_PLACE;
+	else if (strcmp (var_name, "date_time_visibility_index") == 0)
+		return ce->index_caption_mask & GTH_CAPTION_DATE_TIME;
 	else if (strcmp (var_name, "exif_date_time_visibility_index") == 0)
 		return ce->index_caption_mask & GTH_CAPTION_EXIF_DATE_TIME;
 	else if (strcmp (var_name, "exif_exposure_time_visibility_index") == 0)
@@ -707,6 +747,10 @@
 		return ce->image_caption_mask & GTH_CAPTION_FILE_SIZE;
 	else if (strcmp (var_name, "comment_visibility_image") == 0)
 		return ce->image_caption_mask & GTH_CAPTION_COMMENT;
+	else if (strcmp (var_name, "place_visibility_image") == 0)
+		return ce->image_caption_mask & GTH_CAPTION_PLACE;
+	else if (strcmp (var_name, "date_time_visibility_image") == 0)
+		return ce->image_caption_mask & GTH_CAPTION_DATE_TIME;
 	else if (strcmp (var_name, "exif_date_time_visibility_image") == 0)
 		return ce->image_caption_mask & GTH_CAPTION_EXIF_DATE_TIME;
 	else if (strcmp (var_name, "exif_exposure_time_visibility_image") == 0)
@@ -724,6 +768,9 @@
 	else if (strcmp (var_name, "exif_camera_model_visibility_image") == 0)
 		return ce->image_caption_mask & GTH_CAPTION_EXIF_CAMERA_MODEL;
 
+	else if (strcmp(var_name, "copy_originals") == 0)
+		return ce->copy_images;
+
 	g_warning ("[GetVarValue] Unknown variable name: %s", var_name);
 	
 	return 0;
@@ -825,6 +872,8 @@
 get_page_idx_from_image_idx (CatalogWebExporter *ce,
 			     int                 image_idx)
 {
+	if (ce->single_index)
+		return 1;
 	return image_idx / (ce->page_rows * ce->page_cols);
 }
 
@@ -1079,6 +1128,10 @@
 		const char *class;
 		char       *class_attr;
 		char       *filename;
+		const char *alt;
+		char       *alt_attr;
+		const char *id;
+		char       *id_attr;
 		GList      *scan;
 
 
@@ -1135,12 +1188,27 @@
 			escaped_path = escape_uri (image_src_relative);
 			e_escaped_path = _g_escape_text_for_html (escaped_path, -1);
 
-			line = g_strdup_printf ("<img src=\"%s\" alt=\"%s\" width=\"%d\" height=\"%d\"%s />",
-						e_escaped_path,
+			alt = gth_tag_get_str (ce, tag, "alt");
+			if (alt)
+				alt_attr = g_strdup(alt);
+			else
+				alt_attr = g_strdup (e_escaped_path);
+			
+			id = gth_tag_get_str (ce, tag, "id");
+			if (id)
+				id_attr = g_strdup_printf(" id=\"%s\"", id);
+			else
+				id_attr = g_strdup("");
+
+			line = g_strdup_printf ("<img src=\"%s\" alt=\"%s\" width=\"%d\" height=\"%d\"%s%s />",
 						e_escaped_path,
+						alt_attr,
 						image_width,
 						image_height,
+						id_attr,
 						class_attr);
+			g_free (id_attr);
+			g_free (alt_attr);
 			g_free (class_attr);
 			g_free (image_src);
 			g_free (image_src_relative);
@@ -1266,6 +1334,51 @@
 			write_line (line, fout);
 			break;
 
+		case GTH_TAG_PLACE:
+			idx = get_image_idx (tag, ce);
+			idata = g_list_nth (ce->file_list, idx)->data;
+			ce->eval_image = idata;
+			
+			if (idata->place == NULL)
+				break;
+
+			max_size = gth_tag_get_var (ce, tag, "max_size");
+			if (max_size <= 0)
+				line = g_strdup (idata->place);
+			else {
+				char *place = g_strndup (idata->place, max_size);
+				if (strlen (place) < strlen (idata->place))
+					line = g_strconcat (place, "...", NULL);
+				else
+					line = g_strdup (place);
+				g_free (place);
+			}
+
+			write_line (line, fout);
+			break;
+
+		case GTH_TAG_DATE_TIME:
+			idx = get_image_idx (tag, ce);
+			idata = g_list_nth (ce->file_list, idx)->data;
+			ce->eval_image = idata;
+			if (idata->date_time == NULL)
+				break;
+
+			max_size = gth_tag_get_var (ce, tag, "max_size");
+			if (max_size <= 0)
+				line = g_strdup (idata->date_time);
+			else {
+				char *date_time = g_strndup (idata->date_time, max_size);
+				if (strlen (date_time) < strlen (idata->date_time))
+					line = g_strconcat (date_time, "...", NULL);
+				else
+					line = g_strdup (date_time);
+				g_free (date_time);
+			}
+
+			write_line (line, fout);
+			break;
+
 		case GTH_TAG_PAGE_LINK:
 			if (gth_tag_get_var (ce, tag, "image_idx") != 0) {
 				int image_idx;
@@ -1298,6 +1411,7 @@
 			if (! allow_table)
 				break;
 
+			/* this may not work correctly if single_index is set */
 			for (r = 0; r < ce->page_rows; r++) {
 				if (ce->image < ce->n_images)
 					write_line ("  <tr class=\"tr_index\">\n", fout);
@@ -1322,6 +1436,19 @@
 			}
 			break;
 
+		case GTH_TAG_THUMBS:
+			if (! allow_table)
+				break;
+
+			for (r=0; r < (ce->single_index ? ce->n_images : ce->page_rows*ce->page_cols); r++)
+			{
+				if (ce->image >= ce->n_images)
+					break;
+				gth_parsed_doc_print(ce->thumbnail_parsed, ce, fout, FALSE);
+				ce->image++;
+			}
+			break;
+
 		case GTH_TAG_DATE:
 			line = get_current_date ();
 			write_markup_escape_line (line, fout);
@@ -1842,9 +1969,14 @@
 {
 	exporter_set_info (ce, _("Saving HTML pages: Indexes"));
 
+	if (ce->single_index)
+		ce->n_pages = 1;
+	else
+	{
 	ce->n_pages = ce->n_images / (ce->page_rows * ce->page_cols);
 	if (ce->n_images % (ce->page_rows * ce->page_cols) > 0)
 		ce->n_pages++;
+	}
 
 	ce->image = 0;
 	ce->page = 0;
diff -bruP gthumb-2.6.8-old/src/catalog-web-exporter.h gthumb-2.6.8/src/catalog-web-exporter.h
--- gthumb-2.6.8-old/src/catalog-web-exporter.h	2005-09-21 01:56:16.000000000 -0600
+++ gthumb-2.6.8/src/catalog-web-exporter.h	2005-10-19 17:40:28.000000000 -0600
@@ -58,6 +58,7 @@
 	int           page_rows;              /* Number of rows and columns
 	 				       * each page must have. */
 	int           page_cols;
+	gboolean      single_index;
 
 	char         *tmp_location;
 	char         *location;               /* Save files in this 
@@ -171,6 +172,9 @@
 						       int                 rows,
 						       int                 cols);
 
+void       catalog_web_exporter_set_single_index      (CatalogWebExporter *ce,
+						       gboolean            copy);
+
 void       catalog_web_exporter_set_image_caption     (CatalogWebExporter *ce,
 						       GthCaptionFields    caption);
 
diff -bruP gthumb-2.6.8-old/src/dlg-web-exporter.c gthumb-2.6.8/src/dlg-web-exporter.c
--- gthumb-2.6.8-old/src/dlg-web-exporter.c	2005-09-21 01:56:17.000000000 -0600
+++ gthumb-2.6.8/src/dlg-web-exporter.c	2005-10-19 18:06:14.000000000 -0600
@@ -84,6 +84,9 @@
 
 	GtkWidget          *wa_rows_spinbutton;
 	GtkWidget          *wa_cols_spinbutton;
+	GtkWidget          *wa_single_index_checkbutton;
+	GtkWidget          *wa_rows_hbox;
+	GtkWidget          *wa_cols_hbox;
 	GtkWidget          *wa_sort_images_optionmenu;
 	GtkWidget          *wa_reverse_order_checkbutton;
 
@@ -147,6 +150,8 @@
 
 	eel_gconf_set_integer (PREF_WEB_ALBUM_COLUMNS, gtk_spin_button_get_value_as_int (GTK_SPIN_BUTTON (data->wa_cols_spinbutton)));
 
+	eel_gconf_set_boolean (PREF_WEB_ALBUM_SINGLE_INDEX, gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (data->wa_single_index_checkbutton)));
+
 	pref_set_web_album_sort_order (idx_to_sort_method [gtk_option_menu_get_history (GTK_OPTION_MENU (data->wa_sort_images_optionmenu))]);
 
 	eel_gconf_set_boolean (PREF_WEB_ALBUM_REVERSE, gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (data->wa_reverse_order_checkbutton)));
@@ -182,6 +187,7 @@
 						idx_to_resize_height[gtk_option_menu_get_history (GTK_OPTION_MENU (data->wa_resize_images_optionmenu))]);
 
 	catalog_web_exporter_set_row_col (exporter, eel_gconf_get_integer (PREF_WEB_ALBUM_ROWS, 4), eel_gconf_get_integer (PREF_WEB_ALBUM_COLUMNS, 4));
+	catalog_web_exporter_set_single_index (exporter, eel_gconf_get_boolean (PREF_WEB_ALBUM_SINGLE_INDEX, FALSE));
 	
 	catalog_web_exporter_set_sorted (exporter, pref_get_web_album_sort_order (), eel_gconf_get_boolean (PREF_WEB_ALBUM_REVERSE, FALSE));
 	catalog_web_exporter_set_header (exporter, header);
@@ -274,6 +280,14 @@
 	gtk_widget_set_sensitive (data->wa_resize_images_options_hbox, gtk_toggle_button_get_active (button));
 }
 
+static void
+single_index_toggled_cb (GtkToggleButton *button,
+			 DialogData      *data)
+{
+	gtk_widget_set_sensitive (data->wa_rows_hbox, !gtk_toggle_button_get_active (button));
+	/*gtk_widget_set_sensitive (data->wa_cols_hbox, !gtk_toggle_button_get_active (button));*/
+}
+
 
 static void
 open_response_cb (GtkDialog  *file_sel,
@@ -367,6 +381,9 @@
 
 	data->wa_rows_spinbutton = glade_xml_get_widget (data->gui, "wa_rows_spinbutton");
 	data->wa_cols_spinbutton = glade_xml_get_widget (data->gui, "wa_cols_spinbutton");
+	data->wa_single_index_checkbutton = glade_xml_get_widget (data->gui, "wa_single_index_checkbutton");
+	data->wa_rows_hbox = glade_xml_get_widget (data->gui, "wa_rows_hbox");
+	data->wa_cols_hbox = glade_xml_get_widget (data->gui, "wa_cols_hbox");
 	data->wa_sort_images_optionmenu = glade_xml_get_widget (data->gui, "wa_sort_images_optionmenu");
 	data->wa_reverse_order_checkbutton = glade_xml_get_widget (data->gui, "wa_reverse_order_checkbutton");
 
@@ -406,6 +423,12 @@
 
 	gtk_spin_button_set_value (GTK_SPIN_BUTTON (data->wa_cols_spinbutton), eel_gconf_get_integer (PREF_WEB_ALBUM_COLUMNS, 4));
 
+	gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (data->wa_single_index_checkbutton), eel_gconf_get_boolean (PREF_WEB_ALBUM_SINGLE_INDEX, FALSE));
+
+	gtk_widget_set_sensitive (data->wa_rows_hbox, !eel_gconf_get_boolean (PREF_WEB_ALBUM_SINGLE_INDEX, FALSE));
+
+	/*gtk_widget_set_sensitive (data->wa_cols_hbox, !eel_gconf_get_boolean (PREF_WEB_ALBUM_SINGLE_INDEX, FALSE));*/
+
 	gtk_option_menu_set_history (GTK_OPTION_MENU (data->wa_sort_images_optionmenu), sort_method_to_idx [pref_get_web_album_sort_order ()]);
 
 	gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (data->wa_reverse_order_checkbutton), eel_gconf_get_boolean (PREF_WEB_ALBUM_REVERSE, FALSE));
@@ -464,6 +487,10 @@
 			  "toggled",
 			  G_CALLBACK (resize_image_toggled_cb),
 			  data);
+	g_signal_connect (G_OBJECT (data->wa_single_index_checkbutton),
+			  "toggled",
+			  G_CALLBACK (single_index_toggled_cb),
+			  data);
 
 	g_signal_connect (G_OBJECT (data->exporter), 
 			  "web_exporter_done",
@@ -982,6 +1009,8 @@
 	GtkWidget          *dialog;
 
 	GtkWidget          *c_comment_checkbutton;
+	GtkWidget          *c_place_checkbutton;
+	GtkWidget          *c_date_time_checkbutton;
 	GtkWidget          *c_imagedim_checkbutton;
 	GtkWidget          *c_filename_checkbutton;
 	GtkWidget          *c_filesize_checkbutton;
@@ -1018,6 +1047,10 @@
 
 	if (gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (cdata->c_comment_checkbutton)))
 		caption |= GTH_CAPTION_COMMENT;
+	if (gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (cdata->c_place_checkbutton)))
+		caption |= GTH_CAPTION_PLACE;
+	if (gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (cdata->c_date_time_checkbutton)))
+		caption |= GTH_CAPTION_DATE_TIME;
 	if (gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (cdata->c_imagedim_checkbutton)))
 		caption |= GTH_CAPTION_IMAGE_DIM;
 	if (gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (cdata->c_filename_checkbutton)))
@@ -1086,6 +1119,8 @@
 
 	cdata->dialog = glade_xml_get_widget (cdata->gui, "caption_dialog");
 	cdata->c_comment_checkbutton = glade_xml_get_widget (cdata->gui, "c_comment_checkbutton");
+	cdata->c_place_checkbutton = glade_xml_get_widget (cdata->gui, "c_place_checkbutton");
+	cdata->c_date_time_checkbutton = glade_xml_get_widget (cdata->gui, "c_date_time_checkbutton");
 	cdata->c_imagedim_checkbutton = glade_xml_get_widget (cdata->gui, "c_imagedim_checkbutton");
 	cdata->c_filename_checkbutton = glade_xml_get_widget (cdata->gui, "c_filename_checkbutton");
 	cdata->c_filesize_checkbutton = glade_xml_get_widget (cdata->gui, "c_filesize_checkbutton");
@@ -1128,6 +1163,10 @@
 
 	if (caption & GTH_CAPTION_COMMENT)
 		gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (cdata->c_comment_checkbutton), TRUE);
+	if (caption & GTH_CAPTION_PLACE)
+		gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (cdata->c_place_checkbutton), TRUE);
+	if (caption & GTH_CAPTION_DATE_TIME)
+		gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (cdata->c_date_time_checkbutton), TRUE);
 	if (caption & GTH_CAPTION_IMAGE_DIM)
 		gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (cdata->c_imagedim_checkbutton), TRUE);
 	if (caption & GTH_CAPTION_FILE_NAME)
diff -bruP gthumb-2.6.8-old/src/lex.albumtheme.c gthumb-2.6.8/src/lex.albumtheme.c
--- gthumb-2.6.8-old/src/lex.albumtheme.c	2005-09-21 01:56:17.000000000 -0600
+++ gthumb-2.6.8/src/lex.albumtheme.c	2005-10-07 18:38:50.000000000 -0600
@@ -1,7 +1,7 @@
 /* A lexical scanner generated by flex */
 
 /* Scanner skeleton version:
- * $Header: /cvs/gnome/gthumb/src/lex.albumtheme.c,v 1.5 2004/12/31 11:55:59 paobac Exp $
+ * $Header: /home/daffy/u0/vern/flex/RCS/flex.skl,v 2.91 96/09/10 16:58:48 vern Exp $
  */
 
 #define FLEX_SCANNER
@@ -41,8 +41,8 @@
 #endif /* ! __cplusplus */
 
 #ifdef __TURBOC__
-#pragma warn -rch
-#pragma warn -use
+ #pragma warn -rch
+ #pragma warn -use
 #include <io.h>
 #include <stdlib.h>
 #define YY_USE_CONST
@@ -142,7 +142,7 @@
 
 
 struct yy_buffer_state
-{
+	{
   FILE *yy_input_file;
 
   char *yy_ch_buf;		/* input buffer */
@@ -196,7 +196,7 @@
    * just pointing yyin at a new input file.
    */
 #define YY_BUFFER_EOF_PENDING 2
-};
+	};
 
 static YY_BUFFER_STATE yy_current_buffer = 0;
 
@@ -225,23 +225,23 @@
  */
 static int yy_did_buffer_switch_on_eof;
 
-void yyrestart YY_PROTO ((FILE * input_file));
+void yyrestart YY_PROTO(( FILE *input_file ));
 
-void yy_switch_to_buffer YY_PROTO ((YY_BUFFER_STATE new_buffer));
-void yy_load_buffer_state YY_PROTO ((void));
-YY_BUFFER_STATE yy_create_buffer YY_PROTO ((FILE * file, int size));
-void yy_delete_buffer YY_PROTO ((YY_BUFFER_STATE b));
-void yy_init_buffer YY_PROTO ((YY_BUFFER_STATE b, FILE * file));
-void yy_flush_buffer YY_PROTO ((YY_BUFFER_STATE b));
+void yy_switch_to_buffer YY_PROTO(( YY_BUFFER_STATE new_buffer ));
+void yy_load_buffer_state YY_PROTO(( void ));
+YY_BUFFER_STATE yy_create_buffer YY_PROTO(( FILE *file, int size ));
+void yy_delete_buffer YY_PROTO(( YY_BUFFER_STATE b ));
+void yy_init_buffer YY_PROTO(( YY_BUFFER_STATE b, FILE *file ));
+void yy_flush_buffer YY_PROTO(( YY_BUFFER_STATE b ));
 #define YY_FLUSH_BUFFER yy_flush_buffer( yy_current_buffer )
 
-YY_BUFFER_STATE yy_scan_buffer YY_PROTO ((char *base, yy_size_t size));
-YY_BUFFER_STATE yy_scan_string YY_PROTO ((yyconst char *yy_str));
-YY_BUFFER_STATE yy_scan_bytes YY_PROTO ((yyconst char *bytes, int len));
-
-static void *yy_flex_alloc YY_PROTO ((yy_size_t));
-static void *yy_flex_realloc YY_PROTO ((void *, yy_size_t));
-static void yy_flex_free YY_PROTO ((void *));
+YY_BUFFER_STATE yy_scan_buffer YY_PROTO(( char *base, yy_size_t size ));
+YY_BUFFER_STATE yy_scan_string YY_PROTO(( yyconst char *yy_str ));
+YY_BUFFER_STATE yy_scan_bytes YY_PROTO(( yyconst char *bytes, int len ));
+
+static void *yy_flex_alloc YY_PROTO(( yy_size_t ));
+static void *yy_flex_realloc YY_PROTO(( void *, yy_size_t ));
+static void yy_flex_free YY_PROTO(( void * ));
 
 #define yy_new_buffer yy_create_buffer
 
@@ -267,11 +267,10 @@
 extern char *yytext;
 #define yytext_ptr yytext
 
-static yy_state_type yy_get_previous_state YY_PROTO ((void));
-static yy_state_type yy_try_NUL_trans
-YY_PROTO ((yy_state_type current_state));
-static int yy_get_next_buffer YY_PROTO ((void));
-static void yy_fatal_error YY_PROTO ((yyconst char msg[]));
+static yy_state_type yy_get_previous_state YY_PROTO(( void ));
+static yy_state_type yy_try_NUL_trans YY_PROTO(( yy_state_type current_state ));
+static int yy_get_next_buffer YY_PROTO(( void ));
+static void yy_fatal_error YY_PROTO(( yyconst char msg[] ));
 
 /* Done after the current pattern has been matched and before the
  * corresponding action - sets up yytext.
@@ -283,50 +282,54 @@
 	*yy_cp = '\0'; \
 	yy_c_buf_p = yy_cp;
 
-#define YY_NUM_RULES 58
-#define YY_END_OF_BUFFER 59
-static yyconst short int yy_accept[348] = { 0,
-  0, 0, 0, 0, 0, 0, 59, 57, 56, 58,
-  54, 44, 47, 58, 45, 46, 42, 40, 41, 43,
-  34, 37, 36, 38, 35, 58, 43, 39, 57, 0,
-  0, 51, 48, 55, 34, 52, 50, 53, 35, 49,
-  57, 0, 0, 57, 0, 0, 57, 0, 0, 57,
-  0, 0, 57, 0, 0, 57, 0, 0, 57, 0,
+#define YY_NUM_RULES 61
+#define YY_END_OF_BUFFER 62
+static yyconst short int yy_accept[362] =
+    {   0,
+        0,    0,    0,    0,    0,    0,   62,   60,   59,   61,
+       57,   47,   50,   61,   48,   49,   45,   43,   44,   46,
+       37,   40,   39,   41,   38,   61,   46,   42,   60,    0,
+        0,   54,   51,   58,   37,   55,   53,   56,   38,   52,
+       60,    0,    0,   60,    0,    0,   60,    0,    0,   60,
+        0,    0,   60,    0,    0,   60,    0,    0,   60,    0,
   0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-  57, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-  0, 30, 0, 0, 0, 0, 0, 0, 57, 0,
-  0, 0, 0, 33, 0, 0, 0, 0, 0, 0,
-
-  0, 0, 0, 0, 0, 57, 0, 0, 17, 31,
-  29, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-  18, 57, 0, 0, 0, 0, 0, 0, 0, 4,
-  0, 0, 15, 0, 16, 57, 19, 0, 0, 0,
+       60,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+        0,   33,    0,    0,    0,    0,    0,    0,    0,    0,
+       60,    0,    0,    0,    0,   36,    0,    0,    0,    0,
+
+        0,    0,    0,    0,    0,    0,    0,    0,    0,   60,
+        0,    0,   20,   34,   32,    0,    0,    0,    0,    0,
+        0,    0,    0,    0,    0,   21,    0,   60,    0,    0,
+        0,    0,    0,    0,    0,    0,    4,    0,    0,   17,
+       13,    0,   18,    0,   60,   22,    0,    0,    0,    0,
   0, 0, 0, 0, 0, 0, 0, 0, 2, 1,
-  0, 8, 0, 0, 0, 0, 57, 12, 32, 0,
-  0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-  0, 0, 0, 0, 0, 28, 57, 0, 0, 0,
+        0,    8,    0,    0,    0,    0,   19,   60,   12,    0,
+       35,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+        0,    0,    0,    0,    0,    0,    0,   31,   60,    0,
   0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-  3, 14, 0, 57, 0, 0, 0, 0, 0, 0,
 
-  0, 9, 10, 11, 7, 6, 0, 13, 57, 0,
-  0, 0, 0, 22, 0, 0, 5, 57, 0, 0,
-  0, 0, 0, 0, 57, 0, 0, 0, 0, 0,
-  0, 57, 0, 0, 0, 0, 0, 0, 57, 0,
-  0, 26, 0, 0, 0, 57, 0, 0, 0, 0,
-  0, 0, 57, 0, 0, 0, 0, 0, 0, 57,
-  0, 27, 0, 0, 25, 0, 57, 0, 21, 20,
-  23, 57, 24, 57, 57, 57, 57, 57, 57, 57,
-  57, 57, 57, 57, 57, 57, 57, 57, 57, 57,
-  57, 57, 57, 57, 57, 57, 57, 57, 57, 57,
-
-  57, 57, 57, 57, 57, 57, 57, 57, 57, 57,
-  57, 57, 57, 57, 57, 57, 57, 57, 57, 57,
-  57, 57, 57, 57, 57, 57, 57, 57, 57, 57,
-  57, 57, 57, 57, 57, 57, 57, 57, 57, 57,
-  57, 57, 57, 57, 57, 57, 0
-};
+        0,    0,    0,    3,   16,    0,   60,   14,    0,    0,
+        0,    0,    0,    0,    0,    9,   10,   11,    7,    6,
+        0,   15,   60,    0,    0,    0,    0,   25,    0,    0,
+        5,   60,    0,    0,    0,    0,    0,    0,   60,    0,
+        0,    0,    0,    0,    0,   60,    0,    0,    0,    0,
+        0,    0,   60,    0,    0,   29,    0,    0,    0,   60,
+        0,    0,    0,    0,    0,    0,   60,    0,    0,    0,
+        0,    0,    0,   60,    0,   30,    0,    0,   28,    0,
+       60,    0,   24,   23,   26,   60,   27,   60,   60,   60,
+       60,   60,   60,   60,   60,   60,   60,   60,   60,   60,
+
+       60,   60,   60,   60,   60,   60,   60,   60,   60,   60,
+       60,   60,   60,   60,   60,   60,   60,   60,   60,   60,
+       60,   60,   60,   60,   60,   60,   60,   60,   60,   60,
+       60,   60,   60,   60,   60,   60,   60,   60,   60,   60,
+       60,   60,   60,   60,   60,   60,   60,   60,   60,   60,
+       60,   60,   60,   60,   60,   60,   60,   60,   60,   60,
+        0
+    } ;
 
-static yyconst int yy_ec[256] = { 0,
+static yyconst int yy_ec[256] =
+    {   0,
   1, 1, 1, 1, 1, 1, 1, 1, 2, 2,
   1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
   1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
@@ -355,239 +358,250 @@
   1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
   1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
   1, 1, 1, 1, 1
-};
+    } ;
 
-static yyconst int yy_meta[43] = { 0,
+static yyconst int yy_meta[43] =
+    {   0,
   1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
   1, 2, 2, 3, 1, 1, 2, 2, 2, 2,
   2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
   2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
   2, 1
-};
+    } ;
 
-static yyconst short int yy_base[449] = { 0,
-  457, 456, 0, 0, 32, 33, 469, 0, 34, 472,
-  472, 453, 472, 462, 472, 472, 472, 472, 472, 450,
-  453, 449, 448, 447, 0, 419, 472, 445, 0, 433,
-  421, 472, 472, 472, 445, 472, 472, 472, 0, 472,
-  0, 419, 428, 0, 427, 415, 0, 414, 420, 0,
-  419, 428, 0, 427, 434, 0, 433, 39, 0, 408,
-  411, 423, 38, 18, 418, 22, 421, 420, 415, 30,
-  0, 414, 406, 399, 399, 411, 413, 404, 401, 397,
-  409, 472, 408, 395, 400, 388, 403, 383, 0, 382,
-  390, 396, 395, 472, 388, 392, 392, 378, 391, 387,
-
-  386, 387, 391, 379, 371, 0, 370, 382, 472, 386,
-  472, 391, 384, 378, 377, 376, 361, 36, 359, 373,
-  472, 0, 380, 363, 366, 59, 53, 358, 357, 38,
-  371, 28, 472, 370, 472, 0, 472, 352, 363, 353,
-  366, 365, 344, 58, 356, 362, 361, 352, 472, 472,
-  69, 472, 353, 355, 349, 341, 0, 472, 472, 351,
-  343, 336, 338, 351, 348, 331, 337, 330, 325, 337,
-  341, 335, 338, 321, 328, 472, 0, 324, 334, 333,
-  323, 319, 334, 316, 328, 324, 326, 318, 308, 315,
-  472, 472, 317, 0, 308, 309, 324, 306, 314, 310,
-
-  302, 472, 472, 472, 472, 472, 309, 472, 0, 299,
-  316, 298, 296, 472, 314, 308, 472, 0, 296, 311,
-  301, 293, 297, 291, 0, 301, 293, 292, 298, 297,
-  301, 0, 300, 285, 293, 297, 283, 278, 0, 274,
-  289, 472, 28, 285, 276, 0, 289, 284, 274, 278,
-  268, 280, 0, 273, 272, 278, 67, 69, 70, 0,
-  55, 472, 66, 62, 472, 57, 0, 47, 472, 472,
-  472, 0, 472, 0, 0, 0, 0, 0, 0, 0,
-  0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+static yyconst short int yy_base[463] =
+    {   0,
+      471,  470,    0,    0,   32,   33,  483,    0,   34,  486,
+      486,  467,  486,  476,  486,  486,  486,  486,  486,  464,
+      467,  463,  462,  461,    0,  433,  486,  459,    0,  447,
+      435,  486,  486,  486,  459,  486,  486,  486,    0,  486,
+        0,  433,  442,    0,  441,  429,    0,  428,  434,    0,
+      433,  442,    0,  441,  448,    0,  447,   39,    0,  422,
+      425,  437,   38,   18,  432,   22,  435,   35,  430,   30,
+        0,  429,  421,  414,  414,  426,  428,  419,  416,  412,
+      424,  486,  423,  410,  415,  420,  402,  417,  397,  398,
+        0,  395,  403,  409,  408,  486,  401,  405,  405,  391,
+
+      404,  400,  399,  400,  401,  403,  391,  383,  388,    0,
+      381,  393,  397,  396,  486,  401,  394,  388,  387,  386,
+      371,   52,  384,  368,  382,  486,  384,    0,  388,  371,
+      365,  373,   59,   53,  365,  364,   55,  378,   28,  486,
+      486,  377,  486,  360,    0,  486,  358,  366,  368,  358,
+      371,  370,  349,   60,  361,  367,  366,  357,  486,  486,
+       69,  486,  358,  360,  354,  346,  486,    0,  486,  349,
+      486,  355,  347,  340,  342,  355,  352,  335,  341,  334,
+      329,  341,  345,  339,  342,  325,  332,  486,    0,  339,
+      327,  337,  336,  326,  322,  337,  319,  331,  327,  329,
+
+      321,  311,  318,  486,  486,  320,    0,  486,  311,  312,
+      327,  309,  317,  313,  305,  486,  486,  486,  486,  486,
+      312,  486,    0,  302,  319,  301,  299,  486,  317,  311,
+      486,    0,  299,  314,  304,  296,  300,  294,    0,  304,
+      296,  295,  301,  300,  304,    0,  303,  288,  296,  300,
+      286,  281,    0,  277,  292,  486,   49,  288,  279,    0,
+      292,  287,  277,  281,  271,  283,    0,  276,  275,  281,
+      272,  275,  277,    0,   60,  486,   72,   70,  486,   49,
+        0,   35,  486,  486,  486,    0,  486,    0,    0,    0,
   0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
 
   0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
   0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
   0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
   0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-  0, 0, 0, 0, 0, 472, 472, 99, 102, 50,
-  104, 106, 108, 110, 112, 114, 116, 118, 120, 122,
-  124, 126, 128, 130, 132, 134, 136, 138, 140, 142,
-  144, 146, 148, 150, 152, 154, 156, 158, 160, 162,
-  164, 166, 168, 170, 172, 174, 176, 178, 180, 182,
-  184, 186, 188, 190, 192, 194, 196, 198, 200, 202,
-
-  204, 206, 208, 210, 212, 214, 216, 218, 220, 222,
-  224, 226, 228, 230, 232, 234, 236, 238, 240, 242,
-  244, 246, 248, 250, 252, 254, 256, 258, 260, 262,
-  264, 266, 268, 270, 272, 274, 276, 278, 280, 282,
-  284, 286, 288, 290, 292, 294, 296, 298
-};
-
-static yyconst short int yy_def[449] = { 0,
-  348, 348, 347, 3, 3, 3, 347, 349, 347, 347,
-  347, 347, 347, 347, 347, 347, 347, 347, 347, 347,
-  347, 347, 347, 347, 350, 347, 347, 347, 351, 347,
-  347, 347, 347, 347, 347, 347, 347, 347, 350, 347,
-  352, 347, 347, 353, 347, 347, 354, 347, 347, 355,
-  347, 347, 356, 347, 347, 357, 347, 347, 358, 347,
-  347, 347, 347, 347, 347, 347, 347, 347, 347, 347,
-  359, 347, 347, 347, 347, 347, 347, 347, 347, 347,
-  347, 347, 347, 347, 347, 347, 347, 347, 360, 347,
-  347, 347, 347, 347, 347, 347, 347, 347, 347, 347,
-
-  347, 347, 347, 347, 347, 361, 347, 347, 347, 347,
-  347, 347, 347, 347, 347, 347, 347, 347, 347, 347,
-  347, 362, 347, 347, 347, 347, 347, 347, 347, 347,
-  347, 347, 347, 347, 347, 363, 347, 347, 347, 347,
-  347, 347, 347, 347, 347, 347, 347, 347, 347, 347,
-  347, 347, 347, 347, 347, 347, 364, 347, 347, 347,
-  347, 347, 347, 347, 347, 347, 347, 347, 347, 347,
-  347, 347, 347, 347, 347, 347, 365, 347, 347, 347,
-  347, 347, 347, 347, 347, 347, 347, 347, 347, 347,
-  347, 347, 347, 366, 347, 347, 347, 347, 347, 347,
-
-  347, 347, 347, 347, 347, 347, 347, 347, 367, 347,
-  347, 347, 347, 347, 347, 347, 347, 368, 347, 347,
-  347, 347, 347, 347, 369, 347, 347, 347, 347, 347,
-  347, 370, 347, 347, 347, 347, 347, 347, 371, 347,
-  347, 347, 347, 347, 347, 372, 347, 347, 347, 347,
-  347, 347, 373, 347, 347, 347, 347, 347, 347, 374,
-  347, 347, 347, 347, 347, 347, 375, 347, 347, 347,
-  347, 376, 347, 377, 378, 379, 380, 381, 382, 383,
-  384, 385, 386, 387, 388, 389, 390, 391, 392, 393,
+        0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+        0,    0,    0,    0,    0,    0,    0,    0,    0,  486,
+      486,   99,  102,   50,  104,  106,  108,  110,  112,  114,
+      116,  118,  120,  122,  124,  126,  128,  130,  132,  134,
+      136,  138,  140,  142,  144,  146,  148,  150,  152,  154,
+      156,  158,  160,  162,  164,  166,  168,  170,  172,  174,
+
+      176,  178,  180,  182,  184,  186,  188,  190,  192,  194,
+      196,  198,  200,  202,  204,  206,  208,  210,  212,  214,
+      216,  218,  220,  222,  224,  226,  228,  230,  232,  234,
+      236,  238,  240,  242,  244,  246,  248,  250,  252,  254,
+      256,  258,  260,  262,  264,  266,  268,  270,  272,  274,
+      276,  278,  280,  282,  284,  286,  288,  290,  292,  294,
+      296,  298
+    } ;
+
+static yyconst short int yy_def[463] =
+    {   0,
+      362,  362,  361,    3,    3,    3,  361,  363,  361,  361,
+      361,  361,  361,  361,  361,  361,  361,  361,  361,  361,
+      361,  361,  361,  361,  364,  361,  361,  361,  365,  361,
+      361,  361,  361,  361,  361,  361,  361,  361,  364,  361,
+      366,  361,  361,  367,  361,  361,  368,  361,  361,  369,
+      361,  361,  370,  361,  361,  371,  361,  361,  372,  361,
+      361,  361,  361,  361,  361,  361,  361,  361,  361,  361,
+      373,  361,  361,  361,  361,  361,  361,  361,  361,  361,
+      361,  361,  361,  361,  361,  361,  361,  361,  361,  361,
+      374,  361,  361,  361,  361,  361,  361,  361,  361,  361,
+
+      361,  361,  361,  361,  361,  361,  361,  361,  361,  375,
+      361,  361,  361,  361,  361,  361,  361,  361,  361,  361,
+      361,  361,  361,  361,  361,  361,  361,  376,  361,  361,
+      361,  361,  361,  361,  361,  361,  361,  361,  361,  361,
+      361,  361,  361,  361,  377,  361,  361,  361,  361,  361,
+      361,  361,  361,  361,  361,  361,  361,  361,  361,  361,
+      361,  361,  361,  361,  361,  361,  361,  378,  361,  361,
+      361,  361,  361,  361,  361,  361,  361,  361,  361,  361,
+      361,  361,  361,  361,  361,  361,  361,  361,  379,  361,
+      361,  361,  361,  361,  361,  361,  361,  361,  361,  361,
+
+      361,  361,  361,  361,  361,  361,  380,  361,  361,  361,
+      361,  361,  361,  361,  361,  361,  361,  361,  361,  361,
+      361,  361,  381,  361,  361,  361,  361,  361,  361,  361,
+      361,  382,  361,  361,  361,  361,  361,  361,  383,  361,
+      361,  361,  361,  361,  361,  384,  361,  361,  361,  361,
+      361,  361,  385,  361,  361,  361,  361,  361,  361,  386,
+      361,  361,  361,  361,  361,  361,  387,  361,  361,  361,
+      361,  361,  361,  388,  361,  361,  361,  361,  361,  361,
+      389,  361,  361,  361,  361,  390,  361,  391,  392,  393,
   394, 395, 396, 397, 398, 399, 400, 401, 402, 403,
 
   404, 405, 406, 407, 408, 409, 410, 411, 412, 413,
   414, 415, 416, 417, 418, 419, 420, 421, 422, 423,
   424, 425, 426, 427, 428, 429, 430, 431, 432, 433,
   434, 435, 436, 437, 438, 439, 440, 441, 442, 443,
-  444, 445, 446, 447, 448, 347, 0, 347, 347, 347,
-  347, 347, 347, 347, 347, 347, 347, 347, 347, 347,
-  347, 347, 347, 347, 347, 347, 347, 347, 347, 347,
-  347, 347, 347, 347, 347, 347, 347, 347, 347, 347,
-  347, 347, 347, 347, 347, 347, 347, 347, 347, 347,
-  347, 347, 347, 347, 347, 347, 347, 347, 347, 347,
-
-  347, 347, 347, 347, 347, 347, 347, 347, 347, 347,
-  347, 347, 347, 347, 347, 347, 347, 347, 347, 347,
-  347, 347, 347, 347, 347, 347, 347, 347, 347, 347,
-  347, 347, 347, 347, 347, 347, 347, 347, 347, 347,
-  347, 347, 347, 347, 347, 347, 347, 347
-};
+      444,  445,  446,  447,  448,  449,  450,  451,  452,  453,
+      454,  455,  456,  457,  458,  459,  460,  461,  462,  361,
+        0,  361,  361,  361,  361,  361,  361,  361,  361,  361,
+      361,  361,  361,  361,  361,  361,  361,  361,  361,  361,
+      361,  361,  361,  361,  361,  361,  361,  361,  361,  361,
+      361,  361,  361,  361,  361,  361,  361,  361,  361,  361,
+
+      361,  361,  361,  361,  361,  361,  361,  361,  361,  361,
+      361,  361,  361,  361,  361,  361,  361,  361,  361,  361,
+      361,  361,  361,  361,  361,  361,  361,  361,  361,  361,
+      361,  361,  361,  361,  361,  361,  361,  361,  361,  361,
+      361,  361,  361,  361,  361,  361,  361,  361,  361,  361,
+      361,  361,  361,  361,  361,  361,  361,  361,  361,  361,
+      361,  361
+    } ;
 
-static yyconst short int yy_nxt[515] = { 0,
+static yyconst short int yy_nxt[529] =
+    {   0,
   10, 11, 12, 13, 14, 15, 16, 17, 18, 19,
   20, 21, 10, 22, 23, 24, 10, 25, 25, 25,
   25, 25, 25, 25, 25, 25, 25, 25, 25, 25,
   25, 25, 25, 25, 25, 25, 25, 25, 25, 25,
-  25, 26, 27, 27, 30, 79, 82, 28, 28, 87,
-  80, 39, 83, 88, 132, 154, 151, 155, 249, 31,
-  61, 62, 63, 64, 250, 65, 66, 75, 67, 76,
-  273, 133, 68, 152, 69, 70, 77, 78, 140, 271,
-  141, 142, 143, 144, 146, 270, 147, 164, 148, 269,
-  165, 170, 268, 266, 145, 265, 171, 264, 172, 8,
+       25,   26,   27,   27,   30,   79,   82,   28,   28,   88,
+       80,   39,   83,   89,   85,  164,   90,  165,  287,   31,
+       61,   62,   63,   64,   86,   65,   66,   75,   67,   76,
+      139,  285,   68,  161,   69,   70,   77,   78,  150,  263,
+      151,  152,  153,  154,  156,  264,  157,  140,  158,  176,
+      162,  182,  177,  284,  155,  283,  183,  282,  184,    8,
 
   8, 8, 29, 29, 41, 41, 44, 44, 47, 47,
   50, 50, 53, 53, 56, 56, 59, 59, 71, 71,
-  89, 89, 106, 106, 122, 122, 136, 136, 157, 157,
-  177, 177, 194, 194, 209, 209, 218, 218, 225, 225,
-  232, 232, 239, 239, 246, 246, 253, 253, 260, 260,
-  267, 267, 272, 272, 274, 274, 275, 275, 276, 276,
-  277, 277, 278, 278, 279, 279, 280, 280, 281, 281,
-  282, 282, 283, 283, 284, 284, 285, 285, 286, 286,
-  287, 287, 288, 288, 289, 289, 290, 290, 291, 291,
-  292, 292, 293, 293, 294, 294, 295, 295, 296, 296,
-
-  297, 297, 298, 298, 299, 299, 300, 300, 301, 301,
-  302, 302, 303, 303, 304, 304, 305, 305, 306, 306,
-  307, 307, 308, 308, 309, 309, 310, 310, 311, 311,
-  312, 312, 313, 313, 314, 314, 315, 315, 316, 316,
-  317, 317, 318, 318, 319, 319, 320, 320, 321, 321,
-  322, 322, 323, 323, 324, 324, 325, 325, 326, 326,
-  327, 327, 328, 328, 329, 329, 330, 330, 331, 331,
-  332, 332, 333, 333, 334, 334, 335, 335, 336, 336,
-  337, 337, 338, 338, 339, 339, 340, 340, 341, 341,
-  342, 342, 343, 343, 344, 344, 345, 345, 346, 346,
-
-  263, 262, 261, 259, 258, 257, 256, 255, 254, 252,
-  251, 248, 247, 245, 244, 243, 242, 241, 240, 238,
-  237, 236, 235, 234, 233, 231, 230, 229, 228, 227,
-  226, 224, 223, 222, 221, 220, 219, 217, 216, 215,
-  214, 213, 212, 211, 210, 208, 207, 206, 205, 204,
-  203, 202, 201, 200, 199, 198, 197, 196, 195, 193,
-  192, 191, 190, 189, 188, 187, 186, 185, 184, 183,
-  182, 181, 180, 179, 178, 176, 175, 174, 173, 169,
-  168, 167, 166, 163, 162, 161, 160, 159, 158, 156,
-  153, 150, 149, 139, 138, 137, 135, 134, 131, 130,
-
-  129, 128, 127, 126, 125, 124, 123, 121, 120, 119,
-  118, 117, 116, 115, 114, 113, 112, 111, 110, 109,
-  108, 107, 105, 104, 103, 102, 101, 100, 99, 98,
-  97, 96, 95, 94, 93, 92, 91, 90, 86, 85,
-  84, 81, 74, 73, 72, 60, 58, 57, 55, 54,
-  52, 51, 49, 48, 46, 45, 35, 43, 42, 38,
-  40, 38, 37, 36, 35, 34, 33, 32, 347, 9,
-  9, 7, 347, 347, 347, 347, 347, 347, 347, 347,
-  347, 347, 347, 347, 347, 347, 347, 347, 347, 347,
-  347, 347, 347, 347, 347, 347, 347, 347, 347, 347,
-
-  347, 347, 347, 347, 347, 347, 347, 347, 347, 347,
-  347, 347, 347, 347
-};
+       91,   91,  110,  110,  128,  128,  145,  145,  168,  168,
+      189,  189,  207,  207,  223,  223,  232,  232,  239,  239,
+      246,  246,  253,  253,  260,  260,  267,  267,  274,  274,
+      281,  281,  286,  286,  288,  288,  289,  289,  290,  290,
+      291,  291,  292,  292,  293,  293,  294,  294,  295,  295,
+      296,  296,  297,  297,  298,  298,  299,  299,  300,  300,
+      301,  301,  302,  302,  303,  303,  304,  304,  305,  305,
+      306,  306,  307,  307,  308,  308,  309,  309,  310,  310,
+
+      311,  311,  312,  312,  313,  313,  314,  314,  315,  315,
+      316,  316,  317,  317,  318,  318,  319,  319,  320,  320,
+      321,  321,  322,  322,  323,  323,  324,  324,  325,  325,
+      326,  326,  327,  327,  328,  328,  329,  329,  330,  330,
+      331,  331,  332,  332,  333,  333,  334,  334,  335,  335,
+      336,  336,  337,  337,  338,  338,  339,  339,  340,  340,
+      341,  341,  342,  342,  343,  343,  344,  344,  345,  345,
+      346,  346,  347,  347,  348,  348,  349,  349,  350,  350,
+      351,  351,  352,  352,  353,  353,  354,  354,  355,  355,
+      356,  356,  357,  357,  358,  358,  359,  359,  360,  360,
+
+      280,  279,  278,  277,  276,  275,  273,  272,  271,  270,
+      269,  268,  266,  265,  262,  261,  259,  258,  257,  256,
+      255,  254,  252,  251,  250,  249,  248,  247,  245,  244,
+      243,  242,  241,  240,  238,  237,  236,  235,  234,  233,
+      231,  230,  229,  228,  227,  226,  225,  224,  222,  221,
+      220,  219,  218,  217,  216,  215,  214,  213,  212,  211,
+      210,  209,  208,  206,  205,  204,  203,  202,  201,  200,
+      199,  198,  197,  196,  195,  194,  193,  192,  191,  190,
+      188,  187,  186,  185,  181,  180,  179,  178,  175,  174,
+      173,  172,  171,  170,  169,  167,  166,  163,  160,  159,
+
+      149,  148,  147,  146,  144,  143,  142,  141,  138,  137,
+      136,  135,  134,  133,  132,  131,  130,  129,  127,  126,
+      125,  124,  123,  122,  121,  120,  119,  118,  117,  116,
+      115,  114,  113,  112,  111,  109,  108,  107,  106,  105,
+      104,  103,  102,  101,  100,   99,   98,   97,   96,   95,
+       94,   93,   92,   87,   84,   81,   74,   73,   72,   60,
+       58,   57,   55,   54,   52,   51,   49,   48,   46,   45,
+       35,   43,   42,   38,   40,   38,   37,   36,   35,   34,
+       33,   32,  361,    9,    9,    7,  361,  361,  361,  361,
+      361,  361,  361,  361,  361,  361,  361,  361,  361,  361,
+
+      361,  361,  361,  361,  361,  361,  361,  361,  361,  361,
+      361,  361,  361,  361,  361,  361,  361,  361,  361,  361,
+      361,  361,  361,  361,  361,  361,  361,  361
+    } ;
 
-static yyconst short int yy_chk[515] = { 0,
+static yyconst short int yy_chk[529] =
+    {   0,
   3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
   3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
   3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
   3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
   3, 3, 5, 6, 9, 64, 66, 5, 6, 70,
-  64, 350, 66, 70, 118, 132, 130, 132, 243, 9,
-  58, 58, 58, 58, 243, 58, 58, 63, 58, 63,
-  268, 118, 58, 130, 58, 58, 63, 63, 126, 266,
-  126, 126, 126, 126, 127, 264, 127, 144, 127, 263,
-  144, 151, 261, 259, 126, 258, 151, 257, 151, 348,
-
-  348, 348, 349, 349, 351, 351, 352, 352, 353, 353,
-  354, 354, 355, 355, 356, 356, 357, 357, 358, 358,
-  359, 359, 360, 360, 361, 361, 362, 362, 363, 363,
-  364, 364, 365, 365, 366, 366, 367, 367, 368, 368,
-  369, 369, 370, 370, 371, 371, 372, 372, 373, 373,
-  374, 374, 375, 375, 376, 376, 377, 377, 378, 378,
-  379, 379, 380, 380, 381, 381, 382, 382, 383, 383,
-  384, 384, 385, 385, 386, 386, 387, 387, 388, 388,
-  389, 389, 390, 390, 391, 391, 392, 392, 393, 393,
-  394, 394, 395, 395, 396, 396, 397, 397, 398, 398,
-
-  399, 399, 400, 400, 401, 401, 402, 402, 403, 403,
-  404, 404, 405, 405, 406, 406, 407, 407, 408, 408,
-  409, 409, 410, 410, 411, 411, 412, 412, 413, 413,
-  414, 414, 415, 415, 416, 416, 417, 417, 418, 418,
-  419, 419, 420, 420, 421, 421, 422, 422, 423, 423,
-  424, 424, 425, 425, 426, 426, 427, 427, 428, 428,
-  429, 429, 430, 430, 431, 431, 432, 432, 433, 433,
-  434, 434, 435, 435, 436, 436, 437, 437, 438, 438,
-  439, 439, 440, 440, 441, 441, 442, 442, 443, 443,
-  444, 444, 445, 445, 446, 446, 447, 447, 448, 448,
-
-  256, 255, 254, 252, 251, 250, 249, 248, 247, 245,
-  244, 241, 240, 238, 237, 236, 235, 234, 233, 231,
-  230, 229, 228, 227, 226, 224, 223, 222, 221, 220,
-  219, 216, 215, 213, 212, 211, 210, 207, 201, 200,
-  199, 198, 197, 196, 195, 193, 190, 189, 188, 187,
-  186, 185, 184, 183, 182, 181, 180, 179, 178, 175,
-  174, 173, 172, 171, 170, 169, 168, 167, 166, 165,
-  164, 163, 162, 161, 160, 156, 155, 154, 153, 148,
-  147, 146, 145, 143, 142, 141, 140, 139, 138, 134,
-  131, 129, 128, 125, 124, 123, 120, 119, 117, 116,
-
-  115, 114, 113, 112, 110, 108, 107, 105, 104, 103,
-  102, 101, 100, 99, 98, 97, 96, 95, 93, 92,
-  91, 90, 88, 87, 86, 85, 84, 83, 81, 80,
-  79, 78, 77, 76, 75, 74, 73, 72, 69, 68,
-  67, 65, 62, 61, 60, 57, 55, 54, 52, 51,
-  49, 48, 46, 45, 43, 42, 35, 31, 30, 28,
-  26, 24, 23, 22, 21, 20, 14, 12, 7, 2,
-  1, 347, 347, 347, 347, 347, 347, 347, 347, 347,
-  347, 347, 347, 347, 347, 347, 347, 347, 347, 347,
-  347, 347, 347, 347, 347, 347, 347, 347, 347, 347,
-
-  347, 347, 347, 347, 347, 347, 347, 347, 347, 347,
-  347, 347, 347, 347
-};
+       64,  364,   66,   70,   68,  139,   70,  139,  282,    9,
+       58,   58,   58,   58,   68,   58,   58,   63,   58,   63,
+      122,  280,   58,  137,   58,   58,   63,   63,  133,  257,
+      133,  133,  133,  133,  134,  257,  134,  122,  134,  154,
+      137,  161,  154,  278,  133,  277,  161,  275,  161,  362,
+
+      362,  362,  363,  363,  365,  365,  366,  366,  367,  367,
+      368,  368,  369,  369,  370,  370,  371,  371,  372,  372,
+      373,  373,  374,  374,  375,  375,  376,  376,  377,  377,
+      378,  378,  379,  379,  380,  380,  381,  381,  382,  382,
+      383,  383,  384,  384,  385,  385,  386,  386,  387,  387,
+      388,  388,  389,  389,  390,  390,  391,  391,  392,  392,
+      393,  393,  394,  394,  395,  395,  396,  396,  397,  397,
+      398,  398,  399,  399,  400,  400,  401,  401,  402,  402,
+      403,  403,  404,  404,  405,  405,  406,  406,  407,  407,
+      408,  408,  409,  409,  410,  410,  411,  411,  412,  412,
+
+      413,  413,  414,  414,  415,  415,  416,  416,  417,  417,
+      418,  418,  419,  419,  420,  420,  421,  421,  422,  422,
+      423,  423,  424,  424,  425,  425,  426,  426,  427,  427,
+      428,  428,  429,  429,  430,  430,  431,  431,  432,  432,
+      433,  433,  434,  434,  435,  435,  436,  436,  437,  437,
+      438,  438,  439,  439,  440,  440,  441,  441,  442,  442,
+      443,  443,  444,  444,  445,  445,  446,  446,  447,  447,
+      448,  448,  449,  449,  450,  450,  451,  451,  452,  452,
+      453,  453,  454,  454,  455,  455,  456,  456,  457,  457,
+      458,  458,  459,  459,  460,  460,  461,  461,  462,  462,
+
+      273,  272,  271,  270,  269,  268,  266,  265,  264,  263,
+      262,  261,  259,  258,  255,  254,  252,  251,  250,  249,
+      248,  247,  245,  244,  243,  242,  241,  240,  238,  237,
+      236,  235,  234,  233,  230,  229,  227,  226,  225,  224,
+      221,  215,  214,  213,  212,  211,  210,  209,  206,  203,
+      202,  201,  200,  199,  198,  197,  196,  195,  194,  193,
+      192,  191,  190,  187,  186,  185,  184,  183,  182,  181,
+      180,  179,  178,  177,  176,  175,  174,  173,  172,  170,
+      166,  165,  164,  163,  158,  157,  156,  155,  153,  152,
+      151,  150,  149,  148,  147,  144,  142,  138,  136,  135,
+
+      132,  131,  130,  129,  127,  125,  124,  123,  121,  120,
+      119,  118,  117,  116,  114,  113,  112,  111,  109,  108,
+      107,  106,  105,  104,  103,  102,  101,  100,   99,   98,
+       97,   95,   94,   93,   92,   90,   89,   88,   87,   86,
+       85,   84,   83,   81,   80,   79,   78,   77,   76,   75,
+       74,   73,   72,   69,   67,   65,   62,   61,   60,   57,
+       55,   54,   52,   51,   49,   48,   46,   45,   43,   42,
+       35,   31,   30,   28,   26,   24,   23,   22,   21,   20,
+       14,   12,    7,    2,    1,  361,  361,  361,  361,  361,
+      361,  361,  361,  361,  361,  361,  361,  361,  361,  361,
+
+      361,  361,  361,  361,  361,  361,  361,  361,  361,  361,
+      361,  361,  361,  361,  361,  361,  361,  361,  361,  361,
+      361,  361,  361,  361,  361,  361,  361,  361
+    } ;
 
 static yy_state_type yy_last_accepting_state;
 static char *yy_last_accepting_cpos;
@@ -628,7 +642,7 @@
 #define TAG 1
 #define STAG 2
 
-#line 638 "lex.yy.c"
+#line 646 "lex.yy.c"
 
 /* Macros after this point can all be overridden by user definitions in
  * section 1.
@@ -636,29 +650,29 @@
 
 #ifndef YY_SKIP_YYWRAP
 #ifdef __cplusplus
-extern "C" int yywrap YY_PROTO ((void));
+extern "C" int yywrap YY_PROTO(( void ));
 #else
-extern int yywrap YY_PROTO ((void));
+extern int yywrap YY_PROTO(( void ));
 #endif
 #endif
 
 #ifndef YY_NO_UNPUT
-static void yyunput YY_PROTO ((int c, char *buf_ptr));
+static void yyunput YY_PROTO(( int c, char *buf_ptr ));
 #endif
 
 #ifndef yytext_ptr
-static void yy_flex_strncpy YY_PROTO ((char *, yyconst char *, int));
+static void yy_flex_strncpy YY_PROTO(( char *, yyconst char *, int ));
 #endif
 
 #ifdef YY_NEED_STRLEN
-static int yy_flex_strlen YY_PROTO ((yyconst char *));
+static int yy_flex_strlen YY_PROTO(( yyconst char * ));
 #endif
 
 #ifndef YY_NO_INPUT
 #ifdef __cplusplus
-static int yyinput YY_PROTO ((void));
+static int yyinput YY_PROTO(( void ));
 #else
-static int input YY_PROTO ((void));
+static int input YY_PROTO(( void ));
 #endif
 #endif
 
@@ -667,13 +681,13 @@
 static int yy_start_stack_depth = 0;
 static int *yy_start_stack = 0;
 #ifndef YY_NO_PUSH_STATE
-static void yy_push_state YY_PROTO ((int new_state));
+static void yy_push_state YY_PROTO(( int new_state ));
 #endif
 #ifndef YY_NO_POP_STATE
-static void yy_pop_state YY_PROTO ((void));
+static void yy_pop_state YY_PROTO(( void ));
 #endif
 #ifndef YY_NO_TOP_STATE
-static int yy_top_state YY_PROTO ((void));
+static int yy_top_state YY_PROTO(( void ));
 #endif
 
 #else
@@ -774,7 +788,7 @@
 	YY_USER_ACTION
 
 YY_DECL
-{
+	{
   register yy_state_type yy_current_state;
   register char *yy_cp = NULL, *yy_bp = NULL;
   register int yy_act;
@@ -782,9 +796,9 @@
 #line 31 "albumtheme.l"
 
 
-#line 792 "lex.yy.c"
+#line 800 "lex.yy.c"
 
-  if (yy_init)
+	if ( yy_init )
     {
       yy_init = 0;
 
@@ -792,22 +806,23 @@
       YY_USER_INIT;
 #endif
 
-      if (!yy_start)
+		if ( ! yy_start )
 	yy_start = 1;		/* first start state */
 
-      if (!yyin)
+		if ( ! yyin )
 	yyin = stdin;
 
-      if (!yyout)
+		if ( ! yyout )
 	yyout = stdout;
 
-      if (!yy_current_buffer)
-	yy_current_buffer = yy_create_buffer (yyin, YY_BUF_SIZE);
+		if ( ! yy_current_buffer )
+			yy_current_buffer =
+				yy_create_buffer( yyin, YY_BUF_SIZE );
 
-      yy_load_buffer_state ();
+		yy_load_buffer_state();
     }
 
-  while (1)			/* loops until end-of-file is reached */
+	while ( 1 )		/* loops until end-of-file is reached */
     {
       yy_cp = yy_c_buf_p;
 
@@ -820,30 +835,29 @@
       yy_bp = yy_cp;
 
       yy_current_state = yy_start;
-    yy_match:
+yy_match:
       do
 	{
-	  register YY_CHAR yy_c = yy_ec[YY_SC_TO_UI (*yy_cp)];
-	  if (yy_accept[yy_current_state])
+			register YY_CHAR yy_c = yy_ec[YY_SC_TO_UI(*yy_cp)];
+			if ( yy_accept[yy_current_state] )
 	    {
 	      yy_last_accepting_state = yy_current_state;
 	      yy_last_accepting_cpos = yy_cp;
 	    }
-	  while (yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state)
+			while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state )
 	    {
 	      yy_current_state = (int) yy_def[yy_current_state];
-	      if (yy_current_state >= 348)
+				if ( yy_current_state >= 362 )
 		yy_c = yy_meta[(unsigned int) yy_c];
 	    }
-	  yy_current_state =
-	    yy_nxt[yy_base[yy_current_state] + (unsigned int) yy_c];
+			yy_current_state = yy_nxt[yy_base[yy_current_state] + (unsigned int) yy_c];
 	  ++yy_cp;
 	}
-      while (yy_base[yy_current_state] != 472);
+		while ( yy_base[yy_current_state] != 486 );
 
-    yy_find_action:
+yy_find_action:
       yy_act = yy_accept[yy_current_state];
-      if (yy_act == 0)
+		if ( yy_act == 0 )
 	{			/* have to back up */
 	  yy_cp = yy_last_accepting_cpos;
 	  yy_current_state = yy_last_accepting_state;
@@ -853,10 +867,10 @@
       YY_DO_BEFORE_ACTION;
 
 
-    do_action:			/* This label is used only to access EOF actions. */
+do_action:	/* This label is used only to access EOF actions. */
 
 
-      switch (yy_act)
+		switch ( yy_act )
 	{			/* beginning of action switch */
 	case 0:		/* must back up */
 	  /* undo the effects of YY_DO_BEFORE_ACTION */
@@ -865,436 +879,522 @@
 	  yy_current_state = yy_last_accepting_state;
 	  goto yy_find_action;
 
-	case 1:
-	  YY_RULE_SETUP
+case 1:
+YY_RULE_SETUP
 #line 33 "albumtheme.l"
-	  {
+{ 
 	    BEGIN (TAG);
 	    yylval.ivalue = GTH_TAG_HEADER;
 	    return HEADER;
 	  }
-	YY_BREAK case 2:
-	  YY_RULE_SETUP
+	YY_BREAK
+case 2:
+YY_RULE_SETUP
 #line 38 "albumtheme.l"
-	  {
+{ 
 	    BEGIN (TAG);
 	    yylval.ivalue = GTH_TAG_FOOTER;
 	    return FOOTER;
 	  }
-	YY_BREAK case 3:
-	  YY_RULE_SETUP
+	YY_BREAK
+case 3:
+YY_RULE_SETUP
 #line 43 "albumtheme.l"
-	  {
+{ 
 	    BEGIN (TAG);
 	    yylval.ivalue = GTH_TAG_LANGUAGE;
 	    return LANGUAGE;
 	  }
-	YY_BREAK case 4:
-	  YY_RULE_SETUP
+	YY_BREAK
+case 4:
+YY_RULE_SETUP
 #line 48 "albumtheme.l"
-	  {
+{ 
 	    BEGIN (TAG);
 	    yylval.ivalue = GTH_TAG_IMAGE;
 	    return IMAGE;
 	  }
-	YY_BREAK case 5:
-	  YY_RULE_SETUP
+	YY_BREAK
+case 5:
+YY_RULE_SETUP
 #line 53 "albumtheme.l"
-	  {
+{ 
 	    BEGIN (TAG);
 	    yylval.ivalue = GTH_TAG_IMAGE_LINK;
 	    return IMAGE_LINK;
 	  }
-	YY_BREAK case 6:
-	  YY_RULE_SETUP
+	YY_BREAK
+case 6:
+YY_RULE_SETUP
 #line 58 "albumtheme.l"
-	  {
+{ 
 	    BEGIN (TAG);
 	    yylval.ivalue = GTH_TAG_IMAGE_IDX;
 	    return IMAGE_IDX;
 	  }
-	YY_BREAK case 7:
-	  YY_RULE_SETUP
+	YY_BREAK
+case 7:
+YY_RULE_SETUP
 #line 63 "albumtheme.l"
-	  {
+{ 
 	    BEGIN (TAG);
 	    yylval.ivalue = GTH_TAG_IMAGE_DIM;
 	    return IMAGE_DIM;
 	  }
-	YY_BREAK case 8:
-	  YY_RULE_SETUP
+	YY_BREAK
+case 8:
+YY_RULE_SETUP
 #line 68 "albumtheme.l"
-	  {
+{ 
 	    BEGIN (TAG);
 	    yylval.ivalue = GTH_TAG_IMAGES;
 	    return IMAGES;
 	  }
-	YY_BREAK case 9:
-	  YY_RULE_SETUP
+	YY_BREAK
+case 9:
+YY_RULE_SETUP
 #line 73 "albumtheme.l"
-	  {
+{ 
 	    BEGIN (TAG);
 	    yylval.ivalue = GTH_TAG_FILENAME;
 	    return FILENAME;
 	  }
-	YY_BREAK case 10:
-	  YY_RULE_SETUP
+	YY_BREAK
+case 10:
+YY_RULE_SETUP
 #line 78 "albumtheme.l"
-	  {
+{ 
 	    BEGIN (TAG);
 	    yylval.ivalue = GTH_TAG_FILEPATH;
 	    return FILEPATH;
 	  }
-	YY_BREAK case 11:
-	  YY_RULE_SETUP
+	YY_BREAK
+case 11:
+YY_RULE_SETUP
 #line 83 "albumtheme.l"
-	  {
+{ 
 	    BEGIN (TAG);
 	    yylval.ivalue = GTH_TAG_FILESIZE;
 	    return FILESIZE;
 	  }
-	YY_BREAK case 12:
-	  YY_RULE_SETUP
+	YY_BREAK
+case 12:
+YY_RULE_SETUP
 #line 88 "albumtheme.l"
-	  {
+{ 
 	    BEGIN (TAG);
 	    yylval.ivalue = GTH_TAG_COMMENT;
 	    return COMMENT;
 	  }
-	YY_BREAK case 13:
-	  YY_RULE_SETUP
+	YY_BREAK
+case 13:
+YY_RULE_SETUP
 #line 93 "albumtheme.l"
-	  {
+{
+					BEGIN (TAG);
+					yylval.ivalue = GTH_TAG_PLACE;
+					return PLACE;
+				}
+	YY_BREAK
+case 14:
+YY_RULE_SETUP
+#line 98 "albumtheme.l"
+{
+					BEGIN (TAG);
+					yylval.ivalue = GTH_TAG_DATE_TIME;
+					return DATE_TIME;
+				}
+	YY_BREAK
+case 15:
+YY_RULE_SETUP
+#line 103 "albumtheme.l"
+{ 
 	    BEGIN (TAG);
 	    yylval.ivalue = GTH_TAG_PAGE_LINK;
 	    return PAGE_LINK;
 	  }
-	YY_BREAK case 14:
-	  YY_RULE_SETUP
-#line 98 "albumtheme.l"
-	  {
+	YY_BREAK
+case 16:
+YY_RULE_SETUP
+#line 108 "albumtheme.l"
+{ 
 	    BEGIN (TAG);
 	    yylval.ivalue = GTH_TAG_PAGE_IDX;
 	    return PAGE_IDX;
 	  }
-	YY_BREAK case 15:
-	  YY_RULE_SETUP
-#line 103 "albumtheme.l"
-	  {
+	YY_BREAK
+case 17:
+YY_RULE_SETUP
+#line 113 "albumtheme.l"
+{ 
 	    BEGIN (TAG);
 	    yylval.ivalue = GTH_TAG_PAGES;
 	    return PAGES;
 	  }
-	YY_BREAK case 16:
-	  YY_RULE_SETUP
-#line 108 "albumtheme.l"
-	  {
+	YY_BREAK
+case 18:
+YY_RULE_SETUP
+#line 118 "albumtheme.l"
+{ 
 	    BEGIN (TAG);
 	    yylval.ivalue = GTH_TAG_TABLE;
 	    return TABLE;
 	  }
-	YY_BREAK case 17:
-	  YY_RULE_SETUP
-#line 113 "albumtheme.l"
-	  {
+	YY_BREAK
+case 19:
+YY_RULE_SETUP
+#line 123 "albumtheme.l"
+{ 
+					BEGIN (TAG);
+					yylval.ivalue = GTH_TAG_THUMBS;
+					return THUMBS;
+				}
+	YY_BREAK
+case 20:
+YY_RULE_SETUP
+#line 128 "albumtheme.l"
+{ 
 	    BEGIN (TAG);
 	    yylval.ivalue = GTH_TAG_DATE;
 	    return DATE;
 	  }
-	YY_BREAK case 18:
-	  YY_RULE_SETUP
-#line 118 "albumtheme.l"
-	  {
+	YY_BREAK
+case 21:
+YY_RULE_SETUP
+#line 133 "albumtheme.l"
+{ 
 	    BEGIN (STAG);
 	    yylval.ivalue = GTH_TAG_TEXT;
 	    return TEXT;
 	  }
-	YY_BREAK case 19:
-	  YY_RULE_SETUP
-#line 123 "albumtheme.l"
-	  {
+	YY_BREAK
+case 22:
+YY_RULE_SETUP
+#line 138 "albumtheme.l"
+{
 	    BEGIN (INITIAL);
 	    return TEXT_END;
 	  }
-	YY_BREAK case 20:
-	  YY_RULE_SETUP
-#line 127 "albumtheme.l"
-	  {
+	YY_BREAK
+case 23:
+YY_RULE_SETUP
+#line 142 "albumtheme.l"
+{ 
 	    BEGIN (TAG);
 	    yylval.ivalue = GTH_TAG_EXIF_EXPOSURE_TIME;
 	    return EXIF_EXPOSURE_TIME;
 	  }
-	YY_BREAK case 21:
-	  YY_RULE_SETUP
-#line 132 "albumtheme.l"
-	  {
+	YY_BREAK
+case 24:
+YY_RULE_SETUP
+#line 147 "albumtheme.l"
+{ 
 	    BEGIN (TAG);
 	    yylval.ivalue = GTH_TAG_EXIF_EXPOSURE_MODE;
 	    return EXIF_EXPOSURE_MODE;
 	  }
-	YY_BREAK case 22:
-	  YY_RULE_SETUP
-#line 137 "albumtheme.l"
-	  {
+	YY_BREAK
+case 25:
+YY_RULE_SETUP
+#line 152 "albumtheme.l"
+{ 
 	    BEGIN (TAG);
 	    yylval.ivalue = GTH_TAG_EXIF_FLASH;
 	    return EXIF_FLASH;
 	  }
-	YY_BREAK case 23:
-	  YY_RULE_SETUP
-#line 142 "albumtheme.l"
-	  {
+	YY_BREAK
+case 26:
+YY_RULE_SETUP
+#line 157 "albumtheme.l"
+{ 
 	    BEGIN (TAG);
 	    yylval.ivalue = GTH_TAG_EXIF_SHUTTER_SPEED;
 	    return EXIF_SHUTTER_SPEED;
 	  }
-	YY_BREAK case 24:
-	  YY_RULE_SETUP
-#line 147 "albumtheme.l"
-	  {
+	YY_BREAK
+case 27:
+YY_RULE_SETUP
+#line 162 "albumtheme.l"
+{ 
 	    BEGIN (TAG);
 	    yylval.ivalue = GTH_TAG_EXIF_APERTURE_VALUE;
 	    return EXIF_APERTURE_VALUE;
 	  }
-	YY_BREAK case 25:
-	  YY_RULE_SETUP
-#line 152 "albumtheme.l"
-	  {
+	YY_BREAK
+case 28:
+YY_RULE_SETUP
+#line 167 "albumtheme.l"
+{ 
 	    BEGIN (TAG);
 	    yylval.ivalue = GTH_TAG_EXIF_FOCAL_LENGTH;
 	    return EXIF_FOCAL_LENGTH;
 	  }
-	YY_BREAK case 26:
-	  YY_RULE_SETUP
-#line 157 "albumtheme.l"
-	  {
+	YY_BREAK
+case 29:
+YY_RULE_SETUP
+#line 172 "albumtheme.l"
+{ 
 	    BEGIN (TAG);
 	    yylval.ivalue = GTH_TAG_EXIF_DATE_TIME;
 	    return EXIF_DATE_TIME;
 	  }
-	YY_BREAK case 27:
-	  YY_RULE_SETUP
-#line 162 "albumtheme.l"
-	  {
+	YY_BREAK
+case 30:
+YY_RULE_SETUP
+#line 177 "albumtheme.l"
+{ 
 	    BEGIN (TAG);
 	    yylval.ivalue = GTH_TAG_EXIF_CAMERA_MODEL;
 	    return EXIF_CAMERA_MODEL;
 	  }
-	YY_BREAK case 28:
-	  YY_RULE_SETUP
-#line 167 "albumtheme.l"
-	  {
+	YY_BREAK
+case 31:
+YY_RULE_SETUP
+#line 182 "albumtheme.l"
+{ 
 	    BEGIN (TAG);
 	    yylval.ivalue = GTH_TAG_SET_VAR;
 	    return SET_VAR;
 	  }
-	YY_BREAK case 29:
-	  YY_RULE_SETUP
-#line 172 "albumtheme.l"
-	  {
+	YY_BREAK
+case 32:
+YY_RULE_SETUP
+#line 187 "albumtheme.l"
+{
 	    BEGIN (TAG);
 	    yylval.ivalue = GTH_TAG_EVAL;
 	    return EVAL;
 	  }
-	YY_BREAK case 30:
-	  YY_RULE_SETUP
-#line 177 "albumtheme.l"
-	  {
+	YY_BREAK
+case 33:
+YY_RULE_SETUP
+#line 192 "albumtheme.l"
+{ 
 	    BEGIN (TAG);
 	    return IF;
 	  }
-	YY_BREAK case 31:
-	  YY_RULE_SETUP
-#line 181 "albumtheme.l"
-	  {
+	YY_BREAK
+case 34:
+YY_RULE_SETUP
+#line 196 "albumtheme.l"
+{ 
 	    BEGIN (TAG);
 	    return ELSE;
 	  }
-	YY_BREAK case 32:
-	  YY_RULE_SETUP
-#line 185 "albumtheme.l"
-	  {
+	YY_BREAK
+case 35:
+YY_RULE_SETUP
+#line 200 "albumtheme.l"
+{ 
 	    BEGIN (TAG);
 	    return ELSE_IF;
 	  }
-	YY_BREAK case 33:
-	  YY_RULE_SETUP
-#line 189 "albumtheme.l"
-	  {
+	YY_BREAK
+case 36:
+YY_RULE_SETUP
+#line 204 "albumtheme.l"
+{ 
 	    BEGIN (TAG);
 	    return END;
 	  }
-	YY_BREAK case 34:
-	  YY_RULE_SETUP
-#line 193 "albumtheme.l"
-	  {
+	YY_BREAK
+case 37:
+YY_RULE_SETUP
+#line 208 "albumtheme.l"
+{
 	    yylval.ivalue = atoi (yytext);
 	    return NUMBER;
 	  }
-	YY_BREAK case 35:
-	  YY_RULE_SETUP
-#line 197 "albumtheme.l"
-	  {
+	YY_BREAK
+case 38:
+YY_RULE_SETUP
+#line 212 "albumtheme.l"
+{
 	    yylval.text = g_strdup (yytext);
 	    return NAME;
 	  }
-	YY_BREAK case 36:
-	  YY_RULE_SETUP
-#line 201 "albumtheme.l"
-	  {
+	YY_BREAK
+case 39:
+YY_RULE_SETUP
+#line 216 "albumtheme.l"
+{
 	    return '=';
 	  }
-	YY_BREAK case 37:
-	  YY_RULE_SETUP
-#line 204 "albumtheme.l"
-	  {
+	YY_BREAK
+case 40:
+YY_RULE_SETUP
+#line 219 "albumtheme.l"
+{
 	    yylval.ivalue = GTH_OP_CMP_LT;
 	    return COMPARE;
 	  }
-	YY_BREAK case 38:
-	  YY_RULE_SETUP
-#line 208 "albumtheme.l"
-	  {
+	YY_BREAK
+case 41:
+YY_RULE_SETUP
+#line 223 "albumtheme.l"
+{
 	    yylval.ivalue = GTH_OP_CMP_GT;
 	    return COMPARE;
 	  }
-	YY_BREAK case 39:
-	  YY_RULE_SETUP
-#line 212 "albumtheme.l"
-	  {
+	YY_BREAK
+case 42:
+YY_RULE_SETUP
+#line 227 "albumtheme.l"
+{
 	    BEGIN (INITIAL);
 	    return END_TAG;
 	  }
-	YY_BREAK case 40:
-	  YY_RULE_SETUP
-#line 216 "albumtheme.l"
-	  {
+	YY_BREAK
+case 43:
+YY_RULE_SETUP
+#line 231 "albumtheme.l"
+{
 	    return '+';
 	  }
-	YY_BREAK case 41:
-	  YY_RULE_SETUP
-#line 219 "albumtheme.l"
-	  {
+	YY_BREAK
+case 44:
+YY_RULE_SETUP
+#line 234 "albumtheme.l"
+{
 	    return '-';
 	  }
-	YY_BREAK case 42:
-	  YY_RULE_SETUP
-#line 222 "albumtheme.l"
-	  {
+	YY_BREAK
+case 45:
+YY_RULE_SETUP
+#line 237 "albumtheme.l"
+{
 	    return '*';
 	  }
-	YY_BREAK case 43:
-	  YY_RULE_SETUP
-#line 225 "albumtheme.l"
-	  {
+	YY_BREAK
+case 46:
+YY_RULE_SETUP
+#line 240 "albumtheme.l"
+{
 	    return '/';
 	  }
-	YY_BREAK case 44:
-	  YY_RULE_SETUP
-#line 228 "albumtheme.l"
-	  {
+	YY_BREAK
+case 47:
+YY_RULE_SETUP
+#line 243 "albumtheme.l"
+{
 	    return '!';
 	  }
-	YY_BREAK case 45:
-	  YY_RULE_SETUP
-#line 231 "albumtheme.l"
-	  {
+	YY_BREAK
+case 48:
+YY_RULE_SETUP
+#line 246 "albumtheme.l"
+{
 	    return '(';
 	  }
-	YY_BREAK case 46:
-	  YY_RULE_SETUP
-#line 234 "albumtheme.l"
-	  {
+	YY_BREAK
+case 49:
+YY_RULE_SETUP
+#line 249 "albumtheme.l"
+{
 	    return ')';
 	  }
-	YY_BREAK case 47:
-	  YY_RULE_SETUP
-#line 237 "albumtheme.l"
-	  {
+	YY_BREAK
+case 50:
+YY_RULE_SETUP
+#line 252 "albumtheme.l"
+{
 	    return '"';
 	  }
-	YY_BREAK case 48:
-	  YY_RULE_SETUP
-#line 240 "albumtheme.l"
-	  {
+	YY_BREAK
+case 51:
+YY_RULE_SETUP
+#line 255 "albumtheme.l"
+{
 	    yylval.ivalue = GTH_OP_AND;
 	    return BOOL_OP;
 	  }
-	YY_BREAK case 49:
-	  YY_RULE_SETUP
-#line 244 "albumtheme.l"
-	  {
+	YY_BREAK
+case 52:
+YY_RULE_SETUP
+#line 259 "albumtheme.l"
+{
 	    yylval.ivalue = GTH_OP_OR;
 	    return BOOL_OP;
 	  }
-	YY_BREAK case 50:
-	  YY_RULE_SETUP
-#line 248 "albumtheme.l"
-	  {
+	YY_BREAK
+case 53:
+YY_RULE_SETUP
+#line 263 "albumtheme.l"
+{
 	    yylval.ivalue = GTH_OP_CMP_EQ;
 	    return COMPARE;
 	  }
-	YY_BREAK case 51:
-	  YY_RULE_SETUP
-#line 252 "albumtheme.l"
-	  {
+	YY_BREAK
+case 54:
+YY_RULE_SETUP
+#line 267 "albumtheme.l"
+{
 	    yylval.ivalue = GTH_OP_CMP_NE;
 	    return COMPARE;
 	  }
-	YY_BREAK case 52:
-	  YY_RULE_SETUP
-#line 256 "albumtheme.l"
-	  {
+	YY_BREAK
+case 55:
+YY_RULE_SETUP
+#line 271 "albumtheme.l"
+{
 	    yylval.ivalue = GTH_OP_CMP_LE;
 	    return COMPARE;
 	  }
-	YY_BREAK case 53:
-	  YY_RULE_SETUP
-#line 260 "albumtheme.l"
-	  {
+	YY_BREAK
+case 56:
+YY_RULE_SETUP
+#line 275 "albumtheme.l"
+{
 	    yylval.ivalue = GTH_OP_CMP_GE;
 	    return COMPARE;
 	  }
-	YY_BREAK case 54:
-	  YY_RULE_SETUP
-#line 264 "albumtheme.l"
-	  {
+	YY_BREAK
+case 57:
+YY_RULE_SETUP
+#line 279 "albumtheme.l"
+{
 	    /* Eat spaces inside tag. */
 	  }
-	YY_BREAK case 55:
-	  YY_RULE_SETUP
-#line 267 "albumtheme.l"
-	  {
+	YY_BREAK
+case 58:
+YY_RULE_SETUP
+#line 282 "albumtheme.l"
+{
 	    BEGIN (INITIAL);
 	    return END_TAG;
 	  }
-	YY_BREAK case 56:
-	  YY_RULE_SETUP
-#line 271 "albumtheme.l"
-	  {
+	YY_BREAK
+case 59:
+YY_RULE_SETUP
+#line 286 "albumtheme.l"
+{
 	    yylval.text = g_strdup (yytext);
 	    return HTML;
 	  }
-	YY_BREAK case 57:
-	  YY_RULE_SETUP
-#line 275 "albumtheme.l"
-	  {
+	YY_BREAK
+case 60:
+YY_RULE_SETUP
+#line 290 "albumtheme.l"
+{
 	    yylval.text = g_strdup (yytext);
 	    return HTML;
 	  }
-	YY_BREAK case YY_STATE_EOF (INITIAL):
-	case YY_STATE_EOF (TAG):
-	case YY_STATE_EOF (STAG):
-#line 279 "albumtheme.l"
-	  {
+	YY_BREAK
+case YY_STATE_EOF(INITIAL):
+case YY_STATE_EOF(TAG):
+case YY_STATE_EOF(STAG):
+#line 294 "albumtheme.l"
+{
 	    return 0;
 	  }
-	YY_BREAK case 58:
-	  YY_RULE_SETUP
-#line 283 "albumtheme.l"
-	    ECHO;
 	  YY_BREAK
-#line 1362 "lex.yy.c"
+case 61:
+YY_RULE_SETUP
+#line 298 "albumtheme.l"
+ECHO;
+	YY_BREAK
+#line 1397 "lex.yy.c"
+
 	case YY_END_OF_BUFFER:
 	  {
 	    /* Amount of text matched not including the EOB char. */
@@ -1303,7 +1403,8 @@
 	    /* Undo the effects of YY_DO_BEFORE_ACTION. */
 	    *yy_cp = yy_hold_char;
 	    YY_RESTORE_YY_MORE_OFFSET
-	      if (yy_current_buffer->yy_buffer_status == YY_BUFFER_NEW)
+
+		if ( yy_current_buffer->yy_buffer_status == YY_BUFFER_NEW )
 	      {
 		/* We're scanning a new file or input source.  It's
 		 * possible that this happened because the user
@@ -1326,13 +1427,13 @@
 	     * end-of-buffer state).  Contrast this with the test
 	     * in input().
 	     */
-	    if (yy_c_buf_p <= &yy_current_buffer->yy_ch_buf[yy_n_chars])
+		if ( yy_c_buf_p <= &yy_current_buffer->yy_ch_buf[yy_n_chars] )
 	      {			/* This was really a NUL. */
 		yy_state_type yy_next_state;
 
 		yy_c_buf_p = yytext_ptr + yy_amount_of_matched_text;
 
-		yy_current_state = yy_get_previous_state ();
+			yy_current_state = yy_get_previous_state();
 
 		/* Okay, we're now positioned to make the NUL
 		 * transition.  We couldn't have
@@ -1343,11 +1444,11 @@
 		 * will run more slowly).
 		 */
 
-		yy_next_state = yy_try_NUL_trans (yy_current_state);
+			yy_next_state = yy_try_NUL_trans( yy_current_state );
 
 		yy_bp = yytext_ptr + YY_MORE_ADJ;
 
-		if (yy_next_state)
+			if ( yy_next_state )
 		  {
 		    /* Consume the NUL. */
 		    yy_cp = ++yy_c_buf_p;
@@ -1362,14 +1463,13 @@
 		  }
 	      }
 
-	    else
-	      switch (yy_get_next_buffer ())
+		else switch ( yy_get_next_buffer() )
 		{
 		case EOB_ACT_END_OF_FILE:
 		  {
 		    yy_did_buffer_switch_on_eof = 0;
 
-		    if (yywrap ())
+				if ( yywrap() )
 		      {
 			/* Note: because we've taken care in
 			 * yy_get_next_buffer() to have set up
@@ -1382,31 +1482,33 @@
 			 */
 			yy_c_buf_p = yytext_ptr + YY_MORE_ADJ;
 
-			yy_act = YY_STATE_EOF (YY_START);
+					yy_act = YY_STATE_EOF(YY_START);
 			goto do_action;
 		      }
 
 		    else
 		      {
-			if (!yy_did_buffer_switch_on_eof)
+					if ( ! yy_did_buffer_switch_on_eof )
 			  YY_NEW_FILE;
 		      }
 		    break;
 		  }
 
 		case EOB_ACT_CONTINUE_SCAN:
-		  yy_c_buf_p = yytext_ptr + yy_amount_of_matched_text;
+				yy_c_buf_p =
+					yytext_ptr + yy_amount_of_matched_text;
 
-		  yy_current_state = yy_get_previous_state ();
+				yy_current_state = yy_get_previous_state();
 
 		  yy_cp = yy_c_buf_p;
 		  yy_bp = yytext_ptr + YY_MORE_ADJ;
 		  goto yy_match;
 
 		case EOB_ACT_LAST_MATCH:
-		  yy_c_buf_p = &yy_current_buffer->yy_ch_buf[yy_n_chars];
+				yy_c_buf_p =
+				&yy_current_buffer->yy_ch_buf[yy_n_chars];
 
-		  yy_current_state = yy_get_previous_state ();
+				yy_current_state = yy_get_previous_state();
 
 		  yy_cp = yy_c_buf_p;
 		  yy_bp = yytext_ptr + YY_MORE_ADJ;
@@ -1416,11 +1518,11 @@
 	  }
 
 	default:
-	  YY_FATAL_ERROR
-	    ("fatal flex scanner internal error--no action found");
+		YY_FATAL_ERROR(
+			"fatal flex scanner internal error--no action found" );
 	}			/* end of action switch */
     }				/* end of scanning one token */
-}				/* end of yylex */
+	} /* end of yylex */
 
 
 /* yy_get_next_buffer - try to read in a new buffer
@@ -1431,21 +1533,20 @@
  *	EOB_ACT_END_OF_FILE - end of file
  */
 
-static int
-yy_get_next_buffer ()
-{
+static int yy_get_next_buffer()
+	{
   register char *dest = yy_current_buffer->yy_ch_buf;
   register char *source = yytext_ptr;
   register int number_to_move, i;
   int ret_val;
 
-  if (yy_c_buf_p > &yy_current_buffer->yy_ch_buf[yy_n_chars + 1])
-    YY_FATAL_ERROR
-      ("fatal flex scanner internal error--end of buffer missed");
+	if ( yy_c_buf_p > &yy_current_buffer->yy_ch_buf[yy_n_chars + 1] )
+		YY_FATAL_ERROR(
+		"fatal flex scanner internal error--end of buffer missed" );
 
-  if (yy_current_buffer->yy_fill_buffer == 0)
+	if ( yy_current_buffer->yy_fill_buffer == 0 )
     {				/* Don't try to fill the buffer, so this is an EOF. */
-      if (yy_c_buf_p - yytext_ptr - YY_MORE_ADJ == 1)
+		if ( yy_c_buf_p - yytext_ptr - YY_MORE_ADJ == 1 )
 	{
 	  /* We matched a single character, the EOB, so
 	   * treat this as a final EOF.
@@ -1467,10 +1568,10 @@
   /* First move last chars to start of buffer. */
   number_to_move = (int) (yy_c_buf_p - yytext_ptr) - 1;
 
-  for (i = 0; i < number_to_move; ++i)
+	for ( i = 0; i < number_to_move; ++i )
     *(dest++) = *(source++);
 
-  if (yy_current_buffer->yy_buffer_status == YY_BUFFER_EOF_PENDING)
+	if ( yy_current_buffer->yy_buffer_status == YY_BUFFER_EOF_PENDING )
     /* don't do the read, it's not guaranteed to return an EOF,
      * just force an EOF
      */
@@ -1478,68 +1579,74 @@
 
   else
     {
-      int num_to_read = yy_current_buffer->yy_buf_size - number_to_move - 1;
+		int num_to_read =
+			yy_current_buffer->yy_buf_size - number_to_move - 1;
 
-      while (num_to_read <= 0)
+		while ( num_to_read <= 0 )
 	{			/* Not enough room in the buffer - grow it. */
 #ifdef YY_USES_REJECT
-	  YY_FATAL_ERROR
-	    ("input buffer overflow, can't enlarge buffer because scanner uses REJECT");
+			YY_FATAL_ERROR(
+"input buffer overflow, can't enlarge buffer because scanner uses REJECT" );
 #else
 
 	  /* just a shorter name for the current buffer */
 	  YY_BUFFER_STATE b = yy_current_buffer;
 
-	  int yy_c_buf_p_offset = (int) (yy_c_buf_p - b->yy_ch_buf);
+			int yy_c_buf_p_offset =
+				(int) (yy_c_buf_p - b->yy_ch_buf);
 
-	  if (b->yy_is_our_buffer)
+			if ( b->yy_is_our_buffer )
 	    {
 	      int new_size = b->yy_buf_size * 2;
 
-	      if (new_size <= 0)
+				if ( new_size <= 0 )
 		b->yy_buf_size += b->yy_buf_size / 8;
 	      else
 		b->yy_buf_size *= 2;
 
 	      b->yy_ch_buf = (char *)
 		/* Include room in for 2 EOB chars. */
-		yy_flex_realloc ((void *) b->yy_ch_buf, b->yy_buf_size + 2);
+					yy_flex_realloc( (void *) b->yy_ch_buf,
+							 b->yy_buf_size + 2 );
 	    }
 	  else
 	    /* Can't grow it, we don't own it. */
 	    b->yy_ch_buf = 0;
 
-	  if (!b->yy_ch_buf)
-	    YY_FATAL_ERROR ("fatal error - scanner input buffer overflow");
+			if ( ! b->yy_ch_buf )
+				YY_FATAL_ERROR(
+				"fatal error - scanner input buffer overflow" );
 
 	  yy_c_buf_p = &b->yy_ch_buf[yy_c_buf_p_offset];
 
-	  num_to_read = yy_current_buffer->yy_buf_size - number_to_move - 1;
+			num_to_read = yy_current_buffer->yy_buf_size -
+						number_to_move - 1;
 #endif
 	}
 
-      if (num_to_read > YY_READ_BUF_SIZE)
+		if ( num_to_read > YY_READ_BUF_SIZE )
 	num_to_read = YY_READ_BUF_SIZE;
 
       /* Read in more data. */
-      YY_INPUT ((&yy_current_buffer->yy_ch_buf[number_to_move]),
-		yy_n_chars, num_to_read);
+		YY_INPUT( (&yy_current_buffer->yy_ch_buf[number_to_move]),
+			yy_n_chars, num_to_read );
 
       yy_current_buffer->yy_n_chars = yy_n_chars;
     }
 
-  if (yy_n_chars == 0)
+	if ( yy_n_chars == 0 )
     {
-      if (number_to_move == YY_MORE_ADJ)
+		if ( number_to_move == YY_MORE_ADJ )
 	{
 	  ret_val = EOB_ACT_END_OF_FILE;
-	  yyrestart (yyin);
+			yyrestart( yyin );
 	}
 
       else
 	{
 	  ret_val = EOB_ACT_LAST_MATCH;
-	  yy_current_buffer->yy_buffer_status = YY_BUFFER_EOF_PENDING;
+			yy_current_buffer->yy_buffer_status =
+				YY_BUFFER_EOF_PENDING;
 	}
     }
 
@@ -1553,39 +1660,37 @@
   yytext_ptr = &yy_current_buffer->yy_ch_buf[0];
 
   return ret_val;
-}
+	}
 
 
 /* yy_get_previous_state - get the state just before the EOB char was reached */
 
-static yy_state_type
-yy_get_previous_state ()
-{
+static yy_state_type yy_get_previous_state()
+	{
   register yy_state_type yy_current_state;
   register char *yy_cp;
 
   yy_current_state = yy_start;
 
-  for (yy_cp = yytext_ptr + YY_MORE_ADJ; yy_cp < yy_c_buf_p; ++yy_cp)
+	for ( yy_cp = yytext_ptr + YY_MORE_ADJ; yy_cp < yy_c_buf_p; ++yy_cp )
     {
-      register YY_CHAR yy_c = (*yy_cp ? yy_ec[YY_SC_TO_UI (*yy_cp)] : 1);
-      if (yy_accept[yy_current_state])
+		register YY_CHAR yy_c = (*yy_cp ? yy_ec[YY_SC_TO_UI(*yy_cp)] : 1);
+		if ( yy_accept[yy_current_state] )
 	{
 	  yy_last_accepting_state = yy_current_state;
 	  yy_last_accepting_cpos = yy_cp;
 	}
-      while (yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state)
+		while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state )
 	{
 	  yy_current_state = (int) yy_def[yy_current_state];
-	  if (yy_current_state >= 348)
+			if ( yy_current_state >= 362 )
 	    yy_c = yy_meta[(unsigned int) yy_c];
 	}
-      yy_current_state =
-	yy_nxt[yy_base[yy_current_state] + (unsigned int) yy_c];
+		yy_current_state = yy_nxt[yy_base[yy_current_state] + (unsigned int) yy_c];
     }
 
   return yy_current_state;
-}
+	}
 
 
 /* yy_try_NUL_trans - try to make a transition on the NUL character
@@ -1595,61 +1700,58 @@
  */
 
 #ifdef YY_USE_PROTOS
-static yy_state_type
-yy_try_NUL_trans (yy_state_type yy_current_state)
+static yy_state_type yy_try_NUL_trans( yy_state_type yy_current_state )
 #else
-static yy_state_type
-yy_try_NUL_trans (yy_current_state)
-     yy_state_type yy_current_state;
+static yy_state_type yy_try_NUL_trans( yy_current_state )
+yy_state_type yy_current_state;
 #endif
-{
+	{
   register int yy_is_jam;
   register char *yy_cp = yy_c_buf_p;
 
   register YY_CHAR yy_c = 1;
-  if (yy_accept[yy_current_state])
+	if ( yy_accept[yy_current_state] )
     {
       yy_last_accepting_state = yy_current_state;
       yy_last_accepting_cpos = yy_cp;
     }
-  while (yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state)
+	while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state )
     {
       yy_current_state = (int) yy_def[yy_current_state];
-      if (yy_current_state >= 348)
+		if ( yy_current_state >= 362 )
 	yy_c = yy_meta[(unsigned int) yy_c];
     }
   yy_current_state = yy_nxt[yy_base[yy_current_state] + (unsigned int) yy_c];
-  yy_is_jam = (yy_current_state == 347);
+	yy_is_jam = (yy_current_state == 361);
 
   return yy_is_jam ? 0 : yy_current_state;
-}
+	}
 
 
 #ifndef YY_NO_UNPUT
 #ifdef YY_USE_PROTOS
-static void
-yyunput (int c, register char *yy_bp)
+static void yyunput( int c, register char *yy_bp )
 #else
-static void
-yyunput (c, yy_bp)
-     int c;
-     register char *yy_bp;
+static void yyunput( c, yy_bp )
+int c;
+register char *yy_bp;
 #endif
-{
+	{
   register char *yy_cp = yy_c_buf_p;
 
   /* undo effects of setting up yytext */
   *yy_cp = yy_hold_char;
 
-  if (yy_cp < yy_current_buffer->yy_ch_buf + 2)
+	if ( yy_cp < yy_current_buffer->yy_ch_buf + 2 )
     {				/* need to shift things up to make room */
       /* +2 for EOB chars. */
       register int number_to_move = yy_n_chars + 2;
-      register char *dest =
-	&yy_current_buffer->yy_ch_buf[yy_current_buffer->yy_buf_size + 2];
-      register char *source = &yy_current_buffer->yy_ch_buf[number_to_move];
+		register char *dest = &yy_current_buffer->yy_ch_buf[
+					yy_current_buffer->yy_buf_size + 2];
+		register char *source =
+				&yy_current_buffer->yy_ch_buf[number_to_move];
 
-      while (source > yy_current_buffer->yy_ch_buf)
+		while ( source > yy_current_buffer->yy_ch_buf )
 	*--dest = *--source;
 
       yy_cp += (int) (dest - source);
@@ -1657,8 +1759,8 @@
       yy_current_buffer->yy_n_chars =
 	yy_n_chars = yy_current_buffer->yy_buf_size;
 
-      if (yy_cp < yy_current_buffer->yy_ch_buf + 2)
-	YY_FATAL_ERROR ("flex scanner push-back overflow");
+		if ( yy_cp < yy_current_buffer->yy_ch_buf + 2 )
+			YY_FATAL_ERROR( "flex scanner push-back overflow" );
     }
 
   *--yy_cp = (char) c;
@@ -1667,30 +1769,28 @@
   yytext_ptr = yy_bp;
   yy_hold_char = *yy_cp;
   yy_c_buf_p = yy_cp;
-}
+	}
 #endif /* ifndef YY_NO_UNPUT */
 
 
 #ifndef YY_NO_INPUT
 #ifdef __cplusplus
-static int
-yyinput ()
+static int yyinput()
 #else
-static int
-input ()
+static int input()
 #endif
-{
+	{
   int c;
 
   *yy_c_buf_p = yy_hold_char;
 
-  if (*yy_c_buf_p == YY_END_OF_BUFFER_CHAR)
+	if ( *yy_c_buf_p == YY_END_OF_BUFFER_CHAR )
     {
       /* yy_c_buf_p now points to the character we want to return.
        * If this occurs *before* the EOB characters, then it's a
        * valid NUL; if not, then we've hit the end of the buffer.
        */
-      if (yy_c_buf_p < &yy_current_buffer->yy_ch_buf[yy_n_chars])
+		if ( yy_c_buf_p < &yy_current_buffer->yy_ch_buf[yy_n_chars] )
 	/* This was really a NUL. */
 	*yy_c_buf_p = '\0';
 
@@ -1699,7 +1799,7 @@
 	  int offset = yy_c_buf_p - yytext_ptr;
 	  ++yy_c_buf_p;
 
-	  switch (yy_get_next_buffer ())
+			switch ( yy_get_next_buffer() )
 	    {
 	    case EOB_ACT_LAST_MATCH:
 	      /* This happens because yy_g_n_b()
@@ -1713,21 +1813,21 @@
 	       */
 
 	      /* Reset buffer status. */
-	      yyrestart (yyin);
+					yyrestart( yyin );
 
 	      /* fall through */
 
 	    case EOB_ACT_END_OF_FILE:
 	      {
-		if (yywrap ())
+					if ( yywrap() )
 		  return EOF;
 
-		if (!yy_did_buffer_switch_on_eof)
+					if ( ! yy_did_buffer_switch_on_eof )
 		  YY_NEW_FILE;
 #ifdef __cplusplus
-		return yyinput ();
+					return yyinput();
 #else
-		return input ();
+					return input();
 #endif
 	      }
 
@@ -1744,39 +1844,35 @@
 
 
   return c;
-}
+	}
 #endif /* YY_NO_INPUT */
 
 #ifdef YY_USE_PROTOS
-void
-yyrestart (FILE * input_file)
+void yyrestart( FILE *input_file )
 #else
-void
-yyrestart (input_file)
-     FILE *input_file;
+void yyrestart( input_file )
+FILE *input_file;
 #endif
-{
-  if (!yy_current_buffer)
-    yy_current_buffer = yy_create_buffer (yyin, YY_BUF_SIZE);
+	{
+	if ( ! yy_current_buffer )
+		yy_current_buffer = yy_create_buffer( yyin, YY_BUF_SIZE );
 
-  yy_init_buffer (yy_current_buffer, input_file);
-  yy_load_buffer_state ();
-}
+	yy_init_buffer( yy_current_buffer, input_file );
+	yy_load_buffer_state();
+	}
 
 
 #ifdef YY_USE_PROTOS
-void
-yy_switch_to_buffer (YY_BUFFER_STATE new_buffer)
+void yy_switch_to_buffer( YY_BUFFER_STATE new_buffer )
 #else
-void
-yy_switch_to_buffer (new_buffer)
-     YY_BUFFER_STATE new_buffer;
+void yy_switch_to_buffer( new_buffer )
+YY_BUFFER_STATE new_buffer;
 #endif
-{
-  if (yy_current_buffer == new_buffer)
+	{
+	if ( yy_current_buffer == new_buffer )
     return;
 
-  if (yy_current_buffer)
+	if ( yy_current_buffer )
     {
       /* Flush out information for old buffer. */
       *yy_c_buf_p = yy_hold_char;
@@ -1785,7 +1881,7 @@
     }
 
   yy_current_buffer = new_buffer;
-  yy_load_buffer_state ();
+	yy_load_buffer_state();
 
   /* We don't actually know whether we did this switch during
    * EOF (yywrap()) processing, but the only time this flag
@@ -1793,93 +1889,85 @@
    * to go ahead and always set it.
    */
   yy_did_buffer_switch_on_eof = 1;
-}
+	}
 
 
 #ifdef YY_USE_PROTOS
-void
-yy_load_buffer_state (void)
+void yy_load_buffer_state( void )
 #else
-void
-yy_load_buffer_state ()
+void yy_load_buffer_state()
 #endif
-{
+	{
   yy_n_chars = yy_current_buffer->yy_n_chars;
   yytext_ptr = yy_c_buf_p = yy_current_buffer->yy_buf_pos;
   yyin = yy_current_buffer->yy_input_file;
   yy_hold_char = *yy_c_buf_p;
-}
+	}
 
 
 #ifdef YY_USE_PROTOS
-YY_BUFFER_STATE
-yy_create_buffer (FILE * file, int size)
+YY_BUFFER_STATE yy_create_buffer( FILE *file, int size )
 #else
-YY_BUFFER_STATE
-yy_create_buffer (file, size)
-     FILE *file;
-     int size;
+YY_BUFFER_STATE yy_create_buffer( file, size )
+FILE *file;
+int size;
 #endif
-{
+	{
   YY_BUFFER_STATE b;
 
-  b = (YY_BUFFER_STATE) yy_flex_alloc (sizeof (struct yy_buffer_state));
-  if (!b)
-    YY_FATAL_ERROR ("out of dynamic memory in yy_create_buffer()");
+	b = (YY_BUFFER_STATE) yy_flex_alloc( sizeof( struct yy_buffer_state ) );
+	if ( ! b )
+		YY_FATAL_ERROR( "out of dynamic memory in yy_create_buffer()" );
 
   b->yy_buf_size = size;
 
   /* yy_ch_buf has to be 2 characters longer than the size given because
    * we need to put in 2 end-of-buffer characters.
    */
-  b->yy_ch_buf = (char *) yy_flex_alloc (b->yy_buf_size + 2);
-  if (!b->yy_ch_buf)
-    YY_FATAL_ERROR ("out of dynamic memory in yy_create_buffer()");
+	b->yy_ch_buf = (char *) yy_flex_alloc( b->yy_buf_size + 2 );
+	if ( ! b->yy_ch_buf )
+		YY_FATAL_ERROR( "out of dynamic memory in yy_create_buffer()" );
 
   b->yy_is_our_buffer = 1;
 
-  yy_init_buffer (b, file);
+	yy_init_buffer( b, file );
 
   return b;
-}
+	}
 
 
 #ifdef YY_USE_PROTOS
-void
-yy_delete_buffer (YY_BUFFER_STATE b)
+void yy_delete_buffer( YY_BUFFER_STATE b )
 #else
-void
-yy_delete_buffer (b)
-     YY_BUFFER_STATE b;
+void yy_delete_buffer( b )
+YY_BUFFER_STATE b;
 #endif
-{
-  if (!b)
+	{
+	if ( ! b )
     return;
 
-  if (b == yy_current_buffer)
+	if ( b == yy_current_buffer )
     yy_current_buffer = (YY_BUFFER_STATE) 0;
 
-  if (b->yy_is_our_buffer)
-    yy_flex_free ((void *) b->yy_ch_buf);
+	if ( b->yy_is_our_buffer )
+		yy_flex_free( (void *) b->yy_ch_buf );
 
-  yy_flex_free ((void *) b);
-}
+	yy_flex_free( (void *) b );
+	}
 
 
 
 #ifdef YY_USE_PROTOS
-void
-yy_init_buffer (YY_BUFFER_STATE b, FILE * file)
+void yy_init_buffer( YY_BUFFER_STATE b, FILE *file )
 #else
-void
-yy_init_buffer (b, file)
-     YY_BUFFER_STATE b;
-     FILE *file;
+void yy_init_buffer( b, file )
+YY_BUFFER_STATE b;
+FILE *file;
 #endif
 
 
-{
-  yy_flush_buffer (b);
+	{
+	yy_flush_buffer( b );
 
   b->yy_input_file = file;
   b->yy_fill_buffer = 1;
@@ -1890,23 +1978,21 @@
 #if YY_NEVER_INTERACTIVE
   b->yy_is_interactive = 0;
 #else
-  b->yy_is_interactive = file ? (isatty (fileno (file)) > 0) : 0;
+	b->yy_is_interactive = file ? (isatty( fileno(file) ) > 0) : 0;
 #endif
 #endif
-}
+	}
 
 
 #ifdef YY_USE_PROTOS
-void
-yy_flush_buffer (YY_BUFFER_STATE b)
+void yy_flush_buffer( YY_BUFFER_STATE b )
 #else
-void
-yy_flush_buffer (b)
-     YY_BUFFER_STATE b;
+void yy_flush_buffer( b )
+YY_BUFFER_STATE b;
 #endif
 
-{
-  if (!b)
+	{
+	if ( ! b )
     return;
 
   b->yy_n_chars = 0;
@@ -1923,33 +2009,31 @@
   b->yy_at_bol = 1;
   b->yy_buffer_status = YY_BUFFER_NEW;
 
-  if (b == yy_current_buffer)
-    yy_load_buffer_state ();
-}
+	if ( b == yy_current_buffer )
+		yy_load_buffer_state();
+	}
 
 
 #ifndef YY_NO_SCAN_BUFFER
 #ifdef YY_USE_PROTOS
-YY_BUFFER_STATE
-yy_scan_buffer (char *base, yy_size_t size)
+YY_BUFFER_STATE yy_scan_buffer( char *base, yy_size_t size )
 #else
-YY_BUFFER_STATE
-yy_scan_buffer (base, size)
-     char *base;
-     yy_size_t size;
+YY_BUFFER_STATE yy_scan_buffer( base, size )
+char *base;
+yy_size_t size;
 #endif
-{
+	{
   YY_BUFFER_STATE b;
 
-  if (size < 2 ||
-      base[size - 2] != YY_END_OF_BUFFER_CHAR ||
-      base[size - 1] != YY_END_OF_BUFFER_CHAR)
+	if ( size < 2 ||
+	     base[size-2] != YY_END_OF_BUFFER_CHAR ||
+	     base[size-1] != YY_END_OF_BUFFER_CHAR )
     /* They forgot to leave room for the EOB's. */
     return 0;
 
-  b = (YY_BUFFER_STATE) yy_flex_alloc (sizeof (struct yy_buffer_state));
-  if (!b)
-    YY_FATAL_ERROR ("out of dynamic memory in yy_scan_buffer()");
+	b = (YY_BUFFER_STATE) yy_flex_alloc( sizeof( struct yy_buffer_state ) );
+	if ( ! b )
+		YY_FATAL_ERROR( "out of dynamic memory in yy_scan_buffer()" );
 
   b->yy_buf_size = size - 2;	/* "- 2" to take care of EOB's */
   b->yy_buf_pos = b->yy_ch_buf = base;
@@ -1961,43 +2045,39 @@
   b->yy_fill_buffer = 0;
   b->yy_buffer_status = YY_BUFFER_NEW;
 
-  yy_switch_to_buffer (b);
+	yy_switch_to_buffer( b );
 
   return b;
-}
+	}
 #endif
 
 
 #ifndef YY_NO_SCAN_STRING
 #ifdef YY_USE_PROTOS
-YY_BUFFER_STATE
-yy_scan_string (yyconst char *yy_str)
+YY_BUFFER_STATE yy_scan_string( yyconst char *yy_str )
 #else
-YY_BUFFER_STATE
-yy_scan_string (yy_str)
-     yyconst char *yy_str;
+YY_BUFFER_STATE yy_scan_string( yy_str )
+yyconst char *yy_str;
 #endif
-{
+	{
   int len;
-  for (len = 0; yy_str[len]; ++len)
+	for ( len = 0; yy_str[len]; ++len )
     ;
 
-  return yy_scan_bytes (yy_str, len);
-}
+	return yy_scan_bytes( yy_str, len );
+	}
 #endif
 
 
 #ifndef YY_NO_SCAN_BYTES
 #ifdef YY_USE_PROTOS
-YY_BUFFER_STATE
-yy_scan_bytes (yyconst char *bytes, int len)
+YY_BUFFER_STATE yy_scan_bytes( yyconst char *bytes, int len )
 #else
-YY_BUFFER_STATE
-yy_scan_bytes (bytes, len)
-     yyconst char *bytes;
-     int len;
+YY_BUFFER_STATE yy_scan_bytes( bytes, len )
+yyconst char *bytes;
+int len;
 #endif
-{
+	{
   YY_BUFFER_STATE b;
   char *buf;
   yy_size_t n;
@@ -2005,18 +2085,18 @@
 
   /* Get memory for full buffer, including space for trailing EOB's. */
   n = len + 2;
-  buf = (char *) yy_flex_alloc (n);
-  if (!buf)
-    YY_FATAL_ERROR ("out of dynamic memory in yy_scan_bytes()");
+	buf = (char *) yy_flex_alloc( n );
+	if ( ! buf )
+		YY_FATAL_ERROR( "out of dynamic memory in yy_scan_bytes()" );
 
-  for (i = 0; i < len; ++i)
+	for ( i = 0; i < len; ++i )
     buf[i] = bytes[i];
 
-  buf[len] = buf[len + 1] = YY_END_OF_BUFFER_CHAR;
+	buf[len] = buf[len+1] = YY_END_OF_BUFFER_CHAR;
 
-  b = yy_scan_buffer (buf, n);
-  if (!b)
-    YY_FATAL_ERROR ("bad buffer in yy_scan_bytes()");
+	b = yy_scan_buffer( buf, n );
+	if ( ! b )
+		YY_FATAL_ERROR( "bad buffer in yy_scan_bytes()" );
 
   /* It's okay to grow etc. this buffer, and we should throw it
    * away when we're done.
@@ -2024,63 +2104,60 @@
   b->yy_is_our_buffer = 1;
 
   return b;
-}
+	}
 #endif
 
 
 #ifndef YY_NO_PUSH_STATE
 #ifdef YY_USE_PROTOS
-static void
-yy_push_state (int new_state)
+static void yy_push_state( int new_state )
 #else
-static void
-yy_push_state (new_state)
-     int new_state;
+static void yy_push_state( new_state )
+int new_state;
 #endif
-{
-  if (yy_start_stack_ptr >= yy_start_stack_depth)
+	{
+	if ( yy_start_stack_ptr >= yy_start_stack_depth )
     {
       yy_size_t new_size;
 
       yy_start_stack_depth += YY_START_STACK_INCR;
-      new_size = yy_start_stack_depth * sizeof (int);
+		new_size = yy_start_stack_depth * sizeof( int );
 
-      if (!yy_start_stack)
-	yy_start_stack = (int *) yy_flex_alloc (new_size);
+		if ( ! yy_start_stack )
+			yy_start_stack = (int *) yy_flex_alloc( new_size );
 
       else
-	yy_start_stack = (int *) yy_flex_realloc ((void *) yy_start_stack,
-						  new_size);
+			yy_start_stack = (int *) yy_flex_realloc(
+					(void *) yy_start_stack, new_size );
 
-      if (!yy_start_stack)
-	YY_FATAL_ERROR ("out of memory expanding start-condition stack");
+		if ( ! yy_start_stack )
+			YY_FATAL_ERROR(
+			"out of memory expanding start-condition stack" );
     }
 
   yy_start_stack[yy_start_stack_ptr++] = YY_START;
 
-  BEGIN (new_state);
-}
+	BEGIN(new_state);
+	}
 #endif
 
 
 #ifndef YY_NO_POP_STATE
-static void
-yy_pop_state ()
-{
-  if (--yy_start_stack_ptr < 0)
-    YY_FATAL_ERROR ("start-condition stack underflow");
+static void yy_pop_state()
+	{
+	if ( --yy_start_stack_ptr < 0 )
+		YY_FATAL_ERROR( "start-condition stack underflow" );
 
-  BEGIN (yy_start_stack[yy_start_stack_ptr]);
-}
+	BEGIN(yy_start_stack[yy_start_stack_ptr]);
+	}
 #endif
 
 
 #ifndef YY_NO_TOP_STATE
-static int
-yy_top_state ()
-{
+static int yy_top_state()
+	{
   return yy_start_stack[yy_start_stack_ptr - 1];
-}
+	}
 #endif
 
 #ifndef YY_EXIT_FAILURE
@@ -2088,17 +2165,15 @@
 #endif
 
 #ifdef YY_USE_PROTOS
-static void
-yy_fatal_error (yyconst char msg[])
+static void yy_fatal_error( yyconst char msg[] )
 #else
-static void
-yy_fatal_error (msg)
-     char msg[];
+static void yy_fatal_error( msg )
+char msg[];
 #endif
-{
-  (void) fprintf (stderr, "%s\n", msg);
-  exit (YY_EXIT_FAILURE);
-}
+	{
+	(void) fprintf( stderr, "%s\n", msg );
+	exit( YY_EXIT_FAILURE );
+	}
 
 
 
@@ -2122,63 +2197,55 @@
 
 #ifndef yytext_ptr
 #ifdef YY_USE_PROTOS
-static void
-yy_flex_strncpy (char *s1, yyconst char *s2, int n)
+static void yy_flex_strncpy( char *s1, yyconst char *s2, int n )
 #else
-static void
-yy_flex_strncpy (s1, s2, n)
-     char *s1;
-     yyconst char *s2;
-     int n;
+static void yy_flex_strncpy( s1, s2, n )
+char *s1;
+yyconst char *s2;
+int n;
 #endif
-{
+	{
   register int i;
-  for (i = 0; i < n; ++i)
+	for ( i = 0; i < n; ++i )
     s1[i] = s2[i];
-}
+	}
 #endif
 
 #ifdef YY_NEED_STRLEN
 #ifdef YY_USE_PROTOS
-static int
-yy_flex_strlen (yyconst char *s)
+static int yy_flex_strlen( yyconst char *s )
 #else
-static int
-yy_flex_strlen (s)
-     yyconst char *s;
+static int yy_flex_strlen( s )
+yyconst char *s;
 #endif
-{
+	{
   register int n;
-  for (n = 0; s[n]; ++n)
+	for ( n = 0; s[n]; ++n )
     ;
 
   return n;
-}
+	}
 #endif
 
 
 #ifdef YY_USE_PROTOS
-static void *
-yy_flex_alloc (yy_size_t size)
+static void *yy_flex_alloc( yy_size_t size )
 #else
-static void *
-yy_flex_alloc (size)
-     yy_size_t size;
+static void *yy_flex_alloc( size )
+yy_size_t size;
 #endif
-{
-  return (void *) malloc (size);
-}
+	{
+	return (void *) malloc( size );
+	}
 
 #ifdef YY_USE_PROTOS
-static void *
-yy_flex_realloc (void *ptr, yy_size_t size)
+static void *yy_flex_realloc( void *ptr, yy_size_t size )
 #else
-static void *
-yy_flex_realloc (ptr, size)
-     void *ptr;
-     yy_size_t size;
+static void *yy_flex_realloc( ptr, size )
+void *ptr;
+yy_size_t size;
 #endif
-{
+	{
   /* The cast to (char *) in the following accommodates both
    * implementations that use char* generic pointers, and those
    * that use void* generic pointers.  It works with the latter
@@ -2186,27 +2253,26 @@
    * any pointer type to void*, and deal with argument conversions
    * as though doing an assignment.
    */
-  return (void *) realloc ((char *) ptr, size);
-}
+	return (void *) realloc( (char *) ptr, size );
+	}
 
 #ifdef YY_USE_PROTOS
-static void
-yy_flex_free (void *ptr)
+static void yy_flex_free( void *ptr )
 #else
-static void
-yy_flex_free (ptr)
-     void *ptr;
+static void yy_flex_free( ptr )
+void *ptr;
 #endif
-{
-  free (ptr);
-}
+	{
+	free( ptr );
+	}
 
 #if YY_MAIN
-int
-main ()
-{
-  yylex ();
+int main()
+	{
+	yylex();
   return 0;
-}
+	}
 #endif
-#line 283 "albumtheme.l"
+#line 298 "albumtheme.l"
+
+
