渐进改进

This commit is contained in:
codeboss 2025-02-02 22:30:47 +08:00
parent ff8eb5a8d5
commit bb3d6ee766
12 changed files with 65 additions and 65 deletions

View File

@ -88,7 +88,7 @@ void StoryChangePresent::type_change(int idx) {
_curr_refslice->loadCurrentSlice(nullptr);
_change_model->clear();
QList<shared_ptr<FragmentDefine>> fragms;
QList<shared_ptr<PointDefines>> fragms;
if (!idx) {
fragms = base_compare.changeCompare(Type::UpstreamAlter, g_old);
}
@ -138,7 +138,7 @@ void StoryChangePresent::fragment_selected(const QModelIndex& item) {
auto story_inst = this->base_compare.graphBind()[story_item->text()];
auto fragm_slice = story_inst->getFragment(fragm_item->text());
auto fragm_def = dynamic_pointer_cast<FragmentDefine>(fragm_slice);
auto fragm_def = dynamic_pointer_cast<PointDefines>(fragm_slice);
_defn_fragment->loadCurrentSlice(fragm_def);
connect(_story_appoint, QOverload<const QString&>::of(&QComboBox::currentIndexChanged),
@ -151,7 +151,7 @@ void StoryChangePresent::fragment_selected(const QModelIndex& item) {
}
void StoryChangePresent::storyline_selected(const QString& line) {
auto def_fragm = dynamic_pointer_cast<FragmentDefine>(_defn_fragment->currentSlice());
auto def_fragm = dynamic_pointer_cast<PointDefines>(_defn_fragment->currentSlice());
auto flag = _story_appoint->currentData();
for (auto slice : def_fragm->referSlices()) {
@ -215,7 +215,7 @@ QVariant StorylineModel::data(const QModelIndex& index, int role) const {
}
case SliceType::FragmentDefines:
{
auto node = dynamic_pointer_cast<FragmentDefine>(curr_node);
auto node = dynamic_pointer_cast<PointDefines>(curr_node);
return node->getTextNode()->getLines();
}
case SliceType::PointRefers:
@ -257,7 +257,7 @@ bool StorylineModel::setData(const QModelIndex& index, const QVariant& value, in
}break;
case SliceType::FragmentDefines:
{
auto defnode = dynamic_pointer_cast<FragmentDefine>(curr_node);
auto defnode = dynamic_pointer_cast<PointDefines>(curr_node);
defnode->getTextNode()->setLines(value.toString());
}break;
case SliceType::PointRefers:

View File

@ -13,9 +13,9 @@ const QHash<QString, std::shared_ptr<xast_parse::StoryDefine>>& compare::Compare
return _graph_base;
}
QList<shared_ptr<FragmentDefine>>
QList<shared_ptr<PointDefines>>
Compare::changeCompare(Type _type, const QHash<QString, shared_ptr<StoryDefine>>& g_old) const {
QList<shared_ptr<FragmentDefine>> values;
QList<shared_ptr<PointDefines>> values;
for (auto& type : _graph_base.keys()) {
if (g_old.contains(type)) {
@ -26,15 +26,15 @@ Compare::changeCompare(Type _type, const QHash<QString, shared_ptr<StoryDefine>>
QList<QString> fragmets_define;
while (story_new_temp) {
if (story_new_temp->type() == SliceType::FragmentDefines) {
auto fragm = std::dynamic_pointer_cast<FragmentDefine>(story_new_temp);
auto fragm = std::dynamic_pointer_cast<PointDefines>(story_new_temp);
fragmets_define << fragm->name();
}
story_new_temp = story_new_temp->nextSlice();
}
for (auto fragm : fragmets_define) {
auto fragm_this = std::dynamic_pointer_cast<FragmentDefine>(story_new->getFragment(fragm));
auto fragm_peer = std::dynamic_pointer_cast<FragmentDefine>(story_old->getFragment(fragm));
auto fragm_this = std::dynamic_pointer_cast<PointDefines>(story_new->getFragment(fragm));
auto fragm_peer = std::dynamic_pointer_cast<PointDefines>(story_old->getFragment(fragm));
if (fragm_peer) {
if (_type == Type::FragmentAlter) {
if (fragment_check(fragm_this, fragm_peer))
@ -52,7 +52,7 @@ Compare::changeCompare(Type _type, const QHash<QString, shared_ptr<StoryDefine>>
return values;
}
bool Compare::fragment_check(std::shared_ptr<FragmentDefine> a, std::shared_ptr<FragmentDefine> b) const
bool Compare::fragment_check(std::shared_ptr<PointDefines> a, std::shared_ptr<PointDefines> b) const
{
auto texts_a = a->getTextNode();
auto texts_b = b->getTextNode();
@ -138,8 +138,8 @@ bool Compare::upstream_check(std::shared_ptr<IElementSlice> a, std::shared_ptr<I
}break;
default:
{
desc_a = std::dynamic_pointer_cast<FragmentDefine>(prev_slice_a)->getTextNode()->getLines();
desc_b = std::dynamic_pointer_cast<FragmentDefine>(prev_slice_b)->getTextNode()->getLines();
desc_a = std::dynamic_pointer_cast<PointDefines>(prev_slice_a)->getTextNode()->getLines();
desc_b = std::dynamic_pointer_cast<PointDefines>(prev_slice_b)->getTextNode()->getLines();
}
break;
}
@ -149,8 +149,8 @@ bool Compare::upstream_check(std::shared_ptr<IElementSlice> a, std::shared_ptr<I
}
if (a->type() == SliceType::FragmentDefines) {
auto slices_a = std::dynamic_pointer_cast<FragmentDefine>(a)->referSlices();
auto slices_b = std::dynamic_pointer_cast<FragmentDefine>(b)->referSlices();
auto slices_a = std::dynamic_pointer_cast<PointDefines>(a)->referSlices();
auto slices_b = std::dynamic_pointer_cast<PointDefines>(b)->referSlices();
if(slices_a.size() != slices_b.size())
return true;

View File

@ -17,7 +17,7 @@ namespace compare {
const QHash<QString, std::shared_ptr<xast_parse::StoryDefine>> &graphBind() const;
QList<std::shared_ptr<xast_parse::FragmentDefine>> changeCompare(Type type,
QList<std::shared_ptr<xast_parse::PointDefines>> changeCompare(Type type,
const QHash<QString, std::shared_ptr<xast_parse::StoryDefine>>& g_old) const;
private:
@ -27,7 +27,7 @@ namespace compare {
* @param b
* @return true-
*/
bool fragment_check(std::shared_ptr<xast_parse::FragmentDefine> a, std::shared_ptr<xast_parse::FragmentDefine> b) const;
bool fragment_check(std::shared_ptr<xast_parse::PointDefines> a, std::shared_ptr<xast_parse::PointDefines> b) const;
/*
* @brief
* @param a

View File

@ -50,7 +50,7 @@ void StoryPresent::loadXAST(const QString& ast_path)
switch (frag_temp->type()) {
case SliceType::FragmentDefines:
{
auto arrow_tail = std::dynamic_pointer_cast<FragmentDefine>(frag_temp)->name() + u8"@" + story_line->name();
auto arrow_tail = std::dynamic_pointer_cast<PointDefines>(frag_temp)->name() + u8"@" + story_line->name();
arrows << graph_data::Arrow(arrow_start, arrow_tail);
arrow_start = arrow_tail;
}break;
@ -85,7 +85,7 @@ void StoryPresent::nodeClickAccept(const QPointF& pos, const QString& node_name)
switch (temp_node->type()) {
case SliceType::FragmentDefines:
{
auto fragm = std::dynamic_pointer_cast<FragmentDefine>(temp_node);
auto fragm = std::dynamic_pointer_cast<PointDefines>(temp_node);
node_names << QString(u8"%1@%2").arg(fragm->name(), node_name);
}break;
case SliceType::PointRefers:
@ -113,7 +113,7 @@ void StoryPresent::nodeClickAccept(const QPointF& pos, const QString& node_name)
auto splits = node_name.split(u8"@", QString::SkipEmptyParts);
auto story_line = this->_story_graph[splits.last()];
auto fragm_slice = story_line->getFragment(splits.first());
auto fragm_defn = std::dynamic_pointer_cast<FragmentDefine>(fragm_slice);
auto fragm_defn = std::dynamic_pointer_cast<PointDefines>(fragm_slice);
auto refers = fragm_defn->referSlices();

View File

@ -82,7 +82,7 @@ shared_ptr<IElementSlice> StoryDefine::getFragment(const QString& name) {
auto temp_node = this->firstChild();
while (temp_node) {
if (temp_node->type() == SliceType::FragmentDefines) {
if (dynamic_pointer_cast<FragmentDefine>(temp_node)->name() == name)
if (dynamic_pointer_cast<PointDefines>(temp_node)->name() == name)
return temp_node;
}
temp_node = temp_node->nextSlice();
@ -98,24 +98,24 @@ uint StoryDefine::index() const {
return this->sort_store;
}
FragmentDefine::FragmentDefine(const QString& name, shared_ptr<StoryDefine> pnode)
PointDefines::PointDefines(const QString& name, shared_ptr<StoryDefine> pnode)
: __DesElement(SliceType::FragmentDefines, static_pointer_cast<IElementSlice>(pnode)), name_store(name) { }
QString FragmentDefine::name() const {
QString PointDefines::name() const {
return name_store;
}
QList<shared_ptr<IElementSlice>> FragmentDefine::referSlices() const {
QList<shared_ptr<IElementSlice>> PointDefines::referSlices() const {
return this->refs_list;
}
void FragmentDefine::appendRefer(shared_ptr<IElementSlice> slice) {
void PointDefines::appendRefer(shared_ptr<IElementSlice> slice) {
if (this->refs_list.contains(slice))
return;
this->refs_list << slice;
}
QList<QString> FragmentDefine::nameSet() const {
QList<QString> PointDefines::nameSet() const {
return parentSlice().lock()->nameSet() << name();
}
@ -151,11 +151,11 @@ QString FragmentRefer::fragmentRefer() const {
return this->fragment_refers;
}
weak_ptr<FragmentDefine> FragmentRefer::referTarget() const {
weak_ptr<PointDefines> FragmentRefer::referTarget() const {
return this->refer_targets;
}
void FragmentRefer::setReferTowards(shared_ptr<FragmentDefine> target) {
void FragmentRefer::setReferTowards(shared_ptr<PointDefines> target) {
this->refer_targets = target;
}
@ -341,9 +341,9 @@ shared_ptr<TextParagraph> XAST_Parser::text_paragraph_build(shared_ptr<__Collect
return inst;
}
shared_ptr<FragmentDefine> XAST_Parser::fragment_define_build(shared_ptr<StoryDefine> pnode, const QDomElement& e) {
shared_ptr<PointDefines> XAST_Parser::fragment_define_build(shared_ptr<StoryDefine> pnode, const QDomElement& e) {
auto fname = e.attribute(u8"name");
auto fragm = make_shared<FragmentDefine>(fname, pnode);
auto fragm = make_shared<PointDefines>(fname, pnode);
auto temp_elm = e.firstChildElement();
while (!temp_elm.isNull()) {
@ -380,7 +380,7 @@ void XAST_Parser::fragments_plait(QHash<QString, shared_ptr<StoryDefine>> story_
auto refer_inst = static_pointer_cast<FragmentRefer>(slice);
auto story_target = story_map[refer_inst->storyRefer()];
auto fragm_target = story_target->getFragment(refer_inst->fragmentRefer());
auto fragm_cast = static_pointer_cast<FragmentDefine>(fragm_target);
auto fragm_cast = static_pointer_cast<PointDefines>(fragm_target);
fragm_cast->appendRefer(refer_inst);
refer_inst->setReferTowards(fragm_cast);
@ -507,7 +507,7 @@ void xast_parse::XAST_Parser::write_story(std::shared_ptr<StoryDefine> inst, con
this->write_text(1, std::dynamic_pointer_cast<TextParagraph>(temp), o);
break;
case SliceType::FragmentDefines:
this->write_fragmdef(1, std::dynamic_pointer_cast<FragmentDefine>(temp), o);
this->write_fragmdef(1, std::dynamic_pointer_cast<PointDefines>(temp), o);
break;
case SliceType::PointRefers:
this->write_fragmref(1, std::dynamic_pointer_cast<FragmentRefer>(temp), o);
@ -529,7 +529,7 @@ void xast_parse::XAST_Parser::write_text(int dep, std::shared_ptr<TextParagraph>
out << QString(dep * 2, ' ') << text << "\n";
}
void xast_parse::XAST_Parser::write_fragmdef(int dep, std::shared_ptr<FragmentDefine> inst, QTextStream& out)
void xast_parse::XAST_Parser::write_fragmdef(int dep, std::shared_ptr<PointDefines> inst, QTextStream& out)
{
out << QString(dep * 2, ' ') << QString(u8"{Çé½Ú %1\n").arg(inst->name());
this->write_text(dep + 1, inst->getTextNode(), out);

View File

@ -133,14 +133,14 @@ namespace xast_parse {
/// <summary>
/// Çé½Ú¶¨Òå½Úµã
/// </summary>
class FragmentDefine : public __DesElement {
class PointDefines : public __DesElement {
private:
QString name_store;
QList<std::shared_ptr<IElementSlice>> refs_list;
public:
FragmentDefine(const QString& name, std::shared_ptr<StoryDefine> pnode);
virtual ~FragmentDefine() = default;
PointDefines(const QString& name, std::shared_ptr<StoryDefine> pnode);
virtual ~PointDefines() = default;
virtual QString name() const;
@ -156,7 +156,7 @@ namespace xast_parse {
class FragmentRefer : public __DesElement {
private:
QString story_refers, fragment_refers;
std::weak_ptr<FragmentDefine> refer_targets;
std::weak_ptr<PointDefines> refer_targets;
public:
FragmentRefer(const QString& story, const QString& fragm, std::shared_ptr<IElementSlice> pnode);
@ -165,8 +165,8 @@ namespace xast_parse {
virtual QString storyRefer() const;
virtual QString fragmentRefer() const;
virtual std::weak_ptr<FragmentDefine> referTarget() const;
virtual void setReferTowards(std::shared_ptr<FragmentDefine> target);
virtual std::weak_ptr<PointDefines> referTarget() const;
virtual void setReferTowards(std::shared_ptr<PointDefines> target);
// IElementSlice
virtual QList<QString> nameSet() const override;
@ -237,7 +237,7 @@ namespace xast_parse {
uint text_sections_count(const QList<QDomElement>& elms);
std::shared_ptr<TextParagraph> text_paragraph_build(std::shared_ptr<__CollectionElement> pnode, QList<QDomElement>& elms, uint count);
std::shared_ptr<FragmentDefine> fragment_define_build(std::shared_ptr<StoryDefine> pnode, const QDomElement& e);
std::shared_ptr<PointDefines> fragment_define_build(std::shared_ptr<StoryDefine> pnode, const QDomElement& e);
std::shared_ptr<FragmentRefer> fragment_refer_build(std::shared_ptr<__CollectionElement> pnode, const QDomElement& e);
void fragments_plait(QHash<QString, std::shared_ptr<StoryDefine>> story_map, std::shared_ptr<ICollection> reflist);
@ -247,7 +247,7 @@ namespace xast_parse {
void write_rank(std::shared_ptr<RankDecs> inst, const QDir &odir);
void write_story(std::shared_ptr<StoryDefine> inst, const QDir &odir);
void write_text(int dep, std::shared_ptr<TextParagraph> inst, QTextStream &out);
void write_fragmdef(int dep, std::shared_ptr<FragmentDefine> inst, QTextStream& out);
void write_fragmdef(int dep, std::shared_ptr<PointDefines> inst, QTextStream& out);
void write_fragmref(int dep, std::shared_ptr<FragmentRefer> inst, QTextStream& out);
void write_volume(std::shared_ptr<VolumeDefine> inst, const QDir &odir);

View File

@ -236,7 +236,7 @@ QList<std::shared_ptr<FragmentRef>> Fragment::additionals() const {
void Fragment::buildSliceHTML(QDomElement& parent) const {
auto syntax_access = this->accessPeers();
auto fragment_inst = std::dynamic_pointer_cast<const FragmentDefine>(syntax_access->element());
auto fragment_inst = std::dynamic_pointer_cast<const PointDefines>(syntax_access->element());
auto doc = parent.ownerDocument();
auto dom_fragment = doc.createElement("div");
@ -264,7 +264,7 @@ void Fragment::buildSliceHTML(QDomElement& parent) const {
void Fragment::buildPageHTML(QDomElement& parent) const {
auto syntax_access = this->accessPeers();
auto fragment_inst = std::dynamic_pointer_cast<const FragmentDefine>(syntax_access->element());
auto fragment_inst = std::dynamic_pointer_cast<const PointDefines>(syntax_access->element());
auto doc = parent.ownerDocument();
auto dom_fragment = doc.createElement("div");
@ -437,7 +437,7 @@ QString printer::tools_printer::storylines_paint(const QList<std::shared_ptr<Sto
for (auto &frag : story->elements()) {
auto fragment_peers = frag->accessPeers()->element();
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::PointDefines>(fragment_peers);
auto node_name = fragment_elem->signature();
node_records[node_name] = frag;
@ -480,7 +480,7 @@ QString printer::tools_printer::volumes_paint(const QList<std::shared_ptr<StoryV
for (auto &frag : story->elements()) {
auto fragment_peers = frag->accessPeers()->element();
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::PointDefines>(fragment_peers);
node_records[fragment_elem->signature()] = frag;
nodes_description += get_node_name(frag) + QString(u8"[label=\"%1\",shape=\"ellipse\"]\n").arg(fragment_elem->name());
}
@ -761,7 +761,7 @@ bool printer::AstGenerate::visit(std::shared_ptr<const ast_gen::ElementAccess> s
}
auto current_story = element_stack.last();
auto fragment_node = std::dynamic_pointer_cast<const example_novel::FragmentDefine>(syntax_element->element());
auto fragment_node = std::dynamic_pointer_cast<const example_novel::PointDefines>(syntax_element->element());
auto dom_fragment = doc.createElement(u8"fragment");
current_story.appendChild(dom_fragment);
element_stack.append(dom_fragment);

View File

@ -126,7 +126,7 @@ void FragmentGraphCheck::validCheck(std::shared_ptr<const ElementAccess> root) c
for (auto frag_primitive : fragment_items) {
switch (frag_primitive->element()->typeMark()) {
case (int)NovelNode::PointDefines: {
auto target_node = std::dynamic_pointer_cast<const FragmentDefine>(frag_primitive->element());
auto target_node = std::dynamic_pointer_cast<const PointDefines>(frag_primitive->element());
auto finst = std::make_shared<FragmentGraphHelper>(target_node);
self->setElement(finst);
@ -158,7 +158,7 @@ void FragmentGraphCheck::validCheck(std::shared_ptr<const ElementAccess> root) c
auto get_name = [](std::shared_ptr<const ElementAccess> node)->QString {
switch (node->element()->typeMark()) {
case (int)NovelNode::PointDefines: {
auto def_node = std::dynamic_pointer_cast<const FragmentDefine>(node->element());
auto def_node = std::dynamic_pointer_cast<const PointDefines>(node->element());
return def_node->signature();
}break;
case (int)NovelNode::PointRefers: {
@ -215,9 +215,9 @@ QString FragmentGraphCheck::name() const {
return u8"Çé½ÚÍøÂçÓÐЧÐÔ¼ì²éÆ÷";
}
FragmentGraphHelper::FragmentGraphHelper(std::shared_ptr<const FragmentDefine> node) : node_peer(node) {}
FragmentGraphHelper::FragmentGraphHelper(std::shared_ptr<const PointDefines> node) : node_peer(node) {}
std::shared_ptr<const FragmentDefine> FragmentGraphHelper::nodePeer() const
std::shared_ptr<const PointDefines> FragmentGraphHelper::nodePeer() const
{
return this->node_peer;
}

View File

@ -41,14 +41,14 @@ namespace example_novel {
class FragmentGraphHelper : public std::enable_shared_from_this<FragmentGraphHelper> {
private:
std::shared_ptr<const example_novel::FragmentDefine> node_peer;
std::shared_ptr<const example_novel::PointDefines> node_peer;
QList<std::shared_ptr<FragmentGraphHelper>> next_nodes;
uint indegree = 0;
public:
FragmentGraphHelper(std::shared_ptr<const example_novel::FragmentDefine> node);
FragmentGraphHelper(std::shared_ptr<const example_novel::PointDefines> node);
std::shared_ptr<const example_novel::FragmentDefine> nodePeer() const;
std::shared_ptr<const example_novel::PointDefines> nodePeer() const;
void appendNext(std::shared_ptr<FragmentGraphHelper> node);
QList<std::shared_ptr<FragmentGraphHelper>> nextList() const;

View File

@ -57,24 +57,24 @@ QString PointRefers::signature() const {
}
FragmentDefine::FragmentDefine(std::shared_ptr<const ExprRule> rule_bind)
PointDefines::PointDefines(std::shared_ptr<const ExprRule> rule_bind)
: AbstractImpl(rule_bind) {}
QString FragmentDefine::name() const { return name_store; }
QString PointDefines::name() const { return name_store; }
void example_novel::FragmentDefine::setName(const QString& nm)
void example_novel::PointDefines::setName(const QString& nm)
{
this->name_store = nm;
}
int FragmentDefine::typeMark() const { return (int)NovelNode::PointDefines; }
int PointDefines::typeMark() const { return (int)NovelNode::PointDefines; }
bool FragmentDefine::isAnonymous() const
bool PointDefines::isAnonymous() const
{
return false;
}
QString FragmentDefine::signature() const { return parent()->signature() + u8"&" + name(); }
QString PointDefines::signature() const { return parent()->signature() + u8"&" + name(); }
StoryDefine::StoryDefine(std::shared_ptr<const ExprRule> rule_bind)

View File

@ -67,9 +67,9 @@ namespace example_novel {
QString story_refs, fragment_ref;
};
class LIBSYNTAX_EXPORT FragmentDefine : public AbstractImpl {
class LIBSYNTAX_EXPORT PointDefines : public AbstractImpl {
public:
FragmentDefine(std::shared_ptr<const lib_syntax::ExprRule> rule_bind);
PointDefines(std::shared_ptr<const lib_syntax::ExprRule> rule_bind);
QString name() const;
void setName(const QString& nm);

View File

@ -47,14 +47,14 @@ auto decl_expr = ElementRule<TextSection>(u8"decl_section", (int)NovelExprs::DES
}))
);
void frags_nmset(std::shared_ptr<FragmentDefine> inst, std::shared_ptr<const lib_token::IToken> token) {
void frags_nmset(std::shared_ptr<PointDefines> inst, std::shared_ptr<const lib_token::IToken> token) {
inst->setName(token->content());
}
auto fragment_decl = ElementRule<FragmentDefine>(u8"fragment_define", (int)NovelExprs::FRAG_DEFINES).reloadRule(
auto fragment_decl = ElementRule<PointDefines>(u8"fragment_define", (int)NovelExprs::FRAG_DEFINES).reloadRule(
std::make_shared<const Seqs>(Rules{
MR(FragmentDefine, leftb), MR(FragmentDefine, frag_key), MER(FragmentDefine, frags_nmset, name_text) } <<
MR(PointDefines, leftb), MR(PointDefines, frag_key), MER(PointDefines, frags_nmset, name_text) } <<
OptR(decl_expr) <<
MR(FragmentDefine, rightb)
MR(PointDefines, rightb)
));
void frags_snm_set(std::shared_ptr<PointRefers> inst, std::shared_ptr<const lib_token::IToken> token) {