1 | 'use script'
|
2 | const fs = require('mz/fs')
|
3 | const path = require('path')
|
4 | const remark = require('remark')
|
5 |
|
6 | const Listmd = require('./util/readmd.js')
|
7 | const cutMdhead = require('./util/cutMdhead.js')
|
8 | const { O2A } = require('./util/util.js')
|
9 |
|
10 | const {
|
11 | logger
|
12 | } = require('./config/loggerConfig.js')
|
13 |
|
14 |
|
15 | const mergeConfig = require('./config/mergeConfig')
|
16 |
|
17 |
|
18 |
|
19 |
|
20 |
|
21 |
|
22 |
|
23 |
|
24 |
|
25 |
|
26 |
|
27 |
|
28 | async function translateMds(options, debug, isCli = false) {
|
29 |
|
30 | let absoluteFile, api, tranFrom, tranTo
|
31 | if (!options) throw logger.error('options is NULL')
|
32 |
|
33 |
|
34 | if (options instanceof Array) {
|
35 | [absoluteFile, api, tranFrom, tranTo] = options
|
36 | } else if (options instanceof Object) {
|
37 | [absoluteFile, api, tranFrom, tranTo] = O2A(options)
|
38 | }
|
39 |
|
40 | if (!absoluteFile || !path.isAbsolute(absoluteFile)) {
|
41 | throw logger.error(`translateMds absoluteFile is no absolute ${absoluteFile}`)
|
42 | }
|
43 |
|
44 |
|
45 | if (!isCli) {
|
46 | let opts = {
|
47 | debug,
|
48 | tranFrom,
|
49 | tranTo,
|
50 | api,
|
51 | options
|
52 | };
|
53 |
|
54 | let back = mergeConfig.main(opts)
|
55 | debug = back.debug
|
56 | tranFrom = back.tranFrom
|
57 | tranTo = back.tranTo
|
58 | api = back.api
|
59 | }
|
60 |
|
61 |
|
62 | const {
|
63 | setObjectKey
|
64 | } = require('./setObjectKey.js')
|
65 |
|
66 | async function t(data,opts) {
|
67 |
|
68 | let head, body, mdAst,translateMdAst
|
69 | [body, head] = cutMdhead(data)
|
70 |
|
71 |
|
72 | mdAst = remark.parse(body)
|
73 |
|
74 |
|
75 | translateMdAst = await setObjectKey(mdAst, opts)
|
76 |
|
77 | if (typeof translateMdAst !== 'string') {
|
78 | let E = translateMdAst.Error
|
79 |
|
80 | body = remark().use({
|
81 | settings: {commonmark: true, emphasis: '*', strong: '*', fences: true, paddedTable: false}
|
82 | }).stringify(translateMdAst)
|
83 |
|
84 | return [head+body, E]
|
85 | }
|
86 |
|
87 | return ['',translateMdAst]
|
88 | }
|
89 |
|
90 | let results = []
|
91 |
|
92 |
|
93 | const getList = isCli ? [absoluteFile] : await Listmd(absoluteFile, {deep:'all'})
|
94 | for (i in getList) {
|
95 | let value = getList[i]
|
96 |
|
97 |
|
98 | if(isCli){
|
99 |
|
100 | }else{
|
101 | if ( value.endsWith(`.${tranTo}.md`) || value.match(/\.[a-zA-Z]+\.md+/) || !value.endsWith('.md')){
|
102 | continue
|
103 | }
|
104 | const {insert_flg } = require('./util/util.js')
|
105 |
|
106 | if ( fs.existsSync( insert_flg(value,`.${tranTo}`, 3 ))){
|
107 | continue
|
108 | }
|
109 | }
|
110 |
|
111 | let readfile = await fs.readFile(value, 'utf8')
|
112 |
|
113 | let E
|
114 | let _translate = await t(readfile,{name:value,api}).then(x => {
|
115 | E = x[1]
|
116 | return x[0]
|
117 | }).catch(x => {
|
118 | E = x
|
119 | return ''
|
120 | })
|
121 | results.push({text:_translate, error:E})
|
122 | }
|
123 |
|
124 | return results
|
125 | }
|
126 |
|
127 |
|
128 | module.exports = translateMds
|