Package ceylon.language

Source Code of ceylon.language.String

package ceylon.language;

import ceylon.language.impl.BaseCharacterList;
import ceylon.language.impl.BaseIterator;

import com.redhat.ceylon.compiler.java.Util;
import com.redhat.ceylon.compiler.java.language.AbstractCallable;
import com.redhat.ceylon.compiler.java.language.StringInclusions;
import com.redhat.ceylon.compiler.java.language.StringTokens;
import com.redhat.ceylon.compiler.java.metadata.Annotation;
import com.redhat.ceylon.compiler.java.metadata.Annotations;
import com.redhat.ceylon.compiler.java.metadata.Ceylon;
import com.redhat.ceylon.compiler.java.metadata.Class;
import com.redhat.ceylon.compiler.java.metadata.Defaulted;
import com.redhat.ceylon.compiler.java.metadata.FunctionalParameter;
import com.redhat.ceylon.compiler.java.metadata.Ignore;
import com.redhat.ceylon.compiler.java.metadata.Name;
import com.redhat.ceylon.compiler.java.metadata.SatisfiedTypes;
import com.redhat.ceylon.compiler.java.metadata.Transient;
import com.redhat.ceylon.compiler.java.metadata.TypeInfo;
import com.redhat.ceylon.compiler.java.metadata.ValueType;
import com.redhat.ceylon.compiler.java.runtime.model.ReifiedType;
import com.redhat.ceylon.compiler.java.runtime.model.TypeDescriptor;

@Ceylon(major = 7)
@Class(extendsType="ceylon.language::Object",
       basic = false, identifiable = false)
@SatisfiedTypes({"ceylon.language::List<ceylon.language::Character>",
                 "ceylon.language::Comparable<ceylon.language::String>",
                 "ceylon.language::Summable<ceylon.language::String>",
                 "ceylon.language::Ranged<ceylon.language::Integer,ceylon.language::Character,ceylon.language::String>"})
@ValueType
@Annotations({
    @Annotation(
            value = "doc",
            arguments = {"A string of characters..."}),
    @Annotation(
            value = "by",
            arguments = {"Gavin"}),
    @Annotation("shared"),
    @Annotation("final")})
