mirror of
https://github.com/Jermolene/TiddlyWiki5.git
synced 2025-12-05 18:20:38 -08:00
* Enhance Freelinks with Aho-Corasick for long titles and large wikis
Replaces regex with Aho-Corasick, adds chunking (100 titles/chunk), cache toggle, and Chinese full-width symbol support. Tested with 11,714 tiddlers.
* delete comment
* Create AhoCorasick.js
* Update text.js
* Update text.js
* Update AhoCorasick.js
* Update text.js
* Update text.js
* move AhoCorasick to AhoCorasick.js
* update AhoCorasick.js
* Delete core/modules/utils/AhoCorasick.js
wrong place
* Update text.js
* indentation modify
* remove function {}
* remove function {}
* Rename AhoCorasick.js to aho-corasick.js
correct filename
* Update tiddlywiki.info add freelink
* missing a comma here
* clean up comments & use old style
* try add it to editions/tw5.com-server for testing
* try add it to editions/prerelease for testing
* optimized
* optimized
* add setting for "Persist AhoCorasick cache"
* add dynamic limits
* remove comment
* revert to
|
||
|---|---|---|
| .. | ||
| aho-corasick.js | ||
| config-Freelinks-Enable.tid | ||
| config-Freelinks-WordBoundary.tid | ||
| macros-view.tid | ||
| plain-text.js | ||
| plugin.info | ||
| readme.tid | ||
| settings.tid | ||
| styles.tid | ||
| text.js | ||
title: $:/plugins/tiddlywiki/freelinks/readme
This plugin adds automatic generation of links to tiddler titles.
The plugin uses the Aho-Corasick algorithm for efficient pattern matching with large numbers of tiddlers.
!! Configuration
Freelinking is activated for runs of text that have the following variables set:
* `tv-wikilinks` is NOT equal to `no`
* `tv-freelinks` is set to `yes`
Freelinks are case sensitive by default but can be configured to ignore case in the settings panel.
Word boundary checking can be configured in the settings panel. When enabled (default for Western languages), links are created only for complete words. When disabled, partial matches within words are also linked.
When multiple tiddler titles match the same text, longer titles take precedence over shorter ones.
Tiddlers do not create links to themselves.
Use `$:/config/Freelinks/TargetFilter` to define which tiddlers are eligible for auto-linking.
Within view templates, the variable `tv-freelinks` is automatically set to the content of `$:/config/Freelinks/Enable`, which can be set via the settings panel of this plugin.
!! Notes
To change within which tiddlers freelinking occurs requires customising the shadow tiddler [[$:/plugins/tiddlywiki/freelinks/macros/view]]. This tiddler is tagged `$:/tags/Macro/View` which means that it will be included as a local macro in each view template. By default, its content is:
```
<$set name="tv-freelinks" value={{$:/config/Freelinks/Enable}}/>
```
That means that for each tiddler the variable `tv-freelinks` will be set to the tiddler `$:/config/Freelinks/Enable`, which is set to "yes" or "no" by the settings in control panel.
Instead, we can use a filter expression to, say, only freelink within the tiddler with the title "HelloThere":
```
<$set name="tv-freelinks" value={{{ [<currentTiddler>match[HelloThere]then[yes]else[no]] }}}/>
```
Or, we can make a filter that will only freelink within tiddlers with the tag "MyTag":
```
<$set name="tv-freelinks" value={{{ [<currentTiddler>tag[MyTags]then[yes]else[no]] }}}/>
```
Or we can combine both approaches:
```
<$set name="tv-freelinks" value={{{ [<currentTiddler>match[HelloThere]] ~[<currentTiddler>tag[MyTag]] +[then[yes]else[no]] }}}/>
```
!! Implementation Details
The Aho-Corasick algorithm implementation includes:
* Unicode character support for international text
* Prevention of self-referential links within the current tiddler
* Performance safeguards including depth protection and result limiting
* Graceful fallback handling for invalid patterns
Longer tiddler titles take precedence over shorter ones when multiple matches are possible.