Remove doc folder (old archived spec and assets), word2md script (#51791)
This commit is contained in:
Родитель
c57fea2a0d
Коммит
91822db8e0
|
@ -818,13 +818,6 @@ export const lkg = task({
|
|||
dependencies: [produceLKG],
|
||||
});
|
||||
|
||||
export const generateSpec = task({
|
||||
name: "generate-spec",
|
||||
description: "Generates a Markdown version of the Language Specification",
|
||||
hiddenFromTaskList: true,
|
||||
run: () => exec("cscript", ["//nologo", "scripts/word2md.mjs", path.resolve("doc/TypeScript Language Specification - ARCHIVED.docx"), path.resolve("doc/spec-ARCHIVED.md")]),
|
||||
});
|
||||
|
||||
export const cleanBuilt = task({
|
||||
name: "clean-built",
|
||||
hiddenFromTaskList: true,
|
||||
|
|
|
@ -33,8 +33,6 @@ There are many ways to [contribute](https://github.com/microsoft/TypeScript/blob
|
|||
* Help each other in the [TypeScript Community Discord](https://discord.gg/typescript).
|
||||
* Join the [#typescript](https://twitter.com/search?q=%23TypeScript) discussion on Twitter.
|
||||
* [Contribute bug fixes](https://github.com/microsoft/TypeScript/blob/main/CONTRIBUTING.md).
|
||||
* Read the archived language specification ([docx](https://github.com/microsoft/TypeScript/blob/main/doc/TypeScript%20Language%20Specification%20-%20ARCHIVED.docx?raw=true),
|
||||
[pdf](https://github.com/microsoft/TypeScript/blob/main/doc/TypeScript%20Language%20Specification%20-%20ARCHIVED.pdf?raw=true), [md](https://github.com/microsoft/TypeScript/blob/main/doc/spec-ARCHIVED.md)).
|
||||
|
||||
This project has adopted the [Microsoft Open Source Code of Conduct](https://opensource.microsoft.com/codeofconduct/). For more information see
|
||||
the [Code of Conduct FAQ](https://opensource.microsoft.com/codeofconduct/faq/) or contact [opencode@microsoft.com](mailto:opencode@microsoft.com)
|
||||
|
|
|
@ -1,9 +0,0 @@
|
|||
# Read This!
|
||||
|
||||
This directory contains miscellaneous documentation such as the TypeScript language specification and logo.
|
||||
If you are looking for more introductory material, you might want to take a look at the [TypeScript Handbook](https://github.com/Microsoft/TypeScript-Handbook).
|
||||
|
||||
|
||||
# Archived Spec
|
||||
|
||||
NOTE: the files in this directory are NOT meant to be edited. They are a snapshot of the out-of-date specification which is no longer being updated. We will not be accepting changes to these documents.
|
Двоичный файл не отображается.
Двоичный файл не отображается.
Двоичные данные
doc/TypeScript Language Specification - ARCHIVED.docx
Двоичные данные
doc/TypeScript Language Specification - ARCHIVED.docx
Двоичный файл не отображается.
Двоичные данные
doc/TypeScript Language Specification - ARCHIVED.pdf
Двоичные данные
doc/TypeScript Language Specification - ARCHIVED.pdf
Двоичный файл не отображается.
|
@ -1,5 +0,0 @@
|
|||
# The TypeScript Handbook
|
||||
|
||||
The contents of the TypeScript Handbook can be found in the
|
||||
[TypeScript website repository](https://github.com/microsoft/TypeScript-Website/tree/v2/packages/documentation).
|
||||
Issues and pull requests should be directed there.
|
Двоичные данные
doc/images/image1.png
Двоичные данные
doc/images/image1.png
Двоичный файл не отображается.
До Ширина: | Высота: | Размер: 11 KiB |
Двоичные данные
doc/images/image2.png
Двоичные данные
doc/images/image2.png
Двоичный файл не отображается.
До Ширина: | Высота: | Размер: 10 KiB |
Двоичные данные
doc/images/image3.png
Двоичные данные
doc/images/image3.png
Двоичный файл не отображается.
До Ширина: | Высота: | Размер: 5.9 KiB |
Двоичные данные
doc/images/image4.png
Двоичные данные
doc/images/image4.png
Двоичный файл не отображается.
До Ширина: | Высота: | Размер: 16 KiB |
10
doc/logo.svg
10
doc/logo.svg
|
@ -1,10 +0,0 @@
|
|||
<svg id="logo-typescript" xmlns="http://www.w3.org/2000/svg" viewBox="-64.9 417 216.5 51.9">
|
||||
<style>
|
||||
.st0 {
|
||||
fill: #000
|
||||
}
|
||||
</style>
|
||||
<path class="st0" d="M-38.2 421.7h-11.1V456h-4.5v-34.3h-11.1v-4.1h26.6v4.1h.1z" />
|
||||
<path class="st0" d="M-16.9 428.6l-12.6 31.8c-2.3 5.7-5.4 8.5-9.5 8.5-1.1 0-2.1-.1-2.9-.3v-3.9c.9.3 1.8.5 2.6.5 2.2 0 3.9-1.3 5-4l2.2-5.2-10.7-27.4h4.9l7.4 21.1c.1.3.3 1 .6 2.1h.2c.1-.4.3-1.1.5-2l7.8-21.2h4.5zM-9.5 452.1h-.1v16.6H-14v-40h4.4v4.8h.1c2.2-3.6 5.3-5.5 9.5-5.5 3.5 0 6.3 1.2 8.3 3.7s3 5.7 3 9.9c0 4.6-1.1 8.3-3.3 11s-5.3 4.1-9.2 4.1c-3.6 0-6.3-1.5-8.3-4.6zm-.1-11.1v3.8c0 2.3.7 4.2 2.2 5.8s3.3 2.4 5.6 2.4c2.7 0 4.7-1 6.3-3.1 1.6-2.1 2.3-4.9 2.3-8.5 0-3.1-.7-5.4-2.1-7.2-1.4-1.7-3.3-2.6-5.7-2.6-2.6 0-4.6.9-6.2 2.7-1.6 1.8-2.4 4-2.4 6.7zM38.4 443.4H19c.1 3.1.9 5.4 2.5 7.1s3.7 2.5 6.5 2.5c3.1 0 5.9-1 8.5-3.1v4.1c-2.4 1.8-5.6 2.6-9.6 2.6-3.9 0-6.9-1.2-9.1-3.7-2.2-2.5-3.3-6-3.3-10.5 0-4.3 1.2-7.7 3.6-10.4 2.4-2.7 5.4-4 9-4s6.4 1.2 8.3 3.5c2 2.3 2.9 5.5 2.9 9.7v2.2h.1zm-4.5-3.7c0-2.5-.6-4.5-1.8-5.9-1.2-1.4-2.9-2.1-5-2.1s-3.8.7-5.3 2.2c-1.4 1.5-2.3 3.4-2.7 5.8h14.8zM40.8 454.7v-3c2.8 1.8 5.5 2.6 8.4 2.6 3 0 5.3-.6 6.8-1.9 1.6-1.2 2.3-3 2.3-5.2 0-2-.5-3.5-1.6-4.7-1-1.2-3.3-2.8-6.8-4.8-3.9-2.3-6.4-4.2-7.4-5.7s-1.6-3.3-1.6-5.3c0-2.7 1.1-5 3.2-6.9 2.1-1.9 4.9-2.8 8.4-2.8 2.3 0 4.6.4 6.9 1.2v2.8c-2.3-1-4.7-1.5-7.2-1.5-2.6 0-4.7.7-6.2 2s-2.3 3-2.3 5 .5 3.5 1.6 4.7c1 1.2 3.3 2.7 6.8 4.7 3.6 2 6 3.8 7.2 5.4 1.2 1.6 1.8 3.4 1.8 5.5 0 2.9-1 5.3-3.1 7.2-2 1.9-4.9 2.8-8.7 2.8-1.3 0-2.8-.2-4.6-.6-1.6-.5-2.9-1-3.9-1.5zM84.3 454.8c-2 1.2-4.5 1.9-7.3 1.9-3.7 0-6.7-1.3-9-3.8-2.3-2.6-3.4-5.9-3.4-10.1 0-4.4 1.3-7.9 3.9-10.7 2.6-2.8 5.9-4.2 9.9-4.2 2.1 0 4.1.4 6.1 1.3v2.8c-2-1.2-4.1-1.8-6.5-1.8-3.2 0-5.8 1.2-7.8 3.5s-3 5.3-3 9c0 3.6.9 6.4 2.7 8.6 1.8 2.2 4.2 3.2 7.2 3.2 2.7 0 5.1-.7 7.2-2.2v2.5zM100.9 431.2c-.8-.6-1.8-.9-2.9-.9-2.2 0-4 1.1-5.4 3.3-1.5 2.2-2.2 5.4-2.2 9.5V456H88v-27.4h2.4v6.1h.1c.6-2.1 1.6-3.7 3-4.9 1.4-1.2 2.9-1.7 4.7-1.7 1 0 1.9.2 2.7.5v2.6zM105.1 421.7c-.5 0-1-.2-1.4-.6s-.6-.9-.6-1.5.2-1.1.6-1.4c.4-.4.9-.5 1.4-.5.6 0 1 .2 1.5.5.4.4.6.8.6 1.4s-.2 1.1-.6 1.5c-.5.4-.9.6-1.5.6zm-1.2 34.4v-27.4h2.5v27.4h-2.5zM115 451.2h-.1v17.5h-2.5v-40h2.5v5.7h.1c1-2 2.4-3.6 4.2-4.7 1.8-1.1 3.8-1.6 6-1.6 3.5 0 6.2 1.2 8.2 3.6 2 2.4 2.9 5.7 2.9 9.8 0 4.6-1.1 8.3-3.4 11.1-2.2 2.8-5.2 4.2-8.9 4.2-4-.1-7-1.9-9-5.6zm-.1-10.2v3.5c0 2.8.9 5.1 2.6 7.1s4 3 6.8 3 5.1-1.2 6.8-3.6c1.7-2.4 2.6-5.6 2.6-9.5 0-3.4-.8-6.2-2.4-8.2s-3.8-3-6.4-3c-3.2 0-5.7 1.1-7.4 3.2-1.7 2.1-2.6 4.6-2.6 7.5zM151.6 455.7c-1.3.6-2.5.9-3.6.9-4.1 0-6.1-2.4-6.1-7.3v-18.4H137v-2.3h4.9v-7.1c.4-.1.8-.3 1.2-.4.4-.1.8-.3 1.2-.4v8h7.2v2.3h-7.2v18.1c0 1.9.3 3.3.9 4.1.6.8 1.6 1.3 3 1.3 1 0 2.1-.3 3.3-1v2.2h.1z"
|
||||
/>
|
||||
</svg>
|
До Ширина: | Высота: | Размер: 2.7 KiB |
6738
doc/spec-ARCHIVED.md
6738
doc/spec-ARCHIVED.md
Разница между файлами не показана из-за своего большого размера
Загрузить разницу
|
@ -1,6 +0,0 @@
|
|||
# The TypeScript Wiki
|
||||
|
||||
To read the wiki, [visit the wiki on GitHub](https://github.com/Microsoft/TypeScript/wiki).
|
||||
|
||||
To contribute by filing an issue or sending a pull request, [visit the wiki repository](https://github.com/Microsoft/TypeScript-wiki).
|
||||
|
|
@ -1,122 +0,0 @@
|
|||
declare namespace Word {
|
||||
export interface Collection<T> {
|
||||
count: number;
|
||||
item(index: number): T;
|
||||
}
|
||||
|
||||
export interface Font {
|
||||
bold: boolean;
|
||||
italic: boolean;
|
||||
subscript: boolean;
|
||||
superscript: boolean;
|
||||
}
|
||||
|
||||
export interface Find {
|
||||
font: Font;
|
||||
format: boolean;
|
||||
replacement: Replacement;
|
||||
style: any;
|
||||
text: string;
|
||||
clearFormatting(): void;
|
||||
execute(
|
||||
findText: string,
|
||||
matchCase: boolean,
|
||||
matchWholeWord: boolean,
|
||||
matchWildcards: boolean,
|
||||
matchSoundsLike: boolean,
|
||||
matchAllWordForms: boolean,
|
||||
forward: boolean,
|
||||
wrap: number,
|
||||
format: boolean,
|
||||
replaceWith: string,
|
||||
replace: number): boolean;
|
||||
}
|
||||
|
||||
export interface Replacement {
|
||||
font: Font;
|
||||
style: any;
|
||||
text: string;
|
||||
clearFormatting(): void;
|
||||
}
|
||||
|
||||
export interface ListFormat {
|
||||
listLevelNumber: number;
|
||||
listString: string;
|
||||
}
|
||||
|
||||
export interface Column {
|
||||
}
|
||||
|
||||
export interface Columns extends Collection<Column> {
|
||||
}
|
||||
|
||||
export interface Table {
|
||||
columns: Columns;
|
||||
}
|
||||
|
||||
export interface Tables extends Collection<Table> {
|
||||
}
|
||||
|
||||
export interface Range {
|
||||
find: Find;
|
||||
listFormat: ListFormat;
|
||||
tables: Tables;
|
||||
text: string;
|
||||
textRetrievalMode: {
|
||||
includeHiddenText: boolean;
|
||||
}
|
||||
words: Ranges;
|
||||
}
|
||||
|
||||
export interface Ranges extends Collection<Range> {
|
||||
}
|
||||
|
||||
export interface Style {
|
||||
nameLocal: string;
|
||||
}
|
||||
|
||||
export interface Paragraph {
|
||||
alignment: number;
|
||||
range: Range;
|
||||
style: Style;
|
||||
next(): Paragraph;
|
||||
}
|
||||
|
||||
export interface Paragraphs extends Collection<Paragraph> {
|
||||
first: Paragraph;
|
||||
}
|
||||
|
||||
export interface Field {
|
||||
}
|
||||
|
||||
export interface Fields extends Collection<Field> {
|
||||
toggleShowCodes(): void;
|
||||
}
|
||||
|
||||
export interface Hyperlink {
|
||||
address: string;
|
||||
textToDisplay: string;
|
||||
range: Range;
|
||||
}
|
||||
|
||||
export interface Hyperlinks extends Collection<Hyperlink> {
|
||||
}
|
||||
|
||||
export interface Document {
|
||||
fields: Fields;
|
||||
paragraphs: Paragraphs;
|
||||
hyperlinks: Hyperlinks;
|
||||
builtInDocumentProperties: Collection<any>;
|
||||
close(saveChanges: boolean): void;
|
||||
range(): Range;
|
||||
}
|
||||
|
||||
export interface Documents extends Collection<Document> {
|
||||
open(filename: string): Document;
|
||||
}
|
||||
|
||||
export interface Application {
|
||||
documents: Documents;
|
||||
quit(): void;
|
||||
}
|
||||
}
|
|
@ -1,343 +0,0 @@
|
|||
// word2md - Word to Markdown conversion tool
|
||||
//
|
||||
// word2md converts a Microsoft Word document to Markdown formatted text. The tool uses the
|
||||
// Word Automation APIs to start an instance of Word and access the contents of the document
|
||||
// being converted. The tool must be run using the cscript.exe script host and requires Word
|
||||
// to be installed on the target machine. The name of the document to convert must be specified
|
||||
// as a command line argument and the resulting Markdown is written to standard output. The
|
||||
// tool recognizes the specific Word styles used in the TypeScript Language Specification.
|
||||
|
||||
/// <reference lib="scripthost" />
|
||||
// eslint-disable-next-line @typescript-eslint/triple-slash-reference
|
||||
/// <reference path="./word.d.ts" />
|
||||
|
||||
/** @type {{
|
||||
args: string[];
|
||||
createObject: (typeName: string) => any;
|
||||
write(s: string): void;
|
||||
writeFile: (fileName: string, data: string) => void;
|
||||
}} */
|
||||
const sys = (() => {
|
||||
const fileStream = new ActiveXObject("ADODB.Stream");
|
||||
fileStream.Type = 2 /* text */;
|
||||
const binaryStream = new ActiveXObject("ADODB.Stream");
|
||||
binaryStream.Type = 1 /* binary */;
|
||||
const args = [];
|
||||
for (let i = 0; i < WScript.Arguments.length; i++) {
|
||||
args[i] = WScript.Arguments.Item(i);
|
||||
}
|
||||
return {
|
||||
args,
|
||||
createObject: (typeName) => new ActiveXObject(typeName),
|
||||
write(s) {
|
||||
WScript.StdOut.Write(s);
|
||||
},
|
||||
writeFile: (fileName, data) => {
|
||||
fileStream.Open();
|
||||
binaryStream.Open();
|
||||
try {
|
||||
// Write characters in UTF-8 encoding
|
||||
fileStream.Charset = "utf-8";
|
||||
fileStream.WriteText(data);
|
||||
// We don't want the BOM, skip it by setting the starting location to 3 (size of BOM).
|
||||
fileStream.Position = 3;
|
||||
fileStream.CopyTo(binaryStream);
|
||||
binaryStream.SaveToFile(fileName, 2 /*overwrite*/);
|
||||
}
|
||||
finally {
|
||||
binaryStream.Close();
|
||||
fileStream.Close();
|
||||
}
|
||||
}
|
||||
};
|
||||
})();
|
||||
|
||||
/** @typedef {{
|
||||
style?: any;
|
||||
font?: {
|
||||
bold?: boolean;
|
||||
italic?: boolean;
|
||||
subscript?: boolean;
|
||||
};
|
||||
}} FindReplaceOptions */
|
||||
void 0;
|
||||
|
||||
/**
|
||||
* @param {Word.Document} doc
|
||||
* @returns {string}
|
||||
*/
|
||||
function convertDocumentToMarkdown(doc) {
|
||||
/** @type {number[]} */
|
||||
const columnAlignment = [];
|
||||
/** @type {number} */
|
||||
let tableColumnCount;
|
||||
/** @type {number} */
|
||||
let tableCellIndex;
|
||||
/** @type {boolean} */
|
||||
let lastInTable;
|
||||
/** @type {string} */
|
||||
let lastStyle;
|
||||
let result = "";
|
||||
|
||||
/**
|
||||
* @param {any} target
|
||||
* @param {any} properties
|
||||
*/
|
||||
function setProperties(target, properties) {
|
||||
for (const name in properties) {
|
||||
if (Object.prototype.hasOwnProperty.call(properties, name)) {
|
||||
const value = properties[name];
|
||||
if (typeof value === "object") {
|
||||
setProperties(target[name], value);
|
||||
}
|
||||
else {
|
||||
target[name] = value;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* @param {string} findText
|
||||
* @param {FindReplaceOptions} findOptions
|
||||
* @param {string} replaceText
|
||||
* @param {FindReplaceOptions} replaceOptions
|
||||
*/
|
||||
function findReplace(findText, findOptions, replaceText, replaceOptions) {
|
||||
const find = doc.range().find;
|
||||
find.clearFormatting();
|
||||
setProperties(find, findOptions);
|
||||
const replace = find.replacement;
|
||||
replace.clearFormatting();
|
||||
setProperties(replace, replaceOptions);
|
||||
find.execute(findText,
|
||||
/* matchCase */ false,
|
||||
/* matchWholeWord */ false,
|
||||
/* matchWildcards */ false,
|
||||
/* matchSoundsLike */ false,
|
||||
/* matchAllWordForms */ false,
|
||||
/* forward */ true,
|
||||
0,
|
||||
/* format */ true,
|
||||
replaceText,
|
||||
2
|
||||
);
|
||||
}
|
||||
|
||||
function fixHyperlinks() {
|
||||
const count = doc.hyperlinks.count;
|
||||
for (let i = 0; i < count; i++) {
|
||||
const hyperlink = doc.hyperlinks.item(i + 1);
|
||||
const address = hyperlink.address;
|
||||
if (address && address.length > 0) {
|
||||
const textToDisplay = hyperlink.textToDisplay;
|
||||
hyperlink.textToDisplay = "[" + textToDisplay + "](" + address + ")";
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* @param {string} s
|
||||
*/
|
||||
function write(s) {
|
||||
result += s;
|
||||
}
|
||||
|
||||
function writeTableHeader() {
|
||||
for (let i = 0; i < tableColumnCount - 1; i++) {
|
||||
switch (columnAlignment[i]) {
|
||||
case 1:
|
||||
write("|:---:");
|
||||
break;
|
||||
case 2:
|
||||
write("|---:");
|
||||
break;
|
||||
default:
|
||||
write("|---");
|
||||
}
|
||||
}
|
||||
write("|\n");
|
||||
}
|
||||
|
||||
/**
|
||||
* @param {string} text
|
||||
*/
|
||||
function trimEndFormattingMarks(text) {
|
||||
let i = text.length;
|
||||
while (i > 0 && text.charCodeAt(i - 1) < 0x20) i--;
|
||||
return text.substr(0, i);
|
||||
}
|
||||
|
||||
function writeBlockEnd() {
|
||||
switch (lastStyle) {
|
||||
case "Code":
|
||||
write("```\n\n");
|
||||
break;
|
||||
case "List Paragraph":
|
||||
case "Table":
|
||||
case "TOC":
|
||||
write("\n");
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* @param {Word.Paragraph} p
|
||||
*/
|
||||
function writeParagraph(p) {
|
||||
|
||||
const range = p.range;
|
||||
const inTable = range.tables.count > 0;
|
||||
const sectionBreak = range.text.indexOf("\x0C") >= 0;
|
||||
|
||||
let level = 1;
|
||||
let style = p.style.nameLocal;
|
||||
let text = range.text;
|
||||
|
||||
text = trimEndFormattingMarks(text);
|
||||
if (text === "/") {
|
||||
// An inline image shows up in the text as a "/". When we see a paragraph
|
||||
// consisting of nothing but "/", we check to see if the paragraph contains
|
||||
// hidden text and, if so, emit that instead. The hidden text is assumed to
|
||||
// contain an appropriate markdown image link.
|
||||
range.textRetrievalMode.includeHiddenText = true;
|
||||
const fullText = range.text;
|
||||
range.textRetrievalMode.includeHiddenText = false;
|
||||
if (text !== fullText) {
|
||||
text = "  " + fullText.substr(1);
|
||||
}
|
||||
}
|
||||
|
||||
if (inTable) {
|
||||
style = "Table";
|
||||
}
|
||||
else if (style.match(/\s\d$/)) {
|
||||
level = +style.substr(style.length - 1);
|
||||
style = style.substr(0, style.length - 2);
|
||||
}
|
||||
if (lastStyle && style !== lastStyle) {
|
||||
writeBlockEnd();
|
||||
}
|
||||
|
||||
switch (style) {
|
||||
|
||||
case "Heading":
|
||||
case "Appendix":
|
||||
const section = range.listFormat.listString;
|
||||
write("####".substr(0, level) + ' <a name="' + section + '"/>' + section + " " + text + "\n\n");
|
||||
break;
|
||||
|
||||
case "Normal":
|
||||
if (text.length) {
|
||||
write(text + "\n\n");
|
||||
}
|
||||
break;
|
||||
|
||||
case "List Paragraph":
|
||||
write(" ".substr(0, range.listFormat.listLevelNumber * 2 - 2) + "* " + text + "\n");
|
||||
break;
|
||||
|
||||
case "Grammar":
|
||||
write("  " + text.replace(/\s\s\s/g, " ").replace(/\x0B/g, " \n   ") + "\n\n");
|
||||
break;
|
||||
|
||||
case "Code":
|
||||
if (lastStyle !== "Code") {
|
||||
write("```TypeScript\n");
|
||||
}
|
||||
else {
|
||||
write("\n");
|
||||
}
|
||||
write(text.replace(/\x0B/g, " \n") + "\n");
|
||||
break;
|
||||
|
||||
case "Table":
|
||||
if (!lastInTable) {
|
||||
tableColumnCount = range.tables.item(1).columns.count + 1;
|
||||
tableCellIndex = 0;
|
||||
}
|
||||
if (tableCellIndex < tableColumnCount) {
|
||||
columnAlignment[tableCellIndex] = p.alignment;
|
||||
}
|
||||
write("|" + text);
|
||||
tableCellIndex++;
|
||||
if (tableCellIndex % tableColumnCount === 0) {
|
||||
write("\n");
|
||||
if (tableCellIndex === tableColumnCount) {
|
||||
writeTableHeader();
|
||||
}
|
||||
}
|
||||
break;
|
||||
|
||||
case "TOC Heading":
|
||||
write("## " + text + "\n\n");
|
||||
break;
|
||||
|
||||
case "TOC":
|
||||
const strings = text.split("\t");
|
||||
write(" ".substr(0, level * 2 - 2) + "* [" + strings[0] + " " + strings[1] + "](#" + strings[0] + ")\n");
|
||||
break;
|
||||
}
|
||||
|
||||
if (sectionBreak) {
|
||||
write("<br/>\n\n");
|
||||
}
|
||||
lastStyle = style;
|
||||
lastInTable = inTable;
|
||||
}
|
||||
|
||||
function writeDocument() {
|
||||
const title = doc.builtInDocumentProperties.item(1) + "";
|
||||
if (title.length) {
|
||||
write("# " + title + "\n\n");
|
||||
}
|
||||
for (let p = doc.paragraphs.first; p; p = p.next()) {
|
||||
writeParagraph(p);
|
||||
}
|
||||
writeBlockEnd();
|
||||
}
|
||||
|
||||
findReplace("<", {}, "<", {});
|
||||
findReplace("<", { style: "Code" }, "<", {});
|
||||
findReplace("<", { style: "Code Fragment" }, "<", {});
|
||||
findReplace("<", { style: "Terminal" }, "<", {});
|
||||
findReplace("", { font: { subscript: true } }, "<sub>^&</sub>", { font: { subscript: false } });
|
||||
findReplace("", { style: "Code Fragment" }, "`^&`", { style: -66 /* default font */ });
|
||||
findReplace("", { style: "Production" }, "*^&*", { style: -66 /* default font */ });
|
||||
findReplace("", { style: "Terminal" }, "`^&`", { style: -66 /* default font */ });
|
||||
findReplace("", { font: { bold: true, italic: true } }, "***^&***", { font: { bold: false, italic: false } });
|
||||
findReplace("", { font: { italic: true } }, "*^&*", { font: { italic: false } });
|
||||
|
||||
doc.fields.toggleShowCodes();
|
||||
findReplace("^19 REF", {}, "[^&](#^&)", {});
|
||||
doc.fields.toggleShowCodes();
|
||||
|
||||
fixHyperlinks();
|
||||
|
||||
writeDocument();
|
||||
|
||||
result = result.replace(/\x85/g, "\u2026");
|
||||
result = result.replace(/\x96/g, "\u2013");
|
||||
result = result.replace(/\x97/g, "\u2014");
|
||||
|
||||
return result;
|
||||
}
|
||||
|
||||
/**
|
||||
* @param {string[]} args
|
||||
*/
|
||||
function main(args) {
|
||||
if (args.length !== 2) {
|
||||
sys.write("Syntax: word2md <inputfile> <outputfile>\n");
|
||||
return;
|
||||
}
|
||||
|
||||
/** @type {Word.Application} */
|
||||
const app = sys.createObject("Word.Application");
|
||||
const doc = app.documents.open(args[0]);
|
||||
sys.writeFile(args[1], convertDocumentToMarkdown(doc));
|
||||
doc.close(/* saveChanges */ false);
|
||||
app.quit();
|
||||
}
|
||||
|
||||
main(sys.args);
|
Загрузка…
Ссылка в новой задаче