Bugs #13+14: charsets in configuration files
authorali <ali@juiblex.co.uk>
Mon Sep 30 08:18:42 2013 +0100 (2013-09-30)
changeset 1385e27fa988c5c
parent 137 b6358ed2548d
child 139 c130152c4a57
child 144 d7a97f077f9e
Bugs #13+14: charsets in configuration files
bookloupe/bookloupe.c
sample.ini
test/bookloupe/config-default.tst
test/bookloupe/config-internal.tst
test/bookloupe/config-override.tst
test/bookloupe/config-user.tst
     1.1 --- a/bookloupe/bookloupe.c	Mon Sep 30 07:37:36 2013 +0100
     1.2 +++ b/bookloupe/bookloupe.c	Mon Sep 30 08:18:42 2013 +0100
     1.3 @@ -317,6 +317,7 @@
     1.4  void config_file_update(GKeyFile *kf)
     1.5  {
     1.6      int i;
     1.7 +    const char *s;
     1.8      gboolean sw;
     1.9      for(i=0;options[i].long_name;i++)
    1.10      {
    1.11 @@ -329,6 +330,13 @@
    1.12  		sw=!sw;
    1.13  	    g_key_file_set_boolean(kf,"options",options[i].long_name,sw);
    1.14  	}
    1.15 +	else if (options[i].arg==G_OPTION_ARG_STRING)
    1.16 +	{
    1.17 +	    s=*(gchar **)options[i].arg_data;
    1.18 +	    if (!s)
    1.19 +		s="auto";
    1.20 +	    g_key_file_set_string(kf,"options",options[i].long_name,s);
    1.21 +	}
    1.22  	else
    1.23  	    g_assert_not_reached();
    1.24      }
    1.25 @@ -425,7 +433,7 @@
    1.26  void parse_config_file(void)
    1.27  {
    1.28      int i,j;
    1.29 -    gchar *path;
    1.30 +    gchar *path,*s;
    1.31      gchar **keys;
    1.32      gboolean sw;
    1.33      GError *err=NULL;
    1.34 @@ -454,9 +462,35 @@
    1.35  			      path,keys[i],err->message);
    1.36  			    g_clear_error(&err);
    1.37  			}
    1.38 -			if (options[j].flags&G_OPTION_FLAG_REVERSE)
    1.39 -			    sw=!sw;
    1.40 -			*(gboolean *)options[j].arg_data=sw;
    1.41 +			else
    1.42 +			{
    1.43 +			    if (options[j].flags&G_OPTION_FLAG_REVERSE)
    1.44 +				sw=!sw;
    1.45 +			    *(gboolean *)options[j].arg_data=sw;
    1.46 +			}
    1.47 +			break;
    1.48 +		    }
    1.49 +		    else if (options[j].arg==G_OPTION_ARG_STRING)
    1.50 +		    {
    1.51 +			s=g_key_file_get_string(config,"options",keys[i],
    1.52 +			  &err);
    1.53 +			if (err)
    1.54 +			{
    1.55 +			    g_printerr("Bookloupe: %s: options.%s: %s\n",
    1.56 +			      path,keys[i],err->message);
    1.57 +			    g_clear_error(&err);
    1.58 +			}
    1.59 +			else
    1.60 +			{
    1.61 +			    g_free(*(gchar **)options[j].arg_data);
    1.62 +			    if (!g_strcmp0(s,"auto"))
    1.63 +			    {
    1.64 +				*(gchar **)options[j].arg_data=NULL;
    1.65 +				g_free(s);
    1.66 +			    }
    1.67 +			    else
    1.68 +				*(gchar **)options[j].arg_data=s;
    1.69 +			}
    1.70  			break;
    1.71  		    }
    1.72  		    else
    1.73 @@ -530,13 +564,13 @@
    1.74  	g_printerr("%s\n",err->message);
    1.75  	exit(1);
    1.76      }
    1.77 -    g_free(opt_charset);
    1.78 -    opt_charset=NULL;
    1.79      if (pswit[DUMP_CONFIG_SWITCH])
    1.80      {
    1.81  	dump_config();
    1.82  	exit(0);
    1.83      }
    1.84 +    g_free(opt_charset);
    1.85 +    opt_charset=NULL;
    1.86      if (pswit[OVERVIEW_SWITCH])
    1.87  	/* just print summary; don't echo */
    1.88  	pswit[ECHO_SWITCH]=FALSE;
     2.1 --- a/sample.ini	Mon Sep 30 07:37:36 2013 +0100
     2.2 +++ b/sample.ini	Mon Sep 30 08:18:42 2013 +0100
     2.3 @@ -29,3 +29,5 @@
     2.4  web=false
     2.5  # Verbose - list everything
     2.6  verbose=false
     2.7 +# Set of characters valid for this ebook
     2.8 +charset=auto
     3.1 --- a/test/bookloupe/config-default.tst	Mon Sep 30 07:37:36 2013 +0100
     3.2 +++ b/test/bookloupe/config-default.tst	Mon Sep 30 08:18:42 2013 +0100
     3.3 @@ -30,6 +30,8 @@
     3.4  usertypo=false
     3.5  # Verbose - list everything
     3.6  verbose=false
     3.7 +# Set of characters valid for this ebook
     3.8 +charset=auto
     3.9  **************** EXPECTED(stdout) ****************
    3.10  # Default configuration for bookloupe
    3.11  
    3.12 @@ -60,3 +62,5 @@
    3.13  usertypo=false
    3.14  # Verbose - list everything
    3.15  verbose=false
    3.16 +# Set of characters valid for this ebook
    3.17 +charset=auto
     4.1 --- a/test/bookloupe/config-internal.tst	Mon Sep 30 07:37:36 2013 +0100
     4.2 +++ b/test/bookloupe/config-internal.tst	Mon Sep 30 08:18:42 2013 +0100
     4.3 @@ -30,3 +30,5 @@
     4.4  usertypo=false
     4.5  # Verbose - list everything
     4.6  verbose=false
     4.7 +# Set of characters valid for this ebook
     4.8 +charset=auto
     5.1 --- a/test/bookloupe/config-override.tst	Mon Sep 30 07:37:36 2013 +0100
     5.2 +++ b/test/bookloupe/config-override.tst	Mon Sep 30 08:18:42 2013 +0100
     5.3 @@ -1,5 +1,6 @@
     5.4  **************** OPTIONS ****************
     5.5  --usertypo
     5.6 +--charset=auto
     5.7  --dump-config
     5.8  **************** INPUT(bookloupe.ini) ****************
     5.9  # Relaxed configuration for bookloupe
    5.10 @@ -31,6 +32,8 @@
    5.11  usertypo=false
    5.12  # Verbose - list everything
    5.13  verbose=false
    5.14 +# Set of characters valid for this ebook
    5.15 +charset=UNICODE
    5.16  **************** EXPECTED(stdout) ****************
    5.17  # Relaxed configuration for bookloupe
    5.18  
    5.19 @@ -61,3 +64,5 @@
    5.20  usertypo=true
    5.21  # Verbose - list everything
    5.22  verbose=false
    5.23 +# Set of characters valid for this ebook
    5.24 +charset=auto
     6.1 --- a/test/bookloupe/config-user.tst	Mon Sep 30 07:37:36 2013 +0100
     6.2 +++ b/test/bookloupe/config-user.tst	Mon Sep 30 08:18:42 2013 +0100
     6.3 @@ -35,6 +35,8 @@
     6.4  usertypo=true
     6.5  # Verbose - list everything - Contrary by name...
     6.6  verbose=true
     6.7 +# Set of characters valid for this ebook - Let's stick with Latin1
     6.8 +charset=ISO-8859-1
     6.9  **************** EXPECTED(stdout) ****************
    6.10  # Mary Contrary's configuration for bookloupe
    6.11  
    6.12 @@ -70,3 +72,5 @@
    6.13  usertypo=true
    6.14  # Verbose - list everything - Contrary by name...
    6.15  verbose=true
    6.16 +# Set of characters valid for this ebook - Let's stick with Latin1
    6.17 +charset=ISO-8859-1