Exteor/include/xtr/io/CstGraphExporter.h

57 lines
1.5 KiB
C
Raw Permalink Normal View History

2024-06-07 20:30:06 +03:00
#pragma once
#include "xtr/io/OptionsIO.hpp"
#include "xtr/doc/FileTypes.h"
#include <string_view>
namespace xtr::io {
//! Export CstGraph
class CstGraphExporter {
const ccl::semantic::RSCore& target;
CstGraphOptions options{};
public:
explicit CstGraphExporter(const ccl::semantic::RSCore& target) noexcept
: target{ target } {}
public:
[[nodiscard]] BOOL Export(const CstGraphOptions& exportParams, CString fileName, FileType type);
private:
struct Triplet {
std::string_view from;
io::LinkType type;
std::string_view to;
};
template<typename LinePutter>
void OutputLinks(const io::LinkType linkType, LinePutter out) {
for (const auto toID : target.List()) {
switch (linkType) {
case io::LinkType::formula: {
for (const auto fromID : target.RSLang().Graph().InputsFor(toID)) {
out(Triplet{ target.GetRS(fromID).alias, linkType, target.GetRS(toID).alias });
}
break;
}
case io::LinkType::lexTerm: {
for (const auto fromID : target.Texts().TermGraph().InputsFor(toID)) {
out(Triplet{ target.GetRS(fromID).alias, linkType, target.GetRS(toID).alias });
}
break;
}
case io::LinkType::lexDef: {
for (const auto fromID : target.Texts().DefGraph().InputsFor(toID)) {
out(Triplet{ target.GetRS(fromID).alias, linkType, target.GetRS(toID).alias });
}
break;
}
case io::LinkType::size_: break;
}
}
}
};
} // namespace xtr::io