From 517afd305080565facac773511c76fd12a7cd70f Mon Sep 17 00:00:00 2001 From: Robert Osfield Date: Wed, 22 Apr 2009 13:50:31 +0000 Subject: [PATCH] From Erik den Dekker, "I revamped osgversion, which resulted (I think) in cleaner code. The only functional change was giving my brother the original credits he deserved. Name changed from 'Jeoen den Dekker' to 'Jeroen den Dekker'." --- applications/osgversion/osgversion.cpp | 1438 +++++++++++------------- 1 file changed, 684 insertions(+), 754 deletions(-) diff --git a/applications/osgversion/osgversion.cpp b/applications/osgversion/osgversion.cpp index 1b9b10a05..e89f5f2e0 100644 --- a/applications/osgversion/osgversion.cpp +++ b/applications/osgversion/osgversion.cpp @@ -1,3 +1,13 @@ +// The majority of the application is dedicated to building the +// current contribitors list by parsing the ChangeLog, it just takes +// one line in the main itself to report the version number. + +#include +#include +#include + +#include + #include #include #include @@ -10,623 +20,551 @@ #include -#include +using namespace std; -#include -#include -#include - -// the majority of the application is dedicated to building the -// current contribitors list by parsing the ChangeLog, it just takes -// one line in the main itself to report the version number. #if defined(_MSC_VER) #pragma setlocale("C") #endif -typedef std::pair NamePair; -typedef std::map NameMap; -typedef std::vector< std::string > Words; +typedef pair NamePair; +typedef map NameMap; +typedef vector Words; NamePair EmptyNamePair; -NamePair NameRobertOsfield("Robert","Osfield"); -NamePair NameDonBurns("Don","Burns"); +NamePair NameRobertOsfield("Robert", "Osfield"); +NamePair NameDonBurns ("Don", "Burns"); -bool validName(const std::string& first) + +const char* validNames[] = { - if (first=="de") return true; - if (first=="den") return true; - if (first=="van") return true; + "de", + "den", + "van" +}; +const char* invalidNames[] = +{ + "Added", + "AnimationPath", + "AnimationPathCallback", + "AnimationPathManipulator", + "ArgumentParser", + "AttrData", + "AutoTransform", + "AutoTransform.", + "Azimuth", + "BlenColour(Vec4", + "Camera", + "CameraBarrierCallback", + "CameraNode", + "Canvas", + "CluserCullingCallback", + "ClusterCullingCallback", + "CoordinateSystem", + "CoordinateSystemNode", + "CoordinateSystemNode&", + "CopyOp", + "Copyright", + "Core", + "Creator", + "CullCallbacks", + "CullingSettngs", + "CullVisitor", + "CullVistor", + "Cygwin", + "DatabasePager", + "DataSet", + "DataVariance", + "DeleteHandler", + "DisplaySettings", + "Drawable", + "DrawElementsUByte", + "Endian", + "Escape", + "EventQueue", + "Face", + "Files", + "Fixed", + "Fixes", + "FluidProgram", + "FontImplementation", + "FrameStats", + "Framstamp", + "FreeBSD", + "Geode", + "GeoemtryTechnique", + "GeometryTechnique", + "GeoSet", + "GraphicsContext", + "GraphicsContextImplementation", + "GraphicsThread", + "GraphicsWindowX11", + "Group", + "Image", + "ImageOptions", + "Images", + "Images/SolarSystem", + "ImageStream", + "Improved", + "IndexBlock", + "IndexFaceSets", + "IntersectVisitor", + "Inventor", + "KdTree", + "KeyboardMouse", + "KeyboardMouseCallback", + "LightModel", + "LightPointNode", + "LineSegment", + "LineStipple", + "Logos", + "LongIDRecord", + "Make", + "Makefile", + "Material", + "Matrix", + "Matrix*", + "MatrixManipulator", + "MatrixTransform", + "MemoryManager", + "MergeGeometryVisitor", + "MeshRecord", + "Mode", + "Mr", + "Multigen", + "New", + "NewCullVisitor", + "NodeVisitor", + "Object", + "OpenDX", + "OpenSceneGraph", + "OpenSceneGraph-2", + "OpenSceneGraph-osgWidget-dev", + "OpenThreads", + "OperationThread", + "Optimizer", + "OrientationConverter", + "Osfields", + "Ouput", + "Output", + "OveralyNode", + "PagedLOD", + "PageLOD", + "Paging", + "ParentList", + "Performer", + "PickHandler", + "PixelDataBufferObject", + "PolygonStipple", + "PolytopeVisitor", + "PrimitiveIndexFunctor", + "Prodcuer", + "Producer", + "ProducerEventCallback", + "Program", + "Proxy", + "ProxyNode", + "Quake3", + "Quicktime", + "ReaderWriters", + "ReentrantMutex", + "Referenced", + "ReferenceFrame", + "Removed", + "RemoveLoadedProxyNodes", + "RenderStage", + "RenderTargetFallback", + "RenderToTextureStage", + "SceneGraphBuilder", + "SceneView", + "Sequence", + "Shape", + "SimpleViewer", + "SimpleViewer", + "SmokeTrailEffect", + "Source", + "SpotExponent", + "State", + "StateAttribute", + "Stats", + "StatsVisitor", + "Studio", + "Support", + "Switch", + "TechniqueEventHandler", + "TerraPage", + "TessellationHints", + "TestManipulator", + "TestSupportCallback", + "TexEnv", + "TexMat(Matrix", + "Texture", + "Texture2DArray", + "Texture3D", + "TextureCubeMap", + "TextureObjectManager", + "TextureRectangle", + "TextureRectangle(Image*", + "TextureType", + "Texuture", + "TriStripVisitor", + "TrPageViewer", + "Uniform", + "UseFarLineSegments", + "UserData", + "Valve", + "Vec*", + "Vec2d", + "Vec3d", + "Vec4ub", + "Version", + "View", + "Viewer", + "ViewPoint", + "Viewport", + "Viewport", + "Visual", + "VisualStudio", + "WindowData", + "Windows", + "X", + "Xcode", + "Y" +}; + + +struct TypoCorrection +{ + const char* original; + const char* corrected; +}; + +TypoCorrection typoCorrections[] = +{ + {"Aderian", "Adrian"}, + {"Adndre", "Andre"}, + {"Adrain", "Adrian"}, + {"Amueller", "Aumueller"}, + {"Andew", "Andrew"}, + {"André", "André"}, + {"Antione", "Antoine"}, + {"Antonoine", "Antoine"}, + {"Atr", "Art"}, + {"Baverage", "Beverage"}, + {"Bistroviae", "Bistrovic"}, + {"Callue", "Callu"}, + {"Christaiansen", "Christiansen"}, + {"Cobin", "Corbin"}, + {"Comporesi", "Camporesi"}, + {"Connel", "Connell"}, + {"Cullu", "Callu"}, + {"Daneil", "Daniel"}, + {"Daust", "Daoust"}, + {"Daved", "David"}, + {"Drederic", "Frederic"}, + {"Eileman", "Eilemann"}, + {"Elgi", "Egli"}, + {"Fabian", "Fabien"}, + {"Fautre", "Fautré"}, + {"Frashid", "Farshid"}, + {"Fred", "Frederic"}, + {"Fredrick", "Frederic"}, + {"Fredric", "Frederic"}, + {"Froechlich", "Fröhlich"}, + {"Froehilch", "Fröhlich"}, + {"Froehlich", "Fröhlich"}, + {"Froelich", "Fröhlich"}, + {"Froenlich", "Fröhlich"}, + {"Fröhlich", "Fröhlich"}, + {"Fruciel", "Frauciel"}, + {"García", "Garcea"}, + {"Garrat", "Garrett"}, + {"Garret", "Garrett"}, + {"Geof", "Geoff"}, + {"Giatan", "Gaitan"}, + {"Gronenger", "Gronager"}, + {"Gronger", "Gronager"}, + {"Haritchablaet", "Haritchabalet"}, + {"Hebelin", "Herbelin"}, + {"Heirtlein", "Hertlein"}, + {"Heirtlein", "Hertlein"}, + {"Hertleinm", "Hertlein"}, + {"Hertlien", "Hertlein"}, + {"Hi", "He"}, + {"Hooper", "Hopper"}, + {"Inverson", "Iverson"}, + {"Iversion", "Iverson"}, + {"Jean-Sebastein", "Jean-Sebastien"}, + {"Jean-Sebastian", "Jean-Sebastien"}, + {"Jean-Sebastirn", "Jean-Sebastien"}, + {"Jea-Sebastien", "Jean-Sebastien"}, + {"Johhansen", "Johansen"}, + {"Johnansen", "Johansen"}, + {"Johnasen", "Johansen"}, + {"Jolly", "Jolley"}, + {"Jose", "José"}, + {"José", "José"}, + {"Joson", "Jason"}, + {"J", "José"}, + {"Keuhne", "Kuehne"}, + {"Kheune", "Kuehne"}, + {"Lagrade", "Lagarde"}, + {"Larshkari", "Lashkari"}, + {"Lashakari", "Lashkari"}, + {"Lashari", "Lashkari"}, + {"Lasharki", "Lashkari"}, + {"Laskari", "Lashkari"}, + {"Leandowski", "Lewandowski"}, + {"Lawandowski", "Lewandowski"}, + {"Lucas", "Luaces"}, + {"Lugi", "Luigi"}, + {"Lweandowski", "Lewandowski"}, + {"Maceij", "Maciej"}, + {"Machler", "Mächler"}, + {"Macro", "Marco"}, + {"Maechler", "Mächler"}, + {"Mahai", "Mihai"}, + {"Mammond", "Marmond"}, + {"March", "Marco"}, + {"Martsz", "Martz"}, + {"Marz", "Martz"}, + {"Matz", "Martz"}, + {"Melchoir", "Melchior"}, + {"Mellis", "Melis"}, + {"Messerschimdt", "Messerschmidt"}, + {"Micheal", "Michael"}, + {"Mihair", "Mihai"}, + {"Molishtan", "Moloshtan"}, + {"Molishtan", "Moloshtan"}, + {"Moloshton", "Moloshtan"}, + {"Morné", "Morné"}, + {"Morne", "Morné"}, + {"Moule", "Moiule"}, + {"Narache", "Marache"}, + {"Nicklov", "Nikolov"}, + {"Nickolov", "Nikolov"}, + {"Olad", "Olaf"}, + {"Olar", "Olaf"}, + {"Oritz", "Ortiz"}, + {"Osfeld", "Osfield"}, + {"Osfied", "Osfield"}, + {"Pail", "Paul"}, + {"Rajce", "Trajce"}, + {"Randal", "Randall"}, + {"Robet", "Robert"}, + {"Rodger", "Roger"}, + {"Rolad", "Roland"}, + {"Rucard", "Richard"}, + {"Sekender", "Sukender"}, + {"Sewel", "Sewell"}, + {"Simmonson", "Simonsson"}, + {"Simmonsson", "Simonsson"}, + {"Sjolie", "Sjölie"}, + {"Sjölie", "Sjölie"}, + {"Skinnder", "Skinner"}, + {"Sokolosky", "Sokolowsky"}, + {"Sokolowky", "Sokolowsky"}, + {"Sokolowki", "Sokolowsky"}, + {"Sokolowski", "Sokolowsky"}, + {"Sokolsky", "Sokolowsky"}, + {"Sokolwsky", "Sokolowsky"}, + {"Sonda", "Sondra"}, + {"Stansilav", "Stanislav"}, + {"Stefan", "Stephan"}, + {"Stell", "Steel"}, + {"Sylvan", "Sylvain"}, + {"Takeahei", "Takahei"}, + {"Takehei", "Takahei"}, + {"Tarantilils", "Tarantilis"}, + {"Trastenjak", "Trstenjak"}, + {"Urlich", "Ulrich"}, + {"Vines", "Vine"}, + {"Waldrom", "Waldron"}, + {"Wedner", "Weidner"}, + {"Weidemann", "Wiedemann"}, + {"Wieblen", "Weiblen"}, + {"Woesnner", "Woessner"}, + {"Wojchiech", "Wojciech"}, + {"Wojiech", "Wojciech"}, + {"Xennon", "Hanson"}, + {"Yefrei", "Yefei"}, + {"Yfei", "Yefei"} +}; + + +struct NameCorrection +{ + const char* originalFirst; + const char* originalSecond; + const char* correctedFirst; + const char* correctedSecond; +}; + +NameCorrection nameCorrections[] = +{ + {"Marc", "Sciabica", + "Mark", "Sciabica"}, + {"Jean", "Sebastien", + "Jean-Sebastien", "Guay"}, + {"Michale", "Platings", + "Michael", "Platings"}, + {"Mick", "", + "Maik", "Keller"}, + {"Gary", "Quin", + "Gary", "Quinn"}, + {"BjornHein", "", + "Björn", "Hein"}, + {"Bjorn", "Hein", + "Björn", "Hein"}, + {"Erik", "van", + "Erik", "den Dekker"}, + {"Erik", "den", + "Erik", "den Dekker"}, + {"Jeoen", "den", + "Jeroen", "den Dekker"}, + {"John", "Vidar", + "John", "Vidar Larring"}, + {"John", "Vida", + "John", "Vidar Larring"}, + {"Sebastien", "Messerschmidt", + "Sebastian", "Messerschmidt"}, + {"Mattias", "Fröhlich", + "Mathias", "Fröhlich"}, + {"Mathias", "Helsing", + "Mattias", "Helsing"}, + {"Jose", "Delport", + "J.P.", "Delport"}, + {"José", "Delport", + "J.P.", "Delport"}, + {"Franz", "Melchior", + "Melchior", "Franz"}, + {"Glen", "Waldon", + "Glenn", "Waldron"}, + {"Ralf", "Karn", + "Ralf", "Kern"}, + {"Donny", "Cipperly", + "Donald", "Cipperly"}, + {"Gino", "van", + "Gino", "van den Bergen"}, + {"Radu", "Mihai", + "Mihai", "Radu"}, + {"Art", "Trevs", + "Art", "Tevs"}, + {"Tim", "More", + "Tim", "Moore"}, + {"Andre", "Garneau", + "André", "Garneau"}, + {"Eric", "Hammil", + "Chris", "Hanson"}, + {"Paul", "de", + "Paul", "de Repentigny"}, + {"Raymond", "de", + "Raymond", "de Vries"}, + {"Nick", "", + "Trajce", "Nikolov"}, + {"Daniel", "", + "Daniel", "Sjölie"}, + {"Julia", "Ortiz", + "Julian", "Ortiz"}, + {"Rune", "Schmidt", + "Rune", "Schmidt Jensen"}, + {"Romano", "José", + "Romano", "José Magacho da Silva"}, + {"Rommano", "Silva", + "Romano", "José Magacho da Silva"}, + {"Leandro", "Motta", + "Leandro", "Motta Barros"}, + {"A", "Botorabi", + "Ali", "Botorabi"}, + {"Waltice", "", + "Walter", "J. Altice"}, + {"Drew", "", + "Drew", "Whitehouse"}, + {"Douglas", "A", + "Douglas", "A. Pouk"}, + {"Colin", "MacDonald", + "Colin", "McDonald"}, + {"Nikolov", "Trajce", + "Trajce", "Nikolov"}, + {"Frauciel", "Luc", + "Luc", "Frauciel"}, +}; + + +bool validName(const string& first) +{ + // Check for valid names + for (unsigned int i = 0; i < sizeof(validNames) / sizeof(char*); ++i) + { + if (first == validNames[i]) + { + return true; + } + } if (first.empty()) return false; - if (first[0]<'A' || first[0]>'Z') return false; - - if (first.size()>=2 && (first[1]<'a' || first[1]>'z') && (first[1]!='.') && (first[1]!=',')) return false; - if (first=="Xcode") return false; - if (first=="Added") return false; - if (first=="Camera") return false; - if (first=="CameraNode") return false; - if (first=="CopyOp") return false; - if (first=="Fixed") return false; - if (first=="View") return false; - if (first=="GraphicsContext") return false; - if (first=="WindowData") return false; - if (first=="ViewPoint") return false; - if (first=="PickHandler") return false; - if (first=="Program") return false; - if (first=="Object") return false; - if (first=="OpenSceneGraph") return false; - if (first=="SpotExponent") return false; - if (first=="Framstamp") return false; - if (first=="Stats") return false; - if (first=="Group") return false; - if (first=="Texture") return false; - if (first=="Texture2DArray") return false; - if (first=="Creator") return false; - if (first=="CullVisitor") return false; - if (first=="Drawable") return false; - if (first=="Geode") return false; - if (first=="GeoSet") return false; - if (first=="Image") return false; - if (first=="Face") return false; - if (first=="Images/SolarSystem") return false; - if (first=="IntersectVisitor") return false; - if (first=="LongIDRecord") return false; - if (first=="Makefile") return false; - if (first=="Matrix") return false; - if (first=="MemoryManager") return false; - if (first=="MeshRecord") return false; - if (first=="Multigen") return false; - if (first=="NewCullVisitor") return false; - if (first=="Output") return false; - if (first=="PageLOD") return false; - if (first=="Improved") return false; - if (first=="PagedLOD") return false; - if (first=="Referenced") return false; - if (first=="StateAttribute") return false; - if (first=="Switch") return false; - if (first=="TechniqueEventHandler") return false; - if (first=="Uniform") return false; - if (first=="Vec*") return false; - if (first=="Viewer") return false; - if (first=="VisualStudio") return false; - if (first=="X") return false; - if (first=="Y") return false; - if (first=="Producer") return false; - if (first=="New") return false; - if (first=="Removed") return false; - if (first=="Ouput") return false; - if (first=="ReaderWriters") return false; - if (first=="NodeVisitor") return false; - if (first=="Fixes") return false; - if (first=="FontImplementation") return false; - if (first=="DisplaySettings") return false; - if (first=="AnimationPath") return false; - if (first=="AnimationPathCallback") return false; - if (first=="AnimationPathManipulator") return false; - if (first=="ArgumentParser") return false; - if (first=="AttrData") return false; - if (first=="Azimuth") return false; - if (first=="CluserCullingCallback") return false; - if (first=="ClusterCullingCallback") return false; - if (first=="CoordinateSystem") return false; - if (first=="CoordinateSystemNode") return false; - if (first=="CoordinateSystemNode&") return false; - if (first=="Copyright") return false; - if (first=="Cygwin") return false; - if (first=="CullCallbacks") return false; - if (first=="CullingSettngs") return false; - if (first=="DataVariance") return false; - if (first=="DatabasePager") return false; - if (first=="DrawElementsUByte") return false; - if (first=="Escape") return false; - if (first=="FluidProgram") return false; - if (first=="FrameStats") return false; - if (first=="FreeBSD") return false; - if (first=="GraphicsContextImplementation") return false; - if (first=="GraphicsThread") return false; - if (first=="Images") return false; - if (first=="IndexBlock") return false; - if (first=="Inventor") return false; - if (first=="Make") return false; - if (first=="Material") return false; - if (first=="MergeGeometryVisitor") return false; - if (first=="Mode") return false; - if (first=="Prodcuer") return false; - if (first=="ProxyNode") return false; - if (first=="ReentrantMutex") return false; - if (first=="ReferenceFrame") return false; - if (first=="RemoveLoadedProxyNodes") return false; - if (first=="RenderTargetFallback") return false; - if (first=="RenderToTextureStage") return false; - if (first=="Sequence") return false; - if (first=="Shape") return false; - if (first=="TessellationHints") return false; - if (first=="Support") return false; - if (first=="State") return false; - if (first=="SmokeTrailEffect") return false; - if (first=="TexEnv") return false; - if (first=="Texture3D") return false; - if (first=="TextureCubeMap") return false; - if (first=="TextureObjectManager") return false; - if (first=="TextureRectangle(Image*") return false; - if (first=="TextureType") return false; - if (first=="Texuture") return false; - if (first=="TriStripVisitor") return false; - if (first=="UserData") return false; - if (first=="Viewport") return false; - if (first=="Visual") return false; - if (first=="Studio") return false; - if (first=="Vec2d") return false; - if (first=="Vec3d") return false; - if (first=="Windows") return false; - if (first=="Version") return false; - if (first=="Viewport") return false; - if (first=="Core") return false; - if (first=="DataSet") return false; - if (first=="Endian") return false; - if (first=="ImageOptions") return false; - if (first=="ImageStream") return false; - if (first=="KeyboardMouse") return false; - if (first=="KeyboardMouseCallback") return false; - if (first=="AutoTransform") return false; - if (first=="AutoTransform.") return false; - if (first=="LightModel") return false; - if (first=="MatrixManipulator") return false; - if (first=="MatrixTransform") return false; - if (first=="OpenDX") return false; - if (first=="ParentList") return false; - if (first=="TerraPage") return false; - if (first=="OveralyNode") return false; - if (first=="OpenThreads") return false; - if (first=="PolygonStipple") return false; - if (first=="SceneView") return false; - if (first=="PrimitiveIndexFunctor") return false; - if (first=="PolytopeVisitor") return false; - if (first=="Performer") return false; - if (first=="Paging") return false; - if (first=="CameraBarrierCallback") return false; - if (first=="TestSupportCallback") return false; - if (first=="Quake3") return false; - if (first=="BlenColour(Vec4") return false; - if (first=="UseFarLineSegments") return false; - if (first=="TextureRectangle") return false; - if (first=="DeleteHandler") return false; - if (first=="EventQueue") return false; - if (first=="TrPageViewer") return false; - if (first=="TestManipulator") return false; - if (first=="ProducerEventCallback") return false; - if (first=="OrientationConverter") return false; - if (first=="Logos") return false; - if (first=="StatsVisitor") return false; - if (first=="LineStipple") return false; - if (first=="Files") return false; - if (first=="Mr") return false; - if (first=="Osfields") return false; - if (first=="Optimizer") return false; - if (first=="RenderStage") return false; - if (first=="Matrix*") return false; - if (first=="Vec4ub") return false; - if (first=="Proxy") return false; - if (first=="CullVistor") return false; - if (first=="SimpleViewer") return false; - if (first=="TexMat(Matrix") return false; - if (first=="GraphicsWindowX11") return false; - if (first=="OperationThread") return false; - if (first=="SimpleViewer") return false; - if (first=="IndexFaceSets") return false; - if (first=="Quicktime") return false; - if (first=="SceneGraphBuilder") return false; - if (first=="LightPointNode") return false; - if (first=="GeometryTechnique") return false; - if (first=="GeoemtryTechnique") return false; - if (first=="KdTree") return false; - if (first=="LineSegment") return false; - if (first=="Canvas") return false; - if (first=="OpenSceneGraph-2") return false; - if (first=="OpenSceneGraph-osgWidget-dev") return false; - if (first=="Valve") return false; - if (first=="Source") return false; - if (first=="PixelDataBufferObject") return false; + if (first[0] < 'A' || first[0] > 'Z') return false; + + if (first.size() >= 2 && (first[1] < 'a' || first[1] > 'z') && (first[1] != '.') && (first[1] != ',')) return false; + + // Check for invalid names + for (unsigned int i = 0; i < sizeof(invalidNames) / sizeof(char*); ++i) + { + if (first == invalidNames[i]) + { + return false; + } + } + + // Default to a valid name return true; } -std::string typoCorrection(const std::string& name) + +string typoCorrection(const string& name) { -#if 0 - if (name=="") return ""; - if (name=="") return ""; - if (name=="") return ""; - if (name=="") return ""; -#endif - if (name=="Aderian") return "Adrian"; - if (name=="Adndre") return "Andre"; - if (name=="Adrain") return "Adrian"; - if (name=="Andew") return "Andrew"; - if (name=="André") return "André"; - if (name=="Antione") return "Antoine"; - if (name=="Antonoine") return "Antoine"; - if (name=="Atr") return "Art"; - if (name=="Baverage") return "Beverage"; - if (name=="Bistroviae") return "Bistrovic"; - if (name=="Callue") return "Callu"; - if (name=="Christaiansen") return "Christiansen"; - if (name=="Cobin") return "Corbin"; - if (name=="Comporesi") return "Camporesi"; - if (name=="Connel") return "Connell"; - if (name=="Cullu") return "Callu"; - if (name=="Daneil") return "Daniel"; - if (name=="Daust") return "Daoust"; - if (name=="Daved") return "David"; - if (name=="Drederic") return "Frederic"; - if (name=="Eileman") return "Eilemann"; - if (name=="Elgi") return "Egli"; - if (name=="Frashid") return "Farshid"; - if (name=="Fred") return "Frederic"; - if (name=="Fredrick") return "Frederic"; - if (name=="Fredric") return "Frederic"; - if (name=="Froechlich") return "Fröhlich"; - if (name=="Froehilch") return "Fröhlich"; - if (name=="Froehlich") return "Fröhlich"; - if (name=="Froelich") return "Fröhlich"; - if (name=="Froenlich") return "Fröhlich"; - if (name=="Fröhlich") return "Fröhlich"; - if (name=="Fruciel") return "Frauciel"; - if (name=="García") return "Garcea"; - if (name=="Garrat") return "Garrett"; - if (name=="Garret") return "Garrett"; - if (name=="Geof") return "Geoff"; - if (name=="Giatan") return "Gaitan"; - if (name=="Gronenger") return "Gronager"; - if (name=="Gronger") return "Gronager"; - if (name=="Hebelin") return "Herbelin"; - if (name=="Heirtlein") return "Hertlein"; - if (name=="Heirtlein") return "Hertlein"; - if (name=="Heirtlein") return "Hertlein"; - if (name=="Hertleinm") return "Hertlein"; - if (name=="Hertlien") return "Hertlein"; - if (name=="Hi") return "He"; - if (name=="Hooper") return "Hopper"; - if (name=="Inverson") return "Iverson"; - if (name=="Iversion") return "Iverson"; - if (name=="Jean-Sebastian") return "Jean-Sebastien"; - if (name=="Jean-Sebastirn") return "Jean-Sebastien"; - if (name=="Jea-Sebastien") return "Jean-Sebastien"; - if (name=="Johhansen") return "Johansen"; - if (name=="Johnansen") return "Johansen"; - if (name=="Johnasen") return "Johansen"; - if (name=="Jolly") return "Jolley"; - if (name=="Jose") return "José"; - if (name=="José") return "José"; - if (name=="Joson") return "Jason"; - if (name=="J") return "José"; - if (name=="Keuhne") return "Kuehne"; - if (name=="Kheune") return "Kuehne"; - if (name=="Lagrade") return "Lagarde"; - if (name=="Larshkari") return "Lashkari"; - if (name=="Lashakari") return "Lashkari"; - if (name=="Lashari") return "Lashkari"; - if (name=="Lasharki") return "Lashkari"; - if (name=="Laskari") return "Lashkari"; - if (name=="Leandowski" || name=="Lawandowski") return "Lewandowski"; - if (name=="Lucas") return "Luaces"; - if (name=="Lugi") return "Luigi"; - if (name=="Lweandowski") return "Lewandowski"; - if (name=="Machler") return "Mächler"; - if (name=="Macro") return "Marco"; - if (name=="Maechler") return "Mächler"; - if (name=="Mahai") return "Mihai"; - if (name=="Mammond") return "Marmond"; - if (name=="March") return "Marco"; - if (name=="Martsz") return "Martz"; - if (name=="Marz") return "Martz"; - if (name=="Matz") return "Martz"; - if (name=="Melchoir") return "Melchior"; - if (name=="Mellis") return "Melis"; - if (name=="Messerschimdt") return "Messerschmidt"; - if (name=="Micheal") return "Michael"; - if (name=="Mihair") return "Mihai"; - if (name=="Molishtan") return "Moloshtan"; - if (name=="Molishtan") return "Moloshtan"; - if (name=="Moloshton") return "Moloshtan"; - if (name=="Morné") return "Morné"; - if (name=="Morne") return "Morné"; - if (name=="Moule") return "Moiule"; - if (name=="Narache") return "Marache"; - if (name=="Nicklov") return "Nikolov"; - if (name=="Nickolov") return "Nikolov"; - if (name=="Olad") return "Olaf"; - if (name=="Olar") return "Olaf"; - if (name=="Oritz") return "Ortiz"; - if (name=="Osfeld") return "Osfield"; - if (name=="Osfied") return "Osfield"; - if (name=="Pail") return "Paul"; - if (name=="Rajce") return "Trajce"; - if (name=="Randal") return "Randall"; - if (name=="Robet") return "Robert"; - if (name=="Rodger") return "Roger"; - if (name=="Rolad") return "Roland"; - if (name=="Rucard") return "Richard"; - if (name=="Sekender") return "Sukender"; - if (name=="Sewel") return "Sewell"; - if (name=="Simmonson") return "Simonsson"; - if (name=="Simmonsson") return "Simonsson"; - if (name=="Sjolie") return "Sjölie"; - if (name=="Sjölie") return "Sjölie"; - if (name=="Skinnder") return "Skinner"; - if (name=="Sokolosky") return "Sokolowsky"; - if (name=="Sokolowky") return "Sokolowsky"; - if (name=="Sokolowki") return "Sokolowsky"; - if (name=="Sokolowski") return "Sokolowsky"; - if (name=="Sokolsky") return "Sokolowsky"; - if (name=="Sokolwsky") return "Sokolowsky"; - if (name=="Sonda") return "Sondra"; - if (name=="Stansilav") return "Stanislav"; - if (name=="Stefan") return "Stephan"; - if (name=="Stell") return "Steel"; - if (name=="Sylvan") return "Sylvain"; - if (name=="Takeahei") return "Takahei"; - if (name=="Takehei") return "Takahei"; - if (name=="Tarantilils") return "Tarantilis"; - if (name=="Trastenjak") return "Trstenjak"; - if (name=="Urlich") return "Ulrich"; - if (name=="Vines") return "Vine"; - if (name=="Waldrom") return "Waldron"; - if (name=="Wedner") return "Weidner"; - if (name=="Weidemann") return "Wiedemann"; - if (name=="Wieblen") return "Weiblen"; - if (name=="Woesnner") return "Woessner"; - if (name=="Wojiech" || name=="Wojchiech") return "Wojciech"; - if (name=="Xennon") return "Hanson"; - if (name=="Yefrei") return "Yefei"; - if (name=="Yfei") return "Yefei"; - if (name=="Jean-Sebastein") return "Jean-Sebastien"; - if (name=="Haritchablaet") return "Haritchabalet"; - if (name=="Amueller") return "Aumueller"; - if (name=="Fautre") return "Fautré"; - if (name=="Maceij") return "Maciej"; - if (name=="Fabian") return "Fabien"; + // Loop over all known typo corrections + for (unsigned int i = 0; i < sizeof(typoCorrections) / sizeof(TypoCorrection); ++i) + { + // If a typo is found + if (name == typoCorrections[i].original) + { + // Return the correction + return typoCorrections[i].corrected; + } + } + return name; } + void nameCorrection(NamePair& name) { - if (name.first=="Marc" && name.second=="Sciabica") + // Loop over all known name corrections + for (unsigned int i = 0; i < sizeof(nameCorrections) / sizeof(NameCorrection); ++i) { - name.first = "Mark"; - name.second = "Sciabica"; - } - - if (name.first=="Jean" && name.second=="Sebastien") - { - name.first = "Jean-Sebastien"; - name.second = "Guay"; - } - - if (name.first=="Michale" && name.second=="Platings") - { - name.first = "Michael"; - name.second = "Platings"; - } - - if (name.first=="Mick" && name.second=="") - { - name.first = "Maik"; - name.second = "Keller"; - } - - if (name.first=="Gary" && name.second=="Quin") - { - name.first = "Gary"; - name.second = "Quinn"; - } - - if (name.first=="BjornHein" && name.second=="") - { - name.first = "Björn"; - name.second = "Hein"; - } - - if (name.first=="Mattias" && name.second=="Fröhlich") - { - name.first = "Mathias"; - name.second = "Fröhlich"; - } - - if (name.first=="Mathias" && name.second=="Helsing") - { - name.first = "Mattias"; - name.second = "Helsing"; - } - - if (name.first=="Bjorn" && name.second=="Hein") - { - name.first = "Björn"; - name.second = "Hein"; - } + // If a matching name is found + if (name.first == nameCorrections[i].originalFirst && + name.second == nameCorrections[i].originalSecond) + { + // Return the correction + name.first = nameCorrections[i].correctedFirst; + name.second = nameCorrections[i].correctedSecond; - if (name.first=="Erik" && name.second=="van") - { - name.first = "Erik"; - name.second = "den Dekker"; - } - - if (name.first=="Erik" && name.second=="den") - { - name.first = "Erik"; - name.second = "den Dekker"; - } - - if (name.first=="Jeoen" && name.second=="den") - { - name.first = "Jeoen"; - name.second = "den Dekker"; - } - - if (name.first=="John" && name.second=="Vidar") - { - name.first = "John"; - name.second = "Vidar Larring"; - } - - if (name.first=="John" && name.second=="Vida") - { - name.first = "John"; - name.second = "Vidar Larring"; - } - - if (name.first=="Sebastien" && name.second=="Messerschmidt") - { - name.first = "Sebastian"; - name.second = "Messerschmidt"; - } - - if ((name.first=="Jose" || name.first=="José") && name.second=="Delport") - { - name.first = "J.P."; - name.second = "Delport"; - } - if (name.first=="Franz" && name.second=="Melchior") - { - name.first = "Melchior"; - name.second = "Franz"; - } - if (name.first=="Glen" && name.second=="Waldon") - { - name.first = "Glenn"; - name.second = "Waldron"; - } - if (name.first=="Ralf" && name.second=="Karn") - { - name.first = "Ralf"; - name.second = "Kern"; - } - if (name.first=="Donny" && name.second=="Cipperly") - { - name.first = "Donald"; - name.second = "Cipperly"; - } - if (name.first=="Gino" && name.second=="van") - { - name.first = "Gino"; - name.second = "van den Bergen"; - } - if (name.first=="Radu" && name.second=="Mihai") - { - name.first = "Mihai"; - name.second = "Radu"; - } - if (name.first=="Art" && name.second=="Trevs") - { - name.first = "Art"; - name.second = "Tevs"; - } - if (name.first=="Tim" && name.second=="More") - { - name.first = "Tim"; - name.second = "Moore"; - } - if (name.first=="Andre" && name.second=="Garneau") - { - name.first = "André"; - name.second = "Garneau"; - } - if (name.first=="Eric" && name.second=="Hammil") - { - name.first = "Chris"; - name.second = "Hanson"; - } - if (name.first=="Paul" && name.second=="de") - { - name.first = "Paul"; - name.second = "de Repentigny"; - } - if (name.first=="Raymond" && name.second=="de") - { - name.first = "Raymond"; - name.second = "de Vries"; - } - if (name.first=="Nick" && name.second=="") - { - name.first = "Trajce"; - name.second = "Nikolov"; - } - if (name.first=="Daniel" && name.second=="") - { - name.first = "Daniel"; - name.second = "Sjölie"; - } - if (name.first=="Julia" && name.second=="Ortiz") - { - name.first = "Julian"; - name.second = "Ortiz"; - } - if (name.first=="Rune" && name.second=="Schmidt") - { - name.first = "Rune"; - name.second = "Schmidt Jensen"; - } - if (name.first=="Romano" && name.second=="José") - { - name.first = "Romano"; - name.second = "José Magacho da Silva"; - } - if (name.first=="Rommano" && name.second=="Silva") - { - name.first = "Romano"; - name.second = "José Magacho da Silva"; - } - if (name.first=="Leandro" && name.second=="Motta") - { - name.first = "Leandro"; - name.second = "Motta Barros"; - } - if (name.first=="A" && name.second=="Botorabi") - { - name.first = "Ali"; - name.second = "Botorabi"; - } - - if (name.first=="Waltice" && name.second=="") - { - name.first = "Walter"; - name.second = "J. Altice"; - } - - if (name.first=="Drew" && name.second=="") - { - name.first = "Drew"; - name.second = "Whitehouse"; - } - if (name.first=="Douglas" && name.second=="A") - { - name.first = "Douglas"; - name.second = "A. Pouk"; - } - if (name.first=="Colin" && name.second=="MacDonald") - { - name.first = "Colin"; - name.second = "McDonald"; - } - if (name.first=="Nikolov" && name.second=="Trajce") - { - name.first = "Trajce"; - name.second = "Nikolov"; - } - if (name.first=="Frauciel" && name.second=="Luc") - { - name.first = "Luc"; - name.second = "Frauciel"; + // Early out, since we don't want corrections of corrections + return; + } } } -void lastValidCharacter(const std::string& name, unsigned int& pos,char c) + +void lastValidCharacter(const string& name, unsigned int& pos, char c) { - for(unsigned int i=0;i0) + + if (last > 0) { - std::string surname(second.begin(), second.begin()+last); - + string surname(second.begin(), second.begin() + last); + if (validName(surname)) { surname = typoCorrection(surname); return NamePair(name, surname); } } - + // filter any single or two letter words as unlike to be names. - if (name.size()<=2) return EmptyNamePair; - - return NamePair(name,""); + if (name.size() <= 2) return EmptyNamePair; + + return NamePair(name, ""); } + bool submissionsSequence(const Words& words, unsigned int& i) { - if (i+1>=words.size()) return false; - - if (words[i]=="From" || - words[i]=="from" || - words[i]=="From:" || - words[i]=="from:" || - words[i]=="Merged" || - words[i]=="Integrated") return true; - - if (i+2>=words.size()) return false; - - if (words[i]=="submitted" && words[i+1]=="by") + if (i + 1 >= words.size()) return false; + + if (words[i] == "From" || + words[i] == "from" || + words[i] == "From:" || + words[i] == "from:" || + words[i] == "Merged" || + words[i] == "Integrated") return true; + + if (i + 2 >= words.size()) return false; + + if (words[i] == "submitted" && words[i + 1] == "by") { - i+=1; - return true; - } - - if (words[i]=="Folded" && words[i+1]=="in") - { - i+=1; + i += 1; return true; } - if (words[i]=="Rolled" && words[i+1]=="in") + if (words[i] == "Folded" && words[i + 1] == "in") { - i+=1; + i += 1; return true; } - if (words[i]=="Checked" && words[i+1]=="in") + if (words[i] == "Rolled" && words[i + 1] == "in") { - i+=1; + i += 1; return true; } - if (i+3>=words.size()) return false; - - if (words[i]=="sent" && words[i+1]=="in" && words[i+2]=="by") + if (words[i] == "Checked" && words[i + 1] == "in") { - i+=2; + i += 1; + return true; + } + + if (i + 3 >= words.size()) return false; + + if (words[i] == "sent" && words[i + 1] == "in" && words[i + 2] == "by") + { + i += 2; return true; } return false; } -void readContributors(NameMap& names, const std::string& file) + +void readContributors(NameMap& names, const string& file) { osgDB::ifstream fin(file.c_str()); - + Words words; while(fin) { - std::string keyword; + string keyword; fin >> keyword; words.push_back(keyword); } - - std::string blank_string; - - for(unsigned int i=0; i< words.size(); ++i) + + string blank_string; + + for(unsigned int i = 0; i < words.size(); ++i) { - if (submissionsSequence(words,i)) + if (submissionsSequence(words, i)) { - if (i+21) + if (names.size() > 1) { - for(NameMap::iterator itr = names.begin(); - itr != names.end(); - ) + for (NameMap::iterator itr = names.begin(); itr != names.end(); ) { - if (itr->first.second.empty()) + if (itr->first.second.empty()) { NameMap::iterator next_itr = itr; ++next_itr; - - if (next_itr!=names.end() && itr->first.first==next_itr->first.first) + + if (next_itr != names.end() && itr->first.first == next_itr->first.first) { next_itr->second += itr->second; names.erase(itr); @@ -820,168 +758,166 @@ void readContributors(NameMap& names, const std::string& file) } } } - + // remove the double entries from Robert's contributions - if (names.size()>1) - { - for(NameMap::iterator itr = names.begin(); - itr != names.end(); - ++itr) + if (names.size() > 1) + { + for (NameMap::iterator itr = names.begin(); itr != names.end(); ++itr) { - if (itr->first != NameRobertOsfield && itr->first != NameDonBurns ) + if (itr->first != NameRobertOsfield && itr->first != NameDonBurns) { names[NameRobertOsfield] -= itr->second; } } } - - } + void buildContributors(NameMap& names) { // top five contributors - ++names[NamePair("Robert","Osfield")]; - ++names[NamePair("Don","Burns")]; - ++names[NamePair("Marco","Jez")]; - ++names[NamePair("Mike","Weiblen")]; - ++names[NamePair("Geoff","Michel")]; - ++names[NamePair("Ben","van Basten")]; - + ++names[NamePair("Robert", "Osfield")]; + ++names[NamePair("Don", "Burns")]; + ++names[NamePair("Marco", "Jez")]; + ++names[NamePair("Mike", "Weiblen")]; + ++names[NamePair("Geoff", "Michel")]; + ++names[NamePair("Ben", "van Basten")]; + // contributors that don't appear in the ChangeLog due to their contributions // being before CVS started for the OSG, or before the name logging began. - ++names[NamePair("Karsten","Weiss")]; - ++names[NamePair("Graeme","Harkness")]; - ++names[NamePair("Axel","Volley")]; - ++names[NamePair("Nikolaus","Hanekamp")]; - ++names[NamePair("Kristopher","Bixler")]; - ++names[NamePair("Tanguy","Fautré")]; - ++names[NamePair("J.E.","Hoffmann")]; + ++names[NamePair("Karsten", "Weiss")]; + ++names[NamePair("Graeme", "Harkness")]; + ++names[NamePair("Axel", "Volley")]; + ++names[NamePair("Nikolaus", "Hanekamp")]; + ++names[NamePair("Kristopher", "Bixler")]; + ++names[NamePair("Tanguy", "Fautré")]; + ++names[NamePair("J.E.", "Hoffmann")]; } -int main( int argc, char **argv) + +int main( int argc, char** argv) { - osg::ArgumentParser arguments(&argc,argv); - arguments.getApplicationUsage()->setCommandLineUsage(arguments.getApplicationName()+" [options]"); - arguments.getApplicationUsage()->addCommandLineOption("-h or --help","Display this information"); - arguments.getApplicationUsage()->addCommandLineOption("--entries","Print out number of entries into the ChangeLog file for each contributor."); - arguments.getApplicationUsage()->addCommandLineOption("--version-number","Print out version number only"); - arguments.getApplicationUsage()->addCommandLineOption("--major-number","Print out major version number only"); - arguments.getApplicationUsage()->addCommandLineOption("--minor-number","Print out minor version number only"); - arguments.getApplicationUsage()->addCommandLineOption("--patch-number","Print out patch version number only"); - arguments.getApplicationUsage()->addCommandLineOption("--so-number ","Print out shared object version number only"); - arguments.getApplicationUsage()->addCommandLineOption("--openthreads-version-number","Print out version number for OpenThreads only"); - arguments.getApplicationUsage()->addCommandLineOption("--openthreads-soversion-number","Print out shared object version number for OpenThreads only"); - arguments.getApplicationUsage()->addCommandLineOption("Matrix::value_type","Print the value of Matrix::value_type"); - arguments.getApplicationUsage()->addCommandLineOption("Plane::value_type","Print the value of Plane::value_type"); - arguments.getApplicationUsage()->addCommandLineOption("BoundingSphere::value_type","Print the value of BoundingSphere::value_type"); - arguments.getApplicationUsage()->addCommandLineOption("BoundingBox::value_type","Print the value of BoundingBox::value_type"); - arguments.getApplicationUsage()->addCommandLineOption("-r or --read ","Read the ChangeLog to generate an estimated contributors list."); + osg::ArgumentParser arguments(&argc, argv); + arguments.getApplicationUsage()->setCommandLineUsage(arguments.getApplicationName() + " [options]"); + arguments.getApplicationUsage()->addCommandLineOption("-h or --help", "Display this information"); + arguments.getApplicationUsage()->addCommandLineOption("--entries", "Print out number of entries into the ChangeLog file for each contributor."); + arguments.getApplicationUsage()->addCommandLineOption("--version-number", "Print out version number only"); + arguments.getApplicationUsage()->addCommandLineOption("--major-number", "Print out major version number only"); + arguments.getApplicationUsage()->addCommandLineOption("--minor-number", "Print out minor version number only"); + arguments.getApplicationUsage()->addCommandLineOption("--patch-number", "Print out patch version number only"); + arguments.getApplicationUsage()->addCommandLineOption("--so-number ", "Print out shared object version number only"); + arguments.getApplicationUsage()->addCommandLineOption("--openthreads-version-number", "Print out version number for OpenThreads only"); + arguments.getApplicationUsage()->addCommandLineOption("--openthreads-soversion-number", "Print out shared object version number for OpenThreads only"); + arguments.getApplicationUsage()->addCommandLineOption("Matrix::value_type", "Print the value of Matrix::value_type"); + arguments.getApplicationUsage()->addCommandLineOption("Plane::value_type", "Print the value of Plane::value_type"); + arguments.getApplicationUsage()->addCommandLineOption("BoundingSphere::value_type", "Print the value of BoundingSphere::value_type"); + arguments.getApplicationUsage()->addCommandLineOption("BoundingBox::value_type", "Print the value of BoundingBox::value_type"); + arguments.getApplicationUsage()->addCommandLineOption("-r or --read ", "Read the ChangeLog to generate an estimated contributors list."); if (arguments.read("--version-number")) { - std::cout<getCommandLineUsage()<write(std::cout,arguments.getApplicationUsage()->getCommandLineOptions()); + cout << arguments.getApplicationUsage()->getCommandLineUsage() << endl; + arguments.getApplicationUsage()->write(cout, arguments.getApplicationUsage()->getCommandLineOptions()); return 1; } @@ -993,39 +929,33 @@ int main( int argc, char **argv) { readContributors(names, changeLog); } - - typedef std::multimap SortedNameMap; - SortedNameMap sortedNames; - for(NameMap::iterator itr = names.begin(); - itr != names.end(); - ++itr) + typedef multimap SortedNameMap; + + SortedNameMap sortedNames; + for (NameMap::iterator itr = names.begin(); itr != names.end(); ++itr) { sortedNames.insert(SortedNameMap::value_type(itr->second, itr->first)); } - std::cout<first<<"\t"<second.first<<" "<second.second<first << "\t" << sitr->second.first << " " << sitr->second.second << endl; } } else { - std::cout<<"Firstname Surname"<second.first<<" "<second.second<second.first << " " << sitr->second.second << endl; } } }