HRESULT create_regexp_var(script_ctx_t *ctx, jsval_t src_arg, jsval_t *flags_arg, jsdisp_t **ret) { unsigned flags, opt_len = 0; const WCHAR *opt = NULL; jsstr_t *src; HRESULT hres; if(is_object_instance(src_arg)) { jsdisp_t *obj; obj = iface_to_jsdisp((IUnknown*)get_object(src_arg)); if(obj) { if(is_class(obj, JSCLASS_REGEXP)) { RegExpInstance *regexp = (RegExpInstance*)obj; hres = create_regexp(ctx, regexp->str, regexp->jsregexp->flags, ret); jsdisp_release(obj); return hres; } jsdisp_release(obj); } } if(!is_string(src_arg)) { FIXME("src_arg = %s\n", debugstr_jsval(src_arg)); return E_NOTIMPL; } src = get_string(src_arg); if(flags_arg) { jsstr_t *opt_str; if(!is_string(*flags_arg)) { FIXME("unimplemented for %s\n", debugstr_jsval(*flags_arg)); return E_NOTIMPL; } opt_str = get_string(*flags_arg); opt = jsstr_flatten(opt_str); if(!opt) return E_OUTOFMEMORY; opt_len = jsstr_length(opt_str); } hres = parse_regexp_flags(opt, opt_len, &flags); if(FAILED(hres)) return hres; return create_regexp(ctx, src, flags, ret); }
shared_ptr<string_feature> string_feature_factory::create( const std::string& name, const param_t& params) const { string_feature* p; if (name == "ngram") { return create_character_ngram(params); } else if (name == "regexp") { return create_regexp(params); } else if (ext_ && (p = ext_(name, params))) { return shared_ptr<string_feature>(p); } else { throw JUBATUS_EXCEPTION( converter_exception(std::string("unknown splitter name: ") + name)); } }
HRESULT WINAPI VBScriptRegExpFactory_CreateInstance(IClassFactory *iface, IUnknown *pUnkOuter, REFIID riid, void **ppv) { IDispatch *regexp; HRESULT hres; TRACE("(%p %s %p)\n", pUnkOuter, debugstr_guid(riid), ppv); hres = create_regexp(®exp); if(FAILED(hres)) return hres; hres = IDispatch_QueryInterface(regexp, riid, ppv); IDispatch_Release(regexp); return hres; }
/* ECMA-262 3rd Edition 15.5.4.10 */ static HRESULT String_match(script_ctx_t *ctx, vdisp_t *jsthis, WORD flags, unsigned argc, jsval_t *argv, jsval_t *r) { jsdisp_t *regexp = NULL; jsstr_t *str; HRESULT hres; TRACE("\n"); if(!argc) { if(r) *r = jsval_null(); return S_OK; } if(is_object_instance(argv[0])) { regexp = iface_to_jsdisp(get_object(argv[0])); if(regexp && !is_class(regexp, JSCLASS_REGEXP)) { jsdisp_release(regexp); regexp = NULL; } } if(!regexp) { jsstr_t *match_str; hres = to_string(ctx, argv[0], &match_str); if(FAILED(hres)) return hres; hres = create_regexp(ctx, match_str, 0, ®exp); jsstr_release(match_str); if(FAILED(hres)) return hres; } hres = get_string_val(ctx, jsthis, &str); if(SUCCEEDED(hres)) hres = regexp_string_match(ctx, regexp, str, r); jsdisp_release(regexp); jsstr_release(str); return hres; }
/*! * * \param data CDT for the CEmoticon class * \param themedir path to the theme directory * \param list list where the results are stored * * \returns the number of loaded emoticons */ static unsigned loadTheme(const struct Emoticons *data, const QString &themedir, node_list_t &list) { QDomDocument doc("doc"); QFile file(themedir + "/emoticons.xml"); unsigned ret = 0; if (file.open(IO_ReadOnly) && doc.setContent(&file)) { QDomElement elem = doc.documentElement(); QDomNode n = elem.firstChild(); for (; !n.isNull(); n = n.nextSibling()) { if (n.isElement()) { elem = n.toElement(); if (!elem.isNull() && elem.tagName() == QString::fromLatin1("emoticon")) { QString file = elem.attribute("file"); QString f=realFile(data,themedir,file); if (f != QString::null) { struct node node; unsigned size; node.emoticon = loadStrings(data, n.firstChild(), &size); if (size) { node.file = f; create_regexp(node.emoticon, node.reg); list.push_back(node); ret += size; } } } } } } file.close(); return ret; };
int main(int argc, char **argv) { int c; int retval = 0; int fileindex; int options = 0; regex_t *regexp; regex_t *nl_exp = NULL; char *regexpstr = NULL; while((c = getopt(argc, argv, "bce:insVw")) != -1) { switch(c) { case 'b': options |= JG_PRINT_BYTEOFFSET; break; case 'c': options |= JG_PRINT_COUNT; break; case 'e': if(!(regexpstr = (char *) malloc(strlen(optarg) + 1))) { fprintf(stderr, "Malloc failure.\n"); fprintf(stderr, "Error: %s\n", strerror(errno)); exit(1); } strcpy(regexpstr, optarg); break; case 'i': options |= JG_IGNORE_CASE; break; case 'n': options |= JG_PRINT_LINE_NUMBER; break; case 's': options |= JG_SUPRESS_ERROR; break; case 'v': options |= JG_INVERT; break; case 'V': printf("%s\n", GVERSION); exit(0); case 'w': options |= JG_WORD_EXPRESSIONS; break; default: fprintf(stderr, "Unknown option -%c\n", c); fprintf(stderr, Usage, argv[0]); exit(1); } } if(!regexpstr){ if(((argc - optind) >= 2)) { regexpstr = argv[optind]; fileindex = optind + 1; } else { fprintf(stderr, "Invalid arguments.\n"); fprintf(stderr, Usage, argv[0]); exit(1); } } else if((argc - optind) == 1) { fileindex = optind; } else { fprintf(stderr, "Invalid arguments.\n"); fprintf(stderr, Usage, argv[0]); exit(1); } if(opt_valid(options)) { regexp = create_regexp(regexpstr, options); if(options & JG_PRINT_LINE_NUMBER) nl_exp = create_regexp("\n", 0); init_inflation(); for(; fileindex < argc; fileindex++) jargrep(regexp, nl_exp, argv[fileindex], options); regfree(regexp); if(options & JG_PRINT_LINE_NUMBER) regfree(nl_exp); } else { retval = 1; fprintf(stderr, "Error: Invalid combination of options.\n"); } return retval; }