微调定义
This commit is contained in:
parent
e698d6caa7
commit
3a08bb270d
|
@ -68,8 +68,8 @@ void StoryLine::buildPageHTML(QDomElement& parent) const {
|
||||||
dom_p.appendChild(doc.createTextNode(text_inst->content()));
|
dom_p.appendChild(doc.createTextNode(text_inst->content()));
|
||||||
dom_storyline.appendChild(dom_p);
|
dom_storyline.appendChild(dom_p);
|
||||||
}break;
|
}break;
|
||||||
case NovelNode::NodeRefer:
|
case NovelNode::PointRefers:
|
||||||
case NovelNode::NodeDefine: {
|
case NovelNode::PointDefines: {
|
||||||
auto element_inst = this->getElement(inst_c->element()->signature());
|
auto element_inst = this->getElement(inst_c->element()->signature());
|
||||||
element_inst->buildSliceHTML(dom_storyline);
|
element_inst->buildSliceHTML(dom_storyline);
|
||||||
}break;
|
}break;
|
||||||
|
@ -114,7 +114,7 @@ void StoryVolume::buildPageHTML(QDomElement& parent) const {
|
||||||
article_group.appendChild(doc_ins.createTextNode(u8"}"));
|
article_group.appendChild(doc_ins.createTextNode(u8"}"));
|
||||||
parent_element.appendChild(article_group);
|
parent_element.appendChild(article_group);
|
||||||
}break;
|
}break;
|
||||||
case NovelNode::NodeRefer:{
|
case NovelNode::PointRefers:{
|
||||||
auto fragment_inst = std::dynamic_pointer_cast<const FragmentRefers>(child->element());
|
auto fragment_inst = std::dynamic_pointer_cast<const FragmentRefers>(child->element());
|
||||||
auto refer_inst = this->getElement(fragment_inst->signature());
|
auto refer_inst = this->getElement(fragment_inst->signature());
|
||||||
refer_inst->buildSliceHTML(parent_element);
|
refer_inst->buildSliceHTML(parent_element);
|
||||||
|
@ -295,7 +295,7 @@ void Fragment::buildPageHTML(QDomElement& parent) const {
|
||||||
#include <ast_novel.h>
|
#include <ast_novel.h>
|
||||||
void tools_printer::build_fragments(std::shared_ptr<const ast_gen::ElementAccess> novel_root)
|
void tools_printer::build_fragments(std::shared_ptr<const ast_gen::ElementAccess> novel_root)
|
||||||
{
|
{
|
||||||
if (novel_root->element()->typeMark() == (int)NovelNode::NodeDefine) {
|
if (novel_root->element()->typeMark() == (int)NovelNode::PointDefines) {
|
||||||
auto inst = std::make_shared<Fragment>(novel_root);
|
auto inst = std::make_shared<Fragment>(novel_root);
|
||||||
auto name = novel_root->element()->signature();
|
auto name = novel_root->element()->signature();
|
||||||
this->fragment_defines[name] = inst;
|
this->fragment_defines[name] = inst;
|
||||||
|
@ -335,11 +335,11 @@ void tools_printer::build_storyline(std::shared_ptr<StoryLine> line, std::shared
|
||||||
else {
|
else {
|
||||||
switch ((NovelNode)novel_node->element()->typeMark())
|
switch ((NovelNode)novel_node->element()->typeMark())
|
||||||
{
|
{
|
||||||
case NovelNode::NodeDefine: {
|
case NovelNode::PointDefines: {
|
||||||
auto inst = this->fragment_defines[novel_node->element()->signature()];
|
auto inst = this->fragment_defines[novel_node->element()->signature()];
|
||||||
line->append(inst);
|
line->append(inst);
|
||||||
}return;
|
}return;
|
||||||
case NovelNode::NodeRefer: {
|
case NovelNode::PointRefers: {
|
||||||
auto refer_node = std::dynamic_pointer_cast<const FragmentRefers>(novel_node->element());
|
auto refer_node = std::dynamic_pointer_cast<const FragmentRefers>(novel_node->element());
|
||||||
auto refer_fragment = this->fragment_defines[refer_node->referSignature()];
|
auto refer_fragment = this->fragment_defines[refer_node->referSignature()];
|
||||||
auto inst = std::make_shared<FragmentRef>(novel_node);
|
auto inst = std::make_shared<FragmentRef>(novel_node);
|
||||||
|
@ -360,7 +360,7 @@ void tools_printer::build_volumeline(std::shared_ptr<StoryVolume> volume, std::s
|
||||||
build_volumeline(volume, inst_c);
|
build_volumeline(volume, inst_c);
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
if (NovelNode::NodeRefer == (NovelNode)novel_node->element()->typeMark()) {
|
if (NovelNode::PointRefers == (NovelNode)novel_node->element()->typeMark()) {
|
||||||
auto refer_node = std::dynamic_pointer_cast<const FragmentRefers>(novel_node->element());
|
auto refer_node = std::dynamic_pointer_cast<const FragmentRefers>(novel_node->element());
|
||||||
auto refer_fragment = this->fragment_defines[refer_node->referSignature()];
|
auto refer_fragment = this->fragment_defines[refer_node->referSignature()];
|
||||||
auto inst = std::make_shared<FragmentRef>(novel_node);
|
auto inst = std::make_shared<FragmentRef>(novel_node);
|
||||||
|
@ -436,7 +436,7 @@ QString printer::tools_printer::storylines_paint(const QList<std::shared_ptr<Sto
|
||||||
|
|
||||||
for (auto &frag : story->elements()) {
|
for (auto &frag : story->elements()) {
|
||||||
auto fragment_peers = frag->accessPeers()->element();
|
auto fragment_peers = frag->accessPeers()->element();
|
||||||
if (fragment_peers->typeMark() == (int)example_novel::NovelNode::NodeDefine) {
|
if (fragment_peers->typeMark() == (int)example_novel::NovelNode::PointDefines) {
|
||||||
auto fragment_elem = std::dynamic_pointer_cast<const example_novel::FragmentDefine>(fragment_peers);
|
auto fragment_elem = std::dynamic_pointer_cast<const example_novel::FragmentDefine>(fragment_peers);
|
||||||
auto node_name = fragment_elem->signature();
|
auto node_name = fragment_elem->signature();
|
||||||
node_records[node_name] = frag;
|
node_records[node_name] = frag;
|
||||||
|
@ -453,12 +453,12 @@ QString printer::tools_printer::storylines_paint(const QList<std::shared_ptr<Sto
|
||||||
|
|
||||||
QString previous_node = get_node_name(story);
|
QString previous_node = get_node_name(story);
|
||||||
for (auto &frag : story->elements()) {
|
for (auto &frag : story->elements()) {
|
||||||
if (example_novel::NovelNode::NodeDefine == (example_novel::NovelNode) frag->accessPeers()->element()->typeMark()) {
|
if (example_novel::NovelNode::PointDefines == (example_novel::NovelNode) frag->accessPeers()->element()->typeMark()) {
|
||||||
arrows_link += previous_node + u8"->" + get_node_name(frag) + QString(u8"[label=\"%1{%2}\"]\n")
|
arrows_link += previous_node + u8"->" + get_node_name(frag) + QString(u8"[label=\"%1{%2}\"]\n")
|
||||||
.arg(story_elem->name()).arg(story_elem->sort());
|
.arg(story_elem->name()).arg(story_elem->sort());
|
||||||
previous_node = get_node_name(frag);
|
previous_node = get_node_name(frag);
|
||||||
}
|
}
|
||||||
else if (example_novel::NovelNode::NodeRefer == (example_novel::NovelNode)frag->accessPeers()->element()->typeMark()) {
|
else if (example_novel::NovelNode::PointRefers == (example_novel::NovelNode)frag->accessPeers()->element()->typeMark()) {
|
||||||
auto frag_refer = std::dynamic_pointer_cast<const example_novel::FragmentRefers>(frag->accessPeers()->element());
|
auto frag_refer = std::dynamic_pointer_cast<const example_novel::FragmentRefers>(frag->accessPeers()->element());
|
||||||
auto frag_src = node_records[frag_refer->referSignature()];
|
auto frag_src = node_records[frag_refer->referSignature()];
|
||||||
arrows_link += previous_node + u8"->" + get_node_name(frag_src) + QString(u8"[label=\"%1{%2}\"]\n")
|
arrows_link += previous_node + u8"->" + get_node_name(frag_src) + QString(u8"[label=\"%1{%2}\"]\n")
|
||||||
|
@ -479,7 +479,7 @@ QString printer::tools_printer::volumes_paint(const QList<std::shared_ptr<StoryV
|
||||||
QString nodes_description;
|
QString nodes_description;
|
||||||
for (auto &frag : story->elements()) {
|
for (auto &frag : story->elements()) {
|
||||||
auto fragment_peers = frag->accessPeers()->element();
|
auto fragment_peers = frag->accessPeers()->element();
|
||||||
if (fragment_peers->typeMark() == (int)example_novel::NovelNode::NodeDefine) {
|
if (fragment_peers->typeMark() == (int)example_novel::NovelNode::PointDefines) {
|
||||||
auto fragment_elem = std::dynamic_pointer_cast<const example_novel::FragmentDefine>(fragment_peers);
|
auto fragment_elem = std::dynamic_pointer_cast<const example_novel::FragmentDefine>(fragment_peers);
|
||||||
node_records[fragment_elem->signature()] = frag;
|
node_records[fragment_elem->signature()] = frag;
|
||||||
nodes_description += get_node_name(frag) + QString(u8"[label=\"%1\",shape=\"ellipse\"]\n").arg(fragment_elem->name());
|
nodes_description += get_node_name(frag) + QString(u8"[label=\"%1\",shape=\"ellipse\"]\n").arg(fragment_elem->name());
|
||||||
|
@ -496,7 +496,7 @@ QString printer::tools_printer::volumes_paint(const QList<std::shared_ptr<StoryV
|
||||||
const std::shared_ptr<const ast_gen::ElementAccess> article_access, QList<QString> &arrows_out)->QString {
|
const std::shared_ptr<const ast_gen::ElementAccess> article_access, QList<QString> &arrows_out)->QString {
|
||||||
QString nodes_description;
|
QString nodes_description;
|
||||||
for (auto& fragment_access : article_access->children()) {
|
for (auto& fragment_access : article_access->children()) {
|
||||||
if (fragment_access->element()->typeMark() == (int)example_novel::NovelNode::NodeRefer) {
|
if (fragment_access->element()->typeMark() == (int)example_novel::NovelNode::PointRefers) {
|
||||||
auto refer_fragment = std::dynamic_pointer_cast<const example_novel::FragmentRefers>(fragment_access->element());
|
auto refer_fragment = std::dynamic_pointer_cast<const example_novel::FragmentRefers>(fragment_access->element());
|
||||||
nodes_description += QString(u8"fragment_%1[label=\"%2\",shape=\"plaintext\"]\n")
|
nodes_description += QString(u8"fragment_%1[label=\"%2\",shape=\"plaintext\"]\n")
|
||||||
.arg((qulonglong)refer_fragment.get()).arg(refer_fragment->fragmentRefer());
|
.arg((qulonglong)refer_fragment.get()).arg(refer_fragment->fragmentRefer());
|
||||||
|
@ -755,7 +755,7 @@ bool printer::AstGenerate::visit(std::shared_ptr<const ast_gen::ElementAccess> s
|
||||||
|
|
||||||
append_tokens(dom_story, story_node);
|
append_tokens(dom_story, story_node);
|
||||||
}break;
|
}break;
|
||||||
case NovelNode::NodeDefine: {
|
case NovelNode::PointDefines: {
|
||||||
while (element_stack.last().tagName() != u8"story") {
|
while (element_stack.last().tagName() != u8"story") {
|
||||||
element_stack.takeLast();
|
element_stack.takeLast();
|
||||||
}
|
}
|
||||||
|
@ -783,7 +783,7 @@ bool printer::AstGenerate::visit(std::shared_ptr<const ast_gen::ElementAccess> s
|
||||||
|
|
||||||
append_tokens(dom_text, text_node);
|
append_tokens(dom_text, text_node);
|
||||||
}break;
|
}break;
|
||||||
case NovelNode::NodeRefer:{
|
case NovelNode::PointRefers:{
|
||||||
while (element_stack.last().tagName() != u8"article" && element_stack.last().tagName() != u8"story") {
|
while (element_stack.last().tagName() != u8"article" && element_stack.last().tagName() != u8"story") {
|
||||||
element_stack.takeLast();
|
element_stack.takeLast();
|
||||||
}
|
}
|
||||||
|
|
|
@ -13,12 +13,12 @@ using namespace example_novel;
|
||||||
|
|
||||||
void FragmentExistsCheck::exists_check(std::shared_ptr<const GlobalElement> root,
|
void FragmentExistsCheck::exists_check(std::shared_ptr<const GlobalElement> root,
|
||||||
std::shared_ptr<const ElementAccess> target) const {
|
std::shared_ptr<const ElementAccess> target) const {
|
||||||
if (target->element()->typeMark() == (int)NovelNode::NodeRefer) {
|
if (target->element()->typeMark() == (int)NovelNode::PointRefers) {
|
||||||
auto refer = std::dynamic_pointer_cast<const FragmentRefers>(target->element());
|
auto refer = std::dynamic_pointer_cast<const FragmentRefers>(target->element());
|
||||||
auto signature = refer->storyRefer() + u8"&" + refer->fragmentRefer();
|
auto signature = refer->storyRefer() + u8"&" + refer->fragmentRefer();
|
||||||
if (!root->getNamedNodeBy((int)NovelNode::NodeDefine, signature))
|
if (!root->getNamedNodeBy((int)NovelNode::PointDefines, signature))
|
||||||
throw new SyntaxException(QString(u8"CheckError[0x0005]系统中不包含指定签名的节点:%1<type:%2>{%3:(%4)}")
|
throw new SyntaxException(QString(u8"CheckError[0x0005]系统中不包含指定签名的节点:%1<type:%2>{%3:(%4)}")
|
||||||
.arg(signature).arg((int)NovelNode::NodeDefine).arg(refer->signature()).arg(refer->filePath()));
|
.arg(signature).arg((int)NovelNode::PointDefines).arg(refer->signature()).arg(refer->filePath()));
|
||||||
}
|
}
|
||||||
|
|
||||||
for (auto& xit : target->children()) {
|
for (auto& xit : target->children()) {
|
||||||
|
@ -125,7 +125,7 @@ void FragmentGraphCheck::validCheck(std::shared_ptr<const ElementAccess> root) c
|
||||||
// 构建情节节点列表
|
// 构建情节节点列表
|
||||||
for (auto frag_primitive : fragment_items) {
|
for (auto frag_primitive : fragment_items) {
|
||||||
switch (frag_primitive->element()->typeMark()) {
|
switch (frag_primitive->element()->typeMark()) {
|
||||||
case (int)NovelNode::NodeDefine: {
|
case (int)NovelNode::PointDefines: {
|
||||||
auto target_node = std::dynamic_pointer_cast<const FragmentDefine>(frag_primitive->element());
|
auto target_node = std::dynamic_pointer_cast<const FragmentDefine>(frag_primitive->element());
|
||||||
auto finst = std::make_shared<FragmentGraphHelper>(target_node);
|
auto finst = std::make_shared<FragmentGraphHelper>(target_node);
|
||||||
|
|
||||||
|
@ -145,8 +145,8 @@ void FragmentGraphCheck::validCheck(std::shared_ptr<const ElementAccess> root) c
|
||||||
auto fragment_inst = fragment_items[idx];
|
auto fragment_inst = fragment_items[idx];
|
||||||
switch (fragment_inst->element()->typeMark())
|
switch (fragment_inst->element()->typeMark())
|
||||||
{
|
{
|
||||||
case (int)NovelNode::NodeDefine:
|
case (int)NovelNode::PointDefines:
|
||||||
case (int)NovelNode::NodeRefer:
|
case (int)NovelNode::PointRefers:
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
fragment_items.removeAt(idx);
|
fragment_items.removeAt(idx);
|
||||||
|
@ -157,11 +157,11 @@ void FragmentGraphCheck::validCheck(std::shared_ptr<const ElementAccess> root) c
|
||||||
|
|
||||||
auto get_name = [](std::shared_ptr<const ElementAccess> node)->QString {
|
auto get_name = [](std::shared_ptr<const ElementAccess> node)->QString {
|
||||||
switch (node->element()->typeMark()) {
|
switch (node->element()->typeMark()) {
|
||||||
case (int)NovelNode::NodeDefine: {
|
case (int)NovelNode::PointDefines: {
|
||||||
auto def_node = std::dynamic_pointer_cast<const FragmentDefine>(node->element());
|
auto def_node = std::dynamic_pointer_cast<const FragmentDefine>(node->element());
|
||||||
return def_node->signature();
|
return def_node->signature();
|
||||||
}break;
|
}break;
|
||||||
case (int)NovelNode::NodeRefer: {
|
case (int)NovelNode::PointRefers: {
|
||||||
auto ref_node = std::dynamic_pointer_cast<const FragmentRefers>(node->element());
|
auto ref_node = std::dynamic_pointer_cast<const FragmentRefers>(node->element());
|
||||||
return ref_node->referSignature();
|
return ref_node->referSignature();
|
||||||
}break;
|
}break;
|
||||||
|
|
|
@ -44,7 +44,7 @@ QString FragmentRefers::referSignature() const {
|
||||||
return storyRefer() + u8"&" + fragmentRefer();
|
return storyRefer() + u8"&" + fragmentRefer();
|
||||||
}
|
}
|
||||||
|
|
||||||
int FragmentRefers::typeMark() const { return (int)NovelNode::NodeRefer; }
|
int FragmentRefers::typeMark() const { return (int)NovelNode::PointRefers; }
|
||||||
|
|
||||||
bool FragmentRefers::isAnonymous() const
|
bool FragmentRefers::isAnonymous() const
|
||||||
{
|
{
|
||||||
|
@ -67,7 +67,7 @@ void example_novel::FragmentDefine::setName(const QString& nm)
|
||||||
this->name_store = nm;
|
this->name_store = nm;
|
||||||
}
|
}
|
||||||
|
|
||||||
int FragmentDefine::typeMark() const { return (int)NovelNode::NodeDefine; }
|
int FragmentDefine::typeMark() const { return (int)NovelNode::PointDefines; }
|
||||||
|
|
||||||
bool FragmentDefine::isAnonymous() const
|
bool FragmentDefine::isAnonymous() const
|
||||||
{
|
{
|
||||||
|
|
|
@ -6,8 +6,8 @@ namespace example_novel {
|
||||||
enum class NovelNode {
|
enum class NovelNode {
|
||||||
GlobalElement = 0,
|
GlobalElement = 0,
|
||||||
TextSection = 1,
|
TextSection = 1,
|
||||||
NodeRefer = 2,
|
PointRefers = 2,
|
||||||
NodeDefine = 3,
|
PointDefines = 3,
|
||||||
StoryDefine = 4,
|
StoryDefine = 4,
|
||||||
Document = 5,
|
Document = 5,
|
||||||
ArticleDefine = 6,
|
ArticleDefine = 6,
|
||||||
|
|
Loading…
Reference in New Issue