Lines Matching refs:p
62 p := newPrinter(file)
64 for _, def := range p.defs {
65 p.printDef(def)
67 p.flush()
68 return p.output, nil
73 p := newPrinter(dummyFile)
74 p.printExpression(expression)
75 p.flush()
76 return p.output, nil
79 func (p *printer) Print() ([]byte, error) {
80 for _, def := range p.defs {
81 p.printDef(def)
83 p.flush()
84 return p.output, nil
87 func (p *printer) printDef(def Definition) {
89 p.printAssignment(assignment)
91 p.printModule(module)
97 func (p *printer) printAssignment(assignment *Assignment) {
98 p.printToken(assignment.Name, assignment.NamePos)
99 p.requestSpace()
100 p.printToken(assignment.Assigner, assignment.EqualsPos)
101 p.requestSpace()
102 p.printExpression(assignment.OrigValue)
103 p.requestNewline()
106 func (p *printer) printModule(module *Module) {
107 p.printToken(module.Type, module.TypePos)
108 p.printMap(&module.Map)
109 p.requestDoubleNewline()
112 func (p *printer) printExpression(value Expression) {
115 p.printToken(v.Name, v.NamePos)
117 p.printOperator(v)
125 p.printToken(s, v.LiteralPos)
127 p.printToken(strconv.FormatInt(v.Value, 10), v.LiteralPos)
129 p.printToken(strconv.Quote(v.Value), v.LiteralPos)
131 p.printList(v.Values, v.LBracePos, v.RBracePos)
133 p.printMap(v)
139 func (p *printer) printList(list []Expression, pos, endPos scanner.Position) {
140 p.requestSpace()
141 p.printToken("[", pos)
143 p.requestNewline()
144 p.indent(p.curIndent() + 4)
146 p.printExpression(value)
147 p.printToken(",", noPos)
148 p.requestNewline()
150 p.unindent(endPos)
153 p.printExpression(value)
156 p.printToken("]", endPos)
159 func (p *printer) printMap(m *Map) {
160 p.requestSpace()
161 p.printToken("{", m.LBracePos)
163 p.requestNewline()
164 p.indent(p.curIndent() + 4)
166 p.printProperty(prop)
167 p.printToken(",", noPos)
168 p.requestNewline()
170 p.unindent(m.RBracePos)
172 p.printToken("}", m.RBracePos)
175 func (p *printer) printOperator(operator *Operator) {
176 p.printOperatorInternal(operator, true)
179 func (p *printer) printOperatorInternal(operator *Operator, allowIndent bool) {
180 p.printExpression(operator.Args[0])
181 p.requestSpace()
182 p.printToken(string(operator.Operator), operator.OperatorPos)
186 p.requestSpace()
190 p.indent(p.curIndent() + 4)
192 p.requestNewline()
196 p.printOperatorInternal(op, false)
198 p.printExpression(operator.Args[1])
202 p.unindent(p.pos)
206 func (p *printer) printProperty(property *Property) {
207 p.printToken(property.Name, property.NamePos)
208 p.printToken(":", property.ColonPos)
209 p.requestSpace()
210 p.printExpression(property.Value)
215 func (p *printer) printToken(s string, pos scanner.Position) {
216 newline := p.pendingNewline != 0
219 pos = p.pos
223 p.printEndOfLineCommentsBefore(pos)
224 p.requestNewlinesForPos(pos)
227 p.printInLineCommentsBefore(pos)
229 p.flushSpace()
231 p.output = append(p.output, s...)
233 p.pos = pos
237 func (p *printer) printInLineCommentsBefore(pos scanner.Position) {
238 for p.curComment < len(p.comments) && p.comments[p.curComment].Pos().Offset < pos.Offset {
239 c := p.comments[p.curComment]
241 p.skippedComments = append(p.skippedComments, c)
243 p.printComment(c)
244 p.requestSpace()
246 p.curComment++
252 func (p *printer) printEndOfLineCommentsBefore(pos scanner.Position) {
253 if len(p.skippedComments) > 0 {
254 for _, c := range p.skippedComments {
255 p.printComment(c)
257 p._requestNewline()
258 p.skippedComments = nil
260 for p.curComment < len(p.comments) && p.comments[p.curComment].Pos().Line < pos.Line {
261 c := p.comments[p.curComment]
262 p.printComment(c)
263 p._requestNewline()
264 p.curComment++
270 func (p *printer) requestNewlinesForPos(pos scanner.Position) bool {
271 if pos.Line > p.pos.Line {
272 p._requestNewline()
273 if pos.Line > p.pos.Line+1 {
274 p.pendingNewline = 2
282 func (p *printer) requestSpace() {
283 p.pendingSpace = true
288 func (p *printer) _requestNewline() {
289 if p.pendingNewline == 0 {
290 p.pendingNewline = 1
296 func (p *printer) requestNewline() {
297 pos := p.pos
299 p.printEndOfLineCommentsBefore(pos)
300 p._requestNewline()
305 func (p *printer) requestDoubleNewline() {
306 p.requestNewline()
307 p.pendingNewline = 2
311 func (p *printer) flushSpace() {
312 if p.pendingNewline == 1 {
313 p.output = append(p.output, '\n')
314 p.pad(p.curIndent())
315 } else if p.pendingNewline == 2 {
316 p.output = append(p.output, "\n\n"...)
317 p.pad(p.curIndent())
318 } else if p.pendingSpace == true && p.pendingNewline != -1 {
319 p.output = append(p.output, ' ')
322 p.pendingSpace = false
323 p.pendingNewline = 0
327 func (p *printer) printComment(cg *CommentGroup) {
329 if !p.requestNewlinesForPos(comment.Pos()) {
330 p.requestSpace()
334 p.flushSpace()
337 lineIndent = max(lineIndent, p.curIndent())
338 p.pad(lineIndent - p.curIndent())
340 p.output = append(p.output, strings.TrimSpace(line)...)
342 p._requestNewline()
345 p.pos = comment.End()
350 func (p *printer) flush() {
351 for _, c := range p.skippedComments {
352 if !p.requestNewlinesForPos(c.Pos()) {
353 p.requestSpace()
355 p.printComment(c)
357 for p.curComment < len(p.comments) {
358 p.printComment(p.comments[p.curComment])
359 p.curComment++
361 p.output = append(p.output, '\n')
365 func (p *printer) pad(l int) {
366 if l > len(p.wsBuf) {
367 p.wsBuf = make([]byte, l)
368 for i := range p.wsBuf {
369 p.wsBuf[i] = ' '
372 p.output = append(p.output, p.wsBuf[0:l]...)
375 func (p *printer) indent(i int) {
376 p.indentList = append(p.indentList, i)
379 func (p *printer) unindent(pos scanner.Position) {
380 p.printEndOfLineCommentsBefore(pos)
381 p.indentList = p.indentList[0 : len(p.indentList)-1]
384 func (p *printer) curIndent() int {
385 return p.indentList[len(p.indentList)-1]