forked from kigiri/sublime-header-42
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Header.py
129 lines (101 loc) · 3.91 KB
/
Header.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
#
# Imports some modules.
#
import sublime, sublime_plugin, os, time, locale
#
# Simple class to ask project name.
#
class PromptHeaderCommand(sublime_plugin.WindowCommand):
def run(self):
# label = "Type project name: "
self.window.active_view().run_command("header", {"project": ""})
pass
def on_done(self):
try:
self.window.active_view().run_command("header", {"project": ""})
except ValueError:
pass
#
# Main class: create the 42-style header.
#
class HeaderCommand(sublime_plugin.TextCommand):
#
# Get comment type according language.
# Only C / C++ as been test
#
def get_comment(self):
comments = {}
comments['Default'] = [' ', ' ', ' ']
comments['JavaScript'] = ['/**', '/**', '**/']
comments['CSS'] = ['/**', '/**', '**/']
comments['C++'] = ['/* ', '/* ', ' */']
comments['Python'] = ['# ', '# ', ' #']
comments['CoffeeScript'] = ['# ', '# ', ' #']
comments['Ruby'] = ['# ', '# ', ' #']
comments['Makefile'] = ['# ', '# ', ' #']
comments['Perl'] = ['#!/usr/local/bin/perl -w ', '# ', ' #']
comments['ShellScript'] = ['#!/bin/sh ', '# ', ' #']
comments['HTML'] = ['<!-- ', '<!-- ', ' -->']
comments['LaTeX'] = ['%% ', '%%', ' %%']
comments['Lisp'] = [';; ', ';;', ' ;;']
comments['Java'] = ['// ', '// ', ' //']
comments['PHP'] = ['#!/usr/local/bin/php\n<?php', '// ', ' //']
comments['Jade'] = ['//-', '//-', '-//']
comments['Stylus'] = ['// ', '// ', ' //']
return comments[self.view.settings().get('syntax').split('/')[1]]
#
# Get file infos.
#
def get_file_infos(self):
full = self.view.file_name().split('/')
return [full.pop(), '/'.join(full)]
#
# Get email
#
def get_mail(self):
full = "By: " + os.environ['USER'] + " <" + os.environ['USER'] + "@student.42.fr>"
return full.ljust(45)
#
# Get date 42-formated (e.g 2013/12/21 23:42:00)
#
def get_date(self):
return time.strftime("%Y/%m/%d %H:%M:%S by")
#
# Generate header.
#
def generate(self, project):
header = ""
comment = self.get_comment()
f = self.get_file_infos()
created = "Created: " + self.get_date() + " " + os.environ['USER']
updated = "Updated: " + self.get_date() + " " + os.environ['USER']
firstline = comment[0].ljust(76, '*') + comment[2].rjust(4, '*') + '\n'
endline = comment[2].rjust(4) + '\n'
startline = comment[1].ljust(5)
modified_date_region = self.view.find("Updated: 20", 0)
if modified_date_region:
header += startline + updated.ljust(48) + " ### ########.fr" + comment[2].rjust(9)
else:
header += comment[0].ljust(76, '*') + comment[2].rjust(4, '*') + '\n'
header += startline.ljust(76) + endline
header += startline.ljust(50) + " ::: :::::::: " + endline
header += startline + f[0].ljust(45) + " :+: :+: :+: " + endline
header += startline.ljust(50) + " +:+ +:+ +:+ " + endline
header += startline + self.get_mail() + " +#+ +:+ +#+ " + endline
header += startline.ljust(50) + "+#+#+#+#+#+ +#+ " + endline
header += startline + created.ljust(45) + " #+# #+# " + endline
header += startline + updated.ljust(45) + " ### ########.fr " + endline
header += startline.ljust(76) + endline
header += comment[1].ljust(76, '*') + comment[2].rjust(4, '*') + '\n'
return header
#
# Run command.
#
def run(self, edit, project):
modified_date_region = self.view.find("Updated: 20", 0)
if modified_date_region:
line = self.view.line(modified_date_region)
self.view.replace(edit, line, self.generate(project))
else:
self.view.insert(edit, 0, self.generate(project))
self.view.run_command('save')