From 2107179aa09abda4eae43ebe88103bb2920c4cb1 Mon Sep 17 00:00:00 2001
From: Christophe Geuzaine <cgeuzaine@ulg.ac.be>
Date: Mon, 8 Feb 2010 15:51:22 +0000
Subject: [PATCH] bettre doc formatting (use Fl_Help_View)

---
 Fltk/pluginWindow.cpp          |  45 +++-
 Plugin/Annotate.cpp            |  25 +--
 Plugin/Curl.cpp                |  10 +-
 Plugin/CutGrid.cpp             |  28 +--
 Plugin/CutParametric.cpp       |  19 +-
 Plugin/CutPlane.cpp            |  17 +-
 Plugin/CutSphere.cpp           |  17 +-
 Plugin/Divergence.cpp          |  10 +-
 Plugin/Eigenvalues.cpp         |  10 +-
 Plugin/Eigenvectors.cpp        |  21 +-
 Plugin/ExtractElements.cpp     |  14 +-
 Plugin/GSHHS.cpp               |  92 ++++----
 Plugin/Gradient.cpp            |  10 +-
 Plugin/HarmonicToTime.cpp      |  20 +-
 Plugin/HomologyComputation.cpp |   7 +-
 Plugin/Integrate.cpp           |  14 +-
 Plugin/Isosurface.cpp          |  34 ++-
 Plugin/Lambda2.cpp             |  36 ++-
 Plugin/LongitudeLatitude.cpp   |  10 +-
 Plugin/MakeSimplex.cpp         |  13 +-
 Plugin/MathEval.cpp            |  56 ++---
 Plugin/ModifyComponent.cpp     |  86 +++----
 Plugin/ModulusPhase.cpp        |  16 +-
 Plugin/Particles.cpp           |  47 ++--
 Plugin/Probe.cpp               |  10 +-
 Plugin/Remove.cpp              |  10 +-
 Plugin/Skin.cpp                |  10 +-
 Plugin/Smooth.cpp              |  10 +-
 Plugin/SphericalRaise.cpp      |  32 ++-
 Plugin/StreamLines.cpp         |  54 ++---
 Plugin/Tetrahedralize.cpp      |  10 +-
 Plugin/Transform.cpp           |  20 +-
 Plugin/Triangulate.cpp         |  14 +-
 Plugin/Warp.cpp                |  25 +--
 doc/texinfo/opt_plugin.texi    | 399 ++++++++-------------------------
 35 files changed, 474 insertions(+), 777 deletions(-)

diff --git a/Fltk/pluginWindow.cpp b/Fltk/pluginWindow.cpp
index cfe954c560..2995ae4f88 100644
--- a/Fltk/pluginWindow.cpp
+++ b/Fltk/pluginWindow.cpp
@@ -12,6 +12,7 @@
 #include <FL/Fl_Box.H>
 #include <FL/Fl_Tabs.H>
 #include <FL/Fl_Scroll.H>
+#include <FL/Fl_Help_View.H>
 #include "FlGui.h"
 #include "drawContext.h"
 #include "pluginWindow.h"
@@ -215,6 +216,32 @@ static void plugin_create_new_view_cb(Fl_Widget *w, void *data)
   drawContext::global()->draw();
 }
 
