From unknown Fri Sep 12 05:30:36 2025 Content-Disposition: inline Content-Transfer-Encoding: quoted-printable MIME-Version: 1.0 X-Mailer: MIME-tools 5.509 (Entity 5.509) Content-Type: text/plain; charset=utf-8 From: bug#41897 <41897@debbugs.gnu.org> To: bug#41897 <41897@debbugs.gnu.org> Subject: Status: 28.0.50; JavaScript comment filling with mhtml-mode Reply-To: bug#41897 <41897@debbugs.gnu.org> Date: Fri, 12 Sep 2025 12:30:36 +0000 retitle 41897 28.0.50; JavaScript comment filling with mhtml-mode reassign 41897 emacs submitter 41897 Simen Heggest=C3=B8yl severity 41897 normal thanks From debbugs-submit-bounces@debbugs.gnu.org Tue Jun 16 13:09:16 2020 Received: (at submit) by debbugs.gnu.org; 16 Jun 2020 17:09:16 +0000 Received: from localhost ([127.0.0.1]:49514 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1jlF5I-0006FW-Jc for submit@debbugs.gnu.org; Tue, 16 Jun 2020 13:09:16 -0400 Received: from lists.gnu.org ([209.51.188.17]:33004) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1jlF5G-0006FO-8a for submit@debbugs.gnu.org; Tue, 16 Jun 2020 13:09:15 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:47250) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jlF5E-0001mV-HJ for bug-gnu-emacs@gnu.org; Tue, 16 Jun 2020 13:09:13 -0400 Received: from aibo.runbox.com ([91.220.196.211]:46470) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1jlF5B-0007Vp-Oq for bug-gnu-emacs@gnu.org; Tue, 16 Jun 2020 13:09:12 -0400 DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=runbox.com; s=selector1; h=Content-Type:MIME-Version:Message-ID:Date:Subject:To:From; bh=Ju5jg4f13++Rh7v8Jdo0qJwqlRpXWltnSOOIRVSG+IM=; b=Wd+hdCD32wuL9c68Br6edGlhE veTtgj6d7ixrrzRT6XbBWnBx9Sk1XMQluq3wzbOb0/hK+2+ihqRakuk/dl8hG8yNXTyRb9z4Q3snx wKsRgRl2g+hE0NH1GPq8tAn8jhegjqXKSU6zBCq6tPUUhE5PPasFRGCp6UGVHa+NjyLRGRVsIIetm O5ClQj2fWj4pVDEY4FKR3ywFGIq5AQhmgHlQeH2PY4iyXoLcqhhinY6kiHGWR4BfjIpRGrXoBZ/DI fLdpVyW36Ws4N7TRTCS+mBbDAx4malljipRnTW/ZaUEyLMSx5xXWs0sYuX9QAMduLdR1HmHPhktaW 1dtveAGrA==; Received: from [10.9.9.73] (helo=submission02.runbox) by mailtransmit03.runbox with esmtp (Exim 4.86_2) (envelope-from ) id 1jlF56-0002qc-PG for bug-gnu-emacs@gnu.org; Tue, 16 Jun 2020 19:09:04 +0200 Received: by submission02.runbox with esmtpsa [Authenticated alias (963757)] (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) id 1jlF4m-0000IV-Sw for bug-gnu-emacs@gnu.org; Tue, 16 Jun 2020 19:08:44 +0200 From: =?utf-8?Q?Simen_Heggest=C3=B8yl?= To: bug-gnu-emacs@gnu.org Subject: 28.0.50; JavaScript comment filling with mhtml-mode Date: Tue, 16 Jun 2020 19:08:44 +0200 Message-ID: <874krbaqg3.fsf@simenheg@gmail.com> User-Agent: Gnus/5.13 (Gnus v5.13) Emacs/27.0.91 (gnu/linux) MIME-Version: 1.0 Content-Type: text/plain Received-SPF: pass client-ip=91.220.196.211; envelope-from=simenheg@runbox.com; helo=aibo.runbox.com X-detected-operating-system: by eggs.gnu.org: First seen = 2020/06/16 13:09:05 X-ACL-Warn: Detected OS = ??? X-Spam_score_int: -17 X-Spam_score: -1.8 X-Spam_bar: - X-Spam_report: (-1.8 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, FREEMAIL_FROM=0.001, MSGID_MULTIPLE_AT=1, RCVD_IN_DNSWL_LOW=-0.7, RCVD_IN_MSPIKE_H3=-0.01, RCVD_IN_MSPIKE_WL=-0.01, SPF_HELO_NONE=0.001, SPF_PASS=-0.001, URIBL_BLOCKED=0.001 autolearn=_AUTOLEARN X-Spam_action: no action X-Spam-Score: 1.6 (+) X-Spam-Report: Spam detection software, running on the system "debbugs.gnu.org", has NOT identified this incoming email as spam. The original message has been attached to this so you can view it or label similar future email. If you have any questions, see the administrator of that system for details. Content preview: In js-mode, the following JavaScript comment is filled as expected when fill-paragraph (M-q) is used with point within it: /* * This is a long comment that should break over multiple lines when fill-paragraph is used. */ Content analysis details: (1.6 points, 10.0 required) pts rule name description ---- ---------------------- -------------------------------------------------- 1.0 MSGID_MULTIPLE_AT Message-ID contains multiple '@' characters 0.0 FREEMAIL_FROM Sender email is commonly abused enduser mail provider (simenheg[at]runbox.com) 0.9 SPF_FAIL SPF: sender does not match SPF record (fail) [SPF failed: Please see http://www.openspf.org/Why?s=mfrom; id=simenheg%40runbox.com; ip=209.51.188.17; r=debbugs.gnu.org] 0.0 SPF_HELO_NONE SPF: HELO does not publish an SPF Record 0.0 RCVD_IN_MSPIKE_H4 RBL: Very Good reputation (+4) [209.51.188.17 listed in wl.mailspike.net] 0.0 URIBL_BLOCKED ADMINISTRATOR NOTICE: The query to URIBL was blocked. See http://wiki.apache.org/spamassassin/DnsBlocklists#dnsbl-block for more information. [URIs: runbox.com] -2.3 RCVD_IN_DNSWL_MED RBL: Sender listed at https://www.dnswl.org/, medium trust [209.51.188.17 listed in list.dnswl.org] 0.0 RCVD_IN_MSPIKE_WL Mailspike good senders 2.0 SPOOFED_FREEMAIL No description available. X-Debbugs-Envelope-To: submit X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: debbugs-submit-bounces@debbugs.gnu.org Sender: "Debbugs-submit" X-Spam-Score: -1.4 (-) In js-mode, the following JavaScript comment is filled as expected when fill-paragraph (M-q) is used with point within it: /* * This is a long comment that should break over multiple lines when fill-paragraph is used. */ Is filled as: /* * This is a long comment that should break over multiple lines when * fill-paragraph is used. */ In mhtml-mode however, the same JavaScript comment: Is filled as: From debbugs-submit-bounces@debbugs.gnu.org Sat Jun 20 13:18:39 2020 Received: (at 41897) by debbugs.gnu.org; 20 Jun 2020 17:18:39 +0000 Received: from localhost ([127.0.0.1]:58693 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1jmh8Z-0007Gl-90 for submit@debbugs.gnu.org; Sat, 20 Jun 2020 13:18:39 -0400 Received: from colin.muc.de ([193.149.48.1]:40650 helo=mail.muc.de) by debbugs.gnu.org with smtp (Exim 4.84_2) (envelope-from ) id 1jmh8U-0007GR-3d for 41897@debbugs.gnu.org; Sat, 20 Jun 2020 13:18:37 -0400 Received: (qmail 7856 invoked by uid 3782); 20 Jun 2020 17:18:27 -0000 Date: 20 Jun 2020 17:18:27 -0000 Message-ID: <20200620171827.7855.qmail@mail.muc.de> From: Alan Mackenzie To: Simen =?UTF-8?Q?Heggest=C3=B8yl?= Subject: Re: bug#41897: 28.0.50; JavaScript comment filling with mhtml-mode Organization: muc.de e.V. In-Reply-To: X-Newsgroups: gnu.emacs.bug User-Agent: tin/2.4.4-20191224 ("Millburn") (FreeBSD/11.3-RELEASE-p9 (amd64)) X-Spam-Score: 0.0 (/) X-Debbugs-Envelope-To: 41897 Cc: acm@muc.de, 41897@debbugs.gnu.org X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: debbugs-submit-bounces@debbugs.gnu.org Sender: "Debbugs-submit" X-Spam-Score: -1.0 (-) Hello, Simen. In article you wrote: > In js-mode, the following JavaScript comment is filled as expected when > fill-paragraph (M-q) is used with point within it: > /* > * This is a long comment that should break over multiple lines when fill-paragraph is used. > */ > Is filled as: > /* > * This is a long comment that should break over multiple lines when > * fill-paragraph is used. > */ > In mhtml-mode however, the same JavaScript comment: > > > > Is filled as: > > > Yes. This is happening because the mechanism mhtml-mode is using to "switch to" js-mode is imperfect. Having more than one major mode in a buffer is a difficult problem for Emacs, and there are currently no really satisfactory solutions. "Switching to" another mode essentially means setting buffer local variable copies. In the existing code, a variable essential to filling, adaptive-fill-regexp, isn't getting set to a value suitable for js-mode. Also, there was an error in the js-mode setting of the variable comment-start-skip. The patch below fixes both these errors, and seems to allow your test case to work. However, it is an incomplete solution - in particular, filling caused by typing at the end of a long line still isn't working properly. Still, it may be better than nothing, at least for now. I intend to carry on working on this bug. You haven't said what version of Emacs you're running. The patch applies cleanly both to the upcoming emacs-27 branch and the master branch at GNU savannah. To apply it, cd into ..../emacs/lisp, and execute: $ patch -p2 < this-email . Then byte-compile the two changed files and load them (possibly by restarting Emacs). Here's the patch: diff --git a/lisp/progmodes/js.el b/lisp/progmodes/js.el index 04b449ecd2..f5b6a4c260 100644 --- a/lisp/progmodes/js.el +++ b/lisp/progmodes/js.el @@ -4570,7 +4570,7 @@ js-mode ;; Comments (setq-local comment-start "// ") - (setq-local comment-start-skip "\\(//+\\|/\\*+\\)\\s *") + (setq-local comment-start-skip "\\(?://+\\|/\\*+\\)\\s *") (setq-local comment-end "") (setq-local fill-paragraph-function #'js-fill-paragraph) (setq-local normal-auto-fill-function #'js-do-auto-fill) diff --git a/lisp/textmodes/mhtml-mode.el b/lisp/textmodes/mhtml-mode.el index 1ae07c0a30..069329f4e4 100644 --- a/lisp/textmodes/mhtml-mode.el +++ b/lisp/textmodes/mhtml-mode.el @@ -73,7 +73,8 @@ mhtml-tag-relative-indent (defconst mhtml--crucial-variable-prefix (regexp-opt '("comment-" "uncomment-" "electric-indent-" - "smie-" "forward-sexp-function" "completion-" "major-mode")) + "smie-" "forward-sexp-function" "completion-" "major-mode" + "adaptive-fill-" "fill-")) "Regexp matching the prefix of \"crucial\" buffer-locals we want to capture.") (defconst mhtml--variable-prefix -- Alan Mackenzie (Nuremberg, Germany). From debbugs-submit-bounces@debbugs.gnu.org Sat Jun 20 14:27:46 2020 Received: (at 41897) by debbugs.gnu.org; 20 Jun 2020 18:27:46 +0000 Received: from localhost ([127.0.0.1]:58723 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1jmiDS-0000Wy-1W for submit@debbugs.gnu.org; Sat, 20 Jun 2020 14:27:46 -0400 Received: from aibo.runbox.com ([91.220.196.211]:40958) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1jmiDN-0000Wm-Pv for 41897@debbugs.gnu.org; Sat, 20 Jun 2020 14:27:45 -0400 DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=runbox.com; s=selector2; h=Content-Type:MIME-Version:Message-ID:In-Reply-To:Date: References:Subject:Cc:To:From; bh=9gJTumdHsHzEw7Vltsx1skzEXxBOyeN/RoxMEckD1To=; b=sW32eJSOhlyGQKnhLz75ZFH7xO 7n+IEttZ5w7+LnlHIdAZHrAHDBJLKDA0CMHqUj6VJXNsbr16QA78ffkW2pb2l9f5EAgEvAUhHOgsz MgVXouvkPJROoTT8Z/varbSSbhGNg+sMwKksKO+hlmt497QDr1kqKttr3KVuAxFhBBH9pPTokz2Kz Xf+9EKKN9a3uym53dAs7GMeuJ8kSeltTLS28n3/IhTUFgijhqx7NwdiLtgnE85rP6VvKG/S5B2Jz6 VC6WAFzcNo5+TSPLw0DDDZFQFC/s3Jr0lhX0Iql7ZoITKMUHa9FdeI3lhFY0uzOV3ly9A15x/wE/0 E+1iF8hA==; Received: from [10.9.9.73] (helo=submission02.runbox) by mailtransmit02.runbox with esmtp (Exim 4.86_2) (envelope-from ) id 1jmiDL-0006AY-Jx; Sat, 20 Jun 2020 20:27:39 +0200 Received: by submission02.runbox with esmtpsa [Authenticated alias (963757)] (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) id 1jmiD5-0006pd-4v; Sat, 20 Jun 2020 20:27:23 +0200 From: =?utf-8?Q?Simen_Heggest=C3=B8yl?= To: Alan Mackenzie Subject: Re: bug#41897: 28.0.50; JavaScript comment filling with mhtml-mode References: <20200620171827.7855.qmail@mail.muc.de> Date: Sat, 20 Jun 2020 20:27:22 +0200 In-Reply-To: <20200620171827.7855.qmail@mail.muc.de> (Alan Mackenzie's message of "20 Jun 2020 17:18:27 -0000") Message-ID: <87d05ta8z9.fsf@simenheg@gmail.com> User-Agent: Gnus/5.13 (Gnus v5.13) Emacs/27.0.91 (gnu/linux) MIME-Version: 1.0 Content-Type: multipart/mixed; boundary="=-=-=" X-Spam-Score: 0.3 (/) X-Debbugs-Envelope-To: 41897 Cc: 41897@debbugs.gnu.org X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: debbugs-submit-bounces@debbugs.gnu.org Sender: "Debbugs-submit" X-Spam-Score: -0.7 (/) --=-=-= Content-Type: text/plain Hi Alan, thanks for working on this. Alan Mackenzie writes: > The patch below fixes both these errors, and seems to allow your test > case to work. Yes, this seems to fix it in both emacs-27 and master, thanks. However in emacs-27 with the patch applied I now get a strange side-effect: After filling the comment, mhtml-mode seems to lose track of where the JavaScript portion of the buffer is. Please see the attached image. The position where point is should still be recognized as HTML+JS, but it's recognized as plain HTML+ instead after filling. This doesn't happen on master. > You haven't said what version of Emacs you're running. I put the version number in the bug subject but forgot to mention it in the description, sorry about that. -- Simen --=-=-= Content-Type: image/png Content-Disposition: attachment; filename=bug41897.png Content-Transfer-Encoding: base64 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 hBDiDGMym6iqKm/2u29nZ0d1RTkGd9cOf3+pIRVCCNGh6usbmPXRPMxmM9deeRmTrr2KBqORV//3 Hjt2/clXS5bx1GMPNVsnOjKCu2+7GT9fX35a8xtffL2U4pISzurfjxuvvw53Nze+XPINP69Zy/6k ZHJy8wgJDuLxB/9NYIA/gQH+aJrGxi3bePO9D0nLyGTXnn2c1b8fZrOZd2d/TF19PT3j4/j3nbcS 6O9Hdm4eOp2Ow9k55OblA/DS81PpERcLQF1dHXZ2dtYYd+/dD8DZAxIBWLBoMRWVlURGhPHqi8+h 1+uZ/tpbbN+5G3c3S01nbLSlJjP/SAEA9vb2NsXcnmPY5MvFyygrK8fOzo7LLx5nXd6UkGqaRkND A3V1dVRWVZGSls7GLduZ9syT1mRYCCHE31dpWTnPTX+FrJwca5/RjMxMnn5xBi9M/S9enh4d+v62 J6RSQSqEEKId0jMOU1ZeAYCCwrcrfwKONi3NzMpucY3pERdLXHQ0AFddMp6ly7+jvqGBfn37EBkW BsDVl17Cz2vWApCfX0BIUBADE/sBluSxuKQUby8vvDw8KC4tJScnl7MS+5GVnUt2Ti4A99z2L8KC gwGICg8HoLqmBidHR2rr6nhu+iv07BFHQu9ejL7wAhwdHK2xFhQWARARHgYa7N2XBMC5Awdg0Fsu rwMS+rJ9527cXF1AgwA/PwwGAyajybodW2JuzzEE2LJjJ8u+XwnATddfh7enp7Xc5Ouu5pZJE3Fz szz9zsrJ5fNFS9iyfQdJyYf47Y8NjLxg+Ek/XyGEEGe2aa+8aU1G3379FQAefPQJMjIzefHlN3hj xv916PtLDakQQogOVVRcbP3762UrWrx+slo4Ozs7PDzcKSgsataM19/P1/q3WbUMuJCcksrCr5ey 90ASZnPzQRgaGixToWTn5lqXBQX481cuzs5Me2YKy79fyaZtO9i9Zx+79+zjq6XLufvWm61JWlMf zKZ+mSVlpZZ/u7hYt1VVXQ2Am6sl6WswGjGZTIQGHx38yJaY23MM9x9M5rW330dVVS4cNoTLxo1p 9rqPt3ezf4eHhvDEf+7j5nvup6amlpS0dElIhRDiHyAtI4P4uDhee2kamqkBgLdff4XHnpxKckpK h7+/zEMqhBCiQwUHBVj/fm3ac8fp66i18v/WrjtaK2UtioqLeXraTIxGIzddfx2DzzkLLy9Ppjw/ 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 tN9886y9++5Ln2fRorx82WWZeNttWThnTjrtsEO2vvjiVHfpUjvm0b32yuxXX619/PyPfpTnf/Sj 2sffeOaZtO7YMQvnzMkDW22VjQYMyNTHH8+8d97JZmeckQUzZuSV3/wmq3Xtmq9ceWXa9ezZqNf6 /siRGfvrX6fHYYelS58+qWjRolEfDwAA8EXRrEE6c8yYTBg8OJPuuScL3n8/7Xr2TGXLpX/KyQ88 kA9eey1f+dWvljnfuF//Oq3XXDMbH3tsZr/6at649db8/ZRT0vvWW2vHbPvzn2fR3LmZNW5cXvzx j7PxwIF1Arflx2L4rfvvz5dOOSVv3HJLRl1wQdbYcstsceaZefkXv8jLl16aHa6+ulGvuWXbtnl/ 5Mg8/dBDqV5nnfQ45JD0OPTQrNatW6PmAQAA+Lxb6UG6cM6cvDVkSN649dbMeP75tOrQId323z/d DzooHbbeepkfN+43v0mbDTbIuvvss8wxLVZbLbvcdFPtUceFH3yQN4cMybx33klV585Jkg7bbJMk qWzdOknSdsMN02mnnZY553oHHpj1jzgila1a5bkf/jA9Tzgh6+y5Z94fPTrvPPlko19/mw02SL8n nsi04cMz6c47M/53v8u4q67KWr17p8ehh2advfZKZatWjZ4XAADg82alBen8997LS5dckreGDMmi efPSpW/fbH/llVm7X7/lBtiURx/NzNGjs81Pf5qKymW/rbXbfvvVOQW2w5e/nDeHDMmHb71VG6SN VdWpU5KkdceO9R7Pf++9FZqzorIynXv3TufevbPVT36St+6/P5PuvDN//7d/S+uOHdP9oIOy2Rln LPNoMQAAwBfBSruo0Qevv54Jt96aihYtsu1ll2XH3/426+69d4OOBr5y9dWpXmedrHfggZ84rnqd deo8brnaakmSxQsWrPC6K/43Civ+d521j1u2bNK8S7Rs0yY9vv3t7HzTTel15plZOHNmxl97bRbN mdPkuQEAAD7LVtohuvabb56tL7ggbwwenGdPPTUv/dd/Zb0DD0z3Aw9Mmw03XObHTX/qqbz797+n 1znnLDdeP+noabOoqWnyFDNefDGT7rwzb957b+a//37W2nnn9DjssLRs23YlLBAAAOCza6UFaYvq 6qzfv3/W798/748enQmDB+f1G2/MuCuvTMdtt033gw9O1333Tav27et83Lirr07rjh2z/mGHrayl fKSiYuXO908qW7VKzcKFy3x+7pQpmXTPPZl0xx2Z9corqe7SJesfcUR6HHZYVu/evdnWBQAA8FnS LIcc19hii2z1k59krxEj8uVLLklFixZ54eyz85eddsrCDz6oHff+yJF5569/zUYDBqTF/55+u7Is ubXM3KlTV+q8SbJat26ZNX78Up+bOXp0/uerX83LP/95Vu/RIzv89rfZ88kns9npp4tRAACAf9Ks V9VpUV2d7gcdlO4HHZTZ48dnwh//WOfI5dgrr0zLtm2zwVFHrfTP3WaDDVK99tp5/aabUrXWWrW3 XVlr112bfDGh9f7lXzLm8svz4rnnpuO22yYVFem6zz6prKpKZVVVNv3BD9L9kENSvfbaK+OlAAAA fC6tssu8tt1442xx5pm1j2e/8krefuih9Dz++NqjmStTRYsW2f7KKzP64osz6sILs2ju3CTJN555 pvaKuiuq5wknZMH77+fNP/0pr998c5Kkc+/eqercOW033jibnHxyk9cPAADwedfQN1ruOnPmzKGf NKBdI6PyH6efnskPPJB+TzxRe6sVAAAAmt+sWbM+8fkJE96ot+2Pd9y11LGHHlz/bilbbrlV7yTD lreOVXzZ2o/ULFqUthtumG1+9jMxCgAA8AW1yk7Z/WcVLVo4rRUAAOALrsgRUgAAABCkAAAAFCFI AQAAKEKQAgAAUIQgBQAAoAhBCgAAQBGCFAAAgCIEKQAAAEUIUgAAAIoQpAAAABQhSAEAAChCkAIA AFCEIAUAAKAIQQoAAEARghQAAIAiBCkAAABFCFIAAACKEKQAAAAUIUgBAAAoQpACAABQhCAFAACg CEEKAABAEYIUAACAIgQpAAAARQhSAAAAihCkAAAAFCFIAQAAKEKQAgAAUIQgBQAAoAhBCgAAQBGC FAAAgCIEKQAAAEUIUgAAAIoQpAAAABQhSAEAAChCkAIAAFCEIAUAAKAIQQoAAEARghQAAIAiBCkA AABFCFIAAACKEKQAAAAUIUgBAAAoQpACAABQhCAFAACgCEEKAABAEYIUAACAIgQpAAAARQhSAAAA ihCkAAAAFCFIAQAAKEKQAgAAUIQgBQAAoAhBCgAAQBGCFAAAgCIEKQAAAEUIUgAAAIoQpAAAABQh SAEAAChCkAIAAFCEIAUAAKAIQQoAAEARghQAAIAiBCkAAABFCFIAAACKEKQAAAAUIUgBAAAoQpAC AABQhCAFAACgCEEKAABAEYIUAACAIgQpAAAARQhSAAAAihCkAAAAFCFIAQAAKEKQAgAAUIQgBQAA oAhBCgAAQBGCFAAAgCIEKQAAAEUIUgAAAIoQpAAAABQhSAEAAChCkAIAAFCEIAUAAKAIQQoAAEAR ghQAAIAiBCkAAABFCFIAAACKEKQAAAAUIUgBAAAoQpACAABQhCAFAACgCEEKAABAEYIUAACAIgQp AAAARQhSAAAAihCkAAAAFCFIAQAAKEKQAgAAUIQgBQAAoAhBCgAAQBGCFAAAgCIEKQAAAEUIUgAA AIoQpAAAABQhSAEAAChCkAIAAFCEIAUAAKAIQQoAAEARghQAAIAiBCkAAABFCFIAAACKEKQAAAAU IUgBAAAoQpACAABQhCAFAACgCEEKAABAEYIUAACAIgQpAAAARQhSAAAAihCkAAAAFCFIAQAAKEKQ AgAAUIQgBQAAoAhBCgAAQBGCFAAAgCIEKQAAAEUIUgAAAIoQpAAAABQhSAEAAChCkAIAAFCEIAUA AKAIQQoAAEARghQAAIAiBCkAAABFCFIAAACKEKQAAAAUIUgBAAAoQpACAABQhCAFAACgCEEKAABA EYIUAACAIgQpAAAARQhSAAAAihCkAAAAFCFIAQAAKEKQAgAAUIQgBQAAoAhBCgAAQBGCFAAAgCIE KQAAAEUIUgAAAIoQpAAAABQhSAEAAChCkAIAAFCEIAUAAKAIQQoAAEARghQAAIAiBCkAAABFCFIA AACKEKQAAAAUIUgBAAAoQpACAABQhCAFAACgCEEKAABAEYIUAACAIgQpAAAARQhSAAAAihCkAAAA FCFIAQAAKEKQAgAAUIQgBQAAoAhBCgAAQBGCFAAAgCIEKQAAAEUIUgAAAIoQpAAAABQhSAEAAChC kAIAAFCEIAUAAKAIQQoAAEARghQAAIAiBCkAAABFCFIAAACKEKQAAAAUIUgBAAAoQpACAABQhCAF AACgCEEKAABAEYIUAACAIgQpAAAARQhSAAAAihCkAAAAFCFIAQAAKEKQAgAAUIQgBQAAoAhBCgAA QBGCFAAAgCIEKQAAAEUIUgAAAIoQpAAAABQhSAEAAChCkAIAAFCEIAUAAKAIQQoAAEARghQAAIAi BCkAAABFCFIAAACKEKQAAAAUIUgBAAAoQpACAABQhCAFAACgCEEKAABAEYIUAACAIgQpAAAARQhS AAAAihCkAAAAFCFIAQAAKEKQAgAAUIQgBQAAoAhBCgAAQBGCFAAAgCIEKQAAAEUIUgAAAIoQpAAA ABQhSAEAAChCkAIAAFCEIAUAAKAIQQoAAEARghQAAIAiBCkAAABFCFIAAACKEKQAAAAUIUgBAAAo QpACAABQhCAFAACgCEEKAABAEYIUAACAIgQpAAAARQhSAAAAihCkAAAAFCFIAQAAKEKQAgAAUIQg BQAAoAhBCgAAQBGCFAAAgCIEKQAAAEUIUgAAAIoQpAAAABQhSAEAAChCkAIAAFCEIAUAAKAIQQoA AEARghQAAIAiBCkAAABFCFIAAACKEKQAAAAUIUgBAAAoQpACAABQhCAFAACgCEEKAABAEYIUAACA IgQpAAAARQhSAAAAihCkAAAAFCFIAQAAKEKQAgAAUIQgBQAAoAhBCgAAQBGCFAAAgCIEKQAAAEUI UgAAAIoQpAAAABQhSAEAAChCkAIAAFCEIAUAAKAIQQoAAEARghQAAIAiBCkAAABFCFIAAACKEKQA AAAUIUgBAAAoQpACAABQhCAFAACgCEEKAABAEYIUAACAIgQpAAAARQhSAAAAihCkAAAAFCFIAQAA KEKQAgAAUIQgBQAAoAhBCgAAQBGCFAAAgCIEKQAAAEUIUgAAAIoQpAAAABQhSAEAAChCkAIAAFCE IAUAAKAIQQoAAEARghQAAIAiBCkAAABFCFIAAACKEKQAAAAUIUgBAAAoQpACAABQhCAFAACgCEEK AABAEYIUAACAIgQpAAAARQhSAAAAihCkAAAAFCFIAQAAKEKQAgAAUIQgBQAAoAhBCgAAQBGCFAAA gCIEKQAAAEUIUgAAAIoQpAAAABQhSAEAAChCkAIAAFCEIAUAAKAIQQoAAEARghQAAIAiBCkAAABF CFIAAACKEKQAAAAUIUgBAAAoQpACAABQhCAFAACgCEEKAABAEYIUAACAIgQpAAAARQhSAAAAihCk AAAAFCFIAQAAKEKQAgAAUIQgBQAAoAhBCgAAQBGCFAAAgCIEKQAAAEUIUgAAAIoQpAAAABQhSAEA AChCkAIAAFCEIAUAAKAIQQoAAEARghQAAIAiBCkAAABFCFIAAACKEKQAAAAUIUgBAAAoQpACAABQ hCAFAACgCEEKAABAEYIUAACAIgQpAAAARQhSAAAAihCkAAAAFCFIAQAAKEKQAgAAUIQgBQAAoAhB CgAAQBGCFAAAgCIEKQAAAEUIUgAAAIoQpAAAABQhSAEAAChCkAIAAFCEIAUAAKAIQQoAAEARghQA AIAiBCkAAABFCFIAAACKEKQAAAAUIUgBAAAoQpACAABQhCAFAACgCEEKAABAEYIUAACAIgQpAAAA RQhSAAAAihCkAAAAFCFIAQAAKEKQAgAAUIQgBQAAoAhBCgAAQBGCFAAAgCIEKQAAAEUIUgAAAIoQ pAAAABQhSAEAAChCkAIAAFCEIAUAAKAIQQoAAEARghQAAIAiBCkAAABFCFIAAACKEKQAAAAUIUgB AAAoQpACAABQhCAFAACgCEEKAABAEYIUAACAIgQpAAAARQhSAAAAihCkAAAAFCFIAQAAKEKQAgAA UIQgBQAAoAhBCgAAQBGCFAAAgCIEKQAAAEUIUgAAAIoQpAAAABQhSAEAAChCkAIAAFCEIAUAAKAI QQoAAEARghQAAIAiBCkAAABFCFIAAACKEKQAAAAUIUgBAAAoQpACAABQhCAFAACgCEEKAABAEYIU AACAIgQpAAAARQhSAAAAihCkAAAAFCFIAQAAKEKQAgAAUIQgBQAAoAhBCgAAQBGCFAAAgCIEKQAA AEUIUgAAAIoQpAAAABQhSAEAAChCkAIAAFCEIAUAAKAIQQoAAEARghQAAIAiBCkAAABFCFIAAACK EKQAAAAUIUgBAAAoQpACAABQhCAFAACgCEEKAABAEYIUAACAIgQpAAAARQhSAAAAihCkAAAAFCFI AQAAKEKQAgAAUIQgBQAAoAhBCgAAQBGCFAAAgCIEKQAAAEUIUgAAAIoQpAAAABQhSAEAAChCkAIA AFCEIAUAAKAIQQoAAEARghQAAIDlqq6urrdttaVsawxBCgAAwHJtsH6P+ts2WL9Jc7Zs0kcDAADw hbDlFpunIsnrb0xI8lGg9tp8sybNKUgBAABYrsrKymy1Za9stWWvlTfnSpsJAAAAGkGQAgAAUIQg BQAAoAhBCgAAQBGCFAAAgCIEKQAAAEUIUgAAAIoQpAAAABQhSAEAAChCkAIAAFCEIAUAAKAIQQoA AEARghQAAIAiBCkAAABFCFIAAACKEKQAAAAUIUgBAAAoQpACAABQhCAFAACgCEEKAABAEYIUAACA IgQpAAAARQhSAAAAihCkAAAAFCFIAQAAKEKQAgAAUIQgBQAAoAhBCgAAQBGCFAAAgCIEKQAAAEUI UgAAAIoQpAAAABQhSAEAAChCkAIAAFCEIAUAAKAIQQoAAEARghQAAIAiBCkAAABFCFIAAACKEKQA AAAUIUgBAAAoQpACAABQhCAFAACgCEEKAABAEYIUAACAIgQpAAAARQhSAAAAihCkAAAAFCFIAQAA KEKQAgAAUIQgBQAAoAhBCgAAQBGCFAAAgCIEKQAAAEUIUgAAAIoQpAAAABQhSAEAAChCkAIAAFCE IAUAAKAIQQoAAEARghQAAIAiBCkAAABFCFIAAACKEKQAAAAUIUgBAAAoQpACAABQhCAFAACgCEEK AABAEYIUAACAIgQpAAAARQhSAAAAihCkAAAAFCFIAQAAKEKQAgAAUIQgBQAAoAhBCgAAQBGCFAAA gCIEKQAAAEUIUgAAAIoQpAAAABQhSAEAAChCkAIAAFCEIAUAAKAIQQoAAEARghQAAIAiBCkAAABF CFIAAACKEKQAAAAUIUgBAAAoQpACAABQhCAFAACgCEEKAABAEYIUAACAIgQpAAAARQhSAAAAihCk AAAAFCFIAQAAKEKQAgAAUIQgBQAAoAhBCgAAQBEtGzqwXbt2mTx58jKfnz179kpZEAAAAGWtuWan Ff7Yddddt8FjGxykkydPzpgxY1ZoQQAAAHwxXHrppQ0e65RdAAAAimjwEVJoqptuuinXXXddkmTI kCFp27btKv38Y8aMyQknnFBnW2VlZR5++OFVuo7Ps8suuyxDhgypffzNb34zZ5xxRpPHsmrNnz8/ Rx11VPbcc88ce+yxpZezyp1zzjmZPXt2fvGLX5ReCgB87gnST6l//OMfef7555Mk/fv3T+vWra2h iWuorKxMdXV1kmTBggVZtGjRSlnjF8mxxx6b8ePHZ4899sg555xT7/lDDjkku+22W5Lk9NNP/8S5 GjO2Md55550ceuih6dOnT84///xPHPvKK69k4MCBS31u4MCB6d+//0pb12fJbbfdllmzZuWwww6r 99zxxx+fV155pd4vciZMmJCjjz46e+65Z84666x6v3BYln/7t3/LhhtumNNOOy1J8tOf/jQ777xz 7fM33nhjfv/73yf5v19kNebveEUMGDAgxx57bJ588sl89atfXenzAwD/R5B+Sj377LP5wx/+kOSj H9xLxODnbQ2bbLJJHnjggST1j86xfFOmTMn48eOz/vrr56mnnsrChQvTsmXdf0J69OiRHj16NGi+ xoxtbjvttFN69epVZ9s222xTaDVlzZs3L4MHD87ee++ddu3arfA8vXv3TufOnWsfv/DCC3nmmWfS r1+/rL/++rXbt9hii3z44YdJkqqqqjzyyCN1gvSRRx5JVVVV5s2bt8JraayNNtooX/7yl3PDDTcI UgBoZoIUaJChQ4emsrIyxx13XM4666w899xz2X777Usva6XYfvvtc8ghh5RexqfCww8/nNmzZ2ev vfZq0jw77bRTdtppp9rHt9xyS5555pn07du3XuQ999xzSZJddtklQ4cOzfz589O6deu8+uqrmThx Yr761a/miSeeaNJ6kmTmzJl544038qUvfSlVVVWfOHavvfbKf//3f+ell17K5ptv3uTPDQAsnSD9 FJk/f36+8Y1v1Nv+rW99q/a/Tz755Do/OE+bNi033HBDRowYkRkzZmSNNdbIDjvskGOOOSZrr712 nXleeeWV3HTTTRk9enRmzJiRdu3apXv37tl7772zzz77rPAaVsSECRNy9dVXZ9y4cenWrVtOPfXU bL311o1ew9NPP50f/vCH6devX2bMmJGRI0fmwAMPzHrrrZff/OY3adOmTU477bQ6PxizYp588sls uumm2XnnndOuXbsMHTr0cxOkSTJ9+vRUVFRkzTXXLL2Uoh577LF06NAhm2222Sr/3Nttt12ee+65 jBgxIn369MnDDz+cbbbZZqX9nfzjH//IeeedlxtuuGG5R+eX/Jvx2GOPCVIAaEafyqvsnnnmmdl9 993zu9/9rvRSVqmKiopUV1enurq6zqmQS7ZVV1enVatWtdunTp2aE044Iffdd1+mTZuWhQsXZvr0 6XnwwQdzwgknZMqUKbVjJ0+enH/913/NE088kXfffTcdO3bMBx98kBdeeKHOkYfGrmFFXXDBBRk5 cmTmzZuXV199Neeee27tKXkrsobHHnssL774Yu3phr/85S8zf/78TJkyJZdffnmT1/tFN3v27Lzw wgvZcccdU1lZme222y7Dhg0rvayV5pprrskhhxySgw8+OIccckjuvPPO0ksqYvHixRk1alSDAuzN N9+s82fq1KlN/vyVlZXp06dPHn300SQfna67xx57NHneFbHmmmtm7bXXrj16CwA0D0dIP0VatWpV +x7H3/3ud7XvnbztttuWekXaq666KtOnT091dXUuuOCCfPnLX86YMWNy5plnZsaMGRk0aFDOPvvs JB+dbjlv3rxUVFTkD3/4Q9Zdd90sXrw4Y8eOzdixY1d4DStqk002ySWXXJLbbrst9957b95///28 +OKL2X6PIV42AAAYdElEQVT77VdoDVVVVbnrrrtyxhln5IUXXsgee+yR4447LoccckgmT56cOXPm ZPXVV19p6/+iGTFiRBYtWpQdd9wxSbLjjjvm8ccfz7hx47LJJpsUXt2KWxLXO+64Yzp27Ji33347 99xzT6644orMnj07Rx11VOklrlJTpkzJnDlz0q1bt08ct3jx4hx55JHNsoY99tgjP/zhD/PMM8/k nXfeSZ8+fTJ+/Phm+VzL061bt4wcObLI5waAL4pPZZBuu+22adu2bXr27Fl6KZ9a8+fPz9ChQ5Mk ++yzT+2pk7169Uq/fv1y9913Z/jw4ampqUlFRUXatGmTJKmpqckf//jH7Lffftloo42y2WabFTk1 75hjjsl6662X/fbbL/fee2+Sj66OuqI6d+6c1q1bp2vXrnnhhRfSrVu3dOrUKa1bt878+fMzc+ZM QdoEQ4cOTbt27Wr3lR122CHJR6fxfpaDdKONNqp34+b9998/AwYMyM0335wDDzywSRf2+ax5//33 kyTt27f/xHGVlZU599xz62ybPn16rrjiiiavYauttkrbtm1z6aWXZvvtt1/uWj7JggUL6hy5fffd d5N8dHZJixYtarevu+66qaysf8JQ+/btM3/+fL/QAoBmtEqC9J133qlzi43q6up06NBhmeMPPfTQ lT5vc40tZcqUKVm4cGGS5K677spdd91Vb8ycOXMye/bstGvXLn369MlNN92UyZMn5+67787dd9+d Dh065Ktf/WqOOeaYdOrUaZWuf8nVN//5h7wFCxas8HwVFRVJUvtD5ccfN2XuL7qFCxfm6aefzlZb bZXp06fXbu/atWuGDh2aAQMGFFzdytehQ4fsvffeGTx4cEaOHJlddtml9JJWuZqamuWOWXLLniUm TJiwUj53ZWVl+vbtmzvuuCPHHHNMk+YaN25cTj755HrbP36/2+XdF3nJvycAwMq3SoL0lFNOqfN+ xp133jk//elPV+m8zTX202D11Vdf5hUjl4R1mzZtMmjQoAwZMiTDhw/Pyy+/nBkzZuS+++7L3/72 t9xwww3LverkyrSqf8D7+A/YfsBsuGeffTZz5szJU089tdRfFr399ttZZ511Cqys+Sz5hcmsWbMK r2TVWvKLt9Kv+9BDD82mm27a5FuudO/ePeedd17t49GjR+ePf/xjTjnllDq/hFtyf+KPmzlzZlq3 bp3VVlutSesAAJZtlQTp6aefnrlz59Y+XllXTGzMvM01trks7fSxf9a5c+e0aNEiixYtyn777ZcT TzxxuXO2adMmhx9+eA4//PDMmzcv9957b6666qpMmTIlzz33XL0r0S5vDf9s8eLFGTduXJKP3oe6 0UYbNfhjP0lj1tAYS+5nunjx4sydO3eZP5Dyf7d7Oe+88+pcZOrNN9/MlVdemWHDhuWggw6q93Et W7asc6bBJ2nM2FXhzTffTJJ07Nix8EpWrS5dumT11VfPxIkTi6+jqbedSZJ27drVO5KbfHSbn4bc A3fSpEnZYIMNmrwOAGDZVkmQNvbWEIMHD87YsWPTp0+f9O3bd6XM21xjm8uS93wmH91Qftddd63z fHV1dXbaaacMGzYs99xzTzbZZJNsv/32admyZd56660MHz48M2fOzCmnnFI7x8iRI/ONb3wjnTp1 SlVV1XLfO7q8NfyzefPm5YQTTkiSrL322hk8eHCjX3NT19AYXbt2rf3v+++/PwcccECzxe9nWU1N TYYOHZqePXvma1/7Wp3nFi5cmGuvvTZPPvnkUoN0nXXWyRtvvNGgz9OYsSvTa6+9lg022KDOEfNJ kyblwQcfTLt27bLVVlut8jWVVFlZmS233DIvvfRS6aUUN3369EydOvUT/x8EADTdp/KiRs8//3xG jBiRbt26fWF/GNhmm21q//uss85Ky5YtU1FRkRNPPDEHHnhgko/uxbnknqIXXXRRvTl69+5d+9/v vfdeBg0alEGDBqVNmzZZbbXVMm3atCQfHQHeYostVmgNza251tC7d+9cffXVWbBgQa644opcddVV qayszD777JPTTjttZSz9c2HMmDGZPn36Uo9WtWzZMltvvXWeffbZzJo1q97Ff/bcc89cf/31+eUv f5ktttgiFRUV2W233WqPTq/o2IaaMGFCbrrppqU+d+SRR6aioiKXX355pk2blq233jqdOnXK1KlT 8/jjj2f+/Pn5z//8zy/kkfO+ffvm6aefzksvvfSpv/9mQ/6OV9Tw4cOTJLvvvvsKzwEALN+nMkhJ Nt100/z7v/977r777kyaNCnz589PkjqnNXbt2jXXXnttbr755jz11FOZOnVqWrVqlTXXXDO9evXK 3nvvXTu2Z8+e2W+//TJy5MhMmzYt7777btZYY4306tUr3//+95d6JdGGrKG5NdcaunTpkgsuuCC/ +93v8tprr2XhwoVZtGhR7YWi+MiSKzlvu+22S31+u+22y9/+9reMGDGiXrT2798/s2bNyqOPPpp7 7rknSfKVr3xlqafAN2ZsQ73++uu57rrrlvpc//7906JFi/Tr1y9//vOfM3z48MyePTtVVVXZaqut 0r9//2W+5s+7PfbYI1dffXX+8pe/fOqDtCF/x/9st912q73H6fL8z//8TzbZZJMiVyEHgC+Shv76 eNe33npr6JgxY5p1MQCUd/PNN+eWW27J4MGDv1C3vVnilVdeyXHHHZef/OQnTb6wEgB8Ed133325 9NJLeycZtryx3jQHQB3f/va3065du5X2XvDPmuuvvz7bbLONGAWAVcApuwDU0bp16y9sjCbJhRde WHoJAPCF4QgpAAAARTT4PaQ1NTVDTz/99GZdDAAAAJ9tP//5z1NRUdGg95A2OEhnzpw59JMGfBEv fAEAAPBZNGvWrE98fsKEpt0jfsstt3JRIwAAAD69BCkAAABFNGuQzp07NxtssEHOOuus5vw0q8SD Dz6YioqK3H777aWXwkrwv+e15+WXXy69lBV23333paKiInfffXfppXzmfdL+cOCBB2b33XcvsCoA gE+XxYsX5/kXR2bInx7IkD89kBdGjsrixYubNGezBulll12W9957L0u7GNLOO++cioqKHHLIIXW2 v/3226moqMixxx7bnEuDlWLSpEk577zz8uyzz5ZeCs3k/PPPz+OPPy78AYAvvJGjX8qYsePy4dy5 +XDu3Lw8ZmxGjn6pSXM2W5B++OGHueSSS3L00UenY8eOyxx3zz335M0332yuZUCzmjRpUs4//3xB +jm29dZbp2/fvjn//PNLLwUAoKjX35hQb9sbS9nWGM0WpLfccktmzJiR7373u8scs/rqq6dNmza5 5pprmmsZAE125JFH5rnnnstTTz1VeikAAMXMnTu33rYPl7KtMZotSG+77bZ07tw5O+ywwzLHtGrV KkcffXQGDRqUhQsXfuJ806ZNy/HHH5+uXbumdevW2WijjXL22Wdn/vz5TV7rq6++mu9973tZb731 UlVVlQ033DAnnXRS3nrrrXpjFy5cmHPOOSddu3bNGmuskf322y+TJ0+uM+bDDz/Mj3/84+yyyy5Z a621Ul1dnU033TQ//vGP6/0lLnlv6vXXX5+TTz45a6+99jLnTZLx48dn3333TZs2bdK5c+f8x3/8 R372s58t9f1v8+fPz0UXXZTNNtssVVVV6dKlSwYMGJApU6bUm/e9997LD37wg2y44Yaprq5Oly5d sueee+Yvf/nLinxJV+i1NWa9jRk7bty47Lvvvmnbtm3WWmutnHbaaU3ebzbbbLNUVFRkl112SZIM HDgwFRUVtX+mTZtWZ3xz7r/vv/9+jj766Kyxxhrp0KFDvvOd72Tq1Kn1xjXma9YYDd13Gvp9sWDB gnTq1Cl77bVXvc9VU1OTHj16ZNddd13h17Yi+8M3v/nNJB/9uwYAwMrTsjkmXbRoUYYNG5bddttt uWNPPPHE/OpXv8pdd92Vb3/720sdM2/evPTr1y8vvvhijj/++Gy11VZ55JFHctFFF+Xll19u0oWG Ro4cma997WuZP39+Bg4cmM033zwTJkzIPffck2HDhtV7j+uFF16YtdZaK6effnrGjBmTQYMG5dBD D81f//rX2jHTp0/Pf/3Xf+XAAw/MAQcckA4dOmTEiBG58MILM2rUqKWu94c//GG++93v5t57782Y MWNy0kkn1Zt3xowZ6du3b6ZNm5ZTTz016667bq677rq888479eZbtGhRvvWtb+Xhhx/OUUcdldNO Oy0TJ07Mr3/96wwfPjx///vf06ZNm9rx3/nOd/Lwww/nBz/4QbbYYotMnTo1Tz75ZB555JF8/etf X+Gvb0NfW2PW25ix06dPT58+fTJ79uycdtppWXPNNXPttdcu9WvWGDfeeGPmzJmT0aNH5+STT87p p5+efffdt/b5NdZYo/a/m3P/TZIzzjgjm266aS688MKMHz8+v/71rzNq1Kj87W9/S6tWrZI0fn9o jIbuOw39vmjVqlUOPvjgXHfddZk6dWq6dOlSO8ewYcMyceLEnHHGGbXbVsX+sM4662T99dfPY489 tkJfIwAAmmbXmTNn1nzSn3/26quv1iSp+cEPflCzLDvttFPNGmusUVNTU1Oz++671/Tt27empqam ZvLkyTVJar7//e/Xjr322mtrktRccMEFdeY4/PDDa5LUDBs2bJmfZ3l69+5d07Jly5pnn322zvYF CxbUTJkypfbxAw88UJOkZocddqhZuHBh7fYjjjiiJknN5MmTa7d9+OGHdT52iRNOOKEmSc348ePr zbvffvvVGXvyySfXm/f888+vSVJzyy231G577733ajp06FCTpOall16q3X7NNdfUJKm55ppr6sz7 xBNP1CSp+eUvf1m7bc6cOTUtWrSo+d73vldvzQsWLKi3raEa89oas97GjD377LNrktTceeedtdum T59e0759+3pfsxUxfPjwmiQ1gwYNWuaY5tp/hwwZUpOkZvPNN6+ZN29e7faLL764JknNDTfcULut MV+zxmjMvtOY74tHH320JknNVVddVWfsKaecUtOiRYuat99+e4VeW1P2h379+tVUV1cv83kAgM+S 5fXdyJEv1vtz7vk/WeqfpY1NUveUtmVollN2lxxt6NSpU4PGn3TSSXnssccyevTopT7/0EMPJUm9 K+8OHDiwzvON9eabb2bo0KE5+OCDs+2229Z5rmXLlnWOzCxx+OGHp0WLFrWPd9pppyTJhAn/92be JactLjF//vzMnTs3O++8c5KPThn8uL333rvO480337zevA8++GDat29f50hyhw4dcsABB9Sbb/Dg wWnfvn369++fuXPn1v7ZYYcd0qlTpzz66KO1Y1u3bp3WrVvn2WefrXeKY8uWTT+I3pDX1pj1Nmbs Qw89lA4dOuRf/uVfaretueaaS/2aNZfm2n+X+M53vpPWrVvXPj7qqKPqzduYr1ljNGbfacz3RZ8+ fdKtW7fceuuttdsWL16c22+/PXvssUfWXnvtFXptTdkfOnXqlLlz52bWrFnLHQsAQMM0S5BWVFQk +ej9Xg1xwAEHpGvXrrn66quX+vzEiRNTVVWVddZZp872DTfcMEndsGmMV155JUmy5ZZbNvhjunXr VufxklMBP/4etFtuuSW77rprVl999VRVVWW11VbLMccck2Tpbwb+ePxWVVXVm/eNN95I9+7d6/2g v/7669ebb+zYsZk5c2batm2b1VZbrc6f6dOn1zlFsUWLFrn00kszatSodOvWLV/5yldy/PHH5/77 71/el6NBGvLaGrPexoydOHFiunXrlsrKurv6BhtssFJeW0M01/67xMf//rt27ZpWrVpl4sSJtdsa 8zVrjMbuOw39vqisrMxhhx2Wv/71r7Xv5X788cczefLk9O/fv86cq2p/WPLv2ZJ/3wAAaLpmeQ9p 586dkyTvvvtuwxbRsmUGDhyYX/ziFzn11FOXOuaTfghclT8g/vPR0WW5/vrrM2DAgPTr1y/XXXdd 1ltvvbRs2TKPPPJIzjrrrKWGelNew7LCv2fPnrnpppuW+ly7du3qPD7xxBOz//77509/+lP++te/ 5vbbb88111yTM888MxdffPEKry1p+GtrzHobM/bTEBDNuf8u6+M/vr0xX7PGaOi+09jviyOOOCKX XXZZbrvttpx66qm59dZbU1VVlYMOOqjeGlbF/vDuu++muro6bdu2XaGPBwCgvmYJ0u7du6ddu3YZ O3Zsgz9m4MCBueiii/KHP/xhqfMNGzYsb7/9dp2jTK+99lrt8yuiZ8+eST66sNHK9Pvf/z5du3bN gw8+WOdo5uOPP96keddff/2MGjUqixYtqhPGSzvCtskmm+SZZ57JV77yldoL2yxPt27dctxxx+W4 447L7Nmz87WvfS2XX355LrroomaPusastzFje/TokZdffjmLFy+uc1Ts9ddfXxnLbtDXpbn23yU+ /lreeuutLFiwID169KjdtiL7Q2M0ZN9p7PfF9ttvny996Uu59dZbc/LJJ+eOO+7Ivvvum/bt29cZ t6r2h7Fjx6ZXr17LHQcAQMM1yym7LVq0SO/evRt1z75u3bpl//33z6BBg+o9t+T2D9dee22d7UvG Lu32EA39nL17984dd9yR559/vs5zixcvXuHTGCsqKlJZWVknVj744IP89re/XaH5lth7770zc+bM 3HnnnbXbZs2alXvvvbfe2MMPPzyzZs3KJZdcUu+5efPm1bmlzfz58/PBBx/UGdO2bdt07949Cxcu zOLFi5u07oZozHobM/brX/96ZsyYkXvuuad227vvvpu77757pax7ydV0l3aLoCWaa/9d4uabb65z +vONN96YJHWucNuYr1ljNGbfWZHviyOOOCIjRozI73//+0ybNq3e6brJqtkfJk+enIkTJ6Zv376f OA4AgMZpliOkSXLooYfmwQcfzFNPPVV74Z/lOemkk+rE1hJHHnlkfvWrX+Xcc8/Nm2++ma233jqP PPJIbr/99hx00EG194JcEVdffXX69OmTXXfdNccdd1w233zzTJo0Kffee2/OPvvserd9aYiDDjoo p556ar71rW/l4IMPzvTp03Pttdc26bTIJDnllFNyzTXX5JhjjsmoUaOy7rrr1s778dOjv//97+fO O+/MWWedlaeeeir/v707BklvDeM4/hRUWqRlQeFSQdFg96CONQg6OUZwJQpyqSWowCBoMkishqZa cmlwunotqKG5uHduEsIC7x9qcQicoqjnDpEUeW+ezH/94/vZPDzqc15ehcM57/vz+/1SV1cn2WxW 9vf3ZXV1tbTJztXVlRiGIWNjY+J2u8Vms8nx8bEcHBxIOByu6DHlapnp10zt3Nyc7OzslOJAHA6H JBIJsVgsUiwWq+57YGBAnE6nbG9vS1dXV2k9ZyAQKN2tq+X8FXnMOA0EAhIKheT8/Fy2trbE4/FI KBQq1ZgZMzPMzJ33/C7Gx8dlZWVFIpGI2Gy2F9E67zm3986Hw8NDEXn8XwMAAMDPZyr2RfUxDqK9 vV1nZ2fLbjP8PPblucHBwVexL6qqhUJBp6entbu7WxsaGrS3t1eXl5f15uam6i2PLy4uNBwOq9Pp 1MbGRu3p6dGZmRm9vLws1TxFmKRSqRfvTSQSKiJ6cnJSOvbw8KDr6+va39+vTU1N2tfXp7FYTNPp tIqI7u3tvetzVVVzuZwGg0G1Wq3a2dmpi4uLGovFVEQ0l8u9qL29vdWNjQ01DEMtFova7XZ1u926 tLSk+Xy+VFcsFnV+fl4Nw1CbzaYtLS3qcrl0bW2tqvE1e26V9mu29uzsTIPBoDY3N2tHR4cuLCyU xqza2BfVx+iX4eFhtVqtKiIqIlooFF7U1GL+PsW+7O7u6uTkpLa2tqrdbteJiYmy8SpmxqxSZuaO md/Fc16vV0VEp6am/rOPWs8Hn8+nHo/H3OAAAAB8YV8l9qXShYHDxWLxr/8rKHeXIx6PSzwel3w+ Lw6Ho8KvglmRSEQ2Nzfl+vpa2traPrsd4Fs5PT0Vr9crmUzmp8YFAQAA1NJbUXY/fvzz6tgff+6V rf19bPTVsaGh30ZE5O+3+qjJGtInT4/ElVvbhfe5u7t78VpV5ejoSIaGhrgYBWogGo2Kz+fjYhQA AKAGaraGVETEYrF82G6meOT3+8XlcsnIyIjU19dLMpmUbDYrqVTqs1sDvqWP2gALAAAAr9X0ghQf LxAISDqdlmQyKff392IYhmQyGRkdfX2bHAAAAAC+Mi5IfzHRaFSi0ehntwEAAAAAVat4U6OadgEA AAAA+G7e3NQIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA KOtfsLF168rlxUgAAAAASUVORK5CYII= --=-=-=-- From debbugs-submit-bounces@debbugs.gnu.org Sun Jun 21 12:55:27 2020 Received: (at 41897) by debbugs.gnu.org; 21 Jun 2020 16:55:27 +0000 Received: from localhost ([127.0.0.1]:60851 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1jn3Fe-0001BL-Ut for submit@debbugs.gnu.org; Sun, 21 Jun 2020 12:55:27 -0400 Received: from colin.muc.de ([193.149.48.1]:43890 helo=mail.muc.de) by debbugs.gnu.org with smtp (Exim 4.84_2) (envelope-from ) id 1jn3FY-0001Az-ET for 41897@debbugs.gnu.org; Sun, 21 Jun 2020 12:55:25 -0400 Received: (qmail 23357 invoked by uid 3782); 21 Jun 2020 16:55:13 -0000 Received: from acm.muc.de (p4fe15582.dip0.t-ipconnect.de [79.225.85.130]) by localhost.muc.de (tmda-ofmipd) with ESMTP; Sun, 21 Jun 2020 18:55:12 +0200 Received: (qmail 10779 invoked by uid 1000); 21 Jun 2020 16:55:13 -0000 Date: Sun, 21 Jun 2020 16:55:13 +0000 To: Simen =?iso-8859-1?Q?Heggest=F8yl?= Subject: Re: bug#41897: 28.0.50; JavaScript comment filling with mhtml-mode Message-ID: <20200621165513.GA10667@ACM> References: <20200620171827.7855.qmail@mail.muc.de> <87d05ta8z9.fsf@simenheg@gmail.com> MIME-Version: 1.0 Content-Type: text/plain; charset=iso-8859-1 Content-Disposition: inline Content-Transfer-Encoding: 8bit In-Reply-To: <87d05ta8z9.fsf@simenheg@gmail.com> X-Delivery-Agent: TMDA/1.1.12 (Macallan) From: Alan Mackenzie X-Primary-Address: acm@muc.de X-Spam-Score: 0.0 (/) X-Debbugs-Envelope-To: 41897 Cc: 41897@debbugs.gnu.org X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: debbugs-submit-bounces@debbugs.gnu.org Sender: "Debbugs-submit" X-Spam-Score: -1.0 (-) Hello again, Simen. On Sat, Jun 20, 2020 at 20:27:22 +0200, Simen Heggestøyl wrote: > Alan Mackenzie writes: > > The patch below fixes both these errors, and seems to allow your test > > case to work. > Yes, this seems to fix it in both emacs-27 and master, thanks. > However in emacs-27 with the patch applied I now get a strange > side-effect: After filling the comment, mhtml-mode seems to lose track > of where the JavaScript portion of the buffer is. Please see the > attached image. The position where point is should still be recognized > as HTML+JS, but it's recognized as plain HTML+ instead after > filling. This doesn't happen on master. Yes. mhtml-mode keeps track of the position of the JavaScript bit by applying text-properties. In certain circumstances, when point is at (point-min), it fails to re-apply those properties after removing them. This was happening in the filling, which uses narrowing. I think I've got this fixed, now. (See patch below.) > > You haven't said what version of Emacs you're running. > I put the version number in the bug subject but forgot to mention it in > the description, sorry about that. No, my apologies: I completely missed it in the subject line. I'm happy that you're working in master, and not Emacs 26. :-) Anyhow, I've made significant progress on the problem. As well as the problem above, I've repaired a few defects with auto-fill-mode. It's more or less working. But M-q isn't completely working. If a buffer contains the long line of your test case, followed by another line, M-q doesn't fill them together, leaving the short line untouched. I've had problems with auto-fill-function, and the current state in the patch involves mhtml-mode assuming auto-fill-function is enabled. This obviously needs fixing, but that's the way it is for now. Sorry. There's still a bug with M-q where it sometimes throws an error about a search being "on the wrong side of point". I haven't had time to investigate this, yet. So here's the current patch for the problem. Please install it on master after removing yesterday's patch. From the .../emacs/lisp directory, it should work with $ patch -p2 < this-email. (Or, maybe there's a git command to do it more directly.) diff --git a/lisp/progmodes/js.el b/lisp/progmodes/js.el index 04b449ecd2..f5b6a4c260 100644 --- a/lisp/progmodes/js.el +++ b/lisp/progmodes/js.el @@ -4570,7 +4570,7 @@ js-mode ;; Comments (setq-local comment-start "// ") - (setq-local comment-start-skip "\\(//+\\|/\\*+\\)\\s *") + (setq-local comment-start-skip "\\(?://+\\|/\\*+\\)\\s *") (setq-local comment-end "") (setq-local fill-paragraph-function #'js-fill-paragraph) (setq-local normal-auto-fill-function #'js-do-auto-fill) diff --git a/lisp/textmodes/mhtml-mode.el b/lisp/textmodes/mhtml-mode.el index 1ae07c0a30..c5970cbcd1 100644 --- a/lisp/textmodes/mhtml-mode.el +++ b/lisp/textmodes/mhtml-mode.el @@ -73,15 +73,18 @@ mhtml-tag-relative-indent (defconst mhtml--crucial-variable-prefix (regexp-opt '("comment-" "uncomment-" "electric-indent-" - "smie-" "forward-sexp-function" "completion-" "major-mode")) + "smie-" "forward-sexp-function" "completion-" "major-mode" + "adaptive-fill-" "fill-" "auto-fill-function")) "Regexp matching the prefix of \"crucial\" buffer-locals we want to capture.") (defconst mhtml--variable-prefix (regexp-opt '("font-lock-" "indent-line-function")) "Regexp matching the prefix of buffer-locals we want to capture.") -(defun mhtml--construct-submode (mode &rest args) - "A wrapper for make-mhtml--submode that computes the buffer-local variables." +(defun mhtml--construct-submode (mode crucial-localized localized &rest args) + "A wrapper for make-mhtml--submode that computes the buffer-local variables. +CRUCIAL-LOCALIZED and LOCALIZED are lists of symbols which must +be considered crucial-local and local variables respectively." (let ((captured-locals nil) (crucial-captured-locals nil) (submode (apply #'make-mhtml--submode args))) @@ -94,6 +97,16 @@ mhtml--construct-submode (unless (variable-binding-locus 'font-lock-fontify-region-function) (setq-local font-lock-fontify-region-function #'font-lock-default-fontify-region)) + ;; Get the values from global variables which might become buffer local. + (dolist (iter crucial-localized) + (let ((sym (if (symbolp iter) iter (car iter))) + (val (symbol-value (if (symbolp iter) iter (cdr iter))))) + (push (cons sym val) crucial-captured-locals))) + (dolist (iter localized) + (let ((sym (if (symbolp iter) iter (car iter))) + (val (symbol-value (if (symbolp iter) iter (cdr iter))))) + (push (cons sym val) captured-locals))) + (dolist (iter (buffer-local-variables)) (when (string-match mhtml--crucial-variable-prefix (symbol-name (car iter))) @@ -119,6 +132,8 @@ mhtml--mark-crucial-buffer-locals (defconst mhtml--css-submode (mhtml--construct-submode 'css-mode + '((auto-fill-function . normal-auto-fill-function)) + nil :name "CSS" :end-tag "" :syntax-table css-mode-syntax-table @@ -127,6 +142,8 @@ mhtml--css-submode (defconst mhtml--js-submode (mhtml--construct-submode 'js-mode + '((auto-fill-function . normal-auto-fill-function)) + nil :name "JS" :end-tag "" :syntax-table js-mode-syntax-table @@ -202,12 +219,16 @@ mhtml--stashed-crucial-variables (defun mhtml--stash-crucial-variables () (setq mhtml--stashed-crucial-variables (mapcar (lambda (sym) - (cons sym (buffer-local-value sym (current-buffer)))) + (if (boundp sym) + (cons sym (buffer-local-value sym (current-buffer))) + sym)) mhtml--crucial-variables))) (defun mhtml--map-in-crucial-variables (alist) (dolist (item alist) - (set (car item) (cdr item)))) + (if (symbolp item) + (makunbound item) + (set (car item) (cdr item))))) (defun mhtml--pre-command () (let ((submode (get-text-property (point) 'mhtml-submode))) @@ -255,17 +276,14 @@ mhtml--syntax-propertize sgml-syntax-propertize-rules)) (defun mhtml-syntax-propertize (start end) - ;; First remove our special settings from the affected text. They - ;; will be re-applied as needed. - (remove-list-of-text-properties start end - '(syntax-table local-map mhtml-submode)) - (goto-char start) - ;; Be sure to look back one character, because START won't yet have - ;; been propertized. - (unless (bobp) - (let ((submode (get-text-property (1- (point)) 'mhtml-submode))) - (if submode - (mhtml--syntax-propertize-submode submode end)))) + (let ((submode (get-text-property start 'mhtml-submode))) + ;; First remove our special settings from the affected text. They + ;; will be re-applied as needed. + (remove-list-of-text-properties start end + '(syntax-table local-map mhtml-submode)) + (goto-char start) + (if submode + (mhtml--syntax-propertize-submode submode end))) (sgml-syntax-propertize (point) end mhtml--syntax-propertize)) (defun mhtml-indent-line () > -- Simen -- Alan Mackenzie (Nuremberg, Germany). From debbugs-submit-bounces@debbugs.gnu.org Mon Jun 22 15:18:02 2020 Received: (at 41897) by debbugs.gnu.org; 22 Jun 2020 19:18:02 +0000 Received: from localhost ([127.0.0.1]:34563 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1jnRxB-0007zP-JS for submit@debbugs.gnu.org; Mon, 22 Jun 2020 15:18:02 -0400 Received: from colin.muc.de ([193.149.48.1]:63478 helo=mail.muc.de) by debbugs.gnu.org with smtp (Exim 4.84_2) (envelope-from ) id 1jnRx8-0007zB-Vw for 41897@debbugs.gnu.org; Mon, 22 Jun 2020 15:18:00 -0400 Received: (qmail 72029 invoked by uid 3782); 22 Jun 2020 19:17:51 -0000 Received: from acm.muc.de (p4fe15b7f.dip0.t-ipconnect.de [79.225.91.127]) by localhost.muc.de (tmda-ofmipd) with ESMTP; Mon, 22 Jun 2020 21:17:50 +0200 Received: (qmail 11548 invoked by uid 1000); 22 Jun 2020 19:17:50 -0000 Date: Mon, 22 Jun 2020 19:17:50 +0000 To: Simen =?iso-8859-1?Q?Heggest=F8yl?= Subject: Re: bug#41897: 28.0.50; JavaScript comment filling with mhtml-mode Message-ID: <20200622191750.GA11506@ACM> References: <20200620171827.7855.qmail@mail.muc.de> <87d05ta8z9.fsf@simenheg@gmail.com> MIME-Version: 1.0 Content-Type: text/plain; charset=iso-8859-1 Content-Disposition: inline Content-Transfer-Encoding: 8bit In-Reply-To: <87d05ta8z9.fsf@simenheg@gmail.com> X-Delivery-Agent: TMDA/1.1.12 (Macallan) From: Alan Mackenzie X-Primary-Address: acm@muc.de X-Spam-Score: 0.0 (/) X-Debbugs-Envelope-To: 41897 Cc: acm@muc.de, 41897@debbugs.gnu.org X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: debbugs-submit-bounces@debbugs.gnu.org Sender: "Debbugs-submit" X-Spam-Score: -1.0 (-) Hello, Simen. We're gradually converging on working code. Since yesterday, the improvements are: (i) (slightly) better handling of auto-fill-mode, which is no longer automatically enabled; (ii) An enhancement to CC Mode, used by mhtml-mode and js-mode, which invalidates a CC Mode cache used by the filling code. This gets rid of a few strange looking bugs; (iii) The inclusion of "paragraph-" in the "crucial variables" thing, so that paragraph-start and paragraph-separate from js-mode get into mhtml-mode. On Sat, Jun 20, 2020 at 20:27:22 +0200, Simen Heggestøyl wrote: > Hi Alan, thanks for working on this. > Alan Mackenzie writes: > > The patch below fixes both these errors, and seems to allow your test > > case to work. > Yes, this seems to fix it in both emacs-27 and master, thanks. > However in emacs-27 with the patch applied I now get a strange > side-effect: After filling the comment, mhtml-mode seems to lose track > of where the JavaScript portion of the buffer is. Please see the > attached image. The position where point is should still be recognized > as HTML+JS, but it's recognized as plain HTML+ instead after > filling. This doesn't happen on master. I think this is now properly fixed. Would you please try the latest patch, which might, just might, be fully working code. As always, this is a diff on the code _without_ previous patches. I haven't tested bits of enclosed css-mode source - you're certainly better equipped to do this than I am. diff --git a/lisp/progmodes/cc-engine.el b/lisp/progmodes/cc-engine.el index 8c8296fd6d..d8279ba4f0 100644 --- a/lisp/progmodes/cc-engine.el +++ b/lisp/progmodes/cc-engine.el @@ -3209,6 +3209,24 @@ c-truncate-lit-pos-cache c-semi-near-cache-limit (min c-semi-near-cache-limit pos) c-full-near-cache-limit (min c-full-near-cache-limit pos))) +(defun c-foreign-truncate-lit-pos-cache (beg _end) + "Truncate CC Mode's literal cache. + +This function should be added to the `before-change-functions' +hook by major modes that use CC Mode's filling functionality +without initializing CC Mode. Currently (2020-06) these are +js-mode and mhtml-mode." + (c-truncate-lit-pos-cache beg)) + +(defun c-foreign-init-lit-pos-cache () + "Initialize CC Mode's literal cache. + +This function should be called from the mode functions of major +modes which use CC Mode's filling functionality without +initializing CC Mode. Currently (2020-06) these are js-mode and +mhtml-mode." + (c-truncate-lit-pos-cache 1)) + ;; A system for finding noteworthy parens before the point. diff --git a/lisp/progmodes/js.el b/lisp/progmodes/js.el index 04b449ecd2..5c50e2accd 100644 --- a/lisp/progmodes/js.el +++ b/lisp/progmodes/js.el @@ -4570,7 +4570,7 @@ js-mode ;; Comments (setq-local comment-start "// ") - (setq-local comment-start-skip "\\(//+\\|/\\*+\\)\\s *") + (setq-local comment-start-skip "\\(?://+\\|/\\*+\\)\\s *") (setq-local comment-end "") (setq-local fill-paragraph-function #'js-fill-paragraph) (setq-local normal-auto-fill-function #'js-do-auto-fill) @@ -4591,6 +4591,8 @@ js-mode (setq imenu-create-index-function #'js--imenu-create-index) ;; for filling, pretend we're cc-mode + (c-foreign-init-lit-pos-cache) + (add-hook 'before-change-functions #'c-foreign-truncate-lit-pos-cache nil t) (setq-local comment-line-break-function #'c-indent-new-comment-line) (setq-local comment-multi-line t) (setq-local electric-indent-chars diff --git a/lisp/textmodes/mhtml-mode.el b/lisp/textmodes/mhtml-mode.el index 1ae07c0a30..bed0ced618 100644 --- a/lisp/textmodes/mhtml-mode.el +++ b/lisp/textmodes/mhtml-mode.el @@ -73,7 +73,9 @@ mhtml-tag-relative-indent (defconst mhtml--crucial-variable-prefix (regexp-opt '("comment-" "uncomment-" "electric-indent-" - "smie-" "forward-sexp-function" "completion-" "major-mode")) + "smie-" "forward-sexp-function" "completion-" "major-mode" + "adaptive-fill-" "fill-" "normal-auto-fill-function" + "paragraph-")) "Regexp matching the prefix of \"crucial\" buffer-locals we want to capture.") (defconst mhtml--variable-prefix @@ -94,6 +96,7 @@ mhtml--construct-submode (unless (variable-binding-locus 'font-lock-fontify-region-function) (setq-local font-lock-fontify-region-function #'font-lock-default-fontify-region)) + (dolist (iter (buffer-local-variables)) (when (string-match mhtml--crucial-variable-prefix (symbol-name (car iter))) @@ -255,17 +258,14 @@ mhtml--syntax-propertize sgml-syntax-propertize-rules)) (defun mhtml-syntax-propertize (start end) - ;; First remove our special settings from the affected text. They - ;; will be re-applied as needed. - (remove-list-of-text-properties start end - '(syntax-table local-map mhtml-submode)) - (goto-char start) - ;; Be sure to look back one character, because START won't yet have - ;; been propertized. - (unless (bobp) - (let ((submode (get-text-property (1- (point)) 'mhtml-submode))) - (if submode - (mhtml--syntax-propertize-submode submode end)))) + (let ((submode (get-text-property start 'mhtml-submode))) + ;; First remove our special settings from the affected text. They + ;; will be re-applied as needed. + (remove-list-of-text-properties start end + '(syntax-table local-map mhtml-submode)) + (goto-char start) + (if submode + (mhtml--syntax-propertize-submode submode end))) (sgml-syntax-propertize (point) end mhtml--syntax-propertize)) (defun mhtml-indent-line () @@ -333,6 +333,18 @@ mhtml-mode ;: Hack (js--update-quick-match-re) + ;; Setup the appropriate js-mode value of auto-fill-function. + (setf (mhtml--submode-crucial-captured-locals mhtml--js-submode) + (push (cons 'auto-fill-function + (if (and (boundp 'auto-fill-function) auto-fill-function) + #'js-do-auto-fill + nil)) + (mhtml--submode-crucial-captured-locals mhtml--js-submode))) + + ;; This mode might be using CC Mode's filling functionality. + (c-foreign-init-lit-pos-cache) + (add-hook 'before-change-functions #'c-foreign-truncate-lit-pos-cache nil t) + ;; This is sort of a prog-mode as well as a text mode. (run-hooks 'prog-mode-hook)) > -- Simen -- Alan Mackenzie (Nuremberg, Germany). From debbugs-submit-bounces@debbugs.gnu.org Mon Jun 22 20:03:00 2020 Received: (at 41897) by debbugs.gnu.org; 23 Jun 2020 00:03:00 +0000 Received: from localhost ([127.0.0.1]:34931 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1jnWOx-0006hc-Oh for submit@debbugs.gnu.org; Mon, 22 Jun 2020 20:02:59 -0400 Received: from mail-wm1-f48.google.com ([209.85.128.48]:35352) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1jnWOw-0006hP-5a for 41897@debbugs.gnu.org; Mon, 22 Jun 2020 20:02:58 -0400 Received: by mail-wm1-f48.google.com with SMTP id g21so1397295wmg.0 for <41897@debbugs.gnu.org>; Mon, 22 Jun 2020 17:02:58 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=sender:subject:to:cc:references:from:message-id:date:user-agent :mime-version:in-reply-to:content-language:content-transfer-encoding; bh=HG0KYTybEVXZrohukBPUETzvx/m87tK9/5U2p1Psjys=; b=rANv4B3ktJprkPWATn86TpOijA9JKNWGnIKqUy3zyWHVA06wI+aqWEj/qZgHdxZQfl HIx5WeOH+2ZbUmxrI8PmVQI5D/bkCsj5Wr1e4cs870f4d95VKn+PRNIZwDk3Ztz2ISOT CEeT81uAaSHhsbmyQfRue8VUjeYdawXxTnGgFQGkhYZf4rlRo+xSz0dkil8ctHOe0htW cdtkoiMHRwyXoN7omJx5AJtVcSVEKSzbVltpY+1dieG9L1+YJcLm86lz9DFjZiWjfZfv mR8TcSDiOaeQo+KKvE3uw+MzdYwF8rKPL0BYgposs95imbww6htK0fgZ71UulGSAAkFs B3NA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:sender:subject:to:cc:references:from:message-id :date:user-agent:mime-version:in-reply-to:content-language :content-transfer-encoding; bh=HG0KYTybEVXZrohukBPUETzvx/m87tK9/5U2p1Psjys=; b=JLP7qgiaJpYPI9Q4TXQjYk9wRs3+Rc+H1sSG71oHjkgVcrPBpO0y+PBzXMS3WqBnbR v2exYUUTLn9mC8xo6t8WgW41HJ7HBj47iDKFkwXA/QYAJHklxDt5Jo+PuX1Q68Of6k1c tWcVgyMUCz6vGpjmWFLiJ1l5MN5wyyuBG103hb8o9Ba8fhctyx51a4IPxPy9tYnCSfrH qBq+hNKUedf4jsJxOgubB02HatJ1/KttKQGomjy819d0Ybf2Rt/kqsdXh7hB/tmcUrvw v7tYd+4rfa6XHz4OtKj/J8wDqEAtr515RqpSxlxKUSXp1I5AXeswRwgB8whbzeHU4U4H kS7g== X-Gm-Message-State: AOAM530cRXJorGj5a5L46eP3cNkPP51t/+0TquAw69UH7jYL2h4dXQZv +hEhzUgTK4pICZI+eEyoqOmvnkqx X-Google-Smtp-Source: ABdhPJxG00ENj8LkVxIt+UhZS1d0AKiaN19m7BbeBHaHP1XfEqqmP6vmF/yWY3U76/0hN+myLuZA2g== X-Received: by 2002:a7b:c248:: with SMTP id b8mr20257806wmj.2.1592870571658; Mon, 22 Jun 2020 17:02:51 -0700 (PDT) Received: from [192.168.0.3] ([66.205.73.129]) by smtp.googlemail.com with ESMTPSA id d9sm19734636wre.28.2020.06.22.17.02.49 (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128); Mon, 22 Jun 2020 17:02:50 -0700 (PDT) Subject: Re: bug#41897: 28.0.50; JavaScript comment filling with mhtml-mode To: Alan Mackenzie , =?UTF-8?Q?Simen_Heggest=c3=b8yl?= References: <20200620171827.7855.qmail@mail.muc.de> <87d05ta8z9.fsf@simenheg@gmail.com> <20200622191750.GA11506@ACM> From: Dmitry Gutov Message-ID: Date: Tue, 23 Jun 2020 03:02:48 +0300 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:68.0) Gecko/20100101 Thunderbird/68.8.0 MIME-Version: 1.0 In-Reply-To: <20200622191750.GA11506@ACM> Content-Type: text/plain; charset=utf-8; format=flowed Content-Language: en-US Content-Transfer-Encoding: 7bit X-Spam-Score: 0.0 (/) X-Debbugs-Envelope-To: 41897 Cc: 41897@debbugs.gnu.org X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: debbugs-submit-bounces@debbugs.gnu.org Sender: "Debbugs-submit" X-Spam-Score: -1.0 (-) Hi Alan, On 22.06.2020 22:17, Alan Mackenzie wrote: > +(defun c-foreign-truncate-lit-pos-cache (beg _end) > + "Truncate CC Mode's literal cache. > + > +This function should be added to the `before-change-functions' > +hook by major modes that use CC Mode's filling functionality > +without initializing CC Mode. Currently (2020-06) these are > +js-mode and mhtml-mode." > + (c-truncate-lit-pos-cache beg)) Could you explain this part? Is that literal cache looked up once during filling, or is it used multiple times during the execution of c-fill-paragraph? If the latter (and it does serve as a cache this way), perhaps it could be cleared once, at the beginning of c-fill-paragraph, instead of adding a runtime cost to every edit? Or if that's undesirable, js-fill-paragraph could do that. This way, I think it would automatically make it compatible with mmm-mode. Or at least more compatible. From debbugs-submit-bounces@debbugs.gnu.org Tue Jun 23 04:36:24 2020 Received: (at 41897) by debbugs.gnu.org; 23 Jun 2020 08:36:24 +0000 Received: from localhost ([127.0.0.1]:35405 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1jnePo-0002QF-As for submit@debbugs.gnu.org; Tue, 23 Jun 2020 04:36:24 -0400 Received: from colin.muc.de ([193.149.48.1]:64928 helo=mail.muc.de) by debbugs.gnu.org with smtp (Exim 4.84_2) (envelope-from ) id 1jnePk-0002Pz-RL for 41897@debbugs.gnu.org; Tue, 23 Jun 2020 04:36:22 -0400 Received: (qmail 7062 invoked by uid 3782); 23 Jun 2020 08:36:13 -0000 Received: from acm.muc.de (p4fe157be.dip0.t-ipconnect.de [79.225.87.190]) by localhost.muc.de (tmda-ofmipd) with ESMTP; Tue, 23 Jun 2020 10:36:13 +0200 Received: (qmail 6983 invoked by uid 1000); 23 Jun 2020 08:36:13 -0000 Date: Tue, 23 Jun 2020 08:36:13 +0000 To: Dmitry Gutov Subject: Re: bug#41897: 28.0.50; JavaScript comment filling with mhtml-mode Message-ID: <20200623083613.GA6957@ACM> References: <20200620171827.7855.qmail@mail.muc.de> <87d05ta8z9.fsf@simenheg@gmail.com> <20200622191750.GA11506@ACM> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: X-Delivery-Agent: TMDA/1.1.12 (Macallan) From: Alan Mackenzie X-Primary-Address: acm@muc.de X-Spam-Score: 0.0 (/) X-Debbugs-Envelope-To: 41897 Cc: Simen =?iso-8859-1?Q?Heggest=F8yl?= , acm@muc.de, 41897@debbugs.gnu.org X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: debbugs-submit-bounces@debbugs.gnu.org Sender: "Debbugs-submit" X-Spam-Score: -1.0 (-) Hello, Dmitry. On Tue, Jun 23, 2020 at 03:02:48 +0300, Dmitry Gutov wrote: > Hi Alan, > On 22.06.2020 22:17, Alan Mackenzie wrote: > > +(defun c-foreign-truncate-lit-pos-cache (beg _end) > > + "Truncate CC Mode's literal cache. > > + > > +This function should be added to the `before-change-functions' > > +hook by major modes that use CC Mode's filling functionality > > +without initializing CC Mode. Currently (2020-06) these are > > +js-mode and mhtml-mode." > > + (c-truncate-lit-pos-cache beg)) > Could you explain this part? > Is that literal cache looked up once during filling, or is it used > multiple times during the execution of c-fill-paragraph? It's used several times during each filling operation. This cache persists between commands, too. > If the latter (and it does serve as a cache this way), perhaps it > could be cleared once, at the beginning of c-fill-paragraph, instead > of adding a runtime cost to every edit? The cost is tiny. c-truncate-lit-pos-cache is a defsubst which does nothing but three copies of (setq cache-limit (min beg cache-limit)) . All the intricacies of manipulating the cache take place whilst it is being used. > Or if that's undesirable, js-fill-paragraph could do that. No, it really has to be in a before-change-functions function, to keep track of the bound of the valid cache. > This way, I think it would automatically make it compatible with > mmm-mode. Or at least more compatible. Maybe putting the two c-foreign-* functions into mmm-mode would work. -- Alan Mackenzie (Nuremberg, Germany). From debbugs-submit-bounces@debbugs.gnu.org Tue Jun 23 10:24:04 2020 Received: (at 41897) by debbugs.gnu.org; 23 Jun 2020 14:24:05 +0000 Received: from localhost ([127.0.0.1]:36940 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1jnjqG-00057J-5E for submit@debbugs.gnu.org; Tue, 23 Jun 2020 10:24:04 -0400 Received: from mail-wr1-f52.google.com ([209.85.221.52]:40573) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1jnjqE-00056o-Sv for 41897@debbugs.gnu.org; Tue, 23 Jun 2020 10:24:03 -0400 Received: by mail-wr1-f52.google.com with SMTP id h5so20754349wrc.7 for <41897@debbugs.gnu.org>; Tue, 23 Jun 2020 07:24:02 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=sender:subject:to:cc:references:from:message-id:date:user-agent :mime-version:in-reply-to:content-language:content-transfer-encoding; bh=415MJNwjAW9ogGEd6EiCc1oqjCepRpkt0AsQoP9yqaM=; b=DQEv9CnhsxVtN9hp3hwQaZ2M+WwPjFEkQPDxyopIoV/da/Y3T5rDPZaEz5olrUK4Vn 0kwhI/Uf8ykCbsFPonqXLZphVLt4HAU68hKXh0ZlHpOFZRDHAs26UQJE6aW82nDgno5H nMri/+vr7TLImL2qbpi3+t7yItzfcTdFgEuFAZ1hSbfSywACl3OHomqFv1vhqXeT1Qb7 kur65akGFYfb5m0fE9MPStRW5YJ7ZbX1UE4laKpiIae3PRe4d37XgAW431rFMifjzmp4 jz+Y/0FVJ6iH0985P1AUmyc/kkOxXc1wog3VbnY53PiNx6l2JFox+SXClwd/SFsFhkmI aToQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:sender:subject:to:cc:references:from:message-id :date:user-agent:mime-version:in-reply-to:content-language :content-transfer-encoding; bh=415MJNwjAW9ogGEd6EiCc1oqjCepRpkt0AsQoP9yqaM=; b=EqrNEmjXZ8t3eOYQXGiOJPUvwra8HZ37m/6qXWC8GA/3xwziDFl5IjtpB0phqRHk2l ini/epJ3B1EYhZVkzlTHMLaYYmvoV9yYl74sOwh6uxj+pyS/LjvpOBwuVm/tAKcxLG+B Qs/xMF5R8UHutK2c2g0DwdTle6nWiEaN4M39C4nyhtMXZqGYP3sw8MkQYON3LkgRYRr+ 8UlhanBqK3P9lNb4HiawrQ7gF5UtTVIG+FXuG01y/NRe8KrtpuVQH/Ic7ZnUV96FEd9s tK6XCjDebNoLv2Y6+2mdv0ov0eU9y0lt6oZNdoJUQjH0U7aIh6Df+BPcLsaH/Vd8bU+i yqxQ== X-Gm-Message-State: AOAM533BHxbM5mUJ5ff57aX53CxkoXZzXEd2hWwdw6mnDPpw76t5LliG 4DwBE5VhgviAWYLsIk7wAkCPtiv1 X-Google-Smtp-Source: ABdhPJyzPRfOMvSwNc3a71I5+AkPdcbHxJij0gSb9Y9NkigQ4Ar4nB7J/Q9L3Ixu4U5iSWdg+z3r3Q== X-Received: by 2002:adf:c382:: with SMTP id p2mr25139713wrf.283.1592922236440; Tue, 23 Jun 2020 07:23:56 -0700 (PDT) Received: from [192.168.0.3] ([66.205.73.129]) by smtp.googlemail.com with ESMTPSA id c201sm4246172wmd.4.2020.06.23.07.23.54 (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128); Tue, 23 Jun 2020 07:23:55 -0700 (PDT) Subject: Re: bug#41897: 28.0.50; JavaScript comment filling with mhtml-mode To: Alan Mackenzie References: <20200620171827.7855.qmail@mail.muc.de> <87d05ta8z9.fsf@simenheg@gmail.com> <20200622191750.GA11506@ACM> <20200623083613.GA6957@ACM> From: Dmitry Gutov Message-ID: Date: Tue, 23 Jun 2020 17:23:53 +0300 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:68.0) Gecko/20100101 Thunderbird/68.8.0 MIME-Version: 1.0 In-Reply-To: <20200623083613.GA6957@ACM> Content-Type: text/plain; charset=utf-8; format=flowed Content-Language: en-US Content-Transfer-Encoding: 7bit X-Spam-Score: 0.0 (/) X-Debbugs-Envelope-To: 41897 Cc: =?UTF-8?Q?Simen_Heggest=c3=b8yl?= , 41897@debbugs.gnu.org X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: debbugs-submit-bounces@debbugs.gnu.org Sender: "Debbugs-submit" X-Spam-Score: -1.0 (-) On 23.06.2020 11:36, Alan Mackenzie wrote: >> If the latter (and it does serve as a cache this way), perhaps it >> could be cleared once, at the beginning of c-fill-paragraph, instead >> of adding a runtime cost to every edit? > > The cost is tiny. c-truncate-lit-pos-cache is a defsubst which does > nothing but three copies of > > (setq cache-limit (min beg cache-limit)) > > . All the intricacies of manipulating the cache take place whilst it is > being used. > >> Or if that's undesirable, js-fill-paragraph could do that. > > No, it really has to be in a before-change-functions function, to keep > track of the bound of the valid cache. So it's really fine if it's called from HTML/CSS hunks as well? And there's no way to just "reset" it to an appropriate value? >> This way, I think it would automatically make it compatible with >> mmm-mode. Or at least more compatible. > > Maybe putting the two c-foreign-* functions into mmm-mode would work. mmm-mode is a minor mode, it doesn't always deal with CC Mode. And its configurations don't usually result in new major modes either. I wouldn't say it's very hard to make it work, but I don't see a "neat" way to do either. Have you considered adding variables that hold the cache to mhtml--crucial-variable-prefix as well? Would that make it work? From debbugs-submit-bounces@debbugs.gnu.org Tue Jun 23 12:28:48 2020 Received: (at 41897) by debbugs.gnu.org; 23 Jun 2020 16:28:48 +0000 Received: from localhost ([127.0.0.1]:37021 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1jnlmy-0001nw-CL for submit@debbugs.gnu.org; Tue, 23 Jun 2020 12:28:48 -0400 Received: from colin.muc.de ([193.149.48.1]:34427 helo=mail.muc.de) by debbugs.gnu.org with smtp (Exim 4.84_2) (envelope-from ) id 1jnlmv-0001ng-0L for 41897@debbugs.gnu.org; Tue, 23 Jun 2020 12:28:46 -0400 Received: (qmail 12565 invoked by uid 3782); 23 Jun 2020 16:28:38 -0000 Received: from acm.muc.de (p4fe157be.dip0.t-ipconnect.de [79.225.87.190]) by localhost.muc.de (tmda-ofmipd) with ESMTP; Tue, 23 Jun 2020 18:28:37 +0200 Received: (qmail 11258 invoked by uid 1000); 23 Jun 2020 16:28:37 -0000 Date: Tue, 23 Jun 2020 16:28:37 +0000 To: Dmitry Gutov Subject: Re: bug#41897: 28.0.50; JavaScript comment filling with mhtml-mode Message-ID: <20200623162837.GB6957@ACM> References: <20200620171827.7855.qmail@mail.muc.de> <87d05ta8z9.fsf@simenheg@gmail.com> <20200622191750.GA11506@ACM> <20200623083613.GA6957@ACM> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: X-Delivery-Agent: TMDA/1.1.12 (Macallan) From: Alan Mackenzie X-Primary-Address: acm@muc.de X-Spam-Score: 0.0 (/) X-Debbugs-Envelope-To: 41897 Cc: Simen =?iso-8859-1?Q?Heggest=F8yl?= , 41897@debbugs.gnu.org X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: debbugs-submit-bounces@debbugs.gnu.org Sender: "Debbugs-submit" X-Spam-Score: -1.0 (-) Hello, Dmitry. On Tue, Jun 23, 2020 at 17:23:53 +0300, Dmitry Gutov wrote: > On 23.06.2020 11:36, Alan Mackenzie wrote: > >> If the latter (and it does serve as a cache this way), perhaps it > >> could be cleared once, at the beginning of c-fill-paragraph, instead > >> of adding a runtime cost to every edit? > > The cost is tiny. c-truncate-lit-pos-cache is a defsubst which does > > nothing but three copies of > > (setq cache-limit (min beg cache-limit)) > > . All the intricacies of manipulating the cache take place whilst it > > is being used. > >> Or if that's undesirable, js-fill-paragraph could do that. > > No, it really has to be in a before-change-functions function, to > > keep track of the bound of the valid cache. > So it's really fine if it's called from HTML/CSS hunks as well? Not only fine, but necessary. The literal cache contains entries that record things like "C comment between positions 23 and 130". If somebody inserts text before that comment, or inside of it, that cache entry is no longer valid, and must be invalidated. Hence the necessity of the before-change function. > And there's no way to just "reset" it to an appropriate value? No. Not without killing its utility as a cache. > >> This way, I think it would automatically make it compatible with > >> mmm-mode. Or at least more compatible. > > Maybe putting the two c-foreign-* functions into mmm-mode would work. > mmm-mode is a minor mode, it doesn't always deal with CC Mode. The question to consider here is whether any sub-mode of mmm-mode uses CC Mode's comment filling without initialising CC Mode. js-mode and mhtml-mode do this. > And its configurations don't usually result in new major modes either. > I wouldn't say it's very hard to make it work, but I don't see a "neat" > way to do either. OK. > Have you considered adding variables that hold the cache to > mhtml--crucial-variable-prefix as well? Would that make it work? Not without the before-change function, no. I'm trying to see what the point of putting these variables into mhtml's crucial variables would be. -- Alan Mackenzie (Nuremberg, Germany). From debbugs-submit-bounces@debbugs.gnu.org Tue Jun 23 13:59:37 2020 Received: (at 41897) by debbugs.gnu.org; 23 Jun 2020 17:59:37 +0000 Received: from localhost ([127.0.0.1]:37081 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1jnnCr-0003vK-3P for submit@debbugs.gnu.org; Tue, 23 Jun 2020 13:59:37 -0400 Received: from mail-wr1-f41.google.com ([209.85.221.41]:33487) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1jnnCl-0003v3-Qh for 41897@debbugs.gnu.org; Tue, 23 Jun 2020 13:59:35 -0400 Received: by mail-wr1-f41.google.com with SMTP id j94so177281wrj.0 for <41897@debbugs.gnu.org>; Tue, 23 Jun 2020 10:59:31 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=sender:subject:to:cc:references:from:message-id:date:user-agent :mime-version:in-reply-to:content-language:content-transfer-encoding; bh=t8E1ZZvbO3Jp539qU3UkODono7qa0B7XRuicxMxf7GA=; b=KIb/sR1JLLv79NsrmF1xLcGBiVxNXur7gRyk7FnrB8MGCRhs3ueGY5FnudpqfPMnkf RY8lwRzcVzi3n+jNQYli4F1nrtFNKI5YLcJUe5f3bWMRcaSTOkKXe1OK1/ga2xERaWVt QAw8mcg32SCrRq+wzrnHFyHgfIBlam45stylaZJUc9VxqnmLSqBJ/o7s79LKOUVg4nRM dl+qBoalLUW4UHtRaUcwRdchsV6xK1DemKlg39sxWw6238wEGH+cstEpRa0FFeiOH2Fr 4Qr1LGUnaYleKFgo7cx8fxOU4NdnX/IaEtl4Czd78cJ48U6GFcbfGPj9SpxbQ7CgwcAZ 7eKw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:sender:subject:to:cc:references:from:message-id :date:user-agent:mime-version:in-reply-to:content-language :content-transfer-encoding; bh=t8E1ZZvbO3Jp539qU3UkODono7qa0B7XRuicxMxf7GA=; b=hHmgCcXhj6nNfQVbxIf0TyaJPLou+uBtQ/olI4gLZ2dxYoVSpS7H8+9deXbOU8fyxc LOT1NhtBrQbL8AizPBwb9YUVdvbVgZv3w4XvSmUaBOSK67PeKA98LfCu6QIKKPUu+mc/ 8r7X8iyuF7wNgmfSYHwUl1hjsQxhVfW9WhQsqerYmCGC0Xj1iIXSlVW0S0+LzgtLTWRx q6Izz0YqT1yskQaP1GO962XFK6YGvCmcvR6t5lR65OWbNZyqerCwlAKM5aNz0RGH7LNI IE1ckZSG1gOxc7f/wLtb9Qt+e0if5P9FTW1kr9GnUGNguMo2AIDveTt4ZLUUyaRmFr5j v/Ag== X-Gm-Message-State: AOAM5308cMvYBrVsFZdXH0AOTmIyM3XEcmV51L2gRYbVNcvjj6vSs2/M R0wv1/evxv3L+ea/+MqEbeOqnesm X-Google-Smtp-Source: ABdhPJzyrXTESaBHQt5nJ9+UD/mlKd4yPYZUqMZWxFEpWT8w4z0CckQFDACouIhvc8soLwH2TjJKoA== X-Received: by 2002:a5d:6ac1:: with SMTP id u1mr26015819wrw.123.1592935165416; Tue, 23 Jun 2020 10:59:25 -0700 (PDT) Received: from [192.168.0.3] ([66.205.73.129]) by smtp.googlemail.com with ESMTPSA id n1sm23348716wrp.10.2020.06.23.10.59.23 (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128); Tue, 23 Jun 2020 10:59:24 -0700 (PDT) Subject: Re: bug#41897: 28.0.50; JavaScript comment filling with mhtml-mode To: Alan Mackenzie References: <20200620171827.7855.qmail@mail.muc.de> <87d05ta8z9.fsf@simenheg@gmail.com> <20200622191750.GA11506@ACM> <20200623083613.GA6957@ACM> <20200623162837.GB6957@ACM> From: Dmitry Gutov Message-ID: <10235ec5-17c3-c281-b5ed-2c65a07bd02f@yandex.ru> Date: Tue, 23 Jun 2020 20:59:22 +0300 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:68.0) Gecko/20100101 Thunderbird/68.8.0 MIME-Version: 1.0 In-Reply-To: <20200623162837.GB6957@ACM> Content-Type: text/plain; charset=utf-8; format=flowed Content-Language: en-US Content-Transfer-Encoding: 7bit X-Spam-Score: 0.0 (/) X-Debbugs-Envelope-To: 41897 Cc: =?UTF-8?Q?Simen_Heggest=c3=b8yl?= , 41897@debbugs.gnu.org X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: debbugs-submit-bounces@debbugs.gnu.org Sender: "Debbugs-submit" X-Spam-Score: -1.0 (-) Hi Alan, On 23.06.2020 19:28, Alan Mackenzie wrote: >> So it's really fine if it's called from HTML/CSS hunks as well? > > Not only fine, but necessary. The literal cache contains entries that > record things like "C comment between positions 23 and 130". If somebody > inserts text before that comment, or inside of it, that cache entry is no > longer valid, and must be invalidated. Hence the necessity of the > before-change function. But isn't CC Mode confused by chunks of text with a totally different syntax? >> And there's no way to just "reset" it to an appropriate value? > > No. Not without killing its utility as a cache. What do you mean? Even if the cache is reset at the beginning of a function, if the function refers to it multiple times, the first time should refill the cache, and the rest of the calls will be able to make use of it properly. >>>> This way, I think it would automatically make it compatible with >>>> mmm-mode. Or at least more compatible. > >>> Maybe putting the two c-foreign-* functions into mmm-mode would work. > >> mmm-mode is a minor mode, it doesn't always deal with CC Mode. > > The question to consider here is whether any sub-mode of mmm-mode uses CC > Mode's comment filling without initialising CC Mode. js-mode and > mhtml-mode do this. js-mode can be one of its submodes. c-mode as well, but none of CC Mode family of major modes ever worked okay with it, I think. js-mode mostly works, aside from features like this one. >> Have you considered adding variables that hold the cache to >> mhtml--crucial-variable-prefix as well? Would that make it work? > > Not without the before-change function, no. I'm trying to see what the > point of putting these variables into mhtml's crucial variables would be. Hopefully, it would make the submode regions inside independent "islands", so to speak. Each of them having its own cache structure (used or not). TBH I'm not sure if mhtml-mode does the save-and-restore dance which would be necessary for this. mmm-mode does, though. From debbugs-submit-bounces@debbugs.gnu.org Tue Jun 23 15:17:23 2020 Received: (at 41897) by debbugs.gnu.org; 23 Jun 2020 19:17:23 +0000 Received: from localhost ([127.0.0.1]:37123 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1jnoQ6-0006P0-Oj for submit@debbugs.gnu.org; Tue, 23 Jun 2020 15:17:22 -0400 Received: from colin.muc.de ([193.149.48.1]:41394 helo=mail.muc.de) by debbugs.gnu.org with smtp (Exim 4.84_2) (envelope-from ) id 1jnoQ4-0006Oc-FN for 41897@debbugs.gnu.org; Tue, 23 Jun 2020 15:17:21 -0400 Received: (qmail 24749 invoked by uid 3782); 23 Jun 2020 19:17:13 -0000 Received: from acm.muc.de (p4fe157be.dip0.t-ipconnect.de [79.225.87.190]) by localhost.muc.de (tmda-ofmipd) with ESMTP; Tue, 23 Jun 2020 21:17:12 +0200 Received: (qmail 26962 invoked by uid 1000); 23 Jun 2020 19:17:13 -0000 Date: Tue, 23 Jun 2020 19:17:13 +0000 To: Dmitry Gutov Subject: Re: bug#41897: 28.0.50; JavaScript comment filling with mhtml-mode Message-ID: <20200623191713.GC6957@ACM> References: <20200620171827.7855.qmail@mail.muc.de> <87d05ta8z9.fsf@simenheg@gmail.com> <20200622191750.GA11506@ACM> <20200623083613.GA6957@ACM> <20200623162837.GB6957@ACM> <10235ec5-17c3-c281-b5ed-2c65a07bd02f@yandex.ru> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <10235ec5-17c3-c281-b5ed-2c65a07bd02f@yandex.ru> X-Delivery-Agent: TMDA/1.1.12 (Macallan) From: Alan Mackenzie X-Primary-Address: acm@muc.de X-Spam-Score: 0.0 (/) X-Debbugs-Envelope-To: 41897 Cc: Simen =?iso-8859-1?Q?Heggest=F8yl?= , acm@muc.de, 41897@debbugs.gnu.org X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: debbugs-submit-bounces@debbugs.gnu.org Sender: "Debbugs-submit" X-Spam-Score: -1.0 (-) Hello, Dmitry. On Tue, Jun 23, 2020 at 20:59:22 +0300, Dmitry Gutov wrote: > Hi Alan, > On 23.06.2020 19:28, Alan Mackenzie wrote: > >> So it's really fine if it's called from HTML/CSS hunks as well? > > Not only fine, but necessary. The literal cache contains entries > > that record things like "C comment between positions 23 and 130". If > > somebody inserts text before that comment, or inside of it, that > > cache entry is no longer valid, and must be invalidated. Hence the > > necessity of the before-change function. > But isn't CC Mode confused by chunks of text with a totally different > syntax? It might well be, probably is. But this isn't CC Mode we're talking about - just a tiny part of its low level functionality, namely the bit dealing with literals and filling them. > >> And there's no way to just "reset" it to an appropriate value? > > No. Not without killing its utility as a cache. > What do you mean? Even if the cache is reset at the beginning of a > function, if the function refers to it multiple times, the first time > should refill the cache, and the rest of the calls will be able to make > use of it properly. That's what I mean. The cache persists over commands, reducing the amount of recalculation needed, particularly for fast typing. Refilling it from scratch on every keypress would likely make it sluggish. Anyhow, it works fine at the moment, so why change it? [ .... ] > >> mmm-mode is a minor mode, it doesn't always deal with CC Mode. > > The question to consider here is whether any sub-mode of mmm-mode > > uses CC Mode's comment filling without initialising CC Mode. js-mode > > and mhtml-mode do this. > js-mode can be one of its submodes. c-mode as well, but none of CC Mode > family of major modes ever worked okay with it, I think. Having several major modes in a single buffer has always been problematic in Emacs. Personally, I think there needs to be amendments in the low-level C code to support it properly, but I'm not able to do this work on my own, and there doesn't seem to be enough enthusiasm on other people's part to help out. > js-mode mostly works, aside from features like this one. With the current patch, comment filling should work fine in js-mode. > >> Have you considered adding variables that hold the cache to > >> mhtml--crucial-variable-prefix as well? Would that make it work? > > Not without the before-change function, no. I'm trying to see what the > > point of putting these variables into mhtml's crucial variables would be. > Hopefully, it would make the submode regions inside independent > "islands", so to speak. Each of them having its own cache structure > (used or not). Ah, OK. So, buffer positions would be offsets from the island start, or something like that. > TBH I'm not sure if mhtml-mode does the save-and-restore dance which > would be necessary for this. mmm-mode does, though. mhtml-mode does do saving and restoring of local variables. I can't judge how well in comparison with, say, mmm-mode. -- Alan Mackenzie (Nuremberg, Germany). From debbugs-submit-bounces@debbugs.gnu.org Tue Jun 23 19:11:45 2020 Received: (at 41897) by debbugs.gnu.org; 23 Jun 2020 23:11:45 +0000 Received: from localhost ([127.0.0.1]:37406 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1jns4v-0000y0-5k for submit@debbugs.gnu.org; Tue, 23 Jun 2020 19:11:45 -0400 Received: from mail-wm1-f44.google.com ([209.85.128.44]:52447) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1jns4q-0000xl-J7 for 41897@debbugs.gnu.org; Tue, 23 Jun 2020 19:11:44 -0400 Received: by mail-wm1-f44.google.com with SMTP id q15so400748wmj.2 for <41897@debbugs.gnu.org>; Tue, 23 Jun 2020 16:11:40 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=sender:subject:to:cc:references:from:message-id:date:user-agent :mime-version:in-reply-to:content-language:content-transfer-encoding; bh=uShy4GsGCvjL+K9BnoUzMp3VTeDfLn5kTmbJN6PILWo=; b=Y93Mz5U25hGW4xBjXihgk6rBVyzU6vy17y+L+sJtXjU7myigoYlWjIA6K0aF0C1WwW 0eC1R6DPcz2fTBg1drN7tD1L9vWHreFAnR9R9KS1f3sZdj5JZ0cxZAId6jskyHnLOOGp qVvYtNxBjcBPQUyOr8dSEV7M0Mfgd0bCeezislHOmxi4h3jCA9CGhdjy9zUj7NNoNr/X rdhjufYCbR/gbECi+w/Xze5RjOLLCiAutvskOxukdE0g2kG/FsAMBxQom8QFzgpg9UMf FyyXVhx7wmpSNH4DqQ3gFdwlJpnSiFhbZBBwx8Ko2Ntw5KMCzQaP6rivEI5hQK731rHE 3eqA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:sender:subject:to:cc:references:from:message-id :date:user-agent:mime-version:in-reply-to:content-language :content-transfer-encoding; bh=uShy4GsGCvjL+K9BnoUzMp3VTeDfLn5kTmbJN6PILWo=; b=GJOQyDIj8eMip25V1c7n4NadyZNSHFFnENMHKo0kQeXd6HAGAmWPw1IRGiE2OhNhXb pdsTpawZFTXH+JsddNlPAbMmC+C/+jSxSZCuAjvLZ+faYT09MtR4DUBAZR7HuxARVTzQ hHSfu+4TvB3ck4lYtHbyeyJW9n4UUUFFty+YF/czP8xDWXJwkU8IKKNgq31gyeY3MXGk Rl14x/ZF+COFDbN1rx8+mDHgclsFahFjJVrp1FfxR6zgUGAPcnkyl92hkAssM0l1c6Fn 0I9xs+GlCQfm14fXTBZzSL2M1i21/vp7DKJZkiByL1+1mQ6MIGrOsQYG1cErCADwFy2x iHFg== X-Gm-Message-State: AOAM5327FlEbudzjnSJ8ZwzStnrgUJJGlMW1zdZsNlxZSKzTOfbL8Ynk fOORjErNj4Pia8oT7rI7UEVcRULo X-Google-Smtp-Source: ABdhPJygCZ8LpnHM3ePNymckY+gWlbb/4OnEVB82mS3R935fhCwFCQedEoZKtOfw6DcpShgv3NKoZg== X-Received: by 2002:a1c:98cc:: with SMTP id a195mr26531323wme.89.1592953894163; Tue, 23 Jun 2020 16:11:34 -0700 (PDT) Received: from [192.168.0.3] ([66.205.73.129]) by smtp.googlemail.com with ESMTPSA id n8sm21053322wrj.44.2020.06.23.16.11.32 (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128); Tue, 23 Jun 2020 16:11:33 -0700 (PDT) Subject: Re: bug#41897: 28.0.50; JavaScript comment filling with mhtml-mode To: Alan Mackenzie References: <20200620171827.7855.qmail@mail.muc.de> <87d05ta8z9.fsf@simenheg@gmail.com> <20200622191750.GA11506@ACM> <20200623083613.GA6957@ACM> <20200623162837.GB6957@ACM> <10235ec5-17c3-c281-b5ed-2c65a07bd02f@yandex.ru> <20200623191713.GC6957@ACM> From: Dmitry Gutov Message-ID: <4c6a9c40-a72c-1413-4e08-c7097f8bc407@yandex.ru> Date: Wed, 24 Jun 2020 02:11:31 +0300 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:68.0) Gecko/20100101 Thunderbird/68.8.0 MIME-Version: 1.0 In-Reply-To: <20200623191713.GC6957@ACM> Content-Type: text/plain; charset=utf-8; format=flowed Content-Language: en-US Content-Transfer-Encoding: 7bit X-Spam-Score: 0.0 (/) X-Debbugs-Envelope-To: 41897 Cc: =?UTF-8?Q?Simen_Heggest=c3=b8yl?= , 41897@debbugs.gnu.org X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: debbugs-submit-bounces@debbugs.gnu.org Sender: "Debbugs-submit" X-Spam-Score: -1.0 (-) On 23.06.2020 22:17, Alan Mackenzie wrote: >> But isn't CC Mode confused by chunks of text with a totally different >> syntax? > > It might well be, probably is. But this isn't CC Mode we're talking > about - just a tiny part of its low level functionality, namely the bit > dealing with literals and filling them. So this cache is really serving the filling functionality only in this case. >>>> And there's no way to just "reset" it to an appropriate value? > >>> No. Not without killing its utility as a cache. > >> What do you mean? Even if the cache is reset at the beginning of a >> function, if the function refers to it multiple times, the first time >> should refill the cache, and the rest of the calls will be able to make >> use of it properly. > > That's what I mean. The cache persists over commands, reducing the > amount of recalculation needed, particularly for fast typing. Refilling > it from scratch on every keypress would likely make it sluggish. Not on every keypress. Only when js-fill-paragraph is called. One-time delay only when required. > Anyhow, it works fine at the moment, so why change it? The above scheme would require fewer references to CC Mode functions from outside. js-mode support would automatically transfer to mhtml-mode and mmm-mode with associated changes in them necessary. One fewer before-change-functions element is also nothing to sneeze at. >> js-mode can be one of its submodes. c-mode as well, but none of CC Mode >> family of major modes ever worked okay with it, I think. > > Having several major modes in a single buffer has always been problematic > in Emacs. Personally, I think there needs to be amendments in the > low-level C code to support it properly, but I'm not able to do this work > on my own, and there doesn't seem to be enough enthusiasm on other > people's part to help out. We've learned to deal with most other major modes and features in mmm context. >> js-mode mostly works, aside from features like this one. > > With the current patch, comment filling should work fine in js-mode. Above, I meant that js-mode mostly works fine with mmm-mode. And my suggestion might make comment filling work there, too. Automatically. >>>> Have you considered adding variables that hold the cache to >>>> mhtml--crucial-variable-prefix as well? Would that make it work? > >>> Not without the before-change function, no. I'm trying to see what the >>> point of putting these variables into mhtml's crucial variables would be. > >> Hopefully, it would make the submode regions inside independent >> "islands", so to speak. Each of them having its own cache structure >> (used or not). > > Ah, OK. So, buffer positions would be offsets from the island start, or > something like that. Not necessarily, but possibly. The key aspect is that the cache inside a particular submode is not affected by user actions outside of its bounds. Not directly, at least. But that's an mmm-mode feature anyway. From debbugs-submit-bounces@debbugs.gnu.org Wed Jun 24 13:43:45 2020 Received: (at 41897) by debbugs.gnu.org; 24 Jun 2020 17:43:45 +0000 Received: from localhost ([127.0.0.1]:38826 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1jo9R3-0000iI-5N for submit@debbugs.gnu.org; Wed, 24 Jun 2020 13:43:45 -0400 Received: from colin.muc.de ([193.149.48.1]:28894 helo=mail.muc.de) by debbugs.gnu.org with smtp (Exim 4.84_2) (envelope-from ) id 1jo9Qz-0000i3-57 for 41897@debbugs.gnu.org; Wed, 24 Jun 2020 13:43:43 -0400 Received: (qmail 16651 invoked by uid 3782); 24 Jun 2020 17:43:34 -0000 Received: from acm.muc.de (p4fe15a7c.dip0.t-ipconnect.de [79.225.90.124]) by localhost.muc.de (tmda-ofmipd) with ESMTP; Wed, 24 Jun 2020 19:43:33 +0200 Received: (qmail 8923 invoked by uid 1000); 24 Jun 2020 17:43:33 -0000 Date: Wed, 24 Jun 2020 17:43:33 +0000 To: Dmitry Gutov Subject: Re: bug#41897: 28.0.50; JavaScript comment filling with mhtml-mode Message-ID: <20200624174333.GA8870@ACM> References: <20200620171827.7855.qmail@mail.muc.de> <87d05ta8z9.fsf@simenheg@gmail.com> <20200622191750.GA11506@ACM> <20200623083613.GA6957@ACM> <20200623162837.GB6957@ACM> <10235ec5-17c3-c281-b5ed-2c65a07bd02f@yandex.ru> <20200623191713.GC6957@ACM> <4c6a9c40-a72c-1413-4e08-c7097f8bc407@yandex.ru> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <4c6a9c40-a72c-1413-4e08-c7097f8bc407@yandex.ru> X-Delivery-Agent: TMDA/1.1.12 (Macallan) From: Alan Mackenzie X-Primary-Address: acm@muc.de X-Spam-Score: 0.0 (/) X-Debbugs-Envelope-To: 41897 Cc: Simen =?iso-8859-1?Q?Heggest=F8yl?= , acm@muc.de, 41897@debbugs.gnu.org X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: debbugs-submit-bounces@debbugs.gnu.org Sender: "Debbugs-submit" X-Spam-Score: -1.0 (-) Hello, Dmitry. On Wed, Jun 24, 2020 at 02:11:31 +0300, Dmitry Gutov wrote: > On 23.06.2020 22:17, Alan Mackenzie wrote: [ .... ] > >>>> And there's no way to just "reset" it to an appropriate value? > >>> No. Not without killing its utility as a cache. > >> What do you mean? Even if the cache is reset at the beginning of a > >> function, if the function refers to it multiple times, the first time > >> should refill the cache, and the rest of the calls will be able to make > >> use of it properly. > > That's what I mean. The cache persists over commands, reducing the > > amount of recalculation needed, particularly for fast typing. Refilling > > it from scratch on every keypress would likely make it sluggish. > Not on every keypress. Only when js-fill-paragraph is called. One-time > delay only when required. But a substantial delay, involving (I think) analysing the code from BOB each time. The current working setup has a negligible delay at each buffer change (and, of course, recalculation of cache entries only when required). > > Anyhow, it works fine at the moment, so why change it? > The above scheme would require fewer references to CC Mode functions > from outside. js-mode support would automatically transfer to mhtml-mode > and mmm-mode with associated changes in them necessary. It sounds like you want to use a facility without initialising it. This feels a bit unreasonable. > One fewer before-change-functions element is also nothing to sneeze at. There's nothing wrong with having functions in before/after-change-functions. It's a standard Emacs programming technique. [ .... ] > >> js-mode mostly works, aside from features like this one. > > With the current patch, comment filling should work fine in js-mode. > Above, I meant that js-mode mostly works fine with mmm-mode. And my > suggestion might make comment filling work there, too. Automatically. It works automatically at the moment (with the current patch applied). I think you're saying again you don't want to be troubled by initialising it. > >>>> Have you considered adding variables that hold the cache to > >>>> mhtml--crucial-variable-prefix as well? Would that make it work? > >>> Not without the before-change function, no. I'm trying to see what the > >>> point of putting these variables into mhtml's crucial variables would be. > >> Hopefully, it would make the submode regions inside independent > >> "islands", so to speak. Each of them having its own cache structure > >> (used or not). > > Ah, OK. So, buffer positions would be offsets from the island start, or > > something like that. > Not necessarily, but possibly. The key aspect is that the cache inside a > particular submode is not affected by user actions outside of its > bounds. Not directly, at least. Well, when a cached holds buffer positions, something has to give - either markers need to be used, or an offset from a variable position, or something. > But that's an mmm-mode feature anyway. OK. -- Alan Mackenzie (Nuremberg, Germany). From debbugs-submit-bounces@debbugs.gnu.org Wed Jun 24 14:28:22 2020 Received: (at 41897) by debbugs.gnu.org; 24 Jun 2020 18:28:22 +0000 Received: from localhost ([127.0.0.1]:38982 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1joA8D-0001qV-OS for submit@debbugs.gnu.org; Wed, 24 Jun 2020 14:28:22 -0400 Received: from mail-ej1-f46.google.com ([209.85.218.46]:34019) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1joA8B-0001qH-22 for 41897@debbugs.gnu.org; Wed, 24 Jun 2020 14:28:20 -0400 Received: by mail-ej1-f46.google.com with SMTP id y10so3457373eje.1 for <41897@debbugs.gnu.org>; Wed, 24 Jun 2020 11:28:18 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=sender:subject:to:cc:references:from:message-id:date:user-agent :mime-version:in-reply-to:content-language:content-transfer-encoding; bh=xk0Kw9W5Oznp0t2Gndqo8WqycR+6EZHuLJZgbbqL6Rw=; b=XpesGh1ljsObCrUqGqT+oSEPxjvKdPxIxC5olVnJ4lbkyYfSfM1Vz5uwi74BmK+jYa WvmqXTe8I7UYNdtG9ZCf/phIOS0d97sGmZerqm5vCQ9IE+W8g+gfLzSgwaun2TjAeO8k wL8R5OIiu/38Enj4JSk8nWMYfnPcqfsGycWxmVSt8Wyr6CXC3kq8XXOsysrrOnxPLNXW mRcXpgsKkoeehh0bJlh8PQ5Xfb4dab+REvdLbcNXotWVUAUZZC6opX+vl2njkveAvycL ZPka/c9P/B0jeL4KDjhLEOy35N672HLrP1c92Vs9NrFPu8CsQc9T2hU+/bTy2MQ+nbbU O+Gg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:sender:subject:to:cc:references:from:message-id :date:user-agent:mime-version:in-reply-to:content-language :content-transfer-encoding; bh=xk0Kw9W5Oznp0t2Gndqo8WqycR+6EZHuLJZgbbqL6Rw=; b=GvFP3f/MwaV3xZ2z6e2gnIvJnQv/D7/LA3cnSe2xQuvCBXk73o4Xqt50dG0c9zg6oW fQe/sCWXGkS/h8KXoWBtVuZ0auhAOrnegufs9zdpo+eH0qqwUqOy7sxAQf/gV1ZBvw8I 35CiO9gTjE5b06QmCMqdCKqtT0Q1jjXi9dfd55OzXpG1ZXujuzixmvUYFu7jSr1bm7Ki 6vdUO8Z763OFPBqmw+UCYYuBF//Oko7BB9OOVaU8E6ABOkB8mI2lHCDYll1T4MQzdHzx fBWcqQVFA3ycdR8RNeaxDe9hvqLiPKKNYik2kJoO0fzk7BQFLwAv8F5Ixl08MJ9HJUnK Z+iw== X-Gm-Message-State: AOAM5307X/jZw5UI/BxCPObpxnAg+v+Du9jdIqku4ktByJF+8ErCrB/a D0nDjhY3uVE7Ob/8n6tgprRGoPZm X-Google-Smtp-Source: ABdhPJyAMlYPLxUat1GldUlf6BmUPBKOsWDGCPYNvYPa7LnNbqyU5U2FYj00guZIImzF6gtNK+sRgA== X-Received: by 2002:a17:906:11d9:: with SMTP id o25mr25515650eja.377.1593023292775; Wed, 24 Jun 2020 11:28:12 -0700 (PDT) Received: from [192.168.0.3] ([66.205.73.129]) by smtp.googlemail.com with ESMTPSA id u19sm9283740edd.62.2020.06.24.11.28.11 (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128); Wed, 24 Jun 2020 11:28:12 -0700 (PDT) Subject: Re: bug#41897: 28.0.50; JavaScript comment filling with mhtml-mode To: Alan Mackenzie References: <20200620171827.7855.qmail@mail.muc.de> <87d05ta8z9.fsf@simenheg@gmail.com> <20200622191750.GA11506@ACM> <20200623083613.GA6957@ACM> <20200623162837.GB6957@ACM> <10235ec5-17c3-c281-b5ed-2c65a07bd02f@yandex.ru> <20200623191713.GC6957@ACM> <4c6a9c40-a72c-1413-4e08-c7097f8bc407@yandex.ru> <20200624174333.GA8870@ACM> From: Dmitry Gutov Message-ID: Date: Wed, 24 Jun 2020 21:28:09 +0300 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:68.0) Gecko/20100101 Thunderbird/68.8.0 MIME-Version: 1.0 In-Reply-To: <20200624174333.GA8870@ACM> Content-Type: text/plain; charset=utf-8; format=flowed Content-Language: en-US Content-Transfer-Encoding: 7bit X-Spam-Score: 0.0 (/) X-Debbugs-Envelope-To: 41897 Cc: =?UTF-8?Q?Simen_Heggest=c3=b8yl?= , 41897@debbugs.gnu.org X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: debbugs-submit-bounces@debbugs.gnu.org Sender: "Debbugs-submit" X-Spam-Score: -1.0 (-) Hi Alan, On 24.06.2020 20:43, Alan Mackenzie wrote: >>> That's what I mean. The cache persists over commands, reducing the >>> amount of recalculation needed, particularly for fast typing. Refilling >>> it from scratch on every keypress would likely make it sluggish. > >> Not on every keypress. Only when js-fill-paragraph is called. One-time >> delay only when required. > > But a substantial delay, involving (I think) analysing the code from BOB > each time. The current working setup has a negligible delay at each > buffer change (and, of course, recalculation of cache entries only when > required). I imagine that would not be a significant problem for the rare cases that fill-paragraph is called in a JS region. Considering most of the contents in mhtml-mode buffers are not JS code, on average, that should tilt the scales in favor of parsing lazily, rather than affecting every character insertion. >>> Anyhow, it works fine at the moment, so why change it? > >> The above scheme would require fewer references to CC Mode functions >> from outside. js-mode support would automatically transfer to mhtml-mode >> and mmm-mode with associated changes in them necessary. > > It sounds like you want to use a facility without initialising it. This > feels a bit unreasonable. That cache reset at the beginning of js-fill-paragraph could as well re-initialize the cache. >> One fewer before-change-functions element is also nothing to sneeze at. > > There's nothing wrong with having functions in > before/after-change-functions. It's a standard Emacs programming > technique. I'm not saying it's a terrible idea, but it has its downsides. >>>> js-mode mostly works, aside from features like this one. > >>> With the current patch, comment filling should work fine in js-mode. > >> Above, I meant that js-mode mostly works fine with mmm-mode. And my >> suggestion might make comment filling work there, too. Automatically. > > It works automatically at the moment (with the current patch applied). I > think you're saying again you don't want to be troubled by initialising > it. It doesn't automatically work in mmm-mode. With my suggestion, it very likely would. >>>>>> Have you considered adding variables that hold the cache to >>>>>> mhtml--crucial-variable-prefix as well? Would that make it work? > >>>>> Not without the before-change function, no. I'm trying to see what the >>>>> point of putting these variables into mhtml's crucial variables would be. > >>>> Hopefully, it would make the submode regions inside independent >>>> "islands", so to speak. Each of them having its own cache structure >>>> (used or not). > >>> Ah, OK. So, buffer positions would be offsets from the island start, or >>> something like that. > >> Not necessarily, but possibly. The key aspect is that the cache inside a >> particular submode is not affected by user actions outside of its >> bounds. Not directly, at least. > > Well, when a cached holds buffer positions, something has to give - > either markers need to be used, or an offset from a variable position, or > something. Makes sense. The alternative would be to index the positions from the beginning of the submode region. But then the related feature must respect narrowing, and it would require explicit integration from mmm-mode and friends. From debbugs-submit-bounces@debbugs.gnu.org Thu Jun 25 12:33:10 2020 Received: (at 41897) by debbugs.gnu.org; 25 Jun 2020 16:33:10 +0000 Received: from localhost ([127.0.0.1]:40990 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1joUoI-0003Tt-Hx for submit@debbugs.gnu.org; Thu, 25 Jun 2020 12:33:10 -0400 Received: from colin.muc.de ([193.149.48.1]:31973 helo=mail.muc.de) by debbugs.gnu.org with smtp (Exim 4.84_2) (envelope-from ) id 1joUoG-0003Te-VA for 41897@debbugs.gnu.org; Thu, 25 Jun 2020 12:33:09 -0400 Received: (qmail 58013 invoked by uid 3782); 25 Jun 2020 16:33:02 -0000 Received: from acm.muc.de (p4fe15761.dip0.t-ipconnect.de [79.225.87.97]) by localhost.muc.de (tmda-ofmipd) with ESMTP; Thu, 25 Jun 2020 18:33:01 +0200 Received: (qmail 10380 invoked by uid 1000); 25 Jun 2020 16:33:01 -0000 Date: Thu, 25 Jun 2020 16:33:01 +0000 To: Dmitry Gutov Subject: Re: bug#41897: 28.0.50; JavaScript comment filling with mhtml-mode Message-ID: <20200625163301.GA10342@ACM> References: <20200622191750.GA11506@ACM> <20200623083613.GA6957@ACM> <20200623162837.GB6957@ACM> <10235ec5-17c3-c281-b5ed-2c65a07bd02f@yandex.ru> <20200623191713.GC6957@ACM> <4c6a9c40-a72c-1413-4e08-c7097f8bc407@yandex.ru> <20200624174333.GA8870@ACM> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: X-Delivery-Agent: TMDA/1.1.12 (Macallan) From: Alan Mackenzie X-Primary-Address: acm@muc.de X-Spam-Score: 0.0 (/) X-Debbugs-Envelope-To: 41897 Cc: Simen =?iso-8859-1?Q?Heggest=F8yl?= , acm@muc.de, 41897@debbugs.gnu.org X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: debbugs-submit-bounces@debbugs.gnu.org Sender: "Debbugs-submit" X-Spam-Score: -1.0 (-) Hello, Dmitry. On Wed, Jun 24, 2020 at 21:28:09 +0300, Dmitry Gutov wrote: > Hi Alan, > On 24.06.2020 20:43, Alan Mackenzie wrote: [ .... ] > > But a substantial delay, involving (I think) analysing the code from > > BOB each time. The current working setup has a negligible delay at > > each buffer change (and, of course, recalculation of cache entries > > only when required). > I imagine that would not be a significant problem for the rare cases > that fill-paragraph is called in a JS region. Considering most of the > contents in mhtml-mode buffers are not JS code, on average, that should > tilt the scales in favor of parsing lazily, rather than affecting every > character insertion. The current patch does parse lazily. You want to remove the benefit of using this cache, no matter how small, for reasons I still can't grasp. This removal will hurt performance, and possibly cause new bugs to solve. [ .... ] > > It sounds like you want to use a facility without initialising it. > > This feels a bit unreasonable. > That cache reset at the beginning of js-fill-paragraph could as well > re-initialize the cache. You're misusing the work "initialize" here. If you initialise a variable every time you read it, you might as well not have that variable. [ .... ] > >>>> js-mode mostly works, aside from features like this one. > >>> With the current patch, comment filling should work fine in js-mode. > >> Above, I meant that js-mode mostly works fine with mmm-mode. And my > >> suggestion might make comment filling work there, too. Automatically. > > It works automatically at the moment (with the current patch applied). I > > think you're saying again you don't want to be troubled by initialising > > it. > It doesn't automatically work in mmm-mode. With my suggestion, it very > likely would. It would work fine with the current patch, together with calls to initialise the mechanism. What precisely is the problem in mmm-mode? [ .... ] -- Alan Mackenzie (Nuremberg, Germany). From debbugs-submit-bounces@debbugs.gnu.org Thu Jun 25 12:49:09 2020 Received: (at 41897) by debbugs.gnu.org; 25 Jun 2020 16:49:09 +0000 Received: from localhost ([127.0.0.1]:41011 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1joV3l-0003to-ET for submit@debbugs.gnu.org; Thu, 25 Jun 2020 12:49:09 -0400 Received: from mail-ed1-f47.google.com ([209.85.208.47]:34326) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1joV3i-0003tO-JF for 41897@debbugs.gnu.org; Thu, 25 Jun 2020 12:49:08 -0400 Received: by mail-ed1-f47.google.com with SMTP id a8so3533426edy.1 for <41897@debbugs.gnu.org>; Thu, 25 Jun 2020 09:49:06 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=sender:subject:to:cc:references:from:message-id:date:user-agent :mime-version:in-reply-to:content-language:content-transfer-encoding; bh=k0jh3JA1NERzvggn/1lYar0kEXKojdzvs6iiEkizm0Q=; b=rK/s9pshVSSBgWwz6HeJMVgjj6m+bMu1yB3hNaqivvWSCu9WE39V9xBSkTrhsbdzQp M5kj0OZzCzonL6LxBjHitC1vsdyC9Mo74oXyHcn/1q61VSWDJETfQuuSgmY65qYBW+uq NsHZq/jhpKiUuHTU14PqfTMwwgu1gCmS6m7DsbvI4/ZHb5kZW/rW0ChAHfOP/gCblaRv 0W4sdxzJYOvLcqcEW+ZztOAxWjwrS+XXF5YeoRSKB5+R8s73ZnlXpjG0N5RedC6AcfPF xEnT0ADBGz0PZhDHk7sqaCL3Gorybo7pNTMwaG4fBGU51LQlzA0YZs0LIBv7gSIQkJ3X MvKQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:sender:subject:to:cc:references:from:message-id :date:user-agent:mime-version:in-reply-to:content-language :content-transfer-encoding; bh=k0jh3JA1NERzvggn/1lYar0kEXKojdzvs6iiEkizm0Q=; b=tBW0MyJUhOsnJh8L4p/zv6bn7oGEV2vBE2buAixj3LaQKJDc4ZeHgjO1jnkmMNeGiL XDET1ibCJaChS8kAhj0MQ4FfQZPj2hD2eycbTOCyphPIosBOwQLsx4307YqobKFKy+7L IWoQxWedyTtMWvdr4g+uol3OjmlP/B/HuR/D5Tpbdp2jYXMcys0vfF4azLzgqE0+yQEH PGRE3/k/FO/WlgIfgGFkN9zZXfJXY6P4NMGfRg3OMGcd6WaBTNEZYktr9W30Eway9S8z 35j9/AkHo6EnYGgfJrgLRPXRbqToSdV6NWaAj3/XJq+bACCHyCq2Wr0d1R6TtVwyp5z+ 1mrw== X-Gm-Message-State: AOAM531byl/ZOy71xlcQcN8Vwt2tgKMZ9j7FkesEF9Ih7R/pd8JAqape ToQv0EQm182t1YfFl78eo0mSDAb+ X-Google-Smtp-Source: ABdhPJxUOzcZZ0pGa1NT60RXeumkTduUnUgvdMuiTEcP/W1j0rsyb9/P9f3ueENPzB6LNWHmyWmVZg== X-Received: by 2002:a05:6402:2212:: with SMTP id cq18mr28364253edb.173.1593103740541; Thu, 25 Jun 2020 09:49:00 -0700 (PDT) Received: from [192.168.0.3] ([66.205.73.129]) by smtp.googlemail.com with ESMTPSA id q7sm12271749eja.69.2020.06.25.09.48.58 (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128); Thu, 25 Jun 2020 09:48:59 -0700 (PDT) Subject: Re: bug#41897: 28.0.50; JavaScript comment filling with mhtml-mode To: Alan Mackenzie References: <20200622191750.GA11506@ACM> <20200623083613.GA6957@ACM> <20200623162837.GB6957@ACM> <10235ec5-17c3-c281-b5ed-2c65a07bd02f@yandex.ru> <20200623191713.GC6957@ACM> <4c6a9c40-a72c-1413-4e08-c7097f8bc407@yandex.ru> <20200624174333.GA8870@ACM> <20200625163301.GA10342@ACM> From: Dmitry Gutov Message-ID: Date: Thu, 25 Jun 2020 19:48:57 +0300 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:68.0) Gecko/20100101 Thunderbird/68.8.0 MIME-Version: 1.0 In-Reply-To: <20200625163301.GA10342@ACM> Content-Type: text/plain; charset=utf-8; format=flowed Content-Language: en-US Content-Transfer-Encoding: 7bit X-Spam-Score: 0.0 (/) X-Debbugs-Envelope-To: 41897 Cc: =?UTF-8?Q?Simen_Heggest=c3=b8yl?= , 41897@debbugs.gnu.org X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: debbugs-submit-bounces@debbugs.gnu.org Sender: "Debbugs-submit" X-Spam-Score: -1.0 (-) On 25.06.2020 19:33, Alan Mackenzie wrote: >> I imagine that would not be a significant problem for the rare cases >> that fill-paragraph is called in a JS region. Considering most of the >> contents in mhtml-mode buffers are not JS code, on average, that should >> tilt the scales in favor of parsing lazily, rather than affecting every >> character insertion. > > The current patch does parse lazily. You want to remove the benefit of > using this cache, no matter how small, for reasons I still can't grasp. That's not true. Like you confirmed, c-fill-paragraph refers to that cache multiple times. We'll only make sure the cache is reset in the beginning. >>> It sounds like you want to use a facility without initialising it. >>> This feels a bit unreasonable. > >> That cache reset at the beginning of js-fill-paragraph could as well >> re-initialize the cache. > > You're misusing the work "initialize" here. If you initialise a variable > every time you read it, you might as well not have that variable. Like explained above, not *every* time. >> It doesn't automatically work in mmm-mode. With my suggestion, it very >> likely would. > > It would work fine with the current patch, together with calls to > initialise the mechanism. What precisely is the problem in mmm-mode? That there is no good place to plug in your new functions. And, in general, to have per-mode before-change-functions contents. From debbugs-submit-bounces@debbugs.gnu.org Thu Jun 25 14:07:33 2020 Received: (at 41897) by debbugs.gnu.org; 25 Jun 2020 18:07:33 +0000 Received: from localhost ([127.0.0.1]:41133 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1joWHc-0005rs-R9 for submit@debbugs.gnu.org; Thu, 25 Jun 2020 14:07:33 -0400 Received: from colin.muc.de ([193.149.48.1]:25989 helo=mail.muc.de) by debbugs.gnu.org with smtp (Exim 4.84_2) (envelope-from ) id 1joWHa-0005re-A4 for 41897@debbugs.gnu.org; Thu, 25 Jun 2020 14:07:31 -0400 Received: (qmail 18982 invoked by uid 3782); 25 Jun 2020 18:07:23 -0000 Received: from acm.muc.de (p4fe15761.dip0.t-ipconnect.de [79.225.87.97]) by localhost.muc.de (tmda-ofmipd) with ESMTP; Thu, 25 Jun 2020 20:07:22 +0200 Received: (qmail 11338 invoked by uid 1000); 25 Jun 2020 18:07:22 -0000 Date: Thu, 25 Jun 2020 18:07:22 +0000 To: Dmitry Gutov Subject: Re: bug#41897: 28.0.50; JavaScript comment filling with mhtml-mode Message-ID: <20200625180722.GC10342@ACM> References: <20200623083613.GA6957@ACM> <20200623162837.GB6957@ACM> <10235ec5-17c3-c281-b5ed-2c65a07bd02f@yandex.ru> <20200623191713.GC6957@ACM> <4c6a9c40-a72c-1413-4e08-c7097f8bc407@yandex.ru> <20200624174333.GA8870@ACM> <20200625163301.GA10342@ACM> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: X-Delivery-Agent: TMDA/1.1.12 (Macallan) From: Alan Mackenzie X-Primary-Address: acm@muc.de X-Spam-Score: 0.0 (/) X-Debbugs-Envelope-To: 41897 Cc: Simen =?iso-8859-1?Q?Heggest=F8yl?= , acm@muc.de, 41897@debbugs.gnu.org X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: debbugs-submit-bounces@debbugs.gnu.org Sender: "Debbugs-submit" X-Spam-Score: -1.0 (-) Hello, Dmitry. On Thu, Jun 25, 2020 at 19:48:57 +0300, Dmitry Gutov wrote: > On 25.06.2020 19:33, Alan Mackenzie wrote: > >> I imagine that would not be a significant problem for the rare cases > >> that fill-paragraph is called in a JS region. Considering most of the > >> contents in mhtml-mode buffers are not JS code, on average, that should > >> tilt the scales in favor of parsing lazily, rather than affecting every > >> character insertion. > > The current patch does parse lazily. You want to remove the benefit of > > using this cache, no matter how small, for reasons I still can't grasp. > That's not true. Like you confirmed, c-fill-paragraph refers to that > cache multiple times. We'll only make sure the cache is reset in the > beginning. OK, first of all, I think I was mistaken in saying c-literal-limits is called several times. I think it's just called once per filling action. But if it were called several times, it would likely need to be updated at every buffer change between calls. The purpose of this cache is to avoid repeated scanning from BOB. Your proposed continual splatting of it would remove the benefit of it entirely. > >>> It sounds like you want to use a facility without initialising it. > >>> This feels a bit unreasonable. > >> That cache reset at the beginning of js-fill-paragraph could as well > >> re-initialize the cache. > > You're misusing the work "initialize" here. If you initialise a > > variable every time you read it, you might as well not have that > > variable. > Like explained above, not *every* time. > >> It doesn't automatically work in mmm-mode. With my suggestion, it very > >> likely would. > > It would work fine with the current patch, together with calls to > > initialise the mechanism. What precisely is the problem in mmm-mode? > That there is no good place to plug in your new functions. That would appear to be a deficiency in mmm-mode. Does mmm-mode not call js-mode when that is one of the submodes? If it doesn't, then why not add a general init function-variable/hook/whatever into which initialisations can be plugged? > And, in general, to have per-mode before-change-functions contents. There's no problem with before/after-change-functions. They're the canonical way to react to buffer changes. -- Alan Mackenzie (Nuremberg, Germany). From debbugs-submit-bounces@debbugs.gnu.org Thu Jun 25 14:19:22 2020 Received: (at 41897) by debbugs.gnu.org; 25 Jun 2020 18:19:22 +0000 Received: from localhost ([127.0.0.1]:41143 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1joWT4-0006Ai-4x for submit@debbugs.gnu.org; Thu, 25 Jun 2020 14:19:22 -0400 Received: from mail-ed1-f68.google.com ([209.85.208.68]:40200) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1joWT2-0006AT-Ki for 41897@debbugs.gnu.org; Thu, 25 Jun 2020 14:19:21 -0400 Received: by mail-ed1-f68.google.com with SMTP id b15so4945798edy.7 for <41897@debbugs.gnu.org>; Thu, 25 Jun 2020 11:19:20 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=sender:subject:to:cc:references:from:message-id:date:user-agent :mime-version:in-reply-to:content-language:content-transfer-encoding; bh=9w83IJ6yZtAFbeSwshn7SUlxH6cvBstzeo8FgaBbfG8=; b=iKw25NPXyIvHhckPNrnfLG9GW3wbkOlr07au1p/CQpSqXIsAHcSv3WLz0JrVjrlHYn dphuKs9ty69g1GB+MaQL7ht+VPDoFGiTF0t9p+IzIGPMxqf870C0sQLNfxXz3gYOqyc5 16QY1QuKS4a3ZW6gKcPrtELIxPS+Nl5n9B9SxUxgGS6UrPkcIEW1qR1GntH5cVZw1nX2 xcd+2jpEv76RuOG3vzq/TKYSgNfboLdYK0CilpmGfPZx3puLZkwEzDwzS2jtSnzAJAH6 XSpc/ue2/4ltK6c1BeoAJ3aAcAPIhnaMIawmi8QHeGFYRGeNuaMon9X3UWe7I3y7+b0O mjLw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:sender:subject:to:cc:references:from:message-id :date:user-agent:mime-version:in-reply-to:content-language :content-transfer-encoding; bh=9w83IJ6yZtAFbeSwshn7SUlxH6cvBstzeo8FgaBbfG8=; b=FmNJrtGYdpZ9Pz4IyVwemQFCumFfIuyumjzucwrezAWl0gm5KxHUBLBYxb6MDnSqDn ejL36a5sAzcxZ1HMC9ivocVtYEFGSKrtDrCTh7kE3wFHne9wvmeIQnWHqQLf1C1i6da8 bikANWOvm425Wi2jxtWYu65iG9hoO0ygc/OoYMHef/dm1HZH9nbwQW/Pl7wRc/vNESj6 WOMlzzYZwmqktl77BT/0QtGJYUQIh5vXRQSVlh+BuytjpZ4Ufs6mHo5Tus6kvuWDdO4N H+R+4XmwETZvqYB07NqF5ayQaKoX9TqZ82Lw/oOphh5+R4w1ubERdU1zVYeS6o4TVUQl 9gSg== X-Gm-Message-State: AOAM530Nm4n01r/lGJNsb3fCnLvqMfh7lAVAkKTa39sYxBUYMUTfHkNg Rd5as6Ka5rAi1JcBsv5/Kxwf33Ap X-Google-Smtp-Source: ABdhPJzLJW9HvvvdP6ppjE20tXW0dgXYMUodVKa97hhlx9OvsF7Qa2MUchSj4HWAn01iHQD72ekIGg== X-Received: by 2002:aa7:c90a:: with SMTP id b10mr33541749edt.198.1593109154575; Thu, 25 Jun 2020 11:19:14 -0700 (PDT) Received: from [192.168.0.3] ([66.205.73.129]) by smtp.googlemail.com with ESMTPSA id s5sm17381928eji.73.2020.06.25.11.19.13 (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128); Thu, 25 Jun 2020 11:19:13 -0700 (PDT) Subject: Re: bug#41897: 28.0.50; JavaScript comment filling with mhtml-mode To: Alan Mackenzie References: <20200623083613.GA6957@ACM> <20200623162837.GB6957@ACM> <10235ec5-17c3-c281-b5ed-2c65a07bd02f@yandex.ru> <20200623191713.GC6957@ACM> <4c6a9c40-a72c-1413-4e08-c7097f8bc407@yandex.ru> <20200624174333.GA8870@ACM> <20200625163301.GA10342@ACM> <20200625180722.GC10342@ACM> From: Dmitry Gutov Message-ID: Date: Thu, 25 Jun 2020 21:19:11 +0300 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:68.0) Gecko/20100101 Thunderbird/68.8.0 MIME-Version: 1.0 In-Reply-To: <20200625180722.GC10342@ACM> Content-Type: text/plain; charset=utf-8; format=flowed Content-Language: en-US Content-Transfer-Encoding: 7bit X-Spam-Score: 0.0 (/) X-Debbugs-Envelope-To: 41897 Cc: =?UTF-8?Q?Simen_Heggest=c3=b8yl?= , 41897@debbugs.gnu.org X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: debbugs-submit-bounces@debbugs.gnu.org Sender: "Debbugs-submit" X-Spam-Score: -1.0 (-) Hi Alan, On 25.06.2020 21:07, Alan Mackenzie wrote: >> That's not true. Like you confirmed, c-fill-paragraph refers to that >> cache multiple times. We'll only make sure the cache is reset in the >> beginning. > > OK, first of all, I think I was mistaken in saying c-literal-limits is > called several times. I think it's just called once per filling action. > > But if it were called several times, it would likely need to be updated > at every buffer change between calls. > > The purpose of this cache is to avoid repeated scanning from BOB. Your > proposed continual splatting of it would remove the benefit of it > entirely. That's unfortunate. Guess the only thing that remains for me here is to express a wish for a syntax-ppss based design here. Because mmm-mode knows how to deal with major modes based on it, as a group. >>> It would work fine with the current patch, together with calls to >>> initialise the mechanism. What precisely is the problem in mmm-mode? > >> That there is no good place to plug in your new functions. > > That would appear to be a deficiency in mmm-mode. > > Does mmm-mode not call js-mode when that is one of the submodes? If it > doesn't, then why not add a general init function-variable/hook/whatever > into which initialisations can be plugged? It does not pick up each and every hook. If it did, though, it would only call your before-change-functions inside js-mode regions, but it would have ignored them in HTML and CSS regions. Which doesn't appear to be what you want anyway. >> And, in general, to have per-mode before-change-functions contents. > > There's no problem with before/after-change-functions. They're the > canonical way to react to buffer changes. They're not very manageable, from mmm's point of view. And like the current example shows, it's not obvious what to do with such hooks outside of submode regions of major modes that added them. From debbugs-submit-bounces@debbugs.gnu.org Thu Jun 25 15:14:11 2020 Received: (at 41897) by debbugs.gnu.org; 25 Jun 2020 19:14:11 +0000 Received: from localhost ([127.0.0.1]:41168 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1joXK7-0007ft-GF for submit@debbugs.gnu.org; Thu, 25 Jun 2020 15:14:11 -0400 Received: from colin.muc.de ([193.149.48.1]:29149 helo=mail.muc.de) by debbugs.gnu.org with smtp (Exim 4.84_2) (envelope-from ) id 1joXK2-0007ez-Vp for 41897@debbugs.gnu.org; Thu, 25 Jun 2020 15:14:09 -0400 Received: (qmail 62243 invoked by uid 3782); 25 Jun 2020 19:14:00 -0000 Received: from acm.muc.de (p4fe15761.dip0.t-ipconnect.de [79.225.87.97]) by localhost.muc.de (tmda-ofmipd) with ESMTP; Thu, 25 Jun 2020 21:13:59 +0200 Received: (qmail 12022 invoked by uid 1000); 25 Jun 2020 19:13:59 -0000 Date: Thu, 25 Jun 2020 19:13:59 +0000 To: Dmitry Gutov Subject: Re: bug#41897: 28.0.50; JavaScript comment filling with mhtml-mode Message-ID: <20200625191359.GD10342@ACM> References: <20200623162837.GB6957@ACM> <10235ec5-17c3-c281-b5ed-2c65a07bd02f@yandex.ru> <20200623191713.GC6957@ACM> <4c6a9c40-a72c-1413-4e08-c7097f8bc407@yandex.ru> <20200624174333.GA8870@ACM> <20200625163301.GA10342@ACM> <20200625180722.GC10342@ACM> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: X-Delivery-Agent: TMDA/1.1.12 (Macallan) From: Alan Mackenzie X-Primary-Address: acm@muc.de X-Spam-Score: 0.0 (/) X-Debbugs-Envelope-To: 41897 Cc: Simen =?iso-8859-1?Q?Heggest=F8yl?= , acm@muc.de, 41897@debbugs.gnu.org X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: debbugs-submit-bounces@debbugs.gnu.org Sender: "Debbugs-submit" X-Spam-Score: -1.0 (-) Hello, Dmitry. On Thu, Jun 25, 2020 at 21:19:11 +0300, Dmitry Gutov wrote: > Hi Alan, > On 25.06.2020 21:07, Alan Mackenzie wrote: > > The purpose of this cache is to avoid repeated scanning from BOB. > > Your proposed continual splatting of it would remove the benefit of > > it entirely. > That's unfortunate. Indeed. Let's assume that keeping it working is a requirement here. > Guess the only thing that remains for me here is to express a wish for a > syntax-ppss based design here. > Because mmm-mode knows how to deal with major modes based on it, as a group. How about enhancing mmm-mode to handle any major mode, rather than a restricted subset? > >>> It would work fine with the current patch, together with calls to > >>> initialise the mechanism. What precisely is the problem in mmm-mode? > >> That there is no good place to plug in your new functions. > > That would appear to be a deficiency in mmm-mode. > > Does mmm-mode not call js-mode when that is one of the submodes? If it > > doesn't, then why not add a general init function-variable/hook/whatever > > into which initialisations can be plugged? > It does not pick up each and every hook. > If it did, though, it would only call your before-change-functions > inside js-mode regions, but it would have ignored them in HTML and CSS > regions. Which doesn't appear to be what you want anyway. Then why not do in mmm-mode what I'm doing in CC Mode, mhtml-mode and js-mode, i.e. add ad hoc code to handle precisely the case of js-mode? It's not very nice, but it helps to analyse in the abstract how we reached the point we are at. That abstract reason is js-mode using part of CC Mode without initialising it. This is bound to lead to trouble, and it has lead to trouble. > >> And, in general, to have per-mode before-change-functions contents. > > There's no problem with before/after-change-functions. They're the > > canonical way to react to buffer changes. > They're not very manageable, from mmm's point of view. And like the > current example shows, it's not obvious what to do with such hooks > outside of submode regions of major modes that added them. Like I said earlier on in the thread, making several major modes in a buffer work is problematic in Emacs, and we really want better support from the C core for it. Here we seem to want "global" and "mode-local" before-change-functionses. -- Alan Mackenzie (Nuremberg, Germany). From debbugs-submit-bounces@debbugs.gnu.org Thu Jun 25 15:28:30 2020 Received: (at 41897) by debbugs.gnu.org; 25 Jun 2020 19:28:30 +0000 Received: from localhost ([127.0.0.1]:41186 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1joXXy-00083P-8k for submit@debbugs.gnu.org; Thu, 25 Jun 2020 15:28:30 -0400 Received: from mail-ej1-f43.google.com ([209.85.218.43]:38471) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1joXXv-00083B-GL for 41897@debbugs.gnu.org; Thu, 25 Jun 2020 15:28:29 -0400 Received: by mail-ej1-f43.google.com with SMTP id w16so7084550ejj.5 for <41897@debbugs.gnu.org>; Thu, 25 Jun 2020 12:28:27 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=sender:subject:to:cc:references:from:message-id:date:user-agent :mime-version:in-reply-to:content-language:content-transfer-encoding; bh=/eydYXHa/Qsu2Xji8R/qscBoqlVVEiZSbRNL2j/ni9Q=; b=ZFy4zxfWwFif61c5vLo4r1qepoNLiNfSxrQUMqeI7TS6bdYlVO36T2eHWW2DmxsuTb dnRqvZH8uZVTqLgay6pNFYmvEHU7sqVM9Tn7x8BOtYgseEUBYNQPOy1JgzMz/kMcptuL +tkavTs7D6BWnhXRrKA1rHlsOt8XOzG4To9dtLps9AHxpzWR8fZKdYRcFf8XU4mJ30YS VFZNzB3w58z2CWYl57r2Uou8e7NcfPnPXr1h2FoyW7I2Lunlt7SCJjqcM4xSUiHkcEwE 4qgNQsWqD3az64MT+bTh53phUw5Vm1LD/wm2acU1y4UDUg290rQF+Acg14+XgC6NuYEx rzlw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:sender:subject:to:cc:references:from:message-id :date:user-agent:mime-version:in-reply-to:content-language :content-transfer-encoding; bh=/eydYXHa/Qsu2Xji8R/qscBoqlVVEiZSbRNL2j/ni9Q=; b=FPYKoypp/KAljiumldpIQWS1hCdPR4JNv75KYoEEotP8lw/zb4kzYWWdnT+uBt31el kOIlS7SKBuQraUX2cQt9INQY1sNVKz7KK3oVFnkqjRtsK7yeKfK9tlw5/kzHytcnL5Gv FPoSOtqJeVdDSD0wZU4etKeGDe2689BN/xoIFTBuxzmUez44eKARJ7GOR8Ha9/iu2x22 eAaAj6yo70x3jgogBiTBp+YS9EOGKDovedN0E4pjG/dayjzmmEdjNT+JXt+pvHkg1DSm MACzrPG0GzDImt0PZodQruFrlMkF27IEvC3nYhQDR50woBV00oZE46SP2zoUSjrZNYAs ac6Q== X-Gm-Message-State: AOAM532va6Fushxcap+Dm2ZszMgkeprDOL/KBZtXbswjygYVniLvTXq9 qjvU5iEN86W4CHsmmlthUfV5MtdT X-Google-Smtp-Source: ABdhPJxrko2JuIkIK9fp3tm6TzjLm+mdGWCNkbIfuu+G8KUB1wB2eKepLK30ci0IuwB38amwnynH8Q== X-Received: by 2002:a17:906:95d6:: with SMTP id n22mr30896109ejy.138.1593113301162; Thu, 25 Jun 2020 12:28:21 -0700 (PDT) Received: from [192.168.0.3] ([66.205.73.129]) by smtp.googlemail.com with ESMTPSA id a2sm7905796ejg.76.2020.06.25.12.28.19 (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128); Thu, 25 Jun 2020 12:28:20 -0700 (PDT) Subject: Re: bug#41897: 28.0.50; JavaScript comment filling with mhtml-mode To: Alan Mackenzie References: <20200623162837.GB6957@ACM> <10235ec5-17c3-c281-b5ed-2c65a07bd02f@yandex.ru> <20200623191713.GC6957@ACM> <4c6a9c40-a72c-1413-4e08-c7097f8bc407@yandex.ru> <20200624174333.GA8870@ACM> <20200625163301.GA10342@ACM> <20200625180722.GC10342@ACM> <20200625191359.GD10342@ACM> From: Dmitry Gutov Message-ID: <70532224-5beb-b311-648c-fda352de88cb@yandex.ru> Date: Thu, 25 Jun 2020 22:28:17 +0300 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:68.0) Gecko/20100101 Thunderbird/68.8.0 MIME-Version: 1.0 In-Reply-To: <20200625191359.GD10342@ACM> Content-Type: text/plain; charset=utf-8; format=flowed Content-Language: en-US Content-Transfer-Encoding: 7bit X-Spam-Score: 0.0 (/) X-Debbugs-Envelope-To: 41897 Cc: =?UTF-8?Q?Simen_Heggest=c3=b8yl?= , 41897@debbugs.gnu.org X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: debbugs-submit-bounces@debbugs.gnu.org Sender: "Debbugs-submit" X-Spam-Score: -1.0 (-) On 25.06.2020 22:13, Alan Mackenzie wrote: >> That's unfortunate. > Indeed. Let's assume that keeping it working is a requirement here. Still, buffers that user mixed modes are usually not so big as some of the files we have in src/*.c. So even forgoing caching might result in a satisfying user experience 98% of the time. >> Guess the only thing that remains for me here is to express a wish for a >> syntax-ppss based design here. > >> Because mmm-mode knows how to deal with major modes based on it, as a group. > > How about enhancing mmm-mode to handle any major mode, rather than a > restricted subset? I don't know how. before-change-functions don't make it easy. >> It does not pick up each and every hook. > >> If it did, though, it would only call your before-change-functions >> inside js-mode regions, but it would have ignored them in HTML and CSS >> regions. Which doesn't appear to be what you want anyway. > > Then why not do in mmm-mode what I'm doing in CC Mode, mhtml-mode and > js-mode, i.e. add ad hoc code to handle precisely the case of js-mode? That would be something every user that configures a submode class using js-mode have to be aware of. That's not easy to document, or even if we made sure it's documented, to be sure that users read it. >>> There's no problem with before/after-change-functions. They're the >>> canonical way to react to buffer changes. > >> They're not very manageable, from mmm's point of view. And like the >> current example shows, it's not obvious what to do with such hooks >> outside of submode regions of major modes that added them. > > Like I said earlier on in the thread, making several major modes in a > buffer work is problematic in Emacs, and we really want better support > from the C core for it. Here we seem to want "global" and "mode-local" > before-change-functionses. These do seem to be the options: some C core support (though I'm not clear on the particulars of the proposed design), or switching from ad-hoc caches to syntax-propertize-function and and associated syntax-ppss cache. From debbugs-submit-bounces@debbugs.gnu.org Thu Jun 25 16:11:13 2020 Received: (at 41897) by debbugs.gnu.org; 25 Jun 2020 20:11:13 +0000 Received: from localhost ([127.0.0.1]:41236 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1joYDJ-0000iZ-Lf for submit@debbugs.gnu.org; Thu, 25 Jun 2020 16:11:13 -0400 Received: from colin.muc.de ([193.149.48.1]:31845 helo=mail.muc.de) by debbugs.gnu.org with smtp (Exim 4.84_2) (envelope-from ) id 1joYDD-0000i6-PU for 41897@debbugs.gnu.org; Thu, 25 Jun 2020 16:11:12 -0400 Received: (qmail 325 invoked by uid 3782); 25 Jun 2020 20:11:01 -0000 Received: from acm.muc.de (p4fe15761.dip0.t-ipconnect.de [79.225.87.97]) by localhost.muc.de (tmda-ofmipd) with ESMTP; Thu, 25 Jun 2020 22:10:59 +0200 Received: (qmail 31931 invoked by uid 1000); 25 Jun 2020 20:11:00 -0000 Date: Thu, 25 Jun 2020 20:11:00 +0000 To: Dmitry Gutov Subject: Re: bug#41897: 28.0.50; JavaScript comment filling with mhtml-mode Message-ID: <20200625201100.GE10342@ACM> References: <20200623191713.GC6957@ACM> <4c6a9c40-a72c-1413-4e08-c7097f8bc407@yandex.ru> <20200624174333.GA8870@ACM> <20200625163301.GA10342@ACM> <20200625180722.GC10342@ACM> <20200625191359.GD10342@ACM> <70532224-5beb-b311-648c-fda352de88cb@yandex.ru> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <70532224-5beb-b311-648c-fda352de88cb@yandex.ru> X-Delivery-Agent: TMDA/1.1.12 (Macallan) From: Alan Mackenzie X-Primary-Address: acm@muc.de X-Spam-Score: 0.0 (/) X-Debbugs-Envelope-To: 41897 Cc: Simen =?iso-8859-1?Q?Heggest=F8yl?= , acm@muc.de, 41897@debbugs.gnu.org X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: debbugs-submit-bounces@debbugs.gnu.org Sender: "Debbugs-submit" X-Spam-Score: -1.0 (-) Hello, Dmitry. On Thu, Jun 25, 2020 at 22:28:17 +0300, Dmitry Gutov wrote: > On 25.06.2020 22:13, Alan Mackenzie wrote: > >> That's unfortunate. > > Indeed. Let's assume that keeping it working is a requirement here. > Still, buffers that user mixed modes are usually not so big as some of > the files we have in src/*.c. So even forgoing caching might result in > a satisfying user experience 98% of the time. Sluggish performance isn't about "usually" and 98% of the time; it's about unusual constellations and the other 2%. [ .... ] > >> If it did, though, it would only call your before-change-functions > >> inside js-mode regions, but it would have ignored them in HTML and CSS > >> regions. Which doesn't appear to be what you want anyway. > > Then why not do in mmm-mode what I'm doing in CC Mode, mhtml-mode and > > js-mode, i.e. add ad hoc code to handle precisely the case of js-mode? > That would be something every user that configures a submode class using > js-mode have to be aware of. That's not easy to document, or even if we > made sure it's documented, to be sure that users read it. Are you telling me that mmm-mode couldn't keep a watch out for js-mode, leaving other libraries untroubled? Again, the trouble here appears to arise from using something (a mode) without first initialising it. > >>> There's no problem with before/after-change-functions. They're the > >>> canonical way to react to buffer changes. > >> They're not very manageable, from mmm's point of view. And like the > >> current example shows, it's not obvious what to do with such hooks > >> outside of submode regions of major modes that added them. > > Like I said earlier on in the thread, making several major modes in a > > buffer work is problematic in Emacs, and we really want better > > support from the C core for it. Here we seem to want "global" and > > "mode-local" before-change-functionses. > These do seem to be the options: some C core support (though I'm not > clear on the particulars of the proposed design), or switching from > ad-hoc caches to syntax-propertize-function and and associated > syntax-ppss cache. The syntax-propertize-function approach is poor design. It restricts the use of the syntax-table text property too much. syntax-ppss has had a troubled history and doesn't do the right thing in narrowed buffers. It advertises itself as a magic wand which does everything, but when you've been enticed into committing your SW to it, you then find out it's less than magic, and you've got to call ugly functions by hand at strange times, and are restricted in how and when you can use it. -- Alan Mackenzie (Nuremberg, Germany). From debbugs-submit-bounces@debbugs.gnu.org Thu Jun 25 16:50:06 2020 Received: (at 41897) by debbugs.gnu.org; 25 Jun 2020 20:50:06 +0000 Received: from localhost ([127.0.0.1]:41317 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1joYov-0001k5-RV for submit@debbugs.gnu.org; Thu, 25 Jun 2020 16:50:06 -0400 Received: from gateway24.websitewelcome.com ([192.185.51.35]:32471) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1joYop-0001jU-VC for 41897@debbugs.gnu.org; Thu, 25 Jun 2020 16:50:03 -0400 Received: from cm12.websitewelcome.com (cm12.websitewelcome.com [100.42.49.8]) by gateway24.websitewelcome.com (Postfix) with ESMTP id F1A40AB13 for <41897@debbugs.gnu.org>; Thu, 25 Jun 2020 15:49:58 -0500 (CDT) Received: from box5379.bluehost.com ([162.241.216.53]) by cmsmtp with SMTP id oYooj8JDLzOauoYoojPS4g; Thu, 25 Jun 2020 15:49:58 -0500 X-Authority-Reason: nr=8 DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=tromey.com; s=default; h=Content-Type:MIME-Version:Message-ID:Date:References: In-Reply-To:Subject:Cc:To:From:Sender:Reply-To:Content-Transfer-Encoding: Content-ID:Content-Description:Resent-Date:Resent-From:Resent-Sender: Resent-To:Resent-Cc:Resent-Message-ID:List-Id:List-Help:List-Unsubscribe: List-Subscribe:List-Post:List-Owner:List-Archive; bh=vUleD2vZe+wEgvhB/oXdH6YF5M5jrVLNzFJw1NNkb8c=; b=GtYx7iWgEVAfpCyWoaGXvxBDy5 2MV3+LCM7K8nPitXay73/dgvbJ63nywzVJabik0fKmT4kU5OaxwChJ77Zq0xdef6R7CnhAq/8hnnM zPb4rpNw7a+ijyJ0EEcAIAnKB; Received: from 174-16-104-48.hlrn.qwest.net ([174.16.104.48]:58408 helo=bapiya) by box5379.bluehost.com with esmtpsa (TLS1.2) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.93) (envelope-from ) id 1joYoo-0031OC-Jw; Thu, 25 Jun 2020 14:49:58 -0600 From: Tom Tromey To: Alan Mackenzie Subject: Re: bug#41897: 28.0.50; JavaScript comment filling with mhtml-mode In-Reply-To: <20200622191750.GA11506@ACM> (Alan Mackenzie's message of "Mon, 22 Jun 2020 19:17:50 +0000") References: <20200620171827.7855.qmail@mail.muc.de> <87d05ta8z9.fsf@simenheg@gmail.com> <20200622191750.GA11506@ACM> User-Agent: Gnus/5.13 (Gnus v5.13) Emacs/28.0.50 (gnu/linux) X-Attribution: Tom Date: Thu, 25 Jun 2020 14:49:57 -0600 Message-ID: <87v9jeeuq2.fsf@tromey.com> MIME-Version: 1.0 Content-Type: text/plain X-AntiAbuse: This header was added to track abuse, please include it with any abuse report X-AntiAbuse: Primary Hostname - box5379.bluehost.com X-AntiAbuse: Original Domain - debbugs.gnu.org X-AntiAbuse: Originator/Caller UID/GID - [47 12] / [47 12] X-AntiAbuse: Sender Address Domain - tromey.com X-BWhitelist: no X-Source-IP: 174.16.104.48 X-Source-L: No X-Exim-ID: 1joYoo-0031OC-Jw X-Source: X-Source-Args: X-Source-Dir: X-Source-Sender: 174-16-104-48.hlrn.qwest.net (bapiya) [174.16.104.48]:58408 X-Source-Auth: tom+tromey.com X-Email-Count: 5 X-Source-Cap: ZWx5bnJvYmk7ZWx5bnJvYmk7Ym94NTM3OS5ibHVlaG9zdC5jb20= X-Local-Domain: yes X-Spam-Score: 0.7 (/) X-Debbugs-Envelope-To: 41897 Cc: Simen =?utf-8?Q?Heggest=C3=B8yl?= , 41897@debbugs.gnu.org X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: debbugs-submit-bounces@debbugs.gnu.org Sender: "Debbugs-submit" X-Spam-Score: -0.3 (/) >>>>> "Alan" == Alan Mackenzie writes: Alan> (ii) An enhancement to CC Mode, used by mhtml-mode and js-mode, which Alan> invalidates a CC Mode cache used by the filling code. This gets rid of Alan> a few strange looking bugs; I wonder if js-mode can be changed not to use cc-mode like this. Looking at js.el, it seems like this is the origin of a use of advice in-core, which is generally frowned upon: ;; FIXME: Such redefinitions are bad style. We should try and use some other ;; way to get the same result. (defun js--fill-c-advice (js-fun) ... Tom From debbugs-submit-bounces@debbugs.gnu.org Thu Jun 25 16:53:50 2020 Received: (at 41897) by debbugs.gnu.org; 25 Jun 2020 20:53:50 +0000 Received: from localhost ([127.0.0.1]:41329 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1joYsX-0001pw-V6 for submit@debbugs.gnu.org; Thu, 25 Jun 2020 16:53:50 -0400 Received: from gateway34.websitewelcome.com ([192.185.148.212]:36895) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1joYsV-0001po-Jh for 41897@debbugs.gnu.org; Thu, 25 Jun 2020 16:53:48 -0400 Received: from cm14.websitewelcome.com (cm14.websitewelcome.com [100.42.49.7]) by gateway34.websitewelcome.com (Postfix) with ESMTP id 84D8D38110 for <41897@debbugs.gnu.org>; Thu, 25 Jun 2020 15:53:46 -0500 (CDT) Received: from box5379.bluehost.com ([162.241.216.53]) by cmsmtp with SMTP id oYsUjFaPhSxZVoYsUjNthx; Thu, 25 Jun 2020 15:53:46 -0500 X-Authority-Reason: nr=8 DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=tromey.com; s=default; h=Content-Type:MIME-Version:Message-ID:In-Reply-To:Date: References:Subject:Cc:To:From:Sender:Reply-To:Content-Transfer-Encoding: Content-ID:Content-Description:Resent-Date:Resent-From:Resent-Sender: Resent-To:Resent-Cc:Resent-Message-ID:List-Id:List-Help:List-Unsubscribe: List-Subscribe:List-Post:List-Owner:List-Archive; bh=lf48KxwXpHwVaqM6jY/eZzhgCD3Q4jE9bXmTMAWjb7A=; b=DwuGuuAIrdGmsPTCjM7Cp83km9 NvqBYNQytcO8uyAdL+Ne7/azDcXqh/1jbbDGnqhpSscGlKkqH6AoARFf6KpOii/wZwYqGkROZI2oE 9guqhNuDJoGHRj3Zd2cuZTmqi; Received: from 174-16-104-48.hlrn.qwest.net ([174.16.104.48]:58418 helo=bapiya) by box5379.bluehost.com with esmtpsa (TLS1.2) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.93) (envelope-from ) id 1joYsT-0032x6-Q1; Thu, 25 Jun 2020 14:53:45 -0600 From: Tom Tromey To: Alan Mackenzie Subject: Re: bug#41897: 28.0.50; JavaScript comment filling with mhtml-mode References: <20200620171827.7855.qmail@mail.muc.de> <87d05ta8z9.fsf@simenheg@gmail.com> <20200622191750.GA11506@ACM> <20200623083613.GA6957@ACM> <20200623162837.GB6957@ACM> <10235ec5-17c3-c281-b5ed-2c65a07bd02f@yandex.ru> <20200623191713.GC6957@ACM> X-Attribution: Tom Date: Thu, 25 Jun 2020 14:53:44 -0600 In-Reply-To: <20200623191713.GC6957@ACM> (Alan Mackenzie's message of "Tue, 23 Jun 2020 19:17:13 +0000") Message-ID: <87sgeieujr.fsf@tromey.com> User-Agent: Gnus/5.13 (Gnus v5.13) Emacs/28.0.50 (gnu/linux) MIME-Version: 1.0 Content-Type: text/plain X-AntiAbuse: This header was added to track abuse, please include it with any abuse report X-AntiAbuse: Primary Hostname - box5379.bluehost.com X-AntiAbuse: Original Domain - debbugs.gnu.org X-AntiAbuse: Originator/Caller UID/GID - [47 12] / [47 12] X-AntiAbuse: Sender Address Domain - tromey.com X-BWhitelist: no X-Source-IP: 174.16.104.48 X-Source-L: No X-Exim-ID: 1joYsT-0032x6-Q1 X-Source: X-Source-Args: X-Source-Dir: X-Source-Sender: 174-16-104-48.hlrn.qwest.net (bapiya) [174.16.104.48]:58418 X-Source-Auth: tom+tromey.com X-Email-Count: 9 X-Source-Cap: ZWx5bnJvYmk7ZWx5bnJvYmk7Ym94NTM3OS5ibHVlaG9zdC5jb20= X-Local-Domain: yes X-Spam-Score: 0.7 (/) X-Debbugs-Envelope-To: 41897 Cc: Simen =?utf-8?Q?Heggest=C3=B8yl?= , 41897@debbugs.gnu.org, Dmitry Gutov X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: debbugs-submit-bounces@debbugs.gnu.org Sender: "Debbugs-submit" X-Spam-Score: -0.3 (/) >>>>> "Alan" == Alan Mackenzie writes: Alan> Having several major modes in a single buffer has always been problematic Alan> in Emacs. Personally, I think there needs to be amendments in the Alan> low-level C code to support it properly, but I'm not able to do this work Alan> on my own, and there doesn't seem to be enough enthusiasm on other Alan> people's part to help out. mhtml-mode was a stab at making this work. It does require some more changes in Emacs (there's another bug open about font-lock that requires some changes to the font-lock code, but there are also a few more I could list), but I didn't come across anything requiring C changes. What changes are you thinking of? Dmitry> TBH I'm not sure if mhtml-mode does the save-and-restore dance which Dmitry> would be necessary for this. mmm-mode does, though. It does. Whatever happened to the idea of pulling mmm into Emacs core? Maybe we could get rid of mhtml-mode. Tom From debbugs-submit-bounces@debbugs.gnu.org Thu Jun 25 17:14:48 2020 Received: (at 41897) by debbugs.gnu.org; 25 Jun 2020 21:14:48 +0000 Received: from localhost ([127.0.0.1]:41344 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1joZCq-0002P6-BF for submit@debbugs.gnu.org; Thu, 25 Jun 2020 17:14:48 -0400 Received: from mail-ed1-f47.google.com ([209.85.208.47]:45229) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1joZCo-0002On-6T for 41897@debbugs.gnu.org; Thu, 25 Jun 2020 17:14:47 -0400 Received: by mail-ed1-f47.google.com with SMTP id t21so5323239edr.12 for <41897@debbugs.gnu.org>; Thu, 25 Jun 2020 14:14:46 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=sender:subject:to:cc:references:from:message-id:date:user-agent :mime-version:in-reply-to:content-language:content-transfer-encoding; bh=C7rVJ36wsjc+lyg8NrNYZwz3dw+4gIwjQNTIH88YCw8=; b=l4EwDDd/wLPkxy/yB2VAx3MtegyWOmPtxd45RxMrnzcz3UmxTtKgEl2a7YNR9ZXiLZ TglcUAk1Ywd1EpyEoVdroWsCXtoB39t8FGHkd1q30fjogPhZQ5n3G7s8yNNwZa9gNuia nGuNQRi41fdom0csrsEc5gm3kYkht8GgCGvdQ8bPlIdhYuguJw7tP2EFFoQxt3SZZi+R ustnPMrwNPbgAQqZ2k/7550JSIa9nMaQ6do9p4vmRweopAGckQ43MnMEFyGm2cCQxztO ccqf3+myW9I6j2FP5Fk2D2oUHazsCN1ueyOoys99j2SHRifBmI4mRvQoN9ZqSFVcl6Ir TBEg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:sender:subject:to:cc:references:from:message-id :date:user-agent:mime-version:in-reply-to:content-language :content-transfer-encoding; bh=C7rVJ36wsjc+lyg8NrNYZwz3dw+4gIwjQNTIH88YCw8=; b=W6M1hgJtrZ5gxRg2W70jW0CeXzbT4GuUnsZCvfRFBkYzQthKBt/7Wu4uKl5RTTMTNb ypszDFfTnCtqQhLR5XtxWJCS/SzzNtrrXKCWai2WnE3B9DFxYDwaRR7sAfdNldppmKZ1 XsS/jr5gTFR7NjCWsdLrKnvFgkkXELvAgOXJmdHJo09u4Z+L8/dK1rvelU47NW36j7rm DtY2t8k1qGwfqt9YgopAx0DyzFy88/FZ9PJWUL9s2/nNvxrGPEHPK7UfTzvFJRt7GB6g CYtiiaJKWwhIqAT+1DKLS+uzSLoFbtcAH2ggv3v/GsHU64lFODNRjDIRnkXmtDbhfspn lFMg== X-Gm-Message-State: AOAM530J9qgiAoA1tQ8jxdoVTjbbsvMJwzgwLm/qn2XA+pG7TsgazMi5 PBn9QukbVGflIU5iSMCEmTR0jpfD X-Google-Smtp-Source: ABdhPJxPo5nKNssIlobOuAit8nNzRfDaGemwSMtKvK98DQoXk0uBZBqC79kCdSMcNdu6d2KT80fb+g== X-Received: by 2002:aa7:c31a:: with SMTP id l26mr147734edq.61.1593119680040; Thu, 25 Jun 2020 14:14:40 -0700 (PDT) Received: from [192.168.0.3] ([66.205.73.129]) by smtp.googlemail.com with ESMTPSA id p34sm19889967edp.49.2020.06.25.14.14.38 (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128); Thu, 25 Jun 2020 14:14:39 -0700 (PDT) Subject: Re: bug#41897: 28.0.50; JavaScript comment filling with mhtml-mode To: Tom Tromey , Alan Mackenzie References: <20200620171827.7855.qmail@mail.muc.de> <87d05ta8z9.fsf@simenheg@gmail.com> <20200622191750.GA11506@ACM> <20200623083613.GA6957@ACM> <20200623162837.GB6957@ACM> <10235ec5-17c3-c281-b5ed-2c65a07bd02f@yandex.ru> <20200623191713.GC6957@ACM> <87sgeieujr.fsf@tromey.com> From: Dmitry Gutov Message-ID: Date: Fri, 26 Jun 2020 00:14:36 +0300 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:68.0) Gecko/20100101 Thunderbird/68.8.0 MIME-Version: 1.0 In-Reply-To: <87sgeieujr.fsf@tromey.com> Content-Type: text/plain; charset=utf-8; format=flowed Content-Language: en-US Content-Transfer-Encoding: 7bit X-Spam-Score: 0.0 (/) X-Debbugs-Envelope-To: 41897 Cc: =?UTF-8?Q?Simen_Heggest=c3=b8yl?= , 41897@debbugs.gnu.org X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: debbugs-submit-bounces@debbugs.gnu.org Sender: "Debbugs-submit" X-Spam-Score: -1.0 (-) On 25.06.2020 23:53, Tom Tromey wrote: > Dmitry> TBH I'm not sure if mhtml-mode does the save-and-restore dance which > Dmitry> would be necessary for this. mmm-mode does, though. > > It does. When moving between regions? > Whatever happened to the idea of pulling mmm into Emacs core? > Maybe we could get rid of mhtml-mode. It's in ELPA now, which is a good place to be. I'm maintaining it to keep it usable, but depending on your end goals, it might require a more significant rewrite. Help welcome. From debbugs-submit-bounces@debbugs.gnu.org Thu Jun 25 17:20:21 2020 Received: (at 41897) by debbugs.gnu.org; 25 Jun 2020 21:20:21 +0000 Received: from localhost ([127.0.0.1]:41372 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1joZIC-0002cL-NM for submit@debbugs.gnu.org; Thu, 25 Jun 2020 17:20:20 -0400 Received: from mail-ed1-f46.google.com ([209.85.208.46]:39809) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1joZI8-0002bt-MA for 41897@debbugs.gnu.org; Thu, 25 Jun 2020 17:20:19 -0400 Received: by mail-ed1-f46.google.com with SMTP id g1so5342638edv.6 for <41897@debbugs.gnu.org>; Thu, 25 Jun 2020 14:20:16 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=sender:subject:to:cc:references:from:message-id:date:user-agent :mime-version:in-reply-to:content-language:content-transfer-encoding; bh=gfURV45MZ39Px05QfC1DMaMs5IbVlpnUnMROnaSxhGM=; b=JN4hJvn4qUmp+htZyXS6Csw3QdFYRcZ9cKH2cX4qh5uCTuOnY6/OLjRbuwmIWzkQ/C 73BmcboLWAwn/K2eWAEnYsP2GA6FJQSeeTGVI4OJNdKoO4ODbXKl1ms9Ee7p0gfGIZJR L7nQgy6Oqqaaz5Bwc7QnS11CDSbBkxlkE70q8Br7hB4u/47fOgEk0swTgAKS7qnnYMx6 B1y9oN05WchbcLIx4d8XJnBDyxmO9MgorZEmE1jP2VzlHWHMuWv/linbz12/jYQTs3zV n38HCkzQsYzJaeEgPnOmHRepswiXiAiSqvXpZHeUpABW8WWJclMM3fKXVVOC1ZdUOhJq btQg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:sender:subject:to:cc:references:from:message-id :date:user-agent:mime-version:in-reply-to:content-language :content-transfer-encoding; bh=gfURV45MZ39Px05QfC1DMaMs5IbVlpnUnMROnaSxhGM=; b=b1p1NTZ3+T+EmBcSSskwC8BT21AoZNXMQH5IyW3kJUPvyv7LTz9CvRdZZFM/pzQQ2A ZWgJXqXjyQhy8JAugUN36AfVw/j0BTQ95XGcHhsFH8+HeqHIRn04xeQk0Q9hUD9XDzvt Kp2IfxJrwtstf7Fi+sELaePlaHfHW2rCVpe4OfQdRRH0/lhv+cE/4v3cYEtNx3d6DK9c 7KOcwIBKkutXL021Mtm5jS3hLA5DMDHPd0v8Fcq/kqRIX3dj45vegVvoGFktzjNSexPm 5V9rPozqr8bO/heRy8HQy0zSWOqRfR5wlm2oJXTubBc3nU+V7eFDIwUnVzVKUE52LThv /QQw== X-Gm-Message-State: AOAM530qUOVO5nKn1O38yxVffpl2KiDeo+WQtNhl4iof7EiKQoRyaf+h 7UIHiCAKleJmz+iw5E+/SNiP+Ph5 X-Google-Smtp-Source: ABdhPJzjS8qNhBptqVWtpASNw1rzhAkVvBLDXQnJR9C95C8bq38HaDvqV9n9UJvKhFNpCLbBkHtBnw== X-Received: by 2002:a05:6402:31b8:: with SMTP id dj24mr193448edb.188.1593120010513; Thu, 25 Jun 2020 14:20:10 -0700 (PDT) Received: from [192.168.0.3] ([66.205.73.129]) by smtp.googlemail.com with ESMTPSA id y21sm17246101ejp.32.2020.06.25.14.20.09 (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128); Thu, 25 Jun 2020 14:20:09 -0700 (PDT) Subject: Re: bug#41897: 28.0.50; JavaScript comment filling with mhtml-mode To: Alan Mackenzie References: <20200623191713.GC6957@ACM> <4c6a9c40-a72c-1413-4e08-c7097f8bc407@yandex.ru> <20200624174333.GA8870@ACM> <20200625163301.GA10342@ACM> <20200625180722.GC10342@ACM> <20200625191359.GD10342@ACM> <70532224-5beb-b311-648c-fda352de88cb@yandex.ru> <20200625201100.GE10342@ACM> From: Dmitry Gutov Message-ID: Date: Fri, 26 Jun 2020 00:20:07 +0300 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:68.0) Gecko/20100101 Thunderbird/68.8.0 MIME-Version: 1.0 In-Reply-To: <20200625201100.GE10342@ACM> Content-Type: text/plain; charset=utf-8; format=flowed Content-Language: en-US Content-Transfer-Encoding: 7bit X-Spam-Score: 0.0 (/) X-Debbugs-Envelope-To: 41897 Cc: =?UTF-8?Q?Simen_Heggest=c3=b8yl?= , 41897@debbugs.gnu.org X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: debbugs-submit-bounces@debbugs.gnu.org Sender: "Debbugs-submit" X-Spam-Score: -1.0 (-) On 25.06.2020 23:11, Alan Mackenzie wrote: > Sluggish performance isn't about "usually" and 98% of the time; it's > about unusual constellations and the other 2%. Still, a slow-ish fill-paragraph is nowhere near as bad as, say, slowdown during typing. >>> Then why not do in mmm-mode what I'm doing in CC Mode, mhtml-mode and >>> js-mode, i.e. add ad hoc code to handle precisely the case of js-mode? > >> That would be something every user that configures a submode class using >> js-mode have to be aware of. That's not easy to document, or even if we >> made sure it's documented, to be sure that users read it. > > Are you telling me that mmm-mode couldn't keep a watch out for js-mode, > leaving other libraries untroubled? Again, the trouble here appears to > arise from using something (a mode) without first initialising it. Sounds like special-casing js-mode, before-change-functions and this particular function all together. Basically, like a magic constant in the code. This is ultimately doable, but I'm not sure how to write a patch for it which wouldn't leave me feeling dirty after. >> These do seem to be the options: some C core support (though I'm not >> clear on the particulars of the proposed design), or switching from >> ad-hoc caches to syntax-propertize-function and and associated >> syntax-ppss cache. > > The syntax-propertize-function approach is poor design. It restricts the > use of the syntax-table text property too much. syntax-ppss has had a > troubled history and doesn't do the right thing in narrowed buffers. It > advertises itself as a magic wand which does everything, but when you've > been enticed into committing your SW to it, you then find out it's less > than magic, and you've got to call ugly functions by hand at strange > times, and are restricted in how and when you can use it. Despite certain edge cases, I've had a lot of success with it. Both in major modes, and in mmm-mode thanks to it. From debbugs-submit-bounces@debbugs.gnu.org Fri Jun 26 12:31:58 2020 Received: (at 41897) by debbugs.gnu.org; 26 Jun 2020 16:31:58 +0000 Received: from localhost ([127.0.0.1]:42989 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1jorGg-0008Tf-JD for submit@debbugs.gnu.org; Fri, 26 Jun 2020 12:31:58 -0400 Received: from colin.muc.de ([193.149.48.1]:63085 helo=mail.muc.de) by debbugs.gnu.org with smtp (Exim 4.84_2) (envelope-from ) id 1jorGb-0008TJ-PH for 41897@debbugs.gnu.org; Fri, 26 Jun 2020 12:31:57 -0400 Received: (qmail 20810 invoked by uid 3782); 26 Jun 2020 16:31:46 -0000 Received: from acm.muc.de (p4fe15a5a.dip0.t-ipconnect.de [79.225.90.90]) by localhost.muc.de (tmda-ofmipd) with ESMTP; Fri, 26 Jun 2020 18:31:45 +0200 Received: (qmail 9505 invoked by uid 1000); 26 Jun 2020 16:31:46 -0000 Date: Fri, 26 Jun 2020 16:31:46 +0000 To: Tom Tromey Subject: Re: bug#41897: 28.0.50; JavaScript comment filling with mhtml-mode Message-ID: <20200626163146.GA9041@ACM> References: <20200620171827.7855.qmail@mail.muc.de> <87d05ta8z9.fsf@simenheg@gmail.com> <20200622191750.GA11506@ACM> <20200623083613.GA6957@ACM> <20200623162837.GB6957@ACM> <10235ec5-17c3-c281-b5ed-2c65a07bd02f@yandex.ru> <20200623191713.GC6957@ACM> <87sgeieujr.fsf@tromey.com> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <87sgeieujr.fsf@tromey.com> X-Delivery-Agent: TMDA/1.1.12 (Macallan) From: Alan Mackenzie X-Primary-Address: acm@muc.de X-Spam-Score: 0.0 (/) X-Debbugs-Envelope-To: 41897 Cc: Simen =?iso-8859-1?Q?Heggest=F8yl?= , 41897@debbugs.gnu.org, Dmitry Gutov X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: debbugs-submit-bounces@debbugs.gnu.org Sender: "Debbugs-submit" X-Spam-Score: -1.0 (-) Hello, Tom. On Thu, Jun 25, 2020 at 14:53:44 -0600, Tom Tromey wrote: > >>>>> "Alan" == Alan Mackenzie writes: > Alan> Having several major modes in a single buffer has always been problematic > Alan> in Emacs. Personally, I think there needs to be amendments in the > Alan> low-level C code to support it properly, but I'm not able to do this work > Alan> on my own, and there doesn't seem to be enough enthusiasm on other > Alan> people's part to help out. > mhtml-mode was a stab at making this work. It does require some more > changes in Emacs (there's another bug open about font-lock that requires > some changes to the font-lock code, but there are also a few more I > could list), but I didn't come across anything requiring C changes. > What changes are you thinking of? In 2016, I came up with a preliminary, but detailed, design for "islands" which would make several major modes per buffer natively and naturally supported, without awkward workarounds. This included "island-local" variables to supplement buffer-local variables. All this would be implemented at the C level and would obviate the awkward pre/post-command-hook functions currently used by mhtml-mode for swapping in and out the buffer local variables. The post to emacs-devel which started the discussion was: Subject: A vision for multiple major modes: some design notes To: emacs-devel@gnu.org, Dmitry Gutov Date: Wed, 20 Apr 2016 19:44:50 +0000 Although interest was expressed, in the end there was nobody else jumping up shouting "hey, that's great! Can I help?" (not that I specifically asked for help), so the idea didn't advance beyond that preliminary design. I still think that parts of it could be helpful in mmm-mode (or its successor). > Dmitry> TBH I'm not sure if mhtml-mode does the save-and-restore dance which > Dmitry> would be necessary for this. mmm-mode does, though. > It does. Whatever happened to the idea of pulling mmm into Emacs core? > Maybe we could get rid of mhtml-mode. > Tom -- Alan Mackenzie (Nuremberg, Germany). From debbugs-submit-bounces@debbugs.gnu.org Fri Jun 26 12:46:14 2020 Received: (at 41897) by debbugs.gnu.org; 26 Jun 2020 16:46:14 +0000 Received: from localhost ([127.0.0.1]:42993 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1jorUT-0000Md-TR for submit@debbugs.gnu.org; Fri, 26 Jun 2020 12:46:14 -0400 Received: from colin.muc.de ([193.149.48.1]:63696 helo=mail.muc.de) by debbugs.gnu.org with smtp (Exim 4.84_2) (envelope-from ) id 1jorUQ-0000MM-Ky for 41897@debbugs.gnu.org; Fri, 26 Jun 2020 12:46:12 -0400 Received: (qmail 31148 invoked by uid 3782); 26 Jun 2020 16:46:03 -0000 Received: from acm.muc.de (p4fe15a5a.dip0.t-ipconnect.de [79.225.90.90]) by localhost.muc.de (tmda-ofmipd) with ESMTP; Fri, 26 Jun 2020 18:46:02 +0200 Received: (qmail 9554 invoked by uid 1000); 26 Jun 2020 16:46:02 -0000 Date: Fri, 26 Jun 2020 16:46:02 +0000 To: Tom Tromey Subject: Re: bug#41897: 28.0.50; JavaScript comment filling with mhtml-mode Message-ID: <20200626164602.GB9041@ACM> References: <20200620171827.7855.qmail@mail.muc.de> <87d05ta8z9.fsf@simenheg@gmail.com> <20200622191750.GA11506@ACM> <87v9jeeuq2.fsf@tromey.com> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <87v9jeeuq2.fsf@tromey.com> X-Delivery-Agent: TMDA/1.1.12 (Macallan) From: Alan Mackenzie X-Primary-Address: acm@muc.de X-Spam-Score: 0.0 (/) X-Debbugs-Envelope-To: 41897 Cc: Simen =?iso-8859-1?Q?Heggest=F8yl?= , acm@muc.de, 41897@debbugs.gnu.org X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: debbugs-submit-bounces@debbugs.gnu.org Sender: "Debbugs-submit" X-Spam-Score: -1.0 (-) Hello, Tom. On Thu, Jun 25, 2020 at 14:49:57 -0600, Tom Tromey wrote: > >>>>> "Alan" == Alan Mackenzie writes: > Alan> (ii) An enhancement to CC Mode, used by mhtml-mode and js-mode, which > Alan> invalidates a CC Mode cache used by the filling code. This gets rid of > Alan> a few strange looking bugs; > I wonder if js-mode can be changed not to use cc-mode like this. The main filling function in CC Mode is 390 lines long. It deals with lots of special cases, like comment markers being or not being on lines by themselves, and so on. It's understandable to want to reuse it rather than copying it into a js-... function. > Looking at js.el, it seems like this is the origin of a use of advice > in-core, which is generally frowned upon: > ;; FIXME: Such redefinitions are bad style. We should try and use some other > ;; way to get the same result. > (defun js--fill-c-advice (js-fun) > ... Funnily enough, as CC Mode maintainer, I don't find this artifice particularly objectionable. Advice has its uses, even in the core. > Tom -- Alan Mackenzie (Nuremberg, Germany). From debbugs-submit-bounces@debbugs.gnu.org Sat Jun 27 07:07:09 2020 Received: (at 41897) by debbugs.gnu.org; 27 Jun 2020 11:07:09 +0000 Received: from localhost ([127.0.0.1]:43537 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1jp8fh-0005DI-Lr for submit@debbugs.gnu.org; Sat, 27 Jun 2020 07:07:09 -0400 Received: from colin.muc.de ([193.149.48.1]:48771 helo=mail.muc.de) by debbugs.gnu.org with smtp (Exim 4.84_2) (envelope-from ) id 1jp8fg-0005D4-FD for 41897@debbugs.gnu.org; Sat, 27 Jun 2020 07:06:57 -0400 Received: (qmail 38959 invoked by uid 3782); 27 Jun 2020 11:06:49 -0000 Received: from acm.muc.de (p2e5d5209.dip0.t-ipconnect.de [46.93.82.9]) by localhost.muc.de (tmda-ofmipd) with ESMTP; Sat, 27 Jun 2020 13:06:49 +0200 Received: (qmail 7195 invoked by uid 1000); 27 Jun 2020 11:06:48 -0000 Date: Sat, 27 Jun 2020 11:06:48 +0000 To: Dmitry Gutov Subject: Re: bug#41897: 28.0.50; JavaScript comment filling with mhtml-mode Message-ID: <20200627110648.GA5155@ACM> References: <20200624174333.GA8870@ACM> <20200625163301.GA10342@ACM> <20200625180722.GC10342@ACM> <20200625191359.GD10342@ACM> <70532224-5beb-b311-648c-fda352de88cb@yandex.ru> <20200625201100.GE10342@ACM> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: X-Delivery-Agent: TMDA/1.1.12 (Macallan) From: Alan Mackenzie X-Primary-Address: acm@muc.de X-Spam-Score: 0.0 (/) X-Debbugs-Envelope-To: 41897 Cc: Simen =?iso-8859-1?Q?Heggest=F8yl?= , acm@muc.de, 41897@debbugs.gnu.org X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: debbugs-submit-bounces@debbugs.gnu.org Sender: "Debbugs-submit" X-Spam-Score: -1.0 (-) Hello, Dmitry. On Fri, Jun 26, 2020 at 00:20:07 +0300, Dmitry Gutov wrote: > On 25.06.2020 23:11, Alan Mackenzie wrote: > > Sluggish performance isn't about "usually" and 98% of the time; it's > > about unusual constellations and the other 2%. > Still, a slow-ish fill-paragraph is nowhere near as bad as, say, > slowdown during typing. We're talking about a long pause at the end of each line when typing in a longish block comment whilst auto-fill-mode is enabled. > >>> Then why not do in mmm-mode what I'm doing in CC Mode, mhtml-mode and > >>> js-mode, i.e. add ad hoc code to handle precisely the case of js-mode? > >> That would be something every user that configures a submode class using > >> js-mode have to be aware of. That's not easy to document, or even if we > >> made sure it's documented, to be sure that users read it. > > Are you telling me that mmm-mode couldn't keep a watch out for js-mode, > > leaving other libraries untroubled? Again, the trouble here appears to > > arise from using something (a mode) without first initialising it. > Sounds like special-casing js-mode, before-change-functions and this > particular function all together. Basically, like a magic constant in > the code. > This is ultimately doable, but I'm not sure how to write a patch for it > which wouldn't leave me feeling dirty after. If I understand correctly, there is already special case code for js-mode anyway, in mmm-erb.el. The :creation-hook for js-mode is currently set to mmm-erb-mark-as-special, a function shared with ruby-mode. Would it really be all that distressing to write a new :creation-hook for js-mode which additionally initialises the part of CC Mode which needs it? We'd be talking about something like (defun mmm-js-init () "Doc string." (overlay-put mmm-current-overlay 'mmm-special-tag t) (c-foreign-init-lit-pos-cache) (add-hook 'before-change-functions #'c-foreign-truncate-lit-pos-cache nil t)) . Would that really be so bad? It would even be possible to move the explicit add-hook into a small function in CC Mode and call that instead. But I think it's better to see the add-hook where it might make a difference. That's all assuming I've understood mmm-mode properly. [ .... ] -- Alan Mackenzie (Nuremberg, Germany). From debbugs-submit-bounces@debbugs.gnu.org Sat Jun 27 20:18:27 2020 Received: (at 41897) by debbugs.gnu.org; 28 Jun 2020 00:18:27 +0000 Received: from localhost ([127.0.0.1]:44784 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1jpL1f-0004Ak-6Z for submit@debbugs.gnu.org; Sat, 27 Jun 2020 20:18:27 -0400 Received: from mail-ej1-f45.google.com ([209.85.218.45]:43276) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1jpL1b-0004AW-JG for 41897@debbugs.gnu.org; Sat, 27 Jun 2020 20:18:26 -0400 Received: by mail-ej1-f45.google.com with SMTP id l12so12744932ejn.10 for <41897@debbugs.gnu.org>; Sat, 27 Jun 2020 17:18:23 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=sender:subject:to:cc:references:from:message-id:date:user-agent :mime-version:in-reply-to:content-language:content-transfer-encoding; bh=YKw4kRJQ5l0EuzfGIz1noP2vBqoud153p8VCx8Bh49s=; b=VuEQUmPtlV4z13SGBOD0gSu1rhw63dgXasHwlLRfUnvncabsu8oq+E/rLskwV48dT4 N30uPaa9hlgE3LlOAhsuv10dls2P+RmjuLZiypz3tNNfpO4G0u849OWrHhwyTAeb36Qw IaXYnlLEeJUHSSCnMmJbtfbApme8Ov0EavfLfffdAmnhaOsir2WlUoJRHq8Kbd0Tac+X tkmyABZSlL2jD/iGSLue27e8WCKLSJV18q9pH9j7oZTMkdQsdGnHtvg1ZeuMnsMljoO9 7OilWuf2n+B/VtnHmVEDOgeCTFVw9h24Xz1MGXk9a/rkJ0x3Sj3FIGkykCkvpQODwT8K sAtQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:sender:subject:to:cc:references:from:message-id :date:user-agent:mime-version:in-reply-to:content-language :content-transfer-encoding; bh=YKw4kRJQ5l0EuzfGIz1noP2vBqoud153p8VCx8Bh49s=; b=ESNM/htf0Rj/HxN9qxP9HzTX67E4hWIgxU9tv5MVVrK31VCuFOS6Gqmc01vCmTQcQt rBuXpgde5mhBobiOscy4XNfu1I2U12FO4ayFL8Ae/X1ws6xy5XkEGIn3+UDJGTn4/hUd 3/R3nhqg7UgKzn0xkNB8/rSD6ft1rPPM8suWmmScCqp4XkF/IT3j95btIkV1FHcQnEhA 6dXWL/Qo62xRXY1TtrkB8XtXXa5u0RoBycKmBdE455DX28duwyhCMN7IYIlOkfLv0Cte vQcHdQJLNx33wqKgd5nIxCQBN/ijLSMhYG/9dNzPzQTaUvOmvT9ErVCBmJgguKZ2Virc /M4g== X-Gm-Message-State: AOAM532VS1kvJf5L7vUtFh0qK763QR+3p2U8eXKOhEjw1GKDi+fUQS4a 5chH/3+A7tTNaWwUCO0qnLJrHU42 X-Google-Smtp-Source: ABdhPJwCwu6A7lxbQfczypYZMKwuHSFuVv8vqm8xQzQEpxlFaWXiuQyWfP3nV++tbSt8MQgf9rP7MA== X-Received: by 2002:a17:906:455:: with SMTP id e21mr8671169eja.550.1593303497421; Sat, 27 Jun 2020 17:18:17 -0700 (PDT) Received: from [192.168.0.3] ([66.205.73.129]) by smtp.googlemail.com with ESMTPSA id q25sm5965682ejz.97.2020.06.27.17.18.15 (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128); Sat, 27 Jun 2020 17:18:16 -0700 (PDT) Subject: Re: bug#41897: 28.0.50; JavaScript comment filling with mhtml-mode To: Alan Mackenzie References: <20200624174333.GA8870@ACM> <20200625163301.GA10342@ACM> <20200625180722.GC10342@ACM> <20200625191359.GD10342@ACM> <70532224-5beb-b311-648c-fda352de88cb@yandex.ru> <20200625201100.GE10342@ACM> <20200627110648.GA5155@ACM> From: Dmitry Gutov Message-ID: Date: Sun, 28 Jun 2020 03:18:15 +0300 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:68.0) Gecko/20100101 Thunderbird/68.8.0 MIME-Version: 1.0 In-Reply-To: <20200627110648.GA5155@ACM> Content-Type: text/plain; charset=utf-8; format=flowed Content-Language: en-US Content-Transfer-Encoding: 7bit X-Spam-Score: 0.0 (/) X-Debbugs-Envelope-To: 41897 Cc: =?UTF-8?Q?Simen_Heggest=c3=b8yl?= , 41897@debbugs.gnu.org X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: debbugs-submit-bounces@debbugs.gnu.org Sender: "Debbugs-submit" X-Spam-Score: -1.0 (-) On 27.06.2020 14:06, Alan Mackenzie wrote: > Hello, Dmitry. > > On Fri, Jun 26, 2020 at 00:20:07 +0300, Dmitry Gutov wrote: >> On 25.06.2020 23:11, Alan Mackenzie wrote: > >>> Sluggish performance isn't about "usually" and 98% of the time; it's >>> about unusual constellations and the other 2%. > >> Still, a slow-ish fill-paragraph is nowhere near as bad as, say, >> slowdown during typing. > > We're talking about a long pause at the end of each line when typing in > a longish block comment whilst auto-fill-mode is enabled. OK, that's an argument. I'm inclined to believe it should be acceptably small for all such files in practice, but I don't have any solid data to back that up. >>>>> Then why not do in mmm-mode what I'm doing in CC Mode, mhtml-mode and >>>>> js-mode, i.e. add ad hoc code to handle precisely the case of js-mode? > >>>> That would be something every user that configures a submode class using >>>> js-mode have to be aware of. That's not easy to document, or even if we >>>> made sure it's documented, to be sure that users read it. > >>> Are you telling me that mmm-mode couldn't keep a watch out for js-mode, >>> leaving other libraries untroubled? Again, the trouble here appears to >>> arise from using something (a mode) without first initialising it. > >> Sounds like special-casing js-mode, before-change-functions and this >> particular function all together. Basically, like a magic constant in >> the code. > >> This is ultimately doable, but I'm not sure how to write a patch for it >> which wouldn't leave me feeling dirty after. > > If I understand correctly, there is already special case code for js-mode > anyway, in mmm-erb.el. The :creation-hook for js-mode is currently set > to mmm-erb-mark-as-special, a function shared with ruby-mode. Good find, in a way: to satisfy your requirement, :creation-hook is likely the property to use. But the code you pointed to (mmm-erb.el) contains specialized major mode that uses js-mode, among other modes, to implement support for ERB, EJS and JSP templates, together with indentation logic. It is also the only built-in example of a major mode in mmm-mode. Whereas people use js-mode also in other contexts, a lot of the time in configurations that they create themselves (called submode classes, which are then associated with existing major modes, to be used as "primary" mode, and file extensions). As such, any user who creates such a configuration involving js-mode will need to be aware of c-foreign-init-lit-pos-cache and c-foreign-truncate-lit-pos-cache. > Would it really be all that distressing to write a new :creation-hook for > js-mode which additionally initialises the part of CC Mode which needs > it? We'd be talking about something like > > (defun mmm-js-init () > "Doc string." > (overlay-put mmm-current-overlay 'mmm-special-tag t) > (c-foreign-init-lit-pos-cache) > (add-hook 'before-change-functions #'c-foreign-truncate-lit-pos-cache nil t)) It's not by itself distressing as long the one who needs to write it remembers and understands its necessity. In any case, I tried this solution together with the patch you attached (assuming patching the code and evaluating the new contents of cc-engine.el should be enough to make it work), but it didn't help with the same scenario in html-erb-mode. It didn't make anything worse, though. Since mmm-mode is actually out of scope of this bug report, though, perhaps I should stop with this thread of discussion. From debbugs-submit-bounces@debbugs.gnu.org Sat Jul 04 09:13:32 2020 Received: (at 41897-done) by debbugs.gnu.org; 4 Jul 2020 13:13:32 +0000 Received: from localhost ([127.0.0.1]:58271 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1jrhz1-0002gq-LB for submit@debbugs.gnu.org; Sat, 04 Jul 2020 09:13:32 -0400 Received: from colin.muc.de ([193.149.48.1]:28614 helo=mail.muc.de) by debbugs.gnu.org with smtp (Exim 4.84_2) (envelope-from ) id 1jrhyz-0002gc-CZ for 41897-done@debbugs.gnu.org; Sat, 04 Jul 2020 09:13:30 -0400 Received: (qmail 65256 invoked by uid 3782); 4 Jul 2020 13:13:22 -0000 Received: from acm.muc.de (p2e5d5832.dip0.t-ipconnect.de [46.93.88.50]) by localhost.muc.de (tmda-ofmipd) with ESMTP; Sat, 04 Jul 2020 15:13:22 +0200 Received: (qmail 19064 invoked by uid 1000); 4 Jul 2020 13:13:22 -0000 Date: Sat, 4 Jul 2020 13:13:22 +0000 To: Simen =?iso-8859-1?Q?Heggest=F8yl?= Subject: Re: bug#41897: 28.0.50; JavaScript comment filling with mhtml-mode Message-ID: <20200704131322.GA19042@ACM> References: <20200620171827.7855.qmail@mail.muc.de> <87d05ta8z9.fsf@simenheg@gmail.com> <20200622191750.GA11506@ACM> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <20200622191750.GA11506@ACM> X-Delivery-Agent: TMDA/1.1.12 (Macallan) From: Alan Mackenzie X-Primary-Address: acm@muc.de X-Spam-Score: 0.0 (/) X-Debbugs-Envelope-To: 41897-done Cc: Tom Tromey , 41897-done@debbugs.gnu.org, Dmitry Gutov X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: debbugs-submit-bounces@debbugs.gnu.org Sender: "Debbugs-submit" X-Spam-Score: -1.0 (-) Hello, Simen. On Mon, Jun 22, 2020 at 19:17:50 +0000, Alan Mackenzie wrote: > We're gradually converging on working code. Since yesterday, the > improvements are: > (i) (slightly) better handling of auto-fill-mode, which is no longer > automatically enabled; > (ii) An enhancement to CC Mode, used by mhtml-mode and js-mode, which > invalidates a CC Mode cache used by the filling code. This gets rid of > a few strange looking bugs; > (iii) The inclusion of "paragraph-" in the "crucial variables" thing, so > that paragraph-start and paragraph-separate from js-mode get into > mhtml-mode. I've committed more or less the patch from my post of 2020-06-22, which I'm convinced fixes the bug. I'm closing the bug with this post. [ .... ] -- Alan Mackenzie (Nuremberg, Germany). From unknown Fri Sep 12 05:30:36 2025 Received: (at fakecontrol) by fakecontrolmessage; To: internal_control@debbugs.gnu.org From: Debbugs Internal Request Subject: Internal Control Message-Id: bug archived. Date: Sun, 02 Aug 2020 11:24:07 +0000 User-Agent: Fakemail v42.6.9 # This is a fake control message. # # The action: # bug archived. thanks # This fakemail brought to you by your local debbugs # administrator