]> git.saurik.com Git - cydia.git/commitdiff
Use libicucore's uregex to avoid Depends: libpcre.
authorJay Freeman (saurik) <saurik@saurik.com>
Sat, 27 Jun 2015 06:01:28 +0000 (23:01 -0700)
committerJay Freeman (saurik) <saurik@saurik.com>
Sat, 27 Jun 2015 06:01:28 +0000 (23:01 -0700)
Cydia/MIMEAddress.mm
CyteKit/PerlCompatibleRegEx.hpp [deleted file]
CyteKit/RegEx.hpp [new file with mode: 0644]
CyteKit/WebViewController.mm
MobileCydia.mm
cydia.control
makefile
sysroot.sh

index 2a80ae7758d521ad1352e66976f2cc2dbc5ed081..aea37ca151ab05ec9fdefc9ce8d5f0dac0f226cf 100644 (file)
@@ -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 (file)
index 52136f6..0000000
+++ /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 (file)
index 0000000..5799946
--- /dev/null
@@ -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
index a7ff586f3691bfa43db5169ff80180e7808b39d9..daa0a5711dfd20dbe955372f9800595b32c123ae 100644 (file)
@@ -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))
index b95389ac2508d49fb527ae20a030711a7a0df2ce..0625b35c288cc4d942d73ad31093bf107daf46ec 100644 (file)
@@ -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;
     /* }}} */
index 3688a8f1ed989738fdc6aca07597c4350f3f9140..ba88add948c2c74d473c75b04c466268c9102029 100644 (file)
@@ -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
index c76e489e30a65149dca0fe6f936e0fa297a7f74d..4ca2d6ff7a7ab4f5863c141c9e693242421e6564 100644 (file)
--- 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
index 55b65cab9dfacc2321963fc0de54533f052aac74..ec3ee2ce3810e355c746ea1e57ebb071beedbad1 100755 (executable)
@@ -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 | {