Security News
Introducing the Socket Python SDK
The initial version of the Socket Python SDK is now on PyPI, enabling developers to more easily interact with the Socket REST API in Python projects.
mkdocs-custom-tags-attributes
Advanced tools
This plugin attempt to create inline markdown attribute using hashtags (#
) to mimic attribute list but in better.
This plugin will convert all "#contents
to **contents**{: #contents .hash}
to add custom CSS. Moreover, using a custom css file, you can also style text. The plugin will convert somes text#attribute
to somes text**{: #attribute}**
using this file as base!
↪️
#2022/01/01
will become**2022/01/01**{: #2022/01 .hash}
pip install mkdocs-custom-tags-attributes --upgrade
First, add the plugin in your mkdocs.yml
:
plugins:
- search
- custom-attributes
Note: If you have no plugin entry in your config file yet, you'll likely also want to add the search plugin. MkDocs enables it by default if there is no plugin entry set, but now you have to enable it explicitly.
You need to create an custom_attributes.css
if you want to create inline attributes!
You can specify the css file in your mkdocs.yml
:
plugins:
- search
- custom-attributes:
file: assets/css/custom_attributes.css
Obviously, you need to update your extra css :
extra_css:
- assets/css/custom_attributes.css
The only symbols allowed in tags are :
_
(underscore)-
(dash)/
(forward slash)You can use these case styles/formats :
#myTag
#MyTag
#my_tag
#my-tag
Nested tags (like #myTag/mySubTag
) are recognized.
After this, in the css file, you can add inline attribute, automatically parsed by the plugin. Each tags must be an css id, aka prepend with #
.
#yourtags {
/* your css */
}
💭 Don't forget to escape the characters (as
\
or/
for example!)
Little example : align to right a text.
#right {
display: inline-block;
width: 100%;
text-align: right;
font-weight: normal;
}
The text :
text to right#right
Will become :
**text to right**{: #right}\n
or in html :
<p><strong id="right">text to right</strong></p>
💭 You can note that I choose to use bold to mark the inline attribute. You can remove it with
font-weight: normal;
in the css file when specify your tags.
Also, some inlines attribute can be a bit strange. First, any inline attributes placed in the end of the line will be applied on the entire paragraph.
There is a lot of possible example, so you can check the tests to saw behavior. Please, also refer to the attribute list documentation.
original | converted attribute | html |
---|---|---|
text to right#right | **text to right**{: #right} | <p><strong id="right">text to right</strong></p> |
#FFXIV | **FFXIV**{: #FFXIV .hash} | <p><strong class="hash" id="FFXIV">FFXIV</strong></p> |
#FFXIV #other | **FFXIV**{: #FFXIV .hash} **other**{: #other .hash} | <p><strong class="hash" id="FFXIV">FFXIV</strong> <strong class="hash" id="other">other</strong></p> |
text1#right text2#right | **text1 text2**{: #right} | <p><strong id="right">text1 text2</strong></p> |
Lorem ipsum dolor#blue sit amet, consectetur adipiscing elit#right | **Lorem ipsum **dolor**{: #blue} sit amet, consectetur adipiscing elit**{: #right} | <p><strong>Lorem ipsum </strong>dolor<strong id="right">{: #blue} sit amet, consectetur adipiscing elit</strong></p> |
to right#right #FFXIV | to **right**{: #right} **FFXIV**{: #FFXIV .hash} | <p>to <strong id="right">right</strong> <strong class="hash" id="FFXIV">FFXIV</strong></p> |
lorem ipsum with #FFXIV and #right 1 | lorem ipsum with **FFXIV**{: #FFXIV .hash} and \n{: #right}\n | <p id="right">lorem ipsum with <strong class="hash" id="FFXIV">FFXIV</strong> and </p> |
⚠️️️️ATTENTION⚠️
You need at last one word before each attributes to stylize unless the attributes is in the end of a paragraph. An attribute in the end of a paragraph will stylize all the paragraph.
💭 Error example:
lorem ipsum with #FFXIV and #blue But not right#right
->lorem ipsum with **FFXIV**{: #FFXIV .hash} and #blue But not right\n{: #right}\n
You can also custom your inline tags (hello obsidian user!) using the .hash
class!
For example:
.hash {
background-color: honeydew;
border-radius: 5px;
}
To test the plugin :
from custom_attributes.plugin import convert_text_attributes, convert_hashtags
import markdown as mk
config = {
'docs_dir' : 'any_folder'
'file' : 'path/to/custom_attributes.css'
}
text = 'any string with custom attributes'
print(convert_text_attributes(text, config))
read_custom(config: dict[str, str] -> list
: Read the css file and take each css ID and return it as a list. Return empty list if file not found.cleanned_word(line: str, word_regex: str) -> str
: Check and convert the word before tags attributes if any. Return empty string if no word are found.convert_hashtags (config: dict[str, str], line: str) -> str
: Convert the tags attributes from the list when reading a line.convert_text_attributes(markdown: str, config: dict[str, str]) -> str
: Read an entire Markdown text to convert line per line the hashtags and tags attributes.Note the absence of word before the last tags. ↩
FAQs
Adding custom attributes using hashtags.
We found that mkdocs-custom-tags-attributes demonstrated a healthy version release cadence and project activity because the last version was released less than a year ago. It has 1 open source maintainer collaborating on the project.
Did you know?
Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.
Security News
The initial version of the Socket Python SDK is now on PyPI, enabling developers to more easily interact with the Socket REST API in Python projects.
Security News
Floating dependency ranges in npm can introduce instability and security risks into your project by allowing unverified or incompatible versions to be installed automatically, leading to unpredictable behavior and potential conflicts.
Security News
A new Rust RFC proposes "Trusted Publishing" for Crates.io, introducing short-lived access tokens via OIDC to improve security and reduce risks associated with long-lived API tokens.