Merge remote-tracking branch 'github/merge-requests/628'
authorKlaus Ethgen <Klaus@Ethgen.de>
Tue, 14 Aug 2018 20:28:02 +0000 (21:28 +0100)
committerKlaus Ethgen <Klaus@Ethgen.de>
Tue, 14 Aug 2018 20:28:02 +0000 (21:28 +0100)
* github/merge-requests/628:
  Fix typo unkown/unknown

39 files changed:
doc/docbook/GuideImageSearchSearch.xml
doc/docbook/GuideReference.xml
doc/docbook/GuideReferencePCRE.xml [new file with mode: 0644]
src/exif-common.c
src/icons/Makefile.am
src/icons/icon_move.png [new file with mode: 0644]
src/icons/icon_rename.png [new file with mode: 0644]
src/icons/icon_select_all.png [new file with mode: 0644]
src/icons/icon_select_invert.png [new file with mode: 0644]
src/icons/icon_select_none.png [new file with mode: 0644]
src/icons/icon_select_rectangle.png [new file with mode: 0644]
src/layout.c
src/layout_util.c
src/layout_util.h
src/pixbuf_util.c
src/pixbuf_util.h
src/search.c
src/toolbar.c
src/typedefs.h
web/geeqie-install-debian.sh
web/help/GuideFaq.html
web/help/GuideImageSearchCache.html [new file with mode: 0644]
web/help/GuideImageSearchSearch.html
web/help/GuideIndex.html
web/help/GuideReference.html
web/help/GuideReferenceCommandLine.html
web/help/GuideReferenceConfig.html
web/help/GuideReferenceDecodeLatLong.html
web/help/GuideReferenceKeyboardShortcuts.html
web/help/GuideReferenceLIRC.html
web/help/GuideReferenceLua.html
web/help/GuideReferenceMetadata.html
web/help/GuideReferencePCRE.html [new file with mode: 0644]
web/help/GuideReferencePixbufLoaders.html
web/help/GuideReferenceStandards.html
web/help/GuideReferenceSupportedFormats.html
web/help/GuideReferenceThumbnails.html
web/help/GuideReferenceUTC.html
web/help/GuideReferenceXmpExif.html

index 8dddc1a..fdf2d26 100644 (file)
         <term>\r
           <guilabel>File name</guilabel>\r
         </term>\r
-        <listitem>The search will match if the entered text appears within the file name, or if the text exactly matches the file name, depending on the method selected from the drop down menu. The text comparison can be made to be case sensitive by enabling the Match case checkbox.</listitem>\r
+        <listitem>\r
+          The search will match if the entered text appears within the file name, or if the text exactly matches the file name, depending on the method selected from the drop down menu. The text comparison can be made to be case sensitive by enabling the Match case checkbox.\r
+          <para />\r
+          If "contains" is selected,\r
+          <link linkend="GuideReferencePCRE">Perl Compatible Regular Expressions</link>\r
+          are used.\r
+        </listitem>\r
       </varlistentry>\r
       <varlistentry>\r
         <term>\r
         </term>\r
         <listitem>The search will match if the file's associated keywords match all, match any, or exclude the entered keywords, depending on the method selected from the drop down menu. Keywords can be separated with a space, comma, or tab character.</listitem>\r
       </varlistentry>\r
+      <varlistentry>\r
+        <term>\r
+          <guilabel>Comment</guilabel>\r
+        </term>\r
+        <listitem>\r
+          The search will match if the file's Comments field contains the entered pattern.\r
+          <link linkend="GuideReferencePCRE">Perl Compatible Regular Expressions</link>\r
+          are used.\r
+        </listitem>\r
+      </varlistentry>\r
       <varlistentry>\r
         <term>\r
           <guilabel>Geocoded position</guilabel>\r
index 9b45b3a..2b5a60a 100644 (file)
@@ -14,5 +14,6 @@
   <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="GuideReferenceUTC.xml" />\r
   <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="GuideReferenceDecodeLatLong.xml" />\r
   <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="GuideReferenceStandards.xml" />\r
+  <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="GuideReferencePCRE.xml" />\r
   <para />\r
 </chapter>\r
diff --git a/doc/docbook/GuideReferencePCRE.xml b/doc/docbook/GuideReferencePCRE.xml
new file mode 100644 (file)
index 0000000..66d97be
--- /dev/null
@@ -0,0 +1,14 @@
+<?xml version="1.0" encoding="utf-8"?>\r
+<section id="GuideReferencePCRE">\r
+  <title id="titleGuideReferencePCRE">Perl Compatible Regular Expressions</title>\r
+  <para>\r
+    The Filename and Comment sections on the search window use\r
+    <ulink url="https://en.wikipedia.org/wiki/Perl_Compatible_Regular_Expressions">Perl Compatible Regular Expressions</ulink>\r
+    . In general use there are a number of differences to the wildcard expansion used on the command line:\r
+    <itemizedlist>\r
+      <listitem>Use "." and not "?" for a single character.</listitem>\r
+      <listitem>Use "abc.*ghk" and not "abc*ghk" for multiple characters</listitem>\r
+      <listitem>Use "\." to represent the dot in a file extension</listitem>\r
+    </itemizedlist>\r
+  </para>\r
+</section>\r
index 55455e0..e3b4af4 100644 (file)
@@ -812,8 +812,17 @@ static gchar *exif_build_formatted_timezone(ExifData *exif)
        text_latitude_ref = exif_get_data_as_text(exif, "Exif.GPSInfo.GPSLatitudeRef");
        text_longitude_ref = exif_get_data_as_text(exif, "Exif.GPSInfo.GPSLongitudeRef");
 
