aboutsummaryrefslogtreecommitdiffhomepage
path: root/tools/bookmaker/bookmaker.h
diff options
context:
space:
mode:
Diffstat (limited to 'tools/bookmaker/bookmaker.h')
-rw-r--r--tools/bookmaker/bookmaker.h95
1 files changed, 61 insertions, 34 deletions
diff --git a/tools/bookmaker/bookmaker.h b/tools/bookmaker/bookmaker.h
index 7bb743c9cb..db0d9926db 100644
--- a/tools/bookmaker/bookmaker.h
+++ b/tools/bookmaker/bookmaker.h
@@ -120,6 +120,8 @@ enum class MarkType {
kNoExample,
kOutdent,
kParam,
+ kPhraseDef,
+ kPhraseRef,
kPlatform,
kPopulate,
kPrivate,
@@ -504,6 +506,12 @@ public:
}
}
+ void skipPhraseName() {
+ while (fChar < fEnd && (islower(fChar[0]) || '_' == fChar[0])) {
+ fChar++;
+ }
+ }
+
void skipToSpace() {
while (fChar < fEnd && ' ' != fChar[0]) {
fChar++;
@@ -637,6 +645,17 @@ public:
return fChar + index;
}
+ const char* trimmedBracketEnd(string bracket) const {
+ size_t max = (size_t) (this->lineLength());
+ string line(fChar, max);
+ size_t index = line.find(bracket);
+ SkASSERT(index < max);
+ while (index > 0 && ' ' >= fChar[index - 1]) {
+ --index;
+ }
+ return fChar + index;
+ }
+
const char* trimmedLineEnd() const {
const char* result = this->lineEnd();
while (result > fChar && ' ' >= result[-1]) {
@@ -730,17 +749,6 @@ public:
kFileType,
};
- enum class TrimExtract {
- kNo,
- kYes
- };
-
- enum class ExampleOptions {
- kText,
- kPng,
- kAll
- };
-
enum class MethodType {
kNone,
kConstructor,
@@ -775,13 +783,14 @@ public:
Definition() {}
- Definition(const char* start, const char* end, int line, Definition* parent)
+ Definition(const char* start, const char* end, int line, Definition* parent, char mc)
: fStart(start)
, fContentStart(start)
, fContentEnd(end)
, fParent(parent)
, fLineCount(line)
- , fType(Type::kWord) {
+ , fType(Type::kWord)
+ , fMC(mc) {
if (parent) {
SkASSERT(parent->fFileName.length() > 0);
fFileName = parent->fFileName;
@@ -789,31 +798,31 @@ public:
this->setParentIndex();
}
- Definition(MarkType markType, const char* start, int line, Definition* parent)
- : Definition(markType, start, nullptr, line, parent) {
+ Definition(MarkType markType, const char* start, int line, Definition* parent, char mc)
+ : Definition(markType, start, nullptr, line, parent, mc) {
}
- Definition(MarkType markType, const char* start, const char* end, int line, Definition* parent)
- : Definition(start, end, line, parent) {
+ Definition(MarkType markType, const char* start, const char* end, int line, Definition* parent, char mc)
+ : Definition(start, end, line, parent, mc) {
fMarkType = markType;
fType = Type::kMark;
}
- Definition(Bracket bracket, const char* start, int lineCount, Definition* parent)
- : Definition(start, nullptr, lineCount, parent) {
+ Definition(Bracket bracket, const char* start, int lineCount, Definition* parent, char mc)
+ : Definition(start, nullptr, lineCount, parent, mc) {
fBracket = bracket;
fType = Type::kBracket;
}
Definition(KeyWord keyWord, const char* start, const char* end, int lineCount,
- Definition* parent)
- : Definition(start, end, lineCount, parent) {
+ Definition* parent, char mc)
+ : Definition(start, end, lineCount, parent, mc) {
fKeyWord = keyWord;
fType = Type::kKeyWord;
}
- Definition(Punctuation punctuation, const char* start, int lineCount, Definition* parent)
- : Definition(start, nullptr, lineCount, parent) {
+ Definition(Punctuation punctuation, const char* start, int lineCount, Definition* parent, char mc)
+ : Definition(start, nullptr, lineCount, parent, mc) {
fPunctuation = punctuation;
fType = Type::kPunctuation;
}
@@ -845,8 +854,6 @@ public:
return nullptr;
}
- bool exampleToScript(string* result, ExampleOptions ) const;
- string extractText(TrimExtract trimExtract) const;
string fiddleName() const;
const Definition* findClone(string match) const;
string formatFunction(Format format) const;
@@ -901,8 +908,6 @@ public:
fParentIndex = fParent ? (int) fParent->fTokens.size() : -1;
}
- void setWrapper();
-
const Definition* topicParent() const {
Definition* test = fParent;
while (test) {
@@ -936,6 +941,7 @@ public:
MethodType fMethodType = MethodType::kNone;
Operator fOperator = Operator::kUnknown;
Type fType = Type::kNone;
+ char fMC = '#';
bool fClone = false;
bool fCloned = false;
bool fDeprecated = false;
@@ -958,12 +964,12 @@ public:
RootDefinition() {
}
- RootDefinition(MarkType markType, const char* start, int line, Definition* parent)
- : Definition(markType, start, line, parent) {
+ RootDefinition(MarkType markType, const char* start, int line, Definition* parent, char mc)
+ : Definition(markType, start, line, parent, mc) {
}
RootDefinition(MarkType markType, const char* start, const char* end, int line,
- Definition* parent) : Definition(markType, start, end, line, parent) {
+ Definition* parent, char mc) : Definition(markType, start, end, line, parent, mc) {
}
~RootDefinition() override {
@@ -1205,6 +1211,12 @@ public:
kClone, // resolved, output, with references to clones as well
};
+ enum class ExampleOptions {
+ kText,
+ kPng,
+ kAll
+ };
+
enum class Exemplary {
kNo,
kYes,
@@ -1222,6 +1234,11 @@ public:
kYes,
};
+ enum class TrimExtract {
+ kNo,
+ kYes
+ };
+
#define M(mt) (1LL << (int) MarkType::k##mt)
#define M_D M(Description)
#define M_CS M(Class) | M(Struct)
@@ -1287,6 +1304,8 @@ public:
, { "NoExample", nullptr, MarkType::kNoExample, R_O, E_N, M_CSST | M_E | M(Method) }
, { "Outdent", nullptr, MarkType::kOutdent, R_N, E_N, M(Code) }
, { "Param", nullptr, MarkType::kParam, R_Y, E_N, M(Method) }
+, { "PhraseDef", nullptr, MarkType::kPhraseDef, R_Y, E_N, M(Subtopic) }
+, { "", nullptr, MarkType::kPhraseRef, R_Y, E_N, 0 }
, { "Platform", nullptr, MarkType::kPlatform, R_N, E_N, M(Example) | M(NoExample) }
, { "Populate", nullptr, MarkType::kPopulate, R_N, E_N, M(Subtopic) }
, { "Private", nullptr, MarkType::kPrivate, R_N, E_N, 0 }
@@ -1333,13 +1352,17 @@ public:
const vector<string>& typeNameBuilder, HasTag hasTag);
bool checkEndMarker(MarkType markType, string name) const;
bool checkExamples() const;
+ const char* checkForFullTerminal(const char* end, const Definition* ) const;
bool checkParamReturn(const Definition* definition) const;
+ bool dumpExamples(FILE* fiddleOut, Definition& def, bool* continuation) const;
bool dumpExamples(const char* fiddleJsonFileName) const;
bool childOf(MarkType markType) const;
string className(MarkType markType);
bool collectExternals();
int endHashCount() const;
bool endTableColumn(const char* end, const char* terminator);
+ bool exampleToScript(Definition*, ExampleOptions, string* result ) const;
+ string extractText(const Definition* , TrimExtract ) const;
RootDefinition* findBmhObject(MarkType markType, const string& typeName) const {
auto map = fMaps[(int) markType].fBmh;
@@ -1383,6 +1406,7 @@ public:
fCheckMethods = false;
}
+ void setWrapper(Definition* def) const;
bool skipNoName();
bool skipToDefinitionEnd(MarkType markType);
bool skipToString();
@@ -1418,6 +1442,7 @@ public:
unordered_map<string, RootDefinition> fTypedefMap;
unordered_map<string, Definition*> fTopicMap;
unordered_map<string, Definition*> fAliasMap;
+ unordered_map<string, Definition*> fPhraseMap;
RootDefinition* fRoot;
Definition* fWorkingColumn;
Definition* fRow;
@@ -1485,6 +1510,8 @@ public:
, { nullptr, MarkType::kNoExample }
, { nullptr, MarkType::kOutdent }
, { nullptr, MarkType::kParam }
+ , { nullptr, MarkType::kPhraseDef }
+ , { nullptr, MarkType::kPhraseRef }
, { nullptr, MarkType::kPlatform }
, { nullptr, MarkType::kPopulate }
, { nullptr, MarkType::kPrivate }
@@ -1517,11 +1544,11 @@ public:
void addKeyword(KeyWord keyWord);
void addPunctuation(Punctuation punctuation) {
- fParent->fTokens.emplace_back(punctuation, fChar, fLineCount, fParent);
+ fParent->fTokens.emplace_back(punctuation, fChar, fLineCount, fParent, '\0');
}
void addWord() {
- fParent->fTokens.emplace_back(fIncludeWord, fChar, fLineCount, fParent);
+ fParent->fTokens.emplace_back(fIncludeWord, fChar, fLineCount, fParent, '\0');
fIncludeWord = nullptr;
}
@@ -1602,7 +1629,7 @@ public:
void pushBracket(Bracket bracket) {
this->setBracketShortCuts(bracket);
- fParent->fTokens.emplace_back(bracket, fChar, fLineCount, fParent);
+ fParent->fTokens.emplace_back(bracket, fChar, fLineCount, fParent, '\0');
Definition* container = &fParent->fTokens.back();
this->addDefinition(container);
}
@@ -1889,7 +1916,7 @@ public:
void constOut(const Definition* memberStart, const Definition& child,
const Definition* bmhConst);
- void descriptionOut(const Definition* def, SkipFirstLine );
+ void descriptionOut(const Definition* def, SkipFirstLine , Phrase );
void enumHeaderOut(const RootDefinition* root, const Definition& child);
void enumMembersOut(const RootDefinition* root, Definition& child);
void enumSizeItems(const Definition& child);