Ensure highlighted text has contrast in all manual colour schemes

Fixes #374
pull/404/head
Wilfred Hughes 2022-10-09 11:12:55 +07:00
parent cd5ba54752
commit 6630d5f480
4 changed files with 24 additions and 24 deletions

@ -31,8 +31,8 @@ let ts_lang = language_override
<pre><code style="display:block">$ difft old.rs new.rs
1 <span style="background-color: PaleGreen">1</span> let ts_lang = <span style="background-color: PaleGreen">language_override</span>
. <span style="background-color: PaleGreen">2</span> <span style="background-color: PaleGreen">.or_else(||</span> guess(path, guess_src)<span style="background-color: PaleGreen">)</span>
1 <span style="background-color: PaleGreen; color: #000">1</span> let ts_lang = <span style="background-color: PaleGreen; color: #000">language_override</span>
. <span style="background-color: PaleGreen; color: #000">2</span> <span style="background-color: PaleGreen; color: #000">.or_else(||</span> guess(path, guess_src)<span style="background-color: PaleGreen; color: #000">)</span>
. 3 .map(tsp::from_language);
</code>
</pre>
@ -45,8 +45,8 @@ A line-oriented diff does a much worse job here.
<pre><code style="display:block">$ diff -u old.rs new.rs
@@ -1 +1,3 @@
<span style="background-color: #fbbd98">-let ts_lang = guess(path, guess_src).map(tsp::from_language);</span>
<span style="background-color: PaleGreen">+let ts_lang = language_override
<span style="background-color: #fbbd98; color: #000">-let ts_lang = guess(path, guess_src).map(tsp::from_language);</span>
<span style="background-color: PaleGreen; color: #000">+let ts_lang = language_override
+ .or_else(|| guess(path, guess_src))
+ .map(tsp::from_language);</span>
</code>

@ -15,7 +15,7 @@ x
(x)
```
Desired result: <code><span style="background-color: PaleGreen">(</span>x<span style="background-color: PaleGreen">)</span></code>
Desired result: <code><span style="background-color: PaleGreen; color: #000">(</span>x<span style="background-color: PaleGreen; color: #000">)</span></code>
This is tricky because `x` has changed its depth in the tree, but `x`
itself is unchanged.
@ -48,7 +48,7 @@ than the `x`.
(x y)
```
Desired output: <code>(x <span style="background-color: PaleGreen">y</span>)</code>
Desired output: <code>(x <span style="background-color: PaleGreen; color: #000">y</span>)</code>
In this case, we want to highlight `y`. Highlighting the delimiters
could make `x` look changed.
@ -75,10 +75,10 @@ This should be highlighted similar to the expanding delimiter case.
(foo (novel) (bar))
```
Desired result: <code>(foo <span style="background-color:PaleGreen">(novel)</span> (bar)</code>
Desired result: <code>(foo <span style="background-color:PaleGreen; color: #000">(novel)</span> (bar)</code>
It is easy to end up with
<code>(foo (<span style="background-color:PaleGreen">novel</span>) <span style="background-color:PaleGreen">(</span>bar<span style="background-color:PaleGreen">)</span>)</code>,
<code>(foo (<span style="background-color:PaleGreen; color: #000">novel</span>) <span style="background-color:PaleGreen; color: #000">(</span>bar<span style="background-color:PaleGreen; color: #000">)</span>)</code>,
where a later pair of delimiters are chosen.
## Rewrapping Large Nodes
@ -109,7 +109,7 @@ minimal diff.
(y x)
```
Desired result: <code>(<span style="background-color: PaleGreen">y</span> <span style="background-color: PaleGreen">x</span>)</code>
Desired result: <code>(<span style="background-color: PaleGreen; color: #000">y</span> <span style="background-color: PaleGreen; color: #000">x</span>)</code>
We want to highlight the list contents and not the delimiters.
@ -123,7 +123,7 @@ foo(bar(123))
foo(extra(bar(123)))
```
Desired result: <code>foo(<span style="background-color: PaleGreen">extra(</span>bar(123)<span style="background-color: PaleGreen">)</span>)</code>
Desired result: <code>foo(<span style="background-color: PaleGreen; color: #000">extra(</span>bar(123)<span style="background-color: PaleGreen; color: #000">)</span>)</code>
We want to consider both `foo` and `bar` to be unchanged. This case is
challenging for diffing algorithms that do a bottom-up then top-down
@ -175,8 +175,8 @@ old1(old2)
old1(new1(old2))
```
Should this be <code>old1(<span style="background-color: PaleGreen">new1(</span>old2<span style="background-color: PaleGreen">)</span>)</code> or
<code>old1<span style="background-color: PaleGreen">(new1</span>(old2)<span style="background-color: PaleGreen">)</span></code>?
Should this be <code>old1(<span style="background-color: PaleGreen; color: #000">new1(</span>old2<span style="background-color: PaleGreen; color: #000">)</span>)</code> or
<code>old1<span style="background-color: PaleGreen; color: #000">(new1</span>(old2)<span style="background-color: PaleGreen; color: #000">)</span></code>?
The correct answer depends on the language. Most languages want to
prefer the inner delimiter, whereas Lisps and JSON prefer the outer

