void edit_select_rep::selection_paste (string key) { tree t; string s; (void) ::get_selection (key, t, s, selection_import); if (inside_active_graphics ()) { if (is_tuple (t, "texmacs", 3)) call ("graphics-paste", t[1]); return; } if (is_tuple (t, "extern", 1)) { string mode= get_env_string (MODE); string lan = get_env_string (MODE_LANGUAGE (mode)); if ((selection_import == "latex") && (mode == "prog")) mode= "verbatim"; if ((selection_import == "latex") && (mode == "math")) mode= "latex-math"; if ((selection_import == "html") && (mode == "prog")) mode= "verbatim"; string fm= selection_import * "-snippet"; tree doc= generic_to_tree (selection_decode(lan, as_string(t[1])), fm); if (is_func (doc, DOCUMENT, 1)) doc= doc[0]; // temporary fix insert_tree (doc); } if (is_tuple (t, "texmacs", 3)) { string mode= get_env_string (MODE); string lan = get_env_string (MODE_LANGUAGE (mode)); if (is_compound (t[1], "text", 1) && mode == "text") t= tuple ("texmacs", t[1][0], "text", lan); if (is_compound (t[1], "math", 1) && mode == "math") t= tuple ("texmacs", t[1][0], "math", lan); if (mode == "math" && t[2] == "text") set_message ("Error: invalid paste of text into a formula", "paste"); else if (mode == "prog" && t[2] == "math") { tree in= tuple (lan, t[1]); tree r= stree_to_tree (call ("plugin-math-input", tree_to_stree (in))); insert_tree (r); } else { if ((t[2] != mode) && (t[2] != "src") && (mode != "src") && ((t[2] == "math") || (mode == "math"))) { if (t[2] == "math") insert_tree (compound ("math", ""), path (0, 0)); else if (t[2] == "text") insert_tree (compound ("text", ""), path (0, 0)); else insert_tree (tree (WITH, copy (MODE), copy (t[2]), ""), path (2, 0)); } if (is_func (t[1], TFORMAT) || is_func (t[1], TABLE)) { int row, col; path fp= search_format (row, col); if (is_nil (fp)) insert_tree (compound (copy (TABULAR), t[1])); else table_write_subtable (fp, row, col, t[1]); } else insert_tree (t[1]); } } }
string edit_interface_rep::session_complete_command (tree tt) { path p= reverse (obtain_ip (tt)); tree st= subtree (et, p); if ((N(tp) <= N(p)) || (tp[N(p)] != 1)) return ""; tree t= put_cursor (st[1], tail (tp, N(p)+1)); // cout << t << LF; (void) eval ("(use-modules (utils plugins plugin-cmd))"); string lan= get_env_string (PROG_LANGUAGE); string ses= get_env_string (PROG_SESSION); string s = as_string (call ("verbatim-serialize", lan, tree_to_stree (t))); s= s (0, N(s)-1); int pos= search_forwards (cursor_symbol, s); if (pos == -1) return ""; s= s (0, pos) * s (pos + N(cursor_symbol), N(s)); // cout << s << ", " << pos << LF; return "(complete " * scm_quote (s) * " " * as_string (pos) * ")"; }
void connection_write (string name, string session, tree t) { // cout << "Write " << name << ", " << session << ", " << t << "\n"; string s= as_string (call ("plugin-serialize", name, tree_to_stree (t))); connection_write (name, session, s); }
void edit_process_rep::generate_bibliography ( string bib, string style, string fname) { system_wait ("Generating bibliography, ", "please wait"); if (DEBUG_AUTO) debug_automatic << "Generating bibliography" << " [" << bib << ", " << style << ", " << fname << "]\n"; tree bib_t= buf->data->aux[bib]; if (buf->prj != NULL) bib_t= buf->prj->data->aux[bib]; tree t; url bib_file= find_bib_file (buf->buf->name, fname); //cout << fname << " -> " << concretize (bib_file) << "\n"; if (is_none (bib_file)) { url bbl_file= find_bib_file (buf->buf->name, fname, ".bbl"); if (is_none (bbl_file)) { if (supports_db ()) { t= as_tree (call (string ("bib-compile"), bib, style, bib_t)); call (string ("bib-attach"), bib, bib_t); } else { std_error << "Could not load BibTeX file " << fname; set_message ("Could not find bibliography file", "compile bibliography"); return; } } else t= bibtex_load_bbl (bib, bbl_file); } else { if (!bibtex_present () && !starts (style, "tm-")) { if (style == "abbrv") style= "tm-abbrv"; else if (style == "acm") style= "tm-acm"; else if (style == "alpha") style= "tm-alpha"; else if (style == "elsart-num") style= "tm-elsart-num"; else if (style == "ieeetr") style= "tm-ieeetr"; else if (style == "siam") style= "tm-siam"; else if (style == "unsrt") style= "tm-unsrt"; else style= "tm-plain"; } if (supports_db () && !is_rooted (bib_file)) bib_file= find_bib_file (buf->buf->name, fname, ".bib", true); if (supports_db ()) { //(void) call (string ("bib-import-bibtex"), bib_file); t= as_tree (call (string ("bib-compile"), bib, style, bib_t, bib_file)); } else if (starts (style, "tm-")) { string sbib; if (load_string (bib_file, sbib, false)) std_error << "Could not load BibTeX file " << fname; tree te= bib_entries (parse_bib (sbib), bib_t); object ot= tree_to_stree (te); eval ("(use-modules (bibtex " * style (3, N(style)) * "))"); t= stree_to_tree (call (string ("bib-process"), bib, style (3, N(style)), ot)); } else t= bibtex_run (bib, style, bib_file, bib_t); if (supports_db ()) (void) call (string ("bib-attach"), bib, bib_t, bib_file); } if (is_atomic (t) && starts (t->label, "Error:")) set_message (t->label, "compile bibliography"); else if (is_compound (t) && N(t) > 0) insert_tree (t); }