mirror of
https://github.com/toeverything/AFFiNE.git
synced 2026-08-21 12:02:15 +08:00
chore: merge blocksuite source code (#9213)
This commit is contained in:
@@ -0,0 +1,28 @@
|
||||
import type { ExtensionType } from '@blocksuite/block-std';
|
||||
import {
|
||||
createIdentifier,
|
||||
type ServiceIdentifier,
|
||||
} from '@blocksuite/global/di';
|
||||
|
||||
import type { BlockAdapterMatcher, TextBuffer } from '../types/adapter.js';
|
||||
|
||||
export type BlockPlainTextAdapterMatcher = BlockAdapterMatcher<TextBuffer>;
|
||||
|
||||
export const BlockPlainTextAdapterMatcherIdentifier =
|
||||
createIdentifier<BlockPlainTextAdapterMatcher>(
|
||||
'BlockPlainTextAdapterMatcher'
|
||||
);
|
||||
|
||||
export function BlockPlainTextAdapterExtension(
|
||||
matcher: BlockPlainTextAdapterMatcher
|
||||
): ExtensionType & {
|
||||
identifier: ServiceIdentifier<BlockPlainTextAdapterMatcher>;
|
||||
} {
|
||||
const identifier = BlockPlainTextAdapterMatcherIdentifier(matcher.flavour);
|
||||
return {
|
||||
setup: di => {
|
||||
di.addImpl(identifier, () => matcher);
|
||||
},
|
||||
identifier,
|
||||
};
|
||||
}
|
||||
@@ -0,0 +1,62 @@
|
||||
import { createIdentifier } from '@blocksuite/global/di';
|
||||
import type { DeltaInsert } from '@blocksuite/inline';
|
||||
|
||||
import type { AffineTextAttributes } from '../../types/index.js';
|
||||
import {
|
||||
type ASTToDeltaMatcher,
|
||||
DeltaASTConverter,
|
||||
type InlineDeltaMatcher,
|
||||
type TextBuffer,
|
||||
} from '../types/adapter.js';
|
||||
|
||||
export type InlineDeltaToPlainTextAdapterMatcher =
|
||||
InlineDeltaMatcher<TextBuffer>;
|
||||
|
||||
export const InlineDeltaToPlainTextAdapterMatcherIdentifier =
|
||||
createIdentifier<InlineDeltaToPlainTextAdapterMatcher>(
|
||||
'InlineDeltaToPlainTextAdapterMatcher'
|
||||
);
|
||||
|
||||
export type PlainTextASTToDeltaMatcher = ASTToDeltaMatcher<string>;
|
||||
|
||||
export class PlainTextDeltaConverter extends DeltaASTConverter<
|
||||
AffineTextAttributes,
|
||||
string
|
||||
> {
|
||||
constructor(
|
||||
readonly configs: Map<string, string>,
|
||||
readonly inlineDeltaMatchers: InlineDeltaToPlainTextAdapterMatcher[],
|
||||
readonly plainTextASTToDeltaMatchers: PlainTextASTToDeltaMatcher[]
|
||||
) {
|
||||
super();
|
||||
}
|
||||
|
||||
astToDelta(ast: string) {
|
||||
const context = {
|
||||
configs: this.configs,
|
||||
options: Object.create(null),
|
||||
toDelta: (ast: string) => this.astToDelta(ast),
|
||||
};
|
||||
for (const matcher of this.plainTextASTToDeltaMatchers) {
|
||||
if (matcher.match(ast)) {
|
||||
return matcher.toDelta(ast, context);
|
||||
}
|
||||
}
|
||||
return [];
|
||||
}
|
||||
|
||||
deltaToAST(deltas: DeltaInsert<AffineTextAttributes>[]): string[] {
|
||||
return deltas.map(delta => {
|
||||
const context = {
|
||||
configs: this.configs,
|
||||
current: { content: delta.insert },
|
||||
};
|
||||
for (const matcher of this.inlineDeltaMatchers) {
|
||||
if (matcher.match(delta)) {
|
||||
context.current = matcher.toAST(delta, context);
|
||||
}
|
||||
}
|
||||
return context.current.content;
|
||||
});
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,3 @@
|
||||
export * from './block-adapter.js';
|
||||
export * from './delta-converter.js';
|
||||
export * from './type.js';
|
||||
@@ -0,0 +1 @@
|
||||
export type PlainText = string;
|
||||
Reference in New Issue
Block a user