74 action_sizer.Add(
m_Panel->GetPanel(), 1, wxALIGN_CENTER_HORIZONTAL | wxALL, 2);
75 action_sizer.Layout();
77 parent_panel->Layout();
79 parent_panel->Refresh();
87 catch (
const exception& ex) {
99 wxPanel* panel =
m_Panel->GetPanel();
101 wxSizer* sizer = panel->GetContainingSizer();
103 sizer->Detach(panel);
113 if (!
m_Panel->TransferDataFromPanel())
129 const auto& fn_args = fn_it.m_FArgs;
131 for (
auto& arg :
m_Args) {
132 auto it = fn_args.find(arg->GetName());
133 if (it!= fn_args.end()) {
134 arg->SetValue() = it->second;
139 auto field_type_from =
func_info.front().m_FieldTypeFrom;
141 for (
auto& arg :
m_Args) {
142 const auto& name = arg->GetName();
157 auto field_type_to =
func_info.front().m_FieldTypeTo;
159 for (
auto& arg :
m_Args) {
160 const auto& name = arg->GetName();
202 return ret &&
m_Panel->TransferDataToPanel();
208 for (
auto& it : args) {
209 vars += it +
" = %" +
m_ArgList[it].GetValue() +
"%\n";
227 return { macro::CMacroFunction_PubFields::sm_PubTitle,
228 macro::CMacroFunction_PubFields::sm_PubAffil,
229 macro::CMacroFunction_PubFields::sm_PubAuthors,
230 macro::CMacroFunction_PubFields::sm_PubCit,
231 macro::CMacroFunction_PubFields::sm_PubDate,
232 macro::CMacroFunction_PubFields::sm_PubVolume,
233 macro::CMacroFunction_PubFields::sm_PubIssue,
234 macro::CMacroFunction_PubFields::sm_PubJournal,
235 macro::CMacroFunction_PubFields::sm_PubPages,
236 macro::CMacroFunction_PubFields::sm_PubPMID,
237 macro::CMacroFunction_PubFields::sm_PubClass,
238 macro::CMacroFunction_PubFields::sm_PubStatus,
239 macro::CMacroFunction_PubFields::sm_PubSerialNumber };
428 wxTreeItemData* data =
nullptr;
437 action_data->SetTarget(node.
GetTarget());
465 const string& target = macro_rep.GetForEachString();
467 if (target.empty() || do_funcs.empty())
471 sort(do_funcs.begin(), do_funcs.end());
472 do_funcs.erase(unique(do_funcs.begin(), do_funcs.end()), do_funcs.end());
474 vector<EMActionType> possible_types;
476 for (
const auto& type_it :
types) {
479 vector<string> possible_actions = data_it->second->GetFunctionNames();
480 sort(possible_actions.begin(), possible_actions.end());
481 if (do_funcs.size() == 1) {
482 if (possible_actions == do_funcs) {
483 possible_types.push_back(data_it->first);
487 if (includes(possible_actions.begin(), possible_actions.end(), do_funcs.begin(), do_funcs.end())) {
488 const auto& main_fncs = data_it->second->GetMainFunctions();
489 if (!main_fncs.empty()) {
490 for (
const auto& fnc_it : main_fncs) {
491 if (find(do_funcs.begin(), do_funcs.end(), fnc_it) != do_funcs.end()) {
492 possible_types.push_back(data_it->first);
497 possible_types.push_back(data_it->first);
503 LOG_POST(
Info <<
"Possible types: " << possible_types.size());
504 sort(possible_types.begin(), possible_types.end());
505 possible_types.erase(unique(possible_types.begin(), possible_types.end()), possible_types.end());
508 if (possible_types.empty()) {
509 LOG_POST(
Error <<
"Functions not recognized for this action:");
510 for (
const auto& it : do_funcs) {
516 else if (possible_types.size() == 1) {
536 if (find(need_processing.begin(), need_processing.end(), possible_types[0]) != need_processing.end()) {
537 if (!macro_interpret.
PostProcess(possible_types[0])) {
546 if (macro_rep.GetForEachString() == macro::CMacroBioData::sm_BioSource) {
551 else if (possible_types.size() > 1) {
554 if (macro_rep.GetForEachString() == macro::CMacroBioData::sm_BioSource) {
594 NStr::EqualNocase(fnc_it.m_FName, macro::CMacroFunction_SetQual::GetFuncName())) {
601 else if (fnc_it.m_FieldTypeFrom == fnc_it.m_FieldTypeTo && fnc_it.m_FieldTypeFrom ==
EMacroFieldType::eRNA) {
604 else if (find(possible_types.begin(), possible_types.end(),
EMActionType::eCopyRNA) != possible_types.end())
608 else if (find(possible_types.begin(), possible_types.end(),
EMActionType::eSwapRNA) != possible_types.end())
626 else if (find(possible_types.begin(), possible_types.end(),
EMActionType::eRmvGene) != possible_types.end())
641 if (qual_it != fnc_it.m_FArgs.end() && qual_it->second ==
"gene allele") {
647 else if (find(possible_types.begin(), possible_types.end(),
EMActionType::eEditRNA) != possible_types.end())
649 else if (find(possible_types.begin(), possible_types.end(),
EMActionType::eRmvRNA) != possible_types.end())
698 if (field_it != fnc_it.m_FArgs.end() && field_it->second ==
"db-xref") {
712 if (possible_types.size() == 2 &&
719 possible_types.erase(possible_types.begin());
727 auto sel_type = possible_types.front();
737 if (field_it == fnc_it.m_FArgs.end())
748 if (from_it == fnc_it.m_FArgs.end())
753 if (to_it == fnc_it.m_FArgs.end())
764 auto& fn_args = fnc_it.m_FArgs;
766 if ((field_it != fn_args.end()) && (field_it->second ==
"comment" || field_it->second ==
"product")) {
767 field_it->second =
"mRNA " + field_it->second;
770 if ((field_it != fn_args.end()) && (field_it->second ==
"comment" || field_it->second ==
"product")) {
771 field_it->second =
"mRNA " + field_it->second;
792 if (field_name.empty())
return;
804 feature = field_name.substr(0, pos);
805 field = field_name.substr(pos + 1);
810 rna_type = ncRNA_class = rna_qual =
kEmptyStr;
814 const string kGeneComment =
"gene comment";
815 if (find(rna_fields.begin(), rna_fields.end(), kGeneComment) != rna_fields.end() &&
817 rna_qual = kGeneComment;
818 if (kGeneComment.length() < field_name.length()) {
819 rna_type = field_name.substr(0, field_name.length() - kGeneComment.length());
824 for (
auto&& it : rna_fields) {
827 if (it.length() < field_name.length()) {
828 rna_type = field_name.substr(0, field_name.length() - it.length());
837 if (!rna_qual.empty()) {
838 if (rna_type.empty()) {
842 string remainder = rna_type;
844 rna_type =
"miscRNA";
850 for (
auto&& it : rna_types) {
851 string major_type = it;
853 string remainder = rna_type.substr(major_type.length());
856 ncRNA_class = remainder;
858 if (ncRNA_class.empty()) {
862 rna_type = major_type;
873 string modified_field = field_name;
875 modified_field = field_name.substr(4,
NPOS);
878 modified_field =
"ncRNA ncRNA class";
883 string GetRNAFieldname(
const string& rna_type,
const string& ncRNA_type,
const string& rna_qual)
886 if (rna_type ==
"any" && (ncRNA_type.empty() || ncRNA_type ==
"any")) {
889 else if (rna_type ==
"mRNA" ||
890 rna_type ==
"tRNA" ||
891 rna_type ==
"rRNA" ||
892 rna_type ==
"tmRNA") {
893 field = rna_type +
" " + rna_qual;
895 else if (rna_type ==
"miscRNA") {
896 field =
string(
"misc_RNA") +
" " + rna_qual;
898 else if (rna_type ==
"preRNA") {
899 field =
string(
"pre_RNA") +
" " + rna_qual;
901 else if (rna_type ==
"ncRNA") {
902 if (ncRNA_type.empty() || ncRNA_type ==
"any") {
903 field = rna_type +
" " + rna_qual;
906 field = rna_type +
" " + ncRNA_type +
" " + rna_qual;
915 if (feature ==
"CDS") {
916 if (field ==
"product" ||
918 field ==
"activity" ||
928 void GetMemberNames(
const string& container,
const string& field,
string& member_type,
string& member_name,
string& main_qual_name)
930 member_type.resize(0);
931 member_name.resize(0);
932 main_qual_name = field;
935 member_type =
"subtype";
936 member_name =
"subname";
939 member_type =
"subtype";
940 member_name =
"name";
943 field ==
"codons_recognized") {
944 member_type =
"qual";
948 member_type =
"qual";
950 main_qual_name =
"satellite";
953 member_type =
"qual";
959 member_type =
"qual";
966 if (field.empty() || rt_var.empty() || container.empty()) {
972 string main_qualifier = field;
973 GetMemberNames(container, field, field_type, member, main_qualifier);
975 string func = rt_var +
" = " + macro::CMacroFunction_Resolve::GetFuncName();
976 func +=
"(\"" + container +
"\")";
977 func +=
" WHERE " + rt_var +
"." + field_type +
" = \"" + main_qualifier +
"\"";
979 if (constraints.empty()) {
985 TConstraints::iterator it = constraints.begin();
986 while (it != constraints.end()) {
987 auto& field_ref = it->first;
988 if (field_ref.find(macro::CMacroFunction_StructVoucherPart::GetFuncName()) !=
NPOS) {
989 if (it->second.find(field) !=
NPOS) {
991 func +=
" AND " + it->second;
992 if (remove_constraint) {
993 it = constraints.erase(it);
998 else if ((field ==
macro::kSatelliteName && field_ref.find(macro::CMacroFunction_SatelliteName::GetFuncName()) !=
NPOS) ||
1000 if (field_ref.find(macro::CMacroFunction_RelatedFeatures::GetFuncName()) ==
NPOS) {
1001 func +=
" AND " + it->second;
1002 if (remove_constraint) {
1003 it = constraints.erase(it);
1010 if (field_ref.find(macro::CMacroFunction_RelatedFeatures::GetFuncName()) ==
NPOS) {
1011 func +=
" AND " + it->second;
1012 if (remove_constraint) {
1013 it = constraints.erase(it);
1018 else if (field_ref.find(
',') !=
NPOS) {
1019 vector<string> tokens;
1021 for (
auto& word : tokens) {
1028 size_t pos = it->second.find(field_ref);
1030 string new_field =
"\"" + rt_var +
"." + member +
"\"";
1031 string new_constraint = it->second;
1033 func +=
" AND " + new_constraint;
1034 if (remove_constraint) {
1035 it = constraints.erase(it);
1050 if (field.empty() || rt_var.empty() || constraints.empty()) {
1056 TConstraints::iterator it = constraints.begin();
1057 while (it != constraints.end()) {
1058 if (it->first.find(field) !=
NPOS) {
1060 func = rt_var +
" = " + macro::CMacroFunction_Resolve::GetFuncName();
1061 func +=
"(\"" + field +
"\") ";
1064 if (func.find(
"WHERE") ==
NPOS) {
1071 string new_constraint = it->second;
1073 func += new_constraint;
1074 if (remove_constraint) {
1075 it = constraints.erase(it);
1082 if (!func.empty()) {
1091 string resolve_fnc, var_name = path;
1097 if (!resolve_fnc.empty()) {
1101 return make_pair(resolve_fnc, var_name);
1107 string resolve_fnc, var_name = path;
1110 if (path.find(
',') !=
NPOS) {
1111 vector<string> tokens;
1120 if (!resolve_fnc.empty()) {
1129 if (!resolve_fnc.empty()) {
1132 }
else if (path ==
"dbxref") {
1134 if (!resolve_fnc.empty()) {
1138 return make_pair(resolve_fnc, var_name);
1144 string resolve_fnc, var_name = path;
1147 if (path.find(
',') !=
NPOS) {
1148 vector<string> tokens;
1162 resolve_fnc.clear();
1163 var_name = tokens[1];
1171 if (!resolve_fnc.empty()) {
1175 else if (path ==
"dbxref") {
1177 if (!resolve_fnc.empty()) {
1181 return make_pair(resolve_fnc, var_name);
1185 TConstraints& constraints,
bool remove_constraint,
bool& is_gbqual)
1188 string resolve_fnc, var_name = path;
1191 if (path.find(
',') !=
NPOS) {
1193 vector<string> tokens;
1202 var_name = tokens[1];
1209 if (!resolve_fnc.empty()) {
1213 return make_pair(resolve_fnc, var_name);
1219 string resolve_fnc, var_name = path;
1222 if (path.find(
',') !=
NPOS) {
1223 vector<string> tokens;
1227 if (!resolve_fnc.empty()) {
1235 if (!resolve_fnc.empty()) {
1239 return make_pair(resolve_fnc, var_name);
1245 string resolve_fnc, var_name = path;
1248 if (path.find(
',') !=
NPOS) {
1249 vector<string> tokens;
1259 resolve_fnc.clear();
1260 var_name = tokens[1];
1267 if (!resolve_fnc.empty()) {
1271 return make_pair(resolve_fnc, var_name);
1277 string resolve_fnc, var_name = path;
1280 if (path.find(
',') !=
NPOS) {
1281 vector<string> tokens;
1291 if (!resolve_fnc.empty()) {
1295 return make_pair(resolve_fnc, var_name);
1299 const string& rt_var,
TConstraints& constraints,
bool remove_constraint,
bool& is_gbqual)
1302 string resolve_fnc, var_name = path;
1305 if (path.find(
',') !=
NPOS) {
1307 vector<string> tokens;
1311 var_name = tokens[1];
1317 if (!resolve_fnc.empty()) {
1321 return make_pair(resolve_fnc, var_name);
1326 if (field.empty() || rt_var.empty()) {
1330 string lcl_field = field;
1349 field ==
"codons_recognized") {
1353 if (member.empty()) {
1357 return rt_var +
'.' + member;
1368 rt_var = regexp.
GetSub(pub_func);
1369 if (rt_var ==
"()") {
1381 if (!rt_var.empty()) {
1382 func = rt_var +
" = " + pub_func;
1388 TConstraints::iterator it = constraints.begin();
1389 while (it != constraints.end()) {
1391 if (func.find(
"WHERE") ==
NPOS) {
1400 it = constraints.erase(it);
1413 if (field.empty() || rt_var.empty())
return kEmptyStr;
1416 if (!rt_var.empty()) {
1417 func = rt_var +
" = " + pub_func;
1423 TConstraints::iterator it = constraints.begin();
1424 while (it != constraints.end()) {
1426 if (func.find(
"WHERE") ==
NPOS) {
1435 it = constraints.erase(it);
1449 func = rt_var +
" = " + macro::CMacroFunction_PubFields::sm_PubAuthors +
"()";
1451 TConstraints::iterator it = constraints.begin();
1452 while (it != constraints.end()) {
1459 size_t pos =
NStr::Find(it->second, macro::CMacroFunction_PubFields::sm_PubAuthors);
1462 string search = macro::CMacroFunction_PubFields::sm_PubAuthors +
string(
"(\"" + constr_field +
"\")");
1463 string replace =
"\"" + rt_var +
"." + constr_field +
"\"";
1466 if (func.find(
"WHERE") ==
NPOS) {
1473 it = constraints.erase(it);
1486 rt_var =
"dblink_obj";
1487 string func = rt_var +
" = " + macro::CMacroFunction_Resolve::GetFuncName();
1488 func +=
"(\"data\") WHERE EQUALS(\"" + rt_var +
".label.str\", \"" + field +
"\", true);\n";
1491 string temp_rtvar =
"data_obj";
1492 string temp_func = temp_rtvar +
" = " + macro::CMacroFunction_Resolve::GetFuncName();
1493 temp_func +=
"(\"" + rt_var +
".data.strs\")";
1494 found_constraint =
false;
1496 TConstraints::iterator it = constraints.begin();
1497 while (it != constraints.end()) {
1498 if (it->second.find(field) !=
NPOS) {
1499 auto pos = it->second.find(
"AND");
1501 it->second = it->second.substr(pos + 4,
NPOS);
1502 if (temp_func.find(
"WHERE") ==
NPOS) {
1503 temp_func +=
" WHERE ";
1506 temp_func +=
" AND ";
1508 temp_func += it->second;
1509 found_constraint =
true;
1510 it = constraints.erase(it);
1514 string dblinktype_func = macro::CMacroFunction_GetDBLink::GetFuncName();
1515 dblinktype_func +=
"(\"" + field +
"\")";
1516 auto pos = it->second.find(dblinktype_func);
1519 if (temp_func.find(
"WHERE") ==
NPOS) {
1520 temp_func +=
" WHERE ";
1523 temp_func +=
" AND ";
1525 temp_func += it->second;
1526 found_constraint =
true;
1527 it = constraints.erase(it);
1537 if (found_constraint) {
1539 rt_var = temp_rtvar;
1546 if (constraints.empty() || rt_var.empty()) {
1549 string func = rt_var +
" = " + macro::CMacroFunction_Resolve::GetFuncName();
1550 func +=
"(\"" + path +
"\")";
1553 TConstraints::iterator it = constraints.begin();
1554 while (it != constraints.end()) {
1556 if (it->second.find(macro::CMacroFunction_GetDBXref::GetFuncName()) !=
NPOS) {
1557 expr = macro::CMacroFunction_GetDBXref::GetFuncName() +
"()";
1560 else if (path ==
"org.db" && it->second.find(path) !=
NPOS) {
1564 if (!expr.empty()) {
1565 if (func.find(
"WHERE") ==
NPOS) {
1572 it = constraints.erase(it);
1580 return (found) ? func +
";\n" :
kEmptyStr;
1586 if (rt_var.empty()) {
1590 string func = rt_var +
" = " + macro::CMacroFunction_Resolve::GetFuncName();
1591 func +=
"(\"org.orgname.mod\")";
1593 auto pos = field.find_last_of(
'-');
1594 auto subtype = field.substr(0, pos);
1595 func +=
" WHERE " + rt_var +
".subtype = \"" + subtype +
"\"";
1597 found_constraint =
false;
1598 TConstraints::iterator it = constraints.begin();
1599 while (it != constraints.end()) {
1600 if (it->second.find(subtype) !=
NPOS) {
1602 if (func.find(
"WHERE") ==
NPOS) {
1609 it = constraints.erase(it);
1610 found_constraint =
true;
1616 return func +
";\n";
1622 func = rt_var +
" = " + macro::CMacroFunction_ValueFromTable::GetFuncName();
1623 func +=
"(" +
kTableName +
", " + col +
");\n";
1625 TConstraints::iterator it = constraints.begin();
1626 while (it != constraints.end()) {
1627 if (it->second.find(macro::CMacroFunction_InTable::GetFuncName()) !=
NPOS) {
1628 if (it->second.find(filename) !=
NPOS) {
1629 string quoted =
"\"" + filename +
"\"";
1633 warning.assign(
"The given file names differ from each other");
1638 if (!warning.empty())
1640 warning +=
"the same column number is specified twice";
1651 TConstraints::iterator it = constraints.begin();
1652 while (it != constraints.end()) {
1653 if (it->second.find(macro::CMacroFunction_InTable::GetFuncName()) !=
NPOS) {
1654 if (it->second.find(filename) !=
NPOS) {
1655 string quoted =
"\"" + filename +
"\"";
1659 warning.assign(
"The given file names differ from each other");
1662 for (
auto&& col_it : values) {
1665 if (!warning.empty())
1667 warning +=
"the same column number is specified twice";
1671 if (it->second.find(
"(\"\",") !=
NPOS) {
1672 warning +=
"InTable() field is empty";
1682 string func = rt_var +
" = " + macro::CMacroFunction_ValueFromTable::GetFuncName();
1683 func +=
"(" +
kTableName +
", " + col +
");\n";
1691 string tag =
"&" +
property +
"=";
1692 size_t tag_idx =
info.find(
tag);
1694 if (tag_idx != string::npos) {
1697 size_t tag_end_idx =
info.find_first_of(
"&", tag_idx + 1);
1698 size_t start_idx = tag_idx +
string(
tag).length();
1700 if (tag_end_idx == string::npos) {
1704 value =
info.substr(start_idx, tag_end_idx - start_idx);
1713 return (field ==
"data.prot.name" ||
1714 field ==
"data.prot.activity" ||
1715 field ==
"data.prot.ec" ||
1716 field ==
"data.gene.syn" ||
1717 field.find(
"genbank.keywords") !=
NPOS);
1722 static vector<string> gene_field_names{
"locus",
"allele",
"gene-comment",
"gene-description" };
1723 return find(gene_field_names.begin(), gene_field_names.end(), field_name) != gene_field_names.end();
1728 if (container.empty() || field.empty() || rt_var.empty()) {
1732 string func = rt_var +
" = " + macro::CMacroFunction_GeneQual::GetFuncName();
1733 func +=
"(\"" + field +
"\")";
1735 if (constraints.empty()) {
1741 TConstraints::iterator it = constraints.begin();
1742 while (it != constraints.end()) {
1743 if (it->first.find(
',') !=
NPOS) {
1744 vector<string> tokens;
1746 for (
auto& word : tokens) {
1753 size_t pos = it->second.find(it->first);
1755 string new_constraint = it->second;
1757 if (func.find(
"WHERE") ==
NPOS) {
1764 func += new_constraint;
1765 if (remove_constraint) {
1766 it = constraints.erase(it);
1781 if (field.empty() || rt_var.empty())
return kEmptyStr;
1784 if (field_name.empty())
return kEmptyStr;
1785 func = rt_var +
" = " + macro::CMacroFunction_Resolve::GetFuncName();
1786 func +=
"(\"data\")";
1787 func +=
" WHERE EQUALS(\"" + rt_var +
".label.str\", \"" + field_name +
"\", true)";
1789 string constraint_field = macro::CMacroFunction_StructCommField::GetFuncName();
1790 constraint_field +=
"(\"" + field_name +
"\")";
1792 TConstraints::iterator it = constraints.begin();
1793 while (it != constraints.end()) {
1796 if (func.find(
"WHERE") ==
NPOS) {
1803 it = constraints.erase(it);
1810 func = rt_var +
" = " + macro::CMacroFunction_Resolve::GetFuncName();
1811 func +=
"(\"data\")";
1812 func +=
" WHERE EQUALS(\"" + rt_var +
".label.str\", \"StructuredCommentPrefix\", true)";
1813 func +=
" OR EQUALS(\"" + rt_var +
".label.str\", \"StructuredCommentSuffix\", true)";
1816 func = rt_var +
" = " + macro::CMacroFunction_Resolve::GetFuncName();
1817 func +=
"(\"data\")";
1818 func +=
" WHERE NOT EQUALS(\"" + rt_var +
".label.str\", \"StructuredCommentPrefix\", true)";
1819 func +=
" AND NOT EQUALS(\"" + rt_var +
".label.str\", \"StructuredCommentSuffix\", true)";
1821 string constraint_field = macro::CMacroFunction_StructCommFieldname::GetFuncName() +
"()";
1823 TConstraints::iterator it = constraints.begin();
1824 while (it != constraints.end()) {
1827 if (func.find(
"WHERE") ==
NPOS) {
1834 it = constraints.erase(it);
1848 descr =
"(no separator)";
1851 descr =
"separated by " + del;
1862 const string& existing_text = arg_list[
kExistingText].GetValue();
1863 const string& del = arg_list[
kDelimiter].GetValue();
1865 string descr =
" (";
1867 descr +=
"overwrite existing text";
1870 descr +=
"ignore new text when existing text is present";
1873 descr +=
"add new qualifier";
1875 descr += existing_text;
1885 if (
"replace" ==
type)
1887 if (
"add_new_qual" ==
type)
1890 static const TBimapStrings::relation existing_text_bm[] = {
1891 {
"overwrite",
"eReplace"},
1892 {
"append",
"eAppend"},
1893 {
"prefix",
"ePrepend"},
1894 {
"ignore new value",
"eLeaveOld"},
1895 {
"add new qualifier",
"eAddQual"} };
1897 TBimapStrings const data{ begin(existing_text_bm), end(existing_text_bm) };
1903 static const TBimapStrings::relation delimiter_bm[] = {
1908 {
"no separation",
""} };
1910 TBimapStrings const data{ begin(delimiter_bm), end(delimiter_bm) };
1921 return (
str ==
"true") ?
"Erase existing value" :
1930 string descr =
"structured comment ";
1931 const string& field = arg_list[
kField].GetValue();
1934 descr +=
"field '" + arg_list[
kStrCommField].GetValue() +
"'";
1938 descr +=
"database name";
1941 descr +=
"field names";
1949 string new_constraint = macro::CMacroFunction_ChoiceType::GetFuncName();
1951 constraints.insert(constraints.begin(), make_pair(
"", new_constraint));
1955 size_t pos = path.find(
".keyword");
1957 path = path.substr(0, pos);
1960 string new_constraint = macro::CMacroFunction_ChoiceType::GetFuncName();
1961 new_constraint +=
"() = \"" + path +
"\"";
1962 constraints.insert(constraints.begin(), make_pair(
"", new_constraint));
1968 CTempString target = macro::CMacroBioData::sm_Seqdesc;
1970 target = macro::CMacroBioData::sm_UserObject;
1977 CTempString target = macro::CMacroBioData::sm_MolInfo;
1981 target = macro::CMacroBioData::sm_Seq;
1988 CTempString target = macro::CMacroBioData::sm_RNA;
1990 target = macro::CMacroBioData::sm_mRNA;
1993 target = macro::CMacroBioData::sm_rRNA;
1996 target = macro::CMacroBioData::sm_miscRNA;
2003 CTempString target = macro::CMacroBioData::sm_RNA;
2006 target = macro::CMacroBioData::sm_Gene;
2016 if (feature ==
"All") {
2018 return macro::CMacroBioData::sm_TSEntry;
2021 return macro::CMacroBioData::sm_SeqFeat;
2031 CTempString target = macro::CMacroBioData::sm_SeqFeat;
2034 target = macro::CMacroBioData::sm_RNA;
2037 target = macro::CMacroBioData::sm_ImpFeat;
2042 target = macro::CMacroBioData::sm_Gene;
2045 if (qualifier ==
"product" ||
2047 qualifier ==
"activity") {
2048 target = macro::CMacroBioData::sm_Protein;
2051 target = macro::CMacroBioData::sm_CdRegion;
2055 target = macro::CMacroBioData::sm_Protein;
2058 target = macro::CMacroBioData::sm_ImpFeat;
2061 target = macro::CMacroBioData::sm_mRNA;
2064 target = macro::CMacroBioData::sm_rRNA;
2067 target = macro::CMacroBioData::sm_miscRNA;
2070 target = macro::CMacroBioData::sm_Miscfeat;
2087 CTempString target = macro::CMacroBioData::sm_SeqFeat;
2090 target = macro::CMacroBioData::sm_RNA;
2093 target = macro::CMacroBioData::sm_ImpFeat;
2098 target = macro::CMacroBioData::sm_Gene;
2101 if (from_field ==
"product" ||
2102 from_field ==
"name" ||
2103 from_field ==
"activity" ||
2105 target = macro::CMacroBioData::sm_Protein;
2108 target = macro::CMacroBioData::sm_Gene;
2110 target = macro::CMacroBioData::sm_CdRegion;
2114 target = macro::CMacroBioData::sm_Protein;
2117 target = macro::CMacroBioData::sm_ImpFeat;
2120 target = macro::CMacroBioData::sm_mRNA;
2123 target = macro::CMacroBioData::sm_rRNA;
2126 target = macro::CMacroBioData::sm_miscRNA;
2129 target = macro::CMacroBioData::sm_Miscfeat;
2140 CTempString target = macro::CMacroBioData::sm_Protein;
2143 target = macro::CMacroBioData::sm_CdRegion;
2146 target = macro::CMacroBioData::sm_Gene;
2149 target = macro::CMacroBioData::sm_mRNA;
2152 target = macro::CMacroBioData::sm_SeqFeat;
2160 const string& rna_type = arg_list[
kRNAType].GetValue();
2162 if (rna_type ==
"ncRNA" && arg_list[
kncRNAClass].GetEnabled()) {
2170 vector<string> new_constraints;
2172 if (rna_type ==
"ncRNA") {
2173 new_constraints.push_back(
"data.rna.type = \"ncRNA\"");
2174 if (ncRNA_class !=
"any" && !ncRNA_class.empty()) {
2175 new_constraints.push_back(
"data.rna.ext.gen.class = \"" + ncRNA_class +
"\"");
2178 else if (rna_type ==
"preRNA") {
2179 new_constraints.push_back(
"data.rna.type = \"premsg\"");
2181 else if (rna_type ==
"tRNA") {
2182 new_constraints.push_back(
"data.rna.type = \"tRNA\"");
2184 else if (rna_type ==
"tmRNA") {
2185 new_constraints.push_back(
"data.rna.type = \"tmRNA\"");
2188 for (
auto it = new_constraints.rbegin(); it != new_constraints.rend(); ++it) {
2189 constraints.insert(constraints.begin(), make_pair(
kEmptyStr, *it));
2196 if (rna_type ==
"premsg")
2198 else if (rna_type ==
"tRNA" || rna_type ==
"tmRNA" || rna_type ==
"ncRNA" ||
2199 rna_type ==
"scRNA" || rna_type ==
"snRNA") {
2202 else if (rna_type ==
"snoRNA")
2214 vector<string> new_constraints;
2215 string sel_feature = feature;
2217 new_constraints.push_back(
"data.imp.key = \"" + feature +
"\"");
2220 if (sel_feature ==
"preRNA" || sel_feature ==
"precursor_RNA") {
2221 new_constraints.push_back(
"data.rna.type = \"premsg\"");
2222 }
else if (sel_feature ==
"ncRNA" ||
2223 sel_feature ==
"tRNA" ||
2224 sel_feature ==
"tmRNA") {
2225 new_constraints.push_back(
"data.rna.type = \"" + sel_feature +
"\"");
2227 else if (sel_feature ==
"scRNA" ||
2228 sel_feature ==
"snRNA" ||
2229 sel_feature ==
"snoRNA" ||
2230 sel_feature ==
"sno_RNA") {
2232 new_constraints.push_back(
"data.rna.type = \"ncRNA\"");
2233 new_constraints.push_back(
"data.rna.ext.gen.class = \"" + sel_feature +
"\"");
2237 new_constraints.push_back(macro::CMacroFunction_ChoiceType::GetFuncName() +
"(\"data\") = \"prot\"");
2239 if (sel_feature ==
"ProProtein") {
2240 prot_type =
"preprotein";
2243 prot_type =
"mature";
2246 prot_type =
"signal-peptide";
2249 prot_type =
"transit-peptide";
2252 prot_type =
"propeptide";
2255 if (!prot_type.empty()) {
2256 new_constraints.push_back(
"data.prot.processed = \"" + prot_type +
"\"");
2277 new_constraints.push_back(macro::CMacroFunction_ChoiceType::GetFuncName()
2281 for (
auto it = new_constraints.rbegin(); it != new_constraints.rend(); ++it) {
2282 constraints.insert(constraints.begin(), make_pair(
kEmptyStr, *it));
2289 string new_constraint =
"data.prot.processed = \"mature\"";
2290 constraints.insert(constraints.begin(), make_pair(
kEmptyStr, new_constraint));
2291 new_constraint = macro::CMacroFunction_ChoiceType::GetFuncName() +
"(\"data\") = \"prot\"";
2292 constraints.insert(constraints.begin(), make_pair(
kEmptyStr, new_constraint));
2300 string corrected_field = field;
2301 vector<string> tokens;
2302 if (field.find(
',') !=
NPOS) {
2306 corrected_field = tokens[0] +
", " + tokens[1];
2312 string target_constr;
2313 if (!target.empty()) {
2314 target_constr = macro::CMacroFunction_RelatedFeatures::GetFuncName();
2315 target_constr +=
"(\"" + target +
"\", " + corrected_field +
")";
2318 string new_constraint =
string(
"NOT ") + macro::CMacroFunction_IsPresent::GetFuncName();
2319 if (!target_constr.empty()) {
2320 new_constraint +=
"(" + target_constr +
")";
2323 new_constraint +=
"(" + corrected_field +
")";
2326 constraints.insert(constraints.begin(), make_pair(
kEmptyStr, new_constraint));
2338 return ", update mRNA product to match protein name";
2352 function +=
"\n" + macro::CMacroFunction_UpdatemRNAProduct::GetFuncName() +
"();";
2360 const string& existing_text = arg.
GetValue();
2379 bool enable =
false;
2381 const string& feature = arg.
GetValue();
2383 if (list[
kFeatQual].GetValue() ==
"product" || list[
kFeatQual].GetValue() ==
"name") {
2429 bool enable =
false;
2432 const string& to_field = list[
kToField].GetValue();
2433 const string& from_field = list[
kFromField].GetValue();
2434 if (to_field ==
"product" || to_field ==
"name" ||
2435 from_field ==
"product" || from_field ==
"name") {
2466 const string& rna_name = arg.
GetValue();
2468 list[
"miscRNA_comment1"].SetShown() =
true;
2469 list[
"miscRNA_comment2"].SetShown() =
true;
2472 list[
"miscRNA_comment1"].SetShown() =
false;
2473 list[
"miscRNA_comment2"].SetShown() =
false;
2480 list[
"gene_symbol"].SetShown() =
true;
2481 list[
"gene_descr"].SetShown() =
true;
2482 list[
"gene_symbol_static"].SetShown() =
true;
2483 list[
"gene_descr_static"].SetShown() =
true;
2486 list[
"gene_symbol"].SetShown() =
false;
2487 list[
"gene_descr"].SetShown() =
false;
2488 list[
"gene_symbol_static"].SetShown() =
false;
2489 list[
"gene_descr_static"].SetShown() =
false;
2515 list[
kRmvLeft].SetEnabled() =
false;
2639 list[
kSelText].SetShown() = show_choices;
2640 list[
kChoices].SetShown() = show_choices;
2660 list[
kNewValue].SetEnabled() = !checked;
2743 else if (arg_list[
kBsrcTax].IsTrue()) {
2746 else if (arg_list[
kBsrcLoc].IsTrue()) {
2772 else if (dir ==
eTo) {
2793 cap_change =
"none";
2795 else if (arg_list[
kToUpper].IsTrue()) {
2796 cap_change =
"toupper";
2798 else if (arg_list[
kToLower].IsTrue()) {
2799 cap_change =
"tolower";
2802 cap_change =
"firstcap-restnochange";
2805 cap_change =
"cap-word-space";
2808 cap_change =
"firstcap";
2811 cap_change =
"firstlower-restnochange";
2814 cap_change =
"cap-word-space-punct";
2822 if (cap_change.empty()) {
2830 static const TBimapStrings::relation cap_bm[] = {
2846 static const TBimapStrings::relation cap_gui_bm[] = {
2847 {
"No change",
"none"},
2848 {
"To upper",
"toupper"},
2849 {
"To lower",
"tolower"},
2850 {
"First cap, rest no change",
"firstcap-restnochange"},
2851 {
"First cap, rest lower",
"firstcap"},
2852 {
"First lower, rest no change",
"firstlower-restnochange"},
2853 {
"Cap words, start at spaces",
"cap-word-space"},
2854 {
"Cap words, start at spaces or punct.",
"cap-word-space-punct"} };
2856 TBimapStrings const data{ begin(cap_gui_bm), end(cap_gui_bm) };
2869 else if (field ==
"cds inference") {
2870 field =
"inference";
2872 else if (field ==
"protein name") {
2878 field =
"EC-number";
2881 field =
"ncRNA-class";
bool SetData(const vector< CFuncWithArgs > &func_info)
virtual bool SetData(const vector< CFuncWithArgs > &func_info)
const TArguments & GetArguments() const
TArguments & SetArguments()
size_t count(const string &arg_name) const
const TStdStringPublisher & GetValue() const
const string & GetName() const
const TBoolPublisher & GetEnabled() const
const CTempString & GetTarget() const
EMActionType GetActionType() const
unordered_map< EMActionType, CMacroPanelItemData * > m_ActionMap
EMActionType GetMActionType(const macro::CMacroRep ¯o_rep, const vector< EMActionType > &types, CMacroInterpreter ¯o_interpret) const
wxTreeItemData * GetTreeItemData(const CMActionNode &node) const
EMacroFieldType m_FieldType
for actions such as appply/edit/etc.
vector< string > x_GetPubFunctions() const
virtual const vector< string > & GetKeywords() const
virtual void x_AddParamPanel(wxWindow *parent)
static bool s_IsGeneQualifier(const string &field)
boost::bimap< boost::bimaps::set_of< string, PNocase >, boost::bimaps::set_of< string, PNocase > > TBimapStrings
vector< string > GetRNATypes() const
pair< int, int > GetFeatureType(const string &name) const
string GetAsnPathToFieldName(const string &field, EMacroFieldType type, const string &target=kEmptyStr)
const vector< string > & GetKeywords(EMacroFieldType type) const
static CMacroEditorContext & GetInstance()
string GetAsnPathToAuthorFieldName(const string &author_name)
static string FindInBimapOrEmpty(const string &type, const TBimapStrings &str_bimap)
vector< string > GetFieldNames(EMacroFieldType type) const
bool PostProcess(EMActionType action_type)
void NormalizeFieldForFeatPanel()
bool ActionHasCdsGeneProtQuals()
vector< CFuncWithArgs > & SetInterpretedFunctions()
static bool s_IsTablePanel(ECustomPanelType &type)
static bool IsValidSubtypeName(const string &str, EVocabulary vocabulary=eVocabulary_raw)
@ ePubFieldType_AuthorLastName
@ ePubFieldType_AuthorFirstName
@ ePubFieldType_AuthorConsortium
@ ePubFieldType_AuthorMiddleInitial
@ ePubFieldType_AuthorSuffix
static EQualifier GetQualifierType(CTempString qual)
convert qual string to enumerated value
static bool IsValidSubtypeName(const string &str, EVocabulary vocabulary=eVocabulary_raw)
CTempString implements a light-weight string on top of a storage buffer whose lifetime management is ...
bool SetData(const vector< CFuncWithArgs > &func_info)
bool SetData(const vector< CFuncWithArgs > &func_info)
ECustomPanelType GetCustomPanelType() const
virtual void x_AddParamPanel(wxWindow *parent)=0
string x_GetVariables(const vector< CTempString > &args) const
void x_LoadPanel(wxWindow *parent, const string &panel_name, const TArgumentsVector &arguments)
unique_ptr< CMacroPanelLoader > m_Panel
constructed panel for specifying function arguments
bool TransferDataToPanel(const vector< CFuncWithArgs > &func_info)
void CreateParamPanel(wxStaticBoxSizer &action_sizer, wxPanel *parent)
bool TransferDataFromPanel()
const char * kGenomeProjectID
const char * kSubSourceNote
const char * kGenProjIDUserType
#define LOG_POST(message)
This macro is deprecated and it's strongly recomended to move in all projects (except tests) to macro...
void Error(CExceptionArgs_Base &args)
#define NCBI_THROW(exception_class, err_code, message)
Generic macro to throw an exception, given the exception class, error code and message string.
virtual const char * what(void) const noexcept
Standard report (includes full backlog).
void Info(CExceptionArgs_Base &args)
bool StringsAreEquivalent(const string &name1, const string &name2)
const char * kMobileElementTType
const char * kSatelliteType
const char * kSatelliteName
bool IsSatelliteSubfield(const string &field)
bool IsMobileElementTSubfield(const string &field)
const char * kMobileElementTQual
const char * kMobileElementTName
EDialogReturnValue NcbiMessageBox(const string &message, TDialogType type=eDialog_Ok, EDialogIcon icon=eIcon_Exclamation, const string &title="Error", EDialogTextMode text_mode=eRaw)
CTempString GetSub(CTempString str, size_t idx=0) const
Get pattern/subpattern from previous GetMatch().
CTempString GetMatch(CTempString str, size_t offset=0, size_t idx=0, TMatch flags=fMatch_default, bool noreturn=false)
Get matching pattern and subpatterns.
#define END_NCBI_SCOPE
End previously defined NCBI scope.
#define BEGIN_NCBI_SCOPE
Define ncbi namespace.
NCBI_NS_STD::string::size_type SIZE_TYPE
vector< pair< string, string > > TStringPairsVector
static list< string > & Split(const CTempString str, const CTempString delim, list< string > &arr, TSplitFlags flags=0, vector< SIZE_TYPE > *token_pos=NULL)
Split a string using specified delimiters.
static SIZE_TYPE FindNoCase(const CTempString str, const CTempString pattern, SIZE_TYPE start, SIZE_TYPE end, EOccurrence which=eFirst)
Find the pattern in the specified range of a string using a case insensitive search.
static bool EndsWith(const CTempString str, const CTempString end, ECase use_case=eCase)
Check if a string ends with a specified suffix value.
static const string BoolToString(bool value)
Convert bool to string.
static void TruncateSpacesInPlace(string &str, ETrunc where=eTrunc_Both)
Truncate spaces in a string (in-place)
static SIZE_TYPE Find(const CTempString str, const CTempString pattern, ECase use_case=eCase, EDirection direction=eForwardSearch, SIZE_TYPE occurrence=0)
Find the pattern in the string.
static bool StartsWith(const CTempString str, const CTempString start, ECase use_case=eCase)
Check if a string starts with a specified prefix value.
CTempString substr(size_type pos) const
Obtain a substring from this string, beginning at a given offset.
static bool EqualNocase(const CTempString s1, SIZE_TYPE pos, SIZE_TYPE n, const char *s2)
Case-insensitive equality of a substring with another string.
static string & ReplaceInPlace(string &src, const string &search, const string &replace, SIZE_TYPE start_pos=0, SIZE_TYPE max_replace=0, SIZE_TYPE *num_replace=0)
Replace occurrences of a substring within a string.
static string & ToLower(string &str)
Convert string to lower case – string& version.
@ eNocase
Case insensitive compare.
static string SelectionName(E_Choice index)
Retrieve selection name (for diagnostic purposes).
@ e_Het
cofactor, prosthetic grp, etc, bound to seq
@ e_Region
named region (globin locus)
@ e_Seq
to annotate origin from another seq
@ e_Txinit
transcription initiation
@ e_Num
a numbering system
@ e_Pub
publication applies to this seq
@ e_User
user defined structure
@ e_Rsite
restriction site (for maps really)
@ e_Comment
just a comment
@ e_Non_std_residue
non-standard residue here in seq
@ eTrimStopsFromCompleteCDS
@ eApplyCDSGeneProtQualTable
@ eAdjustConsensusSpliceSite
@ eSynchronizeCDSPartials
vector< macro::SArgMetaData > TArgumentsVector
Functions used in the DO/DONE section affecting the top seq-entry.
@ eAddGapFeaturesByNPanel
static bool s_AreGoodPair(const vector< CFuncWithArgs > &func_info)
vector< string > GetDoFunctions(const macro::CMacroRep ¯o_rep)
Returns the list of do-functions present in the DO clause of the macro - includes multiples.
pair< string, string > GetResolveFuncForDestCdsGeneProtQuals(const string &fieldname, const string &rt_var, TConstraints &constraints, bool remove_constraint)
void UpdateConstraintsForDualCdsGeneProt(TConstraints &constraints, const string &src_feat)
string GetResolveFuncForPubQualConst(const string &field, const string &rt_var, TConstraints &constraints, EMacroFieldType field_type)
IMacroScriptElements::TConstraints TConstraints
CTempString UpdateTargetForFeatures(const string &feature, const string &qualifier, bool for_removal=false)
string GetResolveFuncForDBLink(const string &field, string &rt_var, TConstraints &constraints, bool &found_constraint)
void OnRemoveFromParsedField(CArgumentList &list, CArgument &arg)
string GetResolveFuncForDbXref(const string &path, const string &rt_var, TConstraints &constraints)
void OnRightDigitsLettersInParsePanels(CArgumentList &list, CArgument &arg)
void OnLeftDigitsLettersInParsePanels(CArgumentList &list, CArgument &arg)
void OnStructCommFieldDblChanged(CArgumentList &list, CArgument &arg)
void OnIllegalDbXrefSelected(CArgumentList &list, CArgument &arg)
void OnStructCommFieldChanged(CArgumentList &list, CArgument &arg)
bool MultipleValuesAllowed(const string &field)
void UpdateConstraintsForFeatures(TConstraints &constraints, const string &feature)
EMacroFieldType GetSourceTypeInDoublePanel(const CArgumentList &arg_list, EDirType dir)
string GetStructCommQualDescr(const CArgumentList &arg_list)
string GetResolveFuncForSVPart(const string &field, const string &rt_var, TConstraints &constraints, bool &found_constraint)
CTempString UpdateTargetForMisc(const string &fieldname)
string GetResolveFuncForMultiValuedQual(const string &field, const string &rt_var, TConstraints &constraints, bool remove_constraint)
pair< string, string > GetResolveFuncForRNAQuals(const string &fieldname, const string &rt_var, TConstraints &constraints, bool remove_constraint)
void OnConvertFeatFromCDS(CArgumentList &list, CArgument &arg)
string GetResolveFuncForQual(const string &container, const string &field, const string &rt_var, TConstraints &constraints, bool remove_constraint=true)
Generates the definition of rt_var based on input "field".
string GetUpdatemRNADescription(const CArgument &arg)
void GetMemberNames(const string &container, const string &field, string &member_type, string &member_name, string &main_qual_name)
void OnDOILookupModeChanged(CArgumentList &list, CArgument &arg)
string GetFuncFromTable_Depr(const string &rt_var, const string &filename, const string &col, TConstraints &constraints, string &warning)
pair< string, string > GetResolveFuncForMultiValuedQuals(EMacroFieldType type, const string &fieldname, const string &rt_var, TConstraints &constraints, bool remove_constraint)
void CheckTableNameAndColumns(const string &filename, const TStringPairsVector &values, TConstraints &constraints, string &warning)
void AddConstraintIgnoreNewText(const string &field, TConstraints &constraints, const CArgumentList &arg_list, const string &target=kEmptyStr)
void OnProteinNameSingle(CArgumentList &list, CArgument &arg)
string GetCapitalizationType(const string &cap_change)
CTempString UpdateTargetForMolinfo(const string &molinfo_type)
void GetRNASpecificFieldsForTableReader(const string &field_name, string &rna_type, string &ncRNA_type, string &rna_qual)
CTempString UpdateTargetForDualFeatures(const string &feature, const string &from_field)
bool IsGeneField(const string &field_name)
pair< string, string > GetResolveFuncForSrcCdsGeneProtQuals(const string &fieldname, const string &rt_var, TConstraints &constraints, bool remove_constraint)
string GetGUIRNAType(const string &rna_type)
string GetResolveFuncForGeneQuals(const string &container, const string &field, const string &rt_var, TConstraints &constraints, bool remove_constraint=true)
void OnAfterCheck(CArgumentList &list, CArgument &arg)
string GetDelimiterDescr(const string &del)
void GetRNASpecificFields(const string &field_name, string &rna_type, string &ncRNA_type, string &rna_qual)
CTempString UpdateTargetForRnas(const string &rna_type)
string GetResolveFuncForApplyAuthors(CPubFieldType::EPubFieldType type, const string &rt_var, TConstraints &constraints)
void WrapInQuotes(string &str)
string GetEditableFieldForPair(const string &field, const string &rt_var, bool is_feature)
void OnProteinNameDouble(CArgumentList &list, CArgument &arg)
string GetResolveFuncForStrCommQual(const string &field, const string &field_name, const string &rt_var, TConstraints &constraints)
string GetCapitalizationTypeFromChoice(const string &cap_change)
CTempString UpdateTargetForDualRnas(const string &rna_type, const string &from_field)
pair< string, string > GetResolveFuncForSwapFeatQuals(const string &feature, const string &field, const string &rt_var, TConstraints &constraints, bool remove_constraint, bool &is_gbqual)
pair< string, string > GetResolveFuncForDestFeatQuals(const string &feature, const string &field, const string &rt_var, TConstraints &constraints, bool remove_constraint)
CMacroEditorContext::TBimapStrings TBimapStrings
void OnControlsAddRNAPanelSelected(CArgumentList &list, CArgument &arg)
pair< string, string > GetResolveFuncForSrcFeatQuals(const string &feature, const string &field, const string &rt_var, TConstraints &constraints, bool remove_constraint)
void OnAutodefCompleteSelected(CArgumentList &list, CArgument &arg)
void OnExistingTextChanged(CArgumentList &list, CArgument &arg)
pair< string, string > GetResolveFuncForSwapQuals(EMacroFieldType fieldtype, const string &fieldname, const string &rt_var, TConstraints &constraints, bool remove_constraint, bool &is_gbqual)
void NormalizeFieldForFeatPanel(string &field)
string GetHandleOldValue(const string &type)
string GetFuncFromTable(const string &rt_var, const string &col)
EMacroFieldType GetSourceTypeInSinglePanel(const CArgumentList &arg_list)
void OnRnaTypeChanged(CArgumentList &list, CArgument &arg)
void UpdateConstraintsForRnas(TConstraints &constraints, const CArgumentList &arg_list)
string GetBlankGUIText(const string &str)
void UpdateConstraintsForMisc(TConstraints &constraints, const string &fieldname, const string &target)
void OnSelectFeature(CArgumentList &list, CArgument &arg)
string GetDelimiterChar(const string &del)
void OnBeforeCheck(CArgumentList &list, CArgument &arg)
void OnSelectTable(CArgumentList &list, CArgument &arg)
void UpdateFeatureType(string &feature, const string &field)
void OnConvertFeatToChanged(CArgumentList &list, CArgument &arg)
CTempString UpdateTargetForCdsGeneProt(const string &fieldname)
string GetSelectedCapType(const CArgumentList &arg_list)
string GetRNAFieldname(const string &rna_type, const string &ncRNA_type, const string &rna_qual)
void OnProductDouble(CArgumentList &list, CArgument &arg)
string GetResolveFuncForPubQual(const string &field, string &rt_var, TConstraints &constraints)
void AppendUpdatemRNAFnc(bool update_mrna, string &function)
void OnMiscFeatRuleSelected(CArgumentList &list, CArgument &arg)
void GetFeatureAndField(const string &field_name, string &feature, string &field)
string GetHandleBlank(const string &str)
string GetPropertyFromInfo(const string &info, const string &property)
string GetExistingTextDescr(const CArgumentList &arg_list)
string GetUpdatemRNAVar(const CArgumentList &arg_list)
const string kCapAtSpaces
const string kMiscFeatCheck
const string kDigitsRight
const string kMiscFeatRule
const string kCapAtSpacesPunct
const string kLetterRight
const string kListFeatRule
const string kAutodefCompl
const string kRmvOverlapGene
const string kFlowerNochange
const string kCreateOnProtein
const string kExistingText
const string kCapNochange
const string kRemTranscriptid
const string kIllegalDbxref
const string kTableEnable
const string kStrCommField
const string kBsrcTaxFrom
const string kBsrcTextFrom
constexpr auto sort(_Init &&init)
static const char * str(char *buf, int n)
static const struct type types[]
C++ wrappers for the Perl-compatible regular expression (PCRE) library.