blob: 1019259e42ef4052d7a97214d31b58747fbb927a [file] [log] [blame]
Yang Guoa999fec2019-07-25 07:54:38 +00001# Copyright 2019 The Chromium Authors. All rights reserved.
2# Use of this source code is governed by a BSD-style license that can be
3# found in the LICENSE file.
4
5import argparse
6import glob
7import os
8import shutil
9import subprocess
10import sys
11
12
13def parse_options(cli_args):
14 parser = argparse.ArgumentParser(description='Roll CodeMirror')
15 parser.add_argument('cm_dir', help='CodeMirror directory')
16 parser.add_argument('devtools_dir', help='DevTools directory')
17 return parser.parse_args(cli_args)
18
19
20def run_npm(options):
21 print 'Building CodeMirror in %s' % os.path.abspath(options.cm_dir)
22 subprocess.check_output(['npm', 'install'], cwd=options.cm_dir, stderr=subprocess.PIPE)
23 subprocess.check_output(['npm', 'run', 'build'], cwd=options.cm_dir, stderr=subprocess.PIPE)
24
25
26def copy_lib_files(options):
27 print 'Copying codemirror.js and codemirror.css'
28 result = ''
29 target_dir = os.path.join(options.devtools_dir, 'front_end', 'cm')
30
31 with open(os.path.join(options.cm_dir, 'lib', 'codemirror.js'), 'r') as read:
32 lines = read.readlines()
33 with open(os.path.join(target_dir, 'codemirror.js'), 'w') as write:
34 for line in lines:
35 if 'CodeMirror.version =' in line:
36 result = line.strip()
37 write.write(line)
38
39 with open(os.path.join(options.cm_dir, 'lib', 'codemirror.css'), 'r') as read:
40 lines = read.readlines()
41 found_stop = False
42 with open(os.path.join(target_dir, 'codemirror.css'), 'w') as write:
43 for line in lines:
44 if found_stop:
45 write.write(line)
46 elif '/* STOP */' in line:
47 found_stop = True
48 assert found_stop
49 return result
50
51
52def copy_headless_file(options):
53 print 'Copying runmode-standalone.js into headlesscodemirror.js'
54 source_file = os.path.join(options.cm_dir, 'addon', 'runmode', 'runmode-standalone.js')
55 target_file = os.path.join(options.devtools_dir, 'front_end', 'cm_headless', 'headlesscodemirror.js')
56
57 with open(source_file, 'r') as read:
58 lines = read.readlines()
59 with open(target_file, 'w') as write:
60 write.write('// Content of the function is equal to runmode-standalone.js file\n')
61 write.write('// from CodeMirror distribution\n')
62 write.write('(function(window) {\n')
63 for line in lines:
64 write.write(line)
65 write.write('}(this))\n')
66
67
68def find_and_copy_js_files(source_dir, target_dir, filter_fn):
69 for f in os.listdir(target_dir):
70 if not filter_fn(f):
71 continue
72 target_file = os.path.join(target_dir, f)
73 if not os.path.isfile(os.path.join(target_dir, f)):
74 continue
75 source = glob.glob(os.path.join(source_dir, '*', f))
76 assert len(source) == 1
77 source_file = source[0]
78 print 'Copying %s from %s' % (target_file, source_file)
79 shutil.copyfile(source_file, target_file)
80
81
82def copy_cm_files(options):
83 source_dir = os.path.join(options.cm_dir, 'addon')
84 target_dir = os.path.join(options.devtools_dir, 'front_end', 'cm')
85
86 def cm_filter(f):
87 return f.endswith('.js') and f != 'codemirror.js'
88
89 find_and_copy_js_files(source_dir, target_dir, cm_filter)
90
91
92def copy_cm_modes_files(options):
93 source_dir = os.path.join(options.cm_dir, 'mode')
94 target_dir = os.path.join(options.devtools_dir, 'front_end', 'cm_modes')
95
96 def cm_modes_filter(f):
97 return f.endswith('.js') and f != 'DefaultCodeMirrorMimeMode.js'
98
99 find_and_copy_js_files(source_dir, target_dir, cm_modes_filter)
100
101
102def copy_cm_web_modes_files(options):
103 source_dir = os.path.join(options.cm_dir, 'mode')
104 target_dir = os.path.join(options.devtools_dir, 'front_end', 'cm_web_modes')
105
106 def cm_web_modes_filter(f):
107 return f.endswith('.js')
108
109 find_and_copy_js_files(source_dir, target_dir, cm_web_modes_filter)
110
111
112if __name__ == '__main__':
113 OPTIONS = parse_options(sys.argv[1:])
114 run_npm(OPTIONS)
115 copy_cm_files(OPTIONS)
116 copy_cm_modes_files(OPTIONS)
117 copy_cm_web_modes_files(OPTIONS)
118 copy_headless_file(OPTIONS)
119 VERSION = copy_lib_files(OPTIONS)
120 print VERSION