Package: mkdocs-custom-tags-attributes
This plugin attempt to create inline markdown attribute using hashtags (#) to mimicattribute listbut in better.This plugin will convert all"#contentsto**contents**{: #contents .hash}to add custom CSS. Moreover, using a custom css file, you can also style text. The plugin will convertsomes text#attributetosomes text**{: #attribute}**using this file as base!↪️#2022/01/01will become**2022/01/01**{: #2022/01 .hash}Installationpip install mkdocs-custom-tags-attributes --upgradeFirst, add the plugin in yourmkdocs.yml:plugins:
  - search
  - custom-attributesNote: 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 ancustom_attributes.cssif you want to create inline attributes!ConfigurationYou can specify the css file in yourmkdocs.yml:plugins:-search-custom-attributes:file:assets/css/custom_attributes.cssObviously, you need to update yourextra css:extra_css:-assets/css/custom_attributes.cssAllowed charactersThe only symbols allowed in tags are :_(underscore)-(dash)/(forward slash)You can use these case styles/formats :camelCase :#myTagPascalCase :#MyTagsnake_case :#my_tagkebab-case :#my-tagNested tags (like#myTag/mySubTag) are recognized.Styling usageInline attributesAfter this, in the css file, you can add inline attribute, automatically parsed by the plugin. Each tags must be ancss 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#rightWill become :**text to right**{:#right}\nor in html :<p><strongid="right">text to right</strong></p>💭 You can note that I choose to use bold to mark the inline attribute. You can remove it withfont-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 theattribute list documentation.originalconverted attributehtmltext 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 #FFXIVto **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>[^1]: Note the absence of word before the last tags.⚠️️️️ATTENTION⚠️You need at last one word before each attributes to stylize unless the attributes is in theendof a paragraph.
An attribute in theendof 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}\nTagsYou can also custom your inline tags (hello obsidian user!) using the.hashclass!
For example:.hash{background-color:honeydew;border-radius:5px;}Test & dev :The conda environment "Publish" list all requirements for developing the plugins.The package is developed using semantic-release, so please respect that.You can use flake8 and pyformat to correct your code.To test the plugin :fromcustom_attributes.pluginimportconvert_text_attributes,convert_hashtagsimportmarkdownasmkconfig={'docs_dir':'any_folder''file':'path/to/custom_attributes.css'}text='any string with custom attributes'print(convert_text_attributes(text,config))Functions :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.