From mboxrd@z Thu Jan 1 00:00:00 1970 Path: news.gmane.org!.POSTED!not-for-mail From: Simen =?UTF-8?Q?Heggest=C3=B8yl?= Newsgroups: gmane.emacs.bugs Subject: bug#13425: close this bug? Date: Thu, 02 Feb 2017 20:12:14 +0100 Message-ID: <1486062734.11108.0@smtp.gmail.com> References: <87efzqhh93.fsf@tromey.com> <1485711505.6518.0@smtp.gmail.com> <1485711505.6518.0@smtp.gmail.com> <"Simen =?UTF-8?Q?Heggest=C3=B8=3D=3FUTF-8=3FQ=3Fyl?="'s_message_of_"Sun, _29_Jan_2017_18:38:25_+0100"> NNTP-Posting-Host: blaine.gmane.org Mime-Version: 1.0 Content-Type: multipart/mixed; boundary="=-QA5GbWI4koA1TI4QsdlF" X-Trace: blaine.gmane.org 1486062799 32409 195.159.176.226 (2 Feb 2017 19:13:19 GMT) X-Complaints-To: usenet@blaine.gmane.org NNTP-Posting-Date: Thu, 2 Feb 2017 19:13:19 +0000 (UTC) Cc: 13425@debbugs.gnu.org, Tom Tromey To: Stefan Monnier Original-X-From: bug-gnu-emacs-bounces+geb-bug-gnu-emacs=m.gmane.org@gnu.org Thu Feb 02 20:13:13 2017 Return-path: Envelope-to: geb-bug-gnu-emacs@m.gmane.org Original-Received: from lists.gnu.org ([208.118.235.17]) by blaine.gmane.org with esmtp (Exim 4.84_2) (envelope-from ) id 1cZMoe-0007zl-Vl for geb-bug-gnu-emacs@m.gmane.org; Thu, 02 Feb 2017 20:13:09 +0100 Original-Received: from localhost ([::1]:58540 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1cZMoi-0005DB-QD for geb-bug-gnu-emacs@m.gmane.org; Thu, 02 Feb 2017 14:13:12 -0500 Original-Received: from eggs.gnu.org ([2001:4830:134:3::10]:46289) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1cZMoc-0005Ck-3C for bug-gnu-emacs@gnu.org; Thu, 02 Feb 2017 14:13:07 -0500 Original-Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1cZMoY-0004Lw-Rz for bug-gnu-emacs@gnu.org; Thu, 02 Feb 2017 14:13:06 -0500 Original-Received: from debbugs.gnu.org ([208.118.235.43]:56059) by eggs.gnu.org with esmtps (TLS1.0:RSA_AES_128_CBC_SHA1:16) (Exim 4.71) (envelope-from ) id 1cZMoY-0004Ls-Nd for bug-gnu-emacs@gnu.org; Thu, 02 Feb 2017 14:13:02 -0500 Original-Received: from Debian-debbugs by debbugs.gnu.org with local (Exim 4.84_2) (envelope-from ) id 1cZMoY-00043Z-Hy for bug-gnu-emacs@gnu.org; Thu, 02 Feb 2017 14:13:02 -0500 X-Loop: help-debbugs@gnu.org Resent-From: Simen =?UTF-8?Q?Heggest=C3=B8yl?= Original-Sender: "Debbugs-submit" Resent-CC: bug-gnu-emacs@gnu.org Resent-Date: Thu, 02 Feb 2017 19:13:02 +0000 Resent-Message-ID: Resent-Sender: help-debbugs@gnu.org X-GNU-PR-Message: followup 13425 X-GNU-PR-Package: emacs X-GNU-PR-Keywords: Original-Received: via spool by 13425-submit@debbugs.gnu.org id=B13425.148606274515537 (code B ref 13425); Thu, 02 Feb 2017 19:13:02 +0000 Original-Received: (at 13425) by debbugs.gnu.org; 2 Feb 2017 19:12:25 +0000 Original-Received: from localhost ([127.0.0.1]:54258 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1cZMnx-00042W-Dy for submit@debbugs.gnu.org; Thu, 02 Feb 2017 14:12:25 -0500 Original-Received: from mail-lf0-f41.google.com ([209.85.215.41]:36571) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1cZMnv-00042J-1E for 13425@debbugs.gnu.org; Thu, 02 Feb 2017 14:12:23 -0500 Original-Received: by mail-lf0-f41.google.com with SMTP id z134so13789651lff.3 for <13425@debbugs.gnu.org>; Thu, 02 Feb 2017 11:12:22 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=date:from:subject:to:cc:message-id:in-reply-to:references :mime-version; bh=S9nObAgVZoWWFW15eIqfhtOatQNjawINVn6HgQI1XLM=; b=iL+T0PnSHUGE6kFVeq9cM4jmio9EkNR2Bn7aXJY1JxokAdItq4JksJ1qdVGMJNfZlX BUkwe8MYzMusWVmcFWkeHbAXcsjkDL/bwILDE8WANUmWRi3nws0t1oVbQQxRcCHG21RS YKuawKLuD8wla98KLpkYyhDDRxCXMeLIlDP8UHoOJRrGyO0zA0AR4wAg8t4x8f/PKU00 r7holkim5ef1tqJW5t/Ce+41rfFLfz35v88QyuK8FcqAK8Qji6xbkuDxN+d/MVqYsipF gtKRP/3ql184SUc9NJcVb76F+3OX4eo6mEDtZCuggJfHjXN5mEF4Q/Znb8haiCQ9qOQT Vxag== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:date:from:subject:to:cc:message-id:in-reply-to :references:mime-version; bh=S9nObAgVZoWWFW15eIqfhtOatQNjawINVn6HgQI1XLM=; b=hSF/ghrP7Z/H2GU5ysOmgKMj1kPa7y0YxJlB1tBVjmyAcJrLkm7iR+CGCj6p1+ryvl WkQjHmjirF0znOHJ+k8tpOgBC1vtWAK9ykkdN2EN6i5i8dc3wXqDH4gYnEMBQNdrYf3m 45SXLZgWqJl04lGwyDYQDFeiFAkZJdn5Lv8FoUtlB4zsty9HWqwbHEVcunIo0c7kkYjn nT+q4nOD5g4X4o1rBwTXupd8nAsx+xnYYLgfnsOBdDOt7B5bbSIM7r3+A0nroBipdALf 9xT3cnnmMp+QftfScA4rdwOzQXAKOgupsdAR30SDCFNL8vVVO1RS+FW1iL8GI6oA7+YV 2K7g== X-Gm-Message-State: AIkVDXICzPieWFVsh6w2sc3sQAqUG/H7ENMJTc+R94MIVPkkm74Yz4NUhtYR2ZwQcIhVPw== X-Received: by 10.46.80.71 with SMTP id v7mr4206220ljd.38.1486062736959; Thu, 02 Feb 2017 11:12:16 -0800 (PST) Original-Received: from [192.168.100.10] (cm-84.210.143.4.getinternet.no. [84.210.143.4]) by smtp.gmail.com with ESMTPSA id d77sm6872306lfd.26.2017.02.02.11.12.15 (version=TLS1_2 cipher=ECDHE-RSA-CHACHA20-POLY1305 bits=256/256); Thu, 02 Feb 2017 11:12:16 -0800 (PST) In-Reply-To: X-Mailer: geary/0.11.3 X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list X-detected-operating-system: by eggs.gnu.org: GNU/Linux 2.2.x-3.x [generic] X-Received-From: 208.118.235.43 X-BeenThere: bug-gnu-emacs@gnu.org List-Id: "Bug reports for GNU Emacs, the Swiss army knife of text editors" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: bug-gnu-emacs-bounces+geb-bug-gnu-emacs=m.gmane.org@gnu.org Original-Sender: "bug-gnu-emacs" Xref: news.gmane.org gmane.emacs.bugs:128890 Archived-At: --=-QA5GbWI4koA1TI4QsdlF Content-Type: text/plain; charset=utf-8; format=flowed Thanks for the hints, Stefan. The attached patch seems sufficient in my tests. Do you see any problems with it? -- Simen --=-QA5GbWI4koA1TI4QsdlF Content-Type: text/x-patch Content-Disposition: attachment; filename=0001-WIP.patch >From b2772f486ab833fc5221577811a5d517dfc77742 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Simen=20Heggest=C3=B8yl?= Date: Thu, 2 Feb 2017 20:05:32 +0100 Subject: [PATCH] WIP --- lisp/textmodes/css-mode.el | 44 ++++++++++++++++++++++++++++++++++++++++---- 1 file changed, 40 insertions(+), 4 deletions(-) diff --git a/lisp/textmodes/css-mode.el b/lisp/textmodes/css-mode.el index 19f74daec6..65a599d6d4 100644 --- a/lisp/textmodes/css-mode.el +++ b/lisp/textmodes/css-mode.el @@ -32,10 +32,11 @@ ;;; Code: +(require 'eww) (require 'seq) (require 'sgml-mode) (require 'smie) -(require 'eww) +(require 'subr-x) (defgroup css nil "Cascading Style Sheets (CSS) editing mode." @@ -741,7 +742,30 @@ css-indent-offset (defconst css-smie-grammar (smie-prec2->grammar - (smie-precs->prec2 '((assoc ";") (assoc ",") (left ":"))))) + (smie-precs->prec2 + '((assoc ";") + ;; Colons that belong to a CSS property. These get a higher + ;; precedence than other colons, such as colons in selectors, + ;; which are represented by a plain ":" token. + (left ":-property") + (assoc ",") + (assoc ":"))))) + +(defun css--colon-inside-selector-p () + "Return t if point looks to be inside a CSS selector. +This function is intended to be good enough to help SMIE during +tokenization, but should not be regarded as a reliable function +for determining wheter point is within a selector." + (save-excursion + (re-search-forward "[{};)]" nil t) + (eq (char-before) ?\{))) + +(defun css--colon-inside-funcall () + "Return t if point is inside a function call." + (when-let (opening-paren-pos (nth 1 (syntax-ppss))) + (save-excursion + (goto-char opening-paren-pos) + (eq (char-after) ?\()))) (defun css-smie--forward-token () (cond @@ -755,7 +779,13 @@ css-smie--forward-token ";") ((progn (forward-comment (point-max)) (looking-at "[;,:]")) - (forward-char 1) (match-string 0)) + (forward-char 1) + (if (equal (match-string 0) ":") + (if (or (css--colon-inside-selector-p) + (css--colon-inside-funcall)) + ":" + ":-property") + (match-string 0))) (t (smie-default-forward-token)))) (defun css-smie--backward-token () @@ -766,7 +796,13 @@ css-smie--backward-token ((and (eq (char-before) ?\}) (scss-smie--not-interpolation-p) (> pos (point))) ";") ((memq (char-before) '(?\; ?\, ?\:)) - (forward-char -1) (string (char-after))) + (forward-char -1) + (if (eq (char-after) ?\:) + (if (or (css--colon-inside-selector-p) + (css--colon-inside-funcall)) + ":" + ":-property") + (string (char-after)))) (t (smie-default-backward-token))))) (defun css-smie-rules (kind token) -- 2.11.0 --=-QA5GbWI4koA1TI4QsdlF--