Browse Source

userdiff: add built-in pattern for CSS

CSS is widely used, motivating it being included as a built-in pattern.

It must be noted that the word_regex for CSS (i.e. the regex defining
what is a word in the language) does not consider '.' and '#' characters
(in CSS selectors) to be part of the word. This behavior is documented
by the test t/t4018/css-rule.
The logic behind this behavior is the following: identifiers in CSS
selectors are identifiers in a HTML/XML document. Therefore, the '.'/'#'
character are not part of the identifier, but an indicator of the nature
of the identifier in HTML/XML (class or id). Diffing ".class1" and
".class2" must show that the class name is changed, but we still are
selecting a class.

Logic behind the "pattern" regex is:
    1. reject lines ending with a colon/semicolon (properties)
    2. if a line begins with a name in column 1, pick the whole line

Credits to Johannes Sixt (j6t@kdbg.org) for the pattern regex and most
of the tests.

Signed-off-by: William Duclot <william.duclot@ensimag.grenoble-inp.fr>
Signed-off-by: Matthieu Moy <matthieu.moy@grenoble-inp.fr>
Reviewed-by: Johannes Sixt <j6t@kdbg.org>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
maint
William Duclot 9 years ago committed by Junio C Hamano
parent
commit
0719f3eecd
  1. 2
      Documentation/gitattributes.txt
  2. 1
      t/t4018-diff-funcname.sh
  3. 5
      t/t4018/css-brace-in-col-1
  4. 4
      t/t4018/css-colon-eol
  5. 5
      t/t4018/css-colon-selector
  6. 4
      t/t4018/css-common
  7. 6
      t/t4018/css-long-selector-list
  8. 5
      t/t4018/css-prop-sans-indent
  9. 4
      t/t4018/css-short-selector-list
  10. 5
      t/t4018/css-trailing-space
  11. 1
      t/t4034-diff-words.sh
  12. 16
      t/t4034/css/expect
  13. 10
      t/t4034/css/post
  14. 10
      t/t4034/css/pre
  15. 12
      userdiff.c

2
Documentation/gitattributes.txt

@ -525,6 +525,8 @@ patterns are available: @@ -525,6 +525,8 @@ patterns are available:

- `csharp` suitable for source code in the C# language.

- `css` suitable for cascading style sheets.

- `fortran` suitable for source code in the Fortran language.

- `fountain` suitable for Fountain documents.

1
t/t4018-diff-funcname.sh

@ -30,6 +30,7 @@ diffpatterns=" @@ -30,6 +30,7 @@ diffpatterns="
bibtex
cpp
csharp
css
fortran
fountain
html

5
t/t4018/css-brace-in-col-1

@ -0,0 +1,5 @@ @@ -0,0 +1,5 @@
RIGHT label.control-label
{
margin-top: 10px!important;
border : 10px ChangeMe #C6C6C6;
}

4
t/t4018/css-colon-eol

@ -0,0 +1,4 @@ @@ -0,0 +1,4 @@
RIGHT h1 {
color:
ChangeMe;
}

5
t/t4018/css-colon-selector

@ -0,0 +1,5 @@ @@ -0,0 +1,5 @@
RIGHT a:hover {
margin-top:
10px!important;
border : 10px ChangeMe #C6C6C6;
}

4
t/t4018/css-common

@ -0,0 +1,4 @@ @@ -0,0 +1,4 @@
RIGHT label.control-label {
margin-top: 10px!important;
border : 10px ChangeMe #C6C6C6;
}

6
t/t4018/css-long-selector-list

@ -0,0 +1,6 @@ @@ -0,0 +1,6 @@
p.header,
label.control-label,
div ul#RIGHT {
margin-top: 10px!important;
border : 10px ChangeMe #C6C6C6;
}

5
t/t4018/css-prop-sans-indent

@ -0,0 +1,5 @@ @@ -0,0 +1,5 @@
RIGHT, label.control-label {
margin-top: 10px!important;
padding: 0;
border : 10px ChangeMe #C6C6C6;
}

4
t/t4018/css-short-selector-list

@ -0,0 +1,4 @@ @@ -0,0 +1,4 @@
label.control, div ul#RIGHT {
margin-top: 10px!important;
border : 10px ChangeMe #C6C6C6;
}

5
t/t4018/css-trailing-space

@ -0,0 +1,5 @@ @@ -0,0 +1,5 @@
RIGHT label.control-label {
margin:10px;
padding:10px;
border : 10px ChangeMe #C6C6C6;
}

1
t/t4034-diff-words.sh

@ -302,6 +302,7 @@ test_language_driver ada @@ -302,6 +302,7 @@ test_language_driver ada
test_language_driver bibtex
test_language_driver cpp
test_language_driver csharp
test_language_driver css
test_language_driver fortran
test_language_driver html
test_language_driver java

16
t/t4034/css/expect

@ -0,0 +1,16 @@ @@ -0,0 +1,16 @@
<BOLD>diff --git a/pre b/post<RESET>
<BOLD>index b8ae0bb..fe500b7 100644<RESET>
<BOLD>--- a/pre<RESET>
<BOLD>+++ b/post<RESET>
<CYAN>@@ -1,10 +1,10 @@<RESET>
.<RED>class-form<RESET><GREEN>other-form<RESET> label.control-label {
margin-top: <RED>10<RESET><GREEN>15<RESET>px!important;
border : 10px <RED>dashed<RESET><GREEN>dotted<RESET> #C6C6C6;
}<RESET>
<RED>#CCCCCC<RESET><GREEN>#CCCCCB<RESET>
10em<RESET>
<RED>padding-bottom<RESET><GREEN>margin-left<RESET>
150<RED>px<RESET><GREEN>em<RESET>
10px
<RED>!important<RESET>
<RED>div<RESET><GREEN>li<RESET>.class#id

10
t/t4034/css/post

@ -0,0 +1,10 @@ @@ -0,0 +1,10 @@
.other-form label.control-label {
margin-top: 15px!important;
border : 10px dotted #C6C6C6;
}
#CCCCCB
10em
margin-left
150em
10px
li.class#id

10
t/t4034/css/pre

@ -0,0 +1,10 @@ @@ -0,0 +1,10 @@
.class-form label.control-label {
margin-top: 10px!important;
border : 10px dashed #C6C6C6;
}
#CCCCCC
10em
padding-bottom
150px
10px!important
div.class#id

12
userdiff.c

@ -148,6 +148,18 @@ PATTERNS("csharp", @@ -148,6 +148,18 @@ PATTERNS("csharp",
"[a-zA-Z_][a-zA-Z0-9_]*"
"|[-+0-9.e]+[fFlL]?|0[xXbB]?[0-9a-fA-F]+[lL]?"
"|[-+*/<>%&^|=!]=|--|\\+\\+|<<=?|>>=?|&&|\\|\\||::|->"),
IPATTERN("css",
"![:;][[:space:]]*$\n"
"^[_a-z0-9].*$",
/* -- */
/*
* This regex comes from W3C CSS specs. Should theoretically also
* allow ISO 10646 characters U+00A0 and higher,
* but they are not handled in this regex.
*/
"-?[_a-zA-Z][-_a-zA-Z0-9]*" /* identifiers */
"|-?[0-9]+|\\#[0-9a-fA-F]+" /* numbers */
),
{ "default", NULL, -1, { NULL, 0 } },
};
#undef PATTERNS

Loading…
Cancel
Save