From a1b566356344c658abf0b538090c26546305a19c Mon Sep 17 00:00:00 2001 From: javad Date: Sat, 2 Apr 2022 16:36:42 +0430 Subject: [PATCH] Preserves URLs --- Changelog.txt | 3 +++ negar/constants.py | 51 +++++++++++++++++++++++++++++++++++++++++++--- negar/virastar.py | 21 +++++++++++++++++-- 3 files changed, 70 insertions(+), 5 deletions(-) diff --git a/Changelog.txt b/Changelog.txt index 5120fa0..5c5d49a 100644 --- a/Changelog.txt +++ b/Changelog.txt @@ -1,3 +1,6 @@ +0.9.7 - 2022-04-02 +-- Preserves URLs; number inside the URLs will not change + 0.9.6 - 2022-04-02 -- Fixed issue #21, suffix اش -- Untouchable words updated diff --git a/negar/constants.py b/negar/constants.py index 6f0b8c0..6a123bc 100644 --- a/negar/constants.py +++ b/negar/constants.py @@ -1,6 +1,6 @@ from pathlib import Path -__version__ = "0.9.6" +__version__ = "0.9.7" LOGO = (Path(__file__).parent.absolute()/"logo.png").as_posix() DATAFILE = Path(__file__).parent.absolute()/"data/untouchable.dat" @@ -18,5 +18,50 @@ * کلماتی که به اشتباه بدون فاصله به صورت ' میشود '، ' بیشک ' , یا ' کمکتان ' نوشته شده‌، به صورت درست فاصله گذاری میشوند. * از استفاده ی بیش از یک علامت ؟؟؟؟ یا !!! جلوگیری می کند. * کلماتی که به صورت کشیـــــــــده نوشته شده اند را به صورت درست می نویسد. -* از فاصله گذاری بیش از حد جلوگیری می کند. -""" \ No newline at end of file +* از فاصله گذاری بیش از حد جلوگیری می کند.""" + +URLREGX = r""" #https://gist.github.com/gruber/8891611 +(?xi) +\b +( # Capture 1: entire matched URL + (?: + https?|ftp: # URL protocol and colon + (?: + /{1,3} # 1-3 slashes + | # or + [a-z0-9%] # Single letter or digit or '%' + # (Trying not to match e.g. "URI::Escape") + ) + | # or + # looks like domain name followed by a slash: + [a-z0-9.\-]+[.] + (?:com|net|org|edu|gov|mil|aero|asia|biz|cat|coop|info|int|jobs|mobi|museum|name|post|pro|tel|travel|xxx|ac|ad|ae|af|ag|ai|al|am|an|ao|aq|ar|as|at|au|aw|ax|az|ba|bb|bd|be|bf|bg|bh|bi|bj|bm|bn|bo|br|bs|bt|bv|bw|by|bz|ca|cc|cd|cf|cg|ch|ci|ck|cl|cm|cn|co|cr|cs|cu|cv|cx|cy|cz|dd|de|dj|dk|dm|do|dz|ec|ee|eg|eh|er|es|et|eu|fi|fj|fk|fm|fo|fr|ga|gb|gd|ge|gf|gg|gh|gi|gl|gm|gn|gp|gq|gr|gs|gt|gu|gw|gy|hk|hm|hn|hr|ht|hu|id|ie|il|im|in|io|iq|ir|is|it|je|jm|jo|jp|ke|kg|kh|ki|km|kn|kp|kr|kw|ky|kz|la|lb|lc|li|lk|lr|ls|lt|lu|lv|ly|ma|mc|md|me|mg|mh|mk|ml|mm|mn|mo|mp|mq|mr|ms|mt|mu|mv|mw|mx|my|mz|na|nc|ne|nf|ng|ni|nl|no|np|nr|nu|nz|om|pa|pe|pf|pg|ph|pk|pl|pm|pn|pr|ps|pt|pw|py|qa|re|ro|rs|ru|rw|sa|sb|sc|sd|se|sg|sh|si|sj| Ja|sk|sl|sm|sn|so|sr|ss|st|su|sv|sx|sy|sz|tc|td|tf|tg|th|tj|tk|tl|tm|tn|to|tp|tr|tt|tv|tw|tz|ua|ug|uk|us|uy|uz|va|vc|ve|vg|vi|vn|vu|wf|ws|ye|yt|yu|za|zm|zw) + [/?] + ) + (?: # One or more: + [^\s()<>{}\[\]]+ # Run of non-space, non-()<>{}[] + | # or + \([^\s()]*?\([^\s()]+\)[^\s()]*?\) # balanced parens, one level deep: (…(…)…) + | + \([^\s]+?\) # balanced parens, non-recursive: (…) + )+ + (?: # End with: + \([^\s()]*?\([^\s()]+\)[^\s()]*?\) # balanced parens, one level deep: (…(…)…) + | + \([^\s]+?\) # balanced parens, non-recursive: (…) + | # or + [^\s`!()\[\]{};:'".,<>?«»“”‘’] # not a space or one of these punct chars + ) + | # OR, the following to match naked domains: + (?: + (?