|  |  |  | @ -13,64 +13,77 @@ object ChapterProvider { | 
			
		
	
		
			
				
					|  |  |  |  |     var readAloudSpan = ForegroundColorSpan(App.INSTANCE.accentColor) | 
			
		
	
		
			
				
					|  |  |  |  |     private val titleSpan = RelativeSizeSpan(1.2f) | 
			
		
	
		
			
				
					|  |  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |  |     var textView: ContentTextView? = null | 
			
		
	
		
			
				
					|  |  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |  |     fun getTextChapter( | 
			
		
	
		
			
				
					|  |  |  |  |         textView: ContentTextView, bookChapter: BookChapter, | 
			
		
	
		
			
				
					|  |  |  |  |         bookChapter: BookChapter, | 
			
		
	
		
			
				
					|  |  |  |  |         content: String, chapterSize: Int | 
			
		
	
		
			
				
					|  |  |  |  |     ): TextChapter { | 
			
		
	
		
			
				
					|  |  |  |  |         val textPages = arrayListOf<TextPage>() | 
			
		
	
		
			
				
					|  |  |  |  |         val pageLines = arrayListOf<Int>() | 
			
		
	
		
			
				
					|  |  |  |  |         val pageLengths = arrayListOf<Int>() | 
			
		
	
		
			
				
					|  |  |  |  |         var surplusText = content | 
			
		
	
		
			
				
					|  |  |  |  |         var pageIndex = 0 | 
			
		
	
		
			
				
					|  |  |  |  |         while (surplusText.isNotEmpty()) { | 
			
		
	
		
			
				
					|  |  |  |  |             val spannableStringBuilder = SpannableStringBuilder(surplusText) | 
			
		
	
		
			
				
					|  |  |  |  |             if (pageIndex == 0) { | 
			
		
	
		
			
				
					|  |  |  |  |                 val end = surplusText.indexOf("\n") | 
			
		
	
		
			
				
					|  |  |  |  |                 if (end > 0) { | 
			
		
	
		
			
				
					|  |  |  |  |                     spannableStringBuilder.setSpan( | 
			
		
	
		
			
				
					|  |  |  |  |                         titleSpan, | 
			
		
	
		
			
				
					|  |  |  |  |                         0, | 
			
		
	
		
			
				
					|  |  |  |  |                         end, | 
			
		
	
		
			
				
					|  |  |  |  |                         Spannable.SPAN_INCLUSIVE_EXCLUSIVE | 
			
		
	
		
			
				
					|  |  |  |  |         textView?.let { | 
			
		
	
		
			
				
					|  |  |  |  |             val textPages = arrayListOf<TextPage>() | 
			
		
	
		
			
				
					|  |  |  |  |             val pageLines = arrayListOf<Int>() | 
			
		
	
		
			
				
					|  |  |  |  |             val pageLengths = arrayListOf<Int>() | 
			
		
	
		
			
				
					|  |  |  |  |             var surplusText = content | 
			
		
	
		
			
				
					|  |  |  |  |             var pageIndex = 0 | 
			
		
	
		
			
				
					|  |  |  |  |             while (surplusText.isNotEmpty()) { | 
			
		
	
		
			
				
					|  |  |  |  |                 val spannableStringBuilder = SpannableStringBuilder(surplusText) | 
			
		
	
		
			
				
					|  |  |  |  |                 if (pageIndex == 0) { | 
			
		
	
		
			
				
					|  |  |  |  |                     val end = surplusText.indexOf("\n") | 
			
		
	
		
			
				
					|  |  |  |  |                     if (end > 0) { | 
			
		
	
		
			
				
					|  |  |  |  |                         spannableStringBuilder.setSpan( | 
			
		
	
		
			
				
					|  |  |  |  |                             titleSpan, | 
			
		
	
		
			
				
					|  |  |  |  |                             0, | 
			
		
	
		
			
				
					|  |  |  |  |                             end, | 
			
		
	
		
			
				
					|  |  |  |  |                             Spannable.SPAN_INCLUSIVE_EXCLUSIVE | 
			
		
	
		
			
				
					|  |  |  |  |                         ) | 
			
		
	
		
			
				
					|  |  |  |  |                     } | 
			
		
	
		
			
				
					|  |  |  |  |                 } | 
			
		
	
		
			
				
					|  |  |  |  |                 it.text = spannableStringBuilder | 
			
		
	
		
			
				
					|  |  |  |  |                 val lastLine = it.getLineNum() | 
			
		
	
		
			
				
					|  |  |  |  |                 val lastCharNum = it.getCharNum(lastLine) | 
			
		
	
		
			
				
					|  |  |  |  |                 if (lastCharNum == 0) { | 
			
		
	
		
			
				
					|  |  |  |  |                     break | 
			
		
	
		
			
				
					|  |  |  |  |                 } else { | 
			
		
	
		
			
				
					|  |  |  |  |                     pageLines.add(lastLine) | 
			
		
	
		
			
				
					|  |  |  |  |                     pageLengths.add(lastCharNum) | 
			
		
	
		
			
				
					|  |  |  |  |                     textPages.add( | 
			
		
	
		
			
				
					|  |  |  |  |                         TextPage( | 
			
		
	
		
			
				
					|  |  |  |  |                             index = pageIndex, | 
			
		
	
		
			
				
					|  |  |  |  |                             text = spannableStringBuilder.delete( | 
			
		
	
		
			
				
					|  |  |  |  |                                 lastCharNum, | 
			
		
	
		
			
				
					|  |  |  |  |                                 spannableStringBuilder.length | 
			
		
	
		
			
				
					|  |  |  |  |                             ), | 
			
		
	
		
			
				
					|  |  |  |  |                             title = bookChapter.title, | 
			
		
	
		
			
				
					|  |  |  |  |                             chapterSize = chapterSize, | 
			
		
	
		
			
				
					|  |  |  |  |                             chapterIndex = bookChapter.index | 
			
		
	
		
			
				
					|  |  |  |  |                         ) | 
			
		
	
		
			
				
					|  |  |  |  |                     ) | 
			
		
	
		
			
				
					|  |  |  |  |                     surplusText = surplusText.substring(lastCharNum) | 
			
		
	
		
			
				
					|  |  |  |  |                     pageIndex++ | 
			
		
	
		
			
				
					|  |  |  |  |                 } | 
			
		
	
		
			
				
					|  |  |  |  |             } | 
			
		
	
		
			
				
					|  |  |  |  |             textView.text = spannableStringBuilder | 
			
		
	
		
			
				
					|  |  |  |  |             val lastLine = textView.getLineNum() | 
			
		
	
		
			
				
					|  |  |  |  |             val lastCharNum = textView.getCharNum(lastLine) | 
			
		
	
		
			
				
					|  |  |  |  |             if (lastCharNum == 0) { | 
			
		
	
		
			
				
					|  |  |  |  |                 break | 
			
		
	
		
			
				
					|  |  |  |  |             } else { | 
			
		
	
		
			
				
					|  |  |  |  |                 pageLines.add(lastLine) | 
			
		
	
		
			
				
					|  |  |  |  |                 pageLengths.add(lastCharNum) | 
			
		
	
		
			
				
					|  |  |  |  |                 textPages.add( | 
			
		
	
		
			
				
					|  |  |  |  |                     TextPage( | 
			
		
	
		
			
				
					|  |  |  |  |                         index = pageIndex, | 
			
		
	
		
			
				
					|  |  |  |  |                         text = spannableStringBuilder.delete( | 
			
		
	
		
			
				
					|  |  |  |  |                             lastCharNum, | 
			
		
	
		
			
				
					|  |  |  |  |                             spannableStringBuilder.length | 
			
		
	
		
			
				
					|  |  |  |  |                         ), | 
			
		
	
		
			
				
					|  |  |  |  |                         title = bookChapter.title, | 
			
		
	
		
			
				
					|  |  |  |  |                         chapterSize = chapterSize, | 
			
		
	
		
			
				
					|  |  |  |  |                         chapterIndex = bookChapter.index | 
			
		
	
		
			
				
					|  |  |  |  |                     ) | 
			
		
	
		
			
				
					|  |  |  |  |                 ) | 
			
		
	
		
			
				
					|  |  |  |  |                 surplusText = surplusText.substring(lastCharNum) | 
			
		
	
		
			
				
					|  |  |  |  |                 pageIndex++ | 
			
		
	
		
			
				
					|  |  |  |  |             for (item in textPages) { | 
			
		
	
		
			
				
					|  |  |  |  |                 item.pageSize = textPages.size | 
			
		
	
		
			
				
					|  |  |  |  |             } | 
			
		
	
		
			
				
					|  |  |  |  |         } | 
			
		
	
		
			
				
					|  |  |  |  |         for (item in textPages) { | 
			
		
	
		
			
				
					|  |  |  |  |             item.pageSize = textPages.size | 
			
		
	
		
			
				
					|  |  |  |  |         } | 
			
		
	
		
			
				
					|  |  |  |  |         return TextChapter( | 
			
		
	
		
			
				
					|  |  |  |  |             return TextChapter( | 
			
		
	
		
			
				
					|  |  |  |  |                 bookChapter.index, | 
			
		
	
		
			
				
					|  |  |  |  |                 bookChapter.title, | 
			
		
	
		
			
				
					|  |  |  |  |                 bookChapter.url, | 
			
		
	
		
			
				
					|  |  |  |  |                 textPages, | 
			
		
	
		
			
				
					|  |  |  |  |                 pageLines, | 
			
		
	
		
			
				
					|  |  |  |  |                 pageLengths, | 
			
		
	
		
			
				
					|  |  |  |  |                 chapterSize | 
			
		
	
		
			
				
					|  |  |  |  |             ) | 
			
		
	
		
			
				
					|  |  |  |  |         } ?: return TextChapter( | 
			
		
	
		
			
				
					|  |  |  |  |             bookChapter.index, | 
			
		
	
		
			
				
					|  |  |  |  |             bookChapter.title, | 
			
		
	
		
			
				
					|  |  |  |  |             bookChapter.url, | 
			
		
	
		
			
				
					|  |  |  |  |             textPages, | 
			
		
	
		
			
				
					|  |  |  |  |             pageLines, | 
			
		
	
		
			
				
					|  |  |  |  |             pageLengths, | 
			
		
	
		
			
				
					|  |  |  |  |             arrayListOf(), | 
			
		
	
		
			
				
					|  |  |  |  |             arrayListOf(), | 
			
		
	
		
			
				
					|  |  |  |  |             arrayListOf(), | 
			
		
	
		
			
				
					|  |  |  |  |             chapterSize | 
			
		
	
		
			
				
					|  |  |  |  |         ) | 
			
		
	
		
			
				
					|  |  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |  |     } | 
			
		
	
		
			
				
					|  |  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |  |     fun upReadAloudSpan() { | 
			
		
	
	
		
			
				
					|  |  |  | 
 |