@ -25,8 +25,8 @@ let ts_lang = language_override
<pre><code style="display:block">$ difft old.rs new.rs
1 <span style="background-color: PaleGreen">1</span> let ts_lang = <span style="background-color: PaleGreen">language_override</span>
. <span style="background-color: PaleGreen">2</span> <span style="background-color: PaleGreen">.or_else(||</span> guess(path, guess_src)<span style="background-color: PaleGreen">)</span>
1 <span style="background-color: PaleGreen; color: #000">1</span> let ts_lang = <span style="background-color: PaleGreen; color: #000">language_override</span>
. <span style="background-color: PaleGreen; color: #000">2</span> <span style="background-color: PaleGreen; color: #000">.or_else(||</span> guess(path, guess_src)<span style="background-color: PaleGreen; color: #000">)</span>
. 3 .map(tsp::from_language);
</code>
</pre>
@ -38,8 +38,8 @@ let ts_lang = language_override
<pre><code style="display:block">$ diff -u old.rs new.rs
@@ -1 +1,3 @@
<span style="background-color: #fbbd98">-let ts_lang = guess(path, guess_src).map(tsp::from_language);</span>
<span style="background-color: PaleGreen">+let ts_lang = language_override
<span style="background-color: #fbbd98; color: #000">-let ts_lang = guess(path, guess_src).map(tsp::from_language);</span>
<span style="background-color: PaleGreen; color: #000">+let ts_lang = language_override
+ .or_else(|| guess(path, guess_src))
+ .map(tsp::from_language);</span>
</code>

@ -14,7 +14,7 @@ x
(x)
```
理想输出: <code><span style="background-color: PaleGreen">(</span>x<span style="background-color: PaleGreen">)</span></code>
理想输出: <code><span style="background-color: PaleGreen; color: #000">(</span>x<span style="background-color: PaleGreen; color: #000">)</span></code>
这个是十分棘手,因为`x`已经改变了它在树中的深度,但`x`本身却未发生改变。
@ -42,7 +42,7 @@ x
(x y)
```
理想输出:<code>(x <span style="background-color: PaleGreen">y</span>)</code>
理想输出:<code>(x <span style="background-color: PaleGreen; color: #000">y</span>)</code>
在这个例子下,我们想要去高亮`y`。高亮显示定界符的话可能会让`x`看起来有所变化。
@ -68,9 +68,9 @@ x
(foo (novel) (bar))
```
理想输出:<code>(foo <span style="background-color:PaleGreen">(novel)</span> (bar)</code>
理想输出:<code>(foo <span style="background-color:PaleGreen; color: #000">(novel)</span> (bar)</code>
很容易会变成:<code>(foo (<span style="background-color:PaleGreen">novel</span>) <span style="background-color:PaleGreen">(</span>bar<span style="background-color:PaleGreen">)</span>)</code>,
很容易会变成:<code>(foo (<span style="background-color:PaleGreen; color: #000">novel</span>) <span style="background-color:PaleGreen; color: #000">(</span>bar<span style="background-color:PaleGreen; color: #000">)</span>)</code>,
其中后一组的定界符会被选中。
## 重新组织大节点
@ -97,7 +97,7 @@ x
(y x)
```
理想输出:<code>(<span style="background-color: PaleGreen">y</span> <span style="background-color: PaleGreen">x</span>)</code>
理想输出:<code>(<span style="background-color: PaleGreen; color: #000">y</span> <span style="background-color: PaleGreen; color: #000">x</span>)</code>
我们想突出显示列表的内容,而不是定界符。
@ -111,7 +111,7 @@ foo(bar(123))
foo(extra(bar(123)))
```
理想输出:<code>foo(<span style="background-color: PaleGreen">extra(</span>bar(123)<span style="background-color: PaleGreen">)</span>)</code>
理想输出:<code>foo(<span style="background-color: PaleGreen; color: #000">extra(</span>bar(123)<span style="background-color: PaleGreen; color: #000">)</span>)</code>
我们想把`foo`和`bar`都看作是不变的。这种情况对于对树进行自下而上然后自上而下匹配的衍合算法来说是具有挑战性的。
@ -155,8 +155,8 @@ old1(old2)
old1(new1(old2))
```
这个应该是 <code>old1(<span style="background-color: PaleGreen">new1(</span>old2<span style="background-color: PaleGreen">)</span>)</code> 还是
<code>old1<span style="background-color: PaleGreen">(new1</span>(old2)<span style="background-color: PaleGreen">)</span></code>?
这个应该是 <code>old1(<span style="background-color: PaleGreen; color: #000">new1(</span>old2<span style="background-color: PaleGreen; color: #000">)</span>)</code> 还是
<code>old1<span style="background-color: PaleGreen; color: #000">(new1</span>(old2)<span style="background-color: PaleGreen; color: #000">)</span></code>?
正确的答案是取决于语言。大多数语言希望优先使用内部分隔符而Lisps和JSON则喜欢使用外部分隔符。