public final class String
    extends BaseCharacterList
    implements Comparable<String>, List<Character>,
               Summable<String> {
   
    @Ignore
    public final static TypeDescriptor $TypeDescriptor$ =
            TypeDescriptor.klass(String.class);
   
    @Ignore
    public final java.lang.String value;
   
    @Ignore
    private final Comparable$impl<String> $ceylon$language$Comparable$impl =
            new Comparable$impl<String>($TypeDescriptor$,this);
   
    @Ignore @Override
    public Comparable$impl<String> $ceylon$language$Comparable$impl() {
        return $ceylon$language$Comparable$impl;
    }

    @SuppressWarnings("rawtypes")
    public String(@Name("characters")
    @TypeInfo("ceylon.language::Iterable<ceylon.language::Character,ceylon.language::Null>")
    final Iterable<? extends Character, ?> characters) {
        if (characters instanceof String) {
            value = ((String)characters).value;
        } else {
            java.lang.String s = null;
            if (characters instanceof Array.ArrayIterable) {
                s = ((Array.ArrayIterable) characters).stringValue();
            }
            if (s != null) {
                value = s;
            } else {
                java.lang.StringBuilder sb = new java.lang.StringBuilder();
                java.lang.Object $tmp;
                for (Iterator<? extends Character> $val$iter$0 = characters.iterator();
                        !(($tmp = $val$iter$0.next()) instanceof Finished);) {
                    sb.append($tmp);
                }
                value = sb.toString();
            }
        }
    }

    @Ignore
    public String(final java.lang.String string) {
        value = string;
    }

    @Override
    @Transient
    public java.lang.String toString() {
        return value;
    }

    @Ignore
    public static java.lang.String toString(java.lang.String value) {
        return value;
    }

    @Ignore
    public static ceylon.language.String instance(java.lang.String s) {
        if (s==null) return null;
        return new String(s);
    }

    @Ignore
    public static ceylon.language.String instanceJoining(java.lang.String... strings) {
        StringBuffer buf = new StringBuffer();
        for (java.lang.String s: strings)
            buf.append(s);
        return instance(buf.toString());
    }

    @Ignore
    public static ceylon.language.String instanceJoining(String... strings) {
        StringBuffer buf = new StringBuffer();
        for (String s: strings)
            buf.append(s.value);
        return instance(buf.toString());
    }

    public java.lang.String getUppercased() {
        return value.toUpperCase();
    }

    @Ignore
    public static java.lang.String getUppercased(java.lang.String value) {
        return value.toUpperCase();
    }

    public java.lang.String getLowercased() {
        return value.toLowerCase();
    }

    @Ignore
    public static java.lang.String getLowercased(java.lang.String value) {
        return value.toLowerCase();
    }

    @Override
    public boolean equals(@Name("that") java.lang.Object that) {
        if (that instanceof String) {
            String s = (String)that;
            return value.equals(s.value);
        }
        else {
            return false;
        }
    }

    @Ignore
    public static boolean equals(java.lang.String value,
            java.lang.Object that) {
        if (that instanceof String) {
            String s = (String)that;
            return value.equals(s.value);
        }
        else {
            return false;
        }
    }

    @Override
    public int hashCode() {
        return value.hashCode();
    }

    @Ignore
    public static int hashCode(java.lang.String value) {
        return value.hashCode();
    }

    @Override
    public Comparison compare(@Name("other") String other) {
        int c = value.compareTo(other.value);
        return (c < 0) ? smaller_.get_() :
            ((c == 0) ? equal_.get_() : larger_.get_());
    }

    @Ignore
    public static Comparison compare(java.lang.String value,
            java.lang.String otherValue) {
        int c = value.compareTo(otherValue);
        return (c < 0) ? smaller_.get_() :
            ((c == 0) ? equal_.get_() : larger_.get_());
    }

    @Override
    public String plus(@Name("other") String other) {
        return instance(value + other.value);
    }

    @Ignore
    public static java.lang.String plus(java.lang.String value,
            java.lang.String otherValue) {
        return value + otherValue;
    }

    @Override
    @TypeInfo("ceylon.language::Integer")
    public long getSize() {
        //TODO: should we cache this value in an instvar?
        // But remember that we'll mostly be using the static verion
        // of this method! So an instvar won't help much.
        return value.codePointCount(0, value.length());
    }

    @Ignore
    public static long getSize(java.lang.String value) {
        return value.codePointCount(0, value.length());
    }

    @Override
    @TypeInfo("ceylon.language::Null|ceylon.language::Integer")
    @Transient
    public Integer getLastIndex() {
        long length = getSize();
        return (length == 0) ? null : Integer.instance(length - 1);
    }

    @Ignore
    public static Integer getLastIndex(java.lang.String value) {
        long length = getSize(value);
        return (length == 0) ? null : Integer.instance(length - 1);
    }

    @Override
    public boolean getEmpty() {
        return value.isEmpty();
    }

    @Ignore
    public static boolean getEmpty(java.lang.String value) {
        return value.isEmpty();
    }

//    @Override
//    @TypeInfo("ceylon.language::Null|ceylon.language::Character")
//    public Character get(@Name("index") Integer key) {
//        return getFromFirst(value, key.longValue());
//    }

    @Ignore
    public static Character get(java.lang.String value, long key) {
        return getFromFirst(value, key);
    }

    @Override
    @TypeInfo("ceylon.language::Null|ceylon.language::Character")
    public Character getFromLast(@Name("index") long key) {
        return getFromFirst(value, value.length()-1-key);
    }

    @Ignore
    public static Character getFromLast(java.lang.String value, long key) {
        return getFromFirst(value, value.length()-1-key);
    }

    @Override
    @TypeInfo("ceylon.language::Null|ceylon.language::Character")
    public Character getFromFirst(@Name("index") long key) {
        return getFromFirst(value, key);
    }

    @Ignore
    public static Character getFromFirst(java.lang.String value, long key) {
        int index = Util.toInt(key);
        int length = value.length();
        if (index < 0 || index >= length) {
            return null;
        }
        int offset = value.offsetByCodePoints(0, index);
        int codePoint = value.codePointAt(offset);
        return Character.instance(codePoint);
    }

    @Override
    public boolean defines(@Name("index") Integer key) {
        long index = key.longValue();
        return index >= 0 && index < getSize();
    }

    @Ignore
    public static boolean defines(java.lang.String value, long key) {
        return key >= 0 && key < getSize(value);
    }

    @Override
    @Transient
    public Sequential<? extends ceylon.language.Integer> getKeys() {
        return getKeys(value);
    }

    @Ignore
    @SuppressWarnings({ "rawtypes", "unchecked" })
    public static Sequential<? extends ceylon.language.Integer>
    getKeys(java.lang.String value) {
        long size = value.length();
        if (size==0) {
            return (Sequential) empty_.get_();
        }
        else {
            return new Span<Integer>(Integer.$TypeDescriptor$,
                    Integer.instance(0), Integer.instance(size-1));
        }
    }

    @Ignore
    public static boolean definesEvery(java.lang.String value,
            Iterable<? extends Integer,?> keys) {
        //TODO: inefficient ... better to cache the result
        //      of getSize()
        // TODO We're still boxing here!
        return instance(value).definesEvery(keys);
    }

    @Ignore
    public static boolean definesEvery(java.lang.String value) {
        return true;
    }

    @Ignore
    public static boolean definesAny(java.lang.String value,
            Iterable<? extends Integer, ?> keys) {
        //TODO: inefficient ... better to cache the result
        //      of getSize()
        // TODO We're still boxing here!
        return instance(value).definesAny(keys);
    }

    @Ignore
    public static boolean definesAny(java.lang.String value) {
        return false;
    }
   
    @Ignore
    public static <Absent extends Null>
    Iterable<? extends Character, ? extends Absent>
    getAll(TypeDescriptor $reifiedAbsent, java.lang.String value,
            Iterable<? extends Integer, Absent> keys) {
        // TODO We're still boxing here!
        return instance(value).getAll($reifiedAbsent,keys);
    }
   
    @Ignore
    public static boolean occurs(java.lang.String value,
            java.lang.Object element) {
        if (element instanceof Character) {
            int index = value.indexOf(((Character) element).codePoint);
            return index>=0;
        }
        else {
            return false;
        }
    }
   
    @Override
    public boolean occurs(@Name("element")
            @TypeInfo("ceylon.language::Anything")
            java.lang.Object element) {
        if (element instanceof Character) {
            int index = value.indexOf(((Character) element).codePoint);
            return index>=0;
        }
        else {
            return false;
        }
    }
   
    @Ignore
    public static boolean occursAt(java.lang.String value,
            long index, java.lang.Object element) {
        if (element instanceof Character) {
            int cp = ((Character) element).codePoint;
            Character ch = getFromFirst(value,index);
            return ch!=null && ch.codePoint==cp;
        }
        else {
            return false;
        }
    }
   
    @Override
    public boolean occursAt(@Name("index") long index,
            @Name("element")
            @TypeInfo("ceylon.language::Anything")
            java.lang.Object element) {
        if (element instanceof Character) {
            int cp = ((Character) element).codePoint;
            Character ch = getFromFirst(value,index);
            return ch!=null && ch.codePoint==cp;
        }
        else {
            return false;
        }
    }
   
    @Ignore
    public static boolean includesAt(java.lang.String value,
            long index, List<?> sublist) {
        if (sublist instanceof String) {
            java.lang.String str = ((String) sublist).value;
            int offset = value.offsetByCodePoints(0, Util.toInt(index));
            return value.regionMatches(offset, str, 0, str.length());
        }
        else {
            return instance(value).includesAt(index, sublist);
        }
    }
   
    @Override
    public boolean includesAt(@Name("index") long index,
            @TypeInfo("ceylon.language::List<ceylon.language::Anything>")
            @Name("sublist") List<?> sublist) {
        if (sublist instanceof String) {
            java.lang.String str = ((String) sublist).value;
            int offset = value.offsetByCodePoints(0, Util.toInt(index));
            return value.regionMatches(offset, str, 0, str.length());
        }
        else {
            return super.includesAt(index, sublist);
        }
    }
   
    @Ignore
    public static Iterable<? extends Integer, ?>
    inclusions(java.lang.String value, List<?> substring) {
        if (substring instanceof String) {
            return new StringInclusions(value, ((String) substring).value);
        }
        else {
            return instance(value).occurrences(substring);
        }
    }

    @Override
    @TypeInfo("ceylon.language::Iterable<ceylon.language::Integer>")
    public Iterable<? extends Integer, ?>
    inclusions(
            @TypeInfo("ceylon.language::List<ceylon.language::Anything>")
            @Name("sublist") List<?> sublist) {
        if (sublist instanceof String) {
            return new StringInclusions(value, ((String) sublist).value);
        }
        else {
            return super.inclusions(sublist);
        }
    }

    @Ignore
    public static boolean includes(java.lang.String value,
            List<?> sublist) {
        if (sublist instanceof String) {
            int index = value.indexOf(((String) sublist).value);
            return index >= 0;
        }
        else {
            return instance(value).includes(sublist);
        }
    }

    @Override
    public boolean includes(
            @TypeInfo("ceylon.language::List<ceylon.language::Anything>")
            @Name("sublist") List<?> sublist) {
        if (sublist instanceof String) {
            int index = value.indexOf(((String) sublist).value);
            return index >= 0;
        }
        else {
            return super.includes(sublist);
        }
    }
   
    @Ignore
    public static Integer firstInclusion(java.lang.String value,
            List<?> sublist) {
        if (sublist instanceof String) {
            int index = value.indexOf(((String) sublist).value);
            return index >= 0 ?
                    Integer.instance(value.codePointCount(0, index)) :
                        null;
        }
        else {
            return instance(value).firstInclusion(sublist);
        }
    }

    @Override
    @TypeInfo("ceylon.language::Null|ceylon.language::Integer")
    public Integer firstInclusion(@Name("sublist") List<?> sublist) {
        if (sublist instanceof String) {
            int index = value.indexOf(((String) sublist).value);
            return index >= 0 ?
                    Integer.instance(value.codePointCount(0, index)) :
                        null;
        }
        else {
            return super.firstInclusion(sublist);
        }
    }
   
    public static Integer lastInclusion(java.lang.String value,
        List<?> sublist) {
        if (sublist instanceof String) {
            int index = value.lastIndexOf(((String) sublist).value);
            return index >= 0 ?
                    Integer.instance(value.codePointCount(0, index)) :
                        null;
        }
        else {
            return instance(value).lastInclusion(sublist);
        }
    }
   
    @Override
    @TypeInfo("ceylon.language::Null|ceylon.language::Integer")
    public Integer lastInclusion(@Name("sublist") List<?> sublist) {
        if (sublist instanceof String) {
            int index = value.lastIndexOf(((String) sublist).value);
            return index >= 0 ?
                    Integer.instance(value.codePointCount(0, index)) :
                        null;
        }
        else {
            return super.lastInclusion(sublist);
        }
    }
   
    @Ignore
    public static Integer firstOccurrence(java.lang.String value,
            java.lang.Object element) {
        if (element instanceof Character) {
            int index = value.indexOf(((Character) element).codePoint);
            return index >= 0 ?
                    Integer.instance(value.codePointCount(0, index)) :
                        null;
        }
        else {
            return null;
        }
    }

    @Override
    @TypeInfo("ceylon.language::Null|ceylon.language::Integer")
    public Integer firstOccurrence(
            @Name("element")
            @TypeInfo("ceylon.language::Anything")
            java.lang.Object element) {
        if (element instanceof Character) {
            int index = value.indexOf(((Character) element).codePoint);
            return index >= 0 ?
                    Integer.instance(value.codePointCount(0, index)) :
                        null;
        }
        else {
            return null;
        }
    }
   
    @Ignore
    public static Integer lastOccurrence(java.lang.String value,
            java.lang.Object element) {
        if (element instanceof Character) {
            int index = value.lastIndexOf(((Character) element).codePoint);
            return index >= 0 ?
                    Integer.instance(value.codePointCount(0, index)) :
                        null;
        }
        else {
            return null;
        }
    }

    @Override
    @TypeInfo("ceylon.language::Null|ceylon.language::Integer")
    public Integer lastOccurrence(
            @Name("element")
            @TypeInfo("ceylon.language::Anything")
            java.lang.Object element) {
        if (element instanceof Character) {
            int index = value.lastIndexOf(((Character) element).codePoint);
            return index >= 0 ?
                    Integer.instance(value.codePointCount(0, index)) :
                        null;
        }
        else {
            return null;
        }
    }
   
    @Override
    @TypeInfo("ceylon.language::Iterator<ceylon.language::Character>")
    public Iterator<Character> iterator() {
        return new StringIterator(value);
    }

   
    @Ignore
    public static Iterator<Character> iterator(final java.lang.String value) {
        return new StringIterator(value);
    }
   
    @Ignore
    private static class StringIterator
            extends BaseIterator<Character>
            implements ReifiedType {
       
        private static TypeDescriptor $TypeDescriptor$ =
                TypeDescriptor.klass(StringIterator.class);
       
        final java.lang.String value;
       
        public StringIterator(final java.lang.String value) {
            super(Character.$TypeDescriptor$);
            this.value = value;
        }
       
        private int offset = 0;
       
        @Override
        public java.lang.Object next() {
            if (offset < value.length()) {
                int codePoint = value.codePointAt(offset);
                offset += java.lang.Character.charCount(codePoint);
                return Character.instance(codePoint);
            }
            else {
                return finished_.get_();
            }
        }
       
        @Override
        @Ignore
        public TypeDescriptor $getType$() {
            return $TypeDescriptor$;
        }
    }
   
    @Ignore
    public static Iterable<? extends Character,?>
    getCharacters(java.lang.String value) {
        return instance(value);
    }
   
    @Override
    public boolean contains(@Name("element") java.lang.Object element) {
        if (element instanceof String) {
            return value.indexOf(((String)element).value) >= 0;
        }
        else if (element instanceof Character) {
            return value.indexOf(((Character)element).intValue()) >= 0;
        }
        else {
            return false;
        }
    }

    @Ignore
    public static boolean contains(java.lang.String value,
            java.lang.Object element) {
        if (element instanceof String) {
            return value.indexOf(((String)element).value) >= 0;
        }
        else if (element instanceof Character) {
            return value.indexOf(((Character)element).intValue()) >= 0;
        }
        else {
            return false;
        }
    }
   
    @Override
    public boolean startsWith(@Name("substring") List<?> substring) {
        if (substring instanceof String) {
            return value.startsWith(((String)substring).value);
        }
        else {
            return super.startsWith(substring);
        }
    }

    @Ignore
    public static boolean startsWith(java.lang.String value,
            List<?> substring) {
        if (substring instanceof String) {
            return value.startsWith(((String)substring).value);
        }
        else {
            return instance(value).startsWith(substring);
        }
    }
   
    @Override
    public boolean endsWith(@Name("substring") List<?> substring) {
        if (substring instanceof String) {
            return value.endsWith(((String)substring).value);
        }
        else {
            return super.endsWith(substring);
        }
    }

    @Ignore
    public static boolean endsWith(java.lang.String value,
            List<?> substring) {
        if (substring instanceof String) {
            return value.endsWith(((String)substring).value);
        }
        else {
            return instance(value).endsWith(substring);
        }
    }

    @Ignore
    public static boolean containsAny(java.lang.String value,
            Iterable<?,?> elements) {
        // TODO We're still boxing here!
        return instance(value).containsAny(elements);
    }
   
    @Ignore
    public static boolean containsEvery(java.lang.String value,
            Iterable<?,?> elements) {
        // TODO We're still boxing here!
        return instance(value).containsEvery(elements);
    }

    public boolean longerThan(@TypeInfo("ceylon.language::Integer")
    @Name("length") long length) {
        try {
            value.offsetByCodePoints(0, Util.toInt(length+1));
            return true;
        }
        catch (IndexOutOfBoundsException iobe) {
            return false;
        }
    }

    @Ignore
    public static boolean longerThan(java.lang.String value,
            long length) {
        try {
            value.offsetByCodePoints(0, Util.toInt(length+1));
            return true;
        }
        catch (IndexOutOfBoundsException iobe) {
            return false;
        }
    }

    public boolean shorterThan(@TypeInfo("ceylon.language::Integer")
    @Name("length") long length) {
        try {
            value.offsetByCodePoints(0, Util.toInt(length));
            return false;
        }
        catch (IndexOutOfBoundsException iobe) {
            return true;
        }
    }

    @Ignore
    public static boolean shorterThan(java.lang.String value,
            long length) {
        try {
            value.offsetByCodePoints(0, Util.toInt(length));
            return false;
        }
        catch (IndexOutOfBoundsException iobe) {
            return true;
        }
    }

    @Transient
    public java.lang.String getTrimmed() {
        return getTrimmed(value);
    }

    @Ignore
    public static java.lang.String getTrimmed(java.lang.String value) {
        // Don't use value.trim() because that has a definition of ws that is
        // inconsistent with ceylon.language::Character.whitespace
        return internalTrim(value, WHITESPACE);
    }
   
    @Override
    public String trimLeading(
            @TypeInfo("ceylon.language::Callable<ceylon.language::Boolean,ceylon.language::Tuple<ceylon.language::Character,ceylon.language::Character,ceylon.language::Empty>>")
            @Name("trimming")@FunctionalParameter("(elem)")
            Callable<? extends Boolean> characters) {
        return instance(trimLeading(value, characters));
    }
    @Ignore
    public static java.lang.String trimLeading(java.lang.String value,
            Callable<? extends Boolean> characters) {
        int from = 0;
        while (from < value.length()) {
            int c = java.lang.Character.codePointAt(value, from);
            if (!characters.$call$(Character.instance(c)).booleanValue()) {
                break;
            }
            from += java.lang.Character.charCount(c);
        }
        return value.substring(from);
    }
   
    @Override
    public String trimTrailing(
            @TypeInfo("ceylon.language::Callable<ceylon.language::Boolean,ceylon.language::Tuple<ceylon.language::Character,ceylon.language::Character,ceylon.language::Empty>>")
            @Name("trimming")@FunctionalParameter("(elem)")
            Callable<? extends Boolean> characters) {
        return instance(trimTrailing(value, characters));
    }
    @Ignore
    public static java.lang.String trimTrailing(java.lang.String value,
            Callable<? extends Boolean> characters) {
        int to = value.length();
        while (to > 0) {
            int c = java.lang.Character.codePointBefore(value, to);
            if (!characters.$call$(Character.instance(c)).booleanValue()) {
                break;
            }
            to -= java.lang.Character.charCount(c);
        }
        return value.substring(0, to);
    }
   
    @Override
    public String trim(
            @TypeInfo("ceylon.language::Callable<ceylon.language::Boolean,ceylon.language::Tuple<ceylon.language::Character,ceylon.language::Character,ceylon.language::Empty>>")
            @Name("trimming")@FunctionalParameter("(elem)")
            Callable<? extends Boolean> characters) {
        return instance(trim(value, characters));
    }
   
    @Ignore
    public static java.lang.String trim(java.lang.String value,
            Callable<? extends Boolean> characters) {
        return internalTrim(value, characters);
    }
   
    @Ignore
    private static java.lang.String internalTrim(java.lang.String value,
            Callable<? extends Boolean> characters) {
        int from = 0;
        while (from < value.length()) {
            int c = java.lang.Character.codePointAt(value, from);
            if (!characters.$call$(Character.instance(c)).booleanValue()) {
                break;
            }
            from += java.lang.Character.charCount(c);
        }
        int to = value.length();
        while (to > from) {
            int c = java.lang.Character.codePointBefore(value, to);
            if (!characters.$call$(Character.instance(c)).booleanValue()) {
                break;
            }
            to -= java.lang.Character.charCount(c);
        }
        return value.substring(from, to);
    }

    public java.lang.String getNormalized() {
        return getNormalized(value);
    }

    @Ignore
    public static java.lang.String getNormalized(java.lang.String value) {
        java.lang.StringBuilder result = new java.lang.StringBuilder();
        boolean previousWasWhitespace=false;
        for (int i=0;i<value.length();) {
            int c = java.lang.Character.codePointAt(value, i);
            boolean isWhitespace = java.lang.Character.isWhitespace(c);
            if (!isWhitespace) {
                result.appendCodePoint(c);
            }
            else if (!previousWasWhitespace) {
                result.append(" ");
            }
            previousWasWhitespace = isWhitespace;
            i+=java.lang.Character.charCount(c);
        }
        // TODO Should be able to figure out the indices to
        //      substring on while iterating
        return getTrimmed(result.toString());
    }

    @Override
    public String initial(@TypeInfo("ceylon.language::Integer")
    @Name("length") long length) {
        return instance(initial(value, length));
    }

    @Ignore
    public static java.lang.String initial(java.lang.String value,
            long length) {
        if (length <= 0) {
            return "";
        } else if (length >= getSize(value)) {
            return value;
        } else {
            int offset = value.offsetByCodePoints(0, Util.toInt(length));
            return value.substring(0, offset);
        }
    }

    @Override
    public String terminal(@Name("length") long length) {
        return instance(terminal(value, length));
    }

    @Ignore
    public static java.lang.String terminal(java.lang.String value,
            long length) {
        if (length <= 0) {
            return "";
        } else if (length >= getSize(value)) {
            return value;
        } else {
            int offset = value.offsetByCodePoints(0,
                    Util.toInt(value.length()-length));
            return value.substring(offset, value.length());
        }
    }

    public java.lang.String join(@Name("objects")
    @TypeInfo("ceylon.language::Iterable<ceylon.language::Object,ceylon.language::Null>")
    Iterable<? extends java.lang.Object,?> objects) {
        return join(value, objects);
    }

    @Ignore
    public static java.lang.String join(java.lang.String value,
            Iterable<? extends java.lang.Object, ?> objects) {
        java.lang.StringBuilder result = new java.lang.StringBuilder();
        Iterator<? extends java.lang.Object> it = objects.iterator();
        java.lang.Object elem = it.next();
        if (!(elem instanceof Finished)) {
            result.append(elem);
            if (value.isEmpty()) {
                while (!((elem = it.next()) instanceof Finished)) {
                    result.append(elem);
                }
            }
            else {
                while (!((elem = it.next()) instanceof Finished)) {
                    result.append(value).append(elem);
                }
            }
        }
        return result.toString();
    }

    @Ignore
    public java.lang.String join() {
        return "";
    }

    @Ignore
    public static java.lang.String join(java.lang.String value) {
        return "";
    }

    @Override
    public String measure(@Name("from") final Integer from,
                          @Name("length") final long length) {
        return instance(measure(value, from.longValue(), length));
    }

    @Ignore
    public static java.lang.String measure(java.lang.String value,
            final long from, final long length) {
        long fromIndex = from;
        long resultLength = length;
        long len = getSize(value);
        if (fromIndex >= len || resultLength <= 0) {
            return "";
        }
        if ((fromIndex + resultLength) > len) {
            resultLength = len - fromIndex;
        }
        int start = value.offsetByCodePoints(0, Util.toInt(fromIndex));
        int end = value.offsetByCodePoints(start, Util.toInt(resultLength));
        return value.substring(start, end);
    }

    @Override
    public String span(@Name("from") final Integer from,
                       @Name("to") final Integer to) {
        return instance(span(value, from.longValue(), to.longValue()));
    }

    @Override
    public String spanFrom(@Name("from") final Integer from) {
        return instance(spanFrom(value, from.longValue()));
    }
   
    @Ignore
    public static java.lang.String spanFrom(java.lang.String value,
            long from) {
        long len = getSize(value);
        if (len == 0) {
            return "";
        }
        if (from >= len) {
            return "";
        }
        long toIndex = len - 1;
        if (from < 0) {
            from = 0;
        }
        int start = value.offsetByCodePoints(0, Util.toInt(from));
        int end = value.offsetByCodePoints(start,
                Util.toInt(toIndex - from + 1));
        return value.substring(start, end);
    }
   
    @Ignore
    public static List<? extends Character> sublist(java.lang.String value, long from, long to) {
        return instance(value).sublist(from, to);
    }
   
    @Ignore
    public static List<? extends Character> sublistTo(java.lang.String value, long to) {
        return instance(value).sublistTo(to);
    }
   
    @Ignore
    public static List<? extends Character> sublistFrom(java.lang.String value, long from) {
        return instance(value).sublistFrom(from);
    }
   
    @Override
    public String spanTo(@Name("to") final Integer to) {
        return instance(spanTo(value, to.longValue()));
    }
   
    @Ignore
    public static java.lang.String spanTo(java.lang.String value,
            final long to) {
        long len = getSize(value);
        if (len == 0) {
            return "";
        }
        long toIndex = to;
        if (toIndex < 0) {
            return "";
        }
        if (toIndex >= len) {
            toIndex = len - 1;
        }
        int start = 0;
        int end = value.offsetByCodePoints(start, Util.toInt(toIndex + 1));
        return value.substring(start, end);
    }
   

    @Ignore
    public static java.lang.String span(java.lang.String value,
            long from, long toIndex) {
        long len = getSize(value);
        if (len == 0) {
            return "";
        }
        boolean reverse = toIndex < from;
        if (reverse) {
            long _tmp = toIndex;
            toIndex = from;
            from = _tmp;
        }
        if (toIndex < 0 || from >= len) {
            return "";
        }
        if (toIndex >= len) {
            toIndex = len - 1;
        }
        if (from < 0) {
            from = 0;
        }
        int start = value.offsetByCodePoints(0, Util.toInt(from));
        int end = value.offsetByCodePoints(start,
                Util.toInt(toIndex - from + 1));
        java.lang.String result = value.substring(start, end);
        return reverse ? getReversed(result) : result;
    }
   
    @Override
    public String getReversed() {
        return instance(getReversed(value));
    }
   
    @Ignore
    public static java.lang.String getReversed(java.lang.String value) {
        long len = getSize(value);
        if (len < 2) {
            return value;
        }
        // FIXME: this would be better to directly build the Sequence<Character>
        java.lang.StringBuilder builder = new java.lang.StringBuilder();
        int offset = value.length();
        while (offset > 0) {
            int c = value.codePointBefore(offset);
            builder.appendCodePoint(c);
            offset -= java.lang.Character.charCount(c);
        }
        return builder.toString();
    }

    @Override
    public String repeat(@Name("times") long times) {
        return instance(repeat(value, times));
    }

    @Ignore
    public static java.lang.String repeat(java.lang.String value,
            long times) {
        int len = value.length();
        if (times<=0 || len==0) return "";
        if (times==1) return value;
        java.lang.StringBuilder builder =
            new java.lang.StringBuilder(Util.toInt(len*times));
        for (int i=0; i<times; i++) {
            builder.append(value);
        }
        return builder.toString();
    }

    public java.lang.String replace(
            @Name("substring") java.lang.String substring,
            @Name("replacement") java.lang.String replacement) {
        return replace(value, substring, replacement);
    }

    @Ignore
    public static java.lang.String replace(java.lang.String value,
            java.lang.String substring, java.lang.String replacement) {
        int index = value.indexOf(substring);
        while (index>=0) {
            value = value.substring(0,index) + replacement +
                    value.substring(index+substring.length());
            index = value.indexOf(substring,
                    index+replacement.length());
        }
        return value;
    }
   
    public java.lang.String replaceFirst(
            @Name("substring") java.lang.String substring,
            @Name("replacement") java.lang.String replacement) {
        return replaceFirst(value, substring, replacement);
    }

    @Ignore
    public static java.lang.String replaceFirst(java.lang.String value,
            java.lang.String substring, java.lang.String replacement) {
        int index = value.indexOf(substring);
        if (index<0) {
            return value;
        }
        else {
            return value.substring(0,index) + replacement +
                    value.substring(index+substring.length());
        }
    }

    public java.lang.String replaceLast(
            @Name("substring") java.lang.String substring,
            @Name("replacement") java.lang.String replacement) {
        return replaceLast(value, substring, replacement);
    }

    @Ignore
    public static java.lang.String replaceLast(java.lang.String value,
            java.lang.String substring, java.lang.String replacement) {
        int index = value.lastIndexOf(substring);
        if (index<0) {
            return value;
        }
        else {
            return value.substring(0,index) + replacement +
                    value.substring(index+substring.length());
        }
    }

    @TypeInfo("ceylon.language::Iterable<ceylon.language::String>")
    public Iterable<? extends String, ?> split(
            @TypeInfo(value="ceylon.language::Callable<ceylon.language::Boolean,ceylon.language::Tuple<ceylon.language::Character,ceylon.language::Character,ceylon.language::Empty>>")
            @Defaulted
            @Name("splitting")
            @FunctionalParameter("(ch)")
            Callable<? extends Boolean> splitting,
            @Defaulted
            @Name("discardSeparators")
            boolean discardSeparators,
            @Defaulted
            @Name("groupSeparators")
            boolean groupSeparators) {
        if (value.isEmpty()) {
            return new Singleton<String>(String.$TypeDescriptor$, this);
        }
        return new StringTokens(value, splitting,
                !discardSeparators, groupSeparators);
    }

    @Ignore
    public static Iterable<? extends String, ?>
    split(java.lang.String value,
            Callable<? extends Boolean> splitting,
            boolean discardSeparators,
            boolean groupSeparators) {
        if (value.isEmpty()) {
            return new Singleton<String>(String.$TypeDescriptor$,
                    instance(value));
        }
        return new StringTokens(value, splitting,
                !discardSeparators, groupSeparators);
    }

    @Ignore
    public Iterable<? extends String, ?>
    split(Callable<? extends Boolean> splitting,
            boolean discardSeparators) {
        return split(splitting, discardSeparators,
                split$groupSeparators(splitting, discardSeparators));
    }

    @Ignore
    public static Iterable<? extends String, ?>
    split(java.lang.String value,
            Callable<? extends Boolean> splitting,
            boolean discardSeparators) {
        return split(value, splitting, discardSeparators,
                split$groupSeparators(splitting, discardSeparators));
    }

    @Ignore
    public Iterable<? extends String, ?> split(
            Callable<? extends Boolean> splitting) {
        return split(splitting, split$discardSeparators(splitting));
    }

    @Ignore
    public static Iterable<? extends String, ?>
    split(java.lang.String value,
            Callable<? extends Boolean> splitting) {
        return split(value, splitting, split$discardSeparators(splitting));
    }

    @Ignore
    public Iterable<? extends String, ?> split() {
        return split(split$splitting());
    }

    @Ignore
    public static Iterable<? extends String, ?>
    split(java.lang.String value) {
        return split(value, split$splitting());
    }

    @Ignore
    public static Callable<? extends Boolean> split$splitting(){
        return WHITESPACE;
    }

    @Ignore
    public static boolean split$discardSeparators(java.lang.Object separator){
        return true;
    }

    @Ignore
    public static boolean split$groupSeparators(java.lang.Object separator,
            boolean discardSeparators){
        return true;
    }
   
    @SuppressWarnings("rawtypes")
    @TypeInfo("ceylon.language::Tuple<ceylon.language::String,ceylon.language::String,ceylon.language::Tuple<ceylon.language::String,ceylon.language::String,ceylon.language::Empty>>")
    @Override
    public Sequence slice(@Name("index") long index) {
        return slice(value,index);
    }
   
    @Ignore
    @SuppressWarnings("rawtypes")
    public static Sequence slice(java.lang.String value, long index) {
        java.lang.String first;
        java.lang.String second;
        if (index<=0) {
            first = "";
            second = value;
        }
        else if (index>=value.length()) {
            first = value;
            second = "";
        }
        else {
            int intIndex = Util.toInt(index);
            first = value.substring(0,intIndex);
            second = value.substring(intIndex);
        }
        return new Tuple(String.$TypeDescriptor$,
                new String[] { instance(first),
                        instance(second) });
    }
   
    @Ignore
    private static Callable<Boolean> WHITESPACE =
    new AbstractCallable<Boolean>(Boolean.$TypeDescriptor$,
            TypeDescriptor.klass(Tuple.class, Character.$TypeDescriptor$,
                    Character.$TypeDescriptor$, Empty.$TypeDescriptor$),
            "whitespace", (short)-1) {
        @Override
        public Boolean $call$(java.lang.Object ch) {
            return Boolean.instance(((Character) ch).getWhitespace());
        }
    };
   
    @Ignore
    private static Callable<Boolean> NEWLINES =
    new AbstractCallable<Boolean>(Boolean.$TypeDescriptor$,
            TypeDescriptor.klass(Tuple.class, Character.$TypeDescriptor$,
                    Character.$TypeDescriptor$, Empty.$TypeDescriptor$),
            "newlines", (short)-1) {
        @Override
        public Boolean $call$(java.lang.Object ch) {
            return Boolean.instance(((Character) ch).intValue()=='\n');
        }
    };
   
    @Ignore
    private static Callable<Boolean> RETURNS =
    new AbstractCallable<Boolean>(Boolean.$TypeDescriptor$,
            TypeDescriptor.klass(Tuple.class, Character.$TypeDescriptor$,
                    Character.$TypeDescriptor$, Empty.$TypeDescriptor$),
            "returns", (short)-1) {
        @Override
        public Boolean $call$(java.lang.Object ch) {
            return Boolean.instance(((Character) ch).intValue()=='\r');
        }
    };
   
    private static Callable<String> TRIM_RETURNS =
    new AbstractCallable<String>($TypeDescriptor$,
            TypeDescriptor.klass(Tuple.class, $TypeDescriptor$,
                    $TypeDescriptor$, Empty.$TypeDescriptor$),
            "", (short)-1) {
        @Override
        public String $call$(java.lang.Object str) {
            return instance(trimTrailing(((String)str).value, RETURNS));
        }
    };
   
    private static Callable<String> CONCAT_LINES_WITH_BREAKS =
    new AbstractCallable<String>($TypeDescriptor$,
            TypeDescriptor.klass(Tuple.class,
                    TypeDescriptor.klass(Sequence.class,$TypeDescriptor$),
                    TypeDescriptor.klass(Sequence.class,$TypeDescriptor$),
                    Empty.$TypeDescriptor$),
                "", (short)-1) {
        @Override
        public String $call$(java.lang.Object seq) {
            @SuppressWarnings("unchecked")
            Sequence<? extends String> strings =
                    (Sequence<? extends String>) seq;
            java.lang.String str = strings.getFirst().value;
            if (strings.getSize()>1) {
                str +=  strings.getFromFirst(1).value;
            }
            return instance(str);
        }
    };
   
    @TypeInfo("ceylon.language::Iterable<ceylon.language::String>")
    @Transient
    public Iterable<? extends String, ?> getLines() {
        return split(NEWLINES, true, false).map($TypeDescriptor$, TRIM_RETURNS);
    }

    @Ignore
    public static Iterable<? extends String, ?>
    getLines(java.lang.String value) {
        return split(value, NEWLINES, true, false).map($TypeDescriptor$, TRIM_RETURNS);
    }

    @TypeInfo("ceylon.language::Iterable<ceylon.language::String>")
    @Transient
    public Iterable<? extends String, ?> getLinesWithBreaks() {
        return split(NEWLINES, false, false).partition(2)
                .map($TypeDescriptor$, CONCAT_LINES_WITH_BREAKS);
    }

    @Ignore
    public static Iterable<? extends String, ?>
    getLinesWithBreaks(java.lang.String value) {
        return split(value, NEWLINES, false, false).partition(2)
                .map($TypeDescriptor$, CONCAT_LINES_WITH_BREAKS);
    }

    @Ignore
    public static Iterable<? extends Integer, ?>
    occurrences(java.lang.String value, java.lang.Object element) {
        return instance(value).occurrences(element);
    }

    @Override
    public String $clone() {
        return this;
    }

    @Ignore
    public static java.lang.String $clone(java.lang.String value) {
        return value;
    }

    @Ignore
    public static <Result> Iterable<? extends Result, ?>
    map(@Ignore TypeDescriptor $reifiedResult, java.lang.String value,
            Callable<? extends Result> f) {
        return instance(value).map($reifiedResult, f);
    }

    @Ignore
    public static Sequential<? extends Character>
    select(java.lang.String value,
            Callable<? extends Boolean> f) {
        return instance(value).select(f);
    }

    @Transient
    @Override
    public String getCoalesced() {
        return this; //Can't have null characters
    }

    @Ignore
    public static java.lang.String
    getCoalesced(java.lang.String value) {
        return value;
    }

    @Override @Ignore
    public <Default> Iterable<?,?>
    defaultNullElements(@Ignore TypeDescriptor $reifiedDefault,
            Default defaultValue) {
        return this;
    }

    @Ignore
    public static <Default> Iterable<?,?>
    defaultNullElements(@Ignore TypeDescriptor $reifiedDefault,
            java.lang.String string, Default defaultValue) {
        return instance(string);
    }

    @Override
    public String getRest() {
        return value.isEmpty() ? this :
            instance(value.substring(value.offsetByCodePoints(0, 1)));
    }

    @Ignore
    public static java.lang.String getRest(java.lang.String value) {
        return value.isEmpty() ? "" :
            value.substring(value.offsetByCodePoints(0, 1));
    }
   
    @Ignore
    public static Iterable<? extends Character,?>
    getExceptLast(java.lang.String value) {
      return instance(value).getExceptLast();
    }

    @Override
    @TypeInfo("ceylon.language::Null|ceylon.language::Character")
    public Character getFirst() {
        return getFirst(value);
    }

    @Ignore
    public static Character getFirst(java.lang.String value) {
        if (value.isEmpty()) {
            return null;
        } else {
            return Character.instance(value.codePointAt(0));
        }
    }

    @Override
    @TypeInfo("ceylon.language::Null|ceylon.language::Character")
    public Character getLast() {
        return getLast(value);
    }

    @Ignore
    public static Character getLast(java.lang.String value) {
        if (value.isEmpty()) {
            return null;
        } else {
            return Character.instance(value.codePointBefore(value.length()));
        }
    }

    @Ignore
    public static Sequential<? extends Character>
    sequence(java.lang.String value) {
        return instance(value).sequence();
    }

    @Ignore
    public static Character find(java.lang.String value,
            Callable<? extends Boolean> f) {
        if (value.isEmpty()) {
            return null;
        } else {
            return instance(value).find(f);
        }
    }

    @Ignore
    public static Character findLast(java.lang.String value,
            Callable<? extends Boolean> f) {
        if (value.isEmpty()) {
            return null;
        } else {
            return instance(value).findLast(f);
        }
    }

    @SuppressWarnings({ "unchecked", "rawtypes" })
    @Ignore
    public static Sequential<? extends Character>
    sort(java.lang.String value, Callable<? extends Comparison> f) {
        if (value.isEmpty()) {
            return (Sequential)empty_.get_();
        } else {
            return instance(value).sort(f);
        }
    }
   
    @Ignore
    public static Character max(java.lang.String value,
            Callable<? extends Comparison> comparing) {
        return instance(value).max(comparing);
    }

    @Ignore
    public static Iterable<? extends Integer, ?>
    indexesWhere(java.lang.String value, Callable<? extends Boolean> f) {
        return instance(value).indexesWhere(f);
    }
   
    @Ignore
    public static Integer
    firstIndexWhere(java.lang.String value, Callable<? extends Boolean> f) {
        return instance(value).firstIndexWhere(f);
    }
   
    @Ignore
    public static Integer
    lastIndexWhere(java.lang.String value, Callable<? extends Boolean> f) {
        return instance(value).lastIndexWhere(f);
    }
   
    @Ignore
    public static Iterable<? extends Character, ?>
    filter(java.lang.String value, Callable<? extends Boolean> f) {
        return instance(value).filter(f);
    }

    @Ignore
    public static <Result> Sequential<? extends Result>
    collect(@Ignore TypeDescriptor $reifiedResult,
            java.lang.String value, Callable<? extends Result> f) {
        return instance(value).collect($reifiedResult, f);
    }

    @Ignore
    public static <Result> Callable<? extends Result>
    fold(@Ignore TypeDescriptor $reifiedResult,
            java.lang.String value, Result ini) {
        return instance(value).fold($reifiedResult, ini);
    }
   
    @Ignore
    public static <Result>
    Callable<? extends Iterable<? extends Result,? extends java.lang.Object>>
    scan(@Ignore TypeDescriptor $reifiedResult,
            java.lang.String value, Result ini) {
        return instance(value).scan($reifiedResult, ini);
    }
   
    @Ignore
    public static <Result> java.lang.Object
    reduce(@Ignore TypeDescriptor $reifiedResult,
            java.lang.String value, Callable<? extends Result> f) {
        if (value.isEmpty()) {
            return null;
        } else {
            return instance(value).reduce($reifiedResult, f);
        }
    }

    @Ignore
    public static boolean any(java.lang.String value,
            Callable<? extends Boolean> f) {
        if (value.isEmpty()) {
            return false;
        } else {
            return instance(value).any(f);
        }
    }

    @Ignore
    public static boolean every(java.lang.String value,
            Callable<? extends Boolean> f) {
        if (value.isEmpty()) {
            return true;
        } else {
            return instance(value).every(f);
        }
    }

    @Ignore
    public static Iterable<? extends Character, ?>
    skip(java.lang.String value, long skip) {
        return instance(value).skip(skip);
    }
   
    @Ignore
    public static Iterable<? extends Character, ?>
    take(java.lang.String value, long take) {
        return instance(value).take(take);
    }
   
    @Ignore
    public static Iterable<? extends Character, ?>
    takeWhile(java.lang.String value, Callable<? extends Boolean> take) {
        return instance(value).takeWhile(take);
    }
   
    @Ignore
    public static Iterable<? extends Character, ?>
    skipWhile(java.lang.String value, Callable<? extends Boolean> skip) {
        return instance(value).skipWhile(skip);
    }
   
    @Ignore
    public static Iterable<? extends Character, ?>
    by(java.lang.String value, long step) {
        return instance(value).by(step);
    }

    @Ignore
    public static long count(java.lang.String value,
            Callable<? extends Boolean> f) {
        if (value.isEmpty()) {
            return 0;
        } else {
            return instance(value).count(f);
        }
    }

    @Ignore
    @SuppressWarnings({"unchecked", "rawtypes"})
    public static Iterable<? extends Entry<? extends Integer, ? extends Character>, ?>
    getIndexed(java.lang.String value) {
        if (value.isEmpty()) {
            return (Iterable) instance(value);
        } else {
            return instance(value).getIndexed();
        }
    }

    @Ignore
    @SuppressWarnings("rawtypes")
    public static <Other,Absent> Iterable
    chain(@Ignore TypeDescriptor $reifiedOther,
            @Ignore TypeDescriptor $reifiedOtherAbsent,
            java.lang.String value,
            Iterable<? extends Other, ? extends Absent> other) {
        if (value.isEmpty()) {
            return other;
        }
        else {
            return instance(value).chain($reifiedOther,
                    $reifiedOtherAbsent, other);
        }
    }
   
    @Ignore
    @SuppressWarnings("rawtypes")
    public static <Other> Iterable
    follow(@Ignore TypeDescriptor $reifiedOther,
            java.lang.String value, Other other) {
        return instance(value).follow($reifiedOther, other);   
    }
   
    @Ignore
    public static <Other> Iterable<? extends java.lang.Object, ? extends java.lang.Object>
    interpose(@Ignore TypeDescriptor $reifiedOther,
            java.lang.String value, Other other) {
        return instance(value).interpose($reifiedOther, other);   
    }
   
    @Ignore
    @SuppressWarnings("rawtypes")
    public static <Other> Iterable
    interpose(@Ignore TypeDescriptor $reifiedOther,
            java.lang.String value, Other other, long step) {
        return instance(value).interpose($reifiedOther, other, step);   
    }
   
    @Ignore
    @SuppressWarnings("rawtypes")
    public static <Other, OtherAbsent> Iterable
    product(@Ignore TypeDescriptor $reified$Other,
            @Ignore TypeDescriptor $reified$OtherAbsent,
            java.lang.String value,
            Iterable<? extends Other, ? extends OtherAbsent> other) {
        return instance(value).product($reified$Other, $reified$OtherAbsent, other);
    }
   
    @Ignore @SuppressWarnings({ "rawtypes" })
    public static <Other>List patch(@Ignore TypeDescriptor $reifiedOther,
            java.lang.String value, List<? extends Other> list, long from, long length) {
        return instance(value).patch($reifiedOther, list, from, length);
    }

    @Ignore @SuppressWarnings({ "rawtypes" })
    public static <Other>List patch(@Ignore TypeDescriptor $reifiedOther,
            java.lang.String value, List<? extends Other> list, long from) {
        return instance(value).patch($reifiedOther, list, from, 0);
    }

    @Ignore
    public static Iterable<? extends Character,?>
    getCycled(java.lang.String value) {
        return instance(value).getCycled();
    }
   
    @Override
    @Ignore
    public TypeDescriptor $getType$() {
        return $TypeDescriptor$;
    }

    public static boolean largerThan(java.lang.String value,
            String other) {
        return value.compareTo(other.value)>0;
    }

    public static boolean largerThan(java.lang.String value,
                java.lang.String other) {
        return value.compareTo(other)>0;
    }
   
    @Override
    public boolean largerThan(@Name("other") String other) {
        return value.compareTo(other.value)>0;
    }

    public static boolean notSmallerThan(java.lang.String value,
            String other) {
        return value.compareTo(other.value)>=0;
    }

    public static boolean notSmallerThan(java.lang.String value,
                java.lang.String other) {
        return value.compareTo(other)>=0;
    }

    @Override
    public boolean notSmallerThan(@Name("other") String other) {
        return value.compareTo(other.value)>=0;
    }

    public static boolean smallerThan(java.lang.String value,
            String other) {
        return value.compareTo(other.value)<0;
    }

    public static boolean smallerThan(java.lang.String value,
                java.lang.String other) {
        return value.compareTo(other)<0;
    }

    @Override
    public boolean smallerThan(@Name("other") String other) {
        return value.compareTo(other.value)<0;
    }

    public static boolean notLargerThan(java.lang.String value,
            String other) {
        return value.compareTo(other.value)<=0;
    }

    public static boolean notLargerThan(java.lang.String value,
                java.lang.String other) {
        return value.compareTo(other)<=0;
    }

    @Override
    public boolean notLargerThan(@Name("other") String other) {
        return value.compareTo(other.value)<=0;
    }

    @Ignore
    public static <Result,Args extends Sequential<? extends java.lang.Object>> Callable<? extends Iterable<? extends Result, ?>>
    spread(@Ignore TypeDescriptor $reifiedResult,
          @Ignore TypeDescriptor $reifiedArgs,
          java.lang.String value, Callable<? extends Callable<? extends Result>> method) {
        return instance(value).spread($reifiedResult, $reifiedArgs, method);
    }
   
    public java.lang.String pad(
            @Name("size")
            long size,
            @Name("character")
            @TypeInfo("ceylon.language::Character")
            @Defaulted
            int character) {
        return pad(value, size, character);
    }
   
    @Ignore
    public java.lang.String pad(long size) {
        return pad(value, size, pad$character(size));
    }
   
    @Ignore
    public static java.lang.String pad(java.lang.String value, long size) {
        return pad(value, size, pad$character(size));
    }
   
    @Ignore
    public static int pad$character(long size) {
        return ' ';
    }
   
    @Ignore
    public static java.lang.String pad(java.lang.String value, long size, int character) {
        int length = value.length();
        if (size<=length) return value;
        long leftPad = (size-length)/2;
        long rightPad = leftPad + (size-length)%2;
        java.lang.StringBuilder builder = new java.lang.StringBuilder();
        for (int i=0;i<leftPad;i++) {
            builder.appendCodePoint(character);
        }
        builder.append(value);
        for (int i=0;i<rightPad;i++) {
            builder.appendCodePoint(character);
        }
        return builder.toString();
    }
   
    public java.lang.String padLeading(
            @Name("size")
            long size,
            @Name("character")
            @TypeInfo("ceylon.language::Character")
            @Defaulted
            int character) {
        return padLeading(value, size, character);
    }
   
    @Ignore
    public java.lang.String padLeading(long size) {
        return padLeading(value, size, padLeading$character(size));
    }
   
    @Ignore
    public static java.lang.String padLeading(java.lang.String value, long size) {
        return padLeading(value, size, padLeading$character(size));
    }
   
    @Ignore
    public static int padLeading$character(long size) {
        return ' ';
    }
   
    @Ignore
    public static java.lang.String padLeading(java.lang.String value, long size, int character) {
        int length = value.length();
        if (size<=length) return value;
        long leftPad = size-length;
        java.lang.StringBuilder builder = new java.lang.StringBuilder();
        for (int i=0;i<leftPad;i++) {
            builder.appendCodePoint(character);
        }
        builder.append(value);
        return builder.toString();
    }
   
    public java.lang.String padTrailing(
            @Name("size")
            long size,
            @Name("character")
            @TypeInfo("ceylon.language::Character")
            @Defaulted
            int character) {
        return padTrailing(value, size, character);
    }
   
    @Ignore
    public java.lang.String padTrailing(long size) {
        return padTrailing(value, size, padTrailing$character(size));
    }
   
    @Ignore
    public static java.lang.String padTrailing(java.lang.String value, long size) {
        return padTrailing(value, size, padTrailing$character(size));
    }
   
    @Ignore
    public static int padTrailing$character(long size) {
        return ' ';
    }
   
    @Ignore
    public static java.lang.String padTrailing(java.lang.String value, long size, int character) {
        int length = value.length();
        if (size<=length) return value;
        long rightPad = size-length;
        java.lang.StringBuilder builder = new java.lang.StringBuilder(value);
        for (int i=0;i<rightPad;i++) {
            builder.appendCodePoint(character);
        }
        return builder.toString();
    }
   
    @Ignore
    @SuppressWarnings("rawtypes")
    @TypeInfo("ceylon.language::Iterable<ceylon.language::Character,ceylon.language::Character,ceylon.language::Tuple<ceylon.language::Tuple<ceylon.language::Character,ceylon.language::Character,ceylon.language::Empty>>>")
    public static Iterable getPaired(java.lang.String value) {
        return instance(value).getPaired();
    }
   
    @Ignore
    public static Iterable<? extends Sequence<? extends Character>,? extends java.lang.Object>
    partition(java.lang.String value, long length) {
      return instance(value).partition(length);
    }
   
}
TOP

Related Classes of ceylon.language.String

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.