Merge branch 'release/2.4.0'
This commit is contained in:
commit
66bd4842df
|
@ -48,7 +48,7 @@ To install it, simply add the dependency to your Package.Swift file:
|
||||||
```swift
|
```swift
|
||||||
...
|
...
|
||||||
dependencies: [
|
dependencies: [
|
||||||
.package(url: "https://github.com/scinfu/SwiftSoup.git", from: "2.3.8"),
|
.package(url: "https://github.com/scinfu/SwiftSoup.git", from: "2.4.0"),
|
||||||
],
|
],
|
||||||
targets: [
|
targets: [
|
||||||
.target( name: "YourTarget", dependencies: ["SwiftSoup"]),
|
.target( name: "YourTarget", dependencies: ["SwiftSoup"]),
|
||||||
|
|
File diff suppressed because one or more lines are too long
|
@ -0,0 +1,30 @@
|
||||||
|
//
|
||||||
|
// Mutex.swift
|
||||||
|
// SwiftSoup
|
||||||
|
//
|
||||||
|
// Created by xukun on 2022/3/31.
|
||||||
|
// Copyright © 2022 Nabil Chatbi. All rights reserved.
|
||||||
|
//
|
||||||
|
|
||||||
|
import Foundation
|
||||||
|
|
||||||
|
final class Mutex: NSLocking {
|
||||||
|
|
||||||
|
private var mutex = pthread_mutex_t()
|
||||||
|
|
||||||
|
init() {
|
||||||
|
pthread_mutex_init(&mutex, nil)
|
||||||
|
}
|
||||||
|
|
||||||
|
deinit {
|
||||||
|
pthread_mutex_destroy(&mutex)
|
||||||
|
}
|
||||||
|
|
||||||
|
func lock() {
|
||||||
|
pthread_mutex_lock(&mutex)
|
||||||
|
}
|
||||||
|
|
||||||
|
func unlock() {
|
||||||
|
pthread_mutex_unlock(&mutex)
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,37 @@
|
||||||
|
//
|
||||||
|
// UnfairLock.swift
|
||||||
|
// SwiftSoup
|
||||||
|
//
|
||||||
|
// Created by xukun on 2022/3/31.
|
||||||
|
// Copyright © 2022 Nabil Chatbi. All rights reserved.
|
||||||
|
//
|
||||||
|
|
||||||
|
import Foundation
|
||||||
|
|
||||||
|
@available(iOSApplicationExtension 10.0, *)
|
||||||
|
@available(macOSApplicationExtension 10.12, *)
|
||||||
|
final class UnfairLock: NSLocking {
|
||||||
|
|
||||||
|
private let unfairLock: UnsafeMutablePointer<os_unfair_lock> = {
|
||||||
|
let pointer = UnsafeMutablePointer<os_unfair_lock>.allocate(capacity: 1)
|
||||||
|
pointer.initialize(to: os_unfair_lock())
|
||||||
|
return pointer
|
||||||
|
}()
|
||||||
|
|
||||||
|
deinit {
|
||||||
|
unfairLock.deinitialize(count: 1)
|
||||||
|
unfairLock.deallocate()
|
||||||
|
}
|
||||||
|
|
||||||
|
func lock() {
|
||||||
|
os_unfair_lock_lock(unfairLock)
|
||||||
|
}
|
||||||
|
|
||||||
|
func tryLock() -> Bool {
|
||||||
|
os_unfair_lock_trylock(unfairLock)
|
||||||
|
}
|
||||||
|
|
||||||
|
func unlock() {
|
||||||
|
os_unfair_lock_unlock(unfairLock)
|
||||||
|
}
|
||||||
|
}
|
|
@ -8,7 +8,7 @@
|
||||||
|
|
||||||
Pod::Spec.new do |s|
|
Pod::Spec.new do |s|
|
||||||
s.name = 'SwiftSoup'
|
s.name = 'SwiftSoup'
|
||||||
s.version = '2.3.8'
|
s.version = '2.4.0'
|
||||||
s.summary = 'Swift HTML Parser / Reader, XML , with best of DOM, CSS, and jquery'
|
s.summary = 'Swift HTML Parser / Reader, XML , with best of DOM, CSS, and jquery'
|
||||||
s.description = <<-DESC
|
s.description = <<-DESC
|
||||||
SwiftSoup is a Swift library for working with real-world HTML. It provides a very convenient API for extracting and manipulating data, using the best of DOM, CSS, and jquery-like methods.
|
SwiftSoup is a Swift library for working with real-world HTML. It provides a very convenient API for extracting and manipulating data, using the best of DOM, CSS, and jquery-like methods.
|
||||||
|
|
|
@ -7,6 +7,14 @@
|
||||||
objects = {
|
objects = {
|
||||||
|
|
||||||
/* Begin PBXBuildFile section */
|
/* Begin PBXBuildFile section */
|
||||||
|
6710742C27F57FA60048E7C1 /* UnfairLock.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6710742B27F57FA60048E7C1 /* UnfairLock.swift */; };
|
||||||
|
6710742D27F57FA60048E7C1 /* UnfairLock.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6710742B27F57FA60048E7C1 /* UnfairLock.swift */; };
|
||||||
|
6710742E27F57FA60048E7C1 /* UnfairLock.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6710742B27F57FA60048E7C1 /* UnfairLock.swift */; };
|
||||||
|
6710742F27F57FA60048E7C1 /* UnfairLock.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6710742B27F57FA60048E7C1 /* UnfairLock.swift */; };
|
||||||
|
6710743127F580530048E7C1 /* Mutex.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6710743027F580530048E7C1 /* Mutex.swift */; };
|
||||||
|
6710743227F580530048E7C1 /* Mutex.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6710743027F580530048E7C1 /* Mutex.swift */; };
|
||||||
|
6710743327F580530048E7C1 /* Mutex.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6710743027F580530048E7C1 /* Mutex.swift */; };
|
||||||
|
6710743427F580530048E7C1 /* Mutex.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6710743027F580530048E7C1 /* Mutex.swift */; };
|
||||||
8C19C82F1DB7E5D200B8FC22 /* Tokeniser.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8C19C82E1DB7E5D200B8FC22 /* Tokeniser.swift */; };
|
8C19C82F1DB7E5D200B8FC22 /* Tokeniser.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8C19C82E1DB7E5D200B8FC22 /* Tokeniser.swift */; };
|
||||||
8C19C8311DB7E8CD00B8FC22 /* ParseError.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8C19C8301DB7E8CD00B8FC22 /* ParseError.swift */; };
|
8C19C8311DB7E8CD00B8FC22 /* ParseError.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8C19C8301DB7E8CD00B8FC22 /* ParseError.swift */; };
|
||||||
8C19C8331DB7ECB700B8FC22 /* ParseErrorList.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8C19C8321DB7ECB700B8FC22 /* ParseErrorList.swift */; };
|
8C19C8331DB7ECB700B8FC22 /* ParseErrorList.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8C19C8321DB7ECB700B8FC22 /* ParseErrorList.swift */; };
|
||||||
|
@ -288,6 +296,8 @@
|
||||||
/* End PBXContainerItemProxy section */
|
/* End PBXContainerItemProxy section */
|
||||||
|
|
||||||
/* Begin PBXFileReference section */
|
/* Begin PBXFileReference section */
|
||||||
|
6710742B27F57FA60048E7C1 /* UnfairLock.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = UnfairLock.swift; sourceTree = "<group>"; };
|
||||||
|
6710743027F580530048E7C1 /* Mutex.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Mutex.swift; sourceTree = "<group>"; };
|
||||||
8C19C82E1DB7E5D200B8FC22 /* Tokeniser.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = Tokeniser.swift; sourceTree = "<group>"; };
|
8C19C82E1DB7E5D200B8FC22 /* Tokeniser.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = Tokeniser.swift; sourceTree = "<group>"; };
|
||||||
8C19C8301DB7E8CD00B8FC22 /* ParseError.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ParseError.swift; sourceTree = "<group>"; };
|
8C19C8301DB7E8CD00B8FC22 /* ParseError.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ParseError.swift; sourceTree = "<group>"; };
|
||||||
8C19C8321DB7ECB700B8FC22 /* ParseErrorList.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ParseErrorList.swift; sourceTree = "<group>"; };
|
8C19C8321DB7ECB700B8FC22 /* ParseErrorList.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ParseErrorList.swift; sourceTree = "<group>"; };
|
||||||
|
@ -461,6 +471,8 @@
|
||||||
8C9380111DC6945B0014DAD6 /* SimpleDictionary.swift */,
|
8C9380111DC6945B0014DAD6 /* SimpleDictionary.swift */,
|
||||||
8C246B521DD7396200B31DA7 /* OrderedSet.swift */,
|
8C246B521DD7396200B31DA7 /* OrderedSet.swift */,
|
||||||
8C73DB4A1DDA605900233A68 /* UnicodeScalar.swift */,
|
8C73DB4A1DDA605900233A68 /* UnicodeScalar.swift */,
|
||||||
|
6710742B27F57FA60048E7C1 /* UnfairLock.swift */,
|
||||||
|
6710743027F580530048E7C1 /* Mutex.swift */,
|
||||||
);
|
);
|
||||||
name = shared;
|
name = shared;
|
||||||
sourceTree = "<group>";
|
sourceTree = "<group>";
|
||||||
|
@ -943,9 +955,11 @@
|
||||||
8CC2FD8D1DB12382002CB469 /* Whitelist.swift in Sources */,
|
8CC2FD8D1DB12382002CB469 /* Whitelist.swift in Sources */,
|
||||||
8C19C82F1DB7E5D200B8FC22 /* Tokeniser.swift in Sources */,
|
8C19C82F1DB7E5D200B8FC22 /* Tokeniser.swift in Sources */,
|
||||||
8CD4E8F01E12B0FF0039B951 /* Pattern.swift in Sources */,
|
8CD4E8F01E12B0FF0039B951 /* Pattern.swift in Sources */,
|
||||||
|
6710743127F580530048E7C1 /* Mutex.swift in Sources */,
|
||||||
8CEA295B1DAC23820064A341 /* String.swift in Sources */,
|
8CEA295B1DAC23820064A341 /* String.swift in Sources */,
|
||||||
8C89785E1DBCDB0D00B1C024 /* CombiningEvaluator.swift in Sources */,
|
8C89785E1DBCDB0D00B1C024 /* CombiningEvaluator.swift in Sources */,
|
||||||
8CE418621DAA568600240B42 /* Attribute.swift in Sources */,
|
8CE418621DAA568600240B42 /* Attribute.swift in Sources */,
|
||||||
|
6710742C27F57FA60048E7C1 /* UnfairLock.swift in Sources */,
|
||||||
8CD48F211DBB6D2F00D1D88F /* Evaluator.swift in Sources */,
|
8CD48F211DBB6D2F00D1D88F /* Evaluator.swift in Sources */,
|
||||||
8CE418641DAA568600240B42 /* BooleanAttribute.swift in Sources */,
|
8CE418641DAA568600240B42 /* BooleanAttribute.swift in Sources */,
|
||||||
8CD500DE1DAEC9FF002270FC /* TokeniserState.swift in Sources */,
|
8CD500DE1DAEC9FF002270FC /* TokeniserState.swift in Sources */,
|
||||||
|
@ -1045,9 +1059,11 @@
|
||||||
BD3B5B6B1FBED933001FDB3B /* Whitelist.swift in Sources */,
|
BD3B5B6B1FBED933001FDB3B /* Whitelist.swift in Sources */,
|
||||||
BD3B5B6C1FBED933001FDB3B /* Tokeniser.swift in Sources */,
|
BD3B5B6C1FBED933001FDB3B /* Tokeniser.swift in Sources */,
|
||||||
BD3B5B6D1FBED933001FDB3B /* Pattern.swift in Sources */,
|
BD3B5B6D1FBED933001FDB3B /* Pattern.swift in Sources */,
|
||||||
|
6710743227F580530048E7C1 /* Mutex.swift in Sources */,
|
||||||
BD3B5B6E1FBED933001FDB3B /* String.swift in Sources */,
|
BD3B5B6E1FBED933001FDB3B /* String.swift in Sources */,
|
||||||
BD3B5B6F1FBED933001FDB3B /* CombiningEvaluator.swift in Sources */,
|
BD3B5B6F1FBED933001FDB3B /* CombiningEvaluator.swift in Sources */,
|
||||||
BD3B5B701FBED933001FDB3B /* Attribute.swift in Sources */,
|
BD3B5B701FBED933001FDB3B /* Attribute.swift in Sources */,
|
||||||
|
6710742D27F57FA60048E7C1 /* UnfairLock.swift in Sources */,
|
||||||
BD3B5B711FBED933001FDB3B /* Evaluator.swift in Sources */,
|
BD3B5B711FBED933001FDB3B /* Evaluator.swift in Sources */,
|
||||||
BD3B5B721FBED933001FDB3B /* BooleanAttribute.swift in Sources */,
|
BD3B5B721FBED933001FDB3B /* BooleanAttribute.swift in Sources */,
|
||||||
BD3B5B731FBED933001FDB3B /* TokeniserState.swift in Sources */,
|
BD3B5B731FBED933001FDB3B /* TokeniserState.swift in Sources */,
|
||||||
|
@ -1108,9 +1124,11 @@
|
||||||
BD3B5BAE1FC063BD001FDB3B /* Whitelist.swift in Sources */,
|
BD3B5BAE1FC063BD001FDB3B /* Whitelist.swift in Sources */,
|
||||||
BD3B5BAF1FC063BD001FDB3B /* Tokeniser.swift in Sources */,
|
BD3B5BAF1FC063BD001FDB3B /* Tokeniser.swift in Sources */,
|
||||||
BD3B5BB01FC063BD001FDB3B /* Pattern.swift in Sources */,
|
BD3B5BB01FC063BD001FDB3B /* Pattern.swift in Sources */,
|
||||||
|
6710743327F580530048E7C1 /* Mutex.swift in Sources */,
|
||||||
BD3B5BB11FC063BD001FDB3B /* String.swift in Sources */,
|
BD3B5BB11FC063BD001FDB3B /* String.swift in Sources */,
|
||||||
BD3B5BB21FC063BD001FDB3B /* CombiningEvaluator.swift in Sources */,
|
BD3B5BB21FC063BD001FDB3B /* CombiningEvaluator.swift in Sources */,
|
||||||
BD3B5BB31FC063BD001FDB3B /* Attribute.swift in Sources */,
|
BD3B5BB31FC063BD001FDB3B /* Attribute.swift in Sources */,
|
||||||
|
6710742E27F57FA60048E7C1 /* UnfairLock.swift in Sources */,
|
||||||
BD3B5BB41FC063BD001FDB3B /* Evaluator.swift in Sources */,
|
BD3B5BB41FC063BD001FDB3B /* Evaluator.swift in Sources */,
|
||||||
BD3B5BB51FC063BD001FDB3B /* BooleanAttribute.swift in Sources */,
|
BD3B5BB51FC063BD001FDB3B /* BooleanAttribute.swift in Sources */,
|
||||||
BD3B5BB61FC063BD001FDB3B /* TokeniserState.swift in Sources */,
|
BD3B5BB61FC063BD001FDB3B /* TokeniserState.swift in Sources */,
|
||||||
|
@ -1171,9 +1189,11 @@
|
||||||
BD3B5BF11FC06423001FDB3B /* Whitelist.swift in Sources */,
|
BD3B5BF11FC06423001FDB3B /* Whitelist.swift in Sources */,
|
||||||
BD3B5BF21FC06423001FDB3B /* Tokeniser.swift in Sources */,
|
BD3B5BF21FC06423001FDB3B /* Tokeniser.swift in Sources */,
|
||||||
BD3B5BF31FC06423001FDB3B /* Pattern.swift in Sources */,
|
BD3B5BF31FC06423001FDB3B /* Pattern.swift in Sources */,
|
||||||
|
6710743427F580530048E7C1 /* Mutex.swift in Sources */,
|
||||||
BD3B5BF41FC06423001FDB3B /* String.swift in Sources */,
|
BD3B5BF41FC06423001FDB3B /* String.swift in Sources */,
|
||||||
BD3B5BF51FC06423001FDB3B /* CombiningEvaluator.swift in Sources */,
|
BD3B5BF51FC06423001FDB3B /* CombiningEvaluator.swift in Sources */,
|
||||||
BD3B5BF61FC06423001FDB3B /* Attribute.swift in Sources */,
|
BD3B5BF61FC06423001FDB3B /* Attribute.swift in Sources */,
|
||||||
|
6710742F27F57FA60048E7C1 /* UnfairLock.swift in Sources */,
|
||||||
BD3B5BF71FC06423001FDB3B /* Evaluator.swift in Sources */,
|
BD3B5BF71FC06423001FDB3B /* Evaluator.swift in Sources */,
|
||||||
BD3B5BF81FC06423001FDB3B /* BooleanAttribute.swift in Sources */,
|
BD3B5BF81FC06423001FDB3B /* BooleanAttribute.swift in Sources */,
|
||||||
BD3B5BF91FC06423001FDB3B /* TokeniserState.swift in Sources */,
|
BD3B5BF91FC06423001FDB3B /* TokeniserState.swift in Sources */,
|
||||||
|
|
Loading…
Reference in New Issue