109380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)package org.chromium.devtools.jsdoc;
209380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)
309380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)public class ScriptText {
409380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)
509380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)    public final String text;
609380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)
709380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)    public ScriptText(String text) {
809380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)        this.text = text;
909380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)    }
1009380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)
1109380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)    public int getColumn(int offset) {
1209380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)        int lineStart = findLineStart(offset);
1309380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)        return lineStart == -1 ? -1 : offset - lineStart;
1409380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)    }
1509380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)
1609380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)    public String getLineTextAt(int offset) {
1709380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)        int lineStart = findLineStart(offset);
1809380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)        if (lineStart == -1) {
1909380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)            return null;
2009380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)        }
2109380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)        int lineEnd = text.indexOf('\n', offset);
2209380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)        if (lineEnd == -1) {
2309380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)            lineEnd = text.length();
2409380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)        }
2509380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)        return text.substring(lineStart, lineEnd);
2609380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)    }
2709380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)
2809380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)    private int findLineStart(int offset) {
2909380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)        if (offset > text.length()) {
3009380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)            return -1;
3109380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)        }
3209380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)        return text.lastIndexOf('\n', offset) + 1;
3309380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)    }
3409380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)}
35