Эта конкретная библиотека работает особым образом (похоже, она делает много «волшебства» под капотом - вам следует взглянуть на исходный код здесь , более конкретно на папку рендерера внутри src) [115 ]
Сохранение холста в состоянии внутри массива (правильный способ реагирования на действия) будет проблемой, поскольку он сохраняет его как сложный объект со многими методами и т. Д. ... и мы не можем визуализировать объекты. . Эта библиотека не была написана с учетом React ...
Пример кода ниже представляет собой простую реализацию в React ...
Вот живая демонстрация: https://codesandbox.io/s/9y24vwn1py
import React, { Component } from 'react';
import html2canvas from 'html2canvas';
class App extends Component {
constructor(props) {
super(props);
this.captureRef = React.createRef();
this.displayRef = React.createRef();
}
getScreenshotHandler = () => {
html2canvas(this.captureRef.current).then(canvas =>
this.displayRef.current.appendChild(canvas),
);
};
render() {
return (
This enitre div will be captured and added to the screen
Your screenshots will be availbale below
);
}
}
export default App;
РЕДАКТИРОВАТЬ: на основе комментария ниже приведен еще один обходной путь:
class App extends Component {
constructor(props) {
super(props);
this.state = { canvasArray: [] };
this.captureRef = React.createRef();
}
getScreenshotHandler = () => {
html2canvas(this.captureRef.current).then(canvas =>
this.setState({
canvasArray: [canvas.toDataURL(), ...this.state.canvasArray],
}),
);
};
renderCanvas = () => {
return this.state.canvasArray.map((canvas, i) => {
return ;
});
};
render() {
return (
This enitre div will be captured
Your screenshots will be availbale below:
{this.renderCanvas()}
);
}
}
Ссылка на демонстрационный ролик: https://codesandbox.io/s/1r213057vq
Можно хотеть исследовать http://os.inf.tu-dresden.de/vfiasco/related.html#parsing. Но парсинг C++ труден.
С другой стороны, возможно, ctags или что-то подобное может извлечь определения классов...
Можно также попытаться записать собственный простой (?) синтаксический анализатор для генерации тупиков класса от заголовочных файлов...
Я пытался дать Вам некоторые подсказки. Как Вы видите, проблема не легка. Но надо надеяться можно автоматизировать по крайней мере некоторую часть его.
http://clang.llvm.org/ выглядит многообещающим, но является неполным.
http://www.boost.org/doc/libs/1_36_0/libs/python/pyste/index.html использует GCCXML для генерации оберток для кода C++ для взаимодействия через интерфейс с Python. Это доказывает, что GCCXML использовался для подобного понятия.
Gcc XML используется в некоторых проектах, таких как автоматический FFI для языка Common LISP. Это набрасывается на G ++ компилятор для генерации XML представление источника. Оттуда, любой инструмент обработки XML мог помочь Вам достигнуть своей цели.
Если Вы находитесь на aplatform, которая использует КАРЛИКОВЫЙ формат отладки (главным образом UNIX), можно использовать libdwarf для парсинга отладочной информации и информации об извлечении обо всем (прототипы функции, определения классов, и т.д.). Намного более структурированный и легче проанализировать, чем C++.
doxygen может обычно анализировать достаточно C++ для создания документации для кода. Это также имеет выходную опцию XML.
Вы смотрели на Mockcpp, AMOP и mockpp? Вы видели, как они анализируют C++ - если ни один из них не соответствует Вашим потребностям.
Если Вы находитесь на платформе Windows, Вы могли бы хотеть взглянуть на проект Microsoft Phoenix. Это - новая платформа компилятора, которая позволяет Вам сцепиться в любой этап процесса компиляции.
Eclipse проект CDT предоставляет усовершенствованный синтаксический анализатор C++. Интерфейс довольно легок. Следующий фрагмент кода может дать достаточно подсказки.
ITranslationUnit tu = CoreModelUtil.findTranslationUnit (файл);
ICElement [] элементы = tu.getChildren ();
Структура IStructure = (IStructure) элемент;
IMethodDeclaration [] методы = structure.getMethods ();
Поле IField[] = structure.getFields ();