Merge branch 'release/2.4.0'

This commit is contained in:
Nabil Chatbi 2022-03-31 18:40:58 +02:00
commit 66bd4842df
6 changed files with 116 additions and 18 deletions

View File

@ -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

30
Sources/Mutex.swift Normal file
View File

@ -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)
}
}

37
Sources/UnfairLock.swift Normal file
View File

@ -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)
}
}

View File

@ -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.

View File

@ -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 */,