diff --git a/R/cpp11.R b/R/cpp11.R index 1a76ce7..4573f57 100644 --- a/R/cpp11.R +++ b/R/cpp11.R @@ -16,12 +16,12 @@ read_ods_ <- function(file, start_row, stop_row, start_col, stop_col, sheet, for .Call(`_readODS_read_ods_`, file, start_row, stop_row, start_col, stop_col, sheet, formula_as_formula) } -splice_sheet <- function(original_xml, sheet_xml, flat) { - .Call(`_readODS_splice_sheet`, original_xml, sheet_xml, flat) +splice_sheet_ <- function(original_xml, sheet_xml, flat) { + .Call(`_readODS_splice_sheet_`, original_xml, sheet_xml, flat) } -update_sheet <- function(original_xml, sheet_xml, flat, sheet) { - .Call(`_readODS_update_sheet`, original_xml, sheet_xml, flat, sheet) +update_sheet_ <- function(original_xml, sheet_xml, flat, sheet) { + .Call(`_readODS_update_sheet_`, original_xml, sheet_xml, flat, sheet) } write_sheet_ <- function(filename, x, sheet, row_names, col_names, na_as_string, padding, header, footer) { diff --git a/R/write_ods.R b/R/write_ods.R index fac6618..ce970a3 100644 --- a/R/write_ods.R +++ b/R/write_ods.R @@ -75,9 +75,9 @@ throwaway_xml_file <- .convert_df_to_sheet(x = x, sheet = sheet, row_names = row_names, col_names = col_names, na_as_string = na_as_string, padding = padding) if (append) { - return(splice_sheet(contentfile, throwaway_xml_file, flat)) + return(splice_sheet_(contentfile, throwaway_xml_file, flat)) } - return(update_sheet(contentfile, throwaway_xml_file, flat, normalized_sheet)) + return(update_sheet_(contentfile, throwaway_xml_file, flat, normalized_sheet)) } .write_ods <- function(x, path = tempfile(fileext = ".ods"), sheet = "Sheet1", append = FALSE, update = FALSE, row_names = FALSE, col_names = TRUE, na_as_string = FALSE, padding = FALSE, flat = FALSE) { diff --git a/src/cpp11.cpp b/src/cpp11.cpp index fdea477..5a6fa45 100644 --- a/src/cpp11.cpp +++ b/src/cpp11.cpp @@ -34,17 +34,17 @@ extern "C" SEXP _readODS_read_ods_(SEXP file, SEXP start_row, SEXP stop_row, SEX END_CPP11 } // splice.cpp -std::string splice_sheet(const std::string original_xml, const std::string sheet_xml, const bool flat); -extern "C" SEXP _readODS_splice_sheet(SEXP original_xml, SEXP sheet_xml, SEXP flat) { +std::string splice_sheet_(const std::string original_xml, const std::string sheet_xml, const bool flat); +extern "C" SEXP _readODS_splice_sheet_(SEXP original_xml, SEXP sheet_xml, SEXP flat) { BEGIN_CPP11 - return cpp11::as_sexp(splice_sheet(cpp11::as_cpp>(original_xml), cpp11::as_cpp>(sheet_xml), cpp11::as_cpp>(flat))); + return cpp11::as_sexp(splice_sheet_(cpp11::as_cpp>(original_xml), cpp11::as_cpp>(sheet_xml), cpp11::as_cpp>(flat))); END_CPP11 } // splice.cpp -std::string update_sheet(const std::string original_xml, const std::string sheet_xml, const bool flat, const int sheet); -extern "C" SEXP _readODS_update_sheet(SEXP original_xml, SEXP sheet_xml, SEXP flat, SEXP sheet) { +std::string update_sheet_(const std::string original_xml, const std::string sheet_xml, const bool flat, const int sheet); +extern "C" SEXP _readODS_update_sheet_(SEXP original_xml, SEXP sheet_xml, SEXP flat, SEXP sheet) { BEGIN_CPP11 - return cpp11::as_sexp(update_sheet(cpp11::as_cpp>(original_xml), cpp11::as_cpp>(sheet_xml), cpp11::as_cpp>(flat), cpp11::as_cpp>(sheet))); + return cpp11::as_sexp(update_sheet_(cpp11::as_cpp>(original_xml), cpp11::as_cpp>(sheet_xml), cpp11::as_cpp>(flat), cpp11::as_cpp>(sheet))); END_CPP11 } // write_sheet_.cpp @@ -68,8 +68,8 @@ static const R_CallMethodDef CallEntries[] = { {"_readODS_get_sheet_names_", (DL_FUNC) &_readODS_get_sheet_names_, 2}, {"_readODS_read_flat_ods_", (DL_FUNC) &_readODS_read_flat_ods_, 7}, {"_readODS_read_ods_", (DL_FUNC) &_readODS_read_ods_, 7}, - {"_readODS_splice_sheet", (DL_FUNC) &_readODS_splice_sheet, 3}, - {"_readODS_update_sheet", (DL_FUNC) &_readODS_update_sheet, 4}, + {"_readODS_splice_sheet_", (DL_FUNC) &_readODS_splice_sheet_, 3}, + {"_readODS_update_sheet_", (DL_FUNC) &_readODS_update_sheet_, 4}, {"_readODS_write_sheet_", (DL_FUNC) &_readODS_write_sheet_, 9}, {"_readODS_write_sheet_list_", (DL_FUNC) &_readODS_write_sheet_list_, 9}, {NULL, NULL, 0} diff --git a/src/splice.cpp b/src/splice.cpp index 762ec05..0c29cd3 100644 --- a/src/splice.cpp +++ b/src/splice.cpp @@ -1,72 +1,72 @@ #include "splice.h" [[cpp11::register]] -std::string splice_sheet(const std::string original_xml, const std::string sheet_xml, const bool flat) { +std::string splice_sheet_(const std::string original_xml, const std::string sheet_xml, const bool flat) { rapidxml::xml_document<> spreadsheet1; // read the content in heap - rapidxml::file<> *xmlFile = new rapidxml::file<>(original_xml.c_str()); - spreadsheet1.parse<0>((char*)xmlFile->data()); - rapidxml::xml_node<>* rootNode; + rapidxml::file<> *xml_file = new rapidxml::file<>(original_xml.c_str()); + spreadsheet1.parse<0>((char*)xml_file->data()); + rapidxml::xml_node<>* root_node; if (!flat) { - rootNode = spreadsheet1.first_node()->first_node("office:body")-> + root_node = spreadsheet1.first_node()->first_node("office:body")-> first_node("office:spreadsheet"); } else { - rootNode = spreadsheet1.first_node("office:document")->first_node("office:body")-> + root_node = spreadsheet1.first_node("office:document")->first_node("office:body")-> first_node("office:spreadsheet"); } rapidxml::xml_document<> spreadsheet2; - rapidxml::file<> *xmlFile2 = new rapidxml::file<>(sheet_xml.c_str()); - spreadsheet2.parse<0>((char*)xmlFile2->data()); - rapidxml::xml_node<> *rootNode2; - rootNode2 = spreadsheet2.first_node("table:table"); - rapidxml::xml_node<> *newnode = spreadsheet2.clone_node(rootNode2); - rootNode->append_node(newnode); + rapidxml::file<> *xml_file2 = new rapidxml::file<>(sheet_xml.c_str()); + spreadsheet2.parse<0>((char*)xml_file2->data()); + rapidxml::xml_node<> *root_node2; + root_node2 = spreadsheet2.first_node("table:table"); + rapidxml::xml_node<> *new_node = spreadsheet2.clone_node(root_node2); + root_node->append_node(new_node); std::ofstream output_file(original_xml); output_file << "\n"; output_file << spreadsheet1; output_file.close(); - delete xmlFile; - delete xmlFile2; + delete xml_file; + delete xml_file2; return original_xml; } [[cpp11::register]] -std::string update_sheet(const std::string original_xml, const std::string sheet_xml, const bool flat, const int sheet) { +std::string update_sheet_(const std::string original_xml, const std::string sheet_xml, const bool flat, const int sheet) { rapidxml::xml_document<> spreadsheet1; - rapidxml::file<> *xmlFile = new rapidxml::file<>(original_xml.c_str()); - spreadsheet1.parse<0>((char*)xmlFile->data()); - rapidxml::xml_node<>* rootNode; - rapidxml::xml_node<>* parNode; + rapidxml::file<> *xml_file = new rapidxml::file<>(original_xml.c_str()); + spreadsheet1.parse<0>((char*)xml_file->data()); + rapidxml::xml_node<>* root_node; + rapidxml::xml_node<>* parent_node; if (!flat) { - rootNode = spreadsheet1.first_node()->first_node("office:body")-> + root_node = spreadsheet1.first_node()->first_node("office:body")-> first_node("office:spreadsheet")->first_node("table:table"); - parNode = spreadsheet1.first_node()->first_node("office:body")-> + parent_node = spreadsheet1.first_node()->first_node("office:body")-> first_node("office:spreadsheet"); } else { - rootNode = spreadsheet1.first_node("office:document")->first_node("office:body")-> + root_node = spreadsheet1.first_node("office:document")->first_node("office:body")-> first_node("office:spreadsheet")->first_node("table:table"); - parNode = spreadsheet1.first_node("office:document")->first_node("office:body")-> + parent_node = spreadsheet1.first_node("office:document")->first_node("office:body")-> first_node("office:spreadsheet"); } for (int i = 1; i < sheet; i++){ - rootNode = rootNode->next_sibling("table:table"); + root_node = root_node->next_sibling("table:table"); } rapidxml::xml_document<> spreadsheet2; - rapidxml::file<> *xmlFile2 = new rapidxml::file<>(sheet_xml.c_str()); - spreadsheet2.parse<0>((char*)xmlFile2->data()); - rapidxml::xml_node<> *rootNode2; - rootNode2 = spreadsheet2.first_node("table:table"); - rapidxml::xml_node<> *newnode = spreadsheet2.clone_node(rootNode2); - parNode->insert_node(rootNode, newnode); - parNode->remove_node(rootNode); + rapidxml::file<> *xml_file2 = new rapidxml::file<>(sheet_xml.c_str()); + spreadsheet2.parse<0>((char*)xml_file2->data()); + rapidxml::xml_node<> *root_node2; + root_node2 = spreadsheet2.first_node("table:table"); + rapidxml::xml_node<> *new_node = spreadsheet2.clone_node(root_node2); + parent_node->insert_node(root_node, new_node); + parent_node->remove_node(root_node); std::ofstream output_file(original_xml); output_file << "\n"; output_file << spreadsheet1; output_file.close(); - delete xmlFile; - delete xmlFile2; + delete xml_file; + delete xml_file2; return original_xml; }