/* * Append the whitespace-separated file names to the end of * the attachment list. */ static struct attachment * append_attachments(struct attachment *attach, char *names) { char *cp; int c; struct attachment *ap; cp = names; while (*cp != '\0' && blankchar(*cp & 0377)) cp++; while (*cp != '\0') { names = cp; while (*cp != '\0' && !blankchar(*cp & 0377)) cp++; c = *cp; *cp++ = '\0'; if (*names != '\0') { if ((ap = add_attachment(attach, names)) == NULL) perror(names); else attach = ap; } if (c == '\0') break; while (*cp != '\0' && blankchar(*cp & 0377)) cp++; } return attach; }
//--------------------------------------------------------------------------------------- ImoObj* Linker::add_text(ImoScoreText* pText) { if (m_pParent) { //compatibility with 1.5. Since 1.6 auxObjs can not be included //in musicData; they must go attached to an spacer. if (m_pParent->is_music_data()) { //musicData: create anchor (ImoSpacer) and attach to it ImoSpacer* pSpacer = static_cast<ImoSpacer*>( ImFactory::inject(k_imo_spacer, m_pDoc) ); pSpacer->add_attachment(m_pDoc, pText); add_staffobj(pSpacer); return pText; } //if language not set, use document language if (!pText->has_language()) pText->set_language( m_pDoc->get_language() ); if (m_pParent->is_instrument()) { ImoInstrument* pInstr = static_cast<ImoInstrument*>(m_pParent); //could be 'name' or 'abbrev' if (m_ldpChildType == k_name) pInstr->set_name(pText); else pInstr->set_abbrev(pText); return NULL; } if (m_pParent->is_instr_group()) { ImoInstrGroup* pGrp = static_cast<ImoInstrGroup*>(m_pParent); //could be 'name' or 'abbrev' if (m_ldpChildType == k_name) pGrp->set_name(pText); else pGrp->set_abbrev(pText); return NULL; } if (m_pParent->is_content()) { add_child(k_imo_content, pText); return pText; } return add_attachment(pText); } return pText; }
void tab_attachments::on_add_attachment(wxCommandEvent &) { wxFileDialog dlg(NULL, Z("Choose an attachment file"), last_open_dir, wxEmptyString, ALLFILES, wxFD_OPEN | wxFD_MULTIPLE); if(dlg.ShowModal() == wxID_OK) { wxArrayString selected_files; size_t i; last_open_dir = dlg.GetDirectory(); dlg.GetPaths(selected_files); for (i = 0; i < selected_files.Count(); i++) add_attachment(selected_files[i]); } }
//--------------------------------------------------------------------------------------- ImoObj* Linker::add_child_to_model(ImoObj* pParent, ImoObj* pChild, int ldpChildType) { //If the object (or its content, for DTOs) is added to the model it must return NULL. //Othewise, it must return the received object. This behaviour is necessary to //simplify unit tests of LdpAnalyser m_ldpChildType = ldpChildType; m_pParent = pParent; switch(pChild->get_obj_type()) { case k_imo_bezier_info: return add_bezier(static_cast<ImoBezierInfo*>(pChild)); case k_imo_content: return add_content(static_cast<ImoContent*>(pChild)); case k_imo_cursor_info: return add_cursor(static_cast<ImoCursorInfo*>(pChild)); case k_imo_font_style_dto: return add_font_style(static_cast<ImoFontStyleDto*>(pChild)); case k_imo_instrument: return add_instrument(static_cast<ImoInstrument*>(pChild)); case k_imo_instr_group: return add_instruments_group(static_cast<ImoInstrGroup*>(pChild)); case k_imo_listitem: return add_listitem(static_cast<ImoListItem*>(pChild)); case k_imo_midi_info: return add_midi_info(static_cast<ImoMidiInfo*>(pChild)); case k_imo_music_data: return add_child(k_imo_instrument, pChild); case k_imo_option: return add_option(static_cast<ImoOptionInfo*>(pChild)); case k_imo_page_info: return add_page_info(static_cast<ImoPageInfo*>(pChild)); case k_imo_param_info: return add_param_info(static_cast<ImoParamInfo*>(pChild)); case k_imo_score_text: return add_text(static_cast<ImoScoreText*>(pChild)); case k_imo_score_title: return add_title(static_cast<ImoScoreTitle*>(pChild)); case k_imo_staff_info: return add_staff_info(static_cast<ImoStaffInfo*>(pChild)); case k_imo_styles: return add_child(k_imo_document, pChild); case k_imo_system_info: return add_system_info(static_cast<ImoSystemInfo*>(pChild)); case k_imo_style: return add_style(static_cast<ImoStyle*>(pChild)); case k_imo_table_row: { if (m_pParent) { if (m_pParent->is_table_head()) return add_child(k_imo_table_head, pChild); else if (m_pParent->is_table_body()) return add_child(k_imo_table_body, pChild); else return pChild; } else return pChild; } case k_imo_table_head: case k_imo_table_body: { if (m_pParent && m_pParent->is_table()) return add_child(k_imo_table, pChild); else return pChild; } default: if (pChild->is_block_level_obj()) return add_block_level_item(static_cast<ImoBlockLevelObj*>(pChild)); else if (pChild->is_inline_level_obj()) return add_inline_level_item(static_cast<ImoInlineLevelObj*>(pChild)); else if (pChild->is_staffobj()) return add_staffobj(static_cast<ImoStaffObj*>(pChild)); else if (pChild->is_relobj()) return add_relation(static_cast<ImoRelObj*>(pChild)); else if (pChild->is_auxobj()) return add_attachment(static_cast<ImoAuxObj*>(pChild)); else return pChild; } }
void ssa_parser_c::add_attachment_maybe(std::string &name, std::string &data_uu, ssa_section_e section) { if (name.empty() || data_uu.empty() || ((SSA_SECTION_FONTS != section) && (SSA_SECTION_GRAPHICS != section))) { name = ""; data_uu = ""; return; } ++m_attachment_id; if (!m_reader->attachment_requested(m_attachment_id)) { name = ""; data_uu = ""; return; } attachment_t attachment; std::string short_name = m_file_name; size_t pos = short_name.rfind('/'); if (std::string::npos != pos) short_name.erase(0, pos + 1); pos = short_name.rfind('\\'); if (std::string::npos != pos) short_name.erase(0, pos + 1); attachment.ui_id = m_attachment_id; attachment.name = m_cc_utf8->utf8(name); attachment.description = (boost::format(SSA_SECTION_FONTS == section ? Y("Imported font from %1%") : Y("Imported picture from %1%")) % short_name).str(); attachment.to_all_files = true; size_t allocated = 1024; attachment.data = memory_c::alloc(allocated); attachment.data->set_size(0); const unsigned char *p = (const unsigned char *)data_uu.c_str(); for (pos = 0; data_uu.length() > (pos + 4); pos += 4) decode_chars(p[pos], p[pos + 1], p[pos + 2], p[pos + 3], attachment.data, 3, allocated); switch (data_uu.length() % 4) { case 2: decode_chars(p[pos], p[pos + 1], 0, 0, attachment.data, 1, allocated); break; case 3: decode_chars(p[pos], p[pos + 1], p[pos + 2], 0, attachment.data, 2, allocated); break; } attachment.mime_type = guess_mime_type(name, false); if (attachment.mime_type == "") attachment.mime_type = "application/octet-stream"; add_attachment(attachment); name = ""; data_uu = ""; }