-       if (text_latitude && text_longitude && text_latitude_ref &&
-                                               text_longitude_ref)
+       if ((text_latitude && g_strrstr(text_latitude, "deg")) &&
+               (text_longitude && g_strrstr(text_longitude, "deg")) &&
+               (
+                       (text_latitude_ref && g_strrstr(text_latitude_ref, "N")) ||
+                       (text_latitude_ref && g_strrstr(text_latitude_ref, "S"))
+               ) &&
+               (
+                       (text_longitude_ref && g_strrstr(text_longitude_ref, "E")) ||
+                       (text_longitude_ref && g_strrstr(text_longitude_ref, "W"))
+               )
+               )
                {
                lat_deg = strtok(text_latitude, "deg'");
                lat_min = strtok(NULL, "deg'");
index 0e6efe9..dcca29f 100644 (file)
@@ -33,7 +33,14 @@ ICONS_INLINE = \
        icon_info.png   \
        icon_sort.png   \
        icon_pdf.png    \
-       icon_draw_rectangle.png
+       icon_draw_rectangle.png \
+       icon_move.png \
+       icon_rename.png \
+       icon_select_all.png \
+       icon_select_none.png \
+       icon_select_invert.png \
+       icon_select_rectangle.png
+
 
 ICONS_INLINE_PAIRS = \
        folder_closed           $(srcdir)/folder_closed.png     \
@@ -65,7 +72,13 @@ ICONS_INLINE_PAIRS = \
        icon_info       $(srcdir)/icon_info.png \
        icon_sort       $(srcdir)/icon_sort.png \
        icon_pdf        $(srcdir)/icon_pdf.png \
-       icon_draw_rectangle     $(srcdir)/icon_draw_rectangle.png
+       icon_draw_rectangle     $(srcdir)/icon_draw_rectangle.png \
+       icon_move       $(srcdir)/icon_move.png \
+       icon_rename     $(srcdir)/icon_rename.png \
+       icon_select_all $(srcdir)/icon_select_all.png \
+       icon_select_none        $(srcdir)/icon_select_none.png \
+       icon_select_invert      $(srcdir)/icon_select_invert.png \
+       icon_select_rectangle   $(srcdir)/icon_select_rectangle.png
 
 icons_inline.h: $(ICONS_INLINE) Makefile.in
        @sh -ec "echo '/* Auto generated file, do not edit */'; echo; \
@@ -83,4 +96,3 @@ CLEANFILES = $(noinst_DATA)
 EXTRA_DIST = \
        $(ICONS_INLINE)         \
        marker.xpm
-
diff --git a/src/icons/icon_move.png b/src/icons/icon_move.png
new file mode 100644 (file)
index 0000000..de4551a
Binary files /dev/null and b/src/icons/icon_move.png differ
diff --git a/src/icons/icon_rename.png b/src/icons/icon_rename.png
new file mode 100644 (file)
index 0000000..085c90f
Binary files /dev/null and b/src/icons/icon_rename.png differ
diff --git a/src/icons/icon_select_all.png b/src/icons/icon_select_all.png
new file mode 100644 (file)
index 0000000..a9aee9e
Binary files /dev/null and b/src/icons/icon_select_all.png differ
diff --git a/src/icons/icon_select_invert.png b/src/icons/icon_select_invert.png
new file mode 100644 (file)
index 0000000..bc37f04
Binary files /dev/null and b/src/icons/icon_select_invert.png differ
diff --git a/src/icons/icon_select_none.png b/src/icons/icon_select_none.png
new file mode 100644 (file)
index 0000000..14140b3
Binary files /dev/null and b/src/icons/icon_select_none.png differ
diff --git a/src/icons/icon_select_rectangle.png b/src/icons/icon_select_rectangle.png
new file mode 100644 (file)
index 0000000..e6d51ec
Binary files /dev/null and b/src/icons/icon_select_rectangle.png differ
index f1e27e1..14ae251 100644 (file)
@@ -310,18 +310,15 @@ static GtkWidget *layout_tool_setup(LayoutWindow *lw)
        GtkWidget *box;
        GtkWidget *box_folders;
        GtkWidget *scd;
-       GtkWidget *menu_bar;
+       GtkWidget *menu_tool_bar;
        GtkWidget *tabcomp;
-       GtkWidget *toolbar;
 
        box = gtk_vbox_new(FALSE, 0);
 
-       menu_bar = layout_actions_menu_bar(lw);
-       gtk_box_pack_start(GTK_BOX(box), menu_bar, FALSE, FALSE, 0);
-
-       toolbar = layout_actions_toolbar(lw, TOOLBAR_MAIN);
-       gtk_box_pack_start(GTK_BOX(box), toolbar, FALSE, FALSE, 0);
-       if (lw->options.toolbar_hidden) gtk_widget_hide(toolbar);
+       menu_tool_bar = layout_actions_menu_tool_bar(lw);
+       gtk_widget_show(menu_tool_bar);
+       gtk_box_pack_start(GTK_BOX(lw->main_box), lw->menu_tool_bar, FALSE, FALSE, 0);
+       if (lw->options.toolbar_hidden) gtk_widget_hide(lw->toolbar[TOOLBAR_MAIN]);
 
        tabcomp = tab_completion_new_with_history(&lw->path_entry, NULL, "path_list", -1,
                                                  layout_path_entry_cb, lw);
@@ -1499,6 +1496,7 @@ static void layout_tools_setup(LayoutWindow *lw, GtkWidget *tools, GtkWidget *fi
 
                gtk_window_set_resizable(GTK_WINDOW(lw->tools), TRUE);
                gtk_container_set_border_width(GTK_CONTAINER(lw->tools), 0);
+               gtk_container_remove(GTK_CONTAINER(lw->main_box), lw->menu_tool_bar);
 
                new_window = TRUE;
                }
@@ -1513,6 +1511,7 @@ static void layout_tools_setup(LayoutWindow *lw, GtkWidget *tools, GtkWidget *fi
 
        vbox = gtk_vbox_new(FALSE, 0);
        gtk_container_add(GTK_CONTAINER(lw->tools), vbox);
+       gtk_box_pack_start(GTK_BOX(vbox), GTK_WIDGET(lw->menu_tool_bar), FALSE, FALSE, 0);
        gtk_widget_show(vbox);
 
        layout_status_setup(lw, vbox, TRUE);
@@ -1662,7 +1661,7 @@ static void layout_grid_setup(LayoutWindow *lw)
        layout_actions_setup(lw);
 
        lw->group_box = gtk_vbox_new(FALSE, 0);
-       gtk_box_pack_start(GTK_BOX(lw->main_box), lw->group_box, TRUE, TRUE, 0);
+       gtk_box_pack_end(GTK_BOX(lw->main_box), lw->group_box, TRUE, TRUE, 0);
        gtk_widget_show(lw->group_box);
 
        priority_location = layout_grid_compass(lw);
@@ -1796,9 +1795,10 @@ void layout_style_set(LayoutWindow *lw, gint style, const gchar *order)
        /* preserve utility_box (image + sidebars), menu_bar and toolbars to be reused later in layout_grid_setup */
        /* lw->image is preserved together with lw->utility_box */
        if (lw->utility_box) gtk_container_remove(GTK_CONTAINER(gtk_widget_get_parent(lw->utility_box)), lw->utility_box);
-       if (lw->menu_bar) gtk_container_remove(GTK_CONTAINER(gtk_widget_get_parent(lw->menu_bar)), lw->menu_bar);
-       for (i = 0; i < TOOLBAR_COUNT; i++)
-               if (lw->toolbar[i]) gtk_container_remove(GTK_CONTAINER(gtk_widget_get_parent(lw->toolbar[i])), lw->toolbar[i]);
+
+       if (lw->toolbar[TOOLBAR_STATUS]) gtk_container_remove(GTK_CONTAINER(gtk_widget_get_parent(lw->toolbar[TOOLBAR_STATUS])), lw->toolbar[TOOLBAR_STATUS]);
+
+       if (lw->menu_tool_bar) gtk_container_remove(GTK_CONTAINER(gtk_widget_get_parent(lw->menu_tool_bar)), lw->menu_tool_bar);
 
        /* clear it all */
 
index 993794c..ca78abc 100644 (file)
@@ -1839,8 +1839,8 @@ static GtkActionEntry menu_entries[] = {
   { "Print",           GTK_STOCK_PRINT,        N_("_Print..."),                        "<shift>P",             N_("Print..."),                         CB(layout_menu_print_cb) },
   { "NewFolder",       GTK_STOCK_DIRECTORY,    N_("N_ew folder..."),                   "<control>F",           N_("New folder..."),                    CB(layout_menu_dir_cb) },
   { "Copy",            GTK_STOCK_COPY,         N_("_Copy..."),                         "<control>C",           N_("Copy..."),                          CB(layout_menu_copy_cb) },
-  { "Move",            NULL,                   N_("_Move..."),                         "<control>M",           N_("Move..."),                          CB(layout_menu_move_cb) },
-  { "Rename",          NULL,                   N_("_Rename..."),                       "<control>R",           N_("Rename..."),                        CB(layout_menu_rename_cb) },
+  { "Move",    PIXBUF_INLINE_ICON_MOVE,                        N_("_Move..."),                         "<control>M",           N_("Move..."),                          CB(layout_menu_move_cb) },
+  { "Rename",  PIXBUF_INLINE_ICON_RENAME,      N_("_Rename..."),                       "<control>R",           N_("Rename..."),                        CB(layout_menu_rename_cb) },
   { "Delete",          GTK_STOCK_DELETE,       N_("_Delete..."),                       "<control>D",           N_("Delete..."),                        CB(layout_menu_delete_cb) },
   { "DeleteAlt1",      GTK_STOCK_DELETE,       N_("_Delete..."),                       "Delete",               N_("Delete..."),                        CB(layout_menu_delete_key_cb) },
   { "DeleteAlt2",      GTK_STOCK_DELETE,       N_("_Delete..."),                       "KP_Delete",            N_("Delete..."),                        CB(layout_menu_delete_key_cb) },
@@ -1863,9 +1863,9 @@ static GtkActionEntry menu_entries[] = {
   { "Mirror",          NULL,                   N_("_Mirror"),                          "<shift>M",             N_("Mirror"),                           CB(layout_menu_alter_mirror_cb) },
   { "Flip",            NULL,                   N_("_Flip"),                            "<shift>F",             N_("Flip"),                             CB(layout_menu_alter_flip_cb) },
   { "AlterNone",       NULL,                   N_("_Original state"),                  "<shift>O",             N_("Original state"),                   CB(layout_menu_alter_none_cb) },
-  { "SelectAll",       NULL,                   N_("Select _all"),                      "<control>A",           N_("Select all"),                       CB(layout_menu_select_all_cb) },
-  { "SelectNone",      NULL,                   N_("Select _none"),                     "<control><shift>A",    N_("Select none"),                      CB(layout_menu_unselect_all_cb) },
-  { "SelectInvert",    NULL,                   N_("_Invert Selection"),                "<control><shift>I",    N_("Invert Selection"),                 CB(layout_menu_invert_selection_cb) },
+  { "SelectAll",       PIXBUF_INLINE_ICON_SELECT_ALL,                  N_("Select _all"),                      "<control>A",           N_("Select all"),                       CB(layout_menu_select_all_cb) },
+  { "SelectNone",      PIXBUF_INLINE_ICON_SELECT_NONE,                 N_("Select _none"),                     "<control><shift>A",    N_("Select none"),                      CB(layout_menu_unselect_all_cb) },
+  { "SelectInvert",    PIXBUF_INLINE_ICON_SELECT_INVERT,                       N_("_Invert Selection"),                "<control><shift>I",    N_("Invert Selection"),                 CB(layout_menu_invert_selection_cb) },
   { "Preferences",     GTK_STOCK_PREFERENCES,  N_("P_references..."),                  "<control>O",           N_("Preferences..."),                   CB(layout_menu_config_cb) },
   { "Plugins",         GTK_STOCK_PREFERENCES,  N_("Configure _Plugins..."),            NULL,                   N_("Configure Plugins..."),             CB(layout_menu_editors_cb) },
   { "LayoutConfig",    GTK_STOCK_PREFERENCES,  N_("_Configure this window..."),        NULL,                   N_("Configure this window..."),         CB(layout_menu_layout_config_cb) },
@@ -1953,7 +1953,7 @@ static GtkToggleActionEntry menu_toggle_entries[] = {
   { "ImageOverlay",    NULL,                   N_("Image _Overlay"),                   NULL,                   N_("Image Overlay"),                    CB(layout_menu_overlay_cb),      FALSE },
   { "ImageHistogram",  NULL,                   N_("_Show Histogram"),                  NULL,                   N_("Show Histogram"),                   CB(layout_menu_histogram_cb),    FALSE },
   { "ImageGuidelines", PIXBUF_INLINE_ICON_GUIDELINES,          N_("_Show Guidelines"),                 NULL,           N_("Show Guidelines"),                  CB(layout_menu_guidelines_cb),   FALSE },
-  { "RectangularSelection",    NULL,                   N_("Rectangular Selection"),                    "<alt>R",                       N_("Rectangular Selection"),                    CB(layout_menu_rectangular_selection_cb),        FALSE },
+  { "RectangularSelection",    PIXBUF_INLINE_ICON_SELECT_RECTANGLE,    N_("Rectangular Selection"),                    "<alt>R",                       N_("Rectangular Selection"),                    CB(layout_menu_rectangular_selection_cb),        FALSE },
   { "Animate", NULL,   N_("GIF _animation"),           "A",                    N_("Toggle GIF animation"),                     CB(layout_menu_animate_cb),      FALSE  },
   { "ExifRotate",      GTK_STOCK_ORIENTATION_PORTRAIT,                 N_("_Exif rotate"),             "<alt>X",               N_("Exif rotate"),                      CB(layout_menu_exif_rotate_cb), FALSE },
   { "DrawRectangle",   PIXBUF_INLINE_ICON_DRAW_RECTANGLE,                      N_("Draw Rectangle"),           NULL,           N_("Draw Rectangle"),                   CB(layout_menu_select_rectangle_cb), FALSE },
@@ -2703,6 +2703,24 @@ GtkWidget *layout_actions_toolbar(LayoutWindow *lw, ToolbarType type)
        return lw->toolbar[type];
 }
 
+GtkWidget *layout_actions_menu_tool_bar(LayoutWindow *lw)
+{
+       GtkWidget *menu_bar;
+       GtkWidget *toolbar;
+
+       if (lw->menu_tool_bar) return lw->menu_tool_bar;
+
+       menu_bar = layout_actions_menu_bar(lw);
+       toolbar = layout_actions_toolbar(lw, TOOLBAR_MAIN);
+       lw->menu_tool_bar = gtk_vbox_new(FALSE, 0);
+
+       gtk_box_pack_start(GTK_BOX(lw->menu_tool_bar), menu_bar, FALSE, FALSE, 0);
+       gtk_box_pack_start(GTK_BOX(lw->menu_tool_bar), toolbar, FALSE, FALSE, 0);
+
+       g_object_ref(lw->menu_tool_bar);
+       return lw->menu_tool_bar;
+}
+
 void layout_toolbar_clear(LayoutWindow *lw, ToolbarType type)
 {
        if (lw->toolbar_merge_id[type])
index e80e8e4..49f3642 100644 (file)
@@ -74,5 +74,6 @@ void layout_exif_window_new(LayoutWindow *lw);
 gboolean is_help_key(GdkEventKey *event);
 LayoutWindow *layout_menu_new_window(GtkAction *action, gpointer data);
 void layout_menu_close_cb(GtkAction *action, gpointer data);
+GtkWidget *layout_actions_menu_tool_bar(LayoutWindow *lw);
 #endif
 /* vim: set shiftwidth=8 softtabstop=0 cindent cinoptions={1s: */
index 3c69fa9..c694158 100644 (file)
@@ -132,6 +132,12 @@ static PixbufInline inline_pixbuf_data[] = {
        { PIXBUF_INLINE_ICON_SORT,      icon_sort },
        { PIXBUF_INLINE_ICON_PDF,       icon_pdf },
        { PIXBUF_INLINE_ICON_DRAW_RECTANGLE,    icon_draw_rectangle },
+       { PIXBUF_INLINE_ICON_MOVE,      icon_move },
+       { PIXBUF_INLINE_ICON_RENAME,    icon_rename },
+       { PIXBUF_INLINE_ICON_SELECT_ALL,        icon_select_all },
+       { PIXBUF_INLINE_ICON_SELECT_NONE,       icon_select_none },
+       { PIXBUF_INLINE_ICON_SELECT_INVERT,     icon_select_invert },
+       { PIXBUF_INLINE_ICON_SELECT_RECTANGLE,  icon_select_rectangle },
        { NULL, NULL }
 };
 
index 145224e..cfa8ffc 100644 (file)
@@ -66,6 +66,12 @@ gboolean pixbuf_scale_aspect(gint req_w, gint req_h, gint old_w, gint old_h, gin
 #define PIXBUF_INLINE_ICON_SORT                "icon_sort"
 #define PIXBUF_INLINE_ICON_PDF         "icon_pdf"
 #define PIXBUF_INLINE_ICON_DRAW_RECTANGLE      "icon_draw_rectangle"
+#define PIXBUF_INLINE_ICON_MOVE                "icon_move"
+#define PIXBUF_INLINE_ICON_RENAME      "icon_rename"
+#define PIXBUF_INLINE_ICON_SELECT_ALL  "icon_select_all"
+#define PIXBUF_INLINE_ICON_SELECT_NONE "icon_select_none"
+#define PIXBUF_INLINE_ICON_SELECT_INVERT       "icon_select_invert"
+#define PIXBUF_INLINE_ICON_SELECT_RECTANGLE    "icon_select_rectangle"
 
 GdkPixbuf *pixbuf_copy_rotate_90(GdkPixbuf *src, gboolean counter_clockwise);
 GdkPixbuf *pixbuf_copy_mirror(GdkPixbuf *src, gboolean mirror, gboolean flip);
index 577eb7c..662dc5a 100644 (file)
@@ -154,6 +154,7 @@ struct _SearchData
        FileData *search_dir_fd;
        gboolean   search_path_recurse;
        gchar *search_name;
+       GRegex *search_name_regex;
        gboolean   search_name_match_case;
        gint64 search_size;
        gint64 search_size_end;
@@ -172,6 +173,7 @@ struct _SearchData
        CacheData *search_similarity_cd;
        GList *search_keyword_list;
        gchar *search_comment;
+       GRegex *search_comment_regex;
        gint   search_rating;
        gint   search_rating_end;
        gboolean   search_comment_match_case;
@@ -1915,13 +1917,13 @@ static gboolean search_file_next(SearchData *sd)
                        {
                        if (sd->search_name_match_case)
                                {
-                               match = (strstr(fd->name, sd->search_name) != NULL);
+                               match = g_regex_match(sd->search_name_regex, fd->name, 0, NULL);
                                }
                        else
                                {
                                /* sd->search_name is converted in search_start() */
                                gchar *haystack = g_utf8_strdown(fd->name, -1);
-                               match = (strstr(haystack, sd->search_name) != NULL);
+                               match = g_regex_match(sd->search_name_regex, haystack, 0, NULL);
                                g_free(haystack);
                                }
                        }
@@ -2112,11 +2114,11 @@ static gboolean search_file_next(SearchData *sd)
 
                        if (sd->match_comment == SEARCH_MATCH_CONTAINS)
                                {
-                               match = (strstr(comment, sd->search_comment) != NULL);
+                               match = g_regex_match(sd->search_comment_regex, comment, 0, NULL);
                                }
                        else if (sd->match_comment == SEARCH_MATCH_NONE)
                                {
-                               match = (strstr(comment, sd->search_comment) == NULL);
+                               match = !g_regex_match(sd->search_comment_regex, comment, 0, NULL);
                                }
                        g_free(comment);
                        }
@@ -2459,6 +2461,8 @@ static void search_similarity_load_done_cb(ImageLoader *il, gpointer data)
 
 static void search_start(SearchData *sd)
 {
+       GError *error = NULL;
+
        search_stop(sd);
        search_result_clear(sd);
 
@@ -2475,6 +2479,20 @@ static void search_start(SearchData *sd)
                sd->search_name = tmp;
                }
 
+       if(sd->search_name_regex)
+               {
+               g_regex_unref(sd->search_name_regex);
+               }
+
+       sd->search_name_regex = g_regex_new(sd->search_name, 0, 0, &error);
+       if (error)
+               {
+               log_printf("Error: could not compile regular expression %s\n%s\n", sd->search_name, error->message);
+               g_error_free(error);
+               error = NULL;
+               sd->search_name_regex = g_regex_new("", 0, 0, NULL);
+               }
+
        if (!sd->search_comment_match_case)
                {
                /* convert to lowercase here, so that this is only done once per search */
@@ -2483,6 +2501,20 @@ static void search_start(SearchData *sd)
                sd->search_comment = tmp;
                }
 
+       if(sd->search_comment_regex)
+               {
+               g_regex_unref(sd->search_comment_regex);
+               }
+
+       sd->search_comment_regex = g_regex_new(sd->search_comment, 0, 0, &error);
+       if (error)
+               {
+               log_printf("Error: could not compile regular expression %s\n%s\n", sd->search_comment, error->message);
+               g_error_free(error);
+               error = NULL;
+               sd->search_comment_regex = g_regex_new("", 0, 0, NULL);
+               }
+
        sd->search_count = 0;
        sd->search_total = 0;
 
@@ -3032,7 +3064,9 @@ static void search_window_destroy_cb(GtkWidget *widget, gpointer data)
        file_data_unref(sd->search_dir_fd);
 
        g_free(sd->search_name);
+       g_regex_unref(sd->search_name_regex);
        g_free(sd->search_comment);
+       g_regex_unref(sd->search_comment_regex);
        g_free(sd->search_similarity_path);
        string_list_free(sd->search_keyword_list);
 
@@ -3149,6 +3183,7 @@ void search_new(FileData *dir_fd, FileData *example_file)
        gtk_widget_show(combo);
        pref_checkbox_new_int(hbox, _("Match case"),
                              sd->search_name_match_case, &sd->search_name_match_case);
+       gtk_widget_set_tooltip_text(GTK_WIDGET(combo), "When set to \"contains\", this field uses Perl Compatible Regular Expressions.\ne.g. use \n.*\\.jpg\n and not \n*.jpg\n\nSee the Help file.");
 
        /* Search for file size */
        hbox = menu_choice(sd->box_search, &sd->check_size, &sd->menu_size,
@@ -3257,6 +3292,7 @@ void search_new(FileData *dir_fd, FileData *example_file)
        gtk_widget_show(sd->entry_comment);
        pref_checkbox_new_int(hbox, _("Match case"),
                              sd->search_comment_match_case, &sd->search_comment_match_case);
+       gtk_widget_set_tooltip_text(GTK_WIDGET(sd->entry_comment), "This field uses Perl Compatible Regular Expressions.\ne.g. use \nabc.*ghk\n and not \nabc*ghk\n\nSee the Help file.");
 
        /* Search for image rating */
        hbox = menu_choice(sd->box_search, &sd->check_rating, &sd->menu_rating,
index 4c22cac..2a6d913 100644 (file)
@@ -84,7 +84,17 @@ static const UseableToolbarItems useable_toolbar_items[] = {
        {"OpenCollection",      N_("Open collection"), GTK_STOCK_OPEN},
        {"Search",      N_("Search"), GTK_STOCK_FIND},
        {"FindDupes",   N_("Find duplicates"), GTK_STOCK_FIND},
+       {"NewFolder",   N_("New folder"),GTK_STOCK_DIRECTORY},
+       {"Copy",        N_("Copy"), GTK_STOCK_COPY},
+       {"Move",        N_("Move"), PIXBUF_INLINE_ICON_MOVE},
+       {"Rename",      N_("Rename"), PIXBUF_INLINE_ICON_RENAME},
+       {"Delete",      N_("Delete"), GTK_STOCK_DELETE},
+       {"CloseWindow", N_("Close Window"), GTK_STOCK_CLOSE},
        {"PanView",     N_("Pan view"), PIXBUF_INLINE_ICON_PANORAMA},
+       {"SelectAll",   N_("Select all"), PIXBUF_INLINE_ICON_SELECT_ALL},
+       {"SelectNone",  N_("Select none"), PIXBUF_INLINE_ICON_SELECT_NONE},
+       {"SelectInvert",        N_("Select invert"), PIXBUF_INLINE_ICON_SELECT_INVERT},
+       {"RectangularSelection",        N_("Select rectangle"), PIXBUF_INLINE_ICON_SELECT_RECTANGLE},
        {"Print",       N_("Print"), GTK_STOCK_PRINT},
        {"Preferences", N_("Preferences"), GTK_STOCK_PREFERENCES},
        {"LayoutConfig",        N_("Configure this window"), GTK_STOCK_PREFERENCES},
index 844a53d..9d9d985 100644 (file)
@@ -731,7 +731,7 @@ struct _LayoutWindow
 
 //     gint tools_float;
 //     gint tools_hidden;
-
+       GtkWidget *menu_tool_bar; /*Combined menu and toolbar box */
        GtkWidget *menu_bar; /* referenced by lw, exist during whole lw lifetime */
        /* toolbar */
 
index 0b3bbcd..745d938 100755 (executable)
@@ -1,5 +1,5 @@
 #!/bin/bash
-version="2018-08-02"
+version="2018-08-06"
 description=$'
 Geeqie is an image viewer.
 This script will download, compile, and install Geeqie on Debian-based systems.
@@ -202,8 +202,8 @@ unzip master.zip
 cd webp-pixbuf-loader-master
 ./waf configure
 ./waf build
-sudo ./waf install
-sudo gdk-pixbuf-query-loaders --update-cache
+sudo --askpass ./waf install
+sudo --askpass gdk-pixbuf-query-loaders --update-cache
 cd -
 rm -rf webp-pixbuf-loader-master
 rm master.zip
@@ -216,8 +216,8 @@ git clone https://github.com/and-rom/gdk-pixbuf-psd.git
 cd gdk-pixbuf-psd
 ./autogen.sh
 make
-sudo make install
-sudo gdk-pixbuf-query-loaders --update-cache
+sudo --askpass make install
+sudo --askpass gdk-pixbuf-query-loaders --update-cache
 cd -
 rm -rf gdk-pixbuf-psd
 }
@@ -232,7 +232,7 @@ cd xcf-pixbuf-loader
 make
 
 # There must be a better way...
-loader_locn=$(gdk-pixbuf-query-loaders | grep "LoaderDir"  | tr -d '#[:space:]')
+loader_locn=$(gdk-pixbuf-query-loaders | grep "LoaderDir" | tr -d '#[:space:]')
 
 OLDIFS=$IFS
 IFS='='
@@ -241,11 +241,11 @@ OLDIFS=$IFS
 
 if [ -d $2 ]
 then
-       sudo cp .libs/libioxcf.so $2
-       sudo gdk-pixbuf-query-loaders --update-cache
+       sudo --askpass cp .libs/libioxcf.so $2
+       sudo --askpass gdk-pixbuf-query-loaders --update-cache
 fi
 cd -
-rm -rf  xcf-pixbuf-loader
+rm -rf xcf-pixbuf-loader
 }
 
 install_extra_loaders()
@@ -281,25 +281,26 @@ uninstall()
 current_dir=$(basename $PWD)
 if [[ $current_dir == "geeqie" ]]
 then
-       sudo make uninstall
-       zenity --title="Uninstall Geeqie" --width=370 --text="WARNING.\nThis will delete folder:\n\n$PWD\n\nand all sub-folders!" --question --ok-label="Cancel" --cancel-label="OK"  2>/dev/null
+       sudo --askpass make uninstall
+       zenity --title="Uninstall Geeqie" --width=370 --text="WARNING.\nThis will delete folder:\n\n$PWD\n\nand all sub-folders!" --question --ok-label="Cancel" --cancel-label="OK" 2>/dev/null
 
        if [[ $? == 1 ]]
        then
                cd ..
-               sudo rm -rf geeqie
+               sudo --askpass rm -rf geeqie
        fi
 else
-       zenity --title="Uninstall Geeqie" --width=370 --text="This is not a geeqie installation folder!\n\n$PWD" --warning  2>/dev/null
+       zenity --title="Uninstall Geeqie" --width=370 --text="This is not a geeqie installation folder!\n\n$PWD" --warning 2>/dev/null
 fi
-exit
+
+exit_install
 }
 
 package_query()
 {
 if [[ $DistroBasedOn == "debian" ]]
 then
-       res=$(dpkg-query --show --showformat='${Status}' $1  2>&1)
+       res=$(dpkg-query --show --showformat='${Status}' $1 2>>$install_log)
        if [[ "$res" == "install ok installed"* ]]
        then
                status=0
@@ -314,12 +315,39 @@ package_install()
 {
 if [[ $DistroBasedOn == "debian" ]]
 then
-       sudo apt-get --assume-yes install $@
+       sudo --askpass apt-get --assume-yes install $@ >>$install_log 2>&1
+fi
+}
+
+exit_install()
+{
+rm $install_pass_script >/dev/null 2>&1
+#~ rm $install_log >/dev/null 2>&1
+
+if [[ -p $zen_pipe ]]
+then
+       echo "100" > $zen_pipe
+       echo "#End" > $zen_pipe
 fi
+
+zenity --title="$title" --width=370 --text=$'Geeqie is not installed\nLog file: '$install_log --info 2>/dev/null
+
+rm $zen_pipe >/dev/null 2>&1
+
+exit 1
 }
 
 # Entry point
 
+# If uninstall has been run, maybe the current directory no longer exists
+ls $PWD >/dev/null
+if [[ $? != 0 ]]
+then
+       zenity --error --title="Install Geeqie and dependencies" --width=370 --text="Folder $PWD does not exist!" 2>/dev/null
+
+       exit
+fi
+
 # Check system type
 systemProfile
 if [[ $DistroBasedOn != "debian" ]]
@@ -435,12 +463,29 @@ then
        exit
 fi
 
+# Environment variable SUDO_ASKPASS cannot be "zenity --password",
+# so create a temporary script containing the command
+install_pass_script=$(mktemp --tmpdir geeqie_install_XXXXXX.sh)
+echo $'#!/bin/bash
+zenity --password --title=\"'$title$'\" --width=370 2>/dev/null
+if [[ $? > 0 ]]
+then
+       exit 1
+fi
+\n' > $install_pass_script
+chmod +x $install_pass_script
+export SUDO_ASKPASS=$install_pass_script
+
 if [[ $gtk_version == "Uninstall" ]]
 then
        uninstall
        exit
 fi
 
+# Put the install log in tmp, to avoid writing to PWD during a new install
+rm install.log 2>/dev/null
+install_log=$(mktemp --tmpdir geeqie_install_XXXXXX.log)
+
 sleep 100 | zenity --title="$title" --text="Checking for installed files" --width=370 --progress --pulsate 2>/dev/null &
 zen_pid=$!
 
@@ -526,7 +571,7 @@ then
 
        if [[ $? == 1 ]]
        then
-               exit
+               exit_install
        fi
 fi
 
@@ -537,75 +582,127 @@ then
 
        if [[ $? == 1 ]]
        then
-               exit
+               exit_install
        fi
 fi
 
+# Start of Zenity progress section
+zen_pipe=$(mktemp --dry-run --tmpdir geeqie_install_pipe_XXXXXX)
+mkfifo $zen_pipe
+(tail  -f $zen_pipe 2>/dev/null) | zenity --progress --title="$title" --width=370 --text="Installing options..." --auto-close --auto-kill --percentage=0 2>/dev/null &
+
+echo "2" > $zen_pipe
+echo "#Installing essential libraries..." > $zen_pipe
+
 install_essential $gtk_version
+
+echo "4" > $zen_pipe
+echo "#Installing options..." > $zen_pipe
+
 install_options
+
+echo "6" > $zen_pipe
+echo "#Installing extra loaders..." > $zen_pipe
+
 install_extra_loaders
 
+echo "10" > $zen_pipe
+echo "#Getting new sources from server..." > $zen_pipe
+
 if [[ $mode == "install" ]]
 then
-       ret=$(git clone git://www.geeqie.org/geeqie.git  2>&1 >/dev/null)
+       ret=$(git clone git://www.geeqie.org/geeqie.git >>$install_log 2>&1)
 else
-       git checkout master
+       git checkout master >>$install_log 2>&1
        if [[ $? != 0 ]]
        then
-               zenity --title="$title" --width=370 --height=400 --error --text="Git checkout master error"  2>/dev/null
-               exit
+               git_error=$(tail -n5 $install_log 2>&1)
+               zenity --title="$title" --width=370 --height=400 --error --text=$'Git error:\n\n'"$git_error" 2>/dev/null
+               exit_install
        fi
-       ret=$(git pull 2>&1 >/dev/null)
+       ret=$(git pull >>$install_log 2>&1)
 fi
 
 if [[ $? != 0 ]]
 then
-       zenity --title="$title" --width=370 --height=400 --error --text="Git error:\n\n $ret" 2>/dev/null
-       exit
+       git_error=$(tail -n5 $install_log 2>&1)
+       zenity --title="$title" --width=370 --height=400 --error --text=$'Git error:\n\n'"$git_error" 2>/dev/null
+       exit_install
 fi
 
+echo "20" > $zen_pipe
+echo "#Cleaning installed version..." > $zen_pipe
+
 if [[ $mode == "install" ]]
 then
        cd geeqie
 else
-       sudo make uninstall
-       sudo make maintainer-clean
+       sudo --askpass make uninstall >>$install_log 2>&1
+       sudo --askpass make maintainer-clean >>$install_log 2>&1
 fi
 
+echo "30" > $zen_pipe
+echo "#Checkout required version..." > $zen_pipe
+
 if [[ "$BACK" ]]
 then
-       ret=$(git checkout master~"$BACK" 2>&1 >/dev/null)
-       if [[ $1 != 0 ]]
+       ret=$(git checkout master~"$BACK" >>$install_log 2>&1)
+       if [[ $? != 0 ]]
        then
-               zenity --title="$title" --width=370 --height=400 --error --text="Git error:\n\n $ret" 2>/dev/null
-               exit
+               git_error=$(tail -n5 $install_log 2>&1)
+               zenity --title="$title" --width=370 --height=400 --error --text=$'Git error:\n\n'"$git_error" 2>/dev/null
+               exit_install
        fi
 elif [[ "$COMMIT" ]]
 then
-       ret=$(git checkout "$COMMIT" 2>&1 >/dev/null)
-       if [[ $1 != 0 ]]
+       ret=$(git checkout "$COMMIT" >>$install_log 2>&1)
+       if [[ $? != 0 ]]
        then
-               zenity --title="$title" --width=370 --height=400 --error --text="Git error:\n\n $ret" 2>/dev/null
-               exit
+               git_error=$(tail -n5 $install_log 2>&1)
+               zenity --title="$title" --width=370 --height=400 --error --text=$'Git error:\n\n'"$git_error" 2>/dev/null
+               exit_install
        fi
 elif [[ "$TAG" ]]
 then
-       ret=$(git checkout "$TAG" 2>&1 >/dev/null)
-       if [[ $1 != 0 ]]
+       ret=$(git checkout "$TAG" >>$install_log 2>&1)
+       if [[ $? != 0 ]]
        then
-               zenity --title="$title" --width=370 --height=400 --error --text="Git error:\n\n $ret" 2>/dev/null
+       echo "error"
+               git_error=$(tail -n5 $install_log 2>&1)
+               zenity --title="$title" --width=370 --height=400 --error --text=$'Git error:\n\n'"$git_error" 2>/dev/null
+               exit_install
                exit
        fi
 fi
 
+echo "40" > $zen_pipe
+echo "#Creating configuration files..." > $zen_pipe
+
 if [[ $gtk_version == "GTK3"* ]]
 then
-       ./autogen.sh
+       ./autogen.sh >>$install_log 2>&1
 else
-       ./autogen.sh --disable-gtk3
+       ./autogen.sh --disable-gtk3 >>$install_log 2>&1
 fi
 
-make -j
-sudo make install
+echo "60" > $zen_pipe
+echo "#Compiling..." > $zen_pipe
+
+export CFLAGS=$CFLAGS" -Wno-deprecated-declarations"
+export CXXFLAGS=$CXXFLAGS" -Wno-deprecated-declarations"
+make -j >>$install_log 2>&1
+
+echo "90 " > $zen_pipe
+echo "#Installing Geeqie..." > $zen_pipe
+
+sudo --askpass make install >>$install_log 2>&1
+
+rm $install_pass_script
+mv -f $install_log install.log;
+
+echo "100 " > $zen_pipe
+rm $zen_pipe
+
+(for i in $(seq 0 4 100); do echo "$i"; sleep 0.1; done) | zenity --progress --title="$title" --width=370 --text="Geeqie installation complete...\n" --auto-close 2>/dev/null
 
 exit
index cc0e79a..6341038 100644 (file)
@@ -3,7 +3,7 @@
 <head>
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Frequently Asked Questions</title>
-<link rel="previous" href="GuideReferenceStandards.html" title="Standards">
+<link rel="previous" href="GuideReferencePCRE.html" title="Perl Compatible Regular Expressions">
 <link rel="next" href="Imageviewing.html" title="Image viewing">
 <link rel="top" href="GuideIndex.html" title="The Geeqie User Manual">
 <style type="text/css">
@@ -410,7 +410,7 @@ dd.answer div.label { float: left; }
 </head>
 <body>
 <div class="navbar navbar-top"><table class="navbar"><tr>
-<td class="navbar-prev"><a class="navbar-prev" href="GuideReferenceStandards.html" title="Standards">Standards</a></td>
+<td class="navbar-prev"><a class="navbar-prev" href="GuideReferencePCRE.html" title="Perl Compatible Regular Expressions">Perl Compatible Regular Expressions</a></td>
 <td class="navbar-next"><a class="navbar-next" href="Imageviewing.html" title="Image viewing">Image viewing</a></td>
 </tr></table></div>
 <div class="sidebar"><div class="sidenav"><div class="autotoc"><ul>
@@ -463,7 +463,7 @@ dd.answer div.label { float: left; }
 </ul></div>
 </div></div>
 <div class="navbar navbar-bottom"><table class="navbar"><tr>
-<td class="navbar-prev"><a class="navbar-prev" href="GuideReferenceStandards.html" title="Standards">Standards</a></td>
+<td class="navbar-prev"><a class="navbar-prev" href="GuideReferencePCRE.html" title="Perl Compatible Regular Expressions">Perl Compatible Regular Expressions</a></td>
 <td class="navbar-next"><a class="navbar-next" href="Imageviewing.html" title="Image viewing">Image viewing</a></td>
 </tr></table></div>
 </body>
diff --git a/web/help/GuideImageSearchCache.html b/web/help/GuideImageSearchCache.html
new file mode 100644 (file)
index 0000000..749618a
--- /dev/null
@@ -0,0 +1,477 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+<title>Caching Data For Searches</title>
+<link rel="previous" href="GuideImageSearchCache.html" title="Caching Data For Searches">
+<link rel="next" href="GuideImageSearchSearch.html" title="Search Window">
+<link rel="top" href="GuideIndex.html" title="The Geeqie User Manual">
+<style type="text/css">
+
+html { height: 100%; }
+body {
+  margin: 0px; padding: 12px;
+  background-color: #f9f9f6;
+  min-height: 100%;
+  direction: ltr;
+}
+div, p, pre, blockquote { margin: 0; padding: 0; }
+p img { vertical-align: middle; }
+sub { font-size: 0.83em; }
+sub sub { font-size: 1em; }
+sup { font-size: 0.83em; }
+sup sup { font-size: 1em; }
+table { border-collapse: collapse; }
+table.table-pgwide { width: 100%; }
+td { vertical-align: top; }
+td { padding: 0.2em 0.83em 0.2em 0.83em; }
+th { padding: 0 0.83em 0 0.83em; }
+tr.tr-shade {
+  background-color: #f9f9f6;
+}
+td.td-colsep { border-right: solid 1px; }
+td.td-rowsep { border-bottom: solid 1px; }
+thead { border-top: solid 2px; border-bottom: solid 2px; }
+tfoot { border-top: solid 2px; border-bottom: solid 2px; }
+div.body {
+  padding: 1em;
+  max-width: 60em;
+  background-color: #ffffff;
+  border: solid 1px #e0e0df;
+}
+div.body-sidebar {
+  margin-right: 13em;
+}
+div.division div.division { margin-top: 1.72em; }
+div.division div.division div.division { margin-top: 1.44em; }
+div.header {
+  margin: 0;
+  color: #3f3f3f;
+  border-bottom: solid 1px #e0e0df;
+}
+h1, h2, h3, h4, h5, h6, h7 {
+  margin: 0; padding: 0;
+  color: #3f3f3f;
+}
+h1.title { font-size: 1.72em; }
+h2.title { font-size: 1.44em; }
+h3.title { font-size: 1.2em; }
+h4.title, h5.title, h6.title, h7.title { font-size: 1em; }
+.block { margin-top: 1em; }
+.block .block-first { margin-top: 0; }
+.block-indent {
+  margin-left left: 1.72em;
+  margin-: 1em;
+}
+.block-indent .block-indent { margin-left: 0em; margin-right: 0em; }
+td .block-indent  { margin-left: 0em; margin-right: 0em; }
+dd .block-indent  { margin-left: 0em; margin-right: 0em; }
+.block-verbatim { white-space: pre; }
+div.title {
+  margin-bottom: 0.2em;
+  font-weight: bold;
+  color: #3f3f3f;
+}
+div.title-formal { padding-left: 0.2em; padding-right: 0.2em; }
+div.title-formal .label { font-weight: normal; }
+a {
+  color: #1f609f;
+  text-decoration: none;
+}
+a:hover { text-decoration: underline; }
+a:visited { color: #9f1f6f; }
+ul, ol, dl { margin: 0; padding: 0; }
+li {
+  margin-top: 1em;
+  margin-left: 2.4em;
+  padding: 0;
+}
+li.li-first { margin-top: 0; }
+dt { margin: 1em 0 0 0; }
+dt.dt-first { margin: 0; }
+dd {
+  margin-left: 1.72em;
+  margin-top: 0.5em;
+}
+dl.dl-compact dt { margin-top: 0; }
+dl.dl-compact dd { margin-top: 0; margin-bottom: 0; }
+
+
+ul.linktrail {
+  display: block;
+  margin: 0.2em 0 0 0;
+  text-align: right;
+}
+li.linktrail { display: inline; margin: 0; padding: 0; }
+
+li.linktrail::before {
+  content: '  /  ';
+  color: #3f3f3f;
+}
+
+li.linktrail-first::before, li.linktrail-only::before { content: ''; }
+
+
+div.navbar {
+  padding: 0.5em 1em 0.5em 1em;
+  max-width: 60em;
+  background-color: #ffffff;
+  border: solid 1px #e0e0df;
+}
+div.navbar-top { margin-bottom: 1em; }
+div.navbar-bottom { margin-top: 1em; clear: both; }
+div.navbar img { border: 0; vertical-align: -0.4em; }
+table.navbar { width: 100%; margin: 0; border: none; }
+table.navbar td { padding: 0; border: none; }
+td.navbar-next {
+  text-align: right;
+}
+a.navbar-prev::before {
+  
+  content: '◀  ';
+  color: #3f3f3f;
+}
+a.navbar-next::after {
+  
+  content: '  ▶';
+  color: #3f3f3f;
+}
+
+
+div.sidebar {
+  float: right;
+  padding: 0; margin: 0; width: 12em;
+}
+div.sidenav {
+  padding: 0.5em 1em 0 1em;
+  background-color: #ffffff;
+  border: solid 1px #e0e0df;
+}
+div.sidenav div.autotoc {
+  background-color: #ffffff;
+  border: none; padding: 0; margin: 0;
+}
+div.sidenav div.autotoc div.autotoc { margin-top: 0.5em; }
+div.sidenav div.autotoc li { margin-bottom: 0.5em; }
+div.sidenav div.autotoc div.autotoc div.autotoc {
+  margin-left: 1em;
+  margin-top: 0;
+}
+div.sidenav div.autotoc div.autotoc div.autotoc li { margin-bottom: 0; }
+
+
+div.autotoc {
+  
+  display: table;
+  margin-top: 1em;
+  margin-left: 1.72em;
+  padding: 0.5em 1em 0.5em 1em;
+  background-color: #f0f9ff;
+  border: solid 1px #c0c9ff;
+}
+div.autotoc ul { margin: 0; padding: 0; }
+div.autotoc li { list-style-type: none; margin: 0; }
+div.autotoc div.autotoc-title { margin-bottom: 0.5em; }
+div.autotoc div.autotoc { border: none; padding: 0; margin-top: 0; margin-bottom: 0.5em; }
+div.autotoc div.autotoc div.autotoc { margin-bottom: 0; }
+
+
+span.bibliolabel {
+  color: #3f3f3f;
+}
+
+
+div.admonition {
+  padding: 0.5em 6px 0.5em 6px;
+  border: solid 1px #e0e0df;
+  background-color: #fffff0;
+}
+div.caution-inner, div.important-inner, div.note-inner, div.tip-inner, div.warning-inner {
+  padding-left: 60px;
+  background-position: left top;
+  background-repeat: no-repeat;
+  min-height: 48px;
+}
+div.caution-inner { background-image: url("admon-caution.png"); }
+div.important-inner { background-image: url("admon-important.png"); }
+div.note-inner { background-image: url("admon-note.png"); }
+div.note-bug div.note-inner { background-image: url("admon-bug.png"); }
+div.tip-inner { background-image: url("admon-tip.png"); }
+div.warning-inner { background-image: url("admon-warning.png"); }
+div.blockquote {
+  
+  background-image: url('watermark-blockquote-201C.png');
+  background-repeat: no-repeat;
+  background-position: top left;
+  padding: 0.5em;
+  padding-left: 4em;
+}
+div.attribution {
+  margin-top: 0.5em;
+  color: #3f3f3f;
+}
+div.attribution::before {
+  
+  content: '― ';
+}
+div.epigraph {
+  text-align: right;
+  margin-left: 20%;
+  margin-right: 0;
+  color: #3f3f3f;
+}
+div.figure, div.informalfigure {
+  
+  display: table;
+  padding: 0.5em;
+  background-color: #f9f9f6;
+  border: solid 1px #e0e0df;
+}
+div.figure-inner, div.informalfigure-inner {
+  padding: 0.5em;
+  background-color: #ffffff;
+  border: solid 1px #e0e0df;
+}
+div.caption { margin-top: 0.5em; }
+div.programlisting {
+  padding: 0.5em;
+  
+  background-color: #f9f9f6;
+  border: solid 1px #e0e0df;
+}
+div.screen {
+  padding: 0.5em;
+  
+  background-color: #f9f9f6;
+  border: solid 1px #e0e0df;
+}
+div.screen .prompt {
+  color: #3f3f3f;
+}
+div.screen .userinput {
+  font-weight: bold;
+  color: #3f3f3f;
+}
+div.programlisting .userinput {
+  font-weight: bold;
+  color: #3f3f3f;
+}
+pre.linenumbering {
+  color: #3f3f3f;
+  margin: 0;
+  padding-right: 1em;
+  float: left;
+  text-align: right;
+}
+
+
+
+dl.index dt { margin-top: 0; }
+dl.index dd { margin-top: 0; margin-bottom: 0; }
+dl.indexdiv dt { margin-top: 0; }
+dl.indexdiv dd { margin-top: 0; margin-bottom: 0; }
+dl.setindex dt { margin-top: 0; }
+dl.setindex dd { margin-top: 0; margin-bottom: 0; }
+div.list div.title-formal span.title {
+  border-bottom: solid 1px #e0e0df;
+}
+div.simplelist {
+  margin-left: 1.72em;
+}
+div.simplelist table { margin-left: 0; border: none; }
+div.simplelist td {
+  padding: 0.5em;
+  border-left: solid 1px #e0e0df;
+}
+div.simplelist td.td-first {
+  padding-left: 0;
+  border-left: 0;
+}
+div.synopsis {
+  padding: 0.5em;
+  
+  background-color: #f9f9f6;
+  border-top: solid 2px #c0c9ff;
+  border-bottom: solid 2px #c0c9ff;
+}
+div.synopsis div.synopsis {
+  padding: 0;
+  border: none;
+}
+div.synopsis div.block { margin-top: 0.2em; }
+div.synopsis div.block-first { margin-top: 0; }
+div.cmdsynopsis { font-family: monospace; }
+
+span.accel { text-decoration: underline; }
+span.acronym { font-family: sans-serif; }
+span.application { font-style: italic; }
+span.classname, span.exceptionname, span.interfacename { font-family: monospace; }
+span.code {
+  font-family: monospace;
+  border: solid 1px #e0e0df;
+  padding-left: 0.2em;
+  padding-right: 0.2em;
+}
+pre span.code { border: none; padding: 0; }
+span.command {
+  font-family: monospace;
+  border: solid 1px #e0e0df;
+  padding-left: 0.2em;
+  padding-right: 0.2em;
+}
+pre span.command { border: none; padding: 0; }
+span.computeroutput { font-family: monospace; }
+
+span.constant { font-family: monospace; }
+span.database { font-family: monospace; }
+span.email { font-family: monospace; }
+span.emphasis { font-style: italic; }
+span.emphasis-bold { font-style: normal; font-weight: bold; }
+span.envar { font-family: monospace; }
+
+span.filename { font-family: monospace; }
+span.firstterm { font-style: italic; }
+span.foreignphrase { font-style: italic; }
+span.function { font-family: monospace; }
+
+dt.glossterm span.glossterm { font-style: normal; }
+
+
+span.glossterm { font-style: italic; }
+
+span.guibutton, span.guilabel, span.guimenu, span.guimenuitem, span.guisubmenu, span.interface {
+  font-weight: bold;
+  color: #3f3f3f;
+}
+span.keycap {
+  font-weight: bold;
+  color: #3f3f3f;
+}
+span.lineannotation { font-style: italic; }
+span.literal { font-family: monospace; }
+span.markup  { font-family: monospace; }
+span.medialabel { font-style: italic; }
+span.methodname { font-family: monospace; }
+span.ooclass, span.ooexception, span.oointerface { font-family: monospace; }
+span.option { font-family: monospace; }
+span.parameter { font-family: monospace; }
+span.paramdef span.parameter { font-style: italic; }
+span.prompt { font-family: monospace; }
+span.property { font-family: monospace; }
+span.replaceable  { font-style: italic; }
+span.returnvalue { font-family: monospace; }
+span.sgmltag { font-family: monospace; }
+span.structfield, span.structname { font-family: monospace; }
+span.symbol { font-family: monospace; }
+span.systemitem { font-family: monospace; }
+span.token { font-family: monospace; }
+span.type { font-family: monospace; }
+span.uri { font-family: monospace; }
+span.userinput { font-family: monospace; }
+span.varname { font-family: monospace; }
+span.wordasword { font-style: italic; }
+
+
+
+div.footnotes { font-style: italic; font-size: 0.8em; }
+div.footnote { margin-top: 1.44em; }
+span.footnote-number { display: inline; padding-right: 0.83em; }
+span.footnote-number + p { display: inline; }
+a.footnote { text-decoration: none; font-size: 0.8em; }
+a.footnote-ref { text-decoration: none; }
+
+span.co {
+  margin-left: 0.2em; margin-right: 0.2em;
+  padding-left: 0.4em; padding-right: 0.4em;
+  border: solid 1px #000000;
+  -moz-border-radius: 8px;
+  background-color: #000000;
+  color: #FFFFFF;
+  font-size: 8px;
+}
+span.co:hover {
+  border-color: #333333;
+  background-color: #333333;
+  color: #FFFFFF;
+}
+span.co a { text-decoration: none; }
+span.co a:hover { text-decoration: none; }
+
+dt.question { margin-left: 0em; }
+dt.question div.label { float: left; }
+dd + dt.question { margin-top: 1em; }
+dd.answer {
+  margin-top: 1em;
+  margin-left: 2em;
+  margin-right: 1em;
+}
+dd.answer div.label { float: left; }
+</style>
+</head>
+<body>
+<div class="navbar navbar-top"><table class="navbar"><tr>
+<td class="navbar-prev"><a class="navbar-prev" href="GuideImageSearchCache.html" title="Caching Data For Searches">Caching Data For Searches</a></td>
+<td class="navbar-next"><a class="navbar-next" href="GuideImageSearchSearch.html" title="Search Window">Search Window</a></td>
+</tr></table></div>
+<div class="sidebar"><div class="sidenav"><div class="autotoc"><ul>
+<li><a href="GuideIndex-info.html" title="About This Document">About This Document</a></li>
+<li>
+<a class="xref" href="GuideIndex.html" title="The Geeqie User Manual">The Geeqie User Manual</a><div class="autotoc"><ul>
+<li><a class="xref" href="GuideIntroduction.html" title="Introduction">Introduction</a></li>
+<li><a class="xref" href="GuideMainWindow.html" title="Main Window">Main Window</a></li>
+<li><a class="xref" href="GuideSidebars.html" title="Sidebars">Sidebars</a></li>
+<li><a class="xref" href="GuideOtherWindows.html" title="Stand-alone Windows">Stand-alone Windows</a></li>
+<li>
+<a class="xref" href="GuideImageSearch.html" title="Search and Select">Search and Select</a><div class="autotoc"><ul>
+<li>Caching Data For Searches</li>
+<li><a class="xref" href="GuideImageSearchSearch.html" title="Search Window">Search Window</a></li>
+<li><a class="xref" href="GuideImageSearchFindingDuplicates.html" title="Finding Duplicates">Finding Duplicates</a></li>
+<li><a class="xref" href="GuideImageMarks.html" title="Marking Images">Marking Images</a></li>
+</ul></div>
+</li>
+<li><a class="xref" href="GuideImageManagementPlugins.html" title="Plugins">Plugins</a></li>
+<li><a class="xref" href="GuideImageManagement.html" title="File Management">File Management</a></li>
+<li><a class="xref" href="GuideColorManagement.html" title="Color Management">Color Management</a></li>
+<li><a class="xref" href="GuideImagePresentation.html" title="Image Presentation">Image Presentation</a></li>
+<li><a class="xref" href="GuidePrinting.html" title="Printing">Printing</a></li>
+<li><a class="xref" href="GuideOptionsMain.html" title="Preferences">Preferences</a></li>
+<li><a class="xref" href="GuideOptionsAdditional.html" title="Additional Preferences">Additional Preferences</a></li>
+<li><a class="xref" href="GuideReference.html" title="Reference">Reference</a></li>
+<li><a class="xref" href="GuideFaq.html" title="Frequently Asked Questions">Frequently Asked Questions</a></li>
+<li><a class="xref" href="GuideLicence.html" title="Licence">Licence</a></li>
+<li><a class="xref" href="GuideCredits.html" title="Credits">Credits</a></li>
+<li><a class="xref" href="GuideGnuFdl.html" title="GNU Free Documentation License">GNU Free Documentation License</a></li>
+</ul></div>
+</li>
+</ul></div></div></div>
+<div class="body body-sidebar"><div class="division section">
+<a name="GuideImageSearchCache"></a><div class="header"><h1 class="section title"><span class="title"><a name="titleGuideImageSearchCache"></a>Caching Data For Searches</span></h1></div>
+<ul class="linktrail">
+<li class="linktrail linktrail-first"><a class="linktrail" href="GuideIndex.html" title="The Geeqie User Manual">The Geeqie User Manual</a></li>
+<li class="linktrail linktrail-last"><a class="linktrail" href="GuideImageSearch.html" title="Search and Select">Search and Select</a></li>
+</ul>
+<p class="para block block-first">
+      Searching large numbers of files for similarity can take significant cpu time. Part of this is the time to compute the similarity matrix for each file.
+      <p class="para block block-first"></p>
+      If the
+      <a class="link" href="GuideOptionsGeneral.html#PreferencesThumbnails" title="Thumbnails">Cache Thumbnails</a>
+      option is selected in Preferences/General, the similarity matrix and the checksum will also be cached. This will reduce the time needed for future searches.
+      <div class="admonition block note block-indent"><div class="note-inner">If you frequently search on similarity and your images are in a tree arrangement under a single point, initiating a one-time search on similarity from the top of the tree will generate the similarity data for all images.</div></div>
+      <p class="para block">Similarity data are stored in a folder hierachy that mirrors the location of the source images. The data have the same name as the original appended by the file extension .sim.</p>
+      <p class="para block">
+        The root of the hierachy is:
+        <p class="para block block-first">
+          <div dir="ltr" class=" block programlisting block-indent block-first"><pre class="programlisting">$XDG_CACHE_HOME/geeqie/thumbnails/</pre></div>
+          or, if $XDG_CACHE_HOME is not defined:
+          <div dir="ltr" class=" block programlisting block-indent"><pre class="programlisting">$HOME/.cache/geeqie/thumbnails/</pre></div>
+        </p>
+      </p>
+    </p>
+<p class="para block"></p>
+</div></div>
+<div class="navbar navbar-bottom"><table class="navbar"><tr>
+<td class="navbar-prev"><a class="navbar-prev" href="GuideImageSearchCache.html" title="Caching Data For Searches">Caching Data For Searches</a></td>
+<td class="navbar-next"><a class="navbar-next" href="GuideImageSearchSearch.html" title="Search Window">Search Window</a></td>
+</tr></table></div>
+</body>
+</html>
index 7cdadcc..5017c37 100644 (file)
@@ -531,7 +531,13 @@ dd.answer div.label { float: left; }
 <dt class="term dt-first">
           <span class="guilabel">File name</span>
         </dt>
-<dd>The search will match if the entered text appears within the file name, or if the text exactly matches the file name, depending on the method selected from the drop down menu. The text comparison can be made to be case sensitive by enabling the Match case checkbox.</dd>
+<dd>
+          The search will match if the entered text appears within the file name, or if the text exactly matches the file name, depending on the method selected from the drop down menu. The text comparison can be made to be case sensitive by enabling the Match case checkbox.
+          <p class="para block block-first"></p>
+          If "contains" is selected,
+          <a class="link" href="GuideReferencePCRE.html" title="Perl Compatible Regular Expressions">Perl Compatible Regular Expressions</a>
+          are used.
+        </dd>
 <dt class="term">
           <span class="guilabel">File size</span>
         </dt>
@@ -585,6 +591,14 @@ dd.answer div.label { float: left; }
           <span class="guilabel">Keywords</span>
         </dt>
 <dd>The search will match if the file's associated keywords match all, match any, or exclude the entered keywords, depending on the method selected from the drop down menu. Keywords can be separated with a space, comma, or tab character.</dd>
+<dt class="term">
+          <span class="guilabel">Comment</span>
+        </dt>
+<dd>
+          The search will match if the file's Comments field contains the entered pattern.
+          <a class="link" href="GuideReferencePCRE.html" title="Perl Compatible Regular Expressions">Perl Compatible Regular Expressions</a>
+          are used.
+        </dd>
 <dt class="term">
           <span class="guilabel">Geocoded position</span>
         </dt>
index b0e0230..a6ba724 100644 (file)
@@ -659,6 +659,9 @@ dd.answer div.label { float: left; }
 <li>
 <span class="label">13.13. </span><a class="xref" href="GuideReferenceStandards.html" title="Standards">Standards</a>
 </li>
+<li>
+<span class="label">13.14. </span><a class="xref" href="GuideReferencePCRE.html" title="Perl Compatible Regular Expressions">Perl Compatible Regular Expressions</a>
+</li>
 </ul></div>
 </li>
 <li>
index a2537db..860b583 100644 (file)
@@ -443,6 +443,7 @@ dd.answer div.label { float: left; }
 <li><a class="xref" href="GuideReferenceUTC.html" title="UTC and Daylight Saving Time (DST)">UTC and Daylight Saving Time (DST)</a></li>
 <li><a class="xref" href="GuideReferenceDecodeLatLong.html" title="Decoding Latitude and Longitude">Decoding Latitude and Longitude</a></li>
 <li><a class="xref" href="GuideReferenceStandards.html" title="Standards">Standards</a></li>
+<li><a class="xref" href="GuideReferencePCRE.html" title="Perl Compatible Regular Expressions">Perl Compatible Regular Expressions</a></li>
 </ul></div>
 </li>
 <li><a class="xref" href="GuideFaq.html" title="Frequently Asked Questions">Frequently Asked Questions</a></li>
@@ -496,6 +497,9 @@ dd.answer div.label { float: left; }
 <li>
 <span class="label">13.13. </span><a class="xref" href="GuideReferenceStandards.html" title="Standards">Standards</a>
 </li>
+<li>
+<span class="label">13.14. </span><a class="xref" href="GuideReferencePCRE.html" title="Perl Compatible Regular Expressions">Perl Compatible Regular Expressions</a>
+</li>
 </ul></div>
 </div></div>
 <div class="navbar navbar-bottom"><table class="navbar"><tr>
index c811ebe..145e444 100644 (file)
@@ -444,6 +444,7 @@ dd.answer div.label { float: left; }
 <li><a class="xref" href="GuideReferenceUTC.html" title="UTC and Daylight Saving Time (DST)">UTC and Daylight Saving Time (DST)</a></li>
 <li><a class="xref" href="GuideReferenceDecodeLatLong.html" title="Decoding Latitude and Longitude">Decoding Latitude and Longitude</a></li>
 <li><a class="xref" href="GuideReferenceStandards.html" title="Standards">Standards</a></li>
+<li><a class="xref" href="GuideReferencePCRE.html" title="Perl Compatible Regular Expressions">Perl Compatible Regular Expressions</a></li>
 </ul></div>
 </li>
 <li><a class="xref" href="GuideFaq.html" title="Frequently Asked Questions">Frequently Asked Questions</a></li>
index a4f3665..56d7887 100644 (file)
@@ -444,6 +444,7 @@ dd.answer div.label { float: left; }
 <li><a class="xref" href="GuideReferenceUTC.html" title="UTC and Daylight Saving Time (DST)">UTC and Daylight Saving Time (DST)</a></li>
 <li><a class="xref" href="GuideReferenceDecodeLatLong.html" title="Decoding Latitude and Longitude">Decoding Latitude and Longitude</a></li>
 <li><a class="xref" href="GuideReferenceStandards.html" title="Standards">Standards</a></li>
+<li><a class="xref" href="GuideReferencePCRE.html" title="Perl Compatible Regular Expressions">Perl Compatible Regular Expressions</a></li>
 </ul></div>
 </li>
 <li><a class="xref" href="GuideFaq.html" title="Frequently Asked Questions">Frequently Asked Questions</a></li>
index 4f6e13f..a750f61 100644 (file)
@@ -444,6 +444,7 @@ dd.answer div.label { float: left; }
 <li><a class="xref" href="GuideReferenceUTC.html" title="UTC and Daylight Saving Time (DST)">UTC and Daylight Saving Time (DST)</a></li>
 <li>Decoding Latitude and Longitude</li>
 <li><a class="xref" href="GuideReferenceStandards.html" title="Standards">Standards</a></li>
+<li><a class="xref" href="GuideReferencePCRE.html" title="Perl Compatible Regular Expressions">Perl Compatible Regular Expressions</a></li>
 </ul></div>
 </li>
 <li><a class="xref" href="GuideFaq.html" title="Frequently Asked Questions">Frequently Asked Questions</a></li>
index 4361dd9..d36f736 100644 (file)
@@ -444,6 +444,7 @@ dd.answer div.label { float: left; }
 <li><a class="xref" href="GuideReferenceUTC.html" title="UTC and Daylight Saving Time (DST)">UTC and Daylight Saving Time (DST)</a></li>
 <li><a class="xref" href="GuideReferenceDecodeLatLong.html" title="Decoding Latitude and Longitude">Decoding Latitude and Longitude</a></li>
 <li><a class="xref" href="GuideReferenceStandards.html" title="Standards">Standards</a></li>
+<li><a class="xref" href="GuideReferencePCRE.html" title="Perl Compatible Regular Expressions">Perl Compatible Regular Expressions</a></li>
 </ul></div>
 </li>
 <li><a class="xref" href="GuideFaq.html" title="Frequently Asked Questions">Frequently Asked Questions</a></li>
index 0f9267e..c8dacb8 100644 (file)
@@ -444,6 +444,7 @@ dd.answer div.label { float: left; }
 <li><a class="xref" href="GuideReferenceUTC.html" title="UTC and Daylight Saving Time (DST)">UTC and Daylight Saving Time (DST)</a></li>
 <li><a class="xref" href="GuideReferenceDecodeLatLong.html" title="Decoding Latitude and Longitude">Decoding Latitude and Longitude</a></li>
 <li><a class="xref" href="GuideReferenceStandards.html" title="Standards">Standards</a></li>
+<li><a class="xref" href="GuideReferencePCRE.html" title="Perl Compatible Regular Expressions">Perl Compatible Regular Expressions</a></li>
 </ul></div>
 </li>
 <li><a class="xref" href="GuideFaq.html" title="Frequently Asked Questions">Frequently Asked Questions</a></li>
index 91d5d25..b2bd6d0 100644 (file)
@@ -444,6 +444,7 @@ dd.answer div.label { float: left; }
 <li><a class="xref" href="GuideReferenceUTC.html" title="UTC and Daylight Saving Time (DST)">UTC and Daylight Saving Time (DST)</a></li>
 <li><a class="xref" href="GuideReferenceDecodeLatLong.html" title="Decoding Latitude and Longitude">Decoding Latitude and Longitude</a></li>
 <li><a class="xref" href="GuideReferenceStandards.html" title="Standards">Standards</a></li>
+<li><a class="xref" href="GuideReferencePCRE.html" title="Perl Compatible Regular Expressions">Perl Compatible Regular Expressions</a></li>
 </ul></div>
 </li>
 <li><a class="xref" href="GuideFaq.html" title="Frequently Asked Questions">Frequently Asked Questions</a></li>
index e1d01ba..c2ea3c3 100644 (file)
@@ -444,6 +444,7 @@ dd.answer div.label { float: left; }
 <li><a class="xref" href="GuideReferenceUTC.html" title="UTC and Daylight Saving Time (DST)">UTC and Daylight Saving Time (DST)</a></li>
 <li><a class="xref" href="GuideReferenceDecodeLatLong.html" title="Decoding Latitude and Longitude">Decoding Latitude and Longitude</a></li>
 <li><a class="xref" href="GuideReferenceStandards.html" title="Standards">Standards</a></li>
+<li><a class="xref" href="GuideReferencePCRE.html" title="Perl Compatible Regular Expressions">Perl Compatible Regular Expressions</a></li>
 </ul></div>
 </li>
 <li><a class="xref" href="GuideFaq.html" title="Frequently Asked Questions">Frequently Asked Questions</a></li>
diff --git a/web/help/GuideReferencePCRE.html b/web/help/GuideReferencePCRE.html
new file mode 100644 (file)
index 0000000..3158464
--- /dev/null
@@ -0,0 +1,479 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+<title>Perl Compatible Regular Expressions</title>
+<link rel="previous" href="GuideReferenceStandards.html" title="Standards">
+<link rel="next" href="GuideFaq.html" title="Frequently Asked Questions">
+<link rel="top" href="GuideIndex.html" title="The Geeqie User Manual">
+<style type="text/css">
+
+html { height: 100%; }
+body {
+  margin: 0px; padding: 12px;
+  background-color: #f9f9f6;
+  min-height: 100%;
+  direction: ltr;
+}
+div, p, pre, blockquote { margin: 0; padding: 0; }
+p img { vertical-align: middle; }
+sub { font-size: 0.83em; }
+sub sub { font-size: 1em; }
+sup { font-size: 0.83em; }
+sup sup { font-size: 1em; }
+table { border-collapse: collapse; }
+table.table-pgwide { width: 100%; }
+td { vertical-align: top; }
+td { padding: 0.2em 0.83em 0.2em 0.83em; }
+th { padding: 0 0.83em 0 0.83em; }
+tr.tr-shade {
+  background-color: #f9f9f6;
+}
+td.td-colsep { border-right: solid 1px; }
+td.td-rowsep { border-bottom: solid 1px; }
+thead { border-top: solid 2px; border-bottom: solid 2px; }
+tfoot { border-top: solid 2px; border-bottom: solid 2px; }
+div.body {
+  padding: 1em;
+  max-width: 60em;
+  background-color: #ffffff;
+  border: solid 1px #e0e0df;
+}
+div.body-sidebar {
+  margin-right: 13em;
+}
+div.division div.division { margin-top: 1.72em; }
+div.division div.division div.division { margin-top: 1.44em; }
+div.header {
+  margin: 0;
+  color: #3f3f3f;
+  border-bottom: solid 1px #e0e0df;
+}
+h1, h2, h3, h4, h5, h6, h7 {
+  margin: 0; padding: 0;
+  color: #3f3f3f;
+}
+h1.title { font-size: 1.72em; }
+h2.title { font-size: 1.44em; }
+h3.title { font-size: 1.2em; }
+h4.title, h5.title, h6.title, h7.title { font-size: 1em; }
+.block { margin-top: 1em; }
+.block .block-first { margin-top: 0; }
+.block-indent {
+  margin-left left: 1.72em;
+  margin-: 1em;
+}
+.block-indent .block-indent { margin-left: 0em; margin-right: 0em; }
+td .block-indent  { margin-left: 0em; margin-right: 0em; }
+dd .block-indent  { margin-left: 0em; margin-right: 0em; }
+.block-verbatim { white-space: pre; }
+div.title {
+  margin-bottom: 0.2em;
+  font-weight: bold;
+  color: #3f3f3f;
+}
+div.title-formal { padding-left: 0.2em; padding-right: 0.2em; }
+div.title-formal .label { font-weight: normal; }
+a {
+  color: #1f609f;
+  text-decoration: none;
+}
+a:hover { text-decoration: underline; }
+a:visited { color: #9f1f6f; }
+ul, ol, dl { margin: 0; padding: 0; }
+li {
+  margin-top: 1em;
+  margin-left: 2.4em;
+  padding: 0;
+}
+li.li-first { margin-top: 0; }
+dt { margin: 1em 0 0 0; }
+dt.dt-first { margin: 0; }
+dd {
+  margin-left: 1.72em;
+  margin-top: 0.5em;
+}
+dl.dl-compact dt { margin-top: 0; }
+dl.dl-compact dd { margin-top: 0; margin-bottom: 0; }
+
+
+ul.linktrail {
+  display: block;
+  margin: 0.2em 0 0 0;
+  text-align: right;
+}
+li.linktrail { display: inline; margin: 0; padding: 0; }
+
+li.linktrail::before {
+  content: '  /  ';
+  color: #3f3f3f;
+}
+
+li.linktrail-first::before, li.linktrail-only::before { content: ''; }
+
+
+div.navbar {
+  padding: 0.5em 1em 0.5em 1em;
+  max-width: 60em;
+  background-color: #ffffff;
+  border: solid 1px #e0e0df;
+}
+div.navbar-top { margin-bottom: 1em; }
+div.navbar-bottom { margin-top: 1em; clear: both; }
+div.navbar img { border: 0; vertical-align: -0.4em; }
+table.navbar { width: 100%; margin: 0; border: none; }
+table.navbar td { padding: 0; border: none; }
+td.navbar-next {
+  text-align: right;
+}
+a.navbar-prev::before {
+  
+  content: '◀  ';
+  color: #3f3f3f;
+}
+a.navbar-next::after {
+  
+  content: '  ▶';
+  color: #3f3f3f;
+}
+
+
+div.sidebar {
+  float: right;
+  padding: 0; margin: 0; width: 12em;
+}
+div.sidenav {
+  padding: 0.5em 1em 0 1em;
+  background-color: #ffffff;
+  border: solid 1px #e0e0df;
+}
+div.sidenav div.autotoc {
+  background-color: #ffffff;
+  border: none; padding: 0; margin: 0;
+}
+div.sidenav div.autotoc div.autotoc { margin-top: 0.5em; }
+div.sidenav div.autotoc li { margin-bottom: 0.5em; }
+div.sidenav div.autotoc div.autotoc div.autotoc {
+  margin-left: 1em;
+  margin-top: 0;
+}
+div.sidenav div.autotoc div.autotoc div.autotoc li { margin-bottom: 0; }
+
+
+div.autotoc {
+  
+  display: table;
+  margin-top: 1em;
+  margin-left: 1.72em;
+  padding: 0.5em 1em 0.5em 1em;
+  background-color: #f0f9ff;
+  border: solid 1px #c0c9ff;
+}
+div.autotoc ul { margin: 0; padding: 0; }
+div.autotoc li { list-style-type: none; margin: 0; }
+div.autotoc div.autotoc-title { margin-bottom: 0.5em; }
+div.autotoc div.autotoc { border: none; padding: 0; margin-top: 0; margin-bottom: 0.5em; }
+div.autotoc div.autotoc div.autotoc { margin-bottom: 0; }
+
+
+span.bibliolabel {
+  color: #3f3f3f;
+}
+
+
+div.admonition {
+  padding: 0.5em 6px 0.5em 6px;
+  border: solid 1px #e0e0df;
+  background-color: #fffff0;
+}
+div.caution-inner, div.important-inner, div.note-inner, div.tip-inner, div.warning-inner {
+  padding-left: 60px;
+  background-position: left top;
+  background-repeat: no-repeat;
+  min-height: 48px;
+}
+div.caution-inner { background-image: url("admon-caution.png"); }
+div.important-inner { background-image: url("admon-important.png"); }
+div.note-inner { background-image: url("admon-note.png"); }
+div.note-bug div.note-inner { background-image: url("admon-bug.png"); }
+div.tip-inner { background-image: url("admon-tip.png"); }
+div.warning-inner { background-image: url("admon-warning.png"); }
+div.blockquote {
+  
+  background-image: url('watermark-blockquote-201C.png');
+  background-repeat: no-repeat;
+  background-position: top left;
+  padding: 0.5em;
+  padding-left: 4em;
+}
+div.attribution {
+  margin-top: 0.5em;
+  color: #3f3f3f;
+}
+div.attribution::before {
+  
+  content: '― ';
+}
+div.epigraph {
+  text-align: right;
+  margin-left: 20%;
+  margin-right: 0;
+  color: #3f3f3f;
+}
+div.figure, div.informalfigure {
+  
+  display: table;
+  padding: 0.5em;
+  background-color: #f9f9f6;
+  border: solid 1px #e0e0df;
+}
+div.figure-inner, div.informalfigure-inner {
+  padding: 0.5em;
+  background-color: #ffffff;
+  border: solid 1px #e0e0df;
+}
+div.caption { margin-top: 0.5em; }
+div.programlisting {
+  padding: 0.5em;
+  
+  background-color: #f9f9f6;
+  border: solid 1px #e0e0df;
+}
+div.screen {
+  padding: 0.5em;
+  
+  background-color: #f9f9f6;
+  border: solid 1px #e0e0df;
+}
+div.screen .prompt {
+  color: #3f3f3f;
+}
+div.screen .userinput {
+  font-weight: bold;
+  color: #3f3f3f;
+}
+div.programlisting .userinput {
+  font-weight: bold;
+  color: #3f3f3f;
+}
+pre.linenumbering {
+  color: #3f3f3f;
+  margin: 0;
+  padding-right: 1em;
+  float: left;
+  text-align: right;
+}
+
+
+
+dl.index dt { margin-top: 0; }
+dl.index dd { margin-top: 0; margin-bottom: 0; }
+dl.indexdiv dt { margin-top: 0; }
+dl.indexdiv dd { margin-top: 0; margin-bottom: 0; }
+dl.setindex dt { margin-top: 0; }
+dl.setindex dd { margin-top: 0; margin-bottom: 0; }
+div.list div.title-formal span.title {
+  border-bottom: solid 1px #e0e0df;
+}
+div.simplelist {
+  margin-left: 1.72em;
+}
+div.simplelist table { margin-left: 0; border: none; }
+div.simplelist td {
+  padding: 0.5em;
+  border-left: solid 1px #e0e0df;
+}
+div.simplelist td.td-first {
+  padding-left: 0;
+  border-left: 0;
+}
+div.synopsis {
+  padding: 0.5em;
+  
+  background-color: #f9f9f6;
+  border-top: solid 2px #c0c9ff;
+  border-bottom: solid 2px #c0c9ff;
+}
+div.synopsis div.synopsis {
+  padding: 0;
+  border: none;
+}
+div.synopsis div.block { margin-top: 0.2em; }
+div.synopsis div.block-first { margin-top: 0; }
+div.cmdsynopsis { font-family: monospace; }
+
+span.accel { text-decoration: underline; }
+span.acronym { font-family: sans-serif; }
+span.application { font-style: italic; }
+span.classname, span.exceptionname, span.interfacename { font-family: monospace; }
+span.code {
+  font-family: monospace;
+  border: solid 1px #e0e0df;
+  padding-left: 0.2em;
+  padding-right: 0.2em;
+}
+pre span.code { border: none; padding: 0; }
+span.command {
+  font-family: monospace;
+  border: solid 1px #e0e0df;
+  padding-left: 0.2em;
+  padding-right: 0.2em;
+}
+pre span.command { border: none; padding: 0; }
+span.computeroutput { font-family: monospace; }
+
+span.constant { font-family: monospace; }
+span.database { font-family: monospace; }
+span.email { font-family: monospace; }
+span.emphasis { font-style: italic; }
+span.emphasis-bold { font-style: normal; font-weight: bold; }
+span.envar { font-family: monospace; }
+
+span.filename { font-family: monospace; }
+span.firstterm { font-style: italic; }
+span.foreignphrase { font-style: italic; }
+span.function { font-family: monospace; }
+
+dt.glossterm span.glossterm { font-style: normal; }
+
+
+span.glossterm { font-style: italic; }
+
+span.guibutton, span.guilabel, span.guimenu, span.guimenuitem, span.guisubmenu, span.interface {
+  font-weight: bold;
+  color: #3f3f3f;
+}
+span.keycap {
+  font-weight: bold;
+  color: #3f3f3f;
+}
+span.lineannotation { font-style: italic; }
+span.literal { font-family: monospace; }
+span.markup  { font-family: monospace; }
+span.medialabel { font-style: italic; }
+span.methodname { font-family: monospace; }
+span.ooclass, span.ooexception, span.oointerface { font-family: monospace; }
+span.option { font-family: monospace; }
+span.parameter { font-family: monospace; }
+span.paramdef span.parameter { font-style: italic; }
+span.prompt { font-family: monospace; }
+span.property { font-family: monospace; }
+span.replaceable  { font-style: italic; }
+span.returnvalue { font-family: monospace; }
+span.sgmltag { font-family: monospace; }
+span.structfield, span.structname { font-family: monospace; }
+span.symbol { font-family: monospace; }
+span.systemitem { font-family: monospace; }
+span.token { font-family: monospace; }
+span.type { font-family: monospace; }
+span.uri { font-family: monospace; }
+span.userinput { font-family: monospace; }
+span.varname { font-family: monospace; }
+span.wordasword { font-style: italic; }
+
+
+
+div.footnotes { font-style: italic; font-size: 0.8em; }
+div.footnote { margin-top: 1.44em; }
+span.footnote-number { display: inline; padding-right: 0.83em; }
+span.footnote-number + p { display: inline; }
+a.footnote { text-decoration: none; font-size: 0.8em; }
+a.footnote-ref { text-decoration: none; }
+
+span.co {
+  margin-left: 0.2em; margin-right: 0.2em;
+  padding-left: 0.4em; padding-right: 0.4em;
+  border: solid 1px #000000;
+  -moz-border-radius: 8px;
+  background-color: #000000;
+  color: #FFFFFF;
+  font-size: 8px;
+}
+span.co:hover {
+  border-color: #333333;
+  background-color: #333333;
+  color: #FFFFFF;
+}
+span.co a { text-decoration: none; }
+span.co a:hover { text-decoration: none; }
+
+dt.question { margin-left: 0em; }
+dt.question div.label { float: left; }
+dd + dt.question { margin-top: 1em; }
+dd.answer {
+  margin-top: 1em;
+  margin-left: 2em;
+  margin-right: 1em;
+}
+dd.answer div.label { float: left; }
+</style>
+</head>
+<body>
+<div class="navbar navbar-top"><table class="navbar"><tr>
+<td class="navbar-prev"><a class="navbar-prev" href="GuideReferenceStandards.html" title="Standards">Standards</a></td>
+<td class="navbar-next"><a class="navbar-next" href="GuideFaq.html" title="Frequently Asked Questions">Frequently Asked Questions</a></td>
+</tr></table></div>
+<div class="sidebar"><div class="sidenav"><div class="autotoc"><ul>
+<li><a href="GuideIndex-info.html" title="About This Document">About This Document</a></li>
+<li>
+<a class="xref" href="GuideIndex.html" title="The Geeqie User Manual">The Geeqie User Manual</a><div class="autotoc"><ul>
+<li><a class="xref" href="GuideIntroduction.html" title="Introduction">Introduction</a></li>
+<li><a class="xref" href="GuideMainWindow.html" title="Main Window">Main Window</a></li>
+<li><a class="xref" href="GuideSidebars.html" title="Sidebars">Sidebars</a></li>
+<li><a class="xref" href="GuideOtherWindows.html" title="Stand-alone Windows">Stand-alone Windows</a></li>
+<li><a class="xref" href="GuideImageSearch.html" title="Search and Select">Search and Select</a></li>
+<li><a class="xref" href="GuideImageManagementPlugins.html" title="Plugins">Plugins</a></li>
+<li><a class="xref" href="GuideImageManagement.html" title="File Management">File Management</a></li>
+<li><a class="xref" href="GuideColorManagement.html" title="Color Management">Color Management</a></li>
+<li><a class="xref" href="GuideImagePresentation.html" title="Image Presentation">Image Presentation</a></li>
+<li><a class="xref" href="GuidePrinting.html" title="Printing">Printing</a></li>
+<li><a class="xref" href="GuideOptionsMain.html" title="Preferences">Preferences</a></li>
+<li><a class="xref" href="GuideOptionsAdditional.html" title="Additional Preferences">Additional Preferences</a></li>
+<li>
+<a class="xref" href="GuideReference.html" title="Reference">Reference</a><div class="autotoc"><ul>
+<li><a class="xref" href="GuideReferenceCommandLine.html" title="Command Line Options">Command Line Options</a></li>
+<li><a class="xref" href="GuideReferenceKeyboardShortcuts.html" title="Keyboard and Mouse Shortcuts">Keyboard and Mouse Shortcuts</a></li>
+<li><a class="xref" href="GuideReferenceThumbnails.html" title="Thumbnails">Thumbnails</a></li>
+<li><a class="xref" href="GuideReferenceMetadata.html" title="Metadata Processing">Metadata Processing</a></li>
+<li><a class="xref" href="GuideReferenceLua.html" title="Lua Extensions">Lua Extensions</a></li>
+<li><a class="xref" href="GuideReferenceConfig.html" title="Configuration Files and Locations">Configuration Files and Locations</a></li>
+<li><a class="xref" href="GuideReferenceLIRC.html" title="Infra-red controller">Infra-red controller</a></li>
+<li><a class="xref" href="GuideReferenceXmpExif.html" title="XMP, Exif and IPTC">XMP, Exif and IPTC</a></li>
+<li><a class="xref" href="GuideReferenceSupportedFormats.html" title="Supported File Formats">Supported File Formats</a></li>
+<li><a class="xref" href="GuideReferencePixbufLoaders.html" title="Additional pixbuf loaders">Additional pixbuf loaders</a></li>
+<li><a class="xref" href="GuideReferenceUTC.html" title="UTC and Daylight Saving Time (DST)">UTC and Daylight Saving Time (DST)</a></li>
+<li><a class="xref" href="GuideReferenceDecodeLatLong.html" title="Decoding Latitude and Longitude">Decoding Latitude and Longitude</a></li>
+<li><a class="xref" href="GuideReferenceStandards.html" title="Standards">Standards</a></li>
+<li>Perl Compatible Regular Expressions</li>
+</ul></div>
+</li>
+<li><a class="xref" href="GuideFaq.html" title="Frequently Asked Questions">Frequently Asked Questions</a></li>
+<li><a class="xref" href="GuideLicence.html" title="Licence">Licence</a></li>
+<li><a class="xref" href="GuideCredits.html" title="Credits">Credits</a></li>
+<li><a class="xref" href="GuideGnuFdl.html" title="GNU Free Documentation License">GNU Free Documentation License</a></li>
+</ul></div>
+</li>
+</ul></div></div></div>
+<div class="body body-sidebar"><div class="division section">
+<a name="GuideReferencePCRE"></a><div class="header"><h1 class="section title"><span class="title"><a name="titleGuideReferencePCRE"></a>Perl Compatible Regular Expressions</span></h1></div>
+<ul class="linktrail">
+<li class="linktrail linktrail-first"><a class="linktrail" href="GuideIndex.html" title="The Geeqie User Manual">The Geeqie User Manual</a></li>
+<li class="linktrail linktrail-last"><a class="linktrail" href="GuideReference.html" title="Reference">Reference</a></li>
+</ul>
+<p class="para block block-first">
+    The Filename and Comment sections on the search window use
+    <a class="ulink" href="https://en.wikipedia.org/wiki/Perl_Compatible_Regular_Expressions" title="https://en.wikipedia.org/wiki/Perl_Compatible_Regular_Expressions">Perl Compatible Regular Expressions</a>
+    . In general use there are a number of differences to the wildcard expansion used on the command line:
+    <div class="block list itemizedlist"><ul class="itemizedlist">
+<li class="li-first">Use "." and not "?" for a single character.</li>
+<li>Use "abc.*ghk" and not "abc*ghk" for multiple characters</li>
+<li>Use "\." to represent the dot in a file extension</li>
+</ul></div>
+  </p>
+</div></div>
+<div class="navbar navbar-bottom"><table class="navbar"><tr>
+<td class="navbar-prev"><a class="navbar-prev" href="GuideReferenceStandards.html" title="Standards">Standards</a></td>
+<td class="navbar-next"><a class="navbar-next" href="GuideFaq.html" title="Frequently Asked Questions">Frequently Asked Questions</a></td>
+</tr></table></div>
+</body>
+</html>
index eaf24b1..a5b54a0 100644 (file)
@@ -444,6 +444,7 @@ dd.answer div.label { float: left; }
 <li><a class="xref" href="GuideReferenceUTC.html" title="UTC and Daylight Saving Time (DST)">UTC and Daylight Saving Time (DST)</a></li>
 <li><a class="xref" href="GuideReferenceDecodeLatLong.html" title="Decoding Latitude and Longitude">Decoding Latitude and Longitude</a></li>
 <li><a class="xref" href="GuideReferenceStandards.html" title="Standards">Standards</a></li>
+<li><a class="xref" href="GuideReferencePCRE.html" title="Perl Compatible Regular Expressions">Perl Compatible Regular Expressions</a></li>
 </ul></div>
 </li>
 <li><a class="xref" href="GuideFaq.html" title="Frequently Asked Questions">Frequently Asked Questions</a></li>
index 0911b71..0dc8d4d 100644 (file)
@@ -4,7 +4,7 @@
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Standards</title>
 <link rel="previous" href="GuideReferenceDecodeLatLong.html" title="Decoding Latitude and Longitude">
-<link rel="next" href="GuideFaq.html" title="Frequently Asked Questions">
+<link rel="next" href="GuideReferencePCRE.html" title="Perl Compatible Regular Expressions">
 <link rel="top" href="GuideIndex.html" title="The Geeqie User Manual">
 <style type="text/css">
 
@@ -411,7 +411,7 @@ dd.answer div.label { float: left; }
 <body>
 <div class="navbar navbar-top"><table class="navbar"><tr>
 <td class="navbar-prev"><a class="navbar-prev" href="GuideReferenceDecodeLatLong.html" title="Decoding Latitude and Longitude">Decoding Latitude and Longitude</a></td>
-<td class="navbar-next"><a class="navbar-next" href="GuideFaq.html" title="Frequently Asked Questions">Frequently Asked Questions</a></td>
+<td class="navbar-next"><a class="navbar-next" href="GuideReferencePCRE.html" title="Perl Compatible Regular Expressions">Perl Compatible Regular Expressions</a></td>
 </tr></table></div>
 <div class="sidebar"><div class="sidenav"><div class="autotoc"><ul>
 <li><a href="GuideIndex-info.html" title="About This Document">About This Document</a></li>
@@ -444,6 +444,7 @@ dd.answer div.label { float: left; }
 <li><a class="xref" href="GuideReferenceUTC.html" title="UTC and Daylight Saving Time (DST)">UTC and Daylight Saving Time (DST)</a></li>
 <li><a class="xref" href="GuideReferenceDecodeLatLong.html" title="Decoding Latitude and Longitude">Decoding Latitude and Longitude</a></li>
 <li>Standards</li>
+<li><a class="xref" href="GuideReferencePCRE.html" title="Perl Compatible Regular Expressions">Perl Compatible Regular Expressions</a></li>
 </ul></div>
 </li>
 <li><a class="xref" href="GuideFaq.html" title="Frequently Asked Questions">Frequently Asked Questions</a></li>
@@ -486,7 +487,7 @@ dd.answer div.label { float: left; }
 </div></div>
 <div class="navbar navbar-bottom"><table class="navbar"><tr>
 <td class="navbar-prev"><a class="navbar-prev" href="GuideReferenceDecodeLatLong.html" title="Decoding Latitude and Longitude">Decoding Latitude and Longitude</a></td>
-<td class="navbar-next"><a class="navbar-next" href="GuideFaq.html" title="Frequently Asked Questions">Frequently Asked Questions</a></td>
+<td class="navbar-next"><a class="navbar-next" href="GuideReferencePCRE.html" title="Perl Compatible Regular Expressions">Perl Compatible Regular Expressions</a></td>
 </tr></table></div>
 </body>
 </html>
index d4f8b83..b13f85e 100644 (file)
@@ -444,6 +444,7 @@ dd.answer div.label { float: left; }
 <li><a class="xref" href="GuideReferenceUTC.html" title="UTC and Daylight Saving Time (DST)">UTC and Daylight Saving Time (DST)</a></li>
 <li><a class="xref" href="GuideReferenceDecodeLatLong.html" title="Decoding Latitude and Longitude">Decoding Latitude and Longitude</a></li>
 <li><a class="xref" href="GuideReferenceStandards.html" title="Standards">Standards</a></li>
+<li><a class="xref" href="GuideReferencePCRE.html" title="Perl Compatible Regular Expressions">Perl Compatible Regular Expressions</a></li>
 </ul></div>
 </li>
 <li><a class="xref" href="GuideFaq.html" title="Frequently Asked Questions">Frequently Asked Questions</a></li>
index 31d6f0f..e2eea6a 100644 (file)
@@ -444,6 +444,7 @@ dd.answer div.label { float: left; }
 <li><a class="xref" href="GuideReferenceUTC.html" title="UTC and Daylight Saving Time (DST)">UTC and Daylight Saving Time (DST)</a></li>
 <li><a class="xref" href="GuideReferenceDecodeLatLong.html" title="Decoding Latitude and Longitude">Decoding Latitude and Longitude</a></li>
 <li><a class="xref" href="GuideReferenceStandards.html" title="Standards">Standards</a></li>
+<li><a class="xref" href="GuideReferencePCRE.html" title="Perl Compatible Regular Expressions">Perl Compatible Regular Expressions</a></li>
 </ul></div>
 </li>
 <li><a class="xref" href="GuideFaq.html" title="Frequently Asked Questions">Frequently Asked Questions</a></li>
index 82c7dc0..6592b78 100644 (file)
@@ -444,6 +444,7 @@ dd.answer div.label { float: left; }
 <li>UTC and Daylight Saving Time (DST)</li>
 <li><a class="xref" href="GuideReferenceDecodeLatLong.html" title="Decoding Latitude and Longitude">Decoding Latitude and Longitude</a></li>
 <li><a class="xref" href="GuideReferenceStandards.html" title="Standards">Standards</a></li>
+<li><a class="xref" href="GuideReferencePCRE.html" title="Perl Compatible Regular Expressions">Perl Compatible Regular Expressions</a></li>
 </ul></div>
 </li>
 <li><a class="xref" href="GuideFaq.html" title="Frequently Asked Questions">Frequently Asked Questions</a></li>
index f342103..cb94904 100644 (file)
@@ -444,6 +444,7 @@ dd.answer div.label { float: left; }
 <li><a class="xref" href="GuideReferenceUTC.html" title="UTC and Daylight Saving Time (DST)">UTC and Daylight Saving Time (DST)</a></li>
 <li><a class="xref" href="GuideReferenceDecodeLatLong.html" title="Decoding Latitude and Longitude">Decoding Latitude and Longitude</a></li>
 <li><a class="xref" href="GuideReferenceStandards.html" title="Standards">Standards</a></li>
+<li><a class="xref" href="GuideReferencePCRE.html" title="Perl Compatible Regular Expressions">Perl Compatible Regular Expressions</a></li>
 </ul></div>
 </li>
 <li><a class="xref" href="GuideFaq.html" title="Frequently Asked Questions">Frequently Asked Questions</a></li>