package com.akjava.gwt.markdowneditor.client; import com.google.common.base.Ascii; import com.google.common.base.Predicate; public class MarkdownPredicates { public static TitleLinePredicate getTitleLinePredicate(){ return TitleLinePredicate.INSTANCE; } public enum TitleLinePredicate implements Predicate<String>{ INSTANCE; @Override public boolean apply(String input) { if(input.isEmpty()||input.length()<2){ return false; } int ch=input.charAt(0); if(ch!='-' && ch!='='){ return false; } for(int i=1;i<input.length();i++){ if(input.charAt(i)==Ascii.LF){ continue;//usually end? } if(input.charAt(i)!=ch){ return false; } } return true; } } public static StartWithTitleLinePredicate getStartWithTitleLinePredicate(){ return StartWithTitleLinePredicate.INSTANCE; } public enum StartWithTitleLinePredicate implements Predicate<String>{ INSTANCE; @Override public boolean apply(String input) { return input.startsWith("#"); } } public static StartWithTitle1OrTitle2Predicate getStartWithTitle1OrTitle2Predicate(){ return StartWithTitle1OrTitle2Predicate.INSTANCE; } public enum StartWithTitle1OrTitle2Predicate implements Predicate<String>{ INSTANCE; @Override public boolean apply(String input) { if(input.indexOf("|")!=-1){ return false; } return input.startsWith("===") || input.startsWith("---") ; } } public static TableLinePredicate getTableLinePredicate(){ return TableLinePredicate.INSTANCE; } public enum TableLinePredicate implements Predicate<String>{ INSTANCE; @Override public boolean apply(String input) { input=input.trim(); boolean containA=false; boolean containB=false; for(int i=0;i<input.length();i++){ char ch=input.charAt(i); if(ch=='|'){ containA=true; }else if(ch=='-'){ containB=true; }else{ return false; } } return containA&&containB; } } }