| 
						
						
							
								
							
						
						
					 | 
					 | 
					@ -10,8 +10,10 @@ import io.legado.app.help.BookHelp | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					import io.legado.app.model.Debug | 
					 | 
					 | 
					 | 
					import io.legado.app.model.Debug | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					import io.legado.app.model.analyzeRule.AnalyzeRule | 
					 | 
					 | 
					 | 
					import io.legado.app.model.analyzeRule.AnalyzeRule | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					import io.legado.app.model.analyzeRule.AnalyzeUrl | 
					 | 
					 | 
					 | 
					import io.legado.app.model.analyzeRule.AnalyzeUrl | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					import io.legado.app.model.analyzeRule.QueryTTF | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					import io.legado.app.utils.NetworkUtils | 
					 | 
					 | 
					 | 
					import io.legado.app.utils.NetworkUtils | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					import io.legado.app.utils.htmlFormat | 
					 | 
					 | 
					 | 
					import io.legado.app.utils.htmlFormat | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					import io.legado.app.utils.toStringArray | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					import kotlinx.coroutines.CoroutineScope | 
					 | 
					 | 
					 | 
					import kotlinx.coroutines.CoroutineScope | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					import kotlinx.coroutines.withContext | 
					 | 
					 | 
					 | 
					import kotlinx.coroutines.withContext | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					
 | 
					 | 
					 | 
					 | 
					
 | 
				
			
			
		
	
	
		
		
			
				
					| 
						
						
						
							
								
							
						
					 | 
					 | 
					@ -34,13 +36,21 @@ object BookContent { | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					        val content = StringBuilder() | 
					 | 
					 | 
					 | 
					        val content = StringBuilder() | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					        val nextUrlList = arrayListOf(baseUrl) | 
					 | 
					 | 
					 | 
					        val nextUrlList = arrayListOf(baseUrl) | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					        val contentRule = bookSource.getContentRule() | 
					 | 
					 | 
					 | 
					        val contentRule = bookSource.getContentRule() | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					        contentRule.font?.let { | 
					 | 
					 | 
					 | 
					        val analyzeRule = AnalyzeRule(book).setContent(body, baseUrl) | 
				
			
			
				
				
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					            //todo 获取字体 | 
					 | 
					 | 
					 | 
					        val fontRule = contentRule.font | 
				
			
			
				
				
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					            val analyzeRule = AnalyzeRule(book) | 
					 | 
					 | 
					 | 
					        val correctFontRule = contentRule.correctFont | 
				
			
			
				
				
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					            analyzeRule.setContent(body).setBaseUrl(baseUrl) | 
					 | 
					 | 
					 | 
					        var font: ByteArray? = null | 
				
			
			
				
				
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					            analyzeRule.getByteArray(it)?.let { font -> | 
					 | 
					 | 
					 | 
					        var correctFont: ByteArray? = null | 
				
			
			
				
				
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					                BookHelp.saveFont(book, bookChapter, font) | 
					 | 
					 | 
					 | 
					        fontRule?.let { | 
				
			
			
				
				
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					            } | 
					 | 
					 | 
					 | 
					            //todo 获取网页嵌入字体 | 
				
			
			
				
				
			
		
	
		
		
	
		
		
	
		
		
	
		
		
	
		
		
	
		
		
	
		
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					            font = analyzeRule.getByteArray(it) | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					        } | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					        correctFontRule?.let { | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					            //todo 获取正确字体 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					            correctFont = analyzeRule.getByteArray(it) | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					        } | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					        if (correctFont == null && font != null) { | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					            BookHelp.saveFont(book, bookChapter, font!!) | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					        } | 
					 | 
					 | 
					 | 
					        } | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					        var contentData = analyzeContent( | 
					 | 
					 | 
					 | 
					        var contentData = analyzeContent( | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					            book, baseUrl, body, contentRule, bookChapter, bookSource | 
					 | 
					 | 
					 | 
					            book, baseUrl, body, contentRule, bookChapter, bookSource | 
				
			
			
		
	
	
		
		
			
				
					| 
						
							
								
							
						
						
							
								
							
						
						
					 | 
					 | 
					@ -101,11 +111,20 @@ object BookContent { | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					        var contentStr = content.toString().htmlFormat() | 
					 | 
					 | 
					 | 
					        var contentStr = content.toString().htmlFormat() | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					        val replaceRegex = bookSource.ruleContent?.replaceRegex | 
					 | 
					 | 
					 | 
					        val replaceRegex = bookSource.ruleContent?.replaceRegex | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					        if (!replaceRegex.isNullOrEmpty()) { | 
					 | 
					 | 
					 | 
					        if (!replaceRegex.isNullOrEmpty()) { | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					            val analyzeRule = AnalyzeRule(book) | 
					 | 
					 | 
					 | 
					 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					            analyzeRule.setContent(contentStr).setBaseUrl(baseUrl) | 
					 | 
					 | 
					 | 
					            analyzeRule.setContent(contentStr).setBaseUrl(baseUrl) | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					            analyzeRule.chapter = bookChapter | 
					 | 
					 | 
					 | 
					            analyzeRule.chapter = bookChapter | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					            contentStr = analyzeRule.getString(replaceRegex) | 
					 | 
					 | 
					 | 
					            contentStr = analyzeRule.getString(replaceRegex) | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					        } | 
					 | 
					 | 
					 | 
					        } | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					        if (correctFont != null && font != null) { | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					            val queryTTF = QueryTTF(font!!) | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					            val cQueryTTF = QueryTTF(correctFont!!) | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					            val contentArray = contentStr.toStringArray() | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					            contentArray.forEachIndexed { index, s -> | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					                val code = cQueryTTF.getCodeByGlyf(queryTTF.getGlyfByCode(s.toInt())) | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					                contentArray[index] = code.toString() | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					            } | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					            contentStr = contentArray.joinToString("") | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					        } | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					        Debug.log(bookSource.bookSourceUrl, "┌获取章节名称") | 
					 | 
					 | 
					 | 
					        Debug.log(bookSource.bookSourceUrl, "┌获取章节名称") | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					        Debug.log(bookSource.bookSourceUrl, "└${bookChapter.title}") | 
					 | 
					 | 
					 | 
					        Debug.log(bookSource.bookSourceUrl, "└${bookChapter.title}") | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					        Debug.log(bookSource.bookSourceUrl, "┌获取正文内容") | 
					 | 
					 | 
					 | 
					        Debug.log(bookSource.bookSourceUrl, "┌获取正文内容") | 
				
			
			
		
	
	
		
		
			
				
					| 
						
							
								
							
						
						
						
					 | 
					 | 
					
  |