Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
48 changes: 48 additions & 0 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -39,3 +39,51 @@ Example: `38;2;164;198;57` set foreground color to rgb(164, 198, 57)

2 -> R;G;B
5 -> X (Only support from 0 to 15, see: [Wikipedia ANSI Page](https://en.wikipedia.org/wiki/ANSI_escape_code#Colors))


# Setup
## Legacy
```java
TextView textView = findViewById(R.id.ansiView);
AnsiParser.setAnsiText(textView, // It's "AndroidANSI!" but with color & style
"\\e[1;38;2;164;198;57mAndroid\\e[0;35mAN\u001B[2mSI\u001B[0;73m!",
AnsiParser.FLAG_PARSE_DISABLE_SUBSCRIPT); // Also disable superscript
```

## TextView
**Layout**
```xml
<com.fox2code.androidansi.AnsiTextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/ansiView" />
```
**Activity**
```java
AnsiTextView textView = findViewById(R.id.ansiView);
textView.setAnsiText("\\e[1;38;2;164;198;57mAndroid\\e[0;35mAN\u001B[2mSI\u001B[0;73m!",
AnsiParser.FLAG_PARSE_DISABLE_SUBSCRIPT);
```

## TextView w/o Java (Currently not working)
```xml
<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".MainActivity">

<com.fox2code.androidansi.AnsiTextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
app:setAnsiText="\e[38;5;82mHello \e[38;5;198mWorld"
android:id="@+id/ansiView"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" />

</androidx.constraintlayout.widget.ConstraintLayout>
```
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@
import android.widget.TextView;

import com.fox2code.androidansi.AnsiParser;
import com.fox2code.androidansi.AnsiTextView;

public class MainActivity extends AppCompatActivity {

Expand Down
5 changes: 2 additions & 3 deletions androidansiapp/src/main/res/layout/activity_main.xml
Original file line number Diff line number Diff line change
Expand Up @@ -6,11 +6,10 @@
android:layout_height="match_parent"
tools:context=".MainActivity">

<TextView
<com.fox2code.androidansi.AnsiTextView
android:id="@+id/ansiView"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Hello World!"
android:id="@+id/ansiView"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
Expand Down
50 changes: 50 additions & 0 deletions library/src/main/java/com/fox2code/androidansi/AnsiTextView.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,50 @@
package com.fox2code.androidansi;

import static com.fox2code.androidansi.AnsiParser.parseAsSpannable;

import android.annotation.SuppressLint;
import android.content.Context;
import android.content.res.TypedArray;
import android.util.AttributeSet;
import android.widget.TextView;

import androidx.annotation.NonNull;

public class AnsiTextView extends TextView{

public final int FLAG_PARSE_DISABLE_COLORS = AnsiParser.FLAG_PARSE_DISABLE_COLORS;
public final int FLAG_PARSE_DISABLE_ATTRIBUTES = AnsiParser.FLAG_PARSE_DISABLE_ATTRIBUTES;
public final int FLAG_PARSE_DISABLE_EXTRAS_COLORS = AnsiParser.FLAG_PARSE_DISABLE_EXTRAS_COLORS;
public final int FLAG_PARSE_DISABLE_SUBSCRIPT = AnsiParser.FLAG_PARSE_DISABLE_SUBSCRIPT;

public AnsiTextView(Context context) {
super(context);
}

public AnsiTextView(Context context, AttributeSet attrs) {
super(context, attrs);
readAttr(context,attrs);
}

public AnsiTextView(Context context, AttributeSet attrs, int defStyle) {
super(context, attrs, defStyle);
readAttr(context,attrs);
}

public void setAnsiText(@NonNull String ansiText) {
super.setText(parseAsSpannable(ansiText));
}

public void setAnsiText(@NonNull String ansiText, int parseFlags) {
super.setText(parseAsSpannable(ansiText, parseFlags));
}

private void readAttr(Context context, AttributeSet attrs) {
TypedArray a = context.obtainStyledAttributes(attrs, R.styleable.AnsiTextView);
@NonNull String text = a.getString(R.styleable.AnsiTextView_setAnsiText) ;
if (text != null) {
super.setText(parseAsSpannable(text));
}
a.recycle();
}
}
6 changes: 6 additions & 0 deletions library/src/main/res/values/attrs.xml
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
<?xml version="1.0" encoding="utf-8"?>
<resources>
<declare-styleable name="AnsiTextView">
<attr name="setAnsiText" format="string" />
</declare-styleable>
</resources>