Require colon in show rule
This commit is contained in:
parent
77c29b36d4
commit
7b2cdb9d95
@ -110,7 +110,7 @@ element. And apart from a function, the left-hand side of a show rule can also
|
||||
take a number of other _selectors_ that define what to apply the transformation
|
||||
to:
|
||||
|
||||
- **Everything:** `{show rest => ..}` \
|
||||
- **Everything:** `{show: rest => ..}` \
|
||||
Transform everything after the show rule. This is useful to apply a more
|
||||
complex layout to your whole document without wrapping everything in a giant
|
||||
function call.
|
||||
|
@ -89,8 +89,9 @@ a table listing all syntax that is available in code mode:
|
||||
| Named function | `{let f(x) = 2 * x}` | [Function]($type/function) |
|
||||
| Set rule | `{set text(14pt)}` | [Styling]($styling/#set-rules) |
|
||||
| Set-if rule | `{set text(..) if .. }` | [Styling]($styling/#set-rules) |
|
||||
| Show rule | `{show raw: it => {..}}` | [Styling]($styling/#set-rules) |
|
||||
| Show-set rule | `{show par: set block(..)}` | [Styling]($styling/#show-rules) |
|
||||
| Show rule with function | `{show raw: it => {..}}` | [Styling]($styling/#show-rules) |
|
||||
| Show-everything rule | `{show: columns.with(2)}` | [Styling]($styling/#show-rules) |
|
||||
| Conditional | `{if x == 1 {..} else {..}}` | [Scripting]($scripting/#conditionals) |
|
||||
| For loop | `{for x in (1, 2, 3) {..}}` | [Scripting]($scripting/#loops) |
|
||||
| While loop | `{while x < 10 {..}}` | [Scripting]($scripting/#loops) |
|
||||
|
@ -268,11 +268,11 @@ abstract to be in two columns, we need to apply the column function to our whole
|
||||
document.
|
||||
|
||||
Instead of wrapping the whole document in a giant function call, we can use an
|
||||
"everything" show rule. This show rule does not feature a colon. Instead, we
|
||||
directly provide a function that is given the rest of the document as a
|
||||
parameter. We have called the parameter `rest` here, but you are free to choose
|
||||
any name. The rule can then do anything with this content. In our case, it
|
||||
passes it on to the `columns` function.
|
||||
"everything" show rule. To write such a show rule, put a colon directly behind
|
||||
the show keyword and then provide a function. This function is given the rest of
|
||||
the document as a parameter. We have called the parameter `rest` here, but you
|
||||
are free to choose any name. The function can then do anything with this
|
||||
content. In our case, it passes it on to the `columns` function.
|
||||
|
||||
```example
|
||||
>>> #let title = [
|
||||
@ -323,7 +323,7 @@ passes it on to the `columns` function.
|
||||
>>> #v(4mm)
|
||||
<<< ...
|
||||
|
||||
#show rest => columns(2, rest)
|
||||
#show: rest => columns(2, rest)
|
||||
|
||||
= Introduction
|
||||
#lorem(300)
|
||||
@ -391,7 +391,7 @@ a way to set any of that, we need to write our own heading show rule.
|
||||
>>> ]
|
||||
>>>
|
||||
>>> #v(4mm)
|
||||
>>> #show rest => columns(2, rest)
|
||||
>>> #show: rest => columns(2, rest)
|
||||
>>>
|
||||
>>> = Introduction
|
||||
>>> #lorem(35)
|
||||
@ -480,7 +480,7 @@ differentiate between section and subsection headings:
|
||||
>>> ]
|
||||
>>>
|
||||
>>> #v(4mm)
|
||||
>>> #show rest => columns(2, rest)
|
||||
>>> #show: rest => columns(2, rest)
|
||||
>>>
|
||||
>>> = Introduction
|
||||
>>> #lorem(35)
|
||||
|
@ -48,7 +48,7 @@ function to our whole document. Let's do that with our `amazed` function.
|
||||
>>> #let amazed(term, color: blue) = {
|
||||
>>> text(color, box[✨ #term ✨])
|
||||
>>> }
|
||||
#show amazed
|
||||
#show: amazed
|
||||
I choose to focus on the good
|
||||
in my life and let go of any
|
||||
negative thoughts or beliefs.
|
||||
@ -72,7 +72,7 @@ that content block.
|
||||
#doc
|
||||
]
|
||||
|
||||
#show template
|
||||
#show: template
|
||||
I am learning something cool today.
|
||||
It's going great so far!
|
||||
```
|
||||
@ -125,7 +125,7 @@ previous chapter.
|
||||
columns(2, doc)
|
||||
}
|
||||
|
||||
#show doc => conf([Paper title], doc)
|
||||
#show: doc => conf([Paper title], doc)
|
||||
|
||||
= Introduction
|
||||
#lorem(90)
|
||||
@ -161,7 +161,7 @@ things readable, we'll add those as named arguments. In the end, we want it to
|
||||
work like this:
|
||||
|
||||
```typ
|
||||
#show doc => conf(
|
||||
#show: doc => conf(
|
||||
title: [Towards Improved Modelling],
|
||||
authors: (
|
||||
(
|
||||
@ -324,7 +324,7 @@ path of the file after the `{from}` keyword.
|
||||
>>>}
|
||||
<<< #import "conf.typ": conf
|
||||
|
||||
#show doc => conf(
|
||||
#show: doc => conf(
|
||||
title: [
|
||||
Towards Improved Modelling
|
||||
],
|
||||
|
@ -723,6 +723,12 @@ fn code_completions(ctx: &mut CompletionContext, hashtag: bool) {
|
||||
"Redefines the look of an element.",
|
||||
);
|
||||
|
||||
ctx.snippet_completion(
|
||||
"show rule (everything)",
|
||||
"show: ${}",
|
||||
"Transforms everything that follows.",
|
||||
);
|
||||
|
||||
ctx.snippet_completion(
|
||||
"let binding",
|
||||
"let ${name} = ${value}",
|
||||
|
@ -279,9 +279,10 @@ fn highlight_ident(node: &LinkedNode) -> Option<Tag> {
|
||||
ancestor = ancestor.parent()?;
|
||||
}
|
||||
|
||||
// Are we directly before a show rule colon?
|
||||
if next_leaf.map(|leaf| leaf.kind()) == Some(SyntaxKind::Colon)
|
||||
&& ancestor.parent_kind() == Some(SyntaxKind::ShowRule)
|
||||
// Are we directly before or behind a show rule colon?
|
||||
if ancestor.parent_kind() == Some(SyntaxKind::ShowRule)
|
||||
&& (next_leaf.map(|leaf| leaf.kind()) == Some(SyntaxKind::Colon)
|
||||
|| node.prev_leaf().map(|leaf| leaf.kind()) == Some(SyntaxKind::Colon))
|
||||
{
|
||||
return Some(Tag::Function);
|
||||
}
|
||||
|
@ -852,10 +852,11 @@ fn set_rule(p: &mut Parser) {
|
||||
fn show_rule(p: &mut Parser) {
|
||||
let m = p.marker();
|
||||
p.assert(SyntaxKind::Show);
|
||||
code_expr(p);
|
||||
if p.eat_if(SyntaxKind::Colon) {
|
||||
if !p.at(SyntaxKind::Colon) {
|
||||
code_expr(p);
|
||||
}
|
||||
p.expect(SyntaxKind::Colon);
|
||||
code_expr(p);
|
||||
p.wrap(m, SyntaxKind::ShowRule);
|
||||
}
|
||||
|
||||
|
Binary file not shown.
Before Width: | Height: | Size: 85 KiB After Width: | Height: | Size: 85 KiB |
Binary file not shown.
Before Width: | Height: | Size: 40 KiB After Width: | Height: | Size: 40 KiB |
@ -116,7 +116,7 @@
|
||||
// Everything should be in smallcaps.
|
||||
#for color in (red, blue, green, yellow) [
|
||||
#set text("Roboto")
|
||||
#show it => text(fill: color, it)
|
||||
#show: it => text(fill: color, it)
|
||||
#smallcaps(if color != green [
|
||||
Some
|
||||
] else [
|
||||
|
@ -9,25 +9,25 @@
|
||||
T. Ypst
|
||||
]
|
||||
|
||||
#show columns.with(2)
|
||||
#show: columns.with(2)
|
||||
Great typography is at the essence of great storytelling. It is the medium that
|
||||
transports meaning from parchment to reader, the wave that sparks a flame
|
||||
in booklovers and the great fulfiller of human need.
|
||||
|
||||
---
|
||||
// Test bare show in content block.
|
||||
A #[_B #show c => [*#c*]; C_] D
|
||||
A #[_B #show: c => [*#c*]; C_] D
|
||||
|
||||
---
|
||||
// Test style precedence.
|
||||
#set text(fill: eastern, size: 1.5em)
|
||||
#show text.with(fill: forest)
|
||||
#show: text.with(fill: forest)
|
||||
Forest
|
||||
|
||||
---
|
||||
#show [Shown]
|
||||
#show: [Shown]
|
||||
Ignored
|
||||
|
||||
---
|
||||
// Error: 5-19 show is only allowed directly in code and content blocks
|
||||
#{ (show body => 2) * body }
|
||||
// Error: 5-20 show is only allowed directly in code and content blocks
|
||||
#{ (show: body => 2) * body }
|
||||
|
@ -64,7 +64,7 @@ Another text.
|
||||
world
|
||||
{
|
||||
set text(blue)
|
||||
show it => {
|
||||
show: it => {
|
||||
show "o": "Ø"
|
||||
it
|
||||
}
|
||||
|
@ -40,7 +40,7 @@ Expanded by height.
|
||||
---
|
||||
// Test relative sizing.
|
||||
#set text(fill: white)
|
||||
#show rect.with(width: 100pt, height: 50pt, inset: 0pt, fill: rgb("aaa"))
|
||||
#show: rect.with(width: 100pt, height: 50pt, inset: 0pt, fill: rgb("aaa"))
|
||||
#set align(center + horizon)
|
||||
#stack(
|
||||
dir: ltr,
|
||||
|
Loading…
x
Reference in New Issue
Block a user