+ std::string text;
+ size_t offset = 0;
+ size_t md_pos = variable.find_first_of("md-");
+ if (md_pos == 0)
+ offset = 3;
+ const xmlNode *ptr = ptr1;
+ for (; ptr; ptr = ptr->next)
+ if (ptr->type == XML_ELEMENT_NODE
+ && !strcmp((const char *) ptr->name, "metadata"))
+ {
+ const _xmlAttr *attr = ptr->properties;
+ for (; attr; attr = attr->next)
+ if (!strcmp((const char *) attr->name, "type")
+ && attr->children
+ && !strcmp((const char *) attr->children->content,
+ variable.c_str() + offset))
+ {
+ text = mp_xml::get_text(ptr);
+ break;
+ }
+ }
+ if (pattern.length() > 0)
+ {
+ boost::regex::flag_type b_mode = boost::regex::perl;
+ if (mode.find_first_of('i') != std::string::npos)
+ b_mode |= boost::regex::icase;
+ boost::regex e(pattern, b_mode);
+ boost::match_flag_type match_mode = boost::format_first_only;
+ if (mode.find_first_of('g') != std::string::npos)
+ match_mode = boost::format_all;
+ text = regex_replace(text, e, replacement, match_mode);
+ }
+ if (!uri_encode)
+ result += text;
+ else
+ {
+ char src[2];
+ char dst[4];
+ size_t i;
+ for (i = 0; i < text.length(); i++)
+ {
+ src[0] = text[i];
+ src[1] = '\0';
+ yaz_encode_uri_component(dst, src);
+ result += dst;
+ }
+ }