Подсветка синтаксиса: просмотр текста, отображение исходного кода без добавления новой строки
Мне пришлось отобразить некоторый исходный код в моем текстовом представлении вместе с подсветкой синтаксиса. Поэтому я использовал java prettify jar, импортировал его в свой проект и создал класс подсветки prettify. Подсветка работает нормально, но между кодом не вставлена новая строка
Как это
Мой код
strings.xml
<?xml version="1.0" encoding="utf-8"?>
<string name="app_name">syntaxtest</string>
<string name="javacode">
public class MainActivity extends Activity
{
@Override
protected void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
TextView tv = (TextView) findViewById(R.id.mainTextView);
}
}</string>
mainactivity.java
public class MainActivity extends Activity
{
@Override
protected void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
String code = getResources().getString(R.string.javacode);
TextView tv = (TextView) findViewById(R.id.mainTextView);
// code is a String with source code to highlight
// myTextView is a TextView component
PrettifyHighlighter highlighter = new PrettifyHighlighter();
String highlighted = highlighter.highlight("java", code);
tv.setText(Html.fromHtml(highlighted));
}
}
класс prettifyhighlighter
public class PrettifyHighlighter {
private static final Map<String, String> COLORS = buildColorsMap();
private static final String FONT_PATTERN = "<font color=\"#%s\">%s</font>";
private final Parser parser = new PrettifyParser();
public String highlight(String fileExtension, String sourceCode) {
StringBuilder highlighted = new StringBuilder();
List<ParseResult> results = parser.parse(fileExtension, sourceCode);
for(ParseResult result : results){
String type = result.getStyleKeys().get(0);
String content = sourceCode.substring(result.getOffset(), result.getOffset() + result.getLength());
highlighted.append(String.format(FONT_PATTERN, getColor(type), content));
}
return highlighted.toString();
}
private String getColor(String type){
return COLORS.containsKey(type) ? COLORS.get(type) : COLORS.get("pln");
}
private static Map<String, String> buildColorsMap() {
Map<String, String> map = new HashMap<>();
map.put("typ", "87cefa");
map.put("kwd", "00ff00");
map.put("lit", "ffff00");
map.put("com", "999999");
map.put("str", "ff4500");
map.put("pun", "eeeeee");
map.put("pln", "ffffff");
return map;
}
}
попытался использовать следующее, но ничего не получилось
/ n <br > <br \> , <![CDATA[ ... ]]>
вот как я пытался
<string name="javacode">
<![CDATA[
super.onCreate(savedInstanceState);<br \>
setContentView(R.layout.main);<br>
String code = getResources().getString(R.string.javacode);<br />
<br />
TextView tv = (TextView) findViewById(R.id.mainTextView);<br />
]]>
</string>
Что мне делать Помогите мне заранее спасибо