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
Support asciidoc source code callouts in CodeBlock #10108
Comments
That would be a really cool feature, and I'd definitely use something like that if it were so simple. Meanwhile, you could potentially do it with the Custom Magic Comments functionality (https://docusaurus.io/docs/3.0.1/markdown-features/code-blocks#custom-magic-comments), converting it to numbers with CSS. |
This approach seems difficult to implement. I think there has two way to implement this feature.
I think the latter is better,but I don't know how to register a Prism plugin in docusaurus config. |
There is the simple implement. but just code-block import React from 'react';
import clsx from 'clsx';
import type { Props } from '@theme/CodeBlock/Line';
import styles from './styles.module.css';
import type { TokenInputProps, TokenOutputProps } from 'prism-react-renderer';
export default function CodeBlockLine(
{
line,
classNames,
showLineNumbers,
getLineProps,
getTokenProps
}: Props): JSX.Element {
if (line.length === 1 && line[0]!.content === '\n') {
line[0]!.content = '';
}
const lineProps = getLineProps({
line,
className: clsx(classNames, showLineNumbers && styles.codeLine)
});
const lineTokens = line.map((token, key) => {
console.log(token, key);
return (<span key={key} {...getCommentCalloutTokenProps({token, key}, getTokenProps)} />)
});
return (
<span {...lineProps}>
{showLineNumbers ? (
<>
<span className={styles.codeLineNumber}/>
<span className={styles.codeLineContent}>{lineTokens}</span>
</>
) : (
lineTokens
)}
<br/>
</span>
);
}
const commentCalloutRegex = /^(\/\/\s+)(<)(\d{1,2})(>)$/;
function getCommentCalloutTokenProps(input: TokenInputProps, original: Function): TokenOutputProps {
if (input.token.types[0] === 'comment' && input.token.content.match(commentCalloutRegex)) {
const matches = input.token.content.match(commentCalloutRegex)
return {
className: styles.commentCallout,
children: matches[3]
}
} else {
return original(input);
}
} .commentCallout {
border-radius: 100%;
display: inline-block;
font-family: Roboto, sans-serif;
font-size: 1rem;
font-style: normal;
color: white;
background-color: black;
border: 1px solid black;
height: 1.25em;
letter-spacing: -.25ex;
line-height: 1.2;
text-align: center;
text-indent: -.25ex;
width: 1.25em;
} The follow code public class A { // <1>
public static void main(String[] args) { // <14>
System.out.println("");
}
} Redner as: But not elegant enough. |
Hey @jaune162! I'm not really into frontend stuff, but I used Docusaurus for project documentation and made some tweaks, like adding magic comments. They're registered in the section where you can add the Prism plugin you mentioned. I don't have any plugins set up, but I added an example line in my config to show how it would look. There are repositories doing that, please see examples. So, if option 2 is the way to go, it looks like it might be possible. What do you think? |
@baldram Thanks. I will try it. But there is no export type PrismConfig = {
theme: PrismTheme;
darkTheme?: PrismTheme;
defaultLanguage?: string;
additionalLanguages: string[];
magicComments: MagicCommentConfig[];
}; I'm not sure is works. |
Afaik the lib we use (prism-react-renderer) does not support Prism plugin. |
Have you read the Contributing Guidelines on issues?
Description
Example: https://docs.asciidoctor.org/asciidoc/latest/syntax-quick-reference/#literals-and-source-code
Has this been requested on Canny?
No response
Motivation
This feature is very useful for explaining the complex parts of the source code in the document
API design
No response
Have you tried building it?
No response
Self-service
The text was updated successfully, but these errors were encountered: