summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJay Freeman (saurik) <saurik@saurik.com>2015-06-26 23:01:28 -0700
committerJay Freeman (saurik) <saurik@saurik.com>2015-06-26 23:01:28 -0700
commitb4fd1197563aca30cf01bf3efaa5c015ba768e11 (patch)
tree8d8c8ae482e83c8171edb014a8387df408a3d4d6
parenta09f7a4894d2dde0ac8820993f3d51ba0fe36810 (diff)
Use libicucore's uregex to avoid Depends: libpcre.
-rw-r--r--Cydia/MIMEAddress.mm4
-rw-r--r--CyteKit/PerlCompatibleRegEx.hpp115
-rw-r--r--CyteKit/RegEx.hpp127
-rw-r--r--CyteKit/WebViewController.mm6
-rw-r--r--MobileCydia.mm44
-rw-r--r--cydia.control2
-rw-r--r--makefile3
-rwxr-xr-xsysroot.sh1
8 files changed, 156 insertions, 146 deletions
diff --git a/Cydia/MIMEAddress.mm b/Cydia/MIMEAddress.mm
index 2a80ae7..aea37ca 100644
--- a/Cydia/MIMEAddress.mm
+++ b/Cydia/MIMEAddress.mm
@@ -23,7 +23,7 @@
#include <WebKit/WebScriptObject.h>
-#include "CyteKit/PerlCompatibleRegEx.hpp"
+#include "CyteKit/RegEx.hpp"
@implementation MIMEAddress
@@ -63,7 +63,7 @@
const char *data = [string UTF8String];
size_t size = [string lengthOfBytesUsingEncoding:NSUTF8StringEncoding];
- static Pcre address_r("^\"?(.*)\"? <([^>]*)>$");
+ static RegEx address_r("\"?(.*)\"? <([^>]*)>");
if (address_r(data, size)) {
name_ = address_r[1];
diff --git a/CyteKit/PerlCompatibleRegEx.hpp b/CyteKit/PerlCompatibleRegEx.hpp
deleted file mode 100644
index 52136f6..0000000
--- a/CyteKit/PerlCompatibleRegEx.hpp
+++ /dev/null
@@ -1,115 +0,0 @@
-/* Cydia - iPhone UIKit Front-End for Debian APT
- * Copyright (C) 2008-2014 Jay Freeman (saurik)
-*/
-
-/* GNU General Public License, Version 3 {{{ */
-/*
- * Cydia is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published
- * by the Free Software Foundation, either version 3 of the License,
- * or (at your option) any later version.
- *
- * Cydia is distributed in the hope that it will be useful, but
- * WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with Cydia. If not, see <http://www.gnu.org/licenses/>.
-**/
-/* }}} */
-
-#ifndef Cydia_PerlCompatibleRegEx_HPP
-#define Cydia_PerlCompatibleRegEx_HPP
-
-#include <pcre.h>
-
-#include "CyteKit/UCPlatform.h"
-#include "CyteKit/stringWithUTF8Bytes.h"
-
-class Pcre {
- private:
- pcre *code_;
- pcre_extra *study_;
- int capture_;
- int *matches_;
- const char *data_;
-
- public:
- Pcre() :
- code_(NULL),
- study_(NULL),
- data_(NULL)
- {
- }
-
- Pcre(const char *regex, NSString *data = nil) :
- code_(NULL),
- study_(NULL),
- data_(NULL)
- {
- this->operator =(regex);
-
- if (data != nil)
- this->operator ()(data);
- }
-
- void operator =(const char *regex) {
- _assert(code_ == NULL);
-
- const char *error;
- int offset;
- code_ = pcre_compile(regex, 0, &error, &offset, NULL);
-
- if (code_ == NULL) {
- fprintf(stderr, "%d:%s\n", offset, error);
- _assert(false);
- }
-
- pcre_fullinfo(code_, study_, PCRE_INFO_CAPTURECOUNT, &capture_);
- _assert(capture_ >= 0);
- matches_ = new int[(capture_ + 1) * 3];
- }
-
- ~Pcre() {
- pcre_free(code_);
- delete matches_;
- }
-
- NSString *operator [](size_t match) const {
- return [NSString stringWithUTF8Bytes:(data_ + matches_[match * 2]) length:(matches_[match * 2 + 1] - matches_[match * 2])];
- }
-
- _finline bool operator ()(NSString *data) {
- // XXX: length is for characters, not for bytes
- return operator ()([data UTF8String], [data length]);
- }
-
- _finline bool operator ()(const char *data) {
- return operator ()(data, strlen(data));
- }
-
- bool operator ()(const char *data, size_t size) {
- if (pcre_exec(code_, study_, data, size, 0, 0, matches_, (capture_ + 1) * 3) >= 0) {
- data_ = data;
- return true;
- } else {
- data_ = NULL;
- return false;
- }
- }
-
- operator bool() const {
- return data_ != NULL;
- }
-
- NSString *operator ->*(NSString *format) const {
- id values[capture_];
- for (int i(0); i != capture_; ++i)
- values[i] = this->operator [](i + 1);
-
- return [[[NSString alloc] initWithFormat:format arguments:reinterpret_cast<va_list>(values)] autorelease];
- }
-};
-
-#endif//Cydia_PerlCompatibleRegEx_HPP
diff --git a/CyteKit/RegEx.hpp b/CyteKit/RegEx.hpp
new file mode 100644
index 0000000..5799946
--- /dev/null
+++ b/CyteKit/RegEx.hpp
@@ -0,0 +1,127 @@
+/* Cydia - iPhone UIKit Front-End for Debian APT
+ * Copyright (C) 2008-2014 Jay Freeman (saurik)
+*/
+
+/* GNU General Public License, Version 3 {{{ */
+/*
+ * Cydia is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published
+ * by the Free Software Foundation, either version 3 of the License,
+ * or (at your option) any later version.
+ *
+ * Cydia is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with Cydia. If not, see <http://www.gnu.org/licenses/>.
+**/
+/* }}} */
+
+#ifndef Cydia_RegEx_HPP
+#define Cydia_RegEx_HPP
+
+#include <unicode/uregex.h>
+
+#include "CyteKit/UCPlatform.h"
+#include "CyteKit/stringWithUTF8Bytes.h"
+
+#define _rgxcall(code, args...) ({ \
+ UErrorCode status(U_ZERO_ERROR); \
+ auto _value(code(args, &status)); \
+ if (U_FAILURE(status)) { \
+ fprintf(stderr, "%d:%s\n", error.offset, u_errorName(status)); \
+ _assert(false); \
+ } \
+_value; })
+
+#define _rgxcallv(code, args...) ({ \
+ UErrorCode status(U_ZERO_ERROR); \
+ code(args, &status); \
+ if (U_FAILURE(status)) { \
+ fprintf(stderr, "%d:%s\n", error.offset, u_errorName(status)); \
+ _assert(false); \
+ } \
+})
+
+class RegEx {
+ private:
+ URegularExpression *regex_;
+ int capture_;
+ size_t size_;
+
+ public:
+ RegEx() :
+ regex_(NULL),
+ size_(_not(size_t))
+ {
+ }
+
+ RegEx(const char *regex, NSString *data = nil) :
+ regex_(NULL),
+ size_(_not(size_t))
+ {
+ this->operator =(regex);
+
+ if (data != nil)
+ this->operator ()(data);
+ }
+
+ void operator =(const char *regex) {
+ _assert(regex_ == NULL);
+ UParseError error;
+ regex_ = _rgxcall(uregex_openC, regex, 0, &error);
+ capture_ = _rgxcall(uregex_groupCount, regex_);
+ }
+
+ ~RegEx() {
+ uregex_close(regex_);
+ }
+
+ NSString *operator [](size_t match) const {
+ UParseError error;
+ size_t size(size_);
+ UChar data[size];
+ size = _rgxcall(uregex_group, regex_, match, data, size);
+ return [[[NSString alloc] initWithBytes:data length:(size * sizeof(UChar)) encoding:NSUTF16LittleEndianStringEncoding] autorelease];
+ }
+
+ _finline bool operator ()(NSString *string) {
+ return operator ()(reinterpret_cast<const uint16_t *>([string cStringUsingEncoding:NSUTF16LittleEndianStringEncoding]), [string length]);
+ }
+
+ _finline bool operator ()(const char *data) {
+ return operator ()([NSString stringWithUTF8String:data]);
+ }
+
+ bool operator ()(const UChar *data, size_t size) {
+ UParseError error;
+ _rgxcallv(uregex_setText, regex_, data, size);
+
+ if (_rgxcall(uregex_matches, regex_, -1)) {
+ size_ = size;
+ return true;
+ } else {
+ size_ = _not(size_t);
+ return false;
+ }
+ }
+
+ bool operator ()(const char *data, size_t size) {
+ return operator ()([[[NSString alloc] initWithBytes:data length:size encoding:NSUTF8StringEncoding] autorelease]);
+ }
+
+ operator bool() const {
+ return size_ != _not(size_t);
+ }
+
+ NSString *operator ->*(NSString *format) const {
+ id values[capture_];
+ for (int i(0); i != capture_; ++i)
+ values[i] = this->operator [](i + 1);
+ return [[[NSString alloc] initWithFormat:format arguments:reinterpret_cast<va_list>(values)] autorelease];
+ }
+};
+
+#endif//Cydia_RegEx_HPP
diff --git a/CyteKit/WebViewController.mm b/CyteKit/WebViewController.mm
index a7ff586..daa0a57 100644
--- a/CyteKit/WebViewController.mm
+++ b/CyteKit/WebViewController.mm
@@ -8,7 +8,7 @@
#include "CyteKit/IndirectDelegate.h"
#include "CyteKit/Localize.h"
#include "CyteKit/WebViewController.h"
-#include "CyteKit/PerlCompatibleRegEx.hpp"
+#include "CyteKit/RegEx.hpp"
#include "CyteKit/WebThreadLocked.hpp"
//#include <QuartzCore/CALayer.h>
@@ -443,10 +443,10 @@ float CYScrollViewDecelerationRateNormal;
// CyteWebViewDelegate {{{
- (void) webView:(WebView *)view addMessageToConsole:(NSDictionary *)message {
#if LogMessages
- static Pcre irritating("^(?"
+ static RegEx irritating("(?"
":" "The page at .* displayed insecure content from .*\\."
"|" "Unsafe JavaScript attempt to access frame with URL .* from frame with URL .*\\. Domains, protocols and ports must match\\."
- ")\\n$");
+ ")\\n");
if (NSString *data = [message objectForKey:@"message"])
if (irritating(data))
diff --git a/MobileCydia.mm b/MobileCydia.mm
index b95389a..0625b35 100644
--- a/MobileCydia.mm
+++ b/MobileCydia.mm
@@ -113,7 +113,7 @@ extern "C" {
#include "Menes/Menes.h"
#include "CyteKit/IndirectDelegate.h"
-#include "CyteKit/PerlCompatibleRegEx.hpp"
+#include "CyteKit/RegEx.hpp"
#include "CyteKit/TableViewCell.h"
#include "CyteKit/TabBarController.h"
#include "CyteKit/WebScriptObject-Cyte.h"
@@ -870,7 +870,7 @@ static _finline const char *StripVersion_(const char *version) {
}
NSString *LocalizeSection(NSString *section) {
- static Pcre title_r("^(.*?) \\((.*)\\)$");
+ static RegEx title_r("(.*?) \\((.*)\\)");
if (title_r(section)) {
NSString *parent(title_r[1]);
NSString *child(title_r[2]);
@@ -888,15 +888,15 @@ NSString *Simplify(NSString *title) {
const char *data = [title UTF8String];
size_t size = [title lengthOfBytesUsingEncoding:NSUTF8StringEncoding];
- static Pcre square_r("^\\[(.*)\\]$");
+ static RegEx square_r("\\[(.*)\\]");
if (square_r(data, size))
return Simplify(square_r[1]);
- static Pcre paren_r("^\\((.*)\\)$");
+ static RegEx paren_r("\\((.*)\\)");
if (paren_r(data, size))
return Simplify(paren_r[1]);
- static Pcre title_r("^(.*?) \\((.*)\\)$");
+ static RegEx title_r("(.*?) \\((.*)\\)");
if (title_r(data, size))
return Simplify(title_r[1]);
@@ -3200,7 +3200,7 @@ struct PackageNameOrdering :
NSMutableArray *applications([NSMutableArray arrayWithCapacity:2]);
- static Pcre application_r("^/Applications/(.*)\\.app/Info.plist$");
+ static RegEx application_r("/Applications/(.*)\\.app/Info.plist");
if (NSArray *files = [self files])
for (NSString *file in files)
if (application_r(file)) {
@@ -3530,7 +3530,7 @@ class CydiaLogCleaner :
std::istream is(&ib);
std::string line;
- static Pcre finish_r("^finish:([^:]*)$");
+ static RegEx finish_r("finish:([^:]*)");
while (std::getline(is, line)) {
NSAutoreleasePool *pool([[NSAutoreleasePool alloc] init]);
@@ -3557,8 +3557,8 @@ class CydiaLogCleaner :
std::istream is(&ib);
std::string line;
- static Pcre conffile_r("^status: [^ ]* : conffile-prompt : (.*?) *$");
- static Pcre pmstatus_r("^([^:]*):([^:]*):([^:]*):(.*)$");
+ static RegEx conffile_r("status: [^ ]* : conffile-prompt : (.*?) *");
+ static RegEx pmstatus_r("([^:]*):([^:]*):([^:]*):(.*)");
while (std::getline(is, line)) {
NSAutoreleasePool *pool([[NSAutoreleasePool alloc] init]);
@@ -3760,7 +3760,7 @@ class CydiaLogCleaner :
lprintf("%c:[%s]\n", warning ? 'W' : 'E', error.c_str());
- static Pcre no_pubkey("^GPG error:.* NO_PUBKEY .*$");
+ static RegEx no_pubkey("GPG error:.* NO_PUBKEY .*");
if (warning && no_pubkey(error.c_str()))
continue;
@@ -4223,7 +4223,7 @@ class CydiaLogCleaner :
static _H<NSMutableSet> Diversions_;
@interface Diversion : NSObject {
- Pcre pattern_;
+ RegEx pattern_;
_H<NSString> key_;
_H<NSString> format_;
}
@@ -5257,7 +5257,7 @@ bool DepSubstrate(const pkgCache::VerIterator &iterator) {
pkgDepCache::StateCache &state(cache[iterator]);
- static Pcre special_r("^(firmware$|gsc\\.|cy\\+)");
+ static RegEx special_r("(firmware|gsc\\..*|cy\\+.*)");
if (state.NewInstall())
[installs addObject:name];
@@ -8625,7 +8625,7 @@ static void HomeControllerReachabilityCallback(SCNetworkReachabilityRef reachabi
case 1: {
NSString *href = [[alert textField] text];
- static Pcre href_r("^(http(s?)://|file:///)[^# ]*$");
+ static RegEx href_r("(http(s?)://|file:///)[^# ]*");
if (!href_r(href)) {
UIAlertView *alert = [[[UIAlertView alloc]
initWithTitle:[NSString stringWithFormat:Colon_, Error_, UCLocalize("INVALID_URL")]
@@ -9780,7 +9780,7 @@ _end
}
- (void) setConfigurationData:(NSString *)data {
- static Pcre conffile_r("^'(.*)' '(.*)' ([01]) ([01])$");
+ static RegEx conffile_r("'(.*)' '(.*)' ([01]) ([01])");
if (!conffile_r(data)) {
lprintf("E:invalid conffile\n");
@@ -10192,7 +10192,7 @@ int main(int argc, char *argv[]) {
Idiom_ = IsWildcat_ ? @"ipad" : @"iphone";
- Pcre pattern("^([0-9]+\\.[0-9]+)");
+ RegEx pattern("([0-9]+\\.[0-9]+).*");
if (pattern([device systemVersion]))
Firmware_ = pattern[1];
@@ -10257,7 +10257,7 @@ int main(int argc, char *argv[]) {
lang = NULL;
if (lang != NULL) {
- Pcre pattern("^([a-z][a-z])(?:-[A-Za-z]*)?(_[A-Z][A-Z])?$");
+ RegEx pattern("([a-z][a-z])(?:-[A-Za-z]*)?(_[A-Z][A-Z])?");
lang = !pattern(lang) ? NULL : [pattern->*@"%1$@%2$@" UTF8String];
}
@@ -10407,12 +10407,12 @@ int main(int argc, char *argv[]) {
NSString *agent([NSString stringWithFormat:@"Cydia/%@ CyF/%.2f", Cydia_, kCFCoreFoundationVersionNumber]);
- if (Pcre match = Pcre("^[0-9]+(\\.[0-9]+)+", Safari_))
- agent = [NSString stringWithFormat:@"Safari/%@ %@", match[0], agent];
- if (Pcre match = Pcre("^[0-9]+[A-Z][0-9]+[a-z]?", System_))
- agent = [NSString stringWithFormat:@"Mobile/%@ %@", match[0], agent];
- if (Pcre match = Pcre("^[0-9]+(\\.[0-9]+)+", Product_))
- agent = [NSString stringWithFormat:@"Version/%@ %@", match[0], agent];
+ if (RegEx match = RegEx("([0-9]+(\\.[0-9]+)+).*", Safari_))
+ agent = [NSString stringWithFormat:@"Safari/%@ %@", match[1], agent];
+ if (RegEx match = RegEx("([0-9]+[A-Z][0-9]+[a-z]?).*", System_))
+ agent = [NSString stringWithFormat:@"Mobile/%@ %@", match[1], agent];
+ if (RegEx match = RegEx("([0-9]+(\\.[0-9]+)+).*", Product_))
+ agent = [NSString stringWithFormat:@"Version/%@ %@", match[1], agent];
UserAgent_ = agent;
/* }}} */
diff --git a/cydia.control b/cydia.control
index 3688a8f..ba88add 100644
--- a/cydia.control
+++ b/cydia.control
@@ -5,7 +5,7 @@ Maintainer: Jay Freeman (saurik) <saurik@saurik.com>
Architecture: iphoneos-arm
Version:
Replaces: bigboss, bigbossbetarepo, com.sosiphone.addcydia, cydia-sources, ispazio.net, modmyifone, saurik, ste, yellowsn0w.com, zodttd
-Depends: apr-lib, apt7-lib, apt7-key, cydia-lproj (>= 1.1.10), darwintools, debianutils, org.thebigboss.repo.icons, pcre, sed, shell-cmds, system-cmds, uikittools (>= 1.1.4)
+Depends: apr-lib, apt7-lib, apt7-key, cydia-lproj (>= 1.1.10), darwintools, debianutils, org.thebigboss.repo.icons, sed, shell-cmds, system-cmds, uikittools (>= 1.1.4)
Conflicts: bigboss, bigbossbetarepo, com.sosiphone.addcydia, cydia-sources, ispazio.net, modmyifone, ste, yellowsn0w.com, zodttd
Pre-Depends: debianutils
Provides: bigbossbetarepo, cydia-sources
diff --git a/makefile b/makefile
index c76e489..4ca2d6f 100644
--- a/makefile
+++ b/makefile
@@ -45,7 +45,6 @@ libs += -framework WebKit
libs += -lapr-1
libs += -lapt-pkg
libs += -licucore
-libs += -lpcre
uikit :=
uikit += -framework UIKit
@@ -135,7 +134,7 @@ setnsfpn: setnsfpn.cpp
@ldid -T0 -S $@
postinst: postinst.mm Sources.mm Sources.h CyteKit/stringWithUTF8Bytes.mm CyteKit/stringWithUTF8Bytes.h CyteKit/UCPlatform.h
- $(cycc) -std=c++11 $(filter %.mm,$^) $(flags) $(link) -framework CoreFoundation -framework Foundation -framework UIKit -lpcre
+ $(cycc) -std=c++11 $(filter %.mm,$^) $(flags) $(link) -framework CoreFoundation -framework Foundation -framework UIKit
@ldid -T0 -S $@
debs/cydia_$(version)_iphoneos-arm.deb: MobileCydia preinst postinst cfversion setnsfpn $(images) $(shell find MobileCydia.app) cydia.control Library/firmware.sh Library/move.sh Library/startup
diff --git a/sysroot.sh b/sysroot.sh
index 55b65ca..ec3ee2c 100755
--- a/sysroot.sh
+++ b/sysroot.sh
@@ -67,7 +67,6 @@ urls[apr-lib]=http://apt.saurik.com/debs/apr-lib_1.3.3-2_iphoneos-arm.deb
urls[apt7]=http://apt.saurik.com/debs/apt7_0.7.25.3-7_iphoneos-arm.deb
urls[apt7-lib]=http://apt.saurik.com/debs/apt7-lib_0.7.25.3-12_iphoneos-arm.deb
urls[coreutils]=http://apt.saurik.com/debs/coreutils_7.4-11_iphoneos-arm.deb
-urls[pcre]=http://apt.saurik.com/debs/pcre_7.9-3_iphoneos-arm.deb
if [[ 0 ]]; then
wget -qO- "${repository}dists/${distribution}/${component}/binary-${architecture}/Packages.bz2" | bzcat | {