aboutsummaryrefslogtreecommitdiffhomepage
path: root/tools/bookmaker/bookmaker.cpp
diff options
context:
space:
mode:
authorGravatar Cary Clark <caryclark@skia.org>2018-02-27 09:54:21 -0500
committerGravatar Skia Commit-Bot <skia-commit-bot@chromium.org>2018-02-27 15:12:59 +0000
commitf895a420c93f18df10dc95da182025847a0e061a (patch)
tree8108cfdf8afa28275f7abc3df54d428973ae0dda /tools/bookmaker/bookmaker.cpp
parent0a3b12bbcec77cb7007e0c3421a84affdc27a146 (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.cpp95
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;