diff --git a/Parser/Gmsh.tab.cpp b/Parser/Gmsh.tab.cpp
index 73bef4572be9f5a9bacccd8f1c9333679346be7f..9ea51029a9b77c988bca0eeaf50e8455d2062689 100644
--- a/Parser/Gmsh.tab.cpp
+++ b/Parser/Gmsh.tab.cpp
@@ -1055,21 +1055,21 @@ static const yytype_uint16 yyrline[] =
     2727,  2739,  2738,  2750,  2749,  2761,  2760,  2772,  2771,  2783,
     2782,  2797,  2800,  2806,  2815,  2835,  2858,  2862,  2886,  2889,
     2905,  2908,  2924,  2927,  2940,  2943,  2949,  2952,  2959,  3015,
-    3085,  3090,  3157,  3200,  3224,  3250,  3291,  3314,  3337,  3340,
-    3349,  3353,  3370,  3407,  3443,  3478,  3518,  3519,  3520,  3521,
-    3522,  3523,  3524,  3525,  3526,  3533,  3534,  3535,  3536,  3537,
-    3538,  3539,  3540,  3541,  3542,  3543,  3544,  3545,  3546,  3547,
-    3548,  3549,  3550,  3551,  3552,  3553,  3554,  3555,  3556,  3557,
-    3558,  3559,  3560,  3561,  3562,  3563,  3564,  3566,  3567,  3568,
-    3569,  3570,  3571,  3572,  3573,  3574,  3575,  3576,  3577,  3578,
-    3579,  3580,  3581,  3582,  3583,  3584,  3585,  3586,  3595,  3596,
-    3597,  3598,  3599,  3600,  3601,  3605,  3624,  3642,  3657,  3667,
-    3683,  3701,  3706,  3711,  3721,  3731,  3739,  3743,  3747,  3751,
-    3755,  3762,  3766,  3770,  3774,  3781,  3786,  3793,  3798,  3802,
-    3807,  3811,  3819,  3830,  3834,  3846,  3854,  3862,  3869,  3880,
-    3900,  3910,  3920,  3930,  3950,  3955,  3959,  3963,  3975,  3979,
-    3991,  3998,  4008,  4012,  4027,  4032,  4039,  4043,  4056,  4064,
-    4075,  4079,  4087,  4095,  4103,  4111,  4125,  4139,  4143
+    3085,  3090,  3157,  3200,  3224,  3250,  3292,  3315,  3338,  3341,
+    3350,  3354,  3371,  3408,  3444,  3479,  3519,  3520,  3521,  3522,
+    3523,  3524,  3525,  3526,  3527,  3534,  3535,  3536,  3537,  3538,
+    3539,  3540,  3541,  3542,  3543,  3544,  3545,  3546,  3547,  3548,
+    3549,  3550,  3551,  3552,  3553,  3554,  3555,  3556,  3557,  3558,
+    3559,  3560,  3561,  3562,  3563,  3564,  3565,  3567,  3568,  3569,
+    3570,  3571,  3572,  3573,  3574,  3575,  3576,  3577,  3578,  3579,
+    3580,  3581,  3582,  3583,  3584,  3585,  3586,  3587,  3596,  3597,
+    3598,  3599,  3600,  3601,  3602,  3606,  3625,  3643,  3658,  3668,
+    3684,  3702,  3707,  3712,  3722,  3732,  3740,  3744,  3748,  3752,
+    3756,  3763,  3767,  3771,  3775,  3782,  3787,  3794,  3799,  3803,
+    3808,  3812,  3820,  3831,  3835,  3847,  3855,  3863,  3870,  3881,
+    3901,  3911,  3921,  3931,  3951,  3956,  3960,  3964,  3976,  3980,
+    3992,  3999,  4009,  4013,  4028,  4033,  4040,  4044,  4057,  4065,
+    4076,  4080,  4088,  4096,  4104,  4112,  4126,  4140,  4144
 };
 #endif
 
@@ -7526,11 +7526,11 @@ yyreduce:
     break;
 
   case 245:
