diff options
author | 2018-02-27 09:54:21 -0500 | |
---|---|---|
committer | 2018-02-27 15:12:59 +0000 | |
commit | f895a420c93f18df10dc95da182025847a0e061a (patch) | |
tree | 8108cfdf8afa28275f7abc3df54d428973ae0dda /tools/bookmaker/bookmaker.cpp | |
parent | 0a3b12bbcec77cb7007e0c3421a84affdc27a146 (diff) |
work on skimageinfo
work on skimageinfo
Docs-Preview: https://skia.org/?cl=109081
TBR=caryclark@google.com
Bug: skia:6898
Change-Id: I4d1734647ef1fa879d08b04c64142c7f16abc858
Reviewed-on: https://skia-review.googlesource.com/109081
Commit-Queue: Cary Clark <caryclark@skia.org>
Reviewed-by: Cary Clark <caryclark@skia.org>
Diffstat (limited to 'tools/bookmaker/bookmaker.cpp')
-rw-r--r-- | tools/bookmaker/bookmaker.cpp | 95 |
1 files changed, 89 insertions, 6 deletions
diff --git a/tools/bookmaker/bookmaker.cpp b/tools/bookmaker/bookmaker.cpp index f3641a92d5..02dbbc1961 100644 --- a/tools/bookmaker/bookmaker.cpp +++ b/tools/bookmaker/bookmaker.cpp @@ -48,6 +48,7 @@ enum comments should be disallowed unless after #Enum and before first #Const trouble with aliases, plurals need to keep first letter of includeWriter @param / @return lowercase Quad -> quad, Quads -> quads +deprecated methods should be sorted down in md out, and show include "Deprecated." text body. see head of selfCheck.cpp for additional todos */ @@ -60,7 +61,7 @@ see head of selfCheck.cpp for additional todos */ bool BmhParser::addDefinition(const char* defStart, bool hasEnd, MarkType markType, - const vector<string>& typeNameBuilder) { + const vector<string>& typeNameBuilder, HasTag hasTag) { Definition* definition = nullptr; switch (markType) { case MarkType::kComment: @@ -144,6 +145,11 @@ bool BmhParser::addDefinition(const char* defStart, bool hasEnd, MarkType markTy return false; } } + if (HasTag::kYes == hasTag) { + if (!this->checkEndMarker(markType, definition->fName)) { + return false; + } + } if (!this->popParentStack(definition)) { return false; } @@ -221,6 +227,9 @@ bool BmhParser::addDefinition(const char* defStart, bool hasEnd, MarkType markTy string fullTopic = hasEnd ? fParent->fFiddle : definition->fFiddle; Definition* defPtr = fTopicMap[fullTopic]; if (hasEnd) { + if (HasTag::kYes == hasTag && !this->checkEndMarker(markType, fullTopic)) { + return false; + } if (!definition) { definition = defPtr; } else if (definition != defPtr) { @@ -366,6 +375,7 @@ bool BmhParser::addDefinition(const char* defStart, bool hasEnd, MarkType markTy case MarkType::kDuration: case MarkType::kFile: case MarkType::kHeight: + case MarkType::kIllustration: case MarkType::kImage: case MarkType::kIn: case MarkType::kLine: @@ -469,6 +479,33 @@ void BmhParser::reportDuplicates(const Definition& def, const string& dup) const } } + +static Definition* find_fiddle(Definition* def, string name) { + if (MarkType::kExample == def->fMarkType && name == def->fFiddle) { + return def; + } + for (auto& child : def->fChildren) { + Definition* result = find_fiddle(child, name); + if (result) { + return result; + } + } + return nullptr; +} + +Definition* BmhParser::findExample(string name) const { + for (const auto& topic : fTopicMap) { + if (topic.second->fParent) { + continue; + } + Definition* def = find_fiddle(topic.second, name); + if (def) { + return def; + } + } + return nullptr; +} + static void find_examples(const Definition& def, vector<string>* exampleNames) { if (MarkType::kExample == def.fMarkType) { exampleNames->push_back(def.fFiddle); @@ -478,6 +515,39 @@ static void find_examples(const Definition& def, vector<string>* exampleNames) { } } +bool BmhParser::checkEndMarker(MarkType markType, string match) const { + TextParser tp(fFileName, fLine, fChar, fLineCount); + tp.skipSpace(); + if (fMC != tp.next()) { + return this->reportError<bool>("mismatched end marker expect #"); + } + const char* nameStart = tp.fChar; + tp.skipToNonAlphaNum(); + string markName(nameStart, tp.fChar - nameStart); + if (fMaps[(int) markType].fName != markName) { + return this->reportError<bool>("expected #XXX ## to match"); + } + tp.skipSpace(); + nameStart = tp.fChar; + tp.skipToNonAlphaNum(); + markName = string(nameStart, tp.fChar - nameStart); + if ("" == markName) { + if (fMC != tp.next() || fMC != tp.next()) { + return this->reportError<bool>("expected ##"); + } + return true; + } + std::replace(markName.begin(), markName.end(), '-', '_'); + auto defPos = match.rfind(markName); + if (string::npos == defPos) { + return this->reportError<bool>("mismatched end marker v1"); + } + if (markName.size() != match.size() - defPos) { + return this->reportError<bool>("mismatched end marker v2"); + } + return true; +} + bool BmhParser::checkExamples() const { vector<string> exampleNames; for (const auto& topic : fTopicMap) { @@ -731,7 +801,8 @@ bool BmhParser::findDefinitions() { } else { vector<string> parentName; parentName.push_back(fParent->fName); - if (!this->addDefinition(fChar - 1, true, fParent->fMarkType, parentName)) { + if (!this->addDefinition(fChar - 1, true, fParent->fMarkType, parentName, + HasTag::kNo)) { return false; } } @@ -775,7 +846,8 @@ bool BmhParser::findDefinitions() { if (hasEnd && expectEnd) { SkASSERT(fMC != this->peek()); } - if (!this->addDefinition(defStart, hasEnd, markType, typeNameBuilder)) { + if (!this->addDefinition(defStart, hasEnd, markType, typeNameBuilder, + HasTag::kYes)) { return false; } continue; @@ -1527,6 +1599,7 @@ vector<string> BmhParser::typeName(MarkType markType, bool* checkEnd) { case MarkType::kDuration: case MarkType::kFile: case MarkType::kHeight: + case MarkType::kIllustration: case MarkType::kImage: case MarkType::kIn: case MarkType::kLiteral: @@ -1613,10 +1686,14 @@ string BmhParser::uniqueName(const string& base, MarkType markType) { int number = 2; string numBuilder(builder); do { - for (const auto& iter : fParent->fChildren) { + for (auto& iter : fParent->fChildren) { if (markType == iter->fMarkType) { if (iter->fName == numBuilder) { - fCloned = true; + if (iter->fDeprecated) { + iter->fClone = true; + } else { + fCloned = true; + } numBuilder = builder + '_' + to_string(number); goto tryNext; } @@ -1669,8 +1746,14 @@ tryNext: ; } if (MarkType::kMethod == markType) { cloned->fCloned = true; + if (cloned->fDeprecated) { + cloned->fClone = true; + } else { + fCloned = true; + } + } else { + fCloned = true; } - fCloned = true; numBuilder = builder + '_' + to_string(number); } while (++number); return numBuilder; |