+static void htmlize(std::string &in)
+{
+  while(1){
+    int pos = in.find("<");
+    if(pos == std::string::npos) break;
+    in.replace(pos, 1, "&lt;");
+  }
+  while(1){
+    int pos = in.find(">");
+    if(pos == std::string::npos) break;
+    in.replace(pos, 1, "&gt;");
+  }
+  while(1){
+    const char n2[3] = {'\n', '\n', '\0'};
+    int pos = in.find(n2);
+    if(pos == std::string::npos) break;
+    in.replace(pos, 2, "<p>");
+  }
+  while(1){
+    const char n1[2] = {'\n', '\0'};
+    int pos = in.find(n1);
+    if(pos == std::string::npos) break;
+    in.replace(pos, 1, "<br>");
+  }
+}
+
 void pluginWindow::_createDialogBox(GMSH_Plugin *p, int x, int y,
                                     int width, int height)
 {
@@ -279,17 +306,15 @@ void pluginWindow::_createDialogBox(GMSH_Plugin *p, int x, int y,
       Fl_Group *g = new Fl_Group
         (x, y + top + BH, width, height - top - BH, "Help");
 
-      Fl_Browser *o = new Fl_Browser
+      Fl_Help_View *o = new Fl_Help_View
         (x + WB, y + top + BH + WB, width - 2 * WB, height - top - 2 * BH - 3 * WB);
-      o->add(" ");
-      add_multiline_in_browser(o, "", p->getHelp().c_str(), false);
-      o->add(" ");
-      o->add(" ");
-      add_multiline_in_browser(o, "@i@.Author: ", p->getAuthor().c_str(), false);
-      add_multiline_in_browser(o, "@i@.Copyright (C) ", p->getCopyright().c_str(), 
-                               false);
-      o->add(" ");
-
+      std::string help = p->getHelp();
+      htmlize(help);
+      help += std::string("<p><em>Author: ") + p->getAuthor() + "</em>";
+      help += std::string("<br><em>Copyright: ") + p->getCopyright() + "</em>";
+      o->value(help.c_str());
+      o->textfont(FL_HELVETICA);
+      o->textsize(FL_NORMAL_SIZE);
       g->end();
     }
     o->end();
diff --git a/Plugin/Annotate.cpp b/Plugin/Annotate.cpp
index 91bf2cdbb2..a334a0ec30 100644
--- a/Plugin/Annotate.cpp
+++ b/Plugin/Annotate.cpp
@@ -177,20 +177,17 @@ std::string GMSH_AnnotatePlugin::callbackAlign(int num, int action, std::string
 
 std::string GMSH_AnnotatePlugin::getHelp() const
 {
-  return "Plugin(Annotate) adds the text string `Text',\n"
-    "in font `Font' and size `FontSize', in the view\n"
-    "`View'. The string is aligned according to `Align'.\n"
-    "\n"
-    "If `ThreeD' is equal to 1, the plugin inserts\n"
-    "the string in model coordinates at the position\n"
-    "(`X',`Y',`Z'). If `ThreeD' is equal to 0, the plugin\n"
-    "inserts the string in screen coordinates at\n"
-    "the position (`X',`Y').\n"
-    "\n"
-    "If `View' < 0, the plugin is run on the current view.\n"
-    "\n"
-    "Plugin(Annotate) is executed in-place for list-based\n"
-    "datasets or creates a new view for other datasets.\n";
+  return "Plugin(Annotate) adds the text string `Text', "
+    "in font `Font' and size `FontSize', in the view "
+    "`View'. The string is aligned according to `Align'.\n\n"
+    "If `ThreeD' is equal to 1, the plugin inserts "
+    "the string in model coordinates at the position "
+    "(`X',`Y',`Z'). If `ThreeD' is equal to 0, the plugin "
+    "inserts the string in screen coordinates at "
+    "the position (`X',`Y').\n\n"
+    "If `View' < 0, the plugin is run on the current view.\n\n"
+    "Plugin(Annotate) is executed in-place for list-based "
+    "datasets or creates a new view for other datasets.";
 }
 
 int GMSH_AnnotatePlugin::getNbOptions() const
diff --git a/Plugin/Curl.cpp b/Plugin/Curl.cpp
index ea24e78d1d..07fd28f7dc 100644
--- a/Plugin/Curl.cpp
+++ b/Plugin/Curl.cpp
@@ -21,12 +21,10 @@ extern "C"
 
 std::string GMSH_CurlPlugin::getHelp() const
 {
-  return "Plugin(Curl) computes the curl of the field\n"
-    "in the view `View'.\n"
-    "\n"
-    "If `View' < 0, the plugin is run on the current view.\n"
-    "\n"
-    "Plugin(Curl) creates one new view.\n";
+  return "Plugin(Curl) computes the curl of the field "
+    "in the view `View'.\n\n"
+    "If `View' < 0, the plugin is run on the current view.\n\n"
+    "Plugin(Curl) creates one new view.";
 }
 
 int GMSH_CurlPlugin::getNbOptions() const
diff --git a/Plugin/CutGrid.cpp b/Plugin/CutGrid.cpp
index 82b34726fe..8095ed2259 100644
--- a/Plugin/CutGrid.cpp
+++ b/Plugin/CutGrid.cpp
@@ -167,22 +167,18 @@ double GMSH_CutGridPlugin::callbackConnect(int num, int action, double value)
 
 std::string GMSH_CutGridPlugin::getHelp() const
 {
-  return "Plugin(CutGrid) cuts the view `View' with a\n"
-    "rectangular grid defined by the 3 points\n"
-    "(`X0',`Y0',`Z0') (origin), (`X1',`Y1',`Z1') (axis of U)\n"
-    "and (`X2',`Y2',`Z2') (axis of V).\n"
-    "\n"
-    "The number of points along U and V is set with the\n"
-    "options `NumPointsU' and `NumPointsV'.\n"
-    "\n"
-    "If `ConnectPoints' is zero, the plugin creates points;\n"
-    "otherwise, the plugin generates quadrangles, lines or\n"
-    "points depending on the values of `NumPointsU' and\n"
-    "`NumPointsV'.\n"
-    "\n"
-    "If `View' < 0, the plugin is run on the current view.\n"
-    "\n"
-    "Plugin(CutGrid) creates one new view.\n";
+  return "Plugin(CutGrid) cuts the view `View' with a "
+    "rectangular grid defined by the 3 points "
+    "(`X0',`Y0',`Z0') (origin), (`X1',`Y1',`Z1') (axis of U) "
+    "and (`X2',`Y2',`Z2') (axis of V).\n\n"
+    "The number of points along U and V is set with the "
+    "options `NumPointsU' and `NumPointsV'.\n\n"
+    "If `ConnectPoints' is zero, the plugin creates points; "
+    "otherwise, the plugin generates quadrangles, lines or "
+    "points depending on the values of `NumPointsU' and "
+    "`NumPointsV'.\n\n"
+    "If `View' < 0, the plugin is run on the current view.\n\n"
+    "Plugin(CutGrid) creates one new view.";
 }
 
 int GMSH_CutGridPlugin::getNbOptions() const
diff --git a/Plugin/CutParametric.cpp b/Plugin/CutParametric.cpp
index d262956206..9a578145ed 100644
--- a/Plugin/CutParametric.cpp
+++ b/Plugin/CutParametric.cpp
@@ -167,17 +167,14 @@ std::string GMSH_CutParametricPlugin::callbackZ(int num, int action, std::string
 
 std::string GMSH_CutParametricPlugin::getHelp() const
 {
-  return "Plugin(CutParametric) cuts the view `View' with\n"
-    "the parametric function (`X'(u), `Y'(u), `Z'(u)),\n"
-    "using `NumPointsU' values of the parameter u in\n"
-    "[`MinU', `MaxU'].\n"
-    "\n"
-    "If `ConnectPoints' is set, the plugin creates line\n"
-    "elements; otherwise, the plugin generates points.\n"
-    "\n"
-    "If `View' < 0, the plugin is run on the current view.\n"
-    "\n"
-    "Plugin(CutParametric) creates one new view.\n";
+  return "Plugin(CutParametric) cuts the view `View' with "
+    "the parametric function (`X'(u), `Y'(u), `Z'(u)), "
+    "using `NumPointsU' values of the parameter u in "
+    "[`MinU', `MaxU'].\n\n"
+    "If `ConnectPoints' is set, the plugin creates line "
+    "elements; otherwise, the plugin generates points.\n\n"
+    "If `View' < 0, the plugin is run on the current view.\n\n"
+    "Plugin(CutParametric) creates one new view.";
 }
 
 int GMSH_CutParametricPlugin::getNbOptions() const
diff --git a/Plugin/CutPlane.cpp b/Plugin/CutPlane.cpp
index f08d75360b..46b4bae10c 100644
--- a/Plugin/CutPlane.cpp
+++ b/Plugin/CutPlane.cpp
@@ -112,16 +112,13 @@ double GMSH_CutPlanePlugin::callbackTarget(int num, int action, double value)
 
 std::string GMSH_CutPlanePlugin::getHelp() const
 {
-  return "Plugin(CutPlane) cuts the view `View' with\n"
-    "the plane `A'*X + `B'*Y + `C'*Z + `D' = 0.\n"
-    "\n"
-    "If `ExtractVolume' is nonzero, the plugin extracts\n"
-    "the elements on one side of the plane (depending\n"
-    "on the sign of `ExtractVolume'). \n"
-    "\n"
-    "If `View' < 0, the plugin is run on the current view.\n"
-    "\n"
-    "Plugin(CutPlane) creates one new view.\n";
+  return "Plugin(CutPlane) cuts the view `View' with "
+    "the plane `A'*X + `B'*Y + `C'*Z + `D' = 0.\n\n"
+    "If `ExtractVolume' is nonzero, the plugin extracts "
+    "the elements on one side of the plane (depending "
+    "on the sign of `ExtractVolume').\n\n"
+    "If `View' < 0, the plugin is run on the current view.\n\n"
+    "Plugin(CutPlane) creates one new view.";
 }
 
 int GMSH_CutPlanePlugin::getNbOptions() const
diff --git a/Plugin/CutSphere.cpp b/Plugin/CutSphere.cpp
index 5ae4b6b966..f508d6a2c8 100644
--- a/Plugin/CutSphere.cpp
+++ b/Plugin/CutSphere.cpp
@@ -109,16 +109,13 @@ double GMSH_CutSpherePlugin::callbackTarget(int num, int action, double value)
 
 std::string GMSH_CutSpherePlugin::getHelp() const
 {
-  return "Plugin(CutSphere) cuts the view `View' with the\n"
-    "sphere (X-`Xc')^2 + (Y-`Yc')^2 + (Z-`Zc')^2 = `R'^2.\n"
-    "\n"
-    "If `ExtractVolume' is nonzero, the plugin extracts\n"
-    "the elements inside (if `ExtractVolume' < 0) or\n"
-    "outside (if `ExtractVolume' > 0) the sphere.\n"
-    "\n"
-    "If `View' < 0, the plugin is run on the current view.\n"
-    "\n"
-    "Plugin(CutSphere) creates one new view.\n";
+  return "Plugin(CutSphere) cuts the view `View' with the "
+    "sphere (X-`Xc')^2 + (Y-`Yc')^2 + (Z-`Zc')^2 = `R'^2.\n\n"
+    "If `ExtractVolume' is nonzero, the plugin extracts "
+    "the elements inside (if `ExtractVolume' < 0) or "
+    "outside (if `ExtractVolume' > 0) the sphere.\n\n"
+    "If `View' < 0, the plugin is run on the current view.\n\n"
+    "Plugin(CutSphere) creates one new view.";
 }
 
 int GMSH_CutSpherePlugin::getNbOptions() const
diff --git a/Plugin/Divergence.cpp b/Plugin/Divergence.cpp
index f122ba430c..3e25d5ff29 100644
--- a/Plugin/Divergence.cpp
+++ b/Plugin/Divergence.cpp
@@ -21,12 +21,10 @@ extern "C"
 
 std::string GMSH_DivergencePlugin::getHelp() const
 {
-  return "Plugin(Divergence) computes the divergence of the\n"
-    "field in the view `View'.\n"
-    "\n"
-    "If `View' < 0, the plugin is run on the current view.\n"
-    "\n"
-    "Plugin(Divergence) creates one new view.\n";
+  return "Plugin(Divergence) computes the divergence of the "
+    "field in the view `View'.\n\n"
+    "If `View' < 0, the plugin is run on the current view.\n\n"
+    "Plugin(Divergence) creates one new view.";
 }
 
 int GMSH_DivergencePlugin::getNbOptions() const
diff --git a/Plugin/Eigenvalues.cpp b/Plugin/Eigenvalues.cpp
index 820cdc355f..93c86bdd46 100644
--- a/Plugin/Eigenvalues.cpp
+++ b/Plugin/Eigenvalues.cpp
@@ -21,12 +21,10 @@ extern "C"
 
 std::string GMSH_EigenvaluesPlugin::getHelp() const
 {
-  return "Plugin(Eigenvalues) computes the three real\n"
-    "eigenvalues of each tensor in the view `View'.\n"
-    "\n"
-    "If `View' < 0, the plugin is run on the current view.\n"
-    "\n"
-    "Plugin(Eigenvalues) creates three new scalar views.\n";
+  return "Plugin(Eigenvalues) computes the three real "
+    "eigenvalues of each tensor in the view `View'.\n\n"
+    "If `View' < 0, the plugin is run on the current view.\n\n"
+    "Plugin(Eigenvalues) creates three new scalar views.";
 }
 
 int GMSH_EigenvaluesPlugin::getNbOptions() const
diff --git a/Plugin/Eigenvectors.cpp b/Plugin/Eigenvectors.cpp
index 61a0611932..233ee1cd8f 100644
--- a/Plugin/Eigenvectors.cpp
+++ b/Plugin/Eigenvectors.cpp
@@ -23,18 +23,15 @@ extern "C"
 
 std::string GMSH_EigenvectorsPlugin::getHelp() const
 {
-  return "Plugin(Eigenvectors) computes the three (right)\n"
-    "eigenvectors of each tensor in the view `View'\n"
-    "and sorts them according to the value of the\n"
-    "associated eigenvalues.\n"
-    "\n"
-    "If `ScaleByEigenvalues' is set, each eigenvector is\n"
-    "scaled by its associated eigenvalue. The plugin\n"
-    "gives an error if the eigenvectors are complex.\n"
-    "\n"
-    "If `View' < 0, the plugin is run on the current view.\n"
-    "\n"
-    "Plugin(Eigenvectors) creates three new vector view.\n";
+  return "Plugin(Eigenvectors) computes the three (right) "
+    "eigenvectors of each tensor in the view `View' "
+    "and sorts them according to the value of the "
+    "associated eigenvalues.\n\n"
+    "If `ScaleByEigenvalues' is set, each eigenvector is "
+    "scaled by its associated eigenvalue. The plugin "
+    "gives an error if the eigenvectors are complex.\n\n"
+    "If `View' < 0, the plugin is run on the current view.\n\n"
+    "Plugin(Eigenvectors) creates three new vector view.";
 }
 
 int GMSH_EigenvectorsPlugin::getNbOptions() const
diff --git a/Plugin/ExtractElements.cpp b/Plugin/ExtractElements.cpp
index 92f6b667db..03ee45b901 100644
--- a/Plugin/ExtractElements.cpp
+++ b/Plugin/ExtractElements.cpp
@@ -25,14 +25,12 @@ extern "C"
 
 std::string GMSH_ExtractElementsPlugin::getHelp() const
 {
-  return "Plugin(ExtractElements) extracts the elements\n"
-    "from the view `View' whose `TimeStep'-th values\n"
-    "(averaged by element) are comprised between\n"
-    "`MinVal' and `MaxVal'.\n"
-    "\n"
-    "If `View' < 0, the plugin is run on the current view.\n"
-    "\n"
-    "Plugin(ExtractElements) creates one new view.\n";
+  return "Plugin(ExtractElements) extracts the elements "
+    "from the view `View' whose `TimeStep'-th values "
+    "(averaged by element) are comprised between "
+    "`MinVal' and `MaxVal'.\n\n"
+    "If `View' < 0, the plugin is run on the current view.\n\n"
+    "Plugin(ExtractElements) creates one new view.";
 }
 
 int GMSH_ExtractElementsPlugin::getNbOptions() const
diff --git a/Plugin/GSHHS.cpp b/Plugin/GSHHS.cpp
index 6aee543602..7a3dd44395 100644
--- a/Plugin/GSHHS.cpp
+++ b/Plugin/GSHHS.cpp
@@ -59,7 +59,7 @@ public:
       point[2] = 0;
       ipoint++;
       if(fscanf(fp, "%le %le", &point[0], &point[1]) != 2) 
-        Msg::Error("gshhs:  Error reading loops2 file.\n");
+        Msg::Error("gshhs:  Error reading loops2 file.");
       return true;
     }
   };
@@ -184,7 +184,7 @@ public:
       if(ip >= h.n)
         return false;
       if (fread ((void *)&p, (size_t)sizeof(POINT), (size_t)1, fp) != 1) {
-        printf ("gshhs:  Error reading gshhs file.\n");
+        Msg::Error("gshhs:  Error reading gshhs file.");
         exit(1);
       }
       if (flip) {
@@ -918,56 +918,44 @@ extern "C"
 std::string GMSH_GSHHSPlugin::getHelp() const
 {
   return 
-    "Plugin(GSHHS) read different kind of contour lines data\n"
-    "and write a .geo file on the surface of a sphere (the Earth).\n"
-    "\n"
-    "The principal application is to load GSHHS data\n (see\n"
-    "http://www.soest.hawaii.edu/wessel/gshhs/gshhs.html).\n"
-    "\n"
-    "Valid values for \"Format\" are:\n"
-    "\n"
-    "- \"gshhs\": open GSHHS file\n"
-    "\n"
-    "- \"loops2\": import 2D contour lines in simple text format:\n"
-    "   NB_POINTS_IN_FIRST_LOOP FIRST_LOOP_IS_CLOSED\n"
-    "   COORD1 COORD2\n"
-    "   COORD1 COORD2\n"
-    "   ...    ...\n"
-    "   NB_POINTS_IN_SECOND_LOOP SECOND_LOOP_IS_CLOSED\n"
-    "   ...\n"
-    "(LOOP_IS_CLOSED specify if this coast line describe a closed\n"
-    "curve (0=no, 1=yes). In the case of \"loops2\" format, you\n"
-    "can specify the the coordinate system used in the input file\n"
-    "with the \"Coordinate\" option, valid values are\n"
-    "\n"
-    "- \"lonlat\" for longitude-latidute radian,\n"
-    "\n"
-    "- \"lonlat_degrees\" for longitude-latitude degrees,\n"
-    "\n"
-    "- \"UTM\" for universal transverse mercartor (\"UTMZone\"\n"
-    "option should be specified)\n"
-    "\n"
-    "- \"cartesian\" for full 3D coordinates\n"
-    "\n"
-    "- \"radius\" specify the earth radius.\n"
-    "\n"
-    "If the \"iField\" option is set, consecutive points closer\n"
-    "than the value of the field iField (in meters) will not be\n"
-    "added.\n"
-    "\n"
-    "If \"MinStraitsFactor\" > 0 and if a field iField is\n"
-    "provided, coastlines closer than MinStraitsFactor *\n"
-    "field(IField) are merged and inner corners which form an\n"
-    "angle < pi/3 are removed.\n"
-    "\n"
-    "The output is always in stereographic coordinates, if\n"
-    "the \"WritePolarSphere\" option is not 0, a sphere is\n"
-    "added to the geo file.\n"
-    "\n"
-    "WARNING: this plugin is still experimental and needs\n"
-    "polishing and error-handling. In particular, it will\n"
-    "probably crash if an inexistant field id is given or if\n"
-    "the input/output cannot be open.\n";
+    "Plugin(GSHHS) read different kind of contour lines data "
+    "and write a .geo file on the surface of a sphere (the Earth).\n\n"
+    "The principal application is to load GSHHS data\n (see "
+    "http://www.soest.hawaii.edu/wessel/gshhs/gshhs.html).\n\n"
+    "Valid values for \"Format\" are:\n\n"
+    "- \"gshhs\": open GSHHS file\n\n"
+    "- \"loops2\": import 2D contour lines in simple text format:\n\n"
+    "NB_POINTS_IN_FIRST_LOOP FIRST_LOOP_IS_CLOSED\n"
+    "COORD1 COORD2\n"
+    "COORD1 COORD2\n"
+    "...    ...\n"
+    "NB_POINTS_IN_SECOND_LOOP SECOND_LOOP_IS_CLOSED\n"
+    "...\n\n"
+    "(LOOP_IS_CLOSED specifies if this coast line describes a closed "
+    "curve (0=no, 1=yes)).\n\n"
+    "In the case of \"loops2\" format, you "
+    "can specify the coordinate system used in the input file "
+    "with the \"Coordinate\" option. Valid values are\n\n"
+    "- \"lonlat\" for longitude-latidute radian,\n\n"
+    "- \"lonlat_degrees\" for longitude-latitude degrees,\n\n"
+    "- \"UTM\" for universal transverse mercartor (\"UTMZone\" "
+    "option should be specified)\n\n"
+    "- \"cartesian\" for full 3D coordinates\n\n"
+    "- \"radius\" specify the earth radius.\n\n"
+    "If the \"iField\" option is set, consecutive points closer "
+    "than the value of the field iField (in meters) will not be "
+    "added.\n\n"
+    "If \"MinStraitsFactor\" > 0 and if a field iField is "
+    "provided, coastlines closer than MinStraitsFactor * "
+    "field(IField) are merged and inner corners which form an "
+    "angle < pi/3 are removed.\n\n"
+    "The output is always in stereographic coordinates, if "
+    "the \"WritePolarSphere\" option is not 0, a sphere is "
+    "added to the geo file.\n\n"
+    "WARNING: this plugin is still experimental and needs "
+    "polishing and error-handling. In particular, it will "
+    "probably crash if an inexistant field id is given or if "
+    "the input/output cannot be open.";
 }
 
 int GMSH_GSHHSPlugin::getNbOptions() const
diff --git a/Plugin/Gradient.cpp b/Plugin/Gradient.cpp
index 982e2f5b5d..8a81248f8d 100644
--- a/Plugin/Gradient.cpp
+++ b/Plugin/Gradient.cpp
@@ -21,12 +21,10 @@ extern "C"
 
 std::string GMSH_GradientPlugin::getHelp() const
 {
-  return "Plugin(Gradient) computes the gradient of the\n"
-    "field in the view `View'.\n"
-    "\n"
-    "If `View' < 0, the plugin is run on the current view.\n"
-    "\n"
-    "Plugin(Gradient) creates one new view.\n";
+  return "Plugin(Gradient) computes the gradient of the "
+    "field in the view `View'.\n\n"
+    "If `View' < 0, the plugin is run on the current view.\n\n"
+    "Plugin(Gradient) creates one new view.";
 }
 
 int GMSH_GradientPlugin::getNbOptions() const
diff --git a/Plugin/HarmonicToTime.cpp b/Plugin/HarmonicToTime.cpp
index 26c00a1714..898bd81ec5 100644
--- a/Plugin/HarmonicToTime.cpp
+++ b/Plugin/HarmonicToTime.cpp
@@ -23,18 +23,14 @@ extern "C"
 
 std::string GMSH_HarmonicToTimePlugin::getHelp() const
 {
-  return "Plugin(HarmonicToTime) takes the values in the\n"
-    "time steps `RealPart' and `ImaginaryPart' of\n"
-    "the view `View', and creates a new view\n"
-    "containing\n"
-    "\n"
-    "`View'[`RealPart'] * cos(p) - `View'[`ImaginaryPart'] * sin(p)\n"
-    "\n"
-    "with p = 2*Pi*k/`NumSteps', k = 0, ..., `NumSteps'-1.\n"
-    "\n"
-    "If `View' < 0, the plugin is run on the current view.\n"
-    "\n"
-    "Plugin(HarmonicToTime) creates one new view.\n";
+  return "Plugin(HarmonicToTime) takes the values in the "
+    "time steps `RealPart' and `ImaginaryPart' of "
+    "the view `View', and creates a new view "
+    "containing\n\n"
+    "`View'[`RealPart'] * cos(p) - `View'[`ImaginaryPart'] * sin(p)\n\n"
+    "with p = 2*Pi*k/`NumSteps', k = 0, ..., `NumSteps'-1.\n\n"
+    "If `View' < 0, the plugin is run on the current view.\n\n"
+    "Plugin(HarmonicToTime) creates one new view.";
 }
 
 int GMSH_HarmonicToTimePlugin::getNbOptions() const
diff --git a/Plugin/HomologyComputation.cpp b/Plugin/HomologyComputation.cpp
index 5f8df11d08..ae2e47583c 100644
--- a/Plugin/HomologyComputation.cpp
+++ b/Plugin/HomologyComputation.cpp
@@ -39,10 +39,9 @@ extern "C"
 
 std::string GMSH_HomologyComputationPlugin::getHelp() const
 {
-  return "Plugin(Homology) computes generators for\n"
-    "(relative) homology groups and their thick cuts.\n"
-    "\n"
-    "Plugin(Homology) creates new views.\n";
+  return "Plugin(Homology) computes generators for "
+    "(relative) homology groups and their thick cuts.\n\n"
+    "Plugin(Homology) creates new views.";
 }
 
 int GMSH_HomologyComputationPlugin::getNbOptions() const
diff --git a/Plugin/Integrate.cpp b/Plugin/Integrate.cpp
index 4ed7d5559a..f2eb2d8cd5 100644
--- a/Plugin/Integrate.cpp
+++ b/Plugin/Integrate.cpp
@@ -21,14 +21,12 @@ extern "C"
 
 std::string GMSH_IntegratePlugin::getHelp() const
 {
-  return "Plugin(Integrate) integrates scalar fields over\n"
-    "all the elements in the view `View', as well\n"
-    "as the circulation/flux of vector fields over\n"
-    "line/surface elements.\n"
-    "\n"
-    "If `View' < 0, the plugin is run on the current view.\n"
-    "\n"
-    "Plugin(Integrate) creates one new view.\n";
+  return "Plugin(Integrate) integrates scalar fields over "
+    "all the elements in the view `View', as well "
+    "as the circulation/flux of vector fields over "
+    "line/surface elements.\n\n"
+    "If `View' < 0, the plugin is run on the current view.\n\n"
+    "Plugin(Integrate) creates one new view.";
 }
 
 int GMSH_IntegratePlugin::getNbOptions() const
diff --git a/Plugin/Isosurface.cpp b/Plugin/Isosurface.cpp
index d08a1cdb03..82c3cc6b51 100644
--- a/Plugin/Isosurface.cpp
+++ b/Plugin/Isosurface.cpp
@@ -79,25 +79,21 @@ double GMSH_IsosurfacePlugin::callbackTarget(int num, int action, double value)
 
 std::string GMSH_IsosurfacePlugin::getHelp() const
 {
-  return "Plugin(Isosurface) extracts the isosurface of value\n"
-    "`Value' from the view `View', and draws the\n"
-    "`OtherTimeStep'-th step of the view `OtherView' on\n"
-    "this isosurface.\n"
-    "\n"
-    "If `ExtractVolume' is nonzero, the plugin extracts the\n" 
-    "isovolume with values greater (if `ExtractVolume' > 0)\n"
-    "or smaller (if `ExtractVolume' < 0) than the isosurface\n"
-    "`Value'.\n"
-    "\n"
-    "If `OtherTimeStep' < 0, the plugin uses, for each time\n"
-    "step in `View', the corresponding time step in `OtherView'.\n"
-    "If `OtherView' < 0, the plugin uses `View' as the value\n"
-    "source.\n"
-    "\n"
-    "If `View' < 0, the plugin is run on the current view.\n"
-    "\n"
-    "Plugin(Isosurface) creates as many views as there are\n"
-    "time steps in `View'.\n";
+  return "Plugin(Isosurface) extracts the isosurface of value "
+    "`Value' from the view `View', and draws the "
+    "`OtherTimeStep'-th step of the view `OtherView' on "
+    "this isosurface.\n\n"
+    "If `ExtractVolume' is nonzero, the plugin extracts the " 
+    "isovolume with values greater (if `ExtractVolume' > 0) "
+    "or smaller (if `ExtractVolume' < 0) than the isosurface "
+    "`Value'.\n\n"
+    "If `OtherTimeStep' < 0, the plugin uses, for each time "
+    "step in `View', the corresponding time step in `OtherView'. "
+    "If `OtherView' < 0, the plugin uses `View' as the value "
+    "source.\n\n"
+    "If `View' < 0, the plugin is run on the current view.\n\n"
+    "Plugin(Isosurface) creates as many views as there are "
+    "time steps in `View'.";
 }
 
 int GMSH_IsosurfacePlugin::getNbOptions() const
diff --git a/Plugin/Lambda2.cpp b/Plugin/Lambda2.cpp
index 474b88443f..26f9e5d6c2 100644
--- a/Plugin/Lambda2.cpp
+++ b/Plugin/Lambda2.cpp
@@ -21,26 +21,22 @@ extern "C"
 
 std::string GMSH_Lambda2Plugin::getHelp() const
 {
-  return "Plugin(Lambda2) computes the eigenvalues\n"
-    "Lambda(1,2,3) of the tensor (S_ik S_kj +\n"
-    "Om_ik Om_kj), where S_ij = 0.5 (ui,j + uj,i)\n"
-    "and Om_ij = 0.5 (ui,j - uj,i) are respectively\n"
-    "the symmetric and antisymmetric parts of the\n"
-    "velocity gradient tensor.\n"
-    "\n"
-    "Vortices are well represented by regions where\n"
-    "Lambda(2) is negative.\n"
-    "\n"
-    "If `View' contains tensor elements, the plugin\n"
-    "directly uses the tensors as the values of the\n"
-    "velocity gradient tensor; if `View' contains\n"
-    "vector elements, the plugin uses them as the\n"
-    "velocities from which to derive the velocity\n"
-    "gradient tensor.\n"
-    "\n"
-    "If `View' < 0, the plugin is run on the current view.\n"
-    "\n"
-    "Plugin(Lambda2) creates one new view.\n";
+  return "Plugin(Lambda2) computes the eigenvalues "
+    "Lambda(1,2,3) of the tensor (S_ik S_kj + "
+    "Om_ik Om_kj), where S_ij = 0.5 (ui,j + uj,i) "
+    "and Om_ij = 0.5 (ui,j - uj,i) are respectively "
+    "the symmetric and antisymmetric parts of the "
+    "velocity gradient tensor.\n\n"
+    "Vortices are well represented by regions where "
+    "Lambda(2) is negative.\n\n"
+    "If `View' contains tensor elements, the plugin "
+    "directly uses the tensors as the values of the "
+    "velocity gradient tensor; if `View' contains "
+    "vector elements, the plugin uses them as the "
+    "velocities from which to derive the velocity "
+    "gradient tensor.\n\n"
+    "If `View' < 0, the plugin is run on the current view.\n\n"
+    "Plugin(Lambda2) creates one new view.";
 }
 
 int GMSH_Lambda2Plugin::getNbOptions() const
diff --git a/Plugin/LongitudeLatitude.cpp b/Plugin/LongitudeLatitude.cpp
index f0e4efb99b..d1cec43b51 100644
--- a/Plugin/LongitudeLatitude.cpp
+++ b/Plugin/LongitudeLatitude.cpp
@@ -20,12 +20,10 @@ extern "C"
 
 std::string GMSH_LongituteLatitudePlugin::getHelp() const
 {
-  return "Plugin(LongituteLatitude) projects the view `View'\n"
-    "in longitude-latitude.\n"
-    "\n"
-    "If `View' < 0, the plugin is run on the current view.\n"
-    "\n"
-    "Plugin(LongituteLatitude) is executed in place.\n";
+  return "Plugin(LongituteLatitude) projects the view `View' "
+    "in longitude-latitude.\n\n"
+    "If `View' < 0, the plugin is run on the current view.\n\n"
+    "Plugin(LongituteLatitude) is executed in place.";
 }
 
 int GMSH_LongituteLatitudePlugin::getNbOptions() const
diff --git a/Plugin/MakeSimplex.cpp b/Plugin/MakeSimplex.cpp
index 96ed85dc19..9ed7b6c22e 100644
--- a/Plugin/MakeSimplex.cpp
+++ b/Plugin/MakeSimplex.cpp
@@ -19,14 +19,11 @@ extern "C"
 
 std::string GMSH_MakeSimplexPlugin::getHelp() const
 {
-  return "Plugin(MakeSimplex) decomposes all non-\n"
-    "simplectic elements (quadrangles, prisms,\n"
-    "hexahedra, pyramids) in the view `View' into\n"
-    "simplices (triangles, tetrahedra).\n"
-    "\n"
-    "If `View' < 0, the plugin is run on the current view.\n"
-    "\n"
-    "Plugin(MakeSimplex) is executed in-place.\n";
+  return "Plugin(MakeSimplex) decomposes all non-simplectic "
+    "elements (quadrangles, prisms, hexahedra, pyramids) in the "
+    "view `View' into simplices (triangles, tetrahedra).\n\n"
+    "If `View' < 0, the plugin is run on the current view.\n\n"
+    "Plugin(MakeSimplex) is executed in-place.";
 }
 
 int GMSH_MakeSimplexPlugin::getNbOptions() const
diff --git a/Plugin/MathEval.cpp b/Plugin/MathEval.cpp
index 8d94834925..51d6f129e9 100644
--- a/Plugin/MathEval.cpp
+++ b/Plugin/MathEval.cpp
@@ -38,38 +38,30 @@ extern "C"
 
 std::string GMSH_MathEvalPlugin::getHelp() const
 {
-  return "Plugin(MathEval) creates a new view using\n"
-    "data from the time step `TimeStep' in the view\n"
-    "`View'.\n"
-    "\n"
-    "If only `Expression0' is given (and `Expression1',\n"
-    "..., `Expression8' are all empty), the plugin\n"
-    "creates a scalar view. If `Expression0', `Expression1'\n"
-    "and/or `Expression2' are given (and `Expression3',\n"
-    "..., `Expression8' are all empty) the plugin creates\n"
-    "a vector view. Otherwise the plugin creates a tensor\n"
-    "view.\n"
-    "\n"
-    "In addition to the usual mathematical functions\n"
-    "(Exp, Log, Sqrt, Sin, Cos, Fabs, etc.) and operators\n"
-    "(+, -, *, /, ^), all expressions can contain:\n"
-    "\n"
-    "- the symbols v0, v1, v2, ..., vn, which represent\n"
-    "the n components in `View';\n"
-    "\n"
-    "- the symbols w0, w1, w2, ..., wn, which represent\n"
-    "the n components of `OtherView', at time step\n"
-    "`OtherTimeStep';\n"
-    "\n"
-    "- the symbols x, y and z, which represent the three\n"
-    "spatial coordinates.\n"
-    "\n"
-    "If `TimeStep' < 0, the plugin extracts data from all\n"
-    "the time steps in the view.\n"
-    "\n"
-    "If `View' < 0, the plugin is run on the current view.\n"
-    "\n"
-    "Plugin(MathEval) creates one new view.\n";
+  return "Plugin(MathEval) creates a new view using "
+    "data from the time step `TimeStep' in the view "
+    "`View'.\n\n"
+    "If only `Expression0' is given (and `Expression1', "
+    "..., `Expression8' are all empty), the plugin "
+    "creates a scalar view. If `Expression0', `Expression1' "
+    "and/or `Expression2' are given (and `Expression3', "
+    "..., `Expression8' are all empty) the plugin creates "
+    "a vector view. Otherwise the plugin creates a tensor "
+    "view.\n\n"
+    "In addition to the usual mathematical functions "
+    "(Exp, Log, Sqrt, Sin, Cos, Fabs, etc.) and operators "
+    "(+, -, *, /, ^), all expressions can contain:\n\n"
+    "- the symbols v0, v1, v2, ..., vn, which represent "
+    "the n components in `View';\n\n"
+    "- the symbols w0, w1, w2, ..., wn, which represent "
+    "the n components of `OtherView', at time step "
+    "`OtherTimeStep';\n\n"
+    "- the symbols x, y and z, which represent the three "
+    "spatial coordinates.\n\n"
+    "If `TimeStep' < 0, the plugin extracts data from all "
+    "the time steps in the view.\n\n"
+    "If `View' < 0, the plugin is run on the current view.\n\n"
+    "Plugin(MathEval) creates one new view.";
 }
 
 int GMSH_MathEvalPlugin::getNbOptions() const
diff --git a/Plugin/ModifyComponent.cpp b/Plugin/ModifyComponent.cpp
index 1d112ced88..feebece23b 100644
--- a/Plugin/ModifyComponent.cpp
+++ b/Plugin/ModifyComponent.cpp
@@ -31,56 +31,42 @@ extern "C"
 
 std::string GMSH_ModifyComponentPlugin::getHelp() const
 {
-  return "Plugin(ModifyComponent) sets the `Component'-th\n"
-    "component of the `TimeStep'-th time step in the\n"
-    "view `View' to the expression `Expression'.\n"
-    "\n"
-    "`Expression' can contain:\n"
-    "\n"
-    "- the usual mathematical functions (Log, Sqrt,\n"
-    "Sin, Cos, Fabs, ...) and operators (+, -, *, /, ^);\n"
-    "\n"
-    "- the symbols x, y and z, to retrieve the\n"
-    "coordinates of the current node;\n"
-    "\n"
-    "- the symbols Time and TimeStep, to retrieve the\n"
-    "current time and time step values;\n"
-    "\n"
-    "- the symbol v, to retrieve the `Component'-th\n"
-    "component of the field in `View' at the\n"
-    "`TimeStep'-th time step;\n"
-    "\n"
-    "- the symbols v0, v1, v2, ..., v8, to retrieve each\n"
-    "component of the field in `View' at the\n"
-    "`TimeStep'-th time step;\n"
-    "\n"
-    "- the symbol w, to retrieve the `Component'-th\n"
-    "component of the field in `OtherView' at the\n"
-    "`OtherTimeStep'-th time step. If `OtherView'\n"
-    "and `View' are based on different spatial grids,\n"
-    "or if their data types are different, `OtherView'\n"
-    "is interpolated onto `View';\n"
-    "\n"
-    "- the symbols w0, w1, w2, ..., w8, to retrieve each\n"
-    "component of the field in `OtherView' at the\n"
-    "`OtherTimeStep'-th time step.\n"
-    "\n"
-    "If `TimeStep' < 0, the plugin automatically loops\n"
-    "over all the time steps in `View' and evaluates\n"
-    "`Expression' for each one.\n"
-    "\n"
-    "If `OtherTimeStep' < 0, the plugin uses `TimeStep'\n"
-    "instead.\n"
-    "\n"
-    "If `Component' < 0, the plugin automatically loops\n"
-    "over all the components in the view and\n"
-    "evaluates `Expression' for each one.\n"
-    "\n"
-    "If `View' < 0, the plugin is run on the current view.\n"
-    "\n"
-    "If `OtherView' < 0, the plugin uses `View' instead.\n"
-    "\n"
-    "Plugin(ModifyComponent) is executed in-place.\n";
+  return "Plugin(ModifyComponent) sets the `Component'-th "
+    "component of the `TimeStep'-th time step in the "
+    "view `View' to the expression `Expression'.\n\n"
+    "`Expression' can contain:\n\n"
+    "- the usual mathematical functions (Log, Sqrt, "
+    "Sin, Cos, Fabs, ...) and operators (+, -, *, /, ^);\n\n"
+    "- the symbols x, y and z, to retrieve the "
+    "coordinates of the current node;\n\n"
+    "- the symbols Time and TimeStep, to retrieve the "
+    "current time and time step values;\n\n"
+    "- the symbol v, to retrieve the `Component'-th "
+    "component of the field in `View' at the "
+    "`TimeStep'-th time step;\n\n"
+    "- the symbols v0, v1, v2, ..., v8, to retrieve each "
+    "component of the field in `View' at the "
+    "`TimeStep'-th time step;\n\n"
+    "- the symbol w, to retrieve the `Component'-th "
+    "component of the field in `OtherView' at the "
+    "`OtherTimeStep'-th time step. If `OtherView' "
+    "and `View' are based on different spatial grids, "
+    "or if their data types are different, `OtherView' "
+    "is interpolated onto `View';\n\n"
+    "- the symbols w0, w1, w2, ..., w8, to retrieve each "
+    "component of the field in `OtherView' at the "
+    "`OtherTimeStep'-th time step.\n\n"
+    "If `TimeStep' < 0, the plugin automatically loops "
+    "over all the time steps in `View' and evaluates "
+    "`Expression' for each one.\n\n"
+    "If `OtherTimeStep' < 0, the plugin uses `TimeStep' "
+    "instead.\n\n"
+    "If `Component' < 0, the plugin automatically  ops\n"
+    "over all the components in the view and "
+    "evaluates `Expression' for each one.\n\n"
+    "If `View' < 0, the plugin is run on the current view.\n\n"
+    "If `OtherView' < 0, the plugin uses `View' instead.\n\n"
+    "Plugin(ModifyComponent) is executed in-place.";
 }
 
 int GMSH_ModifyComponentPlugin::getNbOptions() const
diff --git a/Plugin/ModulusPhase.cpp b/Plugin/ModulusPhase.cpp
index b761600430..fe65afb022 100644
--- a/Plugin/ModulusPhase.cpp
+++ b/Plugin/ModulusPhase.cpp
@@ -21,15 +21,13 @@ extern "C"
 
 std::string GMSH_ModulusPhasePlugin::getHelp() const
 {
-  return "Plugin(ModulusPhase) interprets the time steps\n"
-    "`realPart' and `imaginaryPart' in the view `View'\n"
-    "as the real and imaginary parts of a complex field\n"
-    "and replaces them with their corresponding\n"
-    "modulus and phase.\n"
-    "\n"
-    "If `View' < 0, the plugin is run on the current view.\n"
-    "\n"
-    "Plugin(ModulusPhase) is executed in-place.\n";
+  return "Plugin(ModulusPhase) interprets the time steps "
+    "`realPart' and `imaginaryPart' in the view `View' "
+    "as the real and imaginary parts of a complex field "
+    "and replaces them with their corresponding "
+    "modulus and phase.\n\n"
+    "If `View' < 0, the plugin is run on the current view.\n\n"
+    "Plugin(ModulusPhase) is executed in-place.";
 }
 
 int GMSH_ModulusPhasePlugin::getNbOptions() const
diff --git a/Plugin/Particles.cpp b/Plugin/Particles.cpp
index 5486db4c4e..a4c0920c5d 100644
--- a/Plugin/Particles.cpp
+++ b/Plugin/Particles.cpp
@@ -148,33 +148,26 @@ double GMSH_ParticlesPlugin::callbackV(int num, int action, double value)
 std::string GMSH_ParticlesPlugin::getHelp() const
 {
   return 
-    "Plugin(Particles) computes the trajectory\n"
-    "of particules in the force field given by the\n"
-    "`TimeStep'-th time step of a vector view\n"
-    "`View'.\n"
-    "\n"
-    "The plugin takes as input a grid defined by the\n"
-    "3 points (`X0',`Y0',`Z0') (origin), (`X1',`Y1',`Z1')\n"
-    "(axis of U) and (`X2',`Y2',`Z2') (axis of V).\n"
-    "\n"
-    "The number of particles along U and V that are to\n"
-    "be transported is set with the options `NumPointsU'\n"
-    "and `NumPointsV'. The equation\n"
-    "\n"
-    "A2 * d^2X(t)/dt^2 + A1 * dX(t)/dt + A0 * X(t) = F\n"
-    "\n"
-    "is then solved with the initial conditions X(t=0)\n"
-    "chosen as the grid, dX/dt(t=0)=0, and with F\n"
-    "interpolated from the vector view.\n"
-    "\n"
-    "Time stepping is done using a Newmark scheme with\n"
-    "step size `DT' and `MaxIter' maximum number of\n"
-    "iterations.\n"
-    "\n"
-    "If `View' < 0, the plugin is run on the current view.\n"
-    "\n"
-    "Plugin(Particles) creates one new view containing\n"
-    "multi-step vector points.\n";
+    "Plugin(Particles) computes the trajectory "
+    "of particules in the force field given by the "
+    "`TimeStep'-th time step of a vector view "
+    "`View'.\n\n"
+    "The plugin takes as input a grid defined by the "
+    "3 points (`X0',`Y0',`Z0') (origin), (`X1',`Y1',`Z1') "
+    "(axis of U) and (`X2',`Y2',`Z2') (axis of V).\n\n"
+    "The number of particles along U and V that are to "
+    "be transported is set with the options `NumPointsU' "
+    "and `NumPointsV'. The equation\n\n"
+    "A2 * d^2X(t)/dt^2 + A1 * dX(t)/dt + A0 * X(t) = F\n\n"
+    "is then solved with the initial conditions X(t=0) "
+    "chosen as the grid, dX/dt(t=0)=0, and with F "
+    "interpolated from the vector view.\n\n"
+    "Time stepping is done using a Newmark scheme with "
+    "step size `DT' and `MaxIter' maximum number of "
+    "iterations.\n\n"
+    "If `View' < 0, the plugin is run on the current view.\n\n"
+    "Plugin(Particles) creates one new view containing "
+    "multi-step vector points.";
 }
 
 int GMSH_ParticlesPlugin::getNbOptions() const
diff --git a/Plugin/Probe.cpp b/Plugin/Probe.cpp
index 6dd63be0cf..93119e7b3a 100644
--- a/Plugin/Probe.cpp
+++ b/Plugin/Probe.cpp
@@ -97,12 +97,10 @@ double GMSH_ProbePlugin::callbackZ(int num, int action, double value)
 
 std::string GMSH_ProbePlugin::getHelp() const
 {
-  return "Plugin(Probe) gets the value of the view `View' at\n"
-    "the point (`X',`Y',`Z').\n"
-    "\n"
-    "If `View' < 0, the plugin is run on the current view.\n"
-    "\n"
-    "Plugin(Probe) creates one new view.\n";
+  return "Plugin(Probe) gets the value of the view `View' at "
+    "the point (`X',`Y',`Z').\n\n"
+    "If `View' < 0, the plugin is run on the current view.\n\n"
+    "Plugin(Probe) creates one new view.";
 }
 
 int GMSH_ProbePlugin::getNbOptions() const
diff --git a/Plugin/Remove.cpp b/Plugin/Remove.cpp
index c57c0b7bd5..88b6b9ac04 100644
--- a/Plugin/Remove.cpp
+++ b/Plugin/Remove.cpp
@@ -32,12 +32,10 @@ extern "C"
 
 std::string GMSH_RemovePlugin::getHelp() const
 {
-  return "Plugin(Remove) removes the marked items\n"
-    "from the view `View'.\n"
-    "\n"
-    "If `View' < 0, the plugin is run on the current view.\n"
-    "\n"
-    "Plugin(Remove) is executed in-place.\n";
+  return "Plugin(Remove) removes the marked items "
+    "from the view `View'.\n\n"
+    "If `View' < 0, the plugin is run on the current view.\n\n"
+    "Plugin(Remove) is executed in-place.";
 }
 
 int GMSH_RemovePlugin::getNbOptions() const
diff --git a/Plugin/Skin.cpp b/Plugin/Skin.cpp
index 29f771f76c..82582c8a0d 100644
--- a/Plugin/Skin.cpp
+++ b/Plugin/Skin.cpp
@@ -22,12 +22,10 @@ extern "C"
 
 std::string GMSH_SkinPlugin::getHelp() const
 {
-  return "Plugin(Skin) extracts the boundary (skin) of\n"
-    "the view `View'.\n"
-    "\n"
-    "If `View' < 0, the plugin is run on the current view.\n"
-    "\n"
-    "Plugin(Skin) creates one new view.\n";
+  return "Plugin(Skin) extracts the boundary (skin) of "
+    "the view `View'.\n\n"
+    "If `View' < 0, the plugin is run on the current view.\n\n"
+    "Plugin(Skin) creates one new view.";
 }
 
 int GMSH_SkinPlugin::getNbOptions() const
diff --git a/Plugin/Smooth.cpp b/Plugin/Smooth.cpp
index be078aef4c..e325c4f63f 100644
--- a/Plugin/Smooth.cpp
+++ b/Plugin/Smooth.cpp
@@ -19,12 +19,10 @@ extern "C"
 
 std::string GMSH_SmoothPlugin::getHelp() const
 {
-  return "Plugin(Smooth) averages the values at the nodes\n"
-    "of the view `View'.\n"
-    "\n"
-    "If `View' < 0, the plugin is run on the current view.\n"
-    "\n"
-    "Plugin(Smooth) is executed in-place.\n";
+  return "Plugin(Smooth) averages the values at the nodes "
+    "of the view `View'.\n\n"
+    "If `View' < 0, the plugin is run on the current view.\n\n"
+    "Plugin(Smooth) is executed in-place.";
 }
 
 int GMSH_SmoothPlugin::getNbOptions() const
diff --git a/Plugin/SphericalRaise.cpp b/Plugin/SphericalRaise.cpp
index 22ef42e0c3..926732dee7 100644
--- a/Plugin/SphericalRaise.cpp
+++ b/Plugin/SphericalRaise.cpp
@@ -26,24 +26,20 @@ extern "C"
 
 std::string GMSH_SphericalRaisePlugin::getHelp() const
 {
-  return "Plugin(SphericalRaise) transforms the\n"
-    "coordinates of the elements in the view\n"
-    "`View' using the values associated with the\n"
-    "`TimeStep'-th time step.\n"
-    "\n"
-    "Instead of elevating the nodes along the X, Y\n"
-    "and Z axes as with the View[`View'].RaiseX,\n"
-    "View[`View'].RaiseY and View[`View'].RaiseZ\n"
-    "options, the raise is applied along the radius\n"
-    "of a sphere centered at (`Xc', `Yc', `Zc').\n"
-    "\n"
-    "To produce a standard radiation pattern, set\n"
-    "`Offset' to minus the radius of the sphere the\n"
-    "original data lives on.\n"
-    "\n"
-    "If `View' < 0, the plugin is run on the current view.\n"
-    "\n"
-    "Plugin(SphericalRaise) is executed in-place.\n";
+  return "Plugin(SphericalRaise) transforms the "
+    "coordinates of the elements in the view "
+    "`View' using the values associated with the "
+    "`TimeStep'-th time step.\n\n"
+    "Instead of elevating the nodes along the X, Y "
+    "and Z axes as with the View[`View'].RaiseX, "
+    "View[`View'].RaiseY and View[`View'].RaiseZ "
+    "options, the raise is applied along the radius "
+    "of a sphere centered at (`Xc', `Yc', `Zc').\n\n"
+    "To produce a standard radiation pattern, set "
+    "`Offset' to minus the radius of the sphere the "
+    "original data lives on.\n\n"
+    "If `View' < 0, the plugin is run on the current view.\n\n"
+    "Plugin(SphericalRaise) is executed in-place.";
 }
 
 int GMSH_SphericalRaisePlugin::getNbOptions() const
diff --git a/Plugin/StreamLines.cpp b/Plugin/StreamLines.cpp
index 1ba6749400..f78b7e2458 100644
--- a/Plugin/StreamLines.cpp
+++ b/Plugin/StreamLines.cpp
@@ -138,37 +138,29 @@ double GMSH_StreamLinesPlugin::callbackV(int num, int action, double value)
 
 std::string GMSH_StreamLinesPlugin::getHelp() const
 {
-  return "Plugin(StreamLines) computes stream lines\n"
-    "from the `TimeStep'-th time step of a vector\n"
-    "view `View' and optionally interpolates the\n"
-    "scalar view `OtherView' on the resulting stream\n"
-    "lines.\n"
-    "\n"
-    "The plugin takes as input a grid defined by the\n"
-    "3 points (`X0',`Y0',`Z0') (origin), (`X1',`Y1',`Z1')\n"
-    "(axis of U) and (`X2',`Y2',`Z2') (axis of V).\n"
-    "\n"
-    "The number of points along U and V that are to be\n"
-    "transported is set with the options `NumPointsU'\n"
-    "and `NumPointsV'. The equation\n"
-    "\n"
-    "dX(t)/dt = V(x,y,z)\n"
-    "\n"
-    "is then solved with the initial condition X(t=0)\n"
-    "chosen as the grid and with V(x,y,z) interpolated\n"
-    "on the vector view.\n"
-    "\n"
-    "The time stepping scheme is a RK44 with step size\n"
-    "`DT' and `MaxIter' maximum number of iterations.\n"
-    "\n"
-    "If `TimeStep' < 0, the plugin tries to compute\n"
-    "streamlines of the unsteady flow.\n"
-    "\n"
-    "If `View' < 0, the plugin is run on the current view.\n"
-    "\n"
-    "Plugin(StreamLines) creates one new view. This\n"
-    "view contains multi-step vector points if `OtherView'\n"
-    "< 0, or single-step scalar lines if `OtherView' >= 0.\n";
+  return "Plugin(StreamLines) computes stream lines "
+    "from the `TimeStep'-th time step of a vector "
+    "view `View' and optionally interpolates the "
+    "scalar view `OtherView' on the resulting stream "
+    "lines.\n\n"
+    "The plugin takes as input a grid defined by the "
+    "3 points (`X0',`Y0',`Z0') (origin), (`X1',`Y1',`Z1') "
+    "(axis of U) and (`X2',`Y2',`Z2') (axis of V).\n\n"
+    "The number of points along U and V that are to be "
+    "transported is set with the options `NumPointsU' "
+    "and `NumPointsV'. The equation\n\n"
+    "dX(t)/dt = V(x,y,z)\n\n"
+    "is then solved with the initial condition X(t=0) "
+    "chosen as the grid and with V(x,y,z) interpolated "
+    "on the vector view.\n\n"
+    "The time stepping scheme is a RK44 with step size "
+    "`DT' and `MaxIter' maximum number of iterations.\n\n"
+    "If `TimeStep' < 0, the plugin tries to compute "
+    "streamlines of the unsteady flow.\n\n"
+    "If `View' < 0, the plugin is run on the current view.\n\n"
+    "Plugin(StreamLines) creates one new view. This "
+    "view contains multi-step vector points if `OtherView' "
+    "< 0, or single-step scalar lines if `OtherView' >= 0.";
 }
 
 int GMSH_StreamLinesPlugin::getNbOptions() const
diff --git a/Plugin/Tetrahedralize.cpp b/Plugin/Tetrahedralize.cpp
index b14d9a4aaa..ec8c855e6f 100644
--- a/Plugin/Tetrahedralize.cpp
+++ b/Plugin/Tetrahedralize.cpp
@@ -26,12 +26,10 @@ extern "C"
 
 std::string GMSH_TetrahedralizePlugin::getHelp() const
 {
-  return "Plugin(Tetrahedralize) tetrahedralizes the points in\n"
-    "the view `View'.\n"
-    "\n"
-    "If `View' < 0, the plugin is run on the current view.\n"
-    "\n"
-    "Plugin(Tetrahedralize) creates one new view.\n";
+  return "Plugin(Tetrahedralize) tetrahedralizes the points in "
+    "the view `View'.\n\n"
+    "If `View' < 0, the plugin is run on the current view.\n\n"
+    "Plugin(Tetrahedralize) creates one new view.";
 }
 
 int GMSH_TetrahedralizePlugin::getNbOptions() const
diff --git a/Plugin/Transform.cpp b/Plugin/Transform.cpp
index 563d057ab0..5314823eba 100644
--- a/Plugin/Transform.cpp
+++ b/Plugin/Transform.cpp
@@ -32,20 +32,16 @@ extern "C"
 
 std::string GMSH_TransformPlugin::getHelp() const
 {
-  return "Plugin(Transform) transforms the homogeneous\n"
-    "node coordinates (x,y,z,1) of the elements in\n"
-    "the view `View' by the matrix\n"
-    "\n"
+  return "Plugin(Transform) transforms the homogeneous "
+    "node coordinates (x,y,z,1) of the elements in "
+    "the view `View' by the matrix\n\n"
     "[`A11' `A12' `A13' `Tx']\n"
     "[`A21' `A22' `A23' `Ty']\n"
-    "[`A31' `A32' `A33' `Tz'].\n"
-    "\n"
-    "If `SwapOrientation' is set, the orientation of the\n"
-    "elements is reversed.\n"
-    "\n"
-    "If `View' < 0, the plugin is run on the current view.\n"
-    "\n"
-    "Plugin(Transform) is executed in-place.\n";
+    "[`A31' `A32' `A33' `Tz'].\n\n"
+    "If `SwapOrientation' is set, the orientation of the "
+    "elements is reversed.\n\n"
+    "If `View' < 0, the plugin is run on the current view.\n\n"
+    "Plugin(Transform) is executed in-place.";
 }
 
 int GMSH_TransformPlugin::getNbOptions() const
diff --git a/Plugin/Triangulate.cpp b/Plugin/Triangulate.cpp
index 3730d05b05..fdc1494d23 100644
--- a/Plugin/Triangulate.cpp
+++ b/Plugin/Triangulate.cpp
@@ -27,14 +27,12 @@ extern "C"
 
 std::string GMSH_TriangulatePlugin::getHelp() const
 {
-  return "Plugin(Triangulate) triangulates the points in the\n"
-    "view `View', assuming that all the points belong\n"
-    "to a surface that can be projected one-to-one\n"
-    "onto a plane.\n"
-    "\n"
-    "If `View' < 0, the plugin is run on the current view.\n"
-    "\n"
-    "Plugin(Triangulate) creates one new view.\n";
+  return "Plugin(Triangulate) triangulates the points in the "
+    "view `View', assuming that all the points belong "
+    "to a surface that can be projected one-to-one "
+    "onto a plane.\n\n"
+    "If `View' < 0, the plugin is run on the current view.\n\n"
+    "Plugin(Triangulate) creates one new view.";
 }
 
 int GMSH_TriangulatePlugin::getNbOptions() const
diff --git a/Plugin/Warp.cpp b/Plugin/Warp.cpp
index 3ac3951bb7..0c060ad3cb 100644
--- a/Plugin/Warp.cpp
+++ b/Plugin/Warp.cpp
@@ -25,20 +25,17 @@ extern "C"
 
 std::string GMSH_WarpPlugin::getHelp() const
 {
-  return "Plugin(Warp) transforms the elements in the\n"
-    "view `View' by adding to their node coordinates\n"
-    "the vector field stored in the `TimeStep'-th time\n"
-    "step of the view `OtherView', scaled by `Factor'.\n"
-    "\n"
-    "If `View' < 0, the plugin is run on the current view.\n"
-    "\n"
-    "If `OtherView' < 0, the vector field is taken as the\n"
-    "field of surface normals multiplied by the `TimeStep'\n"
-    "value in `View'. (The smoothing of the surface\n"
-    "normals is controlled by the `SmoothingAngle'\n"
-    "parameter.)\n"
-    "\n"
-    "Plugin(Warp) is executed in-place.\n";
+  return "Plugin(Warp) transforms the elements in the "
+    "view `View' by adding to their node coordinates "
+    "the vector field stored in the `TimeStep'-th time "
+    "step of the view `OtherView', scaled by `Factor'.\n\n"
+    "If `View' < 0, the plugin is run on the current view.\n\n"
+    "If `OtherView' < 0, the vector field is taken as the "
+    "field of surface normals multiplied by the `TimeStep' "
+    "value in `View'. (The smoothing of the surface "
+    "normals is controlled by the `SmoothingAngle' "
+    "parameter.)\n\n"
+    "Plugin(Warp) is executed in-place.";
 }
 
 int GMSH_WarpPlugin::getNbOptions() const
diff --git a/doc/texinfo/opt_plugin.texi b/doc/texinfo/opt_plugin.texi
index 33aefd7807..02bae8e8e4 100644
--- a/doc/texinfo/opt_plugin.texi
+++ b/doc/texinfo/opt_plugin.texi
@@ -5,21 +5,13 @@
 
 @ftable @code
 @item Plugin(Annotate)
-Plugin(Annotate) adds the text string `Text',
-in font `Font' and size `FontSize', in the view
-`View'. The string is aligned according to `Align'.
+Plugin(Annotate) adds the text string `Text', in font `Font' and size `FontSize', in the view `View'. The string is aligned according to `Align'.
 
-If `ThreeD' is equal to 1, the plugin inserts
-the string in model coordinates at the position
-(`X',`Y',`Z'). If `ThreeD' is equal to 0, the plugin
-inserts the string in screen coordinates at
-the position (`X',`Y').
+If `ThreeD' is equal to 1, the plugin inserts the string in model coordinates at the position (`X',`Y',`Z'). If `ThreeD' is equal to 0, the plugin inserts the string in screen coordinates at the position (`X',`Y').
 
 If `View' < 0, the plugin is run on the current view.
 
-Plugin(Annotate) is executed in-place for list-based
-datasets or creates a new view for other datasets.
-
+Plugin(Annotate) is executed in-place for list-based datasets or creates a new view for other datasets.
 String options:
 @table @code
 @item Text
@@ -46,13 +38,11 @@ Default value: @code{-1}
 @end table
 
 @item Plugin(Curl)
-Plugin(Curl) computes the curl of the field
-in the view `View'.
+Plugin(Curl) computes the curl of the field in the view `View'.
 
 If `View' < 0, the plugin is run on the current view.
 
 Plugin(Curl) creates one new view.
-
 Numeric options:
 @table @code
 @item View
@@ -60,23 +50,15 @@ Default value: @code{-1}
 @end table
 
 @item Plugin(CutGrid)
-Plugin(CutGrid) cuts the view `View' with a
-rectangular grid defined by the 3 points
-(`X0',`Y0',`Z0') (origin), (`X1',`Y1',`Z1') (axis of U)
-and (`X2',`Y2',`Z2') (axis of V).
+Plugin(CutGrid) cuts the view `View' with a rectangular grid defined by the 3 points (`X0',`Y0',`Z0') (origin), (`X1',`Y1',`Z1') (axis of U) and (`X2',`Y2',`Z2') (axis of V).
 
-The number of points along U and V is set with the
-options `NumPointsU' and `NumPointsV'.
+The number of points along U and V is set with the options `NumPointsU' and `NumPointsV'.
 
-If `ConnectPoints' is zero, the plugin creates points;
-otherwise, the plugin generates quadrangles, lines or
-points depending on the values of `NumPointsU' and
-`NumPointsV'.
+If `ConnectPoints' is zero, the plugin creates points; otherwise, the plugin generates quadrangles, lines or points depending on the values of `NumPointsU' and `NumPointsV'.
 
 If `View' < 0, the plugin is run on the current view.
 
 Plugin(CutGrid) creates one new view.
-
 Numeric options:
 @table @code
 @item X0
@@ -108,18 +90,13 @@ Default value: @code{-1}
 @end table
 
 @item Plugin(CutParametric)
-Plugin(CutParametric) cuts the view `View' with
-the parametric function (`X'(u), `Y'(u), `Z'(u)),
-using `NumPointsU' values of the parameter u in
-[`MinU', `MaxU'].
+Plugin(CutParametric) cuts the view `View' with the parametric function (`X'(u), `Y'(u), `Z'(u)), using `NumPointsU' values of the parameter u in [`MinU', `MaxU'].
 
-If `ConnectPoints' is set, the plugin creates line
-elements; otherwise, the plugin generates points.
+If `ConnectPoints' is set, the plugin creates line elements; otherwise, the plugin generates points.
 
 If `View' < 0, the plugin is run on the current view.
 
 Plugin(CutParametric) creates one new view.
-
 String options:
 @table @code
 @item X
@@ -144,17 +121,13 @@ Default value: @code{-1}
 @end table
 
 @item Plugin(CutPlane)
-Plugin(CutPlane) cuts the view `View' with
-the plane `A'*X + `B'*Y + `C'*Z + `D' = 0.
+Plugin(CutPlane) cuts the view `View' with the plane `A'*X + `B'*Y + `C'*Z + `D' = 0.
 
-If `ExtractVolume' is nonzero, the plugin extracts
-the elements on one side of the plane (depending
-on the sign of `ExtractVolume'). 
+If `ExtractVolume' is nonzero, the plugin extracts the elements on one side of the plane (depending on the sign of `ExtractVolume').
 
 If `View' < 0, the plugin is run on the current view.
 
 Plugin(CutPlane) creates one new view.
-
 Numeric options:
 @table @code
 @item A
@@ -176,17 +149,13 @@ Default value: @code{-1}
 @end table
 
 @item Plugin(CutSphere)
-Plugin(CutSphere) cuts the view `View' with the
-sphere (X-`Xc')^2 + (Y-`Yc')^2 + (Z-`Zc')^2 = `R'^2.
+Plugin(CutSphere) cuts the view `View' with the sphere (X-`Xc')^2 + (Y-`Yc')^2 + (Z-`Zc')^2 = `R'^2.
 
-If `ExtractVolume' is nonzero, the plugin extracts
-the elements inside (if `ExtractVolume' < 0) or
-outside (if `ExtractVolume' > 0) the sphere.
+If `ExtractVolume' is nonzero, the plugin extracts the elements inside (if `ExtractVolume' < 0) or outside (if `ExtractVolume' > 0) the sphere.
 
 If `View' < 0, the plugin is run on the current view.
 
 Plugin(CutSphere) creates one new view.
-
 Numeric options:
 @table @code
 @item Xc
@@ -208,13 +177,11 @@ Default value: @code{-1}
 @end table
 
 @item Plugin(Divergence)
-Plugin(Divergence) computes the divergence of the
-field in the view `View'.
+Plugin(Divergence) computes the divergence of the field in the view `View'.
 
 If `View' < 0, the plugin is run on the current view.
 
 Plugin(Divergence) creates one new view.
-
 Numeric options:
 @table @code
 @item View
@@ -222,13 +189,11 @@ Default value: @code{-1}
 @end table
 
 @item Plugin(Eigenvalues)
-Plugin(Eigenvalues) computes the three real
-eigenvalues of each tensor in the view `View'.
+Plugin(Eigenvalues) computes the three real eigenvalues of each tensor in the view `View'.
 
 If `View' < 0, the plugin is run on the current view.
 
 Plugin(Eigenvalues) creates three new scalar views.
-
 Numeric options:
 @table @code
 @item View
@@ -236,19 +201,13 @@ Default value: @code{-1}
 @end table
 
 @item Plugin(Eigenvectors)
-Plugin(Eigenvectors) computes the three (right)
-eigenvectors of each tensor in the view `View'
-and sorts them according to the value of the
-associated eigenvalues.
+Plugin(Eigenvectors) computes the three (right) eigenvectors of each tensor in the view `View' and sorts them according to the value of the associated eigenvalues.
 
-If `ScaleByEigenvalues' is set, each eigenvector is
-scaled by its associated eigenvalue. The plugin
-gives an error if the eigenvectors are complex.
+If `ScaleByEigenvalues' is set, each eigenvector is scaled by its associated eigenvalue. The plugin gives an error if the eigenvectors are complex.
 
 If `View' < 0, the plugin is run on the current view.
 
 Plugin(Eigenvectors) creates three new vector view.
-
 Numeric options:
 @table @code
 @item ScaleByEigenvalues
@@ -258,15 +217,11 @@ Default value: @code{-1}
 @end table
 
 @item Plugin(ExtractElements)
-Plugin(ExtractElements) extracts the elements
-from the view `View' whose `TimeStep'-th values
-(averaged by element) are comprised between
-`MinVal' and `MaxVal'.
+Plugin(ExtractElements) extracts the elements from the view `View' whose `TimeStep'-th values (averaged by element) are comprised between `MinVal' and `MaxVal'.
 
 If `View' < 0, the plugin is run on the current view.
 
 Plugin(ExtractElements) creates one new view.
-
 Numeric options:
 @table @code
 @item MinVal
@@ -280,58 +235,45 @@ Default value: @code{-1}
 @end table
 
 @item Plugin(GSHHS)
-Plugin(GSHHS) read different kind of contour lines data
-and write a .geo file on the surface of a sphere (the Earth).
+Plugin(GSHHS) read different kind of contour lines data and write a .geo file on the surface of a sphere (the Earth).
 
 The principal application is to load GSHHS data
- (see
-http://www.soest.hawaii.edu/wessel/gshhs/gshhs.html).
+ (see http://www.soest.hawaii.edu/wessel/gshhs/gshhs.html).
 
 Valid values for "Format" are:
 
 - "gshhs": open GSHHS file
 
 - "loops2": import 2D contour lines in simple text format:
-   NB_POINTS_IN_FIRST_LOOP FIRST_LOOP_IS_CLOSED
-   COORD1 COORD2
-   COORD1 COORD2
-   ...    ...
-   NB_POINTS_IN_SECOND_LOOP SECOND_LOOP_IS_CLOSED
-   ...
-(LOOP_IS_CLOSED specify if this coast line describe a closed
-curve (0=no, 1=yes). In the case of "loops2" format, you
-can specify the the coordinate system used in the input file
-with the "Coordinate" option, valid values are
+
+NB_POINTS_IN_FIRST_LOOP FIRST_LOOP_IS_CLOSED
+COORD1 COORD2
+COORD1 COORD2
+...    ...
+NB_POINTS_IN_SECOND_LOOP SECOND_LOOP_IS_CLOSED
+...
+
+(LOOP_IS_CLOSED specifies if this coast line describes a closed curve (0=no, 1=yes)).
+
+In the case of "loops2" format, you can specify the coordinate system used in the input file with the "Coordinate" option. Valid values are
 
 - "lonlat" for longitude-latidute radian,
 
 - "lonlat_degrees" for longitude-latitude degrees,
 
-- "UTM" for universal transverse mercartor ("UTMZone"
-option should be specified)
+- "UTM" for universal transverse mercartor ("UTMZone" option should be specified)
 
 - "cartesian" for full 3D coordinates
 
 - "radius" specify the earth radius.
 
-If the "iField" option is set, consecutive points closer
-than the value of the field iField (in meters) will not be
-added.
+If the "iField" option is set, consecutive points closer than the value of the field iField (in meters) will not be added.
 
-If "MinStraitsFactor" > 0 and if a field iField is
-provided, coastlines closer than MinStraitsFactor *
-field(IField) are merged and inner corners which form an
-angle < pi/3 are removed.
+If "MinStraitsFactor" > 0 and if a field iField is provided, coastlines closer than MinStraitsFactor * field(IField) are merged and inner corners which form an angle < pi/3 are removed.
 
-The output is always in stereographic coordinates, if
-the "WritePolarSphere" option is not 0, a sphere is
-added to the geo file.
-
-WARNING: this plugin is still experimental and needs
-polishing and error-handling. In particular, it will
-probably crash if an inexistant field id is given or if
-the input/output cannot be open.
+The output is always in stereographic coordinates, if the "WritePolarSphere" option is not 0, a sphere is added to the geo file.
 
+WARNING: this plugin is still experimental and needs polishing and error-handling. In particular, it will probably crash if an inexistant field id is given or if the input/output cannot be open.
 String options:
 @table @code
 @item InFileName
@@ -362,13 +304,11 @@ Default value: @code{1}
 @end table
 
 @item Plugin(Gradient)
-Plugin(Gradient) computes the gradient of the
-field in the view `View'.
+Plugin(Gradient) computes the gradient of the field in the view `View'.
 
 If `View' < 0, the plugin is run on the current view.
 
 Plugin(Gradient) creates one new view.
-
 Numeric options:
 @table @code
 @item View
@@ -376,10 +316,7 @@ Default value: @code{-1}
 @end table
 
 @item Plugin(HarmonicToTime)
-Plugin(HarmonicToTime) takes the values in the
-time steps `RealPart' and `ImaginaryPart' of
-the view `View', and creates a new view
-containing
+Plugin(HarmonicToTime) takes the values in the time steps `RealPart' and `ImaginaryPart' of the view `View', and creates a new view containing
 
 `View'[`RealPart'] * cos(p) - `View'[`ImaginaryPart'] * sin(p)
 
@@ -388,7 +325,6 @@ with p = 2*Pi*k/`NumSteps', k = 0, ..., `NumSteps'-1.
 If `View' < 0, the plugin is run on the current view.
 
 Plugin(HarmonicToTime) creates one new view.
-
 Numeric options:
 @table @code
 @item RealPart
@@ -402,11 +338,9 @@ Default value: @code{-1}
 @end table
 
 @item Plugin(Homology)
-Plugin(Homology) computes generators for
-(relative) homology groups and their thick cuts.
+Plugin(Homology) computes generators for (relative) homology groups and their thick cuts.
 
 Plugin(Homology) creates new views.
-
 String options:
 @table @code
 @item Filename
@@ -431,15 +365,11 @@ Default value: @code{0}
 @end table
 
 @item Plugin(Integrate)
-Plugin(Integrate) integrates scalar fields over
-all the elements in the view `View', as well
-as the circulation/flux of vector fields over
-line/surface elements.
+Plugin(Integrate) integrates scalar fields over all the elements in the view `View', as well as the circulation/flux of vector fields over line/surface elements.
 
 If `View' < 0, the plugin is run on the current view.
 
 Plugin(Integrate) creates one new view.
-
 Numeric options:
 @table @code
 @item View
@@ -447,26 +377,15 @@ Default value: @code{-1}
 @end table
 
 @item Plugin(Isosurface)
-Plugin(Isosurface) extracts the isosurface of value
-`Value' from the view `View', and draws the
-`OtherTimeStep'-th step of the view `OtherView' on
-this isosurface.
+Plugin(Isosurface) extracts the isosurface of value `Value' from the view `View', and draws the `OtherTimeStep'-th step of the view `OtherView' on this isosurface.
 
-If `ExtractVolume' is nonzero, the plugin extracts the
-isovolume with values greater (if `ExtractVolume' > 0)
-or smaller (if `ExtractVolume' < 0) than the isosurface
-`Value'.
+If `ExtractVolume' is nonzero, the plugin extracts the isovolume with values greater (if `ExtractVolume' > 0) or smaller (if `ExtractVolume' < 0) than the isosurface `Value'.
 
-If `OtherTimeStep' < 0, the plugin uses, for each time
-step in `View', the corresponding time step in `OtherView'.
-If `OtherView' < 0, the plugin uses `View' as the value
-source.
+If `OtherTimeStep' < 0, the plugin uses, for each time step in `View', the corresponding time step in `OtherView'. If `OtherView' < 0, the plugin uses `View' as the value source.
 
 If `View' < 0, the plugin is run on the current view.
 
-Plugin(Isosurface) creates as many views as there are
-time steps in `View'.
-
+Plugin(Isosurface) creates as many views as there are time steps in `View'.
 Numeric options:
 @table @code
 @item Value
@@ -486,27 +405,15 @@ Default value: @code{-1}
 @end table
 
 @item Plugin(Lambda2)
-Plugin(Lambda2) computes the eigenvalues
-Lambda(1,2,3) of the tensor (S_ik S_kj +
-Om_ik Om_kj), where S_ij = 0.5 (ui,j + uj,i)
-and Om_ij = 0.5 (ui,j - uj,i) are respectively
-the symmetric and antisymmetric parts of the
-velocity gradient tensor.
-
-Vortices are well represented by regions where
-Lambda(2) is negative.
-
-If `View' contains tensor elements, the plugin
-directly uses the tensors as the values of the
-velocity gradient tensor; if `View' contains
-vector elements, the plugin uses them as the
-velocities from which to derive the velocity
-gradient tensor.
+Plugin(Lambda2) computes the eigenvalues Lambda(1,2,3) of the tensor (S_ik S_kj + Om_ik Om_kj), where S_ij = 0.5 (ui,j + uj,i) and Om_ij = 0.5 (ui,j - uj,i) are respectively the symmetric and antisymmetric parts of the velocity gradient tensor.
+
+Vortices are well represented by regions where Lambda(2) is negative.
+
+If `View' contains tensor elements, the plugin directly uses the tensors as the values of the velocity gradient tensor; if `View' contains vector elements, the plugin uses them as the velocities from which to derive the velocity gradient tensor.
 
 If `View' < 0, the plugin is run on the current view.
 
 Plugin(Lambda2) creates one new view.
-
 Numeric options:
 @table @code
 @item Eigenvalue
@@ -516,13 +423,11 @@ Default value: @code{-1}
 @end table
 
 @item Plugin(LongitudeLatitude)
-Plugin(LongituteLatitude) projects the view `View'
-in longitude-latitude.
+Plugin(LongituteLatitude) projects the view `View' in longitude-latitude.
 
 If `View' < 0, the plugin is run on the current view.
 
 Plugin(LongituteLatitude) is executed in place.
-
 Numeric options:
 @table @code
 @item View
@@ -530,15 +435,11 @@ Default value: @code{-1}
 @end table
 
 @item Plugin(MakeSimplex)
-Plugin(MakeSimplex) decomposes all non-
-simplectic elements (quadrangles, prisms,
-hexahedra, pyramids) in the view `View' into
-simplices (triangles, tetrahedra).
+Plugin(MakeSimplex) decomposes all non-simplectic elements (quadrangles, prisms, hexahedra, pyramids) in the view `View' into simplices (triangles, tetrahedra).
 
 If `View' < 0, the plugin is run on the current view.
 
 Plugin(MakeSimplex) is executed in-place.
-
 Numeric options:
 @table @code
 @item View
@@ -546,39 +447,23 @@ Default value: @code{-1}
 @end table
 
 @item Plugin(MathEval)
-Plugin(MathEval) creates a new view using
-data from the time step `TimeStep' in the view
-`View'.
+Plugin(MathEval) creates a new view using data from the time step `TimeStep' in the view `View'.
 
-If only `Expression0' is given (and `Expression1',
-..., `Expression8' are all empty), the plugin
-creates a scalar view. If `Expression0', `Expression1'
-and/or `Expression2' are given (and `Expression3',
-..., `Expression8' are all empty) the plugin creates
-a vector view. Otherwise the plugin creates a tensor
-view.
+If only `Expression0' is given (and `Expression1', ..., `Expression8' are all empty), the plugin creates a scalar view. If `Expression0', `Expression1' and/or `Expression2' are given (and `Expression3', ..., `Expression8' are all empty) the plugin creates a vector view. Otherwise the plugin creates a tensor view.
 
-In addition to the usual mathematical functions
-(Exp, Log, Sqrt, Sin, Cos, Fabs, etc.) and operators
-(+, -, *, /, ^), all expressions can contain:
+In addition to the usual mathematical functions (Exp, Log, Sqrt, Sin, Cos, Fabs, etc.) and operators (+, -, *, /, ^), all expressions can contain:
 
-- the symbols v0, v1, v2, ..., vn, which represent
-the n components in `View';
+- the symbols v0, v1, v2, ..., vn, which represent the n components in `View';
 
-- the symbols w0, w1, w2, ..., wn, which represent
-the n components of `OtherView', at time step
-`OtherTimeStep';
+- the symbols w0, w1, w2, ..., wn, which represent the n components of `OtherView', at time step `OtherTimeStep';
 
-- the symbols x, y and z, which represent the three
-spatial coordinates.
+- the symbols x, y and z, which represent the three spatial coordinates.
 
-If `TimeStep' < 0, the plugin extracts data from all
-the time steps in the view.
+If `TimeStep' < 0, the plugin extracts data from all the time steps in the view.
 
 If `View' < 0, the plugin is run on the current view.
 
 Plugin(MathEval) creates one new view.
-
 String options:
 @table @code
 @item Expression0
@@ -613,57 +498,36 @@ Default value: @code{-1}
 @end table
 
 @item Plugin(ModifyComponent)
-Plugin(ModifyComponent) sets the `Component'-th
-component of the `TimeStep'-th time step in the
-view `View' to the expression `Expression'.
+Plugin(ModifyComponent) sets the `Component'-th component of the `TimeStep'-th time step in the view `View' to the expression `Expression'.
 
 `Expression' can contain:
 
-- the usual mathematical functions (Log, Sqrt,
-Sin, Cos, Fabs, ...) and operators (+, -, *, /, ^);
+- the usual mathematical functions (Log, Sqrt, Sin, Cos, Fabs, ...) and operators (+, -, *, /, ^);
 
-- the symbols x, y and z, to retrieve the
-coordinates of the current node;
+- the symbols x, y and z, to retrieve the coordinates of the current node;
 
-- the symbols Time and TimeStep, to retrieve the
-current time and time step values;
+- the symbols Time and TimeStep, to retrieve the current time and time step values;
 
-- the symbol v, to retrieve the `Component'-th
-component of the field in `View' at the
-`TimeStep'-th time step;
+- the symbol v, to retrieve the `Component'-th component of the field in `View' at the `TimeStep'-th time step;
 
-- the symbols v0, v1, v2, ..., v8, to retrieve each
-component of the field in `View' at the
-`TimeStep'-th time step;
+- the symbols v0, v1, v2, ..., v8, to retrieve each component of the field in `View' at the `TimeStep'-th time step;
 
-- the symbol w, to retrieve the `Component'-th
-component of the field in `OtherView' at the
-`OtherTimeStep'-th time step. If `OtherView'
-and `View' are based on different spatial grids,
-or if their data types are different, `OtherView'
-is interpolated onto `View';
+- the symbol w, to retrieve the `Component'-th component of the field in `OtherView' at the `OtherTimeStep'-th time step. If `OtherView' and `View' are based on different spatial grids, or if their data types are different, `OtherView' is interpolated onto `View';
 
-- the symbols w0, w1, w2, ..., w8, to retrieve each
-component of the field in `OtherView' at the
-`OtherTimeStep'-th time step.
+- the symbols w0, w1, w2, ..., w8, to retrieve each component of the field in `OtherView' at the `OtherTimeStep'-th time step.
 
-If `TimeStep' < 0, the plugin automatically loops
-over all the time steps in `View' and evaluates
-`Expression' for each one.
+If `TimeStep' < 0, the plugin automatically loops over all the time steps in `View' and evaluates `Expression' for each one.
 
-If `OtherTimeStep' < 0, the plugin uses `TimeStep'
-instead.
+If `OtherTimeStep' < 0, the plugin uses `TimeStep' instead.
 
-If `Component' < 0, the plugin automatically loops
-over all the components in the view and
-evaluates `Expression' for each one.
+If `Component' < 0, the plugin automatically  ops
+over all the components in the view and evaluates `Expression' for each one.
 
 If `View' < 0, the plugin is run on the current view.
 
 If `OtherView' < 0, the plugin uses `View' instead.
 
 Plugin(ModifyComponent) is executed in-place.
-
 String options:
 @table @code
 @item Expression
@@ -684,16 +548,11 @@ Default value: @code{-1}
 @end table
 
 @item Plugin(ModulusPhase)
-Plugin(ModulusPhase) interprets the time steps
-`realPart' and `imaginaryPart' in the view `View'
-as the real and imaginary parts of a complex field
-and replaces them with their corresponding
-modulus and phase.
+Plugin(ModulusPhase) interprets the time steps `realPart' and `imaginaryPart' in the view `View' as the real and imaginary parts of a complex field and replaces them with their corresponding modulus and phase.
 
 If `View' < 0, the plugin is run on the current view.
 
 Plugin(ModulusPhase) is executed in-place.
-
 Numeric options:
 @table @code
 @item RealPart
@@ -705,34 +564,21 @@ Default value: @code{-1}
 @end table
 
 @item Plugin(Particles)
-Plugin(Particles) computes the trajectory
-of particules in the force field given by the
-`TimeStep'-th time step of a vector view
-`View'.
+Plugin(Particles) computes the trajectory of particules in the force field given by the `TimeStep'-th time step of a vector view `View'.
 
-The plugin takes as input a grid defined by the
-3 points (`X0',`Y0',`Z0') (origin), (`X1',`Y1',`Z1')
-(axis of U) and (`X2',`Y2',`Z2') (axis of V).
+The plugin takes as input a grid defined by the 3 points (`X0',`Y0',`Z0') (origin), (`X1',`Y1',`Z1') (axis of U) and (`X2',`Y2',`Z2') (axis of V).
 
-The number of particles along U and V that are to
-be transported is set with the options `NumPointsU'
-and `NumPointsV'. The equation
+The number of particles along U and V that are to be transported is set with the options `NumPointsU' and `NumPointsV'. The equation
 
 A2 * d^2X(t)/dt^2 + A1 * dX(t)/dt + A0 * X(t) = F
 
-is then solved with the initial conditions X(t=0)
-chosen as the grid, dX/dt(t=0)=0, and with F
-interpolated from the vector view.
+is then solved with the initial conditions X(t=0) chosen as the grid, dX/dt(t=0)=0, and with F interpolated from the vector view.
 
-Time stepping is done using a Newmark scheme with
-step size `DT' and `MaxIter' maximum number of
-iterations.
+Time stepping is done using a Newmark scheme with step size `DT' and `MaxIter' maximum number of iterations.
 
 If `View' < 0, the plugin is run on the current view.
 
-Plugin(Particles) creates one new view containing
-multi-step vector points.
-
+Plugin(Particles) creates one new view containing multi-step vector points.
 Numeric options:
 @table @code
 @item X0
@@ -774,13 +620,11 @@ Default value: @code{-1}
 @end table
 
 @item Plugin(Probe)
-Plugin(Probe) gets the value of the view `View' at
-the point (`X',`Y',`Z').
+Plugin(Probe) gets the value of the view `View' at the point (`X',`Y',`Z').
 
 If `View' < 0, the plugin is run on the current view.
 
 Plugin(Probe) creates one new view.
-
 Numeric options:
 @table @code
 @item X
@@ -794,13 +638,11 @@ Default value: @code{-1}
 @end table
 
 @item Plugin(Remove)
-Plugin(Remove) removes the marked items
-from the view `View'.
+Plugin(Remove) removes the marked items from the view `View'.
 
 If `View' < 0, the plugin is run on the current view.
 
 Plugin(Remove) is executed in-place.
-
 Numeric options:
 @table @code
 @item Text2D
@@ -834,13 +676,11 @@ Default value: @code{-1}
 @end table
 
 @item Plugin(Skin)
-Plugin(Skin) extracts the boundary (skin) of
-the view `View'.
+Plugin(Skin) extracts the boundary (skin) of the view `View'.
 
 If `View' < 0, the plugin is run on the current view.
 
 Plugin(Skin) creates one new view.
-
 Numeric options:
 @table @code
 @item View
@@ -848,13 +688,11 @@ Default value: @code{-1}
 @end table
 
 @item Plugin(Smooth)
-Plugin(Smooth) averages the values at the nodes
-of the view `View'.
+Plugin(Smooth) averages the values at the nodes of the view `View'.
 
 If `View' < 0, the plugin is run on the current view.
 
 Plugin(Smooth) is executed in-place.
-
 Numeric options:
 @table @code
 @item View
@@ -862,25 +700,15 @@ Default value: @code{-1}
 @end table
 
 @item Plugin(SphericalRaise)
-Plugin(SphericalRaise) transforms the
-coordinates of the elements in the view
-`View' using the values associated with the
-`TimeStep'-th time step.
+Plugin(SphericalRaise) transforms the coordinates of the elements in the view `View' using the values associated with the `TimeStep'-th time step.
 
-Instead of elevating the nodes along the X, Y
-and Z axes as with the View[`View'].RaiseX,
-View[`View'].RaiseY and View[`View'].RaiseZ
-options, the raise is applied along the radius
-of a sphere centered at (`Xc', `Yc', `Zc').
+Instead of elevating the nodes along the X, Y and Z axes as with the View[`View'].RaiseX, View[`View'].RaiseY and View[`View'].RaiseZ options, the raise is applied along the radius of a sphere centered at (`Xc', `Yc', `Zc').
 
-To produce a standard radiation pattern, set
-`Offset' to minus the radius of the sphere the
-original data lives on.
+To produce a standard radiation pattern, set `Offset' to minus the radius of the sphere the original data lives on.
 
 If `View' < 0, the plugin is run on the current view.
 
 Plugin(SphericalRaise) is executed in-place.
-
 Numeric options:
 @table @code
 @item Xc
@@ -900,38 +728,23 @@ Default value: @code{-1}
 @end table
 
 @item Plugin(StreamLines)
-Plugin(StreamLines) computes stream lines
-from the `TimeStep'-th time step of a vector
-view `View' and optionally interpolates the
-scalar view `OtherView' on the resulting stream
-lines.
+Plugin(StreamLines) computes stream lines from the `TimeStep'-th time step of a vector view `View' and optionally interpolates the scalar view `OtherView' on the resulting stream lines.
 
-The plugin takes as input a grid defined by the
-3 points (`X0',`Y0',`Z0') (origin), (`X1',`Y1',`Z1')
-(axis of U) and (`X2',`Y2',`Z2') (axis of V).
+The plugin takes as input a grid defined by the 3 points (`X0',`Y0',`Z0') (origin), (`X1',`Y1',`Z1') (axis of U) and (`X2',`Y2',`Z2') (axis of V).
 
-The number of points along U and V that are to be
-transported is set with the options `NumPointsU'
-and `NumPointsV'. The equation
+The number of points along U and V that are to be transported is set with the options `NumPointsU' and `NumPointsV'. The equation
 
 dX(t)/dt = V(x,y,z)
 
-is then solved with the initial condition X(t=0)
-chosen as the grid and with V(x,y,z) interpolated
-on the vector view.
+is then solved with the initial condition X(t=0) chosen as the grid and with V(x,y,z) interpolated on the vector view.
 
-The time stepping scheme is a RK44 with step size
-`DT' and `MaxIter' maximum number of iterations.
+The time stepping scheme is a RK44 with step size `DT' and `MaxIter' maximum number of iterations.
 
-If `TimeStep' < 0, the plugin tries to compute
-streamlines of the unsteady flow.
+If `TimeStep' < 0, the plugin tries to compute streamlines of the unsteady flow.
 
 If `View' < 0, the plugin is run on the current view.
 
-Plugin(StreamLines) creates one new view. This
-view contains multi-step vector points if `OtherView'
-< 0, or single-step scalar lines if `OtherView' >= 0.
-
+Plugin(StreamLines) creates one new view. This view contains multi-step vector points if `OtherView' < 0, or single-step scalar lines if `OtherView' >= 0.
 Numeric options:
 @table @code
 @item X0
@@ -969,13 +782,11 @@ Default value: @code{-1}
 @end table
 
 @item Plugin(Tetrahedralize)
-Plugin(Tetrahedralize) tetrahedralizes the points in
-the view `View'.
+Plugin(Tetrahedralize) tetrahedralizes the points in the view `View'.
 
 If `View' < 0, the plugin is run on the current view.
 
 Plugin(Tetrahedralize) creates one new view.
-
 Numeric options:
 @table @code
 @item View
@@ -983,21 +794,17 @@ Default value: @code{-1}
 @end table
 
 @item Plugin(Transform)
-Plugin(Transform) transforms the homogeneous
-node coordinates (x,y,z,1) of the elements in
-the view `View' by the matrix
+Plugin(Transform) transforms the homogeneous node coordinates (x,y,z,1) of the elements in the view `View' by the matrix
 
 [`A11' `A12' `A13' `Tx']
 [`A21' `A22' `A23' `Ty']
 [`A31' `A32' `A33' `Tz'].
 
-If `SwapOrientation' is set, the orientation of the
-elements is reversed.
+If `SwapOrientation' is set, the orientation of the elements is reversed.
 
 If `View' < 0, the plugin is run on the current view.
 
 Plugin(Transform) is executed in-place.
-
 Numeric options:
 @table @code
 @item A11
@@ -1031,15 +838,11 @@ Default value: @code{-1}
 @end table
 
 @item Plugin(Triangulate)
-Plugin(Triangulate) triangulates the points in the
-view `View', assuming that all the points belong
-to a surface that can be projected one-to-one
-onto a plane.
+Plugin(Triangulate) triangulates the points in the view `View', assuming that all the points belong to a surface that can be projected one-to-one onto a plane.
 
 If `View' < 0, the plugin is run on the current view.
 
 Plugin(Triangulate) creates one new view.
-
 Numeric options:
 @table @code
 @item View
@@ -1047,21 +850,13 @@ Default value: @code{-1}
 @end table
 
 @item Plugin(Warp)
-Plugin(Warp) transforms the elements in the
-view `View' by adding to their node coordinates
-the vector field stored in the `TimeStep'-th time
-step of the view `OtherView', scaled by `Factor'.
+Plugin(Warp) transforms the elements in the view `View' by adding to their node coordinates the vector field stored in the `TimeStep'-th time step of the view `OtherView', scaled by `Factor'.
 
 If `View' < 0, the plugin is run on the current view.
 
-If `OtherView' < 0, the vector field is taken as the
-field of surface normals multiplied by the `TimeStep'
-value in `View'. (The smoothing of the surface
-normals is controlled by the `SmoothingAngle'
-parameter.)
+If `OtherView' < 0, the vector field is taken as the field of surface normals multiplied by the `TimeStep' value in `View'. (The smoothing of the surface normals is controlled by the `SmoothingAngle' parameter.)
 
 Plugin(Warp) is executed in-place.
-
 Numeric options:
 @table @code
 @item Factor
-- 
GitLab