-#line 3251 "Gmsh.y"
+#line 3252 "Gmsh.y"
     {
       if (List_Nbr((yyvsp[(5) - (12)].l)) != List_Nbr((yyvsp[(10) - (12)].l))){
-	yymsg(0, "Periodic Surface: the number of masters (%d) is not equal to the number of slaves(%d)",
-              List_Nbr((yyvsp[(5) - (12)].l)), List_Nbr((yyvsp[(10) - (12)].l)));
+	yymsg(0, "Periodic Surface: the number of masters (%d) is not equal "
+              "to the number of slaves(%d)", List_Nbr((yyvsp[(5) - (12)].l)), List_Nbr((yyvsp[(10) - (12)].l)));
       }
 
       double d_master = (yyvsp[(3) - (12)].d), d_slave = (yyvsp[(8) - (12)].d);
@@ -7563,7 +7563,7 @@ yyreduce:
     break;
 
   case 246:
-#line 3292 "Gmsh.y"
+#line 3293 "Gmsh.y"
     { 
       Surface *s = FindSurface((int)(yyvsp[(8) - (10)].d));
       if(s){
@@ -7589,7 +7589,7 @@ yyreduce:
     break;
 
   case 247:
-#line 3315 "Gmsh.y"
+#line 3316 "Gmsh.y"
     {
       Surface *s = FindSurface((int)(yyvsp[(8) - (10)].d));
       if(s){
@@ -7615,26 +7615,26 @@ yyreduce:
     break;
 
   case 248:
-#line 3338 "Gmsh.y"
+#line 3339 "Gmsh.y"
     {
     ;}
     break;
 
   case 249:
-#line 3341 "Gmsh.y"
+#line 3342 "Gmsh.y"
     {
     ;}
     break;
 
   case 250:
-#line 3350 "Gmsh.y"
+#line 3351 "Gmsh.y"
     { 
       ReplaceAllDuplicates();
     ;}
     break;
 
   case 251:
-#line 3354 "Gmsh.y"
+#line 3355 "Gmsh.y"
     { 
       if(!strcmp((yyvsp[(2) - (3)].c), "Geometry"))
         ReplaceAllDuplicates();
@@ -7647,7 +7647,7 @@ yyreduce:
     break;
 
   case 252:
-#line 3371 "Gmsh.y"
+#line 3372 "Gmsh.y"
     {
     
     List_T *temp = ListOfDouble2ListOfInt((yyvsp[(7) - (11)].l));
@@ -7680,13 +7680,13 @@ yyreduce:
     homology->computeRanks();
     delete homology;
     #else
-    yymsg(0, "Gmsh needs to be configured with option Kbipack to use homology computation.");    
+    yymsg(0, "Gmsh needs to be configured with option Kbipack to use homology computation");
     #endif
     ;}
     break;
 
   case 253:
-#line 3408 "Gmsh.y"
+#line 3409 "Gmsh.y"
     {
     List_T *temp = ListOfDouble2ListOfInt((yyvsp[(7) - (11)].l));
     std::vector<int> domain;
@@ -7718,13 +7718,13 @@ yyreduce:
     homology->findGenerators();  
     delete homology;
     #else
-    yymsg(0, "Gmsh needs to be configured with option Kbipack to use homology computation.");
+    yymsg(0, "Gmsh needs to be configured with option Kbipack to use homology computation");
     #endif
     ;}
     break;
 
   case 254:
-#line 3444 "Gmsh.y"
+#line 3445 "Gmsh.y"
     {
     List_T *temp = ListOfDouble2ListOfInt((yyvsp[(7) - (11)].l));
     std::vector<int> domain;
@@ -7756,13 +7756,13 @@ yyreduce:
     homology->findDualGenerators();
     delete homology;
     #else
-    yymsg(0, "Gmsh needs to be configured with option Kbipack to use homology computation.");
+    yymsg(0, "Gmsh needs to be configured with option Kbipack to use homology computation");
     #endif
     ;}
     break;
 
   case 255:
-#line 3479 "Gmsh.y"
+#line 3480 "Gmsh.y"
     {
     List_T *temp = ListOfDouble2ListOfInt((yyvsp[(7) - (11)].l));
     std::vector<int> domain;
@@ -7794,53 +7794,53 @@ yyreduce:
     homology->findHomSequence();
     delete homology;
     #else
-    yymsg(0, "Gmsh needs to be configured with option Kbipack to use homology computation.");
+    yymsg(0, "Gmsh needs to be configured with option Kbipack to use homology computation");
     #endif
     ;}
     break;
 
   case 256:
-#line 3518 "Gmsh.y"
+#line 3519 "Gmsh.y"
     { (yyval.d) = (yyvsp[(1) - (1)].d);           ;}
     break;
 
   case 257:
-#line 3519 "Gmsh.y"
+#line 3520 "Gmsh.y"
     { (yyval.d) = (yyvsp[(2) - (3)].d);           ;}
     break;
 
   case 258:
-#line 3520 "Gmsh.y"
+#line 3521 "Gmsh.y"
     { (yyval.d) = -(yyvsp[(2) - (2)].d);          ;}
     break;
 
   case 259:
-#line 3521 "Gmsh.y"
+#line 3522 "Gmsh.y"
     { (yyval.d) = (yyvsp[(2) - (2)].d);           ;}
     break;
 
   case 260:
-#line 3522 "Gmsh.y"
+#line 3523 "Gmsh.y"
     { (yyval.d) = !(yyvsp[(2) - (2)].d);          ;}
     break;
 
   case 261:
-#line 3523 "Gmsh.y"
+#line 3524 "Gmsh.y"
     { (yyval.d) = (yyvsp[(1) - (3)].d) - (yyvsp[(3) - (3)].d);      ;}
     break;
 
   case 262:
-#line 3524 "Gmsh.y"
+#line 3525 "Gmsh.y"
     { (yyval.d) = (yyvsp[(1) - (3)].d) + (yyvsp[(3) - (3)].d);      ;}
     break;
 
   case 263:
-#line 3525 "Gmsh.y"
+#line 3526 "Gmsh.y"
     { (yyval.d) = (yyvsp[(1) - (3)].d) * (yyvsp[(3) - (3)].d);      ;}
     break;
 
   case 264:
-#line 3527 "Gmsh.y"
+#line 3528 "Gmsh.y"
     { 
       if(!(yyvsp[(3) - (3)].d))
 	yymsg(0, "Division by zero in '%g / %g'", (yyvsp[(1) - (3)].d), (yyvsp[(3) - (3)].d));
@@ -7850,307 +7850,307 @@ yyreduce:
     break;
 
   case 265:
-#line 3533 "Gmsh.y"
+#line 3534 "Gmsh.y"
     { (yyval.d) = (int)(yyvsp[(1) - (3)].d) % (int)(yyvsp[(3) - (3)].d);  ;}
     break;
 
   case 266:
-#line 3534 "Gmsh.y"
+#line 3535 "Gmsh.y"
     { (yyval.d) = pow((yyvsp[(1) - (3)].d), (yyvsp[(3) - (3)].d));  ;}
     break;
 
   case 267:
-#line 3535 "Gmsh.y"
+#line 3536 "Gmsh.y"
     { (yyval.d) = (yyvsp[(1) - (3)].d) < (yyvsp[(3) - (3)].d);      ;}
     break;
 
   case 268:
-#line 3536 "Gmsh.y"
+#line 3537 "Gmsh.y"
     { (yyval.d) = (yyvsp[(1) - (3)].d) > (yyvsp[(3) - (3)].d);      ;}
     break;
 
   case 269:
-#line 3537 "Gmsh.y"
+#line 3538 "Gmsh.y"
     { (yyval.d) = (yyvsp[(1) - (3)].d) <= (yyvsp[(3) - (3)].d);     ;}
     break;
 
   case 270:
-#line 3538 "Gmsh.y"
+#line 3539 "Gmsh.y"
     { (yyval.d) = (yyvsp[(1) - (3)].d) >= (yyvsp[(3) - (3)].d);     ;}
     break;
 
   case 271:
-#line 3539 "Gmsh.y"
+#line 3540 "Gmsh.y"
     { (yyval.d) = (yyvsp[(1) - (3)].d) == (yyvsp[(3) - (3)].d);     ;}
     break;
 
   case 272:
-#line 3540 "Gmsh.y"
+#line 3541 "Gmsh.y"
     { (yyval.d) = (yyvsp[(1) - (3)].d) != (yyvsp[(3) - (3)].d);     ;}
     break;
 
   case 273:
-#line 3541 "Gmsh.y"
+#line 3542 "Gmsh.y"
     { (yyval.d) = (yyvsp[(1) - (3)].d) && (yyvsp[(3) - (3)].d);     ;}
     break;
 
   case 274:
-#line 3542 "Gmsh.y"
+#line 3543 "Gmsh.y"
     { (yyval.d) = (yyvsp[(1) - (3)].d) || (yyvsp[(3) - (3)].d);     ;}
     break;
 
   case 275:
-#line 3543 "Gmsh.y"
+#line 3544 "Gmsh.y"
     { (yyval.d) = (yyvsp[(1) - (5)].d) ? (yyvsp[(3) - (5)].d) : (yyvsp[(5) - (5)].d); ;}
     break;
 
   case 276:
-#line 3544 "Gmsh.y"
+#line 3545 "Gmsh.y"
     { (yyval.d) = exp((yyvsp[(3) - (4)].d));      ;}
     break;
 
   case 277:
-#line 3545 "Gmsh.y"
+#line 3546 "Gmsh.y"
     { (yyval.d) = log((yyvsp[(3) - (4)].d));      ;}
     break;
 
   case 278:
-#line 3546 "Gmsh.y"
+#line 3547 "Gmsh.y"
     { (yyval.d) = log10((yyvsp[(3) - (4)].d));    ;}
     break;
 
   case 279:
-#line 3547 "Gmsh.y"
+#line 3548 "Gmsh.y"
     { (yyval.d) = sqrt((yyvsp[(3) - (4)].d));     ;}
     break;
 
   case 280:
-#line 3548 "Gmsh.y"
+#line 3549 "Gmsh.y"
     { (yyval.d) = sin((yyvsp[(3) - (4)].d));      ;}
     break;
 
   case 281:
-#line 3549 "Gmsh.y"
+#line 3550 "Gmsh.y"
     { (yyval.d) = asin((yyvsp[(3) - (4)].d));     ;}
     break;
 
   case 282:
-#line 3550 "Gmsh.y"
+#line 3551 "Gmsh.y"
     { (yyval.d) = cos((yyvsp[(3) - (4)].d));      ;}
     break;
 
   case 283:
-#line 3551 "Gmsh.y"
+#line 3552 "Gmsh.y"
     { (yyval.d) = acos((yyvsp[(3) - (4)].d));     ;}
     break;
 
   case 284:
-#line 3552 "Gmsh.y"
+#line 3553 "Gmsh.y"
     { (yyval.d) = tan((yyvsp[(3) - (4)].d));      ;}
     break;
 
   case 285:
-#line 3553 "Gmsh.y"
+#line 3554 "Gmsh.y"
     { (yyval.d) = atan((yyvsp[(3) - (4)].d));     ;}
     break;
 
   case 286:
-#line 3554 "Gmsh.y"
+#line 3555 "Gmsh.y"
     { (yyval.d) = atan2((yyvsp[(3) - (6)].d), (yyvsp[(5) - (6)].d));;}
     break;
 
   case 287:
-#line 3555 "Gmsh.y"
+#line 3556 "Gmsh.y"
     { (yyval.d) = sinh((yyvsp[(3) - (4)].d));     ;}
     break;
 
   case 288:
-#line 3556 "Gmsh.y"
+#line 3557 "Gmsh.y"
     { (yyval.d) = cosh((yyvsp[(3) - (4)].d));     ;}
     break;
 
   case 289:
-#line 3557 "Gmsh.y"
+#line 3558 "Gmsh.y"
     { (yyval.d) = tanh((yyvsp[(3) - (4)].d));     ;}
     break;
 
   case 290:
-#line 3558 "Gmsh.y"
+#line 3559 "Gmsh.y"
     { (yyval.d) = fabs((yyvsp[(3) - (4)].d));     ;}
     break;
 
   case 291:
-#line 3559 "Gmsh.y"
+#line 3560 "Gmsh.y"
     { (yyval.d) = floor((yyvsp[(3) - (4)].d));    ;}
     break;
 
   case 292:
-#line 3560 "Gmsh.y"
+#line 3561 "Gmsh.y"
     { (yyval.d) = ceil((yyvsp[(3) - (4)].d));     ;}
     break;
 
   case 293:
-#line 3561 "Gmsh.y"
+#line 3562 "Gmsh.y"
     { (yyval.d) = fmod((yyvsp[(3) - (6)].d), (yyvsp[(5) - (6)].d)); ;}
     break;
 
   case 294:
-#line 3562 "Gmsh.y"
+#line 3563 "Gmsh.y"
     { (yyval.d) = fmod((yyvsp[(3) - (6)].d), (yyvsp[(5) - (6)].d)); ;}
     break;
 
   case 295:
-#line 3563 "Gmsh.y"
+#line 3564 "Gmsh.y"
     { (yyval.d) = sqrt((yyvsp[(3) - (6)].d) * (yyvsp[(3) - (6)].d) + (yyvsp[(5) - (6)].d) * (yyvsp[(5) - (6)].d)); ;}
     break;
 
   case 296:
-#line 3564 "Gmsh.y"
+#line 3565 "Gmsh.y"
     { (yyval.d) = (yyvsp[(3) - (4)].d) * (double)rand() / (double)RAND_MAX; ;}
     break;
 
   case 297:
-#line 3566 "Gmsh.y"
+#line 3567 "Gmsh.y"
     { (yyval.d) = exp((yyvsp[(3) - (4)].d));      ;}
     break;
 
   case 298:
-#line 3567 "Gmsh.y"
+#line 3568 "Gmsh.y"
     { (yyval.d) = log((yyvsp[(3) - (4)].d));      ;}
     break;
 
   case 299:
-#line 3568 "Gmsh.y"
+#line 3569 "Gmsh.y"
     { (yyval.d) = log10((yyvsp[(3) - (4)].d));    ;}
     break;
 
   case 300:
-#line 3569 "Gmsh.y"
+#line 3570 "Gmsh.y"
     { (yyval.d) = sqrt((yyvsp[(3) - (4)].d));     ;}
     break;
 
   case 301:
-#line 3570 "Gmsh.y"
+#line 3571 "Gmsh.y"
     { (yyval.d) = sin((yyvsp[(3) - (4)].d));      ;}
     break;
 
   case 302:
-#line 3571 "Gmsh.y"
+#line 3572 "Gmsh.y"
     { (yyval.d) = asin((yyvsp[(3) - (4)].d));     ;}
     break;
 
   case 303:
-#line 3572 "Gmsh.y"
+#line 3573 "Gmsh.y"
     { (yyval.d) = cos((yyvsp[(3) - (4)].d));      ;}
     break;
 
   case 304:
-#line 3573 "Gmsh.y"
+#line 3574 "Gmsh.y"
     { (yyval.d) = acos((yyvsp[(3) - (4)].d));     ;}
     break;
 
   case 305:
-#line 3574 "Gmsh.y"
+#line 3575 "Gmsh.y"
     { (yyval.d) = tan((yyvsp[(3) - (4)].d));      ;}
     break;
 
   case 306:
-#line 3575 "Gmsh.y"
+#line 3576 "Gmsh.y"
     { (yyval.d) = atan((yyvsp[(3) - (4)].d));     ;}
     break;
 
   case 307:
-#line 3576 "Gmsh.y"
+#line 3577 "Gmsh.y"
     { (yyval.d) = atan2((yyvsp[(3) - (6)].d), (yyvsp[(5) - (6)].d));;}
     break;
 
   case 308:
-#line 3577 "Gmsh.y"
+#line 3578 "Gmsh.y"
     { (yyval.d) = sinh((yyvsp[(3) - (4)].d));     ;}
     break;
 
   case 309:
-#line 3578 "Gmsh.y"
+#line 3579 "Gmsh.y"
     { (yyval.d) = cosh((yyvsp[(3) - (4)].d));     ;}
     break;
 
   case 310:
-#line 3579 "Gmsh.y"
+#line 3580 "Gmsh.y"
     { (yyval.d) = tanh((yyvsp[(3) - (4)].d));     ;}
     break;
 
   case 311:
-#line 3580 "Gmsh.y"
+#line 3581 "Gmsh.y"
     { (yyval.d) = fabs((yyvsp[(3) - (4)].d));     ;}
     break;
 
   case 312:
-#line 3581 "Gmsh.y"
+#line 3582 "Gmsh.y"
     { (yyval.d) = floor((yyvsp[(3) - (4)].d));    ;}
     break;
 
   case 313:
-#line 3582 "Gmsh.y"
+#line 3583 "Gmsh.y"
     { (yyval.d) = ceil((yyvsp[(3) - (4)].d));     ;}
     break;
 
   case 314:
-#line 3583 "Gmsh.y"
+#line 3584 "Gmsh.y"
     { (yyval.d) = fmod((yyvsp[(3) - (6)].d), (yyvsp[(5) - (6)].d)); ;}
     break;
 
   case 315:
-#line 3584 "Gmsh.y"
+#line 3585 "Gmsh.y"
     { (yyval.d) = fmod((yyvsp[(3) - (6)].d), (yyvsp[(5) - (6)].d)); ;}
     break;
 
   case 316:
-#line 3585 "Gmsh.y"
+#line 3586 "Gmsh.y"
     { (yyval.d) = sqrt((yyvsp[(3) - (6)].d) * (yyvsp[(3) - (6)].d) + (yyvsp[(5) - (6)].d) * (yyvsp[(5) - (6)].d)); ;}
     break;
 
   case 317:
-#line 3586 "Gmsh.y"
+#line 3587 "Gmsh.y"
     { (yyval.d) = (yyvsp[(3) - (4)].d) * (double)rand() / (double)RAND_MAX; ;}
     break;
 
   case 318:
-#line 3595 "Gmsh.y"
+#line 3596 "Gmsh.y"
     { (yyval.d) = (yyvsp[(1) - (1)].d); ;}
     break;
 
   case 319:
-#line 3596 "Gmsh.y"
+#line 3597 "Gmsh.y"
     { (yyval.d) = 3.141592653589793; ;}
     break;
 
   case 320:
-#line 3597 "Gmsh.y"
+#line 3598 "Gmsh.y"
     { (yyval.d) = Msg::GetCommRank(); ;}
     break;
 
   case 321:
-#line 3598 "Gmsh.y"
+#line 3599 "Gmsh.y"
     { (yyval.d) = Msg::GetCommSize(); ;}
     break;
 
   case 322:
-#line 3599 "Gmsh.y"
+#line 3600 "Gmsh.y"
     { (yyval.d) = GetGmshMajorVersion(); ;}
     break;
 
   case 323:
-#line 3600 "Gmsh.y"
+#line 3601 "Gmsh.y"
     { (yyval.d) = GetGmshMinorVersion(); ;}
     break;
 
   case 324:
-#line 3601 "Gmsh.y"
+#line 3602 "Gmsh.y"
     { (yyval.d) = GetGmshPatchVersion(); ;}
     break;
 
   case 325:
-#line 3606 "Gmsh.y"
+#line 3607 "Gmsh.y"
     {
       if(!gmsh_yysymbols.count((yyvsp[(1) - (1)].c))){
 	yymsg(0, "Unknown variable '%s'", (yyvsp[(1) - (1)].c));
@@ -8169,7 +8169,7 @@ yyreduce:
     break;
 
   case 326:
-#line 3625 "Gmsh.y"
+#line 3626 "Gmsh.y"
     {
       char tmpstring[1024];
       sprintf(tmpstring, "%s_%d", (yyvsp[(1) - (5)].c), (int)(yyvsp[(4) - (5)].d)) ;
@@ -8190,7 +8190,7 @@ yyreduce:
     break;
 
   case 327:
-#line 3643 "Gmsh.y"
+#line 3644 "Gmsh.y"
     {
       int index = (int)(yyvsp[(3) - (4)].d);
       if(!gmsh_yysymbols.count((yyvsp[(1) - (4)].c))){
@@ -8208,7 +8208,7 @@ yyreduce:
     break;
 
   case 328:
-#line 3658 "Gmsh.y"
+#line 3659 "Gmsh.y"
     {
       if(!gmsh_yysymbols.count((yyvsp[(2) - (4)].c))){
 	yymsg(0, "Unknown variable '%s'", (yyvsp[(2) - (4)].c));
@@ -8221,7 +8221,7 @@ yyreduce:
     break;
 
   case 329:
-#line 3668 "Gmsh.y"
+#line 3669 "Gmsh.y"
     {
       if(!gmsh_yysymbols.count((yyvsp[(1) - (2)].c))){
 	yymsg(0, "Unknown variable '%s'", (yyvsp[(1) - (2)].c));
@@ -8240,7 +8240,7 @@ yyreduce:
     break;
 
   case 330:
-#line 3684 "Gmsh.y"
+#line 3685 "Gmsh.y"
     {
       int index = (int)(yyvsp[(3) - (5)].d);
       if(!gmsh_yysymbols.count((yyvsp[(1) - (5)].c))){
@@ -8258,7 +8258,7 @@ yyreduce:
     break;
 
   case 331:
-#line 3702 "Gmsh.y"
+#line 3703 "Gmsh.y"
     {
       NumberOption(GMSH_GET, (yyvsp[(1) - (3)].c), 0, (yyvsp[(3) - (3)].c), (yyval.d));
       Free((yyvsp[(1) - (3)].c)); Free((yyvsp[(3) - (3)].c));
@@ -8266,7 +8266,7 @@ yyreduce:
     break;
 
   case 332:
-#line 3707 "Gmsh.y"
+#line 3708 "Gmsh.y"
     {
       NumberOption(GMSH_GET, (yyvsp[(1) - (6)].c), (int)(yyvsp[(3) - (6)].d), (yyvsp[(6) - (6)].c), (yyval.d));
       Free((yyvsp[(1) - (6)].c)); Free((yyvsp[(6) - (6)].c));
@@ -8274,7 +8274,7 @@ yyreduce:
     break;
 
   case 333:
-#line 3712 "Gmsh.y"
+#line 3713 "Gmsh.y"
     {
       double d = 0.;
       if(NumberOption(GMSH_GET, (yyvsp[(1) - (4)].c), 0, (yyvsp[(3) - (4)].c), d)){
@@ -8287,7 +8287,7 @@ yyreduce:
     break;
 
   case 334:
-#line 3722 "Gmsh.y"
+#line 3723 "Gmsh.y"
     {
       double d = 0.;
       if(NumberOption(GMSH_GET, (yyvsp[(1) - (7)].c), (int)(yyvsp[(3) - (7)].d), (yyvsp[(6) - (7)].c), d)){
@@ -8300,7 +8300,7 @@ yyreduce:
     break;
 
   case 335:
-#line 3732 "Gmsh.y"
+#line 3733 "Gmsh.y"
     { 
       (yyval.d) = Msg::GetValue((yyvsp[(3) - (6)].c), (yyvsp[(5) - (6)].d));
       Free((yyvsp[(3) - (6)].c));
@@ -8308,70 +8308,70 @@ yyreduce:
     break;
 
   case 336:
-#line 3740 "Gmsh.y"
+#line 3741 "Gmsh.y"
     {
       memcpy((yyval.v), (yyvsp[(1) - (1)].v), 5*sizeof(double));
     ;}
     break;
 
   case 337:
-#line 3744 "Gmsh.y"
+#line 3745 "Gmsh.y"
     {
       for(int i = 0; i < 5; i++) (yyval.v)[i] = -(yyvsp[(2) - (2)].v)[i];
     ;}
     break;
 
   case 338:
-#line 3748 "Gmsh.y"
+#line 3749 "Gmsh.y"
     { 
       for(int i = 0; i < 5; i++) (yyval.v)[i] = (yyvsp[(2) - (2)].v)[i];
     ;}
     break;
 
   case 339:
-#line 3752 "Gmsh.y"
+#line 3753 "Gmsh.y"
     { 
       for(int i = 0; i < 5; i++) (yyval.v)[i] = (yyvsp[(1) - (3)].v)[i] - (yyvsp[(3) - (3)].v)[i];
     ;}
     break;
 
   case 340:
-#line 3756 "Gmsh.y"
+#line 3757 "Gmsh.y"
     {
       for(int i = 0; i < 5; i++) (yyval.v)[i] = (yyvsp[(1) - (3)].v)[i] + (yyvsp[(3) - (3)].v)[i];
     ;}
     break;
 
   case 341:
-#line 3763 "Gmsh.y"
+#line 3764 "Gmsh.y"
     { 
       (yyval.v)[0] = (yyvsp[(2) - (11)].d);  (yyval.v)[1] = (yyvsp[(4) - (11)].d);  (yyval.v)[2] = (yyvsp[(6) - (11)].d);  (yyval.v)[3] = (yyvsp[(8) - (11)].d); (yyval.v)[4] = (yyvsp[(10) - (11)].d);
     ;}
     break;
 
   case 342:
-#line 3767 "Gmsh.y"
+#line 3768 "Gmsh.y"
     { 
       (yyval.v)[0] = (yyvsp[(2) - (9)].d);  (yyval.v)[1] = (yyvsp[(4) - (9)].d);  (yyval.v)[2] = (yyvsp[(6) - (9)].d);  (yyval.v)[3] = (yyvsp[(8) - (9)].d); (yyval.v)[4] = 1.0;
     ;}
     break;
 
   case 343:
-#line 3771 "Gmsh.y"
+#line 3772 "Gmsh.y"
     {
       (yyval.v)[0] = (yyvsp[(2) - (7)].d);  (yyval.v)[1] = (yyvsp[(4) - (7)].d);  (yyval.v)[2] = (yyvsp[(6) - (7)].d);  (yyval.v)[3] = 0.0; (yyval.v)[4] = 1.0;
     ;}
     break;
 
   case 344:
-#line 3775 "Gmsh.y"
+#line 3776 "Gmsh.y"
     {
       (yyval.v)[0] = (yyvsp[(2) - (7)].d);  (yyval.v)[1] = (yyvsp[(4) - (7)].d);  (yyval.v)[2] = (yyvsp[(6) - (7)].d);  (yyval.v)[3] = 0.0; (yyval.v)[4] = 1.0;
     ;}
     break;
 
   case 345:
-#line 3782 "Gmsh.y"
+#line 3783 "Gmsh.y"
     {
       (yyval.l) = List_Create(2, 1, sizeof(List_T*));
       List_Add((yyval.l), &((yyvsp[(1) - (1)].l)));
@@ -8379,14 +8379,14 @@ yyreduce:
     break;
 
   case 346:
-#line 3787 "Gmsh.y"
+#line 3788 "Gmsh.y"
     {
       List_Add((yyval.l), &((yyvsp[(3) - (3)].l)));
     ;}
     break;
 
   case 347:
-#line 3794 "Gmsh.y"
+#line 3795 "Gmsh.y"
     {
       (yyval.l) = List_Create(2, 1, sizeof(double));
       List_Add((yyval.l), &((yyvsp[(1) - (1)].d)));
@@ -8394,14 +8394,14 @@ yyreduce:
     break;
 
   case 348:
-#line 3799 "Gmsh.y"
+#line 3800 "Gmsh.y"
     {
       (yyval.l) = (yyvsp[(1) - (1)].l);
     ;}
     break;
 
   case 349:
-#line 3803 "Gmsh.y"
+#line 3804 "Gmsh.y"
     {
       // creates an empty list
       (yyval.l) = List_Create(2, 1, sizeof(double));
@@ -8409,14 +8409,14 @@ yyreduce:
     break;
 
   case 350:
-#line 3808 "Gmsh.y"
+#line 3809 "Gmsh.y"
     {
       (yyval.l) = (yyvsp[(2) - (3)].l);
     ;}
     break;
 
   case 351:
-#line 3812 "Gmsh.y"
+#line 3813 "Gmsh.y"
     {
       (yyval.l) = (yyvsp[(3) - (4)].l);
       for(int i = 0; i < List_Nbr((yyval.l)); i++){
@@ -8427,7 +8427,7 @@ yyreduce:
     break;
 
   case 352:
-#line 3820 "Gmsh.y"
+#line 3821 "Gmsh.y"
     {
       (yyval.l) = (yyvsp[(4) - (5)].l);
       for(int i = 0; i < List_Nbr((yyval.l)); i++){
@@ -8438,14 +8438,14 @@ yyreduce:
     break;
 
   case 353:
-#line 3831 "Gmsh.y"
+#line 3832 "Gmsh.y"
     { 
       (yyval.l) = (yyvsp[(1) - (1)].l); 
     ;}
     break;
 
   case 354:
-#line 3835 "Gmsh.y"
+#line 3836 "Gmsh.y"
     {
       if(!strcmp((yyvsp[(1) - (1)].c), "*") || !strcmp((yyvsp[(1) - (1)].c), "all"))
         (yyval.l) = 0;
@@ -8457,7 +8457,7 @@ yyreduce:
     break;
 
   case 355:
-#line 3847 "Gmsh.y"
+#line 3848 "Gmsh.y"
     {
       (yyval.l) = (yyvsp[(2) - (2)].l);
       for(int i = 0; i < List_Nbr((yyval.l)); i++){
@@ -8468,7 +8468,7 @@ yyreduce:
     break;
 
   case 356:
-#line 3855 "Gmsh.y"
+#line 3856 "Gmsh.y"
     {
       (yyval.l) = (yyvsp[(3) - (3)].l);
       for(int i = 0; i < List_Nbr((yyval.l)); i++){
@@ -8479,7 +8479,7 @@ yyreduce:
     break;
 
   case 357:
-#line 3863 "Gmsh.y"
+#line 3864 "Gmsh.y"
     { 
       (yyval.l) = List_Create(2, 1, sizeof(double)); 
       for(double d = (yyvsp[(1) - (3)].d); ((yyvsp[(1) - (3)].d) < (yyvsp[(3) - (3)].d)) ? (d <= (yyvsp[(3) - (3)].d)) : (d >= (yyvsp[(3) - (3)].d)); 
@@ -8489,7 +8489,7 @@ yyreduce:
     break;
 
   case 358:
-#line 3870 "Gmsh.y"
+#line 3871 "Gmsh.y"
     {
       (yyval.l) = List_Create(2, 1, sizeof(double)); 
       if(!(yyvsp[(5) - (5)].d) || ((yyvsp[(1) - (5)].d) < (yyvsp[(3) - (5)].d) && (yyvsp[(5) - (5)].d) < 0) || ((yyvsp[(1) - (5)].d) > (yyvsp[(3) - (5)].d) && (yyvsp[(5) - (5)].d) > 0)){
@@ -8503,7 +8503,7 @@ yyreduce:
     break;
 
   case 359:
-#line 3881 "Gmsh.y"
+#line 3882 "Gmsh.y"
     {
       // Returns the coordinates of a point and fills a list with it.
       // This allows to ensure e.g. that relative point positions are
@@ -8526,7 +8526,7 @@ yyreduce:
     break;
 
   case 360:
-#line 3901 "Gmsh.y"
+#line 3902 "Gmsh.y"
     {
       (yyval.l) = List_Create(List_Nbr((yyvsp[(1) - (1)].l)), 1, sizeof(double));
       for(int i = 0; i < List_Nbr((yyvsp[(1) - (1)].l)); i++){
@@ -8539,7 +8539,7 @@ yyreduce:
     break;
 
   case 361:
-#line 3911 "Gmsh.y"
+#line 3912 "Gmsh.y"
     {
       (yyval.l) = List_Create(List_Nbr((yyvsp[(1) - (1)].l)), 1, sizeof(double));
       for(int i = 0; i < List_Nbr((yyvsp[(1) - (1)].l)); i++){
@@ -8552,7 +8552,7 @@ yyreduce:
     break;
 
   case 362:
-#line 3921 "Gmsh.y"
+#line 3922 "Gmsh.y"
     {
       (yyval.l) = List_Create(2, 1, sizeof(double));
       if(!gmsh_yysymbols.count((yyvsp[(1) - (3)].c)))
@@ -8565,7 +8565,7 @@ yyreduce:
     break;
 
   case 363:
-#line 3931 "Gmsh.y"
+#line 3932 "Gmsh.y"
     {
       (yyval.l) = List_Create(2, 1, sizeof(double));
       if(!gmsh_yysymbols.count((yyvsp[(1) - (6)].c)))
@@ -8585,7 +8585,7 @@ yyreduce:
     break;
 
   case 364:
-#line 3951 "Gmsh.y"
+#line 3952 "Gmsh.y"
     {
       (yyval.l) = List_Create(2, 1, sizeof(double));
       List_Add((yyval.l), &((yyvsp[(1) - (1)].d)));
@@ -8593,21 +8593,21 @@ yyreduce:
     break;
 
   case 365:
-#line 3956 "Gmsh.y"
+#line 3957 "Gmsh.y"
     {
       (yyval.l) = (yyvsp[(1) - (1)].l);
     ;}
     break;
 
   case 366:
-#line 3960 "Gmsh.y"
+#line 3961 "Gmsh.y"
     {
       List_Add((yyval.l), &((yyvsp[(3) - (3)].d)));
     ;}
     break;
 
   case 367:
-#line 3964 "Gmsh.y"
+#line 3965 "Gmsh.y"
     {
       for(int i = 0; i < List_Nbr((yyvsp[(3) - (3)].l)); i++){
 	double d;
@@ -8619,21 +8619,21 @@ yyreduce:
     break;
 
   case 368:
-#line 3976 "Gmsh.y"
+#line 3977 "Gmsh.y"
     {
       (yyval.u) = CTX::instance()->packColor((int)(yyvsp[(2) - (9)].d), (int)(yyvsp[(4) - (9)].d), (int)(yyvsp[(6) - (9)].d), (int)(yyvsp[(8) - (9)].d));
     ;}
     break;
 
   case 369:
-#line 3980 "Gmsh.y"
+#line 3981 "Gmsh.y"
     {
       (yyval.u) = CTX::instance()->packColor((int)(yyvsp[(2) - (7)].d), (int)(yyvsp[(4) - (7)].d), (int)(yyvsp[(6) - (7)].d), 255);
     ;}
     break;
 
   case 370:
-#line 3992 "Gmsh.y"
+#line 3993 "Gmsh.y"
     {
       int flag;
       (yyval.u) = GetColorForString(ColorString, -1, (yyvsp[(1) - (1)].c), &flag);
@@ -8643,7 +8643,7 @@ yyreduce:
     break;
 
   case 371:
-#line 3999 "Gmsh.y"
+#line 4000 "Gmsh.y"
     {
       unsigned int val = 0;
       ColorOption(GMSH_GET, (yyvsp[(1) - (5)].c), 0, (yyvsp[(5) - (5)].c), val);
@@ -8653,14 +8653,14 @@ yyreduce:
     break;
 
   case 372:
-#line 4009 "Gmsh.y"
+#line 4010 "Gmsh.y"
     {
       (yyval.l) = (yyvsp[(2) - (3)].l);
     ;}
     break;
 
   case 373:
-#line 4013 "Gmsh.y"
+#line 4014 "Gmsh.y"
     {
       (yyval.l) = List_Create(256, 10, sizeof(unsigned int));
       GmshColorTable *ct = GetColorTable((int)(yyvsp[(3) - (6)].d));
@@ -8675,7 +8675,7 @@ yyreduce:
     break;
 
   case 374:
-#line 4028 "Gmsh.y"
+#line 4029 "Gmsh.y"
     {
       (yyval.l) = List_Create(256, 10, sizeof(unsigned int));
       List_Add((yyval.l), &((yyvsp[(1) - (1)].u)));
@@ -8683,21 +8683,21 @@ yyreduce:
     break;
 
   case 375:
-#line 4033 "Gmsh.y"
+#line 4034 "Gmsh.y"
     {
       List_Add((yyval.l), &((yyvsp[(3) - (3)].u)));
     ;}
     break;
 
   case 376:
-#line 4040 "Gmsh.y"
+#line 4041 "Gmsh.y"
     {
       (yyval.c) = (yyvsp[(1) - (1)].c);
     ;}
     break;
 
   case 377:
-#line 4044 "Gmsh.y"
+#line 4045 "Gmsh.y"
     {
       if(!gmsh_yystringsymbols.count((yyvsp[(1) - (1)].c))){
 	yymsg(0, "Unknown string variable '%s'", (yyvsp[(1) - (1)].c));
@@ -8713,7 +8713,7 @@ yyreduce:
     break;
 
   case 378:
-#line 4057 "Gmsh.y"
+#line 4058 "Gmsh.y"
     { 
       std::string out;
       StringOption(GMSH_GET, (yyvsp[(1) - (3)].c), 0, (yyvsp[(3) - (3)].c), out);
@@ -8724,7 +8724,7 @@ yyreduce:
     break;
 
   case 379:
-#line 4065 "Gmsh.y"
+#line 4066 "Gmsh.y"
     { 
       std::string out;
       StringOption(GMSH_GET, (yyvsp[(1) - (6)].c), (int)(yyvsp[(3) - (6)].d), (yyvsp[(6) - (6)].c), out);
@@ -8735,14 +8735,14 @@ yyreduce:
     break;
 
   case 380:
-#line 4076 "Gmsh.y"
+#line 4077 "Gmsh.y"
     {
       (yyval.c) = (yyvsp[(1) - (1)].c);
     ;}
     break;
 
   case 381:
-#line 4080 "Gmsh.y"
+#line 4081 "Gmsh.y"
     {
       (yyval.c) = (char *)Malloc(32 * sizeof(char));
       time_t now;
@@ -8753,7 +8753,7 @@ yyreduce:
     break;
 
   case 382:
-#line 4088 "Gmsh.y"
+#line 4089 "Gmsh.y"
     { 
       const char *env = GetEnvironmentVar((yyvsp[(3) - (4)].c));
       if(!env) env = "";
@@ -8764,7 +8764,7 @@ yyreduce:
     break;
 
   case 383:
-#line 4096 "Gmsh.y"
+#line 4097 "Gmsh.y"
     { 
       std::string s = Msg::GetString((yyvsp[(3) - (6)].c), (yyvsp[(5) - (6)].c));
       (yyval.c) = (char *)Malloc((s.size() + 1) * sizeof(char));
@@ -8775,7 +8775,7 @@ yyreduce:
     break;
 
   case 384:
-#line 4104 "Gmsh.y"
+#line 4105 "Gmsh.y"
     {
       (yyval.c) = (char *)Malloc((strlen((yyvsp[(3) - (6)].c)) + strlen((yyvsp[(5) - (6)].c)) + 1) * sizeof(char));
       strcpy((yyval.c), (yyvsp[(3) - (6)].c));
@@ -8786,7 +8786,7 @@ yyreduce:
     break;
 
   case 385:
-#line 4112 "Gmsh.y"
+#line 4113 "Gmsh.y"
     {
       (yyval.c) = (char *)Malloc((strlen((yyvsp[(3) - (4)].c)) + 1) * sizeof(char));
       int i;
@@ -8803,7 +8803,7 @@ yyreduce:
     break;
 
   case 386:
-#line 4126 "Gmsh.y"
+#line 4127 "Gmsh.y"
     {
       (yyval.c) = (char *)Malloc((strlen((yyvsp[(3) - (4)].c)) + 1) * sizeof(char));
       int i;
@@ -8820,14 +8820,14 @@ yyreduce:
     break;
 
   case 387:
-#line 4140 "Gmsh.y"
+#line 4141 "Gmsh.y"
     {
       (yyval.c) = (yyvsp[(3) - (4)].c);
     ;}
     break;
 
   case 388:
-#line 4144 "Gmsh.y"
+#line 4145 "Gmsh.y"
     {
       char tmpstring[1024];
       int i = PrintListOfDouble((yyvsp[(3) - (6)].c), (yyvsp[(5) - (6)].l), tmpstring);
@@ -9064,7 +9064,7 @@ yyreturn:
 }
 
 
-#line 4164 "Gmsh.y"
+#line 4165 "Gmsh.y"
 
 
 int PrintListOfDouble(char *format, List_T *list, char *buffer)
diff --git a/Parser/Gmsh.y b/Parser/Gmsh.y
index f24379e1dfb3e9f3c7c728222854a7cfdb3d11b0..e791a133d3df560d523fbcbad5ff5d6852cdc240 100644
--- a/Parser/Gmsh.y
+++ b/Parser/Gmsh.y
@@ -3247,11 +3247,12 @@ Periodic :
       List_Delete($3);
       List_Delete($5);
     }
-  | tPeriodic tSurface FExpr '{' RecursiveListOfDouble '}' tAFFECT FExpr '{' RecursiveListOfDouble '}'  tEND
+  | tPeriodic tSurface FExpr '{' RecursiveListOfDouble '}' tAFFECT FExpr 
+    '{' RecursiveListOfDouble '}'  tEND
     {
       if (List_Nbr($5) != List_Nbr($10)){
-	yymsg(0, "Periodic Surface: the number of masters (%d) is not equal to the number of slaves(%d)",
-              List_Nbr($5), List_Nbr($10));
+	yymsg(0, "Periodic Surface: the number of masters (%d) is not equal "
+              "to the number of slaves(%d)", List_Nbr($5), List_Nbr($10));
       }
 
       double d_master = $3, d_slave = $8;
@@ -3400,7 +3401,7 @@ Homology :
     homology->computeRanks();
     delete homology;
     #else
-    yymsg(0, "Gmsh needs to be configured with option Kbipack to use homology computation.");    
+    yymsg(0, "Gmsh needs to be configured with option Kbipack to use homology computation");
     #endif
     }      
     
@@ -3436,7 +3437,7 @@ Homology :
     homology->findGenerators();  
     delete homology;
     #else
-    yymsg(0, "Gmsh needs to be configured with option Kbipack to use homology computation.");
+    yymsg(0, "Gmsh needs to be configured with option Kbipack to use homology computation");
     #endif
     }
     
@@ -3472,7 +3473,7 @@ Homology :
     homology->findDualGenerators();
     delete homology;
     #else
-    yymsg(0, "Gmsh needs to be configured with option Kbipack to use homology computation.");
+    yymsg(0, "Gmsh needs to be configured with option Kbipack to use homology computation");
     #endif
     }
     | tHomSeq '(' StringExprVar ')' tAFFECT '{' ListOfDouble ',' ListOfDouble '}' tEND
@@ -3507,7 +3508,7 @@ Homology :
     homology->findHomSequence();
     delete homology;
     #else
-    yymsg(0, "Gmsh needs to be configured with option Kbipack to use homology computation.");
+    yymsg(0, "Gmsh needs to be configured with option Kbipack to use homology computation");
     #endif
     }
 ;
diff --git a/Post/PViewVertexArrays.cpp b/Post/PViewVertexArrays.cpp
index f19f3f16263ff8f99ad6f58cd7cea9e6df696000..80d29dab32252cca9508ba9968812d701c086827 100644
--- a/Post/PViewVertexArrays.cpp
+++ b/Post/PViewVertexArrays.cpp
@@ -798,7 +798,8 @@ static void addScalarPolyhedron(PView *p, double xyz[PVIEW_NMAX][3],
   //TODO
 }
 
-static void addOutlineElement(PView *p, int type, double xyz[PVIEW_NMAX][3], bool pre, int numNodes=0)
+static void addOutlineElement(PView *p, int type, double xyz[PVIEW_NMAX][3], 
+                              bool pre, int numNodes=0)
 {
   PViewOptions *opt = p->getOptions();
   switch(type){