Fixed options for -weight and -list weight.
diff --git a/MagickCore/draw.c b/MagickCore/draw.c
index f767820..a102797 100644
--- a/MagickCore/draw.c
+++ b/MagickCore/draw.c
@@ -4884,15 +4884,6 @@
   option=GetImageOption(clone_info,"encoding");
   if (option != (const char *) NULL)
     (void) CloneString(&draw_info->encoding,option);
-  option=GetImageOption(clone_info,"kerning");
-  if (option != (const char *) NULL)
-    draw_info->kerning=StringToDouble(option,(char **) NULL);
-  option=GetImageOption(clone_info,"interline-spacing");
-  if (option != (const char *) NULL)
-    draw_info->interline_spacing=StringToDouble(option,(char **) NULL);
-  option=GetImageOption(clone_info,"interword-spacing");
-  if (option != (const char *) NULL)
-    draw_info->interword_spacing=StringToDouble(option,(char **) NULL);
   option=GetImageOption(clone_info,"direction");
   if (option != (const char *) NULL)
     draw_info->direction=(DirectionType) ParseCommandOption(
@@ -4903,6 +4894,23 @@
   if (option != (const char *) NULL)
     (void) QueryColorCompliance(option,AllCompliance,&draw_info->fill,
       exception);
+  option=GetImageOption(clone_info,"gravity");
+  if (option != (const char *) NULL)
+    draw_info->gravity=(GravityType) ParseCommandOption(MagickGravityOptions,
+      MagickFalse,option);
+  option=GetImageOption(clone_info,"interline-spacing");
+  if (option != (const char *) NULL)
+    draw_info->interline_spacing=StringToDouble(option,(char **) NULL);
+  option=GetImageOption(clone_info,"interword-spacing");
+  if (option != (const char *) NULL)
+    draw_info->interword_spacing=StringToDouble(option,(char **) NULL);
+  option=GetImageOption(clone_info,"kerning");
+  if (option != (const char *) NULL)
+    draw_info->kerning=StringToDouble(option,(char **) NULL);
+  option=GetImageOption(clone_info,"style");
+  if (option != (const char *) NULL)
+    draw_info->style=(StyleType) ParseCommandOption(MagickStyleOptions,
+      MagickFalse,option);
   option=GetImageOption(clone_info,"stroke");
   if (option != (const char *) NULL)
     (void) QueryColorCompliance(option,AllCompliance,&draw_info->stroke,
@@ -4914,10 +4922,17 @@
   if (option != (const char *) NULL)
     (void) QueryColorCompliance(option,AllCompliance,&draw_info->undercolor,
       exception);
-  option=GetImageOption(clone_info,"gravity");
+  option=GetImageOption(clone_info,"weight");
   if (option != (const char *) NULL)
-    draw_info->gravity=(GravityType) ParseCommandOption(MagickGravityOptions,
-      MagickFalse,option);
+    {
+      ssize_t
+        weight;
+
+      weight=ParseCommandOption(MagickWeightOptions,MagickFalse,option);
+      if (weight == -1)
+        weight=StringToUnsignedLong(option);
+      draw_info->weight=(size_t) weight;
+    }
   exception=DestroyExceptionInfo(exception);
   draw_info->signature=MagickCoreSignature;
   clone_info=DestroyImageInfo(clone_info);
diff --git a/MagickCore/option.c b/MagickCore/option.c
index 6815d76..bbf0eaf 100644
--- a/MagickCore/option.c
+++ b/MagickCore/option.c
@@ -1294,6 +1294,7 @@
     { "Font", MagickFontOptions, UndefinedOptionFlag, MagickFalse },
     { "Format", MagickFormatOptions, UndefinedOptionFlag, MagickFalse },
     { "Function", MagickFunctionOptions, UndefinedOptionFlag, MagickFalse },
+    { "Gradient", MagickGradientOptions, UndefinedOptionFlag, MagickFalse },
     { "Gravity", MagickGravityOptions, UndefinedOptionFlag, MagickFalse },
     { "Intensity", MagickPixelIntensityOptions, UndefinedOptionFlag, MagickFalse },
     { "Intent", MagickIntentOptions, UndefinedOptionFlag, MagickFalse },
@@ -1338,6 +1339,7 @@
     { "Undefined", MagickUndefinedOptions, UndefinedOptionFlag, MagickTrue },
     { "Validate", MagickValidateOptions, UndefinedOptionFlag, MagickFalse },
     { "VirtualPixel", MagickVirtualPixelOptions, UndefinedOptionFlag, MagickFalse },
+    { "Weight", MagickWeightOptions, UndefinedOptionFlag, MagickFalse },
     { (char *) NULL, MagickUndefinedOptions, UndefinedOptionFlag, MagickFalse }
   },
   LogEventOptions[] =
@@ -1746,6 +1748,20 @@
     { "VerticalTileEdge", VerticalTileEdgeVirtualPixelMethod, UndefinedOptionFlag, MagickFalse },
     { "White", WhiteVirtualPixelMethod, UndefinedOptionFlag, MagickFalse },
     { (char *) NULL, UndefinedVirtualPixelMethod, UndefinedOptionFlag, MagickFalse }
+  },
+  WeightOptions[] =
+  {
+    { "Undefined", 0L, UndefinedOptionFlag, MagickTrue },
+    { "Thin", 100L, UndefinedOptionFlag, MagickFalse },
+    { "ExtraLight", 200L, UndefinedOptionFlag, MagickFalse },
+    { "Light", 300L, DeprecateOptionFlag, MagickTrue },
+    { "Normal", 400L, UndefinedOptionFlag, MagickFalse },
+    { "Medium", 500L, UndefinedOptionFlag, MagickFalse },
+    { "DemiBold", 600L, UndefinedOptionFlag, MagickFalse },
+    { "Bold", 700L, UndefinedOptionFlag, MagickFalse },
+    { "ExtraBold", 800L, UndefinedOptionFlag, MagickFalse },
+    { "Heavy", 900L, UndefinedOptionFlag, MagickFalse },
+    { (char *) NULL, 0L, UndefinedOptionFlag, MagickFalse }
   };
 
 /*
@@ -2053,6 +2069,7 @@
     case MagickTypeOptions: return(TypeOptions);
     case MagickValidateOptions: return(ValidateOptions);
     case MagickVirtualPixelOptions: return(VirtualPixelOptions);
+    case MagickWeightOptions: return(WeightOptions);
     default: break;
   }
   return((const OptionInfo *) NULL);
diff --git a/MagickCore/option.h b/MagickCore/option.h
index 94bd35d..24d7df5 100644
--- a/MagickCore/option.h
+++ b/MagickCore/option.h
@@ -99,7 +99,8 @@
   MagickThresholdOptions,
   MagickTypeOptions,
   MagickValidateOptions,
-  MagickVirtualPixelOptions
+  MagickVirtualPixelOptions,
+  MagickWeightOptions
 } CommandOption;
 
 typedef enum
diff --git a/MagickWand/mogrify.c b/MagickWand/mogrify.c
index 8fe15fb..42f0b8a 100644
--- a/MagickWand/mogrify.c
+++ b/MagickWand/mogrify.c
@@ -3273,19 +3273,14 @@
           }
         if (LocaleCompare("weight",option+1) == 0)
           {
-            draw_info->weight=StringToUnsignedLong(argv[i+1]);
-            if (LocaleCompare(argv[i+1],"all") == 0)
-              draw_info->weight=0;
-            if (LocaleCompare(argv[i+1],"bold") == 0)
-              draw_info->weight=700;
-            if (LocaleCompare(argv[i+1],"bolder") == 0)
-              if (draw_info->weight <= 800)
-                draw_info->weight+=100;
-            if (LocaleCompare(argv[i+1],"lighter") == 0)
-              if (draw_info->weight >= 100)
-                draw_info->weight-=100;
-            if (LocaleCompare(argv[i+1],"normal") == 0)
-              draw_info->weight=400;
+            ssize_t
+              weight;
+
+            weight=ParseCommandOption(MagickWeightOptions,MagickFalse,
+              argv[i+1]);
+            if (weight == -1)
+              weight=StringToUnsignedLong(argv[i+1]);
+            draw_info->weight=(size_t) weight;
             break;
           }
         if (LocaleCompare("white-threshold",option+1) == 0)
@@ -7402,8 +7397,16 @@
         if (LocaleCompare("strokewidth",option+1) == 0)
           {
             if (*option == '+')
+              (void) SetImageOption(image_info,option+1,"0");
+            else
+              (void) SetImageOption(image_info,option+1,argv[i+1]);
+            break;
+          }
+        if (LocaleCompare("style",option+1) == 0)
+          {
+            if (*option == '+')
               {
-                (void) SetImageOption(image_info,option+1,"0");
+                (void) SetImageOption(image_info,option+1,"none");
                 break;
               }
             (void) SetImageOption(image_info,option+1,argv[i+1]);
@@ -7542,6 +7545,14 @@
       }
       case 'w':
       {
+        if (LocaleCompare("weight",option+1) == 0)
+          {
+            if (*option == '+')
+              (void) SetImageOption(image_info,option+1,"0");
+            else
+              (void) SetImageOption(image_info,option+1,argv[i+1]);
+            break;
+          }
         if (LocaleCompare("white-point",option+1) == 0)
           {
             if (*option == '+')
diff --git a/MagickWand/operation.c b/MagickWand/operation.c
index 3589f64..e187051 100644
--- a/MagickWand/operation.c
+++ b/MagickWand/operation.c
@@ -1562,23 +1562,13 @@
     {
       if (LocaleCompare("weight",option+1) == 0)
         {
-          /* Just what does using a font 'weight' do ???
-             There is no "-list weight" output (reference manual says there is)
-          */
-          arg1=ArgOption("all");
-          _draw_info->weight=StringToUnsignedLong(arg1);
-          if (LocaleCompare(arg1,"all") == 0)
-            _draw_info->weight=0;
-          if (LocaleCompare(arg1,"bold") == 0)
-            _draw_info->weight=700;
-          if (LocaleCompare(arg1,"bolder") == 0)
-            if (_draw_info->weight <= 800)
-              _draw_info->weight+=100;
-          if (LocaleCompare(arg1,"lighter") == 0)
-            if (_draw_info->weight >= 100)
-              _draw_info->weight-=100;
-          if (LocaleCompare(arg1,"normal") == 0)
-            _draw_info->weight=400;
+          ssize_t
+            weight;
+
+          weight=ParseCommandOption(MagickWeightOptions,MagickFalse,arg1);
+          if (weight == -1)
+            weight=StringToUnsignedLong(arg1);
+          _draw_info->weight=(size_t) weight;
           break;
         }
       if (LocaleCompare("white-point",option+1) == 0)