Skip to content

Feature: consistent zk-link-format and POSIX regexp conversion for grep#68

Open
boyechko wants to merge 6 commits intolocalauthor:mainfrom
boyechko:feature/consisent-zk-link-format-and-posix-regexp
Open

Feature: consistent zk-link-format and POSIX regexp conversion for grep#68
boyechko wants to merge 6 commits intolocalauthor:mainfrom
boyechko:feature/consisent-zk-link-format-and-posix-regexp

Conversation

@boyechko
Copy link
Copy Markdown
Contributor

This is a new version of PR #63 that fixes the zk-backlinks bug.

Consistent zk-link-format

This changes zk-link-format to use same %-sequences as other zk-*-format variables.
Having consistent syntax is helpful to avoid mistakes. Additionally, this change allows 1) simplifying zk--format so it doesn't need to handle two different sets of %-sequences, and 2) experimenting with other link markup, such as [[%i][%t]] for org-mode links without explicit link type or [[%i|%t]] for syntax used by MediaWiki.

Extend zk-link-regexp to generate targeted regexps

Also, zk-link-regexp function now accepts optional ID and/or title to generate a regexp matching specific links, so that with the default zk-link-format, (zk-link-regexp "202307090142") returns "\\[\\[\\(?1:202307090142\\)]]". The explicitly numbered capture groups are consistent with zk-file-name-regexp.

Introduce zk--posix-regexp

So far, functions like zk--grep-file-list have just passed Elisp-style regexp to grep and hoped it works, which it does for zk-ID or other literal strings. Changes to zk-link-regexp in PR #63 broke things because it introduced explicit capture groups (\(?1:...\)), which is not supported by POSIX regexps that grep uses.

The new function, zk--posix-regexp, does some basic conversion from Elisp-style regexps to POSIX-style. There is package pcre2el that does it in a more complete and sophisticated way, but for our purposes, this should be enough.

Functions that pass regexps to grep, such as zk--grep-file-list, zk--grep-tag-list, and zk--grep-link-id-list are updated to sanitize ("POSIXize") the regexps they pass. The cost is minuscule ("Elapsed time: 0.000379s" for 10,000 calls with a complex regexp).

boyechko added 6 commits July 15, 2023 12:18
* `zk-format-function`'s docstring pointed to a very sparse `zk--format`
  docstring.

* Other `*-format` variables had wrong information (`zk-format-function` should
  never be nil) and repeated information that pertains properly only to
  `zk-format-id-and-title`.
It's generally a good practice to avoid hardcoded values, but this also allows
the user to customize what the title looks like.
Since `zk--grep-file-list` expects a regexp anyway, might as well use the
`zk-link-regexp` to generate it rather than doing it locally and repeating code.
This increases consistency, which should help to avoid obscure bugs.
Having consistent syntax is helpful to avoid mistakes. Additionally, this change
allows 1) simplifying `zk--format` so it doesn't need to handle two different
sets of %-sequences, and 2) experimenting with other link markup, such as
`[[%i][%t]]` for org-mode links without explicit link type or `[[%i|%t]]` for
syntax used by MediaWiki.
So far, functions like `zk--grep-file-list` have just passed Elisp-style regexp
to `grep` and hoped it works, which it does for zk-ID or other literal strings.
Changes to `zk-link-regexp` in PR localauthor#63 broke things because it introduced
explicit capture groups (`\(?1:...\)`), which is not supported by POSIX regexps
that `grep` uses.

The new function, `zk--posix-regexp`, does some basic conversion from
Elisp-style regexps to POSIX-style. There is package `pcre2el` that does it in a
more complete and sophisticated way, but for our purposes, this should be
enough.

Functions that pass regexps to `grep`, such as `zk--grep-file-list`,
`zk--grep-tag-list`, and `zk--grep-link-id-list` are updated to
sanitize ("POSIXize") the regexps they pass. The cost is minuscule ("Elapsed
time: 0.000379s" for 10,000 calls with a complex regexp).
boyechko added a commit to boyechko/octavo that referenced this pull request Jul 16, 2023
@boyechko boyechko closed this Jul 16, 2023
@boyechko boyechko deleted the feature/consisent-zk-link-format-and-posix-regexp branch July 16, 2023 19:06
@boyechko boyechko restored the feature/consisent-zk-link-format-and-posix-regexp branch July 16, 2023 19:48
@boyechko boyechko reopened this Jul 16, 2023
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant