Skip to content

Commit 933160c

Browse files
committed
Fix line numerotation
1 parent 48cd4fd commit 933160c

File tree

3 files changed

+44
-32
lines changed

3 files changed

+44
-32
lines changed

_articles/c++_auto.md

Lines changed: 11 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -281,7 +281,7 @@ Mais ne vous arrêtez pas au "**Almost** Always Auto", nous allons revenir sur c
281281

282282
A partir de C++14, on peut **laisser le compilateur déduire le type de retour** d'une fonction à partir des ``return`` qui la composent:
283283

284-
{% highlight cpp %}
284+
{% highlight cpp highlight_lines="2" %}
285285
template<class Lhs, class Rhs>
286286
auto sum(Lhs lhs, Rhs rhs)
287287
{
@@ -298,7 +298,7 @@ Dans l'exemple suivant, un **``auto`` as a return type** est utilisé dans ``Su
298298
Dans ``Sum.h`` on utilise un [**Trailing return type**](#trailing-return-type-depuis-c11) pour **renseigner explicitement le type de retour**.
299299

300300
Sum.h
301-
{% highlight cpp %}
301+
{% highlight cpp highlight_lines="2" %}
302302
template<class Lhs, class Rhs>
303303
auto sum(Lhs lhs, Rhs rhs) -> decltype(lhs + rhs);
304304
{% endhighlight %}
@@ -370,7 +370,7 @@ Contrairement à ``auto``, ``decltype(auto)`` permet de **préserver les propri
370370

371371
``decltype(auto)`` est particulièrement utile lorsqu'il est nécessaire de préserver la nature exacte de l'expression retournée, que ce soit une référence ou un type constant:
372372

373-
{% highlight cpp linenos %}
373+
{% highlight cpp linenos highlight_lines="5" %}
374374
int foo();
375375
int& bar();
376376

@@ -385,7 +385,7 @@ auto call(Function function) -> decltype(auto)
385385
{% endhighlight %}
386386

387387
``decltype(auto)`` est aussi utilisable pour initialiser une variable en conservant les propriétés cvref de la valeur assignée:
388-
{% highlight cpp %}
388+
{% highlight cpp linenos highlight_lines="3" %}
389389
auto main() -> int
390390
{
391391
decltype(auto) result = call(bar);
@@ -438,7 +438,7 @@ auto main() -> int
438438
439439
### ``std::array``
440440

441-
{% highlight cpp linenos highlight_lines="6" %}
441+
{% highlight cpp linenos highlight_lines="4" %}
442442
auto main() -> int
443443
{
444444
auto position = std::array<int>{10, 15};
@@ -502,7 +502,7 @@ auto main() -> int
502502
La déstructuration doit **respecter l'ordre des paramètres**.<br>
503503
**Leur nom n'a pas d'importance**, il peut être changé. Par exemple: ``auto [foo, bar] = position;``
504504

505-
{% highlight cpp linenos %}
505+
{% highlight cpp linenos highlight_lines="10" %}
506506
struct Position2d
507507
{
508508
int x;
@@ -646,7 +646,7 @@ Pour les classes/structures n'ayant que des variables membres publiques, la dés
646646

647647
Si une classe/structure contient des variables membre privées, il n'est pas possible de les ignorer dans une *structured binding declaration*.
648648

649-
{% highlight cpp linenos highlight_lines="6" %}
649+
{% highlight cpp linenos %}
650650
struct Person
651651
{
652652
Person(std::string firstName, std::string lastName, int birthYear):
@@ -678,7 +678,7 @@ Ce qui implique d'ajouter:
678678
- Une spécialisation de ``std::tuple_size``
679679
- Une spécialisation de ``std::tuple_element``
680680

681-
{% highlight cpp linenos %}
681+
{% highlight cpp linenos highlight_lines="42" %}
682682
struct Person
683683
{
684684
Person(std::string firstName, std::string lastName, int birthYear):
@@ -787,7 +787,7 @@ Dans une *range-based for loop*, **la condition n'évalue pas les variables issu
787787
La *structured binding declaration* dans une condition fait une vérification un peu similaire sur l'objet.
788788
La condition **caste l'objet en bool** pour vérifier la validité de la condition, **puis décompose ses éléments**.
789789

790-
{% highlight cpp linenos %}
790+
{% highlight cpp linenos highlight_lines="6 15" %}
791791
struct Stock
792792
{
793793
unsigned int available;
@@ -836,7 +836,7 @@ Cette structure a la particularité d'avoir un [``operator bool()``](https://en.
836836
Cet opérateur vérifie que sa variable membre publique ``ec`` (error code) ne contient aucun code d'erreur (``std::errc{}``).
837837

838838
Avant C++26, on utilise l'écriture:
839-
{% highlight cpp linenos %}
839+
{% highlight cpp linenos highlight_lines="3 4" %}
840840
auto string = std::string{};
841841
string.resize(20);
842842
if (auto [pointer, errorCode] = std::to_chars(std::data(string), std::data(string) + std::size(string), 3.14);
@@ -852,7 +852,7 @@ else
852852
> Dans le code précédent, remarquez l'utilisation de l'[*init-statement*](/articles/c++/control_flow#init-statement-depuis-c17) dans la condition pour restreindre la portée des variables ``pointer`` et ``errorCode`` au scope de cette condition.
853853
854854
Depuis C++26, on peut écrire:
855-
{% highlight cpp linenos %}
855+
{% highlight cpp linenos highlight_lines="3" %}
856856
auto string = std::string{};
857857
string.resize(20);
858858
if (auto [pointer, errorCode] = std::to_chars(std::data(string), std::data(string) + std::size(string), 3.14))

_plugins/line_highlighting.rb

Lines changed: 32 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -1,23 +1,35 @@
1+
require "rouge"
2+
13
module Jekyll
2-
module Tags
3-
class HighlightBlock
4-
def render_rouge(code)
5-
require "rouge"
6-
formatter = Rouge::Formatters::HTMLLineHighlighter.new(
7-
::Rouge::Formatters::HTML.new,
8-
highlight_lines: parse_highlighted_lines(@highlight_options[:highlight_lines])
9-
)
10-
lexer = ::Rouge::Lexer.find_fancy(@lang, code) || Rouge::Lexers::PlainText
11-
formatter.format(lexer.lex(code))
12-
end
13-
14-
private
15-
16-
def parse_highlighted_lines(lines_string)
17-
return [] if lines_string.nil?
18-
19-
lines_string.map(&:to_i)
20-
end
4+
module Tags
5+
class HighlightBlock
6+
def render_rouge(code)
7+
code += "\n" unless code.end_with?("\n")
8+
9+
# highlight_lines
10+
base_formatter = Rouge::Formatters::HTMLLineHighlighter.new(
11+
Rouge::Formatters::HTML.new,
12+
highlight_lines: parse_highlighted_lines(@highlight_options[:highlight_lines])
13+
)
14+
15+
# linenos
16+
formatter = if @highlight_options[:linenos]
17+
Rouge::Formatters::HTMLTable.new(base_formatter, table_class: "rouge-table")
18+
else
19+
base_formatter
20+
end
21+
22+
lexer = ::Rouge::Lexer.find_fancy(@lang, code) || Rouge::Lexers::PlainText
23+
formatter.format(lexer.lex(code))
24+
end
25+
26+
private
27+
28+
def parse_highlighted_lines(lines_string)
29+
return [] if lines_string.nil?
30+
31+
lines_string.map(&:to_i)
2132
end
2233
end
23-
end
34+
end
35+
end

assets/css/theme.css

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -799,7 +799,7 @@ figure.highlight {
799799
/* highlighting line */
800800
.hll {
801801
border-radius: 5px;
802-
padding: 2px 0 2px;
802+
padding: 2px 2px 2px 0;
803803
background-color: rgba(0, 0, 0, 0.5);
804804
}
805805

0 commit comments

Comments
 (0)