0027105: Make code ISO-compliant [-Wpedantic fixes]
[occt.git] / src / Font / Font_BRepFont.cxx
index 0ec885a..a1fcfb7 100755 (executable)
@@ -1,10 +1,10 @@
 // Created on: 2013-09-16
-// Copyright (c) 2013 OPEN CASCADE SAS
+// Copyright (c) 2013-2014 OPEN CASCADE SAS
 //
 // This file is part of Open CASCADE Technology software library.
 //
-// This library is free software; you can redistribute it and / or modify it
-// under the terms of the GNU Lesser General Public version 2.1 as published
+// This library is free software; you can redistribute it and/or modify it under
+// the terms of the GNU Lesser General Public License version 2.1 as published
 // by the Free Software Foundation, with special exception defined in the file
 // OCCT_LGPL_EXCEPTION.txt. Consult the file LICENSE_LGPL_21.txt included in OCCT
 // distribution for complete text of the license and disclaimer of any warranty.
 #include <BRepBuilderAPI_MakeFace.hxx>
 #include <BRepBuilderAPI_MakeWire.hxx>
 #include <BRepLib_MakeEdge.hxx>
+#include <Font_TextFormatter.hxx>
 #include <GCE2d_MakeSegment.hxx>
 #include <GC_MakeSegment.hxx>
 #include <Geom_BezierCurve.hxx>
 #include <Geom_BSplineCurve.hxx>
+#include <Geom2d_TrimmedCurve.hxx>
 #include <Geom_Plane.hxx>
 #include <Geom2d_BezierCurve.hxx>
 #include <Geom2d_BSplineCurve.hxx>
+#include <Geom2d_TrimmedCurve.hxx>
 #include <Geom2d_Line.hxx>
 #include <GeomAPI.hxx>
 #include <GeomAdaptor_HSurface.hxx>
@@ -44,8 +47,8 @@
 
 #include FT_OUTLINE_H
 
-IMPLEMENT_STANDARD_HANDLE (Font_BRepFont, Font_FTFont)
-IMPLEMENT_STANDARD_RTTIEXT(Font_BRepFont, Font_FTFont)
+
+IMPLEMENT_STANDARD_RTTIEXT(Font_BRepFont,Font_FTFont)
 
 namespace
 {
@@ -59,7 +62,7 @@ namespace
     return theSize / Standard_Real(THE_FONT_SIZE) * 72.0 / Standard_Real(THE_RESOLUTION_DPI);
   }
 
-};
+}
 
 // =======================================================================
 // function : Constructor
@@ -83,7 +86,7 @@ void Font_BRepFont::init()
 {
   mySurface        = new Geom_Plane (gp_Pln (gp::XOY()));
   myCurve2dAdaptor = new Geom2dAdaptor_HCurve();
-  Handle(GeomAdaptor_HSurface) aSurfAdaptor = new GeomAdaptor_HSurface (mySurface);
+  Handle(Adaptor3d_HSurface) aSurfAdaptor = new GeomAdaptor_HSurface (mySurface);
   myCurvOnSurf.Load (aSurfAdaptor);
 
   myFixer.FixWireMode()          = 1;
@@ -213,14 +216,15 @@ TopoDS_Shape Font_BRepFont::RenderGlyph (const Standard_Utf32Char& theChar)
 // function : to3d
 // purpose  :
 // =======================================================================
-bool Font_BRepFont::to3d (const Handle(Geom2d_Curve) theCurve2d,
+bool Font_BRepFont::to3d (const Handle(Geom2d_Curve)& theCurve2d,
                           const GeomAbs_Shape        theContinuity,
                           Handle(Geom_Curve)&        theCurve3d)
 {
   Standard_Real aMaxDeviation   = 0.0;
   Standard_Real anAverDeviation = 0.0;
   myCurve2dAdaptor->ChangeCurve2d().Load (theCurve2d);
-  myCurvOnSurf.Load (myCurve2dAdaptor);
+  const Handle(Adaptor2d_HCurve2d)& aCurve = myCurve2dAdaptor; // to avoid ambiguity
+  myCurvOnSurf.Load (aCurve);
   GeomLib::BuildCurve3d (myPrecision, myCurvOnSurf,
                          myCurve2dAdaptor->FirstParameter(), myCurve2dAdaptor->LastParameter(),
                          theCurve3d, aMaxDeviation, anAverDeviation, theContinuity);
@@ -245,10 +249,15 @@ Standard_Boolean Font_BRepFont::renderGlyph (const Standard_Utf32Char theChar,
     return !theShape.IsNull();
   }
 
+  FT_Outline& anOutline = myFTFace->glyph->outline;
+
+  if (!anOutline.n_contours)
+    return Standard_False;
+
   TopLoc_Location aLoc;
   TopoDS_Face aFaceDraft;
   myBuilder.MakeFace (aFaceDraft, mySurface, myPrecision);
-  FT_Outline& anOutline = myFTFace->glyph->outline;
+
   // Get orientation is useless since it doesn't retrieve any in-font information and just computes orientation.
   // Because it fails in some cases - leave this to ShapeFix.
   //const FT_Orientation anOrient = FT_Outline_Get_Orientation (&anOutline);
@@ -462,57 +471,3 @@ Standard_Boolean Font_BRepFont::renderGlyph (const Standard_Utf32Char theChar,
   myCache.Bind (theChar, theShape);
   return !theShape.IsNull();
 }
-
-// =======================================================================
-// function : RenderText
-// purpose  :
-// =======================================================================
-TopoDS_Shape Font_BRepFont::RenderText (const NCollection_String& theString)
-{
-  if (theString.IsEmpty())
-  {
-    return TopoDS_Shape();
-  }
-
-  gp_Trsf          aTrsf;
-  gp_XYZ           aPen;
-  Standard_Integer aLine = 0;
-  TopoDS_Shape     aGlyphShape;
-  TopoDS_Compound  aResult;
-  myBuilder.MakeCompound (aResult);
-  Standard_Mutex::Sentry aSentry (myMutex);
-  for (NCollection_Utf8Iter anIter = theString.Iterator(); *anIter != 0;)
-  {
-    const Standard_Utf32Char aCharCurr =   *anIter;
-    const Standard_Utf32Char aCharNext = *++anIter;
-    if (aCharCurr == '\x0D' // CR  (carriage return)
-     || aCharCurr == '\a'   // BEL (alarm)
-     || aCharCurr == '\f'   // FF  (form feed) NP (new page)
-     || aCharCurr == '\b'   // BS  (backspace)
-     || aCharCurr == '\v')  // VT  (vertical tab)
-    {
-      continue; // skip unsupported carriage control codes
-    }
-    else if (aCharCurr == ' ' || aCharCurr == '\t')
-    {
-      aPen.SetX (aPen.X() + AdvanceX (aCharCurr, aCharNext));
-      continue;
-    }
-    else if (aCharCurr == '\n')
-    {
-      ++aLine;
-      aPen.SetX (0.0);
-      aPen.SetY (-Standard_Real(aLine) * LineSpacing());
-      continue;
-    }
-
-    if (renderGlyph (aCharCurr, aGlyphShape))
-    {
-      aTrsf.SetTranslation (gp_Vec (aPen));
-      aGlyphShape.Move (aTrsf);
-      myBuilder.Add (aResult, aGlyphShape);
-    }
-    aPen.SetX (aPen.X() + AdvanceX (aCharCurr, aCharNext));
-  }
-  return aResult;
-}