s2k

s2k

Author of Fast Feedback Using Ruby

Write Better with Vale: Is is possible to copy & paste code from the epub version without invisible characters?

Context

Hardware & OS:

OS: macOS Tahoe 26.0 arm64
Host: MacBook Pro

Observation

One of the code snippets as seen in epub is this:

When I mark the code and copy it into a text editor, I get

“​ StylesPath = ​../styles​​ MinAlertLevel = ​suggestion​​ ​ ​[*.html]​​ BasedOnStyles = ​Vale​​ Vale.Spelling = ​error​”

Excerpt From
Write Better with Vale
Brian P. Hogan
This material may be protected by copyright.

…and that’s fine. Removing the lower part and reformatting the part in the double quotes is easy enough. After doing that, I’m left with:

StylesPath = ​../styles​​
MinAlertLevel = ​suggestion​​

[*.html]​​
BasedOnStyles = ​Vale​​
Vale.Spelling = ​error​

This looks good, but alas it isn’t: Running vale . in (an empty) folder containing only this ini file, I get:

> vale .
E100 [NewE201] Runtime error
The path ‘/Users/stephan/dev/vale_example_project/​../styles​​’ does not exist.
Execution stopped with code 1.

It took me a while to find the issue.
Using caton the file doesn’t show anything suspecting:

> cat .vale.ini
StylesPath = ​../styles
MinAlertLevel = ​suggestion

[*.html]
BasedOnStyles = ​Vale
Vale.Spelling = ​error

Dumping the file to show the characters and hex codes, I get this:

> fd -w16 .vale.ini
.vale.ini
53 74 79 6c 65 73 50 61 74 68 20 3d 20 e2 80 8b |     S t y l e s P a t h ␠ = ␠
2e 2e 2f 73 74 79 6c 65 73 e2 80 8b e2 80 8b 0a |         . . / s t y l e s ​ ​ ␊
4d 69 6e 41 6c 65 72 74 4c 65 76 65 6c 20 3d 20 | M i n A l e r t L e v e l ␠ = ␠
e2 80 8b 73 75 67 67 65 73 74 69 6f 6e e2 80 8b |         ​ s u g g e s t i o n
e2 80 8b 0a 0a 5b 2a 2e 68 74 6d 6c 5d e2 80 8b |         ​ ␊ ␊ [ * . h t m l ]
e2 80 8b 0a 42 61 73 65 64 4f 6e 53 74 79 6c 65 |     ​ ␊ B a s e d O n S t y l e
      73 20 3d 20 e2 80 8b 56 61 6c 65 e2 80 8b |             s ␠ = ␠ ​ V a l e
e2 80 8b 0a 56 61 6c 65 2e 53 70 65 6c 6c 69 6e |     ​ ␊ V a l e . S p e l l i n
67 20 3d 20 e2 80 8b 65 72 72 6f 72 e2 80 8b 0a |         g ␠ = ␠ ​ e r r o r ​ ␊

(fdis for ‘file dump’, a Ruby tool I wrote [and available at https://github.com/s2k/fd\])

Aha! There are sequences of e2 80 8b that vale can’t cope with.
Now, this sequence (in UTF-8) is a ‘zero width space’ (→ U+200B ZERO WIDTH SPACE: ​ – Unicode – Codepoints ) which also explains why it’s not visible.

My question is: Is it possible to not put this zero-width-space in the copied code snippet (or not in the epub file)?

Cheers

Stephan

Marked As Solved

Margaret

Margaret

Editor at PragProg

IDK if this helps you, but there is a zip file with the code for the vale.ini file on the book’s web page: https://media.pragprog.com/titles/bhvale/code/bhvale-code.zip

Also Liked

bphogan

bphogan

Author of Build Websites with Hugo (and 4 other titles)

@s2k that just makes me smile so much. What a great application of the book’s content.

This is exactly how I use Vale at $dayJob… to find things we want to fix.

FWIW I verified that there’s nothing in the original code that causes this, so it’s something I’ll have to raise with the publisher.

Where Next?

Popular Pragmatic Bookshelf topics Top

jdufour
Hello! On page xix of the preface, it says there is a community forum "… for help if your’re stuck on one of the exercises in this book… ...
New
JohnS
I can’t setup the Rails source code. This happens in a working directory containing multiple (postgres) Rails apps. With: ruby-3.0.0 s...
New
herminiotorres
Hi! I know not the intentions behind this narrative when called, on page XI: mount() |> handle_event() |> render() but the correc...
New
cro
I am working on the “Your Turn” for chapter one and building out the restart button talked about on page 27. It recommends looking into ...
New
New
nicoatridge
Hi, I have just acquired Michael Fazio’s “Kotlin and Android Development” to learn about game programming for Android. I have a game in p...
New
Charles
In general, the book isn’t yet updated for Phoenix version 1.6. On page 18 of the book, the authors indicate that an auto generated of ro...
New
oaklandgit
Hi, I completed chapter 6 but am getting the following error when running: thread 'main' panicked at 'Failed to load texture: IoError(O...
New
tkhobbes
After some hassle, I was able to finally run bin/setup, now I have started the rails server but I get this error message right when I vis...
New
gorkaio
root_layout: {PentoWeb.LayoutView, :root}, This results in the following following error: no “root” html template defined for PentoWeb...
New

Other popular topics Top

PragmaticBookshelf
Ruby, Io, Prolog, Scala, Erlang, Clojure, Haskell. With Seven Languages in Seven Weeks, by Bruce A. Tate, you’ll go beyond the syntax—and...
New
Exadra37
I am thinking in building or buy a desktop computer for programing, both professionally and on my free time, and my choice of OS is Linux...
New
Exadra37
Please tell us what is your preferred monitor setup for programming(not gaming) and why you have chosen it. Does your monitor have eye p...
New
DevotionGeo
I know that -t flag is used along with -i flag for getting an interactive shell. But I cannot digest what the man page for docker run com...
New
AstonJ
Curious to know which languages and frameworks you’re all thinking about learning next :upside_down_face: Perhaps if there’s enough peop...
New
AstonJ
Biggest jackpot ever apparently! :upside_down_face: I don’t (usually) gamble/play the lottery, but working on a program to predict the...
New
PragmaticBookshelf
Build efficient applications that exploit the unique benefits of a pure functional language, learning from an engineer who uses Haskell t...
New
New
New
PragmaticBookshelf
Fight complexity and reclaim the original spirit of agility by learning to simplify how you develop software. The result: a more humane a...
New

Sub Categories: