-
-
Notifications
You must be signed in to change notification settings - Fork 386
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Decoration API #5
Comments
Use cases. Applying these effects for a list of ranges. No range that spans multi line.
I'm thinking along these lines:
So it could look like:
What do you think, @atinux? Also @ulivz I'd appreciate it a lot if you can give some feedback since you are leading Vuepress development now. Think Shiki is already better than highlightjs / prism and I'd want to make it a good highlighter for Vuepress too 😉 |
Hi, are there currently any plans to actually implement this feature ? |
I wanted to gather some feedback before proceeding, because @atinux asked for this. But it seems he is busy. I'll ask again. |
Would love to see this : ) |
hi @octref , any plans to bring these features in? They look amazing |
I wonder if we make the highlighting API be consistent with gatsby-remark-prismjs - https://github.com/andrewbranch/gatsby-remark-vscode#line-highlighting |
Thinking about something like this API below. How each markdown parser would like to integrate with the API is up to them. interface BaseLineDecoration {
/**
* The line to apply decoration to.
* Line is 0 based.
*/
line: number
}
/**
* Render line with specified background color
*/
export interface LineBgColorDecoration extends BaseLineDecoration {
/**
* 3/6/8 digit hex code like `#fff` or color like `cadetblue`.
*/
bgColor: string
}
/**
* Render line with line number
*/
export interface LineNumberDecoration extends BaseLineDecoration {
/**
* Line number such as `1` or `01`
*/
lineNumber: string
}
/**
* A decoration applied to a line
*/
export type LineDecoration = LineBgColorDecoration | LineNumberDecoration
interface BaseTokensDecoration {
/**
* The range that includes all tokens. Only tokens that fully
* fall into the range will be matched.
* Multi-line is not supported.
* Line is 0 based.
* `startIndex` is inclusive and `endIndex` not inclusive.
*/
range: {
line: number
startIndex: number
endIndex: number
}
}
/**
* Render matched tokens with `<a>` tag
*
* Cannot overlap with other link decorations.
*/
export interface TokensLinkDecoration extends BaseTokensDecoration {
/**
* `href` value of the link
*/
link: string
}
/**
* Render matched tokens with specified font style
*/
export interface TokensFontStyleDecoration extends BaseTokensDecoration {
/**
* The font style
*/
fontStyle: FontStyle
}
/**
* Render matched tokens with specified background color
*/
export interface TokensBgColorDecoration extends BaseTokensDecoration {
/**
* 3/6/8 digit hex code like `#fff` or color like `cadetblue`.
*/
bgColor: string
}
/**
* A decoration applied to tokens in the matched range
*/
export type TokensDecoration =
| TokensLinkDecoration
| TokensFontStyleDecoration
| TokensBgColorDecoration
export interface HtmlRendererOptions {
langId?: string
fg?: string
bg?: string
/**
* Decorations applied to lines
*/
lineDecorations?: LineDecoration[]
/**
* Decorations applied to tokens
*/
tokensDecorations?: TokensDecoration[]
} |
@octref I haven't touched |
For shiki-twoslash, I ended up re-using @andrewbranch's code-fencing syntax from gatsby-vscode-remark |
Can't we potentially solve this via #380? |
I would suggest the core should not have an opinion on how code-fence meta string should be handled. Instead, allowing transformers to provide their own handling |
Offer a decoration API that allows marking specific ranges with:
This is easy to use programmatically.
The hard problem is how should the original Markdown look like.
The text was updated successfully, but these errors were encountered: